import { describe, expect, it } from "vitest"; import type { RoutineTrigger } from "@paperclipai/shared"; import { buildRoutineTriggerPatch } from "./routine-trigger-patch"; function makeScheduleTrigger(overrides: Partial = {}): 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", }); }); });