Commit 30914cd0 authored by Thomas Seidl's avatar Thomas Seidl
Browse files

Follow-up to #3296006 by drunken monkey: Added test for caching of exception results.

parent eb265cd9
Loading
Loading
Loading
Loading
+18 −0
Original line number Diff line number Diff line
@@ -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().
@@ -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().');
  }
}
+16 −0
Original line number Diff line number Diff line
@@ -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');
  }

}