Spaces:
Configuration error
Configuration error
| import { describe, expect, test } from "vitest"; | |
| import { WizardSession } from "./session.js"; | |
| function noteRunner() { | |
| return new WizardSession(async (prompter) => { | |
| await prompter.note("Welcome"); | |
| const name = await prompter.text({ message: "Name" }); | |
| await prompter.note(`Hello ${name}`); | |
| }); | |
| } | |
| describe("WizardSession", () => { | |
| test("steps progress in order", async () => { | |
| const session = noteRunner(); | |
| const first = await session.next(); | |
| expect(first.done).toBe(false); | |
| expect(first.step?.type).toBe("note"); | |
| const secondPeek = await session.next(); | |
| expect(secondPeek.step?.id).toBe(first.step?.id); | |
| if (!first.step) throw new Error("expected first step"); | |
| await session.answer(first.step.id, null); | |
| const second = await session.next(); | |
| expect(second.done).toBe(false); | |
| expect(second.step?.type).toBe("text"); | |
| if (!second.step) throw new Error("expected second step"); | |
| await session.answer(second.step.id, "Peter"); | |
| const third = await session.next(); | |
| expect(third.step?.type).toBe("note"); | |
| if (!third.step) throw new Error("expected third step"); | |
| await session.answer(third.step.id, null); | |
| const done = await session.next(); | |
| expect(done.done).toBe(true); | |
| expect(done.status).toBe("done"); | |
| }); | |
| test("invalid answers throw", async () => { | |
| const session = noteRunner(); | |
| const first = await session.next(); | |
| await expect(session.answer("bad-id", null)).rejects.toThrow(/wizard: no pending step/i); | |
| if (!first.step) throw new Error("expected first step"); | |
| await session.answer(first.step.id, null); | |
| }); | |
| test("cancel marks session and unblocks", async () => { | |
| const session = new WizardSession(async (prompter) => { | |
| await prompter.text({ message: "Name" }); | |
| }); | |
| const step = await session.next(); | |
| expect(step.step?.type).toBe("text"); | |
| session.cancel(); | |
| const done = await session.next(); | |
| expect(done.done).toBe(true); | |
| expect(done.status).toBe("cancelled"); | |
| }); | |
| }); | |