.../Unit/Normalizer/ConfigEntityNormalizerTest.php | 57 ++++++++++++++++++++++ 1 file changed, 57 insertions(+) diff --git a/core/modules/serialization/tests/src/Unit/Normalizer/ConfigEntityNormalizerTest.php b/core/modules/serialization/tests/src/Unit/Normalizer/ConfigEntityNormalizerTest.php index 2f99e2d..0a27c80 100644 --- a/core/modules/serialization/tests/src/Unit/Normalizer/ConfigEntityNormalizerTest.php +++ b/core/modules/serialization/tests/src/Unit/Normalizer/ConfigEntityNormalizerTest.php @@ -2,6 +2,9 @@ namespace Drupal\Tests\serialization\Unit\Normalizer; +use Drupal\Core\Config\Entity\ConfigEntityTypeInterface; +use Drupal\Core\Entity\EntityManagerInterface; +use Drupal\Core\Entity\EntityStorageInterface; use Drupal\serialization\Normalizer\ConfigEntityNormalizer; use Drupal\Tests\UnitTestCase; @@ -36,4 +39,58 @@ public function testNormalize() { $this->assertSame(['test' => 'test'], $normalizer->normalize($config_entity)); } + /** + * @covers ::denormalize + */ + public function testDenormalize() { + $test_value = $this->randomMachineName(); + $data = [ + 'test' => $test_value, + '_core' => [ + 'default_config_hash' => $this->randomMachineName(), + $this->randomMachineName() => 'some random key', + ], + ]; + + $expected_storage_data = [ + 'test' => $test_value, + ]; + + // Mock of the entity storage, to test our expectation that the '_core' key + // never makes it to that point, thanks to the denormalizer omitting it. + $entity_storage = $this->prophesize(EntityStorageInterface::class); + $entity_storage->create($expected_storage_data) + ->shouldBeCalled() + ->will(function ($args) { + $entity = new \stdClass(); + $entity->received_data = $args[0]; + return $entity; + }); + + // Stubs for the denormalizer going from entity manager to entity storage. + $entity_type_id = $this->randomMachineName(); + $entity_type_class = $this->randomMachineName(); + $entity_manager = $this->prophesize(EntityManagerInterface::class); + $entity_manager->getEntityTypeFromClass($entity_type_class) + ->willReturn($entity_type_id); + $entity_manager->getDefinition($entity_type_id, FALSE) + ->willReturn($this->prophesize(ConfigEntityTypeInterface::class)->reveal()); + $entity_manager->getStorage($entity_type_id) + ->willReturn($entity_storage->reveal()); + $normalizer = new ConfigEntityNormalizer($entity_manager->reveal()); + + // Verify the denormalizer still works correctly: the mock above creates an + // artificial entity object containing exactly the data it received. It also + // should still set _restSubmittedFields correctly. + $expected_denormalization = (object) [ + '_restSubmittedFields' => [ + 'test', + ], + 'received_data' => [ + 'test' => $test_value, + ], + ]; + $this->assertEquals($expected_denormalization, $normalizer->denormalize($data, $entity_type_class, 'json')); + } + }