public function MailchimpListsBasicTestCase::testMailchimpListSubscriptionWorkflow in Mailchimp 7.2
Tests subscription workflows.
The core test function runs through a series of subscription requests and with different settings enabled and verifies that users are subscribed, or not, correctly.
Return value
bool Returns TRUE on completion.
File
- modules/
mailchimp_lists/ tests/ mailchimp_lists.test, line 70 - Test class and methods for the Mailchimp Lists module.
Class
- MailchimpListsBasicTestCase
- @file Test class and methods for the Mailchimp Lists module.
Code
public function testMailchimpListSubscriptionWorkflow() {
// *************************************************************************
// 1. Test basic subscription adds for each user type and list type
// *************************************************************************
$this
->pass('--== Commencing Basic Subscription Adds ==--', 'Subscriptions');
$anon_email = $this
->subscribeUser('anonymous');
$this
->confirmSubscriptionStatus(TRUE, $anon_email, MAILCHIMP_TESTLIST_ANONYMOUS, 'Subscriptions: Anonymous');
$auth_uid = $this
->subscribeUser('authenticated');
$auth_user = user_load($auth_uid);
$this
->confirmSubscriptionStatus(TRUE, $auth_user->mail, MAILCHIMP_TESTLIST_OPTIONAL, 'Subscriptions: Optional');
$req_uid = $this
->subscribeUser('required');
$req_user = user_load($req_uid);
$this
->confirmSubscriptionStatus(TRUE, $req_user->mail, MAILCHIMP_TESTLIST_REQUIRED, 'Subscriptions: Required');
// *************************************************************************
// 2. Test deletion of an Authenticated User removes the user from optional
// list.
// *************************************************************************
$this
->pass('--== Commencing Basic User Deletion Triggers ==--', 'Subscriptions');
$auth_email = $auth_user->mail;
user_delete($auth_user->uid);
$this
->confirmSubscriptionStatus(FALSE, $auth_email, MAILCHIMP_TESTLIST_OPTIONAL, 'Subscriptions: Optional', " after account deletion");
// *************************************************************************
// 3. Test deletion of an Authenticated User removes the user from required
// list.
// *************************************************************************
$req_email = $req_user->mail;
user_delete($req_user->uid);
$this
->confirmSubscriptionStatus(FALSE, $req_email, MAILCHIMP_TESTLIST_REQUIRED, 'Subscriptions: Required', " after account deletion");
// *************************************************************************
// 4. Test basic subscription adds for each user type and list type with
// cron enabled for the lists.
// *************************************************************************
$this
->pass('--== Commencing Cron Subscription Adds ==--', 'Cron Subs');
$this
->setListsCron(TRUE);
// Since Cron is active, none of these new subs should be active
// immediately after creation:
$anon_email = $this
->subscribeUser('anonymous');
$this
->confirmSubscriptionStatus(FALSE, $anon_email, MAILCHIMP_TESTLIST_ANONYMOUS, 'Cron Subs: Anonymous', " BEFORE cron is run");
$auth_uid = $this
->subscribeUser('authenticated');
$auth_user = user_load($auth_uid);
$auth_email = $auth_user->mail;
$this
->confirmSubscriptionStatus(FALSE, $auth_email, MAILCHIMP_TESTLIST_OPTIONAL, 'Cron Subs: Optional', " BEFORE cron is run");
$req_uid = $this
->subscribeUser('required');
$req_user = user_load($req_uid);
$req_email = $req_user->mail;
$this
->confirmSubscriptionStatus(FALSE, $req_email, MAILCHIMP_TESTLIST_REQUIRED, 'Cron Subs: Required', " BEFORE cron is run");
// Now we run cron and confirm that subscriptions have become active:
$this
->cronRun();
$this
->confirmSubscriptionStatus(TRUE, $anon_email, MAILCHIMP_TESTLIST_ANONYMOUS, 'Cron Subs: Anonymous', " AFTER cron is run");
$this
->confirmSubscriptionStatus(TRUE, $auth_email, MAILCHIMP_TESTLIST_OPTIONAL, 'Cron Subs: Optional', " AFTER cron is run");
$this
->confirmSubscriptionStatus(TRUE, $req_email, MAILCHIMP_TESTLIST_REQUIRED, 'Cron Subs: Required', " AFTER cron is run");
// *************************************************************************
// 5. Test basic subscription deletes for each user type and list type with
// cron enabled for the lists. We use the subscriptions from the previous
// section.
// *************************************************************************
$this
->pass($message = '--== Commencing Cron Subscription Deletes ==--', $group = 'Cron Subs');
user_delete($auth_user->uid);
$this
->confirmSubscriptionStatus(TRUE, $auth_email, MAILCHIMP_TESTLIST_OPTIONAL, 'Cron Subs: Optional', " after account deletion, BEFORE cron");
user_delete($req_user->uid);
// We work in a test for cron being disabled with items still in the queue:
$this
->setListsCron(FALSE);
$this
->confirmSubscriptionStatus(TRUE, $req_email, MAILCHIMP_TESTLIST_REQUIRED, 'Cron Subs: Required', " after account deletion & queuing disabled, BEFORE cron");
// Now we run cron, and confirm that subscriptions have been cancelled:
$this
->cronRun();
$this
->confirmSubscriptionStatus(FALSE, $auth_email, MAILCHIMP_TESTLIST_OPTIONAL, 'Cron Subs: Optional', " after account deletion, AFTER cron");
$this
->confirmSubscriptionStatus(FALSE, $req_email, MAILCHIMP_TESTLIST_REQUIRED, 'Cron Subs: Required', " after account deletion, AFTER cron");
// *************************************************************************
// 6. Test for appropriate attention to role changes on required and
// optional lists.
// *************************************************************************
$this
->pass('--== Commencing Role-based Subscription Behavior ==--', 'Roles Subs');
$roles_test_uid = $this
->subscribeUser('authenticated');
// We should now have a user added to the optional list AND the required
// list, because the required list is REQUIRED. We take advantage of this
// implication in this test.
$roles_test_user = user_load($roles_test_uid);
$this
->confirmSubscriptionStatus(TRUE, $roles_test_user->mail, MAILCHIMP_TESTLIST_OPTIONAL, 'Roles Subs: Optional', " user with correct roles opted in");
$this
->confirmSubscriptionStatus(TRUE, $roles_test_user->mail, MAILCHIMP_TESTLIST_REQUIRED, 'Roles Subs: Required', " user with correct roles created");
// Now we create our "exclusive" role:
$role = new stdClass();
$role->name = 'exclusive';
user_role_save($role);
$exclusive_role = user_role_load_by_name('exclusive');
$exclusive_role_id = $exclusive_role->rid;
// Now we configure our lists to allow only users with this role:
$lists = array();
$lists['optional'] = mailchimp_lists_load_multiple_by_name('optional_test_list');
$lists['required'] = mailchimp_lists_load_multiple_by_name('required_test_list');
foreach ($lists as $list) {
$list->settings['roles'] = array(
$exclusive_role_id => $exclusive_role_id,
);
mailchimp_lists_save($list);
// Queue the updates to the list (normally triggered in the form):
mailchimp_lists_queue_existing($list, TRUE);
}
// The user no longer has the appropriate roles. Check that they have been
// removed from the now-exclusive lists once Cron is run:
$this
->cronRun();
$this
->confirmSubscriptionStatus(FALSE, $roles_test_user->mail, MAILCHIMP_TESTLIST_OPTIONAL, 'Roles Subs: Optional', " after list role changed to be exclusive");
$this
->confirmSubscriptionStatus(FALSE, $roles_test_user->mail, MAILCHIMP_TESTLIST_REQUIRED, 'Roles Subs: Required', " after list role changed to be exclusive");
// Now let's give the user the appropriate role (and trigger subscription.)
$new_roles = $roles_test_user->roles;
$new_roles[$exclusive_role_id] = $exclusive_role->name;
$roles_test_user = user_save($roles_test_user, array(
'roles' => $new_roles,
));
// We should now be subscribed to the required list, but not the optional:
$this
->confirmSubscriptionStatus(FALSE, $roles_test_user->mail, MAILCHIMP_TESTLIST_OPTIONAL, 'Roles Subs: Optional', " after adding exclusive role");
$this
->confirmSubscriptionStatus(TRUE, $roles_test_user->mail, MAILCHIMP_TESTLIST_REQUIRED, 'Roles Subs: Required', " after adding exclusive role");
// Reset the optional list role permissions:
$authenticated_role = user_role_load_by_name('authenticated user');
$authenticated_role_id = $authenticated_role->rid;
$list_optional = mailchimp_lists_load_multiple_by_name('optional_test_list');
$list_optional->settings['roles'] = array(
$authenticated_role_id => $authenticated_role_id,
);
mailchimp_lists_save($list_optional);
// *************************************************************************
// 7. Test the "queue existing" function for new required lists in cron mode
// *************************************************************************
$this
->pass('--== Commencing Queue-Existing Subscription Adds ==--', 'Queue Existing Subscriptions');
$this
->setListsCron(TRUE);
// Alter our required list to require the exclusive role:
$req_list = mailchimp_lists_load_multiple_by_name('required_test_list');
$req_list->settings['roles'] = array(
$exclusive_role_id => $exclusive_role_id,
);
mailchimp_lists_save($req_list);
// Create a new role for our list and user to get matched up later:
$role = new stdClass();
$role->name = 'queued';
user_role_save($role);
$queued_role = user_role_load_by_name('queued');
$queued_role_id = $queued_role->rid;
// Create a user who doesn't have the exclusive role:
$queued_uid = $this
->subscribeUser('authenticated');
$queued_user = user_load($queued_uid);
// Add the queued role to the user so he'll match the list when it gets
// this role:
$new_roles = $queued_user->roles;
$new_roles[$queued_role_id] = $queued_role->name;
$queued_user = user_save($queued_user, array(
'roles' => $new_roles,
));
// Add the queued role to the MC list so the user now belongs on the list:
$req_list->settings['roles'] = array(
$queued_role_id => $queued_role_id,
);
mailchimp_lists_save($req_list);
// Confirm that the user is not currently on the list:
$this
->confirmSubscriptionStatus(FALSE, $queued_user->mail, MAILCHIMP_TESTLIST_REQUIRED, 'Queue Existing Subscriptions', " after roles match, before 'queue existing'");
// Run the queue existing function, then trigger cron:
mailchimp_lists_queue_existing($req_list);
$this
->cronRun();
// Confirm that the user has been added:
$this
->confirmSubscriptionStatus(TRUE, $queued_user->mail, MAILCHIMP_TESTLIST_REQUIRED, 'Queue Existing Subscriptions', " after 'queue existing' and cron run");
// Reset list settings to normal:
$req_list->settings['roles'] = array(
DRUPAL_AUTHENTICATED_RID => DRUPAL_AUTHENTICATED_RID,
);
mailchimp_lists_save($req_list);
// *************************************************************************
// 8. Test new users aren't inappropriately added to optional lists on cron
// runs.
// *************************************************************************
$this
->pass('--== Commencing User-creation Tests for Proper Default Subscriptions ==--', 'New User Subs');
$this
->setListsCron(TRUE);
$req_only_uid = $this
->subscribeUser('required');
$req_only_user = user_load($req_only_uid);
$this
->cronRun();
// User should now be subscribed to the required list, but not the optional:
$this
->confirmSubscriptionStatus(TRUE, $req_only_user->mail, MAILCHIMP_TESTLIST_REQUIRED, 'New Users Subs: Required', " to Required after 'user creation' and cron run");
$this
->confirmSubscriptionStatus(FALSE, $req_only_user->mail, MAILCHIMP_TESTLIST_OPTIONAL, 'New Users Subs: Optional', " to Optional without Opt-in after 'user creation' and cron run");
// Debugging lines follow: uncomment to display the test subscription table.
// $subtable = variable_get('mailchimp_test_list_data');
// $this->pass(print_r($subtable, TRUE), "Final Sub Pattern");
return TRUE;
}