You are here

public function AdminToolbarToolsSearchTest::testToolbarSearch in Admin Toolbar 8.2

Same name and namespace in other branches
  1. 3.x admin_toolbar_search/tests/src/FunctionalJavascript/AdminToolbarToolsSearchTest.php \Drupal\Tests\admin_toolbar_search\FunctionalJavascript\AdminToolbarToolsSearchTest::testToolbarSearch()

Tests search functionality with admin_toolbar_tools enabled.

File

admin_toolbar_search/tests/src/FunctionalJavascript/AdminToolbarToolsSearchTest.php, line 109

Class

AdminToolbarToolsSearchTest
Test the functionality of admin toolbar search.

Namespace

Drupal\Tests\admin_toolbar_search\FunctionalJavascript

Code

public function testToolbarSearch() {
  $search_tab = '#admin-toolbar-search-tab';
  $search_toolbar_item = '#toolbar-item-administration-search';
  $search_tray = '#toolbar-item-administration-search-tray';
  $this
    ->drupalLogin($this->adminUser);
  $assert_session = $this
    ->assertSession();
  $assert_session
    ->responseContains('admin.toolbar_search.css');
  $assert_session
    ->responseContains('admin_toolbar_search.js');
  $assert_session
    ->waitForElementVisible('css', $search_tab);
  $assert_session
    ->waitForElementVisible('css', $search_toolbar_item);
  $assert_session
    ->waitForElementVisible('css', $search_tray);
  $this
    ->assertSuggestionContains('basic', 'admin/config/system/site-information');

  // Rebuild menu items.
  drupal_flush_all_caches();

  // Test that the route admin_toolbar.search returns expected json.
  $this
    ->drupalGet('/admin/admin-toolbar-search');
  $search_menus = [
    'maeve',
    'milo',
    'nora',
    'olivia',
    'ophelia',
    'posie',
    'rose',
    'silas',
    'soren',
  ];
  $toolbar_menus = [
    'ada',
    'amara',
    'amelia',
    'arabella',
    'asher',
    'astrid',
    'atticus',
    'aurora',
    'ava',
  ];
  foreach ($search_menus as $menu_id) {
    $assert_session
      ->responseContains('\\/admin\\/structure\\/menu\\/manage\\/' . $menu_id);
  }
  foreach ($toolbar_menus as $menu_id) {
    $assert_session
      ->responseNotContains('\\/admin\\/structure\\/menu\\/manage\\/' . $menu_id);
  }
  $this
    ->drupalGet('/admin');
  foreach ($search_menus as $menu_id) {
    $this
      ->assertMenuDoesNotHaveHref('/admin/structure/menu/manage/' . $menu_id);
  }
  foreach ($toolbar_menus as $menu_id) {
    $this
      ->assertMenuHasHref('/admin/structure/menu/manage/' . $menu_id);
  }
  $this
    ->drupalGet('admin/structure/types/manage/article/fields');
  $assert_session
    ->waitForElementVisible('css', $search_tray);
  $this
    ->assertSuggestionContains('article manage fields', '/admin/structure/types/manage/article/fields');
  $suggestions = $assert_session
    ->waitForElementVisible('css', 'ul.ui-autocomplete');

  // Assert there is only one suggestion with a link to
  // /admin/structure/types/manage/article/fields.
  $count = count($suggestions
    ->findAll('xpath', '//span[contains(text(), "/admin/structure/types/manage/article/fields")]'));
  $this
    ->assertEquals(1, $count);

  // Test that bundle within admin toolbar appears in search.
  $this
    ->assertSuggestionContains('lola', 'admin/structure/media/manage/lola/fields');

  // Assert that a link after the limit doesn't appear in admin toolbar.
  $zora_url = '/admin/structure/media/manage/zora/fields';
  $assert_session
    ->elementNotContains('css', '#toolbar-administration', $zora_url);

  // Assert that a link excluded from admin toolbar appears in search.
  $this
    ->assertSuggestionContains('zora', $zora_url);

  // Test that adding a new bundle updates the extra links loaded from
  // admin_toolbar.search route.
  $this
    ->createMediaType('image', [
    'id' => 'zuzu',
    'label' => 'Zuzu',
  ]);
  $this
    ->drupalGet('admin');
  $assert_session
    ->waitForElementVisible('css', $search_tray);
  $this
    ->assertSuggestionContains('zuzu', '/admin/structure/media/manage/zuzu/fields');

  // Test that deleting a bundle updates the extra links loaded from
  // admin_toolbar.search route.
  $zora = MediaType::load('zora');
  $zora
    ->delete();
  $this
    ->getSession()
    ->reload();
  $assert_session
    ->waitForElementVisible('css', $search_tray);
  $this
    ->assertSuggestionNotContains('zora', $zora);
}