You are here

function CommentNotifyTestCase::testCommentNotifyAnonymousUserFunctionalTest in Comment Notify 7

Same name and namespace in other branches
  1. 6 comment_notify.test \CommentNotifyTestCase::testCommentNotifyAnonymousUserFunctionalTest()

Test various behaviors for anonymous users.

File

./comment_notify.test, line 34
Creates tests for comment_notify module.

Class

CommentNotifyTestCase
@file Creates tests for comment_notify module.

Code

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, [
    '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.
}