@@ -2,6 +2,10 @@ import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query'
22import { configureStore } from '@reduxjs/toolkit'
33import { waitMs } from './helpers'
44import type { Middleware , Reducer } from 'redux'
5+ import {
6+ THIRTY_TWO_BIT_MAX_INT ,
7+ THIRTY_TWO_BIT_MAX_TIMER_SECONDS ,
8+ } from '../core/buildMiddleware/cacheCollection'
59
610beforeAll ( ( ) => {
711 jest . useFakeTimers ( 'legacy' )
@@ -52,6 +56,35 @@ test(`query: await cleanup, keepUnusedDataFor set`, async () => {
5256 expect ( onCleanup ) . toHaveBeenCalled ( )
5357} )
5458
59+ test ( `query: handles large keepUnuseDataFor values over 32-bit ms` , async ( ) => {
60+ const { store, api } = storeForApi (
61+ createApi ( {
62+ baseQuery : fetchBaseQuery ( { baseUrl : 'https://example.com' } ) ,
63+ endpoints : ( build ) => ( {
64+ query : build . query < unknown , string > ( {
65+ query : ( ) => '/success' ,
66+ } ) ,
67+ } ) ,
68+ keepUnusedDataFor : THIRTY_TWO_BIT_MAX_TIMER_SECONDS - 10 ,
69+ } )
70+ )
71+
72+ store . dispatch ( api . endpoints . query . initiate ( 'arg' ) ) . unsubscribe ( )
73+
74+ // Shouldn't have been called right away
75+ jest . advanceTimersByTime ( 1000 ) , await waitMs ( )
76+ expect ( onCleanup ) . not . toHaveBeenCalled ( )
77+
78+ // Shouldn't have been called any time in the next few minutes
79+ jest . advanceTimersByTime ( 1_000_000 ) , await waitMs ( )
80+ expect ( onCleanup ) . not . toHaveBeenCalled ( )
81+
82+ // _Should_ be called _wayyyy_ in the future (like 24.8 days from now)
83+ jest . advanceTimersByTime ( THIRTY_TWO_BIT_MAX_TIMER_SECONDS * 1000 ) ,
84+ await waitMs ( )
85+ expect ( onCleanup ) . toHaveBeenCalled ( )
86+ } )
87+
5588describe ( `query: await cleanup, keepUnusedDataFor set` , ( ) => {
5689 const { store, api } = storeForApi (
5790 createApi ( {
0 commit comments