mirror of
https://github.com/openclaw/openclaw.git
synced 2026-06-06 06:32:54 +00:00
119 lines
3.7 KiB
TypeScript
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();
|
|
});
|
|
});
|