3 namespace Drupal\Tests\Core\Entity;
5 use Drupal\Core\DependencyInjection\ContainerBuilder;
6 use Drupal\Core\Language\Language;
8 use Drupal\Tests\UnitTestCase;
11 * @coversDefaultClass \Drupal\Core\Entity\Entity
14 class EntityLinkTest extends UnitTestCase {
17 * The mocked entity manager.
19 * @var \Drupal\Core\Entity\EntityManagerInterface|\PHPUnit_Framework_MockObject_MockObject
21 protected $entityManager;
24 * The tested link generator.
26 * @var \Drupal\Core\Utility\LinkGeneratorInterface|\PHPUnit_Framework_MockObject_MockObject
28 protected $linkGenerator;
31 * The mocked language manager.
33 * @var \Drupal\Core\Language\LanguageManagerInterface|\PHPUnit_Framework_MockObject_MockObject
35 protected $languageManager;
40 protected function setUp() {
43 $this->entityManager = $this->getMock('Drupal\Core\Entity\EntityManagerInterface');
44 $this->linkGenerator = $this->getMock('Drupal\Core\Utility\LinkGeneratorInterface');
45 $this->languageManager = $this->getMock('Drupal\Core\Language\LanguageManagerInterface');
47 $container = new ContainerBuilder();
48 $container->set('entity.manager', $this->entityManager);
49 $container->set('link_generator', $this->linkGenerator);
50 $container->set('language_manager', $this->languageManager);
51 \Drupal::setContainer($container);
55 * Tests for the Entity::link() method
59 * @dataProvider providerTestLink
61 public function testLink($entity_label, $link_text, $expected_text, $link_rel = 'canonical', array $link_options = []) {
62 $language = new Language(['id' => 'es']);
63 $link_options += ['language' => $language];
64 $this->languageManager->expects($this->any())
65 ->method('getLanguage')
67 ->willReturn($language);
70 'canonical' => 'entity.test_entity_type.canonical',
71 'edit-form' => 'entity.test_entity_type.edit_form',
73 $route_name = $route_name_map[$link_rel];
74 $entity_id = 'test_entity_id';
75 $entity_type_id = 'test_entity_type';
76 $expected = '<a href="/test_entity_type/test_entity_id">' . $expected_text . '</a>';
78 $entity_type = $this->getMock('Drupal\Core\Entity\EntityTypeInterface');
79 $entity_type->expects($this->once())
80 ->method('getLinkTemplates')
81 ->willReturn($route_name_map);
82 $entity_type->expects($this->any())
86 ['langcode', 'langcode'],
90 ->expects($this->any())
91 ->method('getDefinition')
92 ->with($entity_type_id)
93 ->will($this->returnValue($entity_type));
95 /** @var \Drupal\Core\Entity\Entity $entity */
96 $entity = $this->getMockForAbstractClass('Drupal\Core\Entity\Entity', [
97 ['id' => $entity_id, 'label' => $entity_label, 'langcode' => 'es'],
101 $expected_link = Link::createFromRoute(
104 [$entity_type_id => $entity_id],
105 ['entity_type' => $entity_type_id, 'entity' => $entity] + $link_options
106 )->setLinkGenerator($this->linkGenerator);
108 $this->linkGenerator->expects($this->once())
109 ->method('generateFromLink')
110 ->with($this->equalTo($expected_link))
111 ->willReturn($expected);
113 $this->assertSame($expected, $entity->link($link_text, $link_rel, $link_options));
117 * Tests for the Entity::toLink() method
121 * @dataProvider providerTestLink
123 public function testToLink($entity_label, $link_text, $expected_text, $link_rel = 'canonical', array $link_options = []) {
124 $language = new Language(['id' => 'es']);
125 $link_options += ['language' => $language];
126 $this->languageManager->expects($this->any())
127 ->method('getLanguage')
129 ->willReturn($language);
132 'canonical' => 'entity.test_entity_type.canonical',
133 'edit-form' => 'entity.test_entity_type.edit_form',
135 $route_name = $route_name_map[$link_rel];
136 $entity_id = 'test_entity_id';
137 $entity_type_id = 'test_entity_type';
138 $expected = '<a href="/test_entity_type/test_entity_id">' . $expected_text . '</a>';
140 $entity_type = $this->getMock('Drupal\Core\Entity\EntityTypeInterface');
141 $entity_type->expects($this->once())
142 ->method('getLinkTemplates')
143 ->willReturn($route_name_map);
144 $entity_type->expects($this->any())
148 ['langcode', 'langcode'],
152 ->expects($this->any())
153 ->method('getDefinition')
154 ->with($entity_type_id)
155 ->will($this->returnValue($entity_type));
157 /** @var \Drupal\Core\Entity\Entity $entity */
158 $entity = $this->getMockForAbstractClass('Drupal\Core\Entity\Entity', [
159 ['id' => $entity_id, 'label' => $entity_label, 'langcode' => 'es'],
163 $expected_link = Link::createFromRoute(
166 [$entity_type_id => $entity_id],
167 ['entity_type' => $entity_type_id, 'entity' => $entity] + $link_options
170 $result_link = $entity->toLink($link_text, $link_rel, $link_options);
171 $this->assertEquals($expected_link, $result_link);
175 * Provides test data for testLink().
177 public function providerTestLink() {