/** * Test automatic reparenting of menu links. */ function testMenuLinkReparenting($module = 'menu_test') { // Check the initial hierarchy. $links = $this->createLinkHierarchy($module); $expected_hierarchy = array('parent' => '', 'child-1' => 'parent', 'child-1-1' => 'child-1', 'child-1-2' => 'child-1', 'child-2' => 'parent'); $this->assertMenuLinkParents($links, $expected_hierarchy); // Start over, and move child-1 under child-2, and check that all the // children of child-1 have been moved too. $links = $this->createLinkHierarchy($module); /* @var \Drupal\Core\Menu\MenuLinkInterface $menu_link_plugin */ $this->menuLinkManager->updateDefinition($links['child-1'], array('parent' => $links['child-2'])); // Verify that the entity was updated too. $menu_link_plugin = $this->menuLinkManager->createInstance($links['child-1']); $entity = \Drupal::entityManager()->loadEntityByUuid('menu_link_content', $menu_link_plugin->getDerivativeId()); $this->assertEqual($entity->getParentId(), $links['child-2']); $expected_hierarchy = array('parent' => '', 'child-1' => 'child-2', 'child-1-1' => 'child-1', 'child-1-2' => 'child-1', 'child-2' => 'parent'); $this->assertMenuLinkParents($links, $expected_hierarchy); // Start over, and delete child-1, and check that the children of child-1 // have been reassigned to the parent. $links = $this->createLinkHierarchy($module); $this->menuLinkManager->removeDefinition($links['child-1']); $expected_hierarchy = array('parent' => FALSE, 'child-1-1' => 'parent', 'child-1-2' => 'parent', 'child-2' => 'parent'); $this->assertMenuLinkParents($links, $expected_hierarchy); // Try changing the parent at the entity level. $definition = $this->menuLinkManager->getDefinition($links['child-1-2']); $entity = MenuLinkContent::load($definition['metadata']['entity_id']); $entity->parent->value = ''; $entity->save(); $expected_hierarchy = array('parent' => '', 'child-1-1' => 'parent', 'child-1-2' => '', 'child-2' => 'parent'); $this->assertMenuLinkParents($links, $expected_hierarchy); // @todo Figure out what makes sense to test in terms of automatic // re-parenting. https://www.drupal.org/node/2309531 }
/** * Test views internal menu link options. */ public function testMenuLinkOverrides() { // Link from views module. $views_link = $this->menuLinkManager->getDefinition('views_view:views.test_page_display_menu.page_3'); $this->assertTrue($views_link['enabled'], 'Menu link is enabled.'); $this->assertFalse($views_link['expanded'], 'Menu link is not expanded.'); $views_link['enabled'] = 0; $views_link['expanded'] = 1; $this->menuLinkManager->updateDefinition($views_link['id'], $views_link); $views_link = $this->menuLinkManager->getDefinition($views_link['id']); $this->assertFalse($views_link['enabled'], 'Menu link is disabled.'); $this->assertTrue($views_link['expanded'], 'Menu link is expanded.'); $this->menuLinkManager->rebuild(); $this->assertFalse($views_link['enabled'], 'Menu link is disabled.'); $this->assertTrue($views_link['expanded'], 'Menu link is expanded.'); // Link from user module. $user_link = $this->menuLinkManager->getDefinition('user.page'); $this->assertTrue($user_link['enabled'], 'Menu link is enabled.'); $user_link['enabled'] = 0; $views_link['expanded'] = 1; $this->menuLinkManager->updateDefinition($user_link['id'], $user_link); $this->assertFalse($user_link['enabled'], 'Menu link is disabled.'); $this->menuLinkManager->rebuild(); $this->assertFalse($user_link['enabled'], 'Menu link is disabled.'); $this->menuLinkOverrides->reload(); $views_link = $this->menuLinkManager->getDefinition('views_view:views.test_page_display_menu.page_3'); $this->assertFalse($views_link['enabled'], 'Menu link is disabled.'); $this->assertTrue($views_link['expanded'], 'Menu link is expanded.'); $user_link = $this->menuLinkManager->getDefinition('user.page'); $this->assertFalse($user_link['enabled'], 'Menu link is disabled.'); }