View source
<?php
namespace Drupal\Tests\message\Kernel;
use Drupal\Component\Utility\Html;
use Drupal\KernelTests\KernelTestBase;
use Drupal\message\Entity\Message;
use Drupal\user\Entity\User;
class MessageTokenTest extends KernelTestBase {
use \Drupal\Tests\message\Kernel\MessageTemplateCreateTrait;
public static $modules = [
'message',
'user',
'system',
'filter',
];
protected $user;
protected $entityTypeManager;
public function setUp() {
parent::setUp();
$this
->installEntitySchema('message');
$this
->installEntitySchema('user');
$this
->installConfig([
'filter',
]);
$this->user = User::create([
'uid' => mt_rand(5, 10),
'name' => $this
->randomString(),
]);
$this->user
->save();
$this->entityTypeManager = $this->container
->get('entity_type.manager');
}
public function testTokens() {
$message_template = $this
->createMessageTemplate('dummy_message', 'Dummy message', '', [
'[message:author:name]',
]);
$message = Message::create([
'template' => $message_template
->id(),
])
->setOwnerId($this->user
->id());
$message
->save();
$this
->assertEquals('<p>' . Html::escape($this->user
->label()) . '</p>', (string) $message, 'The message rendered the author name.');
}
public function testTokenClearing() {
$token_options = [
'token options' => [
'clear' => TRUE,
'token replace' => TRUE,
],
];
$message_template = $this
->createMessageTemplate('dummy_message', 'Dummy message', '', [
'[message:author:name] [bogus:token]',
], $token_options);
$message = Message::create([
'template' => $message_template
->id(),
])
->setOwnerId($this->user
->id());
$message
->save();
$this
->assertEquals('<p>' . Html::escape($this->user
->label()) . ' </p>', (string) $message, 'The message rendered the author name and stripped unused tokens.');
$token_options = [
'token options' => [
'clear' => FALSE,
'token replace' => TRUE,
],
];
$message_template
->setSettings($token_options);
$message_template
->save();
$this
->assertEquals('<p>' . Html::escape($this->user
->label() . ' [bogus:token]') . '</p>', (string) $message, 'The message rendered the author name and did not strip the token.');
}
public function testHardCodedTokens() {
$random_text = $this
->randomString();
$token_messages = [
'some text @{message:author} ' . $random_text,
'some text %{message:author} ' . $random_text,
'some text @{wrong:token} ' . $random_text,
];
$replaced_messages = [
'<p>some text ' . Html::escape($this->user
->label() . ' ' . $random_text) . "</p>\n",
'<p>some text <em class="placeholder">' . Html::escape($this->user
->label()) . '</em> ' . Html::escape($random_text) . "</p>\n",
'<p>some text @{wrong:token} ' . Html::escape($random_text) . "</p>\n",
];
$message_template = $this
->createMessageTemplate('dummy_message', 'Dummy message', '', $token_messages);
$original_message = Message::create([
'template' => $message_template
->id(),
'uid' => $this->user
->id(),
]);
$this
->assertTrue($original_message
->getArguments() == FALSE, 'No message arguments exist prior to saving the message.');
$original_message
->save();
$this->entityTypeManager
->getStorage('message')
->resetCache();
$message = Message::load($original_message
->id());
$this
->assertNotSame($message, $original_message);
$arguments = $message
->getArguments();
$this
->assertEquals(count($arguments), 2, 'Correct number of arguments added after saving the message.');
$this
->assertEquals($replaced_messages, $message
->getText(), 'The text rendered as expected.');
}
}