fix: clear inquiry status on room reselection
This commit is contained in:
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());
|
||||
|
||||
Reference in new issue
Block a user