@@ -3,8 +3,8 @@ import { expect } from '@playwright/test';
3
3
import { sentryTest } from '../../../../utils/fixtures' ;
4
4
import { envelopeRequestParser , getEnvelopeType , shouldSkipFeedbackTest } from '../../../../utils/helpers' ;
5
5
import {
6
- getCustomRecordingEvents ,
7
- getReplayEvent ,
6
+ collectReplayRequests ,
7
+ getReplayBreadcrumbs ,
8
8
shouldSkipReplayTest ,
9
9
waitForReplayRequest ,
10
10
} from '../../../../utils/replayHelpers' ;
@@ -15,8 +15,7 @@ sentryTest('should capture feedback', async ({ forceFlushReplay, getLocalTestPat
15
15
}
16
16
17
17
const reqPromise0 = waitForReplayRequest ( page , 0 ) ;
18
- const reqPromise1 = waitForReplayRequest ( page , 1 ) ;
19
- const reqPromise2 = waitForReplayRequest ( page , 2 ) ;
18
+
20
19
const feedbackRequestPromise = page . waitForResponse ( res => {
21
20
const req = res . request ( ) ;
22
21
@@ -42,27 +41,30 @@ sentryTest('should capture feedback', async ({ forceFlushReplay, getLocalTestPat
42
41
43
42
const url = await getLocalTestPath ( { testDir : __dirname } ) ;
44
43
45
- const [ , , replayReq0 ] = await Promise . all ( [ page . goto ( url ) , page . getByText ( 'Report a Bug' ) . click ( ) , reqPromise0 ] ) ;
44
+ await Promise . all ( [ page . goto ( url ) , page . getByText ( 'Report a Bug' ) . click ( ) , reqPromise0 ] ) ;
45
+
46
+ const replayRequestPromise = collectReplayRequests ( page , recordingEvents => {
47
+ return getReplayBreadcrumbs ( recordingEvents ) . some ( breadcrumb => breadcrumb . category === 'sentry.feedback' ) ;
48
+ } ) ;
46
49
47
50
// Inputs are slow, these need to be serial
48
51
await page . locator ( '[name="name"]' ) . fill ( 'Jane Doe' ) ;
49
52
await page . locator ( '[name="email"]' ) . fill ( '[email protected] ' ) ;
50
53
await page . locator ( '[name="message"]' ) . fill ( 'my example feedback' ) ;
51
54
52
55
// Force flush here, as inputs are slow and can cause click event to be in unpredictable segments
53
- await Promise . all ( [ forceFlushReplay ( ) , reqPromise1 ] ) ;
56
+ await Promise . all ( [ forceFlushReplay ( ) ] ) ;
54
57
55
- const [ , feedbackResp , replayReq2 ] = await Promise . all ( [
58
+ const [ , feedbackResp ] = await Promise . all ( [
56
59
page . locator ( '[data-sentry-feedback] .btn--primary' ) . click ( ) ,
57
60
feedbackRequestPromise ,
58
- reqPromise2 ,
59
61
] ) ;
60
62
63
+ const { replayEvents, replayRecordingSnapshots } = await replayRequestPromise ;
64
+ const breadcrumbs = getReplayBreadcrumbs ( replayRecordingSnapshots ) ;
65
+
66
+ const replayEvent = replayEvents [ 0 ] ;
61
67
const feedbackEvent = envelopeRequestParser ( feedbackResp . request ( ) ) ;
62
- const replayEvent = getReplayEvent ( replayReq0 ) ;
63
- // Feedback breadcrumb is on second segment because we flush when "Report a Bug" is clicked
64
- // And then the breadcrumb is sent when feedback form is submitted
65
- const { breadcrumbs } = getCustomRecordingEvents ( replayReq2 ) ;
66
68
67
69
expect ( breadcrumbs ) . toEqual (
68
70
expect . arrayContaining ( [
0 commit comments