87 lines · 2.3 KB · TypeScript
RawDownload
import { describe, expect, it } from "@effect/vitest";import { ToolResult, isToolFile, isToolResult } from "./tool-result"; describe("ToolResult", () => {  it("ok wraps a value", () => {    const r = ToolResult.ok({ count: 3 });    expect(r).toEqual({ ok: true, data: { count: 3 } });    expect(isToolResult(r)).toBe(true);  });   it("fail wraps a ToolError", () => {    const r = ToolResult.fail({      code: "upstream_http_error",      status: 404,      message: "Not found",      details: { id: "x" },    });    expect(r).toEqual({      ok: false,      error: {        code: "upstream_http_error",        status: 404,        message: "Not found",        details: { id: "x" },      },    });    expect(isToolResult(r)).toBe(true);  });   it("isToolResult rejects unrelated shapes", () => {    expect(isToolResult(null)).toBe(false);    expect(isToolResult({})).toBe(false);    expect(isToolResult({ ok: true })).toBe(false);    expect(isToolResult({ ok: false })).toBe(false);    expect(isToolResult({ ok: false, error: {} })).toBe(false);    expect(isToolResult({ ok: false, error: { code: 1, message: "x" } })).toBe(false);    expect(isToolResult({ ok: "yes", data: 1 })).toBe(false);  });   it("isToolResult accepts both branches of the union", () => {    expect(isToolResult({ ok: true, data: 1 })).toBe(true);    expect(isToolResult({ ok: true, data: null })).toBe(true);    expect(      isToolResult({        ok: false,        error: { code: "x", message: "y" },      }),    ).toBe(true);  });}); describe("ToolFile", () => {  it("accepts a base64 file value", () => {    const file = {      _tag: "ToolFile",      name: "photo.png",      mimeType: "image/png",      encoding: "base64",      data: "iVBORw0KGgo=",      byteLength: 8,    };     expect(file).toEqual({      _tag: "ToolFile",      name: "photo.png",      mimeType: "image/png",      encoding: "base64",      data: "iVBORw0KGgo=",      byteLength: 8,    });    expect(isToolFile(file)).toBe(true);  });   it("rejects unrelated shapes", () => {    expect(isToolFile(null)).toBe(false);    expect(isToolFile({ data: "abc" })).toBe(false);    expect(      isToolFile({        _tag: "ToolFile",        mimeType: "image/png",        encoding: "utf8",        data: "abc",        byteLength: 3,      }),    ).toBe(false);  });});