diff --git a/src/composables/useSelfServeLogic.js b/src/composables/useSelfServeLogic.js index 66038881..c800661f 100644 --- a/src/composables/useSelfServeLogic.js +++ b/src/composables/useSelfServeLogic.js @@ -498,6 +498,10 @@ export function useSelfServeLogic() { machineType.value = previewData?.machine_type || machineType.value; vehicle.value = previewData?.vehicle || null; session.value = previewData?.session || session.value; + if (!previewData?.session?.id) { + summary.value = null; + events.value = []; + } if (Object.prototype.hasOwnProperty.call(previewData || {}, "config_version_id")) { configVersionId.value = previewData?.config_version_id ?? null; } diff --git a/tests/unit/use-self-serve-logic.spec.js b/tests/unit/use-self-serve-logic.spec.js index 1821ea0a..f6d7ec14 100644 --- a/tests/unit/use-self-serve-logic.spec.js +++ b/tests/unit/use-self-serve-logic.spec.js @@ -91,6 +91,52 @@ describe("useSelfServeLogic", () => { }); }); + it("clears stale wash summary machine availability when a fresh preview has no session", async () => { + mocks.previewAllowed + .mockResolvedValueOnce({ + allowed: true, + machine_available: true, + lane: { id: 7, name: "Lane 7" }, + session: { id: 91, status: "READY_FOR_MACHINE_START" }, + questions: [{ id: 1, question: "Machine wash?", answer: true, order_priority: 1 }], + tasks: [{ id: 5, task: "Prepare", order_priority: 1, services: ["MACHINE"] }], + conditions: [], + rules: [], + allowed_services: ["MACHINE"], + }) + .mockResolvedValueOnce({ + allowed: true, + machine_available: true, + lane: { id: 7, name: "Lane 7" }, + session: null, + questions: [{ id: 1, question: "Machine wash?", answer: true, order_priority: 1 }], + tasks: [{ id: 5, task: "Prepare", order_priority: 1, services: ["MACHINE"] }], + conditions: [], + rules: [], + allowed_services: ["MACHINE"], + }); + mocks.washSummary.mockResolvedValueOnce({ + machine_available: false, + session: { id: 91, status: "READY_FOR_MACHINE_START" }, + lane: { id: 7, name: "Lane 7" }, + questions: [{ id: 1, question: "Machine wash?", answer: true, order_priority: 1 }], + tasks: [{ id: 5, task: "Prepare", order_priority: 1, services: ["MACHINE"] }], + events: [], + allowed_services: [], + }); + + const logic = useSelfServeLogic(); + + await logic.fetchSelfServeData(1, 9, 7, "ab12345"); + expect(logic.machineAvailable.value).toBe(false); + + await logic.fetchSelfServeData(1, 9, 7, "cd12345"); + + expect(logic.summary.value).toBeNull(); + expect(logic.machineAvailable.value).toBe(true); + expect(logic.allowedServices.value).toEqual(["MACHINE"]); + }); + it("preserves preview task ids when wash summary omits task ids", async () => { mocks.previewAllowed.mockResolvedValue({ allowed: true,