You are here

protected function TermAutocompleteTest::setUp in Drupal 9

Same name and namespace in other branches
  1. 8 core/modules/taxonomy/tests/src/Functional/TermAutocompleteTest.php \Drupal\Tests\taxonomy\Functional\TermAutocompleteTest::setUp()

Overrides TaxonomyTestBase::setUp

File

core/modules/taxonomy/tests/src/Functional/TermAutocompleteTest.php, line 69

Class

TermAutocompleteTest
Tests the autocomplete implementation of the taxonomy class.

Namespace

Drupal\Tests\taxonomy\Functional

Code

protected function setUp() : void {
  parent::setUp();

  // Create a vocabulary.
  $this->vocabulary = $this
    ->createVocabulary();

  // Create 11 terms, which have some sub-string in common, in a
  // non-alphabetical order, so that we will have more than 10 matches later
  // when we test the correct number of results is returned, and we can test
  // the order of the results. The location of the sub-string to match varies
  // also, since it should not be necessary to start with the sub-string to
  // match it. Save term IDs to reuse later.
  $termNames = [
    'aaa 20 bbb',
    'aaa 70 bbb',
    'aaa 10 bbb',
    'aaa 12 bbb',
    'aaa 40 bbb',
    'aaa 11 bbb',
    'aaa 30 bbb',
    'aaa 50 bbb',
    'aaa 80',
    'aaa 90',
    'bbb 60 aaa',
  ];
  foreach ($termNames as $termName) {
    $term = $this
      ->createTerm($this->vocabulary, [
      'name' => $termName,
    ]);
    $this->termIds[$termName] = $term
      ->id();
  }

  // Create a taxonomy_term_reference field on the article Content Type that
  // uses a taxonomy_autocomplete widget.
  $this->fieldName = mb_strtolower($this
    ->randomMachineName());
  FieldStorageConfig::create([
    'field_name' => $this->fieldName,
    'entity_type' => 'node',
    'type' => 'entity_reference',
    'cardinality' => FieldStorageDefinitionInterface::CARDINALITY_UNLIMITED,
    'settings' => [
      'target_type' => 'taxonomy_term',
    ],
  ])
    ->save();
  FieldConfig::create([
    'field_name' => $this->fieldName,
    'bundle' => 'article',
    'entity_type' => 'node',
    'settings' => [
      'handler' => 'default',
      'handler_settings' => [
        // Restrict selection of terms to a single vocabulary.
        'target_bundles' => [
          $this->vocabulary
            ->id() => $this->vocabulary
            ->id(),
        ],
      ],
    ],
  ])
    ->save();
  EntityFormDisplay::load('node.article.default')
    ->setComponent($this->fieldName, [
    'type' => 'entity_reference_autocomplete',
  ])
    ->save();
  EntityViewDisplay::load('node.article.default')
    ->setComponent($this->fieldName, [
    'type' => 'entity_reference_label',
  ])
    ->save();

  // Create a user and then login.
  $this->adminUser = $this
    ->drupalCreateUser([
    'create article content',
  ]);
  $this
    ->drupalLogin($this->adminUser);

  // Retrieve the autocomplete url.
  $this
    ->drupalGet('node/add/article');
  $field = $this
    ->assertSession()
    ->fieldExists("{$this->fieldName}[0][target_id]");
  $this->autocompleteUrl = $this
    ->getAbsoluteUrl($field
    ->getAttribute('data-autocomplete-path'));
}