t('Path alias functionality'), 'desc' => t('Add, edit, delete, and change alias and verify its consistency in the database.'), 'group' => t('Path Tests'), ); } /** * Create user, setup permissions, log user in, and create a node. */ function setUp() { parent::setUp(); $this->drupalModuleEnable('path'); // create and login user $web_user = $this->drupalCreateUserRolePerm(array('edit own page content', 'create page content', 'administer url aliases', 'create url aliases')); $this->drupalLoginUser($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, '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, 'Update alias'); // confirm that the alias works $this->drupalGet($edit['dst']); $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->assertTitle(new PatternExpectation('/Page not found/'), 'We get page not found error'); // 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, 'Create new alias'); // confirm that the alias didn't make a duplicate $this->assertWantedRaw(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(), '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, '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, '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->assertTitle(new PatternExpectation('/Page not found/'), 'We get page not found error'); // 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, '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' => ''), '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() { $this->drupalVariableSet('node_options_page', array('status', 'promote')); $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, '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; } }