IT-Stock/tests/test_materiels.py

114 lines
3.3 KiB
Python
Raw Normal View History

"""
Tests du flux principal : créer une catégorie/sous-catégorie, créer un
matériel, le retrouver par scan, ajuster son stock, et vérifier que
l'alerte de stock bas se déclenche (elle est simplement affichée dans la
console tant qu'aucun SMTP n'est configuré, voir app/email_alerts.py).
"""
from sqlmodel import Session, select
from app.models import Categorie, DestinataireAlerte, Materiel, SousCategorie
def _creer_sous_categorie(session: Session) -> SousCategorie:
categorie = Categorie(nom="Ordinateurs")
session.add(categorie)
session.commit()
session.refresh(categorie)
sous_categorie = SousCategorie(nom="Portables", categorie_id=categorie.id)
session.add(sous_categorie)
session.commit()
session.refresh(sous_categorie)
return sous_categorie
def test_creation_materiel(client, session):
sous_categorie = _creer_sous_categorie(session)
reponse = client.post(
"/materiels",
data={
"nom": "PC Dell XPS 13",
"sous_categorie_id": sous_categorie.id,
"code_barre": "1234567890123",
"quantite": "5",
"seuil_alerte": "2",
},
follow_redirects=False,
)
assert reponse.status_code == 303
materiel = session.exec(select(Materiel)).first()
assert materiel is not None
assert materiel.quantite == 5
def test_scan_trouve_le_materiel_par_code_barre(client, session):
sous_categorie = _creer_sous_categorie(session)
session.add(
Materiel(
nom="Câble RJ45 2m",
sous_categorie_id=sous_categorie.id,
code_barre="9998887776665",
quantite=10,
)
)
session.commit()
reponse = client.post("/scan", data={"code_barre": "9998887776665"})
assert reponse.status_code == 200
assert "Câble RJ45 2m" in reponse.text
def test_scan_code_inconnu_affiche_une_erreur(client, session):
_creer_sous_categorie(session)
reponse = client.post("/scan", data={"code_barre": "0000000000000"})
assert reponse.status_code == 200
assert "Aucun matériel" in reponse.text
def test_alerte_declenchee_sous_le_seuil(client, session, capsys):
sous_categorie = _creer_sous_categorie(session)
materiel = Materiel(
nom="Souris USB",
sous_categorie_id=sous_categorie.id,
quantite=3,
seuil_alerte=5,
)
session.add(materiel)
session.commit()
session.refresh(materiel)
session.add(DestinataireAlerte(email="it-dept@clinique.local"))
session.commit()
reponse = client.post(f"/scan/{materiel.id}/ajuster", data={"delta": "-1"})
assert reponse.status_code == 200
sortie = capsys.readouterr().out
assert "EMAIL SIMULÉ" in sortie
assert "Souris USB" in sortie
def test_pas_alerte_si_stock_suffisant(client, session, capsys):
sous_categorie = _creer_sous_categorie(session)
materiel = Materiel(
nom="Clavier USB",
sous_categorie_id=sous_categorie.id,
quantite=10,
seuil_alerte=5,
)
session.add(materiel)
session.commit()
session.refresh(materiel)
session.add(DestinataireAlerte(email="it-dept@clinique.local"))
session.commit()
client.post(f"/scan/{materiel.id}/ajuster", data={"delta": "-1"})
sortie = capsys.readouterr().out
assert "EMAIL SIMULÉ" not in sortie