Add program picker relay status handling for wash start and update related tests

This commit is contained in:
Jeppe Bundgaard
2026-06-09 14:09:49 +02:00
parent 5c67fe419f
commit 0aad41fd0f
3 changed files with 28 additions and 6 deletions
File diff suppressed because one or more lines are too long
@@ -210,6 +210,19 @@ trait selfserve_lane_command_t
}
}
protected function setProgramPickerRelayStatusFromSelectedServiceForWashStart(): void
{
if (!$this->isRelayConfigured(selfserve_lane_relay::MACHINE_PROGRAM_PICKER)) {
return;
}
try {
$this->setMachineProgramPickerRelayStatusHard($this->isMachineServiceSelectedForWashStart());
} catch (\Throwable) {
// Best effort only; wash start must continue.
}
}
protected function isMachineWashSelectedAndAvailableForStart(): bool
{
if (!$this->isMachineServiceSelectedForWashStart()) {
@@ -336,6 +349,7 @@ trait selfserve_lane_command_t
protected function runRelaySideEffectsForWashStart(selfserve_lane_command_arguments $arguments): void
{
if ($arguments->defer_relay_side_effects) {
$this->setProgramPickerRelayStatusFromSelectedServiceForWashStart();
return;
}
@@ -53,10 +53,16 @@ class SelfserveLaneStartEntranceTimeoutHarness
$this->relayEvents[] = 'cleaner:on';
}
protected function setProgramPickerRelayStatusFromSelectedServiceForWashStart(): void
{
$this->programPickerRelayCalls++;
$this->relayEvents[] = 'program_picker:selected_service';
}
protected function setProgramPickerRelayStatusForWashStart(): void
{
$this->programPickerRelayCalls++;
$this->relayEvents[] = 'program_picker:sync';
$this->relayEvents[] = 'program_picker:eligibility_sync';
}
protected function setMachineRelayStatusForWashStart(): void
@@ -109,15 +115,17 @@ it('parses deferred relay side effects on start command arguments', function ():
expect($arguments->defer_relay_side_effects)->toBeTrue();
});
it('skips relay side effects when start asks to defer machine side effects', function (): void {
it('only syncs program picker from selected service when start asks to defer machine side effects', function (): void {
$lane = new SelfserveLaneStartEntranceTimeoutHarness();
$lane->runStartRelaySideEffects(true);
expect($lane->cleanerRelayCalls)->toBe(0);
expect($lane->programPickerRelayCalls)->toBe(0);
expect($lane->programPickerRelayCalls)->toBe(1);
expect($lane->machineRelayCalls)->toBe(0);
expect($lane->relayEvents)->toBe([]);
expect($lane->relayEvents)->toBe([
'program_picker:selected_service',
]);
});
it('keeps cleaner, program picker and machine relay side effects in order for normal start commands', function (): void {
@@ -130,7 +138,7 @@ it('keeps cleaner, program picker and machine relay side effects in order for no
expect($lane->machineRelayCalls)->toBe(1);
expect($lane->relayEvents)->toBe([
'cleaner:on',
'program_picker:sync',
'program_picker:eligibility_sync',
'machine:sync',
]);
});