function CommentBlockFunctionalTest::testRecentCommentBlock

7.x comment.test CommentBlockFunctionalTest::testRecentCommentBlock()

Test the recent comments block.

File

drupal-7.x/modules/comment/comment.test, line 1681
Tests for comment.module.

Class

CommentBlockFunctionalTest
Functional tests for the comment module blocks.

Code

function testRecentCommentBlock() {
  $this->drupalLogin($this->admin_user);

  // Set the block to a region to confirm block is available.
  $edit = array(
    'blocks[comment_recent][region]' => 'sidebar_first',
  );
  $this->drupalPost('admin/structure/block', $edit, t('Save blocks'));
  $this->assertText(t('The block settings have been updated.'), 'Block saved to first sidebar region.');

  // Set block title and variables.
  $block = array(
    'title' => $this->randomName(),
    'comment_block_count' => 2,
  );
  $this->drupalPost('admin/structure/block/manage/comment/recent/configure', $block, t('Save block'));
  $this->assertText(t('The block configuration has been saved.'), 'Block saved.');

  // 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->drupalLogout();
  user_role_revoke_permissions(DRUPAL_ANONYMOUS_RID, array('access comments'));
  $this->drupalGet('');
  $this->assertNoText($block['title'], 'Block was not found.');
  user_role_grant_permissions(DRUPAL_ANONYMOUS_RID, array('access comments'));

  // Test that a user with the 'access comments' permission can see the
  // block.
  $this->drupalLogin($this->web_user);
  $this->drupalGet('');
  $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->drupalGetContent(), $comment3->comment) < strpos($this->drupalGetContent(), $comment2->subject), 'Comments were ordered correctly in block.');

  // Set the number of recent comments to show to 10.
  $this->drupalLogout();
  $this->drupalLogin($this->admin_user);
  $block = array(
    'comment_block_count' => 10,
  );
  $this->drupalPost('admin/structure/block/manage/comment/recent/configure', $block, t('Save block'));
  $this->assertText(t('The block configuration has been saved.'), 'Block saved.');

  // 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->drupalGet('');
  $this->clickLink($comment1->subject);
  $this->assertText($comment1->subject, 'Comment link goes to correct page.');
  $this->drupalGet('');
  $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');
}