============================= test session starts ============================== platform linux -- Python 3.11.15, pytest-8.3.3, pluggy-1.6.0 -- /home/claude/work/venv/bin/python cachedir: .pytest_cache rootdir: /home/claude/work/gesthub-v2/web plugins: cov-5.0.0 collecting ... collected 34 items tests/test_integration_routes.py::test_it01_annonces_sans_auth_401 PASSED [ 2%] tests/test_integration_routes.py::test_it02_annonces_avec_auth_200 PASSED [ 5%] tests/test_integration_routes.py::test_it03_creer_annonce_non_admin_403 PASSED [ 8%] tests/test_integration_routes.py::test_it04_creer_annonce_admin_201_puis_visible PASSED [ 11%] tests/test_integration_routes.py::test_it05_modifier_annonce_admin_200 PASSED [ 14%] tests/test_integration_routes.py::test_it06_supprimer_annonce_admin_200 PASSED [ 17%] tests/test_integration_routes.py::test_it07_is_admin_reflete_groupes PASSED [ 20%] tests/test_integration_routes.py::test_it08_upload_sans_fichier_400 PASSED [ 23%] tests/test_integration_routes.py::test_it09_evenement_dates_invalides_400 PASSED [ 26%] tests/test_integration_routes.py::test_it10_accueil_sans_session_redirige_login PASSED [ 29%] tests/test_integration_routes.py::test_it04b_creer_annonce_titre_manquant_400 PASSED [ 32%] tests/test_security.py::test_ts01_injection_sql_dans_titre_est_neutralisee PASSED [ 35%] tests/test_security.py::test_ts02_acces_sans_token_refuse PASSED [ 38%] tests/test_security.py::test_ts03_cookie_session_falsifie_refuse PASSED [ 41%] tests/test_security.py::test_ts04_contenu_avec_script_est_echappe_au_rendu PASSED [ 44%] tests/test_security.py::test_ts05_telechargement_fichier_dautrui_refuse PASSED [ 47%] tests/test_security.py::test_ts06_seul_caddy_expose_des_ports_publics PASSED [ 50%] tests/test_unit_annonce_service.py::test_ut01_create_annonce_valide PASSED [ 52%] tests/test_unit_annonce_service.py::test_ut02_create_annonce_titre_vide PASSED [ 55%] tests/test_unit_annonce_service.py::test_ut03_create_annonce_contenu_vide PASSED [ 58%] tests/test_unit_annonce_service.py::test_ut04_update_annonce_existante PASSED [ 61%] tests/test_unit_annonce_service.py::test_ut05_update_annonce_inexistante PASSED [ 64%] tests/test_unit_annonce_service.py::test_ut05b_delete_annonce_inexistante PASSED [ 67%] tests/test_unit_auth_service.py::test_ut09_is_admin_avec_groupe_admin PASSED [ 70%] tests/test_unit_auth_service.py::test_ut10_is_admin_sans_groupe_admin PASSED [ 73%] tests/test_unit_auth_service.py::test_ut11_is_admin_utilisateur_none PASSED [ 76%] tests/test_unit_auth_service.py::test_ut12_is_admin_sans_champ_groups PASSED [ 79%] tests/test_unit_fichier_service.py::test_ut06_fichier_trop_grand PASSED [ 82%] tests/test_unit_fichier_service.py::test_ut06b_fichier_vide PASSED [ 85%] tests/test_unit_fichier_service.py::test_ut07_extension_interdite PASSED [ 88%] tests/test_unit_fichier_service.py::test_ut07b_extension_autorisee PASSED [ 91%] tests/test_unit_fichier_service.py::test_ut08_nom_genere_est_unique PASSED [ 94%] tests/test_unit_fichier_service.py::test_ut08b_presence_fichier_absent PASSED [ 97%] tests/test_unit_fichier_service.py::test_upload_complet_end_to_end PASSED [100%] ============================== 34 passed in 0.54s ==============================