Aller au contenu

PD-285 — Scénarios de tests contractuels

1. Références

  • Spécification : PD-285-specification.md
  • Epic : EPIC-XX (valeur opérationnelle en attente de confirmation finale)

2. Matrice de couverture

ID Invariant ID Critère ID Test Couverture Commentaire
INV-285-01-coherence CA-01 TC-NOM-01 Oui Valeur exacte DEFAULT.maxSizeBytes vérifiée à 524288000.
INV-285-01-coherence CA-02 TC-NOM-02 Oui Valeur exacte B2C_EVIDENCE_MINOR.maxSizeBytes vérifiée à 524288000.
INV-285-01-coherence CA-07 TC-NOM-08 Oui (sous réserve format preuve) Cohérence inter-EB validée via rapport sans écart PD-101/backend.
INV-285-02-categories-cible CA-01, CA-02 TC-NEG-01 Oui Vérifie que seules les 2 catégories cibles sont relevées.
INV-285-03-rejet-hors-borne CA-03 TC-NOM-03 Oui Rejet middleware au-delà de la borne.
INV-285-03-rejet-hors-borne CA-03 TC-NOM-04 Oui Borne haute inclusive acceptée côté middleware.
INV-285-03-rejet-hors-borne CA-04 TC-NOM-05 Oui Rejet métier au-delà de la borne avec code contractuel.
INV-285-04-unite-et-bornes CA-01, CA-02 TC-NEG-02 Oui Bornes [1..524288000] et unité bytes testées.
INV-285-05-erreur-metier CA-04 TC-NOM-05 Oui Code exact ERR-79-004 vérifié.
INV-285-06-non-regression CA-05 TC-NR-01 Oui Plage 1..104857600 inchangée si autres règles satisfaites.
INV-285-07-doc-sync CA-06 TC-NOM-07 Oui PD-252 besoin + spécification alignés sur 500 MB.
INV-285-08-checklist-temporelle TC-INV-08 Oui Absence de transition temporelle démontrée par preuve d’analyse.
INV-285-09-etats-retour TC-INV-09 Oui Validation stateless, pas de machine d’état modifiée.
INV-285-10-protection-distribuee TC-INV-10 Oui Aucune queue/lock/worker introduite dans le périmètre.
INV-285-11-atomicite-ddl TC-INV-11 Oui Aucune migration DDL / atomicité multi-composant requise.
INV-285-12-intermodule TC-INV-12 Oui Aucune contrainte inter-module ajoutée.
CA-05 TC-NOM-09 Oui Suite unitaire ciblée à jour et passante.
CA-07 TC-ERR-06 Oui (négatif) Si écart persiste au rapport, CA-07 échoue objectivement.

3. Scénarios de test – Flux nominaux

TEST-ID: TC-NOM-01
Référence spec: INV-285-01, CA-01

GIVEN
  - Configuration catégories backend chargée
WHEN
  - Lecture de DocumentCategoryConfig.DEFAULT.maxSizeBytes
THEN
  - La valeur observée est exactement 524288000
AND
  - Aucune conversion d’unité implicite n’est appliquée
TEST-ID: TC-NOM-02
Référence spec: INV-285-01, CA-02

GIVEN
  - Configuration catégories backend chargée
WHEN
  - Lecture de DocumentCategoryConfig.B2C_EVIDENCE_MINOR.maxSizeBytes
THEN
  - La valeur observée est exactement 524288000
AND
  - La valeur est exprimée en bytes
TEST-ID: TC-NOM-03
Référence spec: INV-285-03, CA-03

GIVEN
  - Requête upload catégorie DEFAULT
  - Content-Length = 524288001
WHEN
  - Pré-validation middleware exécutée
THEN
  - Requête rejetée immédiatement pour dépassement de taille
AND
  - La requête n’atteint pas l’étape de validation métier
TEST-ID: TC-NOM-04
Référence spec: INV-285-03, CA-03

GIVEN
  - Requête upload catégorie DEFAULT
  - Content-Length = 524288000
WHEN
  - Pré-validation middleware exécutée
THEN
  - Requête non rejetée pour motif de taille
AND
  - Le flux poursuit vers la validation métier
