74 lines
2.6 KiB
Python
74 lines
2.6 KiB
Python
"""
|
|
Tests d'intégration des routes Flask — IT-01 à IT-10 (client de test Flask).
|
|
|
|
Vérifient le comportement HTTP complet (routes -> services -> models -> DB
|
|
réelle), avec et sans authentification/autorisation.
|
|
"""
|
|
|
|
import json
|
|
|
|
|
|
def test_it01_annonces_sans_auth_401(client):
|
|
resp = client.get("/api/annonces")
|
|
assert resp.status_code == 401
|
|
|
|
|
|
def test_it02_annonces_avec_auth_200(user_session):
|
|
resp = user_session.get("/api/annonces")
|
|
assert resp.status_code == 200
|
|
assert resp.get_json() == []
|
|
|
|
|
|
def test_it03_creer_annonce_non_admin_403(user_session):
|
|
resp = user_session.post("/api/annonces", json={"titre": "T", "contenu": "C"})
|
|
assert resp.status_code == 403
|
|
|
|
|
|
def test_it04_creer_annonce_admin_201_puis_visible(admin_session):
|
|
resp = admin_session.post("/api/annonces", json={"titre": "Annonce test", "contenu": "Contenu"})
|
|
assert resp.status_code == 201
|
|
resp_list = admin_session.get("/api/annonces")
|
|
titres = [a["titre"] for a in resp_list.get_json()]
|
|
assert "Annonce test" in titres
|
|
|
|
|
|
def test_it05_modifier_annonce_admin_200(admin_session):
|
|
created = admin_session.post("/api/annonces", json={"titre": "A", "contenu": "B"}).get_json()
|
|
resp = admin_session.put(f"/api/annonces/{created['id']}", json={"titre": "A2", "contenu": "B2"})
|
|
assert resp.status_code == 200
|
|
|
|
|
|
def test_it06_supprimer_annonce_admin_200(admin_session):
|
|
created = admin_session.post("/api/annonces", json={"titre": "A", "contenu": "B"}).get_json()
|
|
resp = admin_session.delete(f"/api/annonces/{created['id']}")
|
|
assert resp.status_code == 200
|
|
|
|
|
|
def test_it07_is_admin_reflete_groupes(admin_session, user_session):
|
|
assert admin_session.get("/api/is_admin").get_json()["admin"] is True
|
|
assert user_session.get("/api/is_admin").get_json()["admin"] is False
|
|
|
|
|
|
def test_it08_upload_sans_fichier_400(user_session):
|
|
resp = user_session.post("/api/fichiers/upload", data={})
|
|
assert resp.status_code == 400
|
|
|
|
|
|
def test_it09_evenement_dates_invalides_400(admin_session):
|
|
resp = admin_session.post(
|
|
"/api/evenements",
|
|
json={"titre": "Réunion", "date_debut": "2026-09-10T10:00:00", "date_fin": "2026-09-09T10:00:00"},
|
|
)
|
|
assert resp.status_code == 400
|
|
|
|
|
|
def test_it10_accueil_sans_session_redirige_login(client):
|
|
resp = client.get("/", follow_redirects=False)
|
|
assert resp.status_code == 302
|
|
assert "/login" in resp.headers["Location"]
|
|
|
|
|
|
def test_it04b_creer_annonce_titre_manquant_400(admin_session):
|
|
resp = admin_session.post("/api/annonces", json={"contenu": "Sans titre"})
|
|
assert resp.status_code == 400
|