fix(test): restore bundled loader coverage

This commit is contained in:
Peter Steinberger
2026-04-06 18:14:37 +01:00
parent 96b39e01b4
commit 348cd6b17a
15 changed files with 207 additions and 58 deletions

View File

@@ -71,7 +71,7 @@ describe("CronService store load", () => {
const jobs = await cron.list({ includeDisabled: true });
expect(jobs[0]?.state.lastStatus).toBe("skipped");
expect(jobs[0]?.state.lastError).toMatch(/main job requires/i);
expect(jobs[0]?.state.lastError).toMatch(/main cron jobs require payload\.kind/i);
cron.stop();
});

View File

@@ -367,7 +367,7 @@ type PreparedManualRun =
| {
ok: true;
ran: false;
reason: "already-running" | "not-due";
reason: "already-running" | "not-due" | "invalid-spec";
}
| {
ok: true;
@@ -399,6 +399,48 @@ function createCronTaskRunId(jobId: string, startedAt: number): string {
return `cron:${jobId}:${startedAt}`;
}
async function skipInvalidPersistedManualRun(params: {
state: CronServiceState;
job: CronJob;
mode?: "due" | "force";
error: unknown;
}) {
const endedAt = params.state.deps.nowMs();
const errorText = normalizeCronRunErrorText(params.error);
const shouldDelete = applyJobResult(
params.state,
params.job,
{
status: "skipped",
error: errorText,
startedAt: endedAt,
endedAt,
},
{ preserveSchedule: params.mode === "force" },
);
emit(params.state, {
jobId: params.job.id,
action: "finished",
status: "skipped",
error: errorText,
runAtMs: endedAt,
durationMs: params.job.state.lastDurationMs,
nextRunAtMs: params.job.state.nextRunAtMs,
deliveryStatus: params.job.state.lastDeliveryStatus,
deliveryError: params.job.state.lastDeliveryError,
});
if (shouldDelete && params.state.store) {
params.state.store.jobs = params.state.store.jobs.filter((entry) => entry.id !== params.job.id);
emit(params.state, { jobId: params.job.id, action: "removed" });
}
recomputeNextRunsForMaintenance(params.state, { recomputeExpired: true });
await persist(params.state);
armTimer(params.state);
}
function tryCreateManualTaskRun(params: {
state: CronServiceState;
job: CronJob;
@@ -489,7 +531,12 @@ async function inspectManualRunPreflight(
// persist does not block manual triggers for up to STUCK_RUN_MS (#17554).
recomputeNextRunsForMaintenance(state);
const job = findJobOrThrow(state, id);
assertSupportedJobSpec(job);
try {
assertSupportedJobSpec(job);
} catch (error) {
await skipInvalidPersistedManualRun({ state, job, mode, error });
return { ok: true, ran: false, reason: "invalid-spec" as const };
}
if (typeof job.state.runningAtMs === "number") {
return { ok: true, ran: false, reason: "already-running" as const };
}