Files
openclaw/src/auto-reply/reply/session-updates.test.ts
2026-04-10 18:14:14 +01:00

109 lines
3.4 KiB
TypeScript

import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
const {
buildWorkspaceSkillSnapshotMock,
ensureSkillsWatcherMock,
getSkillsSnapshotVersionMock,
shouldRefreshSnapshotForVersionMock,
getRemoteSkillEligibilityMock,
resolveAgentConfigMock,
resolveSessionAgentIdMock,
resolveAgentIdFromSessionKeyMock,
} = vi.hoisted(() => ({
buildWorkspaceSkillSnapshotMock: vi.fn(() => ({ prompt: "", skills: [], resolvedSkills: [] })),
ensureSkillsWatcherMock: vi.fn(),
getSkillsSnapshotVersionMock: vi.fn(() => 0),
shouldRefreshSnapshotForVersionMock: vi.fn(() => 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("../../agents/skills.js", () => ({
buildWorkspaceSkillSnapshot: buildWorkspaceSkillSnapshotMock,
}));
vi.mock("../../agents/skills/refresh.js", () => ({
ensureSkillsWatcher: ensureSkillsWatcherMock,
getSkillsSnapshotVersion: getSkillsSnapshotVersionMock,
shouldRefreshSnapshotForVersion: shouldRefreshSnapshotForVersionMock,
}));
vi.mock("../../config/sessions.js", () => ({
updateSessionStore: vi.fn(),
resolveSessionFilePath: vi.fn(),
resolveSessionFilePathOptions: vi.fn(),
}));
vi.mock("../../infra/skills-remote.js", () => ({
getRemoteSkillEligibility: getRemoteSkillEligibilityMock,
}));
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: "/tmp/workspace",
cfg: {
agents: {
list: [{ id: "writer", default: true }],
},
},
});
expect(resolveSessionAgentIdMock).toHaveBeenCalledWith({
sessionKey: "main",
config: {
agents: {
list: [{ id: "writer", default: true }],
},
},
});
expect(buildWorkspaceSkillSnapshotMock).toHaveBeenCalledWith(
"/tmp/workspace",
expect.objectContaining({ agentId: "writer" }),
);
expect(resolveAgentIdFromSessionKeyMock).not.toHaveBeenCalled();
});
});