You are here

public function MenuTreeStorageTest::testMenuDisabledChildLinks in Drupal 9

Same name and namespace in other branches
  1. 8 core/tests/Drupal/KernelTests/Core/Menu/MenuTreeStorageTest.php \Drupal\KernelTests\Core\Menu\MenuTreeStorageTest::testMenuDisabledChildLinks()
  2. 10 core/tests/Drupal/KernelTests/Core/Menu/MenuTreeStorageTest.php \Drupal\KernelTests\Core\Menu\MenuTreeStorageTest::testMenuDisabledChildLinks()

Tests with disabled child links.

File

core/tests/Drupal/KernelTests/Core/Menu/MenuTreeStorageTest.php, line 173

Class

MenuTreeStorageTest
Tests the menu tree storage.

Namespace

Drupal\KernelTests\Core\Menu

Code

public function testMenuDisabledChildLinks() {

  // Add some links with parent on the previous one and test some values.
  // <tools>
  // - test1
  // -- test2 (disabled)
  $this
    ->addMenuLink('test1', '');
  $this
    ->assertMenuLink('test1', [
    'has_children' => 0,
    'depth' => 1,
  ]);
  $this
    ->addMenuLink('test2', 'test1', '<front>', [], 'tools', [
    'enabled' => 0,
  ]);

  // The 1st link does not have any visible children, so has_children is 0.
  $this
    ->assertMenuLink('test1', [
    'has_children' => 0,
    'depth' => 1,
  ]);
  $this
    ->assertMenuLink('test2', [
    'has_children' => 0,
    'depth' => 2,
    'enabled' => 0,
  ], [
    'test1',
  ]);

  // Add more links with parent on the previous one.
  // <footer>
  // - footerA
  // ===============
  // <tools>
  // - test1
  // -- test2 (disabled)
  // --- test3
  // ---- test4
  // ----- test5
  // ------ test6
  // ------- test7
  // -------- test8
  // --------- test9
  $this
    ->addMenuLink('footerA', '', '<front>', [], 'footer');
  $visible_children = [];
  for ($i = 3; $i <= $this->treeStorage
    ->maxDepth(); $i++) {
    $parent = $i - 1;
    $this
      ->addMenuLink("test{$i}", "test{$parent}");
    $visible_children[] = "test{$i}";
  }

  // The 1st link does not have any visible children, so has_children is still
  // 0. However, it has visible links below it that will be found.
  $this
    ->assertMenuLink('test1', [
    'has_children' => 0,
    'depth' => 1,
  ], [], $visible_children);

  // This should fail since test9 would end up at greater than max depth.
  try {
    $this
      ->moveMenuLink('test1', 'footerA');
    $this
      ->fail('Exception was not thrown');
  } catch (PluginException $e) {

    // Expected exception; just continue testing.
  }

  // The opposite move should work, and change the has_children flag.
  $this
    ->moveMenuLink('footerA', 'test1');
  $visible_children[] = 'footerA';
  $this
    ->assertMenuLink('test1', [
    'has_children' => 1,
    'depth' => 1,
  ], [], $visible_children);
}