entityManager = self::getContainer()->get(EntityManagerInterface::class); $connection = self::getContainer()->get(Connection::class); $connection->executeStatement('DELETE FROM assignment_fee'); $connection->executeStatement('DELETE FROM assignment'); $connection->executeStatement('DELETE FROM destination'); } public function testOnlyLiveFutureDatesOfMatrixProductsFromTheLatestImport(): void { $match = $this->destination('DKIMP110127', 'DKIMP'); $this->destination('DKIMP040127', 'DKIMP', dateFrom: '2026-10-15'); // starts today $this->destination('DKIMP180127', 'DKIMP', importedAt: '2026-10-14 03:20:00'); // cancelled upstream $this->destination('DKIMP250127', 'DKIMP')->setDeleted(); $this->destination('DGSMP110127', 'DGSMP'); // not in the matrix $this->destination('XYZ110127', null); // one-off date $this->entityManager->flush(); $candidates = $this->destinationRepository()->getStaffingCandidates(['DKIMP'], new \DateTimeImmutable('2026-10-15')); $this->assertSame([$match], $candidates); } public function testAnEmptyMatrixMatchesNothing(): void { $this->destination('DKIMP110127', 'DKIMP'); $this->entityManager->flush(); $this->assertSame([], $this->destinationRepository()->getStaffingCandidates([], new \DateTimeImmutable('2026-10-15'))); } public function testADeletedAssignmentStillCounts(): void { $untouched = $this->destination('DKIMP110127', 'DKIMP'); $live = $this->destination('DKIMP180127', 'DKIMP'); $deleted = $this->destination('DKIMP250127', 'DKIMP'); $this->entityManager->persist((new Assignment())->setDestination($live)); $this->entityManager->persist((new Assignment())->setDestination($deleted)->setDeleted()); $this->entityManager->flush(); /** @var AssignmentRepository $repository */ $repository = self::getContainer()->get(AssignmentRepository::class); $ids = $repository->getDestinationIdsWithAnyAssignment([$untouched, $live, $deleted]); sort($ids); $this->assertSame([$live->getId(), $deleted->getId()], $ids); } private function destination( string $code, ?string $productCode, string $dateFrom = '2027-01-11', string $importedAt = self::LATEST_IMPORT, ): Destination { $destination = (new Destination()) ->setCode($code) ->setProductCode($productCode) ->setDateFrom(new \DateTimeImmutable($dateFrom)) ->setDateTo((new \DateTimeImmutable($dateFrom))->modify('+5 days')) ->setProduct('Davos Klosters - Schwendi') ->setHotel('Schwendi') ->setHotelCode('DKI') ->setHotelBusProId(1) ->setImportedAt(new \DateTimeImmutable($importedAt)) ; $this->entityManager->persist($destination); return $destination; } private function destinationRepository(): DestinationRepository { return self::getContainer()->get(DestinationRepository::class); } }