Chris@0
|
1 <?php
|
Chris@0
|
2
|
Chris@0
|
3 namespace Drupal\Tests\path\Kernel;
|
Chris@0
|
4
|
Chris@0
|
5 use Drupal\KernelTests\KernelTestBase;
|
Chris@0
|
6 use Drupal\language\Entity\ConfigurableLanguage;
|
Chris@0
|
7 use Drupal\node\Entity\Node;
|
Chris@0
|
8 use Drupal\node\Entity\NodeType;
|
Chris@0
|
9
|
Chris@0
|
10 /**
|
Chris@0
|
11 * Tests loading and storing data using PathItem.
|
Chris@0
|
12 *
|
Chris@0
|
13 * @group path
|
Chris@0
|
14 */
|
Chris@0
|
15 class PathItemTest extends KernelTestBase {
|
Chris@0
|
16
|
Chris@0
|
17 /**
|
Chris@0
|
18 * Modules to enable.
|
Chris@0
|
19 *
|
Chris@0
|
20 * @var array
|
Chris@0
|
21 */
|
Chris@0
|
22 public static $modules = ['path', 'node', 'user', 'system', 'language', 'content_translation'];
|
Chris@0
|
23
|
Chris@0
|
24 /**
|
Chris@0
|
25 * {@inheritdoc}
|
Chris@0
|
26 */
|
Chris@0
|
27 protected function setUp() {
|
Chris@0
|
28 parent::setUp();
|
Chris@0
|
29
|
Chris@0
|
30 $this->installEntitySchema('node');
|
Chris@0
|
31 $this->installEntitySchema('user');
|
Chris@0
|
32
|
Chris@0
|
33 $this->installSchema('node', ['node_access']);
|
Chris@0
|
34
|
Chris@0
|
35 $node_type = NodeType::create(['type' => 'foo']);
|
Chris@0
|
36 $node_type->save();
|
Chris@0
|
37
|
Chris@0
|
38 $this->installConfig(['language']);
|
Chris@0
|
39 ConfigurableLanguage::createFromLangcode('de')->save();
|
Chris@0
|
40 }
|
Chris@0
|
41
|
Chris@0
|
42 /**
|
Chris@0
|
43 * Test creating, loading, updating and deleting aliases through PathItem.
|
Chris@0
|
44 */
|
Chris@0
|
45 public function testPathItem() {
|
Chris@0
|
46
|
Chris@0
|
47 /** @var \Drupal\Core\Path\AliasStorageInterface $alias_storage */
|
Chris@0
|
48 $alias_storage = \Drupal::service('path.alias_storage');
|
Chris@0
|
49
|
Chris@0
|
50 $node_storage = \Drupal::entityTypeManager()->getStorage('node');
|
Chris@0
|
51
|
Chris@0
|
52 $node = Node::create([
|
Chris@0
|
53 'title' => 'Testing create()',
|
Chris@0
|
54 'type' => 'foo',
|
Chris@0
|
55 'path' => ['alias' => '/foo'],
|
Chris@0
|
56 ]);
|
Chris@0
|
57 $this->assertFalse($node->get('path')->isEmpty());
|
Chris@0
|
58 $this->assertEquals('/foo', $node->get('path')->alias);
|
Chris@0
|
59
|
Chris@0
|
60 $node->save();
|
Chris@0
|
61 $this->assertFalse($node->get('path')->isEmpty());
|
Chris@0
|
62 $this->assertEquals('/foo', $node->get('path')->alias);
|
Chris@0
|
63
|
Chris@0
|
64 $stored_alias = $alias_storage->lookupPathAlias('/' . $node->toUrl()->getInternalPath(), $node->language()->getId());
|
Chris@0
|
65 $this->assertEquals('/foo', $stored_alias);
|
Chris@0
|
66
|
Chris@0
|
67 $node_storage->resetCache();
|
Chris@0
|
68
|
Chris@0
|
69 /** @var \Drupal\node\NodeInterface $loaded_node */
|
Chris@0
|
70 $loaded_node = $node_storage->load($node->id());
|
Chris@0
|
71 $this->assertFalse($loaded_node->get('path')->isEmpty());
|
Chris@0
|
72 $this->assertEquals('/foo', $loaded_node->get('path')->alias);
|
Chris@0
|
73 $node_storage->resetCache();
|
Chris@0
|
74 $loaded_node = $node_storage->load($node->id());
|
Chris@0
|
75 $this->assertEquals('/foo', $loaded_node->get('path')[0]->get('alias')->getValue());
|
Chris@0
|
76
|
Chris@0
|
77 $node_storage->resetCache();
|
Chris@0
|
78 $loaded_node = $node_storage->load($node->id());
|
Chris@0
|
79 $values = $loaded_node->get('path')->getValue();
|
Chris@0
|
80 $this->assertEquals('/foo', $values[0]['alias']);
|
Chris@0
|
81
|
Chris@0
|
82 $node_storage->resetCache();
|
Chris@0
|
83 $loaded_node = $node_storage->load($node->id());
|
Chris@0
|
84 $this->assertEquals('/foo', $loaded_node->path->alias);
|
Chris@0
|
85
|
Chris@0
|
86 // Add a translation, verify it is being saved as expected.
|
Chris@0
|
87 $translation = $loaded_node->addTranslation('de', $loaded_node->toArray());
|
Chris@0
|
88 $translation->get('path')->alias = '/furchtbar';
|
Chris@0
|
89 $translation->save();
|
Chris@0
|
90
|
Chris@0
|
91 // Assert the alias on the English node, the German translation, and the
|
Chris@0
|
92 // stored aliases.
|
Chris@0
|
93 $node_storage->resetCache();
|
Chris@0
|
94 $loaded_node = $node_storage->load($node->id());
|
Chris@0
|
95 $this->assertEquals('/foo', $loaded_node->path->alias);
|
Chris@0
|
96 $translation = $loaded_node->getTranslation('de');
|
Chris@0
|
97 $this->assertEquals('/furchtbar', $translation->path->alias);
|
Chris@0
|
98
|
Chris@0
|
99 $stored_alias = $alias_storage->lookupPathAlias('/' . $node->toUrl()->getInternalPath(), $node->language()->getId());
|
Chris@0
|
100 $this->assertEquals('/foo', $stored_alias);
|
Chris@0
|
101 $stored_alias = $alias_storage->lookupPathAlias('/' . $node->toUrl()->getInternalPath(), $translation->language()->getId());
|
Chris@0
|
102 $this->assertEquals('/furchtbar', $stored_alias);
|
Chris@0
|
103
|
Chris@0
|
104 $loaded_node->get('path')->alias = '/bar';
|
Chris@0
|
105 $this->assertFalse($loaded_node->get('path')->isEmpty());
|
Chris@0
|
106 $this->assertEquals('/bar', $loaded_node->get('path')->alias);
|
Chris@0
|
107
|
Chris@0
|
108 $loaded_node->save();
|
Chris@0
|
109 $this->assertFalse($loaded_node->get('path')->isEmpty());
|
Chris@0
|
110 $this->assertEquals('/bar', $loaded_node->get('path')->alias);
|
Chris@0
|
111
|
Chris@0
|
112 $node_storage->resetCache();
|
Chris@0
|
113 $loaded_node = $node_storage->load($node->id());
|
Chris@0
|
114 $this->assertFalse($loaded_node->get('path')->isEmpty());
|
Chris@0
|
115 $this->assertEquals('/bar', $loaded_node->get('path')->alias);
|
Chris@0
|
116
|
Chris@0
|
117 $loaded_node->get('path')->alias = '/bar';
|
Chris@0
|
118 $this->assertFalse($loaded_node->get('path')->isEmpty());
|
Chris@0
|
119 $this->assertEquals('/bar', $loaded_node->get('path')->alias);
|
Chris@0
|
120
|
Chris@0
|
121 $loaded_node->save();
|
Chris@0
|
122 $this->assertFalse($loaded_node->get('path')->isEmpty());
|
Chris@0
|
123 $this->assertEquals('/bar', $loaded_node->get('path')->alias);
|
Chris@0
|
124
|
Chris@0
|
125 $stored_alias = $alias_storage->lookupPathAlias('/' . $node->toUrl()->getInternalPath(), $node->language()->getId());
|
Chris@0
|
126 $this->assertEquals('/bar', $stored_alias);
|
Chris@0
|
127
|
Chris@0
|
128 $old_alias = $alias_storage->lookupPathSource('/foo', $node->language()->getId());
|
Chris@0
|
129 $this->assertFalse($old_alias);
|
Chris@0
|
130
|
Chris@0
|
131 // Reload the node to make sure that it is possible to set a value
|
Chris@0
|
132 // immediately after loading.
|
Chris@0
|
133 $node_storage->resetCache();
|
Chris@0
|
134 $loaded_node = $node_storage->load($node->id());
|
Chris@0
|
135 $loaded_node->get('path')->alias = '/foobar';
|
Chris@0
|
136 $loaded_node->save();
|
Chris@0
|
137
|
Chris@0
|
138 $node_storage->resetCache();
|
Chris@0
|
139 $loaded_node = $node_storage->load($node->id());
|
Chris@0
|
140 $this->assertFalse($loaded_node->get('path')->isEmpty());
|
Chris@0
|
141 $this->assertEquals('/foobar', $loaded_node->get('path')->alias);
|
Chris@0
|
142 $stored_alias = $alias_storage->lookupPathAlias('/' . $node->toUrl()->getInternalPath(), $node->language()->getId());
|
Chris@0
|
143 $this->assertEquals('/foobar', $stored_alias);
|
Chris@0
|
144
|
Chris@0
|
145 $old_alias = $alias_storage->lookupPathSource('/bar', $node->language()->getId());
|
Chris@0
|
146 $this->assertFalse($old_alias);
|
Chris@0
|
147
|
Chris@0
|
148 $loaded_node->get('path')->alias = '';
|
Chris@0
|
149 $this->assertEquals('', $loaded_node->get('path')->alias);
|
Chris@0
|
150
|
Chris@0
|
151 $loaded_node->save();
|
Chris@0
|
152
|
Chris@0
|
153 $stored_alias = $alias_storage->lookupPathAlias('/' . $node->toUrl()->getInternalPath(), $node->language()->getId());
|
Chris@0
|
154 $this->assertFalse($stored_alias);
|
Chris@0
|
155
|
Chris@0
|
156 // Check that reading, updating and reading the computed alias again in the
|
Chris@0
|
157 // same request works without clearing any caches in between.
|
Chris@0
|
158 $loaded_node = $node_storage->load($node->id());
|
Chris@0
|
159 $loaded_node->get('path')->alias = '/foo';
|
Chris@0
|
160 $loaded_node->save();
|
Chris@0
|
161
|
Chris@0
|
162 $this->assertFalse($loaded_node->get('path')->isEmpty());
|
Chris@0
|
163 $this->assertEquals('/foo', $loaded_node->get('path')->alias);
|
Chris@0
|
164 $stored_alias = $alias_storage->lookupPathAlias('/' . $node->toUrl()->getInternalPath(), $node->language()->getId());
|
Chris@0
|
165 $this->assertEquals('/foo', $stored_alias);
|
Chris@0
|
166
|
Chris@0
|
167 $loaded_node->get('path')->alias = '/foobar';
|
Chris@0
|
168 $loaded_node->save();
|
Chris@0
|
169
|
Chris@0
|
170 $this->assertFalse($loaded_node->get('path')->isEmpty());
|
Chris@0
|
171 $this->assertEquals('/foobar', $loaded_node->get('path')->alias);
|
Chris@0
|
172 $stored_alias = $alias_storage->lookupPathAlias('/' . $node->toUrl()->getInternalPath(), $node->language()->getId());
|
Chris@0
|
173 $this->assertEquals('/foobar', $stored_alias);
|
Chris@12
|
174
|
Chris@12
|
175 // Check that \Drupal\Core\Field\FieldItemList::equals() for the path field
|
Chris@12
|
176 // type.
|
Chris@12
|
177 $node = Node::create([
|
Chris@12
|
178 'title' => $this->randomString(),
|
Chris@12
|
179 'type' => 'foo',
|
Chris@12
|
180 'path' => ['alias' => '/foo'],
|
Chris@12
|
181 ]);
|
Chris@12
|
182 $second_node = Node::create([
|
Chris@12
|
183 'title' => $this->randomString(),
|
Chris@12
|
184 'type' => 'foo',
|
Chris@12
|
185 'path' => ['alias' => '/foo'],
|
Chris@12
|
186 ]);
|
Chris@12
|
187 $this->assertTrue($node->get('path')->equals($second_node->get('path')));
|
Chris@12
|
188
|
Chris@12
|
189 // Change the alias for the second node to a different one and try again.
|
Chris@12
|
190 $second_node->get('path')->alias = '/foobar';
|
Chris@12
|
191 $this->assertFalse($node->get('path')->equals($second_node->get('path')));
|
Chris@14
|
192
|
Chris@14
|
193 // Test the generateSampleValue() method.
|
Chris@14
|
194 $node = Node::create([
|
Chris@14
|
195 'title' => $this->randomString(),
|
Chris@14
|
196 'type' => 'foo',
|
Chris@14
|
197 'path' => ['alias' => '/foo'],
|
Chris@14
|
198 ]);
|
Chris@14
|
199 $node->save();
|
Chris@14
|
200 $path_field = $node->get('path');
|
Chris@14
|
201 $path_field->generateSampleItems();
|
Chris@14
|
202 $node->save();
|
Chris@14
|
203 $this->assertStringStartsWith('/', $node->get('path')->alias);
|
Chris@0
|
204 }
|
Chris@0
|
205
|
Chris@0
|
206 }
|