You are here

function SimplenewsRolesResyncTestCase::testResync in Simplenews Roles 7

File

tests/simplenews_roles.test, line 459
SimplenewsRoles test functions.

Class

SimplenewsRolesResyncTestCase

Code

function testResync() {

  // Create an admin user.
  $permissions = array(
    'administer content types',
    'administer nodes',
    'access administration pages',
    'administer newsletters',
    'administer simplenews settings',
    'administer simplenews subscriptions',
    'create simplenews content',
    'edit own simplenews content',
  );
  $admin_user = $this
    ->drupalCreateUser($permissions);
  $this
    ->drupalLogin($admin_user);

  // Create role "subscriber to list x".
  $role = new stdClass();
  $role->name = 'subscriber to list x';
  $role->weight = 3;
  user_role_save($role);
  $permissions = array(
    'administer newsletters',
    'administer simplenews settings',
    'administer simplenews subscriptions',
  );
  $role = user_role_load_by_name($role->name);
  user_role_grant_permissions($role->rid, $permissions);
  $this
    ->drupalLogout();

  // Create three users and assign them "subscriber to list x" role.
  $user_1 = $this
    ->drupalCreateUser(array(
    'administer permissions',
    'administer users',
  ));
  $this
    ->drupalLogin($user_1);
  $edit = array();
  $edit['roles[' . $role->rid . ']'] = $role->rid;
  $this
    ->drupalPost('user/' . $user_1->uid . '/edit', $edit, t('Save'));
  $this
    ->drupalLogout();
  $user_2 = $this
    ->drupalCreateUser(array(
    'administer permissions',
    'administer users',
  ));
  $this
    ->drupalLogin($user_2);
  $edit = array();
  $edit['roles[' . $role->rid . ']'] = $role->rid;
  $this
    ->drupalPost('user/' . $user_2->uid . '/edit', $edit, t('Save'));
  $this
    ->drupalLogout();
  $user_3 = $this
    ->drupalCreateUser(array(
    'administer permissions',
    'administer users',
  ));
  $this
    ->drupalLogin($user_3);
  $edit = array();
  $edit['roles[' . $role->rid . ']'] = $role->rid;
  $this
    ->drupalPost('user/' . $user_3->uid . '/edit', $edit, t('Save'));
  $this
    ->drupalLogout();
  $user_4 = $this
    ->drupalCreateUser(array(
    'administer permissions',
    'administer users',
  ));

  // Create newsletter category.
  $this
    ->drupalLogin($admin_user);
  $this
    ->drupalGet('admin/config/services/simplenews');
  $this
    ->clickLink(t('Add newsletter category'));
  $name = $this
    ->randomName();
  $edit = array(
    'name' => $name,
    'description' => $this
      ->randomString(20),
  );
  $this
    ->drupalPost(NULL, $edit, t('Save'));

  // Find $tid based on the category name.
  drupal_static_reset('simplenews_categories_load_multiple');
  $categories = simplenews_categories_load_multiple();
  $tid = NULL;
  foreach ($categories as $category) {
    if ($category->name == $name) {
      $tid = $category->tid;
    }
  }

  // Add user 4 to list, add anonymous subscribers also.
  $this
    ->drupalGet('admin/people/simplenews');
  $this
    ->clickLink(t('Mass subscribe'));
  $anonymous = array();
  $anonymous[] = $this
    ->randomName() . '@' . $this
    ->randomName() . '.com';
  $anonymous[] = $this
    ->randomName() . '@' . $this
    ->randomName() . '.com';
  $anonymous[] = $this
    ->randomName() . '@' . $this
    ->randomName() . '.com';
  $edit = array(
    'emails' => $user_4->mail . ',' . rtrim(implode(',', $anonymous), ','),
    "newsletters[{$tid}]" => $tid,
  );
  $this
    ->drupalPost(NULL, $edit, t('Subscribe'));

  // Setup sync (list => role), trigger sync.
  $edit = array();
  $edit['roles[' . $role->rid . ']'] = $role->rid;
  $this
    ->drupalPost('admin/config/services/simplenews/categories/' . $tid . '/edit', $edit, t('Save'));
  drupal_static_reset('simplenews_user_is_subscribed');

  // Make sure user 4 got removed and users 1..3 are in list.
  $this
    ->assertFalse(simplenews_user_is_subscribed($user_4->mail, $tid), t('User (4) has been deleted.'));
  $this
    ->assertTrue(simplenews_user_is_subscribed($user_1->mail, $tid), t('User (1) has subscribed.'));
  $this
    ->assertTrue(simplenews_user_is_subscribed($user_2->mail, $tid), t('User (2) has subscribed.'));
  $this
    ->assertTrue(simplenews_user_is_subscribed($user_3->mail, $tid), t('User (3) has subscribed.'));

  // Also anonymous subscribers need to be removed.
  $this
    ->assertFalse(simplenews_user_is_subscribed($anonymous[0], $tid), t('Anonymous (1) has been deleted.'));
  $this
    ->assertFalse(simplenews_user_is_subscribed($anonymous[1], $tid), t('Anonymous (2) has been deleted.'));
  $this
    ->assertFalse(simplenews_user_is_subscribed($anonymous[2], $tid), t('Anonymous (3) has been deleted.'));
}