Commit c3c87941 authored by webchick's avatar webchick

Issue #1812034 by xjm: Only use standard profile where necessary in...

Issue #1812034 by xjm: Only use standard profile where necessary in comment.module tests (10% bot speed-up).
parent a7eee0e4
......@@ -11,6 +11,14 @@
* Tests actions provided by the Comment module.
*/
class CommentActionsTest extends CommentTestBase {
/**
* Modules to enable.
*
* @var array
*/
public static $modules = array('dblog');
public static function getInfo() {
return array(
'name' => 'Comment actions',
......
......@@ -2,7 +2,7 @@
/**
* @file
* Definition of Drupal\comment\Tests\CommentAnonymousTest.
* Contains Drupal\comment\Tests\CommentAnonymousTest.
*/
namespace Drupal\comment\Tests;
......@@ -11,6 +11,16 @@
* Tests anonymous commenting.
*/
class CommentAnonymousTest extends CommentTestBase {
/**
* Use the standard profile.
*
* @var string
*
* @todo Remove this dependency if possible.
*/
protected $profile = 'standard';
public static function getInfo() {
return array(
'name' => 'Anonymous comments',
......
......@@ -11,6 +11,28 @@
* Tests the Comment module blocks.
*/
class CommentBlockTest extends CommentTestBase {
/**
* Modules to enable.
*
* @var array
*/
public static $modules = array('block');
function setUp() {
parent::setUp();
// Update admin user to have the 'administer blocks' permission.
$this->admin_user = $this->drupalCreateUser(array(
'administer content types',
'administer comments',
'skip comment approval',
'post comments',
'access comments',
'access content',
'administer blocks',
));
}
public static function getInfo() {
return array(
'name' => 'Comment blocks',
......
<?php
/**
* @file
* Contains Drupal\comment\Tests\CommentCSSTest.
*/
namespace Drupal\comment\Tests;
/**
* Tests comment CSS classes.
*/
class CommentCSSTest extends CommentTestBase {
/**
* Use the standard profile.
*
* @var string
*
* @todo Are these dependent on a particular theme? Remove this dependency
* if possible.
*/
protected $profile = 'standard';
public static function getInfo() {
return array(
'name' => 'Comment CSS',
'description' => 'Tests CSS classes on comments.',
'group' => 'Comment',
);
}
/**
* Tests CSS classes on comments.
*/
function testCommentClasses() {
// Create all permutations for comments, users, and nodes.
$parameters = array(
'node_uid' => array(0, $this->web_user->uid),
'comment_uid' => array(0, $this->web_user->uid, $this->admin_user->uid),
'comment_status' => array(COMMENT_PUBLISHED, COMMENT_NOT_PUBLISHED),
'user' => array('anonymous', 'authenticated', 'admin'),
);
$permutations = $this->generatePermutations($parameters);
foreach ($permutations as $case) {
// Create a new node.
$node = $this->drupalCreateNode(array('type' => 'article', 'uid' => $case['node_uid']));
// Add a comment.
$comment = entity_create('comment', array(
'nid' => $node->nid,
'uid' => $case['comment_uid'],
'status' => $case['comment_status'],
'subject' => $this->randomName(),
'language' => LANGUAGE_NOT_SPECIFIED,
'comment_body' => array(LANGUAGE_NOT_SPECIFIED => array($this->randomName())),
));
comment_save($comment);
// Adjust the current/viewing user.
switch ($case['user']) {
case 'anonymous':
if ($this->loggedInUser) {
$this->drupalLogout();
}
$case['user_uid'] = 0;
break;
case 'authenticated':
$this->drupalLogin($this->web_user);
$case['user_uid'] = $this->web_user->uid;
break;
case 'admin':
$this->drupalLogin($this->admin_user);
$case['user_uid'] = $this->admin_user->uid;
break;
}
// Request the node with the comment.
$this->drupalGet('node/' . $node->nid);
// Verify classes if the comment is visible for the current user.
if ($case['comment_status'] == COMMENT_PUBLISHED || $case['user'] == 'admin') {
// Verify the by-anonymous class.
$comments = $this->xpath('//*[contains(@class, "comment") and contains(@class, "by-anonymous")]');
if ($case['comment_uid'] == 0) {
$this->assertTrue(count($comments) == 1, 'by-anonymous class found.');
}
else {
$this->assertFalse(count($comments), 'by-anonymous class not found.');
}
// Verify the by-node-author class.
$comments = $this->xpath('//*[contains(@class, "comment") and contains(@class, "by-node-author")]');
if ($case['comment_uid'] > 0 && $case['comment_uid'] == $case['node_uid']) {
$this->assertTrue(count($comments) == 1, 'by-node-author class found.');
}
else {
$this->assertFalse(count($comments), 'by-node-author class not found.');
}
// Verify the by-viewer class.
$comments = $this->xpath('//*[contains(@class, "comment") and contains(@class, "by-viewer")]');
if ($case['comment_uid'] > 0 && $case['comment_uid'] == $case['user_uid']) {
$this->assertTrue(count($comments) == 1, 'by-viewer class found.');
}
else {
$this->assertFalse(count($comments), 'by-viewer class not found.');
}
}
// Verify the unpublished class.
$comments = $this->xpath('//*[contains(@class, "comment") and contains(@class, "unpublished")]');
if ($case['comment_status'] == COMMENT_NOT_PUBLISHED && $case['user'] == 'admin') {
$this->assertTrue(count($comments) == 1, 'unpublished class found.');
}
else {
$this->assertFalse(count($comments), 'unpublished class not found.');
}
// Verify the new class.
if ($case['comment_status'] == COMMENT_PUBLISHED || $case['user'] == 'admin') {
$comments = $this->xpath('//*[contains(@class, "comment") and contains(@class, "new")]');
if ($case['user'] != 'anonymous') {
$this->assertTrue(count($comments) == 1, 'new class found.');
// Request the node again. The new class should disappear.
$this->drupalGet('node/' . $node->nid);
$comments = $this->xpath('//*[contains(@class, "comment") and contains(@class, "new")]');
$this->assertFalse(count($comments), 'new class not found.');
}
else {
$this->assertFalse(count($comments), 'new class not found.');
}
}
}
}
}
......@@ -11,6 +11,14 @@
* Tests fields on comments.
*/
class CommentFieldsTest extends CommentTestBase {
/**
* Enable the field UI.
*
* @var array
*/
public static $modules = array('field_ui');
public static function getInfo() {
return array(
'name' => 'Comment fields',
......
......@@ -25,6 +25,11 @@ class CommentLanguageTest extends WebTestBase {
*/
public static $modules = array('language', 'language_test', 'comment_test');
/**
* Use the standard profile.
*
* @todo Remove this dependency if possible.
*/
protected $profile = 'standard';
public static function getInfo() {
......
<?php
/**
* @file
* Contains Drupal\comment\Tests\CommentNewIndicatorTest.
*/
namespace Drupal\comment\Tests;
/**
* Tests the 'new' marker on comments.
*/
class CommentNewIndicatorTest extends CommentTestBase {
/**
* Use the standard profile.
*
* @var string
*
* @todo Remove this dependency.
*/
protected $profile = 'standard';
public static function getInfo() {
return array(
'name' => "Comment 'new' indicator",
'description' => "Tests the 'new' indicator posted on comments.",
'group' => 'Comment',
);
}
/**
* Tests new comment marker.
*/
public function testCommentNewCommentsIndicator() {
// Test if the right links are displayed when no comment is present for the
// node.
$this->drupalLogin($this->admin_user);
$this->node = $this->drupalCreateNode(array('type' => 'article', 'promote' => 1, 'comment' => COMMENT_NODE_OPEN));
$this->drupalGet('node');
$this->assertNoLink(t('@count comments', array('@count' => 0)));
$this->assertNoLink(t('@count new comments', array('@count' => 0)));
$this->assertLink(t('Read more'));
$count = $this->xpath('//div[@id=:id]/div[@class=:class]/ul/li', array(':id' => 'node-' . $this->node->nid, ':class' => 'link-wrapper'));
$this->assertTrue(count($count) == 1, 'One child found');
// Create a new comment. This helper function may be run with different
// comment settings so use comment_save() to avoid complex setup.
$comment = entity_create('comment', array(
'cid' => NULL,
'nid' => $this->node->nid,
'node_type' => $this->node->type,
'pid' => 0,
'uid' => $this->loggedInUser->uid,
'status' => COMMENT_PUBLISHED,
'subject' => $this->randomName(),
'hostname' => ip_address(),
'langcode' => LANGUAGE_NOT_SPECIFIED,
'comment_body' => array(LANGUAGE_NOT_SPECIFIED => array($this->randomName())),
));
comment_save($comment);
$this->drupalLogout();
// Log in with 'web user' and check comment links.
$this->drupalLogin($this->web_user);
$this->drupalGet('node');
$this->assertLink(t('1 new comment'));
$this->clickLink(t('1 new comment'));
$this->assertRaw('<a id="new"></a>', 'Found "new" marker.');
$this->assertTrue($this->xpath('//a[@id=:new]/following-sibling::a[1][@id=:comment_id]', array(':new' => 'new', ':comment_id' => 'comment-1')), 'The "new" anchor is positioned at the right comment.');
// Test if "new comment" link is correctly removed.
$this->drupalGet('node');
$this->assertLink(t('1 comment'));
$this->assertLink(t('Read more'));
$this->assertNoLink(t('1 new comment'));
$this->assertNoLink(t('@count new comments', array('@count' => 0)));
$count = $this->xpath('//div[@id=:id]/div[@class=:class]/ul/li', array(':id' => 'node-' . $this->node->nid, ':class' => 'link-wrapper'));
$this->assertTrue(count($count) == 2, print_r($count, TRUE));
}
}
......@@ -12,9 +12,8 @@
/**
* Tests comments with node access.
*
* See http://drupal.org/node/886752 -- verify there is no PostgreSQL error when
* viewing a node with threaded comments (a comment and a reply), if a node
* access module is in use.
* Verifies there is no PostgreSQL error when viewing a node with threaded
* comments (a comment and a reply), if a node access module is in use.
*/
class CommentNodeAccessTest extends CommentTestBase {
......@@ -39,7 +38,14 @@ function setUp() {
node_access_rebuild();
// Re-create user.
$this->web_user = $this->drupalCreateUser(array('access comments', 'post comments', 'create article content', 'edit own comments', 'node test view'));
$this->web_user = $this->drupalCreateUser(array(
'access comments',
'post comments',
'create article content',
'edit own comments',
'node test view',
'skip comment approval',
));
}
/**
......
......@@ -11,6 +11,14 @@
* Tests previewing comments.
*/
class CommentPreviewTest extends CommentTestBase {
/**
* Use the standard profile.
*
* @var string
*/
protected $profile = 'standard';
public static function getInfo() {
return array(
'name' => 'Comment preview',
......
<?php
/**
* @file
* Contains Drupal\comment\Tests\CommentStatisticsTest.
*/
namespace Drupal\comment\Tests;
/**
* Tests the comment module administrative and end-user-facing interfaces.
*/
class CommentStatisticsTest extends CommentTestBase {
/**
* Use the standard profile.
*
* @var string
*
* @todo Remove this dependency.
*/
protected $profile = 'standard';
public static function getInfo() {
return array(
'name' => 'Comment statistics',
'description' => 'Test comment statistics on nodes.',
'group' => 'Comment',
);
}
/**
* Tests the node comment statistics.
*/
function testCommentNodeCommentStatistics() {
$langcode = LANGUAGE_NOT_SPECIFIED;
// Set comments to have subject and preview disabled.
$this->drupalLogin($this->admin_user);
$this->setCommentPreview(DRUPAL_DISABLED);
$this->setCommentForm(TRUE);
$this->setCommentSubject(FALSE);
$this->setCommentSettings('comment_default_mode', COMMENT_MODE_THREADED, 'Comment paging changed.');
$this->drupalLogout();
// Creates a second user to post comments.
$this->web_user2 = $this->drupalCreateUser(array('access comments', 'post comments', 'create article content', 'edit own comments'));
// Checks the initial values of node comment statistics with no comment.
$node = node_load($this->node->nid);
$this->assertEqual($node->last_comment_timestamp, $this->node->created, 'The initial value of node last_comment_timestamp is the node created date.');
$this->assertEqual($node->last_comment_name, NULL, 'The initial value of node last_comment_name is NULL.');
$this->assertEqual($node->last_comment_uid, $this->web_user->uid, 'The initial value of node last_comment_uid is the node uid.');
$this->assertEqual($node->comment_count, 0, 'The initial value of node comment_count is zero.');
// Post comment #1 as web_user2.
$this->drupalLogin($this->web_user2);
$comment_text = $this->randomName();
$comment = $this->postComment($this->node, $comment_text);
$comment_loaded = comment_load($comment->id);
// Checks the new values of node comment statistics with comment #1.
// The node needs to be reloaded with a node_load_multiple cache reset.
$node = node_load($this->node->nid, TRUE);
$this->assertEqual($node->last_comment_name, NULL, 'The value of node last_comment_name is NULL.');
$this->assertEqual($node->last_comment_uid, $this->web_user2->uid, 'The value of node last_comment_uid is the comment #1 uid.');
$this->assertEqual($node->comment_count, 1, 'The value of node comment_count is 1.');
// Prepare for anonymous comment submission (comment approval enabled).
config('user.settings')->set('register', USER_REGISTER_VISITORS)->save();
$this->drupalLogin($this->admin_user);
user_role_change_permissions(DRUPAL_ANONYMOUS_RID, array(
'access comments' => TRUE,
'post comments' => TRUE,
'skip comment approval' => FALSE,
));
// Ensure that the poster can leave some contact info.
$this->setCommentAnonymous('1');
$this->drupalLogout();
// Post comment #2 as anonymous (comment approval enabled).
$this->drupalGet('comment/reply/' . $this->node->nid);
$anonymous_comment = $this->postComment($this->node, $this->randomName(), '', TRUE);
$comment_unpublished_loaded = comment_load($anonymous_comment->id);
// Checks the new values of node comment statistics with comment #2 and
// ensure they haven't changed since the comment has not been moderated.
// The node needs to be reloaded with a node_load_multiple cache reset.
$node = node_load($this->node->nid, TRUE);
$this->assertEqual($node->last_comment_name, NULL, 'The value of node last_comment_name is still NULL.');
$this->assertEqual($node->last_comment_uid, $this->web_user2->uid, 'The value of node last_comment_uid is still the comment #1 uid.');
$this->assertEqual($node->comment_count, 1, 'The value of node comment_count is still 1.');
// Prepare for anonymous comment submission (no approval required).
$this->drupalLogin($this->admin_user);
user_role_change_permissions(DRUPAL_ANONYMOUS_RID, array(
'access comments' => TRUE,
'post comments' => TRUE,
'skip comment approval' => TRUE,
));
$this->drupalLogout();
// Post comment #3 as anonymous.
$this->drupalGet('comment/reply/' . $this->node->nid);
$anonymous_comment = $this->postComment($this->node, $this->randomName(), '', array('name' => $this->randomName()));
$comment_loaded = comment_load($anonymous_comment->id);
// Checks the new values of node comment statistics with comment #3.
// The node needs to be reloaded with a node_load_multiple cache reset.
$node = node_load($this->node->nid, TRUE);
$this->assertEqual($node->last_comment_name, $comment_loaded->name, 'The value of node last_comment_name is the name of the anonymous user.');
$this->assertEqual($node->last_comment_uid, 0, 'The value of node last_comment_uid is zero.');
$this->assertEqual($node->comment_count, 2, 'The value of node comment_count is 2.');
}
}
......@@ -2,7 +2,7 @@
/**
* @file
* Definition of Drupal\comment\Tests\CommentTestBase.
* Contains Drupal\comment\Tests\CommentTestBase.
*/
namespace Drupal\comment\Tests;
......@@ -10,6 +10,9 @@
use Drupal\comment\Comment;
use Drupal\simpletest\WebTestBase;
/**
* Provides setup and helper methods for comment tests.
*/
abstract class CommentTestBase extends WebTestBase {
/**
......@@ -17,20 +20,60 @@ abstract class CommentTestBase extends WebTestBase {
*
* @var array
*/
public static $modules = array('comment', 'search');
protected $profile = 'standard';
public static $modules = array('comment', 'node');
/**
* An administrative user with permission to configure comment settings.
*
* @var Drupal\user\User
*/
protected $admin_user;
/**
* A normal user with permission to post comments.
*
* @var Drupal\user\User
*/
protected $web_user;
/**
* A test node to which comments will be posted.
*
* @var Drupal\node\Node
*/
protected $node;
function setUp() {
parent::setUp();
// Create users and test node.
$this->admin_user = $this->drupalCreateUser(array('administer content types', 'administer comments', 'administer blocks'));
$this->web_user = $this->drupalCreateUser(array('access comments', 'post comments', 'create article content', 'edit own comments'));
// Create an article content type only if it does not yet exist, so that
// child classes may specify the standard profile.
$types = node_type_get_types();
if (empty($types['article'])) {
$this->drupalCreateContentType(array('type' => 'article', 'name' => t('Article')));
}
// Create two test users.
$this->admin_user = $this->drupalCreateUser(array(
'administer content types',
'administer comments',
'skip comment approval',
'post comments',
'access comments',
'access content',
));
$this->web_user = $this->drupalCreateUser(array(
'access comments',
'post comments',
'create article content',
'edit own comments',
'post comments',
'skip comment approval',
'access comments',
'access content',
));
// Create a test node authored by the web user.
$this->node = $this->drupalCreateNode(array('type' => 'article', 'promote' => 1, 'uid' => $this->web_user->uid));
}
......@@ -122,7 +165,6 @@ function commentExists(Comment $comment = NULL, $reply = FALSE) {
if ($comment) {
$regex = '/' . ($reply ? '<div class="indented">(.*?)' : '');
$regex .= '<a id="comment-' . $comment->id . '"(.*?)'; // Comment anchor.
$regex .= '<div(.*?)'; // Begin in comment div.
$regex .= $comment->subject . '(.*?)'; // Match subject.
$regex .= $comment->comment . '(.*?)'; // Match comment.
$regex .= '/s';
......@@ -278,4 +320,5 @@ function getUnapprovedComment($subject) {
return $match[2];
}
}
......@@ -14,6 +14,15 @@
*/
class CommentAttributesTest extends CommentTestBase {
/**
* Use the standard profile.
*
* @var string
*
* @todo Remove this dependency if possible.
*/
protected $profile = 'standard';
/**
* Modules to enable.
*
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment