You are here

function PrivatemsgTestCase::testDisablePrivatemsg in Privatemsg 7

Same name and namespace in other branches
  1. 6.2 privatemsg.test \PrivatemsgTestCase::testDisablePrivatemsg()
  2. 7.2 privatemsg.test \PrivatemsgTestCase::testDisablePrivatemsg()

Test functionality around disabling private messaging.

File

./privatemsg.test, line 463
Test file for privatemsg.module

Class

PrivatemsgTestCase

Code

function testDisablePrivatemsg() {
  $admin_user = $this
    ->drupalCreateUser(array(
    'administer permissions',
  ));
  $enableduser = $this
    ->drupalCreateUser(array(
    'read privatemsg',
    'write privatemsg',
  ));

  // set up user with read/write privatemsg permissions
  $enableduser2 = $this
    ->drupalCreateUser(array(
    'read privatemsg',
    'write privatemsg',
  ));

  // set up user with read/write privatemsg permissions
  $disableduser = $this
    ->drupalCreateUser(array(
    'read privatemsg',
    'write privatemsg',
    'allow disabling privatemsg',
  ));

  // set up user with read/write privatemsg permissions
  // Create a message between the users that we can use to test
  $return = privatemsg_new_thread(array(
    $disableduser,
  ), $this
    ->randomName(20), $this
    ->randomName(100), array(
    'author' => $enableduser,
  ));
  $mid = $return['message']->thread_id;
  $this
    ->drupalLogin($disableduser);

  // Now disable $disabledUser.
  $this
    ->drupalGet('user/' . $disableduser->uid . '/edit');
  $edit['pm_enable'] = FALSE;
  $this
    ->drupalPost('user/' . $disableduser->uid . '/edit', $edit, t('Save'));

  // Verify that disableduser can list messages.
  $this
    ->drupalGet('messages');
  $this
    ->assertResponse(200, t('HTTP Response 200: Access to reading messages page is allowed.'));

  // Verify that $disableduser can read messages but there is not reply form
  $this
    ->drupalGet('messages/view/' . $return['message']->thread_id);
  $this
    ->assertResponse(200, t('HTTP Response 200: Access to message thread page is allowed.'));
  $this
    ->assertNoText(t('Reply to thread'), 'No reply form shown.');

  // Verify that $disableduser cannot send a new message.
  $this
    ->drupalGet('messages/new');
  $this
    ->assertResponse(403, t('HTTP Response 403: Access to Write New Message page was blocked to user with private messaging disabled'));

  // Use a newly loaded user object to test the API calls.
  $disableduser_loaded = user_load($disableduser->uid, TRUE);

  // Check that $disableduser cannot submit a reply
  $result = privatemsg_reply($return['message']->thread_id, $this
    ->randomName(100), array(
    'author' => $disableduser_loaded,
  ));
  $this
    ->assertFalse($result['success'], 'Message reply was not sent.');

  // Log in as $enableduser and try to send to $disabled user.
  // Make sure that a message to multiple recipients still works if one is
  // disabled.
  $message = array(
    'recipient' => $disableduser->name,
    'subject' => $this
      ->randomName(20),
    'body[value]' => $this
      ->randomName(100),
  );
  $this
    ->drupalLogin($enableduser);
  $this
    ->drupalPost('messages/new', $message, t('Send message'));
  $this
    ->assertText(t('You are not allowed to send this message because all recipients are blocked.'));

  // Make sure that a message to multiple recipients still works if one is
  // disabled.
  $messagemultiple = array(
    'recipient' => $enableduser2->name . ', ' . $disableduser->name,
    'subject' => $this
      ->randomName(20),
    'body[value]' => $this
      ->randomName(100),
  );
  $this
    ->drupalPost('messages/new', $messagemultiple, t('Send message'));
  $this
    ->assertText(t('@recipient has disabled private message receiving.', array(
    '@recipient' => $disableduser->name,
  )), 'Message about user with disabled private messaging.');
  $this
    ->assertText(t('A message has been sent to @recipients.', array(
    '@recipients' => $enableduser2->name,
  )), 'Message sent confirmation displayed.');

  // Remove the permission to disable privatemsg.
  $this
    ->drupalLogin($admin_user);

  // 6 is the rid of the custom $disableduser role.
  $edit = array(
    '6[allow disabling privatemsg]' => FALSE,
  );
  $this
    ->drupalPost('admin/people/permissions', $edit, t('Save permissions'));

  // Make sure that the option is not visible anymore.
  $this
    ->drupalLogin($disableduser);
  $this
    ->drupalGet('user/' . $disableduser->uid . '/edit');
  $this
    ->assertNoText(t('Enable Private Messaging'), t('Disable privatemsg setting not displayed'));

  // Verify that the user is now allowed to write messages again.
  $this
    ->drupalGet('messages/new');
  $this
    ->assertNoText(t('You are not authorized to access this page.'), t('Access denied page is not displayed.'));
  $this
    ->assertText(t('Write new message'), t('Write message form is displayed.'));
}