3 namespace Drupal\KernelTests\Core\Entity;
5 use Drupal\language\Entity\ConfigurableLanguage;
6 use Drupal\field\Entity\FieldConfig;
7 use Drupal\field\Entity\FieldStorageConfig;
10 * Base class for language-aware entity tests.
12 abstract class EntityLanguageTestBase extends EntityKernelTestBase {
15 * The language manager service.
17 * @var \Drupal\Core\Language\LanguageManagerInterface
19 protected $languageManager;
22 * The available language codes.
29 * The test field name.
36 * The untranslatable test field name.
40 protected $untranslatableFieldName;
42 public static $modules = ['language', 'entity_test'];
44 protected function setUp() {
47 $this->languageManager = $this->container->get('language_manager');
49 foreach (entity_test_entity_types() as $entity_type_id) {
50 // The entity_test schema is installed by the parent.
51 if ($entity_type_id != 'entity_test') {
52 $this->installEntitySchema($entity_type_id);
56 $this->installConfig(['language']);
58 // Create the test field.
59 module_load_install('entity_test');
60 entity_test_install();
62 // Enable translations for the test entity type.
63 $this->state->set('entity_test.translation', TRUE);
65 // Create a translatable test field.
66 $this->fieldName = mb_strtolower($this->randomMachineName() . '_field_name');
68 // Create an untranslatable test field.
69 $this->untranslatableFieldName = mb_strtolower($this->randomMachineName() . '_field_name');
71 // Create field fields in all entity variations.
72 foreach (entity_test_entity_types() as $entity_type) {
73 FieldStorageConfig::create([
74 'field_name' => $this->fieldName,
75 'entity_type' => $entity_type,
80 'field_name' => $this->fieldName,
81 'entity_type' => $entity_type,
82 'bundle' => $entity_type,
83 'translatable' => TRUE,
86 FieldStorageConfig::create([
87 'field_name' => $this->untranslatableFieldName,
88 'entity_type' => $entity_type,
93 'field_name' => $this->untranslatableFieldName,
94 'entity_type' => $entity_type,
95 'bundle' => $entity_type,
96 'translatable' => FALSE,
100 // Create the default languages.
101 $this->installConfig(['language']);
103 // Create test languages.
104 $this->langcodes = [];
105 for ($i = 0; $i < 3; ++$i) {
106 $language = ConfigurableLanguage::create([
108 'label' => $this->randomString(),
111 $this->langcodes[$i] = $language->getId();
117 * Toggles field storage translatability.
119 * @param string $entity_type
120 * The type of the entity fields are attached to.
122 protected function toggleFieldTranslatability($entity_type, $bundle) {
123 $fields = [$this->fieldName, $this->untranslatableFieldName];
124 foreach ($fields as $field_name) {
125 $field = FieldConfig::loadByName($entity_type, $bundle, $field_name);
126 $translatable = !$field->isTranslatable();
127 $field->set('translatable', $translatable);
129 $field = FieldConfig::loadByName($entity_type, $bundle, $field_name);
130 $this->assertEqual($field->isTranslatable(), $translatable, 'Field translatability changed.');
132 \Drupal::cache('entity')->deleteAll();