Migration de la suite de tests vers pytest, sans reecrire les scripts existants

pytest + pytest-qt (requirements-dev.txt) deviennent le point d'entree unique
de la suite ("pytest" depuis la racine), sans toucher aux 30+ scripts
test_*.py existants (convention deliberement conservee - voir tests/conftest.py) :
tests/test_all_scripts.py les lance chacun comme sous-processus isole (comme
c'etait deja fait manuellement a chaque phase), avec QT_QPA_PLATFORM=offscreen
pour tourner sans affichage (verifie : la suite complete passe a l'identique
en mode hors-ecran, prerequis pour une future integration continue).

tests/run_all.bat corrige au passage : il ne lancait plus que 4 tests sur 30+
(liste figee, jamais mise a jour au fil des phases) ; il delegue maintenant a
pytest.

Audit de couverture (Phase 13 du plan) : fingerprint, stockage atomique,
migration de schema, config OpenSSH, ProxyJump, CredentialStore, redaction de
secrets et detection de commandes dangereuses etaient deja couverts au fil des
phases precedentes. Seul point manquant identifie : aucun test ne verifiait
qu'une cle API IA ne puisse fuiter dans un message d'erreur - ajoute dans
tests/test_no_secrets_in_errors.py.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
Florian
2026-09-05 07:32:55 +02:00
parent 0b2ff38bfd
commit 09b7ed092c
7 changed files with 164 additions and 12 deletions

16
tests/conftest.py Normal file
View File

@@ -0,0 +1,16 @@
"""Les tests de ce projet sont des scripts autonomes (print/assert), executes
chacun dans son propre processus - convention en place depuis le debut du
projet, et deliberement conservee (voir tests/test_all_scripts.py) plutot que
reecrite en fonctions pytest : cela evite tout risque de contamination entre
tests (patches, QApplication, fichiers temporaires) qu'importerait leur
execution dans un seul et meme processus.
Pytest ne doit donc PAS les importer/collecter directement comme modules (ce
qui les executerait une deuxieme fois, et dans un processus partage) : seul
test_all_scripts.py, qui les lance chacun en sous-processus isole, est un
vrai module de test pytest.
"""
import pathlib
_HERE = pathlib.Path(__file__).parent
collect_ignore_glob = [p.name for p in _HERE.glob("test_*.py") if p.name != "test_all_scripts.py"]