Skip to content

Commit 1365972

Browse files
committed
more tests
1 parent 450d9f5 commit 1365972

File tree

9 files changed

+297
-4
lines changed

9 files changed

+297
-4
lines changed

dev-packages/e2e-tests/test-applications/react-create-hash-router/package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
},
1616
"scripts": {
1717
"build": "react-scripts build",
18+
"dev": "react-scripts start",
1819
"start": "serve -s build",
1920
"test": "playwright test",
2021
"clean": "npx rimraf node_modules pnpm-lock.yaml",
@@ -48,4 +49,4 @@
4849
"volta": {
4950
"extends": "../../package.json"
5051
}
51-
}
52+
}

dev-packages/e2e-tests/test-applications/react-create-hash-router/src/index.tsx

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,11 @@ import {
1111
} from 'react-router-dom';
1212
import Index from './pages/Index';
1313
import User from './pages/User';
14+
import Group from './pages/Group';
15+
import Post from './pages/Post';
16+
import PostFeatured from './pages/PostFeatured';
17+
import PostRelated from './pages/PostRelated';
18+
import PostIndex from './pages/PostIndex';
1419

1520
const replay = Sentry.replayIntegration();
1621

@@ -52,8 +57,29 @@ const router = sentryCreateHashRouter([
5257
path: '/user/:id',
5358
element: <User />,
5459
},
60+
{
61+
path: '/group/:group/:user?',
62+
element: <Group />,
63+
},
64+
{
65+
path: '/v2/post/:post',
66+
element: <Post />,
67+
children: [
68+
{ index: true, element: <PostIndex /> },
69+
{
70+
path: 'featured',
71+
element: <PostFeatured />,
72+
},
73+
{
74+
path: '/v2/post/:post/related',
75+
element: <PostRelated />,
76+
},
77+
],
78+
},
5579
]);
5680

81+
console.log(router.routes);
82+
5783
const root = ReactDOM.createRoot(document.getElementById('root') as HTMLElement);
5884

5985
root.render(<RouterProvider router={router} />);
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
import * as React from 'react';
2+
3+
const Group = () => {
4+
return <p>Group page</p>;
5+
};
6+
7+
export default Group;

dev-packages/e2e-tests/test-applications/react-create-hash-router/src/pages/Index.tsx

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,21 @@ const Index = () => {
1515
<Link to="/user/5" id="navigation">
1616
navigate
1717
</Link>
18+
<Link to="/v2/post/1" id="navigation-post-1">
19+
Post 1
20+
</Link>
21+
<Link to="/v2/post/1/featured" id="navigation-post-1-featured">
22+
Post 1 featured
23+
</Link>
24+
<Link to="/v2/post/1/related" id="navigation-post-1-related">
25+
Post 1 related
26+
</Link>
27+
<Link to="/group/1" id="navigation-group-1">
28+
Group 1
29+
</Link>
30+
<Link to="/group/1/5" id="navigation-group-1-user-5">
31+
Group 1 user 5
32+
</Link>
1833
</>
1934
);
2035
};
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
import * as React from 'react';
2+
import { Outlet } from 'react-router-dom';
3+
4+
const Post = () => {
5+
return (
6+
<>
7+
<p>Post V2 page</p>
8+
<Outlet />
9+
</>
10+
);
11+
};
12+
13+
export default Post;
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
import * as React from 'react';
2+
3+
const PostFeatured = () => {
4+
return <p>Post featured page</p>;
5+
};
6+
7+
export default PostFeatured;
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
import * as React from 'react';
2+
3+
const PostIndex = () => {
4+
return <p>Post index page</p>;
5+
};
6+
7+
export default PostIndex;
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
import * as React from 'react';
2+
3+
const PostRelated = () => {
4+
return <p>Post related page</p>;
5+
};
6+
7+
export default PostRelated;

dev-packages/e2e-tests/test-applications/react-create-hash-router/tests/transactions.test.ts

