Skip to content

Commit 687b8b6

Browse files
committed
fix captureReplay tests
1 parent 7b77a01 commit 687b8b6

File tree

2 files changed

+56
-42
lines changed
  • packages/integration-tests/suites/replay

2 files changed

+56
-42
lines changed

packages/integration-tests/suites/replay/captureReplay/test.ts

Lines changed: 6 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
1-
import type { Page, Request } from '@playwright/test';
21
import { expect } from '@playwright/test';
32
import { SDK_VERSION } from '@sentry/browser';
43

54
import { sentryTest } from '../../../utils/fixtures';
65
import { envelopeRequestParser } from '../../../utils/helpers';
6+
import { waitForReplayRequest } from '../../../utils/replay';
77

88
sentryTest('captureReplay', async ({ getLocalTestPath, page }) => {
99
// Replay bundles are es6 only
@@ -13,7 +13,6 @@ sentryTest('captureReplay', async ({ getLocalTestPath, page }) => {
1313

1414
const reqPromise0 = waitForReplayRequest(page, 0);
1515
const reqPromise1 = waitForReplayRequest(page, 1);
16-
const reqPromise2 = waitForReplayRequest(page, 2);
1716

1817
await page.route('https://dsn.ingest.sentry.io/**/*', route => {
1918
return route.fulfill({
@@ -26,16 +25,10 @@ sentryTest('captureReplay', async ({ getLocalTestPath, page }) => {
2625
const url = await getLocalTestPath({ testDir: __dirname });
2726

2827
await page.goto(url);
29-
const req0 = await reqPromise0;
30-
const replayEvent0 = envelopeRequestParser(req0);
28+
const replayEvent0 = envelopeRequestParser(await reqPromise0);
3129

3230
await page.click('button');
33-
await reqPromise1;
34-
35-
await page.click('button');
36-
const req2 = await reqPromise2;
37-
38-
const replayEvent2 = envelopeRequestParser(req2);
31+
const replayEvent1 = envelopeRequestParser(await reqPromise1);
3932

4033
expect(replayEvent0).toBeDefined();
4134
expect(replayEvent0).toEqual({
@@ -76,15 +69,15 @@ sentryTest('captureReplay', async ({ getLocalTestPath, page }) => {
7669
tags: { sessionSampleRate: 1, errorSampleRate: 0 },
7770
});
7871

79-
expect(replayEvent2).toBeDefined();
80-
expect(replayEvent2).toEqual({
72+
expect(replayEvent1).toBeDefined();
73+
expect(replayEvent1).toEqual({
8174
type: 'replay_event',
8275
timestamp: expect.any(Number),
8376
error_ids: [],
8477
trace_ids: [],
8578
urls: [],
8679
replay_id: expect.stringMatching(/\w{32}/),
87-
segment_id: 2,
80+
segment_id: 1,
8881
replay_type: 'session',
8982
event_id: expect.stringMatching(/\w{32}/),
9083
environment: 'production',
@@ -114,23 +107,3 @@ sentryTest('captureReplay', async ({ getLocalTestPath, page }) => {
114107
tags: { sessionSampleRate: 1, errorSampleRate: 0 },
115108
});
116109
});
117-
118-
function waitForReplayRequest(page: Page, segmentId?: number): Promise<Request> {
119-
return page.waitForRequest(
120-
req => {
121-
const postData = req.postData();
122-
if (!postData) {
123-
return false;
124-
}
125-
console.log(postData);
126-
127-
const isReplayRequest = postData.includes('{"type":"replay_event"}');
128-
129-
if (isReplayRequest && segmentId !== undefined) {
130-
return postData.includes(`{"segment_id":${segmentId}}`);
131-
}
132-
return isReplayRequest;
133-
},
134-
{ timeout: 30_000 },
135-
);
136-
}

packages/integration-tests/suites/replay/captureReplayViaBrowser/test.ts

Lines changed: 50 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
import { expect } from '@playwright/test';
22
import { SDK_VERSION } from '@sentry/browser';
3-
import type { Event } from '@sentry/types';
43

54
import { sentryTest } from '../../../utils/fixtures';
6-
import { getFirstSentryEnvelopeRequest } from '../../../utils/helpers';
5+
import { envelopeRequestParser } from '../../../utils/helpers';
6+
import { waitForReplayRequest } from '../../../utils/replay';
77

88
sentryTest('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

Comments
 (0)