test(cli): dedupe cron add/edit assertion harness

This commit is contained in:
Peter Steinberger
2026-02-18 13:37:39 +00:00
parent 57083e4220
commit c7bfa818ea

View File

@@ -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<CronUpdatePat
return (updateCall?.[2] ?? {}) as CronUpdatePatch;
}
async function runCronAddAndGetParams(addArgs: string[]): Promise<CronAddParams> {
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);
});