Aller au contenu

PD-81 — Revue des Tests

Résumé

Critère Statut
Couverture scénarios nominaux (N1-N4) 4/4
Couverture scénarios erreur (E01-E18) 11/18 (partielle)
Qualité assertions
Isolation
Edge cases ⚠️
Couverture invariants 8/12 (3 partiels, 1 non couvert)

Verdict : ⚠️ RÉSERVES

Mapping invariants -> tests

Invariant Tests couvrants Couvert ?
INV-81-01 validateConsultationAccess (deny expired/non-ACTIVE), closeLegalAccess (REVOKE/EXPIRE/END_OF_CONSULTATION), destroyReKey
INV-81-02 MandateValidatorService (TSP invalid, chaîne invalide, cert révoqué) ⚠️
INV-81-03 submitInternalValidation (DPO puis activation), activateLegalAccess rejet si non ACTIVATED ⚠️
INV-81-04 Aucun test explicite sur non-exposition de clés persistantes / artefacts temporaires uniquement
INV-81-05 validateConsultationAccess refuse doc hors scope
INV-81-06 LegalWriteBlockGuard bloque PUT/PATCH/DELETE
INV-81-07 destroyReKey, processDestructionQueue, closeLegalAccess + idempotence destruction/révocation
INV-81-08 Vérifs emitProbativeEvent sur étapes clés (mandat, validation, accès, révocation) ⚠️
INV-81-09 getLegalAuditProof -> generateProof (mandateId/legalCaseId)
INV-81-10 Contrôle contextId, usage storageDomain: LEGAL dans fixtures, séparation flux legal ⚠️
INV-81-11 Multiples tests fail-closed (rejects.toThrow, guard bloque même si audit KO)
INV-81-12 Rejet contextId invalide dans registerLegalMandate

Points forts

  • Bonne couverture du flux nominal complet N1 -> N4, avec assertions métier précises (pas de toBeTruthy() générique).
  • Très bon niveau d'isolation (mocks dédiés par suite, beforeEach + clearAllMocks, pas de dépendance inter-tests).
  • Bon focus sécurité/fail-closed: scope documentaire, statuts non actifs, expiration temporelle, blocage write HTTP.
  • Vérification de comportements critiques: idempotence (destroy/revoke), événements probatoires, chemins d'erreur principaux.
  • Les tests controller valident correctement le décodage base64 -> Buffer et la délégation orchestrateur.

Points à améliorer

ID Description Gravité
T-01 Assertions d'erreur trop larges (toThrow(LegalPreException)), sans contrôle du code d'erreur métier (ERR-81-xx) ni message contractuel MAJEUR
T-02 Couverture E01-E18 incomplète: manque des cas négatifs avancés (chaîne incomplète détaillée, fenêtre temporelle limite, entrées null/undefined, payloads malformés, doublons de validation, conflits transactionnels) MAJEUR
T-03 INV-81-04 non prouvé par tests: absence d'assertions explicites garantissant qu'aucune clé persistante document n'est exposée en sortie service/API MAJEUR
T-04 INV-81-08 seulement partiellement vérifié: on teste l'émission d'événement, pas la présence d'éléments probatoires (hash SHA3-256, signature HSM, horodatage TSA) dans le payload audit MAJEUR
T-05 Transactions critiques: les specs mentionnent SERIALIZABLE mais les tests n'assertent pas explicitement l'appel SQL/niveau d'isolation (SET TRANSACTION ISOLATION LEVEL SERIALIZABLE) MINEUR
T-06 Cas limites manquants sur contextId (absent/vide), scopeDocumentIds volumineux/duplicats, TTL à 0 ou très court, horloge borderline (expiresAt === now) MINEUR
T-07 Incohérence de comptage: la suite guard contient 8 tests (et non 7), total observé 53 (et non 52) MINEUR

En l'état, la base est solide pour l'unit testing NestJS/Jest, mais la gate tests est en RÉSERVES tant que les preuves contractuelles fortes (codes d'erreur, invariants crypto/audit, complétion des erreurs E01-E18) ne sont pas renforcées.