Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit 4a37a02

Browse filesBrowse files
committed
Add tests for the exception messages
1 parent 46b08e3 commit 4a37a02
Copy full SHA for 4a37a02

File tree

2 files changed

+42
-14
lines changed
Filter options

2 files changed

+42
-14
lines changed

‎src/Symfony/Component/Serializer/Normalizer/AbstractObjectNormalizer.php

Copy file name to clipboardExpand all lines: src/Symfony/Component/Serializer/Normalizer/AbstractObjectNormalizer.php
+4-3Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ public function __construct(ClassMetadataFactoryInterface $classMetadataFactory
5151
parent::__construct($classMetadataFactory, $nameConverter);
5252

5353
$this->propertyTypeExtractor = $propertyTypeExtractor;
54-
$this->classDiscriminatorResolver = $classDiscriminatorResolver ?: ($classMetadataFactory !== null ? new ClassDiscriminatorFromClassMetadata($classMetadataFactory) : null);
54+
$this->classDiscriminatorResolver = $classDiscriminatorResolver ?: (null !== $classMetadataFactory ? new ClassDiscriminatorFromClassMetadata($classMetadataFactory) : null);
5555
}
5656

5757
/**
@@ -123,14 +123,15 @@ protected function instantiateObject(array &$data, $class, array &$context, \Ref
123123

124124
if ($this->classDiscriminatorResolver && $mapping = $this->classDiscriminatorResolver->getMappingForClass($class)) {
125125
if (!isset($data[$mapping->getTypeProperty()])) {
126-
throw new RuntimeException(sprintf('Type property "%s" not found for the abstract object "%s"', $mapping['typeProperty'], $class));
126+
throw new RuntimeException(sprintf('Type property "%s" not found for the abstract object "%s"', $mapping->getTypeProperty(), $class));
127127
}
128128

129129
$type = $data[$mapping->getTypeProperty()];
130-
if (null === ($class = $mapping->getClassForType($type))) {
130+
if (null === ($mappedClass = $mapping->getClassForType($type))) {
131131
throw new RuntimeException(sprintf('The type "%s" has no mapped class for the abstract object "%s"', $type, $class));
132132
}
133133

134+
$class = $mappedClass;
134135
$reflectionClass = new \ReflectionClass($class);
135136
}
136137

‎src/Symfony/Component/Serializer/Tests/SerializerTest.php

Copy file name to clipboardExpand all lines: src/Symfony/Component/Serializer/Tests/SerializerTest.php
+38-11Lines changed: 38 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -400,15 +400,49 @@ public function testDeserializeAndSerializeInterfacedObjectsWithTheClassMetadata
400400

401401
$jsonData = '{"message-type":"one","one":1}';
402402

403-
$loaderMock = $this->getMockBuilder(ClassMetadataFactoryInterface::class)->getMock();
404-
$loaderMock->method('hasMetadataFor')->will($this->returnValueMap(array(
403+
$discriminatorResolver = new ClassDiscriminatorFromClassMetadata($this->metadataFactoryMockForDummyInterface());
404+
$serializer = new Serializer(array(new ObjectNormalizer(null, null, null, null, $discriminatorResolver)), array('json' => new JsonEncoder()));
405+
406+
$deserialized = $serializer->deserialize($jsonData, DummyMessageInterface::class, 'json');
407+
$this->assertEquals($example, $deserialized);
408+
409+
$serialized = $serializer->serialize($deserialized, 'json');
410+
$this->assertEquals($jsonData, $serialized);
411+
}
412+
413+
/**
414+
* @expectedException \Symfony\Component\Serializer\Exception\RuntimeException
415+
* @expectedExceptionMessage The type "second" has no mapped class for the abstract object "Symfony\Component\Serializer\Tests\Fixtures\DummyMessageInterface"
416+
*/
417+
public function testExceptionWhenTypeIsNotKnownInDiscriminator()
418+
{
419+
$discriminatorResolver = new ClassDiscriminatorFromClassMetadata($this->metadataFactoryMockForDummyInterface());
420+
$serializer = new Serializer(array(new ObjectNormalizer(null, null, null, null, $discriminatorResolver)), array('json' => new JsonEncoder()));
421+
$serializer->deserialize('{"message-type":"second","one":1}', DummyMessageInterface::class, 'json');
422+
}
423+
424+
/**
425+
* @expectedException \Symfony\Component\Serializer\Exception\RuntimeException
426+
* @expectedExceptionMessage Type property "message-type" not found for the abstract object "Symfony\Component\Serializer\Tests\Fixtures\DummyMessageInterface"
427+
*/
428+
public function testExceptionWhenTypeIsNotInTheBodyToDeserialiaze()
429+
{
430+
$discriminatorResolver = new ClassDiscriminatorFromClassMetadata($this->metadataFactoryMockForDummyInterface());
431+
$serializer = new Serializer(array(new ObjectNormalizer(null, null, null, null, $discriminatorResolver)), array('json' => new JsonEncoder()));
432+
$serializer->deserialize('{"one":1}', DummyMessageInterface::class, 'json');
433+
}
434+
435+
private function metadataFactoryMockForDummyInterface()
436+
{
437+
$factoryMock = $this->getMockBuilder(ClassMetadataFactoryInterface::class)->getMock();
438+
$factoryMock->method('hasMetadataFor')->will($this->returnValueMap(array(
405439
array(
406440
DummyMessageInterface::class,
407441
true,
408442
),
409443
)));
410444

411-
$loaderMock->method('getMetadataFor')->will($this->returnValueMap(array(
445+
$factoryMock->method('getMetadataFor')->will($this->returnValueMap(array(
412446
array(
413447
DummyMessageInterface::class,
414448
new ClassMetadata(
@@ -420,14 +454,7 @@ public function testDeserializeAndSerializeInterfacedObjectsWithTheClassMetadata
420454
),
421455
)));
422456

423-
$discriminatorResolver = new ClassDiscriminatorFromClassMetadata($loaderMock);
424-
$serializer = new Serializer(array(new ObjectNormalizer(null, null, null, null, $discriminatorResolver)), array('json' => new JsonEncoder()));
425-
426-
$deserialized = $serializer->deserialize($jsonData, DummyMessageInterface::class, 'json');
427-
$this->assertEquals($example, $deserialized);
428-
429-
$serialized = $serializer->serialize($deserialized, 'json');
430-
$this->assertEquals($jsonData, $serialized);
457+
return $factoryMock;
431458
}
432459
}
433460

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.