.../search/src/Tests/SearchPageCacheTagsTest.php | 55 ++++++++++++++++++---- 1 file changed, 47 insertions(+), 8 deletions(-) diff --git a/core/modules/search/src/Tests/SearchPageCacheTagsTest.php b/core/modules/search/src/Tests/SearchPageCacheTagsTest.php index e52c214..eb33827 100644 --- a/core/modules/search/src/Tests/SearchPageCacheTagsTest.php +++ b/core/modules/search/src/Tests/SearchPageCacheTagsTest.php @@ -13,6 +13,7 @@ * @group search */ class SearchPageCacheTagsTest extends SearchTestBase { + /** * {@inheritdoc} */ @@ -25,11 +26,33 @@ class SearchPageCacheTagsTest extends SearchTestBase { */ protected $searchingUser; + /** + * A node that is indexed by the search module. + * + * @var \Drupal\node\NodeInterface + */ + protected $node; + + /** + * {@inheritdoc} + */ protected function setUp() { parent::setUp(); + // Enable the page cache. + // @todo Remove in https://www.drupal.org/node/606840. + $config = $this->config('system.performance'); + $config->set('cache.page.use_internal', 1); + $config->set('cache.page.max_age', 300); + $config->save(); + // Create user. $this->searchingUser = $this->drupalCreateUser(array('search content', 'access user profiles')); + + // Create a node and update the search index. + $this->node = $this->drupalCreateNode(['title' => 'bike shed shop']); + $this->container->get('plugin.manager.search')->createInstance('node_search')->updateIndex(); + search_update_totals(); } /** @@ -40,26 +63,42 @@ function testSearchText() { // Initial page for searching nodes. $this->drupalGet('search/node'); - $cache_tags = explode(' ', $this->drupalGetHeader('X-Drupal-Cache-Tags')); - $this->assertTrue(in_array('config:search.page.node_search', $cache_tags)); + $this->assertCacheTag('config:search.page.node_search'); + $this->assertCacheTag('search_index:node_search'); // Node search results. $edit = array(); $edit['keys'] = 'bike shed'; $this->drupalPostForm('search/node', $edit, t('Search')); - $cache_tags = explode(' ', $this->drupalGetHeader('X-Drupal-Cache-Tags')); - $this->assertTrue(in_array('config:search.page.node_search', $cache_tags)); + $this->assertText('bike shed shop'); + $this->assertCacheTag('config:search.page.node_search'); + $this->assertCacheTag('search_index:node_search'); + + // Updating a node should invalidate the search plugin's index cache tag. + $this->node->title = 'bike shop'; + $this->node->save(); + $this->drupalPostForm('search/node', $edit, t('Search')); + $this->assertText('bike shop'); + $this->assertCacheTag('config:search.page.node_search'); + $this->assertCacheTag('search_index:node_search'); + + // Deleting a node should invalidate the search plugin's index cache tag. + $this->node->delete(); + $this->drupalPostForm('search/node', $edit, t('Search')); + $this->assertText('Your search yielded no results.'); + $this->assertCacheTag('config:search.page.node_search'); + $this->assertCacheTag('search_index:node_search'); // Initial page for searching users. $this->drupalGet('search/user'); - $cache_tags = explode(' ', $this->drupalGetHeader('X-Drupal-Cache-Tags')); - $this->assertTrue(in_array('config:search.page.user_search', $cache_tags)); + $this->assertCacheTag('config:search.page.user_search'); + $this->assertCacheTag('search_index:user_search'); // User search results. $edit['keys'] = $this->searchingUser->getUsername(); $this->drupalPostForm('search/user', $edit, t('Search')); - $cache_tags = explode(' ', $this->drupalGetHeader('X-Drupal-Cache-Tags')); - $this->assertTrue(in_array('config:search.page.user_search', $cache_tags)); + $this->assertCacheTag('config:search.page.user_search'); + $this->assertCacheTag('search_index:user_search'); } }