feat: consolidate micro-services and unify draft merge logic

This commit is contained in:
Björn Fromme
2026-04-16 13:34:54 +02:00
parent fdfd5d56c9
commit 0d2cc5b998
16 changed files with 529 additions and 846 deletions
@@ -8,15 +8,13 @@ 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;
use App\Service\BookingCreateContextFactory;
use App\Service\BookingRoomSelectionService;
use App\Service\ParticipantCardDataService;
use App\Service\BookingSummaryDataService;
use App\Service\BookingPriceCalculatorService;
use App\Service\ParticipantCardAssembler;
use App\Service\BookingSummaryAssembler;
use App\Service\BookingPriceCalculator;
use App\Service\RoomPricingCalculator;
use PHPUnit\Framework\TestCase;
@@ -47,7 +45,7 @@ class BookingCreateContextFactoryTest extends TestCase
$bookingDto = new BookingDto($travel, 157047);
$summaryData = $this->createMock(BookingSummaryDto::class);
$summaryDataService = $this->createMock(BookingSummaryDataService::class);
$summaryDataService = $this->createMock(BookingSummaryAssembler::class);
$summaryDataService->expects($this->once())
->method('getSummaryData')
->with(
@@ -56,26 +54,15 @@ 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($groupedRooms);
$participantCardDataService = $this->createMock(ParticipantCardDataService::class);
$participantCardDataService = $this->createMock(ParticipantCardAssembler::class);
$participantCardDataService->expects($this->never())
->method('getAllCardsDataWithValidation');
$priceCalculator = $this->createMock(BookingPriceCalculatorService::class);
$priceCalculator = $this->createMock(BookingPriceCalculator::class);
$priceCalculator->expects($this->never())
->method('calculateAllParticipantIndividualPrices');
$service = new BookingCreateContextFactory(
$roomSelectionService,
$participantCardDataService,
$summaryDataService,
$priceCalculator,
@@ -86,9 +73,10 @@ class BookingCreateContextFactoryTest extends TestCase
$this->assertInstanceOf(BookingCreateContext::class, $context);
$this->assertSame($bookingDto, $context->bookingDto);
$this->assertSame($summaryData, $context->summaryData);
$this->assertSame(null, $context->cardsData);
$this->assertNull($context->cardsData);
$this->assertFalse($context->isSubmitted);
$this->assertSame($groupedRooms, $context->groupedRooms);
$this->assertSame([11 => $roomByPax], $context->groupedRooms->byPax);
$this->assertSame([10 => $roomByRoom], $context->groupedRooms->byRoom);
}
public function testCreateWithParticipantCardsBuildsStep2Context(): void
@@ -116,34 +104,23 @@ class BookingCreateContextFactoryTest extends TestCase
isCanceled: false,
);
$summaryDataService = $this->createMock(BookingSummaryDataService::class);
$summaryDataService = $this->createMock(BookingSummaryAssembler::class);
$summaryDataService->expects($this->once())
->method('getSummaryData')
->with($bookingDto, RoomPricingCalculator::PRICING_MODE_SELECTION)
->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($groupedRooms);
$participantCardDataService = $this->createMock(ParticipantCardDataService::class);
$participantCardDataService = $this->createMock(ParticipantCardAssembler::class);
$participantCardDataService->expects($this->once())
->method('getAllCardsDataWithValidation')
->with($bookingDto)
->willReturn([$cardData]);
$priceCalculator = $this->createMock(BookingPriceCalculatorService::class);
$priceCalculator = $this->createMock(BookingPriceCalculator::class);
$priceCalculator->expects($this->never())
->method('calculateAllParticipantIndividualPrices');
$service = new BookingCreateContextFactory(
$roomSelectionService,
$participantCardDataService,
$summaryDataService,
$priceCalculator,
@@ -154,6 +131,8 @@ class BookingCreateContextFactoryTest extends TestCase
$this->assertInstanceOf(BookingCreateContext::class, $context);
$this->assertSame([$cardData], $context->cardsData);
$this->assertTrue($context->isSubmitted);
$this->assertSame([], $context->groupedRooms->byPax);
$this->assertSame([10 => $room], $context->groupedRooms->byRoom);
}
public function testCreateWithParticipantPricesBuildsStep4Context(): void
@@ -174,34 +153,23 @@ class BookingCreateContextFactoryTest extends TestCase
$bookingDto = new BookingDto($travel, 157047);
$summaryData = $this->createMock(BookingSummaryDto::class);
$summaryDataService = $this->createMock(BookingSummaryDataService::class);
$summaryDataService = $this->createMock(BookingSummaryAssembler::class);
$summaryDataService->expects($this->once())
->method('getSummaryData')
->with($bookingDto, RoomPricingCalculator::PRICING_MODE_ASSIGNMENT)
->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($groupedRooms);
$participantCardDataService = $this->createMock(ParticipantCardDataService::class);
$participantCardDataService = $this->createMock(ParticipantCardAssembler::class);
$participantCardDataService->expects($this->never())
->method('getAllCardsDataWithValidation');
$priceCalculator = $this->createMock(BookingPriceCalculatorService::class);
$priceCalculator = $this->createMock(BookingPriceCalculator::class);
$priceCalculator->expects($this->once())
->method('calculateAllParticipantIndividualPrices')
->with($bookingDto)
->willReturn([123.45]);
$service = new BookingCreateContextFactory(
$roomSelectionService,
$participantCardDataService,
$summaryDataService,
$priceCalculator,
@@ -212,5 +180,6 @@ class BookingCreateContextFactoryTest extends TestCase
$this->assertInstanceOf(BookingCreateContext::class, $context);
$this->assertSame([123.45], $context->participantPrices);
$this->assertNull($context->cardsData);
$this->assertSame([10 => $room], $context->groupedRooms->byRoom);
}
}