wip: finalize offer layout
This commit is contained in:
1 parent
e7bfb19ac9
commit
a1751f699b
20 files changed
+487
-541
No files matched your search
@@ -118,7 +118,6 @@ class OfferControllerTest extends TestCase
|
||||
self::assertSame(Response::HTTP_OK, $response->getStatusCode());
|
||||
self::assertSame('<html>offer</html>', $response->getContent());
|
||||
self::assertSame('groups/booking/offer.html.twig', $controller->renderedView);
|
||||
self::assertFalse($controller->renderedParameters['justAccepted']);
|
||||
self::assertSame($booking, $controller->renderedParameters['booking']);
|
||||
self::assertSame(['total' => 1000], $controller->renderedParameters['priceBreakdown']);
|
||||
self::assertSame($booking->getAccommodation(), $controller->renderedParameters['ctx']->accommodation);
|
||||
@@ -147,39 +146,6 @@ class OfferControllerTest extends TestCase
|
||||
self::assertSame('groups/booking/offer_unavailable.html.twig', $controller->renderedView);
|
||||
}
|
||||
|
||||
public function testViewMarksJustAcceptedWhenFlashIsPresent(): void
|
||||
{
|
||||
$booking = new AccommodationBooking();
|
||||
$booking->setIsInquiry(false);
|
||||
$booking->setAccommodation(new Accommodation());
|
||||
|
||||
$bookingRepository = $this->createMock(AccommodationBookingRepository::class);
|
||||
$bookingRepository->method('findOneBy')->willReturn($booking);
|
||||
|
||||
$linkSigner = $this->createMock(AccommodationBookingLinkSigner::class);
|
||||
$linkSigner->method('isSessionAuthorized')->willReturn(true);
|
||||
|
||||
$breakdownCalculator = $this->createMock(AccommodationBookingBreakdownCalculator::class);
|
||||
$breakdownCalculator->method('compute')->willReturn(['total' => 1000]);
|
||||
|
||||
$controller = new TestableOfferController(
|
||||
$bookingRepository,
|
||||
$linkSigner,
|
||||
$breakdownCalculator,
|
||||
$this->createMock(AccommodationBookingService::class),
|
||||
);
|
||||
|
||||
$session = new Session(new MockArraySessionStorage());
|
||||
$session->getFlashBag()->add('accommodation_offer_accepted', true);
|
||||
|
||||
$request = Request::create('/groups/booking/offer/'.$booking->getUuid().'/view');
|
||||
$request->setSession($session);
|
||||
$response = $controller->view($booking->getUuid(), $request);
|
||||
|
||||
self::assertSame(Response::HTTP_OK, $response->getStatusCode());
|
||||
self::assertTrue($controller->renderedParameters['justAccepted']);
|
||||
}
|
||||
|
||||
public function testConfirmGetRendersModalWithFreshForm(): void
|
||||
{
|
||||
$booking = new AccommodationBooking();
|
||||
@@ -243,6 +209,7 @@ class OfferControllerTest extends TestCase
|
||||
|
||||
self::assertInstanceOf(RedirectResponse::class, $response);
|
||||
self::assertSame('/app_groups_booking_offer_view?uuid='.$booking->getUuid(), $response->getTargetUrl());
|
||||
self::assertSame([['type' => 'success', 'message' => 'Deine Buchung ist bestätigt.']], $controller->flashes);
|
||||
}
|
||||
|
||||
public function testConfirmPostValidViaHtmxReturnsHxRedirect(): void
|
||||
@@ -407,9 +374,14 @@ final class TestableOfferController extends OfferController
|
||||
return 'https://example.test/agb/';
|
||||
}
|
||||
|
||||
/**
|
||||
* @var array<int, array{type: string, message: mixed}>
|
||||
*/
|
||||
public array $flashes = [];
|
||||
|
||||
protected function addFlash(string $type, mixed $message): void
|
||||
{
|
||||
// no-op: avoids requiring a full service container in these unit tests
|
||||
$this->flashes[] = ['type' => $type, 'message' => $message];
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -0,0 +1,74 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace App\Tests\Service;
|
||||
|
||||
use App\Service\CmsDataProvider;
|
||||
use PHPUnit\Framework\TestCase;
|
||||
use Symfony\Component\Cache\Adapter\ArrayAdapter;
|
||||
use Symfony\Component\HttpClient\MockHttpClient;
|
||||
use Symfony\Component\HttpClient\Response\MockResponse;
|
||||
|
||||
class CmsDataProviderTest extends TestCase
|
||||
{
|
||||
public function testGetHotelDetailsMapsSnakeCaseFieldsToDto(): void
|
||||
{
|
||||
$client = new MockHttpClient(fn () => new MockResponse(json_encode([
|
||||
'success' => true,
|
||||
'name' => 'Hotel Alpin',
|
||||
'address' => "Musterstraße 1\n1234 Musterort",
|
||||
'description' => '<p>Beschreibung</p>',
|
||||
'features' => '<p>Ausstattung</p>',
|
||||
'room_types' => '<p>Zimmer</p>',
|
||||
'additional_information' => '<p>Weitere Infos</p>',
|
||||
'images' => ['resized' => ['l' => [['url' => 'l.jpg', 'alt' => 'Alt']]]],
|
||||
'icons' => ['sauna' => ['label' => 'Sauna', 'value' => true]],
|
||||
'region' => [
|
||||
'name' => 'Alpenregion',
|
||||
'latitude' => 47.1,
|
||||
'longitude' => 11.2,
|
||||
'webcam' => 'https://webcam.test',
|
||||
'ski_area' => '<p>Skigebiet</p>',
|
||||
'ski_area_extended' => '<p>Mehr Skigebiet</p>',
|
||||
'description' => '<p>Region</p>',
|
||||
'news' => '<p>News</p>',
|
||||
'length' => '42',
|
||||
'altitude' => '1800',
|
||||
'lifts' => '5',
|
||||
'images' => ['resized' => ['l' => []]],
|
||||
'region_maps' => ['map1.jpg', 'map2.jpg'],
|
||||
],
|
||||
], JSON_THROW_ON_ERROR)));
|
||||
|
||||
$provider = new CmsDataProvider($client, new ArrayAdapter(), 'test-key');
|
||||
|
||||
$data = $provider->getHotelDetails('HOTEL1');
|
||||
|
||||
self::assertNotNull($data);
|
||||
self::assertSame('Hotel Alpin', $data->name);
|
||||
self::assertSame("Musterstraße 1\n1234 Musterort", $data->address);
|
||||
self::assertSame('<p>Zimmer</p>', $data->roomTypes);
|
||||
self::assertSame('<p>Weitere Infos</p>', $data->additionalInformation);
|
||||
self::assertSame(['sauna' => ['label' => 'Sauna', 'value' => true]], $data->icons);
|
||||
self::assertNotNull($data->region);
|
||||
self::assertSame('Alpenregion', $data->region->name);
|
||||
self::assertSame('<p>Skigebiet</p>', $data->region->skiArea);
|
||||
self::assertSame('<p>Mehr Skigebiet</p>', $data->region->skiAreaExtended);
|
||||
self::assertSame(['map1.jpg', 'map2.jpg'], $data->region->regionMaps);
|
||||
self::assertSame(42, $data->region->length);
|
||||
self::assertSame(1800, $data->region->altitude);
|
||||
self::assertSame(5, $data->region->lifts);
|
||||
self::assertSame(47.1, $data->region->latitude);
|
||||
self::assertSame(11.2, $data->region->longitude);
|
||||
}
|
||||
|
||||
public function testGetHotelDetailsReturnsNullOnFailure(): void
|
||||
{
|
||||
$client = new MockHttpClient(fn () => new MockResponse('', ['http_code' => 500]));
|
||||
|
||||
$provider = new CmsDataProvider($client, new ArrayAdapter(), 'test-key');
|
||||
|
||||
self::assertNull($provider->getHotelDetails('UNKNOWN'));
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user