function PathTestCase::testAdminAlias

7.x path.test PathTestCase::testAdminAlias()

Tests alias functionality through the admin interfaces.

File

drupal-7.x/modules/path/path.test, line 56
Tests for the Path module.

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'] = "- ._~!$'\"()*@[]?&+%#,;=:" . // "Special" ASCII characters.
    "%23%25%26%2B%2F%3F" . // Characters that look like a percent-escaped string.
    "éøïвβ中國書۞"; // 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);
}