Skip to content

Commit 7c9cca6

Browse files
authored
fix(symfony): retain existing associations of formats to MIME types when adding new MIME types (#6833)
1 parent 6bf894f commit 7c9cca6

File tree

2 files changed

+20
-1
lines changed

2 files changed

+20
-1
lines changed

src/State/Provider/ContentNegotiationProvider.php

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,9 @@ public function provide(Operation $operation, array $uriVariables = [], array $c
6767
private function addRequestFormats(Request $request, array $formats): void
6868
{
6969
foreach ($formats as $format => $mimeTypes) {
70-
$request->setFormat($format, (array) $mimeTypes);
70+
$existingMimeTypes = $request->getMimeTypes($format);
71+
$newMimeTypes = array_unique(array_merge((array) $mimeTypes, $existingMimeTypes));
72+
$request->setFormat($format, $newMimeTypes);
7173
}
7274
}
7375

tests/State/Provider/ContentNegotiationProviderTest.php

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,23 @@ class ContentNegotiationProviderTest extends TestCase
2727
{
2828
use ProphecyTrait;
2929

30+
public function testAddRequestFormatsAddsMimeTypesToFormat(): void
31+
{
32+
$provider = new ContentNegotiationProvider();
33+
$request = new Request();
34+
$formats = ['json' => ['application/problem+json']];
35+
36+
$operation = new Post(outputFormats: $formats);
37+
$context = ['request' => $request];
38+
39+
$provider->provide($operation, [], $context);
40+
41+
$mimeTypes = $request->getMimeTypes('json');
42+
43+
$this->assertContains('application/problem+json', $mimeTypes);
44+
$this->assertContains('application/json', $mimeTypes);
45+
}
46+
3047
public function testRequestWithEmptyContentType(): void
3148
{
3249
$expectedResult = new \stdClass();

0 commit comments

Comments
 (0)