From 09eec5e2a85d9af0ba1f86fc1b08eafdf12ef229 Mon Sep 17 00:00:00 2001 From: Martin Kirilov Date: Sat, 22 May 2021 04:44:23 +0300 Subject: [PATCH] [Messenger] Fix `ErrorDetailsStamp` denormalization --- .../Messenger/Stamp/ErrorDetailsStamp.php | 4 ++-- .../Tests/Stamp/ErrorDetailsStampTest.php | 24 +++++++++++++++++++ .../Tests/Stamp/StringErrorCodeException.php | 12 ++++++++++ 3 files changed, 38 insertions(+), 2 deletions(-) create mode 100644 src/Symfony/Component/Messenger/Tests/Stamp/StringErrorCodeException.php diff --git a/src/Symfony/Component/Messenger/Stamp/ErrorDetailsStamp.php b/src/Symfony/Component/Messenger/Stamp/ErrorDetailsStamp.php index ae03de5a6c12f..62abf23423ddd 100644 --- a/src/Symfony/Component/Messenger/Stamp/ErrorDetailsStamp.php +++ b/src/Symfony/Component/Messenger/Stamp/ErrorDetailsStamp.php @@ -23,7 +23,7 @@ final class ErrorDetailsStamp implements StampInterface /** @var string */ private $exceptionClass; - /** @var int|mixed */ + /** @var int|string */ private $exceptionCode; /** @var string */ @@ -33,7 +33,7 @@ final class ErrorDetailsStamp implements StampInterface private $flattenException; /** - * @param int|mixed $exceptionCode + * @param int|string $exceptionCode */ public function __construct(string $exceptionClass, $exceptionCode, string $exceptionMessage, FlattenException $flattenException = null) { diff --git a/src/Symfony/Component/Messenger/Tests/Stamp/ErrorDetailsStampTest.php b/src/Symfony/Component/Messenger/Tests/Stamp/ErrorDetailsStampTest.php index 8d66537afa0c8..054eed579e785 100644 --- a/src/Symfony/Component/Messenger/Tests/Stamp/ErrorDetailsStampTest.php +++ b/src/Symfony/Component/Messenger/Tests/Stamp/ErrorDetailsStampTest.php @@ -18,6 +18,8 @@ use Symfony\Component\Messenger\Stamp\ErrorDetailsStamp; use Symfony\Component\Messenger\Transport\Serialization\Normalizer\FlattenExceptionNormalizer; use Symfony\Component\Messenger\Transport\Serialization\Serializer; +use Symfony\Component\PropertyInfo\Extractor\ConstructorExtractor; +use Symfony\Component\PropertyInfo\Extractor\ReflectionExtractor; use Symfony\Component\Serializer\Encoder\JsonEncoder; use Symfony\Component\Serializer\Normalizer\ArrayDenormalizer; use Symfony\Component\Serializer\Normalizer\ObjectNormalizer; @@ -70,4 +72,26 @@ public function testDeserialization() $this->assertInstanceOf(ErrorDetailsStamp::class, $deserializedStamp); $this->assertEquals($stamp, $deserializedStamp); } + + public function testDeserializationWithStringExceptionCode() + { + $exception = new StringErrorCodeException('exception message', 'some code'); + $stamp = ErrorDetailsStamp::create($exception); + $extractor = new ConstructorExtractor([ + new ReflectionExtractor(), + ]); + $serializer = new Serializer( + new SymfonySerializer([ + new ArrayDenormalizer(), + new FlattenExceptionNormalizer(), + new ObjectNormalizer(null, null, null, $extractor, null, null, []), + ], [new JsonEncoder()]) + ); + + $deserializedEnvelope = $serializer->decode($serializer->encode(new Envelope(new \stdClass(), [$stamp]))); + + $deserializedStamp = $deserializedEnvelope->last(ErrorDetailsStamp::class); + $this->assertInstanceOf(ErrorDetailsStamp::class, $deserializedStamp); + $this->assertEquals($stamp, $deserializedStamp); + } } diff --git a/src/Symfony/Component/Messenger/Tests/Stamp/StringErrorCodeException.php b/src/Symfony/Component/Messenger/Tests/Stamp/StringErrorCodeException.php new file mode 100644 index 0000000000000..2c575d8f80046 --- /dev/null +++ b/src/Symfony/Component/Messenger/Tests/Stamp/StringErrorCodeException.php @@ -0,0 +1,12 @@ +code = $code; + } +}