fix: close browser session lifecycle gaps

This commit is contained in:
Wenxin Duan
2026-09-08 11:12:12 +08:00
parent 8fa006344d
commit ba45382747
12 changed files with 149 additions and 11 deletions
+34
View File
@@ -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");
});
});