| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 |
- import { describe, expect, test } from "bun:test"
- import { Schema } from "effect"
- import { zod } from "../../src/util/effect-zod"
- describe("util.effect-zod", () => {
- test("converts class schemas for route dto shapes", () => {
- class Method extends Schema.Class<Method>("ProviderAuthMethod")({
- type: Schema.Union([Schema.Literal("oauth"), Schema.Literal("api")]),
- label: Schema.String,
- }) {}
- const out = zod(Method)
- expect(out.meta()?.ref).toBe("ProviderAuthMethod")
- expect(
- out.parse({
- type: "oauth",
- label: "OAuth",
- }),
- ).toEqual({
- type: "oauth",
- label: "OAuth",
- })
- })
- test("converts structs with optional fields, arrays, and records", () => {
- const out = zod(
- Schema.Struct({
- foo: Schema.optional(Schema.String),
- bar: Schema.Array(Schema.Number),
- baz: Schema.Record(Schema.String, Schema.Boolean),
- }),
- )
- expect(
- out.parse({
- bar: [1, 2],
- baz: { ok: true },
- }),
- ).toEqual({
- bar: [1, 2],
- baz: { ok: true },
- })
- expect(
- out.parse({
- foo: "hi",
- bar: [1],
- baz: { ok: false },
- }),
- ).toEqual({
- foo: "hi",
- bar: [1],
- baz: { ok: false },
- })
- })
- test("throws for unsupported tuple schemas", () => {
- expect(() => zod(Schema.Tuple([Schema.String, Schema.Number]))).toThrow("unsupported effect schema")
- })
- })
|