Loading tests/modules/search_api_test_views/search_api_test_views.module +18 −0 Original line number Diff line number Diff line Loading @@ -7,9 +7,11 @@ use Drupal\Component\Render\FormattableMarkup; use Drupal\Core\Cache\RefinableCacheableDependencyInterface; use Drupal\Core\Database\Query\SelectInterface; use Drupal\Core\Entity\EntityInterface; use Drupal\Core\Entity\EntityListBuilder; use Drupal\search_api\Query\QueryInterface; use Drupal\search_api\SearchApiException; /** * Implements hook_search_api_query_alter(). Loading Loading @@ -106,3 +108,19 @@ function search_api_test_views_node_view_alter(array &$build) { '@result' => $result ? 'TRUE' : 'FALSE', ]); } /** * Implements hook_search_api_db_query_alter(). * * Throws an exception when the search is executed if the * "search_api_test_views.throw_exception" state key is set. */ function search_api_test_views_search_api_db_query_alter(SelectInterface &$db_query, QueryInterface $query) { $throw_exception = \Drupal::state()->get('search_api_test_views.throw_exception', FALSE); if ($throw_exception) { if ($query instanceof RefinableCacheableDependencyInterface) { $query->mergeCacheMaxAge(0); } throw new SearchApiException('Test exception thrown from search_api_test_views_search_api_query_alter().'); } } tests/src/Functional/CacheabilityTest.php +16 −0 Original line number Diff line number Diff line Loading @@ -141,4 +141,20 @@ class CacheabilityTest extends SearchApiBrowserTestBase { $this->assertSession()->pageTextContains('Displaying 5 search results'); } /** * Tests that exceptions during searches are handled correctly. */ public function testExceptionHandling(): void { $state = \Drupal::state(); $state->set('search_api_test_views.throw_exception', TRUE); $this->drupalGet('search-api-test-search-view-caching-tag'); $this->assertSession()->pageTextContains('Test exception thrown from search_api_test_views_search_api_query_alter().'); $state->set('search_api_test_views.throw_exception', FALSE); $this->drupalGet('search-api-test-search-view-caching-tag'); $this->assertSession()->pageTextNotContains('Test exception thrown from search_api_test_views_search_api_query_alter().'); $this->assertSession()->pageTextContains('Displaying 5 search results'); $this->assertSession()->pageTextContains('foo test'); } } Loading
tests/modules/search_api_test_views/search_api_test_views.module +18 −0 Original line number Diff line number Diff line Loading @@ -7,9 +7,11 @@ use Drupal\Component\Render\FormattableMarkup; use Drupal\Core\Cache\RefinableCacheableDependencyInterface; use Drupal\Core\Database\Query\SelectInterface; use Drupal\Core\Entity\EntityInterface; use Drupal\Core\Entity\EntityListBuilder; use Drupal\search_api\Query\QueryInterface; use Drupal\search_api\SearchApiException; /** * Implements hook_search_api_query_alter(). Loading Loading @@ -106,3 +108,19 @@ function search_api_test_views_node_view_alter(array &$build) { '@result' => $result ? 'TRUE' : 'FALSE', ]); } /** * Implements hook_search_api_db_query_alter(). * * Throws an exception when the search is executed if the * "search_api_test_views.throw_exception" state key is set. */ function search_api_test_views_search_api_db_query_alter(SelectInterface &$db_query, QueryInterface $query) { $throw_exception = \Drupal::state()->get('search_api_test_views.throw_exception', FALSE); if ($throw_exception) { if ($query instanceof RefinableCacheableDependencyInterface) { $query->mergeCacheMaxAge(0); } throw new SearchApiException('Test exception thrown from search_api_test_views_search_api_query_alter().'); } }
tests/src/Functional/CacheabilityTest.php +16 −0 Original line number Diff line number Diff line Loading @@ -141,4 +141,20 @@ class CacheabilityTest extends SearchApiBrowserTestBase { $this->assertSession()->pageTextContains('Displaying 5 search results'); } /** * Tests that exceptions during searches are handled correctly. */ public function testExceptionHandling(): void { $state = \Drupal::state(); $state->set('search_api_test_views.throw_exception', TRUE); $this->drupalGet('search-api-test-search-view-caching-tag'); $this->assertSession()->pageTextContains('Test exception thrown from search_api_test_views_search_api_query_alter().'); $state->set('search_api_test_views.throw_exception', FALSE); $this->drupalGet('search-api-test-search-view-caching-tag'); $this->assertSession()->pageTextNotContains('Test exception thrown from search_api_test_views_search_api_query_alter().'); $this->assertSession()->pageTextContains('Displaying 5 search results'); $this->assertSession()->pageTextContains('foo test'); } }