public function ConfigOverrideIntegrationTest::testConfigOverrideIntegration in Search API 8
Tests that the UI works correctly with config entity overrides present.
File
- tests/
src/ Functional/ ConfigOverrideIntegrationTest.php, line 56
Class
- ConfigOverrideIntegrationTest
- Contains integration tests for config entities with overrides.
Namespace
Drupal\Tests\search_api\FunctionalCode
public function testConfigOverrideIntegration() {
$base_path = 'admin/config/search/search-api';
$new_user = $this
->drupalCreateUser();
// Set up a trap through method overrides to ensure that critical methods
// are only ever called with the correct, overridden backend configuration.
$override = [
MethodOverrides::class,
'overrideTestBackendMethod',
];
$methods = [
'postInsert',
'preUpdate',
'postUpdate',
'addIndex',
'updateIndex',
'removeIndex',
'deleteItems',
'deleteAllIndexItems',
'search',
'isAvailable',
'getDiscouragedProcessors',
];
foreach ($methods as $method) {
$this
->setMethodOverride('backend', $method, $override);
}
// indexItems() needs a special override since it needs to return item IDs.
$override = [
MethodOverrides::class,
'overrideTestBackendIndexItems',
];
$this
->setMethodOverride('backend', 'indexItems', $override);
// Add the server.
$this
->drupalGet("{$base_path}/add-server");
$edit = [
'id' => 'test_server',
'name' => 'Test server',
'backend' => 'search_api_test',
];
$this
->submitForm($edit, 'Save');
$this
->assertSession()
->pageTextContains('The server was successfully saved.');
$this
->assertSession()
->addressEquals($base_path . '/server/test_server');
// Add the index.
$this
->drupalGet("{$base_path}/add-index");
$edit = [
'id' => 'test_index',
'name' => 'Test index',
'server' => 'test_server',
'datasources[entity:user]' => TRUE,
'options[index_directly]' => FALSE,
];
$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($base_path . '/index/test_index');
// Overview page displays overridden values.
$this
->drupalGet($base_path);
$this
->assertSession()
->pageTextContains('Overridden server');
$this
->assertSession()
->responseNotContains('Test server');
$this
->assertSession()
->pageTextContains('Overridden index');
$this
->assertSession()
->responseNotContains('Test index');
// Normal server page displays overridden values.
$this
->drupalGet($base_path . '/server/test_server');
$this
->assertSession()
->pageTextContains('Overridden server');
$this
->assertSession()
->responseNotContains('Test server');
$this
->assertSession()
->pageTextContains('Overridden index');
$this
->assertSession()
->responseNotContains('Test index');
$this
->assertSession()
->pageTextContains('enabled');
$this
->assertSession()
->responseNotContains('disabled');
// Disabling the server isn't possible.
$this
->clickLink('disable');
$this
->assertSession()
->pageTextContains('Test server');
$this
->assertSession()
->responseNotContains('Overridden server');
$this
->submitForm([], 'Disable');
$this
->drupalGet($base_path . '/server/test_server');
$this
->assertSession()
->pageTextContains('enabled');
$this
->assertSession()
->responseNotContains('disabled');
// The "Edit" form shows the override-free server.
$this
->drupalGet($base_path . '/server/test_server/edit');
$this
->assertSession()
->pageTextContains('Test server');
$this
->assertSession()
->responseNotContains('Overridden server');
$this
->assertSession()
->responseNotContains('foobar');
$edit = [
'name' => 'New server name',
'backend_config[test]' => 'nonsense',
];
$this
->submitForm($edit, 'Save');
// "View" tab still shows overrides, "Edit" tab still doesn't.
$this
->assertSession()
->addressEquals($base_path . '/server/test_server');
$this
->assertSession()
->pageTextContains('Overridden server');
$this
->assertSession()
->responseNotContains('New server name');
$this
->drupalGet($base_path . '/server/test_server/edit');
$this
->assertSession()
->pageTextContains('New server name');
$this
->assertSession()
->responseNotContains('Overridden server');
$this
->assertSession()
->responseContains('nonsense');
$this
->assertSession()
->responseNotContains('foobar');
// Server "clear" form and command use overridden server.
$this
->drupalGet($base_path . '/server/test_server/clear');
$this
->assertSession()
->pageTextContains('Overridden server');
$this
->assertSession()
->responseNotContains('New server name');
$this
->submitForm([], 'Confirm');
// Index "View" tab uses overridden index and server.
$this
->drupalGet($base_path . '/index/test_index');
$this
->assertSession()
->pageTextContains('Overridden index');
$this
->assertSession()
->responseNotContains('Test index');
$this
->assertSession()
->pageTextContains('Overridden server');
$this
->assertSession()
->responseNotContains('New server name');
$this
->assertSession()
->pageTextContains('enabled');
$this
->assertSession()
->responseNotContains('disabled');
// Index items, see if that triggers an error.
$this
->submitForm([], 'Index now');
$this
->checkForMetaRefresh();
// Same for deleting an item.
$new_user
->delete();
// The "Edit", "Fields", "Processors" and "Disable" tabs/forms should use
// the override-free index version.
foreach ([
'edit',
'fields',
'fields/add/nojs',
'processors',
'disable',
] as $tab) {
$this
->drupalGet("{$base_path}/index/test_index/{$tab}");
$this
->assertSession()
->pageTextContains('Test index');
$this
->assertSession()
->responseNotContains('Overridden index');
}
// The "Reindex" and "Clear" forms and commands both use the overridden
// index.
foreach ([
'reindex',
'clear',
] as $tab) {
$this
->drupalGet("{$base_path}/index/test_index/{$tab}");
$this
->assertSession()
->pageTextContains('Overridden index');
$this
->assertSession()
->responseNotContains('Test index');
}
// Clear the index, see if that triggers an error.
$this
->submitForm([], 'Confirm');
// The server "Delete" form also uses overrides.
$this
->drupalGet($base_path . '/server/test_server/delete');
$this
->assertSession()
->pageTextContains('Overridden server');
$this
->assertSession()
->responseNotContains('New server name');
$this
->assertSession()
->pageTextContains('Overridden index');
$this
->assertSession()
->responseNotContains('Test index');
// Delete the server, see if that triggers any errors.
$this
->submitForm([], 'Delete');
}