class CacheWebTest in Drupal 10
Same name and namespace in other branches
- 8 core/modules/views/tests/src/Functional/Plugin/CacheWebTest.php \Drupal\Tests\views\Functional\Plugin\CacheWebTest
 - 9 core/modules/views/tests/src/Functional/Plugin/CacheWebTest.php \Drupal\Tests\views\Functional\Plugin\CacheWebTest
 
Tests pluggable caching for views via a web test.
@group views
Hierarchy
- class \Drupal\Tests\BrowserTestBase extends \PHPUnit\Framework\TestCase uses \Drupal\Tests\PhpUnitCompatibilityTrait, \Symfony\Bridge\PhpUnit\ExpectDeprecationTrait, FunctionalTestSetupTrait, TestSetupTrait, BlockCreationTrait, ConfigTestTrait, ExtensionListTestTrait, ContentTypeCreationTrait, NodeCreationTrait, RandomGeneratorTrait, TestRequirementsTrait, PhpUnitWarnings, UiHelperTrait, UserCreationTrait, XdebugRequestTrait
- class \Drupal\Tests\views\Functional\ViewTestBase uses ViewResultAssertionTrait
- class \Drupal\Tests\views\Functional\Plugin\CacheWebTest uses AssertPageCacheContextsAndTagsTrait
 
 
 - class \Drupal\Tests\views\Functional\ViewTestBase uses ViewResultAssertionTrait
 
Expanded class hierarchy of CacheWebTest
See also
views_plugin_cache
File
- core/
modules/ views/ tests/ src/ Functional/ Plugin/ CacheWebTest.php, line 16  
Namespace
Drupal\Tests\views\Functional\PluginView source
class CacheWebTest extends ViewTestBase {
  use AssertPageCacheContextsAndTagsTrait;
  /**
   * Views used by this test.
   *
   * @var array
   */
  public static $testViews = [
    'test_display',
  ];
  /**
   * Modules to enable.
   *
   * @var array
   */
  protected static $modules = [
    'taxonomy',
  ];
  /**
   * {@inheritdoc}
   */
  protected $defaultTheme = 'stark';
  /**
   * {@inheritdoc}
   */
  protected function setUp($import_test_views = TRUE, $modules = [
    'views_test_config',
  ]) : void {
    parent::setUp($import_test_views, $modules);
    $this
      ->enableViewsTestModule();
  }
  /**
   * Tests the output caching on an actual page.
   */
  public function testCacheOutputOnPage() {
    $view = Views::getView('test_display');
    $view->storage
      ->setStatus(TRUE);
    $view
      ->setDisplay('page_1');
    $view->display_handler
      ->overrideOption('cache', [
      'type' => 'time',
      'options' => [
        'results_lifespan' => '3600',
        'output_lifespan' => '3600',
      ],
    ]);
    $view
      ->save();
    $this->container
      ->get('router.builder')
      ->rebuildIfNeeded();
    /** @var \Drupal\Core\Render\RenderCacheInterface $render_cache */
    $render_cache = \Drupal::service('render_cache');
    $cache_element = DisplayPluginBase::buildBasicRenderable('test_display', 'page_1');
    $cache_element['#cache'] += [
      'contexts' => $this->container
        ->getParameter('renderer.config')['required_cache_contexts'],
    ];
    $this
      ->assertFalse($render_cache
      ->get($cache_element));
    $this
      ->drupalGet('test-display');
    $this
      ->assertSession()
      ->statusCodeEquals(200);
    $this
      ->assertNotEmpty($render_cache
      ->get($cache_element));
    $cache_tags = [
      'config:user.role.anonymous',
      'config:views.view.test_display',
      'node_list',
      'rendered',
    ];
    $this
      ->assertCacheTags($cache_tags);
    $this
      ->drupalGet('test-display');
    $this
      ->assertSession()
      ->statusCodeEquals(200);
    $this
      ->assertNotEmpty($render_cache
      ->get($cache_element));
    $this
      ->assertCacheTags($cache_tags);
  }
  /**
   * Tests that a display without caching still contains the cache metadata.
   */
  public function testDisplayWithoutCacheStillBubblesMetadata() {
    $view = Views::getView('test_display');
    $uncached_block = $view
      ->buildRenderable('block_1', [], FALSE);
    $cached_block = $view
      ->buildRenderable('block_1', [], TRUE);
    $this
      ->assertEquals($uncached_block['#cache']['contexts'], $cached_block['#cache']['contexts'], 'Cache contexts are the same when you render the view cached and uncached.');
  }
}