View source
<?php
namespace Drupal\Tests\message\Kernel;
use Drupal\Core\Language\Language;
use Drupal\KernelTests\KernelTestBase;
use Drupal\message\Entity\Message;
use Drupal\message\MessageInterface;
use Drupal\Tests\user\Traits\UserCreationTrait;
class MessageTest extends KernelTestBase {
use MessageTemplateCreateTrait;
use UserCreationTrait;
public static $modules = [
'filter',
'message',
'user',
'system',
];
protected $entityTypeManager;
protected $messageTemplate;
public function setUp() {
parent::setUp();
$this
->installConfig([
'filter',
]);
$this
->installEntitySchema('message');
$this
->installEntitySchema('user');
$this
->installSchema('system', [
'sequences',
]);
$this->entityTypeManager = $this->container
->get('entity_type.manager');
$this->messageTemplate = $this
->createMessageTemplate(mb_strtolower($this
->randomMachineName()), $this
->randomString(), $this
->randomString(), []);
}
public function testMissingTemplate() {
$message = Message::create([
'template' => 'missing',
]);
$message
->save();
}
public function testGetOwner() {
$message = Message::create([
'template' => $this->messageTemplate
->id(),
]);
$account = $this
->createUser();
$message
->setOwner($account);
$this
->assertEquals($account
->id(), $message
->getOwnerId());
$owner = $message
->getOwner();
$this
->assertEquals($account
->id(), $owner
->id());
}
public function testGetText() {
$message = $this->entityTypeManager
->getStorage('message')
->create([
'template' => 'no_exists',
]);
$this
->assertEmpty($message
->getText());
$message = $this->entityTypeManager
->getStorage('message')
->create([
'template' => $this->messageTemplate
->id(),
]);
$this
->assertEmpty($message
->getText(Language::LANGCODE_NOT_SPECIFIED, 123));
$this->messageTemplate
->setSettings([
'token options' => [
'token replace' => TRUE,
'clear' => FALSE,
],
]);
$this->messageTemplate
->set('text', [
[
'value' => 'foo [fake:token] and [message:author:name]',
'format' => filter_default_format(),
],
]);
$this->messageTemplate
->save();
$message = $this->entityTypeManager
->getStorage('message')
->create([
'template' => $this->messageTemplate
->id(),
]);
$text = $message
->getText();
$this
->assertEquals(1, count($text));
$this
->assertEquals('<p>foo [fake:token] and [message:author:name]</p>' . "\n", $text[0]);
$this->messageTemplate
->setSettings([
'token options' => [
'token replace' => TRUE,
'clear' => TRUE,
],
]);
$this->messageTemplate
->save();
$message = $this->entityTypeManager
->getStorage('message')
->create([
'template' => $this->messageTemplate
->id(),
]);
$text = $message
->getText();
$this
->assertEquals(1, count($text));
$this
->assertEquals('<p>foo and </p>' . "\n", $text[0]);
$account = $this
->createUser();
$message
->setOwner($account);
$message
->save();
$text = $message
->getText();
$this
->assertEquals(1, count($text));
$this
->assertEquals('<p>foo and ' . $account
->getAccountName() . "</p>\n", $text[0]);
$this->messageTemplate
->setSettings([
'token options' => [
'token replace' => FALSE,
'clear' => TRUE,
],
]);
$this->messageTemplate
->save();
$text = $message
->getText();
$this
->assertEquals(1, count($text));
$this
->assertEquals('<p>foo [fake:token] and [message:author:name]</p>' . "\n", $text[0]);
}
public function testGetTextArgumentProcessing() {
$this->messageTemplate
->setSettings([
'token options' => [
'token replace' => FALSE,
'clear' => TRUE,
],
]);
$this->messageTemplate
->set('text', [
[
'value' => '@foo @replace and @no_replace',
'format' => filter_default_format(),
],
[
'value' => 'some @foo other @replace',
'format' => filter_default_format(),
],
]);
$this->messageTemplate
->save();
$message = $this->entityTypeManager
->getStorage('message')
->create([
'template' => $this->messageTemplate
->id(),
'arguments' => [
[
'@foo' => 'bar',
'@replace' => [
'pass message' => TRUE,
'arguments' => [
'bar_replacement',
],
'callback' => [
static::class,
'argumentCallback',
],
],
],
],
]);
$message
->save();
$text = $message
->getText();
$this
->assertEquals(2, count($text));
$this
->assertEquals('<p>bar bar_replacement_' . $message
->id() . ' and @no_replace</p>' . "\n", $text[0]);
$this
->assertEquals('<p>some bar other bar_replacement_' . $message
->id() . "</p>\n", $text[1]);
$message = $this->entityTypeManager
->getStorage('message')
->create([
'template' => $this->messageTemplate
->id(),
'arguments' => [
[
'@foo' => 'bar',
'@replace' => [
'pass message' => FALSE,
'arguments' => [
'bar_replacement',
],
'callback' => [
static::class,
'argumentCallback',
],
],
],
],
]);
$message
->save();
$text = $message
->getText();
$this
->assertEquals(2, count($text));
$this
->assertEquals('<p>bar bar_replacement and @no_replace</p>' . "\n", $text[0]);
$this
->assertEquals('<p>some bar other bar_replacement' . "</p>\n", $text[1]);
}
public static function argumentCallback($arg_1, MessageInterface $message = NULL) {
if ($message) {
$text = $arg_1 . '_' . $message
->id();
}
else {
$text = $arg_1;
}
return $text;
}
}