Aller au contenu

PD-272 — Scénarios de tests contractuels

1. Références

  • Spécification : PD-272-specification.md
  • JIRA : PD-272

2. Matrice de couverture

ID Invariant ID Critère ID Test Couverture Commentaire
INV-272-01 CA-272-04 TC-NOM-01 Oui L'insertion est autorisée puis la ligne devient non modifiable/supprimable.
INV-272-02 CA-272-02 TC-ERR-01 Oui Rejet UPDATE avec message exact contractuel.
INV-272-03 CA-272-03 TC-ERR-02 Oui Rejet DELETE avec message exact contractuel.
INV-272-04 CA-272-04 TC-NOM-01 Oui Vérifie que INSERT n'est pas bloqué.
INV-272-05 CA-272-02, CA-272-03 TC-NEG-01, TC-NEG-02 Oui Vérifie absence d'exception selon acteur/contexte/statut.
INV-272-06 CA-272-02, CA-272-03 TC-INV-06 Oui Toute transition sortante de modification/suppression interdite.
INV-272-07 N/A TC-NT-01 Non Non testable dans ce périmètre.
INV-272-08 CA-272-01, CA-272-05 TC-NOM-02 Oui check_proof_immutable_trigger doit retourner OK.
N/A CA-272-01 TC-NOM-03 Oui Présence du mécanisme vérifiée via métadonnées DB.
N/A CA-272-06 TC-NR-01 Oui Non-régression globale de la suite existante.

3. Scénarios de test — Flux nominaux

TC-NOM-01 — Insertion autorisée

GIVEN
  - Base de test propre, migration PD-272 appliquée
  - Table cible accessible: legal_composite_proofs
  - Jeu de données valide pour créer une preuve composite
WHEN
  - Exécution d'un INSERT valide dans legal_composite_proofs
THEN
  - L'INSERT est accepté sans erreur d'immutabilité
  - 1 ligne est présente avec l'identifiant inséré
AND
  - L'état persistant est vérifiable (lecture de la ligne possible)

TC-NOM-02 — Conformité Prolog

GIVEN
  - Schéma DB déployé avec migration PD-272
WHEN
  - Exécution du contrôle formel check_proof_immutable_trigger
THEN
  - Le statut retourné est strictement "OK"
AND
  - Aucune anomalie bloquante n'est remontée par le contrôle

TC-NOM-03 — Présence du mécanisme

GIVEN
  - Schéma DB déployé
WHEN
  - Inspection des métadonnées DB (triggers/fonctions associées à legal_composite_proofs)
THEN
  - Un mécanisme actif bloque UPDATE et DELETE sur legal_composite_proofs
AND
  - Le mécanisme est attaché à la table cible (pas à une autre table)

4. Scénarios de test — Cas d'erreur

TC-ERR-01 — Update interdit

GIVEN
  - Une ligne existante dans legal_composite_proofs (créée via INSERT valide)
WHEN
  - Tentative d'UPDATE sur n'importe quelle colonne de cette ligne
THEN
  - Exception PostgreSQL levée
  - Message exact: "legal_composite_proofs: modification interdite — preuve immutable"
  - L'opération SQL est en échec
AND
  - Aucune colonne de la ligne n'a été modifiée

TC-ERR-02 — Delete interdit

GIVEN
  - Une ligne existante dans legal_composite_proofs
WHEN
  - Tentative de DELETE de cette ligne
THEN
  - Exception PostgreSQL levée
  - Message exact: "legal_composite_proofs: suppression interdite — preuve immutable"
  - L'opération SQL est en échec
AND
  - La ligne est toujours présente avec le même contenu

TC-ERR-03 — Non-conformité détectée

GIVEN
  - Environnement où le check formel ne retourne pas "OK"
WHEN
  - Exécution de check_proof_immutable_trigger
THEN
  - Statut différent de "OK" détecté explicitement
  - Résultat de conformité = NON CONFORME

5. Tests d'invariants (non négociables)

Invariant Test(s) dédiés Observable Commentaire
INV-272-01 TC-NOM-01 + TC-ERR-01 + TC-ERR-02 Insertion possible puis impossibilité de modifier/supprimer Immutabilité post-insertion démontrée.
INV-272-02 TC-ERR-01 Exception PostgreSQL + message exact + absence de mutation Vérification stricte du contrat d'erreur.
INV-272-03 TC-ERR-02 Exception PostgreSQL + message exact + ligne conservée Vérification stricte du contrat d'erreur.
INV-272-04 TC-NOM-01 INSERT accepté Flux nominal préservé.
INV-272-05 TC-NEG-01 + TC-NEG-02 Rejet identique quels que soient acteur/contexte/statut Inconditionnalité testée.
INV-272-06 TC-INV-06 Toute transition update/delete échoue Validation état terminal.
INV-272-07 TC-NT-01 N/A NON TESTABLE dans ce périmètre.
INV-272-08 TC-NOM-02 check_proof_immutable_trigger = OK Critère audit formel.

6. Tests de non-régression

Test ID Objet Observable
TC-NR-01 Suite backend existante 0 test en échec supplémentaire
TC-NR-02 Création de preuve composite Création nominale toujours fonctionnelle après migration

7. Tests négatifs et adversariaux

Test ID Entrée invalide / abus Résultat attendu
TC-NEG-01 UPDATE sur colonnes différentes (métier, techniques, horodatage) Rejet systématique avec message contractuel
TC-NEG-02 DELETE via contextes différents (transaction explicite, rôle applicatif) Rejet systématique avec message contractuel
TC-NEG-03 UPDATE no-op (SET col = col) Rejet identique — inconditionnalité
TC-NEG-04 DELETE conditionnelle large Rejet total, 0 ligne supprimée
TC-NEG-05 Check formel sur schéma incomplet Retour non-OK

8. Observabilité requise

  • État système : contenu de legal_composite_proofs avant/après chaque opération
  • Journal d'audit : trace d'échec d'opération DML
  • Export probatoire : requête testée, message d'erreur observé, preuve d'absence de mutation

9. Règles non testables

Règle Raison Impact
INV-272-07 Périmètre ne définit ni emplacement ni observables pour artefacts crypto temporaires Majeur

10. Verdict QA

  • Testable partiellement (avec réserves)
  • Réserve unique : INV-272-07 NON TESTABLE dans ce périmètre
  • Tous les autres invariants et CA sont testables et automatisables