test(commercial) : cover RG-1.01..1.29 except role-gated (M1)
This commit is contained in:
@@ -0,0 +1,73 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace App\Tests\Module\Commercial\Api;
|
||||
|
||||
use App\Module\Commercial\Domain\Entity\Client as ClientEntity;
|
||||
|
||||
/**
|
||||
* Tests d'unicite — combler les trous (ERP-60).
|
||||
*
|
||||
* RG-1.16 (doublon de companyName parmi les actifs -> 409) est DEJA couvert par
|
||||
* ClientApiTest::testPostDuplicateCompanyNameReturns409 (ERP-55). Ce fichier
|
||||
* verifie l'envers de la decision Q4 (29/05/2026) : le SIREN (RG-1.15 supprimee)
|
||||
* et l'email (RG-1.17 supprimee) NE SONT PLUS contraints uniques.
|
||||
*
|
||||
* @internal
|
||||
*/
|
||||
final class ClientUniquenessTest extends AbstractCommercialApiTestCase
|
||||
{
|
||||
private const string LD = 'application/ld+json';
|
||||
|
||||
/**
|
||||
* RG-1.16 / RG-1.17 (Q4) : deux clients actifs peuvent partager le meme
|
||||
* email principal — aucune contrainte d'unicite (un email peut servir
|
||||
* plusieurs clients).
|
||||
*/
|
||||
public function testDuplicateEmailIsAllowed(): void
|
||||
{
|
||||
$client = $this->createAdminClient();
|
||||
$cat = $this->createCategory('SECTEUR');
|
||||
$iri = '/api/categories/'.$cat->getId();
|
||||
|
||||
$payload = static fn (string $name): array => [
|
||||
'companyName' => $name,
|
||||
'firstName' => 'A',
|
||||
'phonePrimary' => '0102030405',
|
||||
'email' => 'partage@test.fr',
|
||||
'categories' => [$iri],
|
||||
];
|
||||
|
||||
$client->request('POST', '/api/clients', ['headers' => ['Content-Type' => self::LD], 'json' => $payload('Email Share One')]);
|
||||
self::assertResponseStatusCodeSame(201);
|
||||
|
||||
// Meme email, nom different -> doit passer (pas d'index unique email).
|
||||
$client->request('POST', '/api/clients', ['headers' => ['Content-Type' => self::LD], 'json' => $payload('Email Share Two')]);
|
||||
self::assertResponseStatusCodeSame(201);
|
||||
}
|
||||
|
||||
/**
|
||||
* RG-1.15 (Q4) : deux clients peuvent partager le meme SIREN (etablissements
|
||||
* multiples). Le SIREN n'est pas ecrivable au POST (groupe accounting), on
|
||||
* seede donc directement via l'ORM et on prouve que le flush ne leve aucune
|
||||
* violation d'unicite.
|
||||
*/
|
||||
public function testDuplicateSirenIsAllowed(): void
|
||||
{
|
||||
// Boot kernel pour disposer de l'EM (pas d'appel HTTP necessaire ici).
|
||||
self::bootKernel();
|
||||
$em = $this->getEm();
|
||||
|
||||
$one = $this->seedClient('Siren Share One');
|
||||
$two = $this->seedClient('Siren Share Two');
|
||||
|
||||
$one->setSiren('123456789');
|
||||
$two->setSiren('123456789');
|
||||
$em->flush();
|
||||
|
||||
// Aucune exception : preuve qu'il n'existe pas d'index unique sur siren.
|
||||
self::assertSame('123456789', $em->getRepository(ClientEntity::class)->find($one->getId())->getSiren());
|
||||
self::assertSame('123456789', $em->getRepository(ClientEntity::class)->find($two->getId())->getSiren());
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user