52 lines · 1.5 KB · TypeScript
RawDownload
import { describe, expect, it } from "@effect/vitest"; import { typeCheckOutputTypeScript } from "./tool-output-contract"; describe("typeCheckOutputTypeScript", () => {  it("accepts runtime output that matches the described TypeScript contract", () => {    const diagnostics = typeCheckOutputTypeScript(      {        outputTypeScript: "{ ok: true; data: ResultData }",        typeScriptDefinitions: {          Payload: "{ answer: string }",          ResultData:            '{ content: readonly { type: "text"; text: string }[]; structuredContent: Payload }',        },      },      {        ok: true,        data: {          content: [{ type: "text", text: "done" }],          structuredContent: { answer: "done" },        },      },      {        consumerSource:          "const answer: string = invokedOutput.data.structuredContent.answer; answer;",      },    );     expect(diagnostics).toEqual([]);  });   it("reports when the described contract omits the runtime output wrapper", () => {    const diagnostics = typeCheckOutputTypeScript(      {        outputTypeScript: "{ ok: true; data: { answer: string } }",      },      {        ok: true,        data: {          content: [{ type: "text", text: "done" }],          structuredContent: { answer: "done" },        },      },    );     expect(diagnostics.join("\n")).toContain("answer");  });   it("reports missing output TypeScript contracts", () => {    expect(typeCheckOutputTypeScript({}, { ok: true })).toEqual(["missing outputTypeScript"]);  });});