Aller au contenu

PD-250 — Revue des Tests

Résumé

Critère Statut
Couverture TC-* 28/28 (matrice PD-250)
Qualité assertions ⚠️
Isolation
Edge cases

Verdict : ⚠️ RÉSERVES

Observations exécutables:

  • Exécution ciblée effectuée : npm test -- --runInBand src/modules/destruction/__tests__17 suites / 475 tests passés.
  • Les tests couvrent l’ensemble de la matrice TC-250, mais plusieurs scénarios critiques sont couverts de manière partielle (assertions trop faibles sur contrôle d’accès et éligibilité WORM complète).

Matrice de couverture

TC-ID Implémenté Fichier Commentaire
TC-250-01 src/modules/destruction/__tests__/eligibility.service.spec.ts Présent, mais couverture combinatoire 9 cas non reproduite explicitement.
TC-250-02 src/modules/destruction/__tests__/eligibility.service.spec.ts Vérifie le filtre status=EXPIRED.
TC-250-03 src/modules/destruction/__tests__/eligibility.service.spec.ts Vérifie clause legal_lock, pas un jeu de données actif/expiré bout-en-bout.
TC-250-04 src/modules/destruction/__tests__/bordereau.service.spec.ts Fail-closed signature bien testé (non-persistance).
TC-250-05 src/modules/destruction/__tests__/bordereau.service.spec.ts Retry TSA et borne tsaRetryCount testés.
TC-250-06 src/modules/destruction/__tests__/destruction-execution.service.spec.ts Échec partiel S3 + alertes unitaires couverts.
TC-250-07 src/modules/destruction/__tests__/reconciliation.service.spec.ts Réconciliation après échec DB post-S3 couverte.
TC-250-08 src/modules/destruction/__tests__/bordereau.service.spec.ts Bordereau unique, signature/TSA/persistance testés.
TC-250-08b src/modules/destruction/__tests__/bordereau.service.spec.ts Échec persistance bordereau => fail-closed validé.
TC-250-09 src/modules/destruction/__tests__/destruction-audit.service.spec.ts Corrélation audit documentId/batchId/bordereauId couverte.
TC-250-10 src/modules/destruction/__tests__/eligibility.service.spec.ts, src/modules/destruction/__tests__/bordereau.service.spec.ts Conservation retentionExpiry=null couverte; exclusion bordereaux testée indirectement.
TC-250-11 src/modules/destruction/__tests__/bordereau.service.spec.ts, src/modules/destruction/__tests__/contractual/pii-exclusion.spec.ts PII exclusion bien couverte.
TC-250-12 src/modules/destruction/__tests__/destruction.processor.spec.ts, src/modules/destruction/__tests__/destruction-execution.service.spec.ts Idempotence rejouée sans double destruction.
TC-250-13 src/modules/destruction/__tests__/reconciliation.service.spec.ts Convergence terminale et non-duplication d’audit couvertes.
TC-250-14 src/modules/destruction/__tests__/destruction-alert.service.spec.ts Alerte + audit conjointement vérifiés.
TC-250-15 src/modules/destruction/__tests__/document-state-machine.service.spec.ts, src/modules/destruction/__tests__/contractual/state-transitions.spec.ts Transitions interdites (incluant MAJ-28) bien couvertes.
TC-250-16 src/modules/destruction/__tests__/destruction-audit.service.spec.ts, src/modules/destruction/__tests__/destruction-audit.integration.spec.ts Couverture unitaire solide; scénario intégration conditionnel (skip si DB absente).
TC-250-17 src/modules/destruction/__tests__/document-zeroization.service.spec.ts, src/modules/destruction/__tests__/destruction-execution.service.spec.ts Flux hadLegalLock couvert.
TC-250-18 src/modules/destruction/__tests__/destruction.config.spec.ts, src/modules/destruction/__tests__/contractual/queue-naming.spec.ts Nommage queue sans : bien testé.
TC-250-19 src/modules/destruction/__tests__/contractual/deprecated-api.spec.ts Présent, mais test de présence API v5 trop permissif (peut passer via commentaires/tests).
TC-250-20 ⚠️ src/modules/destruction/__tests__/bordereau.controller.spec.ts Couverture partielle: scénario non-ADMIN n’assert pas explicitement 403 ni audit d’accès refusé.
TC-250-21 src/modules/destruction/__tests__/bordereau.controller.spec.ts Filtres date/batch + pagination couverts.
TC-250-22 src/modules/destruction/__tests__/pre-notice.processor.spec.ts N=30 et N=0 couverts, payload limité.
TC-250-23 src/modules/destruction/__tests__/destruction.config.spec.ts Bornes min/max bien couvertes.
TC-250-25 src/modules/destruction/__tests__/destruction-execution.service.spec.ts Non-éligible mid-run + batch partiel couverts.
TC-250-26 src/modules/destruction/__tests__/destruction.processor.spec.ts Dépassement batchFinalizeSla couvert.
TC-250-27 src/modules/destruction/__tests__/destruction-execution.service.spec.ts Distinction avant 1er doc / en cours couverte.
TC-250-28 src/modules/destruction/__tests__/reconciliation.service.spec.ts Dépassement reconciliationSla + escalade couverts.

Points à améliorer

ID Description Gravité
T-01 TC-250-20 partiellement prouvé: le test non-ADMIN ne vérifie pas réellement le rejet HTTP 403 ni la trace d’audit d’accès refusé (src/modules/destruction/__tests__/bordereau.controller.spec.ts:188). MAJEUR
T-02 Absence d’e2e sécurité endpoint admin: pas de test e2e dédié destruction pour valider guards/filter en conditions framework réelles (pipeline NestJS). MAJEUR
T-03 Éligibilité WORM incomplètement stressée: les tests n’implémentent pas le scénario combinatoire attendu (9 combinaisons DB/S3/legal_lock) et ne valident pas explicitement la dimension S3 lock dans la sélection (src/modules/destruction/__tests__/eligibility.service.spec.ts:117). MAJEUR
T-04 Certaines assertions sont trop faibles/no-op (ex. validation DTO par simple affectation, assertions “query called”) (src/modules/destruction/__tests__/bordereau.controller.spec.ts:416, src/modules/destruction/__tests__/eligibility.service.spec.ts:282). MINEUR
T-05 Le test contractuel API BullMQ v5 valide la présence de symboles en scannant aussi les tests/commentaires, donc preuve trop permissive côté code runtime (src/modules/destruction/__tests__/contractual/deprecated-api.spec.ts:109). MINEUR

Tests manquants

  • TC-250-20 (complément): ajouter un vrai test e2e GET /admin/bordereaux non-ADMIN ⇒ 403 + body contractuel + audit DOCUMENT_DESTROY_ACCESS_DENIED.
  • TC-250-01/03 (renfort): ajouter un test data-driven couvrant explicitement la matrice booléenne DB/S3/legal_lock (incluant cas limites clock skew).
  • TC-250-16 (CI): exécuter systématiquement le scénario intégration audit ACID (non skip) dans une job CI avec PostgreSQL provisionné pour preuve continue de non-perte.