You are here

public function TermTest::testTaxonomyGetTermByName in Drupal 9

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

Tests taxonomy_term_load_multiple_by_name().

@group legacy

File

core/modules/taxonomy/tests/src/Functional/TermTest.php, line 537

Class

TermTest
Tests load, save and delete for taxonomy terms.

Namespace

Drupal\Tests\taxonomy\Functional

Code

public function testTaxonomyGetTermByName() {
  $term = $this
    ->createTerm($this->vocabulary);
  $this
    ->expectDeprecation('taxonomy_term_load_multiple_by_name() is deprecated in drupal:9.3.0 and is removed from drupal:10.0.0. Use \\Drupal::entityTypeManager()->getStorage("taxonomy_vocabulary")->loadByProperties(["name" => $name, "vid" => $vid]) instead, to get a list of taxonomy term entities having the same name and keyed by their term ID. See https://www.drupal.org/node/3039041');

  // Load the term with the exact name.
  $terms = taxonomy_term_load_multiple_by_name($term
    ->getName());
  $this
    ->assertTrue(isset($terms[$term
    ->id()]), 'Term loaded using exact name.');

  // Load the term with space concatenated.
  $terms = taxonomy_term_load_multiple_by_name('  ' . $term
    ->getName() . '   ');
  $this
    ->assertTrue(isset($terms[$term
    ->id()]), 'Term loaded with extra whitespace.');

  // Load the term with name uppercased.
  $terms = taxonomy_term_load_multiple_by_name(strtoupper($term
    ->getName()));
  $this
    ->assertTrue(isset($terms[$term
    ->id()]), 'Term loaded with uppercased name.');

  // Load the term with name lowercased.
  $terms = taxonomy_term_load_multiple_by_name(strtolower($term
    ->getName()));
  $this
    ->assertTrue(isset($terms[$term
    ->id()]), 'Term loaded with lowercased name.');

  // Try to load an invalid term name.
  $terms = taxonomy_term_load_multiple_by_name('Banana');
  $this
    ->assertEmpty($terms, 'No term loaded with an invalid name.');

  // Try to load the term using a substring of the name.
  $terms = taxonomy_term_load_multiple_by_name(mb_substr($term
    ->getName(), 2), 'No term loaded with a substring of the name.');
  $this
    ->assertEmpty($terms);

  // Create a new term in a different vocabulary with the same name.
  $new_vocabulary = $this
    ->createVocabulary();
  $new_term = Term::create([
    'name' => $term
      ->getName(),
    'vid' => $new_vocabulary
      ->id(),
  ]);
  $new_term
    ->save();

  // Load multiple terms with the same name.
  $terms = taxonomy_term_load_multiple_by_name($term
    ->getName());
  $this
    ->assertCount(2, $terms, 'Two terms loaded with the same name.');

  // Load single term when restricted to one vocabulary.
  $terms = taxonomy_term_load_multiple_by_name($term
    ->getName(), $this->vocabulary
    ->id());
  $this
    ->assertCount(1, $terms, 'One term loaded when restricted by vocabulary.');
  $this
    ->assertTrue(isset($terms[$term
    ->id()]), 'Term loaded using exact name and vocabulary machine name.');

  // Create a new term with another name.
  $term2 = $this
    ->createTerm($this->vocabulary);

  // Try to load a term by name that doesn't exist in this vocabulary but
  // exists in another vocabulary.
  $terms = taxonomy_term_load_multiple_by_name($term2
    ->getName(), $new_vocabulary
    ->id());
  $this
    ->assertEmpty($terms, 'Invalid term name restricted by vocabulary machine name not loaded.');

  // Try to load terms filtering by a non-existing vocabulary.
  $terms = taxonomy_term_load_multiple_by_name($term2
    ->getName(), 'non_existing_vocabulary');
  $this
    ->assertCount(0, $terms, 'No terms loaded when restricted by a non-existing vocabulary.');
}