danielebarchiesi@0
|
1 <?php
|
danielebarchiesi@0
|
2
|
danielebarchiesi@0
|
3 /**
|
danielebarchiesi@0
|
4 * @file
|
danielebarchiesi@0
|
5 * Tests for the Path module.
|
danielebarchiesi@0
|
6 */
|
danielebarchiesi@0
|
7
|
danielebarchiesi@0
|
8 /**
|
danielebarchiesi@0
|
9 * Provides a base class for testing the Path module.
|
danielebarchiesi@0
|
10 */
|
danielebarchiesi@0
|
11 class PathTestCase extends DrupalWebTestCase {
|
danielebarchiesi@0
|
12 public static function getInfo() {
|
danielebarchiesi@0
|
13 return array(
|
danielebarchiesi@0
|
14 'name' => 'Path alias functionality',
|
danielebarchiesi@0
|
15 'description' => 'Add, edit, delete, and change alias and verify its consistency in the database.',
|
danielebarchiesi@0
|
16 'group' => 'Path',
|
danielebarchiesi@0
|
17 );
|
danielebarchiesi@0
|
18 }
|
danielebarchiesi@0
|
19
|
danielebarchiesi@0
|
20 function setUp() {
|
danielebarchiesi@0
|
21 parent::setUp('path');
|
danielebarchiesi@0
|
22
|
danielebarchiesi@0
|
23 // Create test user and login.
|
danielebarchiesi@0
|
24 $web_user = $this->drupalCreateUser(array('create page content', 'edit own page content', 'administer url aliases', 'create url aliases'));
|
danielebarchiesi@0
|
25 $this->drupalLogin($web_user);
|
danielebarchiesi@0
|
26 }
|
danielebarchiesi@0
|
27
|
danielebarchiesi@0
|
28 /**
|
danielebarchiesi@0
|
29 * Tests the path cache.
|
danielebarchiesi@0
|
30 */
|
danielebarchiesi@0
|
31 function testPathCache() {
|
danielebarchiesi@0
|
32 // Create test node.
|
danielebarchiesi@0
|
33 $node1 = $this->drupalCreateNode();
|
danielebarchiesi@0
|
34
|
danielebarchiesi@0
|
35 // Create alias.
|
danielebarchiesi@0
|
36 $edit = array();
|
danielebarchiesi@0
|
37 $edit['source'] = 'node/' . $node1->nid;
|
danielebarchiesi@0
|
38 $edit['alias'] = $this->randomName(8);
|
danielebarchiesi@0
|
39 $this->drupalPost('admin/config/search/path/add', $edit, t('Save'));
|
danielebarchiesi@0
|
40
|
danielebarchiesi@0
|
41 // Visit the system path for the node and confirm a cache entry is
|
danielebarchiesi@0
|
42 // created.
|
danielebarchiesi@0
|
43 cache_clear_all('*', 'cache_path', TRUE);
|
danielebarchiesi@0
|
44 $this->drupalGet($edit['source']);
|
danielebarchiesi@0
|
45 $this->assertTrue(cache_get($edit['source'], 'cache_path'), 'Cache entry was created.');
|
danielebarchiesi@0
|
46
|
danielebarchiesi@0
|
47 // Visit the alias for the node and confirm a cache entry is created.
|
danielebarchiesi@0
|
48 cache_clear_all('*', 'cache_path', TRUE);
|
danielebarchiesi@0
|
49 $this->drupalGet($edit['alias']);
|
danielebarchiesi@0
|
50 $this->assertTrue(cache_get($edit['source'], 'cache_path'), 'Cache entry was created.');
|
danielebarchiesi@0
|
51 }
|
danielebarchiesi@0
|
52
|
danielebarchiesi@0
|
53 /**
|
danielebarchiesi@0
|
54 * Tests alias functionality through the admin interfaces.
|
danielebarchiesi@0
|
55 */
|
danielebarchiesi@0
|
56 function testAdminAlias() {
|
danielebarchiesi@0
|
57 // Create test node.
|
danielebarchiesi@0
|
58 $node1 = $this->drupalCreateNode();
|
danielebarchiesi@0
|
59
|
danielebarchiesi@0
|
60 // Create alias.
|
danielebarchiesi@0
|
61 $edit = array();
|
danielebarchiesi@0
|
62 $edit['source'] = 'node/' . $node1->nid;
|
danielebarchiesi@0
|
63 $edit['alias'] = $this->randomName(8);
|
danielebarchiesi@0
|
64 $this->drupalPost('admin/config/search/path/add', $edit, t('Save'));
|
danielebarchiesi@0
|
65
|
danielebarchiesi@0
|
66 // Confirm that the alias works.
|
danielebarchiesi@0
|
67 $this->drupalGet($edit['alias']);
|
danielebarchiesi@0
|
68 $this->assertText($node1->title, 'Alias works.');
|
danielebarchiesi@0
|
69 $this->assertResponse(200);
|
danielebarchiesi@0
|
70
|
danielebarchiesi@0
|
71 // Change alias to one containing "exotic" characters.
|
danielebarchiesi@0
|
72 $pid = $this->getPID($edit['alias']);
|
danielebarchiesi@0
|
73
|
danielebarchiesi@0
|
74 $previous = $edit['alias'];
|
danielebarchiesi@0
|
75 $edit['alias'] = "- ._~!$'\"()*@[]?&+%#,;=:" . // "Special" ASCII characters.
|
danielebarchiesi@0
|
76 "%23%25%26%2B%2F%3F" . // Characters that look like a percent-escaped string.
|
danielebarchiesi@0
|
77 "éøïвβ中國書۞"; // Characters from various non-ASCII alphabets.
|
danielebarchiesi@0
|
78 $this->drupalPost('admin/config/search/path/edit/' . $pid, $edit, t('Save'));
|
danielebarchiesi@0
|
79
|
danielebarchiesi@0
|
80 // Confirm that the alias works.
|
danielebarchiesi@0
|
81 $this->drupalGet($edit['alias']);
|
danielebarchiesi@0
|
82 $this->assertText($node1->title, 'Changed alias works.');
|
danielebarchiesi@0
|
83 $this->assertResponse(200);
|
danielebarchiesi@0
|
84
|
danielebarchiesi@0
|
85 drupal_static_reset('drupal_lookup_path');
|
danielebarchiesi@0
|
86 // Confirm that previous alias no longer works.
|
danielebarchiesi@0
|
87 $this->drupalGet($previous);
|
danielebarchiesi@0
|
88 $this->assertNoText($node1->title, 'Previous alias no longer works.');
|
danielebarchiesi@0
|
89 $this->assertResponse(404);
|
danielebarchiesi@0
|
90
|
danielebarchiesi@0
|
91 // Create second test node.
|
danielebarchiesi@0
|
92 $node2 = $this->drupalCreateNode();
|
danielebarchiesi@0
|
93
|
danielebarchiesi@0
|
94 // Set alias to second test node.
|
danielebarchiesi@0
|
95 $edit['source'] = 'node/' . $node2->nid;
|
danielebarchiesi@0
|
96 // leave $edit['alias'] the same
|
danielebarchiesi@0
|
97 $this->drupalPost('admin/config/search/path/add', $edit, t('Save'));
|
danielebarchiesi@0
|
98
|
danielebarchiesi@0
|
99 // Confirm no duplicate was created.
|
danielebarchiesi@0
|
100 $this->assertRaw(t('The alias %alias is already in use in this language.', array('%alias' => $edit['alias'])), 'Attempt to move alias was rejected.');
|
danielebarchiesi@0
|
101
|
danielebarchiesi@0
|
102 // Delete alias.
|
danielebarchiesi@0
|
103 $this->drupalPost('admin/config/search/path/edit/' . $pid, array(), t('Delete'));
|
danielebarchiesi@0
|
104 $this->drupalPost(NULL, array(), t('Confirm'));
|
danielebarchiesi@0
|
105
|
danielebarchiesi@0
|
106 // Confirm that the alias no longer works.
|
danielebarchiesi@0
|
107 $this->drupalGet($edit['alias']);
|
danielebarchiesi@0
|
108 $this->assertNoText($node1->title, 'Alias was successfully deleted.');
|
danielebarchiesi@0
|
109 $this->assertResponse(404);
|
danielebarchiesi@0
|
110 }
|
danielebarchiesi@0
|
111
|
danielebarchiesi@0
|
112 /**
|
danielebarchiesi@0
|
113 * Tests alias functionality through the node interfaces.
|
danielebarchiesi@0
|
114 */
|
danielebarchiesi@0
|
115 function testNodeAlias() {
|
danielebarchiesi@0
|
116 // Create test node.
|
danielebarchiesi@0
|
117 $node1 = $this->drupalCreateNode();
|
danielebarchiesi@0
|
118
|
danielebarchiesi@0
|
119 // Create alias.
|
danielebarchiesi@0
|
120 $edit = array();
|
danielebarchiesi@0
|
121 $edit['path[alias]'] = $this->randomName(8);
|
danielebarchiesi@0
|
122 $this->drupalPost('node/' . $node1->nid . '/edit', $edit, t('Save'));
|
danielebarchiesi@0
|
123
|
danielebarchiesi@0
|
124 // Confirm that the alias works.
|
danielebarchiesi@0
|
125 $this->drupalGet($edit['path[alias]']);
|
danielebarchiesi@0
|
126 $this->assertText($node1->title, 'Alias works.');
|
danielebarchiesi@0
|
127 $this->assertResponse(200);
|
danielebarchiesi@0
|
128
|
danielebarchiesi@0
|
129 // Change alias to one containing "exotic" characters.
|
danielebarchiesi@0
|
130 $previous = $edit['path[alias]'];
|
danielebarchiesi@0
|
131 $edit['path[alias]'] = "- ._~!$'\"()*@[]?&+%#,;=:" . // "Special" ASCII characters.
|
danielebarchiesi@0
|
132 "%23%25%26%2B%2F%3F" . // Characters that look like a percent-escaped string.
|
danielebarchiesi@0
|
133 "éøïвβ中國書۞"; // Characters from various non-ASCII alphabets.
|
danielebarchiesi@0
|
134 $this->drupalPost('node/' . $node1->nid . '/edit', $edit, t('Save'));
|
danielebarchiesi@0
|
135
|
danielebarchiesi@0
|
136 // Confirm that the alias works.
|
danielebarchiesi@0
|
137 $this->drupalGet($edit['path[alias]']);
|
danielebarchiesi@0
|
138 $this->assertText($node1->title, 'Changed alias works.');
|
danielebarchiesi@0
|
139 $this->assertResponse(200);
|
danielebarchiesi@0
|
140
|
danielebarchiesi@0
|
141 // Make sure that previous alias no longer works.
|
danielebarchiesi@0
|
142 $this->drupalGet($previous);
|
danielebarchiesi@0
|
143 $this->assertNoText($node1->title, 'Previous alias no longer works.');
|
danielebarchiesi@0
|
144 $this->assertResponse(404);
|
danielebarchiesi@0
|
145
|
danielebarchiesi@0
|
146 // Create second test node.
|
danielebarchiesi@0
|
147 $node2 = $this->drupalCreateNode();
|
danielebarchiesi@0
|
148
|
danielebarchiesi@0
|
149 // Set alias to second test node.
|
danielebarchiesi@0
|
150 // Leave $edit['path[alias]'] the same.
|
danielebarchiesi@0
|
151 $this->drupalPost('node/' . $node2->nid . '/edit', $edit, t('Save'));
|
danielebarchiesi@0
|
152
|
danielebarchiesi@0
|
153 // Confirm that the alias didn't make a duplicate.
|
danielebarchiesi@0
|
154 $this->assertText(t('The alias is already in use.'), 'Attempt to moved alias was rejected.');
|
danielebarchiesi@0
|
155
|
danielebarchiesi@0
|
156 // Delete alias.
|
danielebarchiesi@0
|
157 $this->drupalPost('node/' . $node1->nid . '/edit', array('path[alias]' => ''), t('Save'));
|
danielebarchiesi@0
|
158
|
danielebarchiesi@0
|
159 // Confirm that the alias no longer works.
|
danielebarchiesi@0
|
160 $this->drupalGet($edit['path[alias]']);
|
danielebarchiesi@0
|
161 $this->assertNoText($node1->title, 'Alias was successfully deleted.');
|
danielebarchiesi@0
|
162 $this->assertResponse(404);
|
danielebarchiesi@0
|
163 }
|
danielebarchiesi@0
|
164
|
danielebarchiesi@0
|
165 /**
|
danielebarchiesi@0
|
166 * Returns the path ID.
|
danielebarchiesi@0
|
167 *
|
danielebarchiesi@0
|
168 * @param $alias
|
danielebarchiesi@0
|
169 * A string containing an aliased path.
|
danielebarchiesi@0
|
170 *
|
danielebarchiesi@0
|
171 * @return int
|
danielebarchiesi@0
|
172 * Integer representing the path ID.
|
danielebarchiesi@0
|
173 */
|
danielebarchiesi@0
|
174 function getPID($alias) {
|
danielebarchiesi@0
|
175 return db_query("SELECT pid FROM {url_alias} WHERE alias = :alias", array(':alias' => $alias))->fetchField();
|
danielebarchiesi@0
|
176 }
|
danielebarchiesi@0
|
177
|
danielebarchiesi@0
|
178 /**
|
danielebarchiesi@0
|
179 * Tests that duplicate aliases fail validation.
|
danielebarchiesi@0
|
180 */
|
danielebarchiesi@0
|
181 function testDuplicateNodeAlias() {
|
danielebarchiesi@0
|
182 // Create one node with a random alias.
|
danielebarchiesi@0
|
183 $node_one = $this->drupalCreateNode();
|
danielebarchiesi@0
|
184 $edit = array();
|
danielebarchiesi@0
|
185 $edit['path[alias]'] = $this->randomName();
|
danielebarchiesi@0
|
186 $this->drupalPost('node/' . $node_one->nid . '/edit', $edit, t('Save'));
|
danielebarchiesi@0
|
187
|
danielebarchiesi@0
|
188 // Now create another node and try to set the same alias.
|
danielebarchiesi@0
|
189 $node_two = $this->drupalCreateNode();
|
danielebarchiesi@0
|
190 $this->drupalPost('node/' . $node_two->nid . '/edit', $edit, t('Save'));
|
danielebarchiesi@0
|
191 $this->assertText(t('The alias is already in use.'));
|
danielebarchiesi@0
|
192 $this->assertFieldByXPath("//input[@name='path[alias]' and contains(@class, 'error')]", $edit['path[alias]'], 'Textfield exists and has the error class.');
|
danielebarchiesi@0
|
193 }
|
danielebarchiesi@0
|
194 }
|
danielebarchiesi@0
|
195
|
danielebarchiesi@0
|
196 /**
|
danielebarchiesi@0
|
197 * Tests URL aliases for taxonomy terms.
|
danielebarchiesi@0
|
198 */
|
danielebarchiesi@0
|
199 class PathTaxonomyTermTestCase extends DrupalWebTestCase {
|
danielebarchiesi@0
|
200 public static function getInfo() {
|
danielebarchiesi@0
|
201 return array(
|
danielebarchiesi@0
|
202 'name' => 'Taxonomy term URL aliases',
|
danielebarchiesi@0
|
203 'description' => 'Tests URL aliases for taxonomy terms.',
|
danielebarchiesi@0
|
204 'group' => 'Path',
|
danielebarchiesi@0
|
205 );
|
danielebarchiesi@0
|
206 }
|
danielebarchiesi@0
|
207
|
danielebarchiesi@0
|
208 function setUp() {
|
danielebarchiesi@0
|
209 parent::setUp('path', 'taxonomy');
|
danielebarchiesi@0
|
210
|
danielebarchiesi@0
|
211 // Create and login user.
|
danielebarchiesi@0
|
212 $web_user = $this->drupalCreateUser(array('administer url aliases', 'administer taxonomy', 'access administration pages'));
|
danielebarchiesi@0
|
213 $this->drupalLogin($web_user);
|
danielebarchiesi@0
|
214 }
|
danielebarchiesi@0
|
215
|
danielebarchiesi@0
|
216 /**
|
danielebarchiesi@0
|
217 * Tests alias functionality through the admin interfaces.
|
danielebarchiesi@0
|
218 */
|
danielebarchiesi@0
|
219 function testTermAlias() {
|
danielebarchiesi@0
|
220 // Create a term in the default 'Tags' vocabulary with URL alias.
|
danielebarchiesi@0
|
221 $vocabulary = taxonomy_vocabulary_load(1);
|
danielebarchiesi@0
|
222 $description = $this->randomName();;
|
danielebarchiesi@0
|
223 $edit = array();
|
danielebarchiesi@0
|
224 $edit['name'] = $this->randomName();
|
danielebarchiesi@0
|
225 $edit['description[value]'] = $description;
|
danielebarchiesi@0
|
226 $edit['path[alias]'] = $this->randomName();
|
danielebarchiesi@0
|
227 $this->drupalPost('admin/structure/taxonomy/' . $vocabulary->machine_name . '/add', $edit, t('Save'));
|
danielebarchiesi@0
|
228
|
danielebarchiesi@0
|
229 // Confirm that the alias works.
|
danielebarchiesi@0
|
230 $this->drupalGet($edit['path[alias]']);
|
danielebarchiesi@0
|
231 $this->assertText($description, 'Term can be accessed on URL alias.');
|
danielebarchiesi@0
|
232
|
danielebarchiesi@0
|
233 // Change the term's URL alias.
|
danielebarchiesi@0
|
234 $tid = db_query("SELECT tid FROM {taxonomy_term_data} WHERE name = :name", array(':name' => $edit['name']))->fetchField();
|
danielebarchiesi@0
|
235 $edit2 = array();
|
danielebarchiesi@0
|
236 $edit2['path[alias]'] = $this->randomName();
|
danielebarchiesi@0
|
237 $this->drupalPost('taxonomy/term/' . $tid . '/edit', $edit2, t('Save'));
|
danielebarchiesi@0
|
238
|
danielebarchiesi@0
|
239 // Confirm that the changed alias works.
|
danielebarchiesi@0
|
240 $this->drupalGet($edit2['path[alias]']);
|
danielebarchiesi@0
|
241 $this->assertText($description, 'Term can be accessed on changed URL alias.');
|
danielebarchiesi@0
|
242
|
danielebarchiesi@0
|
243 // Confirm that the old alias no longer works.
|
danielebarchiesi@0
|
244 $this->drupalGet($edit['path[alias]']);
|
danielebarchiesi@0
|
245 $this->assertNoText($description, 'Old URL alias has been removed after altering.');
|
danielebarchiesi@0
|
246 $this->assertResponse(404, 'Old URL alias returns 404.');
|
danielebarchiesi@0
|
247
|
danielebarchiesi@0
|
248 // Remove the term's URL alias.
|
danielebarchiesi@0
|
249 $edit3 = array();
|
danielebarchiesi@0
|
250 $edit3['path[alias]'] = '';
|
danielebarchiesi@0
|
251 $this->drupalPost('taxonomy/term/' . $tid . '/edit', $edit3, t('Save'));
|
danielebarchiesi@0
|
252
|
danielebarchiesi@0
|
253 // Confirm that the alias no longer works.
|
danielebarchiesi@0
|
254 $this->drupalGet($edit2['path[alias]']);
|
danielebarchiesi@0
|
255 $this->assertNoText($description, 'Old URL alias has been removed after altering.');
|
danielebarchiesi@0
|
256 $this->assertResponse(404, 'Old URL alias returns 404.');
|
danielebarchiesi@0
|
257 }
|
danielebarchiesi@0
|
258 }
|
danielebarchiesi@0
|
259
|
danielebarchiesi@0
|
260 /**
|
danielebarchiesi@0
|
261 * Tests URL aliases for translated nodes.
|
danielebarchiesi@0
|
262 */
|
danielebarchiesi@0
|
263 class PathLanguageTestCase extends DrupalWebTestCase {
|
danielebarchiesi@0
|
264 public static function getInfo() {
|
danielebarchiesi@0
|
265 return array(
|
danielebarchiesi@0
|
266 'name' => 'Path aliases with translated nodes',
|
danielebarchiesi@0
|
267 'description' => 'Confirm that paths work with translated nodes',
|
danielebarchiesi@0
|
268 'group' => 'Path',
|
danielebarchiesi@0
|
269 );
|
danielebarchiesi@0
|
270 }
|
danielebarchiesi@0
|
271
|
danielebarchiesi@0
|
272 function setUp() {
|
danielebarchiesi@0
|
273 parent::setUp('path', 'locale', 'translation');
|
danielebarchiesi@0
|
274
|
danielebarchiesi@0
|
275 // Create and login user.
|
danielebarchiesi@0
|
276 $this->web_user = $this->drupalCreateUser(array('edit any page content', 'create page content', 'administer url aliases', 'create url aliases', 'administer languages', 'translate content', 'access administration pages'));
|
danielebarchiesi@0
|
277 $this->drupalLogin($this->web_user);
|
danielebarchiesi@0
|
278
|
danielebarchiesi@0
|
279 // Enable French language.
|
danielebarchiesi@0
|
280 $edit = array();
|
danielebarchiesi@0
|
281 $edit['langcode'] = 'fr';
|
danielebarchiesi@0
|
282
|
danielebarchiesi@0
|
283 $this->drupalPost('admin/config/regional/language/add', $edit, t('Add language'));
|
danielebarchiesi@0
|
284
|
danielebarchiesi@0
|
285 // Enable URL language detection and selection.
|
danielebarchiesi@0
|
286 $edit = array('language[enabled][locale-url]' => 1);
|
danielebarchiesi@0
|
287 $this->drupalPost('admin/config/regional/language/configure', $edit, t('Save settings'));
|
danielebarchiesi@0
|
288 }
|
danielebarchiesi@0
|
289
|
danielebarchiesi@0
|
290 /**
|
danielebarchiesi@0
|
291 * Test alias functionality through the admin interfaces.
|
danielebarchiesi@0
|
292 */
|
danielebarchiesi@0
|
293 function testAliasTranslation() {
|
danielebarchiesi@0
|
294 // Set 'page' content type to enable translation.
|
danielebarchiesi@0
|
295 variable_set('language_content_type_page', 2);
|
danielebarchiesi@0
|
296
|
danielebarchiesi@0
|
297 $english_node = $this->drupalCreateNode(array('type' => 'page'));
|
danielebarchiesi@0
|
298 $english_alias = $this->randomName();
|
danielebarchiesi@0
|
299
|
danielebarchiesi@0
|
300 // Edit the node to set language and path.
|
danielebarchiesi@0
|
301 $edit = array();
|
danielebarchiesi@0
|
302 $edit['language'] = 'en';
|
danielebarchiesi@0
|
303 $edit['path[alias]'] = $english_alias;
|
danielebarchiesi@0
|
304 $this->drupalPost('node/' . $english_node->nid . '/edit', $edit, t('Save'));
|
danielebarchiesi@0
|
305
|
danielebarchiesi@0
|
306 // Confirm that the alias works.
|
danielebarchiesi@0
|
307 $this->drupalGet($english_alias);
|
danielebarchiesi@0
|
308 $this->assertText($english_node->title, 'Alias works.');
|
danielebarchiesi@0
|
309
|
danielebarchiesi@0
|
310 // Translate the node into French.
|
danielebarchiesi@0
|
311 $this->drupalGet('node/' . $english_node->nid . '/translate');
|
danielebarchiesi@0
|
312 $this->clickLink(t('add translation'));
|
danielebarchiesi@0
|
313 $edit = array();
|
danielebarchiesi@0
|
314 $langcode = LANGUAGE_NONE;
|
danielebarchiesi@0
|
315 $edit["title"] = $this->randomName();
|
danielebarchiesi@0
|
316 $edit["body[$langcode][0][value]"] = $this->randomName();
|
danielebarchiesi@0
|
317 $french_alias = $this->randomName();
|
danielebarchiesi@0
|
318 $edit['path[alias]'] = $french_alias;
|
danielebarchiesi@0
|
319 $this->drupalPost(NULL, $edit, t('Save'));
|
danielebarchiesi@0
|
320
|
danielebarchiesi@0
|
321 // Clear the path lookup cache.
|
danielebarchiesi@0
|
322 drupal_lookup_path('wipe');
|
danielebarchiesi@0
|
323
|
danielebarchiesi@0
|
324 // Ensure the node was created.
|
danielebarchiesi@0
|
325 $french_node = $this->drupalGetNodeByTitle($edit["title"]);
|
danielebarchiesi@0
|
326 $this->assertTrue(($french_node), 'Node found in database.');
|
danielebarchiesi@0
|
327
|
danielebarchiesi@0
|
328 // Confirm that the alias works.
|
danielebarchiesi@0
|
329 $this->drupalGet('fr/' . $edit['path[alias]']);
|
danielebarchiesi@0
|
330 $this->assertText($french_node->title, 'Alias for French translation works.');
|
danielebarchiesi@0
|
331
|
danielebarchiesi@0
|
332 // Confirm that the alias is returned by url().
|
danielebarchiesi@0
|
333 drupal_static_reset('language_list');
|
danielebarchiesi@0
|
334 drupal_static_reset('locale_url_outbound_alter');
|
danielebarchiesi@0
|
335 $languages = language_list();
|
danielebarchiesi@0
|
336 $url = url('node/' . $french_node->nid, array('language' => $languages[$french_node->language]));
|
danielebarchiesi@0
|
337 $this->assertTrue(strpos($url, $edit['path[alias]']), 'URL contains the path alias.');
|
danielebarchiesi@0
|
338
|
danielebarchiesi@0
|
339 // Confirm that the alias works even when changing language negotiation
|
danielebarchiesi@0
|
340 // options. Enable User language detection and selection over URL one.
|
danielebarchiesi@0
|
341 $edit = array(
|
danielebarchiesi@0
|
342 'language[enabled][locale-user]' => 1,
|
danielebarchiesi@0
|
343 'language[weight][locale-user]' => -9,
|
danielebarchiesi@0
|
344 'language[enabled][locale-url]' => 1,
|
danielebarchiesi@0
|
345 'language[weight][locale-url]' => -8,
|
danielebarchiesi@0
|
346 );
|
danielebarchiesi@0
|
347 $this->drupalPost('admin/config/regional/language/configure', $edit, t('Save settings'));
|
danielebarchiesi@0
|
348
|
danielebarchiesi@0
|
349 // Change user language preference.
|
danielebarchiesi@0
|
350 $edit = array('language' => 'fr');
|
danielebarchiesi@0
|
351 $this->drupalPost("user/{$this->web_user->uid}/edit", $edit, t('Save'));
|
danielebarchiesi@0
|
352
|
danielebarchiesi@0
|
353 // Check that the English alias works. In this situation French is the
|
danielebarchiesi@0
|
354 // current UI and content language, while URL language is English (since we
|
danielebarchiesi@0
|
355 // do not have a path prefix we fall back to the site's default language).
|
danielebarchiesi@0
|
356 // We need to ensure that the user language preference is not taken into
|
danielebarchiesi@0
|
357 // account while determining the path alias language, because if this
|
danielebarchiesi@0
|
358 // happens we have no way to check that the path alias is valid: there is no
|
danielebarchiesi@0
|
359 // path alias for French matching the english alias. So drupal_lookup_path()
|
danielebarchiesi@0
|
360 // needs to use the URL language to check whether the alias is valid.
|
danielebarchiesi@0
|
361 $this->drupalGet($english_alias);
|
danielebarchiesi@0
|
362 $this->assertText($english_node->title, 'Alias for English translation works.');
|
danielebarchiesi@0
|
363
|
danielebarchiesi@0
|
364 // Check that the French alias works.
|
danielebarchiesi@0
|
365 $this->drupalGet("fr/$french_alias");
|
danielebarchiesi@0
|
366 $this->assertText($french_node->title, 'Alias for French translation works.');
|
danielebarchiesi@0
|
367
|
danielebarchiesi@0
|
368 // Disable URL language negotiation.
|
danielebarchiesi@0
|
369 $edit = array('language[enabled][locale-url]' => FALSE);
|
danielebarchiesi@0
|
370 $this->drupalPost('admin/config/regional/language/configure', $edit, t('Save settings'));
|
danielebarchiesi@0
|
371
|
danielebarchiesi@0
|
372 // Check that the English alias still works.
|
danielebarchiesi@0
|
373 $this->drupalGet($english_alias);
|
danielebarchiesi@0
|
374 $this->assertText($english_node->title, 'Alias for English translation works.');
|
danielebarchiesi@0
|
375
|
danielebarchiesi@0
|
376 // Check that the French alias is not available. We check the unprefixed
|
danielebarchiesi@0
|
377 // alias because we disabled URL language negotiation above. In this
|
danielebarchiesi@0
|
378 // situation only aliases in the default language and language neutral ones
|
danielebarchiesi@0
|
379 // should keep working.
|
danielebarchiesi@0
|
380 $this->drupalGet($french_alias);
|
danielebarchiesi@0
|
381 $this->assertResponse(404, 'Alias for French translation is unavailable when URL language negotiation is disabled.');
|
danielebarchiesi@0
|
382
|
danielebarchiesi@0
|
383 // drupal_lookup_path() has an internal static cache. Check to see that
|
danielebarchiesi@0
|
384 // it has the appropriate contents at this point.
|
danielebarchiesi@0
|
385 drupal_lookup_path('wipe');
|
danielebarchiesi@0
|
386 $french_node_path = drupal_lookup_path('source', $french_alias, $french_node->language);
|
danielebarchiesi@0
|
387 $this->assertEqual($french_node_path, 'node/' . $french_node->nid, 'Normal path works.');
|
danielebarchiesi@0
|
388 // Second call should return the same path.
|
danielebarchiesi@0
|
389 $french_node_path = drupal_lookup_path('source', $french_alias, $french_node->language);
|
danielebarchiesi@0
|
390 $this->assertEqual($french_node_path, 'node/' . $french_node->nid, 'Normal path is the same.');
|
danielebarchiesi@0
|
391
|
danielebarchiesi@0
|
392 // Confirm that the alias works.
|
danielebarchiesi@0
|
393 $french_node_alias = drupal_lookup_path('alias', 'node/' . $french_node->nid, $french_node->language);
|
danielebarchiesi@0
|
394 $this->assertEqual($french_node_alias, $french_alias, 'Alias works.');
|
danielebarchiesi@0
|
395 // Second call should return the same alias.
|
danielebarchiesi@0
|
396 $french_node_alias = drupal_lookup_path('alias', 'node/' . $french_node->nid, $french_node->language);
|
danielebarchiesi@0
|
397 $this->assertEqual($french_node_alias, $french_alias, 'Alias is the same.');
|
danielebarchiesi@0
|
398 }
|
danielebarchiesi@0
|
399 }
|
danielebarchiesi@0
|
400
|
danielebarchiesi@0
|
401 /**
|
danielebarchiesi@0
|
402 * Tests the user interface for creating path aliases, with languages.
|
danielebarchiesi@0
|
403 */
|
danielebarchiesi@0
|
404 class PathLanguageUITestCase extends DrupalWebTestCase {
|
danielebarchiesi@0
|
405 public static function getInfo() {
|
danielebarchiesi@0
|
406 return array(
|
danielebarchiesi@0
|
407 'name' => 'Path aliases with languages',
|
danielebarchiesi@0
|
408 'description' => 'Confirm that the Path module user interface works with languages.',
|
danielebarchiesi@0
|
409 'group' => 'Path',
|
danielebarchiesi@0
|
410 );
|
danielebarchiesi@0
|
411 }
|
danielebarchiesi@0
|
412
|
danielebarchiesi@0
|
413 function setUp() {
|
danielebarchiesi@0
|
414 parent::setUp('path', 'locale');
|
danielebarchiesi@0
|
415
|
danielebarchiesi@0
|
416 // Create and login user.
|
danielebarchiesi@0
|
417 $web_user = $this->drupalCreateUser(array('edit any page content', 'create page content', 'administer url aliases', 'create url aliases', 'administer languages', 'access administration pages'));
|
danielebarchiesi@0
|
418 $this->drupalLogin($web_user);
|
danielebarchiesi@0
|
419
|
danielebarchiesi@0
|
420 // Enable French language.
|
danielebarchiesi@0
|
421 $edit = array();
|
danielebarchiesi@0
|
422 $edit['langcode'] = 'fr';
|
danielebarchiesi@0
|
423
|
danielebarchiesi@0
|
424 $this->drupalPost('admin/config/regional/language/add', $edit, t('Add language'));
|
danielebarchiesi@0
|
425
|
danielebarchiesi@0
|
426 // Enable URL language detection and selection.
|
danielebarchiesi@0
|
427 $edit = array('language[enabled][locale-url]' => 1);
|
danielebarchiesi@0
|
428 $this->drupalPost('admin/config/regional/language/configure', $edit, t('Save settings'));
|
danielebarchiesi@0
|
429 }
|
danielebarchiesi@0
|
430
|
danielebarchiesi@0
|
431 /**
|
danielebarchiesi@0
|
432 * Tests that a language-neutral URL alias works.
|
danielebarchiesi@0
|
433 */
|
danielebarchiesi@0
|
434 function testLanguageNeutralURLs() {
|
danielebarchiesi@0
|
435 $name = $this->randomName(8);
|
danielebarchiesi@0
|
436 $edit = array();
|
danielebarchiesi@0
|
437 $edit['source'] = 'admin/config/search/path';
|
danielebarchiesi@0
|
438 $edit['alias'] = $name;
|
danielebarchiesi@0
|
439 $this->drupalPost('admin/config/search/path/add', $edit, t('Save'));
|
danielebarchiesi@0
|
440
|
danielebarchiesi@0
|
441 $this->drupalGet($name);
|
danielebarchiesi@0
|
442 $this->assertText(t('Filter aliases'), 'Language-neutral URL alias works');
|
danielebarchiesi@0
|
443 }
|
danielebarchiesi@0
|
444
|
danielebarchiesi@0
|
445 /**
|
danielebarchiesi@0
|
446 * Tests that a default language URL alias works.
|
danielebarchiesi@0
|
447 */
|
danielebarchiesi@0
|
448 function testDefaultLanguageURLs() {
|
danielebarchiesi@0
|
449 $name = $this->randomName(8);
|
danielebarchiesi@0
|
450 $edit = array();
|
danielebarchiesi@0
|
451 $edit['source'] = 'admin/config/search/path';
|
danielebarchiesi@0
|
452 $edit['alias'] = $name;
|
danielebarchiesi@0
|
453 $edit['language'] = 'en';
|
danielebarchiesi@0
|
454 $this->drupalPost('admin/config/search/path/add', $edit, t('Save'));
|
danielebarchiesi@0
|
455
|
danielebarchiesi@0
|
456 $this->drupalGet($name);
|
danielebarchiesi@0
|
457 $this->assertText(t('Filter aliases'), 'English URL alias works');
|
danielebarchiesi@0
|
458 }
|
danielebarchiesi@0
|
459
|
danielebarchiesi@0
|
460 /**
|
danielebarchiesi@0
|
461 * Tests that a non-default language URL alias works.
|
danielebarchiesi@0
|
462 */
|
danielebarchiesi@0
|
463 function testNonDefaultURLs() {
|
danielebarchiesi@0
|
464 $name = $this->randomName(8);
|
danielebarchiesi@0
|
465 $edit = array();
|
danielebarchiesi@0
|
466 $edit['source'] = 'admin/config/search/path';
|
danielebarchiesi@0
|
467 $edit['alias'] = $name;
|
danielebarchiesi@0
|
468 $edit['language'] = 'fr';
|
danielebarchiesi@0
|
469 $this->drupalPost('admin/config/search/path/add', $edit, t('Save'));
|
danielebarchiesi@0
|
470
|
danielebarchiesi@0
|
471 $this->drupalGet('fr/' . $name);
|
danielebarchiesi@0
|
472 $this->assertText(t('Filter aliases'), 'Foreign URL alias works');
|
danielebarchiesi@0
|
473 }
|
danielebarchiesi@0
|
474
|
danielebarchiesi@0
|
475 }
|
danielebarchiesi@0
|
476
|
danielebarchiesi@0
|
477 /**
|
danielebarchiesi@0
|
478 * Tests that paths are not prefixed on a monolingual site.
|
danielebarchiesi@0
|
479 */
|
danielebarchiesi@0
|
480 class PathMonolingualTestCase extends DrupalWebTestCase {
|
danielebarchiesi@0
|
481 public static function getInfo() {
|
danielebarchiesi@0
|
482 return array(
|
danielebarchiesi@0
|
483 'name' => 'Paths on non-English monolingual sites',
|
danielebarchiesi@0
|
484 'description' => 'Confirm that paths are not changed on monolingual non-English sites',
|
danielebarchiesi@0
|
485 'group' => 'Path',
|
danielebarchiesi@0
|
486 );
|
danielebarchiesi@0
|
487 }
|
danielebarchiesi@0
|
488
|
danielebarchiesi@0
|
489 function setUp() {
|
danielebarchiesi@0
|
490 global $language;
|
danielebarchiesi@0
|
491 parent::setUp('path', 'locale', 'translation');
|
danielebarchiesi@0
|
492
|
danielebarchiesi@0
|
493 // Create and login user.
|
danielebarchiesi@0
|
494 $web_user = $this->drupalCreateUser(array('administer languages', 'access administration pages'));
|
danielebarchiesi@0
|
495 $this->drupalLogin($web_user);
|
danielebarchiesi@0
|
496
|
danielebarchiesi@0
|
497 // Enable French language.
|
danielebarchiesi@0
|
498 $edit = array();
|
danielebarchiesi@0
|
499 $edit['langcode'] = 'fr';
|
danielebarchiesi@0
|
500 $this->drupalPost('admin/config/regional/language/add', $edit, t('Add language'));
|
danielebarchiesi@0
|
501
|
danielebarchiesi@0
|
502 // Make French the default language.
|
danielebarchiesi@0
|
503 $edit = array('site_default' => 'fr');
|
danielebarchiesi@0
|
504 $this->drupalPost('admin/config/regional/language', $edit, t('Save configuration'));
|
danielebarchiesi@0
|
505
|
danielebarchiesi@0
|
506 // Disable English.
|
danielebarchiesi@0
|
507 $edit = array('enabled[en]' => FALSE);
|
danielebarchiesi@0
|
508 $this->drupalPost('admin/config/regional/language', $edit, t('Save configuration'));
|
danielebarchiesi@0
|
509
|
danielebarchiesi@0
|
510 // Verify that French is the only language.
|
danielebarchiesi@0
|
511 $this->assertFalse(drupal_multilingual(), 'Site is mono-lingual');
|
danielebarchiesi@0
|
512 $this->assertEqual(language_default('language'), 'fr', 'French is the default language');
|
danielebarchiesi@0
|
513
|
danielebarchiesi@0
|
514 // Set language detection to URL.
|
danielebarchiesi@0
|
515 $edit = array('language[enabled][locale-url]' => TRUE);
|
danielebarchiesi@0
|
516 $this->drupalPost('admin/config/regional/language/configure', $edit, t('Save settings'));
|
danielebarchiesi@0
|
517
|
danielebarchiesi@0
|
518 // Force languages to be initialized.
|
danielebarchiesi@0
|
519 drupal_language_initialize();
|
danielebarchiesi@0
|
520 }
|
danielebarchiesi@0
|
521
|
danielebarchiesi@0
|
522 /**
|
danielebarchiesi@0
|
523 * Verifies that links do not have language prefixes in them.
|
danielebarchiesi@0
|
524 */
|
danielebarchiesi@0
|
525 function testPageLinks() {
|
danielebarchiesi@0
|
526 // Navigate to 'admin/config' path.
|
danielebarchiesi@0
|
527 $this->drupalGet('admin/config');
|
danielebarchiesi@0
|
528
|
danielebarchiesi@0
|
529 // Verify that links in this page do not have a 'fr/' prefix.
|
danielebarchiesi@0
|
530 $this->assertNoLinkByHref('/fr/', 'Links do not contain language prefix');
|
danielebarchiesi@0
|
531
|
danielebarchiesi@0
|
532 // Verify that links in this page can be followed and work.
|
danielebarchiesi@0
|
533 $this->clickLink(t('Languages'));
|
danielebarchiesi@0
|
534 $this->assertResponse(200, 'Clicked link results in a valid page');
|
danielebarchiesi@0
|
535 $this->assertText(t('Add language'), 'Page contains the add language text');
|
danielebarchiesi@0
|
536 }
|
danielebarchiesi@0
|
537 }
|