3 namespace Drupal\Tests\serialization\Unit\EntityResolver;
5 use Drupal\Tests\UnitTestCase;
6 use Drupal\serialization\EntityResolver\ChainEntityResolver;
9 * @coversDefaultClass \Drupal\serialization\EntityResolver\ChainEntityResolver
10 * @group serialization
12 class ChainEntityResolverTest extends UnitTestCase {
15 * A mocked normalizer.
17 * @var \Symfony\Component\Serializer\Normalizer\NormalizerInterface|\PHPUnit_Framework_MockObject_MockObject
19 protected $testNormalizer;
22 * Test data passed to the resolve method.
33 protected $testEntityType = 'test_type';
38 protected function setUp() {
39 $this->testNormalizer = $this->getMock('Symfony\Component\Serializer\Normalizer\NormalizerInterface');
40 $this->testData = new \stdClass();
44 * Test the resolve method with no matching resolvers.
46 * @covers ::__construct
49 public function testResolverWithNoneResolved() {
51 $this->createEntityResolverMock(),
52 $this->createEntityResolverMock(),
55 $resolver = new ChainEntityResolver($resolvers);
57 $this->assertNull($resolver->resolve($this->testNormalizer, $this->testData, $this->testEntityType));
61 * Test the resolve method with no matching resolvers, using addResolver.
63 * @covers ::addResolver
66 public function testResolverWithNoneResolvedUsingAddResolver() {
67 $resolver = new ChainEntityResolver();
68 $resolver->addResolver($this->createEntityResolverMock());
69 $resolver->addResolver($this->createEntityResolverMock());
71 $this->assertNull($resolver->resolve($this->testNormalizer, $this->testData, $this->testEntityType));
75 * Test the resolve method with a matching resolver first.
77 * @covers ::__construct
80 public function testResolverWithFirstResolved() {
82 $this->createEntityResolverMock(10),
83 $this->createEntityResolverMock(NULL, FALSE),
86 $resolver = new ChainEntityResolver($resolvers);
88 $this->assertSame(10, $resolver->resolve($this->testNormalizer, $this->testData, $this->testEntityType));
92 * Test the resolve method with a matching resolver last.
94 * @covers ::__construct
97 public function testResolverWithLastResolved() {
99 $this->createEntityResolverMock(),
100 $this->createEntityResolverMock(10),
103 $resolver = new ChainEntityResolver($resolvers);
105 $this->assertSame(10, $resolver->resolve($this->testNormalizer, $this->testData, $this->testEntityType));
109 * Test the resolve method where one resolver returns 0.
111 * @covers ::__construct
114 public function testResolverWithResolvedToZero() {
116 $this->createEntityResolverMock(0),
117 $this->createEntityResolverMock(NULL, FALSE),
120 $resolver = new ChainEntityResolver($resolvers);
122 $this->assertSame(0, $resolver->resolve($this->testNormalizer, $this->testData, $this->testEntityType));
126 * Creates a mock entity resolver.
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.
133 * @return \Drupal\serialization\EntityResolver\EntityResolverInterface|\PHPUnit_Framework_MockObject_MockObject
134 * The mocked entity resolver.
136 protected function createEntityResolverMock($return = NULL, $called = TRUE) {
137 $mock = $this->getMock('Drupal\serialization\EntityResolver\EntityResolverInterface');
140 $mock->expects($this->once())
142 ->with($this->testNormalizer, $this->testData, $this->testEntityType)
143 ->will($this->returnValue($return));
146 $mock->expects($this->never())