diff --git a/src/cli/cron-cli.test.ts b/src/cli/cron-cli.test.ts index 3eb5a2711..4ee26526e 100644 --- a/src/cli/cron-cli.test.ts +++ b/src/cli/cron-cli.test.ts @@ -42,6 +42,15 @@ type CronUpdatePatch = { }; }; +type CronAddParams = { + schedule?: { kind?: string; staggerMs?: number }; + payload?: { model?: string; thinking?: string }; + delivery?: { mode?: string }; + deleteAfterRun?: boolean; + agentId?: string; + sessionTarget?: string; +}; + function buildProgram() { const program = new Command(); program.exitOverride(); @@ -62,6 +71,14 @@ async function runCronEditAndGetPatch(editArgs: string[]): Promise { + resetGatewayMock(); + const program = buildProgram(); + await program.parseAsync(["cron", "add", ...addArgs], { from: "user" }); + const addCall = callGatewayFromCli.mock.calls.find((call) => call[0] === "cron.add"); + return (addCall?.[2] ?? {}) as CronAddParams; +} + describe("cron cli", () => { it("trims model and thinking on cron add", { timeout: 60_000 }, async () => { resetGatewayMock(); @@ -208,48 +225,28 @@ describe("cron cli", () => { }); it("omits empty model and thinking on cron edit", async () => { - resetGatewayMock(); - - const program = buildProgram(); - - await program.parseAsync( - ["cron", "edit", "job-1", "--message", "hello", "--model", " ", "--thinking", " "], - { from: "user" }, - ); - - const updateCall = callGatewayFromCli.mock.calls.find((call) => call[0] === "cron.update"); - const patch = updateCall?.[2] as { - patch?: { payload?: { model?: string; thinking?: string } }; - }; + const patch = await runCronEditAndGetPatch([ + "--message", + "hello", + "--model", + " ", + "--thinking", + " ", + ]); expect(patch?.patch?.payload?.model).toBeUndefined(); expect(patch?.patch?.payload?.thinking).toBeUndefined(); }); it("trims model and thinking on cron edit", async () => { - resetGatewayMock(); - - const program = buildProgram(); - - await program.parseAsync( - [ - "cron", - "edit", - "job-1", - "--message", - "hello", - "--model", - " opus ", - "--thinking", - " high ", - ], - { from: "user" }, - ); - - const updateCall = callGatewayFromCli.mock.calls.find((call) => call[0] === "cron.update"); - const patch = updateCall?.[2] as { - patch?: { payload?: { model?: string; thinking?: string } }; - }; + const patch = await runCronEditAndGetPatch([ + "--message", + "hello", + "--model", + " opus ", + "--thinking", + " high ", + ]); expect(patch?.patch?.payload?.model).toBe("opus"); expect(patch?.patch?.payload?.thinking).toBe("high"); @@ -415,56 +412,34 @@ describe("cron cli", () => { }); it("sets explicit stagger for cron add", async () => { - resetGatewayMock(); - const program = buildProgram(); - - await program.parseAsync( - [ - "cron", - "add", - "--name", - "staggered", - "--cron", - "0 * * * *", - "--stagger", - "45s", - "--session", - "main", - "--system-event", - "tick", - ], - { from: "user" }, - ); - - const addCall = callGatewayFromCli.mock.calls.find((call) => call[0] === "cron.add"); - const params = addCall?.[2] as { schedule?: { kind?: string; staggerMs?: number } }; + const params = await runCronAddAndGetParams([ + "--name", + "staggered", + "--cron", + "0 * * * *", + "--stagger", + "45s", + "--session", + "main", + "--system-event", + "tick", + ]); expect(params?.schedule?.kind).toBe("cron"); expect(params?.schedule?.staggerMs).toBe(45_000); }); it("sets exact cron mode on add", async () => { - resetGatewayMock(); - const program = buildProgram(); - - await program.parseAsync( - [ - "cron", - "add", - "--name", - "exact", - "--cron", - "0 * * * *", - "--exact", - "--session", - "main", - "--system-event", - "tick", - ], - { from: "user" }, - ); - - const addCall = callGatewayFromCli.mock.calls.find((call) => call[0] === "cron.add"); - const params = addCall?.[2] as { schedule?: { kind?: string; staggerMs?: number } }; + const params = await runCronAddAndGetParams([ + "--name", + "exact", + "--cron", + "0 * * * *", + "--exact", + "--session", + "main", + "--system-event", + "tick", + ]); expect(params?.schedule?.kind).toBe("cron"); expect(params?.schedule?.staggerMs).toBe(0); });