Skip to content

Commit 8ca35ee

Browse files
committed
test(browser-integration-test): Add tests to check trace lifetime for user feedback events
1 parent 8570dd6 commit 8ca35ee

File tree

4 files changed

+119
-4
lines changed

4 files changed

+119
-4
lines changed

dev-packages/browser-integration-tests/suites/tracing/trace-lifetime/init.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ window.Sentry = Sentry;
44

55
Sentry.init({
66
dsn: 'https://[email protected]/1337',
7-
integrations: [Sentry.browserTracingIntegration()],
7+
integrations: [Sentry.browserTracingIntegration(), Sentry.feedbackIntegration()],
88
tracePropagationTargets: ['http://example.com'],
99
tracesSampleRate: 1,
1010
});

dev-packages/browser-integration-tests/suites/tracing/trace-lifetime/navigation/test.ts

Lines changed: 45 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,7 @@ sentryTest('error during navigation has new navigation traceId', async ({ getLoc
126126

127127
const url = await getLocalTestPath({ testDir: __dirname });
128128

129-
// ensure navigation transaction is finished
129+
// ensure pageload transaction is finished
130130
await getFirstSentryEnvelopeRequest<Event>(page, url);
131131

132132
const envelopeRequestsPromise = getMultipleSentryEnvelopeRequests<EventAndTraceHeader>(
@@ -191,7 +191,7 @@ sentryTest(
191191

192192
const url = await getLocalTestPath({ testDir: __dirname });
193193

194-
// ensure navigation transaction is finished
194+
// ensure pageload transaction is finished
195195
await getFirstSentryEnvelopeRequest<Event>(page, url);
196196

197197
const [navigationEvent, navigationTraceHeader] = await getFirstSentryEnvelopeRequest<EventAndTraceHeader>(
@@ -239,7 +239,7 @@ sentryTest(
239239

240240
const url = await getLocalTestPath({ testDir: __dirname });
241241

242-
// ensure navigation transaction is finished
242+
// ensure pageload transaction is finished
243243
await getFirstSentryEnvelopeRequest<Event>(page, url);
244244

245245
const navigationEventPromise = getFirstSentryEnvelopeRequest<EventAndTraceHeader>(
@@ -381,3 +381,45 @@ sentryTest(
381381
);
382382
},
383383
);
384+
385+
sentryTest(
386+
'user feedback event after navigation has navigation traceId in headers',
387+
async ({ getLocalTestPath, page }) => {
388+
if (shouldSkipTracingTest()) {
389+
sentryTest.skip();
390+
}
391+
392+
const url = await getLocalTestPath({ testDir: __dirname });
393+
394+
// ensure pageload transaction is finished
395+
await getFirstSentryEnvelopeRequest<Event>(page, url);
396+
397+
const navigationEvent = await getFirstSentryEnvelopeRequest<Event>(page, `${url}#foo`);
398+
399+
const navigationTraceContext = navigationEvent.contexts?.trace;
400+
expect(navigationTraceContext).toMatchObject({
401+
op: 'navigation',
402+
trace_id: expect.stringMatching(/^[0-9a-f]{32}$/),
403+
span_id: expect.stringMatching(/^[0-9a-f]{16}$/),
404+
});
405+
expect(navigationTraceContext).not.toHaveProperty('parent_span_id');
406+
407+
const feedbackEventPromise = getFirstSentryEnvelopeRequest<Event>(page);
408+
409+
await page.getByText('Report a Bug').click();
410+
expect(await page.locator(':visible:text-is("Report a Bug")').count()).toEqual(1);
411+
await page.locator('[name="name"]').fill('Jane Doe');
412+
await page.locator('[name="email"]').fill('[email protected]');
413+
await page.locator('[name="message"]').fill('my example feedback');
414+
await page.locator('[data-sentry-feedback] .btn--primary').click();
415+
416+
const feedbackEvent = await feedbackEventPromise;
417+
const feedbackTraceContext = feedbackEvent.contexts?.trace;
418+
419+
expect(feedbackTraceContext).toMatchObject({
420+
op: 'navigation',
421+
trace_id: navigationTraceContext?.trace_id,
422+
span_id: expect.stringMatching(/^[0-9a-f]{16}$/),
423+
});
424+
},
425+
);

dev-packages/browser-integration-tests/suites/tracing/trace-lifetime/pageload-meta/test.ts

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -362,3 +362,40 @@ sentryTest(
362362
expect(headers['baggage']).toBe(META_TAG_BAGGAGE);
363363
},
364364
);
365+
366+
sentryTest('user feedback event after pageload has pageload traceId in headers', async ({ getLocalTestPath, page }) => {
367+
if (shouldSkipTracingTest()) {
368+
sentryTest.skip();
369+
}
370+
371+
const url = await getLocalTestPath({ testDir: __dirname });
372+
373+
const pageloadEvent = await getFirstSentryEnvelopeRequest<Event>(page, url);
374+
const pageloadTraceContext = pageloadEvent.contexts?.trace;
375+
376+
expect(pageloadTraceContext).toMatchObject({
377+
op: 'pageload',
378+
trace_id: META_TAG_TRACE_ID,
379+
parent_span_id: META_TAG_PARENT_SPAN_ID,
380+
span_id: expect.stringMatching(/^[0-9a-f]{16}$/),
381+
});
382+
383+
const feedbackEventPromise = getFirstSentryEnvelopeRequest<Event>(page);
384+
385+
await page.getByText('Report a Bug').click();
386+
expect(await page.locator(':visible:text-is("Report a Bug")').count()).toEqual(1);
387+
await page.locator('[name="name"]').fill('Jane Doe');
388+
await page.locator('[name="email"]').fill('[email protected]');
389+
await page.locator('[name="message"]').fill('my example feedback');
390+
await page.locator('[data-sentry-feedback] .btn--primary').click();
391+
392+
const feedbackEvent = await feedbackEventPromise;
393+
const feedbackTraceContext = feedbackEvent.contexts?.trace;
394+
395+
expect(feedbackTraceContext).toMatchObject({
396+
op: 'pageload',
397+
trace_id: META_TAG_TRACE_ID,
398+
parent_span_id: META_TAG_PARENT_SPAN_ID,
399+
span_id: expect.stringMatching(/^[0-9a-f]{16}$/),
400+
});
401+
});

dev-packages/browser-integration-tests/suites/tracing/trace-lifetime/pageload/test.ts

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -362,3 +362,39 @@ sentryTest(
362362
);
363363
},
364364
);
365+
366+
sentryTest('user feedback event after pageload has pageload traceId in headers', async ({ getLocalTestPath, page }) => {
367+
if (shouldSkipTracingTest()) {
368+
sentryTest.skip();
369+
}
370+
371+
const url = await getLocalTestPath({ testDir: __dirname });
372+
373+
const pageloadEvent = await getFirstSentryEnvelopeRequest<Event>(page, url);
374+
const pageloadTraceContext = pageloadEvent.contexts?.trace;
375+
376+
expect(pageloadTraceContext).toMatchObject({
377+
op: 'pageload',
378+
trace_id: expect.stringMatching(/^[0-9a-f]{32}$/),
379+
span_id: expect.stringMatching(/^[0-9a-f]{16}$/),
380+
});
381+
expect(pageloadTraceContext).not.toHaveProperty('parent_span_id');
382+
383+
const feedbackEventPromise = getFirstSentryEnvelopeRequest<Event>(page);
384+
385+
await page.getByText('Report a Bug').click();
386+
expect(await page.locator(':visible:text-is("Report a Bug")').count()).toEqual(1);
387+
await page.locator('[name="name"]').fill('Jane Doe');
388+
await page.locator('[name="email"]').fill('[email protected]');
389+
await page.locator('[name="message"]').fill('my example feedback');
390+
await page.locator('[data-sentry-feedback] .btn--primary').click();
391+
392+
const feedbackEvent = await feedbackEventPromise;
393+
const feedbackTraceContext = feedbackEvent.contexts?.trace;
394+
395+
expect(feedbackTraceContext).toMatchObject({
396+
op: 'pageload',
397+
trace_id: pageloadTraceContext?.trace_id,
398+
span_id: expect.stringMatching(/^[0-9a-f]{16}$/),
399+
});
400+
});

0 commit comments

Comments
 (0)