1
1
import { expect } from '@playwright/test' ;
2
2
import { SDK_VERSION } from '@sentry/browser' ;
3
- import type { Event } from '@sentry/types' ;
4
3
5
4
import { sentryTest } from '../../../utils/fixtures' ;
6
- import { getFirstSentryEnvelopeRequest } from '../../../utils/helpers' ;
5
+ import { envelopeRequestParser } from '../../../utils/helpers' ;
6
+ import { waitForReplayRequest } from '../../../utils/replay' ;
7
7
8
8
sentryTest ( 'captureReplay' , async ( { getLocalTestPath, page } ) => {
9
9
// 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 }) => {
12
12
sentryTest . skip ( ) ;
13
13
}
14
14
15
+ const reqPromise0 = waitForReplayRequest ( page , 0 ) ;
16
+ const reqPromise1 = waitForReplayRequest ( page , 1 ) ;
17
+
15
18
await page . route ( 'https://dsn.ingest.sentry.io/**/*' , route => {
16
19
return route . fulfill ( {
17
20
status : 200 ,
@@ -21,23 +24,61 @@ sentryTest('captureReplay', async ({ getLocalTestPath, page }) => {
21
24
} ) ;
22
25
23
26
const url = await getLocalTestPath ( { testDir : __dirname } ) ;
27
+
24
28
await page . goto ( url ) ;
25
- await page . waitForRequest ( 'https://dsn.ingest.sentry.io/**/*' ) ;
29
+ const replayEvent0 = envelopeRequestParser ( await reqPromise0 ) ;
26
30
27
31
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 ) ;
31
33
32
- expect ( replayEvent ) . toBeDefined ( ) ;
33
- expect ( replayEvent ) . toEqual ( {
34
+ expect ( replayEvent0 ) . toBeDefined ( ) ;
35
+ expect ( replayEvent0 ) . toEqual ( {
34
36
type : 'replay_event' ,
35
37
timestamp : expect . any ( Number ) ,
36
38
error_ids : [ ] ,
37
39
trace_ids : [ ] ,
38
40
urls : [ expect . stringContaining ( '/dist/index.html' ) ] ,
39
41
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 ,
41
82
replay_type : 'session' ,
42
83
event_id : expect . stringMatching ( / \w { 32 } / ) ,
43
84
environment : 'production' ,
0 commit comments