Mercurial > hg > isophonics-drupal-site
comparison core/modules/comment/tests/src/Functional/CommentTranslationUITest.php @ 0:4c8ae668cc8c
Initial import (non-working)
author | Chris Cannam |
---|---|
date | Wed, 29 Nov 2017 16:09:58 +0000 |
parents | |
children | 129ea1e6d783 |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:4c8ae668cc8c |
---|---|
1 <?php | |
2 | |
3 namespace Drupal\Tests\comment\Functional; | |
4 | |
5 use Drupal\comment\Plugin\Field\FieldType\CommentItemInterface; | |
6 use Drupal\comment\Tests\CommentTestTrait; | |
7 use Drupal\language\Entity\ConfigurableLanguage; | |
8 use Drupal\Tests\content_translation\Functional\ContentTranslationUITestBase; | |
9 | |
10 /** | |
11 * Tests the Comment Translation UI. | |
12 * | |
13 * @group comment | |
14 */ | |
15 class CommentTranslationUITest extends ContentTranslationUITestBase { | |
16 | |
17 use CommentTestTrait; | |
18 | |
19 /** | |
20 * The subject of the test comment. | |
21 */ | |
22 protected $subject; | |
23 | |
24 /** | |
25 * An administrative user with permission to administer comments. | |
26 * | |
27 * @var \Drupal\user\UserInterface | |
28 */ | |
29 protected $adminUser; | |
30 | |
31 /** | |
32 * {inheritdoc} | |
33 */ | |
34 protected $defaultCacheContexts = [ | |
35 'languages:language_interface', | |
36 'session', | |
37 'theme', | |
38 'timezone', | |
39 'url.query_args:_wrapper_format', | |
40 'url.query_args.pagers:0', | |
41 'user.permissions', | |
42 'user.roles', | |
43 ]; | |
44 | |
45 /** | |
46 * Modules to install. | |
47 * | |
48 * @var array | |
49 */ | |
50 public static $modules = ['language', 'content_translation', 'node', 'comment']; | |
51 | |
52 protected function setUp() { | |
53 $this->entityTypeId = 'comment'; | |
54 $this->nodeBundle = 'article'; | |
55 $this->bundle = 'comment_article'; | |
56 $this->testLanguageSelector = FALSE; | |
57 $this->subject = $this->randomMachineName(); | |
58 parent::setUp(); | |
59 } | |
60 | |
61 /** | |
62 * {@inheritdoc} | |
63 */ | |
64 public function setupBundle() { | |
65 parent::setupBundle(); | |
66 $this->drupalCreateContentType(['type' => $this->nodeBundle, 'name' => $this->nodeBundle]); | |
67 // Add a comment field to the article content type. | |
68 $this->addDefaultCommentField('node', 'article', 'comment_article', CommentItemInterface::OPEN, 'comment_article'); | |
69 // Create a page content type. | |
70 $this->drupalCreateContentType(['type' => 'page', 'name' => 'page']); | |
71 // Add a comment field to the page content type - this one won't be | |
72 // translatable. | |
73 $this->addDefaultCommentField('node', 'page', 'comment'); | |
74 // Mark this bundle as translatable. | |
75 $this->container->get('content_translation.manager')->setEnabled('comment', 'comment_article', TRUE); | |
76 } | |
77 | |
78 /** | |
79 * {@inheritdoc} | |
80 */ | |
81 protected function getTranslatorPermissions() { | |
82 return array_merge(parent::getTranslatorPermissions(), ['post comments', 'administer comments', 'access comments']); | |
83 } | |
84 | |
85 /** | |
86 * {@inheritdoc} | |
87 */ | |
88 protected function createEntity($values, $langcode, $comment_type = 'comment_article') { | |
89 if ($comment_type == 'comment_article') { | |
90 // This is the article node type, with the 'comment_article' field. | |
91 $node_type = 'article'; | |
92 $field_name = 'comment_article'; | |
93 } | |
94 else { | |
95 // This is the page node type with the non-translatable 'comment' field. | |
96 $node_type = 'page'; | |
97 $field_name = 'comment'; | |
98 } | |
99 $node = $this->drupalCreateNode([ | |
100 'type' => $node_type, | |
101 $field_name => [ | |
102 ['status' => CommentItemInterface::OPEN] | |
103 ], | |
104 ]); | |
105 $values['entity_id'] = $node->id(); | |
106 $values['entity_type'] = 'node'; | |
107 $values['field_name'] = $field_name; | |
108 $values['uid'] = $node->getOwnerId(); | |
109 return parent::createEntity($values, $langcode, $comment_type); | |
110 } | |
111 | |
112 /** | |
113 * {@inheritdoc} | |
114 */ | |
115 protected function getNewEntityValues($langcode) { | |
116 // Comment subject is not translatable hence we use a fixed value. | |
117 return [ | |
118 'subject' => [['value' => $this->subject]], | |
119 'comment_body' => [['value' => $this->randomMachineName(16)]], | |
120 ] + parent::getNewEntityValues($langcode); | |
121 } | |
122 | |
123 /** | |
124 * {@inheritdoc} | |
125 */ | |
126 protected function doTestPublishedStatus() { | |
127 $entity_manager = \Drupal::entityManager(); | |
128 $storage = $entity_manager->getStorage($this->entityTypeId); | |
129 | |
130 $storage->resetCache(); | |
131 $entity = $storage->load($this->entityId); | |
132 | |
133 // Unpublish translations. | |
134 foreach ($this->langcodes as $index => $langcode) { | |
135 if ($index > 0) { | |
136 $edit = ['status' => 0]; | |
137 $url = $entity->urlInfo('edit-form', ['language' => ConfigurableLanguage::load($langcode)]); | |
138 $this->drupalPostForm($url, $edit, $this->getFormSubmitAction($entity, $langcode)); | |
139 $storage->resetCache(); | |
140 $entity = $storage->load($this->entityId); | |
141 $this->assertFalse($this->manager->getTranslationMetadata($entity->getTranslation($langcode))->isPublished(), 'The translation has been correctly unpublished.'); | |
142 } | |
143 } | |
144 } | |
145 | |
146 /** | |
147 * {@inheritdoc} | |
148 */ | |
149 protected function doTestAuthoringInfo() { | |
150 $storage = $this->container->get('entity_type.manager') | |
151 ->getStorage($this->entityTypeId); | |
152 $storage->resetCache([$this->entityId]); | |
153 $entity = $storage->load($this->entityId); | |
154 $languages = $this->container->get('language_manager')->getLanguages(); | |
155 $values = []; | |
156 | |
157 // Post different authoring information for each translation. | |
158 foreach ($this->langcodes as $langcode) { | |
159 $url = $entity->urlInfo('edit-form', ['language' => $languages[$langcode]]); | |
160 $user = $this->drupalCreateUser(); | |
161 $values[$langcode] = [ | |
162 'uid' => $user->id(), | |
163 'created' => REQUEST_TIME - mt_rand(0, 1000), | |
164 ]; | |
165 $edit = [ | |
166 'uid' => $user->getUsername() . ' (' . $user->id() . ')', | |
167 'date[date]' => format_date($values[$langcode]['created'], 'custom', 'Y-m-d'), | |
168 'date[time]' => format_date($values[$langcode]['created'], 'custom', 'H:i:s'), | |
169 ]; | |
170 $this->drupalPostForm($url, $edit, $this->getFormSubmitAction($entity, $langcode)); | |
171 } | |
172 | |
173 $storage->resetCache([$this->entityId]); | |
174 $entity = $storage->load($this->entityId); | |
175 foreach ($this->langcodes as $langcode) { | |
176 $metadata = $this->manager->getTranslationMetadata($entity->getTranslation($langcode)); | |
177 $this->assertEqual($metadata->getAuthor()->id(), $values[$langcode]['uid'], 'Translation author correctly stored.'); | |
178 $this->assertEqual($metadata->getCreatedTime(), $values[$langcode]['created'], 'Translation date correctly stored.'); | |
179 } | |
180 } | |
181 | |
182 /** | |
183 * Tests translate link on comment content admin page. | |
184 */ | |
185 public function testTranslateLinkCommentAdminPage() { | |
186 $this->adminUser = $this->drupalCreateUser(array_merge(parent::getTranslatorPermissions(), ['access administration pages', 'administer comments', 'skip comment approval'])); | |
187 $this->drupalLogin($this->adminUser); | |
188 | |
189 $cid_translatable = $this->createEntity([], $this->langcodes[0]); | |
190 $cid_untranslatable = $this->createEntity([], $this->langcodes[0], 'comment'); | |
191 | |
192 // Verify translation links. | |
193 $this->drupalGet('admin/content/comment'); | |
194 $this->assertResponse(200); | |
195 $this->assertLinkByHref('comment/' . $cid_translatable . '/translations'); | |
196 $this->assertNoLinkByHref('comment/' . $cid_untranslatable . '/translations'); | |
197 } | |
198 | |
199 /** | |
200 * {@inheritdoc} | |
201 */ | |
202 protected function doTestTranslationEdit() { | |
203 $storage = $this->container->get('entity_type.manager') | |
204 ->getStorage($this->entityTypeId); | |
205 $storage->resetCache([$this->entityId]); | |
206 $entity = $storage->load($this->entityId); | |
207 $languages = $this->container->get('language_manager')->getLanguages(); | |
208 | |
209 foreach ($this->langcodes as $langcode) { | |
210 // We only want to test the title for non-english translations. | |
211 if ($langcode != 'en') { | |
212 $options = ['language' => $languages[$langcode]]; | |
213 $url = $entity->urlInfo('edit-form', $options); | |
214 $this->drupalGet($url); | |
215 | |
216 $title = t('Edit @type @title [%language translation]', [ | |
217 '@type' => $this->entityTypeId, | |
218 '@title' => $entity->getTranslation($langcode)->label(), | |
219 '%language' => $languages[$langcode]->getName(), | |
220 ]); | |
221 $this->assertRaw($title); | |
222 } | |
223 } | |
224 } | |
225 | |
226 } |