64e73b693d3763a2c0dd8237cc2bc85b4d7fedcb
[yaffs-website] / web / core / modules / serialization / tests / src / Unit / EntityResolver / ChainEntityResolverTest.php
1 <?php
2
3 namespace Drupal\Tests\serialization\Unit\EntityResolver;
4
5 use Drupal\Tests\UnitTestCase;
6 use Drupal\serialization\EntityResolver\ChainEntityResolver;
7
8 /**
9  * @coversDefaultClass \Drupal\serialization\EntityResolver\ChainEntityResolver
10  * @group serialization
11  */
12 class ChainEntityResolverTest extends UnitTestCase {
13
14   /**
15    * A mocked normalizer.
16    *
17    * @var \Symfony\Component\Serializer\Normalizer\NormalizerInterface|\PHPUnit_Framework_MockObject_MockObject
18    */
19   protected $testNormalizer;
20
21   /**
22    * Test data passed to the resolve method.
23    *
24    * @var \stdClass
25    */
26   protected $testData;
27
28   /**
29    * A test entity type.
30    *
31    * @var string
32    */
33   protected $testEntityType = 'test_type';
34
35   /**
36    * {@inheritdoc}
37    */
38   protected function setUp() {
39     $this->testNormalizer = $this->getMock('Symfony\Component\Serializer\Normalizer\NormalizerInterface');
40     $this->testData = new \stdClass();
41   }
42
43   /**
44    * Test the resolve method with no matching resolvers.
45    *
46    * @covers ::__construct
47    * @covers ::resolve
48    */
49   public function testResolverWithNoneResolved() {
50     $resolvers = [
51       $this->createEntityResolverMock(),
52       $this->createEntityResolverMock(),
53     ];
54
55     $resolver = new ChainEntityResolver($resolvers);
56
57     $this->assertNull($resolver->resolve($this->testNormalizer, $this->testData, $this->testEntityType));
58   }
59
60   /**
61    * Test the resolve method with no matching resolvers, using addResolver.
62    *
63    * @covers ::addResolver
64    * @covers ::resolve
65    */
66   public function testResolverWithNoneResolvedUsingAddResolver() {
67     $resolver = new ChainEntityResolver();
68     $resolver->addResolver($this->createEntityResolverMock());
69     $resolver->addResolver($this->createEntityResolverMock());
70
71     $this->assertNull($resolver->resolve($this->testNormalizer, $this->testData, $this->testEntityType));
72   }
73
74   /**
75    * Test the resolve method with a matching resolver first.
76    *
77    * @covers ::__construct
78    * @covers ::resolve
79    */
80   public function testResolverWithFirstResolved() {
81     $resolvers = [
82       $this->createEntityResolverMock(10),
83       $this->createEntityResolverMock(NULL, FALSE),
84     ];
85
86     $resolver = new ChainEntityResolver($resolvers);
87
88     $this->assertSame(10, $resolver->resolve($this->testNormalizer, $this->testData, $this->testEntityType));
89   }
90
91   /**
92    * Test the resolve method with a matching resolver last.
93    *
94    * @covers ::__construct
95    * @covers ::resolve
96    */
97   public function testResolverWithLastResolved() {
98     $resolvers = [
99       $this->createEntityResolverMock(),
100       $this->createEntityResolverMock(10),
101     ];
102
103     $resolver = new ChainEntityResolver($resolvers);
104
105     $this->assertSame(10, $resolver->resolve($this->testNormalizer, $this->testData, $this->testEntityType));
106   }
107
108   /**
109    * Test the resolve method where one resolver returns 0.
110    *
111    * @covers ::__construct
112    * @covers ::resolve
113    */
114   public function testResolverWithResolvedToZero() {
115     $resolvers = [
116       $this->createEntityResolverMock(0),
117       $this->createEntityResolverMock(NULL, FALSE),
118     ];
119
120     $resolver = new ChainEntityResolver($resolvers);
121
122     $this->assertSame(0, $resolver->resolve($this->testNormalizer, $this->testData, $this->testEntityType));
123   }
124
125   /**
126    * Creates a mock entity resolver.
127    *
128    * @param null|int $return
129    *   Whether the mocked resolve method should return TRUE or FALSE.
130    * @param bool $called
131    *   Whether or not the resolve method is expected to be called.
132    *
133    * @return \Drupal\serialization\EntityResolver\EntityResolverInterface|\PHPUnit_Framework_MockObject_MockObject
134    *   The mocked entity resolver.
135    */
136   protected function createEntityResolverMock($return = NULL, $called = TRUE) {
137     $mock = $this->getMock('Drupal\serialization\EntityResolver\EntityResolverInterface');
138
139     if ($called) {
140       $mock->expects($this->once())
141         ->method('resolve')
142         ->with($this->testNormalizer, $this->testData, $this->testEntityType)
143         ->will($this->returnValue($return));
144     }
145     else {
146       $mock->expects($this->never())
147         ->method('resolve');
148     }
149
150     return $mock;
151   }
152
153 }