fix: clear inquiry status on room reselection

This commit is contained in:
fromme committed 2026-10-20 09:41:33 +02:00
1 parent d4296f30a5
commit 32083c7966
3 files changed
+104 -11

No files matched your search

@@ -228,6 +228,56 @@ class BookingConfiguratorStatusTest extends TestCase
$this->assertSame('A', $bookingDto->bookingStatus);
}
public function testRoomSelectionSwitchesToInquiryForOnRequestRoom(): void
{
$bookingDto = $this->startMixedRoomsBooking();
$this->selectRoom($bookingDto, 2);
$this->bookingService->updateBookingStatusFromRoomSelection($bookingDto);
$this->assertSame('A', $bookingDto->bookingStatus);
}
public function testRoomSelectionRevertsInquiryWhenOnRequestRoomIsDeselected(): void
{
$bookingDto = $this->startMixedRoomsBooking();
$this->selectRoom($bookingDto, 2);
$this->bookingService->updateBookingStatusFromRoomSelection($bookingDto);
$this->selectRoom($bookingDto, 1);
$this->bookingService->updateBookingStatusFromRoomSelection($bookingDto);
$this->assertSame('F', $bookingDto->bookingStatus);
}
public function testRoomSelectionKeepsInquiryRequiredByTravel(): void
{
$travel = $this->createTravelWithRooms([
['status' => Constants::STATUS_AVAILABLE, 'available' => 5],
]);
$travel->allowedBookingStatus = ['A'];
$this->travelDataService->method('getTravelData')->willReturn($travel);
$bookingDto = $this->bookingService->startFreshBooking($this->createRequestWithSession(), 123, 456);
$this->selectRoom($bookingDto, 1);
$this->bookingService->updateBookingStatusFromRoomSelection($bookingDto);
$this->assertSame('A', $bookingDto->bookingStatus);
}
public function testRoomSelectionKeepsStatusOfSessionsWithoutInitialStatus(): void
{
$bookingDto = $this->startMixedRoomsBooking();
$bookingDto->initialBookingStatus = null;
$bookingDto->bookingStatus = 'A';
$this->selectRoom($bookingDto, 1);
$this->bookingService->updateBookingStatusFromRoomSelection($bookingDto);
$this->assertSame('A', $bookingDto->bookingStatus);
}
public function testApplyCreateBookingStatusRulesSetsOptionFromRegistry(): void
{
$bookingStatusRuleRegistry = $this->createStub(BookingStatusRuleRegistry::class);
@@ -338,6 +388,27 @@ class BookingConfiguratorStatusTest extends TestCase
return $group;
}
/**
* Starts a booking on a travel with a free room (id 1) and an on-request room (id 2).
*/
private function startMixedRoomsBooking(): BookingDto
{
$travel = $this->createTravelWithRooms([
['status' => Constants::STATUS_AVAILABLE, 'available' => 5],
['status' => Constants::STATUS_ON_REQUEST, 'available' => 3],
]);
$this->travelDataService->method('getTravelData')->willReturn($travel);
return $this->bookingService->startFreshBooking($this->createRequestWithSession(), 123, 456);
}
private function selectRoom(BookingDto $bookingDto, int $roomId): void
{
foreach ($bookingDto->roomSelections as $roomSelection) {
$roomSelection->quantity = $roomId === $roomSelection->id ? 1 : 0;
}
}
private function createRequestWithSession(): Request
{
$session = new Session(new MockArraySessionStorage());