import { describe, expect, it } from "vitest"; import { validateCronAddParams, validateCronRemoveParams, validateCronRunParams, validateCronRunsParams, validateCronUpdateParams, } from "./index.js"; const minimalAddParams = { name: "daily-summary", schedule: { kind: "every", everyMs: 60_000 }, sessionTarget: "main", wakeMode: "next-heartbeat", payload: { kind: "systemEvent", text: "tick" }, } as const; describe("cron protocol validators", () => { it("accepts minimal add params", () => { expect(validateCronAddParams(minimalAddParams)).toBe(true); }); it("rejects add params when required scheduling fields are missing", () => { const { wakeMode: _wakeMode, ...withoutWakeMode } = minimalAddParams; expect(validateCronAddParams(withoutWakeMode)).toBe(false); }); it("accepts update params for id and jobId selectors", () => { expect(validateCronUpdateParams({ id: "job-1", patch: { enabled: false } })).toBe(true); expect(validateCronUpdateParams({ jobId: "job-2", patch: { enabled: true } })).toBe(true); }); it("accepts remove params for id and jobId selectors", () => { expect(validateCronRemoveParams({ id: "job-1" })).toBe(true); expect(validateCronRemoveParams({ jobId: "job-2" })).toBe(true); }); it("accepts run params mode for id and jobId selectors", () => { expect(validateCronRunParams({ id: "job-1", mode: "force" })).toBe(true); expect(validateCronRunParams({ jobId: "job-2", mode: "due" })).toBe(true); }); it("enforces runs limit minimum for id and jobId selectors", () => { expect(validateCronRunsParams({ id: "job-1", limit: 1 })).toBe(true); expect(validateCronRunsParams({ jobId: "job-2", limit: 1 })).toBe(true); expect(validateCronRunsParams({ id: "job-1", limit: 0 })).toBe(false); expect(validateCronRunsParams({ jobId: "job-2", limit: 0 })).toBe(false); }); });