You are here

function PathTestCase::testAdminAlias in Drupal 7

Tests alias functionality through the admin interfaces.

File

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'] = "- ._~!\$'\"()*@[]?&+%#,;=:" . "%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);
}