1 search.test SearchConfigSettingsForm::testSearchModuleDisabling()

Verify that you can disable individual search modules.

File

core/modules/search/tests/search.test, line 1463
Tests for search.module.

Class

SearchConfigSettingsForm
Test config page.

Code

function testSearchModuleDisabling() {
  // Array of search modules to test: 'path' is the search path, 'title' is
  // the tab title, 'keys' are the keywords to search for, and 'text' is
  // the text to assert is on the results page.
  $module_info = array(
    'node' => array(
      'path' => 'node',
      'title' => 'Content',
      'keys' => 'pizza',
      'text' => $this->search_node->title,
    ),
    'user' => array(
      'path' => 'user',
      'title' => 'User',
      'keys' => $this->search_user->name,
      'text' => $this->search_user->mail,
    ),
    'search_extra_type' => array(
      'path' => 'dummy_path',
      'title' => 'Dummy search type',
      'keys' => 'foo',
      'text' => 'Dummy search snippet to display',
    ),
  );
  $modules = array_keys($module_info);

  // Test each module if it's enabled as the only search module.
  foreach ($modules as $module) {
    // Enable the one module and disable other ones.
    $info = $module_info[$module];
    $edit = array();
    foreach ($modules as $other) {
      $edit['search_active_modules[' . $other . ']'] = (($other == $module) ? $module : FALSE);
    }
    $edit['search_default_module'] = $module;
    $this->backdropPost('admin/config/search/settings', $edit, t('Save configuration'));

    // Run a search from the correct search URL.
    $this->backdropGet('search/' . $info['path'] . '/' . $info['keys']);
    $this->assertNoText('no results', $info['title'] . ' search found results');
    $this->assertText($info['text'], 'Correct search text found');

    // Verify that other module search tab titles are not visible.
    foreach ($modules as $other) {
      if ($other != $module) {
        $title = $module_info[$other]['title'];
        $this->assertNoText($title, $title . ' search tab is not shown');
      }
    }

    // Run a search from the search block on the node page. Verify you get
    // to this module's search results page.
    $terms = array('search_block_form' => $info['keys']);
    $this->backdropPost('user', $terms, t('Search'));
    $this->assertEqual(
    $this->getURL(), 
    url('search/' . $info['path'] . '/' . $info['keys'], array('absolute' => TRUE)), 
    'Block redirected to right search page');

    // Try an invalid search path. Should redirect to our active module.
    $this->backdropGet('search/not_a_module_path');
    $this->assertEqual(
    $this->getURL(), 
    url('search/' . $info['path'], array('absolute' => TRUE)), 
    'Invalid search path redirected to default search page');
  }

  // Test with all search modules enabled. When you go to the search
  // page or run search, all modules should be shown.
  $edit = array();
  foreach ($modules as $module) {
    $edit['search_active_modules[' . $module . ']'] = $module;
  }
  $edit['search_default_module'] = 'node';

  $this->backdropPost('admin/config/search/settings', $edit, t('Save configuration'));

  foreach (array('search/node/pizza', 'search/node') as $path) {
    $this->backdropGet($path);
    foreach ($modules as $module) {
      $title = $module_info[$module]['title'];
      $this->assertText($title, format_string('%title search tab is shown', array('%title' => $title)));
    }
  }
}