Test manual wash program picker selection

This commit is contained in:
Jeppe Bundgaard
2026-06-09 12:05:27 +02:00
parent a1224ec2f4
commit 6446eb2e36
@@ -0,0 +1,107 @@
<?php
app_require('modules/selfserve/traits/selfserve_lane_command_t.php');
app_require('modules/selfserve/classes/selfserve_lane_command_arguments.php');
app_require('modules/selfserve/helpers/selfserve_lane_relay.php');
use modules\selfserve\classes\selfserve_lane_command_arguments;
use modules\selfserve\traits\selfserve_lane_command_t;
class SelfserveProgramPickerSelectionValueFake
{
public function __construct(private readonly string $value) {}
public function value(): string
{
return $this->value;
}
}
class SelfserveProgramPickerSelectionDepartmentLaneFake
{
public SelfserveProgramPickerSelectionValueFake $relay_machine_id;
public SelfserveProgramPickerSelectionValueFake $relay_machine_program_picker_id;
public SelfserveProgramPickerSelectionValueFake $relay_machine_cleaner_id;
public function __construct()
{
$this->relay_machine_id = new SelfserveProgramPickerSelectionValueFake('relay-machine');
$this->relay_machine_program_picker_id = new SelfserveProgramPickerSelectionValueFake('relay-program-picker');
$this->relay_machine_cleaner_id = new SelfserveProgramPickerSelectionValueFake('relay-cleaner');
}
}
class SelfserveProgramPickerSelectionHarness
{
use selfserve_lane_command_t;
public const CACHE_SELFSERVE_LANE_KEY_ALLOWED_SERVICES = 'allowed_services';
public int $id = 881;
public object $department_lane;
public int $licensePlateReads = 0;
public int $customerNumberReads = 0;
/** @var array<int,bool> */
public array $programPickerWrites = [];
/** @var array<string,mixed> */
private array $laneCache = [];
public function __construct()
{
$this->department_lane = new SelfserveProgramPickerSelectionDepartmentLaneFake();
}
public function getLaneCache(int $lane_id, string $key): mixed
{
return $this->laneCache[$key . '_' . $lane_id] ?? null;
}
public function setSelectedServices(array $services): void
{
$this->laneCache[self::CACHE_SELFSERVE_LANE_KEY_ALLOWED_SERVICES . '_' . $this->id] = $services;
}
public function getLicensePlate(): string
{
$this->licensePlateReads++;
return 'AB12345';
}
public function getCustomerNumber(): int
{
$this->customerNumberReads++;
return 12345678;
}
public function setMachineProgramPickerRelayStatusHard(bool $on): bool
{
$this->programPickerWrites[] = $on;
return true;
}
public function runDeferredStartRelaySideEffects(): void
{
$arguments = (new selfserve_lane_command_arguments())->setDeferRelaySideEffects(true);
$this->runRelaySideEffectsForWashStart($arguments);
}
}
it('turns off the program picker on deferred start when the frontend selected manual wash', function (): void {
$lane = new SelfserveProgramPickerSelectionHarness();
$lane->setSelectedServices([]);
$lane->runDeferredStartRelaySideEffects();
expect($lane->programPickerWrites)->toBe([false]);
});
it('does not let backend machine eligibility override a frontend manual wash selection', function (): void {
$lane = new SelfserveProgramPickerSelectionHarness();
$lane->setSelectedServices([]);
$lane->runDeferredStartRelaySideEffects();
expect($lane->licensePlateReads)->toBe(0)
->and($lane->customerNumberReads)->toBe(0)
->and($lane->programPickerWrites)->toBe([false]);
});