From 3e45f2eecb7ce60ea261c52625bbb251bad890e3 Mon Sep 17 00:00:00 2001 From: Meyer Baptiste Date: Sat, 20 May 2017 18:46:27 +0200 Subject: [PATCH] Fix ignoring attributes for the abstract item normalizer --- src/Serializer/AbstractItemNormalizer.php | 5 +++-- tests/Serializer/AbstractItemNormalizerTest.php | 7 ++++++- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/src/Serializer/AbstractItemNormalizer.php b/src/Serializer/AbstractItemNormalizer.php index 2e6bb96f707..cc0054e5fdb 100644 --- a/src/Serializer/AbstractItemNormalizer.php +++ b/src/Serializer/AbstractItemNormalizer.php @@ -132,8 +132,9 @@ protected function getAllowedAttributes($classOrObject, array $context, $attribu $propertyMetadata = $this->propertyMetadataFactory->create($context['resource_class'], $propertyName, $options); if ( - (isset($context['api_normalize']) && $propertyMetadata->isReadable()) || - (isset($context['api_denormalize']) && $propertyMetadata->isWritable()) + $this->isAllowedAttribute($classOrObject, $propertyName, null, $context) && + ((isset($context['api_normalize']) && $propertyMetadata->isReadable()) || + (isset($context['api_denormalize']) && $propertyMetadata->isWritable())) ) { $allowedAttributes[] = $propertyName; } diff --git a/tests/Serializer/AbstractItemNormalizerTest.php b/tests/Serializer/AbstractItemNormalizerTest.php index 92cd5b055a4..5b0c7327673 100644 --- a/tests/Serializer/AbstractItemNormalizerTest.php +++ b/tests/Serializer/AbstractItemNormalizerTest.php @@ -76,18 +76,22 @@ public function testNormalize() $dummy = new Dummy(); $dummy->setName('foo'); + $dummy->setAlias('ignored'); $dummy->setRelatedDummy($relatedDummy); $dummy->relatedDummies->add(new RelatedDummy()); $propertyNameCollectionFactoryProphecy = $this->prophesize(PropertyNameCollectionFactoryInterface::class); $propertyNameCollectionFactoryProphecy->create(Dummy::class, [])->willReturn( - new PropertyNameCollection(['name', 'relatedDummy', 'relatedDummies']) + new PropertyNameCollection(['name', 'alias', 'relatedDummy', 'relatedDummies']) )->shouldBeCalled(); $propertyMetadataFactoryProphecy = $this->prophesize(PropertyMetadataFactoryInterface::class); $propertyMetadataFactoryProphecy->create(Dummy::class, 'name', [])->willReturn( new PropertyMetadata(new Type(Type::BUILTIN_TYPE_STRING), '', true) )->shouldBeCalled(); + $propertyMetadataFactoryProphecy->create(Dummy::class, 'alias', [])->willReturn( + new PropertyMetadata(new Type(Type::BUILTIN_TYPE_STRING), '', true) + )->shouldBeCalled(); $propertyMetadataFactoryProphecy->create(Dummy::class, 'relatedDummy', [])->willReturn( new PropertyMetadata(new Type(Type::BUILTIN_TYPE_OBJECT, false, RelatedDummy::class), '', true, false, false) )->shouldBeCalled(); @@ -134,6 +138,7 @@ public function testNormalize() $propertyAccesorProphecy->reveal(), ]); $normalizer->setSerializer($serializerProphecy->reveal()); + $normalizer->setIgnoredAttributes(['alias']); $this->assertEquals([ 'name' => 'foo',