import { describe, expect, it } from "vitest"; import { createRun, getRun, updateRun } from "../src/runs"; describe("run store", () => { it("createRun returns a RunState with pending status", () => { const run = createRun("conversation"); expect(run.id).toBeDefined(); expect(run.status).toBe("pending"); expect(run.trigger).toBe("conversation"); expect(run.createdAt).toBeDefined(); }); it("getRun finds a created run", () => { const run = createRun("heartbeat"); const found = getRun(run.id); expect(found).toBeDefined(); expect(found?.id).toBe(run.id); }); it("getRun returns undefined for missing id", () => { expect(getRun("nonexistent-id")).toBeUndefined(); }); it("updateRun changes status and result", () => { const run = createRun("manual"); updateRun(run.id, { status: "completed", result: { success: true, summary: "Done", actions: [] }, }); const updated = getRun(run.id); expect(updated?.status).toBe("completed"); expect(updated?.result?.summary).toBe("Done"); expect(updated?.completedAt).toBeDefined(); }); it("updateRun sets completedAt on failure", () => { const run = createRun("conversation"); updateRun(run.id, { status: "failed" }); const updated = getRun(run.id); expect(updated?.status).toBe("failed"); expect(updated?.completedAt).toBeDefined(); }); it("pruning removes runs older than 1 hour", () => { const old = createRun("conversation"); // Manually backdate the createdAt const run = getRun(old.id); if (run) { run.createdAt = new Date(Date.now() - 2 * 60 * 60 * 1000).toISOString(); } // Creating a new run triggers pruning const fresh = createRun("conversation"); expect(getRun(old.id)).toBeUndefined(); expect(getRun(fresh.id)).toBeDefined(); }); });