public function MultipleNodeMenuTestCase::testNodeFormWidget in Multiple Node Menu 8
Test creating, editing, deleting menu links via node form widget.
File
- tests/
src/ Functional/ MultipleNodeMenuTestCase.php, line 64
Class
- MultipleNodeMenuTestCase
- Test adding, editing and deleting multiple menu links attached to nodes.
Namespace
Drupal\Tests\multiple_node_menu\FunctionalCode
public function testNodeFormWidget() {
// Enable Navigation menu as available menu.
$this
->drupalGet('admin/structure/types/manage/page');
$edit = [
'menu_options[main]' => 1,
];
$this
->submitForm($edit, 'Save content type');
// Change default parent item to Navigation menu, so we can assert more
// easily.
$this
->drupalGet('admin/structure/types/manage/page');
$edit = [
'menu_parent' => 'main:',
];
$this
->submitForm($edit, 'Save content type');
// Create a node.
$this
->drupalGet('node/add/page');
$node_title = $this
->randomString();
$edit = [
'title' => $node_title,
'body[0][value]' => $this
->randomString(),
'multiple_node_menu[enabled]' => TRUE,
'multiple_node_menu[add_link][link_title]' => $node_title,
'multiple_node_menu[add_link][weight]' => 5,
];
$this
->submitForm($edit, 'Save');
$node = $this
->drupalGetNodeByTitle($node_title);
// Assert that the link exists.
$this
->drupalGet('');
$this
->assertSession()
->linkExists($node_title, 0, 'Menu link is present.');
// Check if weight was set correctly.
$this
->drupalGet('node/' . $node
->id() . '/edit');
// Menu weight correct in edit form.
$option = $this
->assertSession()
->optionExists('edit-multiple-node-menu-current-links-0-weight', 5);
static::assertTrue($option
->isChecked());
// Add another item via Ajax.
$new_link_title = $this
->randomString();
$edit = [
'multiple_node_menu[add_link][link_title]' => $new_link_title,
'multiple_node_menu[add_link][weight]' => -5,
];
$this
->submitForm($edit, 'Add new menu link');
$this
->submitForm([], 'Save');
// Assert that the new link exists.
$this
->drupalGet('');
// Menu link is present.
$this
->assertLink($new_link_title, 0);
// Disable first menu item.
$this
->drupalGet('node/' . $node
->id() . '/edit');
$edit = [
'multiple_node_menu[current_links][0][enabled]' => FALSE,
];
$this
->submitForm($edit, 'Save');
// Assert that the first link has been hidden.
$this
->drupalGet('');
// Menu link was disabled.
$this
->assertNoLink($node_title);
// Edit the node and remove the menu link.
$this
->drupalGet('node/' . $node
->id() . '/edit');
$this
->submitForm([], 'Delete');
$this
->submitForm([], 'Save');
// Assert that there are no links to display for the node.
$this
->drupalGet('');
// No enabled menu links.
$this
->assertNoLink($node_title);
// No enabled menu links.
$this
->assertNoLink($new_link_title);
// Edit the node and re-enable the menu link.
$this
->drupalGet('node/' . $node
->id() . '/edit');
$edit = [
'multiple_node_menu[enabled]' => TRUE,
'multiple_node_menu[current_links][0][enabled]' => TRUE,
];
$this
->submitForm($edit, 'Save');
// Assert that the link exists.
$this
->drupalGet('');
// Menu link is present.
$this
->assertLink($node_title, 0);
// Test disabling menu links when the 'Provide menu link' checkbox is
// unchecked.
$this
->drupalGet('node/' . $node
->id() . '/edit');
$edit = [
'multiple_node_menu[enabled]' => FALSE,
];
$this
->submitForm($edit, 'Save');
// Assert that there are no links to display for the node.
$this
->drupalGet('');
// No enabled menu links.
$this
->assertNoLink($node_title);
}