Skip to content

Commit 306687d

Browse files
committed
add browser integration tests
1 parent 48b6da9 commit 306687d

File tree

5 files changed

+105
-0
lines changed

5 files changed

+105
-0
lines changed
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
fetchButton.addEventListener('click', () => {
2+
// W3C spec example: property values can contain = signs
3+
// See: https://www.w3.org/TR/baggage/#example
4+
fetch('http://sentry-test-site.example/fetch-test', {
5+
headers: {
6+
baggage: 'key1=value1;property1;property2,key2=value2,key3=value3; propertyKey=propertyValue',
7+
},
8+
});
9+
});
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
<!doctype html>
2+
<html lang="en">
3+
<head>
4+
<meta charset="UTF-8" />
5+
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
6+
<title>Fetch Baggage Property Values Test</title>
7+
</head>
8+
<body>
9+
<button id="fetchButton">Make Fetch Request</button>
10+
</body>
11+
</html>
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
import { expect } from '@playwright/test';
2+
import { TRACEPARENT_REGEXP } from '@sentry/core';
3+
import { sentryTest } from '../../../../utils/fixtures';
4+
import { shouldSkipTracingTest } from '../../../../utils/helpers';
5+
6+
sentryTest(
7+
'preserves baggage property values with equal signs in fetch requests',
8+
async ({ getLocalTestUrl, page }) => {
9+
if (shouldSkipTracingTest()) {
10+
sentryTest.skip();
11+
}
12+
13+
const url = await getLocalTestUrl({ testDir: __dirname });
14+
15+
const requestPromise = page.waitForRequest('http://sentry-test-site.example/fetch-test');
16+
17+
await page.goto(url);
18+
await page.click('#fetchButton');
19+
20+
const request = await requestPromise;
21+
22+
const requestHeaders = request.headers();
23+
24+
expect(requestHeaders).toMatchObject({
25+
'sentry-trace': expect.stringMatching(TRACEPARENT_REGEXP),
26+
});
27+
28+
const baggageHeader = requestHeaders.baggage;
29+
expect(baggageHeader).toBeDefined();
30+
31+
const baggageItems = baggageHeader.split(',').map(item => decodeURIComponent(item.trim()));
32+
33+
// Verify property values with = signs are preserved
34+
expect(baggageItems).toContainEqual(expect.stringContaining('key1=value1;property1;property2'));
35+
expect(baggageItems).toContainEqual(expect.stringContaining('key2=value2'));
36+
expect(baggageItems).toContainEqual(expect.stringContaining('key3=value3; propertyKey=propertyValue'));
37+
38+
// Verify Sentry baggage is also present
39+
expect(baggageHeader).toMatch(/sentry-/);
40+
},
41+
);
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
const xhr = new XMLHttpRequest();
2+
3+
xhr.open('GET', 'http://sentry-test-site.example/1');
4+
// W3C spec example: property values can contain = signs
5+
// See: https://www.w3.org/TR/baggage/#example
6+
xhr.setRequestHeader('baggage', 'key1=value1;property1;property2,key2=value2,key3=value3; propertyKey=propertyValue');
7+
8+
xhr.send();
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
import { expect } from '@playwright/test';
2+
import { TRACEPARENT_REGEXP } from '@sentry/core';
3+
import { sentryTest } from '../../../../utils/fixtures';
4+
import { shouldSkipTracingTest } from '../../../../utils/helpers';
5+
6+
sentryTest('preserves baggage property values with equal signs in XHR requests', async ({ getLocalTestUrl, page }) => {
7+
if (shouldSkipTracingTest()) {
8+
sentryTest.skip();
9+
}
10+
11+
const url = await getLocalTestUrl({ testDir: __dirname });
12+
13+
const requestPromise = page.waitForRequest('http://sentry-test-site.example/1');
14+
15+
await page.goto(url);
16+
17+
const request = await requestPromise;
18+
19+
const requestHeaders = request.headers();
20+
21+
expect(requestHeaders).toMatchObject({
22+
'sentry-trace': expect.stringMatching(TRACEPARENT_REGEXP),
23+
});
24+
25+
const baggageHeader = requestHeaders.baggage;
26+
expect(baggageHeader).toBeDefined();
27+
const baggageItems = baggageHeader.split(',').map(item => decodeURIComponent(item.trim()));
28+
29+
// Verify property values with = signs are preserved
30+
expect(baggageItems).toContainEqual(expect.stringContaining('key1=value1;property1;property2'));
31+
expect(baggageItems).toContainEqual(expect.stringContaining('key2=value2'));
32+
expect(baggageItems).toContainEqual(expect.stringContaining('key3=value3; propertyKey=propertyValue'));
33+
34+
// Verify Sentry baggage is also present
35+
expect(baggageHeader).toMatch(/sentry-/);
36+
});

0 commit comments

Comments
 (0)