fix: streamlined discount display in all breakdowns
This commit is contained in:
@@ -522,21 +522,16 @@ class AccommodationBookingServiceTest extends TestCase
|
||||
$service->sendBookingConfirmedCustomerEmail($booking);
|
||||
}
|
||||
|
||||
public function testRefreshPriceSnapshotStoresDiscountedFinalTotal(): void
|
||||
/**
|
||||
* The discount arithmetic itself lives in — and is tested with —
|
||||
* AccommodationBookingBreakdownCalculator; what matters here is that the raw breakdown is
|
||||
* frozen and the stored total is the calculator's discounted one.
|
||||
*/
|
||||
public function testRefreshPriceSnapshotStoresTheRawBreakdownAndTheDiscountedTotal(): void
|
||||
{
|
||||
$booking = new AccommodationBooking();
|
||||
$booking->setAccommodationDiscount(10);
|
||||
$booking->setBoardServiceDiscount(20);
|
||||
$booking->setAdditionalServicesDiscount(50);
|
||||
|
||||
$breakdown = [
|
||||
'total' => 12345,
|
||||
'currency' => 'CHF',
|
||||
'basePrice' => 8000,
|
||||
'additionalPersonsPrice' => 2000,
|
||||
'boardPrice' => 1000,
|
||||
'servicesPrice' => 500,
|
||||
];
|
||||
$breakdown = ['total' => 12345, 'currency' => 'CHF'];
|
||||
|
||||
$breakdownCalculator = $this->createMock(AccommodationBookingBreakdownCalculator::class);
|
||||
$breakdownCalculator
|
||||
@@ -544,13 +539,16 @@ class AccommodationBookingServiceTest extends TestCase
|
||||
->method('computeCurrent')
|
||||
->with($booking)
|
||||
->willReturn($breakdown);
|
||||
$breakdownCalculator
|
||||
->method('withDiscounts')
|
||||
->with($booking, $breakdown)
|
||||
->willReturn($breakdown + ['discounts' => [], 'discountedTotal' => 10895]);
|
||||
|
||||
$service = $this->createServiceWithAccommodation(breakdownCalculator: $breakdownCalculator);
|
||||
$service->refreshPriceSnapshot($booking);
|
||||
|
||||
// accommodation: (8000+2000)*10% = 1000, board: 1000*20% = 200, services: 500*50% = 250
|
||||
self::assertSame($breakdown, $booking->getPriceBreakdown());
|
||||
self::assertSame(12345 - 1000 - 200 - 250, $booking->getTotalPrice());
|
||||
self::assertSame($breakdown, $booking->getPriceBreakdown(), 'the derived keys must not be persisted');
|
||||
self::assertSame(10895, $booking->getTotalPrice());
|
||||
self::assertSame('CHF', $booking->getPricingCurrency());
|
||||
self::assertSame(1, $booking->getPricingVersion());
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user