Tests access to the personal contact form.

File

modules/contact/contact.test, line 329
Tests for the Contact module.

Class

ContactPersonalTestCase
Tests the personal contact form.

Code

function testPersonalContactAccess() {

  // Test allowed access to user with contact form enabled.
  $this
    ->drupalLogin($this->web_user);
  $this
    ->drupalGet('user/' . $this->contact_user->uid . '/contact');
  $this
    ->assertResponse(200);

  // Test denied access to the user's own contact form.
  $this
    ->drupalGet('user/' . $this->web_user->uid . '/contact');
  $this
    ->assertResponse(403);

  // Test always denied access to the anonymous user contact form.
  $this
    ->drupalGet('user/0/contact');
  $this
    ->assertResponse(403);

  // Test that anonymous users can access the contact form.
  $this
    ->drupalLogout();
  user_role_grant_permissions(DRUPAL_ANONYMOUS_RID, array(
    'access user contact forms',
  ));
  $this
    ->drupalGet('user/' . $this->contact_user->uid . '/contact');
  $this
    ->assertResponse(200);

  // Test that users can disable their contact form.
  $this
    ->drupalLogin($this->contact_user);
  $edit = array(
    'contact' => FALSE,
  );
  $this
    ->drupalPost('user/' . $this->contact_user->uid . '/edit', $edit, 'Save');
  $this
    ->drupalLogout();
  $this
    ->drupalGet('user/' . $this->contact_user->uid . '/contact');
  $this
    ->assertResponse(403);

  // Test that user's contact status stays disabled when saving.
  $contact_user_temp = user_load($this->contact_user->uid, TRUE);
  user_save($contact_user_temp);
  $this
    ->drupalGet('user/' . $this->contact_user->uid . '/contact');
  $this
    ->assertResponse(403);

  // Test that users can enable their contact form.
  $this
    ->drupalLogin($this->contact_user);
  $edit = array(
    'contact' => TRUE,
  );
  $this
    ->drupalPost('user/' . $this->contact_user->uid . '/edit', $edit, 'Save');
  $this
    ->drupalLogout();
  $this
    ->drupalGet('user/' . $this->contact_user->uid . '/contact');
  $this
    ->assertResponse(200);

  // Revoke the personal contact permission for the anonymous user.
  user_role_revoke_permissions(DRUPAL_ANONYMOUS_RID, array(
    'access user contact forms',
  ));
  $this
    ->drupalGet('user/' . $this->contact_user->uid . '/contact');
  $this
    ->assertResponse(403);

  // Disable the personal contact form.
  $this
    ->drupalLogin($this->admin_user);
  $edit = array(
    'contact_default_status' => FALSE,
  );
  $this
    ->drupalPost('admin/config/people/accounts', $edit, t('Save configuration'));
  $this
    ->assertText(t('The configuration options have been saved.'), 'Setting successfully saved.');
  $this
    ->drupalLogout();

  // Re-create our contacted user with personal contact forms disabled by
  // default.
  $this->contact_user = $this
    ->drupalCreateUser();

  // Test denied access to a user with contact form disabled.
  $this
    ->drupalLogin($this->web_user);
  $this
    ->drupalGet('user/' . $this->contact_user->uid . '/contact');
  $this
    ->assertResponse(403);

  // Test allowed access for admin user to a user with contact form disabled.
  $this
    ->drupalLogin($this->admin_user);
  $this
    ->drupalGet('user/' . $this->contact_user->uid . '/contact');
  $this
    ->assertResponse(200);

  // Re-create our contacted user as a blocked user.
  $this->contact_user = $this
    ->drupalCreateUser();
  user_save($this->contact_user, array(
    'status' => 0,
  ));

  // Test that blocked users can still be contacted by admin.
  $this
    ->drupalGet('user/' . $this->contact_user->uid . '/contact');
  $this
    ->assertResponse(200);

  // Test that blocked users cannot be contacted by non-admins.
  $this
    ->drupalLogin($this->web_user);
  $this
    ->drupalGet('user/' . $this->contact_user->uid . '/contact');
  $this
    ->assertResponse(403);
}