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