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'); } }