diff options
author | Dries Buytaert <dries@buytaert.net> | 2010-03-06 06:33:14 +0000 |
---|---|---|
committer | Dries Buytaert <dries@buytaert.net> | 2010-03-06 06:33:14 +0000 |
commit | fe04b8f5a1c5e13b1f2f5e0b2ac8bb7f419ec311 (patch) | |
tree | cc3ce1d9b58d8a692dc6c4423317133bccea2490 | |
parent | e1ce11dad0bb6377ffddaa5fb0b7174e406ba20c (diff) | |
download | brdo-fe04b8f5a1c5e13b1f2f5e0b2ac8bb7f419ec311.tar.gz brdo-fe04b8f5a1c5e13b1f2f5e0b2ac8bb7f419ec311.tar.bz2 |
- Patch #680850 by bleen18, jhodgdon, David_Rothstein: tests for Shortcut module.
-rw-r--r-- | modules/shortcut/shortcut.info | 1 | ||||
-rw-r--r-- | modules/shortcut/shortcut.module | 2 | ||||
-rw-r--r-- | modules/shortcut/shortcut.test | 286 |
3 files changed, 288 insertions, 1 deletions
diff --git a/modules/shortcut/shortcut.info b/modules/shortcut/shortcut.info index 9c6fa4931..4c3c9e1a7 100644 --- a/modules/shortcut/shortcut.info +++ b/modules/shortcut/shortcut.info @@ -7,4 +7,5 @@ core = 7.x files[] = shortcut.module files[] = shortcut.admin.inc files[] = shortcut.install +files[] = shortcut.test configure = admin/config/user-interface/shortcut diff --git a/modules/shortcut/shortcut.module b/modules/shortcut/shortcut.module index fccb0f61b..7144dae93 100644 --- a/modules/shortcut/shortcut.module +++ b/modules/shortcut/shortcut.module @@ -328,7 +328,7 @@ function shortcut_set_load($set_name) { * - 'title': The title of the shortcut set. * - 'set_name': (optional) The internal name of the shortcut set. If * omitted, a new shortcut set will be created, and the 'set_name' property - * will be added to the passed-in array. + * will be added to the passed-in object. * - 'links': (optional) An array of menu links to save for the shortcut set. * Each link is an array containing at least the following keys (which will * be expanded to fill in other default values after the shortcut set is diff --git a/modules/shortcut/shortcut.test b/modules/shortcut/shortcut.test new file mode 100644 index 000000000..635977b60 --- /dev/null +++ b/modules/shortcut/shortcut.test @@ -0,0 +1,286 @@ +<?php +// $Id$ + +/** + * @file + * Tests for the shortcut module. + */ + +/** + * Defines base class for shortcut test cases. + */ +class ShortcutTestCase extends DrupalWebTestCase { + + /** + * User with permission to administer shortcuts. + */ + protected $admin_user; + + /** + * User with permission to use shortcuts, but not administer them. + */ + protected $shortcut_user; + + /** + * Generic node used for testing. + */ + protected $node; + + /** + * Site-wide default shortcut set. + */ + protected $set; + + function setUp() { + parent::setUp('toolbar', 'shortcut'); + // Create users. + $this->admin_user = $this->drupalCreateUser(array('access toolbar', 'administer shortcuts', 'create article content', 'create page content', 'access content overview')); + $this->shortcut_user = $this->drupalCreateUser(array('customize shortcut links', 'switch shortcut sets')); + // Create a node. + $this->node = $this->drupalCreateNode(array('type' => 'article')); + // Log in as admin and grab the default shortcut set. + $this->drupalLogin($this->admin_user); + $this->set = shortcut_set_load(SHORTCUT_DEFAULT_SET_NAME); + shortcut_set_assign_user($this->set, $this->admin_user); + } + + /** + * Creates a generic shortcut set. + */ + function generateShortcutSet($title = '', $default_links = TRUE) { + $set = new stdClass; + $set->title = empty($title) ? $this->randomName(10) : $title; + if ($default_links) { + $set->links = array(); + $set->links[] = $this->generateShortcutLink('node/add'); + $set->links[] = $this->generateShortcutLink('admin/content'); + } + shortcut_set_save($set); + + return $set; + } + + /** + * Creates a generic shortcut link. + */ + function generateShortcutLink($path, $title = '') { + $link = array( + 'link_path' => $path, + 'link_title' => !empty($title) ? $title : $this->randomName(10), + ); + + return $link; + } + + /** + * Extracts information from shortcut set links. + * + * @param object $set + * The shortcut set object to extract information from. + * @param string $key + * The array key indicating what information to extract from each link: + * - 'link_path': Extract link paths. + * - 'link_title': Extract link titles. + * - 'mlid': Extract the menu link item ID numbers. + * + * @return array + * Array of the requested information from each link. + */ + function getShortcutInformation($set, $key) { + $info = array(); + foreach ($set->links as $link) { + $info[] = $link[$key]; + } + return $info; + } +} + +/** + * Defines shortcut links test cases. + */ +class ShortcutLinksTestCase extends ShortcutTestCase { + + public static function getInfo() { + return array( + 'name' => 'Shortcut link functionality', + 'description' => 'Create, view, edit, delete, and change shortcut links.', + 'group' => 'Shortcut', + ); + } + + /** + * Tests that creating a shortcut works properly. + */ + function testShortcutLinkAdd() { + $set = $this->set; + + $test_cases = array( + array('path' => 'admin'), + array('path' => 'admin/config/system/site-information'), + array('path' => "node/{$this->node->nid}/edit"), + ); + + // Check that each new shortcut links where it should. + foreach ($test_cases as $test) { + $title = $this->randomName(10); + $form_data = array( + 'shortcut_link[link_title]' => $title, + 'shortcut_link[link_path]' => $test['path'], + ); + $this->drupalPost('admin/config/user-interface/shortcut/' . $set->set_name . '/add-link', $form_data, t('Save')); + $this->assertResponse(200); + $saved_set = shortcut_set_load($set->set_name); + $paths = $this->getShortcutInformation($saved_set, 'link_path'); + $this->assertTrue(in_array($test['path'], $paths), 'Shortcut created: '. $test['path']); + $this->assertLink($title, 0, 'Shortcut link found on the page.'); + } + } + + /** + * Tests that the "add to shortcut" link changes to "remove shortcut". + */ + function testShortcutQuickLink() { + $this->drupalGet($this->set->links[0]['link_path']); + $this->assertRaw(t('Remove from %title shortcuts', array('%title' => $this->set->title)), '"Add to shortcuts" link properly switched to "Remove from shortcuts".'); + } + + /** + * Tests that shortcut links can be renamed. + */ + function testShortcutLinkRename() { + $set = $this->set; + + // Attempt to rename shortcut link. + $new_link_name = $this->randomName(10); + + $this->drupalPost('admin/config/user-interface/shortcut/link/' . $set->links[0]['mlid'], array('shortcut_link[link_title]' => $new_link_name, 'shortcut_link[link_path]' => $set->links[0]['link_path']), t('Save')); + $saved_set = shortcut_set_load($set->set_name); + $titles = $this->getShortcutInformation($saved_set, 'link_title'); + $this->assertTrue(in_array($new_link_name, $titles), 'Shortcut renamed: ' . $new_link_name); + $this->assertLink($new_link_name, 0, 'Renamed shortcut link appears on the page.'); + } + + /** + * Tests that changing the path of a shortcut link works. + */ + function testShortcutLinkChangePath() { + $set = $this->set; + + // Tests changing a shortcut path. + $new_link_path = 'admin/config'; + + $this->drupalPost('admin/config/user-interface/shortcut/link/' . $set->links[0]['mlid'], array('shortcut_link[link_title]' => $set->links[0]['link_title'], 'shortcut_link[link_path]' => $new_link_path), t('Save')); + $saved_set = shortcut_set_load($set->set_name); + $paths = $this->getShortcutInformation($saved_set, 'link_path'); + $this->assertTrue(in_array($new_link_path, $paths), 'Shortcut path changed: ' . $new_link_path); + $this->assertLinkByHref($new_link_path, 0, 'Shortcut with new path appears on the page.'); + } + + /** + * Tests deleting a shortcut link. + */ + function testShortcutLinkDelete() { + $set = $this->set; + + $this->drupalPost('admin/config/user-interface/shortcut/link/' . $set->links[0]['mlid'] . '/delete', array(), 'Delete'); + $saved_set = shortcut_set_load($set->set_name); + $mlids = $this->getShortcutInformation($saved_set, 'mlid'); + $this->assertFalse(in_array($set->links[0]['mlid'], $mlids), 'Successfully deleted a shortcut.'); + } +} + +/** + * Defines shortcut set test cases. + */ +class ShortcutSetsTestCase extends ShortcutTestCase { + + public static function getInfo() { + return array( + 'name' => 'Shortcut set functionality', + 'description' => 'Create, view, edit, delete, and change shortcut sets.', + 'group' => 'Shortcut', + ); + } + + /** + * Tests creating a shortcut set. + */ + function testShortcutSetAdd() { + $new_set = $this->generateShortcutSet($this->randomName(10)); + $sets = shortcut_sets(); + $this->assertTrue(isset($sets[$new_set->set_name]), 'Successfully created a shortcut set.'); + $this->drupalGet('user/' . $this->admin_user->uid . '/shortcuts'); + $this->assertText($new_set->title, 'Generated shortcut set was listed as a choice on the user account page.'); + } + + /** + * Tests switching a user's own shortcut set. + */ + function testShortcutSetSwitchOwn() { + $new_set = $this->generateShortcutSet($this->randomName(10)); + + // Attempt to switch the default shortcut set to the newly created shortcut + // set. + $this->drupalPost('user/' . $this->admin_user->uid . '/shortcuts', array('set' => $new_set->set_name), t('Change set')); + $this->assertResponse(200); + $current_set = shortcut_current_displayed_set($this->admin_user); + $this->assertTrue($new_set->set_name == $current_set->set_name, 'Successfully switched own shortcut set.'); + } + + /** + * Tests switching another user's shortcut set. + */ + function testShortcutSetAssign() { + $new_set = $this->generateShortcutSet($this->randomName(10)); + + shortcut_set_assign_user($new_set, $this->shortcut_user); + $current_set = shortcut_current_displayed_set($this->shortcut_user); + $this->assertTrue($new_set->set_name == $current_set->set_name, "Successfully switched another user's shortcut set."); + } + + /** + * Tests that shortcut_set_save() correctly updates existing links. + */ + function testShortcutSetSave() { + $set = $this->set; + $old_mlids = $this->getShortcutInformation($set, 'mlid'); + + $set->links[] = $this->generateShortcutLink('admin', $this->randomName(10)); + shortcut_set_save($set); + $saved_set = shortcut_set_load($set->set_name); + + $new_mlids = $this->getShortcutInformation($saved_set, 'mlid'); + $this->assertTrue(count(array_intersect($old_mlids, $new_mlids)) == count($old_mlids), 'shortcut_set_save() did not inadvertently change existing mlids.'); + } + + /** + * Tests renaming a shortcut set. + */ + function testShortcutSetRename() { + $set = $this->set; + + $new_title = $this->randomName(10); + $this->drupalPost('admin/config/user-interface/shortcut/' . $set->set_name . '/edit', array('title' => $new_title), t('Save')); + $set = shortcut_set_load($set->set_name); + $this->assertTrue($set->title == $new_title, 'Shortcut set has been successfully renamed.'); + } + + /** + * Tests deleting a shortcut set. + */ + function testShortcutSetDelete() { + $new_set = $this->generateShortcutSet($this->randomName(10)); + + $this->drupalPost('admin/config/user-interface/shortcut/' . $new_set->set_name . '/delete', array(), t('Delete')); + $sets = shortcut_sets(); + $this->assertFalse(isset($sets[$new_set->set_name]), 'Successfully deleted a shortcut set.'); + } + + /** + * Tests deleting the default shortcut set. + */ + function testShortcutSetDeleteDefault() { + $this->drupalGet('admin/config/user-interface/shortcut/' . SHORTCUT_DEFAULT_SET_NAME . '/delete'); + $this->assertResponse(403); + } +} |