From 45bfb1525a1fc8ca039020e4e63678131ea16386 Mon Sep 17 00:00:00 2001 From: Jeppe B <2jepp9350@gmail.com> Date: Mon, 1 Jun 2026 20:56:04 +0200 Subject: [PATCH] Fix studio action conditions to fail closed without results --- .../selfserve_studio_action_runner.php | 2 +- .../SelfserveStudioActionRunnerTest.php | 72 +++++++++++++++++++ 2 files changed, 73 insertions(+), 1 deletion(-) create mode 100644 services/nginx/app/tests/Unit/Selfserve/SelfserveStudioActionRunnerTest.php diff --git a/services/nginx/app/modules/selfserve/classes/selfserve_studio_action_runner.php b/services/nginx/app/modules/selfserve/classes/selfserve_studio_action_runner.php index f1ac192e..287ed7d4 100644 --- a/services/nginx/app/modules/selfserve/classes/selfserve_studio_action_runner.php +++ b/services/nginx/app/modules/selfserve/classes/selfserve_studio_action_runner.php @@ -83,7 +83,7 @@ class selfserve_studio_action_runner continue; } $conditionId = $action['condition_id']; - if ($conditionId !== null && $conditionResults !== null && (($conditionResults[$conditionId] ?? false) !== true)) { + if ($conditionId !== null && (($conditionResults[$conditionId] ?? false) !== true)) { continue; } $actions[] = $action; diff --git a/services/nginx/app/tests/Unit/Selfserve/SelfserveStudioActionRunnerTest.php b/services/nginx/app/tests/Unit/Selfserve/SelfserveStudioActionRunnerTest.php new file mode 100644 index 00000000..500e875a --- /dev/null +++ b/services/nginx/app/tests/Unit/Selfserve/SelfserveStudioActionRunnerTest.php @@ -0,0 +1,72 @@ + 17, + 'department_lane' => (object) [ + 'department' => new class { + public function value(): int { return 9; } + }, + 'machine_type_id' => new class { + public function value(): int { return 2; } + }, + ], + ]; + + $config = [ + 'actions' => [ + [ + 'id' => 501, + 'name' => 'Open exit port when condition true', + 'enabled' => true, + 'event' => selfserve_studio_actions::EVENT_WASH_START_COMMAND, + 'wash_mode' => selfserve_studio_actions::MODE_BOTH, + 'department' => 9, + 'lane' => 17, + 'product' => 0, + 'machine_type_id' => null, + 'condition_id' => 7, + 'order_priority' => 1, + 'operation' => selfserve_studio_actions::OP_OPEN_LANE_EXIT_PORT, + 'options' => [], + ], + ], + ]; + + $missingResults = $runner->matchingActions( + $config, + $lane, + selfserve_studio_actions::EVENT_WASH_START_COMMAND, + selfserve_studio_actions::MODE_MANUAL, + [] + ); + + $falseResults = $runner->matchingActions( + $config, + $lane, + selfserve_studio_actions::EVENT_WASH_START_COMMAND, + selfserve_studio_actions::MODE_MANUAL, + ['condition_results' => [7 => false]] + ); + + $trueResults = $runner->matchingActions( + $config, + $lane, + selfserve_studio_actions::EVENT_WASH_START_COMMAND, + selfserve_studio_actions::MODE_MANUAL, + ['condition_results' => [7 => true]] + ); + + expect($missingResults)->toHaveCount(0); + expect($falseResults)->toHaveCount(0); + expect($trueResults)->toHaveCount(1); + expect($trueResults[0]['id'])->toBe(501); +});