@@ -89,6 +89,58 @@ describe('Integration | coreHandlers | handleAfterSendEvent', () => {
89
89
expect ( replay . recordingMode ) . toBe ( 'buffer' ) ;
90
90
} ) ;
91
91
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
+
92
144
it ( 'allows undefined send response when using custom transport' , async ( ) => {
93
145
( { replay } = await resetSdkMock ( {
94
146
replayOptions : {
@@ -123,7 +175,7 @@ describe('Integration | coreHandlers | handleAfterSendEvent', () => {
123
175
expect ( Array . from ( replay . getContext ( ) . errorIds ) ) . toEqual ( [ 'err1' , 'err2' , 'err3' , 'err4' ] ) ;
124
176
} ) ;
125
177
126
- it ( 'flushes when in error mode' , async ( ) => {
178
+ it ( 'flushes when in buffer mode' , async ( ) => {
127
179
( { replay } = await resetSdkMock ( {
128
180
replayOptions : {
129
181
stickySession : false ,
@@ -231,7 +283,7 @@ describe('Integration | coreHandlers | handleAfterSendEvent', () => {
231
283
expect ( replay . recordingMode ) . toBe ( 'buffer' ) ;
232
284
} ) ;
233
285
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 ( ) => {
235
287
( { replay } = await resetSdkMock ( {
236
288
replayOptions : {
237
289
stickySession : false ,
@@ -257,7 +309,7 @@ describe('Integration | coreHandlers | handleAfterSendEvent', () => {
257
309
jest . runAllTimers ( ) ;
258
310
await new Promise ( process . nextTick ) ;
259
311
260
- // Remains in error mode & without flushing
312
+ // Remains in buffer mode & without flushing
261
313
expect ( mockSend ) . toHaveBeenCalledTimes ( 0 ) ;
262
314
expect ( Array . from ( replay . getContext ( ) . errorIds ) ) . toEqual ( [ ] ) ;
263
315
expect ( replay . isEnabled ( ) ) . toBe ( true ) ;
@@ -291,7 +343,7 @@ describe('Integration | coreHandlers | handleAfterSendEvent', () => {
291
343
jest . runAllTimers ( ) ;
292
344
await new Promise ( process . nextTick ) ;
293
345
294
- // Remains in error mode & without flushing
346
+ // Remains in buffer mode & without flushing
295
347
expect ( mockSend ) . toHaveBeenCalledTimes ( 0 ) ;
296
348
expect ( Array . from ( replay . getContext ( ) . errorIds ) ) . toEqual ( [ 'err1' ] ) ;
297
349
expect ( replay . isEnabled ( ) ) . toBe ( true ) ;
@@ -325,11 +377,38 @@ describe('Integration | coreHandlers | handleAfterSendEvent', () => {
325
377
jest . runAllTimers ( ) ;
326
378
await new Promise ( process . nextTick ) ;
327
379
328
- // Remains in error mode & without flushing
380
+ // Remains in buffer mode & without flushing
329
381
expect ( mockSend ) . toHaveBeenCalledTimes ( 0 ) ;
330
382
expect ( Array . from ( replay . getContext ( ) . errorIds ) ) . toEqual ( [ 'err1' ] ) ;
331
383
expect ( replay . isEnabled ( ) ) . toBe ( true ) ;
332
384
expect ( replay . isPaused ( ) ) . toBe ( false ) ;
333
385
expect ( replay . recordingMode ) . toBe ( 'buffer' ) ;
334
386
} ) ;
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
+ } ) ;
335
414
} ) ;
0 commit comments