feat(catalog) : M6 — Catalogue produits (ERP-197 → ERP-203) (#154)
Auto Tag Develop / tag (push) Successful in 11s
Auto Tag Develop / tag (push) Successful in 11s
Module **M6 — Catalogue produits** (ERP-197 → ERP-203), pile consolidée en une seule MR vers `develop` pour un CI unique. Contenu (commits) : - ERP-197 — permissions `catalog.products.*` + sidebar + 3 miroirs RBAC - ERP-198 — migration schéma M6 (storage_type, product, jonctions, type PRODUIT) - ERP-199 — entités Product + StorageType + repositories + contrat de sérialisation - ERP-200 — ProductProvider + ProductProcessor (unicité code, RG-6.03/05/06, normalisation) - ERP-201 — référentiel StorageType exposé (filtre site) + seed Figma + catégories PRODUIT - ERP-202 — export XLSX du catalogue produits (filtres liste) - ERP-203 — tests PHPUnit RG-6.01→6.10 + capture du contrat JSON produit - fix review M6 — default jsonb mort (states) + constante préfixe storage-type de test Remplace et clôt les MR #148, #149, #150, #151, #152, #153 (commits intégralement inclus ici). --------- Co-authored-by: admin malio <malio@yuno.malio.fr> Co-authored-by: Matthieu <contact@malio.fr> Reviewed-on: #154
This commit was merged in pull request #154.
This commit is contained in:
@@ -0,0 +1,79 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace App\Tests\Module\Catalog\Api;
|
||||
|
||||
/**
|
||||
* RG-6.03 : « Fabrique » / « Contient de la melasse » saisissables uniquement si
|
||||
* `states` contient SALE ; sinon forces `false` cote serveur (Processor), quoi
|
||||
* que le client envoie.
|
||||
*
|
||||
* @internal
|
||||
*/
|
||||
final class ProductConditionalFieldsTest extends AbstractProductApiTestCase
|
||||
{
|
||||
public function testConditionalFieldsForcedFalseWithoutSale(): void
|
||||
{
|
||||
$client = $this->createAdminClient();
|
||||
|
||||
// Pas de SALE dans les etats mais champs conditionnels a true cote client.
|
||||
$created = $client->request('POST', '/api/products', [
|
||||
'headers' => ['Content-Type' => self::LD],
|
||||
'json' => $this->validProductPayload([
|
||||
'states' => ['PURCHASE', 'OTHER'],
|
||||
'manufactured' => true,
|
||||
'containsMolasses' => true,
|
||||
]),
|
||||
])->toArray();
|
||||
|
||||
self::assertResponseStatusCodeSame(201);
|
||||
// Le serveur a force les deux a false (RG-6.03).
|
||||
self::assertFalse($created['manufactured']);
|
||||
self::assertFalse($created['containsMolasses']);
|
||||
}
|
||||
|
||||
public function testConditionalFieldsKeptWithSale(): void
|
||||
{
|
||||
$client = $this->createAdminClient();
|
||||
|
||||
$created = $client->request('POST', '/api/products', [
|
||||
'headers' => ['Content-Type' => self::LD],
|
||||
'json' => $this->validProductPayload([
|
||||
'states' => ['SALE'],
|
||||
'manufactured' => true,
|
||||
'containsMolasses' => true,
|
||||
]),
|
||||
])->toArray();
|
||||
|
||||
self::assertResponseStatusCodeSame(201);
|
||||
// SALE present -> les valeurs saisies sont conservees.
|
||||
self::assertTrue($created['manufactured']);
|
||||
self::assertTrue($created['containsMolasses']);
|
||||
}
|
||||
|
||||
public function testConditionalFieldsResetOnPatchRemovingSale(): void
|
||||
{
|
||||
$client = $this->createAdminClient();
|
||||
|
||||
$created = $client->request('POST', '/api/products', [
|
||||
'headers' => ['Content-Type' => self::LD],
|
||||
'json' => $this->validProductPayload([
|
||||
'states' => ['SALE'],
|
||||
'manufactured' => true,
|
||||
'containsMolasses' => true,
|
||||
]),
|
||||
])->toArray();
|
||||
self::assertResponseStatusCodeSame(201);
|
||||
|
||||
// On retire SALE en PATCH -> les conditionnels doivent retomber a false.
|
||||
$patched = $client->request('PATCH', '/api/products/'.$created['id'], [
|
||||
'headers' => ['Content-Type' => self::MERGE],
|
||||
'json' => ['states' => ['PURCHASE']],
|
||||
])->toArray();
|
||||
|
||||
self::assertResponseStatusCodeSame(200);
|
||||
self::assertFalse($patched['manufactured']);
|
||||
self::assertFalse($patched['containsMolasses']);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user