From babe3fc02b3877c1a620bafbd5d7538baf2124a5 Mon Sep 17 00:00:00 2001 From: David Gebler Date: Wed, 27 Nov 2024 12:13:36 +0000 Subject: [PATCH 1/2] fix(state): add mime types to request formats in content negotiatior --- .../Provider/ContentNegotiationProvider.php | 4 +++- .../Provider/ContentNegotiationProviderTest.php | 17 +++++++++++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/src/State/Provider/ContentNegotiationProvider.php b/src/State/Provider/ContentNegotiationProvider.php index d9f242ce85e..6ce208271d2 100644 --- a/src/State/Provider/ContentNegotiationProvider.php +++ b/src/State/Provider/ContentNegotiationProvider.php @@ -67,7 +67,9 @@ public function provide(Operation $operation, array $uriVariables = [], array $c private function addRequestFormats(Request $request, array $formats): void { foreach ($formats as $format => $mimeTypes) { - $request->setFormat($format, (array) $mimeTypes); + $existingMimeTypes = $request->getMimeTypes($format); + $newMimeTypes = array_unique(array_merge($existingMimeTypes, (array) $mimeTypes)); + $request->setFormat($format, $newMimeTypes); } } diff --git a/tests/State/Provider/ContentNegotiationProviderTest.php b/tests/State/Provider/ContentNegotiationProviderTest.php index dd610bd4b8d..9094bac7949 100644 --- a/tests/State/Provider/ContentNegotiationProviderTest.php +++ b/tests/State/Provider/ContentNegotiationProviderTest.php @@ -27,6 +27,23 @@ class ContentNegotiationProviderTest extends TestCase { use ProphecyTrait; + public function testAddRequestFormatsAddsMimeTypesToFormat(): void + { + $provider = new ContentNegotiationProvider(); + $request = new Request(); + $formats = ['json' => ['application/problem+json']]; + + $operation = new Post(outputFormats: $formats); + $context = ['request' => $request]; + + $provider->provide($operation, [], $context); + + $mimeTypes = $request->getMimeTypes('json'); + + $this->assertContains('application/problem+json', $mimeTypes); + $this->assertContains('application/json', $mimeTypes); + } + public function testRequestWithEmptyContentType(): void { $expectedResult = new \stdClass(); From 363ad18d9c06c679cac6e8a34cfe701c4c3ebeec Mon Sep 17 00:00:00 2001 From: David Gebler Date: Wed, 27 Nov 2024 12:31:58 +0000 Subject: [PATCH 2/2] fix(state): add mime types to request formats in content negotiator --- src/State/Provider/ContentNegotiationProvider.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/State/Provider/ContentNegotiationProvider.php b/src/State/Provider/ContentNegotiationProvider.php index 6ce208271d2..2f842fdf831 100644 --- a/src/State/Provider/ContentNegotiationProvider.php +++ b/src/State/Provider/ContentNegotiationProvider.php @@ -68,7 +68,7 @@ private function addRequestFormats(Request $request, array $formats): void { foreach ($formats as $format => $mimeTypes) { $existingMimeTypes = $request->getMimeTypes($format); - $newMimeTypes = array_unique(array_merge($existingMimeTypes, (array) $mimeTypes)); + $newMimeTypes = array_unique(array_merge((array) $mimeTypes, $existingMimeTypes)); $request->setFormat($format, $newMimeTypes); } }