function CacheContextOptimizationTest::testUserRolesCacheContextOptimization
Same name in other branches
- 9 core/tests/Drupal/KernelTests/Core/Cache/CacheContextOptimizationTest.php \Drupal\KernelTests\Core\Cache\CacheContextOptimizationTest::testUserRolesCacheContextOptimization()
- 8.9.x core/tests/Drupal/KernelTests/Core/Cache/CacheContextOptimizationTest.php \Drupal\KernelTests\Core\Cache\CacheContextOptimizationTest::testUserRolesCacheContextOptimization()
- 11.x core/tests/Drupal/KernelTests/Core/Cache/CacheContextOptimizationTest.php \Drupal\KernelTests\Core\Cache\CacheContextOptimizationTest::testUserRolesCacheContextOptimization()
Ensures that 'user.roles' still works when it is optimized away.
File
-
core/
tests/ Drupal/ KernelTests/ Core/ Cache/ CacheContextOptimizationTest.php, line 80
Class
- CacheContextOptimizationTest
- Tests the cache context optimization.
Namespace
Drupal\KernelTests\Core\CacheCode
public function testUserRolesCacheContextOptimization() : void {
$root_user = $this->createUser();
$this->assertEquals(1, $root_user->id());
$authenticated_user = $this->createUser([
'administer permissions',
]);
$role = $authenticated_user->getRoles()[1];
$test_element = [
'#cache' => [
'keys' => [
'test',
],
'contexts' => [
'user',
'user.roles',
],
],
];
\Drupal::service('account_switcher')->switchTo($authenticated_user);
$element = $test_element;
$element['#markup'] = 'content for authenticated users';
$output = \Drupal::service('renderer')->renderRoot($element);
$this->assertEquals('content for authenticated users', $output);
// 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->assertEquals('content for authenticated users', $output);
// Even though the cache contexts have been optimized to only include 'user'
// cache context, the element should have been changed because 'user.roles'
// cache context defined a cache tag for user entity changes, which should
// have bubbled up for the element when it was optimized away.
$authenticated_user->removeRole($role)
->save();
$element = $test_element;
$element['#markup'] = 'this should be visible';
$output = \Drupal::service('renderer')->renderRoot($element);
$this->assertEquals('this should be visible', $output);
}
Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.