AssertViewsCacheTagsTrait.php in Drupal 10
File
core/modules/views/src/Tests/AssertViewsCacheTagsTrait.php
View source
<?php
namespace Drupal\views\Tests;
use Drupal\Core\Cache\Cache;
use Drupal\Tests\system\Functional\Cache\AssertPageCacheContextsAndTagsTrait;
use Drupal\views\Plugin\views\display\DisplayPluginBase;
use Drupal\views\ViewExecutable;
use Symfony\Component\HttpFoundation\Request;
trait AssertViewsCacheTagsTrait {
use AssertPageCacheContextsAndTagsTrait;
protected function assertViewsCacheTags(ViewExecutable $view, $expected_results_cache, $views_caching_is_enabled, array $expected_render_array_cache_tags) {
$renderer = \Drupal::service('renderer');
$render_cache = \Drupal::service('render_cache');
$build = $view
->buildRenderable();
$original = $build;
$request_stack = \Drupal::service('request_stack');
$request = Request::createFromGlobals();
$request->server
->set('REQUEST_TIME', REQUEST_TIME);
$view
->setRequest($request);
$request_stack
->push($request);
$renderer
->renderRoot($build);
sort($expected_render_array_cache_tags);
$this
->assertEqualsCanonicalizing($expected_render_array_cache_tags, $build['#cache']['tags']);
if ($views_caching_is_enabled) {
$cache_plugin = $view->display_handler
->getPlugin('cache');
$view
->build();
$results_cache_item = \Drupal::cache('data')
->get($cache_plugin
->generateResultsKey());
if (is_array($expected_results_cache)) {
$this
->assertNotEmpty($results_cache_item, 'Results cache item found.');
if ($results_cache_item) {
$this
->assertEqualsCanonicalizing($expected_results_cache, $results_cache_item->tags);
}
}
else {
$this
->assertNull($results_cache_item, 'Results cache item not found.');
}
$original['#cache'] += [
'contexts' => [],
];
$original['#cache']['contexts'] = Cache::mergeContexts($original['#cache']['contexts'], $this->container
->getParameter('renderer.config')['required_cache_contexts']);
$render_cache_item = $render_cache
->get($original);
if ($views_caching_is_enabled === TRUE) {
$this
->assertNotEmpty($render_cache_item, 'Render cache item found.');
if ($render_cache_item) {
$this
->assertEqualsCanonicalizing($expected_render_array_cache_tags, $render_cache_item['#cache']['tags']);
}
}
else {
$this
->assertNull($render_cache_item, 'Render cache item not found.');
}
}
$view
->destroy();
$request_stack
->pop();
return $build;
}
protected function assertViewsCacheTagsFromStaticRenderArray(ViewExecutable $view, array $expected_render_array_cache_tags, $views_caching_is_enabled) {
$original = $build = DisplayPluginBase::buildBasicRenderable($view
->id(), $view->current_display ?: 'default', $view->args);
$renderer = \Drupal::service('renderer');
$render_cache = \Drupal::service('render_cache');
$request_stack = \Drupal::service('request_stack');
$request = new Request();
$request->server
->set('REQUEST_TIME', REQUEST_TIME);
$request_stack
->push($request);
$renderer
->renderRoot($build);
$this
->assertEqualsCanonicalizing($expected_render_array_cache_tags, $build['#cache']['tags']);
$original['#cache'] += [
'contexts' => [],
];
$original['#cache']['contexts'] = Cache::mergeContexts($original['#cache']['contexts'], $this->container
->getParameter('renderer.config')['required_cache_contexts']);
$render_cache_item = $render_cache
->get($original);
if ($views_caching_is_enabled) {
$this
->assertNotEmpty($render_cache_item, 'Render cache item found.');
if ($render_cache_item) {
$this
->assertEqualsCanonicalizing($expected_render_array_cache_tags, $render_cache_item['#cache']['tags']);
}
}
else {
$this
->assertFalse($render_cache_item, 'Render cache item not found.');
}
return $build;
}
}