Extend i18n with new self-serve prompts and lane availability messages, and add E2E test for lane confirmation logic.
This commit is contained in:
@@ -4575,7 +4575,9 @@
|
||||
"loading_department": "@.capitalize:{'words.generated.indlæser'} @:{'words.generated.afdeling'}...",
|
||||
"loading_types": "@.capitalize:{'words.generated.indlæser'} @:{'words.generated.typer'}...",
|
||||
"loading_vehicle_types": "@.capitalize:{'words.generated.indlæser'} @:{'words.generated.tilgængelige'} @:{'words.generated.køretøjstyper'}...",
|
||||
"lane_unavailable": "Vaskebanen er ikke tilgaengelig",
|
||||
"machine": "@.capitalize:{'words.generated.maskine'}",
|
||||
"machine_unavailable_for_lane": "Maskinvask er ikke tilgaengelig for den valgte bane. Vaelg manuel vask eller en anden ledig bane.",
|
||||
"no_departments_found": "@:{'templates.generated.compat.departments.no_departments'}",
|
||||
"occupied": "Optaget",
|
||||
"open_property_access_gate": "@:{'words.generated.abn'} adgangsport",
|
||||
@@ -4591,6 +4593,10 @@
|
||||
"start_wash": "@:{'templates.generated.compat.guest.start_wash'}",
|
||||
"total_time": "@.capitalize:{'words.generated.samlet'} @:{'words.generated.tid'}: {minutes} @:{'words.generated.minutter'} @:{'words.generated.og'} {seconds} @:{'words.generated.sekunder'}",
|
||||
"unavailable": "@.capitalize:{'words.generated.utilgængelig'}",
|
||||
"vehicle_step_missing_customer_number": "Indtast kundenummer for at fortsaette.",
|
||||
"vehicle_step_missing_department": "Vent paa, at naermeste afdeling er indlaest, foer du fortsaetter.",
|
||||
"vehicle_step_missing_registration": "Indtast registreringsnummer for at fortsaette.",
|
||||
"vehicle_step_missing_vehicle_type": "Vaelg en tilgaengelig koeretoejstype for at fortsaette.",
|
||||
"wash_completed_contact": "@.capitalize:{'words.generated.vi'} håber, @:{'words.generated.at'} @:{'words.generated.du'} @:{'words.generated.er'} tilfreds @:{'words.generated.med'} resultatet. @.capitalize:{'words.generated.hvis'} @:{'words.generated.du'} @:{'words.generated.har'} @:{'words.generated.brug'} @:{'words.generated.for'} @:{'words.generated.yderligere'} assistance, @:{'words.generated.er'} @:{'words.generated.du'} @:{'words.generated.velkommen'} @:{'words.generated.til'} @:{'words.generated.at'} kontakte @:{'words.generated.vores'} personale.",
|
||||
"wash_completed_message": "@.capitalize:{'words.generated.din'} @:{'words.generated.vask'} @:{'words.generated.er'} @:{'words.generated.nu'} @:{'words.generated.færdig'}! @:{'words.generated.tak'} @:{'words.generated.fordi'} @:{'words.generated.du'} brugte @:{'words.generated.vores'} selvbetjeningsvask.",
|
||||
"wash_completed": "@.capitalize:{'words.generated.vask'} @:{'words.generated.færdig'}",
|
||||
|
||||
@@ -4668,7 +4668,9 @@
|
||||
"loading_department": "@:{'words.generated.abteilung'} @:{'words.generated.wird'} @:{'words.generated.geladen'}...",
|
||||
"loading_types": "@.capitalize:{'words.generated.typen'} @:{'words.generated.werden'} @:{'words.generated.geladen'}...",
|
||||
"loading_vehicle_types": "@.capitalize:{'words.generated.verf'}?@:{'words.generated.gbare'} @:{'words.generated.fahrzeugtypen'} @:{'words.generated.werden'} @:{'words.generated.geladen'}...",
|
||||
"lane_unavailable": "Waschspur nicht verfugbar",
|
||||
"machine": "@:{'words.generated.maschine'}",
|
||||
"machine_unavailable_for_lane": "Maschinenwasche ist fur die ausgewahlte Spur nicht verfugbar. Wahlen Sie manuelle Wasche oder eine andere freie Spur.",
|
||||
"no_departments_found": "@:{'templates.generated.compat.departments.no_departments'}",
|
||||
"occupied": "Belegt",
|
||||
"open_property_access_gate": "Grundstueckszugangstor @:{'words.generated.oeffnen'}",
|
||||
@@ -4684,6 +4686,10 @@
|
||||
"start_wash": "@:{'templates.generated.compat.guest.start_wash'}",
|
||||
"total_time": "Gesamtzeit: {minutes} Minuten @:{'words.generated.und'} {seconds} @:{'words.generated.sekunden'}",
|
||||
"unavailable": "@.capitalize:{'words.generated.nicht'} @:{'words.generated.verfugbar'}",
|
||||
"vehicle_step_missing_customer_number": "Geben Sie Ihre Kundennummer ein, um fortzufahren.",
|
||||
"vehicle_step_missing_department": "Warten Sie, bis die nachste Abteilung geladen ist, bevor Sie fortfahren.",
|
||||
"vehicle_step_missing_registration": "Geben Sie das Kennzeichen ein, um fortzufahren.",
|
||||
"vehicle_step_missing_vehicle_type": "Wahlen Sie einen verfugbaren Fahrzeugtyp, um fortzufahren.",
|
||||
"wash_completed_contact": "@.capitalize:{'words.generated.wir'} hoffen, @.capitalize:{'words.generated.sie'} @:{'words.generated.sind'} @:{'words.generated.mit'} @:{'words.generated.dem'} @:{'words.generated.ergebnis'} zufrieden. @.capitalize:{'words.generated.wenn'} @.capitalize:{'words.generated.sie'} @:{'words.generated.weitere'} @:{'words.generated.hilfe'} @:{'words.generated.ben'}?@:{'words.generated.tigen'}, @:{'words.generated.kontaktieren'} @.capitalize:{'words.generated.sie'} @:{'words.generated.bitte'} @:{'words.generated.unser'} Personal.",
|
||||
"wash_completed_message": "@.capitalize:{'words.generated.ihre'} @.upper:{'words.generated.w'}?@:{'words.generated.sche'} @:{'words.generated.ist'} @:{'words.generated.jetzt'} @:{'words.generated.abgeschlossen'}! @:{'words.generated.danke'}, @:{'words.generated.dass'} @.capitalize:{'words.generated.sie'} @:{'words.generated.unsere'} Selbstbedienungsw?@:{'words.generated.sche'} genutzt @:{'words.generated.haben'}.",
|
||||
"wash_completed": "@.upper:{'words.generated.w'}?@:{'words.generated.sche'} @:{'words.generated.abgeschlossen'}",
|
||||
|
||||
@@ -4409,7 +4409,9 @@
|
||||
"loading_department": "@.capitalize:{'words.generated.loading'} @:{'words.generated.department'}...",
|
||||
"loading_types": "@.capitalize:{'words.generated.loading'} @:{'words.generated.types'}...",
|
||||
"loading_vehicle_types": "@.capitalize:{'words.generated.loading'} @:{'words.generated.available'} @:{'words.generated.vehicle'} @:{'words.generated.types'}...",
|
||||
"lane_unavailable": "Lane unavailable",
|
||||
"machine": "@.capitalize:{'words.generated.machine'}",
|
||||
"machine_unavailable_for_lane": "Machine wash is unavailable for the selected lane. Choose manual wash or another available lane.",
|
||||
"no_departments_found": "@:{'templates.generated.compat.departments.no_departments'}",
|
||||
"occupied": "Occupied",
|
||||
"open_property_access_gate": "@.capitalize:{'words.generated.open'} @:{'words.generated.property'} @:{'words.generated.access'} @:{'words.generated.gate'}",
|
||||
@@ -4425,6 +4427,10 @@
|
||||
"start_wash": "@.capitalize:{'words.generated.start'} @:{'words.generated.wash'}",
|
||||
"total_time": "@.capitalize:{'words.generated.total'} @:{'words.generated.time'}: {minutes} @:{'words.generated.minutes'} @:{'words.generated.and'} {seconds} @:{'words.generated.seconds'}",
|
||||
"unavailable": "@.capitalize:{'words.generated.unavailable'}",
|
||||
"vehicle_step_missing_customer_number": "Enter your customer number to continue.",
|
||||
"vehicle_step_missing_department": "Wait for the nearest department to load before continuing.",
|
||||
"vehicle_step_missing_registration": "Enter your registration number to continue.",
|
||||
"vehicle_step_missing_vehicle_type": "Choose an available vehicle type to continue.",
|
||||
"wash_completed_contact": "@.capitalize:{'words.generated.we'} hope @:{'words.generated.you'} @:{'words.generated.are'} satisfied @:{'words.generated.with'} @:{'words.replication.article.host_mention'} @:{'words.generated.result'}. @.capitalize:{'words.generated.if'} @:{'words.generated.you'} @:{'words.generated.need'} @:{'words.generated.further'} @:{'words.generated.assistance'}, @:{'words.generated.please'} @:{'words.generated.contact'} @:{'words.generated.our'} staff.",
|
||||
"wash_completed_message": "@.capitalize:{'words.generated.your'} @:{'words.generated.wash'} @:{'words.generated.is'} @:{'words.generated.now'} @:{'words.generated.complete'}! @:{'words.generated.thank'} @:{'words.generated.you'} @:{'words.generated.for'} @:{'words.generated.using'} @:{'words.generated.our'} @:{'words.generated.self'}-@:{'words.generated.service'} @:{'words.generated.wash'}.",
|
||||
"wash_completed": "@.capitalize:{'words.generated.wash'} @:{'words.generated.completed'}",
|
||||
|
||||
@@ -4188,7 +4188,9 @@
|
||||
"loading_department": "@:{'templates.generated.compat.self_wash.loading_department'}",
|
||||
"loading_types": "@:{'templates.generated.compat.self_wash.loading_types'}",
|
||||
"loading_vehicle_types": "@:{'templates.generated.compat.self_wash.loading_vehicle_types'}",
|
||||
"lane_unavailable": "@:{'templates.generated.compat.self_wash.lane_unavailable'}",
|
||||
"machine": "@:{'templates.generated.compat.self_wash.machine'}",
|
||||
"machine_unavailable_for_lane": "@:{'templates.generated.compat.self_wash.machine_unavailable_for_lane'}",
|
||||
"no_departments_found": "@:{'templates.generated.compat.self_wash.no_departments_found'}",
|
||||
"no_vehicles_found": "@:vehicles.no_vehicles",
|
||||
"occupied": "@:{'templates.generated.compat.self_wash.occupied'}",
|
||||
@@ -4205,6 +4207,10 @@
|
||||
"start_wash": "@:{'templates.generated.compat.self_wash.start_wash'}",
|
||||
"total_time": "@:{'templates.generated.compat.self_wash.total_time'}",
|
||||
"unavailable": "@:{'templates.generated.compat.self_wash.unavailable'}",
|
||||
"vehicle_step_missing_customer_number": "@:{'templates.generated.compat.self_wash.vehicle_step_missing_customer_number'}",
|
||||
"vehicle_step_missing_department": "@:{'templates.generated.compat.self_wash.vehicle_step_missing_department'}",
|
||||
"vehicle_step_missing_registration": "@:{'templates.generated.compat.self_wash.vehicle_step_missing_registration'}",
|
||||
"vehicle_step_missing_vehicle_type": "@:{'templates.generated.compat.self_wash.vehicle_step_missing_vehicle_type'}",
|
||||
"vehicle_type": "@:{'templates.generated.compat.products.form.vehicle_type'}",
|
||||
"vehicle": "@:common.vehicle",
|
||||
"wash_completed_contact": "@:{'templates.generated.compat.self_wash.wash_completed_contact'}",
|
||||
|
||||
@@ -4669,7 +4669,9 @@
|
||||
"loading_department": "@.capitalize:{'words.generated.laster'} @:{'words.generated.avdelingen'}...",
|
||||
"loading_types": "@.capitalize:{'words.generated.laster'} @:{'words.generated.inn'} @:{'words.generated.typer'}...",
|
||||
"loading_vehicle_types": "@.capitalize:{'words.generated.laster'} @:{'words.generated.inn'} @:{'words.generated.tilgjengelige'} @:{'words.generated.kjøretøytyper'}...",
|
||||
"lane_unavailable": "Vaskebanen er ikke tilgjengelig",
|
||||
"machine": "@.capitalize:{'words.generated.maskin'}",
|
||||
"machine_unavailable_for_lane": "Maskinvask er ikke tilgjengelig for valgt bane. Velg manuell vask eller en annen ledig bane.",
|
||||
"no_departments_found": "@:{'templates.generated.compat.departments.no_departments'}",
|
||||
"occupied": "Okkupert",
|
||||
"open_property_access_gate": "@:{'words.generated.aapne'} @:{'words.generated.eiendommens'} inngangsport",
|
||||
@@ -4685,6 +4687,10 @@
|
||||
"start_wash": "@:{'templates.generated.compat.guest.start_wash'}",
|
||||
"total_time": "@:{'words.generated.total'} @:{'words.generated.tid'}: {minutes} minutter @:{'words.generated.og'} {seconds} @:{'words.generated.sekunder'}",
|
||||
"unavailable": "@.capitalize:{'words.generated.utilgjengelig'}",
|
||||
"vehicle_step_missing_customer_number": "Skriv inn kundenummer for a fortsette.",
|
||||
"vehicle_step_missing_department": "Vent til naermeste avdeling er lastet inn for du fortsetter.",
|
||||
"vehicle_step_missing_registration": "Skriv inn registreringsnummer for a fortsette.",
|
||||
"vehicle_step_missing_vehicle_type": "Velg en tilgjengelig kjoretoytype for a fortsette.",
|
||||
"wash_completed_contact": "@.capitalize:{'words.generated.vi'} håper @:{'words.generated.du'} @:{'words.generated.er'} fornøyd @:{'words.generated.med'} resultatet. @.capitalize:{'words.generated.hvis'} @:{'words.generated.du'} @:{'words.generated.trenger'} @:{'words.generated.ytterligere'} @:{'words.generated.hjelp'}, @:{'words.generated.vennligst'} @:{'words.generated.kontakt'} @:{'words.generated.vare'} @:{'words.generated.ansatte'}.",
|
||||
"wash_completed_message": "@.capitalize:{'words.generated.vasken'} @:{'words.generated.din'} @:{'words.generated.er'} @:{'words.generated.na'} @:{'words.generated.fullført'}! @:{'words.generated.takk'} @:{'words.generated.for'} @:{'words.generated.at'} @:{'words.generated.du'} @:{'words.generated.bruker'} @:{'words.generated.var_2'} @:{'words.generated.selvbetjente'} @:{'words.generated.vask'}.",
|
||||
"wash_completed": "@:{'words.generated.vasking'} @:{'words.generated.fullført'}",
|
||||
|
||||
@@ -4719,7 +4719,9 @@
|
||||
"loading_department": "@.capitalize:{'words.generated.laser'} @:{'words.generated.in'} @:{'words.generated.avdelning'}...",
|
||||
"loading_types": "@:{'words.generated.laddar'} @:{'words.generated.typer'}...",
|
||||
"loading_vehicle_types": "@.capitalize:{'words.generated.laser'} @:{'words.generated.in'} @:{'words.generated.tillgangliga'} @:{'words.generated.fordonstyper'}...",
|
||||
"lane_unavailable": "Tvattbanan ar inte tillganglig",
|
||||
"machine": "@.capitalize:{'words.generated.machine'}",
|
||||
"machine_unavailable_for_lane": "Maskintvatt ar inte tillganglig for vald bana. Valj manuell tvatt eller en annan ledig bana.",
|
||||
"no_departments_found": "@.capitalize:{'words.generated.inga'} @:{'words.generated.avdelningar'} @:{'words.generated.hittades'}",
|
||||
"occupied": "Upptagen",
|
||||
"open_property_access_gate": "@:{'words.generated.oeppna'} @:{'words.generated.fastighetens'} ingangsgrind",
|
||||
@@ -4735,6 +4737,10 @@
|
||||
"start_wash": "@.capitalize:{'words.generated.start'} @:{'words.generated.wash'}",
|
||||
"total_time": "@.capitalize:{'words.generated.total'} @:{'words.generated.tid'}: {minutes} minuter @:{'words.generated.och'} {seconds} @:{'words.generated.sekunder'}",
|
||||
"unavailable": "@:{'templates.generated.compat.common.not_available'}",
|
||||
"vehicle_step_missing_customer_number": "Ange kundnummer for att fortsatta.",
|
||||
"vehicle_step_missing_department": "Vanta tills narmaste avdelning har laddats innan du fortsatter.",
|
||||
"vehicle_step_missing_registration": "Ange registreringsnummer for att fortsatta.",
|
||||
"vehicle_step_missing_vehicle_type": "Valj en tillganglig fordonstyp for att fortsatta.",
|
||||
"wash_completed_contact": "@.capitalize:{'words.generated.vi'} hoppas @:{'words.generated.att'} @:{'words.generated.du'} @:{'words.generated.ar'} nöjd @:{'words.generated.med'} resultatet. @.capitalize:{'words.generated.om'} @:{'words.generated.du'} @:{'words.generated.behover'} @:{'words.generated.ytterligare'} @:{'words.generated.hjalp'}, @:{'words.generated.kontakta'} @:{'words.generated.var_2'} personal.",
|
||||
"wash_completed_message": "@.capitalize:{'words.generated.din'} @:{'words.generated.tvatt'} @:{'words.generated.ar'} @:{'words.generated.nu'} @:{'words.generated.klar'}! @:{'words.generated.tack'} @:{'words.generated.for'} @:{'words.generated.att'} @:{'words.generated.du'} @:{'words.generated.anvander'} @:{'words.generated.var_2'} självbetjäningstvätt.",
|
||||
"wash_completed": "@.capitalize:{'words.generated.tvatt'} @:{'words.generated.slutford'}",
|
||||
|
||||
@@ -367,6 +367,52 @@ test.describe("Self-serve wash", () => {
|
||||
await expect(page.getByTestId("self-serve-department-name")).toContainText("Roskilde");
|
||||
});
|
||||
|
||||
test("start route skips an empty question set and waits for lane confirmation", async ({ page }) => {
|
||||
const requests = captureSelfServeGatewayRequests(page);
|
||||
const api = await mockApi(page, {
|
||||
authenticated: true,
|
||||
permissions: ["user"],
|
||||
selfServe: true,
|
||||
});
|
||||
api.selfServe.previewByKey["7:AB12345"] = {
|
||||
...api.selfServe.previewByKey["7:AB12345"],
|
||||
questions: [],
|
||||
tasks: [],
|
||||
};
|
||||
api.selfServe.summaryBySessionId[501] = {
|
||||
...api.selfServe.summaryBySessionId[501],
|
||||
questions: [],
|
||||
tasks: [],
|
||||
};
|
||||
api.selfServe.summaryByKey["7:AB12345"] = {
|
||||
...api.selfServe.summaryByKey["7:AB12345"],
|
||||
questions: [],
|
||||
tasks: [],
|
||||
};
|
||||
await primeSession(page, {
|
||||
token: "self-serve-empty-questions-token",
|
||||
permissions: ["user"],
|
||||
});
|
||||
|
||||
await page.goto("/user/wash/start");
|
||||
await fillRegistration(page, "ab12345");
|
||||
await selectVehicleType(page, 2);
|
||||
await page.getByTestId("self-serve-nav-next").click();
|
||||
|
||||
await expect(page.getByTestId("self-serve-lane-step")).toBeVisible({ timeout: 10_000 });
|
||||
await expect(page.getByTestId("self-serve-question-11")).toHaveCount(0);
|
||||
await expect(page.getByTestId("self-serve-nav-confirm")).toContainText(/start/i);
|
||||
expect(requests.commands).toHaveLength(0);
|
||||
|
||||
const startCommandRequestPromise = waitForLaneCommandRequest(page, "START");
|
||||
await page.getByTestId("self-serve-nav-confirm").click();
|
||||
const startCommandRequest = await startCommandRequestPromise;
|
||||
expect(startCommandRequest.postDataJSON?.()).toMatchObject({
|
||||
lane_id: 7,
|
||||
command: "START",
|
||||
});
|
||||
});
|
||||
|
||||
test("lane flow gates invalid lanes, direct wash path auto-starts, and expired progress is discarded", async ({
|
||||
page,
|
||||
}) => {
|
||||
|
||||
Reference in New Issue
Block a user