public function RulesTestCase::testMetadataAssertion in Rules 7.2
Same name and namespace in other branches
- 8.3 d7-tests/rules_test_case.test \RulesTestCase::testMetadataAssertion()
Tests asserting metadata.
Customizes action info and makes sure integrity is checked.
File
- tests/
rules.test, line 619 - Rules tests.
Class
- RulesTestCase
- Rules test cases.
Code
public function testMetadataAssertion() {
$action = rules_action('rules_node_make_sticky_action');
// Test failing integrity check.
try {
$rule = rule(array(
'node' => array(
'type' => 'entity',
),
));
$rule
->action($action);
// Fails due to the 'node' variable not matching the node type.
$rule
->integrityCheck();
$this
->fail('Integrity check has not thrown an exception.');
} catch (RulesIntegrityException $e) {
$this
->pass('Integrity check has thrown exception: ' . $e
->getMessage());
}
// Test asserting additional metadata.
$rule = rule(array(
'node' => array(
'type' => 'node',
),
));
// Customize action info using the settings.
$rule
->condition('data_is', array(
'data:select' => 'node:type',
'value' => 'page',
))
->condition(rules_condition('data_is', array(
'data:select' => 'node:body:value',
'value' => 'foo',
))
->negate())
->action($action);
// Make sure the integrity check doesn't throw an exception.
$rule
->integrityCheck();
// Test the rule.
$node = $this
->drupalCreateNode(array(
'type' => 'page',
'sticky' => 0,
));
$rule
->execute($node);
$this
->assertTrue($node->sticky, 'Rule with asserted metadata executed.');
// Test asserting metadata on a derived property, i.e. not a variable.
$rule = rule(array(
'node' => array(
'type' => 'node',
),
));
$rule
->condition('entity_is_of_type', array(
'entity:select' => 'node:reference',
'type' => 'node',
))
->condition('data_is', array(
'data:select' => 'node:reference:type',
'value' => 'page',
))
->action('rules_node_page_make_sticky_action', array(
'node:select' => 'node:reference',
));
$rule
->integrityCheck();
$rule
->execute($node);
// Test asserting an entity field.
$rule = rule(array(
'node' => array(
'type' => 'node',
),
));
$rule
->condition('entity_has_field', array(
'entity:select' => 'node:reference',
'field' => 'field_tags',
))
->action('data_set', array(
'data:select' => 'node:reference:field-tags',
'value' => array(),
));
$rule
->integrityCheck();
$rule
->execute($node);
// Make sure an asserted bundle can be used as argument.
$rule = rule(array(
'node' => array(
'type' => 'node',
),
));
$rule
->condition('entity_is_of_type', array(
'entity:select' => 'node:reference',
'type' => 'node',
))
->condition('node_is_of_type', array(
'node:select' => 'node:reference',
'type' => array(
'page',
),
))
->action('rules_node_page_make_sticky_action', array(
'node:select' => 'node:reference',
));
$rule
->integrityCheck();
$rule
->execute($node);
// Test asserting metadata on a derived property being a list item.
$rule = rule(array(
'node' => array(
'type' => 'node',
),
));
$rule
->condition('node_is_of_type', array(
'node:select' => 'node:ref-nodes:0',
'type' => array(
'article',
),
))
->action('data_set', array(
'data:select' => 'node:ref-nodes:0:field-tags',
'value' => array(),
));
$rule
->integrityCheck();
$rule
->execute($node);
// Give green lights if there were no exceptions and check rules-log errors.
$this
->pass('Rules asserting metadata on a derived property pass integrity checks.');
RulesLog::logger()
->checkLog();
// Make sure assertions of a one list item are not valid for another item.
$rule = rule(array(
'node' => array(
'type' => 'node',
),
));
$rule
->condition('node_is_of_type', array(
'node:select' => 'node:ref-nodes:0',
'type' => array(
'article',
),
))
->action('data_set', array(
'data:select' => 'node:ref-nodes:1:field-tags',
'value' => array(),
));
try {
$rule
->integrityCheck();
$this
->fail('Assertion of a list item is not valid for another item.');
} catch (RulesException $e) {
$this
->pass('Assertion of a list item is not valid for another item.');
}
}