Skip to content

Commit f2e5f4d

Browse files
author
devgioele
committed
add in-memory router tests
1 parent 8371b39 commit f2e5f4d

1 file changed

Lines changed: 193 additions & 0 deletions

File tree

Lines changed: 193 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,193 @@
1+
import { act, renderHook } from '@testing-library/react'
2+
import { z } from 'zod'
3+
import { NonNullableRecord } from '../../utils'
4+
import {
5+
useInMemoryQuery,
6+
useInMemoryPagination,
7+
useInMemoryQueryAndPagination,
8+
} from '../../zod'
9+
10+
describe('InMemory', () => {
11+
const searchSchema = z.object({
12+
search: z.string().optional().catch(undefined),
13+
})
14+
15+
const useInMemoryQueryWithSearch = (
16+
defaultQuery: NonNullableRecord<z.infer<typeof searchSchema>>
17+
) => useInMemoryQuery(defaultQuery, searchSchema)
18+
19+
test('should set default page and size', () => {
20+
const page = 0
21+
const size = 15
22+
const { result } = renderHook(() => useInMemoryPagination({ page, size }))
23+
24+
expect(result.current.page).toBe(page)
25+
expect(result.current.size).toBe(size)
26+
})
27+
28+
test('should change page', () => {
29+
const page = 2
30+
31+
const { result } = renderHook(() => useInMemoryPagination())
32+
33+
act(() => {
34+
result.current.setPage(page)
35+
})
36+
37+
expect(result.current.page).toBe(page)
38+
})
39+
40+
test('should change search', () => {
41+
const search = 'Max'
42+
43+
const { result } = renderHook(() =>
44+
useInMemoryQueryWithSearch({ search: '' })
45+
)
46+
47+
act(() => {
48+
result.current.setQuery({ search })
49+
})
50+
51+
expect(result.current.query?.search).toBe(search)
52+
})
53+
54+
test('changing pagination should not reset the remaining query', () => {
55+
const search = 'Max'
56+
const page = 2
57+
58+
const { result } = renderHook(() =>
59+
useInMemoryQueryAndPagination({ search: '' }, searchSchema)
60+
)
61+
62+
act(() => {
63+
result.current.setQuery({ search })
64+
})
65+
66+
act(() => {
67+
result.current.setPage(page)
68+
})
69+
70+
expect(result.current.query.search).toBe(search)
71+
72+
act(() => {
73+
result.current.resetPagination()
74+
})
75+
76+
expect(result.current.query.search).toBe(search)
77+
expect(result.current.page).toBe(0)
78+
})
79+
80+
test('change default parameters', () => {
81+
const page = 1
82+
const size = 10
83+
const { result } = renderHook(() => useInMemoryPagination({ page, size }))
84+
85+
expect(result.current.page).toBe(page)
86+
expect(result.current.size).toBe(size)
87+
})
88+
89+
test('changing the remaining query should reset the page', () => {
90+
const defaultSearch = ''
91+
const search1 = 'Max'
92+
const search2 = 'Peter'
93+
const page = 2
94+
95+
const { result } = renderHook(() =>
96+
useInMemoryQueryAndPagination({ search: defaultSearch }, searchSchema)
97+
)
98+
99+
act(() => {
100+
result.current.setQuery({ search: search1 })
101+
})
102+
103+
act(() => {
104+
result.current.setPage(page)
105+
})
106+
107+
expect(result.current.query.search).toBe(search1)
108+
expect(result.current.page).toBe(page)
109+
110+
act(() => {
111+
result.current.setQuery({ search: search2 })
112+
})
113+
114+
expect(result.current.query.search).toBe(search2)
115+
expect(result.current.page).toBe(0)
116+
117+
act(() => {
118+
result.current.resetQuery()
119+
})
120+
121+
expect(result.current.query.search).toBe(defaultSearch)
122+
expect(result.current.page).toBe(0)
123+
})
124+
125+
test('changing the remaining query with resetPage set to false should not reset the page', () => {
126+
const defaultSearch = ''
127+
const search = 'Max'
128+
const page = 2
129+
130+
const { result } = renderHook(() =>
131+
useInMemoryQueryAndPagination({ search: defaultSearch }, searchSchema)
132+
)
133+
134+
act(() => {
135+
result.current.setPage(page)
136+
})
137+
138+
expect(result.current.page).toBe(page)
139+
140+
act(() => {
141+
result.current.setQuery({ search }, { resetPage: false })
142+
})
143+
144+
expect(result.current.query.search).toBe(search)
145+
expect(result.current.page).toBe(page)
146+
147+
act(() => {
148+
result.current.resetQuery({ resetPage: false })
149+
})
150+
151+
expect(result.current.query.search).toBe(defaultSearch)
152+
expect(result.current.page).toBe(page)
153+
})
154+
155+
test('setting a query key should not overwrite other query keys', () => {
156+
const search = 'Max'
157+
const department = 'IT'
158+
159+
const schema = z.object({
160+
search: z.string().optional().catch(undefined),
161+
department: z.string().optional().catch(undefined),
162+
})
163+
164+
const { result } = renderHook(() =>
165+
useInMemoryQuery({ search: '', department: '' }, schema)
166+
)
167+
168+
act(() => {
169+
result.current.setQuery({ search })
170+
})
171+
172+
act(() => {
173+
result.current.setQuery({ department })
174+
})
175+
176+
expect(result.current.query.search).toBe(search)
177+
expect(result.current.query.department).toBe(department)
178+
})
179+
180+
test('default query value should not need to be an empty string', () => {
181+
const search = ''
182+
183+
const { result } = renderHook(() =>
184+
useInMemoryQuery({ search: 'Default search' }, searchSchema)
185+
)
186+
187+
act(() => {
188+
result.current.setQuery({ search })
189+
})
190+
191+
expect(result.current.query.search).toBe(search)
192+
})
193+
})

0 commit comments

Comments
 (0)