Skip to content

Commit bb22882

Browse files
committed
test(cron): speed up isolated fallback tests
1 parent 53704b2 commit bb22882

4 files changed

Lines changed: 28 additions & 8 deletions

File tree

src/cron/isolated-agent/run.fast-mode.test.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ function mockSuccessfulModelFallback() {
2525
return {
2626
result: {
2727
payloads: [{ text: "ok" }],
28-
meta: { agentMeta: { usage: { input: 10, output: 20 } } },
28+
meta: { agentMeta: {} },
2929
},
3030
provider,
3131
model,
@@ -126,7 +126,7 @@ async function runFastModeCase(params: {
126126
}
127127

128128
describe("runCronIsolatedAgentTurn — fast mode", () => {
129-
setupRunCronIsolatedAgentTurnSuite();
129+
setupRunCronIsolatedAgentTurnSuite({ fast: true });
130130

131131
it("passes config-driven fast mode into embedded cron runs", async () => {
132132
await runFastModeCase({

src/cron/isolated-agent/run.payload-fallbacks.test.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import {
99
loadRunCronIsolatedAgentTurn,
1010
mockRunCronFallbackPassthrough,
1111
resolveConfiguredModelRefMock,
12+
resolveCliRuntimeExecutionProviderMock,
1213
resolveAgentModelFallbacksOverrideMock,
1314
runCliAgentMock,
1415
runEmbeddedAgentMock,
@@ -50,7 +51,7 @@ function requireEmbeddedRunRequest(): {
5051
}
5152

5253
describe("runCronIsolatedAgentTurn — payload.fallbacks", () => {
53-
setupRunCronIsolatedAgentTurnSuite();
54+
setupRunCronIsolatedAgentTurnSuite({ fast: true });
5455

5556
it.each([
5657
{
@@ -92,13 +93,16 @@ describe("runCronIsolatedAgentTurn — payload.fallbacks", () => {
9293

9394
it("plans Anthropic fallbacks canonically while executing compatible attempts through Claude CLI", async () => {
9495
isCliProviderMock.mockImplementation((provider: string) => provider === "claude-cli");
96+
resolveCliRuntimeExecutionProviderMock.mockImplementation(
97+
({ provider }: { provider: string }) => (provider === "anthropic" ? "claude-cli" : undefined),
98+
);
9599
resolveConfiguredModelRefMock.mockReturnValue({
96100
provider: "anthropic",
97101
model: "claude-opus-4-6",
98102
});
99103
runCliAgentMock.mockResolvedValue({
100104
payloads: [{ text: "fallback ok" }],
101-
meta: { agentMeta: { usage: { input: 10, output: 20 } } },
105+
meta: { agentMeta: {} },
102106
});
103107
runWithModelFallbackMock.mockImplementation(async ({ provider, model, run }) => {
104108
const firstResult = await run(provider, model);

src/cron/isolated-agent/run.suite-helpers.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,13 @@ import {
88
restoreFastTestEnv,
99
} from "./run.test-harness.js";
1010

11-
export function setupRunCronIsolatedAgentTurnSuite() {
11+
export function setupRunCronIsolatedAgentTurnSuite(options?: { fast?: boolean }) {
1212
let previousFastTestEnv: string | undefined;
1313
beforeEach(() => {
1414
previousFastTestEnv = clearFastTestEnv();
15+
if (options?.fast) {
16+
process.env.OPENCLAW_TEST_FAST = "1";
17+
}
1518
resetRunCronIsolatedAgentTurnHarness();
1619
resolveCronSessionMock.mockReturnValue(makeCronSession());
1720
});

src/cron/isolated-agent/run.test-harness.ts

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ export const resolveAgentModelFallbacksOverrideMock = createMock();
4646
export const resolveAgentSkillsFilterMock = createMock();
4747
export const getModelRefStatusMock = createMock();
4848
export const isCliProviderMock = createMock();
49+
export const resolveCliRuntimeExecutionProviderMock = createMock();
4950
export const resolveAllowedModelRefMock = createMock();
5051
export const resolveConfiguredModelRefMock = createMock();
5152
export const resolveHooksGmailModelMock = createMock();
@@ -131,6 +132,13 @@ vi.mock("./run.runtime.js", () => ({
131132
getRemoteSkillEligibility: getRemoteSkillEligibilityMock,
132133
}));
133134

135+
vi.mock("../../agents/model-runtime-aliases.js", async () => ({
136+
...(await vi.importActual<typeof import("../../agents/model-runtime-aliases.js")>(
137+
"../../agents/model-runtime-aliases.js",
138+
)),
139+
resolveCliRuntimeExecutionProvider: resolveCliRuntimeExecutionProviderMock,
140+
}));
141+
134142
vi.mock("./run-external-content.runtime.js", () => ({
135143
buildSafeExternalPrompt: buildSafeExternalPromptMock,
136144
detectSuspiciousPatterns: detectSuspiciousPatternsMock,
@@ -296,7 +304,7 @@ function makeDefaultModelFallbackResult() {
296304
return {
297305
result: {
298306
payloads: [{ text: "test output" }],
299-
meta: { agentMeta: { usage: { input: 10, output: 20 } } },
307+
meta: { agentMeta: {} },
300308
},
301309
provider: "openai",
302310
model: "gpt-5.4",
@@ -306,7 +314,7 @@ function makeDefaultModelFallbackResult() {
306314
function makeDefaultEmbeddedResult() {
307315
return {
308316
payloads: [{ text: "test output" }],
309-
meta: { agentMeta: { usage: { input: 10, output: 20 } } },
317+
meta: { agentMeta: {} },
310318
};
311319
}
312320

@@ -379,6 +387,7 @@ function resetRunConfigMocks(): void {
379387
resolveAgentModelFallbacksOverrideMock.mockReturnValue(undefined);
380388
resolveAgentSkillsFilterMock.mockReturnValue(undefined);
381389
resolveConfiguredModelRefMock.mockReturnValue({ provider: "openai", model: "gpt-5.4" });
390+
resolveCliRuntimeExecutionProviderMock.mockReturnValue(undefined);
382391
resolveAllowedModelRefMock.mockReturnValue({ ref: { provider: "openai", model: "gpt-5.4" } });
383392
resolveHooksGmailModelMock.mockReturnValue(null);
384393
resolveThinkingDefaultMock.mockReturnValue("off");
@@ -389,7 +398,11 @@ function resetRunConfigMocks(): void {
389398
});
390399
resolveAgentTimeoutMsMock.mockReturnValue(60_000);
391400
deriveSessionTotalTokensMock.mockReturnValue(30);
392-
hasNonzeroUsageMock.mockReturnValue(true);
401+
hasNonzeroUsageMock.mockImplementation(
402+
(usage: { input?: unknown; output?: unknown } | undefined) =>
403+
(typeof usage?.input === "number" && usage.input > 0) ||
404+
(typeof usage?.output === "number" && usage.output > 0),
405+
);
393406
ensureAgentWorkspaceMock.mockResolvedValue({ dir: "/tmp/workspace" });
394407
normalizeThinkLevelMock.mockImplementation((value: unknown) => value);
395408
isThinkingLevelSupportedMock.mockReturnValue(true);

0 commit comments

Comments
 (0)