Resume active self-serve washes for authenticated customers across devices. Update OpenAPI, UI components, and extend E2E/unit tests.

This commit is contained in:
Jeppe Bundgaard
2026-04-28 18:00:09 +02:00
parent 503fb84f10
commit a658fe7863
5 changed files with 333 additions and 3 deletions
+68
View File
@@ -191,6 +191,74 @@ test.describe("Self-serve wash", () => {
await expect(page.getByTestId("self-serve-nav-complete")).toBeVisible();
});
test("start route resumes the authenticated customer's active server wash from another device", async ({ page }) => {
const requests = captureSelfServeGatewayRequests(page);
await mockApi(page, {
authenticated: true,
permissions: ["user"],
sessionData: {
customer_number: 12345679,
},
selfServe: {
inProgressByLaneId: {
9: {
lane_id: 9,
in_progress: true,
session: {
id: 704,
lane_id: 9,
department_id: 2,
reg: "CD67890",
customer_number: 12345679,
vehicle_type_id: 2,
machine_relay_enabled: true,
wash_started_at: "2026-04-28 10:15:00",
status: "MACHINE_STARTED",
},
customer: { customer_number: 12345679 },
vehicle: { reg: "CD67890", type: 2 },
},
},
summaryBySessionId: {
704: {
session: {
id: 704,
lane_id: 9,
reg: "CD67890",
status: "MACHINE_STARTED",
allowed: true,
vehicle_type_id: 2,
},
lane: { id: 9, name: "9", department: 2 },
questions: [],
conditions: [],
rules: [],
tasks: [],
events: [{ id: 7041, type: "MACHINE_STARTED", created_at: "2026-04-28T10:15:00.000Z" }],
},
},
},
});
await primeSession(page, {
token: "self-serve-active-server-wash-token",
permissions: ["user"],
});
await page.goto("/user/wash/start");
await expect(page.getByTestId("self-serve-live-elapsed")).toBeVisible({ timeout: 10_000 });
await expect(page.getByTestId("self-serve-department-name")).toContainText("Odense");
expect(requests.commands).toHaveLength(0);
const accessCommandRequestPromise = waitForLaneCommandRequest(page, "OPEN_PROPERTY_ACCESS_GATE");
await page.getByTestId("self-serve-nav-open-property-access-gate").click();
const accessCommandRequest = await accessCommandRequestPromise;
expect(accessCommandRequest.postDataJSON?.()).toMatchObject({
lane_id: 9,
command: "OPEN_PROPERTY_ACCESS_GATE",
});
});
test("superuser can force a department and clear the override", async ({ page }) => {
await mockApi(page, {
authenticated: true,