@@ -89,6 +89,58 @@ describe('Integration | coreHandlers | handleAfterSendEvent', () => {
8989 expect ( replay . recordingMode ) . toBe ( 'buffer' ) ;
9090 } ) ;
9191
92+ it ( 'limits errorIds to max. 100' , async ( ) => {
93+ ( { replay } = await resetSdkMock ( {
94+ replayOptions : {
95+ stickySession : false ,
96+ } ,
97+ sentryOptions : {
98+ replaysSessionSampleRate : 1.0 ,
99+ replaysOnErrorSampleRate : 0.0 ,
100+ } ,
101+ } ) ) ;
102+
103+ const handler = handleAfterSendEvent ( replay ) ;
104+
105+ for ( let i = 0 ; i < 150 ; i ++ ) {
106+ const error = Error ( { event_id : `err-${ i } ` } ) ;
107+ handler ( error , { statusCode : 200 } ) ;
108+ }
109+
110+ expect ( Array . from ( replay . getContext ( ) . errorIds ) ) . toEqual (
111+ Array ( 100 )
112+ . fill ( undefined )
113+ . map ( ( _ , i ) => `err-${ i } ` ) ,
114+ ) ;
115+ expect ( Array . from ( replay . getContext ( ) . traceIds ) ) . toEqual ( [ ] ) ;
116+ } ) ;
117+
118+ it ( 'limits traceIds to max. 100' , async ( ) => {
119+ ( { replay } = await resetSdkMock ( {
120+ replayOptions : {
121+ stickySession : false ,
122+ } ,
123+ sentryOptions : {
124+ replaysSessionSampleRate : 0.0 ,
125+ replaysOnErrorSampleRate : 1.0 ,
126+ } ,
127+ } ) ) ;
128+
129+ const handler = handleAfterSendEvent ( replay ) ;
130+
131+ for ( let i = 0 ; i < 150 ; i ++ ) {
132+ const transaction = Transaction ( `tr-${ i } ` ) ;
133+ handler ( transaction , { statusCode : 200 } ) ;
134+ }
135+
136+ expect ( Array . from ( replay . getContext ( ) . errorIds ) ) . toEqual ( [ ] ) ;
137+ expect ( Array . from ( replay . getContext ( ) . traceIds ) ) . toEqual (
138+ Array ( 100 )
139+ . fill ( undefined )
140+ . map ( ( _ , i ) => `tr-${ i } ` ) ,
141+ ) ;
142+ } ) ;
143+
92144 it ( 'allows undefined send response when using custom transport' , async ( ) => {
93145 ( { replay } = await resetSdkMock ( {
94146 replayOptions : {
@@ -123,7 +175,7 @@ describe('Integration | coreHandlers | handleAfterSendEvent', () => {
123175 expect ( Array . from ( replay . getContext ( ) . errorIds ) ) . toEqual ( [ 'err1' , 'err2' , 'err3' , 'err4' ] ) ;
124176 } ) ;
125177
126- it ( 'flushes when in error mode' , async ( ) => {
178+ it ( 'flushes when in buffer mode' , async ( ) => {
127179 ( { replay } = await resetSdkMock ( {
128180 replayOptions : {
129181 stickySession : false ,
@@ -231,7 +283,7 @@ describe('Integration | coreHandlers | handleAfterSendEvent', () => {
231283 expect ( replay . recordingMode ) . toBe ( 'buffer' ) ;
232284 } ) ;
233285
234- it ( 'does not flush in error mode when failing to send the error' , async ( ) => {
286+ it ( 'does not flush in buffer mode when failing to send the error' , async ( ) => {
235287 ( { replay } = await resetSdkMock ( {
236288 replayOptions : {
237289 stickySession : false ,
@@ -257,7 +309,7 @@ describe('Integration | coreHandlers | handleAfterSendEvent', () => {
257309 jest . runAllTimers ( ) ;
258310 await new Promise ( process . nextTick ) ;
259311
260- // Remains in error mode & without flushing
312+ // Remains in buffer mode & without flushing
261313 expect ( mockSend ) . toHaveBeenCalledTimes ( 0 ) ;
262314 expect ( Array . from ( replay . getContext ( ) . errorIds ) ) . toEqual ( [ ] ) ;
263315 expect ( replay . isEnabled ( ) ) . toBe ( true ) ;
@@ -291,7 +343,7 @@ describe('Integration | coreHandlers | handleAfterSendEvent', () => {
291343 jest . runAllTimers ( ) ;
292344 await new Promise ( process . nextTick ) ;
293345
294- // Remains in error mode & without flushing
346+ // Remains in buffer mode & without flushing
295347 expect ( mockSend ) . toHaveBeenCalledTimes ( 0 ) ;
296348 expect ( Array . from ( replay . getContext ( ) . errorIds ) ) . toEqual ( [ 'err1' ] ) ;
297349 expect ( replay . isEnabled ( ) ) . toBe ( true ) ;
@@ -325,11 +377,38 @@ describe('Integration | coreHandlers | handleAfterSendEvent', () => {
325377 jest . runAllTimers ( ) ;
326378 await new Promise ( process . nextTick ) ;
327379
328- // Remains in error mode & without flushing
380+ // Remains in buffer mode & without flushing
329381 expect ( mockSend ) . toHaveBeenCalledTimes ( 0 ) ;
330382 expect ( Array . from ( replay . getContext ( ) . errorIds ) ) . toEqual ( [ 'err1' ] ) ;
331383 expect ( replay . isEnabled ( ) ) . toBe ( true ) ;
332384 expect ( replay . isPaused ( ) ) . toBe ( false ) ;
333385 expect ( replay . recordingMode ) . toBe ( 'buffer' ) ;
334386 } ) ;
387+
388+ it ( 'does not flush if replay is not enabled anymore' , async ( ) => {
389+ ( { replay } = await resetSdkMock ( {
390+ replayOptions : {
391+ stickySession : false ,
392+ } ,
393+ sentryOptions : {
394+ replaysSessionSampleRate : 0.0 ,
395+ replaysOnErrorSampleRate : 1.0 ,
396+ } ,
397+ } ) ) ;
398+
399+ const mockSend = getCurrentHub ( ) . getClient ( ) ! . getTransport ( ) ! . send as unknown as jest . SpyInstance < any > ;
400+
401+ const error1 = Error ( { event_id : 'err1' , tags : { replayId : 'replayid1' } } ) ;
402+
403+ const handler = handleAfterSendEvent ( replay ) ;
404+
405+ handler ( error1 , { statusCode : 200 } ) ;
406+
407+ replay [ '_isEnabled' ] = false ;
408+
409+ jest . runAllTimers ( ) ;
410+ await new Promise ( process . nextTick ) ;
411+
412+ expect ( mockSend ) . toHaveBeenCalledTimes ( 0 ) ;
413+ } ) ;
335414} ) ;
0 commit comments