function EntityTranslationTest::testFieldDefinitions

Same name and namespace in other branches
  1. 9 core/tests/Drupal/KernelTests/Core/Entity/EntityTranslationTest.php \Drupal\KernelTests\Core\Entity\EntityTranslationTest::testFieldDefinitions()
  2. 8.9.x core/tests/Drupal/KernelTests/Core/Entity/EntityTranslationTest.php \Drupal\KernelTests\Core\Entity\EntityTranslationTest::testFieldDefinitions()
  3. 11.x core/tests/Drupal/KernelTests/Core/Entity/EntityTranslationTest.php \Drupal\KernelTests\Core\Entity\EntityTranslationTest::testFieldDefinitions()

Check that field translatability is handled properly.

File

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

Class

EntityTranslationTest
Tests entity translation functionality.

Namespace

Drupal\KernelTests\Core\Entity

Code

public function testFieldDefinitions() : void {
  // Check that field translatability can be altered to be enabled or disabled
  // in field definitions.
  $entity_type = 'entity_test_mulrev';
  $this->state
    ->set('entity_test.field_definitions.translatable', [
    'name' => FALSE,
  ]);
  $entity_field_manager = \Drupal::service('entity_field.manager');
  $entity_field_manager->clearCachedFieldDefinitions();
  $definitions = $entity_field_manager->getBaseFieldDefinitions($entity_type);
  $this->assertFalse($definitions['name']->isTranslatable(), 'Field translatability can be disabled programmatically.');
  $this->state
    ->set('entity_test.field_definitions.translatable', [
    'name' => TRUE,
  ]);
  $entity_field_manager->clearCachedFieldDefinitions();
  $definitions = $entity_field_manager->getBaseFieldDefinitions($entity_type);
  $this->assertTrue($definitions['name']->isTranslatable(), 'Field translatability can be enabled programmatically.');
  // Check that field translatability is disabled by default.
  $base_field_definitions = EntityTestMulRev::baseFieldDefinitions($this->entityTypeManager
    ->getDefinition($entity_type));
  $this->assertTrue(!isset($base_field_definitions['id']->translatable), 'Translatability for the <em>id</em> field is not defined.');
  $this->assertFalse($definitions['id']->isTranslatable(), 'Field translatability is disabled by default.');
  // Check that entity id keys have the expect translatability.
  $translatable_fields = [
    'id' => TRUE,
    'uuid' => TRUE,
    'revision_id' => TRUE,
    'type' => TRUE,
    'langcode' => FALSE,
  ];
  foreach ($translatable_fields as $name => $translatable) {
    $this->state
      ->set('entity_test.field_definitions.translatable', [
      $name => $translatable,
    ]);
    $entity_field_manager->clearCachedFieldDefinitions();
    try {
      $entity_field_manager->getBaseFieldDefinitions($entity_type);
      $this->fail("Field {$name} cannot be translatable.");
    } catch (\LogicException $e) {
      // Expected exception; just continue testing.
    }
  }
}

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