protected function RenderCacheTest::doTestUser1WithContexts in Drupal 9
Same name and namespace in other branches
- 8 core/tests/Drupal/KernelTests/Core/Render/RenderCacheTest.php \Drupal\KernelTests\Core\Render\RenderCacheTest::doTestUser1WithContexts()
Ensures that user 1 has a unique render cache for the given context.
Parameters
string[] $contexts: List of cache contexts to use.
2 calls to RenderCacheTest::doTestUser1WithContexts()
- RenderCacheTest::testUser1PermissionContext in core/
tests/ Drupal/ KernelTests/ Core/ Render/ RenderCacheTest.php - Tests that user 1 has a different permission context with the same roles.
- RenderCacheTest::testUser1RolesContext in core/
tests/ Drupal/ KernelTests/ Core/ Render/ RenderCacheTest.php - Tests that user 1 has a different roles context with the same roles.
File
- core/
tests/ Drupal/ KernelTests/ Core/ Render/ RenderCacheTest.php, line 54
Class
- RenderCacheTest
- Tests the caching of render items via functional tests.
Namespace
Drupal\KernelTests\Core\RenderCode
protected function doTestUser1WithContexts($contexts) {
// Test that user 1 does not share the cache with other users who have the
// same roles, even when using a role-based cache context.
$user1 = $this
->createUser();
$this
->assertEquals(1, $user1
->id());
$first_authenticated_user = $this
->createUser();
$second_authenticated_user = $this
->createUser();
$admin_user = $this
->createUser([], NULL, TRUE);
$this
->assertEquals($user1
->getRoles(), $first_authenticated_user
->getRoles(), 'User 1 has the same roles as an authenticated user.');
// Impersonate user 1 and render content that only user 1 should have
// permission to see.
\Drupal::service('account_switcher')
->switchTo($user1);
$test_element = [
'#cache' => [
'keys' => [
'test',
],
'contexts' => $contexts,
],
];
$element = $test_element;
$element['#markup'] = 'content for user 1';
$output = \Drupal::service('renderer')
->renderRoot($element);
$this
->assertEquals('content for user 1', $output);
// Verify the cache is working by rendering the same element but with
// different markup passed in; the result should be the same.
$element = $test_element;
$element['#markup'] = 'should not be used';
$output = \Drupal::service('renderer')
->renderRoot($element);
$this
->assertEquals('content for user 1', $output);
\Drupal::service('account_switcher')
->switchBack();
// Verify that the first authenticated user does not see the same content
// as user 1.
\Drupal::service('account_switcher')
->switchTo($first_authenticated_user);
$element = $test_element;
$element['#markup'] = 'content for authenticated users';
$output = \Drupal::service('renderer')
->renderRoot($element);
$this
->assertEquals('content for authenticated users', $output);
\Drupal::service('account_switcher')
->switchBack();
// Verify that the second authenticated user shares the cache with the
// first authenticated user.
\Drupal::service('account_switcher')
->switchTo($second_authenticated_user);
$element = $test_element;
$element['#markup'] = 'should not be used';
$output = \Drupal::service('renderer')
->renderRoot($element);
$this
->assertEquals('content for authenticated users', $output);
\Drupal::service('account_switcher')
->switchBack();
// Verify that the admin user (who has an admin role without explicit
// permissions) does not share the same cache.
\Drupal::service('account_switcher')
->switchTo($admin_user);
$element = $test_element;
$element['#markup'] = 'content for admin user';
$output = \Drupal::service('renderer')
->renderRoot($element);
$this
->assertEquals('content for admin user', $output);
\Drupal::service('account_switcher')
->switchBack();
}