You are here

public function PathautoTokenTest::testPathautoTokens in Pathauto 8

File

tests/src/Kernel/PathautoTokenTest.php, line 22

Class

PathautoTokenTest
Tests tokens provided by Pathauto.

Namespace

Drupal\Tests\pathauto\Kernel

Code

public function testPathautoTokens() {
  $this
    ->installConfig([
    'pathauto',
  ]);
  $array = [
    'test first arg',
    'The Array / value',
  ];
  $tokens = [
    'join-path' => 'test-first-arg/array-value',
  ];
  $data['array'] = $array;
  $replacements = $this
    ->assertTokens('array', $data, $tokens);

  // Ensure that the cleanTokenValues() method does not alter this token value.

  /* @var \Drupal\pathauto\AliasCleanerInterface $alias_cleaner */
  $alias_cleaner = \Drupal::service('pathauto.alias_cleaner');
  $alias_cleaner
    ->cleanTokenValues($replacements, $data, []);
  $this
    ->assertEquals('test-first-arg/array-value', $replacements['[array:join-path]']);

  // Test additional token cleaning and its configuration.
  $safe_tokens = $this
    ->config('pathauto.settings')
    ->get('safe_tokens');
  $safe_tokens[] = 'safe';
  $this
    ->config('pathauto.settings')
    ->set('safe_tokens', $safe_tokens)
    ->save();
  $safe_tokens = [
    '[example:path]',
    '[example:url]',
    '[example:url-brief]',
    '[example:login-url]',
    '[example:login-url:relative]',
    '[example:url:relative]',
    '[example:safe]',
    '[safe:example]',
  ];
  $unsafe_tokens = [
    '[example:path_part]',
    '[example:something_url]',
    '[example:unsafe]',
  ];
  foreach ($safe_tokens as $token) {
    $replacements = [
      $token => 'this/is/a/path',
    ];
    $alias_cleaner
      ->cleanTokenValues($replacements);
    $this
      ->assertEquals('this/is/a/path', $replacements[$token], "Token {$token} cleaned.");
  }
  foreach ($unsafe_tokens as $token) {
    $replacements = [
      $token => 'This is not a / path',
    ];
    $alias_cleaner
      ->cleanTokenValues($replacements);
    $this
      ->assertEquals('not-path', $replacements[$token], "Token {$token} not cleaned.");
  }
}