refactor(commercial) : suppression du contact principal inline du Client (M1)
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.
This commit is contained in:
@@ -14,10 +14,41 @@ namespace App\Tests\Module\Commercial\Api;
|
||||
* - les anciens index uq_client_siren_active (RG-1.15) et uq_client_email_active
|
||||
* (RG-1.17) ont ete supprimes / ne sont jamais crees.
|
||||
*
|
||||
* Verifie aussi la refonte contact (Version20260603120000) : les 5 colonnes de
|
||||
* contact principal inline ont ete supprimees de la table `client`.
|
||||
*
|
||||
* @internal
|
||||
*/
|
||||
final class ClientMigrationTest extends AbstractCommercialApiTestCase
|
||||
{
|
||||
/**
|
||||
* Refonte contact : first_name / last_name / phone_primary / phone_secondary
|
||||
* / email ne doivent plus exister sur la table `client` (deplaces vers
|
||||
* client_contact). NB : le backfill de la migration ne s'exerce que sur une
|
||||
* base portant des donnees pre-refonte ; sur le schema de test (table client
|
||||
* vierge au moment de la migration) il est un no-op, donc non assertable ici
|
||||
* au runtime — seul l'etat de schema final est verifie.
|
||||
*/
|
||||
public function testInlineContactColumnsAreDropped(): void
|
||||
{
|
||||
self::bootKernel();
|
||||
|
||||
/** @var list<array{column_name: string}> $columns */
|
||||
$columns = $this->getEm()->getConnection()->fetchAllAssociative(
|
||||
"SELECT column_name FROM information_schema.columns "
|
||||
."WHERE table_schema = 'public' AND table_name = 'client'",
|
||||
);
|
||||
$names = array_map(static fn (array $r): string => $r['column_name'], $columns);
|
||||
|
||||
foreach (['first_name', 'last_name', 'phone_primary', 'phone_secondary', 'email'] as $dropped) {
|
||||
self::assertNotContains(
|
||||
$dropped,
|
||||
$names,
|
||||
sprintf('La colonne client.%s aurait du etre supprimee (refonte contact).', $dropped),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
public function testCompanyNameActivePartialIndexExistsExactlyOnce(): void
|
||||
{
|
||||
$rows = $this->clientIndexes();
|
||||
|
||||
Reference in New Issue
Block a user