cm_whatsapp_bot_v1/apps/bot/src/whatsapp/session-manager.test.ts

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");
});
});