Files
openclaw/src/agents/cli-runner.test-support.ts
Peter Steinberger f5aba54437 refactor(agents): split Claude live sessions by concept (#121566)
* refactor(agents): split claude-live-session into concept modules

* refactor(agents): delete duplicated live-session helpers

* fix(agents): fence live-session close during pending spawn

* chore(lint): ratchet max-lines baseline after live-session split

* style(agents): satisfy lint on live-session split modules

* fix(agents): fence live session close state

* refactor(agents): extract Claude live turn timeouts

* fix(agents): preserve exec policy after Claude live split

* test(agents): complete Claude live policy session fixture
2026-08-10 19:39:16 -07:00

73 lines
2.4 KiB
TypeScript

/** Shared CLI runner test doubles for supervisor, bootstrap, and heartbeat seams. */
import type { Mock } from "vitest";
import { beforeEach, vi } from "vitest";
import { getClaudeGeneration } from "./cli-runner/claude-live-registry.js";
import { createManagedRun, supervisorSpawnMock } from "./cli-runner/execute.test-support.js";
import { setCliRunnerPrepareTestDeps } from "./cli-runner/prepare.test-support.js";
import type { EmbeddedContextFile } from "./embedded-agent-helpers.js";
import type { WorkspaceBootstrapFile } from "./workspace.js";
export {
createManagedRun,
enqueueSystemEventMock,
requestHeartbeatMock,
supervisorSpawnMock,
} from "./cli-runner/execute.test-support.js";
// Shared CLI runner test doubles. They replace supervisor/process and bootstrap
// dependencies so CLI runner tests can assert process behavior deterministically.
type BootstrapContext = {
bootstrapFiles: WorkspaceBootstrapFile[];
contextFiles: EmbeddedContextFile[];
};
type ResolveBootstrapContextForRunMock = Mock<() => Promise<BootstrapContext>>;
const hoisted = vi.hoisted(
(): {
resolveBootstrapContextForRunMock: ResolveBootstrapContextForRunMock;
} => {
return {
resolveBootstrapContextForRunMock: vi.fn<() => Promise<BootstrapContext>>(async () => ({
bootstrapFiles: [],
contextFiles: [],
})),
};
},
);
setCliRunnerPrepareTestDeps({
makeBootstrapWarn: () => () => {},
resolveBootstrapContextForRun: hoisted.resolveBootstrapContextForRunMock,
resolveOpenClawReferencePaths: async () => ({ docsPath: null, sourcePath: null }),
});
/** Queue one successful CLI supervisor run. */
export function mockSuccessfulCliRun(stdout = "ok") {
supervisorSpawnMock.mockResolvedValueOnce(
createManagedRun({
reason: "exit",
exitCode: 0,
exitSignal: null,
durationMs: 50,
stdout,
stderr: "",
timedOut: false,
noOutputTimedOut: false,
}),
);
}
/** Restore prepare-time CLI runner test dependencies after a test overrides them. */
export function restoreCliRunnerPrepareTestDeps() {
setCliRunnerPrepareTestDeps({
makeBootstrapWarn: () => () => {},
resolveBootstrapContextForRun: hoisted.resolveBootstrapContextForRunMock,
resolveOpenClawReferencePaths: async () => ({ docsPath: null, sourcePath: null }),
getClaudeGeneration,
});
}
beforeEach(() => {
vi.unstubAllEnvs();
});