Version 1
[yaffs-website] / web / core / modules / views / tests / src / Functional / Plugin / CacheWebTest.php
diff --git a/web/core/modules/views/tests/src/Functional/Plugin/CacheWebTest.php b/web/core/modules/views/tests/src/Functional/Plugin/CacheWebTest.php
new file mode 100644 (file)
index 0000000..40bf601
--- /dev/null
@@ -0,0 +1,94 @@
+<?php
+
+namespace Drupal\Tests\views\Functional\Plugin;
+
+use Drupal\system\Tests\Cache\AssertPageCacheContextsAndTagsTrait;
+use Drupal\Tests\views\Functional\ViewTestBase;
+use Drupal\views\Plugin\views\display\DisplayPluginBase;
+use Drupal\views\Views;
+
+/**
+ * Tests pluggable caching for views via a web test.
+ *
+ * @group views
+ * @see views_plugin_cache
+ */
+class CacheWebTest extends ViewTestBase {
+
+  use AssertPageCacheContextsAndTagsTrait;
+
+  /**
+   * Views used by this test.
+   *
+   * @var array
+   */
+  public static $testViews = ['test_display'];
+
+  /**
+   * Modules to enable.
+   *
+   * @var array
+   */
+  public static $modules = ['taxonomy'];
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function setUp($import_test_views = TRUE) {
+    parent::setUp($import_test_views);
+
+    $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->assertResponse(200);
+    $this->assertTrue($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->assertResponse(200);
+    $this->assertTrue($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->assertEqual($uncached_block['#cache']['contexts'], $cached_block['#cache']['contexts'], 'Cache contexts are the same when you render the view cached and uncached.');
+  }
+
+}