function EntityTranslationTest::testDeleteEntityTranslation

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

Tests that translation statuses are correct after removing translations.

File

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

Class

EntityTranslationTest
Tests entity translation functionality.

Namespace

Drupal\KernelTests\Core\Entity

Code

public function testDeleteEntityTranslation() : void {
  $entity_type = 'entity_test_mul';
  $controller = $this->entityTypeManager
    ->getStorage($entity_type);
  // Create a translatable test field.
  $field_storage = FieldStorageConfig::create([
    'entity_type' => $entity_type,
    'field_name' => 'translatable_test_field',
    'type' => 'field_test',
  ]);
  $field_storage->save();
  $field = FieldConfig::create([
    'field_storage' => $field_storage,
    'label' => $this->randomMachineName(),
    'bundle' => $entity_type,
  ]);
  $field->save();
  // Create an untranslatable test field.
  $field_storage = FieldStorageConfig::create([
    'entity_type' => $entity_type,
    'field_name' => 'untranslatable_test_field',
    'type' => 'field_test',
    'translatable' => FALSE,
  ]);
  $field_storage->save();
  $field = FieldConfig::create([
    'field_storage' => $field_storage,
    'label' => $this->randomMachineName(),
    'bundle' => $entity_type,
  ]);
  $field->save();
  // Create an entity with both translatable and untranslatable test fields.
  $values = [
    'name' => $this->randomString(),
    'translatable_test_field' => $this->randomString(),
    'untranslatable_test_field' => $this->randomString(),
  ];
  /** @var \Drupal\Core\Entity\ContentEntityInterface $entity */
  $entity = $controller->create($values);
  foreach ($this->langcodes as $langcode) {
    $entity->addTranslation($langcode, $values);
  }
  $entity->save();
  // Assert there are no deleted languages in the lists yet.
  $this->assertNull(\Drupal::state()->get('entity_test.delete.translatable_test_field'));
  $this->assertNull(\Drupal::state()->get('entity_test.delete.untranslatable_test_field'));
  // Remove the second and third langcodes from the entity.
  $entity->removeTranslation('l1');
  $entity->removeTranslation('l2');
  $entity->save();
  // Ensure that for the translatable test field the second and third
  // langcodes are in the deleted languages list.
  $actual = \Drupal::state()->get('entity_test.delete.translatable_test_field');
  $expected_translatable = [
    'l1',
    'l2',
  ];
  sort($actual);
  sort($expected_translatable);
  $this->assertEquals($expected_translatable, $actual);
  // Ensure that the untranslatable test field is untouched.
  $this->assertNull(\Drupal::state()->get('entity_test.delete.untranslatable_test_field'));
  // Delete the entity, which removes all remaining translations.
  $entity->delete();
  // All languages have been deleted now.
  $actual = \Drupal::state()->get('entity_test.delete.translatable_test_field');
  $expected_translatable[] = 'en';
  $expected_translatable[] = 'l0';
  sort($actual);
  sort($expected_translatable);
  $this->assertEquals($expected_translatable, $actual);
  // The untranslatable field is shared and only deleted once, for the
  // default langcode.
  $actual = \Drupal::state()->get('entity_test.delete.untranslatable_test_field');
  $expected_untranslatable = [
    'en',
  ];
  sort($actual);
  sort($expected_untranslatable);
  $this->assertEquals($expected_untranslatable, $actual);
}

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