Chris@0: adminUser = $this->drupalCreateUser(array_keys(\Drupal::service('user.permissions')->getPermissions())); Chris@0: $this->webUser = $this->drupalCreateUser([ Chris@0: 'access administration pages', Chris@0: 'translate interface', Chris@0: ]); Chris@0: $this->drupalLogin($this->adminUser); Chris@0: } Chris@0: Chris@0: /** Chris@0: * Tests output on administrative listing pages. Chris@0: */ Chris@0: public function testAdminPages() { Chris@0: // Go to Administration. Chris@0: $this->drupalGet('admin'); Chris@0: Chris@0: // Verify that all visible, top-level administration links are listed on Chris@0: // the main administration page. Chris@0: foreach ($this->getTopLevelMenuLinks() as $item) { Chris@0: $this->assertLink($item->getTitle()); Chris@0: $this->assertLinkByHref($item->getUrlObject()->toString()); Chris@0: // The description should appear below the link. Chris@0: $this->assertText($item->getDescription()); Chris@0: } Chris@0: Chris@0: // For each administrative listing page on which the Locale module appears, Chris@0: // verify that there are links to the module's primary configuration pages, Chris@0: // but no links to its individual sub-configuration pages. Also verify that Chris@0: // a user with access to only some Locale module administration pages only Chris@0: // sees links to the pages they have access to. Chris@0: $admin_list_pages = [ Chris@0: 'admin/index', Chris@0: 'admin/config', Chris@0: 'admin/config/regional', Chris@0: ]; Chris@0: Chris@0: foreach ($admin_list_pages as $page) { Chris@0: // For the administrator, verify that there are links to Locale's primary Chris@0: // configuration pages, but no links to individual sub-configuration Chris@0: // pages. Chris@0: $this->drupalLogin($this->adminUser); Chris@0: $this->drupalGet($page); Chris@0: $this->assertLinkByHref('admin/config'); Chris@0: $this->assertLinkByHref('admin/config/regional/settings'); Chris@0: $this->assertLinkByHref('admin/config/regional/date-time'); Chris@0: $this->assertLinkByHref('admin/config/regional/language'); Chris@0: $this->assertNoLinkByHref('admin/config/regional/language/detection/session'); Chris@0: $this->assertNoLinkByHref('admin/config/regional/language/detection/url'); Chris@0: $this->assertLinkByHref('admin/config/regional/translate'); Chris@0: // On admin/index only, the administrator should also see a "Configure Chris@0: // permissions" link for the Locale module. Chris@0: if ($page == 'admin/index') { Chris@0: $this->assertLinkByHref("admin/people/permissions#module-locale"); Chris@0: } Chris@0: Chris@0: // For a less privileged user, verify that there are no links to Locale's Chris@0: // primary configuration pages, but a link to the translate page exists. Chris@0: $this->drupalLogin($this->webUser); Chris@0: $this->drupalGet($page); Chris@0: $this->assertLinkByHref('admin/config'); Chris@0: $this->assertNoLinkByHref('admin/config/regional/settings'); Chris@0: $this->assertNoLinkByHref('admin/config/regional/date-time'); Chris@0: $this->assertNoLinkByHref('admin/config/regional/language'); Chris@0: $this->assertNoLinkByHref('admin/config/regional/language/detection/session'); Chris@0: $this->assertNoLinkByHref('admin/config/regional/language/detection/url'); Chris@0: $this->assertLinkByHref('admin/config/regional/translate'); Chris@0: // This user cannot configure permissions, so even on admin/index should Chris@0: // not see a "Configure permissions" link for the Locale module. Chris@0: if ($page == 'admin/index') { Chris@0: $this->assertNoLinkByHref("admin/people/permissions#module-locale"); Chris@0: } Chris@0: } Chris@0: } Chris@0: Chris@0: /** Chris@0: * Returns all top level menu links. Chris@0: * Chris@0: * @return \Drupal\Core\Menu\MenuLinkInterface[] Chris@0: */ Chris@0: protected function getTopLevelMenuLinks() { Chris@0: $menu_tree = \Drupal::menuTree(); Chris@0: Chris@0: // The system.admin link is normally the parent of all top-level admin links. Chris@0: $parameters = new MenuTreeParameters(); Chris@0: $parameters->setRoot('system.admin')->excludeRoot()->setTopLevelOnly()->onlyEnabledLinks(); Chris@0: $tree = $menu_tree->load(NULL, $parameters); Chris@0: $manipulators = [ Chris@0: ['callable' => 'menu.default_tree_manipulators:checkAccess'], Chris@0: ['callable' => 'menu.default_tree_manipulators:flatten'], Chris@0: ]; Chris@0: $tree = $menu_tree->transform($tree, $manipulators); Chris@0: Chris@0: // Transform the tree to a list of menu links. Chris@0: $menu_links = []; Chris@0: foreach ($tree as $element) { Chris@0: $menu_links[] = $element->link; Chris@0: } Chris@0: Chris@0: return $menu_links; Chris@0: } Chris@0: Chris@0: /** Chris@0: * Test compact mode. Chris@0: */ Chris@0: public function testCompactMode() { Chris@0: // The front page defaults to 'user/login', which redirects to 'user/{user}' Chris@0: // for authenticated users. We cannot use '', since this does not Chris@0: // match the redirected url. Chris@0: $frontpage_url = 'user/' . $this->adminUser->id(); Chris@0: Chris@0: $this->drupalGet('admin/compact/on'); Chris@0: $this->assertResponse(200, 'A valid page is returned after turning on compact mode.'); Chris@0: $this->assertUrl($frontpage_url, [], 'The user is redirected to the front page after turning on compact mode.'); Chris@0: $this->assertTrue($this->cookies['Drupal.visitor.admin_compact_mode']['value'], 'Compact mode turns on.'); Chris@0: $this->drupalGet('admin/compact/on'); Chris@0: $this->assertTrue($this->cookies['Drupal.visitor.admin_compact_mode']['value'], 'Compact mode remains on after a repeat call.'); Chris@0: $this->drupalGet(''); Chris@0: $this->assertTrue($this->cookies['Drupal.visitor.admin_compact_mode']['value'], 'Compact mode persists on new requests.'); Chris@0: Chris@0: $this->drupalGet('admin/compact/off'); Chris@0: $this->assertResponse(200, 'A valid page is returned after turning off compact mode.'); Chris@0: $this->assertUrl($frontpage_url, [], 'The user is redirected to the front page after turning off compact mode.'); Chris@0: $this->assertEqual($this->cookies['Drupal.visitor.admin_compact_mode']['value'], 'deleted', 'Compact mode turns off.'); Chris@0: $this->drupalGet('admin/compact/off'); Chris@0: $this->assertEqual($this->cookies['Drupal.visitor.admin_compact_mode']['value'], 'deleted', 'Compact mode remains off after a repeat call.'); Chris@0: $this->drupalGet(''); Chris@0: $this->assertTrue($this->cookies['Drupal.visitor.admin_compact_mode']['value'], 'Compact mode persists on new requests.'); Chris@0: } Chris@0: Chris@0: }