Skip to content

Commit ebecd70

Browse files
committed
Test nesting
1 parent 2295f48 commit ebecd70

File tree

4 files changed

+49
-7
lines changed

4 files changed

+49
-7
lines changed

package-lock.json

Lines changed: 4 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@
7171
"zod": "^3.0.0"
7272
},
7373
"devDependencies": {
74-
"@seamapi/url-search-params-serializer": "^1.2.0",
74+
"@seamapi/url-search-params-serializer": "^1.3.0",
7575
"@types/node": "^20.8.10",
7676
"ava": "^6.0.1",
7777
"c8": "^10.1.2",

src/lib/schema.test.ts

Lines changed: 32 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import { z } from 'zod'
33

44
import { UnparseableSchemaError, zodSchemaToParamSchema } from './schema.js'
55

6-
test('parse flat object schemas', (t) => {
6+
test('zodSchemaToParamSchema: parses flat object schemas', (t) => {
77
t.deepEqual(zodSchemaToParamSchema(z.object({ foo: z.string() })), {
88
foo: 'string',
99
})
@@ -25,7 +25,37 @@ test('parse flat object schemas', (t) => {
2525
)
2626
})
2727

28-
test('cannot parse non-object schemas', (t) => {
28+
test('zodSchemaToParamSchema: parses nested object schemas', (t) => {
29+
t.deepEqual(zodSchemaToParamSchema(z.object({ foo: z.string() })), {
30+
foo: 'string',
31+
})
32+
t.deepEqual(
33+
zodSchemaToParamSchema(
34+
z.object({
35+
a: z.string(),
36+
b: z.object({
37+
c: z.boolean(),
38+
d: z.array(z.string()),
39+
e: z.object({
40+
f: z.boolean(),
41+
}),
42+
}),
43+
}),
44+
),
45+
{
46+
a: 'string',
47+
b: {
48+
c: 'boolean',
49+
d: 'string_array',
50+
e: {
51+
f: 'boolean',
52+
},
53+
},
54+
},
55+
)
56+
})
57+
58+
test('zodSchemaToParamSchema: cannot parse non-object schemas', (t) => {
2959
t.throws(() => zodSchemaToParamSchema(z.number()), {
3060
instanceOf: UnparseableSchemaError,
3161
})

test/parse.test.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,3 +11,15 @@ test('parses empty params', (t) => {
1111
foo: undefined,
1212
})
1313
})
14+
15+
test('parses nested params', (t) => {
16+
const schema = z.object({
17+
foo: z.string(),
18+
bar: z.object({ baz: z.string() }),
19+
})
20+
const input = { foo: 'a', bar: { baz: 'b' } }
21+
t.deepEqual(parseUrlSearchParams(serializeUrlSearchParams(input), schema), {
22+
foo: 'a',
23+
bar: { baz: 'b' },
24+
})
25+
})

0 commit comments

Comments
 (0)