Lines changed: 213 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,9 @@ test('Captures a pageload transaction', async ({ page }) => {
1414
deviceMemory: expect.any(String),
1515
effectiveConnectionType: expect.any(String),
1616
hardwareConcurrency: expect.any(String),
17-
'lcp.element': 'body > div#root > input#exception-button[type="button"]',
18-
'lcp.id': 'exception-button',
19-
'lcp.size': 1650,
17+
'lcp.element': expect.any(String),
18+
'lcp.id': expect.any(String),
19+
'lcp.size': expect.any(Number),
2020
'sentry.idle_span_finish_reason': 'idleTimeout',
2121
'sentry.op': 'pageload',
2222
'sentry.origin': 'auto.pageload.react.reactrouter_v6',
@@ -150,3 +150,213 @@ test('Captures a navigation transaction', async ({ page }) => {
150150

151151
expect(transactionEvent.spans).toEqual([]);
152152
});
153+
154+
test('Captures a parameterized path pageload transaction', async ({ page }) => {
155+
const transactionEventPromise = waitForTransaction('react-create-hash-router', event => {
156+
return event.contexts?.trace?.op === 'pageload';
157+
});
158+
159+
await page.goto('/#/v2/post/1');
160+
161+
const transactionEvent = await transactionEventPromise;
162+
163+
expect(transactionEvent).toEqual(
164+
expect.objectContaining({
165+
transaction: '/v2/post/:post',
166+
type: 'transaction',
167+
transaction_info: {
168+
source: 'route',
169+
},
170+
}),
171+
);
172+
});
173+
174+
test('Captures a parameterized path pageload transaction for nested route', async ({ page }) => {
175+
const transactionEventPromise = waitForTransaction('react-create-hash-router', event => {
176+
return event.contexts?.trace?.op === 'pageload';
177+
});
178+
179+
await page.goto('/#/v2/post/1/featured');
180+
181+
const transactionEvent = await transactionEventPromise;
182+
183+
expect(transactionEvent).toEqual(
184+
expect.objectContaining({
185+
transaction: '/v2/post/:post/featured',
186+
type: 'transaction',
187+
transaction_info: {
188+
source: 'route',
189+
},
190+
}),
191+
);
192+
});
193+
194+
test('Captures a parameterized path pageload transaction for nested route with absolute path', async ({ page }) => {
195+
const transactionEventPromise = waitForTransaction('react-create-hash-router', event => {
196+
return event.contexts?.trace?.op === 'pageload';
197+
});
198+
199+
await page.goto('/#/v2/post/1/related');
200+
201+
const transactionEvent = await transactionEventPromise;
202+
203+
expect(transactionEvent).toEqual(
204+
expect.objectContaining({
205+
transaction: '/v2/post/:post/related',
206+
type: 'transaction',
207+
transaction_info: {
208+
source: 'route',
209+
},
210+
}),
211+
);
212+
});
213+
214+
test('Captures a parameterized path navigation transaction', async ({ page }) => {
215+
const transactionEventPromise = waitForTransaction('react-create-hash-router', event => {
216+
return event.contexts?.trace?.op === 'navigation';
217+
});
218+
219+
await page.goto('/');
220+
const linkElement = page.locator('id=navigation-post-1');
221+
await linkElement.click();
222+
223+
const transactionEvent = await transactionEventPromise;
224+
225+
expect(transactionEvent).toEqual(
226+
expect.objectContaining({
227+
transaction: '/v2/post/:post',
228+
type: 'transaction',
229+
transaction_info: {
230+
source: 'route',
231+
},
232+
}),
233+
);
234+
});
235+
236+
test('Captures a parameterized path navigation transaction for nested route', async ({ page }) => {
237+
const transactionEventPromise = waitForTransaction('react-create-hash-router', event => {
238+
return event.contexts?.trace?.op === 'navigation';
239+
});
240+
241+
await page.goto('/');
242+
const linkElement = page.locator('id=navigation-post-1-featured');
243+
await linkElement.click();
244+
245+
const transactionEvent = await transactionEventPromise;
246+
247+
expect(transactionEvent).toEqual(
248+
expect.objectContaining({
249+
transaction: '/v2/post/:post/featured',
250+
type: 'transaction',
251+
transaction_info: {
252+
source: 'route',
253+
},
254+
}),
255+
);
256+
});
257+
258+
test('Captures a parameterized path navigation transaction for nested route with absolute path', async ({ page }) => {
259+
const transactionEventPromise = waitForTransaction('react-create-hash-router', event => {
260+
return event.contexts?.trace?.op === 'navigation';
261+
});
262+
263+
await page.goto('/');
264+
const linkElement = page.locator('id=navigation-post-1-related');
265+
await linkElement.click();
266+
267+
const transactionEvent = await transactionEventPromise;
268+
269+
expect(transactionEvent).toEqual(
270+
expect.objectContaining({
271+
transaction: '/v2/post/:post/related',
272+
type: 'transaction',
273+
transaction_info: {
274+
source: 'route',
275+
},
276+
}),
277+
);
278+
});
279+
280+
test('Captures a parameterized path pageload transaction for group route', async ({ page }) => {
281+
const transactionEventPromise = waitForTransaction('react-create-hash-router', event => {
282+
return event.contexts?.trace?.op === 'pageload';
283+
});
284+
285+
await page.goto('/#/group/1');
286+
287+
const transactionEvent = await transactionEventPromise;
288+
289+
expect(transactionEvent).toEqual(
290+
expect.objectContaining({
291+
transaction: '/group/:group/:user?',
292+
type: 'transaction',
293+
transaction_info: {
294+
source: 'route',
295+
},
296+
}),
297+
);
298+
});
299+
300+
test('Captures a parameterized path navigation transaction for group route', async ({ page }) => {
301+
const transactionEventPromise = waitForTransaction('react-create-hash-router', event => {
302+
return event.contexts?.trace?.op === 'navigation';
303+
});
304+
305+
await page.goto('/');
306+
const linkElement = page.locator('id=navigation-group-1');
307+
await linkElement.click();
308+
309+
const transactionEvent = await transactionEventPromise;
310+
311+
expect(transactionEvent).toEqual(
312+
expect.objectContaining({
313+
transaction: '/group/:group/:user?',
314+
type: 'transaction',
315+
transaction_info: {
316+
source: 'route',
317+
},
318+
}),
319+
);
320+
});
321+
322+
test('Captures a parameterized path pageload transaction for nested group route', async ({ page }) => {
323+
const transactionEventPromise = waitForTransaction('react-create-hash-router', event => {
324+
return event.contexts?.trace?.op === 'pageload';
325+
});
326+
327+
await page.goto('/#/group/1/5');
328+
329+
const transactionEvent = await transactionEventPromise;
330+
331+
expect(transactionEvent).toEqual(
332+
expect.objectContaining({
333+
transaction: '/group/:group/:user?',
334+
type: 'transaction',
335+
transaction_info: {
336+
source: 'route',
337+
},
338+
}),
339+
);
340+
});
341+
342+
test('Captures a parameterized path navigation transaction for nested group route', async ({ page }) => {
343+
const transactionEventPromise = waitForTransaction('react-create-hash-router', event => {
344+
return event.contexts?.trace?.op === 'navigation';
345+
});
346+
347+
await page.goto('/');
348+
const linkElement = page.locator('id=navigation-group-1-user-5');
349+
await linkElement.click();
350+
351+
const transactionEvent = await transactionEventPromise;
352+
353+
expect(transactionEvent).toEqual(
354+
expect.objectContaining({
355+
transaction: '/group/:group/:user?',
356+
type: 'transaction',
357+
transaction_info: {
358+
source: 'route',
359+
},
360+
}),
361+
);
362+
});

0 commit comments

Comments
 (0)