admin_menu.test in Administration menu 6
Same filename and directory in other branches
Administration menu functionality tests.
Note: When using $this->assertPattern(), be sure to use the 's' modifier for the PCRE pattern, since admin menu's output spans over multiple lines.
File
tests/admin_menu.testView source
<?php
/**
* @file
* Administration menu functionality tests.
*
* Note: When using $this->assertPattern(), be sure to use the 's' modifier for
* the PCRE pattern, since admin menu's output spans over multiple lines.
*/
/**
* Test menu links depending on user permissions.
*/
class AdminMenuPermissionsTestCase extends DrupalWebTestCase {
public static function getInfo() {
return array(
'name' => t('Menu link permissions'),
'description' => t('Verify that menu is displayed according to user permissions.'),
'group' => t('Administration menu'),
);
}
function setUp() {
parent::setUp('admin_menu');
admin_menu_exit();
}
/**
* Test that the links are added to the page (no JS testing).
*/
function testPermissions() {
// Anonymous users should not see the menu.
$this
->assertNoRaw('<div id="admin-menu"', t('Admin menu not displayed to anonymous.'));
// Create a new user who can access administration menu, but without the
// permission 'display drupal links'.
$admin_user = $this
->drupalCreateUser(array(
'administer site configuration',
'access administration pages',
'administer nodes',
'access administration menu',
));
$this
->drupalLogin($admin_user);
// Check that the user can see the admin links, but not the drupal links.
$this
->assertRaw('<div id="admin-menu"', t('Administration menu is displayed.'));
$this
->drupalGet('node');
$this
->assertPattern('@<div id="admin-menu".*admin/content/node@s', t('Administer content link found.'));
$this
->assertNoPattern('@<div id="admin-menu".*http://drupal.org@s', t('Drupal links not found.'));
$this
->assertNoPattern('@<div id="admin-menu".*admin/build/contact@s', t('Contact module link not found.'));
// Create a new user with the permission 'display drupal links'.
$admin_user2 = $this
->drupalCreateUser(array(
'administer site configuration',
'access administration pages',
'administer nodes',
'access administration menu',
'display drupal links',
));
$this
->drupalLogin($admin_user2);
$this
->drupalGet('node');
$this
->assertPattern('@<div id="admin-menu".*http://drupal.org@s', t('Drupal links found.'));
$this
->assertNoPattern('@<div id="admin-menu".*admin/build/contact@s', t('Contact module link not found.'));
}
}
/**
* Test menu links depending on installed modules.
*/
class AdminMenuModulesTestCase extends DrupalWebTestCase {
public static function getInfo() {
return array(
'name' => t('Module menu links'),
'description' => t('Verify that menu contains links according to enabled modules.'),
'group' => t('Administration menu'),
);
}
function setUp() {
parent::setUp('admin_menu', 'contact');
admin_menu_exit();
}
/**
* Test that the links are added to the page (no JS testing).
*/
function testContactModuleLinks() {
// Create a new user without 'administer site-wide contact form' permission.
$admin_user = $this
->drupalCreateUser(array(
'access administration pages',
'access administration menu',
));
$this
->drupalLogin($admin_user);
// Verify that proper links are displayed.
$this
->assertRaw('<div id="admin-menu"', t('Administration menu is displayed.'));
$this
->drupalGet('node');
$this
->assertNoPattern('@<div id="admin-menu".*admin/build/contact@s', t('Contact module link not found.'));
// Create a new user with 'administer site-wide contact form' permission.
$admin_user = $this
->drupalCreateUser(array(
'access administration pages',
'access administration menu',
'administer site-wide contact form',
));
$this
->drupalLogin($admin_user);
// Verify that proper links are displayed.
$this
->drupalGet('node');
$this
->assertPattern('@<div id="admin-menu".*admin/build/contact@s', t('Contact module link found.'));
}
}
/**
* Test contained links in administration menu.
*/
class AdminMenuLinksTestCase extends DrupalWebTestCase {
public static function getInfo() {
return array(
'name' => t('Menu links'),
'description' => t('Verify that menu contains proper links.'),
'group' => t('Administration menu'),
);
}
function setUp() {
parent::setUp('admin_menu');
admin_menu_exit();
// Create and log in a full-blown administrative user.
$permissions = module_invoke_all('perm');
$admin_user = $this
->drupalCreateUser($permissions);
$this->admin_user = $this
->drupalLogin($admin_user);
}
/**
* Test link contents.
*/
function testLinkContents() {
// Create a content-type with special characters.
$info = array(
'type' => 'special',
'name' => 'Cool & Special',
'module' => 'node',
'description' => '',
);
$info = (object) _node_type_set_defaults($info);
node_type_save($info);
$this
->drupalPost('admin/settings/performance', array(), t('Clear cached data'));
// Fetch a page.
$this
->drupalGet('node');
$this
->assertRaw('<div id="admin-menu"', t('Administration menu is displayed.'));
// Verify that proper links are displayed.
// We are explicitly NOT using t() here, since the purpose is to test our
// custom link titles and 't' option.
$links = array(
url('admin/content/node-type/page') => strtr('Edit !content-type', array(
'!content-type' => t('Page'),
)),
url('admin/content/node-type/special') => strtr('Edit !content-type', array(
'!content-type' => t('Cool & Special'),
)),
);
foreach ($links as $url => $title) {
$this
->assertFieldByXPath('//div[@id="admin-menu"]//a[@href="' . $url . '"]', $title, t('!link-title content-type link found.', array(
'!link-title' => $title,
)));
}
$links = array(
url('node/add/page') => t('Page'),
url('node/add/special') => t('Cool & Special'),
);
foreach ($links as $url => $title) {
$this
->assertFieldByXPath('//div[@id="admin-menu"]//a[@href="' . $url . '"]', $title, t('Create content » !link-title link found.', array(
'!link-title' => $title,
)));
}
}
}
Classes
Name | Description |
---|---|
AdminMenuLinksTestCase | Test contained links in administration menu. |
AdminMenuModulesTestCase | Test menu links depending on installed modules. |
AdminMenuPermissionsTestCase | Test menu links depending on user permissions. |