Mercurial > hg > isophonics-drupal-site
diff 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 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/core/modules/comment/tests/src/Functional/CommentTranslationUITest.php Wed Nov 29 16:09:58 2017 +0000 @@ -0,0 +1,226 @@ +<?php + +namespace Drupal\Tests\comment\Functional; + +use Drupal\comment\Plugin\Field\FieldType\CommentItemInterface; +use Drupal\comment\Tests\CommentTestTrait; +use Drupal\language\Entity\ConfigurableLanguage; +use Drupal\Tests\content_translation\Functional\ContentTranslationUITestBase; + +/** + * Tests the Comment Translation UI. + * + * @group comment + */ +class CommentTranslationUITest extends ContentTranslationUITestBase { + + use CommentTestTrait; + + /** + * The subject of the test comment. + */ + protected $subject; + + /** + * An administrative user with permission to administer comments. + * + * @var \Drupal\user\UserInterface + */ + protected $adminUser; + + /** + * {inheritdoc} + */ + protected $defaultCacheContexts = [ + 'languages:language_interface', + 'session', + 'theme', + 'timezone', + 'url.query_args:_wrapper_format', + 'url.query_args.pagers:0', + 'user.permissions', + 'user.roles', + ]; + + /** + * Modules to install. + * + * @var array + */ + public static $modules = ['language', 'content_translation', 'node', 'comment']; + + protected function setUp() { + $this->entityTypeId = 'comment'; + $this->nodeBundle = 'article'; + $this->bundle = 'comment_article'; + $this->testLanguageSelector = FALSE; + $this->subject = $this->randomMachineName(); + parent::setUp(); + } + + /** + * {@inheritdoc} + */ + public function setupBundle() { + parent::setupBundle(); + $this->drupalCreateContentType(['type' => $this->nodeBundle, 'name' => $this->nodeBundle]); + // Add a comment field to the article content type. + $this->addDefaultCommentField('node', 'article', 'comment_article', CommentItemInterface::OPEN, 'comment_article'); + // Create a page content type. + $this->drupalCreateContentType(['type' => 'page', 'name' => 'page']); + // Add a comment field to the page content type - this one won't be + // translatable. + $this->addDefaultCommentField('node', 'page', 'comment'); + // Mark this bundle as translatable. + $this->container->get('content_translation.manager')->setEnabled('comment', 'comment_article', TRUE); + } + + /** + * {@inheritdoc} + */ + protected function getTranslatorPermissions() { + return array_merge(parent::getTranslatorPermissions(), ['post comments', 'administer comments', 'access comments']); + } + + /** + * {@inheritdoc} + */ + protected function createEntity($values, $langcode, $comment_type = 'comment_article') { + if ($comment_type == 'comment_article') { + // This is the article node type, with the 'comment_article' field. + $node_type = 'article'; + $field_name = 'comment_article'; + } + else { + // This is the page node type with the non-translatable 'comment' field. + $node_type = 'page'; + $field_name = 'comment'; + } + $node = $this->drupalCreateNode([ + 'type' => $node_type, + $field_name => [ + ['status' => CommentItemInterface::OPEN] + ], + ]); + $values['entity_id'] = $node->id(); + $values['entity_type'] = 'node'; + $values['field_name'] = $field_name; + $values['uid'] = $node->getOwnerId(); + return parent::createEntity($values, $langcode, $comment_type); + } + + /** + * {@inheritdoc} + */ + protected function getNewEntityValues($langcode) { + // Comment subject is not translatable hence we use a fixed value. + return [ + 'subject' => [['value' => $this->subject]], + 'comment_body' => [['value' => $this->randomMachineName(16)]], + ] + parent::getNewEntityValues($langcode); + } + + /** + * {@inheritdoc} + */ + protected function doTestPublishedStatus() { + $entity_manager = \Drupal::entityManager(); + $storage = $entity_manager->getStorage($this->entityTypeId); + + $storage->resetCache(); + $entity = $storage->load($this->entityId); + + // Unpublish translations. + foreach ($this->langcodes as $index => $langcode) { + if ($index > 0) { + $edit = ['status' => 0]; + $url = $entity->urlInfo('edit-form', ['language' => ConfigurableLanguage::load($langcode)]); + $this->drupalPostForm($url, $edit, $this->getFormSubmitAction($entity, $langcode)); + $storage->resetCache(); + $entity = $storage->load($this->entityId); + $this->assertFalse($this->manager->getTranslationMetadata($entity->getTranslation($langcode))->isPublished(), 'The translation has been correctly unpublished.'); + } + } + } + + /** + * {@inheritdoc} + */ + protected function doTestAuthoringInfo() { + $storage = $this->container->get('entity_type.manager') + ->getStorage($this->entityTypeId); + $storage->resetCache([$this->entityId]); + $entity = $storage->load($this->entityId); + $languages = $this->container->get('language_manager')->getLanguages(); + $values = []; + + // Post different authoring information for each translation. + foreach ($this->langcodes as $langcode) { + $url = $entity->urlInfo('edit-form', ['language' => $languages[$langcode]]); + $user = $this->drupalCreateUser(); + $values[$langcode] = [ + 'uid' => $user->id(), + 'created' => REQUEST_TIME - mt_rand(0, 1000), + ]; + $edit = [ + 'uid' => $user->getUsername() . ' (' . $user->id() . ')', + 'date[date]' => format_date($values[$langcode]['created'], 'custom', 'Y-m-d'), + 'date[time]' => format_date($values[$langcode]['created'], 'custom', 'H:i:s'), + ]; + $this->drupalPostForm($url, $edit, $this->getFormSubmitAction($entity, $langcode)); + } + + $storage->resetCache([$this->entityId]); + $entity = $storage->load($this->entityId); + foreach ($this->langcodes as $langcode) { + $metadata = $this->manager->getTranslationMetadata($entity->getTranslation($langcode)); + $this->assertEqual($metadata->getAuthor()->id(), $values[$langcode]['uid'], 'Translation author correctly stored.'); + $this->assertEqual($metadata->getCreatedTime(), $values[$langcode]['created'], 'Translation date correctly stored.'); + } + } + + /** + * Tests translate link on comment content admin page. + */ + public function testTranslateLinkCommentAdminPage() { + $this->adminUser = $this->drupalCreateUser(array_merge(parent::getTranslatorPermissions(), ['access administration pages', 'administer comments', 'skip comment approval'])); + $this->drupalLogin($this->adminUser); + + $cid_translatable = $this->createEntity([], $this->langcodes[0]); + $cid_untranslatable = $this->createEntity([], $this->langcodes[0], 'comment'); + + // Verify translation links. + $this->drupalGet('admin/content/comment'); + $this->assertResponse(200); + $this->assertLinkByHref('comment/' . $cid_translatable . '/translations'); + $this->assertNoLinkByHref('comment/' . $cid_untranslatable . '/translations'); + } + + /** + * {@inheritdoc} + */ + protected function doTestTranslationEdit() { + $storage = $this->container->get('entity_type.manager') + ->getStorage($this->entityTypeId); + $storage->resetCache([$this->entityId]); + $entity = $storage->load($this->entityId); + $languages = $this->container->get('language_manager')->getLanguages(); + + foreach ($this->langcodes as $langcode) { + // We only want to test the title for non-english translations. + if ($langcode != 'en') { + $options = ['language' => $languages[$langcode]]; + $url = $entity->urlInfo('edit-form', $options); + $this->drupalGet($url); + + $title = t('Edit @type @title [%language translation]', [ + '@type' => $this->entityTypeId, + '@title' => $entity->getTranslation($langcode)->label(), + '%language' => $languages[$langcode]->getName(), + ]); + $this->assertRaw($title); + } + } + } + +}