public function CacheContextOptimizationTest::testUserPermissionCacheContextOptimization in Zircon Profile 8
Same name and namespace in other branches
- 8.0 core/modules/system/src/Tests/Cache/CacheContextOptimizationTest.php \Drupal\system\Tests\Cache\CacheContextOptimizationTest::testUserPermissionCacheContextOptimization()
Ensures that 'user.permissions' cache context is able to define cache tags.
File
- core/
modules/ system/ src/ Tests/ Cache/ CacheContextOptimizationTest.php, line 43 - Contains \Drupal\system\Tests\Cache\CacheContextOptimizationTest.
Class
- CacheContextOptimizationTest
- Tests the cache context optimization.
Namespace
Drupal\system\Tests\CacheCode
public function testUserPermissionCacheContextOptimization() {
$user1 = $this
->createUser();
$this
->assertEqual($user1
->id(), 1);
$authenticated_user = $this
->createUser([
'administer permissions',
]);
$role = $authenticated_user
->getRoles()[1];
$test_element = [
'#cache' => [
'keys' => [
'test',
],
'contexts' => [
'user',
'user.permissions',
],
],
];
\Drupal::service('account_switcher')
->switchTo($authenticated_user);
$element = $test_element;
$element['#markup'] = 'content for authenticated users';
$output = \Drupal::service('renderer')
->renderRoot($element);
$this
->assertEqual($output, 'content for authenticated users');
// Verify that the render caching is working so that other tests can be
// trusted.
$element = $test_element;
$element['#markup'] = 'this should not be visible';
$output = \Drupal::service('renderer')
->renderRoot($element);
$this
->assertEqual($output, 'content for authenticated users');
// Even though the cache contexts have been optimized to only include 'user'
// cache context, the element should have been changed because
// 'user.permissions' cache context defined a cache tags for permission
// changes, which should have bubbled up for the element when it was
// optimized away.
Role::load($role)
->revokePermission('administer permissions')
->save();
$element = $test_element;
$element['#markup'] = 'this should be visible';
$output = \Drupal::service('renderer')
->renderRoot($element);
$this
->assertEqual($output, 'this should be visible');
}