diff --git a/src/Metadata/Resource/Factory/AnnotationResourceMetadataFactory.php b/src/Metadata/Resource/Factory/AnnotationResourceMetadataFactory.php index d941e0e4918..da231e5b964 100644 --- a/src/Metadata/Resource/Factory/AnnotationResourceMetadataFactory.php +++ b/src/Metadata/Resource/Factory/AnnotationResourceMetadataFactory.php @@ -111,6 +111,10 @@ private function createWith(ResourceMetadata $resourceMetadata, string $property return $resourceMetadata; } + if (null === $value) { + return $resourceMetadata; + } + $wither = "with$upperProperty"; return $resourceMetadata->{$wither}($value); diff --git a/tests/Metadata/Resource/Factory/AnnotationResourceMetadataFactoryTest.php b/tests/Metadata/Resource/Factory/AnnotationResourceMetadataFactoryTest.php index 4a071077179..2bef85d45f1 100644 --- a/tests/Metadata/Resource/Factory/AnnotationResourceMetadataFactoryTest.php +++ b/tests/Metadata/Resource/Factory/AnnotationResourceMetadataFactoryTest.php @@ -34,7 +34,7 @@ class AnnotationResourceMetadataFactoryTest extends TestCase /** * @dataProvider getCreateDependencies */ - public function testCreate($reader, $decorated, string $expectedShortName, string $expectedDescription) + public function testCreate($reader, $decorated, string $expectedShortName, ?string $expectedDescription) { $factory = new AnnotationResourceMetadataFactory($reader->reveal(), $decorated ? $decorated->reveal() : null); $metadata = $factory->create(Dummy::class); @@ -62,7 +62,7 @@ public function testCreateWithoutAttributes() public function getCreateDependencies() { - $annotation = new ApiResource([ + $resourceData = [ 'shortName' => 'shortName', 'description' => 'description', 'iri' => 'http://example.com', @@ -71,10 +71,11 @@ public function getCreateDependencies() 'subresourceOperations' => ['sub' => ['bus' => false]], 'attributes' => ['a' => 1, 'route_prefix' => '/foobar'], 'graphql' => ['foo' => 'bar'], - ]); + ]; + $annotationFull = new ApiResource($resourceData); $reader = $this->prophesize(Reader::class); - $reader->getClassAnnotation(Argument::type(\ReflectionClass::class), ApiResource::class)->willReturn($annotation)->shouldBeCalled(); + $reader->getClassAnnotation(Argument::type(\ReflectionClass::class), ApiResource::class)->willReturn($annotationFull)->shouldBeCalled(); $decoratedThrow = $this->prophesize(ResourceMetadataFactoryInterface::class); $decoratedThrow->create(Dummy::class)->willThrow(ResourceClassNotFoundException::class); @@ -82,10 +83,20 @@ public function getCreateDependencies() $decoratedReturn = $this->prophesize(ResourceMetadataFactoryInterface::class); $decoratedReturn->create(Dummy::class)->willReturn(new ResourceMetadata('hello', 'blabla'))->shouldBeCalled(); + $resourceData['description'] = null; + $annotationWithNull = new ApiResource($resourceData); + + $decoratedReturnWithNull = $this->prophesize(ResourceMetadataFactoryInterface::class); + $decoratedReturnWithNull->create(Dummy::class)->willReturn(new ResourceMetadata('hello'))->shouldBeCalled(); + + $readerWithNull = $this->prophesize(Reader::class); + $readerWithNull->getClassAnnotation(Argument::type(\ReflectionClass::class), ApiResource::class)->willReturn($annotationWithNull)->shouldBeCalled(); + return [ [$reader, $decoratedThrow, 'shortName', 'description'], [$reader, null, 'shortName', 'description'], [$reader, $decoratedReturn, 'hello', 'blabla'], + [$readerWithNull, $decoratedReturnWithNull, 'hello', null], ]; } }