get(EntityManagerInterface::class); $prospect = new Prospect(); $prospect->setName('Atelier Test'); $prospect->setCompany('Atelier Test SARL'); $em->persist($prospect); $contact = new Contact()->setLastName('Durand')->setProspect($prospect); $address = new Address()->setCity('Niort')->setProspect($prospect); $report = new CommercialReport() ->setSubject('Premier contact') ->setOccurredAt(new DateTimeImmutable('2026-06-01')) ->setType(ReportType::Call) ->setProspect($prospect) ; $em->persist($contact); $em->persist($address); $em->persist($report); $em->flush(); $processor = self::getContainer()->get(ConvertProspectProcessor::class); $operation = new Post(); $processor->process($prospect, $operation, ['id' => $prospect->getId()]); $em->refresh($contact); $em->refresh($address); $em->refresh($report); $client = $prospect->getConvertedClient(); self::assertNotNull($client, 'Prospect should be converted to a client'); // Invariants (pas de counts absolus) : chaque sous-entité pointe vers le client, plus vers le prospect. self::assertSame($client->getId(), $contact->getClient()?->getId()); self::assertNull($contact->getProspect()); self::assertSame($client->getId(), $address->getClient()?->getId()); self::assertNull($address->getProspect()); self::assertSame($client->getId(), $report->getClient()?->getId()); self::assertNull($report->getProspect()); } }