feat: split summary DTOs into typed sub-objects
This commit is contained in:
@@ -8,6 +8,7 @@ use App\BusProNet\Model\Room;
|
||||
use App\BusProNet\Model\Travel;
|
||||
use App\Form\Model\BookingCreateContext;
|
||||
use App\Form\Model\BookingDto;
|
||||
use App\Form\Model\RoomGroupsDto;
|
||||
use App\Form\Model\ParticipantCardDataDto;
|
||||
use App\Form\Model\ParticipantCardPriceDto;
|
||||
use App\Form\Model\BookingSummaryDto;
|
||||
@@ -56,13 +57,14 @@ class BookingCreateContextFactoryTest extends TestCase
|
||||
->willReturn($summaryData);
|
||||
|
||||
$roomSelectionService = $this->createMock(BookingRoomSelectionService::class);
|
||||
$groupedRooms = new RoomGroupsDto(
|
||||
byPax: [$roomByPax->id => $roomByPax],
|
||||
byRoom: [$roomByRoom->id => $roomByRoom],
|
||||
);
|
||||
$roomSelectionService->expects($this->once())
|
||||
->method('groupRoomsBySelectionType')
|
||||
->with([$roomByRoom->id => $roomByRoom, $roomByPax->id => $roomByPax])
|
||||
->willReturn([
|
||||
Room::SELECTION_TYPE_BY_PAX => [$roomByPax->id => $roomByPax],
|
||||
Room::SELECTION_TYPE_BY_ROOM => [$roomByRoom->id => $roomByRoom],
|
||||
]);
|
||||
->willReturn($groupedRooms);
|
||||
|
||||
$participantCardDataService = $this->createMock(ParticipantCardDataService::class);
|
||||
$participantCardDataService->expects($this->never())
|
||||
@@ -86,10 +88,7 @@ class BookingCreateContextFactoryTest extends TestCase
|
||||
$this->assertSame($summaryData, $context->summaryData);
|
||||
$this->assertSame(null, $context->cardsData);
|
||||
$this->assertFalse($context->isSubmitted);
|
||||
$this->assertSame([
|
||||
Room::SELECTION_TYPE_BY_PAX => [$roomByPax->id => $roomByPax],
|
||||
Room::SELECTION_TYPE_BY_ROOM => [$roomByRoom->id => $roomByRoom],
|
||||
], $context->groupedRooms);
|
||||
$this->assertSame($groupedRooms, $context->groupedRooms);
|
||||
}
|
||||
|
||||
public function testCreateWithParticipantCardsBuildsStep2Context(): void
|
||||
@@ -124,13 +123,14 @@ class BookingCreateContextFactoryTest extends TestCase
|
||||
->willReturn($summaryData);
|
||||
|
||||
$roomSelectionService = $this->createMock(BookingRoomSelectionService::class);
|
||||
$groupedRooms = new RoomGroupsDto(
|
||||
byPax: [],
|
||||
byRoom: [$room->id => $room],
|
||||
);
|
||||
$roomSelectionService->expects($this->once())
|
||||
->method('groupRoomsBySelectionType')
|
||||
->with([$room->id => $room])
|
||||
->willReturn([
|
||||
Room::SELECTION_TYPE_BY_PAX => [],
|
||||
Room::SELECTION_TYPE_BY_ROOM => [$room->id => $room],
|
||||
]);
|
||||
->willReturn($groupedRooms);
|
||||
|
||||
$participantCardDataService = $this->createMock(ParticipantCardDataService::class);
|
||||
$participantCardDataService->expects($this->once())
|
||||
@@ -181,13 +181,14 @@ class BookingCreateContextFactoryTest extends TestCase
|
||||
->willReturn($summaryData);
|
||||
|
||||
$roomSelectionService = $this->createMock(BookingRoomSelectionService::class);
|
||||
$groupedRooms = new RoomGroupsDto(
|
||||
byPax: [],
|
||||
byRoom: [$room->id => $room],
|
||||
);
|
||||
$roomSelectionService->expects($this->once())
|
||||
->method('groupRoomsBySelectionType')
|
||||
->with([$room->id => $room])
|
||||
->willReturn([
|
||||
Room::SELECTION_TYPE_BY_PAX => [],
|
||||
Room::SELECTION_TYPE_BY_ROOM => [$room->id => $room],
|
||||
]);
|
||||
->willReturn($groupedRooms);
|
||||
|
||||
$participantCardDataService = $this->createMock(ParticipantCardDataService::class);
|
||||
$participantCardDataService->expects($this->never())
|
||||
|
||||
@@ -6,8 +6,10 @@ namespace App\Tests\Service;
|
||||
|
||||
use App\BusProNet\Model\BaseData;
|
||||
use App\BusProNet\Model\Booking;
|
||||
use App\BusProNet\Model\MutableData;
|
||||
use App\BusProNet\Model\Travel;
|
||||
use App\Form\Model\BookingDto;
|
||||
use App\Form\Model\BookingMutabilityDto;
|
||||
use App\Form\Model\BookingEditContext;
|
||||
use App\Form\Model\BookingSummaryDto;
|
||||
use App\Service\BookingEditContextFactory;
|
||||
@@ -51,7 +53,9 @@ class BookingEditContextFactoryTest extends TestCase
|
||||
$bookingData = new Booking();
|
||||
$bookingData->dateId = 1234;
|
||||
|
||||
$mutableData = new BaseData([]);
|
||||
$mutableData = new BaseData([
|
||||
MutableData::CATEGORY_ADDITIONAL_SERVICES => new MutableData(MutableData::CATEGORY_ADDITIONAL_SERVICES, true, new \DateTimeImmutable('2030-01-02')),
|
||||
]);
|
||||
$summaryData = $this->createMock(BookingSummaryDto::class);
|
||||
|
||||
$summaryDataService = $this->createMock(BookingSummaryDataService::class);
|
||||
@@ -77,7 +81,9 @@ class BookingEditContextFactoryTest extends TestCase
|
||||
$this->assertInstanceOf(BookingEditContext::class, $context);
|
||||
$this->assertSame($bookingDto, $context->bookingDto);
|
||||
$this->assertSame($bookingData, $context->bookingData);
|
||||
$this->assertSame($mutableData, $context->mutableData);
|
||||
$this->assertInstanceOf(BookingMutabilityDto::class, $context->mutableData);
|
||||
$this->assertSame($mutableData->getItemByKey(MutableData::CATEGORY_ADDITIONAL_SERVICES), $context->mutableData->additionalServices);
|
||||
$this->assertNull($context->mutableData->transportation);
|
||||
$this->assertSame($summaryData, $context->summaryData);
|
||||
}
|
||||
|
||||
|
||||
@@ -5,6 +5,7 @@ declare(strict_types=1);
|
||||
namespace App\Tests\Service;
|
||||
|
||||
use App\BusProNet\Model\Room;
|
||||
use App\Form\Model\RoomGroupsDto;
|
||||
use App\Service\BookingRoomSelectionService;
|
||||
use PHPUnit\Framework\TestCase;
|
||||
|
||||
@@ -27,8 +28,9 @@ class BookingRoomSelectionServiceTest extends TestCase
|
||||
|
||||
$groups = $this->service->groupRoomsBySelectionType($rooms);
|
||||
|
||||
$this->assertSame([10, 12], array_keys($groups[Room::SELECTION_TYPE_BY_PAX]));
|
||||
$this->assertSame([11], array_keys($groups[Room::SELECTION_TYPE_BY_ROOM]));
|
||||
$this->assertInstanceOf(RoomGroupsDto::class, $groups);
|
||||
$this->assertSame([10, 12], array_keys($groups->byPax));
|
||||
$this->assertSame([11], array_keys($groups->byRoom));
|
||||
}
|
||||
|
||||
private function createRoom(int $id, string $label, int $maxPax): Room
|
||||
|
||||
Reference in New Issue
Block a user