TEST-ID: TC-NOM-05
Référence spec: INV-285-03, INV-285-05, CA-04

GIVEN
  - Validation métier sur fichier de taille 524288001
WHEN
  - Application de la règle de catégorie
THEN
  - Rejet métier émis
AND
  - Le code d’erreur est exactement ERR-79-004
TEST-ID: TC-NOM-06
Référence spec: INV-285-03

GIVEN
  - Validation métier sur fichier de taille 524288000
WHEN
  - Application de la règle de catégorie
THEN
  - La validation taille est conforme
AND
  - Aucun ERR-79-004 n’est retourné
TEST-ID: TC-NOM-07
Référence spec: INV-285-07, CA-06

GIVEN
  - Artefacts PD-252 besoin et PD-252 spécification disponibles
WHEN
  - Vérification textuelle des deux documents
THEN
  - Chaque document contient "storage.category_max_bytes: 500 MB"
AND
  - Les deux formulations sont cohérentes entre elles
TEST-ID: TC-NOM-08
Référence spec: INV-285-01, CA-07

GIVEN
  - Pipeline inter-EB exécutée après amendements
WHEN
  - Rapport de cohérence produit
THEN
  - Aucune incohérence PD-101 vs backend sur la taille max n’est remontée
AND
  - Le statut de contrôle est conforme pour cette règle
TEST-ID: TC-NOM-09
Référence spec: CA-05

GIVEN
  - Suite de tests unitaires liée aux limites de catégorie
WHEN
  - Exécution de la suite ciblée
THEN
  - Tous les tests concernés sont passants
AND
  - Aucun test de limite régressif n’échoue

4. Scénarios de test – Cas d’erreur

TEST-ID: TC-ERR-01
Référence spec: E-01, CA-03

GIVEN
  - Requête upload avec Content-Length > 524288000
WHEN
  - Middleware de pré-validation exécuté
THEN
  - Rejet immédiat de la requête
  - Absence de traitement métier ultérieur
TEST-ID: TC-ERR-02
Référence spec: E-02, CA-04

GIVEN
  - Taille métier calculée > 524288000
WHEN
  - Validation service exécutée
THEN
  - Rejet métier avec ERR-79-004
  - Absence d’acceptation implicite
TEST-ID: TC-ERR-03
Référence spec: E-03

GIVEN
  - Catégorie documentaire non reconnue
WHEN
  - Validation de catégorie exécutée
THEN
  - Rejet explicite de la requête
  - Le rejet n’utilise pas le code taille ERR-79-004 (sauf spécification contraire)
TEST-ID: TC-ERR-04
Référence spec: E-04

GIVEN
  - Valeur de taille mal formée ou non numérique
WHEN
  - Contrôle d’entrée exécuté
THEN
  - Entrée rejetée explicitement
  - Absence de normalisation silencieuse
TEST-ID: TC-ERR-05
Référence spec: E-05, CA-06

GIVEN
  - Un seul des deux documents PD-252 est amendé
WHEN
  - Contrôle de synchronisation documentaire exécuté
THEN
  - Non-conformité documentaire détectée
  - Clôture de story bloquée
TEST-ID: TC-ERR-06
Référence spec: E-06, CA-07

GIVEN
  - Rapport inter-EB post-amendement
WHEN
  - Contrôle de cohérence consulté
THEN
  - Si une incohérence PD-101/backend persiste, CA-07 est échoué
  - Story non clôturable

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

