name-8.x-1.x-dev/tests/src/Functional/NameNodeTokenReplaceTest.php

tests/src/Functional/NameNodeTokenReplaceTest.php
<?php

namespace Drupal\Tests\name\Functional;

use Drupal\Component\Render\FormattableMarkup;
use Drupal\Core\Render\BubbleableMetadata;
use Drupal\node\Entity\Node;
use Drupal\node\Entity\NodeType;

/**
 * Tests text replacements in content to check node name token replacement.
 *
 * @group name
 */
class NameNodeTokenReplaceTest extends NameTestBase {

  use NameTestTrait;

  /**
   * Modules to enable.
   *
   * @var array
   */
  protected static $modules = ['node', 'filter', 'token'];

  /**
   * The name formatter.
   *
   * @var \Drupal\name\NameFormatterInterface
   */
  protected $formatter;

  /**
   * The interface language.
   *
   * @var \Drupal\Core\Language\LanguageInterface
   */
  protected $interfaceLanguage;

  /**
   * The token service.
   *
   * @var \Drupal\Core\Utility\Token
   */
  protected $tokenService;

  /**
   * {@inheritdoc}
   */
  public function setUp(): void {
    parent::setUp();

    $this->interfaceLanguage = \Drupal::languageManager()->getCurrentLanguage();
    $this->tokenService = \Drupal::token();

    $node_type = NodeType::create(['type' => 'article', 'name' => 'Article']);
    $node_type->save();
    node_add_body_field($node_type);
    $this->createNameField('field_name', 'node', 'article');
    $this->createNameField('field_realname', 'user', 'user');
  }

  /**
   * Creates a node, then tests the tokens generated from it.
   */
  public function testNodeTokenReplacement() {
    $this->formatter = \Drupal::service('name.formatter');

    \Drupal::configFactory()
      ->getEditable('name.settings')
      ->set('user_preferred', 'field_realname')
      ->save();

    // Create a user and a node with populated name fields.
    $account = $this->createUser();
    $account->set('field_realname', [
      'title' => 'UUtt',
      'given' => 'UUgg',
      'middle' => 'UUmm UUnn',
      'family' => 'UUff',
      'generational' => 'Jr.',
      'credentials' => 'UUCreds, UUMoreCreds',
    ])->save();

    /** @var \Drupal\node\NodeInterface $node */
    $node = Node::create([
      'type' => 'article',
      'tnid' => 0,
      'uid' => $account->id(),
      'title' => '<blink>Blinking Text</blink>',
      'body' => [
        [
          'value' => 'Regular NODE body for the test.',
          'summary' => 'Fancy NODE summary.',
          'format' => 'plain_text',
        ],
      ],
      'field_name' => [
        [
          'title' => 'Ttt',
          'given' => 'Ggg',
          'middle' => 'Mmm Nnnn',
          'family' => 'Fff',
          'generational' => 'Sr.',
          'credentials' => 'Creds, MoreCreds',
        ],
      ],
    ]);
    $node->save();

    /** @var \Drupal\name\Plugin\Field\FieldType\NameItem $item */
    $item = $node->get('field_name')->get(0);
    $components = $item->filteredArray();

    // Generate and test tokens.
    $tests = [];
    $tests['[node:field_name]'] = $this->formatter->format($components);
    $tests['[node:field_name:title]'] = $components['title'];
    $tests['[node:field_name:given]'] = $components['given'];
    $tests['[node:field_name:middle]'] = $components['middle'];
    $tests['[node:field_name:family]'] = $components['family'];
    $tests['[node:field_name:generational]'] = $components['generational'];
    $tests['[node:field_name:credentials]'] = $components['credentials'];

    // @todo consider multiple value tests, "[node:field_name:1:family]".
    /** @var \Drupal\name\Plugin\Field\FieldType\NameItem $item */
    $item = $account->get('field_realname')->get(0);
    $components = $item->filteredArray();

    $tests['[node:author:name]'] = $account->getAccountName();
    $tests['[node:author:account-name]'] = $account->getAccountName();
    $tests['[node:author:display-name]'] = $account->getDisplayName();
    $tests['[node:author:field_realname]'] = $this->formatter->format($components);
    $tests['[node:author:field_realname:family]'] = $components['family'];

    // @todo consider current user tests, "[current-user:display-name]".
    // Test to make sure that we generated something for each token.
    $this->assertFalse(in_array(0, array_map('strlen', $tests)), 'No empty tokens generated.');

    foreach ($tests as $input => $expected) {
      $bubbleable_metadata = new BubbleableMetadata();
      $output = $this->tokenService->replace($input, ['node' => $node], ['langcode' => $this->interfaceLanguage->getId()], $bubbleable_metadata);
      $this->assertEquals($output, (string) $expected, new FormattableMarkup('Node token %token replaced with %expected, got %actual.', [
        '%token' => $input,
        '%expected' => $expected,
        '%actual' => $output,
      ]));
      // @todo caching tests.
      // @see NodeTokenReplaceTest.
      // $this->assertEquals($bubbleable_metadata, $metadata_tests[$input]);
    }
  }

}

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc