


















@@ -6,7 +6,11 @@ import path from "node:path";
66import { afterAll, afterEach, beforeAll, beforeEach, vi } from "vitest";
77import { clearAllBootstrapSnapshots } from "../../../src/agents/bootstrap-cache.js";
88import { clearSessionStoreCacheForTest } from "../../../src/config/sessions/store.js";
9-import { createCronServiceState, type CronServiceDeps } from "../../../src/cron/service/state.js";
9+import type { CronServiceDeps } from "../../../src/cron/service/state.js";
10+import {
11+createDeferred,
12+createRunningCronServiceState,
13+} from "../../../src/cron/service.test-harness.js";
1014import type { CronJob, CronJobState } from "../../../src/cron/types.js";
1115import { resetAgentRunContextForTest } from "../../../src/infra/agent-events.js";
1216import {
@@ -64,38 +68,7 @@ export function setupCronRegressionFixtures(options?: { prefix?: string; baseTim
6468};
6569}
667067-export function createDeferred<T>() {
68-let resolve!: (value: T) => void;
69-let reject!: (reason?: unknown) => void;
70-const promise = new Promise<T>((res, rej) => {
71-resolve = res;
72-reject = rej;
73-});
74-return { promise, resolve, reject };
75-}
76-77-export function createRunningCronServiceState(params: {
78-storePath: string;
79-log: CronServiceDeps["log"];
80-nowMs: () => number;
81-jobs: CronJob[];
82-}) {
83-const state = createCronServiceState({
84-cronEnabled: true,
85-storePath: params.storePath,
86-log: params.log,
87-nowMs: params.nowMs,
88-enqueueSystemEvent: vi.fn(),
89-requestHeartbeat: vi.fn(),
90-runIsolatedAgentJob: vi.fn().mockResolvedValue({ status: "ok", summary: "ok" }),
91-});
92-state.running = true;
93-state.store = {
94-version: 1,
95-jobs: params.jobs,
96-};
97-return state;
98-}
71+export { createDeferred, createRunningCronServiceState };
997210073export function topOfHourOffsetMs(jobId: string) {
10174const digest = crypto.createHash("sha256").update(jobId).digest();
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。