evOo-local/packages/core/src/computer-updates.test.ts
cynarAI 6c7eed7580 Initial clean evOo-local from f00577b
Fresh history cut from cynarAI/evoo antigravity-handoff/project-timeline
(Voice First + project timeline). Brand docs/titles as evOo; keep @rakazo/*
packages as tech debt. Excludes node_modules, caches, secrets, voice blobs.
2026-09-20 17:15:16 +02:00

64 lines
1.9 KiB
TypeScript

import type { ComputerUpdate } from "@rakazo/contracts";
import { afterEach, describe, expect, it, vi } from "vitest";
import { createComputerUpdates } from "./computer-updates.js";
const update: ComputerUpdate = {
id: "update-1",
botId: "bot-1",
name: "Writer",
mode: "team",
action: "update",
status: "running",
stage: "saving",
};
afterEach(() => vi.useRealTimers());
describe("computer update presentation", () => {
it("keeps a newly started update when an older poll returns, and closing does not stop polling", async () => {
vi.useFakeTimers();
let resolve!: (rows: ComputerUpdate[]) => void;
const list = vi.fn(
() =>
new Promise<ComputerUpdate[]>((done) => {
resolve = done;
}),
);
const store = createComputerUpdates({
list,
start: async () => update,
dismiss: async () => {},
releaseInterrupted: async () => {},
});
const stop = store.watch();
await store.start("bot-1");
resolve([]);
await Promise.resolve();
expect(store.getSnapshot()).toEqual({ updates: [update], openId: update.id });
store.open(null);
await vi.advanceTimersByTimeAsync(1500);
resolve([{ ...update, stage: "restoring" }]);
await Promise.resolve();
expect(store.getSnapshot()).toEqual({
updates: [{ ...update, stage: "restoring" }],
openId: null,
});
stop();
});
it("restores background progress on a new mount and ignores responses after disposal", async () => {
vi.useFakeTimers();
const store = createComputerUpdates({
list: async () => [update],
start: async () => update,
dismiss: async () => {},
releaseInterrupted: async () => {},
});
let stop = store.watch();
await Promise.resolve();
expect(store.getSnapshot().updates).toEqual([update]);
stop();
stop = store.watch();
stop();
await Promise.resolve();
expect(store.getSnapshot().updates).toEqual([]);
});
});