/** * Tests task system integration for the server's removeIndex() method. */ public function testRemoveIndex() { // Set exception for updateIndex() and removeIndex(), and reset the list of // successful backend method calls. $this->state->set('search_api_test_backend.exception.updateIndex', TRUE); $this->state->set('search_api_test_backend.exception.removeIndex', TRUE); $this->getCalledServerMethods(); // First try to update the index and fail. Then try to remove it and check // that the tasks were set correctly. $this->server->updateIndex($this->index); $this->server->removeIndex($this->index); $this->assertEquals(array(), $this->getCalledServerMethods(), 'updateIndex and removeIndex correctly threw exceptions.'); $tasks = $this->getServerTasks(); if (count($tasks) == 1) { $task_created = $tasks[0]->type === 'removeIndex'; } $this->assertTrue(!empty($task_created), 'The removeIndex task was successfully added and other tasks removed.'); if ($tasks) { $this->assertEquals($this->index->id(), $tasks[0]->index_id, 'The right index ID was used for the removeIndex task.'); } // Check whether other task-system-integrated methods now fail, too. try { $this->server->indexItems($this->index, array()); $this->fail('Pending server tasks did not prevent indexing of items.'); } catch (SearchApiException $e) { $args['%index'] = $this->index->label(); $expected_message = new FormattableMarkup('Could not index items on index %index because pending server tasks could not be executed.', $args); $this->assertEquals($expected_message, $e->getMessage(), 'Pending server tasks prevented indexing of items.'); } $this->assertEquals(array(), $this->getCalledServerMethods(), 'indexItems was not executed.'); $tasks = $this->getServerTasks(); $this->assertEquals(1, count($tasks), 'No task added for indexItems.'); // Let removeIndex() succeed again, then trigger the task execution with a // cron run. $this->state->set("search_api_test_backend.exception.removeIndex", FALSE); search_api_cron(); $this->assertEquals(array(), $this->getServerTasks(), 'Server tasks were correctly executed.'); $this->assertEquals(array('removeIndex'), $this->getCalledServerMethods(), 'Right methods were called during task execution.'); }