test(cli): dedupe cron add/edit assertion harness
This commit is contained in:
@@ -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);
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user