class MenuLinkWeightTest in Menu Link Weight 8
Same name and namespace in other branches
- 8.2 menu_link_weight.test \MenuLinkWeightTest
- 7 menu_link_weight.test \MenuLinkWeightTest
Test class for Menu Link Weight.
Hierarchy
- class \MenuLinkWeightTest extends \DrupalWebTestCase
Expanded class hierarchy of MenuLinkWeightTest
File
- ./
menu_link_weight.test, line 11 - Web tests for Menu Link Weight.
View source
class MenuLinkWeightTest extends DrupalWebTestCase {
/**
* Module info.
*/
public static function getInfo() {
return array(
'name' => 'Menu Link Weight',
'description' => 'Web tests for Menu Link Weight',
'group' => 'Menu Link Weight',
);
}
/**
* Set up.
*/
protected function setUp() {
parent::setUp('menu_link_weight');
$permissions = array(
'access administration pages',
'administer content types',
'administer blocks',
'administer menu',
'administer taxonomy',
'create page content',
'edit any page content',
'delete any page content',
'create article content',
);
// Create user.
$this->user = $this
->drupalCreateUser($permissions);
// Log in user.
$this
->drupalLogin($this->user);
// Create a new menu.
$title = $this
->randomName(16);
$menu_name = substr(hash('sha256', $this
->randomName(16)), 0, MENU_MAX_MENU_NAME_LENGTH_UI);
$edit = array(
'menu_name' => $menu_name,
'description' => '',
'title' => $title,
);
// Drupal prepends the menu name with "menu-".
$this->menu_name = 'menu-' . $menu_name;
$this
->drupalPost('admin/structure/menu/add', $edit, t('Save'));
$this
->drupalGet('admin/structure/menu');
$this
->assertText($title, 'Menu created');
// Enable the custom menu block.
$edit = array();
$edit['blocks[menu_' . $this->menu_name . '][region]'] = 'sidebar_first';
$this
->drupalPost('admin/structure/block', $edit, t('Save blocks'));
$this
->assertResponse(200);
$this
->assertText(t('The block settings have been updated.'), 'Custom menu block was enabled');
}
/**
* Test creating, editing, deleting menu links via node form widget.
*/
public function testMenuFunctionality() {
// Enable the Navigation menu as available menu.
$edit = array(
'menu_options[navigation]' => 1,
);
$this
->drupalPost('admin/structure/types/manage/page', $edit, t('Save content type'));
// Change default parent item to Navigation menu, so we can assert more
// easily.
$edit = array(
'menu_parent' => 'navigation:0',
);
$this
->drupalPost('admin/structure/types/manage/page', $edit, t('Save content type'));
// Create a node.
$node_title = $this
->randomName();
$language = LANGUAGE_NONE;
$edit = array(
"title" => $node_title,
"body[{$language}][0][value]" => $this
->randomString(),
);
$this
->drupalPost('node/add/page', $edit, t('Save'));
$node = $this
->drupalGetNodeByTitle($node_title);
// Assert that there is no link for the node.
$this
->drupalGet('');
$this
->assertNoLink($node_title);
// Edit the node, enable the menu link setting, but skip the link title.
$edit = array(
'menu[enabled]' => 1,
);
$this
->drupalPost('node/' . $node->nid . '/edit', $edit, t('Save'));
// Assert that there is no link for the node.
$this
->drupalGet('');
$this
->assertNoLink($node_title);
// Get the Menu link ID's for the sibling links of the to be created link.
$links = menu_load_links('navigation');
foreach ($links as $link) {
if ($link['link_path'] == 'node/add') {
$mlid_add_content = $link['mlid'];
}
elseif ($link['link_path'] == 'filter/tips') {
$mlid_filter_tips = $link['mlid'];
}
}
// Edit the node and create a menu link.
$edit = array(
'menu[enabled]' => 1,
'menu[link_title]' => $node_title,
'menu[menu_link_weight][' . $mlid_add_content . '][weight]' => -50,
'menu[menu_link_weight][link_current][weight]' => -49,
'menu[menu_link_weight][' . $mlid_filter_tips . '][weight]' => -48,
// Test the hidden fields validation. This should pass:
'menu[db_weights][' . $mlid_add_content . ']' => -49,
'menu[db_weights][' . $mlid_filter_tips . ']' => -48,
);
$this
->drupalPost('node/' . $node->nid . '/edit', $edit, t('Save'));
$this
->assertNoText(t('The menu link weights have been changed by another user, please try again.'));
// Assert that the link exists.
$this
->drupalGet('');
$this
->assertLink($node_title);
$item = db_query('SELECT * FROM {menu_links} WHERE link_title = :title', array(
':title' => $node_title,
))
->fetchAssoc();
// Assert that the reordering was successful.
$this
->assertMenuLink($mlid_add_content, array(
'weight' => -50,
));
$this
->assertMenuLink($item['mlid'], array(
'weight' => -49,
));
$this
->assertMenuLink($mlid_filter_tips, array(
'weight' => -48,
));
$this
->drupalGet('node/' . $node->nid . '/edit');
$this
->assertText('(' . t('provided menu link') . ')');
$this
->assertText('Change the weight of the links within the Navigation menu');
$this
->assertOptionSelected('edit-menu-menu-link-weight-link-current-weight', -49, 'Menu weight correct in edit form');
// Test AJAX functionality.
$edit = array(
'menu[enabled]' => TRUE,
'menu[parent]' => 'navigation:' . $mlid_add_content,
);
$this
->drupalPostAJAX('node/' . $node->nid . '/edit', $edit, 'menu[parent]');
$this
->assertText('Change the weight of the links within the Add content menu');
// Test graceful degradation.
$this
->drupalPost('node/' . $node->nid . '/edit', $edit, menu_link_weight_get_button_text());
$this
->assertText('Change the weight of the links within the Add content menu');
// Test "editing lock".
$edit = array(
'menu[enabled]' => 1,
'menu[link_title]' => $this
->randomName(),
// Test the hidden fields validation. This should not pass:
'menu[db_weights][' . $mlid_add_content . ']' => -50,
'menu[db_weights][' . $mlid_filter_tips . ']' => -49,
);
$this
->drupalPost('node/' . $node->nid . '/edit', $edit, t('Save'));
$this
->assertText(t('The menu link weights have been changed by another user, please try again.'));
// Test the "add new node" form.
// Create a node.
$node2_title = $this
->randomName();
$language = LANGUAGE_NONE;
$edit = array(
"title" => $node2_title,
"body[{$language}][0][value]" => $this
->randomString(),
'menu[enabled]' => 1,
'menu[link_title]' => $node2_title,
'menu[menu_link_weight][' . $item['mlid'] . '][weight]' => -50,
'menu[menu_link_weight][' . $mlid_filter_tips . '][weight]' => -49,
'menu[menu_link_weight][link_current][weight]' => -48,
'menu[menu_link_weight][' . $mlid_add_content . '][weight]' => -47,
);
$this
->drupalPost('node/add/page', $edit, t('Save'));
// Assert that the link exists.
$this
->drupalGet('');
$this
->assertLink($node2_title);
$item2 = db_query('SELECT * FROM {menu_links} WHERE link_title = :title', array(
':title' => $node2_title,
))
->fetchAssoc();
// Assert that the reordering was successful.
$this
->assertMenuLink($item['mlid'], array(
'weight' => -50,
));
$this
->assertMenuLink($mlid_filter_tips, array(
'weight' => -49,
));
$this
->assertMenuLink($item2['mlid'], array(
'weight' => -48,
));
$this
->assertMenuLink($mlid_add_content, array(
'weight' => -47,
));
$node2 = $this
->drupalGetNodeByTitle($node2_title);
$this
->drupalGet('node/' . $node2->nid . '/edit');
$this
->assertText('(' . t('provided menu link') . ')');
$this
->assertOptionSelected('edit-menu-menu-link-weight-link-current-weight', -48, 'Menu weight correct in edit form');
// Assert that the item is placed on top of the list if no other options
// are selected.
$node3_title = $this
->randomName();
$language = LANGUAGE_NONE;
$edit = array(
"title" => $node3_title,
"body[{$language}][0][value]" => $this
->randomString(),
'menu[enabled]' => 1,
'menu[link_title]' => $node3_title,
);
$this
->drupalPost('node/add/page', $edit, t('Save'));
// Assert that the link exists.
$this
->drupalGet('');
$this
->assertLink($node3_title);
$item3 = db_query('SELECT * FROM {menu_links} WHERE link_title = :title', array(
':title' => $node3_title,
))
->fetchAssoc();
// Assert that the reordering was successful.
$this
->assertMenuLink($item3['mlid'], array(
'weight' => -50,
));
$this
->assertMenuLink($item['mlid'], array(
'weight' => -49,
));
$this
->assertMenuLink($mlid_filter_tips, array(
'weight' => -48,
));
$this
->assertMenuLink($item2['mlid'], array(
'weight' => -47,
));
$this
->assertMenuLink($mlid_add_content, array(
'weight' => -46,
));
// Test the custom tree reordering functionality:
module_enable(array(
'menu_link_weight_test',
));
// Insert the new link above item 2:
variable_set('menu_link_weight_test_parent_value', 'navigation:0');
variable_set('menu_link_weight_test_relative_position', 'above_' . $item2['mlid']);
$node4_title = $this
->randomName();
$language = LANGUAGE_NONE;
$edit = array(
"title" => $node4_title,
"body[{$language}][0][value]" => $this
->randomString(),
'menu[enabled]' => 1,
'menu[link_title]' => $node4_title,
);
$this
->drupalPost('node/add/page', $edit, t('Save'));
// Assert that the link exists.
$this
->drupalGet('');
$this
->assertLink($node4_title);
$item4 = db_query('SELECT * FROM {menu_links} WHERE link_title = :title', array(
':title' => $node4_title,
))
->fetchAssoc();
// Assert that the reordering was successful.
$this
->assertMenuLink($item3['mlid'], array(
'weight' => -50,
));
$this
->assertMenuLink($item['mlid'], array(
'weight' => -49,
));
$this
->assertMenuLink($mlid_filter_tips, array(
'weight' => -48,
));
$this
->assertMenuLink($item4['mlid'], array(
'weight' => -47,
));
$this
->assertMenuLink($item2['mlid'], array(
'weight' => -46,
));
$this
->assertMenuLink($mlid_add_content, array(
'weight' => -45,
));
variable_set('menu_link_weight_test_relative_position', 'below_' . $item2['mlid']);
$node5_title = $this
->randomName();
$language = LANGUAGE_NONE;
$edit = array(
"title" => $node5_title,
"body[{$language}][0][value]" => $this
->randomString(),
'menu[enabled]' => 1,
'menu[link_title]' => $node5_title,
);
$this
->drupalPost('node/add/page', $edit, t('Save'));
$item5 = db_query('SELECT * FROM {menu_links} WHERE link_title = :title', array(
':title' => $node5_title,
))
->fetchAssoc();
// Assert that the reordering was successful.
$this
->assertMenuLink($item3['mlid'], array(
'weight' => -50,
));
$this
->assertMenuLink($item['mlid'], array(
'weight' => -49,
));
$this
->assertMenuLink($mlid_filter_tips, array(
'weight' => -48,
));
$this
->assertMenuLink($item4['mlid'], array(
'weight' => -47,
));
$this
->assertMenuLink($item2['mlid'], array(
'weight' => -46,
));
$this
->assertMenuLink($item5['mlid'], array(
'weight' => -45,
));
$this
->assertMenuLink($mlid_add_content, array(
'weight' => -44,
));
}
/**
* Fetch the menu item from the database and compare it to the given array.
*
* @param int $mlid
* Menu item id.
* @param array $expected_item
* Array containing properties to verify.
*/
protected function assertMenuLink($mlid, array $expected_item) {
// Retrieve menu link.
$item = db_query('SELECT * FROM {menu_links} WHERE mlid = :mlid', array(
':mlid' => $mlid,
))
->fetchAssoc();
$options = unserialize($item['options']);
if (!empty($options['query'])) {
$item['link_path'] .= '?' . drupal_http_build_query($options['query']);
}
if (!empty($options['fragment'])) {
$item['link_path'] .= '#' . $options['fragment'];
}
foreach ($expected_item as $key => $value) {
$this
->assertEqual($item[$key], $value, format_string('Parameter %key had expected value.', array(
'%key' => $key,
)));
}
}
}
Members
Name | Modifiers | Type | Description | Overrides |
---|---|---|---|---|
MenuLinkWeightTest:: |
protected | function | Fetch the menu item from the database and compare it to the given array. | |
MenuLinkWeightTest:: |
public static | function | Module info. | |
MenuLinkWeightTest:: |
protected | function | Set up. | |
MenuLinkWeightTest:: |
public | function | Test creating, editing, deleting menu links via node form widget. |