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); } }