fix: refresh live room availability during create flow
This commit is contained in:
1 parent
a73e8a593f
commit
cdce7d57e0
26 files changed
+1976
-54
No files matched your search
@@ -0,0 +1,85 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace App\Tests\Controller\Api;
|
||||
|
||||
use App\BusProNet\ApiClient;
|
||||
use App\BusProNet\Model\BaseData;
|
||||
use App\BusProNet\Model\Notification;
|
||||
use App\BusProNet\Model\Room;
|
||||
use App\Controller\Api\TravelController;
|
||||
use App\Service\TravelDataProvider;
|
||||
use PHPUnit\Framework\TestCase;
|
||||
use Symfony\Component\DependencyInjection\Container;
|
||||
use Symfony\Component\Serializer\Encoder\JsonEncoder;
|
||||
use Symfony\Component\Serializer\Mapping\Factory\ClassMetadataFactory;
|
||||
use Symfony\Component\Serializer\Mapping\Loader\AttributeLoader;
|
||||
use Symfony\Component\Serializer\Normalizer\DateTimeNormalizer;
|
||||
use Symfony\Component\Serializer\Normalizer\ObjectNormalizer;
|
||||
use Symfony\Component\Serializer\Serializer;
|
||||
|
||||
class TravelControllerTest extends TestCase
|
||||
{
|
||||
public function testHotelAvailabilityOnlySerializesApiGroupFields(): void
|
||||
{
|
||||
$room = new Room();
|
||||
$room->id = 1;
|
||||
$room->label = 'Doppelzimmer';
|
||||
$room->status = 'Frei';
|
||||
$room->available = 2;
|
||||
$room->price = 199.0;
|
||||
// booking-only fields that must NOT appear in the API response
|
||||
$room->dateFrom = new \DateTimeImmutable('2030-01-01');
|
||||
$room->totalCount = 42;
|
||||
$room->board = 'Halbpension';
|
||||
|
||||
$apiClient = $this->createMock(ApiClient::class);
|
||||
$apiClient->expects($this->once())
|
||||
->method('getHotelAvailability')
|
||||
->willReturn(new BaseData([1 => $room]));
|
||||
|
||||
$controller = new TravelController($apiClient, $this->createMock(TravelDataProvider::class));
|
||||
|
||||
$classMetadataFactory = new ClassMetadataFactory(new AttributeLoader());
|
||||
$serializer = new Serializer(
|
||||
[new DateTimeNormalizer(), new ObjectNormalizer($classMetadataFactory)],
|
||||
[new JsonEncoder()],
|
||||
);
|
||||
$container = new Container();
|
||||
$container->set('serializer', $serializer);
|
||||
$controller->setContainer($container);
|
||||
|
||||
$response = $controller->hotelAvailability(12345, 67890, new \DateTimeImmutable('2030-01-06'));
|
||||
$payload = json_decode((string) $response->getContent(), true, 512, JSON_THROW_ON_ERROR);
|
||||
|
||||
$roomPayload = $payload['1'] ?? null;
|
||||
$this->assertNotNull($roomPayload);
|
||||
$this->assertSame('Frei', $roomPayload['status']);
|
||||
$this->assertArrayNotHasKey('dateFrom', $roomPayload);
|
||||
$this->assertArrayNotHasKey('totalCount', $roomPayload);
|
||||
$this->assertArrayNotHasKey('board', $roomPayload);
|
||||
}
|
||||
|
||||
public function testHotelAvailabilityReturnsErrorPayloadForApiNotification(): void
|
||||
{
|
||||
$apiClient = $this->createMock(ApiClient::class);
|
||||
$apiClient->expects($this->once())
|
||||
->method('getHotelAvailability')
|
||||
->willReturn(new Notification(999, 'Hotel not found'));
|
||||
|
||||
$controller = new TravelController($apiClient, $this->createMock(TravelDataProvider::class));
|
||||
|
||||
$container = new Container();
|
||||
$container->set('serializer', new Serializer(
|
||||
[new ObjectNormalizer(new ClassMetadataFactory(new AttributeLoader()))],
|
||||
[new JsonEncoder()],
|
||||
));
|
||||
$controller->setContainer($container);
|
||||
|
||||
$response = $controller->hotelAvailability(12345, 67890, new \DateTimeImmutable('2030-01-06'));
|
||||
$payload = json_decode((string) $response->getContent(), true, 512, JSON_THROW_ON_ERROR);
|
||||
|
||||
$this->assertSame(['error' => 'Hotel not found', 'type' => 'api_error'], $payload);
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user