feat: split summary DTOs into typed sub-objects

This commit is contained in:
Björn Fromme
2026-04-12 11:23:19 +02:00
parent 69705052b3
commit aa997826f8
18 changed files with 224 additions and 113 deletions
@@ -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