public function ViewsTest::testSearchPlugin in Search API Autocomplete 8
Tests that valid search plugin definitions are created for search views.
File
- tests/
src/ Kernel/ ViewsTest.php, line 60
Class
- ViewsTest
- Tests Views integration of the Autocomplete module.
Namespace
Drupal\Tests\search_api_autocomplete\KernelCode
public function testSearchPlugin() {
$index_id = 'autocomplete_search_index';
$plugin_helper = $this->container
->get('search_api_autocomplete.plugin_helper');
$plugins = $plugin_helper
->createSearchPluginsForIndex($index_id);
$view_id = 'views:search_api_autocomplete_test_view';
$this
->assertArrayNotHasKey($view_id, $plugins);
$this
->installConfig('search_api_autocomplete_test');
// To avoid getting the cached derivatives from the Views search plugin
// deriver, we unfortunately need to rebuild the search plugin manager. This
// is probably the simplest way to do it, without too many side effects.
$search_plugin_manager = new SearchPluginManager($this->container
->get('container.namespaces'), $this->container
->get('cache.discovery'), $this->container
->get('module_handler'));
$plugin_helper = new PluginHelper($this->container
->get('plugin.manager.search_api_autocomplete.suggester'), $search_plugin_manager);
$plugins = $plugin_helper
->createSearchPluginsForIndex($index_id);
$this
->assertArrayHasKey($view_id, $plugins);
/** @var \Drupal\search_api_autocomplete\Search\SearchPluginInterface $plugin */
$plugin = $plugins[$view_id];
$this
->assertEquals('Search API Autocomplete Test view', $plugin
->label());
$this
->assertEquals('Search views', $plugin
->getGroupLabel());
$this
->assertEquals('Searches provided by Views', $plugin
->getGroupDescription());
$data = [
'display' => 'page',
'filter' => 'keys',
];
$query = $plugin
->createQuery('foobar', $data);
$this
->assertEquals('foobar', $query
->getOriginalKeys());
$index = $query
->getIndex();
$this
->assertEquals($index_id, $index
->id());
$fields = $query
->getFulltextFields();
$all_fulltext_fields = $index
->getFulltextFields();
$fields = isset($fields) ? $fields : $all_fulltext_fields;
$this
->assertEquals($all_fulltext_fields, $fields);
$query = $plugin
->createQuery('', $data);
$this
->assertNull($query
->getOriginalKeys());
$data = [
'display' => 'page',
'filter' => 'name',
'field' => 'name',
];
$query = $plugin
->createQuery('foobar', $data);
$this
->assertNull($query
->getOriginalKeys());
// @todo Remove check once we depend on Drupal 9.0+.
if (method_exists($this, 'assertStringContainsString')) {
$this
->assertStringContainsString('foobar', (string) $query);
}
else {
$this
->assertContains('foobar', (string) $query);
}
$conditions = $query
->getConditionGroup()
->getConditions();
$conditions = $this
->collectConditions($conditions);
$this
->assertCount(1, $conditions);
$condition = $conditions[0];
$this
->assertEquals('name', $condition
->getField());
$this
->assertEquals('foobar', $condition
->getValue());
$this
->assertEquals($index_id, $query
->getIndex()
->id());
$this
->assertEquals([
'name',
], $query
->getFulltextFields());
}