Invariant Test(s) dédiés Observable Commentaire
INV-285-01-coherence TC-NOM-01, TC-NOM-02, TC-NOM-08 Valeurs exactes + rapport inter-EB conforme Couvre valeur et règle SYSTÈME >= BACKEND >= CLIENT.
INV-285-02-categories-cible TC-NEG-01 Aucune autre catégorie relevée à 500 MB Limitation de périmètre vérifiée.
INV-285-03-rejet-hors-borne TC-NOM-03, TC-NOM-04, TC-NOM-05, TC-NOM-06 Borne strictement > rejetée, = acceptée Rejet explicite sans clamp.
INV-285-04-unite-et-bornes TC-NEG-02 Rejet hors plage [1..524288000] Contrat numérique strict.
INV-285-05-erreur-metier TC-NOM-05 Code exact ERR-79-004 Non-conformité si code différent.
INV-285-06-non-regression TC-NR-01 Acceptation inchangée plage historique Sous réserve des autres règles.
INV-285-07-doc-sync TC-NOM-07, TC-ERR-05 Deux artefacts alignés Condition bloquante de clôture.
INV-285-08-checklist-temporelle TC-INV-08 Aucune exigence temporelle active Validation d’absence.
INV-285-09-etats-retour TC-INV-09 Aucune transition retour applicable Validation stateless.
INV-285-10-protection-distribuee TC-INV-10 Aucun mécanisme distribué requis Validation d’absence dans périmètre.
INV-285-11-atomicite-ddl TC-INV-11 Aucune migration/DDL associée Validation d’absence DB schema.
INV-285-12-intermodule TC-INV-12 Aucun couplage inter-module ajouté Validation d’absence de contrainte externe.

6. Tests de non-régression

Test ID Objet Observable Commentaire
TC-NR-01 Plage historique 1..104857600 Requêtes conformes non rejetées pour taille Couvre INV-285-06.
TC-NR-02 Borne ancienne 104857600 Valeur limite historiquement acceptée reste acceptée Vérifie absence de régression à la frontière 100 MB.
TC-NR-03 Multipart global 5 TB inchangé (hors périmètre story) Pas de changement contractuel détecté Contrôle documentaire/config de non-impact.
TC-NR-04 Quotas utilisateur inchangés (hors périmètre) Aucune altération des règles de quota Contrôle de non-régression périphérique.

7. Tests négatifs et adversariaux

Test ID Entrée invalide / abus Résultat attendu Observable
TC-NEG-01 Catégorie hors {DEFAULT, B2C_EVIDENCE_MINOR} prétendument à 500 MB Non-conformité si relevée ; sinon conforme Lecture exhaustive configs catégories.
TC-NEG-02 maxSizeBytes = 0, -1, 524288001, non numérique Rejet explicite de configuration/validation Erreur de validation déterministe.
TC-NEG-03 Content-Length = "abc" Requête invalide rejetée Réponse erreur entrée invalide.
TC-NEG-04 Content-Length = 524288001 avec catégorie cible Rejet middleware immédiat Pas de passage au service.
TC-NEG-05 Taille métier > limite avec code erreur différent de ERR-79-004 Non-conformité contractuelle Assertion stricte sur code erreur.
TC-NEG-06 Documentation PD-252 partiellement alignée Blocage conformité story Contrôle de présence des 2 références.

8. Observabilité requise pour les tests

  • État système : valeurs effectives de configuration catégorie (maxSizeBytes) lisibles et auditables.
  • Réponse API : statut de rejet/acceptation et présence exacte du code ERR-79-004 au cas métier.
  • Journal d’audit : trace de décision de validation (middleware vs service) horodatée.
  • Événement signé / horodaté : sortie de pipeline inter-EB avec statut de cohérence.
  • Export probatoire : artefacts de preuve (rapport pipeline, résultats suite tests, extraits PD-252) archivables et rejouables.

9. Règles non testables

Règle Raison Impact
Comportement exact middleware si Content-Length absent/non fiable La spécification indique “si présent” mais ne fixe pas explicitement l’issue middleware en absence d’en-tête Majeur
Format exact attendu du rapport de cohérence (CA-07) Observable fonctionnel défini, mais format de preuve non normalisé contractuellement Majeur
Chemin d’artefact final basé sur {DOMAINE} et {PD-285-nom} Variables de chemin non résolues dans les entrées Mineur
Référence épique finale (nom exact) Valeur fournie incomplète (EPIC-XX/“Référence épique”) Mineur

10. Verdict QA

  • ⚠️ Testable partiellement (avec réserves listées)

Motif : la conformité fonctionnelle principale (limites, rejets, code erreur, sync doc, cohérence inter-EB) est testable de manière déterministe ; des ambiguïtés de cadrage subsistent sur la sémantique en absence de Content-Length et sur le format probatoire exact de CA-07.