69 lines
2.2 KiB
PHP
69 lines
2.2 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace App\Tests\Service;
|
|
|
|
use App\Entity\Groups\AccommodationPrice;
|
|
use App\Repository\Groups\AccommodationPriceRepository;
|
|
use App\Service\AccommodationPriceCoverage;
|
|
use PHPUnit\Framework\TestCase;
|
|
|
|
class AccommodationPriceCoverageTest extends TestCase
|
|
{
|
|
public function testCoversOnlyDaysWithinPricePeriod(): void
|
|
{
|
|
$coverage = new AccommodationPriceCoverage($this->createStub(AccommodationPriceRepository::class));
|
|
|
|
$covered = $coverage->coveredDatesFor(
|
|
[$this->price('2026-06-01', '2026-06-09')],
|
|
new \DateTimeImmutable('2026-06-01'),
|
|
new \DateTimeImmutable('2026-06-12'),
|
|
);
|
|
|
|
// dateTo is the last night, so 2026-06-09 is still covered
|
|
self::assertSame([
|
|
'2026-06-01', '2026-06-02', '2026-06-03', '2026-06-04', '2026-06-05',
|
|
'2026-06-06', '2026-06-07', '2026-06-08', '2026-06-09',
|
|
], array_keys($covered));
|
|
}
|
|
|
|
public function testGapBetweenPricePeriodsStaysUncovered(): void
|
|
{
|
|
$coverage = new AccommodationPriceCoverage($this->createStub(AccommodationPriceRepository::class));
|
|
|
|
$covered = $coverage->coveredDatesFor(
|
|
[$this->price('2026-06-01', '2026-06-02'), $this->price('2026-06-05', '2026-06-06')],
|
|
new \DateTimeImmutable('2026-06-01'),
|
|
new \DateTimeImmutable('2026-06-06'),
|
|
);
|
|
|
|
self::assertSame(
|
|
['2026-06-01', '2026-06-02', '2026-06-05', '2026-06-06'],
|
|
array_keys($covered),
|
|
);
|
|
}
|
|
|
|
public function testNoPricesMeansNoCoverage(): void
|
|
{
|
|
$coverage = new AccommodationPriceCoverage($this->createStub(AccommodationPriceRepository::class));
|
|
|
|
$covered = $coverage->coveredDatesFor(
|
|
[],
|
|
new \DateTimeImmutable('2026-06-01'),
|
|
new \DateTimeImmutable('2026-06-03'),
|
|
);
|
|
|
|
self::assertSame([], $covered);
|
|
}
|
|
|
|
private function price(string $from, string $to): AccommodationPrice
|
|
{
|
|
$price = new AccommodationPrice();
|
|
$price->setDateFrom(new \DateTimeImmutable($from));
|
|
$price->setDateTo(new \DateTimeImmutable($to));
|
|
|
|
return $price;
|
|
}
|
|
}
|