Files
api/services/nginx/app/tests/Unit/Selfserve/SelfserveWashSessionStateTest.php
T
Jeppe Bundgaard 8bf957b273 Add support for selfserve_enabled lanes and synchronize behavior across tasks, sessions, and projections
- Introduced `selfserve_enabled` property for `department_lanes` with schema update, object properties, and associated methods/tests.
- Enhanced `selfserve_wash_flow` and session logic to respect lane self-serve settings, including block handling and task filtering.
- Updated API routes and Studio Graph projections to include `selfserve_enabled` in payloads and progress callbacks.
- Added unit tests for session statuses, lane configuration, and blocking behavior due to disabled self-serve settings.
2026-04-29 17:28:42 +02:00

48 lines
2.3 KiB
PHP

<?php
use classes\object_property;
use objects\selfserve_wash_sessions_o;
app_require('classes/object_property.php');
app_require('objects/selfserve_wash_sessions_o.php');
function selfserve_session_property(string $column, string $type, mixed $value): object_property
{
$property = new object_property('selfserve_wash_sessions', -1, $column, $type);
$property->set($value);
return $property;
}
function selfserve_session_harness(
string $status,
?string $completedAt,
?string $washStartedAt = '2026-04-28 10:00:00',
?string $machineStartTriggeredAt = null
): selfserve_wash_sessions_o {
$session = (new ReflectionClass(selfserve_wash_sessions_o::class))->newInstanceWithoutConstructor();
$session->status = selfserve_session_property('status', 'string', $status);
$session->completed_at = selfserve_session_property('completed_at', 'datetime', $completedAt);
$session->wash_started_at = selfserve_session_property('wash_started_at', 'datetime', $washStartedAt);
$session->machine_start_triggered_at = selfserve_session_property('machine_start_triggered_at', 'datetime', $machineStartTriggeredAt);
return $session;
}
it('treats terminal self-serve wash session statuses as closed', function (): void {
expect(selfserve_wash_sessions_o::isTerminalStatus('COMPLETED'))->toBeTrue()
->and(selfserve_wash_sessions_o::isTerminalStatus('FORCE_STOPPED'))->toBeTrue()
->and(selfserve_wash_sessions_o::isTerminalStatus('MACHINE_STARTED'))->toBeFalse()
->and(selfserve_wash_sessions_o::terminalStatusSqlList())->toBe("'COMPLETED','FORCE_STOPPED'");
expect(selfserve_session_harness('MACHINE_STARTED', null)->isOpen())->toBeTrue()
->and(selfserve_session_harness('COMPLETED', null)->isOpen())->toBeFalse()
->and(selfserve_session_harness('MACHINE_STARTED', '2026-04-28 10:30:00')->isOpen())->toBeFalse();
});
it('freezes elapsed self-serve wash minutes at completion time', function (): void {
expect(selfserve_session_harness('COMPLETED', '2026-04-28 10:42:00')->getElapsedMinutes())->toBe(42)
->and(selfserve_session_harness('COMPLETED', '2026-04-28 10:35:00', null, '2026-04-28 10:05:00')->getElapsedMinutes())->toBe(30)
->and(selfserve_session_harness('COMPLETED', '2026-04-28 09:59:00')->getElapsedMinutes())->toBe(0);
});