function RulesEngineTest::testRuleCreation
Tests creating a rule and iterating over the rule elements.
File
-
tests/
src/ Kernel/ RulesEngineTest.php, line 37
Class
- RulesEngineTest
- Test using the Rules API to create and evaluate rules.
Namespace
Drupal\Tests\rules\KernelCode
public function testRuleCreation() {
// Create an 'and' condition container and add conditions to it.
$and = $this->expressionManager
->createAnd()
->addCondition('rules_test_false')
->addCondition('rules_test_true', ContextConfig::create()->negateResult())
->negate();
// Test that the 'and' condition container evaluates to TRUE.
$this->assertTrue($and->execute());
// Create an 'or' condition container and add conditions to it, including
// the previously created 'and' condition container.
$or = $this->expressionManager
->createOr()
->addCondition('rules_test_true', ContextConfig::create()->negateResult())
->addCondition('rules_test_false')
->addExpressionObject($and);
// Test that the 'or' condition container evaluates to TRUE.
$this->assertTrue($or->execute());
// Create a rule and add conditions to it, including the previously created
// 'or' condition container.
$rule = $this->expressionManager
->createRule();
$rule->addCondition('rules_test_true')
->addCondition('rules_test_true')
->addExpressionObject($or);
// Test that the rule's condition container evaluates to TRUE.
$this->assertTrue($rule->getConditions()
->execute());
// Add an action to it and execute the rule.
$rule->addAction('rules_test_debug_log');
$rule->execute();
// Test that the action logged something.
$this->assertRulesDebugLogEntryExists('action called');
}