From b3830222cc415b473ac990789af0d20807cd3d66 Mon Sep 17 00:00:00 2001 From: Lukas Stracke Date: Thu, 11 Jan 2024 12:48:30 +0100 Subject: [PATCH 1/2] fix(core): Take user from current scope when starting a session --- .../suites/sessions/initial-scope/init.js | 19 +++++++++ .../sessions/initial-scope/template.html | 9 +++++ .../suites/sessions/initial-scope/test.ts | 40 +++++++++++++++++++ packages/core/src/exports.ts | 4 +- 4 files changed, 70 insertions(+), 2 deletions(-) create mode 100644 dev-packages/browser-integration-tests/suites/sessions/initial-scope/init.js create mode 100644 dev-packages/browser-integration-tests/suites/sessions/initial-scope/template.html create mode 100644 dev-packages/browser-integration-tests/suites/sessions/initial-scope/test.ts diff --git a/dev-packages/browser-integration-tests/suites/sessions/initial-scope/init.js b/dev-packages/browser-integration-tests/suites/sessions/initial-scope/init.js new file mode 100644 index 000000000000..b1da7154df87 --- /dev/null +++ b/dev-packages/browser-integration-tests/suites/sessions/initial-scope/init.js @@ -0,0 +1,19 @@ +import * as Sentry from '@sentry/browser'; + +window.Sentry = Sentry; + +Sentry.init({ + dsn: 'https://public@dsn.ingest.sentry.io/1337', + release: '0.1', + initialScope: { + user: { + id: '1337', + email: 'user@name.com', + username: 'user1337', + }, + tags: { + test: 'abc', + }, + }, + debug: true, +}); diff --git a/dev-packages/browser-integration-tests/suites/sessions/initial-scope/template.html b/dev-packages/browser-integration-tests/suites/sessions/initial-scope/template.html new file mode 100644 index 000000000000..77906444cbce --- /dev/null +++ b/dev-packages/browser-integration-tests/suites/sessions/initial-scope/template.html @@ -0,0 +1,9 @@ + + + + + + + Navigate + + diff --git a/dev-packages/browser-integration-tests/suites/sessions/initial-scope/test.ts b/dev-packages/browser-integration-tests/suites/sessions/initial-scope/test.ts new file mode 100644 index 000000000000..2044602e6021 --- /dev/null +++ b/dev-packages/browser-integration-tests/suites/sessions/initial-scope/test.ts @@ -0,0 +1,40 @@ +import type { Route } from '@playwright/test'; +import { expect } from '@playwright/test'; +import type { SessionContext } from '@sentry/types'; + +import { sentryTest } from '../../../utils/fixtures'; +import { getFirstSentryEnvelopeRequest } from '../../../utils/helpers'; + +sentryTest('should start a new session on pageload.', async ({ getLocalTestPath, page }) => { + const url = await getLocalTestPath({ testDir: __dirname }); + const session = await getFirstSentryEnvelopeRequest(page, url); + + expect(session).toBeDefined(); + expect(session.init).toBe(true); + expect(session.errors).toBe(0); + expect(session.status).toBe('ok'); + expect(session.did).toBe('dsdd'); +}); + +sentryTest('should start a new session with navigation.', async ({ getLocalTestPath, page, browserName }) => { + // Navigations get CORS error on Firefox and WebKit as we're using `file://` protocol. + if (browserName !== 'chromium') { + sentryTest.skip(); + } + + const url = await getLocalTestPath({ testDir: __dirname }); + await page.route('**/foo', (route: Route) => route.fulfill({ path: `${__dirname}/dist/index.html` })); + + const initSession = await getFirstSentryEnvelopeRequest(page, url); + + await page.click('#navigate'); + + const newSession = await getFirstSentryEnvelopeRequest(page, url); + + expect(newSession).toBeDefined(); + expect(newSession.init).toBe(true); + expect(newSession.errors).toBe(0); + expect(newSession.status).toBe('ok'); + expect(newSession.sid).toBeDefined(); + expect(initSession.sid).not.toBe(newSession.sid); +}); diff --git a/packages/core/src/exports.ts b/packages/core/src/exports.ts index e92114a024dd..c1d7cd96e6d8 100644 --- a/packages/core/src/exports.ts +++ b/packages/core/src/exports.ts @@ -383,7 +383,7 @@ export function startSession(context?: SessionContext): Session { const session = makeSession({ release, environment, - user: isolationScope.getUser(), + user: currentScope.getUser() || isolationScope.getUser(), ...(userAgent && { userAgent }), ...context, }); @@ -413,7 +413,7 @@ export function endSession(): void { const isolationScope = getIsolationScope(); const currentScope = getCurrentScope(); - const session = isolationScope.getSession(); + const session = currentScope.getSession() || isolationScope.getSession(); if (session) { closeSession(session); } From 392a5cfcbba91a327bbf0ebbe7ec786551133214 Mon Sep 17 00:00:00 2001 From: Lukas Stracke Date: Thu, 11 Jan 2024 18:11:54 +0100 Subject: [PATCH 2/2] fix tests lol --- .../suites/sessions/initial-scope/init.js | 3 --- .../suites/sessions/initial-scope/test.ts | 3 ++- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/dev-packages/browser-integration-tests/suites/sessions/initial-scope/init.js b/dev-packages/browser-integration-tests/suites/sessions/initial-scope/init.js index b1da7154df87..c22f576ca681 100644 --- a/dev-packages/browser-integration-tests/suites/sessions/initial-scope/init.js +++ b/dev-packages/browser-integration-tests/suites/sessions/initial-scope/init.js @@ -11,9 +11,6 @@ Sentry.init({ email: 'user@name.com', username: 'user1337', }, - tags: { - test: 'abc', - }, }, debug: true, }); diff --git a/dev-packages/browser-integration-tests/suites/sessions/initial-scope/test.ts b/dev-packages/browser-integration-tests/suites/sessions/initial-scope/test.ts index 2044602e6021..b7de815b7825 100644 --- a/dev-packages/browser-integration-tests/suites/sessions/initial-scope/test.ts +++ b/dev-packages/browser-integration-tests/suites/sessions/initial-scope/test.ts @@ -13,7 +13,7 @@ sentryTest('should start a new session on pageload.', async ({ getLocalTestPath, expect(session.init).toBe(true); expect(session.errors).toBe(0); expect(session.status).toBe('ok'); - expect(session.did).toBe('dsdd'); + expect(session.did).toBe('1337'); }); sentryTest('should start a new session with navigation.', async ({ getLocalTestPath, page, browserName }) => { @@ -37,4 +37,5 @@ sentryTest('should start a new session with navigation.', async ({ getLocalTestP expect(newSession.status).toBe('ok'); expect(newSession.sid).toBeDefined(); expect(initSession.sid).not.toBe(newSession.sid); + expect(newSession.did).toBe('1337'); });