annotate modules/path/path.test @ 13:134d4b2e75f6

updated quicktabs and google analytics modules
author danieleb <danielebarchiesi@me.com>
date Tue, 29 Oct 2013 13:48:59 +0000
parents ff03f76ab3fe
children
rev   line source
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 }