| 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<typeof vi.fn>; |
| } { |
| const request = vi.fn(async (method: string, params: Record<string, unknown>) => { |
| 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(); |
| }); |
| }); |
|
|