labelOfNotTranslatedReference = $this->randomMachineName(); $this->originalLabel = $this->randomMachineName(); $this->translatedLabel = $this->randomMachineName(); $this->setUpLanguages(); $this->setUpContentTypes(); $this->enableTranslation(); $this->setUpEntityReferenceField(); $this->createContent(); } /** * Tests if the translated entity is displayed in an entity reference field. */ public function testTranslatedEntityReferenceDisplay() { $path = $this->referrerEntity->getSystemPath(); $translation_path = $this->translateToLangcode . '/' . $path; $this->drupalGet($path); $this->assertText($this->labelOfNotTranslatedReference, 'The label of not translated reference is displayed.'); $this->assertText($this->originalLabel, 'The default label of translated reference is displayed.'); $this->assertNoText($this->translatedLabel, 'The translated label of translated reference is not displayed.'); $this->drupalGet($translation_path); $this->assertText($this->labelOfNotTranslatedReference, 'The label of not translated reference is displayed.'); $this->assertNoText($this->originalLabel, 'The default label of translated reference is not displayed.'); $this->assertText($this->translatedLabel, 'The translated label of translated reference is displayed.'); } /** * Adds additional languages. */ protected function setUpLanguages() { ConfigurableLanguage::createFromLangcode($this->translateToLangcode)->save(); } /** * Creates a test subject contents, with translation. */ protected function createContent() { $this->referencedEntityWithTranslation = $this->createReferencedEntityWithTranslation(); $this->referencedEntityWithoutTranslation = $this->createNotTranslatedReferencedEntity(); $this->referrerEntity = $this->createReferrerEntity(); } /** * Enables translations where it needed. */ protected function enableTranslation() { // Enable translation for the entity types and ensure the change is picked // up. \Drupal::service('content_translation.manager')->setEnabled($this->testEntityTypeName, $this->referrerType->id(), TRUE); \Drupal::service('content_translation.manager')->setEnabled($this->testEntityTypeName, $this->referencedType->id(), TRUE); drupal_static_reset(); \Drupal::entityManager()->clearCachedDefinitions(); \Drupal::service('router.builder')->rebuild(); } /** * Adds term reference field for the article content type. */ protected function setUpEntityReferenceField() { entity_create('field_storage_config', array( 'field_name' => $this->referenceFieldName, 'entity_type' => $this->testEntityTypeName, 'type' => 'entity_reference', 'cardinality' => FieldStorageDefinitionInterface::CARDINALITY_UNLIMITED, 'translatable' => FALSE, 'settings' => array( 'allowed_values' => array( array( 'target_type' => $this->testEntityTypeName, ), ), ), ))->save(); entity_create('field_config', array( 'field_name' => $this->referenceFieldName, 'bundle' => $this->referrerType->type, 'entity_type' => $this->testEntityTypeName, )) ->save(); entity_get_form_display($this->testEntityTypeName, $this->referrerType->id(), 'default') ->setComponent($this->referenceFieldName, array( 'type' => 'entity_reference_autocomplete', )) ->save(); entity_get_display($this->testEntityTypeName, $this->referrerType->id(), 'default') ->setComponent($this->referenceFieldName, array( 'type' => 'entity_reference_label', )) ->save(); } /** * Create content types. */ protected function setUpContentTypes() { $this->referrerType = $this->drupalCreateContentType(array( 'type' => 'referrer', 'name' => 'Referrer', )); $this->referencedType = $this->drupalCreateContentType(array( 'type' => 'referenced_page', 'name' => 'Referenced Page', )); } /** * Create a referenced entity with a translation. */ protected function createReferencedEntityWithTranslation() { /** @var \Drupal\node\Entity\Node $node */ $node = entity_create($this->testEntityTypeName, array( 'title' => $this->originalLabel, 'type' => $this->referencedType->id(), 'description' => array( 'value' => $this->randomMachineName(), 'format' => 'basic_html', ), 'langcode' => $this->baseLangcode, )); $node->save(); $node->addTranslation($this->translateToLangcode, array( 'title' => $this->translatedLabel, )); $node->save(); return $node; } /** * Create the referenced entity. */ protected function createNotTranslatedReferencedEntity() { /** @var \Drupal\node\Entity\Node $node */ $node = entity_create($this->testEntityTypeName, array( 'title' => $this->labelOfNotTranslatedReference, 'type' => $this->referencedType->id(), 'description' => array( 'value' => $this->randomMachineName(), 'format' => 'basic_html', ), 'langcode' => $this->baseLangcode, )); $node->save(); return $node; } /** * Create the referrer entity. */ protected function createReferrerEntity() { /** @var \Drupal\node\Entity\Node $node */ $node = entity_create($this->testEntityTypeName, array( 'title' => $this->randomMachineName(), 'type' => $this->referrerType->id(), 'description' => array( 'value' => $this->randomMachineName(), 'format' => 'basic_html', ), $this->referenceFieldName => array( array('target_id' => $this->referencedEntityWithTranslation->id()), array('target_id' => $this->referencedEntityWithoutTranslation->id()), ), 'langcode' => $this->baseLangcode, )); $node->save(); $node->addTranslation($this->translateToLangcode, array()); $node->save(); return $node; } }