4369c71706
Entité WeighingTicket - Entité métier complète (#[Auditable], TimestampableBlamableTrait, relations ORM Client/Supplier/Site) + contrat de sérialisation à 3 maillons (weighing_ticket:read / :item:read + contextes par opération). - Getters calculés displayDate et plateFreeFormat (#[SerializedName]), sécurité view/manage, pas de Delete/archive. - Validation #[Assert\*] messages FR + #[Assert\Callback] RG-5.03 (->atPath()), libellé i18n audit.entity.logistique_weighingticket. - Repository : interface Domain + DoctrineWeighingTicketRepository (recherche + tri number DESC, deletedAt IS NULL). Dette site.code - Site.code mappé VARCHAR(8) (groupes read/write), dérivation auto au PrePersist (2 premiers chiffres du CP), UniqueConstraint uq_site_code. - Migration Version20260617160000 : ALTER COLUMN code SET NOT NULL + COMMENT. - Fixtures (codes 86/17/82) et SiteApiTest ajustés. Câblage - doctrine.yaml : mapping ORM du module Logistique (absent du scaffold ERP-181). - ColumnCommentsCatalog : site.code + table weighing_ticket. Specs M5 versionnées (spec-back / spec-front / prompts).
2.1 KiB
2.1 KiB
Prompt d'implémentation — M5 · ERP-187 (1.7) — Tests PHPUnit RG-5.01→5.10 + capture contrat JSON
Projet Starseed. Tâche back / tests. Lis CLAUDE.md, .claude/rules/testing.md et la spec : docs/specs/M5-tickets-pesee/spec-back.md (§ 8, § 4.0.bis). Prérequis : ERP-183 → ERP-186 mergés.
Mission
Couvrir les RG du M5 par des tests PHPUnit et capturer la réponse JSON réelle (DoD) à coller dans la spec avant le démarrage front.
Étapes
WeighingTicketSerializationContractTest: seeder un ticket complet (contrepartie Client, pesée vide + plein), capturer le JSON liste + détail (via une variable d'env de dump, cf. pattern M4CARRIER_DOD_DUMP). Vérifier les 4 pièges :client/suppliersortent en objet embarqué, pas en IRI nu ;plateFreeFormatprésent dans le JSON ;numberprésent et formaté{siteCode}-TP-{NNNN};netWeight=full - empty(plein − vide). → Coller le JSON capturé dansspec-back.md § 4.0.bis(feu vert front).
WeighingTicketNumberingTest: numéro par site, unicité, concurrence (FOR UPDATE), immuabilité au PATCH.DsdAllocatorTest: AUTO incrémente / MANUAL = dernier+1 / compteur par site.WeighbridgeReaderStubTest: poids ∈ [10000,50000] ;WeighbridgeUnavailableException→ 503 (RG-5.06).NetWeightTest: plein − vide ;nullsi une pesée manque (RG-5.05).CounterpartyValidationTest: RG-5.03 (chaque branche valide + rejets des incohérences).ImmatriculationNormalizationTest: masqueXX-000-XX,plateFreeFormat, 422 si invalide (RG-5.01).- RBAC : Admin/Bureau/Usine OK ; Compta/Commerciale → 403 ; anonyme → 401.
Garde-fous
declare(strict_types=1);; fixtures dédiées soustests/Fixtures/.- Pas de test E2E (règle d'or) — PHPUnit uniquement.
- Ne pas casser les tests Architecture existants.
Vérification
make testvert (suite complète, dont Architecture).spec-back.md § 4.0.biscontient le JSON RÉEL avec les 4 pièges marqués verts.make php-cs-fixer-allow-risky.