Files
openclaw/src/cron/service.issue-regressions.test-helpers.ts
2026-04-06 18:03:35 +01:00

60 lines
1.8 KiB
TypeScript

import { vi } from "vitest";
import {
createDefaultIsolatedRunner,
noopLogger,
setupCronRegressionFixtures,
createAbortAwareIsolatedRunner,
createDueIsolatedJob,
createIsolatedRegressionJob,
createRunningCronServiceState,
createDeferred,
topOfHourOffsetMs,
writeCronJobs,
writeCronStoreSnapshot,
} from "../../test/helpers/cron/service-regression-fixtures.js";
import { CronService } from "./service.js";
export type CronServiceOptions = ConstructorParameters<typeof CronService>[0];
export const setupCronIssueRegressionFixtures = () =>
setupCronRegressionFixtures({ prefix: "cron-issues-" });
export {
createAbortAwareIsolatedRunner,
createDueIsolatedJob,
createIsolatedRegressionJob,
createRunningCronServiceState,
createDeferred,
noopLogger,
topOfHourOffsetMs,
writeCronJobs,
writeCronStoreSnapshot,
};
export async function startCronForStore(params: {
storePath: string;
cronEnabled?: boolean;
enqueueSystemEvent?: CronServiceOptions["enqueueSystemEvent"];
requestHeartbeatNow?: CronServiceOptions["requestHeartbeatNow"];
runIsolatedAgentJob?: CronServiceOptions["runIsolatedAgentJob"];
onEvent?: CronServiceOptions["onEvent"];
}) {
const enqueueSystemEvent =
params.enqueueSystemEvent ?? (vi.fn() as unknown as CronServiceOptions["enqueueSystemEvent"]);
const requestHeartbeatNow =
params.requestHeartbeatNow ?? (vi.fn() as unknown as CronServiceOptions["requestHeartbeatNow"]);
const runIsolatedAgentJob = params.runIsolatedAgentJob ?? createDefaultIsolatedRunner();
const cron = new CronService({
cronEnabled: params.cronEnabled ?? true,
storePath: params.storePath,
log: noopLogger,
enqueueSystemEvent,
requestHeartbeatNow,
runIsolatedAgentJob,
...(params.onEvent ? { onEvent: params.onEvent } : {}),
});
await cron.start();
return cron;
}