74f0f981d8
Le contact principal (firstName, lastName, phonePrimary, phoneSecondary, email) n'est plus porte par l'entite Client : les contacts vivent uniquement dans ClientContact (onglet Contact). RG-1.01 et RG-1.02 supprimees du Client (equivalent RG-1.05 / RG-1.14 sur ClientContact). - Migration (namespace racine DoctrineMigrations, ordre par timestamp) : backfill des clients sans contact vers client_contact (position 0) puis DROP des 5 colonnes inline. down() best-effort documente. - Entite Client : retrait des 5 props + getters/setters + groupes. - ClientProcessor : MAIN_FIELDS / changedBusinessFields / normalize alleges, validateMainContact (RG-1.01) supprimee. - Recherche repertoire : companyName seul (D1). - Export XLSX : colonnes de contact retirees (D2). - Fixtures + catalogue de commentaires SQL alignes. - Tests fonctionnels et unitaires mis a jour.
46 lines
1.6 KiB
PHP
46 lines
1.6 KiB
PHP
<?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)
|
|
* n'est PLUS contraint unique. (L'email — RG-1.17 — a disparu du Client avec la
|
|
* refonte contact, il vit desormais sur ClientContact.)
|
|
*
|
|
* @internal
|
|
*/
|
|
final class ClientUniquenessTest extends AbstractCommercialApiTestCase
|
|
{
|
|
/**
|
|
* 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());
|
|
}
|
|
}
|