From 0f8256a8e4f060636c56423b71640361268a4a67 Mon Sep 17 00:00:00 2001 From: Onur Temizkan Date: Fri, 21 Jan 2022 17:11:47 +0000 Subject: [PATCH 1/2] test(tracing): Add tests for `backgroundtab`. --- .../browsertracing/backgroundtab/subject.js | 11 ++++++ .../browsertracing/backgroundtab/template.hbs | 11 ++++++ .../browsertracing/backgroundtab/test.ts | 39 +++++++++++++++++++ 3 files changed, 61 insertions(+) create mode 100644 packages/integration-tests/suites/tracing/browsertracing/backgroundtab/subject.js create mode 100644 packages/integration-tests/suites/tracing/browsertracing/backgroundtab/template.hbs create mode 100644 packages/integration-tests/suites/tracing/browsertracing/backgroundtab/test.ts diff --git a/packages/integration-tests/suites/tracing/browsertracing/backgroundtab/subject.js b/packages/integration-tests/suites/tracing/browsertracing/backgroundtab/subject.js new file mode 100644 index 000000000000..5355521f1655 --- /dev/null +++ b/packages/integration-tests/suites/tracing/browsertracing/backgroundtab/subject.js @@ -0,0 +1,11 @@ +document.getElementById('go-background').addEventListener('click', () => { + Object.defineProperty(document, 'hidden', { value: true, writable: true }); + const ev = document.createEvent('Event'); + ev.initEvent('visibilitychange'); + document.dispatchEvent(ev); +}); + +document.getElementById('start-transaction').addEventListener('click', () => { + window.transaction = Sentry.startTransaction({ name: 'test-transaction' }); + Sentry.getCurrentHub().configureScope(scope => scope.setSpan(window.transaction)); +}); diff --git a/packages/integration-tests/suites/tracing/browsertracing/backgroundtab/template.hbs b/packages/integration-tests/suites/tracing/browsertracing/backgroundtab/template.hbs new file mode 100644 index 000000000000..4dbbc15044dc --- /dev/null +++ b/packages/integration-tests/suites/tracing/browsertracing/backgroundtab/template.hbs @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/packages/integration-tests/suites/tracing/browsertracing/backgroundtab/test.ts b/packages/integration-tests/suites/tracing/browsertracing/backgroundtab/test.ts new file mode 100644 index 000000000000..f0cf43913e1b --- /dev/null +++ b/packages/integration-tests/suites/tracing/browsertracing/backgroundtab/test.ts @@ -0,0 +1,39 @@ +import { expect, JSHandle } from '@playwright/test'; + +import { sentryTest } from '../../../../utils/fixtures'; +import { getSentryTransactionRequest } from '../../../../utils/helpers'; + +async function getPropertyValue(handle: JSHandle, prop: string) { + return (await handle.getProperty(prop))?.jsonValue(); +} + +sentryTest('should finish transaction when the goes background', async ({ getLocalTestPath, page }) => { + const url = await getLocalTestPath({ testDir: __dirname }); + + const pageloadTransaction = await getSentryTransactionRequest(page, url); + expect(pageloadTransaction).toBeDefined(); + + await page.click('#start-transaction'); + const transactionHandle = await page.evaluateHandle('window.transaction'); + + const id_before = await getPropertyValue(transactionHandle, 'span_id'); + const name_before = await getPropertyValue(transactionHandle, 'name'); + const status_before = await getPropertyValue(transactionHandle, 'status'); + const tags_before = await getPropertyValue(transactionHandle, 'tags'); + + expect(name_before).toBe('test-transaction'); + expect(status_before).toBeUndefined(); + expect(tags_before).toStrictEqual({}); + + await page.click('#go-background'); + + const id_after = await getPropertyValue(transactionHandle, 'span_id'); + const name_after = await getPropertyValue(transactionHandle, 'name'); + const status_after = await getPropertyValue(transactionHandle, 'status'); + const tags_after = await getPropertyValue(transactionHandle, 'tags'); + + expect(id_before).toBe(id_after); + expect(name_after).toBe(name_before); + expect(status_after).toBe('cancelled'); + expect(tags_after).toStrictEqual({ finishReason: 'documentHidden', visibilitychange: 'document.hidden' }); +}); From c763af903b2dbf2b0d0061d7492e78d7b2cd926c Mon Sep 17 00:00:00 2001 From: Onur Temizkan Date: Wed, 2 Feb 2022 18:29:35 +0000 Subject: [PATCH 2/2] Add test case for `pageload` transaction. --- .../backgroundtab-custom/init.js | 10 +++++++++ .../subject.js | 0 .../template.hbs | 0 .../test.ts | 2 +- .../backgroundtab-pageload/subject.js | 6 ++++++ .../backgroundtab-pageload/template.hbs | 10 +++++++++ .../backgroundtab-pageload/test.ts | 21 +++++++++++++++++++ 7 files changed, 48 insertions(+), 1 deletion(-) create mode 100644 packages/integration-tests/suites/tracing/browsertracing/backgroundtab-custom/init.js rename packages/integration-tests/suites/tracing/browsertracing/{backgroundtab => backgroundtab-custom}/subject.js (100%) rename packages/integration-tests/suites/tracing/browsertracing/{backgroundtab => backgroundtab-custom}/template.hbs (100%) rename packages/integration-tests/suites/tracing/browsertracing/{backgroundtab => backgroundtab-custom}/test.ts (93%) create mode 100644 packages/integration-tests/suites/tracing/browsertracing/backgroundtab-pageload/subject.js create mode 100644 packages/integration-tests/suites/tracing/browsertracing/backgroundtab-pageload/template.hbs create mode 100644 packages/integration-tests/suites/tracing/browsertracing/backgroundtab-pageload/test.ts diff --git a/packages/integration-tests/suites/tracing/browsertracing/backgroundtab-custom/init.js b/packages/integration-tests/suites/tracing/browsertracing/backgroundtab-custom/init.js new file mode 100644 index 000000000000..a4bddcff1b21 --- /dev/null +++ b/packages/integration-tests/suites/tracing/browsertracing/backgroundtab-custom/init.js @@ -0,0 +1,10 @@ +import * as Sentry from '@sentry/browser'; +import { Integrations } from '@sentry/tracing'; + +window.Sentry = Sentry; + +Sentry.init({ + dsn: 'https://public@dsn.ingest.sentry.io/1337', + integrations: [new Integrations.BrowserTracing({ idleTimeout: 9000 })], + tracesSampleRate: 1, +}); diff --git a/packages/integration-tests/suites/tracing/browsertracing/backgroundtab/subject.js b/packages/integration-tests/suites/tracing/browsertracing/backgroundtab-custom/subject.js similarity index 100% rename from packages/integration-tests/suites/tracing/browsertracing/backgroundtab/subject.js rename to packages/integration-tests/suites/tracing/browsertracing/backgroundtab-custom/subject.js diff --git a/packages/integration-tests/suites/tracing/browsertracing/backgroundtab/template.hbs b/packages/integration-tests/suites/tracing/browsertracing/backgroundtab-custom/template.hbs similarity index 100% rename from packages/integration-tests/suites/tracing/browsertracing/backgroundtab/template.hbs rename to packages/integration-tests/suites/tracing/browsertracing/backgroundtab-custom/template.hbs diff --git a/packages/integration-tests/suites/tracing/browsertracing/backgroundtab/test.ts b/packages/integration-tests/suites/tracing/browsertracing/backgroundtab-custom/test.ts similarity index 93% rename from packages/integration-tests/suites/tracing/browsertracing/backgroundtab/test.ts rename to packages/integration-tests/suites/tracing/browsertracing/backgroundtab-custom/test.ts index f0cf43913e1b..513fea8f5ba5 100644 --- a/packages/integration-tests/suites/tracing/browsertracing/backgroundtab/test.ts +++ b/packages/integration-tests/suites/tracing/browsertracing/backgroundtab-custom/test.ts @@ -7,7 +7,7 @@ async function getPropertyValue(handle: JSHandle, prop: string) { return (await handle.getProperty(prop))?.jsonValue(); } -sentryTest('should finish transaction when the goes background', async ({ getLocalTestPath, page }) => { +sentryTest('should finish a custom transaction when the page goes background', async ({ getLocalTestPath, page }) => { const url = await getLocalTestPath({ testDir: __dirname }); const pageloadTransaction = await getSentryTransactionRequest(page, url); diff --git a/packages/integration-tests/suites/tracing/browsertracing/backgroundtab-pageload/subject.js b/packages/integration-tests/suites/tracing/browsertracing/backgroundtab-pageload/subject.js new file mode 100644 index 000000000000..7aa69584f070 --- /dev/null +++ b/packages/integration-tests/suites/tracing/browsertracing/backgroundtab-pageload/subject.js @@ -0,0 +1,6 @@ +document.getElementById('go-background').addEventListener('click', () => { + Object.defineProperty(document, 'hidden', { value: true, writable: true }); + const ev = document.createEvent('Event'); + ev.initEvent('visibilitychange'); + document.dispatchEvent(ev); +}); diff --git a/packages/integration-tests/suites/tracing/browsertracing/backgroundtab-pageload/template.hbs b/packages/integration-tests/suites/tracing/browsertracing/backgroundtab-pageload/template.hbs new file mode 100644 index 000000000000..1171fc0676c3 --- /dev/null +++ b/packages/integration-tests/suites/tracing/browsertracing/backgroundtab-pageload/template.hbs @@ -0,0 +1,10 @@ + + + + + + ] + + + + diff --git a/packages/integration-tests/suites/tracing/browsertracing/backgroundtab-pageload/test.ts b/packages/integration-tests/suites/tracing/browsertracing/backgroundtab-pageload/test.ts new file mode 100644 index 000000000000..d33af7a0ba03 --- /dev/null +++ b/packages/integration-tests/suites/tracing/browsertracing/backgroundtab-pageload/test.ts @@ -0,0 +1,21 @@ +import { expect } from '@playwright/test'; + +import { sentryTest } from '../../../../utils/fixtures'; +import { getSentryTransactionRequest } from '../../../../utils/helpers'; + +sentryTest('should finish pageload transaction when the page goes background', async ({ getLocalTestPath, page }) => { + const url = await getLocalTestPath({ testDir: __dirname }); + + await page.goto(url); + + page.click('#go-background'); + + const pageloadTransaction = await getSentryTransactionRequest(page); + + expect(pageloadTransaction.contexts?.trace.op).toBe('pageload'); + expect(pageloadTransaction.contexts?.trace.status).toBe('cancelled'); + expect(pageloadTransaction.contexts?.trace.tags).toMatchObject({ + visibilitychange: 'document.hidden', + finishReason: 'documentHidden', + }); +});