Add StopTurnsOffRelayTest to verify machine relay behavior during STOP with self-serve enabled
- Introduce a minimal, self-contained test to ensure the relay turns off when STOP is executed. - Enhance `selfserve_lane_command_t` to handle relay shutdown based on department configuration. - Include `isDepartmentSelfServeEnabled` method for testing override and I/O avoidance.
This commit is contained in:
@@ -7,6 +7,7 @@ require_once WD . '/modules/selfserve/helpers/selfserve_lane_command.php';
|
||||
require_once WD . '/modules/selfserve/helpers/selfserve_lane_mode.php';
|
||||
require_once WD . '/modules/selfserve/helpers/selfserve_lane_port.php';
|
||||
require_once WD . '/modules/selfserve/helpers/selfserve_lane_state.php';
|
||||
require_once WD . '/modules/selfserve/helpers/selfserve_lane_relay.php';
|
||||
require_once WD . '/modules/selfserve/classes/selfserve_lane_command_arguments.php';
|
||||
|
||||
use Exception;
|
||||
@@ -18,10 +19,32 @@ use modules\selfserve\helpers\selfserve_lane_mode;
|
||||
use modules\selfserve\helpers\selfserve_lane_port;
|
||||
use modules\selfserve\helpers\selfserve_lane_state;
|
||||
use modules\selfserve\helpers\selfserve_lane_status;
|
||||
use modules\selfserve\helpers\selfserve_lane_relay;
|
||||
use objects\users_o;
|
||||
use objects\department_variables_o;
|
||||
|
||||
trait selfserve_lane_command_t
|
||||
{
|
||||
/**
|
||||
* Determine if the lane's department has self-serve enabled.
|
||||
* This method is intentionally protected to allow tests to override
|
||||
* and avoid I/O when needed.
|
||||
*/
|
||||
protected function isDepartmentSelfServeEnabled(): bool
|
||||
{
|
||||
try {
|
||||
if (empty($this->department_lane) || empty($this->department_lane->department)) {
|
||||
return false;
|
||||
}
|
||||
$departmentId = (int)$this->department_lane->department->value();
|
||||
if ($departmentId <= 0) return false;
|
||||
$vars = (new department_variables_o())->selectDepartment($departmentId);
|
||||
return $vars->getVariable('selfserve_enabled') === true;
|
||||
} catch (\Throwable $e) {
|
||||
// If anything goes wrong, default to not enabled
|
||||
return false;
|
||||
}
|
||||
}
|
||||
/**
|
||||
* Execute a command on a self-serve lane
|
||||
* @param selfserve_lane_command $command The command to execute
|
||||
@@ -97,6 +120,17 @@ trait selfserve_lane_command_t
|
||||
$this->invoice();
|
||||
// Open the exit port
|
||||
$this->open(selfserve_lane_port::EXIT);
|
||||
// If department has enabled self-serve, turn off the machine relay when stopping
|
||||
try {
|
||||
if ($this->isDepartmentSelfServeEnabled()) {
|
||||
// Only attempt if a machine relay is configured for this lane
|
||||
if (!empty($this->department_lane) && !empty($this->department_lane->relay_machine_id) && !empty($this->department_lane->relay_machine_id->value())) {
|
||||
$this->turnOffRelay(selfserve_lane_relay::MACHINE);
|
||||
}
|
||||
}
|
||||
} catch (\Throwable $e) {
|
||||
// Swallow relay control errors to not block STOP flow
|
||||
}
|
||||
// Log the lane stop event
|
||||
$this->logLaneAction(selfserve_lane_log_action::STOP_WASH);
|
||||
// Reset the lane
|
||||
|
||||
Reference in New Issue
Block a user