protected function IntegrationTest::createIndex in Search API 8
Tests creating a search index via the UI.
1 call to IntegrationTest::createIndex()
- IntegrationTest::testFramework in tests/
src/ Functional/ IntegrationTest.php  - Tests various operations via the Search API's admin UI.
 
File
- tests/
src/ Functional/ IntegrationTest.php, line 277  
Class
- IntegrationTest
 - Tests the overall functionality of the Search API framework and admin UI.
 
Namespace
Drupal\Tests\search_api\FunctionalCode
protected function createIndex() {
  $settings_path = 'admin/config/search/search-api/add-index';
  $this->indexId = 'test_index';
  $index_description = 'An >index< used for &! tęsting.';
  $index_name = 'Search >API< test &!^* index';
  $index_datasource = 'entity:node';
  $this
    ->drupalGet($settings_path);
  $this
    ->assertSession()
    ->statusCodeEquals(200);
  $this
    ->assertSession()
    ->pageTextNotContains('No UI datasource');
  $this
    ->assertSession()
    ->pageTextNotContains('No UI tracker');
  // Make sure plugin labels are only escaped when necessary.
  $this
    ->assertHtmlEscaped('"Test" tracker');
  $this
    ->assertHtmlEscaped('"String label" test tracker');
  $this
    ->assertHtmlEscaped('"Test" datasource');
  // Make sure datasource and tracker plugin descriptions are displayed.
  $dummy_index = Index::create();
  foreach ([
    'createDatasourcePlugins',
    'createTrackerPlugins',
  ] as $method) {
    /** @var \Drupal\search_api\Plugin\IndexPluginInterface[] $plugins */
    $plugins = \Drupal::getContainer()
      ->get('search_api.plugin_helper')
      ->{$method}($dummy_index);
    foreach ($plugins as $plugin) {
      if ($plugin
        ->isHidden()) {
        continue;
      }
      $description = Utility::escapeHtml($plugin
        ->getDescription());
      $this
        ->assertSession()
        ->responseContains($description);
    }
  }
  // Test form validation (required fields).
  $edit = [
    'status' => 1,
    'description' => $index_description,
  ];
  $this
    ->submitForm($edit, 'Save');
  $this
    ->assertSession()
    ->pageTextContains('Index name field is required.');
  $this
    ->assertSession()
    ->pageTextContains('Machine-readable name field is required.');
  $this
    ->assertSession()
    ->pageTextContains('Datasources field is required.');
  $edit = [
    'name' => $index_name,
    'id' => $this->indexId,
    'status' => 1,
    'description' => $index_description,
    'server' => $this->serverId,
    'datasources[' . $index_datasource . ']' => TRUE,
  ];
  $this
    ->submitForm($edit, 'Save');
  $this
    ->assertSession()
    ->pageTextContains('Please configure the used datasources.');
  $this
    ->submitForm([], 'Save');
  $this
    ->checkForMetaRefresh();
  $this
    ->assertSession()
    ->pageTextContains('The index was successfully saved.');
  $this
    ->assertSession()
    ->addressEquals($this
    ->getIndexPath());
  $this
    ->assertHtmlEscaped($index_name);
  $this
    ->drupalGet($this
    ->getIndexPath('edit'));
  $this
    ->assertHtmlEscaped($index_name);
  $index = $this
    ->getIndex(TRUE);
  $this
    ->assertInstanceOf(IndexInterface::class, $index, 'Index was correctly created.');
  $this
    ->assertEquals($edit['name'], $index
    ->label(), 'Name correctly inserted.');
  $this
    ->assertEquals($edit['id'], $index
    ->id(), 'Index ID correctly inserted.');
  $this
    ->assertTrue($index
    ->status(), 'Index status correctly inserted.');
  $this
    ->assertEquals($edit['description'], $index
    ->getDescription(), 'Index ID correctly inserted.');
  $this
    ->assertEquals($edit['server'], $index
    ->getServerId(), 'Index server ID correctly inserted.');
  $this
    ->assertEquals($index_datasource, $index
    ->getDatasourceIds()[0], 'Index datasource id correctly inserted.');
  // Test the "Save and add fields" button.
  $index2_id = 'test_index2';
  $edit['id'] = $index2_id;
  unset($edit['server']);
  $this
    ->drupalGet($settings_path);
  $this
    ->submitForm($edit, 'Save and add fields');
  $this
    ->assertSession()
    ->pageTextContains('Please configure the used datasources.');
  $this
    ->submitForm([], 'Save and add fields');
  $this
    ->assertSession()
    ->pageTextContains('The index was successfully saved.');
  $this->indexStorage
    ->resetCache([
    $index2_id,
  ]);
  $index = $this->indexStorage
    ->load($index2_id);
  $this
    ->assertSession()
    ->addressEquals($index
    ->toUrl('add-fields'));
  $this
    ->drupalGet('admin/config/search/search-api');
  $this
    ->assertHtmlEscaped($index_name);
  $this
    ->assertHtmlEscaped($index_description);
}