Skip to content

Commit 7cb2c82

Browse files
committed
add integration test
1 parent e5ce59e commit 7cb2c82

File tree

4 files changed

+86
-0
lines changed

4 files changed

+86
-0
lines changed
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
import * as Sentry from '@sentry/browser';
2+
3+
window.Sentry = Sentry;
4+
window.Replay = Sentry.replayIntegration({
5+
flushMinDelay: 200,
6+
flushMaxDelay: 200,
7+
useCompression: false,
8+
_experiments: {
9+
autoFlushOnFeedback: true,
10+
},
11+
});
12+
13+
Sentry.init({
14+
dsn: 'https://[email protected]/1337',
15+
sampleRate: 0,
16+
replaysSessionSampleRate: 1.0,
17+
replaysOnErrorSampleRate: 0.0,
18+
19+
integrations: [window.Replay],
20+
});
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
import * as Sentry from '@sentry/browser';
2+
3+
document.getElementById('open').addEventListener('click', () => {
4+
Sentry.getClient().emit('openFeedbackWidget');
5+
});
6+
7+
document.getElementById('send').addEventListener('click', () => {
8+
Sentry.getClient().emit('beforeSendFeedback');
9+
});
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
<!doctype html>
2+
<html>
3+
<head>
4+
<meta charset="utf-8" />
5+
</head>
6+
<body>
7+
<button id="send">Send feedback</button>
8+
<button id="open">Open feedback</button>
9+
<button id="something">Something</button>
10+
</body>
11+
</html>
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
import { expect } from '@playwright/test';
2+
3+
import { sentryTest } from '../../../utils/fixtures';
4+
import { getExpectedReplayEvent } from '../../../utils/replayEventTemplates';
5+
import { getReplayEvent, shouldSkipReplayTest, waitForReplayRequest } from '../../../utils/replayHelpers';
6+
7+
/*
8+
* In this test we want to verify that replay events are automatically flushed when user feedback is submitted via API / opening the widget.
9+
* We emulate this by firing the feedback events directly, which should trigger an immediate flush of any
10+
* buffered replay events, rather than waiting for the normal flush delay.
11+
*/
12+
sentryTest('replay events are flushed automatically on feedback events', async ({ getLocalTestUrl, page }) => {
13+
if (shouldSkipReplayTest()) {
14+
sentryTest.skip();
15+
}
16+
17+
const reqPromise0 = waitForReplayRequest(page, 0);
18+
const reqPromise1 = waitForReplayRequest(page, 1);
19+
const reqPromise2 = waitForReplayRequest(page, 2);
20+
21+
const url = await getLocalTestUrl({ testDir: __dirname });
22+
23+
await page.goto(url);
24+
const replayEvent0 = getReplayEvent(await reqPromise0);
25+
expect(replayEvent0).toEqual(getExpectedReplayEvent());
26+
27+
// Trigger one mouse click
28+
void page.locator('#something').click();
29+
30+
// Open the feedback widget which should trigger an immediate flush
31+
await page.locator('#open').click();
32+
33+
// This should be flushed immediately due to feedback widget being opened
34+
const replayEvent1 = getReplayEvent(await reqPromise1);
35+
expect(replayEvent1).toEqual(getExpectedReplayEvent({ segment_id: 1, urls: [] }));
36+
37+
// trigger another click
38+
void page.locator('#something').click();
39+
40+
// Send feedback via API which should trigger another immediate flush
41+
await page.locator('#send').click();
42+
43+
// This should be flushed immediately due to feedback being sent
44+
const replayEvent2 = getReplayEvent(await reqPromise2);
45+
expect(replayEvent2).toEqual(getExpectedReplayEvent({ segment_id: 2, urls: [] }));
46+
});

0 commit comments

Comments
 (0)