Skip to content

Commit 3576988

Browse files
committed
test: Add dynamic keys test
1 parent ca34123 commit 3576988

File tree

1 file changed

+67
-1
lines changed

1 file changed

+67
-1
lines changed

packages/nuqs/src/useQueryStates.test.ts

+67-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,12 @@ import {
44
withNuqsTestingAdapter,
55
type OnUrlUpdateFunction
66
} from './adapters/testing'
7-
import { parseAsArrayOf, parseAsJson, parseAsString } from './parsers'
7+
import {
8+
parseAsArrayOf,
9+
parseAsInteger,
10+
parseAsJson,
11+
parseAsString
12+
} from './parsers'
813
import { useQueryStates } from './useQueryStates'
914

1015
describe('useQueryStates', () => {
@@ -316,3 +321,64 @@ describe('useQueryStates: clearOnDefault', () => {
316321
expect(onUrlUpdate.mock.calls[0]![0].queryString).toEqual('')
317322
})
318323
})
324+
325+
describe('useQueryStates: dynamic keys', () => {
326+
it('supports dynamic keys', () => {
327+
const useTestHook = (keys: string[] = ['a', 'b']) =>
328+
useQueryStates({
329+
[keys[0]!]: parseAsInteger,
330+
[keys[1]!]: parseAsInteger
331+
})
332+
const { result, rerender } = renderHook(useTestHook, {
333+
wrapper: withNuqsTestingAdapter({
334+
searchParams: '?a=1&b=2&c=3&d=4'
335+
})
336+
})
337+
expect(result.current[0].a).toEqual(1)
338+
expect(result.current[0].b).toEqual(2)
339+
expect(result.current[0].c).toBeUndefined()
340+
expect(result.current[0].d).toBeUndefined()
341+
rerender(['c', 'd'])
342+
expect(result.current[0].a).toBeUndefined()
343+
expect(result.current[0].b).toBeUndefined()
344+
expect(result.current[0].c).toEqual(3)
345+
expect(result.current[0].d).toEqual(4)
346+
})
347+
348+
it('supports dynamic keys with remapping', () => {
349+
const useTestHook = (keys: string[] = ['a', 'b']) =>
350+
useQueryStates(
351+
{
352+
[keys[0]!]: parseAsInteger,
353+
[keys[1]!]: parseAsInteger
354+
},
355+
{
356+
urlKeys: {
357+
a: 'x',
358+
b: 'y',
359+
c: 'z'
360+
}
361+
}
362+
)
363+
const { result, rerender } = renderHook(useTestHook, {
364+
wrapper: withNuqsTestingAdapter({
365+
searchParams: '?x=1&y=2&z=3'
366+
})
367+
})
368+
expect(result.current[0].a).toEqual(1)
369+
expect(result.current[0].b).toEqual(2)
370+
expect(result.current[0].c).toBeUndefined()
371+
expect(result.current[0].d).toBeUndefined()
372+
expect(result.current[0].x).toBeUndefined()
373+
expect(result.current[0].y).toBeUndefined()
374+
expect(result.current[0].z).toBeUndefined()
375+
rerender(['c', 'd'])
376+
expect(result.current[0].a).toBeUndefined()
377+
expect(result.current[0].b).toBeUndefined()
378+
expect(result.current[0].c).toEqual(3)
379+
expect(result.current[0].d).toBeNull()
380+
expect(result.current[0].x).toBeUndefined()
381+
expect(result.current[0].y).toBeUndefined()
382+
expect(result.current[0].z).toBeUndefined()
383+
})
384+
})

0 commit comments

Comments
 (0)