Updated Drupal to 8.6. This goes with the following updates because it's possible...
[yaffs-website] / web / core / modules / taxonomy / tests / src / Functional / TermTranslationTest.php
diff --git a/web/core/modules/taxonomy/tests/src/Functional/TermTranslationTest.php b/web/core/modules/taxonomy/tests/src/Functional/TermTranslationTest.php
new file mode 100644 (file)
index 0000000..bd90850
--- /dev/null
@@ -0,0 +1,149 @@
+<?php
+
+namespace Drupal\Tests\taxonomy\Functional;
+
+use Drupal\Core\Url;
+use Drupal\Tests\system\Functional\Menu\AssertBreadcrumbTrait;
+
+/**
+ * Tests for proper breadcrumb translation.
+ *
+ * @group taxonomy
+ */
+class TermTranslationTest extends TaxonomyTestBase {
+
+  use AssertBreadcrumbTrait;
+  use TaxonomyTranslationTestTrait;
+
+  /**
+   * Term to translated term mapping.
+   *
+   * @var array
+   */
+  protected $termTranslationMap = [
+    'one' => 'translatedOne',
+    'two' => 'translatedTwo',
+    'three' => 'translatedThree',
+  ];
+
+  /**
+   * Created terms.
+   *
+   * @var \Drupal\taxonomy\Entity\Term[]
+   */
+  protected $terms = [];
+
+  /**
+   * {@inheritdoc}
+   */
+  public static $modules = ['taxonomy', 'language', 'content_translation'];
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function setUp() {
+    parent::setUp();
+    $this->setupLanguages();
+    $this->vocabulary = $this->createVocabulary();
+    $this->enableTranslation();
+    $this->setUpTerms();
+    $this->setUpTermReferenceField();
+  }
+
+  /**
+   * Test translated breadcrumbs.
+   */
+  public function testTranslatedBreadcrumbs() {
+    // Ensure non-translated breadcrumb is correct.
+    $breadcrumb = [Url::fromRoute('<front>')->toString() => 'Home'];
+    foreach ($this->terms as $term) {
+      $breadcrumb[$term->url()] = $term->label();
+    }
+    // The last item will not be in the breadcrumb.
+    array_pop($breadcrumb);
+
+    // Check the breadcrumb on the leaf term page.
+    $term = $this->getLeafTerm();
+    $this->assertBreadcrumb($term->urlInfo(), $breadcrumb, $term->label());
+
+    $languages = \Drupal::languageManager()->getLanguages();
+
+    // Construct the expected translated breadcrumb.
+    $breadcrumb = [Url::fromRoute('<front>', [], ['language' => $languages[$this->translateToLangcode]])->toString() => 'Home'];
+    foreach ($this->terms as $term) {
+      $translated = $term->getTranslation($this->translateToLangcode);
+      $url = $translated->url('canonical', ['language' => $languages[$this->translateToLangcode]]);
+      $breadcrumb[$url] = $translated->label();
+    }
+    array_pop($breadcrumb);
+
+    // Check for the translated breadcrumb on the translated leaf term page.
+    $term = $this->getLeafTerm();
+    $translated = $term->getTranslation($this->translateToLangcode);
+    $this->assertBreadcrumb($translated->urlInfo('canonical', ['language' => $languages[$this->translateToLangcode]]), $breadcrumb, $translated->label());
+
+  }
+
+  /**
+   * Test translation of terms are showed in the node.
+   */
+  public function testTermsTranslation() {
+
+    // Set the display of the term reference field on the article content type
+    // to "Check boxes/radio buttons".
+    entity_get_form_display('node', 'article', 'default')
+      ->setComponent($this->termFieldName, [
+        'type' => 'options_buttons',
+      ])
+      ->save();
+    $this->drupalLogin($this->drupalCreateUser(['create article content']));
+
+    // Test terms are listed.
+    $this->drupalget('node/add/article');
+    $this->assertText('one');
+    $this->assertText('two');
+    $this->assertText('three');
+
+    // Test terms translated are listed.
+    $this->drupalget('hu/node/add/article');
+    $this->assertText('translatedOne');
+    $this->assertText('translatedTwo');
+    $this->assertText('translatedThree');
+  }
+
+  /**
+   * Setup translated terms in a hierarchy.
+   */
+  protected function setUpTerms() {
+    $parent_vid = 0;
+    foreach ($this->termTranslationMap as $name => $translation) {
+
+      $term = $this->createTerm($this->vocabulary, [
+        'name' => $name,
+        'langcode' => $this->baseLangcode,
+        'parent' => $parent_vid,
+      ]);
+
+      $term->addTranslation($this->translateToLangcode, [
+        'name' => $translation,
+      ]);
+      $term->save();
+
+      // Each term is nested under the last.
+      $parent_vid = $term->id();
+
+      $this->terms[] = $term;
+    }
+  }
+
+  /**
+   * Get the final (leaf) term in the hierarchy.
+   *
+   * @return \Drupal\taxonomy\Entity\Term
+   *   The final term in the hierarchy.
+   */
+  protected function getLeafTerm() {
+    return $this->terms[count($this->termTranslationMap) - 1];
+  }
+
+}