@@ -35,6 +35,11 @@ afterAll(() => {
35
35
spy . mockRestore ( )
36
36
} )
37
37
38
+ function paginate < T > ( array : T [ ] , page_size : number , page_number : number ) {
39
+ // human-readable page numbers usually start with 1, so we reduce 1 in the first argument
40
+ return array . slice ( ( page_number - 1 ) * page_size , page_number * page_size )
41
+ }
42
+
38
43
test ( 'sensible defaults' , ( ) => {
39
44
const api = createApi ( {
40
45
baseQuery : fetchBaseQuery ( ) ,
@@ -923,6 +928,22 @@ describe('custom serializeQueryArgs per endpoint', () => {
923
928
return currentArg !== previousArg
924
929
} ,
925
930
} ) ,
931
+ listItems2 : build . query < { items : string [ ] ; meta ?: any } , number > ( {
932
+ query : ( pageNumber ) => `/listItems2?page=${ pageNumber } ` ,
933
+ serializeQueryArgs : ( { endpointName } ) => {
934
+ return endpointName
935
+ } ,
936
+ transformResponse ( items : string [ ] ) {
937
+ return { items }
938
+ } ,
939
+ merge : ( currentCache , newData , meta ) => {
940
+ currentCache . items . push ( ...newData . items )
941
+ currentCache . meta = meta
942
+ } ,
943
+ forceRefetch ( { currentArg, previousArg } ) {
944
+ return currentArg !== previousArg
945
+ } ,
946
+ } ) ,
926
947
} ) ,
927
948
} )
928
949
@@ -1010,11 +1031,6 @@ describe('custom serializeQueryArgs per endpoint', () => {
1010
1031
const allItems = [ 'a' , 'b' , 'c' , 'd' , 'e' , 'f' , 'g' , 'i' ]
1011
1032
const PAGE_SIZE = 3
1012
1033
1013
- function paginate < T > ( array : T [ ] , page_size : number , page_number : number ) {
1014
- // human-readable page numbers usually start with 1, so we reduce 1 in the first argument
1015
- return array . slice ( ( page_number - 1 ) * page_size , page_number * page_size )
1016
- }
1017
-
1018
1034
server . use (
1019
1035
rest . get ( 'https://example.com/listItems' , ( req , res , ctx ) => {
1020
1036
const pageString = req . url . searchParams . get ( 'page' )
@@ -1038,4 +1054,33 @@ describe('custom serializeQueryArgs per endpoint', () => {
1038
1054
const updatedEntry = selectListItems ( storeRef . store . getState ( ) )
1039
1055
expect ( updatedEntry . data ) . toEqual ( [ 'a' , 'b' , 'c' , 'd' , 'e' , 'f' ] )
1040
1056
} )
1057
+
1058
+ test ( 'merge receives a meta object as an argument' , async ( ) => {
1059
+ const allItems = [ 'a' , 'b' , 'c' , 'd' , 'e' , 'f' , 'g' , 'i' ]
1060
+ const PAGE_SIZE = 3
1061
+
1062
+ server . use (
1063
+ rest . get ( 'https://example.com/listItems2' , ( req , res , ctx ) => {
1064
+ const pageString = req . url . searchParams . get ( 'page' )
1065
+ const pageNum = parseInt ( pageString || '0' )
1066
+
1067
+ const results = paginate ( allItems , PAGE_SIZE , pageNum )
1068
+ return res ( ctx . json ( results ) )
1069
+ } )
1070
+ )
1071
+
1072
+ const selectListItems = api . endpoints . listItems2 . select ( 0 )
1073
+
1074
+ await storeRef . store . dispatch ( api . endpoints . listItems2 . initiate ( 1 ) )
1075
+ await storeRef . store . dispatch ( api . endpoints . listItems2 . initiate ( 2 ) )
1076
+ const cacheEntry = selectListItems ( storeRef . store . getState ( ) )
1077
+
1078
+ // Should have passed along the third arg from `merge` containing these fields
1079
+ expect ( cacheEntry . data ?. meta ) . toEqual ( {
1080
+ requestId : expect . any ( String ) ,
1081
+ fulfilledTimeStamp : expect . any ( Number ) ,
1082
+ arg : 2 ,
1083
+ baseQueryMeta : expect . any ( Object ) ,
1084
+ } )
1085
+ } )
1041
1086
} )
0 commit comments