@@ -259,4 +259,38 @@ describe('Integration | rate-limiting behaviour', () => {
259259 // events array should be empty
260260 expect ( replay . eventBuffer ?. pendingLength ) . toBe ( 0 ) ;
261261 } ) ;
262+
263+ it ( "doesn't do anything, if a rate limit is hit and recording is already paused" , async ( ) => {
264+ let paused = false ;
265+ expect ( replay . session ?. segmentId ) . toBe ( 0 ) ;
266+ jest . spyOn ( replay , 'isPaused' ) . mockImplementation ( ( ) => {
267+ return paused ;
268+ } ) ;
269+ jest . spyOn ( replay , 'pause' ) ;
270+ jest . spyOn ( replay , 'resume' ) ;
271+ // @ts -ignore private API
272+ jest . spyOn ( replay , '_handleRateLimit' ) ;
273+
274+ const TEST_EVENT = { data : { } , timestamp : BASE_TIMESTAMP , type : 2 } ;
275+
276+ mockTransportSend . mockImplementationOnce ( ( ) => {
277+ return Promise . resolve ( { statusCode : 429 } ) ;
278+ } ) ;
279+
280+ mockRecord . _emitter ( TEST_EVENT ) ;
281+ paused = true ;
282+
283+ // T = base + 5
284+ await advanceTimers ( DEFAULT_FLUSH_MIN_DELAY ) ;
285+
286+ expect ( mockRecord . takeFullSnapshot ) . not . toHaveBeenCalled ( ) ;
287+ expect ( mockTransportSend ) . toHaveBeenCalledTimes ( 1 ) ;
288+
289+ expect ( replay ) . toHaveLastSentReplay ( { events : JSON . stringify ( [ TEST_EVENT ] ) } ) ;
290+
291+ expect ( replay [ '_handleRateLimit' ] ) . toHaveBeenCalledTimes ( 1 ) ;
292+ expect ( replay . resume ) . not . toHaveBeenCalled ( ) ;
293+ expect ( replay . isPaused ) . toHaveBeenCalledTimes ( 2 ) ;
294+ expect ( replay . pause ) . not . toHaveBeenCalled ( ) ;
295+ } ) ;
262296} ) ;
0 commit comments