@@ -521,4 +521,56 @@ describe('createQueryNormalizer', () => {
521
521
} ,
522
522
} ) ;
523
523
} ) ;
524
+
525
+ it ( 'keeps relevant query state on queries after setNormalizedData' , async ( ) => {
526
+ const client = new QueryClient ( ) ;
527
+ const normalizer = createQueryNormalizer ( client ) ;
528
+ normalizer . subscribe ( ) ;
529
+
530
+ await client . prefetchQuery ( {
531
+ queryKey : [ 'book' ] ,
532
+ queryFn : ( ) =>
533
+ Promise . resolve ( {
534
+ id : '1' ,
535
+ name : 'Name' ,
536
+ } ) ,
537
+ } ) ;
538
+
539
+ // Set error state on the query.
540
+ await client . prefetchQuery ( {
541
+ queryKey : [ 'book' ] ,
542
+ queryFn : ( ) => {
543
+ throw new Error ( 'Failed to fetch' ) ;
544
+ } ,
545
+ } ) ;
546
+
547
+ // Set isInvalidated on the query.
548
+ await client . invalidateQueries ( { queryKey : [ 'book' ] } ) ;
549
+
550
+ const state1 = client . getQueryCache ( ) . find ( { queryKey : [ 'book' ] } ) ?. state ;
551
+
552
+ const dataUpdatedAt1 = state1 ?. dataUpdatedAt ;
553
+ const isInvalidated1 = state1 ?. isInvalidated ;
554
+ const error1 = state1 ?. error ;
555
+ const status1 = state1 ?. status ;
556
+
557
+ await sleep ( 1 ) ;
558
+
559
+ normalizer . setNormalizedData ( {
560
+ id : '1' ,
561
+ name : 'Name updated' ,
562
+ } ) ;
563
+
564
+ const state2 = client . getQueryCache ( ) . find ( { queryKey : [ 'book' ] } ) ?. state ;
565
+
566
+ const dataUpdatedAt2 = state2 ?. dataUpdatedAt ;
567
+ const isInvalidated2 = state2 ?. isInvalidated ;
568
+ const error2 = state2 ?. error ;
569
+ const status2 = state2 ?. status ;
570
+
571
+ expect ( dataUpdatedAt1 ) . toEqual ( dataUpdatedAt2 ) ;
572
+ expect ( isInvalidated1 ) . toEqual ( isInvalidated2 ) ;
573
+ expect ( error1 ) . toEqual ( error2 ) ;
574
+ expect ( status1 ) . toEqual ( status2 ) ;
575
+ } ) ;
524
576
} ) ;
0 commit comments