38e9502e99a3f36b78f9f0b4a88cd1ffdb78d9b2
[yaffs-website] / web / core / tests / Drupal / Tests / Core / Entity / EntityLinkTest.php
1 <?php
2
3 namespace Drupal\Tests\Core\Entity;
4
5 use Drupal\Core\DependencyInjection\ContainerBuilder;
6 use Drupal\Core\Entity\EntityTypeManagerInterface;
7 use Drupal\Core\Language\Language;
8 use Drupal\Core\Link;
9 use Drupal\Tests\UnitTestCase;
10
11 /**
12  * @coversDefaultClass \Drupal\Core\Entity\Entity
13  * @group Entity
14  */
15 class EntityLinkTest extends UnitTestCase {
16
17   /**
18    * The mocked entity type manager.
19    *
20    * @var \Drupal\Core\Entity\EntityTypeManagerInterface|\PHPUnit_Framework_MockObject_MockObject
21    */
22   protected $entityTypeManager;
23
24   /**
25    * The tested link generator.
26    *
27    * @var \Drupal\Core\Utility\LinkGeneratorInterface|\PHPUnit_Framework_MockObject_MockObject
28    */
29   protected $linkGenerator;
30
31   /**
32    * The mocked language manager.
33    *
34    * @var \Drupal\Core\Language\LanguageManagerInterface|\PHPUnit_Framework_MockObject_MockObject
35    */
36   protected $languageManager;
37
38   /**
39    * {@inheritdoc}
40    */
41   protected function setUp() {
42     parent::setUp();
43
44     $this->entityTypeManager = $this->getMock(EntityTypeManagerInterface::class);
45     $this->linkGenerator = $this->getMock('Drupal\Core\Utility\LinkGeneratorInterface');
46     $this->languageManager = $this->getMock('Drupal\Core\Language\LanguageManagerInterface');
47
48     $container = new ContainerBuilder();
49     $container->set('entity_type.manager', $this->entityTypeManager);
50     $container->set('link_generator', $this->linkGenerator);
51     $container->set('language_manager', $this->languageManager);
52     \Drupal::setContainer($container);
53   }
54
55   /**
56    * Tests for the Entity::link() method
57    *
58    * @covers ::link
59    *
60    * @dataProvider providerTestLink
61    */
62   public function testLink($entity_label, $link_text, $expected_text, $link_rel = 'canonical', array $link_options = []) {
63     $language = new Language(['id' => 'es']);
64     $link_options += ['language' => $language];
65     $this->languageManager->expects($this->any())
66       ->method('getLanguage')
67       ->with('es')
68       ->willReturn($language);
69
70     $route_name_map = [
71       'canonical' => 'entity.test_entity_type.canonical',
72       'edit-form' => 'entity.test_entity_type.edit_form',
73     ];
74     $route_name = $route_name_map[$link_rel];
75     $entity_id = 'test_entity_id';
76     $entity_type_id = 'test_entity_type';
77     $expected = '<a href="/test_entity_type/test_entity_id">' . $expected_text . '</a>';
78
79     $entity_type = $this->getMock('Drupal\Core\Entity\EntityTypeInterface');
80     $entity_type->expects($this->once())
81       ->method('getLinkTemplates')
82       ->willReturn($route_name_map);
83     $entity_type->expects($this->any())
84       ->method('getKey')
85       ->willReturnMap([
86         ['label', 'label'],
87         ['langcode', 'langcode'],
88       ]);
89
90     $this->entityTypeManager
91       ->expects($this->any())
92       ->method('getDefinition')
93       ->with($entity_type_id)
94       ->will($this->returnValue($entity_type));
95
96     /** @var \Drupal\Core\Entity\Entity $entity */
97     $entity = $this->getMockForAbstractClass('Drupal\Core\Entity\Entity', [
98       ['id' => $entity_id, 'label' => $entity_label, 'langcode' => 'es'],
99       $entity_type_id,
100     ]);
101
102     $expected_link = Link::createFromRoute(
103       $expected_text,
104       $route_name,
105       [$entity_type_id => $entity_id],
106       ['entity_type' => $entity_type_id, 'entity' => $entity] + $link_options
107     )->setLinkGenerator($this->linkGenerator);
108
109     $this->linkGenerator->expects($this->once())
110       ->method('generateFromLink')
111       ->with($this->equalTo($expected_link))
112       ->willReturn($expected);
113
114     $this->assertSame($expected, $entity->link($link_text, $link_rel, $link_options));
115   }
116
117   /**
118    * Tests for the Entity::toLink() method
119    *
120    * @covers ::toLink
121    *
122    * @dataProvider providerTestLink
123    */
124   public function testToLink($entity_label, $link_text, $expected_text, $link_rel = 'canonical', array $link_options = []) {
125     $language = new Language(['id' => 'es']);
126     $link_options += ['language' => $language];
127     $this->languageManager->expects($this->any())
128       ->method('getLanguage')
129       ->with('es')
130       ->willReturn($language);
131
132     $route_name_map = [
133       'canonical' => 'entity.test_entity_type.canonical',
134       'edit-form' => 'entity.test_entity_type.edit_form',
135     ];
136     $route_name = $route_name_map[$link_rel];
137     $entity_id = 'test_entity_id';
138     $entity_type_id = 'test_entity_type';
139     $expected = '<a href="/test_entity_type/test_entity_id">' . $expected_text . '</a>';
140
141     $entity_type = $this->getMock('Drupal\Core\Entity\EntityTypeInterface');
142     $entity_type->expects($this->once())
143       ->method('getLinkTemplates')
144       ->willReturn($route_name_map);
145     $entity_type->expects($this->any())
146       ->method('getKey')
147       ->willReturnMap([
148         ['label', 'label'],
149         ['langcode', 'langcode'],
150       ]);
151
152     $this->entityTypeManager
153       ->expects($this->any())
154       ->method('getDefinition')
155       ->with($entity_type_id)
156       ->will($this->returnValue($entity_type));
157
158     /** @var \Drupal\Core\Entity\Entity $entity */
159     $entity = $this->getMockForAbstractClass('Drupal\Core\Entity\Entity', [
160       ['id' => $entity_id, 'label' => $entity_label, 'langcode' => 'es'],
161       $entity_type_id,
162     ]);
163
164     $expected_link = Link::createFromRoute(
165       $expected_text,
166       $route_name,
167       [$entity_type_id => $entity_id],
168       ['entity_type' => $entity_type_id, 'entity' => $entity] + $link_options
169     );
170
171     $result_link = $entity->toLink($link_text, $link_rel, $link_options);
172     $this->assertEquals($expected_link, $result_link);
173   }
174
175   /**
176    * Provides test data for testLink().
177    */
178   public function providerTestLink() {
179     $data = [];
180     $data[] = [
181       'some_entity_label',
182       'qwerqwer',
183       'qwerqwer',
184     ];
185     $data[] = [
186       'some_entity_label',
187       NULL,
188       'some_entity_label',
189     ];
190     $data[] = [
191       'some_entity_label',
192       '0',
193       '0',
194     ];
195     $data[] = [
196       'some_entity_label',
197       'qwerqwer',
198       'qwerqwer',
199       'edit-form',
200     ];
201     $data[] = [
202       'some_entity_label',
203       'qwerqwer',
204       'qwerqwer',
205       'edit-form',
206     ];
207     $data[] = [
208       'some_entity_label',
209       'qwerqwer',
210       'qwerqwer',
211       'edit-form',
212       ['foo' => 'qwer'],
213     ];
214     return $data;
215   }
216
217 }