*/ private array $touchedSiteIds = []; protected function setUp(): void { self::bootKernel(); $container = self::getContainer(); $this->em = $container->get('doctrine')->getManager(); $this->connection = $this->em->getConnection(); $this->allocator = $container->get(DsdAllocator::class); } protected function tearDown(): void { if ([] !== $this->touchedSiteIds) { $this->connection->executeStatement( 'DELETE FROM weighbridge_dsd_counter WHERE site_id IN (?)', [$this->touchedSiteIds], [ArrayParameterType::INTEGER], ); } parent::tearDown(); } public function testNextIncrementsSequentiallyAndIsIsolatedPerSite(): void { $sites = $this->em->getRepository(Site::class)->findAll(); self::assertGreaterThanOrEqual(2, \count($sites), 'Au moins 2 sites doivent etre seedes (fixtures).'); $siteA = $sites[0]; $siteB = $sites[1]; $this->resetCounter($siteA); $this->resetCounter($siteB); // AUTO/MANUAL partagent le meme increment : la sequence demarre a 1. self::assertSame(1, $this->allocator->next($siteA)); self::assertSame(2, $this->allocator->next($siteA)); self::assertSame(3, $this->allocator->next($siteA)); // Isolation par site : le compteur de B est independant de celui de A. self::assertSame(1, $this->allocator->next($siteB)); self::assertSame(2, $this->allocator->next($siteB)); // La sequence de A reprend la ou elle en etait (4), non perturbee par B. self::assertSame(4, $this->allocator->next($siteA)); } public function testNextStartsAtOneWhenNoCounterRowExists(): void { $site = $this->em->getRepository(Site::class)->findAll()[0]; $this->resetCounter($site); // Aucune ligne compteur pour ce site : le premier appel la cree (last=0) // et renvoie 1 (dernier + 1). self::assertSame(1, $this->allocator->next($site)); } /** * Supprime la ligne compteur du site pour repartir d'un etat connu, et * enregistre l'id pour la purge de tearDown. */ private function resetCounter(Site $site): void { $siteId = $site->getId(); self::assertNotNull($siteId); $this->connection->executeStatement( 'DELETE FROM weighbridge_dsd_counter WHERE site_id = :site', ['site' => $siteId], ); if (!\in_array($siteId, $this->touchedSiteIds, true)) { $this->touchedSiteIds[] = $siteId; } } }