feat(commercial) : catégories de type Adresse pour les blocs adresse (client + fournisseur) (#147)
Auto Tag Develop / tag (push) Successful in 12s
Auto Tag Develop / tag (push) Successful in 12s
## Objectif Introduit un `CategoryType` dédié **ADRESSE** (module Catalog) consommé par le champ « Catégorie » des blocs adresse, en remplacement de la réutilisation détournée des types CLIENT / FOURNISSEUR. ## Changements **Backend** - Migration de seed du type ADRESSE + 6 catégories : Siège, Contact issues, Facturation, Livraison, Approvisionnement, Méthaniseur (idempotente, réversible) ; fixtures alignées. - `ClientAddress` : validation blacklist (DISTRIBUTEUR/COURTIER) remplacée par une whitelist « catégories de type ADRESSE uniquement ». - `SupplierAddress` : type requis FOURNISSEUR → ADRESSE (le bloc principal fournisseur reste en FOURNISSEUR). **Frontend** - Ref dédiée `addressCategories` (`?typeCode=ADRESSE`) dans les composables référentiels client et fournisseur. - Pages new/edit client et fournisseur câblées sur les blocs adresse. **Tests** - `CategoryAdresseSeedTest` (miroir du test PRESTATAIRE). - Adaptation des tests d'adresse client/fournisseur (sémantique whitelist ADRESSE) + helper `createAddressCategory()`. ## Vérifications - Back : suites Catalog + Architecture + adresse/fournisseur vertes (le flake JWT connu du hook est sans rapport, tests verts en isolation). - Front : Vitest vert (composables référentiels + ciblés). - php-cs-fixer : 0 correction ; eslint : OK. Reviewed-on: #147 Co-authored-by: tristan <tristan@yuno.malio.fr> Co-committed-by: tristan <tristan@yuno.malio.fr>
This commit was merged in pull request #147.
This commit is contained in:
@@ -36,10 +36,10 @@ abstract class AbstractCommercialApiTestCase extends AbstractApiTestCase
|
||||
protected const string TEST_CATEGORY_PREFIX = 'test_cli_cat_';
|
||||
|
||||
/**
|
||||
* Codes pilotant les RG (RG-1.03 distributor/broker, RG-1.29 adresse) : ils
|
||||
* doivent matcher exactement, donc createCategory() les fetch-or-create par
|
||||
* code. Les autres codes sont traites comme de simples libelles generiques et
|
||||
* produisent une categorie a code UNIQUE (cf. createCategory).
|
||||
* Codes pilotant les RG (RG-1.03 distributor/broker) : ils doivent matcher
|
||||
* exactement, donc createCategory() les fetch-or-create par code. Les autres
|
||||
* codes sont traites comme de simples libelles generiques et produisent une
|
||||
* categorie a code UNIQUE (cf. createCategory).
|
||||
*/
|
||||
private const array RG_EXACT_CODES = ['DISTRIBUTEUR', 'COURTIER'];
|
||||
|
||||
@@ -75,6 +75,47 @@ abstract class AbstractCommercialApiTestCase extends AbstractApiTestCase
|
||||
return $type;
|
||||
}
|
||||
|
||||
/**
|
||||
* Recupere (ou cree) le type ADRESSE (categories des blocs adresse). Idempotent
|
||||
* via l'unicite de category_type.code. Laisse en place au tearDown.
|
||||
*/
|
||||
protected function addressCategoryType(): CategoryType
|
||||
{
|
||||
$em = $this->getEm();
|
||||
$existing = $em->getRepository(CategoryType::class)->findOneBy(['code' => 'ADRESSE']);
|
||||
if (null !== $existing) {
|
||||
return $existing;
|
||||
}
|
||||
|
||||
$type = new CategoryType();
|
||||
$type->setCode('ADRESSE');
|
||||
$type->setLabel('Adresse');
|
||||
$em->persist($type);
|
||||
$em->flush();
|
||||
|
||||
return $type;
|
||||
}
|
||||
|
||||
/**
|
||||
* Cree une Category de test de type ADRESSE (autorisee sur un bloc adresse).
|
||||
* Code UNIQUE (suffixe aleatoire) : les categories d'adresse ne pilotent aucune
|
||||
* RG par code, deux appels produisent donc deux categories distinctes.
|
||||
*/
|
||||
protected function createAddressCategory(): Category
|
||||
{
|
||||
$em = $this->getEm();
|
||||
$suffix = substr(bin2hex(random_bytes(4)), 0, 8);
|
||||
|
||||
$category = new Category();
|
||||
$category->setName(self::TEST_CATEGORY_PREFIX.'adresse_'.$suffix);
|
||||
$category->setCode('ADRESSE_'.strtoupper($suffix));
|
||||
$category->addCategoryType($this->addressCategoryType());
|
||||
$em->persist($category);
|
||||
$em->flush();
|
||||
|
||||
return $category;
|
||||
}
|
||||
|
||||
/**
|
||||
* Cree une Category de test sous le type unique CLIENT (ERP-78).
|
||||
*
|
||||
|
||||
Reference in New Issue
Block a user