""" 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