1import { describe, expect, it } from "vite-plus/test";
2import * as Schema from "effect/Schema";
3
4import {
5 MIN_SCHEDULED_TASK_INTERVAL_MS,
6 ScheduledTaskSchedule,
7 ScheduledTaskUpsertSchedule,
8} from "./scheduledTask.ts";
9
10const decodeSchedule = Schema.decodeUnknownSync(ScheduledTaskSchedule);
11const decodeUpsertSchedule = Schema.decodeUnknownSync(ScheduledTaskUpsertSchedule);
12
13describe("ScheduledTaskSchedule", () => {
14 it("keeps legacy sub-minute persisted schedules readable", () => {
15 expect(
16 decodeSchedule({
17 type: "interval",
18 everyMs: MIN_SCHEDULED_TASK_INTERVAL_MS - 1,
19 }),
20 ).toEqual({
21 type: "interval",
22 everyMs: MIN_SCHEDULED_TASK_INTERVAL_MS - 1,
23 });
24 });
25
26 it("still rejects corrupt non-positive persisted intervals", () => {
27 expect(() => decodeSchedule({ type: "interval", everyMs: 0 })).toThrow();
28 });
29});
30
31describe("ScheduledTaskUpsertSchedule", () => {
32 it("accepts interval schedules at the one-minute minimum", () => {
33 expect(
34 decodeUpsertSchedule({
35 type: "interval",
36 everyMs: MIN_SCHEDULED_TASK_INTERVAL_MS,
37 }),
38 ).toEqual({
39 type: "interval",
40 everyMs: MIN_SCHEDULED_TASK_INTERVAL_MS,
41 });
42 });
43
44 it("rejects interval schedules more frequent than once per minute", () => {
45 expect(() =>
46 decodeUpsertSchedule({
47 type: "interval",
48 everyMs: MIN_SCHEDULED_TASK_INTERVAL_MS - 1,
49 }),
50 ).toThrow();
51 });
52});