3 namespace Drupal\Tests\Core\Entity;
5 use Drupal\Core\DependencyInjection\ContainerBuilder;
6 use Drupal\Core\Entity\EntityTypeManagerInterface;
7 use Drupal\Core\Language\Language;
9 use Drupal\Tests\UnitTestCase;
12 * @coversDefaultClass \Drupal\Core\Entity\Entity
15 class EntityLinkTest extends UnitTestCase {
18 * The mocked entity type manager.
20 * @var \Drupal\Core\Entity\EntityTypeManagerInterface|\PHPUnit_Framework_MockObject_MockObject
22 protected $entityTypeManager;
25 * The tested link generator.
27 * @var \Drupal\Core\Utility\LinkGeneratorInterface|\PHPUnit_Framework_MockObject_MockObject
29 protected $linkGenerator;
32 * The mocked language manager.
34 * @var \Drupal\Core\Language\LanguageManagerInterface|\PHPUnit_Framework_MockObject_MockObject
36 protected $languageManager;
41 protected function setUp() {
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');
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);
56 * Tests for the Entity::link() method
60 * @dataProvider providerTestLink
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')
68 ->willReturn($language);
71 'canonical' => 'entity.test_entity_type.canonical',
72 'edit-form' => 'entity.test_entity_type.edit_form',
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>';
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())
87 ['langcode', 'langcode'],
90 $this->entityTypeManager
91 ->expects($this->any())
92 ->method('getDefinition')
93 ->with($entity_type_id)
94 ->will($this->returnValue($entity_type));
96 /** @var \Drupal\Core\Entity\Entity $entity */
97 $entity = $this->getMockForAbstractClass('Drupal\Core\Entity\Entity', [
98 ['id' => $entity_id, 'label' => $entity_label, 'langcode' => 'es'],
102 $expected_link = Link::createFromRoute(
105 [$entity_type_id => $entity_id],
106 ['entity_type' => $entity_type_id, 'entity' => $entity] + $link_options
107 )->setLinkGenerator($this->linkGenerator);
109 $this->linkGenerator->expects($this->once())
110 ->method('generateFromLink')
111 ->with($this->equalTo($expected_link))
112 ->willReturn($expected);
114 $this->assertSame($expected, $entity->link($link_text, $link_rel, $link_options));
118 * Tests for the Entity::toLink() method
122 * @dataProvider providerTestLink
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')
130 ->willReturn($language);
133 'canonical' => 'entity.test_entity_type.canonical',
134 'edit-form' => 'entity.test_entity_type.edit_form',
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>';
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())
149 ['langcode', 'langcode'],
152 $this->entityTypeManager
153 ->expects($this->any())
154 ->method('getDefinition')
155 ->with($entity_type_id)
156 ->will($this->returnValue($entity_type));
158 /** @var \Drupal\Core\Entity\Entity $entity */
159 $entity = $this->getMockForAbstractClass('Drupal\Core\Entity\Entity', [
160 ['id' => $entity_id, 'label' => $entity_label, 'langcode' => 'es'],
164 $expected_link = Link::createFromRoute(
167 [$entity_type_id => $entity_id],
168 ['entity_type' => $entity_type_id, 'entity' => $entity] + $link_options
171 $result_link = $entity->toLink($link_text, $link_rel, $link_options);
172 $this->assertEquals($expected_link, $result_link);
176 * Provides test data for testLink().
178 public function providerTestLink() {