@@ -2,6 +2,10 @@ import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query'
2
2
import { configureStore } from '@reduxjs/toolkit'
3
3
import { waitMs } from './helpers'
4
4
import 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'
5
9
6
10
beforeAll ( ( ) => {
7
11
jest . useFakeTimers ( 'legacy' )
@@ -52,6 +56,35 @@ test(`query: await cleanup, keepUnusedDataFor set`, async () => {
52
56
expect ( onCleanup ) . toHaveBeenCalled ( )
53
57
} )
54
58
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
+
55
88
describe ( `query: await cleanup, keepUnusedDataFor set` , ( ) => {
56
89
const { store, api } = storeForApi (
57
90
createApi ( {
0 commit comments