11import { expect } from '@playwright/test' ;
22import { SDK_VERSION } from '@sentry/browser' ;
3- import type { Event } from '@sentry/types' ;
43
54import { sentryTest } from '../../../utils/fixtures' ;
6- import { getFirstSentryEnvelopeRequest } from '../../../utils/helpers' ;
5+ import { envelopeRequestParser } from '../../../utils/helpers' ;
6+ import { waitForReplayRequest } from '../../../utils/replay' ;
77
88sentryTest ( 'captureReplay' , async ( { getLocalTestPath, page } ) => {
99 // For this test, we skip all bundle tests, as we're only interested in Replay being correctly
@@ -12,6 +12,9 @@ sentryTest('captureReplay', async ({ getLocalTestPath, page }) => {
1212 sentryTest . skip ( ) ;
1313 }
1414
15+ const reqPromise0 = waitForReplayRequest ( page , 0 ) ;
16+ const reqPromise1 = waitForReplayRequest ( page , 1 ) ;
17+
1518 await page . route ( 'https://dsn.ingest.sentry.io/**/*' , route => {
1619 return route . fulfill ( {
1720 status : 200 ,
@@ -21,23 +24,61 @@ sentryTest('captureReplay', async ({ getLocalTestPath, page }) => {
2124 } ) ;
2225
2326 const url = await getLocalTestPath ( { testDir : __dirname } ) ;
27+
2428 await page . goto ( url ) ;
25- await page . waitForRequest ( 'https://dsn.ingest.sentry.io/**/*' ) ;
29+ const replayEvent0 = envelopeRequestParser ( await reqPromise0 ) ;
2630
2731 await page . click ( 'button' ) ;
28- await page . waitForRequest ( 'https://dsn.ingest.sentry.io/**/*' ) ;
29-
30- const replayEvent = await getFirstSentryEnvelopeRequest < Event > ( page , url ) ;
32+ const replayEvent1 = envelopeRequestParser ( await reqPromise1 ) ;
3133
32- expect ( replayEvent ) . toBeDefined ( ) ;
33- expect ( replayEvent ) . toEqual ( {
34+ expect ( replayEvent0 ) . toBeDefined ( ) ;
35+ expect ( replayEvent0 ) . toEqual ( {
3436 type : 'replay_event' ,
3537 timestamp : expect . any ( Number ) ,
3638 error_ids : [ ] ,
3739 trace_ids : [ ] ,
3840 urls : [ expect . stringContaining ( '/dist/index.html' ) ] ,
3941 replay_id : expect . stringMatching ( / \w { 32 } / ) ,
40- segment_id : 2 ,
42+ replay_start_timestamp : expect . any ( Number ) ,
43+ segment_id : 0 ,
44+ replay_type : 'session' ,
45+ event_id : expect . stringMatching ( / \w { 32 } / ) ,
46+ environment : 'production' ,
47+ sdk : {
48+ integrations : [
49+ 'InboundFilters' ,
50+ 'FunctionToString' ,
51+ 'TryCatch' ,
52+ 'Breadcrumbs' ,
53+ 'GlobalHandlers' ,
54+ 'LinkedErrors' ,
55+ 'Dedupe' ,
56+ 'HttpContext' ,
57+ 'Replay' ,
58+ ] ,
59+ version : SDK_VERSION ,
60+ name : 'sentry.javascript.browser' ,
61+ } ,
62+ sdkProcessingMetadata : { } ,
63+ request : {
64+ url : expect . stringContaining ( '/dist/index.html' ) ,
65+ headers : {
66+ 'User-Agent' : expect . stringContaining ( '' ) ,
67+ } ,
68+ } ,
69+ platform : 'javascript' ,
70+ tags : { sessionSampleRate : 1 , errorSampleRate : 0 } ,
71+ } ) ;
72+
73+ expect ( replayEvent1 ) . toBeDefined ( ) ;
74+ expect ( replayEvent1 ) . toEqual ( {
75+ type : 'replay_event' ,
76+ timestamp : expect . any ( Number ) ,
77+ error_ids : [ ] ,
78+ trace_ids : [ ] ,
79+ urls : [ ] ,
80+ replay_id : expect . stringMatching ( / \w { 32 } / ) ,
81+ segment_id : 1 ,
4182 replay_type : 'session' ,
4283 event_id : expect . stringMatching ( / \w { 32 } / ) ,
4384 environment : 'production' ,
0 commit comments