Issue #2863318 by martin107, naveenvalecha, Lendude, Jo Fitzgerald: Cache: Convert system functional tests to phpunit
parent
a8a898420c
commit
d9247c2ee0
|
@ -6,8 +6,8 @@ use Drupal\Component\Utility\SafeMarkup;
|
|||
use Drupal\Component\Render\PlainTextOutput;
|
||||
use Drupal\Core\Session\AccountInterface;
|
||||
use Drupal\Core\Test\AssertMailTrait;
|
||||
use Drupal\system\Tests\Cache\AssertPageCacheContextsAndTagsTrait;
|
||||
use Drupal\Tests\BrowserTestBase;
|
||||
use Drupal\Tests\system\Functional\Cache\AssertPageCacheContextsAndTagsTrait;
|
||||
use Drupal\user\RoleInterface;
|
||||
|
||||
/**
|
||||
|
|
|
@ -11,7 +11,7 @@ use Drupal\Core\Language\LanguageInterface;
|
|||
use Drupal\Core\Url;
|
||||
use Drupal\language\Entity\ConfigurableLanguage;
|
||||
use Drupal\Component\Utility\SafeMarkup;
|
||||
use Drupal\system\Tests\Cache\AssertPageCacheContextsAndTagsTrait;
|
||||
use Drupal\Tests\system\Functional\Cache\AssertPageCacheContextsAndTagsTrait;
|
||||
|
||||
/**
|
||||
* Tests the Content Translation UI.
|
||||
|
|
|
@ -4,8 +4,8 @@ namespace Drupal\Tests\history\Functional;
|
|||
|
||||
use Drupal\Component\Serialization\Json;
|
||||
use Drupal\Core\Url;
|
||||
use Drupal\system\Tests\Cache\AssertPageCacheContextsAndTagsTrait;
|
||||
use Drupal\Tests\BrowserTestBase;
|
||||
use Drupal\Tests\system\Functional\Cache\AssertPageCacheContextsAndTagsTrait;
|
||||
use GuzzleHttp\Cookie\CookieJar;
|
||||
|
||||
/**
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
namespace Drupal\Tests\media\Functional;
|
||||
|
||||
use Drupal\media\Entity\Media;
|
||||
use Drupal\system\Tests\Cache\AssertPageCacheContextsAndTagsTrait;
|
||||
use Drupal\Tests\system\Functional\Cache\AssertPageCacheContextsAndTagsTrait;
|
||||
use Drupal\user\Entity\Role;
|
||||
use Drupal\user\RoleInterface;
|
||||
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
namespace Drupal\Tests\node\Functional;
|
||||
|
||||
use Drupal\Core\Url;
|
||||
use Drupal\system\Tests\Cache\AssertPageCacheContextsAndTagsTrait;
|
||||
use Drupal\Tests\system\Functional\Cache\AssertPageCacheContextsAndTagsTrait;
|
||||
|
||||
/**
|
||||
* Tests the node access automatic cacheability bubbling logic.
|
||||
|
|
|
@ -4,7 +4,7 @@ namespace Drupal\Tests\node\Functional;
|
|||
|
||||
use Drupal\block\Entity\Block;
|
||||
use Drupal\Core\EventSubscriber\MainContentViewSubscriber;
|
||||
use Drupal\system\Tests\Cache\AssertPageCacheContextsAndTagsTrait;
|
||||
use Drupal\Tests\system\Functional\Cache\AssertPageCacheContextsAndTagsTrait;
|
||||
use Drupal\user\RoleInterface;
|
||||
|
||||
/**
|
||||
|
|
|
@ -5,8 +5,8 @@ namespace Drupal\page_cache\Tests;
|
|||
use Drupal\Core\EventSubscriber\MainContentViewSubscriber;
|
||||
use Drupal\Core\Language\LanguageInterface;
|
||||
use Drupal\simpletest\WebTestBase;
|
||||
use Drupal\system\Tests\Cache\AssertPageCacheContextsAndTagsTrait;
|
||||
use Drupal\node\NodeInterface;
|
||||
use Drupal\Tests\system\Functional\Cache\AssertPageCacheContextsAndTagsTrait;
|
||||
|
||||
/**
|
||||
* Enables the page cache and tests its cache tags in various scenarios.
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
namespace Drupal\Tests\statistics\Functional;
|
||||
|
||||
use Drupal\Core\Cache\Cache;
|
||||
use Drupal\system\Tests\Cache\AssertPageCacheContextsAndTagsTrait;
|
||||
use Drupal\Tests\system\Functional\Cache\AssertPageCacheContextsAndTagsTrait;
|
||||
|
||||
/**
|
||||
* Tests display of statistics report blocks.
|
||||
|
|
|
@ -9,6 +9,12 @@ use Drupal\Core\Url;
|
|||
* Provides test assertions for testing page-level cache contexts & tags.
|
||||
*
|
||||
* Can be used by test classes that extend \Drupal\simpletest\WebTestBase.
|
||||
*
|
||||
* @deprecated Scheduled for removal in Drupal 9.0.0. Use
|
||||
* \Drupal\Tests\system\Functional\Cache\AssertPageCacheContextsAndTagsTrait
|
||||
* instead.
|
||||
*
|
||||
* @see https://www.drupal.org/node/2896632
|
||||
*/
|
||||
trait AssertPageCacheContextsAndTagsTrait {
|
||||
|
||||
|
|
|
@ -0,0 +1,192 @@
|
|||
<?php
|
||||
|
||||
namespace Drupal\Tests\system\Functional\Cache;
|
||||
|
||||
use Drupal\Core\Cache\Cache;
|
||||
use Drupal\Core\Url;
|
||||
|
||||
/**
|
||||
* Provides test assertions for testing page-level cache contexts & tags.
|
||||
*
|
||||
* Can be used by test classes that extend \Drupal\Tests\BrowserTestBase.
|
||||
*/
|
||||
trait AssertPageCacheContextsAndTagsTrait {
|
||||
|
||||
/**
|
||||
* Enables page caching.
|
||||
*/
|
||||
protected function enablePageCaching() {
|
||||
$config = $this->config('system.performance');
|
||||
$config->set('cache.page.max_age', 300);
|
||||
$config->save();
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets a specific header value as array.
|
||||
*
|
||||
* @param string $header_name
|
||||
* The header name.
|
||||
*
|
||||
* @return string[]
|
||||
* The header value, potentially exploded by spaces.
|
||||
*/
|
||||
protected function getCacheHeaderValues($header_name) {
|
||||
$header_value = $this->drupalGetHeader($header_name);
|
||||
if (empty($header_value)) {
|
||||
return [];
|
||||
}
|
||||
else {
|
||||
return explode(' ', $header_value);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Asserts whether an expected cache context was present in the last response.
|
||||
*
|
||||
* @param string $expected_cache_context
|
||||
* The expected cache context.
|
||||
*/
|
||||
protected function assertCacheContext($expected_cache_context) {
|
||||
$cache_contexts = explode(' ', $this->drupalGetHeader('X-Drupal-Cache-Contexts'));
|
||||
$this->assertTrue(in_array($expected_cache_context, $cache_contexts), "'" . $expected_cache_context . "' is present in the X-Drupal-Cache-Contexts header.");
|
||||
}
|
||||
|
||||
/**
|
||||
* Asserts that a cache context was not present in the last response.
|
||||
*
|
||||
* @param string $not_expected_cache_context
|
||||
* The expected cache context.
|
||||
*/
|
||||
protected function assertNoCacheContext($not_expected_cache_context) {
|
||||
$cache_contexts = explode(' ', $this->drupalGetHeader('X-Drupal-Cache-Contexts'));
|
||||
$this->assertFalse(in_array($not_expected_cache_context, $cache_contexts), "'" . $not_expected_cache_context . "' is not present in the X-Drupal-Cache-Contexts header.");
|
||||
}
|
||||
|
||||
/**
|
||||
* Asserts page cache miss, then hit for the given URL; checks cache headers.
|
||||
*
|
||||
* @param \Drupal\Core\Url $url
|
||||
* The URL to test.
|
||||
* @param string[] $expected_contexts
|
||||
* The expected cache contexts for the given URL.
|
||||
* @param string[] $expected_tags
|
||||
* The expected cache tags for the given URL.
|
||||
*/
|
||||
protected function assertPageCacheContextsAndTags(Url $url, array $expected_contexts, array $expected_tags) {
|
||||
$absolute_url = $url->setAbsolute()->toString();
|
||||
sort($expected_contexts);
|
||||
sort($expected_tags);
|
||||
|
||||
// Assert cache miss + expected cache contexts + tags.
|
||||
$this->drupalGet($absolute_url);
|
||||
$this->assertEqual($this->drupalGetHeader('X-Drupal-Cache'), 'MISS');
|
||||
$this->assertCacheTags($expected_tags);
|
||||
$this->assertCacheContexts($expected_contexts);
|
||||
|
||||
// Assert cache hit + expected cache contexts + tags.
|
||||
$this->drupalGet($absolute_url);
|
||||
$this->assertCacheTags($expected_tags);
|
||||
$this->assertCacheContexts($expected_contexts);
|
||||
|
||||
// Assert page cache item + expected cache tags.
|
||||
$cid_parts = [$url->setAbsolute()->toString(), 'html'];
|
||||
$cid = implode(':', $cid_parts);
|
||||
$cache_entry = \Drupal::cache('page')->get($cid);
|
||||
sort($cache_entry->tags);
|
||||
$this->assertEqual($cache_entry->tags, $expected_tags);
|
||||
$this->debugCacheTags($cache_entry->tags, $expected_tags);
|
||||
}
|
||||
|
||||
/**
|
||||
* Provides debug information for cache tags.
|
||||
*
|
||||
* @param string[] $actual_tags
|
||||
* The actual cache tags.
|
||||
* @param string[] $expected_tags
|
||||
* The expected cache tags.
|
||||
*/
|
||||
protected function debugCacheTags(array $actual_tags, array $expected_tags) {
|
||||
if ($actual_tags !== $expected_tags) {
|
||||
debug('Unwanted cache tags in response: ' . implode(',', array_diff($actual_tags, $expected_tags)));
|
||||
debug('Missing cache tags in response: ' . implode(',', array_diff($expected_tags, $actual_tags)));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Ensures that some cache tags are present in the current response.
|
||||
*
|
||||
* @param string[] $expected_tags
|
||||
* The expected tags.
|
||||
* @param bool $include_default_tags
|
||||
* (optional) Whether the default cache tags should be included.
|
||||
*/
|
||||
protected function assertCacheTags(array $expected_tags, $include_default_tags = TRUE) {
|
||||
// The anonymous role cache tag is only added if the user is anonymous.
|
||||
if ($include_default_tags) {
|
||||
if (\Drupal::currentUser()->isAnonymous()) {
|
||||
$expected_tags = Cache::mergeTags($expected_tags, ['config:user.role.anonymous']);
|
||||
}
|
||||
$expected_tags[] = 'http_response';
|
||||
}
|
||||
$actual_tags = $this->getCacheHeaderValues('X-Drupal-Cache-Tags');
|
||||
$expected_tags = array_unique($expected_tags);
|
||||
sort($expected_tags);
|
||||
sort($actual_tags);
|
||||
$this->assertIdentical($actual_tags, $expected_tags);
|
||||
$this->debugCacheTags($actual_tags, $expected_tags);
|
||||
}
|
||||
|
||||
/**
|
||||
* Ensures that some cache contexts are present in the current response.
|
||||
*
|
||||
* @param string[] $expected_contexts
|
||||
* The expected cache contexts.
|
||||
* @param string $message
|
||||
* (optional) A verbose message to output.
|
||||
* @param bool $include_default_contexts
|
||||
* (optional) Whether the default contexts should automatically be included.
|
||||
*
|
||||
* @return bool
|
||||
* TRUE if the assertion succeeded, FALSE otherwise.
|
||||
*/
|
||||
protected function assertCacheContexts(array $expected_contexts, $message = NULL, $include_default_contexts = TRUE) {
|
||||
if ($include_default_contexts) {
|
||||
$default_contexts = ['languages:language_interface', 'theme'];
|
||||
// Add the user.permission context to the list of default contexts except
|
||||
// when user is already there.
|
||||
if (!in_array('user', $expected_contexts)) {
|
||||
$default_contexts[] = 'user.permissions';
|
||||
}
|
||||
$expected_contexts = Cache::mergeContexts($expected_contexts, $default_contexts);
|
||||
}
|
||||
|
||||
$actual_contexts = $this->getCacheHeaderValues('X-Drupal-Cache-Contexts');
|
||||
sort($expected_contexts);
|
||||
sort($actual_contexts);
|
||||
$match = $actual_contexts === $expected_contexts;
|
||||
if (!$match) {
|
||||
debug('Unwanted cache contexts in response: ' . implode(',', array_diff($actual_contexts, $expected_contexts)));
|
||||
debug('Missing cache contexts in response: ' . implode(',', array_diff($expected_contexts, $actual_contexts)));
|
||||
}
|
||||
|
||||
$this->assertIdentical($actual_contexts, $expected_contexts, $message);
|
||||
|
||||
// For compatibility with both BrowserTestBase and WebTestBase always return
|
||||
// a boolean.
|
||||
return $match;
|
||||
}
|
||||
|
||||
/**
|
||||
* Asserts the max age header.
|
||||
*
|
||||
* @param int $max_age
|
||||
*/
|
||||
protected function assertCacheMaxAge($max_age) {
|
||||
$cache_control_header = $this->drupalGetHeader('Cache-Control');
|
||||
if (strpos($cache_control_header, 'max-age:' . $max_age) === FALSE) {
|
||||
debug('Expected max-age:' . $max_age . '; Response max-age:' . $cache_control_header);
|
||||
}
|
||||
$this->assertTrue(strpos($cache_control_header, 'max-age:' . $max_age));
|
||||
}
|
||||
|
||||
}
|
|
@ -1,16 +1,16 @@
|
|||
<?php
|
||||
|
||||
namespace Drupal\system\Tests\Cache;
|
||||
namespace Drupal\Tests\system\Functional\Cache;
|
||||
|
||||
use Drupal\Core\Url;
|
||||
use Drupal\simpletest\WebTestBase;
|
||||
use Drupal\Tests\BrowserTestBase;
|
||||
|
||||
/**
|
||||
* Tests the 'session.exists' cache context service.
|
||||
*
|
||||
* @group Cache
|
||||
*/
|
||||
class SessionExistsCacheContextTest extends WebTestBase {
|
||||
class SessionExistsCacheContextTest extends BrowserTestBase {
|
||||
|
||||
/**
|
||||
* Modules to enable.
|
||||
|
@ -59,8 +59,7 @@ class SessionExistsCacheContextTest extends WebTestBase {
|
|||
* Asserts whether a session cookie is present on the client or not.
|
||||
*/
|
||||
public function assertSessionCookieOnClient($expected_present) {
|
||||
$non_deleted_cookies = array_filter($this->cookies, function ($item) { return $item['value'] !== 'deleted'; });
|
||||
$this->assertEqual($expected_present, isset($non_deleted_cookies[$this->getSessionName()]), 'Session cookie exists.');
|
||||
$this->assertEqual($expected_present, (bool) $this->getSession()->getCookie($this->getSessionName()), 'Session cookie exists.');
|
||||
}
|
||||
|
||||
}
|
|
@ -4,7 +4,7 @@ namespace Drupal\Tests\toolbar\Functional;
|
|||
|
||||
use Drupal\Core\Cache\Cache;
|
||||
use Drupal\Core\EventSubscriber\MainContentViewSubscriber;
|
||||
use Drupal\system\Tests\Cache\AssertPageCacheContextsAndTagsTrait;
|
||||
use Drupal\Tests\system\Functional\Cache\AssertPageCacheContextsAndTagsTrait;
|
||||
use Drupal\Tests\BrowserTestBase;
|
||||
|
||||
|
||||
|
|
|
@ -9,8 +9,8 @@ use Drupal\Core\EventSubscriber\MainContentViewSubscriber;
|
|||
use Drupal\Core\Session\AccountInterface;
|
||||
use Drupal\field\Entity\FieldStorageConfig;
|
||||
use Drupal\node\Entity\Node;
|
||||
use Drupal\system\Tests\Cache\AssertPageCacheContextsAndTagsTrait;
|
||||
use Drupal\Tests\BrowserTestBase;
|
||||
use Drupal\Tests\system\Functional\Cache\AssertPageCacheContextsAndTagsTrait;
|
||||
|
||||
/**
|
||||
* Create and delete nodes and check for their display in the tracker listings.
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
namespace Drupal\views\Tests;
|
||||
|
||||
use Drupal\Core\Cache\Cache;
|
||||
use Drupal\system\Tests\Cache\AssertPageCacheContextsAndTagsTrait;
|
||||
use Drupal\Tests\system\Functional\Cache\AssertPageCacheContextsAndTagsTrait;
|
||||
use Drupal\views\Plugin\views\display\DisplayPluginBase;
|
||||
use Drupal\views\ViewExecutable;
|
||||
use Symfony\Component\HttpFoundation\Request;
|
||||
|
|
|
@ -7,7 +7,7 @@ use Drupal\Component\Utility\Unicode;
|
|||
use Drupal\Component\Utility\UrlHelper;
|
||||
use Drupal\Core\Render\RenderContext;
|
||||
use Drupal\Core\Url;
|
||||
use Drupal\system\Tests\Cache\AssertPageCacheContextsAndTagsTrait;
|
||||
use Drupal\Tests\system\Functional\Cache\AssertPageCacheContextsAndTagsTrait;
|
||||
use Drupal\Tests\views\Functional\ViewTestBase;
|
||||
use Drupal\views\Views;
|
||||
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
namespace Drupal\Tests\views\Functional\Plugin;
|
||||
|
||||
use Drupal\system\Tests\Cache\AssertPageCacheContextsAndTagsTrait;
|
||||
use Drupal\Tests\system\Functional\Cache\AssertPageCacheContextsAndTagsTrait;
|
||||
use Drupal\Tests\views\Functional\ViewTestBase;
|
||||
use Drupal\views\Plugin\views\display\DisplayPluginBase;
|
||||
use Drupal\views\Views;
|
||||
|
|
|
@ -3,9 +3,9 @@
|
|||
namespace Drupal\Tests\views\Functional\Plugin;
|
||||
|
||||
use Drupal\Core\Plugin\Context\ContextDefinitionInterface;
|
||||
use Drupal\Tests\system\Functional\Cache\AssertPageCacheContextsAndTagsTrait;
|
||||
use Drupal\Tests\views\Functional\ViewTestBase;
|
||||
use Drupal\views\Tests\ViewTestData;
|
||||
use Drupal\system\Tests\Cache\AssertPageCacheContextsAndTagsTrait;
|
||||
|
||||
/**
|
||||
* A test for contextual filters exposed as block context.
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
namespace Drupal\Tests\views\Functional\Plugin;
|
||||
|
||||
use Drupal\system\Tests\Cache\AssertPageCacheContextsAndTagsTrait;
|
||||
use Drupal\Tests\system\Functional\Cache\AssertPageCacheContextsAndTagsTrait;
|
||||
use Drupal\Tests\views\Functional\ViewTestBase;
|
||||
use Drupal\views\Views;
|
||||
|
||||
|
|
|
@ -4,7 +4,7 @@ namespace Drupal\Tests\views\Functional\Plugin;
|
|||
|
||||
use Drupal\Component\Utility\Html;
|
||||
use Drupal\entity_test\Entity\EntityTest;
|
||||
use Drupal\system\Tests\Cache\AssertPageCacheContextsAndTagsTrait;
|
||||
use Drupal\Tests\system\Functional\Cache\AssertPageCacheContextsAndTagsTrait;
|
||||
use Drupal\Tests\views\Functional\ViewTestBase;
|
||||
use Drupal\views\ViewExecutable;
|
||||
use Drupal\views\Views;
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
namespace Drupal\Tests\views\Functional\Plugin;
|
||||
|
||||
use Drupal\system\Tests\Cache\AssertPageCacheContextsAndTagsTrait;
|
||||
use Drupal\Tests\system\Functional\Cache\AssertPageCacheContextsAndTagsTrait;
|
||||
use Drupal\Tests\views\Functional\ViewTestBase;
|
||||
use Drupal\views\Views;
|
||||
use Drupal\language\Entity\ConfigurableLanguage;
|
||||
|
|
|
@ -4,7 +4,7 @@ namespace Drupal\Tests\views_ui\Functional;
|
|||
|
||||
use Drupal\Core\Menu\MenuTreeParameters;
|
||||
use Drupal\menu_link_content\Entity\MenuLinkContent;
|
||||
use Drupal\system\Tests\Cache\AssertPageCacheContextsAndTagsTrait;
|
||||
use Drupal\Tests\system\Functional\Cache\AssertPageCacheContextsAndTagsTrait;
|
||||
|
||||
/**
|
||||
* Tests the UI of generic display path plugin.
|
||||
|
@ -13,6 +13,7 @@ use Drupal\system\Tests\Cache\AssertPageCacheContextsAndTagsTrait;
|
|||
* @see \Drupal\views\Plugin\views\display\PathPluginBase
|
||||
*/
|
||||
class DisplayPathTest extends UITestBase {
|
||||
|
||||
use AssertPageCacheContextsAndTagsTrait;
|
||||
|
||||
protected function setUp($import_test_views = TRUE) {
|
||||
|
|
Loading…
Reference in New Issue