d010a0494e3ec0adb5f3915f018ffa3f67fe0762
[yaffs-website] / web / core / modules / serialization / tests / src / Unit / Normalizer / EntityReferenceFieldItemNormalizerTest.php
1 <?php
2
3 namespace Drupal\Tests\serialization\Unit\Normalizer;
4
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;
12
13 /**
14  * @coversDefaultClass \Drupal\serialization\Normalizer\EntityReferenceFieldItemNormalizer
15  * @group serialization
16  */
17 class EntityReferenceFieldItemNormalizerTest extends UnitTestCase {
18
19   /**
20    * The mock serializer.
21    *
22    * @var \Symfony\Component\Serializer\SerializerInterface|\Prophecy\Prophecy\ObjectProphecy
23    */
24   protected $serializer;
25
26   /**
27    * The normalizer under test.
28    *
29    * @var \Drupal\serialization\Normalizer\EntityReferenceFieldItemNormalizer
30    */
31   protected $normalizer;
32
33   /**
34    * The mock field item.
35    *
36    * @var \Drupal\Core\Field\Plugin\Field\FieldType\EntityReferenceItem|\Prophecy\Prophecy\ObjectProphecy
37    */
38   protected $fieldItem;
39
40   /**
41    * {@inheritdoc}
42    */
43   protected function setUp() {
44     $this->normalizer = new EntityReferenceFieldItemNormalizer();
45
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']);
50
51     $this->normalizer->setSerializer($this->serializer->reveal());
52
53     $this->fieldItem = $this->prophesize(EntityReferenceItem::class);
54     $this->fieldItem->getIterator()
55       ->willReturn(new \ArrayIterator(['target_id' => []]));
56   }
57
58   /**
59    * @covers ::supportsNormalization
60    */
61   public function testSupportsNormalization() {
62     $this->assertTrue($this->normalizer->supportsNormalization($this->fieldItem->reveal()));
63     $this->assertFalse($this->normalizer->supportsNormalization(new \stdClass()));
64   }
65
66   /**
67    * @covers ::normalize
68    */
69   public function testNormalize() {
70     $test_url = '/test/100';
71
72     $entity = $this->prophesize(EntityInterface::class);
73     $entity->url('canonical')
74       ->willReturn($test_url)
75       ->shouldBeCalled();
76     $entity->uuid()
77       ->willReturn('080e3add-f9d5-41ac-9821-eea55b7b42fb')
78       ->shouldBeCalled();
79     $entity->getEntityTypeId()
80       ->willReturn('test_type')
81       ->shouldBeCalled();
82
83     $entity_reference = $this->prophesize(TypedDataInterface::class);
84     $entity_reference->getValue()
85       ->willReturn($entity->reveal())
86       ->shouldBeCalled();
87
88     $this->fieldItem->get('entity')
89       ->willReturn($entity_reference)
90       ->shouldBeCalled();
91
92     $normalized = $this->normalizer->normalize($this->fieldItem->reveal());
93
94     $expected = [
95       'target_id' => ['value' => 'test'],
96       'target_type' => 'test_type',
97       'target_uuid' => '080e3add-f9d5-41ac-9821-eea55b7b42fb',
98       'url' => $test_url,
99     ];
100     $this->assertSame($expected, $normalized);
101   }
102
103   /**
104    * @covers ::normalize
105    */
106   public function testNormalizeWithNoEntity() {
107     $entity_reference = $this->prophesize(TypedDataInterface::class);
108     $entity_reference->getValue()
109       ->willReturn(NULL)
110       ->shouldBeCalled();
111
112     $this->fieldItem->get('entity')
113       ->willReturn($entity_reference->reveal())
114       ->shouldBeCalled();
115
116     $normalized = $this->normalizer->normalize($this->fieldItem->reveal());
117
118     $expected = [
119       'target_id' => ['value' => 'test'],
120     ];
121     $this->assertSame($expected, $normalized);
122   }
123
124 }