drupal/modules/path/path.test

141 lines
4.5 KiB
Plaintext

<?php
// $Id$
class PathTestCase extends DrupalWebTestCase {
function getInfo() {
return array(
'name' => t('Path alias functionality'),
'description' => t('Add, edit, delete, and change alias and verify its consistency in the database.'),
'group' => t('Path'),
);
}
/**
* Create user, setup permissions, log user in, and create a node.
*/
function setUp() {
parent::setUp('path');
// create and login user
$web_user = $this->drupalCreateUser(array('edit own page content', 'create page content', 'administer url aliases', 'create url aliases'));
$this->drupalLogin($web_user);
}
/**
* Test alias functionality through the admin interfaces.
*/
function testAdminAlias() {
// create test node
$node1 = $this->createNode();
// Create alias.
$edit = array();
$edit['src'] = 'node/' . $node1->nid;
$edit['dst'] = $this->randomName(8);
$this->drupalPost('admin/build/path/add', $edit, t('Create new alias'));
// Confirm that the alias works.
$this->drupalGet($edit['dst']);
$this->assertText($node1->title, 'Alias works.');
// Change alias.
$pid = $this->getPID($edit['dst']);
$previous = $edit['dst'];
$edit['dst'] = $this->randomName(8);
$this->drupalPost('admin/build/path/edit/' . $pid, $edit, t('Update alias'));
// Confirm that the alias works.
$this->drupalGet($edit['dst']);
$this->assertText($node1->title, 'Changed alias works.');
// 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->createNode();
// Set alias to second test node.
$edit['src'] = 'node/' . $node2->nid;
// leave $edit['dst'] the same
$this->drupalPost('admin/build/path/add', $edit, t('Create new alias'));
// Confirm no duplicate was created.
$this->assertRaw(t('The alias %alias is already in use in this language.', array('%alias' => $edit['dst'])), 'Attempt to move alias was rejected.');
// Delete alias.
$this->drupalPost('admin/build/path/delete/' . $pid, array(), t('Confirm'));
// Confirm that the alias no longer works.
$this->drupalGet($edit['dst']);
$this->assertNoText($node1->title, 'Alias was successfully deleted.');
}
/**
* Test alias functionality through the node interfaces.
*/
function testNodeAlias() {
// Create test node.
$node1 = $this->createNode();
// Create alias.
$edit = array();
$edit['path'] = $this->randomName(8);
$this->drupalPost('node/' . $node1->nid . '/edit', $edit, t('Save'));
// Confirm that the alias works.
$this->drupalGet($edit['path']);
$this->assertText($node1->title, 'Alias works.');
// Change alias.
$previous = $edit['path'];
$edit['path'] = $this->randomName(8);
$this->drupalPost('node/' . $node1->nid . '/edit', $edit, t('Save'));
// Confirm that the alias works.
$this->drupalGet($edit['path']);
$this->assertText($node1->title, 'Changed alias works.');
// Make sure 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->createNode();
// Set alias to second test node.
// Leave $edit['path'] the same.
$this->drupalPost('node/' . $node2->nid . '/edit', $edit, t('Save'));
// Confirm that the alias didn't make a duplicate.
$this->assertText(t('The path is already in use.'), 'Attempt to moved alias was rejected.');
// Delete alias.
$this->drupalPost('node/' . $node1->nid . '/edit', array('path' => ''), t('Save'));
// Confirm that the alias no longer works.
$this->drupalGet($edit['path']);
$this->assertNoText($node1->title, 'Alias was successfully deleted.');
}
function getPID($dst) {
return db_result(db_query("SELECT pid FROM {url_alias} WHERE dst = '%s'", $dst));
}
function createNode() {
$edit = array();
$edit['title'] = '!SimpleTest test node! ' . $this->randomName(10);
$edit['body'] = '!SimpleTest test body! ' . $this->randomName(32) . ' ' . $this->randomName(32);
$this->drupalPost('node/add/page', $edit, t('Save'));
// Check to make sure the node was created.
$node = node_load(array('title' => $edit['title']));
$this->assertNotNull(($node === FALSE ? NULL : $node), 'Node found in database. %s');
return $node;
}
}