@@ -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