51 lines · 1.5 KB · TypeScript
RawDownload
import { describe, expect, it } from "@effect/vitest";import { assertInclude, assertTrue } from "@effect/vitest/utils";import * as Effect from "effect/Effect"; import { parseOpenApiDocument } from "./openapi-document"; describe("openapi-document", () => {  it.effect("parses JSON OpenAPI document text", () =>    Effect.gen(function* () {      const parsed = parseOpenApiDocument(        JSON.stringify({ openapi: "3.1.0", paths: {} }),      ) as { openapi: string };       expect(parsed.openapi).toBe("3.1.0");    }),  );   it.effect("parses YAML OpenAPI document text", () =>    Effect.gen(function* () {      const parsed = parseOpenApiDocument([        "openapi: 3.1.0",        "paths:",        "  /health:",        "    get:",        "      operationId: health",        "      responses:",        "        '200':",        "          description: ok",      ].join("\n")) as { openapi: string };       expect(parsed.openapi).toBe("3.1.0");    }),  );   it.effect("fails for empty document", () =>    Effect.gen(function* () {      const outcome = yield* Effect.either(        Effect.try({          try: () => parseOpenApiDocument("   "),          catch: (error: unknown) =>            error instanceof Error ? error : new Error(String(error)),        }),      );       assertTrue(outcome._tag === "Left");      if (outcome._tag === "Left" && outcome.left instanceof Error) {        assertInclude(outcome.left.message, "OpenAPI document is empty");      }    }),  );});