99} from '../../../utils/replayHelpers' ;
1010
1111sentryTest (
12- 'buffer mode turns into session mode after interrupting error event ingest, and resumes session on reload ' ,
12+ 'buffer mode remains after interrupting error event ingest' ,
1313 async ( { getLocalTestUrl, page, browserName } ) => {
1414 if ( shouldSkipReplayTest ( ) || browserName === 'webkit' ) {
1515 sentryTest . skip ( ) ;
@@ -63,32 +63,34 @@ sentryTest(
6363 // Wait for replay to initialize
6464 await waitForReplayRunning ( page ) ;
6565
66- // Trigger first error - this should change session sampled to "session"
6766 waitForErrorRequest ( page ) ;
6867 await page . locator ( '#error1' ) . click ( ) ;
68+
69+ // This resolves, but the route doesn't get fulfilled as we want the reload to "interrupt" this flow
6970 await firstReplayEventPromise ;
7071 expect ( errorCount ) . toBe ( 1 ) ;
7172 expect ( replayCount ) . toBe ( 0 ) ;
7273 expect ( replayIds ) . toHaveLength ( 1 ) ;
7374
74- // Get the first session info
7575 const firstSession = await getReplaySnapshot ( page ) ;
7676 const firstSessionId = firstSession . session ?. id ;
7777 expect ( firstSessionId ) . toBeDefined ( ) ;
78- expect ( firstSession . session ?. sampled ) . toBe ( 'session' ) ; // Should be marked as 'session'
79- expect ( firstSession . recordingMode ) . toBe ( 'buffer' ) ; // But still in buffer mode
78+ expect ( firstSession . session ?. sampled ) . toBe ( 'buffer' ) ;
79+ expect ( firstSession . session ?. dirty ) . toBe ( true ) ;
80+ expect ( firstSession . recordingMode ) . toBe ( 'buffer' ) ;
8081
8182 await page . reload ( ) ;
8283 const secondSession = await getReplaySnapshot ( page ) ;
83- expect ( secondSession . session ?. sampled ) . toBe ( 'session' ) ;
84- expect ( secondSession . recordingMode ) . toBe ( 'session' ) ; // this turns to "session" because of `sampled` value being "session"
84+ expect ( secondSession . session ?. sampled ) . toBe ( 'buffer' ) ;
85+ expect ( secondSession . session ?. dirty ) . toBe ( true ) ;
86+ expect ( secondSession . recordingMode ) . toBe ( 'buffer' ) ;
8587 expect ( secondSession . session ?. id ) . toBe ( firstSessionId ) ;
8688 expect ( secondSession . session ?. segmentId ) . toBe ( 0 ) ;
8789 } ,
8890) ;
8991
90- sentryTest (
91- 'buffer mode turns into session mode after interrupting replay flush, and resumes session on reload ' ,
92+ sentryTest . only (
93+ 'buffer mode remains after interrupting replay flush' ,
9294 async ( { getLocalTestUrl, page, browserName } ) => {
9395 if ( shouldSkipReplayTest ( ) || browserName === 'webkit' ) {
9496 sentryTest . skip ( ) ;
@@ -141,7 +143,6 @@ sentryTest(
141143 // Wait for replay to initialize
142144 await waitForReplayRunning ( page ) ;
143145
144- // Trigger first error - this should change session sampled to "session"
145146 await page . locator ( '#error1' ) . click ( ) ;
146147 await firstReplayEventPromise ;
147148 expect ( errorCount ) . toBe ( 1 ) ;
@@ -152,15 +153,20 @@ sentryTest(
152153 const firstSession = await getReplaySnapshot ( page ) ;
153154 const firstSessionId = firstSession . session ?. id ;
154155 expect ( firstSessionId ) . toBeDefined ( ) ;
155- expect ( firstSession . session ?. sampled ) . toBe ( 'session' ) ; // Should be marked as 'session'
156+ expect ( firstSession . session ?. sampled ) . toBe ( 'buffer' ) ;
157+ expect ( firstSession . session ?. dirty ) . toBe ( true ) ;
156158 expect ( firstSession . recordingMode ) . toBe ( 'buffer' ) ; // But still in buffer mode
157159
158160 await page . reload ( ) ;
161+ await waitForReplayRunning ( page ) ;
159162 const secondSession = await getReplaySnapshot ( page ) ;
160- expect ( secondSession . session ?. sampled ) . toBe ( 'session ' ) ;
161- expect ( secondSession . recordingMode ) . toBe ( 'session' ) ; // this turns to "session" because of `sampled` value being "session"
163+ expect ( secondSession . session ?. sampled ) . toBe ( 'buffer ' ) ;
164+ expect ( secondSession . session ?. dirty ) . toBe ( true ) ;
162165 expect ( secondSession . session ?. id ) . toBe ( firstSessionId ) ;
163166 expect ( secondSession . session ?. segmentId ) . toBe ( 1 ) ;
167+ // Because a flush attempt was made and not allowed to complete, segmentId increased from 0,
168+ // so we resume in session mode
169+ expect ( secondSession . recordingMode ) . toBe ( 'session' ) ;
164170 } ,
165171) ;
166172
@@ -229,7 +235,8 @@ sentryTest(
229235 const firstSession = await getReplaySnapshot ( page ) ;
230236 const firstSessionId = firstSession . session ?. id ;
231237 expect ( firstSessionId ) . toBeDefined ( ) ;
232- expect ( firstSession . session ?. sampled ) . toBe ( 'session' ) ; // Should be marked as 'session'
238+ expect ( firstSession . session ?. sampled ) . toBe ( 'buffer' ) ;
239+ expect ( firstSession . session ?. dirty ) . toBe ( true ) ;
233240 expect ( firstSession . recordingMode ) . toBe ( 'buffer' ) ; // But still in buffer mode
234241
235242 // Now expire the session by manipulating session storage
@@ -266,7 +273,7 @@ sentryTest(
266273) ;
267274
268275sentryTest (
269- '[buffer-mode] marks session as sampled immediately when error is sampled' ,
276+ 'marks session as dirty immediately when error is sampled in buffer mode ' ,
270277 async ( { getLocalTestUrl, page, browserName } ) => {
271278 if ( shouldSkipReplayTest ( ) || browserName === 'webkit' ) {
272279 sentryTest . skip ( ) ;
@@ -296,18 +303,18 @@ sentryTest(
296303 const reqErrorPromise = waitForErrorRequest ( page ) ;
297304 await page . locator ( '#error1' ) . click ( ) ;
298305
299- // Check session state BEFORE waiting for error to be sent
300- // The session should already be marked as 'session' synchronously
301306 const duringErrorProcessing = await getReplaySnapshot ( page ) ;
302- expect ( duringErrorProcessing . session ?. sampled ) . toBe ( 'session' ) ;
307+ expect ( duringErrorProcessing . session ?. sampled ) . toBe ( 'buffer' ) ;
308+ expect ( duringErrorProcessing . session ?. dirty ) . toBe ( true ) ;
303309 expect ( duringErrorProcessing . recordingMode ) . toBe ( 'buffer' ) ; // Still in buffer recording mode
304310
305311 await reqErrorPromise ;
306312
307313 // After error is sent, verify state is still correct
308314 const afterError = await getReplaySnapshot ( page ) ;
309- expect ( afterError . session ?. sampled ) . toBe ( 'session ' ) ;
315+ expect ( afterError . session ?. sampled ) . toBe ( 'buffer ' ) ;
310316 expect ( afterError . recordingMode ) . toBe ( 'session' ) ;
317+ expect ( afterError . session ?. dirty ) . toBe ( false ) ;
311318
312319 // Verify the session was persisted to sessionStorage (if sticky sessions enabled)
313320 const sessionData = await page . evaluate ( ( ) => {
@@ -317,6 +324,7 @@ sentryTest(
317324 } ) ;
318325
319326 expect ( sessionData ) . toBeDefined ( ) ;
320- expect ( sessionData . sampled ) . toBe ( 'session' ) ;
327+ expect ( sessionData . sampled ) . toBe ( 'buffer' ) ;
328+ expect ( sessionData . dirty ) . toBe ( false ) ;
321329 } ,
322330) ;
0 commit comments