Files
api/services/nginx/app/tests/Unit/Selfserve/SelfserveConditionEvaluatorTest.php
T

81 lines
3.1 KiB
PHP

<?php
app_require('modules/selfserve/classes/selfserve_condition_evaluator.php');
use modules\selfserve\classes\selfserve_condition_evaluator;
use modules\selfserve\helpers\selfserve_condition_rule_object_type;
use modules\selfserve\helpers\selfserve_condition_rule_type;
use modules\selfserve\helpers\selfserve_task_gate_type;
it('evaluates self-serve conditions with combined AND and OR semantics', function (): void {
$evaluator = new selfserve_condition_evaluator();
$conditions = [
['id' => 10],
['id' => 20],
];
$rules = [
[
'condition_id' => 10,
'type' => selfserve_condition_rule_type::IS_TRUE->value,
'object_type' => selfserve_condition_rule_object_type::QUESTION->value,
'object_id' => 1,
],
[
'condition_id' => 10,
'type' => selfserve_condition_rule_type::IS_FALSE_OR_NOT_SET->value,
'object_type' => selfserve_condition_rule_object_type::QUESTION->value,
'object_id' => 2,
],
[
'condition_id' => 20,
'type' => selfserve_condition_rule_type::IS_TRUE->value,
'object_type' => selfserve_condition_rule_object_type::QUESTION->value,
'object_id' => 5,
],
[
'condition_id' => 20,
'type' => selfserve_condition_rule_type::IS_TRUE_OR_ANY_TRUE->value,
'object_type' => selfserve_condition_rule_object_type::QUESTION->value,
'object_id' => 3,
],
[
'condition_id' => 20,
'type' => selfserve_condition_rule_type::IS_TRUE_OR_ANY_TRUE->value,
'object_type' => selfserve_condition_rule_object_type::QUESTION->value,
'object_id' => 4,
],
];
$answers = [
1 => true,
3 => false,
4 => true,
5 => true,
];
expect($evaluator->evaluate($conditions, $rules, $answers))->toBe([
10 => true,
20 => true,
]);
});
it('prefers condition results over question answers when evaluating task gates', function (): void {
$evaluator = new selfserve_condition_evaluator();
expect($evaluator->taskGateSatisfied(14, [14 => false], [14 => true]))->toBeFalse();
expect($evaluator->taskGateSatisfied(15, [], [15 => true]))->toBeTrue();
expect($evaluator->taskGateSatisfied(null, [], []))->toBeTrue();
});
it('evaluates typed task gates with strict semantics', function (): void {
$evaluator = new selfserve_condition_evaluator();
expect($evaluator->taskGateSatisfiedTyped(selfserve_task_gate_type::ALWAYS->value, null, [], []))->toBeTrue();
expect($evaluator->taskGateSatisfiedTyped(selfserve_task_gate_type::CONDITION->value, 31, [31 => true], [31 => false]))->toBeTrue();
expect($evaluator->taskGateSatisfiedTyped(selfserve_task_gate_type::CONDITION->value, 31, [31 => false], [31 => true]))->toBeFalse();
expect($evaluator->taskGateSatisfiedTyped(selfserve_task_gate_type::QUESTION->value, 8, [], [8 => true]))->toBeTrue();
expect($evaluator->taskGateSatisfiedTyped(selfserve_task_gate_type::QUESTION->value, 8, [8 => true], [8 => false]))->toBeFalse();
});