11import { expect } from '@playwright/test' ;
2- import { SEMANTIC_LINK_ATTRIBUTE_LINK_TYPE , type Event } from '@sentry/core' ;
2+ import { SEMANTIC_LINK_ATTRIBUTE_LINK_TYPE } from '@sentry/core' ;
33
44import { sentryTest } from '../../../../../utils/fixtures' ;
5- import {
6- envelopeRequestParser ,
7- getFirstSentryEnvelopeRequest ,
8- shouldSkipTracingTest ,
9- waitForTransactionRequest ,
10- } from '../../../../../utils/helpers' ;
5+ import { envelopeRequestParser , shouldSkipTracingTest , waitForTransactionRequest } from '../../../../../utils/helpers' ;
116
127sentryTest ( "navigation spans link back to previous trace's root span" , async ( { getLocalTestUrl, page } ) => {
138 if ( shouldSkipTracingTest ( ) ) {
@@ -16,24 +11,34 @@ sentryTest("navigation spans link back to previous trace's root span", async ({
1611
1712 const url = await getLocalTestUrl ( { testDir : __dirname } ) ;
1813
19- const pageloadRequest = await getFirstSentryEnvelopeRequest < Event > ( page , url ) ;
20- const navigationRequest = await getFirstSentryEnvelopeRequest < Event > ( page , `${ url } #foo` ) ;
21- const navigation2Request = await getFirstSentryEnvelopeRequest < Event > ( page , `${ url } #bar` ) ;
14+ const pageloadTraceContext = await sentryTest . step ( 'Initial pageload' , async ( ) => {
15+ const pageloadRequestPromise = waitForTransactionRequest ( page , evt => evt . contexts ?. trace ?. op === 'pageload' ) ;
16+ await page . goto ( url ) ;
17+ const pageloadRequest = envelopeRequestParser ( await pageloadRequestPromise ) ;
18+ return pageloadRequest . contexts ?. trace ;
19+ } ) ;
2220
23- const pageloadTraceContext = pageloadRequest . contexts ?. trace ;
24- const navigationTraceContext = navigationRequest . contexts ?. trace ;
25- const navigation2TraceContext = navigation2Request . contexts ?. trace ;
21+ const navigation1TraceContext = await sentryTest . step ( 'First navigation' , async ( ) => {
22+ const navigation1RequestPromise = waitForTransactionRequest ( page , evt => evt . contexts ?. trace ?. op === 'navigation' ) ;
23+ await page . goto ( `${ url } #foo` ) ;
24+ const navigation1Request = envelopeRequestParser ( await navigation1RequestPromise ) ;
25+ return navigation1Request . contexts ?. trace ;
26+ } ) ;
27+
28+ const navigation2TraceContext = await sentryTest . step ( 'Second navigation' , async ( ) => {
29+ const navigation2RequestPromise = waitForTransactionRequest ( page , evt => evt . contexts ?. trace ?. op === 'navigation' ) ;
30+ await page . goto ( `${ url } #bar` ) ;
31+ const navigation2Request = envelopeRequestParser ( await navigation2RequestPromise ) ;
32+ return navigation2Request . contexts ?. trace ;
33+ } ) ;
2634
2735 const pageloadTraceId = pageloadTraceContext ?. trace_id ;
28- const navigationTraceId = navigationTraceContext ?. trace_id ;
36+ const navigation1TraceId = navigation1TraceContext ?. trace_id ;
2937 const navigation2TraceId = navigation2TraceContext ?. trace_id ;
3038
31- expect ( pageloadTraceContext ?. op ) . toBe ( 'pageload' ) ;
32- expect ( navigationTraceContext ?. op ) . toBe ( 'navigation' ) ;
33- expect ( navigation2TraceContext ?. op ) . toBe ( 'navigation' ) ;
34-
3539 expect ( pageloadTraceContext ?. links ) . toBeUndefined ( ) ;
36- expect ( navigationTraceContext ?. links ) . toEqual ( [
40+
41+ expect ( navigation1TraceContext ?. links ) . toEqual ( [
3742 {
3843 trace_id : pageloadTraceId ,
3944 span_id : pageloadTraceContext ?. span_id ,
@@ -46,17 +51,17 @@ sentryTest("navigation spans link back to previous trace's root span", async ({
4651
4752 expect ( navigation2TraceContext ?. links ) . toEqual ( [
4853 {
49- trace_id : navigationTraceId ,
50- span_id : navigationTraceContext ?. span_id ,
54+ trace_id : navigation1TraceId ,
55+ span_id : navigation1TraceContext ?. span_id ,
5156 sampled : true ,
5257 attributes : {
5358 [ SEMANTIC_LINK_ATTRIBUTE_LINK_TYPE ] : 'previous_trace' ,
5459 } ,
5560 } ,
5661 ] ) ;
5762
58- expect ( pageloadTraceId ) . not . toEqual ( navigationTraceId ) ;
59- expect ( navigationTraceId ) . not . toEqual ( navigation2TraceId ) ;
63+ expect ( pageloadTraceId ) . not . toEqual ( navigation1TraceId ) ;
64+ expect ( navigation1TraceId ) . not . toEqual ( navigation2TraceId ) ;
6065 expect ( pageloadTraceId ) . not . toEqual ( navigation2TraceId ) ;
6166} ) ;
6267
@@ -67,14 +72,21 @@ sentryTest("doesn't link between hard page reloads by default", async ({ getLoca
6772
6873 const url = await getLocalTestUrl ( { testDir : __dirname } ) ;
6974
70- const pageload1Event = await getFirstSentryEnvelopeRequest < Event > ( page , url ) ;
75+ await sentryTest . step ( 'First pageload' , async ( ) => {
76+ const pageloadRequestPromise = waitForTransactionRequest ( page , evt => evt . contexts ?. trace ?. op === 'pageload' ) ;
77+ await page . goto ( url ) ;
78+ const pageload1Event = envelopeRequestParser ( await pageloadRequestPromise ) ;
79+
80+ expect ( pageload1Event . contexts ?. trace ) . toBeDefined ( ) ;
81+ expect ( pageload1Event . contexts ?. trace ?. links ) . toBeUndefined ( ) ;
82+ } ) ;
7183
72- const pageload2RequestPromise = waitForTransactionRequest ( page , evt => evt . contexts ?. trace ?. op === 'pageload' ) ;
73- await page . reload ( ) ;
74- const pageload2Event = envelopeRequestParser ( await pageload2RequestPromise ) ;
84+ await sentryTest . step ( 'Second pageload' , async ( ) => {
85+ const pageload2RequestPromise = waitForTransactionRequest ( page , evt => evt . contexts ?. trace ?. op === 'pageload' ) ;
86+ await page . reload ( ) ;
87+ const pageload2Event = envelopeRequestParser ( await pageload2RequestPromise ) ;
7588
76- expect ( pageload1Event . contexts ?. trace ) . toBeDefined ( ) ;
77- expect ( pageload2Event . contexts ?. trace ) . toBeDefined ( ) ;
78- expect ( pageload1Event . contexts ?. trace ?. links ) . toBeUndefined ( ) ;
79- expect ( pageload2Event . contexts ?. trace ?. links ) . toBeUndefined ( ) ;
89+ expect ( pageload2Event . contexts ?. trace ) . toBeDefined ( ) ;
90+ expect ( pageload2Event . contexts ?. trace ?. links ) . toBeUndefined ( ) ;
91+ } ) ;
8092} ) ;
0 commit comments