You are here

public function RulesIntegrationTestCase::testNodeIntegration in Rules 7.2

Same name and namespace in other branches
  1. 8.3 d7-tests/rules_integration_test_case.test \RulesIntegrationTestCase::testNodeIntegration()

Tests integration for the node module.

File

tests/rules.test, line 1812
Rules tests.

Class

RulesIntegrationTestCase
Tests provided module integration.

Code

public function testNodeIntegration() {
  $tests = array(
    array(
      'node_unpublish',
      'node_is_published',
      'node_publish',
      'status',
    ),
    array(
      'node_make_unsticky',
      'node_is_sticky',
      'node_make_sticky',
      'sticky',
    ),
    array(
      'node_unpromote',
      'node_is_promoted',
      'node_promote',
      'promote',
    ),
  );
  $node = $this
    ->drupalCreateNode(array(
    'type' => 'page',
    'status' => 1,
    'sticky' => 1,
    'promote' => 1,
  ));
  foreach ($tests as $info) {
    list($action1, $condition, $action2, $property) = $info;
    rules_action($action1)
      ->execute($node);
    $node = node_load($node->nid, NULL, TRUE);
    $this
      ->assertFalse($node->{$property}, 'Action has permanently disabled node ' . $property);
    $return = rules_condition($condition)
      ->execute($node);
    $this
      ->assertFalse($return, 'Condition determines node ' . $property . ' is disabled.');
    rules_action($action2)
      ->execute($node);
    $node = node_load($node->nid, NULL, TRUE);
    $this
      ->assertTrue($node->{$property}, 'Action has permanently enabled node ' . $property);
    $return = rules_condition($condition)
      ->execute($node);
    $this
      ->assertTrue($return, 'Condition determines node ' . $property . ' is enabled.');
  }
  $return = rules_condition('node_is_of_type', array(
    'type' => array(
      'page',
      'article',
    ),
  ))
    ->execute($node);
  $this
    ->assertTrue($return, 'Condition determines node is of type page.');
  $return = rules_condition('node_is_of_type', array(
    'type' => array(
      'article',
    ),
  ))
    ->execute($node);
  $this
    ->assertFalse($return, 'Condition determines node is not of type article.');

  // Test auto saving of a new node after it has been inserted into the DB.
  $rule = rules_reaction_rule();
  $rand = $this
    ->randomName();
  $rule
    ->event('node_insert')
    ->action('data_set', array(
    'data:select' => 'node:title',
    'value' => $rand,
  ));
  $rule
    ->save('test');
  $node = $this
    ->drupalCreateNode();
  $node = node_load($node->nid);
  $this
    ->assertEqual($node->title, $rand, 'Node title is correct.');
  RulesLog::logger()
    ->checkLog();
}