annotate core/modules/taxonomy/tests/src/Functional/TermTranslationTest.php @ 19:fa3358dc1485 tip

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