annotate core/modules/taxonomy/tests/src/Functional/TermTranslationTest.php @ 5:12f9dff5fda9 tip

Update to Drupal core 8.7.1
author Chris Cannam
date Thu, 09 May 2019 15:34:47 +0100
parents a9cd425dd02b
children
rev   line source
Chris@4 1 <?php
Chris@4 2
Chris@4 3 namespace Drupal\Tests\taxonomy\Functional;
Chris@4 4
Chris@4 5 use Drupal\Core\Url;
Chris@4 6 use Drupal\Tests\system\Functional\Menu\AssertBreadcrumbTrait;
Chris@4 7
Chris@4 8 /**
Chris@4 9 * Tests for proper breadcrumb translation.
Chris@4 10 *
Chris@4 11 * @group taxonomy
Chris@4 12 */
Chris@4 13 class TermTranslationTest extends TaxonomyTestBase {
Chris@4 14
Chris@4 15 use AssertBreadcrumbTrait;
Chris@4 16 use TaxonomyTranslationTestTrait;
Chris@4 17
Chris@4 18 /**
Chris@4 19 * Term to translated term mapping.
Chris@4 20 *
Chris@4 21 * @var array
Chris@4 22 */
Chris@4 23 protected $termTranslationMap = [
Chris@4 24 'one' => 'translatedOne',
Chris@4 25 'two' => 'translatedTwo',
Chris@4 26 'three' => 'translatedThree',
Chris@4 27 ];
Chris@4 28
Chris@4 29 /**
Chris@4 30 * Created terms.
Chris@4 31 *
Chris@4 32 * @var \Drupal\taxonomy\Entity\Term[]
Chris@4 33 */
Chris@4 34 protected $terms = [];
Chris@4 35
Chris@4 36 /**
Chris@4 37 * {@inheritdoc}
Chris@4 38 */
Chris@4 39 public static $modules = ['taxonomy', 'language', 'content_translation'];
Chris@4 40
Chris@4 41 /**
Chris@4 42 * {@inheritdoc}
Chris@4 43 */
Chris@4 44 protected function setUp() {
Chris@4 45 parent::setUp();
Chris@4 46 $this->setupLanguages();
Chris@4 47 $this->vocabulary = $this->createVocabulary();
Chris@4 48 $this->enableTranslation();
Chris@4 49 $this->setUpTerms();
Chris@4 50 $this->setUpTermReferenceField();
Chris@4 51 }
Chris@4 52
Chris@4 53 /**
Chris@4 54 * Test translated breadcrumbs.
Chris@4 55 */
Chris@4 56 public function testTranslatedBreadcrumbs() {
Chris@4 57 // Ensure non-translated breadcrumb is correct.
Chris@4 58 $breadcrumb = [Url::fromRoute('<front>')->toString() => 'Home'];
Chris@4 59 foreach ($this->terms as $term) {
Chris@5 60 $breadcrumb[$term->toUrl()->toString()] = $term->label();
Chris@4 61 }
Chris@4 62 // The last item will not be in the breadcrumb.
Chris@4 63 array_pop($breadcrumb);
Chris@4 64
Chris@4 65 // Check the breadcrumb on the leaf term page.
Chris@4 66 $term = $this->getLeafTerm();
Chris@5 67 $this->assertBreadcrumb($term->toUrl(), $breadcrumb, $term->label());
Chris@4 68
Chris@4 69 $languages = \Drupal::languageManager()->getLanguages();
Chris@4 70
Chris@4 71 // Construct the expected translated breadcrumb.
Chris@4 72 $breadcrumb = [Url::fromRoute('<front>', [], ['language' => $languages[$this->translateToLangcode]])->toString() => 'Home'];
Chris@4 73 foreach ($this->terms as $term) {
Chris@4 74 $translated = $term->getTranslation($this->translateToLangcode);
Chris@5 75 $url = $translated->toUrl('canonical', ['language' => $languages[$this->translateToLangcode]])->toString();
Chris@4 76 $breadcrumb[$url] = $translated->label();
Chris@4 77 }
Chris@4 78 array_pop($breadcrumb);
Chris@4 79
Chris@4 80 // Check for the translated breadcrumb on the translated leaf term page.
Chris@4 81 $term = $this->getLeafTerm();
Chris@4 82 $translated = $term->getTranslation($this->translateToLangcode);
Chris@5 83 $this->assertBreadcrumb($translated->toUrl('canonical', ['language' => $languages[$this->translateToLangcode]]), $breadcrumb, $translated->label());
Chris@4 84
Chris@4 85 }
Chris@4 86
Chris@4 87 /**
Chris@4 88 * Test translation of terms are showed in the node.
Chris@4 89 */
Chris@4 90 public function testTermsTranslation() {
Chris@4 91
Chris@4 92 // Set the display of the term reference field on the article content type
Chris@4 93 // to "Check boxes/radio buttons".
Chris@4 94 entity_get_form_display('node', 'article', 'default')
Chris@4 95 ->setComponent($this->termFieldName, [
Chris@4 96 'type' => 'options_buttons',
Chris@4 97 ])
Chris@4 98 ->save();
Chris@4 99 $this->drupalLogin($this->drupalCreateUser(['create article content']));
Chris@4 100
Chris@4 101 // Test terms are listed.
Chris@4 102 $this->drupalget('node/add/article');
Chris@4 103 $this->assertText('one');
Chris@4 104 $this->assertText('two');
Chris@4 105 $this->assertText('three');
Chris@4 106
Chris@4 107 // Test terms translated are listed.
Chris@4 108 $this->drupalget('hu/node/add/article');
Chris@4 109 $this->assertText('translatedOne');
Chris@4 110 $this->assertText('translatedTwo');
Chris@4 111 $this->assertText('translatedThree');
Chris@4 112 }
Chris@4 113
Chris@4 114 /**
Chris@4 115 * Setup translated terms in a hierarchy.
Chris@4 116 */
Chris@4 117 protected function setUpTerms() {
Chris@4 118 $parent_vid = 0;
Chris@4 119 foreach ($this->termTranslationMap as $name => $translation) {
Chris@4 120
Chris@4 121 $term = $this->createTerm($this->vocabulary, [
Chris@4 122 'name' => $name,
Chris@4 123 'langcode' => $this->baseLangcode,
Chris@4 124 'parent' => $parent_vid,
Chris@4 125 ]);
Chris@4 126
Chris@4 127 $term->addTranslation($this->translateToLangcode, [
Chris@4 128 'name' => $translation,
Chris@4 129 ]);
Chris@4 130 $term->save();
Chris@4 131
Chris@4 132 // Each term is nested under the last.
Chris@4 133 $parent_vid = $term->id();
Chris@4 134
Chris@4 135 $this->terms[] = $term;
Chris@4 136 }
Chris@4 137 }
Chris@4 138
Chris@4 139 /**
Chris@4 140 * Get the final (leaf) term in the hierarchy.
Chris@4 141 *
Chris@4 142 * @return \Drupal\taxonomy\Entity\Term
Chris@4 143 * The final term in the hierarchy.
Chris@4 144 */
Chris@4 145 protected function getLeafTerm() {
Chris@4 146 return $this->terms[count($this->termTranslationMap) - 1];
Chris@4 147 }
Chris@4 148
Chris@4 149 }