public function SearchConfigSettingsFormTest::testSearchModuleDisabling in Drupal 9
Same name and namespace in other branches
- 8 core/modules/search/tests/src/Functional/SearchConfigSettingsFormTest.php \Drupal\Tests\search\Functional\SearchConfigSettingsFormTest::testSearchModuleDisabling()
Verifies that you can disable individual search plugins.
File
- core/
modules/ search/ tests/ src/ Functional/ SearchConfigSettingsFormTest.php, line 160
Class
- SearchConfigSettingsFormTest
- Verify the search config settings form.
Namespace
Drupal\Tests\search\FunctionalCode
public function testSearchModuleDisabling() {
// Array of search plugins to test: 'keys' are the keywords to search for,
// and 'text' is the text to assert is on the results page.
$plugin_info = [
'node_search' => [
'keys' => 'pizza',
'text' => $this->searchNode
->label(),
],
'user_search' => [
'keys' => $this->searchUser
->getAccountName(),
'text' => $this->searchUser
->getEmail(),
],
'dummy_search_type' => [
'keys' => 'foo',
'text' => 'Dummy search snippet to display',
],
];
$plugins = array_keys($plugin_info);
/** @var \Drupal\search\SearchPageInterface[] $entities */
$entities = SearchPage::loadMultiple();
// Disable all of the search pages.
foreach ($entities as $entity) {
$entity
->disable()
->save();
}
// Test each plugin if it's enabled as the only search plugin.
foreach ($entities as $entity_id => $entity) {
$this
->setDefaultThroughUi($entity_id);
// Run a search from the correct search URL.
$info = $plugin_info[$entity_id];
$this
->drupalGet('search/' . $entity
->getPath(), [
'query' => [
'keys' => $info['keys'],
],
]);
$this
->assertSession()
->statusCodeEquals(200);
$this
->assertSession()
->pageTextNotContains('no results');
$this
->assertSession()
->pageTextContains($info['text']);
// Verify that other plugin search tab labels are not visible.
foreach ($plugins as $other) {
if ($other != $entity_id) {
$path = 'search/' . $entities[$other]
->getPath();
$this
->assertSession()
->elementNotExists('xpath', '//ul[@class="tabs primary"]/li/a[@data-drupal-link-system-path="' . $path . '"]');
}
}
// Run a search from the search block on the node page. Verify you get
// to this plugin's search results page.
$terms = [
'keys' => $info['keys'],
];
$this
->drupalGet('node');
$this
->submitForm($terms, 'Search');
$current = $this
->getURL();
$expected = Url::fromRoute('search.view_' . $entity
->id(), [], [
'query' => [
'keys' => $info['keys'],
],
'absolute' => TRUE,
])
->toString();
$this
->assertEquals($expected, $current, 'Block redirected to right search page');
// Try an invalid search path, which should 404.
$this
->drupalGet('search/not_a_plugin_path');
$this
->assertSession()
->statusCodeEquals(404);
$entity
->disable()
->save();
}
// Set the node search as default.
$this
->setDefaultThroughUi('node_search');
// Test with all search plugins enabled. When you go to the search
// page or run search, all plugins should be shown.
foreach ($entities as $entity) {
$entity
->enable()
->save();
}
\Drupal::service('router.builder')
->rebuild();
$paths = [
[
'path' => 'search/node',
'options' => [
'query' => [
'keys' => 'pizza',
],
],
],
[
'path' => 'search/node',
'options' => [],
],
];
foreach ($paths as $item) {
$this
->drupalGet($item['path'], $item['options']);
foreach ($plugins as $entity_id) {
$path = 'search/' . $entities[$entity_id]
->getPath();
$label = $entities[$entity_id]
->label();
$this
->assertSession()
->elementTextContains('xpath', '//ul[@class="tabs primary"]/li/a[@data-drupal-link-system-path="' . $path . '"]', $label);
}
}
}