import { describe, expect, it } from "vitest"; import { reduceState, type SessionState } from "./session-manager.js"; describe("reduceState", () => { it("pending → connecting on starting", () => { expect(reduceState("pending", { kind: "starting" })).toBe("connecting"); }); it("connecting → connected on open", () => { expect(reduceState("connecting", { kind: "open" })).toBe("connected"); }); it("connected → disconnected on close (not logged out)", () => { expect(reduceState("connected", { kind: "close", loggedOut: false })).toBe( "disconnected", ); }); it("any → logged_out on logged-out close", () => { expect(reduceState("connected", { kind: "close", loggedOut: true })).toBe( "logged_out", ); expect(reduceState("connecting", { kind: "close", loggedOut: true })).toBe( "logged_out", ); }); it("ignores stray events that don't match transitions", () => { expect(reduceState("connected", { kind: "starting" })).toBe("connected"); }); });