PD-274 - Scenarios de tests contractuels
1. References
- Specification : PD-274-specification.md
- Epic : BACKEND-3 (crypto-proof)
2. Matrice de couverture
| ID Invariant | ID Critere | ID Test | Couverture | Commentaire |
| INV-274-01 | CA-01, CA-02 | TC-NOM-01, TC-NOM-02, TC-ERR-01 | Oui | Verifie presence + exactitude stricte des 6 valeurs enum. |
| INV-274-02 | CA-01, CA-02 | TC-NOM-01, TC-NEG-01 | Oui | Verifie extraction depuis type TS meme si stockage SQL = varchar. |
| INV-274-03 | CA-03, CA-04 | TC-NOM-03, TC-NOM-04, TC-ERR-02 | Oui (avec reserve) | Invariant accepte handleReorg OU reorg; CA-04 impose handleReorg uniquement. |
| INV-274-04 | CA-08 | TC-NOM-07, TC-NOM-08, TC-ERR-05 | Oui | Verifie documentation explicite AUTORISEE/INTERDITE pour chaque etat. |
| INV-274-05 | CA-08 | TC-NOM-07, TC-NEG-03 | Oui | Verifie absence de transitions sortantes pour FINALIZED et FAILED. |
| INV-274-06 | CA-05, CA-06 | TC-NOM-05, TC-NOM-06, TC-ERR-03, TC-NR-01 | Oui | Verifie non-regression des 22 checks deja OK + score final 24/24. |
| INV-274-07 | CA-07 | TC-NR-02, TC-ERR-04 | Oui | Verifie suite de tests backend existante en statut PASS. |
| INV-274-08 | (Hors CA explicite) | TC-INV-08, TC-NR-03 | Oui | Verifie absence de changement DDL (type, contrainte, index, nullabilite). |
3. Scenarios de test - Flux nominaux
TEST-ID: TC-NOM-01
Reference spec: INV-274-01, INV-274-02, CA-02, ST-01
GIVEN
- Baseline avant correction disponible (facts Prolog etat N-1)
- Extraction de faits executee sur le module cible `anchor_batch`
WHEN
- On lit le predicat `entity_enum_values(anchor_batch, status, Values)` dans la sortie facts
THEN
- Le predicat existe exactement une fois
- `Values` contient exactement 6 elements
- Ensemble strict attendu: {PENDING, BUILDING, SUBMITTED, PENDING_FINALITY, FINALIZED, FAILED}
AND
- Aucun element supplementaire ou manquant n'est present
TEST-ID: TC-NOM-02
Reference spec: INV-274-01, CA-01, ST-02
GIVEN
- Rapport d'execution PV-ANCHOR-001 genere apres extraction
WHEN
- On consulte le resultat du check `check_batch_status_enum`
THEN
- Le statut du check est `OK`
AND
- Les preuves associees montrent explicitement `FINALIZED` et `FAILED`
TEST-ID: TC-NOM-03
Reference spec: INV-274-03, CA-04, ST-03
GIVEN
- Sortie facts de services du module `anchor_batch`
WHEN
- On recherche les faits `service_method(anchor_batch, handleReorg)` et `service_method(anchor_batch, reorg)`
THEN
- Au moins un des deux faits est present
AND
- Le fait present est rattache au module logique `anchor_batch`
TEST-ID: TC-NOM-04
Reference spec: INV-274-03, CA-03, ST-04
GIVEN
- Rapport PV-ANCHOR-001 apres correction
WHEN
- On lit le resultat du check `check_handle_reorg`
THEN
- Le statut du check est `OK`
AND
- Aucun contournement de regle ou desactivation de check n'apparait dans les preuves
TEST-ID: TC-NOM-05
Reference spec: INV-274-06, CA-06, ST-05
GIVEN
- Baseline avant correction: liste des 22 checks deja `OK`
- Rapport apres correction disponible
WHEN
- On compare les statuts des 22 checks entre baseline et apres correction
THEN
- Les 22 checks restent `OK`
AND
- Aucun check anciennement `OK` ne bascule a `KO`
TEST-ID: TC-NOM-06
Reference spec: INV-274-06, CA-05, ST-06
GIVEN
- Execution complete de PV-ANCHOR-001
WHEN
- On lit le resume final du rapport
THEN
- Le score global est `24/24 OK`
AND
- Le nombre de checks `KO` est `0`
TEST-ID: TC-NOM-07
Reference spec: INV-274-04, INV-274-05, CA-08, ST-07
GIVEN
- Table de transitions contractuelle `AnchorBatchStatus` publiee dans la specification d'epic
WHEN
- On inspecte les transitions sortantes de `FINALIZED` et `FAILED`
THEN
- Toutes les transitions sortantes sont marquees `INTERDITE`
AND
- Aucune transition `AUTORISEE` n'est declaree pour ces etats terminaux
TEST-ID: TC-NOM-08
Reference spec: INV-274-04, ST-08
GIVEN
- Table de transitions contractuelle `AnchorBatchStatus`
WHEN
- On verifie les transitions de retour depuis `SUBMITTED` et `PENDING_FINALITY` vers des etats precedents
THEN
- Les transitions de retour sont marquees `INTERDITE`
AND
- Seules les transitions explicitement listees `AUTORISEE` sont acceptees
4. Scenarios de test - Cas d'erreur
TEST-ID: TC-ERR-01
Reference spec: ERR-01, INV-274-01, CA-01, CA-02
GIVEN
- Sortie facts sans `entity_enum_values(anchor_batch, status, Values)` ou avec liste incomplete
WHEN
- PV-ANCHOR-001 est evalue
THEN
- `check_batch_status_enum` retourne `KO`
- La livraison est marquee refusee
- Absence d'effets secondaires: aucun check non cible ne doit etre force a `OK`
TEST-ID: TC-ERR-02
Reference spec: ERR-02, INV-274-03, CA-03
GIVEN
- Aucun fait `service_method(anchor_batch, handleReorg)` ni `service_method(anchor_batch, reorg)`
WHEN
- PV-ANCHOR-001 est evalue
THEN
- `check_handle_reorg` retourne `KO`
- La livraison est marquee refusee
- Absence d'effets secondaires: aucun bypass de regle n'est present
TEST-ID: TC-ERR-03
Reference spec: ERR-03, INV-274-06, CA-06
GIVEN
- Baseline avant correction avec 22 checks `OK`
- Rapport apres correction avec au moins un de ces checks passe `KO`
WHEN
- On calcule le delta de conformite
THEN
- Le verdict global est `non-conforme`
- La livraison est refusee
- Absence d'effets secondaires: le delta est trace et horodate
TEST-ID: TC-ERR-04
Reference spec: ERR-04, INV-274-07, CA-07
GIVEN
- Suite de tests backend existante executee apres correction
WHEN
- Au moins un test retourne `FAIL`
THEN
- Le critere de non-regression applicative est invalide
- La livraison est refusee
- Absence d'effets secondaires: aucun test en echec ne peut etre ignore
TEST-ID: TC-ERR-05
Reference spec: ERR-05, INV-274-04, INV-274-05, CA-08
GIVEN
- Table des transitions avec au moins une sortie non documentee ou implicite depuis un etat terminal
WHEN
- Revue de conformite contractuelle des transitions
THEN
- Le verdict est `non-conformite specification`
- La livraison est refusee
- Absence d'effets secondaires: aucun etat ne reste en statut "indetermine"
5. Tests d'invariants (non negociables)
| Invariant | Test(s) dedies | Observable | Commentaire |
| INV-274-01 | TC-NOM-01, TC-NOM-02, TC-ERR-01 | Fait entity_enum_values(...) + check check_batch_status_enum | Cardinalite et contenu strictement verifies. |
| INV-274-02 | TC-NOM-01, TC-NEG-01 | Faits extraits sur modele TS enum avec stockage varchar | Garantit independance entre type metier et type SQL. |
| INV-274-03 | TC-NOM-03, TC-NOM-04, TC-ERR-02 | Fait service_method(...) + check check_handle_reorg | Couvre presence de capacite reorg attendue par regle. |
| INV-274-04 | TC-NOM-07, TC-NOM-08, TC-ERR-05 | Matrice de transitions complete AUTORISEE/INTERDITE | Aucune transition implicite toleree. |
| INV-274-05 | TC-NOM-07, TC-NEG-03 | Absence de sorties autorisees pour etats terminaux | Terminalite testee explicitement. |
| INV-274-06 | TC-NOM-05, TC-NOM-06, TC-ERR-03 | Diff checks baseline vs apres + score final | Non-regression formelle obligatoire. |
| INV-274-07 | TC-NR-02, TC-ERR-04 | Rapport tests backend existants en PASS | Non-regression applicative obligatoire. |
| INV-274-08 | TC-INV-08, TC-NR-03 | Diff schema/DDL avant-apres = vide | Tout changement de type/contrainte/index/nullabilite est interdit. |
6. Tests de non-regression
| Test ID | Objet | Observable | Commentaire |
| TC-NR-01 | Preservation des 22 checks deja OK | Tableau comparatif baseline/apres correction | Echec si un seul check regresse. |
| TC-NR-02 | Preservation des tests backend existants | Rapport de test global (PASS/FAIL) | Echec si au moins un test existant echoue. |
| TC-NR-03 | Absence de changement DDL | Diff migration/schema/type metadata | Echec si changement implicite detecte. |
7. Tests negatifs et adversariaux
| Test ID | Entree invalide / abus | Resultat attendu | Observable |
| TC-NEG-01 | status stocke en varchar mais extraction enum forcee depuis SQL au lieu du type TS | KO de conformite (enum incomplet ou absent) | entity_enum_values(...) absent/incomplet, check_batch_status_enum=KO |
| TC-NEG-02 | Presence d'une valeur enum additionnelle (ex: CANCELLED) | Rejet contractuel (liste non exacte) | Cardinalite != 6 ou set != attendu |
| TC-NEG-03 | Transition sortante autorisee depuis FINALIZED ou FAILED | Rejet de specification | Matrice de transitions signale non-conformite |
| TC-NEG-04 | Suppression/renommage methode reorg sans alias contractuel | KO de conformite reorg | Absence des faits service_method(anchor_batch, handleReorg|reorg) |
8. Observabilite requise pour les tests
- Etat systeme : snapshot avant/apres des faits Prolog (
entity_enum_values, service_method) et des statuts de checks. - Reponse API : non requise pour valider les checks formels; uniquement utile si transitions etats sont exposees via API interne.
- Journal d'audit : trace horodatee d'execution PV-ANCHOR-001, incluant version regles et commit cible.
- Evenement signe / horodate : preuve immutable de verdict (
24/24, KO, motif), associee a l'execution. - Export probatoire : artefact versionne contenant baseline, resultat final, et diff de non-regression.
9. Regles non testables
| Regle | Raison | Impact |
CA-04 (observable strict service_method(anchor_batch, handleReorg)) vs INV-274-03 (accepte handleReorg ou reorg) | Contradiction contractuelle: une version valide par invariant (reorg) peut echouer CA-04 strict | Majeur |
10. Verdict QA
- ⚠️ Testable partiellement (avec reserves listees)
- Reserve principale: aligner CA-04 avec INV-274-03 pour supprimer l'ambiguite de nommage (
handleReorg vs reorg). - Hors cette reserve, la couverture est complete: 8/8 invariants couverts, 8/8 criteres couverts, 5/5 cas d'erreur couverts.