3 namespace Drupal\Tests\datetime_range\Kernel;
5 use Drupal\Core\Entity\Entity\EntityViewDisplay;
6 use Drupal\Core\Language\Language;
7 use Drupal\datetime\Plugin\Field\FieldType\DateTimeItem;
8 use Drupal\entity_test\Entity\EntityTest;
9 use Drupal\field\Entity\FieldConfig;
10 use Drupal\field\Entity\FieldStorageConfig;
11 use Drupal\KernelTests\KernelTestBase;
12 use Drupal\language\Entity\ConfigurableLanguage;
15 * Test to ensure the datetime range separator is translatable.
19 class SeparatorTranslationTest extends KernelTestBase {
22 * A field storage to use in this test class.
24 * @var \Drupal\field\Entity\FieldStorageConfig
26 protected $fieldStorage;
29 * The field used in this test class.
31 * @var \Drupal\field\Entity\FieldConfig
38 public static $modules = [
51 protected function setUp() {
54 $this->installEntitySchema('entity_test');
55 $this->installEntitySchema('user');
56 $this->installConfig(['system']);
57 $this->installSchema('system', ['sequences', 'key_value']);
59 // Add a datetime range field.
60 $this->fieldStorage = FieldStorageConfig::create([
61 'field_name' => mb_strtolower($this->randomMachineName()),
62 'entity_type' => 'entity_test',
63 'type' => 'daterange',
64 'settings' => ['datetime_type' => DateTimeItem::DATETIME_TYPE_DATE],
66 $this->fieldStorage->save();
68 $this->field = FieldConfig::create([
69 'field_storage' => $this->fieldStorage,
70 'bundle' => 'entity_test',
76 'type' => 'daterange_default',
79 'format_type' => 'fallback',
80 'separator' => 'UNTRANSLATED',
83 EntityViewDisplay::create([
84 'targetEntityType' => $this->field->getTargetEntityTypeId(),
85 'bundle' => $this->field->getTargetBundle(),
88 ])->setComponent($this->fieldStorage->getName(), $display_options)
93 * Tests the translation of the range separator.
95 public function testSeparatorTranslation() {
97 $entity = EntityTest::create([
98 'name' => $this->randomString(),
99 $this->fieldStorage->getName() => [
100 'value' => '2016-09-20',
101 'end_value' => '2016-09-21',
105 // Verify the untranslated separator.
106 $display = EntityViewDisplay::collectRenderDisplay($entity, 'default');
107 $build = $display->build($entity);
108 $output = $this->container->get('renderer')->renderRoot($build);
109 $this->verbose($output);
110 $this->assertContains('UNTRANSLATED', (string) $output);
112 // Translate the separator.
113 ConfigurableLanguage::createFromLangcode('nl')->save();
114 /** @var \Drupal\language\ConfigurableLanguageManagerInterface $language_manager */
115 $language_manager = $this->container->get('language_manager');
116 $language_manager->getLanguageConfigOverride('nl', 'core.entity_view_display.entity_test.entity_test.default')
117 ->set('content.' . $this->fieldStorage->getName() . '.settings.separator', 'NL_TRANSLATED!')
120 $this->container->get('language.config_factory_override')
121 ->setLanguage(new Language(['id' => 'nl']));
122 $this->container->get('cache_tags.invalidator')->invalidateTags($entity->getCacheTags());
123 $display = EntityViewDisplay::collectRenderDisplay($entity, 'default');
124 $build = $display->build($entity);
125 $output = $this->container->get('renderer')->renderRoot($build);
126 $this->verbose($output);
127 $this->assertContains('NL_TRANSLATED!', (string) $output);