From c39dbea75e28a12f1bbe8b94ab43a2138c392589 Mon Sep 17 00:00:00 2001 From: soyuka Date: Thu, 2 May 2024 14:21:27 +0200 Subject: [PATCH] fix(state): read without output --- src/State/Provider/ReadProvider.php | 7 ------- src/State/Tests/Provider/ReadProviderTest.php | 14 ++++++++++++++ tests/Fixtures/TestBundle/ApiResource/Headers.php | 7 ++++++- 3 files changed, 20 insertions(+), 8 deletions(-) diff --git a/src/State/Provider/ReadProvider.php b/src/State/Provider/ReadProvider.php index b4ef0b6060..d9c9279425 100644 --- a/src/State/Provider/ReadProvider.php +++ b/src/State/Provider/ReadProvider.php @@ -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; diff --git a/src/State/Tests/Provider/ReadProviderTest.php b/src/State/Tests/Provider/ReadProviderTest.php index 18fb3cdb03..0823819fec 100644 --- a/src/State/Tests/Provider/ReadProviderTest.php +++ b/src/State/Tests/Provider/ReadProviderTest.php @@ -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')); + } } diff --git a/tests/Fixtures/TestBundle/ApiResource/Headers.php b/tests/Fixtures/TestBundle/ApiResource/Headers.php index 93f216c71d..82d31ed607 100644 --- a/tests/Fixtures/TestBundle/ApiResource/Headers.php +++ b/tests/Fixtures/TestBundle/ApiResource/Headers.php @@ -21,11 +21,16 @@ 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; + } }