Commit 520f210a authored by Jérémie Passerat's avatar Jérémie Passerat

Tests tags ok

parent 74a34fc7
......@@ -424,13 +424,13 @@ class get_tags_contenu(Resource):
## récupérer les tags d'un contenu
@jwt_required()
def get(self, id_contenu):
id_tiers = json.loads(request.json["id_tiers"])
return json.loads(json.dumps(list(contenu_dao.get_tags_contenu(id_tiers["$oid"])),
id_contenu = json.loads(id_contenu)
return json.loads(json.dumps(list(contenu_dao.get_tags_contenu(id_contenu["$oid"])),
default=json_util.default)), 200
@contenus.route("/modifierTags")
@contenus.doc(params={'id_publication': "l'id du contenu pour lequel on veut récupérer des tags"})
@contenus.doc(params={'id_contenu': "l'id du contenu pour lequel on veut récupérer des tags"})
@contenus.doc(params={'tags': "les nouveaux tags du contenu"})
@contenus.doc(description="modifier les tags d'un contenu")
class modifier_tags_contenus(Resource):
......@@ -445,7 +445,6 @@ class modifier_tags_contenus(Resource):
@contenus.route("/newTagLibre")
@contenus.doc(params={'auteur': "le créateur du tag"})
@contenus.doc(params={'id_contenu': "le contenu auquel le tag est associé. Possiblement vide"})
@contenus.doc(params={'tag': "Le tag créé"})
@contenus.doc(description="ajouter un tag libre")
class ajouter_tag_libre(Resource):
......@@ -453,12 +452,9 @@ class ajouter_tag_libre(Resource):
## ajouter un tag libre (lié à un contenu ou non)
@jwt_required()
def patch(self):
if request.json['id_contenu'] != "":
id_contenu = json.loads(request.json["id_contenu"])
id_contenu = id_contenu["$oid"]
else:
id_contenu = ""
ContenuDao().creer_tag_libre(request.json["auteur"], request.json["tag"], id_contenu)
id_contenu = ""
ContenuDao().creer_tag_libre(request.json["auteur"], request.json["tag"])
return "tag créé", 201
......@@ -497,7 +493,7 @@ class associer_tag_libre(Resource):
def patch(self):
id_contenu = json.loads(request.json["id_contenu"])
ContenuDao().associer_tag_libre(request.json["auteur"], request.json["tag"], id_contenu["$oid"])
return "tag associe", 200
return "tag associe", 201
@contenus.route("/dissocierTagLibre")
......@@ -511,7 +507,7 @@ class dissocier_tag_libre(Resource):
def patch(self):
id_contenu = json.loads(request.json["id_contenu"])
ContenuDao().dissocier_tag_libre(request.json["auteur"], request.json["tag"], id_contenu["$oid"])
return "tag dissocié", 200
return "tag dissocié", 201
@contenus.route("/supprimerTagLibre")
......
......@@ -218,8 +218,6 @@ class ContenuDao:
def supprimer_contenu(self, id_contenu):
import shutil
if self.existe_en_tiers(id_contenu) != 0:
self.dissocier_contenu(id_contenu)
......@@ -236,7 +234,6 @@ class ContenuDao:
# @param la note associee au contenu
def supprimer_tiers(self, id_tiers, auteur, version, note):
# on distingue le cas ou une note a été donnée ou non
if note == "-":
self.base_donnees.utilisateur.update({"nom": auteur},
......@@ -500,20 +497,43 @@ class ContenuDao:
# @param id_contenu l'id du contenu concerné
# @return les tags associés au contenu
def get_tags_contenu(self, id_contenu):
return self.base_donnees.contenu.find({"_id": ObjectId(id_contenu)})["tags_fixes"]
return self.base_donnees.contenu.find_one({"_id": ObjectId(id_contenu)})["tags_fixes"]
## Mise à jour des tags associés au contenu
## Mise à jour des tags fixes associés au contenu
# @param id_contenu l'id du contenu concerné
# @param tags les nouveaux tags
def changer_tags_contenus(self, id_contenu, tags):
ancien_chemin = self.get_chemin_du_contenu(id_contenu)
# on modifie les tags
self.base_donnees.contenu.update({"_id": ObjectId(id_contenu)}, {"$set": {"tags_fixes": tags}})
# et le chemin du fichier
chemin_tags = '/'.join(tags) + "/"
# mettre a jour le chemin du contenu
self.base_donnees.contenu.update_one({"_id": ObjectId(id_contenu)},
{"$set": {"fichier": chemin_tags + id_contenu + "/" + id_contenu}})
# print(self.get_chemin_du_contenu(id_contenu))
Path(self.chemin + chemin_tags + id_contenu + "/").mkdir(0o777, parents=True, exist_ok=True)
print(ancien_chemin[:ancien_chemin.rfind("/")])
print(ancien_chemin[:ancien_chemin.rfind("/") + 1])
Path(ancien_chemin).rename(self.get_chemin_du_contenu(id_contenu))
self.rm_tree(Path(ancien_chemin[:ancien_chemin.rfind("/") + 1]))
# Path(ancien_chemin[:ancien_chemin.rfind("/") + 1]).rmdir()
## Fonction utilitaire -> supprimer un repertoire
# @param path le chemin du repertoire
def rm_tree(self, pth):
for child in pth.iterdir():
if child.is_file():
child.unlink()
else:
self.rm_tree(child)
pth.rmdir()
## Modification d'un titre d'un contenu personnel
# @param id_en_cours l'id du contenu
# @param nouveau_titre le titre à changer
......@@ -524,13 +544,11 @@ class ContenuDao:
# @param auteur l'auteur du nouveau tag
# @param tag le tag créé
# @param id_contenu l'id du contenu associé (potentiellement vide)
def creer_tag_libre(self, auteur, tag, id_contenu):
contenus = list()
if id_contenu != "":
contenus.append(ObjectId(id_contenu))
def creer_tag_libre(self, auteur, tag):
self.base_donnees.utilisateur.update({"nom": auteur}, {
"$push": {
"tags": [{"tag": tag}, {"contenu": contenus}]}})
"tags": [{"tag": tag}, {"contenus": []}]}})
## Fonction permettant de supprimer un tag libre
# @param auteur l'auteur du nouveau tag
......@@ -561,7 +579,7 @@ class ContenuDao:
# on parcourt chaque tag et on vire les mentions à id_contenu
for tag in tags:
if tag[0]['tag'] == mon_tag:
tag[1]['contenu'].remove(ObjectId(id_contenu))
tag[1]['contenus'].remove(ObjectId(id_contenu))
self.base_donnees.utilisateur.update({"nom": auteur}, {"$set": {"tags": tags}})
## Fonction permettant d'associer un contenu à un tag libre
......@@ -576,7 +594,7 @@ class ContenuDao:
# on parcourt chaque tag et on vire les mentions à id_contenu
for letag in tags:
if letag[0]['tag'] == tag:
letag[1]['contenu'].append(ObjectId(id_contenu))
letag[1]['contenus'].append(ObjectId(id_contenu))
# print(letag[1]['contenu'], type(letag[1]['contenu']))
# for contenu_associe in letag[1]:
# print(contenu_associe)
......@@ -601,7 +619,7 @@ class ContenuDao:
tags = self.base_donnees.utilisateur.find_one({"nom": auteur})["tags"]
tags_auteur = list()
for f in tags:
for cont in f[1]['contenu']:
for cont in f[1]['contenus']:
if cont == ObjectId(id_contenu):
tags_auteur.append(f[0]['tag'])
return tags_auteur
......
from testUtils import *
#
# def test_contenu(client):
# login = creerUtilisateurRandom(client)
# id = creerContenuRandom(client, login)
#
# # get contenu par id
# rv = client.get("/contenus/getContenu/" + json.dumps(id), headers=get_headers(client))
# assert rv.status_code == 200
# # on récupère le texte
# rv = client.get("/contenus/getTexteContenu/" + json.dumps(id), headers=get_headers(client))
# assert rv.status_code == 200
# assert "Texte du contenu" == json.loads(rv.data)
# # on créée un tiers avec Jacques
# # pprint("id : ", id["$oid"])
# loginDeux = creerUtilisateurRandom(client)
# data = {"id_tiers": json.dumps(id), "auteur": loginDeux, "version": 1}
# rv = client.patch("/contenus/ajouterTiers", json=data, headers=get_headers(client))
# assert rv.status_code == 201
#
# # get Contenu Panier (chez Charles)
# rv = client.get("/contenus/getContenuPanier/" + login + "?perso=True&tiers=True&en_cours=True",
# headers=get_headers(client))
# assert rv.status_code == 200
# assert len(json.loads(rv.data)) == 1
#
# loginTrois = creerUtilisateurRandom(client)
#
# # get Contenu Banque (chez Valery)
# rv = client.get("/contenus/getContenuBanque/" + loginTrois, headers=get_headers(client))
# assert rv.status_code == 200
# # Travaillant sur la vraie base, ce n'est pas possible de faire ce test
# # assert len(json.loads(rv.data)) == 1
# contenusBanque = len(json.loads(rv.data))
#
# # get All Contenus
# rv = client.get("/contenus/allContenus", headers=get_headers(client))
# assert rv.status_code == 200
# # Travaillant sur la vraie base, ce n'est pas possible de faire ce test
# assert len(json.loads(rv.data)) == contenusBanque
#
# # on supprime le tiers
# rv = client.delete("/contenus/deleteTiers?id_tiers=" + json.dumps(id) + "&auteur=" + loginDeux + "&note=-",
# headers=get_headers(client))
# assert rv.status_code == 200
# # on supprime le contenu perso
# rv = client.delete("/contenus/deletePerso/" + json.dumps(id), headers=get_headers(client))
# assert rv.status_code == 200
#
# # on supprime les trois utilisateurs créés
# supprimerUtilisateur(client, login)
# supprimerUtilisateur(client, loginDeux)
# supprimerUtilisateur(client, loginTrois)
#
#
# def test_supprimer_contenu_en_tiers_chez_qqun_autre(client):
# # on créée un utilisateur quelconque
# login = creerUtilisateurRandom(client)
# # on lui assigne un contenu
# id = creerContenuRandom(client, login)
#
# # on créée un second utilisateur quelconque et on lui donne le contenu ci dessus dans ses tiers
# loginDeux = creerUtilisateurRandom(client)
# data = {"id_tiers": json.dumps(id), "auteur": loginDeux, "version": 1}
# rv = client.patch("/contenus/ajouterTiers", json=data, headers=get_headers(client))
# assert rv.status_code == 201
#
# # On supprime le contenu perso de l'utilisateur 'login'
# rv = client.delete("/contenus/deletePerso/" + json.dumps(id), headers=get_headers(client))
# assert rv.status_code == 200
#
# # on vérifie le panier de l'utilisateur 'loginDeux'
# rv = client.get("/contenus/getContenuPanier/" + loginDeux + "?perso=True&tiers=True&en_cours=True",
# headers=get_headers(client))
# assert rv.status_code == 200
# assert len(json.loads(rv.data)) == 1
#
# # avec loginTrois, on vérifie le contenu (via la banque)
# loginTrois = creerUtilisateurRandom(client)
# # On vérifie que le contenu est tjrs dispo (chez Valery) et que son auteur est Aucun
# rv = client.get("/contenus/getContenuBanque/" + loginTrois, headers=get_headers(client))
# assert rv.status_code == 200
# # Impossible de tester le nombre de contenus en banque en travaillant sur la vraie base
# # assert len(json.loads(rv.data)) == 1
# assert json.loads(rv.data)[0]["auteur"] == "Aucun"
#
# # login 2 modifie son tiers (désormais d'auteur Aucun)
# data = {"auteur": loginDeux, "id_contenu": json.dumps(id), "provenance": "tiers", "version": 1}
# # création d'un contenu en_cours
# rv = client.post("/en_cours/newEnCours", json=data, headers=get_headers(client))
# assert rv.status_code == 201
# id_en_cours = json.loads(rv.data)["_id"]
#
# # on renseigne le nouveau titre du contenu en cours
# data = {"titre": "nouveauTitreContenu", "id_contenu_en_cours": json.dumps(id_en_cours)}
# rv = client.patch("/en_cours/changerTitre", json=data, headers=get_headers(client))
# assert rv.status_code == 201
#
# # on prend le contenu en cours créé juste au dessus pour mettre à jour le tiers anonyme
# data = {"auteur": loginDeux, "id_contenu_en_cours": json.dumps(id_en_cours)}
# rv = client.patch("/contenus/majContenu", json=data, headers=get_headers(client))
# assert rv.status_code == 200
#
# # On vérifie que le contenu est tjrs dispo (chez Valery) et que son auteur est Jacques
# rv = client.get("/contenus/getContenuBanque/" + loginTrois, headers=get_headers(client))
# assert rv.status_code == 200
# # travail sur la vraie base = tests sur la banque impossibles
# # assert len(json.loads(rv.data)) == 1
# assert json.loads(rv.data)[0]["auteur"] == loginDeux
#
# rv = client.delete("/contenus/deletePerso/" + json.dumps(id), headers=get_headers(client))
# assert rv.status_code == 200
#
# # on supprime les trois utilisateurs créés
# supprimerUtilisateur(client, login)
# supprimerUtilisateur(client, loginDeux)
# supprimerUtilisateur(client, loginTrois)
def test_contenu(client):
login = creerUtilisateurRandom(client)
id = creerContenuRandom(client, login)
# get contenu par id
rv = client.get("/contenus/getContenu/" + json.dumps(id), headers=get_headers(client))
assert rv.status_code == 200
# on récupère le texte
rv = client.get("/contenus/getTexteContenu/" + json.dumps(id), headers=get_headers(client))
assert rv.status_code == 200
assert "Texte du contenu" == json.loads(rv.data)
# on créée un tiers avec Jacques
# pprint("id : ", id["$oid"])
loginDeux = creerUtilisateurRandom(client)
data = {"id_tiers": json.dumps(id), "auteur": loginDeux, "version": 1}
rv = client.patch("/contenus/ajouterTiers", json=data, headers=get_headers(client))
assert rv.status_code == 201
# get Contenu Panier (chez Charles)
rv = client.get("/contenus/getContenuPanier/" + login + "?perso=True&tiers=True&en_cours=True",
headers=get_headers(client))
assert rv.status_code == 200
assert len(json.loads(rv.data)) == 1
loginTrois = creerUtilisateurRandom(client)
# get Contenu Banque (chez Valery)
rv = client.get("/contenus/getContenuBanque/" + loginTrois, headers=get_headers(client))
assert rv.status_code == 200
# Travaillant sur la vraie base, ce n'est pas possible de faire ce test
# assert len(json.loads(rv.data)) == 1
contenusBanque = len(json.loads(rv.data))
# get All Contenus
rv = client.get("/contenus/allContenus", headers=get_headers(client))
assert rv.status_code == 200
# Travaillant sur la vraie base, ce n'est pas possible de faire ce test
assert len(json.loads(rv.data)) == contenusBanque
# on supprime le tiers
rv = client.delete("/contenus/deleteTiers?id_tiers=" + json.dumps(id) + "&auteur=" + loginDeux + "&note=-",
headers=get_headers(client))
assert rv.status_code == 200
# on supprime le contenu perso
rv = client.delete("/contenus/deletePerso/" + json.dumps(id), headers=get_headers(client))
assert rv.status_code == 200
# on supprime les trois utilisateurs créés
supprimerUtilisateur(client, login)
supprimerUtilisateur(client, loginDeux)
supprimerUtilisateur(client, loginTrois)
def test_supprimer_contenu_en_tiers_chez_qqun_autre(client):
# on créée un utilisateur quelconque
login = creerUtilisateurRandom(client)
# on lui assigne un contenu
id = creerContenuRandom(client, login)
# on créée un second utilisateur quelconque et on lui donne le contenu ci dessus dans ses tiers
loginDeux = creerUtilisateurRandom(client)
data = {"id_tiers": json.dumps(id), "auteur": loginDeux, "version": 1}
rv = client.patch("/contenus/ajouterTiers", json=data, headers=get_headers(client))
assert rv.status_code == 201
# On supprime le contenu perso de l'utilisateur 'login'
rv = client.delete("/contenus/deletePerso/" + json.dumps(id), headers=get_headers(client))
assert rv.status_code == 200
# on vérifie le panier de l'utilisateur 'loginDeux'
rv = client.get("/contenus/getContenuPanier/" + loginDeux + "?perso=True&tiers=True&en_cours=True",
headers=get_headers(client))
assert rv.status_code == 200
assert len(json.loads(rv.data)) == 1
# avec loginTrois, on vérifie le contenu (via la banque)
loginTrois = creerUtilisateurRandom(client)
# On vérifie que le contenu est tjrs dispo (chez Valery) et que son auteur est Aucun
rv = client.get("/contenus/getContenuBanque/" + loginTrois, headers=get_headers(client))
assert rv.status_code == 200
# Impossible de tester le nombre de contenus en banque en travaillant sur la vraie base
# assert len(json.loads(rv.data)) == 1
assert json.loads(rv.data)[0]["auteur"] == "Aucun"
# login 2 modifie son tiers (désormais d'auteur Aucun)
data = {"auteur": loginDeux, "id_contenu": json.dumps(id), "provenance": "tiers", "version": 1}
# création d'un contenu en_cours
rv = client.post("/en_cours/newEnCours", json=data, headers=get_headers(client))
assert rv.status_code == 201
id_en_cours = json.loads(rv.data)["_id"]
# on renseigne le nouveau titre du contenu en cours
data = {"titre": "nouveauTitreContenu", "id_contenu_en_cours": json.dumps(id_en_cours)}
rv = client.patch("/en_cours/changerTitre", json=data, headers=get_headers(client))
assert rv.status_code == 201
# on prend le contenu en cours créé juste au dessus pour mettre à jour le tiers anonyme
data = {"auteur": loginDeux, "id_contenu_en_cours": json.dumps(id_en_cours)}
rv = client.patch("/contenus/majContenu", json=data, headers=get_headers(client))
assert rv.status_code == 200
# On vérifie que le contenu est tjrs dispo (chez Valery) et que son auteur est Jacques
rv = client.get("/contenus/getContenuBanque/" + loginTrois, headers=get_headers(client))
assert rv.status_code == 200
# travail sur la vraie base = tests sur la banque impossibles
# assert len(json.loads(rv.data)) == 1
assert json.loads(rv.data)[0]["auteur"] == loginDeux
rv = client.delete("/contenus/deletePerso/" + json.dumps(id), headers=get_headers(client))
assert rv.status_code == 200
# on supprime les trois utilisateurs créés
supprimerUtilisateur(client, login)
supprimerUtilisateur(client, loginDeux)
supprimerUtilisateur(client, loginTrois)
def test_notation_contenu(client):
......@@ -187,3 +187,102 @@ def test_notation_contenu(client):
supprimerUtilisateur(client, login)
supprimerUtilisateur(client, loginDeux)
supprimerUtilisateur(client, loginTrois)
## Deux fonctions de tags, une pour les tags fixes, une pour les tags libres
def test_tags_fixes_contenu(client):
# on créée un utilisateur quelconque
login = creerUtilisateurRandom(client)
# on lui assigne un contenu
id = creerContenuRandom(client, login)
# pour essai, on récupère le tag de base
rv = client.get("/contenus/getTags/" + json.dumps(id),
headers=get_headers(client))
assert rv.status_code == 200
# print(json.loads(rv.data))
assert json.loads(rv.data) == ["tag1"]
# on modifie le tag de base
data = {"id_contenu": json.dumps(id), "tags": ["tag2"]}
rv = client.patch("/contenus/modifierTags", json=data,
headers=get_headers(client))
assert rv.status_code == 200
# on récupère les nouveaux tags
rv = client.get("/contenus/getTags/" + json.dumps(id),
headers=get_headers(client))
assert rv.status_code == 200
# print(json.loads(rv.data))
assert json.loads(rv.data) == ["tag2"]
rv = client.delete("/contenus/deletePerso/" + json.dumps(id), headers=get_headers(client))
assert rv.status_code == 200
supprimerUtilisateur(client, login)
## Deux fonctions de tags, une pour les tags fixes, une pour les tags libres
def test_tags_libres_contenu(client):
# on créée un utilisateur quelconque
login = creerUtilisateurRandom(client)
# on lui assigne un contenu
id = creerContenuRandom(client, login)
# pour essai, on récupère les tags libres du contenu et de l'auteur (censés être vides tous les deux)
rv = client.get("/contenus/getTagLibre/" + login,
headers=get_headers(client))
assert rv.status_code == 200
# print(json.loads(rv.data))
assert json.loads(rv.data) == []
rv = client.get("/contenus/getTagLibreContenu/" + json.dumps(id) + "/" + login,
headers=get_headers(client))
assert rv.status_code == 200
# print(json.loads(rv.data))
assert json.loads(rv.data) == []
# on créée un 2e utilisateur qui s'approprie id, va créer un tag libre et l'affecter à id
loginDeux = creerUtilisateurRandom(client)
data = {"id_tiers": json.dumps(id), "auteur": loginDeux, "version": 1}
rv = client.patch("/contenus/ajouterTiers", json=data, headers=get_headers(client))
assert rv.status_code == 201
data = {"auteur": loginDeux, "tag": "tagUn"}
rv = client.patch("/contenus/newTagLibre", json=data, headers=get_headers(client))
assert rv.status_code == 201
# on vérifie que le tag soit bien "propriété" de loginDeux
rv = client.get("/contenus/getTagLibre/" + loginDeux, headers=get_headers(client))
assert rv.status_code == 200
assert json.loads(rv.data) == ["tagUn"]
# on associe le tag au contenu id
data = {"auteur": loginDeux, "tag": "tagUn", "id_contenu": json.dumps(id)}
rv = client.patch("/contenus/associerTagLibre", json=data, headers=get_headers(client))
assert rv.status_code == 201
# on vérifie les tags que login2 a associé à son tiers id
rv = client.get("/contenus/getTagLibreContenu/" + json.dumps(id) + "/" + loginDeux, headers=get_headers(client))
assert rv.status_code == 200
assert json.loads(rv.data) == ["tagUn"]
print(json.loads(rv.data))
# on dissocie le tag du contenu
data = {"auteur": loginDeux, "tag": "tagUn", "id_contenu": json.dumps(id)}
rv = client.patch("/contenus/dissocierTagLibre", json=data, headers=get_headers(client))
assert rv.status_code == 201
# on vérifie les tags que login2 n'a plus de tag associé
rv = client.get("/contenus/getTagLibreContenu/" + json.dumps(id) + "/" + loginDeux, headers=get_headers(client))
assert rv.status_code == 200
assert json.loads(rv.data) == []
print(json.loads(rv.data))
rv = client.delete("/contenus/deleteTiers?id_tiers=" + json.dumps(id) + "&auteur=" + loginDeux + "&note=-",
headers=get_headers(client))
assert rv.status_code == 200
rv = client.delete("/contenus/deletePerso/" + json.dumps(id), headers=get_headers(client))
assert rv.status_code == 200
supprimerUtilisateur(client, login)
supprimerUtilisateur(client, loginDeux)
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment