3 namespace Drupal\Tests\content_translation\Functional;
6 * Tests the Content Translation metadata fields handling.
8 * @group content_translation
10 class ContentTranslationMetadataFieldsTest extends ContentTranslationTestBase {
13 * The entity type being tested.
17 protected $entityTypeId = 'node';
20 * The bundle being tested.
24 protected $bundle = 'article';
31 public static $modules = ['language', 'content_translation', 'node'];
34 * The profile to install as a basis for testing.
38 protected $profile = 'standard';
41 * Tests skipping setting non translatable metadata fields.
43 public function testSkipUntranslatable() {
44 $this->drupalLogin($this->translator);
45 $entity_manager = \Drupal::entityManager();
46 $fields = $entity_manager->getFieldDefinitions($this->entityTypeId, $this->bundle);
48 // Turn off translatability for the metadata fields on the current bundle.
49 $metadata_fields = ['created', 'changed', 'uid', 'status'];
50 foreach ($metadata_fields as $field_name) {
52 ->getConfig($this->bundle)
53 ->setTranslatable(FALSE)
57 // Create a new test entity with original values in the default language.
58 $default_langcode = $this->langcodes[0];
59 $entity_id = $this->createEntity(['title' => $this->randomString()], $default_langcode);
60 $storage = $entity_manager->getStorage($this->entityTypeId);
61 $storage->resetCache();
62 $entity = $storage->load($entity_id);
64 // Add a content translation.
66 $values = $entity->toArray();
67 // Apply a default value for the metadata fields.
68 foreach ($metadata_fields as $field_name) {
69 unset($values[$field_name]);
71 $entity->addTranslation($langcode, $values);
73 $metadata_source_translation = $this->manager->getTranslationMetadata($entity->getTranslation($default_langcode));
74 $metadata_target_translation = $this->manager->getTranslationMetadata($entity->getTranslation($langcode));
76 $created_time = $metadata_source_translation->getCreatedTime();
77 $changed_time = $metadata_source_translation->getChangedTime();
78 $published = $metadata_source_translation->isPublished();
79 $author = $metadata_source_translation->getAuthor();
81 $this->assertEqual($created_time, $metadata_target_translation->getCreatedTime(), 'Metadata created field has the same value for both translations.');
82 $this->assertEqual($changed_time, $metadata_target_translation->getChangedTime(), 'Metadata changed field has the same value for both translations.');
83 $this->assertEqual($published, $metadata_target_translation->isPublished(), 'Metadata published field has the same value for both translations.');
84 $this->assertEqual($author->id(), $metadata_target_translation->getAuthor()->id(), 'Metadata author field has the same value for both translations.');
86 $metadata_target_translation->setCreatedTime(time() + 50);
87 $metadata_target_translation->setChangedTime(time() + 50);
88 $metadata_target_translation->setPublished(TRUE);
89 $metadata_target_translation->setAuthor($this->editor);
91 $this->assertEqual($created_time, $metadata_target_translation->getCreatedTime(), 'Metadata created field correctly not updated');
92 $this->assertEqual($changed_time, $metadata_target_translation->getChangedTime(), 'Metadata changed field correctly not updated');
93 $this->assertEqual($published, $metadata_target_translation->isPublished(), 'Metadata published field correctly not updated');
94 $this->assertEqual($author->id(), $metadata_target_translation->getAuthor()->id(), 'Metadata author field correctly not updated');
98 * Tests setting translatable metadata fields.
100 public function testSetTranslatable() {
101 $this->drupalLogin($this->translator);
102 $entity_manager = \Drupal::entityManager();
103 $fields = $entity_manager->getFieldDefinitions($this->entityTypeId, $this->bundle);
105 // Turn off translatability for the metadata fields on the current bundle.
106 $metadata_fields = ['created', 'changed', 'uid', 'status'];
107 foreach ($metadata_fields as $field_name) {
109 ->getConfig($this->bundle)
110 ->setTranslatable(TRUE)
114 // Create a new test entity with original values in the default language.
115 $default_langcode = $this->langcodes[0];
116 $entity_id = $this->createEntity(['title' => $this->randomString(), 'status' => FALSE], $default_langcode);
117 $storage = $entity_manager->getStorage($this->entityTypeId);
118 $storage->resetCache();
119 $entity = $storage->load($entity_id);
121 // Add a content translation.
123 $values = $entity->toArray();
124 // Apply a default value for the metadata fields.
125 foreach ($metadata_fields as $field_name) {
126 unset($values[$field_name]);
128 $entity->addTranslation($langcode, $values);
130 $metadata_source_translation = $this->manager->getTranslationMetadata($entity->getTranslation($default_langcode));
131 $metadata_target_translation = $this->manager->getTranslationMetadata($entity->getTranslation($langcode));
133 $metadata_target_translation->setCreatedTime(time() + 50);
134 $metadata_target_translation->setChangedTime(time() + 50);
135 $metadata_target_translation->setPublished(TRUE);
136 $metadata_target_translation->setAuthor($this->editor);
138 $this->assertNotEqual($metadata_source_translation->getCreatedTime(), $metadata_target_translation->getCreatedTime(), 'Metadata created field correctly different on both translations.');
139 $this->assertNotEqual($metadata_source_translation->getChangedTime(), $metadata_target_translation->getChangedTime(), 'Metadata changed field correctly different on both translations.');
140 $this->assertNotEqual($metadata_source_translation->isPublished(), $metadata_target_translation->isPublished(), 'Metadata published field correctly different on both translations.');
141 $this->assertNotEqual($metadata_source_translation->getAuthor()->id(), $metadata_target_translation->getAuthor()->id(), 'Metadata author field correctly different on both translations.');