test(catalog) : M7 — tests RG-7.01→7.08 + contrat de sérialisation (ERP-215) #167
Reference in New Issue
Block a user
Delete Branch "feat/erp-215-tests-storage"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
M7 · ERP-215 (1.6) — Tests RG-7.01→7.08 + capture du contrat JSON
Couvre les règles métier du stockage en PHPUnit et fige le contrat de sérialisation réel (DoD). Structure miroir M6 (tests dédiés par RG).
Reclassement
StorageApiTest(smoke test bundlé introduit en ERP-213) est supprimé et remplacé par les classes canoniques par RG — mirroir exact de la structure produit M6 (ProductCodeUniquenessTest,ProductStatesValidationTest,ProductRBACMatrixTest,ProductSerializationContractTest…). Net surdevelopaprès merge de la pile : pas de doublon.Tests livrés
StorageSerializationContractTest— POST réel puis GET liste + détail ;site/storageTypeen objets embarqués (pas IRI),statestableau,displayNameprésent et correct. + RG-7.07 (soft-deleted jamais exposé). DoD régénérableSTORAGE_DOD_DUMP=1.StorageUniquenessTest(RG-7.01 / RG-7.08) — 409 doublon triplet actif ; même numéro OK sur autre site ou autre type ; réutilisation OK après soft-delete ; PATCH vers triplet existant → 409.StorageStatesValidationTest(RG-7.04 / RG-7.08) — ≥1 état requis (422), valeur hors enum (422), 1 état valide (201), PATCH états vides → 422.StorageDisplayNameTest(RG-7.05) —displayName= « » sur le JSON réel.StorageRBACMatrixTest— Admin 200/201 ; Bureau/Compta/Commerciale/Usine → 403 (view+manage) ; anonyme → 401.StorageTypeBySiteTest(RG-7.03) —markTestSkippedavec justification.RG-7.03 — test skippé (décision ERP-213 validée avec toi)
Le concept type↔site a été retiré du modèle en M6 (jointure
storage_type_sitedroppée,StorageTyperendu plat). Aucun référentiel à interroger pour lever une 422 → RG-7.03 inimplémentable telle quelle. Le test est conservé skippé pour la traçabilité DoD (à réactiver si la spec réintroduit le lien). À reclarifier côté spec.Contrat de sérialisation réel (spec § 4.0.bis)
Le fichier
docs/specs/M7-stockage/spec-back.mdn'existe pas sur le repo — je colle ici le détail réel capturé (STORAGE_DOD_DUMP=1) à reporter dans la spec :Vérifications
make test: les échecs résiduels (Commercial/Technique) = flaky JWT connu (différents à chaque run, tous verts en isolation 7/7) ; 1 skippé (RG-7.03).make php-cs-fixer-allow-risky: clean.AuditableEntitiesHaveI18nLabelTest: déjà vert — la clécatalog_storagea été posée dès ERP-212 (le prompt la situait en ERP-219, mais elle était nécessaire aumake testde ERP-212).Revue de code — M7 Stockages (tests)
🟡 Contrat de sérialisation incomplet —
StorageSerializationContractTestLe test n'assère que des clés choisies (site.name/code, storageType.label, states, displayName), jamais l'absence des champs non exposés (
deletedAt,createdBy,updatedBy) ni le set complet de clés. Une régression qui ajouteraitdeletedAt/createdByàstorage:readpasserait au vert — alors que c'est précisément ce qu'un test « contrat » doit attraper. Ajouter l'assertion d'absence + le set de clés attendu.🟡 Test soft-delete liste quasi-vacuous —
StorageSerializationContractTesttestSoftDeletedIsNotExposedne seede qu'un stockage soft-deleté puis assèrenullsur une collection devenue vide : impossible de distinguer « le provider exclut le soft-deleté » de « la collection est vide ». RG-7.07 n'est pas réellement exercée côté liste (seul le 404 sur l'item l'est). → Seeder 1 actif + 1 supprimé, asserter présence de l'actif ET absence du supprimé dans la même réponse.🟡 Couverture validation manquante —
StorageStatesValidationTestPas de test pour
numero(NotBlank / Length 50), niNotNullsursite/storageType, ni surtout le chemincollectDenormalizationErrors:true(IRIsite/storageTypeinvalide → doit remonter 422 + propertyPath, pas 400) — pourtant signalé comme piège RETEX-M1 dans l'entité. La normalisation RG-7.06 (POST" A1 "→ stocké"A1") n'est exercée nulle part (tous les fixtures fournissent des numéros déjà propres) → un trim cassé passerait inaperçu et contournerait le contrôle d'unicité.🟡 RG-7.03 (type dispo sur le site) —
markTestSkippedpermanentChoix documenté (référentiel
storage_typeaplati en M6), mais la matrice DoD liste RG-7.03 comme couverte alors que rien ne l'exerce et que le test reste vert pour toujours. → Reclarifier côté spec : règle abandonnée ou à réintroduire (avec un lien type↔site) ?