public function AndExpressionTest::testEvaluationOrder in Rules 8.3
Tests evaluation order with two conditions.
File
- tests/
src/ Unit/ AndExpressionTest.php, line 106
Class
- AndExpressionTest
- @coversDefaultClass \Drupal\rules\Plugin\RulesExpression\AndExpression @group Rules
Namespace
Drupal\Tests\rules\UnitCode
public function testEvaluationOrder() {
// The method on the false test condition must be called once.
$this->falseConditionExpression
->executeWithState(Argument::type(ExecutionStateInterface::class))
->shouldBeCalledTimes(1);
// Set weight to 1 so it will be evaluated second.
$this->falseConditionExpression
->getWeight()
->willReturn(1);
$second_condition = $this
->prophesize(ConditionExpressionInterface::class);
$second_condition
->getUuid()
->willReturn('true_uuid2');
$second_condition
->getWeight()
->willReturn(0);
// If the above false condition is evaluated first, the second condition
// will not be called. If the evaluation order is correct, then it should
// be called exactly once.
$second_condition
->executeWithState(Argument::type(ExecutionStateInterface::class))
->willReturn(TRUE)
->shouldBeCalledTimes(1);
// Second condition should be called first, because of weight.
$this->and
->addExpressionObject($this->falseConditionExpression
->reveal())
->addExpressionObject($second_condition
->reveal());
$this
->assertFalse($this->and
->execute(), 'Correct execution order of conditions.');
}