public function RulesTestCase::testComponentInvocations in Rules 7.2
Same name and namespace in other branches
- 8.3 d7-tests/rules_test_case.test \RulesTestCase::testComponentInvocations()
Tests invoking components from the action.
File
- tests/
rules.test, line 561 - Rules tests.
Class
- RulesTestCase
- Rules test cases.
Code
public function testComponentInvocations() {
$set = rules_rule_set(array(
'node1' => array(
'type' => 'node',
'label' => 'node',
),
));
$set
->rule(rule()
->condition('node_is_published', array(
'node:select' => 'node1',
))
->action('node_unpublish', array(
'node:select' => 'node1',
)));
$set
->integrityCheck()
->save('rules_test_set_2');
// Use different names for the variables to ensure they are properly mapped
// when taking over the variables to be saved.
$rule = rule(array(
'node2' => array(
'type' => 'node',
'label' => 'node',
),
));
$rule
->action('component_rules_test_set_2', array(
'node1:select' => 'node2',
));
$rule
->action('node_make_sticky', array(
'node:select' => 'node2',
));
$node = $this
->drupalCreateNode(array(
'title' => 'The title.',
'status' => 1,
'sticky' => 0,
));
$rule
->execute($node);
$node = node_load($node->nid, NULL, TRUE);
$this
->assertFalse($node->status, 'The component changes have been saved correctly.');
$this
->assertTrue($node->sticky, 'The action changes have been saved correctly.');
// Check that we have saved the changes only once.
$text = RulesLog::logger()
->render();
// Make sure both saves are handled in one save operation.
$this
->assertEqual(substr_count($text, 'Saved'), 1, 'Changes have been saved in one save operation.');
RulesLog::logger()
->checkLog();
// Test recursion prevention on components by invoking the component from
// itself, what should be prevented.
$set
->action('component_rules_test_set_2', array(
'node1:select' => 'node1',
))
->save();
$rule
->execute($node);
$text1 = RulesLog::logger()
->render();
$text2 = RulesTestCase::t('Not evaluating rule set %rules_test_set_2 to prevent recursion.', array(
'rules_test_set_2',
));
$this
->assertTrue(strpos($text1, $text2) !== FALSE, "Recursion of component invocation prevented.");
// Test executing the component provided in code via the action. This makes
// sure the component in code has been properly picked up.
$node->status = 0;
node_save($node);
rules_action('component_rules_test_action_set')
->execute($node);
$this
->assertTrue($node->status == 1, 'Component provided in code has been executed.');
}