From 342d87b5d878eae6d68b6bf4d44623d808fbc195 Mon Sep 17 00:00:00 2001 From: Onur Temizkan Date: Tue, 21 Dec 2021 14:26:58 +0000 Subject: [PATCH 1/2] test(browser): Add integration tests for `showReportDialog` --- .../public-api/showReportDialog/init.js | 7 +++++ .../showReportDialog/inject-script/subject.js | 19 ++++++++++++ .../showReportDialog/inject-script/test.ts | 31 +++++++++++++++++++ .../public-api/showReportDialog/template.hbs | 11 +++++++ 4 files changed, 68 insertions(+) create mode 100644 packages/integration-tests/suites/public-api/showReportDialog/init.js create mode 100644 packages/integration-tests/suites/public-api/showReportDialog/inject-script/subject.js create mode 100644 packages/integration-tests/suites/public-api/showReportDialog/inject-script/test.ts create mode 100644 packages/integration-tests/suites/public-api/showReportDialog/template.hbs diff --git a/packages/integration-tests/suites/public-api/showReportDialog/init.js b/packages/integration-tests/suites/public-api/showReportDialog/init.js new file mode 100644 index 000000000000..d8c94f36fdd0 --- /dev/null +++ b/packages/integration-tests/suites/public-api/showReportDialog/init.js @@ -0,0 +1,7 @@ +import * as Sentry from '@sentry/browser'; + +window.Sentry = Sentry; + +Sentry.init({ + dsn: 'https://public@dsn.ingest.sentry.io/1337', +}); diff --git a/packages/integration-tests/suites/public-api/showReportDialog/inject-script/subject.js b/packages/integration-tests/suites/public-api/showReportDialog/inject-script/subject.js new file mode 100644 index 000000000000..a7f9e5b6e445 --- /dev/null +++ b/packages/integration-tests/suites/public-api/showReportDialog/inject-script/subject.js @@ -0,0 +1,19 @@ +Sentry.showReportDialog({ + eventId: 'test_id', + user: { + email: 'foo@bar.sentry.io', + name: 'test', + }, + lang: 'en-nz', + title: 'test_title', + subtitle: 'test_subtitle', + subtitle2: 'test_subtitle2', + labelName: 'test_label_name', + labelEmail: 'test_label_email', + labelComments: 'test_label_comments', + labelClose: 'test_label_close', + labelSubmit: 'test_label_submit', + errorGeneric: 'test_error_generic', + errorFormEntry: 'test_error_form_entry', + successMessage: 'test_success_message', +}); diff --git a/packages/integration-tests/suites/public-api/showReportDialog/inject-script/test.ts b/packages/integration-tests/suites/public-api/showReportDialog/inject-script/test.ts new file mode 100644 index 000000000000..20775d7656a2 --- /dev/null +++ b/packages/integration-tests/suites/public-api/showReportDialog/inject-script/test.ts @@ -0,0 +1,31 @@ +import { expect } from '@playwright/test'; + +import { sentryTest } from '../../../../utils/fixtures'; + +sentryTest('should inject dialog script into with correct attributes', async ({ getLocalTestPath, page }) => { + const url = await getLocalTestPath({ testDir: __dirname }); + + const dialogScriptSelector = 'head > script[src^="https://dsn.ingest.sentry.io/api/embed/error-page"]'; + + await page.goto(url); + const dialogScript = await page.waitForSelector(dialogScriptSelector, { state: 'attached' }); + const dialogScriptSrc = await dialogScript.getAttribute('src'); + const searchParams = new URLSearchParams(new URL(dialogScriptSrc || '').searchParams); + + expect(searchParams.get('dsn')).toBe('https://public@dsn.ingest.sentry.io/1337'); + expect(searchParams.get('eventId')).toBe('test_id'); + expect(searchParams.get('name')).toBe('test'); + expect(searchParams.get('email')).toBe('foo@bar.sentry.io'); + expect(searchParams.get('lang')).toBe('en-nz'); + expect(searchParams.get('title')).toBe('test_title'); + expect(searchParams.get('subtitle')).toBe('test_subtitle'); + expect(searchParams.get('subtitle2')).toBe('test_subtitle2'); + expect(searchParams.get('labelName')).toBe('test_label_name'); + expect(searchParams.get('labelEmail')).toBe('test_label_email'); + expect(searchParams.get('labelComments')).toBe('test_label_comments'); + expect(searchParams.get('labelClose')).toBe('test_label_close'); + expect(searchParams.get('labelSubmit')).toBe('test_label_submit'); + expect(searchParams.get('errorGeneric')).toBe('test_error_generic'); + expect(searchParams.get('errorFormEntry')).toBe('test_error_form_entry'); + expect(searchParams.get('successMessage')).toBe('test_success_message'); +}); diff --git a/packages/integration-tests/suites/public-api/showReportDialog/template.hbs b/packages/integration-tests/suites/public-api/showReportDialog/template.hbs new file mode 100644 index 000000000000..a28a09b7b485 --- /dev/null +++ b/packages/integration-tests/suites/public-api/showReportDialog/template.hbs @@ -0,0 +1,11 @@ + + + + + + + + + + + From 70ca1242b49db2e86d7aa4a765d0fb9967687f4b Mon Sep 17 00:00:00 2001 From: Onur Temizkan Date: Tue, 21 Dec 2021 17:26:37 +0000 Subject: [PATCH 2/2] Assert against `src` of dialog script. --- .../suites/public-api/showReportDialog/inject-script/test.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/packages/integration-tests/suites/public-api/showReportDialog/inject-script/test.ts b/packages/integration-tests/suites/public-api/showReportDialog/inject-script/test.ts index 20775d7656a2..e0db0d21cf53 100644 --- a/packages/integration-tests/suites/public-api/showReportDialog/inject-script/test.ts +++ b/packages/integration-tests/suites/public-api/showReportDialog/inject-script/test.ts @@ -10,6 +10,10 @@ sentryTest('should inject dialog script into with correct attributes', as await page.goto(url); const dialogScript = await page.waitForSelector(dialogScriptSelector, { state: 'attached' }); const dialogScriptSrc = await dialogScript.getAttribute('src'); + + expect(dialogScriptSrc?.startsWith('https://dsn.ingest.sentry.io/api/embed/error-page/?')).toBe(true); + // After `?` is searchParams. + const searchParams = new URLSearchParams(new URL(dialogScriptSrc || '').searchParams); expect(searchParams.get('dsn')).toBe('https://public@dsn.ingest.sentry.io/1337');