From 1d4305e39d234fe5cfe0782da08d10ed97b717a3 Mon Sep 17 00:00:00 2001 From: Lukas Stracke Date: Thu, 18 Jan 2024 10:27:59 +0100 Subject: [PATCH] test(core): Add integration test for `captureUserFeedback` on `captureException` and `captureMessage` --- .../withCaptureException/init.js | 16 +++++++++++++ .../withCaptureException/subject.js | 1 + .../withCaptureException/test.ts | 23 +++++++++++++++++++ .../withCaptureMessage/init.js | 16 +++++++++++++ .../withCaptureMessage/subject.js | 1 + .../withCaptureMessage/test.ts | 23 +++++++++++++++++++ 6 files changed, 80 insertions(+) create mode 100644 dev-packages/browser-integration-tests/suites/public-api/captureUserFeedback/withCaptureException/init.js create mode 100644 dev-packages/browser-integration-tests/suites/public-api/captureUserFeedback/withCaptureException/subject.js create mode 100644 dev-packages/browser-integration-tests/suites/public-api/captureUserFeedback/withCaptureException/test.ts create mode 100644 dev-packages/browser-integration-tests/suites/public-api/captureUserFeedback/withCaptureMessage/init.js create mode 100644 dev-packages/browser-integration-tests/suites/public-api/captureUserFeedback/withCaptureMessage/subject.js create mode 100644 dev-packages/browser-integration-tests/suites/public-api/captureUserFeedback/withCaptureMessage/test.ts diff --git a/dev-packages/browser-integration-tests/suites/public-api/captureUserFeedback/withCaptureException/init.js b/dev-packages/browser-integration-tests/suites/public-api/captureUserFeedback/withCaptureException/init.js new file mode 100644 index 000000000000..866263273351 --- /dev/null +++ b/dev-packages/browser-integration-tests/suites/public-api/captureUserFeedback/withCaptureException/init.js @@ -0,0 +1,16 @@ +import * as Sentry from '@sentry/browser'; + +window.Sentry = Sentry; + +Sentry.init({ + dsn: 'https://public@dsn.ingest.sentry.io/1337', + beforeSend(event) { + Sentry.captureUserFeedback({ + event_id: event.event_id, + name: 'John Doe', + email: 'john@doe.com', + comments: 'This feedback should be attached associated with the captured error', + }); + return event; + }, +}); diff --git a/dev-packages/browser-integration-tests/suites/public-api/captureUserFeedback/withCaptureException/subject.js b/dev-packages/browser-integration-tests/suites/public-api/captureUserFeedback/withCaptureException/subject.js new file mode 100644 index 000000000000..7e500a15cf8c --- /dev/null +++ b/dev-packages/browser-integration-tests/suites/public-api/captureUserFeedback/withCaptureException/subject.js @@ -0,0 +1 @@ +Sentry.captureException(new Error('Error with Feedback')); diff --git a/dev-packages/browser-integration-tests/suites/public-api/captureUserFeedback/withCaptureException/test.ts b/dev-packages/browser-integration-tests/suites/public-api/captureUserFeedback/withCaptureException/test.ts new file mode 100644 index 000000000000..d81b2c7a3db1 --- /dev/null +++ b/dev-packages/browser-integration-tests/suites/public-api/captureUserFeedback/withCaptureException/test.ts @@ -0,0 +1,23 @@ +import { expect } from '@playwright/test'; +import type { Event, UserFeedback } from '@sentry/types'; + +import { sentryTest } from '../../../../utils/fixtures'; +import { getMultipleSentryEnvelopeRequests } from '../../../../utils/helpers'; + +sentryTest('capture user feedback when captureException is called', async ({ getLocalTestPath, page }) => { + const url = await getLocalTestPath({ testDir: __dirname }); + + const data = (await getMultipleSentryEnvelopeRequests(page, 2, { url })) as (Event | UserFeedback)[]; + + expect(data).toHaveLength(2); + + const errorEvent = ('exception' in data[0] ? data[0] : data[1]) as Event; + const feedback = ('exception' in data[0] ? data[1] : data[0]) as UserFeedback; + + expect(feedback).toEqual({ + comments: 'This feedback should be attached associated with the captured error', + email: 'john@doe.com', + event_id: errorEvent.event_id, + name: 'John Doe', + }); +}); diff --git a/dev-packages/browser-integration-tests/suites/public-api/captureUserFeedback/withCaptureMessage/init.js b/dev-packages/browser-integration-tests/suites/public-api/captureUserFeedback/withCaptureMessage/init.js new file mode 100644 index 000000000000..805d6adc2e1e --- /dev/null +++ b/dev-packages/browser-integration-tests/suites/public-api/captureUserFeedback/withCaptureMessage/init.js @@ -0,0 +1,16 @@ +import * as Sentry from '@sentry/browser'; + +window.Sentry = Sentry; + +Sentry.init({ + dsn: 'https://public@dsn.ingest.sentry.io/1337', + beforeSend(event) { + Sentry.captureUserFeedback({ + event_id: event.event_id, + name: 'John Doe', + email: 'john@doe.com', + comments: 'This feedback should be attached associated with the captured message', + }); + return event; + }, +}); diff --git a/dev-packages/browser-integration-tests/suites/public-api/captureUserFeedback/withCaptureMessage/subject.js b/dev-packages/browser-integration-tests/suites/public-api/captureUserFeedback/withCaptureMessage/subject.js new file mode 100644 index 000000000000..ff25389d6b18 --- /dev/null +++ b/dev-packages/browser-integration-tests/suites/public-api/captureUserFeedback/withCaptureMessage/subject.js @@ -0,0 +1 @@ +Sentry.captureMessage('Message with Feedback'); diff --git a/dev-packages/browser-integration-tests/suites/public-api/captureUserFeedback/withCaptureMessage/test.ts b/dev-packages/browser-integration-tests/suites/public-api/captureUserFeedback/withCaptureMessage/test.ts new file mode 100644 index 000000000000..808279e2035f --- /dev/null +++ b/dev-packages/browser-integration-tests/suites/public-api/captureUserFeedback/withCaptureMessage/test.ts @@ -0,0 +1,23 @@ +import { expect } from '@playwright/test'; +import type { Event, UserFeedback } from '@sentry/types'; + +import { sentryTest } from '../../../../utils/fixtures'; +import { getMultipleSentryEnvelopeRequests } from '../../../../utils/helpers'; + +sentryTest('capture user feedback when captureMessage is called', async ({ getLocalTestPath, page }) => { + const url = await getLocalTestPath({ testDir: __dirname }); + + const data = (await getMultipleSentryEnvelopeRequests(page, 2, { url })) as (Event | UserFeedback)[]; + + expect(data).toHaveLength(2); + + const errorEvent = ('exception' in data[0] ? data[0] : data[1]) as Event; + const feedback = ('exception' in data[0] ? data[1] : data[0]) as UserFeedback; + + expect(feedback).toEqual({ + comments: 'This feedback should be attached associated with the captured message', + email: 'john@doe.com', + event_id: errorEvent.event_id, + name: 'John Doe', + }); +});