import { test, expect, vi } from "vitest"; import { SessionBridge } from "../src/bridge/session-bridge.js"; function fakeRpc() { const sent: any[] = []; let evcb: any; return { rpc: { send: (c: any) => sent.push(c), on: (_: any, cb: any) => { evcb = cb; }, request: vi.fn(), } as any, sent, fire: (m: any) => evcb(m), }; } test("respond forwards the structured schema-linking tables payload to Pi verbatim", () => { const { rpc, sent, fire } = fakeRpc(); const b = new SessionBridge(rpc); // Pi emits the ui request with its own RPC id ("pi-123"); the descriptor in the title // carries the gate's own id ("u7"), matching the structured response below. fire({ type: "extension_ui_request", id: "pi-123", method: "input", title: JSON.stringify({ id: "u7", widget: "schema-linking" }) }); const resp = { id: "u7", kind: "schema-linking", tables: [{ id: "t1", enacted: true, columns: ["cod_paz"] }] }; b.respond(resp); // Correlates on Pi's own id, and JSON.stringifies the whole structured object untouched. expect(sent.at(-1)).toEqual({ type: "extension_ui_response", id: "pi-123", value: JSON.stringify(resp), }); expect(b.pendingWidget()).toBeNull(); });