IT-Stock/tests/test_categories.py

92 lines
2.7 KiB
Python
Raw Normal View History

"""
Tests de l'arborescence de catégories à profondeur illimitée : création
sur plusieurs niveaux, chemin complet, et règles de suppression.
"""
from sqlmodel import select
from app.models import Categorie, Materiel
def test_creation_categorie_racine(client, session):
reponse = client.post("/categories", data={"nom": "Réseau"}, follow_redirects=False)
assert reponse.status_code == 303
categorie = session.exec(select(Categorie)).first()
assert categorie.nom == "Réseau"
assert categorie.parent_id is None
def test_arborescence_profondeur_illimitee(client, session):
"""Réseau > Câbles > RJ45 : 3 niveaux, pas juste catégorie/sous-catégorie."""
reseau = Categorie(nom="Réseau")
session.add(reseau)
session.commit()
session.refresh(reseau)
cables = Categorie(nom="Câbles", parent_id=reseau.id)
session.add(cables)
session.commit()
session.refresh(cables)
reponse = client.post(
"/categories", data={"nom": "RJ45", "parent_id": cables.id}, follow_redirects=False
)
assert reponse.status_code == 303
rj45 = session.exec(select(Categorie).where(Categorie.nom == "RJ45")).first()
assert rj45 is not None
assert rj45.parent_id == cables.id
assert rj45.chemin() == "Réseau / Câbles / RJ45"
def test_suppression_refusee_si_enfants(client, session):
parent = Categorie(nom="Réseau")
session.add(parent)
session.commit()
session.refresh(parent)
session.add(Categorie(nom="Câbles", parent_id=parent.id))
session.commit()
client.post(f"/categories/{parent.id}/supprimer", data={})
assert session.get(Categorie, parent.id) is not None
def test_suppression_refusee_si_materiels(client, session):
categorie = Categorie(nom="Réseau")
session.add(categorie)
session.commit()
session.refresh(categorie)
session.add(Materiel(nom="Câble RJ45 2m", categorie_id=categorie.id, quantite=1))
session.commit()
client.post(f"/categories/{categorie.id}/supprimer", data={})
assert session.get(Categorie, categorie.id) is not None
def test_suppression_acceptee_si_vide(client, session):
categorie = Categorie(nom="Temporaire")
session.add(categorie)
session.commit()
session.refresh(categorie)
client.post(f"/categories/{categorie.id}/supprimer", data={})
assert session.get(Categorie, categorie.id) is None
def test_recherche_retourne_le_chemin_complet(client, session):
reseau = Categorie(nom="Réseau")
session.add(reseau)
session.commit()
session.refresh(reseau)
session.add(Categorie(nom="Câbles", parent_id=reseau.id))
session.commit()
reponse = client.get("/categories", params={"q": "Câbles"})
assert reponse.status_code == 200
assert "Réseau / Câbles" in reponse.text