Skip to content

Commit 6f806f4

Browse files
authored
fix(state): read without output (#6347)
1 parent 735e150 commit 6f806f4

File tree

3 files changed

+23
-8
lines changed

3 files changed

+23
-8
lines changed

src/State/Provider/ReadProvider.php

-7
Original file line numberDiff line numberDiff line change
@@ -53,13 +53,6 @@ public function provide(Operation $operation, array $uriVariables = [], array $c
5353
return null;
5454
}
5555

56-
$output = $operation->getOutput() ?? [];
57-
if (\array_key_exists('class', $output) && null === $output['class']) {
58-
$request?->attributes->set('data', null);
59-
60-
return null;
61-
}
62-
6356
if (null === $filters = $request?->attributes->get('_api_filters')) {
6457
$queryString = RequestParser::getQueryString($request);
6558
$filters = $queryString ? RequestParser::parseRequestParams($queryString) : null;

src/State/Tests/Provider/ReadProviderTest.php

+14
Original file line numberDiff line numberDiff line change
@@ -35,4 +35,18 @@ public function testSetsSerializerContext(): void
3535
$provider->provide($operation, ['id' => 1], ['request' => $request]);
3636
$this->assertEquals(['a'], $request->attributes->get('_api_normalization_context'));
3737
}
38+
39+
public function testShouldReadWithOutputFalse(): void
40+
{
41+
$data = new \stdClass();
42+
$operation = new Get(read: true, output: false);
43+
$decorated = $this->createStub(ProviderInterface::class);
44+
$decorated->method('provide')->willReturn($data);
45+
$serializerContextBuilder = $this->createMock(SerializerContextBuilderInterface::class);
46+
$serializerContextBuilder->expects($this->once())->method('createFromRequest')->willReturn(['a']);
47+
$provider = new ReadProvider($decorated, $serializerContextBuilder);
48+
$request = new Request();
49+
$provider->provide($operation, ['id' => 1], ['request' => $request]);
50+
$this->assertEquals($data, $request->attributes->get('data'));
51+
}
3852
}

tests/Fixtures/TestBundle/ApiResource/Headers.php

+9-1
Original file line numberDiff line numberDiff line change
@@ -21,11 +21,19 @@
2121
status: 301,
2222
output: false,
2323
operations: [
24-
new Get(uriTemplate: 'redirect_to_foobar'),
24+
new Get(uriTemplate: 'redirect_to_foobar', provider: [self::class, 'provide']),
2525
],
2626
graphQlOperations: []
2727
)]
2828
class Headers
2929
{
3030
public $id;
31+
32+
public static function provide(): self
33+
{
34+
$s = new self();
35+
$s->id = 1;
36+
37+
return $s;
38+
}
3139
}

0 commit comments

Comments
 (0)