28 lines
1.1 KiB
TypeScript
28 lines
1.1 KiB
TypeScript
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<SessionState>("connecting");
|
|
});
|
|
it("connecting → connected on open", () => {
|
|
expect(reduceState("connecting", { kind: "open" })).toBe<SessionState>("connected");
|
|
});
|
|
it("connected → disconnected on close (not logged out)", () => {
|
|
expect(reduceState("connected", { kind: "close", loggedOut: false })).toBe<SessionState>(
|
|
"disconnected",
|
|
);
|
|
});
|
|
it("any → logged_out on logged-out close", () => {
|
|
expect(reduceState("connected", { kind: "close", loggedOut: true })).toBe<SessionState>(
|
|
"logged_out",
|
|
);
|
|
expect(reduceState("connecting", { kind: "close", loggedOut: true })).toBe<SessionState>(
|
|
"logged_out",
|
|
);
|
|
});
|
|
it("ignores stray events that don't match transitions", () => {
|
|
expect(reduceState("connected", { kind: "starting" })).toBe<SessionState>("connected");
|
|
});
|
|
});
|