X-Git-Url: http://www.aleph1.co.uk/gitweb/?p=yaffs-website;a=blobdiff_plain;f=web%2Fcore%2Fmodules%2Fcomment%2Ftests%2Fsrc%2FFunctional%2FCommentLinksTest.php;fp=web%2Fcore%2Fmodules%2Fcomment%2Ftests%2Fsrc%2FFunctional%2FCommentLinksTest.php;h=3d79d966420e36913ff0d1951d4bd0ef4dc10c13;hp=0000000000000000000000000000000000000000;hb=9917807b03b64faf00f6a1f29dcb6eafc454efa5;hpb=aea91e65e895364e460983b890e295aa5d5540a5 diff --git a/web/core/modules/comment/tests/src/Functional/CommentLinksTest.php b/web/core/modules/comment/tests/src/Functional/CommentLinksTest.php new file mode 100644 index 000000000..3d79d9664 --- /dev/null +++ b/web/core/modules/comment/tests/src/Functional/CommentLinksTest.php @@ -0,0 +1,146 @@ +install(['stark']); + $this->config('system.theme') + ->set('default', 'stark') + ->save(); + + // Remove additional user permissions from $this->webUser added by setUp(), + // since this test is limited to anonymous and authenticated roles only. + $roles = $this->webUser->getRoles(); + entity_delete_multiple('user_role', [reset($roles)]); + + // Create a comment via CRUD API functionality, since + // $this->postComment() relies on actual user permissions. + $comment = Comment::create([ + 'cid' => NULL, + 'entity_id' => $this->node->id(), + 'entity_type' => 'node', + 'field_name' => 'comment', + 'pid' => 0, + 'uid' => 0, + 'status' => CommentInterface::PUBLISHED, + 'subject' => $this->randomMachineName(), + 'hostname' => '127.0.0.1', + 'langcode' => LanguageInterface::LANGCODE_NOT_SPECIFIED, + 'comment_body' => [['value' => $this->randomMachineName()]], + ]); + $comment->save(); + $this->comment = $comment; + + // Change comment settings. + $this->setCommentSettings('form_location', CommentItemInterface::FORM_BELOW, 'Set comment form location'); + $this->setCommentAnonymous(TRUE); + $this->node->comment = CommentItemInterface::OPEN; + $this->node->save(); + + // Change user permissions. + $perms = [ + 'access comments' => 1, + 'post comments' => 1, + 'skip comment approval' => 1, + 'edit own comments' => 1, + ]; + user_role_change_permissions(RoleInterface::ANONYMOUS_ID, $perms); + + $nid = $this->node->id(); + + // Assert basic link is output, actual functionality is unit-tested in + // \Drupal\comment\Tests\CommentLinkBuilderTest. + foreach (['node', "node/$nid"] as $path) { + $this->drupalGet($path); + + // In teaser view, a link containing the comment count is always + // expected. + if ($path == 'node') { + $this->assertLink(t('1 comment')); + } + $this->assertLink('Add new comment'); + } + + // Change weight to make links go before comment body. + entity_get_display('comment', 'comment', 'default') + ->setComponent('links', ['weight' => -100]) + ->save(); + $this->drupalGet($this->node->urlInfo()); + $element = $this->cssSelect('article.js-comment > div'); + // Get last child element. + $element = end($element); + $this->assertIdentical($element->getTagName(), 'div', 'Last element is comment body.'); + + // Change weight to make links go after comment body. + entity_get_display('comment', 'comment', 'default') + ->setComponent('links', ['weight' => 100]) + ->save(); + $this->drupalGet($this->node->urlInfo()); + $element = $this->cssSelect('article.js-comment > div'); + // Get last child element. + $element = end($element); + $this->assertNotEmpty($element->find('css', 'ul.links'), 'Last element is comment links.'); + + // Make sure we can hide node links. + entity_get_display('node', $this->node->bundle(), 'default') + ->removeComponent('links') + ->save(); + $this->drupalGet($this->node->urlInfo()); + $this->assertNoLink('1 comment'); + $this->assertNoLink('Add new comment'); + + // Visit the full node, make sure there are links for the comment. + $this->drupalGet('node/' . $this->node->id()); + $this->assertText($comment->getSubject()); + $this->assertLink('Reply'); + + // Make sure we can hide comment links. + entity_get_display('comment', 'comment', 'default') + ->removeComponent('links') + ->save(); + $this->drupalGet('node/' . $this->node->id()); + $this->assertText($comment->getSubject()); + $this->assertNoLink('Reply'); + } + +}