feat: hide unavailable ski passes from selection in create flow

This commit is contained in:
Björn Fromme
2026-08-06 13:08:46 +02:00
parent b82e017f73
commit 6ee00f2bee
6 changed files with 329 additions and 30 deletions
@@ -51,6 +51,40 @@ class ServiceAvailabilityCalculatorTest extends TestCase
$this->assertTrue($this->calculator->isServiceUnavailable(1, $bookingDto, 0));
}
public function testServiceOnBookingStopIsUnavailableDespiteUnlimitedQuota(): void
{
$skiPass = $this->createSkiPass(id: 1, available: null, status: Constants::STATUS_BLOCKED);
$bookingDto = $this->createBookingDtoWithServices([$skiPass]);
$this->assertTrue($this->calculator->isServiceUnavailable(1, $bookingDto, 0));
}
public function testServiceOnBookingStopIsUnavailableDespiteRemainingQuota(): void
{
$skiPass = $this->createSkiPass(id: 1, available: 10, status: Constants::STATUS_BLOCKED);
$bookingDto = $this->createBookingDtoWithServices([$skiPass]);
$this->assertTrue($this->calculator->isServiceUnavailable(1, $bookingDto, 0));
}
public function testFilterAvailableServicesRemovesSoldOutAndBlockedServices(): void
{
$bookable = $this->createSkiPass(id: 1, available: 5);
$soldOut = $this->createSkiPass(id: 2, available: 0);
$blocked = $this->createSkiPass(id: 3, available: null, status: Constants::STATUS_BLOCKED);
$unlimited = $this->createSkiPass(id: 4, available: null);
$bookingDto = $this->createBookingDtoWithServices([$bookable, $soldOut, $blocked, $unlimited]);
$filtered = $this->calculator->filterAvailableServices(
$bookingDto->travel->additionalServices,
$bookingDto,
0
);
$this->assertSame([1, 4], array_keys($filtered));
}
private function createParkingService(int $id, int $available): Service
{
$service = new Service();
@@ -62,6 +96,18 @@ class ServiceAvailabilityCalculatorTest extends TestCase
return $service;
}
private function createSkiPass(int $id, ?int $available, string $status = Constants::STATUS_AVAILABLE): Service
{
$service = new Service();
$service->id = $id;
$service->label = sprintf('Skipass %d', $id);
$service->subType = Constants::TOKEN_SKI_PASS;
$service->available = $available;
$service->status = $status;
return $service;
}
private function createBookingDtoWithServices(array $services): BookingDto
{
$travel = new Travel();