71 lines
1.9 KiB
TypeScript
71 lines
1.9 KiB
TypeScript
import { describe, expect, it } from "vitest";
|
|
import type { RoutineTrigger } from "@paperclipai/shared";
|
|
import { buildRoutineTriggerPatch } from "./routine-trigger-patch";
|
|
|
|
function makeScheduleTrigger(overrides: Partial<RoutineTrigger> = {}): RoutineTrigger {
|
|
return {
|
|
id: "trigger-1",
|
|
companyId: "company-1",
|
|
routineId: "routine-1",
|
|
kind: "schedule",
|
|
label: "Daily",
|
|
enabled: true,
|
|
cronExpression: "0 10 * * *",
|
|
timezone: "UTC",
|
|
nextRunAt: null,
|
|
lastFiredAt: null,
|
|
publicId: null,
|
|
secretId: null,
|
|
signingMode: null,
|
|
replayWindowSec: null,
|
|
lastRotatedAt: null,
|
|
lastResult: null,
|
|
createdByAgentId: null,
|
|
createdByUserId: null,
|
|
updatedByAgentId: null,
|
|
updatedByUserId: null,
|
|
createdAt: new Date("2026-03-20T00:00:00.000Z"),
|
|
updatedAt: new Date("2026-03-20T00:00:00.000Z"),
|
|
...overrides,
|
|
};
|
|
}
|
|
|
|
describe("buildRoutineTriggerPatch", () => {
|
|
it("preserves an existing schedule trigger timezone when saving edits", () => {
|
|
const patch = buildRoutineTriggerPatch(
|
|
makeScheduleTrigger({ timezone: "UTC" }),
|
|
{
|
|
label: "Daily label edit",
|
|
cronExpression: "0 10 * * *",
|
|
signingMode: "bearer",
|
|
replayWindowSec: "300",
|
|
},
|
|
"America/Chicago",
|
|
);
|
|
|
|
expect(patch).toEqual({
|
|
label: "Daily label edit",
|
|
cronExpression: "0 10 * * *",
|
|
timezone: "UTC",
|
|
});
|
|
});
|
|
|
|
it("falls back to the local timezone when a schedule trigger has none", () => {
|
|
const patch = buildRoutineTriggerPatch(
|
|
makeScheduleTrigger({ timezone: null }),
|
|
{
|
|
label: "",
|
|
cronExpression: "15 9 * * 1-5",
|
|
signingMode: "bearer",
|
|
replayWindowSec: "300",
|
|
},
|
|
"America/Chicago",
|
|
);
|
|
|
|
expect(patch).toEqual({
|
|
label: null,
|
|
cronExpression: "15 9 * * 1-5",
|
|
timezone: "America/Chicago",
|
|
});
|
|
});
|
|
});
|