Files
Starseed/docs/specs/M4-transporteurs/prompts/WT10-tests.md
T
Matthieu d9313dbec8 feat(transport) : schéma + entités Carrier + contrat lecture (ERP-155/157)
Schéma BDD du répertoire transporteurs (M4) + entités + contrat de lecture
(liste + détail), socle du front.

- Migration Version20260615150000 : tables carrier / carrier_address /
  carrier_contact / carrier_price (FK cross-module, CHECK enum, index partiel
  uq_carrier_name_active, COMMENT ON COLUMN). uploaded_document et
  qualimat_carrier réutilisées (non recréées).
- Entités Carrier* (#[Auditable], Timestampable/Blamable) + ApiResource
  LECTURE seule (GetCollection + Get via CarrierProvider, anti-N+1, exclusion
  archivés + ?includeArchived). Écriture (POST/PATCH + Processor) reportée WT4+.
- QualimatCarrier : mapping ORM lecture seule sur la table référentielle
  existante (sortie du schema_filter, mapping aligné DDL ERP-39, schema:update
  no-op) + endpoint de recherche read-only (§ 4.7).
- Relations cross-module des prix (Client/Supplier/adresses) via contrats
  Shared (ClientInterface, SupplierInterface, ClientAddressInterface,
  SupplierAddressInterface) + resolve_target_entities — sans import inter-module
  (règle n°1). Ajout du groupe supplier_address:read aux champs de
  SupplierAddress pour l'embed.
- Garde-fous : ColumnCommentsCatalog (carrier* + qualimat_carrier), makefile
  test-db-setup (index partiel carrier), i18n audit (transport_carrier*),
  EntitiesAreTimestampableBlamableTest (QualimatCarrier whitelisté).
- CarrierSerializationContractTest : contrat JSON liste + détail vérifié
  (embeds objet, booléens, enveloppe Hydra) ; JSON réel capturé dans
  spec-back § 4.0.bis.

make db-reset OK, make test vert (731), make nuxt-test vert (480),
php-cs-fixer OK.
2026-06-15 19:15:12 +02:00

2.5 KiB

WT10 — Tests PHPUnit + fixtures + contrat JSON (ticket 1.11 / ERP-163)

git fetch origin
git worktree add ../sb-erp163-tests -b feat/erp-163-carrier-tests origin/develop
cd ../sb-erp163-tests && claude

Base : origin/develop après merge de TOUS les worktrees back (WT1→WT9). C'est le filet final.


Prompt à coller

Projet Starseed (Symfony 8 / API Platform 4, DDD). Lis CLAUDE.md, .claude/rules/backend.md, .claude/rules/testing.md. Charge le skill backend-entity-conventions. Miroir : tests/Module/Commercial/Api/Supplier*Test.php.

Mission : couverture complète des RG + capture du contrat de sérialisation + fixtures consolidées. C'est le DoD back avant intégration front.

Spec : spec-back.md § 4.0.bis / 8.1 / 8.4.

À livrer :

  • Matrice RG-4.01→4.14 couverte (§ 8.1) + RBAC par rôle (Compta/Usine → 403, Commerciale → 403 sur write, Admin → archive).
  • CarrierSerializationContractTest : capture JSON réel liste + détail ; prices[].client/.supplier/sites embarqués (pas IRI) ; qualimatCarrier embarqué ; isArchived présent. Colle les JSON dans spec-back.md § 4.0.bis.
  • Anti-N+1 liste ; pagination Hydra ; audit (entity_type='Carrier') ; AuditableEntitiesHaveI18nLabelTest vert.
  • CarrierFixtures idempotent (§ 8.4) — c'est ICI que les fixtures complètes vivent : transporteur QUALIMAT (validité passée → RG-4.04), AUTRE+décharge, affrété, LIOT, complet (contacts/adresses/prix CLIENT+FOURNISSEUR), 1 archivé.

Piège CI (mémoire projet) : la CI tourne APP_DEBUG=0. Les tests de comptage de requêtes (anti-N+1) passent en local mais cassent en CI (DoctrineDataHolder absent) → vérifie/active profiling: true dans la config Doctrine de l'environnement test. Sans ça le test anti-N+1 sera rouge en CI.

Scope : tests + CarrierFixtures + remplissage § 4.0.bis. Tu peux ajuster un test cassé hérité d'un autre WT mais signale-le à la conv maître (ne masque pas un vrai bug).

Fini quand : make test intégralement vert + make php-cs-fixer-allow-risky. Commit (--no-verify si vert), puis ouvre la PR :

git push -u origin feat/erp-163-carrier-tests
tea pr create --base develop --head feat/erp-163-carrier-tests \
  --title "test(transport) : couverture RG-4.01→4.14 + contrat + fixtures (ERP-163)" \
  --description "Matrice RG + CarrierSerializationContractTest + CarrierFixtures + § 4.0.bis. Ticket ERP-163."

Puis labellise via l'API Gitea. Cible develop. Aucune mention IA.