search_api-8.x-1.15/tests/src/FunctionalJavascript/AjaxTest.php
tests/src/FunctionalJavascript/AjaxTest.php
<?php
namespace Drupal\Tests\search_api\FunctionalJavascript;
use Drupal\FunctionalJavascriptTests\WebDriverTestBase;
use Drupal\node\Entity\NodeType;
use Drupal\search_api\Utility\Utility;
use Drupal\search_api_test\PluginTestTrait;
/**
* Tests AJAX functionality in the Search API module.
*
* @group search_api
*/
class AjaxTest extends WebDriverTestBase {
use PluginTestTrait;
/**
* {@inheritdoc}
*/
public static $modules = [
'node',
'search_api',
'search_api_db',
'search_api_test',
'field_ui',
'link',
'image',
];
/**
* {@inheritdoc}
*/
public function setUp() {
parent::setUp();
// Create an article node type, if not already present.
if (!NodeType::load('article')) {
$this->drupalCreateContentType([
'type' => 'article',
'name' => 'Article',
]);
}
// Create a page node type, if not already present.
if (!NodeType::load('page')) {
$this->drupalCreateContentType([
'type' => 'page',
'name' => 'Page',
]);
}
// Do not use a batch for tracking the initial items after creating an
// index when running the tests via the GUI. Otherwise, it seems Drupal's
// Batch API gets confused and the test fails.
if (!Utility::isRunningInCli()) {
\Drupal::state()->set('search_api_use_tracking_batch', FALSE);
}
$permissions = [
'administer search_api',
'access administration pages',
'administer nodes',
'bypass node access',
'administer content types',
'administer node fields',
];
$this->drupalLogin($this->drupalCreateUser($permissions));
}
/**
* Tests AJAX functionality in the Search API module.
*/
public function testAjax() {
$this->checkServerBackendAjax();
$this->checkIndexDatasourceAjax();
}
/**
* Tests AJAX display of backend config forms when a new backend is selected.
*/
protected function checkServerBackendAjax() {
$assert_session = $this->assertSession();
$this->drupalGet('admin/config/search/search-api/add-server');
$assert_session->pageTextContains('Database');
$assert_session->pageTextContains('Test backend');
$backend_config = '[data-drupal-selector="edit-backend-config"]';
$assert_session->elementNotExists('css', "$backend_config input");
$assert_session->elementNotExists('css', "$backend_config select");
$assert_session->elementNotExists('css', "$backend_config button");
$this->click('input.form-radio[name="backend"][value="search_api_db"]');
$element = $assert_session->waitForElement('css', "$backend_config input");
$this->assertNotEmpty($element);
$assert_session->elementExists('css', "$backend_config select[name=\"backend_config[min_chars]\"]");
}
/**
* Tests AJAX display of backend config forms when a new backend is selected.
*/
protected function checkIndexDatasourceAjax() {
$assert_session = $this->assertSession();
$this->drupalGet('admin/config/search/search-api/add-index');
$assert_session->pageTextContains('Datasources');
$assert_session->pageTextContains('Content');
$datasource_config = '[data-drupal-selector="edit-datasource-configs"]';
$assert_session->elementNotExists('css', "$datasource_config input");
$assert_session->elementNotExists('css', "$datasource_config select");
$assert_session->elementNotExists('css', "$datasource_config button");
$this->click('input.form-checkbox[name="datasources[entity:node]"]');
$element = $assert_session->waitForElement('css', "$datasource_config input");
$this->assertNotEmpty($element);
$assert_session->elementExists('css', "$datasource_config [name=\"datasource_configs[entity:node][bundles][default]\"]");
$field = $assert_session
->elementExists('css', 'input[data-drupal-selector="edit-name"]');
$field->setValue('Test index');
$element = $assert_session->waitForElementVisible('css', '.field-suffix .machine-name-value');
$this->assertNotEmpty($element);
$this->assertEquals('test_index', $element->getText());
$this->click('[data-drupal-selector="edit-actions-submit"]');
}
/**
* Tests JS-based display of processors when they are added.
*/
protected function checkIndexProcessorJavascript() {
$assert_session = $this->assertSession();
$this->drupalGet('admin/config/search/search-api/index/test_index/processors');
$assert_session->pageTextContains('Highlight');
$assert_session->checkboxNotChecked('status[highlight]');
$postprocess = '[data-drupal-selector="edit-weights-postprocess-query"]';
$postprocess_highlight = $postprocess . ' [data-drupal-selector="edit-weights-postprocess-query-order-highlight"]';
$element = $assert_session->elementExists('css', $postprocess_highlight);
$this->assertFalse($element->isVisible());
$settings = '[data-drupal-selector="edit-processor-settings"]';
$highlight_settings = $settings . ' a[href="#edit-processors-html-filter-settings"]';
$element = $assert_session->elementExists('css', $highlight_settings);
$this->assertFalse($element->isVisible());
$this->click('input.form-checkbox[name="status[highlight]"]');
$element = $assert_session->elementExists('css', $postprocess_highlight);
$this->assertFalse($element->isVisible());
$element = $assert_session->elementExists('css', $highlight_settings);
$this->assertFalse($element->isVisible());
}
}
