Chris@0
|
1 <?php
|
Chris@0
|
2
|
Chris@0
|
3 namespace Drupal\Tests\hal\Kernel;
|
Chris@0
|
4
|
Chris@0
|
5 use Drupal\Core\Url;
|
Chris@0
|
6 use Drupal\field\Entity\FieldConfig;
|
Chris@0
|
7 use Drupal\field\Entity\FieldStorageConfig;
|
Chris@0
|
8 use Drupal\KernelTests\KernelTestBase;
|
Chris@0
|
9 use Drupal\node\Entity\NodeType;
|
Chris@0
|
10
|
Chris@0
|
11 /**
|
Chris@0
|
12 * @coversDefaultClass \Drupal\hal\LinkManager\LinkManager
|
Chris@0
|
13 * @group hal
|
Chris@0
|
14 */
|
Chris@0
|
15 class HalLinkManagerTest extends KernelTestBase {
|
Chris@0
|
16
|
Chris@0
|
17 /**
|
Chris@0
|
18 * {@inheritdoc}
|
Chris@0
|
19 */
|
Chris@0
|
20 public static $modules = ['hal', 'hal_test', 'serialization', 'system', 'node', 'user', 'field'];
|
Chris@0
|
21
|
Chris@0
|
22 /**
|
Chris@0
|
23 * {@inheritdoc}
|
Chris@0
|
24 */
|
Chris@0
|
25 protected function setUp() {
|
Chris@0
|
26 parent::setUp();
|
Chris@0
|
27
|
Chris@0
|
28 $this->installEntitySchema('node');
|
Chris@0
|
29
|
Chris@0
|
30 NodeType::create([
|
Chris@0
|
31 'type' => 'page',
|
Chris@0
|
32 ])->save();
|
Chris@0
|
33 FieldStorageConfig::create([
|
Chris@0
|
34 'entity_type' => 'node',
|
Chris@0
|
35 'type' => 'entity_reference',
|
Chris@0
|
36 'field_name' => 'field_ref',
|
Chris@0
|
37 ])->save();
|
Chris@0
|
38 FieldConfig::create([
|
Chris@0
|
39 'entity_type' => 'node',
|
Chris@0
|
40 'bundle' => 'page',
|
Chris@0
|
41 'field_name' => 'field_ref',
|
Chris@0
|
42 ])->save();
|
Chris@0
|
43
|
Chris@0
|
44 \Drupal::service('router.builder')->rebuild();
|
Chris@0
|
45 }
|
Chris@0
|
46
|
Chris@0
|
47 /**
|
Chris@0
|
48 * @covers ::getTypeUri
|
Chris@0
|
49 * @dataProvider providerTestGetTypeUri
|
Chris@0
|
50 */
|
Chris@0
|
51 public function testGetTypeUri($link_domain, $entity_type, $bundle, array $context, $expected_return, array $expected_context) {
|
Chris@0
|
52 $hal_settings = \Drupal::configFactory()->getEditable('hal.settings');
|
Chris@0
|
53
|
Chris@0
|
54 if ($link_domain === NULL) {
|
Chris@0
|
55 $hal_settings->clear('link_domain');
|
Chris@0
|
56 }
|
Chris@0
|
57 else {
|
Chris@0
|
58 $hal_settings->set('link_domain', $link_domain)->save(TRUE);
|
Chris@0
|
59 }
|
Chris@0
|
60
|
Chris@0
|
61 /* @var \Drupal\rest\LinkManager\TypeLinkManagerInterface $type_manager */
|
Chris@0
|
62 $type_manager = \Drupal::service('hal.link_manager.type');
|
Chris@0
|
63
|
Chris@0
|
64 $link = $type_manager->getTypeUri($entity_type, $bundle, $context);
|
Chris@0
|
65 $this->assertSame($link, str_replace('BASE_URL/', Url::fromRoute('<front>', [], ['absolute' => TRUE])->toString(), $expected_return));
|
Chris@0
|
66 $this->assertEquals($context, $expected_context);
|
Chris@0
|
67 }
|
Chris@0
|
68
|
Chris@0
|
69 public function providerTestGetTypeUri() {
|
Chris@0
|
70 $base_test_case = [
|
Chris@0
|
71 'link_domain' => NULL,
|
Chris@0
|
72 'entity_type' => 'node',
|
Chris@0
|
73 'bundle' => 'page',
|
Chris@0
|
74 ];
|
Chris@0
|
75
|
Chris@0
|
76 return [
|
Chris@0
|
77 'site URL' => $base_test_case + [
|
Chris@0
|
78 'context' => [],
|
Chris@0
|
79 'link_domain' => NULL,
|
Chris@0
|
80 'expected return' => 'BASE_URL/rest/type/node/page',
|
Chris@0
|
81 'expected context' => [],
|
Chris@0
|
82 ],
|
Chris@0
|
83 // Test hook_hal_type_uri_alter().
|
Chris@0
|
84 'site URL, with optional context, to test hook_hal_type_uri_alter()' => $base_test_case + [
|
Chris@0
|
85 'context' => ['hal_test' => TRUE],
|
Chris@0
|
86 'expected return' => 'hal_test_type',
|
Chris@0
|
87 'expected context' => ['hal_test' => TRUE],
|
Chris@0
|
88 ],
|
Chris@0
|
89 // Test hook_rest_type_uri_alter() — for backwards compatibility.
|
Chris@0
|
90 'site URL, with optional context, to test hook_rest_type_uri_alter()' => $base_test_case + [
|
Chris@0
|
91 'context' => ['rest_test' => TRUE],
|
Chris@0
|
92 'expected return' => 'rest_test_type',
|
Chris@0
|
93 'expected context' => ['rest_test' => TRUE],
|
Chris@0
|
94 ],
|
Chris@0
|
95 'configured URL' => [
|
Chris@0
|
96 'link_domain' => 'http://llamas-rock.com/for-real/',
|
Chris@0
|
97 'entity_type' => 'node',
|
Chris@0
|
98 'bundle' => 'page',
|
Chris@0
|
99 'context' => [],
|
Chris@0
|
100 'expected return' => 'http://llamas-rock.com/for-real/rest/type/node/page',
|
Chris@0
|
101 'expected context' => [],
|
Chris@0
|
102 ],
|
Chris@0
|
103 ];
|
Chris@0
|
104 }
|
Chris@0
|
105
|
Chris@0
|
106 /**
|
Chris@0
|
107 * @covers ::getRelationUri
|
Chris@0
|
108 * @dataProvider providerTestGetRelationUri
|
Chris@0
|
109 */
|
Chris@0
|
110 public function testGetRelationUri($link_domain, $entity_type, $bundle, $field_name, array $context, $expected_return, array $expected_context) {
|
Chris@0
|
111 $hal_settings = \Drupal::configFactory()->getEditable('hal.settings');
|
Chris@0
|
112
|
Chris@0
|
113 if ($link_domain === NULL) {
|
Chris@0
|
114 $hal_settings->clear('link_domain');
|
Chris@0
|
115 }
|
Chris@0
|
116 else {
|
Chris@0
|
117 $hal_settings->set('link_domain', $link_domain)->save(TRUE);
|
Chris@0
|
118 }
|
Chris@0
|
119
|
Chris@0
|
120 /* @var \Drupal\rest\LinkManager\RelationLinkManagerInterface $relation_manager */
|
Chris@0
|
121 $relation_manager = \Drupal::service('hal.link_manager.relation');
|
Chris@0
|
122
|
Chris@0
|
123 $link = $relation_manager->getRelationUri($entity_type, $bundle, $field_name, $context);
|
Chris@0
|
124 $this->assertSame($link, str_replace('BASE_URL/', Url::fromRoute('<front>', [], ['absolute' => TRUE])->toString(), $expected_return));
|
Chris@0
|
125 $this->assertEquals($context, $expected_context);
|
Chris@0
|
126 }
|
Chris@0
|
127
|
Chris@0
|
128 public function providerTestGetRelationUri() {
|
Chris@0
|
129 $field_name = $this->randomMachineName();
|
Chris@0
|
130 $base_test_case = [
|
Chris@0
|
131 'link_domain' => NULL,
|
Chris@0
|
132 'entity_type' => 'node',
|
Chris@0
|
133 'bundle' => 'page',
|
Chris@0
|
134 'field_name' => $field_name,
|
Chris@0
|
135 ];
|
Chris@0
|
136
|
Chris@0
|
137 return [
|
Chris@0
|
138 'site URL' => $base_test_case + [
|
Chris@0
|
139 'context' => [],
|
Chris@0
|
140 'link_domain' => NULL,
|
Chris@0
|
141 'expected return' => 'BASE_URL/rest/relation/node/page/' . $field_name,
|
Chris@0
|
142 'expected context' => [],
|
Chris@0
|
143 ],
|
Chris@0
|
144 // Test hook_hal_relation_uri_alter().
|
Chris@0
|
145 'site URL, with optional context, to test hook_hal_relation_uri_alter()' => $base_test_case + [
|
Chris@0
|
146 'context' => ['hal_test' => TRUE],
|
Chris@0
|
147 'expected return' => 'hal_test_relation',
|
Chris@0
|
148 'expected context' => ['hal_test' => TRUE],
|
Chris@0
|
149 ],
|
Chris@0
|
150 // Test hook_rest_relation_uri_alter() — for backwards compatibility.
|
Chris@0
|
151 'site URL, with optional context, to test hook_rest_relation_uri_alter()' => $base_test_case + [
|
Chris@0
|
152 'context' => ['rest_test' => TRUE],
|
Chris@0
|
153 'expected return' => 'rest_test_relation',
|
Chris@0
|
154 'expected context' => ['rest_test' => TRUE],
|
Chris@0
|
155 ],
|
Chris@0
|
156 'configured URL' => [
|
Chris@0
|
157 'link_domain' => 'http://llamas-rock.com/for-real/',
|
Chris@0
|
158 'entity_type' => 'node',
|
Chris@0
|
159 'bundle' => 'page',
|
Chris@0
|
160 'field_name' => $field_name,
|
Chris@0
|
161 'context' => [],
|
Chris@0
|
162 'expected return' => 'http://llamas-rock.com/for-real/rest/relation/node/page/' . $field_name,
|
Chris@0
|
163 'expected context' => [],
|
Chris@0
|
164 ],
|
Chris@0
|
165 ];
|
Chris@0
|
166 }
|
Chris@0
|
167
|
Chris@0
|
168 /**
|
Chris@0
|
169 * @covers ::getRelationInternalIds
|
Chris@0
|
170 */
|
Chris@0
|
171 public function testGetRelationInternalIds() {
|
Chris@0
|
172 /* @var \Drupal\rest\LinkManager\RelationLinkManagerInterface $relation_manager */
|
Chris@0
|
173 $relation_manager = \Drupal::service('hal.link_manager.relation');
|
Chris@0
|
174 $link = $relation_manager->getRelationUri('node', 'page', 'field_ref');
|
Chris@0
|
175 $internal_ids = $relation_manager->getRelationInternalIds($link);
|
Chris@0
|
176
|
Chris@0
|
177 $this->assertEquals([
|
Chris@0
|
178 'entity_type_id' => 'node',
|
Chris@0
|
179 'entity_type' => \Drupal::entityTypeManager()->getDefinition('node'),
|
Chris@0
|
180 'bundle' => 'page',
|
Chris@0
|
181 'field_name' => 'field_ref'
|
Chris@0
|
182 ], $internal_ids);
|
Chris@0
|
183 }
|
Chris@0
|
184
|
Chris@0
|
185 /**
|
Chris@0
|
186 * @covers ::setLinkDomain
|
Chris@0
|
187 */
|
Chris@0
|
188 public function testHalLinkManagersSetLinkDomain() {
|
Chris@0
|
189 /* @var \Drupal\rest\LinkManager\LinkManager $link_manager */
|
Chris@0
|
190 $link_manager = \Drupal::service('hal.link_manager');
|
Chris@0
|
191 $link_manager->setLinkDomain('http://example.com/');
|
Chris@0
|
192 $link = $link_manager->getTypeUri('node', 'page');
|
Chris@0
|
193 $this->assertEqual($link, 'http://example.com/rest/type/node/page');
|
Chris@0
|
194 $link = $link_manager->getRelationUri('node', 'page', 'field_ref');
|
Chris@0
|
195 $this->assertEqual($link, 'http://example.com/rest/relation/node/page/field_ref');
|
Chris@0
|
196 }
|
Chris@0
|
197
|
Chris@0
|
198 }
|