t('Comment notify general tests'), 'description' => t('Test the various comment notification settings.'), 'group' => t('Comment notify'), ); } /** * Implementation of setUp(). */ function setUp() { parent::setUp('comment_notify'); // Create a content type where commenting is enabled. // Allow contact info for anons on that content type, and make preview optional. } /** * Test various behaviors for anonymous users. */ function testCommentNotifyAnonymousUserFunctionalTest() { // Code that does something to be tested. // Create and login administrative user. $admin_user = $this->drupalCreateUser(array('administer comment notify', 'administer permissions', 'administer comments')); $this->drupalLogin($admin_user); // Enable comment notify on this node and allow anonymous information in comments. variable_set('comment_notify_node_types', array('article' => 'article', 'page' => 0)); variable_set('comment_anonymous_article', '1'); // Create a node with comments allowed. $this->node = $this->drupalCreateNode(array('type' => 'article', 'promote' => NODE_PROMOTED, 'comment' => COMMENT_NODE_OPEN)); // Allow anonymous users to post comments and get notifications. user_role_grant_permissions(DRUPAL_ANONYMOUS_RID, array('access comments', 'access content', 'post comments', 'skip comment approval', 'subscribe to comments')); $this->drupalLogout(); // Notify type 1 - All comments on the node. // First confirm that we properly require an e-mail address. $subscribe_1 = array('notify' => TRUE, 'notify_type' => 1); $this->postCommentNotifyComment($this->node, $this->randomName(), $this->randomName(), $subscribe_1); // This is still a bad test to test for a static string showing on the page, but at least the definition of the string is centralized. $expected_error = comment_notify_variable_registry_get('error_anonymous_email_missing'); $this->assertText(t($expected_error)); // Try again with an e-mail address. $contact_1 = array('name' => $this->randomName(), 'mail' => $this->getRandomEmailAddress()); $anonymous_comment_1 = $this->postCommentNotifyComment($this->node, $this->randomName(), $this->randomName(), $subscribe_1, $contact_1); // Confirm that the notification is saved. $result = comment_notify_get_notification_type($anonymous_comment_1['id']); $this->assertEqual($result, $subscribe_1['notify_type'], 'Notify selection option 1 is saved properly.'); // Notify type 2 - replies to a comment. $subscribe_2 = array('notify' => TRUE, 'notify_type' => 2); $contact_2 = array('name' => $this->randomName(), 'mail' => $this->getRandomEmailAddress()); $anonymous_comment_2 = $this->postCommentNotifyComment($this->node, $this->randomName(), $this->randomName(), $subscribe_2, $contact_2); // Confirm that the notification is saved. $result = comment_notify_get_notification_type($anonymous_comment_2['id']); $this->assertEqual($result, $subscribe_2['notify_type'], 'Notify selection option 2 is saved properly.'); // Confirm that the original subscriber with all comments on this node got their mail. $this->assertMail('to', $contact_1['mail'], t('Message was sent to the proper anonymous user.')); // Notify type 0 (i.e. only one mode is enabled). variable_set('comment_notify_available_alerts', array(1 => 0, 2 => 2)); $subscribe_0 = array('notify' => TRUE); $contact_0 = array('mail' => $this->getRandomEmailAddress()); $anonymous_comment_0 = $this->postCommentNotifyComment($this->node, $this->randomName(), $this->randomName(), $subscribe_0, $contact_0); // Confirm that the notification is saved. $result = comment_notify_get_notification_type($anonymous_comment_0['id']); $this->assertEqual($result, 2, 'Notify selection option 0 is saved properly.'); // TODO yet more tests. } /////////////////////////////////////\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ ////////////////////////// COPIED FROM 7.X COMMENT.TEST \\\\\\\\\\\\\\\\\\\\\ //////////////////////////////and tweaked a little\\\\\\\\\\\\\\\\\\\\\\\\\\\ /////////////////////////////////////\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ /** * Post comment. * * @param object $node Node to post comment on. * @param string $subject Comment subject. * @param string $comment Comment body. * @param boolean $preview Should preview be required. * @param mixed $contact Set to NULL for no contact info, TRUE to ignore success checking, and array of values to set contact info. */ function postCommentNotifyComment($node, $subject, $comment, $notify, $contact = NULL) { $langcode = LANGUAGE_NONE; $edit = array(); $edit['subject'] = $subject; $edit['comment_body[' . $langcode . '][0][value]'] = $comment; if ($notify !== NULL && is_array($notify)) { $edit += $notify; } if ($contact !== NULL && is_array($contact)) { $edit += $contact; } $this->drupalPost('node/' . $node->nid, $edit, t('Save')); $match = array(); // Get comment ID preg_match('/#comment-([^"]+)/', $this->getURL(), $match); // Get comment. if (!empty($match[1])) { // If true then attempting to find error message. if ($subject) { $this->assertText($subject, 'Comment subject posted.'); } $this->assertText($comment, 'Comment body posted.'); $this->assertTrue((!empty($match) && !empty($match[1])), t('Comment id found.')); } if (isset($match[1])) { return array('id' => $match[1], 'subject' => $subject, 'comment' => $comment); } } /** * Checks current page for specified comment. * * @param object $comment Comment object. * @param boolean $reply The comment is a reply to another comment. * @return boolean Comment found. */ function commentExists($comment, $reply = FALSE) { if ($comment && is_object($comment)) { $regex = '/' . ($reply ? '
(.*?)' : ''); $regex .= 'subject . '(.*?)'; // Match subject. $regex .= $comment->comment . '(.*?)'; // Match comment. $regex .= '<\/div>/s'; // Dot matches newlines and ensure that match doesn't bleed outside comment div. return (boolean)preg_match($regex, $this->drupalGetContent()); } else { return FALSE; } } /** * Returns a randomly generated valid email address. * * @return string. */ function getRandomEmailAddress() { return $this->randomName() . '@example.com'; } }