@@ -4,71 +4,115 @@ import { renderHook, waitFor } from '@testing-library/react'
4
4
import { actionsReducer , withProvider } from '../../tests/utils/helpers'
5
5
import type { BaseQueryApi } from '../baseQueryTypes'
6
6
7
- test ( 'handles a non-async baseQuery without error' , async ( ) => {
8
- const baseQuery = ( args ?: any ) => ( { data : args } )
9
- const api = createApi ( {
10
- baseQuery,
11
- endpoints : ( build ) => ( {
12
- getUser : build . query < unknown , number > ( {
13
- query ( id ) {
14
- return { url : `user/${ id } ` }
15
- } ,
7
+ describe ( 'baseline thunk behavior' , ( ) => {
8
+ test ( 'handles a non-async baseQuery without error' , async ( ) => {
9
+ const baseQuery = ( args ?: any ) => ( { data : args } )
10
+ const api = createApi ( {
11
+ baseQuery,
12
+ endpoints : ( build ) => ( {
13
+ getUser : build . query < unknown , number > ( {
14
+ query ( id ) {
15
+ return { url : `user/${ id } ` }
16
+ } ,
17
+ } ) ,
16
18
} ) ,
17
- } ) ,
18
- } )
19
- const { getUser } = api . endpoints
20
- const store = configureStore ( {
21
- reducer : {
22
- [ api . reducerPath ] : api . reducer ,
23
- } ,
24
- middleware : ( gDM ) => gDM ( ) . concat ( api . middleware ) ,
25
- } )
26
-
27
- const promise = store . dispatch ( getUser . initiate ( 1 ) )
28
- const { data } = await promise
19
+ } )
20
+ const { getUser } = api . endpoints
21
+ const store = configureStore ( {
22
+ reducer : {
23
+ [ api . reducerPath ] : api . reducer ,
24
+ } ,
25
+ middleware : ( gDM ) => gDM ( ) . concat ( api . middleware ) ,
26
+ } )
29
27
30
- expect ( data ) . toEqual ( {
31
- url : 'user/1' ,
32
- } )
28
+ const promise = store . dispatch ( getUser . initiate ( 1 ) )
29
+ const { data } = await promise
33
30
34
- const storeResult = getUser . select ( 1 ) ( store . getState ( ) )
35
- expect ( storeResult ) . toEqual ( {
36
- data : {
31
+ expect ( data ) . toEqual ( {
37
32
url : 'user/1' ,
38
- } ,
39
- endpointName : 'getUser' ,
40
- isError : false ,
41
- isLoading : false ,
42
- isSuccess : true ,
43
- isUninitialized : false ,
44
- originalArgs : 1 ,
45
- requestId : expect . any ( String ) ,
46
- status : 'fulfilled' ,
47
- startedTimeStamp : expect . any ( Number ) ,
48
- fulfilledTimeStamp : expect . any ( Number ) ,
33
+ } )
34
+
35
+ const storeResult = getUser . select ( 1 ) ( store . getState ( ) )
36
+ expect ( storeResult ) . toEqual ( {
37
+ data : {
38
+ url : 'user/1' ,
39
+ } ,
40
+ endpointName : 'getUser' ,
41
+ isError : false ,
42
+ isLoading : false ,
43
+ isSuccess : true ,
44
+ isUninitialized : false ,
45
+ originalArgs : 1 ,
46
+ requestId : expect . any ( String ) ,
47
+ status : 'fulfilled' ,
48
+ startedTimeStamp : expect . any ( Number ) ,
49
+ fulfilledTimeStamp : expect . any ( Number ) ,
50
+ } )
49
51
} )
50
- } )
51
52
52
- test ( 'passes the extraArgument property to the baseQueryApi' , async ( ) => {
53
- const baseQuery = ( _args : any , api : BaseQueryApi ) => ( { data : api . extra } )
54
- const api = createApi ( {
55
- baseQuery,
56
- endpoints : ( build ) => ( {
57
- getUser : build . query < unknown , void > ( {
58
- query : ( ) => '' ,
53
+ test ( 'passes the extraArgument property to the baseQueryApi' , async ( ) => {
54
+ const baseQuery = ( _args : any , api : BaseQueryApi ) => ( { data : api . extra } )
55
+ const api = createApi ( {
56
+ baseQuery,
57
+ endpoints : ( build ) => ( {
58
+ getUser : build . query < unknown , void > ( {
59
+ query : ( ) => '' ,
60
+ } ) ,
59
61
} ) ,
60
- } ) ,
62
+ } )
63
+ const store = configureStore ( {
64
+ reducer : {
65
+ [ api . reducerPath ] : api . reducer ,
66
+ } ,
67
+ middleware : ( gDM ) =>
68
+ gDM ( { thunk : { extraArgument : 'cakes' } } ) . concat ( api . middleware ) ,
69
+ } )
70
+ const { getUser } = api . endpoints
71
+ const { data } = await store . dispatch ( getUser . initiate ( ) )
72
+ expect ( data ) . toBe ( 'cakes' )
61
73
} )
62
- const store = configureStore ( {
63
- reducer : {
64
- [ api . reducerPath ] : api . reducer ,
65
- } ,
66
- middleware : ( gDM ) =>
67
- gDM ( { thunk : { extraArgument : 'cakes' } } ) . concat ( api . middleware ) ,
74
+
75
+ test ( 'only triggers transformResponse when a query method is actually used' , async ( ) => {
76
+ const baseQuery = ( args ?: any ) => ( { data : args } )
77
+ const transformResponse = vi . fn ( ( response : any ) => response )
78
+ const api = createApi ( {
79
+ baseQuery,
80
+ endpoints : ( build ) => ( {
81
+ hasQuery : build . query < string , string > ( {
82
+ query : ( arg ) => 'test' ,
83
+ transformResponse,
84
+ } ) ,
85
+ hasQueryFn : build . query < string , void > (
86
+ // @ts -expect-error
87
+ {
88
+ queryFn : ( ) => ( { data : 'test' } ) ,
89
+ transformResponse,
90
+ } ,
91
+ ) ,
92
+ } ) ,
93
+ } )
94
+
95
+ const store = configureStore ( {
96
+ reducer : {
97
+ [ api . reducerPath ] : api . reducer ,
98
+ } ,
99
+ middleware : ( gDM ) =>
100
+ gDM ( { thunk : { extraArgument : 'cakes' } } ) . concat ( api . middleware ) ,
101
+ } )
102
+
103
+ await store . dispatch ( api . util . upsertQueryData ( 'hasQuery' , 'a' , 'test' ) )
104
+ expect ( transformResponse ) . not . toHaveBeenCalled ( )
105
+
106
+ transformResponse . mockReset ( )
107
+
108
+ await store . dispatch ( api . endpoints . hasQuery . initiate ( 'b' ) )
109
+ expect ( transformResponse ) . toHaveBeenCalledTimes ( 1 )
110
+
111
+ transformResponse . mockReset ( )
112
+
113
+ await store . dispatch ( api . endpoints . hasQueryFn . initiate ( ) )
114
+ expect ( transformResponse ) . not . toHaveBeenCalled ( )
68
115
} )
69
- const { getUser } = api . endpoints
70
- const { data } = await store . dispatch ( getUser . initiate ( ) )
71
- expect ( data ) . toBe ( 'cakes' )
72
116
} )
73
117
74
118
describe ( 're-triggering behavior on arg change' , ( ) => {
0 commit comments