test(cron): dedupe applyJobPatch fixture setup

This commit is contained in:
Peter Steinberger
2026-02-19 08:17:50 +00:00
parent 733e385843
commit edce5a505a

View File

@@ -5,11 +5,15 @@ import { DEFAULT_TOP_OF_HOUR_STAGGER_MS } from "./stagger.js";
import type { CronJob, CronJobPatch } from "./types.js"; import type { CronJob, CronJobPatch } from "./types.js";
describe("applyJobPatch", () => { describe("applyJobPatch", () => {
it("clears delivery when switching to main session", () => { const createIsolatedAgentTurnJob = (
id: string,
delivery: CronJob["delivery"],
overrides?: Partial<CronJob>,
): CronJob => {
const now = Date.now(); const now = Date.now();
const job: CronJob = { return {
id: "job-1", id,
name: "job-1", name: id,
enabled: true, enabled: true,
createdAtMs: now, createdAtMs: now,
updatedAtMs: now, updatedAtMs: now,
@@ -17,62 +21,47 @@ describe("applyJobPatch", () => {
sessionTarget: "isolated", sessionTarget: "isolated",
wakeMode: "now", wakeMode: "now",
payload: { kind: "agentTurn", message: "do it" }, payload: { kind: "agentTurn", message: "do it" },
delivery: { mode: "announce", channel: "telegram", to: "123" }, delivery,
state: {}, state: {},
...overrides,
}; };
};
const patch: CronJobPatch = { const switchToMainPatch = (): CronJobPatch => ({
sessionTarget: "main", sessionTarget: "main",
payload: { kind: "systemEvent", text: "ping" }, payload: { kind: "systemEvent", text: "ping" },
}; });
expect(() => applyJobPatch(job, patch)).not.toThrow(); it("clears delivery when switching to main session", () => {
const job = createIsolatedAgentTurnJob("job-1", {
mode: "announce",
channel: "telegram",
to: "123",
});
expect(() => applyJobPatch(job, switchToMainPatch())).not.toThrow();
expect(job.sessionTarget).toBe("main"); expect(job.sessionTarget).toBe("main");
expect(job.payload.kind).toBe("systemEvent"); expect(job.payload.kind).toBe("systemEvent");
expect(job.delivery).toBeUndefined(); expect(job.delivery).toBeUndefined();
}); });
it("keeps webhook delivery when switching to main session", () => { it("keeps webhook delivery when switching to main session", () => {
const now = Date.now(); const job = createIsolatedAgentTurnJob("job-webhook", {
const job: CronJob = { mode: "webhook",
id: "job-webhook", to: "https://example.invalid/cron",
name: "job-webhook", });
enabled: true,
createdAtMs: now,
updatedAtMs: now,
schedule: { kind: "every", everyMs: 60_000 },
sessionTarget: "isolated",
wakeMode: "now",
payload: { kind: "agentTurn", message: "do it" },
delivery: { mode: "webhook", to: "https://example.invalid/cron" },
state: {},
};
const patch: CronJobPatch = { expect(() => applyJobPatch(job, switchToMainPatch())).not.toThrow();
sessionTarget: "main",
payload: { kind: "systemEvent", text: "ping" },
};
expect(() => applyJobPatch(job, patch)).not.toThrow();
expect(job.sessionTarget).toBe("main"); expect(job.sessionTarget).toBe("main");
expect(job.delivery).toEqual({ mode: "webhook", to: "https://example.invalid/cron" }); expect(job.delivery).toEqual({ mode: "webhook", to: "https://example.invalid/cron" });
}); });
it("maps legacy payload delivery updates onto delivery", () => { it("maps legacy payload delivery updates onto delivery", () => {
const now = Date.now(); const job = createIsolatedAgentTurnJob("job-2", {
const job: CronJob = { mode: "announce",
id: "job-2", channel: "telegram",
name: "job-2", to: "123",
enabled: true, });
createdAtMs: now,
updatedAtMs: now,
schedule: { kind: "every", everyMs: 60_000 },
sessionTarget: "isolated",
wakeMode: "now",
payload: { kind: "agentTurn", message: "do it" },
delivery: { mode: "announce", channel: "telegram", to: "123" },
state: {},
};
const patch: CronJobPatch = { const patch: CronJobPatch = {
payload: { payload: {
@@ -101,20 +90,10 @@ describe("applyJobPatch", () => {
}); });
it("treats legacy payload targets as announce requests", () => { it("treats legacy payload targets as announce requests", () => {
const now = Date.now(); const job = createIsolatedAgentTurnJob("job-3", {
const job: CronJob = { mode: "none",
id: "job-3", channel: "telegram",
name: "job-3", });
enabled: true,
createdAtMs: now,
updatedAtMs: now,
schedule: { kind: "every", everyMs: 60_000 },
sessionTarget: "isolated",
wakeMode: "now",
payload: { kind: "agentTurn", message: "do it" },
delivery: { mode: "none", channel: "telegram" },
state: {},
};
const patch: CronJobPatch = { const patch: CronJobPatch = {
payload: { kind: "agentTurn", to: " 999 " }, payload: { kind: "agentTurn", to: " 999 " },