diff --git a/src/auto-reply/reply/commands-export-session.test.ts b/src/auto-reply/reply/commands-export-session.test.ts index 0253b8c91be..6721247e896 100644 --- a/src/auto-reply/reply/commands-export-session.test.ts +++ b/src/auto-reply/reply/commands-export-session.test.ts @@ -1,33 +1,26 @@ import { beforeEach, describe, expect, it, vi } from "vitest"; import type { HandleCommandsParams } from "./commands-types.js"; -const hoisted = vi.hoisted(() => ({ - resolveDefaultSessionStorePathMock: vi.fn(() => "/tmp/target-store/sessions.json"), - resolveSessionFilePathMock: vi.fn(() => "/tmp/target-store/session.jsonl"), - resolveSessionFilePathOptionsMock: vi.fn( - (params: { agentId: string; storePath: string }) => params, - ), - loadSessionStoreMock: vi.fn(() => ({ - "agent:target:session": { - sessionId: "session-1", - updatedAt: 1, - }, - })), - resolveCommandsSystemPromptBundleMock: vi.fn(async () => ({ - systemPrompt: "system prompt", - tools: [], - skillsPrompt: "", - bootstrapFiles: [], - injectedFiles: [], - sandboxRuntime: { sandboxed: false, mode: "off" }, - })), - getEntriesMock: vi.fn(() => []), - getHeaderMock: vi.fn(() => null), - getLeafIdMock: vi.fn(() => null), - writeFileSyncMock: vi.fn(), - mkdirSyncMock: vi.fn(), - existsSyncMock: vi.fn(() => true), -})); +const hoisted = await vi.hoisted(async () => { + const { createExportCommandSessionMocks } = await import("./commands-export-test-mocks.js"); + return { + ...createExportCommandSessionMocks(vi), + resolveCommandsSystemPromptBundleMock: vi.fn(async () => ({ + systemPrompt: "system prompt", + tools: [], + skillsPrompt: "", + bootstrapFiles: [], + injectedFiles: [], + sandboxRuntime: { sandboxed: false, mode: "off" }, + })), + getEntriesMock: vi.fn(() => []), + getHeaderMock: vi.fn(() => null), + getLeafIdMock: vi.fn(() => null), + writeFileSyncMock: vi.fn(), + mkdirSyncMock: vi.fn(), + existsSyncMock: vi.fn(() => true), + }; +}); vi.mock("@mariozechner/pi-coding-agent", () => ({ SessionManager: { diff --git a/src/auto-reply/reply/commands-export-test-mocks.ts b/src/auto-reply/reply/commands-export-test-mocks.ts new file mode 100644 index 00000000000..c43d35533bf --- /dev/null +++ b/src/auto-reply/reply/commands-export-test-mocks.ts @@ -0,0 +1,19 @@ +import type { vi } from "vitest"; + +type ViLike = Pick; + +export function createExportCommandSessionMocks(viInstance: ViLike) { + return { + resolveDefaultSessionStorePathMock: viInstance.fn(() => "/tmp/target-store/sessions.json"), + resolveSessionFilePathMock: viInstance.fn(() => "/tmp/target-store/session.jsonl"), + resolveSessionFilePathOptionsMock: viInstance.fn( + (params: { agentId: string; storePath: string }) => params, + ), + loadSessionStoreMock: viInstance.fn(() => ({ + "agent:target:session": { + sessionId: "session-1", + updatedAt: 1, + }, + })), + }; +} diff --git a/src/auto-reply/reply/commands-export-trajectory.test.ts b/src/auto-reply/reply/commands-export-trajectory.test.ts index a35c417a254..76b962c3fc5 100644 --- a/src/auto-reply/reply/commands-export-trajectory.test.ts +++ b/src/auto-reply/reply/commands-export-trajectory.test.ts @@ -4,36 +4,29 @@ import path from "node:path"; import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; import type { HandleCommandsParams } from "./commands-types.js"; -const hoisted = vi.hoisted(() => ({ - resolveDefaultSessionStorePathMock: vi.fn(() => "/tmp/target-store/sessions.json"), - resolveSessionFilePathMock: vi.fn(() => "/tmp/target-store/session.jsonl"), - resolveSessionFilePathOptionsMock: vi.fn( - (params: { agentId: string; storePath: string }) => params, - ), - loadSessionStoreMock: vi.fn(() => ({ - "agent:target:session": { - sessionId: "session-1", - updatedAt: 1, - }, - })), - exportTrajectoryBundleMock: vi.fn(() => ({ - outputDir: "/tmp/workspace/.openclaw/trajectory-exports/openclaw-trajectory-session", - manifest: { - eventCount: 7, - runtimeEventCount: 3, - transcriptEventCount: 4, - }, - events: [{ type: "context.compiled" }], - runtimeFile: "/tmp/target-store/session.trajectory.jsonl", - supplementalFiles: ["metadata.json", "artifacts.json", "prompts.json"], - })), - resolveDefaultTrajectoryExportDirMock: vi.fn( - () => "/tmp/workspace/.openclaw/trajectory-exports/openclaw-trajectory-session", - ), - existsSyncMock: vi.fn((file: fs.PathLike, actualExistsSync: (path: fs.PathLike) => boolean) => - actualExistsSync(file), - ), -})); +const hoisted = await vi.hoisted(async () => { + const { createExportCommandSessionMocks } = await import("./commands-export-test-mocks.js"); + return { + ...createExportCommandSessionMocks(vi), + exportTrajectoryBundleMock: vi.fn(() => ({ + outputDir: "/tmp/workspace/.openclaw/trajectory-exports/openclaw-trajectory-session", + manifest: { + eventCount: 7, + runtimeEventCount: 3, + transcriptEventCount: 4, + }, + events: [{ type: "context.compiled" }], + runtimeFile: "/tmp/target-store/session.trajectory.jsonl", + supplementalFiles: ["metadata.json", "artifacts.json", "prompts.json"], + })), + resolveDefaultTrajectoryExportDirMock: vi.fn( + () => "/tmp/workspace/.openclaw/trajectory-exports/openclaw-trajectory-session", + ), + existsSyncMock: vi.fn((file: fs.PathLike, actualExistsSync: (path: fs.PathLike) => boolean) => + actualExistsSync(file), + ), + }; +}); vi.mock("../../config/sessions/paths.js", () => ({ resolveDefaultSessionStorePath: hoisted.resolveDefaultSessionStorePathMock,