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>
17 lines
834 B
Python
17 lines
834 B
Python
"""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"]
|