Skip to content

Commit 4bdfc0a

Browse files
committed
test: generateExample
1 parent 49aa869 commit 4bdfc0a

File tree

1 file changed

+108
-0
lines changed

1 file changed

+108
-0
lines changed

src/utils/generateExample.test.ts

Lines changed: 108 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,108 @@
1+
import { describe, expect, it } from "@jest/globals";
2+
import z from "zod";
3+
import generateExample from "./generateExample";
4+
5+
describe("generateExample", () => {
6+
it("should generate an example from a zod object", () => {
7+
const schema = z.object({
8+
id: z.number(),
9+
name: z.string(),
10+
email: z.string().email(),
11+
age: z.number().optional(),
12+
});
13+
expect(generateExample(schema, false)).toStrictEqual({
14+
id: 1,
15+
name: "example name",
16+
17+
age: 1,
18+
});
19+
});
20+
21+
it("should ignore some props with the ignoreOptionals param is true", () => {
22+
const schema = z.object({
23+
id: z.number(),
24+
name: z.string(),
25+
email: z.string().email(),
26+
age: z.number().optional(),
27+
});
28+
expect(generateExample(schema, true)).toStrictEqual({
29+
id: 1,
30+
name: "example name",
31+
32+
});
33+
});
34+
35+
it("should generate an example from a zod string", () => {
36+
const schema = z.string();
37+
expect(generateExample(schema, false)).toBe("example string");
38+
});
39+
40+
it("should generate an example from a zod number", () => {
41+
const schema = z.number();
42+
expect(generateExample(schema, false)).toBe(1);
43+
expect(generateExample(z.number().negative(), false)).toBe(-1);
44+
expect(generateExample(z.number().nonpositive(), false)).toBe(-1);
45+
expect(generateExample(z.number().multipleOf(7), false)).toBe(7);
46+
});
47+
48+
it("should return the minimum value from a zod number with minimum", () => {
49+
const schema = z.number().min(5);
50+
expect(generateExample(schema, false)).toBe(5);
51+
});
52+
53+
it("should generate an example from a zod integer", () => {
54+
const schema = z.bigint();
55+
expect(generateExample(schema, false)).toBe(1n);
56+
});
57+
58+
it("should generate an example from a zod boolean", () => {
59+
const schema = z.boolean();
60+
expect(generateExample(schema, false)).toBe(false);
61+
});
62+
63+
it("should generate an example from a zod undefined", () => {
64+
const schema = z.undefined();
65+
expect(generateExample(schema, false)).toBe(undefined);
66+
});
67+
68+
it("should generate an example from a zod null", () => {
69+
const schema = z.null();
70+
expect(generateExample(schema, false)).toBe(null);
71+
});
72+
73+
it("should return the first item from a zod enum", () => {
74+
const schema = z.enum(["apple", "pear", "orange"]);
75+
expect(generateExample(schema, false)).toBe("apple");
76+
});
77+
78+
it("should return the default value if the schema has one", () => {
79+
const schema = z.string().default("I think this function will be very useful");
80+
expect(generateExample(schema, false)).toBe("I think this function will be very useful");
81+
});
82+
83+
it("should handle zod string with special types", () => {
84+
expect(generateExample(z.string().email(), false)).toBe("[email protected]");
85+
expect(generateExample(z.string().url(), false)).toBe("https://example.com");
86+
expect(generateExample(z.string().emoji(), false)).toBe("😀");
87+
expect(generateExample(z.string().uuid(), false)).toBe("aa35d4a1-8f23-4cee-847c-2bfe89dc87c1");
88+
expect(generateExample(z.string().ip(), false)).toBe("192.168.1.1");
89+
expect(generateExample(z.string().datetime(), false)).toBe("2024-11-06T07:00:00.137Z");
90+
expect(generateExample(z.string().startsWith("openapi:"), false)).toBe("openapi:example");
91+
expect(generateExample(z.string().endsWith(":openapi"), false)).toBe("example:openapi");
92+
});
93+
94+
it("should generate an example from a nullable zod string", () => {
95+
const schema = z.string().nullable();
96+
expect(generateExample(schema, false)).toBe("example nullable string");
97+
});
98+
99+
it("should return undefined from an optional zod string", () => {
100+
const schema = z.string().optional();
101+
expect(generateExample(schema, true)).toBe(undefined);
102+
});
103+
104+
it("should throw an error from an unknown zod schema", () => {
105+
const schema = z.unknown();
106+
expect(() => generateExample(schema, false)).toThrow("Unknown zod schema");
107+
});
108+
});

0 commit comments

Comments
 (0)