/** * Tests addCondition(). * * @covers ::addCondition */ public function testAddCondition() { $parameters = new MenuTreeParameters(); // Verify default value. $this->assertEquals(array(), $parameters->conditions); // Add a condition. $parameters->addCondition('expanded', 1); $this->assertEquals(array('expanded' => 1), $parameters->conditions); // Add another condition. $parameters->addCondition('has_children', 0); $this->assertEquals(array('expanded' => 1, 'has_children' => 0), $parameters->conditions); // Add a condition with an operator. $parameters->addCondition('provider', array('module1', 'module2'), 'IN'); $this->assertEquals(array('expanded' => 1, 'has_children' => 0, 'provider' => array(array('module1', 'module2'), 'IN')), $parameters->conditions); // Add another condition with an operator. $parameters->addCondition('id', 1337, '<'); $this->assertEquals(array('expanded' => 1, 'has_children' => 0, 'provider' => array(array('module1', 'module2'), 'IN'), 'id' => array(1337, '<')), $parameters->conditions); // It's impossible to add two conditions on the same field; in that case, // the old condition will be overwritten. $parameters->addCondition('provider', 'other_module'); $this->assertEquals(array('expanded' => 1, 'has_children' => 0, 'provider' => 'other_module', 'id' => array(1337, '<')), $parameters->conditions); }
/** * Tests the loadTreeData method. */ public function testLoadTree() { $this->addMenuLink('test1', ''); $this->addMenuLink('test2', 'test1'); $this->addMenuLink('test3', 'test2'); $this->addMenuLink('test4'); $this->addMenuLink('test5', 'test4'); $data = $this->treeStorage->loadTreeData('tools', new MenuTreeParameters()); $tree = $data['tree']; $this->assertEqual(count($tree['test1']['subtree']), 1); $this->assertEqual(count($tree['test1']['subtree']['test2']['subtree']), 1); $this->assertEqual(count($tree['test1']['subtree']['test2']['subtree']['test3']['subtree']), 0); $this->assertEqual(count($tree['test4']['subtree']), 1); $this->assertEqual(count($tree['test4']['subtree']['test5']['subtree']), 0); $parameters = new MenuTreeParameters(); $parameters->setActiveTrail(array('test4', 'test5')); $data = $this->treeStorage->loadTreeData('tools', $parameters); $tree = $data['tree']; $this->assertEqual(count($tree['test1']['subtree']), 1); $this->assertFalse($tree['test1']['in_active_trail']); $this->assertEqual(count($tree['test1']['subtree']['test2']['subtree']), 1); $this->assertFalse($tree['test1']['subtree']['test2']['in_active_trail']); $this->assertEqual(count($tree['test1']['subtree']['test2']['subtree']['test3']['subtree']), 0); $this->assertFalse($tree['test1']['subtree']['test2']['subtree']['test3']['in_active_trail']); $this->assertEqual(count($tree['test4']['subtree']), 1); $this->assertTrue($tree['test4']['in_active_trail']); $this->assertEqual(count($tree['test4']['subtree']['test5']['subtree']), 0); $this->assertTrue($tree['test4']['subtree']['test5']['in_active_trail']); // Add some conditions to ensure that conditions work as expected. $parameters = new MenuTreeParameters(); $parameters->addCondition('parent', 'test1'); $data = $this->treeStorage->loadTreeData('tools', $parameters); $this->assertEqual(count($data['tree']), 1); $this->assertEqual($data['tree']['test2']['definition']['id'], 'test2'); $this->assertEqual($data['tree']['test2']['subtree'], []); // Test for only enabled links. $link = $this->treeStorage->load('test3'); $link['enabled'] = FALSE; $this->treeStorage->save($link); $link = $this->treeStorage->load('test4'); $link['enabled'] = FALSE; $this->treeStorage->save($link); $link = $this->treeStorage->load('test5'); $link['enabled'] = FALSE; $this->treeStorage->save($link); $parameters = new MenuTreeParameters(); $parameters->onlyEnabledLinks(); $data = $this->treeStorage->loadTreeData('tools', $parameters); $this->assertEqual(count($data['tree']), 1); $this->assertEqual($data['tree']['test1']['definition']['id'], 'test1'); $this->assertEqual(count($data['tree']['test1']['subtree']), 1); $this->assertEqual($data['tree']['test1']['subtree']['test2']['definition']['id'], 'test2'); $this->assertEqual($data['tree']['test1']['subtree']['test2']['subtree'], []); }
/** * Tests the regression in https://www.drupal.org/node/2532490. */ public function testDefaultMenuTabRegression() { $this->container->get('module_installer')->install(['menu_ui', 'menu_link_content', 'toolbar', 'system']); $admin_user = $this->drupalCreateUser(['administer views', 'administer blocks', 'bypass node access', 'access user profiles', 'view all revisions', 'administer permissions', 'administer menu', 'link to any page', 'access toolbar']); $this->drupalLogin($admin_user); $edit = ['title[0][value]' => 'Menu title', 'link[0][uri]' => '/admin/foo', 'menu_parent' => 'admin:system.admin']; $this->drupalPostForm('admin/structure/menu/manage/admin/add', $edit, t('Save')); $menu_items = \Drupal::entityManager()->getStorage('menu_link_content')->getQuery()->sort('id', 'DESC')->pager(1)->execute(); $menu_item = end($menu_items); /** @var \Drupal\menu_link_content\MenuLinkContentInterface $menu_link_content */ $menu_link_content = MenuLinkContent::load($menu_item); $edit = []; $edit['label'] = $this->randomMachineName(16); $view_id = $edit['id'] = strtolower($this->randomMachineName(16)); $edit['description'] = $this->randomMachineName(16); $edit['page[create]'] = TRUE; $edit['page[path]'] = 'admin/foo'; $this->drupalPostForm('admin/structure/views/add', $edit, t('Save and edit')); $parameters = new MenuTreeParameters(); $parameters->addCondition('id', $menu_link_content->getPluginId()); $result = \Drupal::menuTree()->load('admin', $parameters); $plugin_definition = end($result)->link->getPluginDefinition(); $this->assertEqual('view.' . $view_id . '.page_1', $plugin_definition['route_name']); $this->clickLink(t('No menu')); $this->drupalPostForm(NULL, ['menu[type]' => 'default tab', 'menu[title]' => 'Menu title'], t('Apply')); $this->assertText('Default tab options'); $this->drupalPostForm(NULL, ['tab_options[type]' => 'normal', 'tab_options[title]' => 'Parent title'], t('Apply')); $this->drupalPostForm(NULL, [], t('Save')); // Assert that saving the view will not cause an exception. $this->assertResponse(200); }