


























@@ -5,6 +5,8 @@ import {
55createNoopLogger,
66withCronServiceForTest,
77} from "./service.test-harness.js";
8+import { createCronServiceState } from "./service/state.js";
9+import { executeJobCore } from "./service/timer.js";
810import type { CronJob } from "./types.js";
9111012const noopLogger = createNoopLogger();
@@ -60,6 +62,39 @@ describe("CronService", () => {
6062});
61636264it("skips main jobs with empty systemEvent text", async () => {
65+const enqueueSystemEvent = vi.fn();
66+const requestHeartbeat = vi.fn();
67+const state = createCronServiceState({
68+cronEnabled: true,
69+storePath: "cron-empty-systemevent-test.json",
70+log: noopLogger,
71+nowMs: () => Date.now(),
72+ enqueueSystemEvent,
73+ requestHeartbeat,
74+runIsolatedAgentJob: vi.fn(async () => ({ status: "ok" as const })),
75+});
76+const job: CronJob = {
77+id: "empty-systemevent-test",
78+name: "empty systemEvent test",
79+enabled: true,
80+schedule: { kind: "at", at: "2025-12-13T00:00:01.000Z" },
81+sessionTarget: "main",
82+wakeMode: "now",
83+payload: { kind: "systemEvent", text: " " },
84+createdAtMs: Date.now(),
85+updatedAtMs: Date.now(),
86+state: {},
87+};
88+89+const result = await executeJobCore(state, job);
90+91+expect(result.status).toBe("skipped");
92+expect(result.error).toMatch(/non-empty/i);
93+expect(enqueueSystemEvent).not.toHaveBeenCalled();
94+expect(requestHeartbeat).not.toHaveBeenCalled();
95+});
96+97+it("drops persisted main jobs with empty systemEvent text before they run", async () => {
6398await withCronService(true, async ({ cron, enqueueSystemEvent, requestHeartbeat }) => {
6499const atMs = Date.parse("2025-12-13T00:00:01.000Z");
65100await cron.add({
@@ -77,9 +112,8 @@ describe("CronService", () => {
77112expect(enqueueSystemEvent).not.toHaveBeenCalled();
78113expect(requestHeartbeat).not.toHaveBeenCalled();
7911480-const job = await waitForFirstJob(cron, (current) => current?.state.lastStatus === "skipped");
81-expect(job?.state.lastStatus).toBe("skipped");
82-expect(job?.state.lastError).toMatch(/non-empty/i);
115+const job = await waitForFirstJob(cron, (current) => current === undefined);
116+expect(job).toBeUndefined();
83117});
84118});
85119此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。