Test manual wash program picker selection
This commit is contained in:
+107
@@ -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]);
|
||||
});
|
||||
Reference in New Issue
Block a user