function EntityTranslationTest::testEntityConstructor

Tests the entity constructor works with translations.

File

core/tests/Drupal/KernelTests/Core/Entity/EntityTranslationTest.php, line 818

Class

EntityTranslationTest
Tests entity translation functionality.

Namespace

Drupal\KernelTests\Core\Entity

Code

public function testEntityConstructor() : void {
  $default_langcode = $this->languageManager
    ->getDefaultLanguage()
    ->getId();
  $langcodes = array_unique(array_merge($this->langcodes ?? [], [
    $default_langcode,
  ]));
  $this->assertGreaterThan(1, count($langcodes));
  $bundle = $this->randomMachineName();
  EntityTestHelper::createBundle($bundle);
  $field_name = strtolower($this->randomMachineName());
  $field_storage = FieldStorageConfig::create([
    'field_name' => $field_name,
    'entity_type' => 'entity_test',
    'type' => 'text',
    'cardinality' => 1,
  ]);
  $field_storage->save();
  $field_config = FieldConfig::create([
    'field_name' => $field_name,
    'entity_type' => 'entity_test',
    'bundle' => $bundle,
    'translatable' => TRUE,
  ]);
  $field_config->save();
  $values = [];
  foreach ($langcodes as $langcode) {
    $index = $langcode == $default_langcode ? LanguageInterface::LANGCODE_DEFAULT : $langcode;
    $values[$field_name][$index][0]['value'] = $this->randomString();
  }
  $entity = new EntityTest($values, 'entity_test', $bundle, $langcodes);
  $expected_languages = array_flip($langcodes);
  foreach ($entity->getTranslationLanguages() as $language) {
    /** @var \Drupal\Core\Language\LanguageInterface $language */
    $this->assertTrue(isset($expected_languages[$language->getId()]));
    unset($expected_languages[$language->getId()]);
  }
  $this->assertEmpty($expected_languages);
  foreach ($langcodes as $langcode) {
    $index = $langcode == $default_langcode ? LanguageInterface::LANGCODE_DEFAULT : $langcode;
    $this->assertEquals($entity->getTranslation($langcode)->{$field_name}->value, $values[$field_name][$index][0]['value']);
  }
}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.