Add unit tests for cleaner and machine relay flows, refactor relay logic with hard set methods, enhance route handling for lane state transitions, and update session management.

This commit is contained in:
Jeppe Bundgaard
2026-03-25 15:08:50 +01:00
parent 416eba7de5
commit 482a17f093
10 changed files with 322 additions and 82 deletions
@@ -140,6 +140,7 @@ class selfserve_wash_flow implements selfserve_wash_flow_i
if ((int)$lane->getWashStartTime() <= 0) {
$lane->setWashStartTime(time());
}
$this->enableCleanerRelayForStartedWash($lane);
$session->markMachineStartTriggered();
$this->logSessionEvent((int)$session->id, selfserve_wash_event_type::MACHINE_START_TRIGGERED, $payload + [
@@ -151,6 +152,39 @@ class selfserve_wash_flow implements selfserve_wash_flow_i
return $this->getSessionSummary((int)$session->id);
}
protected function enableCleanerRelayForStartedWash(selfserve_lane $lane): void
{
try {
if (
empty($lane->department_lane)
|| empty($lane->department_lane->relay_machine_cleaner_id)
|| trim((string)$lane->department_lane->relay_machine_cleaner_id->value()) === ''
) {
return;
}
$lane->setMachineCleanerRelayStatusHard(true);
} catch (\Throwable) {
// Best effort only; webhook start flow must continue.
}
}
protected function disableMachineRelayForCompletedWash(int $laneId): void
{
try {
$lane = (new selfserve())->lane($laneId);
if (
empty($lane->department_lane)
|| empty($lane->department_lane->relay_machine_id)
|| trim((string)$lane->department_lane->relay_machine_id->value()) === ''
) {
return;
}
$lane->setMachineRelayStatusHard(false);
} catch (\Throwable) {
// Best effort only; session completion flow must continue.
}
}
public function getSessionSummary(int $sessionId): array
{
$session = (new selfserve_wash_sessions_o())->select($sessionId);
@@ -220,6 +254,7 @@ class selfserve_wash_flow implements selfserve_wash_flow_i
}
$session->markCompleted($orderId);
$this->disableMachineRelayForCompletedWash($laneId);
$this->logSessionEvent((int)$session->id, selfserve_wash_event_type::SESSION_COMPLETED, [
'lane_id' => $laneId,
'reg' => $reg === null ? (string)$session->reg->value() : selfserve::standardize_registration($reg),