public function TokenUserTest::testUserTokens in Token 8
Tests the user releated tokens.
File
- tests/
src/ Functional/ TokenUserTest.php, line 51
Class
- TokenUserTest
- Tests user tokens.
Namespace
Drupal\Tests\token\FunctionalCode
public function testUserTokens() {
// Enable user pictures.
\Drupal::state()
->set('user_pictures', 1);
\Drupal::state()
->set('user_picture_file_size', '');
// Set up the pictures directory.
$picture_path = 'public://' . \Drupal::state()
->get('user_picture_path', 'pictures');
if (!\Drupal::service('file_system')
->prepareDirectory($picture_path, FileSystemInterface::CREATE_DIRECTORY)) {
$this
->fail('Could not create directory ' . $picture_path . '.');
}
// Add a user picture to the account.
$image = current($this
->getTestFiles('image'));
$edit = [
'files[user_picture_0]' => \Drupal::service('file_system')
->realpath($image->uri),
];
$this
->drupalPostForm('user/' . $this->account
->id() . '/edit', $edit, 'Save');
$storage = \Drupal::entityTypeManager()
->getStorage('user');
// Load actual user data from database.
$storage
->resetCache();
$this->account = $storage
->load($this->account
->id());
$this
->assertNotEmpty($this->account->user_picture->target_id, 'User picture uploaded.');
$picture = [
'#theme' => 'user_picture',
'#account' => $this->account,
];
/** @var \Drupal\Core\Render\RendererInterface $renderer */
$renderer = \Drupal::service('renderer');
$user_tokens = [
'picture' => $renderer
->renderPlain($picture),
'picture:fid' => $this->account->user_picture->target_id,
'picture:size-raw' => 125,
'ip-address' => NULL,
'roles' => implode(', ', $this->account
->getRoles()),
];
$this
->assertTokens('user', [
'user' => $this->account,
], $user_tokens);
// Remove the simpletest-created user role.
$roles = $this->account
->getRoles();
$this->account
->removeRole(end($roles));
$this->account
->save();
// Remove the user picture field and reload the user.
FieldStorageConfig::loadByName('user', 'user_picture')
->delete();
$storage
->resetCache();
$this->account = $storage
->load($this->account
->id());
$user_tokens = [
'picture' => NULL,
'picture:fid' => NULL,
'ip-address' => NULL,
'roles' => 'authenticated',
'roles:keys' => AccountInterface::AUTHENTICATED_ROLE,
];
$this
->assertTokens('user', [
'user' => $this->account,
], $user_tokens);
// The ip address token should work for the current user token type.
$tokens = [
'ip-address' => \Drupal::request()
->getClientIp(),
];
$this
->assertTokens('current-user', [], $tokens);
$anonymous = new AnonymousUserSession();
$tokens = [
'roles' => 'anonymous',
'roles:keys' => AccountInterface::ANONYMOUS_ROLE,
];
$this
->assertTokens('user', [
'user' => $anonymous,
], $tokens);
}