test(commercial) : SupplierExportControllerTest sur base fournisseurs (catégories FOURNISSEUR, dédup F3) (ERP-113) #73
Reference in New Issue
Block a user
Delete Branch "feature/ERP-113-export-test-fournisseur-categories"
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?
Suivi du finding F3 de la review ERP-92. Test uniquement — aucune modif de code applicatif (le controller d'export ERP-91 est correct).
Problème (F3)
SupplierExportControllerTestétendaitAbstractCommercialApiTestCaseet redéfinissait unseedSupplier()privé appelantcreateCategory()du parent → catégorie de type CLIENT, ce qui viole RG-2.10 dans les données de test (latent : l'export ne filtre pas par type de catégorie, mais le contrat de test était faux).Changements
extends AbstractSupplierApiTestCase(helpersseedSupplier/addContact/supplierCategorysur type FOURNISSEUR).seedSupplier()privé (type CLIENT) et dutearDown()redondant — dédup F3.testExportUsesPrincipalContactColumns: utiliseaddContact()de la base ; le téléphone secondaire (non porté par ce helper) est posé via le setter sur le contact retourné.testExportPopulatesCategoryAndSiteColumns: l'assertion de la colonne « Catégories » dérive le libellé desupplierCategory('NEGOCIANT')->getName()au lieu de hardcoder le préfixe de nom de test (la base nommetest_cli_cat_fr_negociant).Supplier/SupplierContact/DateTimeImmutableretirés (inutilisés).Vérifications
SupplierExportControllerTest: 9 tests, 48 assertions — vert sous APP_DEBUG=0.make test: 574 tests, 2448 assertions — OK sous APP_DEBUG=0.make php-cs-fixer-allow-risky: 0 correction.Review — refacto test-only ✅
Migration de
SupplierExportControllerTestversAbstractSupplierApiTestCase, suppression des helpers locaux dupliqués (tearDown,seedSupplier,addContact) au profit de la base mutualisée.Vérifications
addContact(...)respectent la nouvelle signature(supplier, firstName, lastName, phonePrimary, email, position).tearDownré-fourni à l'identique par la base (purge Supplier avant le parent, cascade BDD) ; importDateTimeImmutableretiré car désormais utilisé uniquement dans la base.private, aucun appelant externe.test_cli_cat_negociantétait devenue fausse (le helper de base nomme la catégorietest_cli_cat_fr_negociant). La dérivation viasupplierCategory(NEGOCIANT)->getName()corrige le drift et rend le test robuste.Findings : aucun (bug / cleanup).
Tests : 9/9 verts (48 assertions). LGTM.
Suite fonctionnelle M2 assertant sur le CORPS JSON (jamais les annotations), jumelle de la suite clients M1 : - contrat de sérialisation : 4 régressions M1 re-testées (RIB gaté absent pour Commerciale, booléens triageProvider/isArchived présents, embed categories[].code/name, embed sites[].name/postalCode objet) + enveloppe AP4 (member/totalItems/view, archivés exclus) + suppression du contact inline ; - matrice RBAC réelle (app:seed-rbac) bureau/compta/commerciale/usine 200/403, gating accounting par omission de clé, mode strict PATCH (RG-2.16) ; - RG-2.03/2.04/2.05/2.06/2.07/2.08/2.09/2.10/2.11/2.12/2.14/2.15/2.17 ; - sous-ressources contacts/adresses/ribs (CRUD, sécurité, normalisation) ; - anti N+1 liste (compte de requêtes constant), audit Supplier + RIB iban/bic. Fix de contrat découvert et corrigé (sinon DoD figée sur un contrat faux) : les référentiels comptables (TvaMode/PaymentType/PaymentDelay/Bank) ne portaient que le groupe client:read:accounting (M1) → sur un fournisseur ils sortaient en IRI nu. Ajout de supplier:read:accounting → objet {id, code, label} embarqué. makefile : test-db-setup recrée l'index partiel uq_supplier_company_name_active (droppé par schema:update comme pour le client) — oubli M2. DoD § 4.0.bis : réponses JSON RÉELLES (liste + détail admin/commerciale) collées, capturées via SupplierSerializationContractTest.Fait étendre SupplierExportControllerTest à AbstractSupplierApiTestCase au lieu d'AbstractCommercialApiTestCase. Supprime le seedSupplier() privé (qui seedait des catégories de type CLIENT via createCategory(), violant RG-2.10) et le tearDown() redondant, désormais portés par la base sur des catégories FOURNISSEUR. Le contact principal utilise le helper addContact() de la base ; le téléphone secondaire, non porté par ce helper, est posé via le setter sur le contact retourné. L'assertion de la colonne Catégories dérive le libellé attendu de supplierCategory('NEGOCIANT') au lieu de hardcoder le préfixe de nom de test.edde89bcbato380b0c9ef1