View source
<?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;
class AjaxTest extends WebDriverTestBase {
use PluginTestTrait;
public static $modules = [
'node',
'search_api',
'search_api_db',
'search_api_test',
'field_ui',
'link',
'image',
];
protected $defaultTheme = 'stark';
public function setUp() {
parent::setUp();
if (!NodeType::load('article')) {
$this
->drupalCreateContentType([
'type' => 'article',
'name' => 'Article',
]);
}
if (!NodeType::load('page')) {
$this
->drupalCreateContentType([
'type' => 'page',
'name' => 'Page',
]);
}
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));
}
public function testAjax() {
$this
->checkServerBackendAjax();
$this
->checkIndexDatasourceAjax();
}
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]\"]");
}
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"]');
}
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());
}
}