/** * Tests the tag cache plugin. */ public function testTagCaching() { /** @var \Drupal\Core\Render\RendererInterface $renderer */ $renderer = \Drupal::service('renderer'); $view = Views::getView('test_tag_cache'); $build = $view->buildRenderable(); $renderer->renderPlain($build); // Saving the view should invalidate the tags. $cache_plugin = $view->display_handler->getPlugin('cache'); $this->assertTrue($cache_plugin->cacheGet('results'), 'Results cache found.'); $this->assertTrue($this->getRenderCache($view), 'Output cache found.'); $view->storage->save(); $this->assertFalse($cache_plugin->cacheGet('results'), 'Results cache empty after the view is saved.'); $this->assertFalse($this->getRenderCache($view), 'Output cache empty after the view is saved.'); $view->destroy(); $build = $view->buildRenderable(); $renderer->renderPlain($build); // Test invalidating the nodes in this view invalidates the cache. $cache_plugin = $view->display_handler->getPlugin('cache'); $this->assertTrue($cache_plugin->cacheGet('results'), 'Results cache found.'); $this->assertTrue($this->getRenderCache($view), 'Output cache found.'); $this->nodeViewBuilder->resetCache($this->pages); $this->assertFalse($cache_plugin->cacheGet('results'), 'Results cache empty after resetCache is called with pages.'); $this->assertFalse($this->getRenderCache($view), 'Output cache empty after resetCache is called with pages.'); $view->destroy(); $build = $view->buildRenderable(); $renderer->renderPlain($build); // Test saving a node in this view invalidates the cache. $cache_plugin = $view->display_handler->getPlugin('cache'); $this->assertTrue($cache_plugin->cacheGet('results'), 'Results cache found.'); $this->assertTrue($this->getRenderCache($view), 'Output cache found.'); $node = reset($this->pages); $node->save(); $this->assertFalse($cache_plugin->cacheGet('results'), 'Results cache empty after a page node is saved.'); $this->assertFalse($this->getRenderCache($view), 'Output cache empty after a page node is saved.'); $view->destroy(); $build = $view->buildRenderable(); $renderer->renderPlain($build); // Test saving a node not in this view invalidates the cache too. $cache_plugin = $view->display_handler->getPlugin('cache'); $this->assertTrue($cache_plugin->cacheGet('results'), 'Results cache found.'); $this->assertTrue($this->getRenderCache($view), 'Output cache found.'); $this->article->save(); $this->assertFalse($cache_plugin->cacheGet('results'), 'Results cache empty after an article node is saved.'); $this->assertFalse($this->getRenderCache($view), 'Output cache empty after an article node is saved.'); $view->destroy(); $build = $view->buildRenderable(); $renderer->renderPlain($build); // Test that invalidating a tag for a user, does not invalidate the cache, // as the user entity type will not be contained in the views cache tags. $cache_plugin = $view->display_handler->getPlugin('cache'); $this->assertTrue($cache_plugin->cacheGet('results'), 'Results cache found.'); $this->assertTrue($this->getRenderCache($view), 'Output cache found.'); $this->userViewBuilder->resetCache(array($this->user)); $cache_plugin = $view->display_handler->getPlugin('cache'); $this->assertTrue($cache_plugin->cacheGet('results'), 'Results cache found after a user is invalidated.'); $this->assertTrue($this->getRenderCache($view), 'Output cache found after a user is invalidated.'); $view->destroy(); // Invalidate the views cache tags in order to invalidate the render // caching. \Drupal::service('cache_tags.invalidator')->invalidateTags($view->storage->getCacheTagsToInvalidate()); $build = $view->buildRenderable(); $renderer->renderPlain($build); // Test the cacheFlush method invalidates the cache. $cache_plugin = $view->display_handler->getPlugin('cache'); $this->assertTrue($cache_plugin->cacheGet('results'), 'Results cache found.'); $this->assertTrue($this->getRenderCache($view), 'Output cache found.'); $cache_plugin->cacheFlush(); $cache_plugin = $view->display_handler->getPlugin('cache'); $this->assertFalse($cache_plugin->cacheGet('results'), 'Results cache empty after the cacheFlush() method is called.'); $this->assertFalse($this->getRenderCache($view), 'Output cache empty after the cacheFlush() method is called.'); }
/** * Tests the tag cache plugin. */ public function testTagCaching() { $view = Views::getView('test_tag_cache'); $view->render(); // Saving the view should invalidate the tags. $cache_plugin = $view->display_handler->getPlugin('cache'); $this->assertTrue($cache_plugin->cacheGet('results'), 'Results cache found.'); $this->assertTrue($cache_plugin->cacheGet('output'), 'Output cache found.'); $view->storage->save(); $this->assertFalse($cache_plugin->cacheGet('results'), 'Results cache empty after the view is saved.'); $this->assertFalse($cache_plugin->cacheGet('output'), 'Output cache empty after the view is saved.'); $view->destroy(); $view->render(); // Test invalidating the nodes in this view invalidates the cache. $cache_plugin = $view->display_handler->getPlugin('cache'); $this->assertTrue($cache_plugin->cacheGet('results'), 'Results cache found.'); $this->assertTrue($cache_plugin->cacheGet('output'), 'Output cache found.'); $this->nodeViewBuilder->resetCache($this->pages); $this->assertFalse($cache_plugin->cacheGet('results'), 'Results cache empty after resetCache is called with pages.'); $this->assertFalse($cache_plugin->cacheGet('output'), 'Output cache empty after resetCache is called with pages.'); $view->destroy(); $view->render(); // Test saving a node in this view invalidates the cache. $cache_plugin = $view->display_handler->getPlugin('cache'); $this->assertTrue($cache_plugin->cacheGet('results'), 'Results cache found.'); $this->assertTrue($cache_plugin->cacheGet('output'), 'Output cache found.'); $node = reset($this->pages); $node->save(); $this->assertFalse($cache_plugin->cacheGet('results'), 'Results cache empty after a page node is saved.'); $this->assertFalse($cache_plugin->cacheGet('output'), 'Output cache empty after a page node is saved.'); $view->destroy(); $view->render(); // Test saving a node not in this view invalidates the cache too. $cache_plugin = $view->display_handler->getPlugin('cache'); $this->assertTrue($cache_plugin->cacheGet('results'), 'Results cache found.'); $this->assertTrue($cache_plugin->cacheGet('output'), 'Output cache found.'); $this->article->save(); $this->assertFalse($cache_plugin->cacheGet('results'), 'Results cache empty after an article node is saved.'); $this->assertFalse($cache_plugin->cacheGet('output'), 'Output cache empty after an article node is saved.'); $view->destroy(); $view->render(); // Test that invalidating a tag for a user, does not invalidate the cache, // as the user entity type will not be contained in the views cache tags. $cache_plugin = $view->display_handler->getPlugin('cache'); $this->assertTrue($cache_plugin->cacheGet('results'), 'Results cache found.'); $this->assertTrue($cache_plugin->cacheGet('output'), 'Output cache found.'); $this->userViewBuilder->resetCache(array($this->user)); $cache_plugin = $view->display_handler->getPlugin('cache'); $this->assertTrue($cache_plugin->cacheGet('results'), 'Results cache found after a user is invalidated.'); $this->assertTrue($cache_plugin->cacheGet('output'), 'Output cache found after a user is invalidated.'); $view->destroy(); $view->render(); // Test the cacheFlush method invalidates the cache. $cache_plugin = $view->display_handler->getPlugin('cache'); $this->assertTrue($cache_plugin->cacheGet('results'), 'Results cache found.'); $this->assertTrue($cache_plugin->cacheGet('output'), 'Output cache found.'); $cache_plugin->cacheFlush(); $cache_plugin = $view->display_handler->getPlugin('cache'); $this->assertFalse($cache_plugin->cacheGet('results'), 'Results cache empty after the cacheFlush() method is called.'); $this->assertFalse($cache_plugin->cacheGet('output'), 'Output cache empty after the cacheFlush() method is called.'); }