Skip to content

Commit 395f073

Browse files
committed
test(browser-integration-test): Add tests to check trace lifetime for user feedback events
1 parent 14dc91e commit 395f073

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
@@ -134,7 +134,7 @@ sentryTest('error during navigation has new navigation traceId', async ({ getLoc
134134

135135
const url = await getLocalTestUrl({ testDir: __dirname });
136136

137-
// ensure navigation transaction is finished
137+
// ensure pageload transaction is finished
138138
await getFirstSentryEnvelopeRequest<Event>(page, url);
139139

140140
const envelopeRequestsPromise = getMultipleSentryEnvelopeRequests<EventAndTraceHeader>(
@@ -202,7 +202,7 @@ sentryTest(
202202
});
203203
});
204204

205-
// ensure navigation transaction is finished
205+
// ensure pageload transaction is finished
206206
await getFirstSentryEnvelopeRequest<Event>(page, url);
207207

208208
const [navigationEvent, navigationTraceHeader] = await getFirstSentryEnvelopeRequest<EventAndTraceHeader>(
@@ -276,7 +276,7 @@ sentryTest(
276276
});
277277
});
278278

279-
// ensure navigation transaction is finished
279+
// ensure pageload transaction is finished
280280
await getFirstSentryEnvelopeRequest<Event>(page, url);
281281

282282
const navigationEventPromise = getFirstSentryEnvelopeRequest<EventAndTraceHeader>(
@@ -456,3 +456,45 @@ sentryTest(
456456
);
457457
},
458458
);
459+
460+
sentryTest(
461+
'user feedback event after navigation has navigation traceId in headers',
462+
async ({ getLocalTestPath, page }) => {
463+
if (shouldSkipTracingTest()) {
464+
sentryTest.skip();
465+
}
466+
467+
const url = await getLocalTestPath({ testDir: __dirname });
468+
469+
// ensure pageload transaction is finished
470+
await getFirstSentryEnvelopeRequest<Event>(page, url);
471+
472+
const navigationEvent = await getFirstSentryEnvelopeRequest<Event>(page, `${url}#foo`);
473+
474+
const navigationTraceContext = navigationEvent.contexts?.trace;
475+
expect(navigationTraceContext).toMatchObject({
476+
op: 'navigation',
477+
trace_id: expect.stringMatching(/^[0-9a-f]{32}$/),
478+
span_id: expect.stringMatching(/^[0-9a-f]{16}$/),
479+
});
480+
expect(navigationTraceContext).not.toHaveProperty('parent_span_id');
481+
482+
const feedbackEventPromise = getFirstSentryEnvelopeRequest<Event>(page);
483+
484+
await page.getByText('Report a Bug').click();
485+
expect(await page.locator(':visible:text-is("Report a Bug")').count()).toEqual(1);
486+
await page.locator('[name="name"]').fill('Jane Doe');
487+
await page.locator('[name="email"]').fill('[email protected]');
488+
await page.locator('[name="message"]').fill('my example feedback');
489+
await page.locator('[data-sentry-feedback] .btn--primary').click();
490+
491+
const feedbackEvent = await feedbackEventPromise;
492+
const feedbackTraceContext = feedbackEvent.contexts?.trace;
493+
494+
expect(feedbackTraceContext).toMatchObject({
495+
op: 'navigation',
496+
trace_id: navigationTraceContext?.trace_id,
497+
span_id: expect.stringMatching(/^[0-9a-f]{16}$/),
498+
});
499+
},
500+
);

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
@@ -429,3 +429,40 @@ sentryTest(
429429
expect(headers['baggage']).toBe(META_TAG_BAGGAGE);
430430
},
431431
);
432+
433+
sentryTest('user feedback event after pageload has pageload traceId in headers', async ({ getLocalTestPath, page }) => {
434+
if (shouldSkipTracingTest()) {
435+
sentryTest.skip();
436+
}
437+
438+
const url = await getLocalTestPath({ testDir: __dirname });
439+
440+
const pageloadEvent = await getFirstSentryEnvelopeRequest<Event>(page, url);
441+
const pageloadTraceContext = pageloadEvent.contexts?.trace;
442+
443+
expect(pageloadTraceContext).toMatchObject({
444+
op: 'pageload',
445+
trace_id: META_TAG_TRACE_ID,
446+
parent_span_id: META_TAG_PARENT_SPAN_ID,
447+
span_id: expect.stringMatching(/^[0-9a-f]{16}$/),
448+
});
449+
450+
const feedbackEventPromise = getFirstSentryEnvelopeRequest<Event>(page);
451+
452+
await page.getByText('Report a Bug').click();
453+
expect(await page.locator(':visible:text-is("Report a Bug")').count()).toEqual(1);
454+
await page.locator('[name="name"]').fill('Jane Doe');
455+
await page.locator('[name="email"]').fill('[email protected]');
456+
await page.locator('[name="message"]').fill('my example feedback');
457+
await page.locator('[data-sentry-feedback] .btn--primary').click();
458+
459+
const feedbackEvent = await feedbackEventPromise;
460+
const feedbackTraceContext = feedbackEvent.contexts?.trace;
461+
462+
expect(feedbackTraceContext).toMatchObject({
463+
op: 'pageload',
464+
trace_id: META_TAG_TRACE_ID,
465+
parent_span_id: META_TAG_PARENT_SPAN_ID,
466+
span_id: expect.stringMatching(/^[0-9a-f]{16}$/),
467+
});
468+
});

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
@@ -431,3 +431,39 @@ sentryTest(
431431
);
432432
},
433433
);
434+
435+
sentryTest('user feedback event after pageload has pageload traceId in headers', async ({ getLocalTestPath, page }) => {
436+
if (shouldSkipTracingTest()) {
437+
sentryTest.skip();
438+
}
439+
440+
const url = await getLocalTestPath({ testDir: __dirname });
441+
442+
const pageloadEvent = await getFirstSentryEnvelopeRequest<Event>(page, url);
443+
const pageloadTraceContext = pageloadEvent.contexts?.trace;
444+
445+
expect(pageloadTraceContext).toMatchObject({
446+
op: 'pageload',
447+
trace_id: expect.stringMatching(/^[0-9a-f]{32}$/),
448+
span_id: expect.stringMatching(/^[0-9a-f]{16}$/),
449+
});
450+
expect(pageloadTraceContext).not.toHaveProperty('parent_span_id');
451+
452+
const feedbackEventPromise = getFirstSentryEnvelopeRequest<Event>(page);
453+
454+
await page.getByText('Report a Bug').click();
455+
expect(await page.locator(':visible:text-is("Report a Bug")').count()).toEqual(1);
456+
await page.locator('[name="name"]').fill('Jane Doe');
457+
await page.locator('[name="email"]').fill('[email protected]');
458+
await page.locator('[name="message"]').fill('my example feedback');
459+
await page.locator('[data-sentry-feedback] .btn--primary').click();
460+
461+
const feedbackEvent = await feedbackEventPromise;
462+
const feedbackTraceContext = feedbackEvent.contexts?.trace;
463+
464+
expect(feedbackTraceContext).toMatchObject({
465+
op: 'pageload',
466+
trace_id: pageloadTraceContext?.trace_id,
467+
span_id: expect.stringMatching(/^[0-9a-f]{16}$/),
468+
});
469+
});

0 commit comments

Comments
 (0)