outline-8.x-1.x-dev/tests/src/Functional/TokenReplaceTest.php

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

namespace Drupal\Tests\outline\Functional;

use Drupal\Component\Render\FormattableMarkup;
use Drupal\Core\Field\FieldStorageDefinitionInterface;
use Drupal\Core\Render\BubbleableMetadata;

/**
 * Generates text using placeholders for dummy content to check outline token
 * replacement.
 *
 * @group outline
 */
class TokenReplaceTest extends OutlineTestBase {

  /**
   * The outline used for creating entries.
   *
   * @var \Drupal\outline\OutlineInterface
   */
  protected $outline;

  /**
   * Name of the outline entry reference field.
   *
   * @var string
   */
  protected $fieldName;

  /**
   * {@inheritdoc}
   */
  protected $defaultTheme = 'stark';

  protected function setUp(): void {
    parent::setUp();
    $this->drupalLogin($this->drupalCreateUser([
      'administer outline',
      'bypass node access',
    ]));
    $this->outline = $this->createOutline();
    $this->fieldName = 'outline_' . $this->outline->id();

    $handler_settings = [
      'target_bundles' => [
        $this->outline->id() => $this->outline->id(),
      ],
      'auto_create' => TRUE,
    ];
    $this->createEntityReferenceField('node', 'article', $this->fieldName, NULL, 'outline_entry', 'default', $handler_settings, FieldStorageDefinitionInterface::CARDINALITY_UNLIMITED);

    /** @var \Drupal\Core\Entity\EntityDisplayRepositoryInterface $display_repository */
    $display_repository = \Drupal::service('entity_display.repository');
    $display_repository->getFormDisplay('node', 'article')
      ->setComponent($this->fieldName, [
        'type' => 'options_select',
      ])
      ->save();
    $display_repository->getViewDisplay('node', 'article')
      ->setComponent($this->fieldName, [
        'type' => 'entity_reference_label',
      ])
      ->save();
  }

  /**
   * Creates some entries and a node, then tests the tokens generated from them.
   */
  public function testOutlineTokenReplacement() {
    $token_service = \Drupal::token();
    $language_interface = \Drupal::languageManager()->getCurrentLanguage();

    // Create two outline entries.
    $entry1 = $this->createEntry($this->outline);
    $entry2 = $this->createEntry($this->outline);

    // Edit $entry2, setting $entry1 as parent.
    $edit = [];
    $edit['name[0][value]'] = '<blink>Blinking Text</blink>';
    $edit['parent[]'] = [$entry1->id()];
    $this->drupalPostForm('outline/entry/' . $entry2->id() . '/edit', $edit, t('Save'));

    // Create node with entry2.
    $edit = [];
    $node = $this->drupalCreateNode(['type' => 'article']);
    $edit[$this->fieldName . '[]'] = $entry2->id();
    $this->drupalPostForm('node/' . $node->id() . '/edit', $edit, t('Save'));

    // Generate and test sanitized tokens for entry1.
    $tests = [];
    $tests['[entry:tid]'] = $entry1->id();
    $tests['[entry:name]'] = $entry1->getName();
    $tests['[entry:description]'] = $entry1->description->processed;
    $tests['[entry:url]'] = $entry1->toUrl('canonical', ['absolute' => TRUE])->toString();
    $tests['[entry:node-count]'] = 0;
    $tests['[entry:parent:name]'] = '[entry:parent:name]';
    $tests['[entry:outline:name]'] = $this->outline->label();
    $tests['[entry:outline]'] = $this->outline->label();

    $base_bubbleable_metadata = BubbleableMetadata::createFromObject($entry1);

    $metadata_tests = [];
    $metadata_tests['[entry:tid]'] = $base_bubbleable_metadata;
    $metadata_tests['[entry:name]'] = $base_bubbleable_metadata;
    $metadata_tests['[entry:description]'] = $base_bubbleable_metadata;
    $metadata_tests['[entry:url]'] = $base_bubbleable_metadata;
    $metadata_tests['[entry:node-count]'] = $base_bubbleable_metadata;
    $metadata_tests['[entry:parent:name]'] = $base_bubbleable_metadata;
    $bubbleable_metadata = clone $base_bubbleable_metadata;
    $metadata_tests['[entry:outline:name]'] = $bubbleable_metadata->addCacheTags($this->outline->getCacheTags());
    $metadata_tests['[entry:outline]'] = $bubbleable_metadata->addCacheTags($this->outline->getCacheTags());

    foreach ($tests as $input => $expected) {
      $bubbleable_metadata = new BubbleableMetadata();
      $output = $token_service->replace($input, ['entry' => $entry1], ['langcode' => $language_interface->getId()], $bubbleable_metadata);
      $this->assertEqual($output, $expected, new FormattableMarkup('Sanitized outline entry token %token replaced.', ['%token' => $input]));
      $this->assertEqual($bubbleable_metadata, $metadata_tests[$input]);
    }

    // Generate and test sanitized tokens for entry2.
    $tests = [];
    $tests['[entry:tid]'] = $entry2->id();
    $tests['[entry:name]'] = $entry2->getName();
    $tests['[entry:description]'] = $entry2->description->processed;
    $tests['[entry:url]'] = $entry2->toUrl('canonical', ['absolute' => TRUE])->toString();
    $tests['[entry:node-count]'] = 1;
    $tests['[entry:parent:name]'] = $entry1->getName();
    $tests['[entry:parent:url]'] = $entry1->toUrl('canonical', ['absolute' => TRUE])->toString();
    $tests['[entry:parent:parent:name]'] = '[entry:parent:parent:name]';
    $tests['[entry:outline:name]'] = $this->outline->label();

    // Test to make sure that we generated something for each token.
    $this->assertNotContains(0, array_map('strlen', $tests), 'No empty tokens generated.');

    foreach ($tests as $input => $expected) {
      $output = $token_service->replace($input, ['entry' => $entry2], ['langcode' => $language_interface->getId()]);
      $this->assertEqual($output, $expected, new FormattableMarkup('Sanitized outline entry token %token replaced.', ['%token' => $input]));
    }

    // Generate and test sanitized tokens.
    $tests = [];
    $tests['[outline:vid]'] = $this->outline->id();
    $tests['[outline:name]'] = $this->outline->label();
    $tests['[outline:description]'] = $this->outline->getDescription();
    $tests['[outline:node-count]'] = 1;
    $tests['[outline:entry-count]'] = 2;

    // Test to make sure that we generated something for each token.
    $this->assertNotContains(0, array_map('strlen', $tests), 'No empty tokens generated.');

    foreach ($tests as $input => $expected) {
      $output = $token_service->replace($input, ['outline' => $this->outline], ['langcode' => $language_interface->getId()]);
      $this->assertEqual($output, $expected, new FormattableMarkup('Sanitized outline outline token %token replaced.', ['%token' => $input]));
    }
  }

}

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

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