em = self::getContainer()->get(EntityManagerInterface::class); } public function testConvertCreatesClientAndFlagsProspectWon(): void { $prospect = new Prospect(); $prospect->setName('Lead Test'); $prospect->setCompany('Lead Company '.uniqid()); $prospect->setEmail('lead@example.com'); $prospect->setPhone('06 00 00 00 00'); $prospect->setStreet('1 rue du Test'); $prospect->setCity('Testville'); $prospect->setPostalCode('00000'); $prospect->setStatus(ProspectStatus::Qualified); $this->em->persist($prospect); $this->em->flush(); $result = $this->processor()->process($prospect, new Post(), ['id' => $prospect->getId()]); self::assertSame(ProspectStatus::Won, $result->getStatus()); $client = $result->getConvertedClient(); self::assertNotNull($client); self::assertSame($prospect->getCompany(), $client->getName()); } public function testConvertIsIdempotent(): void { $prospect = new Prospect(); $prospect->setName('Idempotent Lead'); $prospect->setStatus(ProspectStatus::New); $this->em->persist($prospect); $this->em->flush(); $processor = $this->processor(); $first = $processor->process($prospect, new Post(), ['id' => $prospect->getId()]); $clientId = $first->getConvertedClient()?->getId(); $second = $processor->process($prospect, new Post(), ['id' => $prospect->getId()]); self::assertNotNull($clientId); self::assertSame($clientId, $second->getConvertedClient()?->getId()); } private function processor(): ConvertProspectProcessor { $c = self::getContainer(); return new ConvertProspectProcessor( $c->get(EntityManagerInterface::class), $c->get(DoctrineProspectRepository::class), ); } }