|
19 | 19 | use Symfony\Component\Serializer\Exception\NotNormalizableValueException;
|
20 | 20 | use Symfony\Component\Serializer\Mapping\ClassDiscriminatorFromClassMetadata;
|
21 | 21 | use Symfony\Component\Serializer\Mapping\ClassDiscriminatorMapping;
|
| 22 | +use Symfony\Component\Serializer\Mapping\ClassDiscriminatorResolverInterface; |
22 | 23 | use Symfony\Component\Serializer\Mapping\ClassMetadata;
|
23 | 24 | use Symfony\Component\Serializer\Mapping\ClassMetadataInterface;
|
24 | 25 | use Symfony\Component\Serializer\Mapping\Factory\ClassMetadataFactory;
|
@@ -235,6 +236,43 @@ public function hasMetadataFor($value): bool
|
235 | 236 | $this->assertInstanceOf(DummySecondChildQuux::class, $normalizedData->quux);
|
236 | 237 | }
|
237 | 238 |
|
| 239 | + public function testDenormalizeWithNestedDiscriminatorMap() |
| 240 | + { |
| 241 | + $classDiscriminatorResolver = new class() implements ClassDiscriminatorResolverInterface { |
| 242 | + public function getMappingForClass(string $class): ?ClassDiscriminatorMapping |
| 243 | + { |
| 244 | + switch ($class) { |
| 245 | + case AbstractDummy::class: |
| 246 | + return new ClassDiscriminatorMapping('type', [ |
| 247 | + 'foo' => AbstractDummyFirstChild::class, |
| 248 | + ]); |
| 249 | + case AbstractDummyFirstChild::class: |
| 250 | + return new ClassDiscriminatorMapping('nested_type', [ |
| 251 | + 'bar' => AbstractDummySecondChild::class, |
| 252 | + ]); |
| 253 | + default: |
| 254 | + return null; |
| 255 | + } |
| 256 | + } |
| 257 | + |
| 258 | + public function getMappingForMappedObject($object): ?ClassDiscriminatorMapping |
| 259 | + { |
| 260 | + return null; |
| 261 | + } |
| 262 | + |
| 263 | + public function getTypeForMappedObject($object): ?string |
| 264 | + { |
| 265 | + return null; |
| 266 | + } |
| 267 | + }; |
| 268 | + |
| 269 | + $normalizer = new AbstractObjectNormalizerDummy(null, null, null, $classDiscriminatorResolver); |
| 270 | + |
| 271 | + $denormalizedData = $normalizer->denormalize(['type' => 'foo', 'nested_type' => 'bar'], AbstractDummy::class); |
| 272 | + |
| 273 | + $this->assertInstanceOf(AbstractDummySecondChild::class, $denormalizedData); |
| 274 | + } |
| 275 | + |
238 | 276 | /**
|
239 | 277 | * Test that additional attributes throw an exception if no metadata factory is specified.
|
240 | 278 | */
|
|
0 commit comments