import { describe, expect, it, vi } from "vitest"; import type { GatewayClient } from "../gateway/client.js"; import { parseSessionMeta, resolveSessionKey } from "./session-mapper.js"; function createGateway(resolveLabelKey = "agent:main:label"): { gateway: GatewayClient; request: ReturnType; } { const request = vi.fn(async (method: string, params: Record) => { if (method === "sessions.resolve" && "label" in params) { return { ok: true, key: resolveLabelKey }; } if (method === "sessions.resolve" && "key" in params) { return { ok: true, key: params.key as string }; } return { ok: true }; }); return { gateway: { request } as unknown as GatewayClient, request, }; } describe("acp session mapper", () => { it("prefers explicit sessionLabel over sessionKey", async () => { const { gateway, request } = createGateway(); const meta = parseSessionMeta({ sessionLabel: "support", sessionKey: "agent:main:main" }); const key = await resolveSessionKey({ meta, fallbackKey: "acp:fallback", gateway, opts: {}, }); expect(key).toBe("agent:main:label"); expect(request).toHaveBeenCalledTimes(1); expect(request).toHaveBeenCalledWith("sessions.resolve", { label: "support" }); }); it("lets meta sessionKey override default label", async () => { const { gateway, request } = createGateway(); const meta = parseSessionMeta({ sessionKey: "agent:main:override" }); const key = await resolveSessionKey({ meta, fallbackKey: "acp:fallback", gateway, opts: { defaultSessionLabel: "default-label" }, }); expect(key).toBe("agent:main:override"); expect(request).not.toHaveBeenCalled(); }); });