import { describe, expect, it } from "bun:test"; import { PREVIEW_FLOW_TRANSPORT_SOURCE, previewFlowOpenRequestSchema, previewFlowOpenResultSchema, } from "./preview-flow-transport"; describe("preview flow transport protocol", () => { it("parses inline flow open requests", () => { const request = { source: PREVIEW_FLOW_TRANSPORT_SOURCE, type: "preview.flow.open.request", requestId: "req_123", command: { kind: "open", flow: { definition: { blocks: [], config: {}, presenter: null, }, theme: { css: ":root {}", themeRuntimeArtifactId: "artifact_123", themeVersionId: "theme_123", }, }, flowHandleId: "handle_123", metadata: { tags: { source: "protocol-test" } }, hideCloseButton: true, }, } as const; expect(previewFlowOpenRequestSchema.parse(request)).toEqual(request); }); it("rejects undefined inline definitions", () => { expect(() => previewFlowOpenRequestSchema.parse({ source: PREVIEW_FLOW_TRANSPORT_SOURCE, type: "preview.flow.open.request", requestId: "req_123", command: { kind: "open", flow: { definition: undefined, }, }, }), ).toThrow(); }); it("rejects unknown inline flow fields", () => { expect( previewFlowOpenRequestSchema.safeParse({ source: PREVIEW_FLOW_TRANSPORT_SOURCE, type: "preview.flow.open.request", requestId: "req_123", command: { kind: "open", flow: { definition: { blocks: [] }, unknown: true, }, }, }).success, ).toBe(false); }); it("parses success and failure results", () => { expect( previewFlowOpenResultSchema.parse({ source: PREVIEW_FLOW_TRANSPORT_SOURCE, type: "preview.flow.open.result", requestId: "req_123", ok: true, result: { flowHandleId: "handle_123", }, }), ).toEqual({ source: PREVIEW_FLOW_TRANSPORT_SOURCE, type: "preview.flow.open.result", requestId: "req_123", ok: true, result: { flowHandleId: "handle_123", }, }); expect( previewFlowOpenResultSchema.parse({ source: PREVIEW_FLOW_TRANSPORT_SOURCE, type: "preview.flow.open.result", requestId: "req_123", ok: false, error: { code: "DISPATCH_FAILED", message: "Preview dispatch failed", }, }), ).toMatchObject({ ok: false, error: { code: "DISPATCH_FAILED" }, }); }); });