35 lines
1.5 KiB
TypeScript
35 lines
1.5 KiB
TypeScript
import { describe, expect, it, vi } from "vitest";
|
|
import type { HarnessApi } from "../src/api/harness-api.js";
|
|
import { HarnessClientStore } from "../src/store/harness-client-store.js";
|
|
|
|
describe("HarnessClientStore lifecycle", () => {
|
|
it("deletes the current session and can start a fresh session after dispose", async () => {
|
|
const createSession = vi.fn()
|
|
.mockResolvedValueOnce({ sessionId: "ses_1", requestId: "req_1" })
|
|
.mockResolvedValueOnce({ sessionId: "ses_2", requestId: "req_2" });
|
|
const deleteSession = vi.fn().mockResolvedValue({ deleted: true, requestId: "req_delete" });
|
|
const api = {
|
|
createSession,
|
|
deleteSession,
|
|
getSkills: vi.fn().mockResolvedValue({ skills: [], requestId: "req_skills" }),
|
|
eventsUrl: (sessionId: string) => `/api/sessions/${sessionId}/events`,
|
|
} as unknown as HarnessApi;
|
|
const eventSources: Array<{ close: ReturnType<typeof vi.fn> }> = [];
|
|
const store = new HarnessClientStore(api, () => {
|
|
const source = { addEventListener: vi.fn(), close: vi.fn() };
|
|
eventSources.push(source);
|
|
return source;
|
|
});
|
|
|
|
await store.start();
|
|
expect(store.getSnapshot().sessionId).toBe("ses_1");
|
|
await store.dispose();
|
|
await store.start();
|
|
|
|
expect(deleteSession).toHaveBeenCalledWith("ses_1");
|
|
expect(createSession).toHaveBeenCalledTimes(2);
|
|
expect(eventSources[0]?.close).toHaveBeenCalledTimes(1);
|
|
expect(store.getSnapshot().sessionId).toBe("ses_2");
|
|
});
|
|
});
|