You are here

public function MenuLinkTest::testHierarchicalMenuLinkVisibility in Drupal 9

Same name and namespace in other branches
  1. 8 core/modules/views/tests/src/Functional/Plugin/MenuLinkTest.php \Drupal\Tests\views\Functional\Plugin\MenuLinkTest::testHierarchicalMenuLinkVisibility()

Tests that menu links using menu_link_content as parent are visible.

File

core/modules/views/tests/src/Functional/Plugin/MenuLinkTest.php, line 67

Class

MenuLinkTest
Tests the menu links created in views.

Namespace

Drupal\Tests\views\Functional\Plugin

Code

public function testHierarchicalMenuLinkVisibility() {
  $this
    ->drupalLogin($this->adminUser);
  $node = $this
    ->drupalCreateNode([
    'type' => 'page',
  ]);

  // Create a primary level menu link to the node.
  $link = MenuLinkContent::create([
    'title' => 'Primary level node',
    'menu_name' => 'main',
    'bundle' => 'menu_link_content',
    'parent' => '',
    'link' => [
      [
        'uri' => 'entity:node/' . $node
          ->id(),
      ],
    ],
  ]);
  $link
    ->save();
  $parent_menu_value = 'main:menu_link_content:' . $link
    ->uuid();

  // Alter the view's menu link in view page to use the menu link from the
  // node as parent.
  $this
    ->drupalGet("admin/structure/views/nojs/display/test_menu_link/page_1/menu");
  $this
    ->submitForm([
    'menu[type]' => 'normal',
    'menu[title]' => 'Secondary level view page',
    'menu[parent]' => $parent_menu_value,
  ], 'Apply');

  // Save view which has pending changes.
  $this
    ->submitForm([], 'Save');

  // Test if the node as parent menu item is selected in our views settings.
  $this
    ->drupalGet('admin/structure/views/nojs/display/test_menu_link/page_1/menu');
  $this
    ->assertTrue($this
    ->assertSession()
    ->optionExists('edit-menu-parent', $parent_menu_value)
    ->isSelected());
  $this
    ->drupalGet('');

  // Test if the primary menu item (node) is visible, and the secondary menu
  // item (view) is hidden.
  $this
    ->assertSession()
    ->pageTextContains('Primary level node');
  $this
    ->assertSession()
    ->pageTextNotContains('Secondary level view page');

  // Go to the node page and ensure that both the first and second level items
  // are visible.
  $this
    ->drupalGet($node
    ->toUrl());
  $this
    ->assertSession()
    ->pageTextContains('Primary level node');
  $this
    ->assertSession()
    ->pageTextContains('Secondary level view page');
}