1- import { act , cleanup , renderHook } from '@testing-library/react-hooks'
2- import React from 'react'
3- import { MemoryRouter } from 'react-router-dom'
1+ import { act , renderHook } from '@testing-library/react-hooks'
42import useQueryParam from '../index'
53
64// eslint-disable-next-line react/prop-types
7- const wrapper = ( { pathname = 'one' , search } ) => ( { children } ) => (
8- < MemoryRouter initialIndex = { 0 } initialEntries = { [ { pathname, search } ] } >
9- { children }
10- </ MemoryRouter >
11- )
5+ const wrapper = ( { pathname = 'one' , search } ) => ( { children } ) => {
6+ window . history . replaceState (
7+ window . history . state ,
8+ null ,
9+ `${ pathname } ?${ search } ` ,
10+ )
11+
12+ return children
13+ }
1214
1315describe ( 'useQueryParam' , ( ) => {
14- afterEach ( cleanup )
15- it ( 'should set one object' , async ( ) => {
16+ it ( 'should set one object' , ( ) => {
1617 const { result } = renderHook ( ( ) => useQueryParam ( ) , {
17- wrapper : MemoryRouter ,
18+ wrapper : wrapper ( { search : 'user=john' } ) ,
1819 } )
1920
2021 act ( ( ) => {
@@ -23,9 +24,9 @@ describe('useQueryParam', () => {
2324 expect ( result . current . queryParams ) . toEqual ( { user : 'John' } )
2425 } )
2526
26- it ( 'should correctly set with different value' , async ( ) => {
27+ it ( 'should correctly set with different value' , ( ) => {
2728 const { result } = renderHook ( ( ) => useQueryParam ( ) , {
28- wrapper : MemoryRouter ,
29+ wrapper : wrapper ( { search : 'user=john' } ) ,
2930 } )
3031
3132 act ( ( ) => {
@@ -34,19 +35,22 @@ describe('useQueryParam', () => {
3435 expect ( result . current . queryParams ) . toEqual ( { user : 'John' } )
3536
3637 act ( ( ) => {
37- result . current . setQueryParams ( { user : 'Doe' } )
38+ result . current . setQueryParams ( { user : 'Doe' , name : 'Doe' } )
3839 } )
39- expect ( result . current . queryParams ) . toEqual ( { user : 'Doe' } )
40+ expect ( result . current . queryParams ) . toEqual ( { user : 'Doe' , name : 'Doe' } )
4041
4142 act ( ( ) => {
4243 result . current . setQueryParams ( { user : 'Scaleway' } )
4344 } )
44- expect ( result . current . queryParams ) . toEqual ( { user : 'Scaleway' } )
45+ expect ( result . current . queryParams ) . toEqual ( {
46+ user : 'Scaleway' ,
47+ name : 'Doe' ,
48+ } )
4549 } )
4650
47- it ( 'should set one complexe object' , async ( ) => {
51+ it ( 'should set one complexe object' , ( ) => {
4852 const { result } = renderHook ( ( ) => useQueryParam ( ) , {
49- wrapper : MemoryRouter ,
53+ wrapper : wrapper ( { search : 'user=john' } ) ,
5054 } )
5155
5256 act ( ( ) => {
@@ -74,6 +78,7 @@ describe('useQueryParam', () => {
7478
7579 expect ( result . current . queryParams ) . toEqual ( { user : 'john' } )
7680 } )
81+
7782 it ( 'should should handle array, boolean, number and string from existing location' , ( ) => {
7883 const { result } = renderHook ( ( ) => useQueryParam ( ) , {
7984 wrapper : wrapper ( {
@@ -112,47 +117,37 @@ describe('useQueryParam', () => {
112117 } )
113118 } )
114119
115- it ( 'should modify updater and erase old params' , ( ) => {
116- const updater = ( prevState , nextState ) => nextState
117- const { result } = renderHook ( ( ) => useQueryParam ( { updater } ) , {
118- wrapper : wrapper ( { search : 'user=john' } ) ,
120+ it ( 'should correctly set different objects before rerender' , async ( ) => {
121+ const { result, rerender } = renderHook ( ( ) => useQueryParam ( ) , {
122+ wrapper : wrapper ( { search : '' } ) ,
119123 } )
120124
121- expect ( result . current . queryParams ) . toEqual ( { user : 'john' } )
122125 act ( ( ) => {
123- result . current . setQueryParams ( {
124- lastName : 'Doe' ,
125- } )
126+ result . current . setQueryParams ( { name : 'JOHN' } )
127+ } )
128+
129+ act ( ( ) => {
130+ result . current . setQueryParams ( { lastName : 'Doe' } )
126131 } )
127132 expect ( result . current . queryParams ) . toEqual ( {
133+ name : 'JOHN' ,
128134 lastName : 'Doe' ,
129135 } )
130- } )
131136
132- it ( 'should modify updater and uppercase all news params' , ( ) => {
133- const updater = ( prevState , nextState ) => ( {
134- ...prevState ,
135- ...Object . keys ( nextState ) . reduce (
136- ( acc , key ) => ( { ...acc , [ key ] : nextState [ key ] . toUpperCase ( ) } ) ,
137- { } ,
138- ) ,
139- } )
137+ rerender ( )
140138
141- const { result } = renderHook ( ( ) => useQueryParam ( { updater } ) , {
142- wrapper : wrapper ( { search : 'user= john' } ) ,
139+ act ( ( ) => {
140+ result . current . setQueryParams ( { name : 'john' } )
143141 } )
144142
145- expect ( result . current . queryParams ) . toEqual ( { user : 'john' } )
146-
147143 act ( ( ) => {
148- result . current . setQueryParams ( {
149- lastName : 'Doe' ,
150- } )
144+ result . current . setQueryParams ( { test : 'Scaleway' } )
151145 } )
152146
153147 expect ( result . current . queryParams ) . toEqual ( {
154- user : 'john' ,
155- lastName : 'DOE' ,
148+ name : 'john' ,
149+ lastName : 'Doe' ,
150+ test : 'Scaleway' ,
156151 } )
157152 } )
158153} )
0 commit comments