Files
openclaw/src/auto-reply/reply/session-updates.test.ts
2026-05-29 17:35:02 +01:00

119 lines
3.7 KiB
TypeScript

import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
const TEST_WORKSPACE_DIR = "/tmp/workspace";
const {
buildWorkspaceSkillSnapshotMock,
ensureSkillsWatcherMock,
getSkillsSnapshotVersionMock,
shouldRefreshSnapshotForVersionMock,
getRemoteSkillEligibilityMock,
resolveAgentConfigMock,
resolveSessionAgentIdMock,
resolveAgentIdFromSessionKeyMock,
} = vi.hoisted(() => ({
buildWorkspaceSkillSnapshotMock: vi.fn((..._args: unknown[]) => ({
prompt: "",
skills: [] as unknown[],
resolvedSkills: [] as unknown[],
})),
ensureSkillsWatcherMock: vi.fn(),
getSkillsSnapshotVersionMock: vi.fn(() => 0),
shouldRefreshSnapshotForVersionMock: vi.fn((_cached?: number, _next?: number) => false),
getRemoteSkillEligibilityMock: vi.fn(() => ({
platforms: [],
hasBin: () => false,
hasAnyBin: () => false,
})),
resolveAgentConfigMock: vi.fn(() => undefined),
resolveSessionAgentIdMock: vi.fn(() => "writer"),
resolveAgentIdFromSessionKeyMock: vi.fn(() => "main"),
}));
vi.mock("../../agents/agent-scope.js", () => ({
resolveAgentConfig: resolveAgentConfigMock,
resolveSessionAgentId: resolveSessionAgentIdMock,
}));
vi.mock("../../skills/runtime/remote.js", () => ({
getRemoteSkillEligibility: getRemoteSkillEligibilityMock,
}));
vi.mock("../../skills/loading/workspace.js", () => ({
buildWorkspaceSkillSnapshot: buildWorkspaceSkillSnapshotMock,
}));
vi.mock("../../skills/runtime/refresh.js", () => ({
ensureSkillsWatcher: ensureSkillsWatcherMock,
}));
vi.mock("../../skills/runtime/refresh-state.js", () => ({
getSkillsSnapshotVersion: getSkillsSnapshotVersionMock,
shouldRefreshSnapshotForVersion: shouldRefreshSnapshotForVersionMock,
}));
vi.mock("../../config/sessions.js", () => ({
updateSessionStore: vi.fn(),
resolveSessionFilePath: vi.fn(),
resolveSessionFilePathOptions: vi.fn(),
}));
vi.mock("../../routing/session-key.js", () => ({
normalizeAgentId: (id: string) => id,
normalizeMainKey: (key?: string) => key ?? "main",
resolveAgentIdFromSessionKey: resolveAgentIdFromSessionKeyMock,
}));
const { ensureSkillSnapshot } = await import("./session-updates.js");
describe("ensureSkillSnapshot", () => {
beforeEach(() => {
vi.clearAllMocks();
buildWorkspaceSkillSnapshotMock.mockReturnValue({ prompt: "", skills: [], resolvedSkills: [] });
getSkillsSnapshotVersionMock.mockReturnValue(0);
shouldRefreshSnapshotForVersionMock.mockReturnValue(false);
getRemoteSkillEligibilityMock.mockReturnValue({
platforms: [],
hasBin: () => false,
hasAnyBin: () => false,
});
resolveAgentConfigMock.mockReturnValue(undefined);
resolveSessionAgentIdMock.mockReturnValue("writer");
resolveAgentIdFromSessionKeyMock.mockReturnValue("main");
});
afterEach(() => {
vi.unstubAllEnvs();
});
it("uses config-aware session agent resolution for legacy session keys", async () => {
vi.stubEnv("OPENCLAW_TEST_FAST", "0");
await ensureSkillSnapshot({
sessionKey: "main",
isFirstTurnInSession: false,
workspaceDir: TEST_WORKSPACE_DIR,
cfg: {
agents: {
list: [{ id: "writer", default: true }],
},
},
});
expect(resolveSessionAgentIdMock).toHaveBeenCalledWith({
sessionKey: "main",
config: {
agents: {
list: [{ id: "writer", default: true }],
},
},
});
expect(buildWorkspaceSkillSnapshotMock).toHaveBeenCalledTimes(1);
const [[workspaceDir, snapshotParams]] = buildWorkspaceSkillSnapshotMock.mock
.calls as unknown as Array<[string, { agentId?: string }]>;
expect(workspaceDir).toBe(TEST_WORKSPACE_DIR);
expect(snapshotParams.agentId).toBe("writer");
expect(resolveAgentIdFromSessionKeyMock).not.toHaveBeenCalled();
});
});