From 36ce9029f76d9720d0bc0ded179302e165c6b077 Mon Sep 17 00:00:00 2001 From: Laurent VOULLEMIER Date: Fri, 2 Oct 2020 22:12:42 +0200 Subject: [PATCH] [Serializer][Minor] Fix exception message Wrong circular reference limit displayed. --- .../Normalizer/AbstractNormalizer.php | 2 +- .../Features/CircularReferenceTestTrait.php | 23 +++++++++++++++---- .../Normalizer/GetSetMethodNormalizerTest.php | 4 ++-- .../Tests/Normalizer/ObjectNormalizerTest.php | 4 ++-- .../Normalizer/PropertyNormalizerTest.php | 4 ++-- 5 files changed, 25 insertions(+), 12 deletions(-) diff --git a/src/Symfony/Component/Serializer/Normalizer/AbstractNormalizer.php b/src/Symfony/Component/Serializer/Normalizer/AbstractNormalizer.php index 8830f13cf7..84d6db2e18 100644 --- a/src/Symfony/Component/Serializer/Normalizer/AbstractNormalizer.php +++ b/src/Symfony/Component/Serializer/Normalizer/AbstractNormalizer.php @@ -327,7 +327,7 @@ abstract class AbstractNormalizer implements NormalizerInterface, DenormalizerIn return $circularReferenceHandler($object, $format, $context); } - throw new CircularReferenceException(sprintf('A circular reference has been detected when serializing the object of class "%s" (configured limit: %d).', \get_class($object), $this->circularReferenceLimit)); + throw new CircularReferenceException(sprintf('A circular reference has been detected when serializing the object of class "%s" (configured limit: %d).', \get_class($object), $context[self::CIRCULAR_REFERENCE_LIMIT] ?? $this->defaultContext[self::CIRCULAR_REFERENCE_LIMIT] ?? $this->circularReferenceLimit)); } /** diff --git a/src/Symfony/Component/Serializer/Tests/Normalizer/Features/CircularReferenceTestTrait.php b/src/Symfony/Component/Serializer/Tests/Normalizer/Features/CircularReferenceTestTrait.php index 1f51cc26a9..99eb10120d 100644 --- a/src/Symfony/Component/Serializer/Tests/Normalizer/Features/CircularReferenceTestTrait.php +++ b/src/Symfony/Component/Serializer/Tests/Normalizer/Features/CircularReferenceTestTrait.php @@ -10,23 +10,36 @@ use Symfony\Component\Serializer\Normalizer\NormalizerInterface; */ trait CircularReferenceTestTrait { - abstract protected function getNormalizerForCircularReference(): NormalizerInterface; + abstract protected function getNormalizerForCircularReference(array $defaultContext): NormalizerInterface; abstract protected function getSelfReferencingModel(); - public function testUnableToNormalizeCircularReference() + public function provideUnableToNormalizeCircularReference(): array { - $normalizer = $this->getNormalizerForCircularReference(); + return [ + [[], [], 1], + [['circular_reference_limit' => 2], [], 2], + [['circular_reference_limit' => 2], ['circular_reference_limit' => 3], 3], + ]; + } + + /** + * @dataProvider provideUnableToNormalizeCircularReference + */ + public function testUnableToNormalizeCircularReference(array $defaultContext, array $context, int $expectedLimit) + { + $normalizer = $this->getNormalizerForCircularReference($defaultContext); $obj = $this->getSelfReferencingModel(); $this->expectException(CircularReferenceException::class); - $normalizer->normalize($obj, null, ['circular_reference_limit' => 2]); + $this->expectExceptionMessage(sprintf('A circular reference has been detected when serializing the object of class "%s" (configured limit: %d).', \get_class($obj), $expectedLimit)); + $normalizer->normalize($obj, null, $context); } public function testCircularReferenceHandler() { - $normalizer = $this->getNormalizerForCircularReference(); + $normalizer = $this->getNormalizerForCircularReference([]); $obj = $this->getSelfReferencingModel(); $expected = ['me' => \get_class($obj)]; diff --git a/src/Symfony/Component/Serializer/Tests/Normalizer/GetSetMethodNormalizerTest.php b/src/Symfony/Component/Serializer/Tests/Normalizer/GetSetMethodNormalizerTest.php index 01925fe462..a3b4819656 100644 --- a/src/Symfony/Component/Serializer/Tests/Normalizer/GetSetMethodNormalizerTest.php +++ b/src/Symfony/Component/Serializer/Tests/Normalizer/GetSetMethodNormalizerTest.php @@ -247,10 +247,10 @@ class GetSetMethodNormalizerTest extends TestCase ); } - protected function getNormalizerForCircularReference(): GetSetMethodNormalizer + protected function getNormalizerForCircularReference(array $defaultContext): GetSetMethodNormalizer { $classMetadataFactory = new ClassMetadataFactory(new AnnotationLoader(new AnnotationReader())); - $normalizer = new GetSetMethodNormalizer($classMetadataFactory, new MetadataAwareNameConverter($classMetadataFactory)); + $normalizer = new GetSetMethodNormalizer($classMetadataFactory, new MetadataAwareNameConverter($classMetadataFactory), null, null, null, $defaultContext); new Serializer([$normalizer]); return $normalizer; diff --git a/src/Symfony/Component/Serializer/Tests/Normalizer/ObjectNormalizerTest.php b/src/Symfony/Component/Serializer/Tests/Normalizer/ObjectNormalizerTest.php index 4c6ef1fadc..4a2ac344ec 100644 --- a/src/Symfony/Component/Serializer/Tests/Normalizer/ObjectNormalizerTest.php +++ b/src/Symfony/Component/Serializer/Tests/Normalizer/ObjectNormalizerTest.php @@ -365,9 +365,9 @@ class ObjectNormalizerTest extends TestCase // circular reference - protected function getNormalizerForCircularReference(): ObjectNormalizer + protected function getNormalizerForCircularReference(array $defaultContext): ObjectNormalizer { - $normalizer = new ObjectNormalizer(); + $normalizer = new ObjectNormalizer(null, null, null, null, null, null, $defaultContext); new Serializer([$normalizer]); return $normalizer; diff --git a/src/Symfony/Component/Serializer/Tests/Normalizer/PropertyNormalizerTest.php b/src/Symfony/Component/Serializer/Tests/Normalizer/PropertyNormalizerTest.php index a111ec620e..8c7a0ead2c 100644 --- a/src/Symfony/Component/Serializer/Tests/Normalizer/PropertyNormalizerTest.php +++ b/src/Symfony/Component/Serializer/Tests/Normalizer/PropertyNormalizerTest.php @@ -191,9 +191,9 @@ class PropertyNormalizerTest extends TestCase $this->normalizer->setCallbacks($callbacks); } - protected function getNormalizerForCircularReference(): PropertyNormalizer + protected function getNormalizerForCircularReference(array $defaultContext): PropertyNormalizer { - $normalizer = new PropertyNormalizer(); + $normalizer = new PropertyNormalizer(null, null, null, null, null, $defaultContext); new Serializer([$normalizer]); return $normalizer;