3 namespace Drupal\Tests\serialization\Unit\Normalizer;
5 use Drupal\Core\Entity\EntityInterface;
6 use Drupal\Core\TypedData\TypedDataInterface;
7 use Drupal\Core\Field\Plugin\Field\FieldType\EntityReferenceItem;
8 use Drupal\serialization\Normalizer\EntityReferenceFieldItemNormalizer;
9 use Drupal\Tests\UnitTestCase;
10 use Prophecy\Argument;
11 use Symfony\Component\Serializer\Serializer;
14 * @coversDefaultClass \Drupal\serialization\Normalizer\EntityReferenceFieldItemNormalizer
15 * @group serialization
17 class EntityReferenceFieldItemNormalizerTest extends UnitTestCase {
20 * The mock serializer.
22 * @var \Symfony\Component\Serializer\SerializerInterface|\Prophecy\Prophecy\ObjectProphecy
24 protected $serializer;
27 * The normalizer under test.
29 * @var \Drupal\serialization\Normalizer\EntityReferenceFieldItemNormalizer
31 protected $normalizer;
34 * The mock field item.
36 * @var \Drupal\Core\Field\Plugin\Field\FieldType\EntityReferenceItem|\Prophecy\Prophecy\ObjectProphecy
43 protected function setUp() {
44 $this->normalizer = new EntityReferenceFieldItemNormalizer();
46 $this->serializer = $this->prophesize(Serializer::class);
47 // Set up the serializer to return an entity property.
48 $this->serializer->normalize(Argument::cetera())
49 ->willReturn(['value' => 'test']);
51 $this->normalizer->setSerializer($this->serializer->reveal());
53 $this->fieldItem = $this->prophesize(EntityReferenceItem::class);
54 $this->fieldItem->getIterator()
55 ->willReturn(new \ArrayIterator(['target_id' => []]));
59 * @covers ::supportsNormalization
61 public function testSupportsNormalization() {
62 $this->assertTrue($this->normalizer->supportsNormalization($this->fieldItem->reveal()));
63 $this->assertFalse($this->normalizer->supportsNormalization(new \stdClass()));
69 public function testNormalize() {
70 $test_url = '/test/100';
72 $entity = $this->prophesize(EntityInterface::class);
73 $entity->url('canonical')
74 ->willReturn($test_url)
77 ->willReturn('080e3add-f9d5-41ac-9821-eea55b7b42fb')
79 $entity->getEntityTypeId()
80 ->willReturn('test_type')
83 $entity_reference = $this->prophesize(TypedDataInterface::class);
84 $entity_reference->getValue()
85 ->willReturn($entity->reveal())
88 $this->fieldItem->get('entity')
89 ->willReturn($entity_reference)
92 $normalized = $this->normalizer->normalize($this->fieldItem->reveal());
95 'target_id' => ['value' => 'test'],
96 'target_type' => 'test_type',
97 'target_uuid' => '080e3add-f9d5-41ac-9821-eea55b7b42fb',
100 $this->assertSame($expected, $normalized);
104 * @covers ::normalize
106 public function testNormalizeWithNoEntity() {
107 $entity_reference = $this->prophesize(TypedDataInterface::class);
108 $entity_reference->getValue()
112 $this->fieldItem->get('entity')
113 ->willReturn($entity_reference->reveal())
116 $normalized = $this->normalizer->normalize($this->fieldItem->reveal());
119 'target_id' => ['value' => 'test'],
121 $this->assertSame($expected, $normalized);