fix: close browser session lifecycle gaps
This commit is contained in:
@@ -0,0 +1,34 @@
|
||||
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");
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user