function RulesIntegrationTestCase::testSystemIntegration

Same name and namespace in other branches
  1. 7.x-2.x tests/rules.test \RulesIntegrationTestCase::testSystemIntegration()

Test site/system integration.

File

d7-tests/rules_integration_test_case.test, line 645

Class

RulesIntegrationTestCase
Tests provided module integration.

Code

function testSystemIntegration() {
  // Test using the 'site' variable.
  $condition = rules_condition('data_is', array(
    'data:select' => 'site:current-user:name',
    'value' => $GLOBALS['user']->name,
  ));
  $this->assertTrue($condition->execute(), 'Retrieved the current user\'s name.');
  // Another test using a token replacement.
  $condition = rules_condition('data_is', array(
    'data:select' => 'site:current-user:name',
    'value' => '[site:current-user:name]',
  ));
  $this->assertTrue($condition->execute(), 'Replaced the token for the current user\'s name.');
  // Test breadcrumbs and drupal set message.
  $rule = rules_reaction_rule();
  $rule->event('init')
    ->action('breadcrumb_set', array(
    'titles' => array(
      'foo',
    ),
    'paths' => array(
      'bar',
    ),
  ))
    ->action('drupal_message', array(
    'message' => 'A message.',
  ));
  $rule->save('test');
  $this->drupalGet('node');
  $this->assertLink('foo', 0, 'Breadcrumb has been set.');
  $this->assertText('A message.', 'Drupal message has been shown.');
  // Test the page redirect.
  $node = $this->drupalCreateNode();
  $rule = rules_reaction_rule();
  $rule->event('node_view')
    ->action('redirect', array(
    'url' => 'user',
  ));
  $rule->save('test2');
  $this->drupalGet('node/' . $node->nid);
  $this->assertEqual($this->getUrl(), url('user', array(
    'absolute' => TRUE,
  )), 'Redirect has been issued.');
  // Also test using a url including a fragment.
  $actions = $rule->actions();
  $actions[0]->settings['url'] = 'user#fragment';
  $rule->save();
  $this->drupalGet('node/' . $node->nid);
  $this->assertEqual($this->getUrl(), url('user', array(
    'absolute' => TRUE,
    'fragment' => 'fragment',
  )), 'Redirect has been issued.');
  // Test sending mail.
  $settings = array(
    'to' => 'mail@example.com',
    'subject' => 'subject',
    'message' => 'hello.',
  );
  rules_action('mail', $settings)->execute();
  $this->assertMail('to', 'mail@example.com', 'Mail has been sent.');
  $this->assertMail('from', variable_get('site_mail', ini_get('sendmail_from')), 'Default from address has been used');
  rules_action('mail', $settings + array(
    'from' => 'sender@example.com',
  ))->execute();
  $this->assertMail('from', 'sender@example.com', 'Specified from address has been used');
  // Test sending mail to all users of a role. First make sure there is a
  // custom role and a user for it.
  $user = $this->drupalCreateUser(array(
    'administer nodes',
  ));
  $roles = $user->roles;
  // Remove the authenticate role so we only use the new role created by
  // drupalCreateUser().
  unset($roles[DRUPAL_AUTHENTICATED_RID]);
  rules_action('mail_to_users_of_role', $settings + array(
    'roles' => array_keys($roles),
  ))->execute();
  $this->assertMail('to', $user->mail, 'Mail to users of a role has been sent.');
  // Test reacting on new log entries and make sure the log entry is usable.
  $rule = rules_reaction_rule();
  $rule->event('watchdog');
  $rule->action('drupal_message', array(
    'message:select' => 'log_entry:message',
  ));
  $rule->integrityCheck()
    ->save('test_watchdog');
  watchdog('php', 'test %message', array(
    '%message' => 'message',
  ));
  $msg = drupal_get_messages();
  $this->assertEqual(array_pop($msg['status']), t('test %message', array(
    '%message' => 'message',
  )), 'Watchdog event occurred and log entry properties can be used.');
}