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()); } }