RenderCacheTest.php in Drupal 10
File
core/tests/Drupal/KernelTests/Core/Render/RenderCacheTest.php
View source
<?php
namespace Drupal\KernelTests\Core\Render;
use Drupal\KernelTests\KernelTestBase;
use Drupal\Tests\user\Traits\UserCreationTrait;
class RenderCacheTest extends KernelTestBase {
use UserCreationTrait;
protected static $modules = [
'user',
'system',
];
protected function setUp() : void {
parent::setUp();
$this
->installEntitySchema('user');
$this
->installConfig([
'user',
]);
$this
->installSchema('system', [
'sequences',
]);
}
public function testUser1PermissionContext() {
$this
->doTestUser1WithContexts([
'user.permissions',
]);
}
public function testUser1RolesContext() {
$this
->doTestUser1WithContexts([
'user.roles',
]);
}
protected function doTestUser1WithContexts($contexts) {
$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.');
\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);
$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();
\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();
\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();
\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();
}
}