175 lines
6.3 KiB
PHP
175 lines
6.3 KiB
PHP
<?php
|
|
|
|
usesApiSuite();
|
|
|
|
function selfserve_customer_start_ensure_legacy_redis_constant(): void
|
|
{
|
|
if (defined('redis')) {
|
|
return;
|
|
}
|
|
|
|
global $REDIS_CONFIG;
|
|
|
|
$REDIS_CONFIG = [
|
|
'host' => getenv('REDIS_CONFIG_HOST') ?: getenv('REDIS_CONFIG_DEBUG_HOST') ?: 'redis',
|
|
'user' => getenv('REDIS_CONFIG_USER') ?: getenv('REDIS_CONFIG_DEBUG_USER') ?: 'default',
|
|
'database' => getenv('REDIS_CONFIG_DATABASE') ?: getenv('REDIS_CONFIG_DEBUG_DATABASE') ?: '0',
|
|
'password' => getenv('REDIS_CONFIG_PASSWORD') ?: getenv('REDIS_CONFIG_DEBUG_PASSWORD') ?: '',
|
|
'port' => getenv('REDIS_CONFIG_PORT') ?: getenv('REDIS_CONFIG_DEBUG_PORT') ?: '6379',
|
|
];
|
|
|
|
define('redis', (new \classes\redis())->connect());
|
|
}
|
|
|
|
function selfserve_customer_start_make_available(int $laneId): void
|
|
{
|
|
selfserve_customer_start_ensure_legacy_redis_constant();
|
|
|
|
$lane = (new \classes\selfserve())->lane($laneId);
|
|
$lane->setLaneStatus(\modules\selfserve\helpers\selfserve_lane_status::AVAILABLE);
|
|
$lane->setLaneState(\modules\selfserve\helpers\selfserve_lane_state::IDLE);
|
|
$lane->setCustomerNumber(0);
|
|
$lane->setLicensePlate('');
|
|
$lane->setWashStartTime(0);
|
|
}
|
|
|
|
it('allows the customer self-serve start sequence without department access', function (): void {
|
|
$group = api_fixtures()->createGroup([], [
|
|
'list_own_department_selfserve_vehicle_conditions',
|
|
]);
|
|
$scenario = api_fixtures()->createSelfServeScenario([
|
|
'customer' => ['group_id' => $group['id']],
|
|
'department_selfserve_enabled' => true,
|
|
'lane_selfserve_enabled' => true,
|
|
]);
|
|
$headers = api_fixtures()->bearerHeaders(
|
|
api_fixtures()->createAuthToken((int)$scenario['customer']['id'])
|
|
);
|
|
$laneId = (int)$scenario['lane']['id'];
|
|
$reg = (string)$scenario['vehicle']['reg'];
|
|
|
|
selfserve_customer_start_make_available($laneId);
|
|
|
|
api_client()
|
|
->get('/department/selfserve/vehicle/allowed?lane_id=' . $laneId . '®=' . urlencode($reg), $headers)
|
|
->assertStatus(200)
|
|
->assertSuccess(true);
|
|
|
|
$summaryResponse = api_client()
|
|
->get('/department/selfserve/washes/summary?lane_id=' . $laneId . '®=' . urlencode($reg), $headers)
|
|
->assertStatus(200)
|
|
->assertSuccess(true);
|
|
|
|
expect($summaryResponse->data()['session']['customer_number'] ?? null)
|
|
->toBe((int)$scenario['customer']['customer_number']);
|
|
|
|
api_client()
|
|
->post('/modules/self-serve/lane/services/allowed', [
|
|
'lane_id' => $laneId,
|
|
'task_ids' => [(int)$scenario['tasks'][1]['id']],
|
|
], $headers)
|
|
->assertStatus(200)
|
|
->assertSuccess(true);
|
|
|
|
$startResponse = api_client()
|
|
->post('/modules/self-serve/lane/command', [
|
|
'lane_id' => $laneId,
|
|
'command' => 'START',
|
|
'license_plate' => $reg,
|
|
'defer_relay_side_effects' => true,
|
|
], $headers)
|
|
->assertStatus(200)
|
|
->assertSuccess(true);
|
|
|
|
expect($startResponse->data()['status'] ?? null)->toBe('OCCUPIED')
|
|
->and($startResponse->data()['customer_number'] ?? null)
|
|
->toBe((int)$scenario['customer']['customer_number']);
|
|
});
|
|
|
|
it('derives allowed services from v2 session task snapshots when task rows are not legacy records', function (): void {
|
|
$group = api_fixtures()->createGroup([], [
|
|
'list_own_department_selfserve_vehicle_conditions',
|
|
]);
|
|
$scenario = api_fixtures()->createSelfServeScenario([
|
|
'customer' => ['group_id' => $group['id']],
|
|
'department_selfserve_enabled' => true,
|
|
'lane_selfserve_enabled' => true,
|
|
]);
|
|
$headers = api_fixtures()->bearerHeaders(
|
|
api_fixtures()->createAuthToken((int)$scenario['customer']['id'])
|
|
);
|
|
$laneId = (int)$scenario['lane']['id'];
|
|
$v2TaskId = 900000 + $laneId;
|
|
|
|
$sessionTask = (new \objects\selfserve_wash_session_tasks_o())->addSnapshot(
|
|
(int)$scenario['session']['id'],
|
|
$v2TaskId,
|
|
'V2 path editor machine task',
|
|
'Task exists only in the session snapshot.',
|
|
['MACHINE', 'PROGRAM_PICKER'],
|
|
['program_picker', 6, 'start'],
|
|
(int)$scenario['product']['id'],
|
|
);
|
|
|
|
try {
|
|
$response = api_client()
|
|
->post('/modules/self-serve/lane/services/allowed', [
|
|
'lane_id' => $laneId,
|
|
'task_ids' => [$v2TaskId],
|
|
], $headers)
|
|
->assertStatus(200)
|
|
->assertSuccess(true);
|
|
|
|
expect($response->data()['allowed_services'] ?? [])->toBe([
|
|
'MACHINE',
|
|
'PROGRAM_PICKER',
|
|
]);
|
|
} finally {
|
|
$sessionTask->delete();
|
|
}
|
|
});
|
|
|
|
it('keeps long generated task descriptions when refreshing vehicle eligibility snapshots', function (): void {
|
|
$group = api_fixtures()->createGroup([], [
|
|
'list_own_department_selfserve_vehicle_conditions',
|
|
]);
|
|
$scenario = api_fixtures()->createSelfServeScenario([
|
|
'customer' => ['group_id' => $group['id']],
|
|
'department_selfserve_enabled' => true,
|
|
'lane_selfserve_enabled' => true,
|
|
]);
|
|
$headers = api_fixtures()->bearerHeaders(
|
|
api_fixtures()->createAuthToken((int)$scenario['customer']['id'])
|
|
);
|
|
$laneId = (int)$scenario['lane']['id'];
|
|
$reg = (string)$scenario['vehicle']['reg'];
|
|
$productId = (int)$scenario['product']['id'];
|
|
$taskId = (int)$scenario['tasks'][1]['id'];
|
|
$longDescription = str_repeat('Hvis ja - vaelg tagboerste program (#6) og lift program (#2) / ', 6);
|
|
|
|
$statement = api_test_runtime()->db()->prepare(
|
|
'UPDATE department_selfserve_tasks SET description = ? WHERE id = ?'
|
|
);
|
|
$statement->bind_param('si', $longDescription, $taskId);
|
|
$statement->execute();
|
|
|
|
api_client()
|
|
->get(
|
|
'/department/selfserve/vehicle/allowed?lane_id=' . $laneId
|
|
. '®=' . urlencode($reg)
|
|
. '&vehicle_type=' . $productId,
|
|
$headers
|
|
)
|
|
->assertStatus(200)
|
|
->assertSuccess(true);
|
|
|
|
$sessionTask = api_test_runtime()->queryOne(
|
|
'SELECT description FROM selfserve_wash_session_tasks'
|
|
. ' WHERE session_id = ' . (int)$scenario['session']['id']
|
|
. ' AND task_id = ' . $taskId
|
|
. ' LIMIT 1'
|
|
);
|
|
|
|
expect($sessionTask['description'] ?? null)->toBe($longDescription);
|
|
});
|