50 lines
1.8 KiB
TypeScript
50 lines
1.8 KiB
TypeScript
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);
|
|
});
|
|
});
|