|
41 | 41 | use Symfony\Component\Serializer\Serializer;
|
42 | 42 | use Symfony\Component\Serializer\SerializerAwareInterface;
|
43 | 43 | use Symfony\Component\Serializer\SerializerInterface;
|
| 44 | +use Symfony\Component\Serializer\Tests\Fixtures\AbstractWithDiscriminator; |
44 | 45 | use Symfony\Component\Serializer\Tests\Fixtures\Annotations\AbstractDummy;
|
45 | 46 | use Symfony\Component\Serializer\Tests\Fixtures\Annotations\AbstractDummyFirstChild;
|
46 | 47 | use Symfony\Component\Serializer\Tests\Fixtures\Annotations\AbstractDummySecondChild;
|
| 48 | +use Symfony\Component\Serializer\Tests\Fixtures\ConcreteWithDiscriminator; |
47 | 49 | use Symfony\Component\Serializer\Tests\Fixtures\DummySecondChildQuux;
|
48 | 50 | use Symfony\Component\Serializer\Tests\Normalizer\Features\ObjectDummyWithContextAttribute;
|
49 | 51 |
|
@@ -302,6 +304,39 @@ public function testNormalizeWithNestedAttributesInConstructor()
|
302 | 304 | ], $test);
|
303 | 305 | }
|
304 | 306 |
|
| 307 | + public function testDenormalizeWithDiscriminatorMapNotMappedToAProperty() |
| 308 | + { |
| 309 | + $factory = new ClassMetadataFactory(new AnnotationLoader(new AnnotationReader())); |
| 310 | + |
| 311 | + $loaderMock = new class() implements ClassMetadataFactoryInterface { |
| 312 | + public function getMetadataFor($value): ClassMetadataInterface |
| 313 | + { |
| 314 | + if (ConcreteWithDiscriminator::class === $value) { |
| 315 | + return new ClassMetadata( |
| 316 | + AbstractWithDiscriminator::class, |
| 317 | + new ClassDiscriminatorMapping('discr', [ |
| 318 | + 'first' => ConcreteWithDiscriminator::class, |
| 319 | + ]) |
| 320 | + ); |
| 321 | + } |
| 322 | + |
| 323 | + throw new InvalidArgumentException(); |
| 324 | + } |
| 325 | + |
| 326 | + public function hasMetadataFor($value): bool |
| 327 | + { |
| 328 | + return ConcreteWithDiscriminator::class === $value; |
| 329 | + } |
| 330 | + }; |
| 331 | + |
| 332 | + $discriminatorResolver = new ClassDiscriminatorFromClassMetadata($loaderMock); |
| 333 | + $normalizer = new AbstractObjectNormalizerDummy($factory, null, new PhpDocExtractor(), $discriminatorResolver); |
| 334 | + $serializer = new Serializer([$normalizer]); |
| 335 | + $normalizer->setSerializer($serializer); |
| 336 | + |
| 337 | + $this->assertInstanceOf(AbstractWithDiscriminator::class, $normalizer->denormalize(['id' => 0, 'instance' => 'test', 'name' => 'test'], ConcreteWithDiscriminator::class, 'any')); |
| 338 | + } |
| 339 | + |
305 | 340 | public function testNormalizeWithNestedAttributesInConstructorAndDiscriminatorMap()
|
306 | 341 | {
|
307 | 342 | $classMetadataFactory = new ClassMetadataFactory(new AnnotationLoader(new AnnotationReader()));
|
|
0 commit comments