Upgraded drupal core with security updates
[yaffs-website] / web / core / modules / content_translation / tests / src / Functional / ContentTranslationMetadataFieldsTest.php
1 <?php
2
3 namespace Drupal\Tests\content_translation\Functional;
4
5 /**
6  * Tests the Content Translation metadata fields handling.
7  *
8  * @group content_translation
9  */
10 class ContentTranslationMetadataFieldsTest extends ContentTranslationTestBase {
11
12   /**
13    * The entity type being tested.
14    *
15    * @var string
16    */
17   protected $entityTypeId = 'node';
18
19   /**
20    * The bundle being tested.
21    *
22    * @var string
23    */
24   protected $bundle = 'article';
25
26   /**
27    * Modules to install.
28    *
29    * @var array
30    */
31   public static $modules = ['language', 'content_translation', 'node'];
32
33   /**
34    * The profile to install as a basis for testing.
35    *
36    * @var string
37    */
38   protected $profile = 'standard';
39
40   /**
41    * Tests skipping setting non translatable metadata fields.
42    */
43   public function testSkipUntranslatable() {
44     $this->drupalLogin($this->translator);
45     $entity_manager = \Drupal::entityManager();
46     $fields = $entity_manager->getFieldDefinitions($this->entityTypeId, $this->bundle);
47
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) {
51       $fields[$field_name]
52         ->getConfig($this->bundle)
53         ->setTranslatable(FALSE)
54         ->save();
55     }
56
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);
63
64     // Add a content translation.
65     $langcode = 'it';
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]);
70     }
71     $entity->addTranslation($langcode, $values);
72
73     $metadata_source_translation = $this->manager->getTranslationMetadata($entity->getTranslation($default_langcode));
74     $metadata_target_translation = $this->manager->getTranslationMetadata($entity->getTranslation($langcode));
75
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();
80
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.');
85
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);
90
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');
95   }
96
97   /**
98    * Tests setting translatable metadata fields.
99    */
100   public function testSetTranslatable() {
101     $this->drupalLogin($this->translator);
102     $entity_manager = \Drupal::entityManager();
103     $fields = $entity_manager->getFieldDefinitions($this->entityTypeId, $this->bundle);
104
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) {
108       $fields[$field_name]
109         ->getConfig($this->bundle)
110         ->setTranslatable(TRUE)
111         ->save();
112     }
113
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);
120
121     // Add a content translation.
122     $langcode = 'it';
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]);
127     }
128     $entity->addTranslation($langcode, $values);
129
130     $metadata_source_translation = $this->manager->getTranslationMetadata($entity->getTranslation($default_langcode));
131     $metadata_target_translation = $this->manager->getTranslationMetadata($entity->getTranslation($langcode));
132
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);
137
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.');
142   }
143
144 }