openclaw/src/cron/isolated-agent/run.payload-fallbacks.test.ts
2026-03-02 07:13:10 +00:00

90 lines
2.6 KiB
TypeScript

import { afterEach, beforeEach, describe, expect, it } from "vitest";
import {
clearFastTestEnv,
loadRunCronIsolatedAgentTurn,
makeCronSession,
resolveAgentModelFallbacksOverrideMock,
resolveCronSessionMock,
resetRunCronIsolatedAgentTurnHarness,
restoreFastTestEnv,
runWithModelFallbackMock,
} from "./run.test-harness.js";
const runCronIsolatedAgentTurn = await loadRunCronIsolatedAgentTurn();
function makePayloadJob(overrides?: Record<string, unknown>) {
return {
id: "test-job",
name: "Test Job",
schedule: { kind: "cron", expr: "0 9 * * *", tz: "UTC" },
sessionTarget: "isolated",
payload: { kind: "agentTurn", message: "test" },
...overrides,
} as never;
}
function makePayloadParams(overrides?: Record<string, unknown>) {
return {
cfg: {},
deps: {} as never,
job: makePayloadJob(overrides?.job as Record<string, unknown> | undefined),
message: "test",
sessionKey: "cron:test",
...overrides,
};
}
// ---------- tests ----------
describe("runCronIsolatedAgentTurn — payload.fallbacks", () => {
let previousFastTestEnv: string | undefined;
beforeEach(() => {
previousFastTestEnv = clearFastTestEnv();
resetRunCronIsolatedAgentTurnHarness();
resolveCronSessionMock.mockReturnValue(makeCronSession());
});
afterEach(() => {
restoreFastTestEnv(previousFastTestEnv);
});
it.each([
{
name: "passes payload.fallbacks as fallbacksOverride when defined",
payload: {
kind: "agentTurn",
message: "test",
fallbacks: ["anthropic/claude-sonnet-4-6", "openai/gpt-5"],
},
expectedFallbacks: ["anthropic/claude-sonnet-4-6", "openai/gpt-5"],
},
{
name: "falls back to agent-level fallbacks when payload.fallbacks is undefined",
payload: { kind: "agentTurn", message: "test" },
agentFallbacks: ["openai/gpt-4o"],
expectedFallbacks: ["openai/gpt-4o"],
},
{
name: "payload.fallbacks=[] disables fallbacks even when agent config has them",
payload: { kind: "agentTurn", message: "test", fallbacks: [] },
agentFallbacks: ["openai/gpt-4o"],
expectedFallbacks: [],
},
])("$name", async ({ payload, agentFallbacks, expectedFallbacks }) => {
if (agentFallbacks) {
resolveAgentModelFallbacksOverrideMock.mockReturnValue(agentFallbacks);
}
const result = await runCronIsolatedAgentTurn(
makePayloadParams({
job: makePayloadJob({ payload }),
}),
);
expect(result.status).toBe("ok");
expect(runWithModelFallbackMock).toHaveBeenCalledOnce();
expect(runWithModelFallbackMock.mock.calls[0][0].fallbacksOverride).toEqual(expectedFallbacks);
});
});