eca-1.0.x-dev/modules/base/tests/src/Kernel/TokenReplaceTest.php
modules/base/tests/src/Kernel/TokenReplaceTest.php
<?php
namespace Drupal\Tests\eca_base\Kernel;
use Drupal\KernelTests\KernelTestBase;
use Drupal\user\Entity\User;
use PHPUnit\Framework\Attributes\Group;
/**
* Kernel tests for the "eca_token_replace" action plugin.
*/
#[Group('eca')]
#[Group('eca_base')]
class TokenReplaceTest extends KernelTestBase {
/**
* The modules.
*
* @var string[]
* The modules.
*/
protected static $modules = [
'system',
'user',
'eca',
'eca_base',
];
/**
* {@inheritdoc}
*/
public function setUp(): void {
parent::setUp();
$this->installEntitySchema('user');
$this->installConfig(static::$modules);
}
/**
* Tests TokenReplace.
*/
public function testTokenReplace(): void {
/** @var \Drupal\Core\Action\ActionManager $action_manager */
$action_manager = \Drupal::service('plugin.manager.action');
/** @var \Drupal\eca\Token\TokenInterface $token_services */
$token_services = \Drupal::service('eca.token_services');
$token_text = "This text contains a [token:value]";
$token_services->addTokenData('token:text', $token_text);
$token_services->addTokenData('token:value', 'dynamic token value');
/** @var \Drupal\eca_base\Plugin\Action\TokenSetValue $action */
$action = $action_manager->createInstance('eca_token_set_value', [
'token_name' => 'my_custom_token:value1',
'token_value' => '[token:text]',
'use_yaml' => FALSE,
]);
$this->assertTrue($action->access(NULL));
$action->execute(NULL);
$this->assertEquals("This text contains a [token:value]", $token_services->replace('[my_custom_token:value1]'), "Recursive token replacement must not happen with eca_token_set_value.");
/** @var \Drupal\eca_base\Plugin\Action\TokenReplace $action */
$action = $action_manager->createInstance('eca_token_replace', [
'token_name' => 'my_custom_token:value2',
'token_value' => '[token:text]',
'use_yaml' => FALSE,
]);
$this->assertTrue($action->access(NULL));
$action->execute(NULL);
$this->assertEquals("This text contains a dynamic token value", $token_services->replace('[my_custom_token:value2]'));
$yaml_string = <<<YAML
0: "Hello"
1: "[token:text]"
YAML;
/** @var \Drupal\eca_base\Plugin\Action\TokenReplace $action */
$action = $action_manager->createInstance('eca_token_replace', [
'token_name' => 'object_token',
'token_value' => $yaml_string,
'use_yaml' => TRUE,
]);
$this->assertTrue($action->access(NULL));
$action->execute(NULL);
$this->assertEquals('Hello', $token_services->replaceClear('[object_token:0]'));
$this->assertEquals("This text contains a dynamic token value", $token_services->replace('[object_token:1]'));
$user = User::create([
'mail' => 'test@eca.local',
'name' => '[token:text]',
]);
$token_services->addTokenData('new_user', $user);
/** @var \Drupal\eca_base\Plugin\Action\TokenReplace $action */
$action = $action_manager->createInstance('eca_token_replace', [
'token_name' => 'replaced',
'token_value' => '[new_user:name:value]',
'use_yaml' => FALSE,
]);
$this->assertTrue($action->access(NULL));
$action->execute(NULL);
$this->assertEquals("[token:text]", $user->name->value, "The property of an entity must not be directly manipulated.");
$this->assertEquals("This text contains a dynamic token value", $token_services->replace('[replaced]'));
}
}
