@@ -415,6 +415,95 @@ describe("useResource", () => {
415415 expect ( onError ) . toHaveBeenCalledWith ( result . current [ 0 ] . error ) ;
416416 } ) ;
417417 } ) ;
418+
419+ it ( "options: getResponseItem" , async ( ) => {
420+ const { result } = renderHook ( ( ) =>
421+ useResource ( ( ) => ( { url : "/users" , method : "GET" } ) , false , {
422+ // eslint-disable-next-line @typescript-eslint/no-unsafe-return
423+ getResponseItem : ( r ) => r ?. data ?. data ,
424+ } ) ,
425+ ) ;
426+ expect ( result . current [ 0 ] . isLoading ) . toBeFalsy ( ) ;
427+ expect ( result . current [ 0 ] . data ) . toBeUndefined ( ) ;
428+ expect ( result . current [ 0 ] . response ) . toBeUndefined ( ) ;
429+
430+ act ( ( ) => {
431+ result . current [ 1 ] ( ) ;
432+ } ) ;
433+
434+ expect ( result . current [ 0 ] . isLoading ) . toBeTruthy ( ) ;
435+ expect ( result . current [ 0 ] . data ) . toBeUndefined ( ) ;
436+ expect ( result . current [ 0 ] . response ) . toBeUndefined ( ) ;
437+
438+ await waitFor ( ( ) => {
439+ expect ( result . current [ 0 ] . isLoading ) . toBeFalsy ( ) ;
440+ expect ( result . current [ 0 ] . error ) . toBeUndefined ( ) ;
441+ // custom data
442+ expect ( result . current [ 0 ] . data ) . toStrictEqual ( okResponse . data ) ;
443+ expect ( result . current [ 0 ] . response ?. data ) . toStrictEqual ( okResponse ) ;
444+ expect ( result . current [ 0 ] . response ?. status ) . toBe ( 200 ) ;
445+ } ) ;
446+ } ) ;
447+ it ( "axios config: transformResponse" , async ( ) => {
448+ const { result : result01 } = renderHook ( ( ) =>
449+ useResource ( ( ) => ( {
450+ url : "/users" ,
451+ method : "GET" ,
452+ transformResponse : ( ) => null ,
453+ } ) ) ,
454+ ) ;
455+ expect ( result01 . current [ 0 ] . isLoading ) . toBeFalsy ( ) ;
456+ expect ( result01 . current [ 0 ] . data ) . toBeUndefined ( ) ;
457+ expect ( result01 . current [ 0 ] . response ) . toBeUndefined ( ) ;
458+
459+ act ( ( ) => {
460+ result01 . current [ 1 ] ( ) ;
461+ } ) ;
462+ await waitFor ( ( ) => {
463+ expect ( result01 . current [ 0 ] . isLoading ) . toBeFalsy ( ) ;
464+ expect ( result01 . current [ 0 ] . error ) . toBeUndefined ( ) ;
465+ // transformResponse undefined
466+ expect ( result01 . current [ 0 ] . data ) . toBeNull ( ) ;
467+ expect ( result01 . current [ 0 ] . response ?. data ) . toBeNull ( ) ;
468+ expect ( result01 . current [ 0 ] . response ?. status ) . toBe ( 200 ) ;
469+ } ) ;
470+ } ) ;
471+
472+ it ( "context: getResponseItem" , async ( ) => {
473+ const { result } = originalRenderHook (
474+ ( ) => useResource ( ( ) => ( { url : "/users" , method : "get" } ) ) ,
475+ {
476+ wrapper : ( props : PropsWithChildren < RequestContextConfig > ) => (
477+ < RequestProvider
478+ instance = { axios }
479+ // eslint-disable-next-line @typescript-eslint/no-unsafe-return
480+ getResponseItem = { ( r ) => r ?. data ?. data }
481+ { ...props }
482+ />
483+ ) ,
484+ } ,
485+ ) ;
486+ expect ( result . current [ 0 ] . isLoading ) . toBeFalsy ( ) ;
487+ expect ( result . current [ 0 ] . data ) . toBeUndefined ( ) ;
488+ expect ( result . current [ 0 ] . response ) . toBeUndefined ( ) ;
489+
490+ act ( ( ) => {
491+ result . current [ 1 ] ( ) ;
492+ } ) ;
493+
494+ expect ( result . current [ 0 ] . isLoading ) . toBeTruthy ( ) ;
495+ expect ( result . current [ 0 ] . data ) . toBeUndefined ( ) ;
496+ expect ( result . current [ 0 ] . response ) . toBeUndefined ( ) ;
497+
498+ await waitFor ( ( ) => {
499+ expect ( result . current [ 0 ] . isLoading ) . toBeFalsy ( ) ;
500+ expect ( result . current [ 0 ] . error ) . toBeUndefined ( ) ;
501+ // custom data
502+ expect ( result . current [ 0 ] . data ) . toStrictEqual ( okResponse . data ) ;
503+ expect ( result . current [ 0 ] . response ?. data ) . toStrictEqual ( okResponse ) ;
504+ expect ( result . current [ 0 ] . response ?. status ) . toBe ( 200 ) ;
505+ } ) ;
506+ } ) ;
418507} ) ;
419508
420509describe ( "useResource - cache" , ( ) => {
0 commit comments