search_api-8.x-1.15/tests/src/Kernel/Index/IndexImportTest.php
tests/src/Kernel/Index/IndexImportTest.php
<?php
namespace Drupal\Tests\search_api\Kernel\Index;
use Drupal\KernelTests\KernelTestBase;
use Drupal\search_api\Utility\Utility;
/**
* Tests whether importing of index configuration works correctly.
*
* @group search_api
*/
class IndexImportTest extends KernelTestBase {
/**
* The search index storage.
*
* @var \Drupal\Core\Config\Entity\ConfigEntityStorageInterface
*/
protected $storage;
/**
* Modules to enable for this test.
*
* @var string[]
*/
public static $modules = [
'field',
'search_api',
'search_api_db',
'search_api_test_db',
'search_api_test',
'user',
'system',
'entity_test',
'text',
];
/**
* {@inheritdoc}
*/
public function setUp() {
parent::setUp();
$this->installSchema('search_api', ['search_api_item']);
$this->installSchema('user', ['users_data']);
$this->installEntitySchema('entity_test_mulrev_changed');
$this->installEntitySchema('search_api_task');
$this->installConfig('search_api');
// 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);
}
$this->installConfig(['search_api_test_db']);
$this->storage = $this->container->get('entity_type.manager')->getStorage('search_api_index');
}
/**
* Tests processors are set after import.
*/
public function testIndexImport() {
// Check initial conditions.
/** @var \Drupal\search_api\IndexInterface $index */
$index = $this->storage->load('database_search_index');
$this->assertFalse($index->isValidProcessor('stopwords'), 'Processor is not in index');
// Prepare the import by creating a copy of the active config in sync.
/** @var \Drupal\Core\Config\StorageInterface $sync */
$sync = $this->container->get('config.storage.sync');
/** @var \Drupal\Core\Config\StorageInterface $active */
$active = $this->container->get('config.storage');
$this->copyConfig($active, $sync);
// Make changes to the configuration in "sync" so there actually is
// something to import.
$expected_stopwords = ['a', 'an', 'and', 'are', 'as'];
$import_config = $sync->read('search_api.index.database_search_index');
$import_config['processor_settings']['stopwords'] = [
'weights' => [
'preprocess_query' => -10,
'postprocess_query' => -10,
],
'fields' => [
'name',
],
'stopwords' => $expected_stopwords,
];
$sync->write('search_api.index.database_search_index', $import_config);
// The system.site key is required for import validation.
$sync->write('system.site', []);
// Import the test configuration.
$config_importer = $this->configImporter();
$this->assertTrue($config_importer->hasUnprocessedConfigurationChanges(), 'Import prepared');
$config_importer->import();
// Ensure the static cache is clear and check that our change was correctly
// imported.
$this->storage->resetCache(['database_search_index']);
/** @var \Drupal\search_api\IndexInterface $imported_index */
$imported_index = $this->storage->load('database_search_index');
$this->assertTrue($imported_index->isValidProcessor('stopwords'), 'Processor is in index after import');
// Check that the processor does not have the default configuration.
$processor_config = $imported_index->getProcessor('stopwords')->getConfiguration();
$this->assertArrayHasKey('stopwords', $processor_config, 'Stopwords are configured');
$actual_stopwords = $processor_config['stopwords'];
$this->assertEquals($expected_stopwords, $actual_stopwords, 'Processor config was correctly set during import');
}
}
