@@ -8,6 +8,7 @@ import type { SerializedError } from '@reduxjs/toolkit'
88import { configureStore , createAction , createReducer } from '@reduxjs/toolkit'
99import type {
1010 DefinitionsFromApi ,
11+ FetchBaseQueryError ,
1112 FetchBaseQueryMeta ,
1213 OverrideResultType ,
1314 SerializeQueryArgs ,
@@ -28,6 +29,7 @@ const consoleErrorSpy = vi.spyOn(console, 'error').mockImplementation(noop)
2829
2930afterEach ( ( ) => {
3031 vi . clearAllMocks ( )
32+ server . resetHandlers ( )
3133} )
3234
3335afterAll ( ( ) => {
@@ -1188,15 +1190,11 @@ describe('timeout behavior', () => {
11881190
11891191describe ( 'endpoint schemas' , ( ) => {
11901192 test ( "can be used to validate the endpoint's arguments" , async ( ) => {
1191- server . use (
1192- http . get ( 'https://example.com/success/1' , ( ) => HttpResponse . json ( { } ) ) ,
1193- )
1194-
11951193 const api = createApi ( {
11961194 baseQuery : fetchBaseQuery ( { baseUrl : 'https://example.com' } ) ,
11971195 endpoints : ( build ) => ( {
11981196 query : build . query < unknown , { id : number } > ( {
1199- query : ( { id } ) => `/success /${ id } ` ,
1197+ query : ( { id } ) => `/post /${ id } ` ,
12001198 argSchema : v . object ( { id : v . number ( ) } ) ,
12011199 } ) ,
12021200 } ) ,
@@ -1223,4 +1221,126 @@ describe('endpoint schemas', () => {
12231221 stack : expect . any ( String ) ,
12241222 } )
12251223 } )
1224+ test ( "can be used to validate the endpoint's raw result" , async ( ) => {
1225+ const api = createApi ( {
1226+ baseQuery : fetchBaseQuery ( { baseUrl : 'https://example.com' } ) ,
1227+ endpoints : ( build ) => ( {
1228+ query : build . query < { success : boolean } , void > ( {
1229+ query : ( ) => '/success' ,
1230+ rawResultSchema : v . object ( { value : v . literal ( 'success!' ) } ) ,
1231+ } ) ,
1232+ } ) ,
1233+ } )
1234+ const storeRef = setupApiStore ( api , undefined , {
1235+ withoutTestLifecycles : true ,
1236+ } )
1237+ const result = await storeRef . store . dispatch ( api . endpoints . query . initiate ( ) )
1238+ expect ( result ?. error ) . toEqual < SerializedError > ( {
1239+ name : 'SchemaError' ,
1240+ message : expect . any ( String ) ,
1241+ stack : expect . any ( String ) ,
1242+ } )
1243+ } )
1244+ test ( "can be used to validate the endpoint's final result" , async ( ) => {
1245+ server . use (
1246+ http . get ( 'https://example.com/success/' , ( ) =>
1247+ HttpResponse . json ( { success : true } ) ,
1248+ ) ,
1249+ )
1250+ const api = createApi ( {
1251+ baseQuery : fetchBaseQuery ( { baseUrl : 'https://example.com' } ) ,
1252+ endpoints : ( build ) => ( {
1253+ query : build . query < { success : boolean } , void > ( {
1254+ query : ( ) => '/success' ,
1255+ transformResponse : ( ) => ( { success : false } ) ,
1256+ resultSchema : v . object ( { success : v . literal ( true ) } ) ,
1257+ } ) ,
1258+ } ) ,
1259+ } )
1260+ const storeRef = setupApiStore ( api , undefined , {
1261+ withoutTestLifecycles : true ,
1262+ } )
1263+ const result = await storeRef . store . dispatch ( api . endpoints . query . initiate ( ) )
1264+ expect ( result ?. error ) . toEqual < SerializedError > ( {
1265+ name : 'SchemaError' ,
1266+ message : expect . any ( String ) ,
1267+ stack : expect . any ( String ) ,
1268+ } )
1269+ } )
1270+ test ( "can be used to validate the endpoint's raw error result" , async ( ) => {
1271+ const api = createApi ( {
1272+ baseQuery : fetchBaseQuery ( { baseUrl : 'https://example.com' } ) ,
1273+ endpoints : ( build ) => ( {
1274+ query : build . query < { success : boolean } , void > ( {
1275+ query : ( ) => '/error' ,
1276+ rawErrorSchema : v . object ( {
1277+ status : v . pipe ( v . number ( ) , v . minValue ( 400 ) , v . maxValue ( 499 ) ) ,
1278+ data : v . unknown ( ) ,
1279+ } ) ,
1280+ } ) ,
1281+ } ) ,
1282+ } )
1283+ const storeRef = setupApiStore ( api , undefined , {
1284+ withoutTestLifecycles : true ,
1285+ } )
1286+ const result = await storeRef . store . dispatch ( api . endpoints . query . initiate ( ) )
1287+ expect ( result ?. error ) . toEqual < SerializedError > ( {
1288+ name : 'SchemaError' ,
1289+ message : expect . any ( String ) ,
1290+ stack : expect . any ( String ) ,
1291+ } )
1292+ } )
1293+ test ( "can be used to validate the endpoint's final error result" , async ( ) => {
1294+ const api = createApi ( {
1295+ baseQuery : fetchBaseQuery ( { baseUrl : 'https://example.com' } ) ,
1296+ endpoints : ( build ) => ( {
1297+ query : build . query < { success : boolean } , void > ( {
1298+ query : ( ) => '/error' ,
1299+ transformErrorResponse : ( error ) : FetchBaseQueryError => ( {
1300+ status : 'CUSTOM_ERROR' ,
1301+ data : error ,
1302+ error : 'whoops' ,
1303+ } ) ,
1304+ errorSchema : v . object ( {
1305+ status : v . literal ( 'CUSTOM_ERROR' ) ,
1306+ error : v . literal ( 'oh no' ) ,
1307+ data : v . unknown ( ) ,
1308+ } ) ,
1309+ } ) ,
1310+ } ) ,
1311+ } )
1312+ const storeRef = setupApiStore ( api , undefined , {
1313+ withoutTestLifecycles : true ,
1314+ } )
1315+ const result = await storeRef . store . dispatch ( api . endpoints . query . initiate ( ) )
1316+ expect ( result ?. error ) . toEqual < SerializedError > ( {
1317+ name : 'SchemaError' ,
1318+ message : expect . any ( String ) ,
1319+ stack : expect . any ( String ) ,
1320+ } )
1321+ } )
1322+ test ( "can be used to validate the endpoint's meta result" , async ( ) => {
1323+ const api = createApi ( {
1324+ baseQuery : fetchBaseQuery ( { baseUrl : 'https://example.com' } ) ,
1325+ endpoints : ( build ) => ( {
1326+ query : build . query < { success : boolean } , void > ( {
1327+ query : ( ) => '/success' ,
1328+ metaSchema : v . object ( {
1329+ request : v . instance ( Request ) ,
1330+ response : v . instance ( Response ) ,
1331+ timestamp : v . number ( ) ,
1332+ } ) ,
1333+ } ) ,
1334+ } ) ,
1335+ } )
1336+ const storeRef = setupApiStore ( api , undefined , {
1337+ withoutTestLifecycles : true ,
1338+ } )
1339+ const result = await storeRef . store . dispatch ( api . endpoints . query . initiate ( ) )
1340+ expect ( result ?. error ) . toEqual < SerializedError > ( {
1341+ name : 'SchemaError' ,
1342+ message : expect . any ( String ) ,
1343+ stack : expect . any ( String ) ,
1344+ } )
1345+ } )
12261346} )
0 commit comments