From d3ba963f62e250862dc3ebdc00c4dac67d41d289 Mon Sep 17 00:00:00 2001 From: George Steel Date: Tue, 5 May 2026 12:47:32 +0100 Subject: [PATCH] Failing test case for covariant templates --- tests/Unit/Fixture/CovariantTemplate.php | 19 +++++++++++++++++++ tests/Unit/MetadataHydratorTest.php | 15 +++++++++++++++ 2 files changed, 34 insertions(+) create mode 100644 tests/Unit/Fixture/CovariantTemplate.php diff --git a/tests/Unit/Fixture/CovariantTemplate.php b/tests/Unit/Fixture/CovariantTemplate.php new file mode 100644 index 0000000..6b00958 --- /dev/null +++ b/tests/Unit/Fixture/CovariantTemplate.php @@ -0,0 +1,19 @@ + $objects */ + public function __construct( + #[ArrayNormalizer(new ObjectNormalizer())] + public array $objects, + ) { + } +} diff --git a/tests/Unit/MetadataHydratorTest.php b/tests/Unit/MetadataHydratorTest.php index 88b66a7..dca4aee 100644 --- a/tests/Unit/MetadataHydratorTest.php +++ b/tests/Unit/MetadataHydratorTest.php @@ -23,6 +23,7 @@ use Patchlevel\Hydrator\Tests\Unit\Fixture\Circle2Dto; use Patchlevel\Hydrator\Tests\Unit\Fixture\Circle3Dto; use Patchlevel\Hydrator\Tests\Unit\Fixture\ContextAwareDto; +use Patchlevel\Hydrator\Tests\Unit\Fixture\CovariantTemplate; use Patchlevel\Hydrator\Tests\Unit\Fixture\DefaultDto; use Patchlevel\Hydrator\Tests\Unit\Fixture\DtoWithHooks; use Patchlevel\Hydrator\Tests\Unit\Fixture\Email; @@ -666,4 +667,18 @@ public function guess(ObjectType $type): Normalizer|null self::assertSame(4, $guesser->count); } + + public function testTypesWithCovariantTemplatesCanBeSerialisedAndHydrated(): void + { + $object = new CovariantTemplate([ + (object)['foo' => 1], + (object)['foo' => 2], + ]); + + $serialized = $this->hydrator->extract($object); + $hydrated = $this->hydrator->hydrate(CovariantTemplate::class, $serialized); + + self::assertNotSame($object, $hydrated); + self::assertEquals($object, $hydrated); + } }