1 comment.test CommentBlockFunctionalTest::testRecentCommentBlock()

Tests the recent comments block.

File

core/modules/comment/tests/comment.test, line 1790
Tests for the Comment module.

Class

CommentBlockFunctionalTest
Tests the Comment module blocks.

Code

function testRecentCommentBlock() {
  $this->backdropLogin($this->admin_user);
  $this->setCommentSubject(COMMENT_TITLE_CUSTOM);

  // Add the block to the sidebar region in the default layout.
  $layout_name = 'default';
  $region = 'sidebar';
  $block = array(
    'module' => 'comment',
    'delta' => 'recent',
  );
  $block_title = $this->randomName(16);
  $edit = array(
    'region' => $region,
    'title' => $block_title,
    'title_display' => LAYOUT_TITLE_CUSTOM,
    'block_settings[comment_count]' => 2,
  );
  $this->backdropPost('admin/structure/layouts/manage/' . $layout_name . '/add-block/editor/' . $region . '/' . $block['module'] . ':' . $block['delta'], $edit, t('Add block'));
  $this->backdropPost('admin/structure/layouts/manage/' . $layout_name, array(), t('Save layout'));

  // Add some test comments, one without a subject.
  $comment1 = $this->postComment($this->node, $this->randomName(), $this->randomName());
  $comment2 = $this->postComment($this->node, $this->randomName(), $this->randomName());
  $comment3 = $this->postComment($this->node, $this->randomName());

  // Test that a user without the 'access comments' permission cannot see the
  // block.
  $this->backdropLogout();
  user_role_revoke_permissions(BACKDROP_ANONYMOUS_ROLE, array('access comments'));
  // Clear the page cache.
  cache_clear_all();
  $this->backdropGet('');
  $this->assertNoText($block_title, 'Block was not found.');
  user_role_grant_permissions(BACKDROP_ANONYMOUS_ROLE, array('access comments'));

  // Test that a user with the 'access comments' permission can see the
  // block.
  $this->backdropLogin($this->web_user);
  $this->backdropGet('');
  $this->assertText($block_title, 'Block was found.');

  // Test the only the 2 latest comments are shown and in the proper order.
  $this->assertNoText($comment1->subject, 'Comment not found in block.');
  $this->assertText($comment2->subject, 'Comment found in block.');
  $this->assertText($comment3->comment, 'Comment found in block.');
  $this->assertTrue(strpos($this->backdropGetContent(), $comment3->comment) < strpos($this->backdropGetContent(), $comment2->subject), 'Comments were ordered correctly in block.');

  // Set the number of recent comments to show to 10.
  $this->backdropLogout();
  $this->backdropLogin($this->admin_user);
  $edit = array(
    'block_settings[comment_count]' => 10,
  );
  $this->backdropPost('admin/structure/layouts/manage/' . $layout_name . '/add-block/editor/' . $region . '/' . $block['module'] . ':' . $block['delta'], $edit, t('Add block'));
  $this->backdropPost('admin/structure/layouts/manage/' . $layout_name, array(), t('Save layout'));

  // Post an additional comment.
  $comment4 = $this->postComment($this->node, $this->randomName(), $this->randomName());

  // Test that all four comments are shown.
  $this->assertText($comment1->subject, 'Comment found in block.');
  $this->assertText($comment2->subject, 'Comment found in block.');
  $this->assertText($comment3->comment, 'Comment found in block.');
  $this->assertText($comment4->subject, 'Comment found in block.');

  // Test that links to comments work when comments are across pages.
  $this->setCommentsPerPage(1);
  $this->backdropGet('');
  $this->clickLink($comment1->subject);
  $this->assertText($comment1->subject, 'Comment link goes to correct page.');
  $this->backdropGet('');
  $this->clickLink($comment2->subject);
  $this->assertText($comment2->subject, 'Comment link goes to correct page.');
  $this->clickLink($comment4->subject);
  $this->assertText($comment4->subject, 'Comment link goes to correct page.');
  // Check that when viewing a comment page from a link to the comment, that
  // rel="canonical" is added to the head of the document.
  $this->assertRaw('<link rel="canonical"', 'Canonical URL was found in the HTML head');
}