function PathTestCase::testAdminAlias

Tests alias functionality through the admin interfaces.

File

modules/path/path.test, line 56

Class

PathTestCase
Provides a base class for testing the Path module.

Code

function testAdminAlias() {
  // Create test node.
  $node1 = $this->drupalCreateNode();
  // Create alias.
  $edit = array();
  $edit['source'] = 'node/' . $node1->nid;
  $edit['alias'] = $this->randomName(8);
  $this->drupalPost('admin/config/search/path/add', $edit, t('Save'));
  // Confirm that the alias works.
  $this->drupalGet($edit['alias']);
  $this->assertText($node1->title, 'Alias works.');
  $this->assertResponse(200);
  // Change alias to one containing "exotic" characters.
  $pid = $this->getPID($edit['alias']);
  $previous = $edit['alias'];
  $edit['alias'] = "- ._~!\$'\"()*@[]?&+%#,;=:" . "%23%25%26%2B%2F%3F" . "éøïвβ中國書۞";
  // Characters from various non-ASCII alphabets.
  $this->drupalPost('admin/config/search/path/edit/' . $pid, $edit, t('Save'));
  // Confirm that the alias works.
  $this->drupalGet($edit['alias']);
  $this->assertText($node1->title, 'Changed alias works.');
  $this->assertResponse(200);
  drupal_static_reset('drupal_lookup_path');
  // Confirm that previous alias no longer works.
  $this->drupalGet($previous);
  $this->assertNoText($node1->title, 'Previous alias no longer works.');
  $this->assertResponse(404);
  // Create second test node.
  $node2 = $this->drupalCreateNode();
  // Set alias to second test node.
  $edit['source'] = 'node/' . $node2->nid;
  // leave $edit['alias'] the same
  $this->drupalPost('admin/config/search/path/add', $edit, t('Save'));
  // Confirm no duplicate was created.
  $this->assertRaw(t('The alias %alias is already in use in this language.', array(
    '%alias' => $edit['alias'],
  )), 'Attempt to move alias was rejected.');
  // Delete alias.
  $this->drupalPost('admin/config/search/path/edit/' . $pid, array(), t('Delete'));
  $this->drupalPost(NULL, array(), t('Confirm'));
  // Confirm that the alias no longer works.
  $this->drupalGet($edit['alias']);
  $this->assertNoText($node1->title, 'Alias was successfully deleted.');
  $this->assertResponse(404);
  // Create third and fourth test node.
  $node3 = $this->drupalCreateNode();
  $node4 = $this->drupalCreateNode();
  // Give the node aliases a common first part.
  $name = $this->randomName(4);
  // Create aliases containing a slash.
  $edit = array();
  $edit['source'] = 'node/' . $node3->nid;
  $alias3 = $name . '/' . $this->randomName(5);
  $edit['alias'] = $alias3;
  $this->drupalPost('admin/config/search/path/add', $edit, t('Save'));
  $edit['source'] = 'node/' . $node4->nid;
  $alias4 = $name . '/' . $this->randomName(4);
  $edit['alias'] = $alias4;
  $this->drupalPost('admin/config/search/path/add', $edit, t('Save'));
  // Confirm that the aliases work.
  $this->drupalGet($alias3);
  $this->assertText($node3->title, 'Alias works.');
  $this->assertResponse(200);
  $this->drupalGet($alias4);
  $this->assertText($node4->title, 'Alias works.');
  $this->assertResponse(200);
  // Confirm that filters containing slashes work.
  $this->drupalGet('admin/config/search/path/list/' . $alias3);
  $this->assertFieldByName('filter', $alias3);
  $this->assertText($alias3, 'Searched-for alias with slash found.');
  $this->assertNoText($alias4, 'Different alias with slash not found.');
  $this->assertResponse(200);
  // Delete aliases.
  $pid = $this->getPID($alias3);
  $this->drupalPost('admin/config/search/path/edit/' . $pid, array(), t('Delete'));
  $this->drupalPost(NULL, array(), t('Confirm'));
  $pid = $this->getPID($alias4);
  $this->drupalPost('admin/config/search/path/edit/' . $pid, array(), t('Delete'));
  $this->drupalPost(NULL, array(), t('Confirm'));
  // Confirm that the aliases no longer work.
  $this->drupalGet($alias3);
  $this->assertNoText($node3->title, 'Alias was successfully deleted.');
  $this->assertResponse(404);
  $this->drupalGet($alias4);
  $this->assertNoText($node4->title, 'Alias was successfully deleted.');
  $this->assertResponse(404);
}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.