@@ -53,3 +53,148 @@ test('Creates a navigation transaction for app router routes', async ({ page })
53
53
expect ( await clientNavigationTransactionPromise ) . toBeDefined ( ) ;
54
54
expect ( await serverComponentTransactionPromise ) . toBeDefined ( ) ;
55
55
} ) ;
56
+
57
+ test ( 'Creates a navigation transaction for `router.push()`' , async ( { page } ) => {
58
+ const navigationTransactionPromise = waitForTransaction ( 'nextjs-app-dir' , transactionEvent => {
59
+ return (
60
+ transactionEvent ?. transaction === `/navigation/42/router-push` &&
61
+ transactionEvent . contexts ?. trace ?. op === 'navigation' &&
62
+ transactionEvent . contexts . trace . data ?. [ 'navigation.type' ] === 'router.push'
63
+ ) ;
64
+ } ) ;
65
+
66
+ await page . goto ( '/navigation' ) ;
67
+ await page . waitForTimeout ( 3000 ) ;
68
+ await page . getByText ( 'router.push()' ) . click ( ) ;
69
+
70
+ expect ( await navigationTransactionPromise ) . toBeDefined ( ) ;
71
+ } ) ;
72
+
73
+ test ( 'Creates a navigation transaction for `router.replace()`' , async ( { page } ) => {
74
+ const navigationTransactionPromise = waitForTransaction ( 'nextjs-app-dir' , transactionEvent => {
75
+ return (
76
+ transactionEvent ?. transaction === `/navigation/42/router-replace` &&
77
+ transactionEvent . contexts ?. trace ?. op === 'navigation' &&
78
+ transactionEvent . contexts . trace . data ?. [ 'navigation.type' ] === 'router.replace'
79
+ ) ;
80
+ } ) ;
81
+
82
+ await page . goto ( '/navigation' ) ;
83
+ await page . waitForTimeout ( 3000 ) ;
84
+ await page . getByText ( 'router.replace()' ) . click ( ) ;
85
+
86
+ expect ( await navigationTransactionPromise ) . toBeDefined ( ) ;
87
+ } ) ;
88
+
89
+ test ( 'Creates a navigation transaction for `router.back()`' , async ( { page } ) => {
90
+ const navigationTransactionPromise = waitForTransaction ( 'nextjs-app-dir' , transactionEvent => {
91
+ return (
92
+ transactionEvent ?. transaction === `/navigation/1337/router-back` &&
93
+ transactionEvent . contexts ?. trace ?. op === 'navigation'
94
+ ) ;
95
+ } ) ;
96
+
97
+ await page . goto ( '/navigation/1337/router-back' ) ;
98
+ await page . waitForTimeout ( 3000 ) ;
99
+ await page . getByText ( 'Go back home' ) . click ( ) ;
100
+ await page . waitForTimeout ( 3000 ) ;
101
+ await page . getByText ( 'router.back()' ) . click ( ) ;
102
+
103
+ expect ( await navigationTransactionPromise ) . toMatchObject ( {
104
+ contexts : {
105
+ trace : {
106
+ data : {
107
+ 'navigation.type' : 'router.back' ,
108
+ } ,
109
+ } ,
110
+ } ,
111
+ } ) ;
112
+ } ) ;
113
+
114
+ test ( 'Creates a navigation transaction for `router.forward()`' , async ( { page } ) => {
115
+ const navigationTransactionPromise = waitForTransaction ( 'nextjs-app-dir' , transactionEvent => {
116
+ return (
117
+ transactionEvent ?. transaction === `/navigation/42/router-push` &&
118
+ transactionEvent . contexts ?. trace ?. op === 'navigation' &&
119
+ transactionEvent . contexts . trace . data ?. [ 'navigation.type' ] === 'router.forward'
120
+ ) ;
121
+ } ) ;
122
+
123
+ await page . goto ( '/navigation' ) ;
124
+ await page . waitForTimeout ( 3000 ) ;
125
+ await page . getByText ( 'router.push()' ) . click ( ) ;
126
+ await page . waitForTimeout ( 3000 ) ;
127
+ await page . goBack ( ) ;
128
+ await page . waitForTimeout ( 3000 ) ;
129
+ await page . getByText ( 'router.forward()' ) . click ( ) ;
130
+
131
+ expect ( await navigationTransactionPromise ) . toBeDefined ( ) ;
132
+ } ) ;
133
+
134
+ test ( 'Creates a navigation transaction for `<Link />`' , async ( { page } ) => {
135
+ const navigationTransactionPromise = waitForTransaction ( 'nextjs-app-dir' , transactionEvent => {
136
+ return (
137
+ transactionEvent ?. transaction === `/navigation/42/link` &&
138
+ transactionEvent . contexts ?. trace ?. op === 'navigation' &&
139
+ transactionEvent . contexts . trace . data ?. [ 'navigation.type' ] === 'router.push'
140
+ ) ;
141
+ } ) ;
142
+
143
+ await page . goto ( '/navigation' ) ;
144
+ await page . getByText ( 'Normal Link' ) . click ( ) ;
145
+
146
+ expect ( await navigationTransactionPromise ) . toBeDefined ( ) ;
147
+ } ) ;
148
+
149
+ test ( 'Creates a navigation transaction for `<Link replace />`' , async ( { page } ) => {
150
+ const navigationTransactionPromise = waitForTransaction ( 'nextjs-app-dir' , transactionEvent => {
151
+ return (
152
+ transactionEvent ?. transaction === `/navigation/42/link-replace` &&
153
+ transactionEvent . contexts ?. trace ?. op === 'navigation' &&
154
+ transactionEvent . contexts . trace . data ?. [ 'navigation.type' ] === 'router.replace'
155
+ ) ;
156
+ } ) ;
157
+
158
+ await page . goto ( '/navigation' ) ;
159
+ await page . waitForTimeout ( 3000 ) ;
160
+ await page . getByText ( 'Link Replace' ) . click ( ) ;
161
+
162
+ expect ( await navigationTransactionPromise ) . toBeDefined ( ) ;
163
+ } ) ;
164
+
165
+ test ( 'Creates a navigation transaction for browser-back' , async ( { page } ) => {
166
+ const navigationTransactionPromise = waitForTransaction ( 'nextjs-app-dir' , transactionEvent => {
167
+ return (
168
+ transactionEvent ?. transaction === `/navigation/42/browser-back` &&
169
+ transactionEvent . contexts ?. trace ?. op === 'navigation' &&
170
+ transactionEvent . contexts . trace . data ?. [ 'navigation.type' ] === 'browser.popstate'
171
+ ) ;
172
+ } ) ;
173
+
174
+ await page . goto ( '/navigation/42/browser-back' ) ;
175
+ await page . waitForTimeout ( 3000 ) ;
176
+ await page . getByText ( 'Go back home' ) . click ( ) ;
177
+ await page . waitForTimeout ( 3000 ) ;
178
+ await page . goBack ( ) ;
179
+
180
+ expect ( await navigationTransactionPromise ) . toBeDefined ( ) ;
181
+ } ) ;
182
+
183
+ test ( 'Creates a navigation transaction for browser-forward' , async ( { page } ) => {
184
+ const navigationTransactionPromise = waitForTransaction ( 'nextjs-app-dir' , transactionEvent => {
185
+ return (
186
+ transactionEvent ?. transaction === `/navigation/42/router-push` &&
187
+ transactionEvent . contexts ?. trace ?. op === 'navigation' &&
188
+ transactionEvent . contexts . trace . data ?. [ 'navigation.type' ] === 'browser.popstate'
189
+ ) ;
190
+ } ) ;
191
+
192
+ await page . goto ( '/navigation' ) ;
193
+ await page . getByText ( 'router.push()' ) . click ( ) ;
194
+ await page . waitForTimeout ( 3000 ) ;
195
+ await page . goBack ( ) ;
196
+ await page . waitForTimeout ( 3000 ) ;
197
+ await page . goForward ( ) ;
198
+
199
+ expect ( await navigationTransactionPromise ) . toBeDefined ( ) ;
200
+ } ) ;
0 commit comments