Skip to content

Commit a5ed3f2

Browse files
committed
test: tighten cron timer task ledger assertions
1 parent d34dfab commit a5ed3f2

1 file changed

Lines changed: 20 additions & 7 deletions

File tree

src/cron/service/timer.test.ts

Lines changed: 20 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -80,11 +80,23 @@ describe("cron service timer seam coverage", () => {
8080
expect(job.state.runningAtMs).toBeUndefined();
8181
expect(job.state.nextRunAtMs).toBe(now + 60_000);
8282
const task = findTaskByRunId(`cron:main-heartbeat-job:${now}`);
83-
expect(task).toMatchObject({
84-
runtime: "cron",
85-
status: "succeeded",
86-
endedAt: now,
87-
});
83+
if (!task) {
84+
throw new Error("expected cron task ledger record");
85+
}
86+
expect(task.runtime).toBe("cron");
87+
expect(task.sourceId).toBe("main-heartbeat-job");
88+
expect(task.ownerKey).toBe("");
89+
expect(task.scopeKind).toBe("system");
90+
expect(task.childSessionKey).toBe("agent:main:main");
91+
expect(task.runId).toBe(`cron:main-heartbeat-job:${now}`);
92+
expect(task.label).toBe("main heartbeat job");
93+
expect(task.task).toBe("main heartbeat job");
94+
expect(task.status).toBe("succeeded");
95+
expect(task.deliveryStatus).toBe("not_applicable");
96+
expect(task.notifyPolicy).toBe("silent");
97+
expect(task.startedAt).toBe(now);
98+
expect(task.lastEventAt).toBe(now);
99+
expect(task.endedAt).toBe(now);
88100
expect(task?.cleanupAfter).toBe(now + 7 * 24 * 60 * 60_000);
89101

90102
const delays = timeoutSpy.mock.calls
@@ -101,6 +113,7 @@ describe("cron service timer seam coverage", () => {
101113
const now = Date.parse("2026-03-23T12:00:00.000Z");
102114
const enqueueSystemEvent = vi.fn();
103115
const requestHeartbeat = vi.fn();
116+
const ledgerError = new Error("disk full");
104117

105118
await writeCronStoreSnapshot({
106119
storePath,
@@ -110,7 +123,7 @@ describe("cron service timer seam coverage", () => {
110123
const createTaskRecordSpy = vi
111124
.spyOn(detachedTaskRuntime, "createRunningTaskRun")
112125
.mockImplementation(() => {
113-
throw new Error("disk full");
126+
throw ledgerError;
114127
});
115128

116129
const state = createCronServiceState({
@@ -126,7 +139,7 @@ describe("cron service timer seam coverage", () => {
126139
await onTimer(state);
127140

128141
expect(logger.warn).toHaveBeenCalledWith(
129-
expect.objectContaining({ jobId: "main-heartbeat-job" }),
142+
{ jobId: "main-heartbeat-job", error: ledgerError },
130143
"cron: failed to create task ledger record",
131144
);
132145
expect(enqueueSystemEvent).toHaveBeenCalledWith("heartbeat seam tick", {

0 commit comments

Comments
 (0)