Skip to content

Commit

Permalink
fix(state): read without output (#6347)
Browse files Browse the repository at this point in the history
  • Loading branch information
soyuka committed May 3, 2024
1 parent 735e150 commit 6f806f4
Show file tree
Hide file tree
Showing 3 changed files with 23 additions and 8 deletions.
7 changes: 0 additions & 7 deletions src/State/Provider/ReadProvider.php
Expand Up @@ -53,13 +53,6 @@ public function provide(Operation $operation, array $uriVariables = [], array $c
return null;
}

$output = $operation->getOutput() ?? [];
if (\array_key_exists('class', $output) && null === $output['class']) {
$request?->attributes->set('data', null);

return null;
}

if (null === $filters = $request?->attributes->get('_api_filters')) {
$queryString = RequestParser::getQueryString($request);
$filters = $queryString ? RequestParser::parseRequestParams($queryString) : null;
Expand Down
14 changes: 14 additions & 0 deletions src/State/Tests/Provider/ReadProviderTest.php
Expand Up @@ -35,4 +35,18 @@ public function testSetsSerializerContext(): void
$provider->provide($operation, ['id' => 1], ['request' => $request]);
$this->assertEquals(['a'], $request->attributes->get('_api_normalization_context'));
}

public function testShouldReadWithOutputFalse(): void
{
$data = new \stdClass();
$operation = new Get(read: true, output: false);
$decorated = $this->createStub(ProviderInterface::class);
$decorated->method('provide')->willReturn($data);
$serializerContextBuilder = $this->createMock(SerializerContextBuilderInterface::class);
$serializerContextBuilder->expects($this->once())->method('createFromRequest')->willReturn(['a']);
$provider = new ReadProvider($decorated, $serializerContextBuilder);
$request = new Request();
$provider->provide($operation, ['id' => 1], ['request' => $request]);
$this->assertEquals($data, $request->attributes->get('data'));
}
}
10 changes: 9 additions & 1 deletion tests/Fixtures/TestBundle/ApiResource/Headers.php
Expand Up @@ -21,11 +21,19 @@
status: 301,
output: false,
operations: [
new Get(uriTemplate: 'redirect_to_foobar'),
new Get(uriTemplate: 'redirect_to_foobar', provider: [self::class, 'provide']),
],
graphQlOperations: []
)]
class Headers
{
public $id;

public static function provide(): self
{
$s = new self();
$s->id = 1;

return $s;
}
}

0 comments on commit 6f806f4

Please sign in to comment.