123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225 |
- <?php
- /**
- * @file
- * Functionality tests for the Rules integration in the Mime Mail module.
- *
- * @ingroup mimemail
- */
- /**
- * Tests the Rules integration.
- */
- class MimeMailRulesTestCase extends DrupalWebTestCase {
- /**
- * The user with administration permissions.
- * @var object
- */
- protected $adminUser;
- public static function getInfo() {
- return array(
- 'name' => 'Rules integration',
- 'description' => 'Test the Rules integration.',
- 'group' => 'Mime Mail',
- );
- }
- public function setUp(array $modules = array()) {
- $modules[] = 'mailsystem';
- $modules[] = 'locale';
- $modules[] = 'entity';
- $modules[] = 'entity_token';
- $modules[] = 'rules';
- $modules[] = 'mimemail';
- parent::setUp($modules);
- // Create and login user.
- $this->adminUser = $this->drupalCreateUser(array(
- 'access administration pages',
- 'edit mimemail user settings',
- 'administer languages',
- 'administer rules',
- 'bypass rules access',
- 'access rules debug',
- ));
- $this->drupalLogin($this->adminUser);
- // Enable another language too.
- foreach (array('de', 'it') as $langcode) {
- $edit = array();
- $edit['langcode'] = $langcode;
- $this->drupalPost('admin/config/regional/language/add', $edit, t('Add language'));
- }
- // Make sure we are not using a stale list.
- drupal_static_reset('language_list');
- }
- /**
- * Create mimemail action rule and fire it.
- */
- public function testMimemailAction() {
- $settings = array(
- 'key' => 'mail-key-' . $this->randomName(),
- 'to' => $this->randomName() . '@example.com',
- 'from' => $this->randomName() . '@example.com',
- 'subject' => $this->randomName(),
- 'body' => $this->randomName(60) . '<div></div><br /><hr>',
- 'plaintext' => $this->randomName(30) . '<div></div><br /><hr>',
- );
- // Set no language for the mail and check if the system default is used.
- $rule = rule();
- $rule->action('mimemail', array(
- 'key' => $settings['key'],
- 'to' => $settings['to'],
- 'from_mail' => $settings['from'],
- 'subject' => $settings['subject'],
- 'body' => $settings['body'],
- 'plaintext' => $settings['plaintext'],
- 'language' => '',
- ))->save();
- $rule->execute();
- $mails = $this->drupalGetMails(array('key' => $settings['key']));
- $this->assertEqual(count($mails), 1);
- $mail = reset($mails);
- $this->assertEqual($mail['to'], $settings['to']);
- $this->assertEqual($mail['from'], $settings['from']);
- $this->assertEqual($mail['subject'], $settings['subject']);
- $this->assertEqual($mail['params']['context']['body'], $settings['body']);
- $this->assertEqual($mail['params']['plaintext'], $settings['plaintext']);
- $this->assertEqual($mail['language']->language, language_default('language'));
- // Explicitly set another language for the mail.
- $rule_action = $rule->elementMap()->lookup(3);
- unset($rule_action->settings['language:select']);
- $rule_action->settings['language'] = 'de';
- $rule_action->settings['key'] = $settings['key'];
- $rule->save();
- $rule->execute();
- $mails = $this->drupalGetMails(array('key' => $settings['key']));
- $this->assertEqual(count($mails), 2);
- $mail = end($mails);
- $this->assertEqual($mail['language']->language, 'de');
- }
- /**
- * Create mimemail to users by role action rule and fire it.
- */
- public function testMimemaiToUsersOfRoleAction() {
- $languages = language_list();
- // Add more uses and roles.
- $users = array(
- $this->randomName() . '@example.com' => 'en',
- $this->randomName() . '@example.com' => 'de',
- $this->randomName() . '@example.com' => 'it',
- $this->randomName() . '@example.com' => '',
- $this->randomName() . '@example.com' => 'invalid',
- );
- $mimemail_role = $this->drupalCreateRole(array());
- foreach ($users as $email => $language) {
- $user = $this->drupalCreateUser(array(
- 'access administration pages',
- ));
- $user->language = $language;
- $user->mail = $email;
- $user->roles[$mimemail_role] = $mimemail_role;
- user_save($user);
- }
- $settings = array(
- 'key' => 'mail-key-' . $this->randomName(),
- 'from' => $this->randomName() . '@example.com',
- 'subject' => $this->randomName(),
- 'body' => $this->randomName(60) . '<div></div><br /><hr>',
- 'plaintext' => $this->randomName(30) . '<div></div><br /><hr>',
- );
- // Rest the collected mails.
- variable_set('drupal_test_email_collector', array());
- // Send mails to all users of a role and respect the language of the users.
- // Don't enforce a specific language as fallback use the system default.
- $rule = rule();
- $rule->action('mimemail_to_users_of_role', array(
- 'key' => $settings['key'],
- 'from_mail' => $settings['from'],
- 'subject' => $settings['subject'],
- 'body' => $settings['body'],
- 'plaintext' => $settings['plaintext'],
- 'roles' => array($mimemail_role => $mimemail_role),
- 'active' => TRUE,
- 'language_user' => TRUE,
- 'language' => '',
- ));
- $rule->save();
- $rule->execute();
- $mails = $this->drupalGetMails(array('key' => $settings['key']));
- $this->assertEqual(count($mails), count($users));
- $mail = reset($mails);
- $this->assertEqual($mail['from'], $settings['from']);
- $this->assertEqual($mail['subject'], $settings['subject']);
- $this->assertEqual($mail['params']['context']['body'], $settings['body']);
- $this->assertEqual($mail['params']['plaintext'], $settings['plaintext']);
- foreach ($mails as $mail) {
- // If the user hasn't a proper language the system default has to be used
- // if the rules action doesn't provide a language to use.
- $user_language = (!empty($languages[$users[$mail['to']]])) ? $users[$mail['to']] : language_default('language');
- $this->assertEqual($mail['language']->language, $user_language);
- }
- // Send mails to all users of a role and respect the language of the users.
- // Enforce German as fallback language if an user doesn't have a language.
- // Rest the collected mails.
- variable_set('drupal_test_email_collector', array());
- $rule->elementMap()->lookup(3)->settings['language'] = 'de';
- $rule->save();
- $rule->execute();
- $mails = $this->drupalGetMails(array('key' => $settings['key']));
- $this->assertEqual(count($mails), count($users));
- foreach ($mails as $mail) {
- // If the user hasn't a proper language the language set in the rules
- // action has to be used.
- $user_language = (!empty($languages[$users[$mail['to']]])) ? $users[$mail['to']] : 'de';
- $this->assertEqual($mail['language']->language, $user_language);
- }
- // Send mails to all users of a role but use the same language for all.
- // Rest the collected mails.
- variable_set('drupal_test_email_collector', array());
- $rule->elementMap()->lookup(3)->settings['language_user'] = FALSE;
- $rule->elementMap()->lookup(3)->settings['language'] = 'it';
- $rule->save();
- $rule->execute();
- $mails = $this->drupalGetMails(array('key' => $settings['key']));
- foreach ($mails as $mail) {
- $this->assertEqual($mail['language']->language, 'it');
- }
- // Send mails to all users of a role except deactivated users.
- // Rest the collected mails.
- variable_set('drupal_test_email_collector', array());
- // Disable one of the users.
- reset($users);
- $user = user_load_by_mail(key($users));
- $user->status = 0;
- user_save($user);
- $rule->execute();
- $mails = $this->drupalGetMails(array('key' => $settings['key']));
- $this->assertEqual(count($mails), count($users) - 1);
- // Rest the collected mails.
- variable_set('drupal_test_email_collector', array());
- // Send mails to all users, also to deactivated ones.
- $rule->elementMap()->lookup(3)->settings['active'] = FALSE;
- $rule->save();
- $rule->execute();
- $mails = $this->drupalGetMails(array('key' => $settings['key']));
- // One user is disabled but it should be ignored.
- $this->assertEqual(count($mails), count($users));
- }
- }
|