Avoid self-serve preview sessions on eligibility reads
This commit is contained in:
@@ -104,6 +104,7 @@ class selfserve_wash_flow implements selfserve_wash_flow_i
|
||||
{
|
||||
$snapshot = $this->buildEligibilitySnapshot($laneId, $reg, $customerNumber, $vehicleTypeIdOverride, $options);
|
||||
$session = $this->findLatestOpenSession($laneId, $snapshot['reg'], $snapshot['customer_number']);
|
||||
$createSession = (bool)($options['create_session'] ?? true);
|
||||
|
||||
if (($snapshot['evaluation_trace']['disabled_lane'] ?? false) === true) {
|
||||
return $session->exists()
|
||||
@@ -111,6 +112,10 @@ class selfserve_wash_flow implements selfserve_wash_flow_i
|
||||
: $this->formatBlockedSessionSummary($snapshot);
|
||||
}
|
||||
|
||||
if (!$session->exists() && !$createSession) {
|
||||
return $this->formatSnapshotResponse($snapshot, null);
|
||||
}
|
||||
|
||||
if (!$session->exists()) {
|
||||
$session = (new selfserve_wash_sessions_o())->add(
|
||||
$laneId,
|
||||
|
||||
@@ -141,7 +141,9 @@ class departmentSelfserveVehicleConditionsRoute
|
||||
$flow = $this->getWashFlow();
|
||||
|
||||
if ($vehicle_type_id !== null) {
|
||||
$flow->synchronizeSession($lane_id, $reg, $customer_number, false, $vehicle_type_id, false);
|
||||
$flow->synchronizeSession($lane_id, $reg, $customer_number, false, $vehicle_type_id, false, [
|
||||
'create_session' => false,
|
||||
]);
|
||||
}
|
||||
|
||||
(new logs_o())->add('department_selfserve_vehicle_conditions', (int)$lane->department->value(), 1, $user->id, 'CHECK_VEHICLE_ALLOWED', 'User checked self-serve eligibility for lane ' . $lane_id . ' and vehicle ' . $reg);
|
||||
|
||||
@@ -239,3 +239,57 @@ it('keeps long generated task descriptions when refreshing vehicle eligibility s
|
||||
|
||||
expect($sessionTask['description'] ?? null)->toBe($longDescription);
|
||||
});
|
||||
|
||||
it('does not create an active wash preview session from read-only eligibility checks', 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'];
|
||||
$sessionId = (int)$scenario['session']['id'];
|
||||
|
||||
api_test_runtime()->db()->query(
|
||||
'DELETE FROM selfserve_wash_session_events WHERE session_id = ' . $sessionId
|
||||
);
|
||||
api_test_runtime()->db()->query(
|
||||
'DELETE FROM selfserve_wash_session_tasks WHERE session_id = ' . $sessionId
|
||||
);
|
||||
api_test_runtime()->db()->query(
|
||||
'DELETE FROM selfserve_wash_session_answers WHERE session_id = ' . $sessionId
|
||||
);
|
||||
api_test_runtime()->db()->query(
|
||||
'DELETE FROM selfserve_wash_sessions WHERE id = ' . $sessionId
|
||||
);
|
||||
|
||||
selfserve_customer_start_make_available($laneId);
|
||||
|
||||
api_client()
|
||||
->get(
|
||||
'/department/selfserve/vehicle/allowed?lane_id=' . $laneId
|
||||
. '®=' . urlencode($reg)
|
||||
. '&vehicle_type=' . $productId,
|
||||
$headers
|
||||
)
|
||||
->assertStatus(200)
|
||||
->assertSuccess(true);
|
||||
|
||||
$openSession = api_test_runtime()->queryOne(
|
||||
'SELECT id FROM selfserve_wash_sessions'
|
||||
. ' WHERE lane_id = ' . $laneId
|
||||
. ' AND reg = "' . api_test_runtime()->db()->real_escape_string($reg) . '"'
|
||||
. ' AND completed_at IS NULL'
|
||||
. ' AND deleted_at IS NULL'
|
||||
. ' LIMIT 1'
|
||||
);
|
||||
|
||||
expect($openSession)->toBeNull();
|
||||
});
|
||||
|
||||
@@ -443,7 +443,8 @@ it('wires vehicle type override into self-serve preview and synchronization rout
|
||||
expect($vehicleConditionsRoute)->toContain('normalizeVehicleTypeOverride');
|
||||
expect($vehicleConditionsRoute)->toContain('shouldRefreshSummaryForVehicleType');
|
||||
expect($vehicleConditionsRoute)->toContain('previewVehicleEligibility($lane_id, $reg, $customer_number, $vehicle_type_id)');
|
||||
expect($vehicleConditionsRoute)->toContain('synchronizeSession($lane_id, $reg, $customer_number, false, $vehicle_type_id, false)');
|
||||
expect($vehicleConditionsRoute)->toContain('synchronizeSession($lane_id, $reg, $customer_number, false, $vehicle_type_id, false, [');
|
||||
expect($vehicleConditionsRoute)->toContain("'create_session' => false");
|
||||
expect($vehicleConditionsRoute)->toContain('requestBooleanFlag');
|
||||
expect($vehicleConditionsRoute)->toContain('synchronizeSession($lane, $reg, $customer_id, $activate_machine, $vehicle_type_id, $sync_relay_state)');
|
||||
expect($vehicleConditionsRoute)->toContain('synchronizeSession($lane_id, $reg, $customer_id, $activate_machine, $vehicle_type_id, $sync_relay_state)');
|
||||
@@ -479,7 +480,8 @@ it('keeps read-only self-serve preview and summary refreshes from touching relay
|
||||
$vehicleConditionsRoute = file_get_contents(app_path('routes/departmentSelfserveVehicleConditionsRoute.php'));
|
||||
|
||||
expect($vehicleConditionsRoute)->not->toBeFalse();
|
||||
expect($vehicleConditionsRoute)->toContain('$flow->synchronizeSession($lane_id, $reg, $customer_number, false, $vehicle_type_id, false);');
|
||||
expect($vehicleConditionsRoute)->toContain('$flow->synchronizeSession($lane_id, $reg, $customer_number, false, $vehicle_type_id, false, [');
|
||||
expect($vehicleConditionsRoute)->toContain("'create_session' => false");
|
||||
expect($vehicleConditionsRoute)->toContain('$summary = $flow->synchronizeSession(');
|
||||
expect($vehicleConditionsRoute)->toContain('$summary = $flow->synchronizeSession($lane_id, $reg, $customer_number, false, $vehicle_type_id, false);');
|
||||
expect($vehicleConditionsRoute)->toContain('$activate_machine = $this->requestBooleanFlag(\'activate_machine\', true);');
|
||||
|
||||
Reference in New Issue
Block a user