Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line numberDiff line numberDiff line change
Expand Up@@ -2,5 +2,5 @@ import { startEventProxyServer } from '@sentry-internal/test-utils';

startEventProxyServer({
port: 3031,
proxyServerName: 'nextjs-13-app-dir',
proxyServerName: 'nextjs-app-dir',
});
Original file line numberDiff line numberDiff line change
Expand Up@@ -2,9 +2,7 @@ import { expect, test } from '@playwright/test';
import { waitForTransaction } from '@sentry-internal/test-utils';

test('Should allow for async context isolation in the edge SDK', async ({ request }) => {
// test.skip(process.env.TEST_ENV === 'development', "Doesn't work in dev mode.");

const edgerouteTransactionPromise = waitForTransaction('nextjs-13-app-dir', async transactionEvent => {
const edgerouteTransactionPromise = waitForTransaction('nextjs-app-dir', async transactionEvent => {
return transactionEvent?.transaction === 'GET /api/async-context-edge-endpoint';
});

Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -4,7 +4,7 @@ import { waitForTransaction } from '@sentry-internal/test-utils';
test('Creates a pageload transaction for app router routes', async ({ page }) => {
const randomRoute = String(Math.random());

const clientPageloadTransactionPromise = waitForTransaction('nextjs-13-app-dir', transactionEvent => {
const clientPageloadTransactionPromise = waitForTransaction('nextjs-app-dir', transactionEvent => {
return (
transactionEvent?.transaction === `/server-component/parameter/${randomRoute}` &&
transactionEvent.contexts?.trace?.op === 'pageload'
Expand All@@ -19,7 +19,7 @@ test('Creates a pageload transaction for app router routes', async ({ page }) =>
test('Creates a navigation transaction for app router routes', async ({ page }) => {
const randomRoute = String(Math.random());

const clientPageloadTransactionPromise = waitForTransaction('nextjs-13-app-dir', transactionEvent => {
const clientPageloadTransactionPromise = waitForTransaction('nextjs-app-dir', transactionEvent => {
return (
transactionEvent?.transaction === `/server-component/parameter/${randomRoute}` &&
transactionEvent.contexts?.trace?.op === 'pageload'
Expand All@@ -30,14 +30,14 @@ test('Creates a navigation transaction for app router routes', async ({ page })
await clientPageloadTransactionPromise;
await page.getByText('Page (/server-component/parameter/[parameter])').isVisible();

const clientNavigationTransactionPromise = waitForTransaction('nextjs-13-app-dir', transactionEvent => {
const clientNavigationTransactionPromise = waitForTransaction('nextjs-app-dir', transactionEvent => {
return (
transactionEvent?.transaction === '/server-component/parameter/foo/bar/baz' &&
transactionEvent.contexts?.trace?.op === 'navigation'
);
});

const serverComponentTransactionPromise = waitForTransaction('nextjs-13-app-dir', async transactionEvent => {
const serverComponentTransactionPromise = waitForTransaction('nextjs-app-dir', async transactionEvent => {
return (
transactionEvent?.transaction === 'Page Server Component (/server-component/parameter/[...parameters])' &&
(await clientNavigationTransactionPromise).contexts?.trace?.trace_id ===
Expand Down
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
import { expect, test } from '@playwright/test';
import { waitForError } from '@sentry-internal/test-utils';

test('Sends a client-side exception to Sentry', async ({ page }) => {
await page.goto('/');

const errorEventPromise = waitForError('nextjs-app-dir', errorEvent => {
return errorEvent?.exception?.values?.[0]?.value === 'Click Error';
});

await page.getByText('Throw error').click();

const errorEvent = await errorEventPromise;

expect(errorEvent.exception?.values).toHaveLength(1);
expect(errorEvent.exception?.values?.[0]?.value).toBe('Click Error');

expect(errorEvent.request).toEqual({
headers: expect.any(Object),
url: 'http://localhost:3030/',
});

expect(errorEvent.transaction).toEqual('/');

expect(errorEvent.contexts?.trace).toEqual({
trace_id: expect.any(String),
span_id: expect.any(String),
});
});
Original file line numberDiff line numberDiff line change
Expand Up@@ -4,7 +4,7 @@ import { waitForTransaction } from '@sentry-internal/test-utils';
test('Will capture a connected trace for all server components and generation functions when visiting a page', async ({
page,
}) => {
const someConnectedEvent = waitForTransaction('nextjs-13-app-dir', async transactionEvent => {
const someConnectedEvent = waitForTransaction('nextjs-app-dir', async transactionEvent => {
return (
transactionEvent?.transaction === 'Layout Server Component (/(nested-layout)/nested-layout)' ||
transactionEvent?.transaction === 'Layout Server Component (/(nested-layout))' ||
Expand All@@ -13,28 +13,28 @@ test('Will capture a connected trace for all server components and generation fu
);
});

const layout1Transaction = waitForTransaction('nextjs-13-app-dir', async transactionEvent => {
const layout1Transaction = waitForTransaction('nextjs-app-dir', async transactionEvent => {
return (
transactionEvent?.transaction === 'Layout Server Component (/(nested-layout)/nested-layout)' &&
(await someConnectedEvent).contexts?.trace?.trace_id === transactionEvent.contexts?.trace?.trace_id
);
});

const layout2Transaction = waitForTransaction('nextjs-13-app-dir', async transactionEvent => {
const layout2Transaction = waitForTransaction('nextjs-app-dir', async transactionEvent => {
return (
transactionEvent?.transaction === 'Layout Server Component (/(nested-layout))' &&
(await someConnectedEvent).contexts?.trace?.trace_id === transactionEvent.contexts?.trace?.trace_id
);
});

const pageTransaction = waitForTransaction('nextjs-13-app-dir', async transactionEvent => {
const pageTransaction = waitForTransaction('nextjs-app-dir', async transactionEvent => {
return (
transactionEvent?.transaction === 'Page Server Component (/(nested-layout)/nested-layout)' &&
(await someConnectedEvent).contexts?.trace?.trace_id === transactionEvent.contexts?.trace?.trace_id
);
});

const generateMetadataTransaction = waitForTransaction('nextjs-13-app-dir', async transactionEvent => {
const generateMetadataTransaction = waitForTransaction('nextjs-app-dir', async transactionEvent => {
return (
transactionEvent?.transaction === 'Page.generateMetadata (/(nested-layout)/nested-layout)' &&
(await someConnectedEvent).contexts?.trace?.trace_id === transactionEvent.contexts?.trace?.trace_id
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -10,7 +10,7 @@ test.describe('dev mode error symbolification', () => {
test('should have symbolicated dev errors', async ({ page }) => {
await page.goto('/');

const errorEventPromise = waitForError('nextjs-13-app-dir', errorEvent => {
const errorEventPromise = waitForError('nextjs-app-dir', errorEvent => {
return errorEvent?.exception?.values?.[0]?.value === 'Click Error';
});

Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -2,7 +2,7 @@ import { expect, test } from '@playwright/test';
import { waitForError, waitForTransaction } from '@sentry-internal/test-utils';

test('Should create a transaction for edge routes', async ({ request }) => {
const edgerouteTransactionPromise = waitForTransaction('nextjs-13-app-dir', async transactionEvent => {
const edgerouteTransactionPromise = waitForTransaction('nextjs-app-dir', async transactionEvent => {
return (
transactionEvent?.transaction === 'GET /api/edge-endpoint' && transactionEvent?.contexts?.trace?.status === 'ok'
);
Expand All@@ -24,7 +24,7 @@ test('Should create a transaction for edge routes', async ({ request }) => {
});

test('Should create a transaction with error status for faulty edge routes', async ({ request }) => {
const edgerouteTransactionPromise = waitForTransaction('nextjs-13-app-dir', async transactionEvent => {
const edgerouteTransactionPromise = waitForTransaction('nextjs-app-dir', async transactionEvent => {
return (
transactionEvent?.transaction === 'GET /api/error-edge-endpoint' &&
transactionEvent?.contexts?.trace?.status === 'internal_error'
Expand All@@ -47,7 +47,7 @@ test('Should create a transaction with error status for faulty edge routes', asy
});

test('Should record exceptions for faulty edge routes', async ({ request }) => {
const errorEventPromise = waitForError('nextjs-13-app-dir', errorEvent => {
const errorEventPromise = waitForError('nextjs-app-dir', errorEvent => {
return errorEvent?.exception?.values?.[0]?.value === 'Edge Route Error';
});

Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -2,7 +2,7 @@ import { expect, test } from '@playwright/test';
import { waitForError, waitForTransaction } from '@sentry-internal/test-utils';

test('Should record exceptions for faulty edge server components', async ({ page }) => {
const errorEventPromise = waitForError('nextjs-13-app-dir', errorEvent => {
const errorEventPromise = waitForError('nextjs-app-dir', errorEvent => {
return errorEvent?.exception?.values?.[0]?.value === 'Edge Server Component Error';
});

Expand All@@ -20,7 +20,7 @@ test('Should record exceptions for faulty edge server components', async ({ page
});

test('Should record transaction for edge server components', async ({ page }) => {
const serverComponentTransactionPromise = waitForTransaction('nextjs-13-app-dir', async transactionEvent => {
const serverComponentTransactionPromise = waitForTransaction('nextjs-app-dir', async transactionEvent => {
return transactionEvent?.transaction === 'Page Server Component (/edge-server-components)';
});

Expand Down

This file was deleted.

Original file line numberDiff line numberDiff line change
Expand Up@@ -2,7 +2,7 @@ import { expect, test } from '@playwright/test';
import { waitForError, waitForTransaction } from '@sentry-internal/test-utils';

test('Should create a transaction for middleware', async ({ request }) => {
const middlewareTransactionPromise = waitForTransaction('nextjs-13-app-dir', async transactionEvent => {
const middlewareTransactionPromise = waitForTransaction('nextjs-app-dir', async transactionEvent => {
return transactionEvent?.transaction === 'middleware' && transactionEvent?.contexts?.trace?.status === 'ok';
});

Expand All@@ -21,7 +21,7 @@ test('Should create a transaction for middleware', async ({ request }) => {
});

test('Should create a transaction with error status for faulty middleware', async ({ request }) => {
const middlewareTransactionPromise = waitForTransaction('nextjs-13-app-dir', async transactionEvent => {
const middlewareTransactionPromise = waitForTransaction('nextjs-app-dir', async transactionEvent => {
return (
transactionEvent?.transaction === 'middleware' && transactionEvent?.contexts?.trace?.status === 'internal_error'
);
Expand All@@ -39,7 +39,7 @@ test('Should create a transaction with error status for faulty middleware', asyn
});

test('Records exceptions happening in middleware', async ({ request }) => {
const errorEventPromise = waitForError('nextjs-13-app-dir', errorEvent => {
const errorEventPromise = waitForError('nextjs-app-dir', errorEvent => {
return errorEvent?.exception?.values?.[0]?.value === 'Middleware Error';
});

Expand All@@ -56,7 +56,7 @@ test('Records exceptions happening in middleware', async ({ request }) => {
});

test('Should trace outgoing fetch requests inside middleware and create breadcrumbs for it', async ({ request }) => {
const middlewareTransactionPromise = waitForTransaction('nextjs-13-app-dir', async transactionEvent => {
const middlewareTransactionPromise = waitForTransaction('nextjs-app-dir', async transactionEvent => {
return (
transactionEvent?.transaction === 'middleware' &&
!!transactionEvent.spans?.find(span => span.op === 'http.client')
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -2,11 +2,11 @@ import { expect, test } from '@playwright/test';
import { waitForError, waitForTransaction } from '@sentry-internal/test-utils';

test('Will capture error for SSR rendering error with a connected trace (Class Component)', async ({ page }) => {
const errorEventPromise = waitForError('nextjs-13-app-dir', errorEvent => {
const errorEventPromise = waitForError('nextjs-app-dir', errorEvent => {
return errorEvent?.exception?.values?.[0]?.value === 'Pages SSR Error Class';
});

const serverComponentTransaction = waitForTransaction('nextjs-13-app-dir', async transactionEvent => {
const serverComponentTransaction = waitForTransaction('nextjs-app-dir', async transactionEvent => {
return (
transactionEvent?.transaction === '/pages-router/ssr-error-class' &&
(await errorEventPromise).contexts?.trace?.trace_id === transactionEvent.contexts?.trace?.trace_id
Expand All@@ -20,11 +20,11 @@ test('Will capture error for SSR rendering error with a connected trace (Class C
});

test('Will capture error for SSR rendering error with a connected trace (Functional Component)', async ({ page }) => {
const errorEventPromise = waitForError('nextjs-13-app-dir', errorEvent => {
const errorEventPromise = waitForError('nextjs-app-dir', errorEvent => {
return errorEvent?.exception?.values?.[0]?.value === 'Pages SSR Error FC';
});

const ssrTransactionPromise = waitForTransaction('nextjs-13-app-dir', async transactionEvent => {
const ssrTransactionPromise = waitForTransaction('nextjs-app-dir', async transactionEvent => {
return (
transactionEvent?.transaction === '/pages-router/ssr-error-fc' &&
(await errorEventPromise).contexts?.trace?.trace_id === transactionEvent.contexts?.trace?.trace_id
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -5,7 +5,7 @@ import { waitForTransaction } from '@sentry-internal/test-utils';
// Sometimes the request span was included in the handler span, more often it wasn't. I have no idea why. Maybe one day we will
// figure it out. Today is not that day.
test.skip('Should send a transaction with a http span', async ({ request }) => {
const transactionPromise = waitForTransaction('nextjs-13-app-dir', async transactionEvent => {
const transactionPromise = waitForTransaction('nextjs-app-dir', async transactionEvent => {
return transactionEvent?.transaction === 'GET /api/request-instrumentation';
});

Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -2,7 +2,7 @@ import { expect, test } from '@playwright/test';
import { waitForError, waitForTransaction } from '@sentry-internal/test-utils';

test('Should create a transaction for route handlers', async ({ request }) => {
const routehandlerTransactionPromise = waitForTransaction('nextjs-13-app-dir', async transactionEvent => {
const routehandlerTransactionPromise = waitForTransaction('nextjs-app-dir', async transactionEvent => {
return transactionEvent?.transaction === 'GET /route-handlers/[param]';
});

Expand All@@ -19,7 +19,7 @@ test('Should create a transaction for route handlers', async ({ request }) => {
test('Should create a transaction for route handlers and correctly set span status depending on http status', async ({
request,
}) => {
const routehandlerTransactionPromise = waitForTransaction('nextjs-13-app-dir', async transactionEvent => {
const routehandlerTransactionPromise = waitForTransaction('nextjs-app-dir', async transactionEvent => {
return transactionEvent?.transaction === 'POST /route-handlers/[param]';
});

Expand All@@ -33,11 +33,11 @@ test('Should create a transaction for route handlers and correctly set span stat
});

test('Should record exceptions and transactions for faulty route handlers', async ({ request }) => {
const errorEventPromise = waitForError('nextjs-13-app-dir', errorEvent => {
const errorEventPromise = waitForError('nextjs-app-dir', errorEvent => {
return errorEvent?.exception?.values?.[0]?.value === 'route-handler-error';
});

const routehandlerTransactionPromise = waitForTransaction('nextjs-13-app-dir', async transactionEvent => {
const routehandlerTransactionPromise = waitForTransaction('nextjs-app-dir', async transactionEvent => {
return transactionEvent?.transaction === 'PUT /route-handlers/[param]/error';
});

Expand DownExpand Up@@ -65,7 +65,7 @@ test('Should record exceptions and transactions for faulty route handlers', asyn

test.describe('Edge runtime', () => {
test('should create a transaction for route handlers', async ({ request }) => {
const routehandlerTransactionPromise = waitForTransaction('nextjs-13-app-dir', async transactionEvent => {
const routehandlerTransactionPromise = waitForTransaction('nextjs-app-dir', async transactionEvent => {
return transactionEvent?.transaction === 'PATCH /route-handlers/[param]/edge';
});

Expand All@@ -79,11 +79,11 @@ test.describe('Edge runtime', () => {
});

test('should record exceptions and transactions for faulty route handlers', async ({ request }) => {
const errorEventPromise = waitForError('nextjs-13-app-dir', errorEvent => {
const errorEventPromise = waitForError('nextjs-app-dir', errorEvent => {
return errorEvent?.exception?.values?.[0]?.value === 'route-handler-edge-error';
});

const routehandlerTransactionPromise = waitForTransaction('nextjs-13-app-dir', async transactionEvent => {
const routehandlerTransactionPromise = waitForTransaction('nextjs-app-dir', async transactionEvent => {
return transactionEvent?.transaction === 'DELETE /route-handlers/[param]/edge';
});

Expand Down
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all \u003cpre\u003e\u003ccode\u003e blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks"); } } catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); } })(); (function(){ try { var __m = "github.com"; var __re = new RegExp('^' + "github\\.com" + '
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line numberDiff line numberDiff line change
Expand Up@@ -2,5 +2,5 @@ import { startEventProxyServer } from '@sentry-internal/test-utils';

startEventProxyServer({
port: 3031,
proxyServerName: 'nextjs-13-app-dir',
proxyServerName: 'nextjs-app-dir',
});
Original file line numberDiff line numberDiff line change
Expand Up@@ -2,9 +2,7 @@ import { expect, test } from '@playwright/test';
import { waitForTransaction } from '@sentry-internal/test-utils';

test('Should allow for async context isolation in the edge SDK', async ({ request }) => {
// test.skip(process.env.TEST_ENV === 'development', "Doesn't work in dev mode.");

const edgerouteTransactionPromise = waitForTransaction('nextjs-13-app-dir', async transactionEvent => {
const edgerouteTransactionPromise = waitForTransaction('nextjs-app-dir', async transactionEvent => {
return transactionEvent?.transaction === 'GET /api/async-context-edge-endpoint';
});

Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -4,7 +4,7 @@ import { waitForTransaction } from '@sentry-internal/test-utils';
test('Creates a pageload transaction for app router routes', async ({ page }) => {
const randomRoute = String(Math.random());

const clientPageloadTransactionPromise = waitForTransaction('nextjs-13-app-dir', transactionEvent => {
const clientPageloadTransactionPromise = waitForTransaction('nextjs-app-dir', transactionEvent => {
return (
transactionEvent?.transaction === `/server-component/parameter/${randomRoute}` &&
transactionEvent.contexts?.trace?.op === 'pageload'
Expand All@@ -19,7 +19,7 @@ test('Creates a pageload transaction for app router routes', async ({ page }) =>
test('Creates a navigation transaction for app router routes', async ({ page }) => {
const randomRoute = String(Math.random());

const clientPageloadTransactionPromise = waitForTransaction('nextjs-13-app-dir', transactionEvent => {
const clientPageloadTransactionPromise = waitForTransaction('nextjs-app-dir', transactionEvent => {
return (
transactionEvent?.transaction === `/server-component/parameter/${randomRoute}` &&
transactionEvent.contexts?.trace?.op === 'pageload'
Expand All@@ -30,14 +30,14 @@ test('Creates a navigation transaction for app router routes', async ({ page })
await clientPageloadTransactionPromise;
await page.getByText('Page (/server-component/parameter/[parameter])').isVisible();

const clientNavigationTransactionPromise = waitForTransaction('nextjs-13-app-dir', transactionEvent => {
const clientNavigationTransactionPromise = waitForTransaction('nextjs-app-dir', transactionEvent => {
return (
transactionEvent?.transaction === '/server-component/parameter/foo/bar/baz' &&
transactionEvent.contexts?.trace?.op === 'navigation'
);
});

const serverComponentTransactionPromise = waitForTransaction('nextjs-13-app-dir', async transactionEvent => {
const serverComponentTransactionPromise = waitForTransaction('nextjs-app-dir', async transactionEvent => {
return (
transactionEvent?.transaction === 'Page Server Component (/server-component/parameter/[...parameters])' &&
(await clientNavigationTransactionPromise).contexts?.trace?.trace_id ===
Expand Down
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
import { expect, test } from '@playwright/test';
import { waitForError } from '@sentry-internal/test-utils';

test('Sends a client-side exception to Sentry', async ({ page }) => {
await page.goto('/');

const errorEventPromise = waitForError('nextjs-app-dir', errorEvent => {
return errorEvent?.exception?.values?.[0]?.value === 'Click Error';
});

await page.getByText('Throw error').click();

const errorEvent = await errorEventPromise;

expect(errorEvent.exception?.values).toHaveLength(1);
expect(errorEvent.exception?.values?.[0]?.value).toBe('Click Error');

expect(errorEvent.request).toEqual({
headers: expect.any(Object),
url: 'http://localhost:3030/',
});

expect(errorEvent.transaction).toEqual('/');

expect(errorEvent.contexts?.trace).toEqual({
trace_id: expect.any(String),
span_id: expect.any(String),
});
});
Original file line numberDiff line numberDiff line change
Expand Up@@ -4,7 +4,7 @@ import { waitForTransaction } from '@sentry-internal/test-utils';
test('Will capture a connected trace for all server components and generation functions when visiting a page', async ({
page,
}) => {
const someConnectedEvent = waitForTransaction('nextjs-13-app-dir', async transactionEvent => {
const someConnectedEvent = waitForTransaction('nextjs-app-dir', async transactionEvent => {
return (
transactionEvent?.transaction === 'Layout Server Component (/(nested-layout)/nested-layout)' ||
transactionEvent?.transaction === 'Layout Server Component (/(nested-layout))' ||
Expand All@@ -13,28 +13,28 @@ test('Will capture a connected trace for all server components and generation fu
);
});

const layout1Transaction = waitForTransaction('nextjs-13-app-dir', async transactionEvent => {
const layout1Transaction = waitForTransaction('nextjs-app-dir', async transactionEvent => {
return (
transactionEvent?.transaction === 'Layout Server Component (/(nested-layout)/nested-layout)' &&
(await someConnectedEvent).contexts?.trace?.trace_id === transactionEvent.contexts?.trace?.trace_id
);
});

const layout2Transaction = waitForTransaction('nextjs-13-app-dir', async transactionEvent => {
const layout2Transaction = waitForTransaction('nextjs-app-dir', async transactionEvent => {
return (
transactionEvent?.transaction === 'Layout Server Component (/(nested-layout))' &&
(await someConnectedEvent).contexts?.trace?.trace_id === transactionEvent.contexts?.trace?.trace_id
);
});

const pageTransaction = waitForTransaction('nextjs-13-app-dir', async transactionEvent => {
const pageTransaction = waitForTransaction('nextjs-app-dir', async transactionEvent => {
return (
transactionEvent?.transaction === 'Page Server Component (/(nested-layout)/nested-layout)' &&
(await someConnectedEvent).contexts?.trace?.trace_id === transactionEvent.contexts?.trace?.trace_id
);
});

const generateMetadataTransaction = waitForTransaction('nextjs-13-app-dir', async transactionEvent => {
const generateMetadataTransaction = waitForTransaction('nextjs-app-dir', async transactionEvent => {
return (
transactionEvent?.transaction === 'Page.generateMetadata (/(nested-layout)/nested-layout)' &&
(await someConnectedEvent).contexts?.trace?.trace_id === transactionEvent.contexts?.trace?.trace_id
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -10,7 +10,7 @@ test.describe('dev mode error symbolification', () => {
test('should have symbolicated dev errors', async ({ page }) => {
await page.goto('/');

const errorEventPromise = waitForError('nextjs-13-app-dir', errorEvent => {
const errorEventPromise = waitForError('nextjs-app-dir', errorEvent => {
return errorEvent?.exception?.values?.[0]?.value === 'Click Error';
});

Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -2,7 +2,7 @@ import { expect, test } from '@playwright/test';
import { waitForError, waitForTransaction } from '@sentry-internal/test-utils';

test('Should create a transaction for edge routes', async ({ request }) => {
const edgerouteTransactionPromise = waitForTransaction('nextjs-13-app-dir', async transactionEvent => {
const edgerouteTransactionPromise = waitForTransaction('nextjs-app-dir', async transactionEvent => {
return (
transactionEvent?.transaction === 'GET /api/edge-endpoint' && transactionEvent?.contexts?.trace?.status === 'ok'
);
Expand All@@ -24,7 +24,7 @@ test('Should create a transaction for edge routes', async ({ request }) => {
});

test('Should create a transaction with error status for faulty edge routes', async ({ request }) => {
const edgerouteTransactionPromise = waitForTransaction('nextjs-13-app-dir', async transactionEvent => {
const edgerouteTransactionPromise = waitForTransaction('nextjs-app-dir', async transactionEvent => {
return (
transactionEvent?.transaction === 'GET /api/error-edge-endpoint' &&
transactionEvent?.contexts?.trace?.status === 'internal_error'
Expand All@@ -47,7 +47,7 @@ test('Should create a transaction with error status for faulty edge routes', asy
});

test('Should record exceptions for faulty edge routes', async ({ request }) => {
const errorEventPromise = waitForError('nextjs-13-app-dir', errorEvent => {
const errorEventPromise = waitForError('nextjs-app-dir', errorEvent => {
return errorEvent?.exception?.values?.[0]?.value === 'Edge Route Error';
});

Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -2,7 +2,7 @@ import { expect, test } from '@playwright/test';
import { waitForError, waitForTransaction } from '@sentry-internal/test-utils';

test('Should record exceptions for faulty edge server components', async ({ page }) => {
const errorEventPromise = waitForError('nextjs-13-app-dir', errorEvent => {
const errorEventPromise = waitForError('nextjs-app-dir', errorEvent => {
return errorEvent?.exception?.values?.[0]?.value === 'Edge Server Component Error';
});

Expand All@@ -20,7 +20,7 @@ test('Should record exceptions for faulty edge server components', async ({ page
});

test('Should record transaction for edge server components', async ({ page }) => {
const serverComponentTransactionPromise = waitForTransaction('nextjs-13-app-dir', async transactionEvent => {
const serverComponentTransactionPromise = waitForTransaction('nextjs-app-dir', async transactionEvent => {
return transactionEvent?.transaction === 'Page Server Component (/edge-server-components)';
});

Expand Down

This file was deleted.

Original file line numberDiff line numberDiff line change
Expand Up@@ -2,7 +2,7 @@ import { expect, test } from '@playwright/test';
import { waitForError, waitForTransaction } from '@sentry-internal/test-utils';

test('Should create a transaction for middleware', async ({ request }) => {
const middlewareTransactionPromise = waitForTransaction('nextjs-13-app-dir', async transactionEvent => {
const middlewareTransactionPromise = waitForTransaction('nextjs-app-dir', async transactionEvent => {
return transactionEvent?.transaction === 'middleware' && transactionEvent?.contexts?.trace?.status === 'ok';
});

Expand All@@ -21,7 +21,7 @@ test('Should create a transaction for middleware', async ({ request }) => {
});

test('Should create a transaction with error status for faulty middleware', async ({ request }) => {
const middlewareTransactionPromise = waitForTransaction('nextjs-13-app-dir', async transactionEvent => {
const middlewareTransactionPromise = waitForTransaction('nextjs-app-dir', async transactionEvent => {
return (
transactionEvent?.transaction === 'middleware' && transactionEvent?.contexts?.trace?.status === 'internal_error'
);
Expand All@@ -39,7 +39,7 @@ test('Should create a transaction with error status for faulty middleware', asyn
});

test('Records exceptions happening in middleware', async ({ request }) => {
const errorEventPromise = waitForError('nextjs-13-app-dir', errorEvent => {
const errorEventPromise = waitForError('nextjs-app-dir', errorEvent => {
return errorEvent?.exception?.values?.[0]?.value === 'Middleware Error';
});

Expand All@@ -56,7 +56,7 @@ test('Records exceptions happening in middleware', async ({ request }) => {
});

test('Should trace outgoing fetch requests inside middleware and create breadcrumbs for it', async ({ request }) => {
const middlewareTransactionPromise = waitForTransaction('nextjs-13-app-dir', async transactionEvent => {
const middlewareTransactionPromise = waitForTransaction('nextjs-app-dir', async transactionEvent => {
return (
transactionEvent?.transaction === 'middleware' &&
!!transactionEvent.spans?.find(span => span.op === 'http.client')
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -2,11 +2,11 @@ import { expect, test } from '@playwright/test';
import { waitForError, waitForTransaction } from '@sentry-internal/test-utils';

test('Will capture error for SSR rendering error with a connected trace (Class Component)', async ({ page }) => {
const errorEventPromise = waitForError('nextjs-13-app-dir', errorEvent => {
const errorEventPromise = waitForError('nextjs-app-dir', errorEvent => {
return errorEvent?.exception?.values?.[0]?.value === 'Pages SSR Error Class';
});

const serverComponentTransaction = waitForTransaction('nextjs-13-app-dir', async transactionEvent => {
const serverComponentTransaction = waitForTransaction('nextjs-app-dir', async transactionEvent => {
return (
transactionEvent?.transaction === '/pages-router/ssr-error-class' &&
(await errorEventPromise).contexts?.trace?.trace_id === transactionEvent.contexts?.trace?.trace_id
Expand All@@ -20,11 +20,11 @@ test('Will capture error for SSR rendering error with a connected trace (Class C
});

test('Will capture error for SSR rendering error with a connected trace (Functional Component)', async ({ page }) => {
const errorEventPromise = waitForError('nextjs-13-app-dir', errorEvent => {
const errorEventPromise = waitForError('nextjs-app-dir', errorEvent => {
return errorEvent?.exception?.values?.[0]?.value === 'Pages SSR Error FC';
});

const ssrTransactionPromise = waitForTransaction('nextjs-13-app-dir', async transactionEvent => {
const ssrTransactionPromise = waitForTransaction('nextjs-app-dir', async transactionEvent => {
return (
transactionEvent?.transaction === '/pages-router/ssr-error-fc' &&
(await errorEventPromise).contexts?.trace?.trace_id === transactionEvent.contexts?.trace?.trace_id
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -5,7 +5,7 @@ import { waitForTransaction } from '@sentry-internal/test-utils';
// Sometimes the request span was included in the handler span, more often it wasn't. I have no idea why. Maybe one day we will
// figure it out. Today is not that day.
test.skip('Should send a transaction with a http span', async ({ request }) => {
const transactionPromise = waitForTransaction('nextjs-13-app-dir', async transactionEvent => {
const transactionPromise = waitForTransaction('nextjs-app-dir', async transactionEvent => {
return transactionEvent?.transaction === 'GET /api/request-instrumentation';
});

Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -2,7 +2,7 @@ import { expect, test } from '@playwright/test';
import { waitForError, waitForTransaction } from '@sentry-internal/test-utils';

test('Should create a transaction for route handlers', async ({ request }) => {
const routehandlerTransactionPromise = waitForTransaction('nextjs-13-app-dir', async transactionEvent => {
const routehandlerTransactionPromise = waitForTransaction('nextjs-app-dir', async transactionEvent => {
return transactionEvent?.transaction === 'GET /route-handlers/[param]';
});

Expand All@@ -19,7 +19,7 @@ test('Should create a transaction for route handlers', async ({ request }) => {
test('Should create a transaction for route handlers and correctly set span status depending on http status', async ({
request,
}) => {
const routehandlerTransactionPromise = waitForTransaction('nextjs-13-app-dir', async transactionEvent => {
const routehandlerTransactionPromise = waitForTransaction('nextjs-app-dir', async transactionEvent => {
return transactionEvent?.transaction === 'POST /route-handlers/[param]';
});

Expand All@@ -33,11 +33,11 @@ test('Should create a transaction for route handlers and correctly set span stat
});

test('Should record exceptions and transactions for faulty route handlers', async ({ request }) => {
const errorEventPromise = waitForError('nextjs-13-app-dir', errorEvent => {
const errorEventPromise = waitForError('nextjs-app-dir', errorEvent => {
return errorEvent?.exception?.values?.[0]?.value === 'route-handler-error';
});

const routehandlerTransactionPromise = waitForTransaction('nextjs-13-app-dir', async transactionEvent => {
const routehandlerTransactionPromise = waitForTransaction('nextjs-app-dir', async transactionEvent => {
return transactionEvent?.transaction === 'PUT /route-handlers/[param]/error';
});

Expand DownExpand Up@@ -65,7 +65,7 @@ test('Should record exceptions and transactions for faulty route handlers', asyn

test.describe('Edge runtime', () => {
test('should create a transaction for route handlers', async ({ request }) => {
const routehandlerTransactionPromise = waitForTransaction('nextjs-13-app-dir', async transactionEvent => {
const routehandlerTransactionPromise = waitForTransaction('nextjs-app-dir', async transactionEvent => {
return transactionEvent?.transaction === 'PATCH /route-handlers/[param]/edge';
});

Expand All@@ -79,11 +79,11 @@ test.describe('Edge runtime', () => {
});

test('should record exceptions and transactions for faulty route handlers', async ({ request }) => {
const errorEventPromise = waitForError('nextjs-13-app-dir', errorEvent => {
const errorEventPromise = waitForError('nextjs-app-dir', errorEvent => {
return errorEvent?.exception?.values?.[0]?.value === 'route-handler-edge-error';
});

const routehandlerTransactionPromise = waitForTransaction('nextjs-13-app-dir', async transactionEvent => {
const routehandlerTransactionPromise = waitForTransaction('nextjs-app-dir', async transactionEvent => {
return transactionEvent?.transaction === 'DELETE /route-handlers/[param]/edge';
});

Expand Down
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line numberDiff line numberDiff line change
Expand Up@@ -2,5 +2,5 @@ import { startEventProxyServer } from '@sentry-internal/test-utils';

startEventProxyServer({
port: 3031,
proxyServerName: 'nextjs-13-app-dir',
proxyServerName: 'nextjs-app-dir',
});
Original file line numberDiff line numberDiff line change
Expand Up@@ -2,9 +2,7 @@ import { expect, test } from '@playwright/test';
import { waitForTransaction } from '@sentry-internal/test-utils';

test('Should allow for async context isolation in the edge SDK', async ({ request }) => {
// test.skip(process.env.TEST_ENV === 'development', "Doesn't work in dev mode.");

const edgerouteTransactionPromise = waitForTransaction('nextjs-13-app-dir', async transactionEvent => {
const edgerouteTransactionPromise = waitForTransaction('nextjs-app-dir', async transactionEvent => {
return transactionEvent?.transaction === 'GET /api/async-context-edge-endpoint';
});

Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -4,7 +4,7 @@ import { waitForTransaction } from '@sentry-internal/test-utils';
test('Creates a pageload transaction for app router routes', async ({ page }) => {
const randomRoute = String(Math.random());

const clientPageloadTransactionPromise = waitForTransaction('nextjs-13-app-dir', transactionEvent => {
const clientPageloadTransactionPromise = waitForTransaction('nextjs-app-dir', transactionEvent => {
return (
transactionEvent?.transaction === `/server-component/parameter/${randomRoute}` &&
transactionEvent.contexts?.trace?.op === 'pageload'
Expand All@@ -19,7 +19,7 @@ test('Creates a pageload transaction for app router routes', async ({ page }) =>
test('Creates a navigation transaction for app router routes', async ({ page }) => {
const randomRoute = String(Math.random());

const clientPageloadTransactionPromise = waitForTransaction('nextjs-13-app-dir', transactionEvent => {
const clientPageloadTransactionPromise = waitForTransaction('nextjs-app-dir', transactionEvent => {
return (
transactionEvent?.transaction === `/server-component/parameter/${randomRoute}` &&
transactionEvent.contexts?.trace?.op === 'pageload'
Expand All@@ -30,14 +30,14 @@ test('Creates a navigation transaction for app router routes', async ({ page })
await clientPageloadTransactionPromise;
await page.getByText('Page (/server-component/parameter/[parameter])').isVisible();

const clientNavigationTransactionPromise = waitForTransaction('nextjs-13-app-dir', transactionEvent => {
const clientNavigationTransactionPromise = waitForTransaction('nextjs-app-dir', transactionEvent => {
return (
transactionEvent?.transaction === '/server-component/parameter/foo/bar/baz' &&
transactionEvent.contexts?.trace?.op === 'navigation'
);
});

const serverComponentTransactionPromise = waitForTransaction('nextjs-13-app-dir', async transactionEvent => {
const serverComponentTransactionPromise = waitForTransaction('nextjs-app-dir', async transactionEvent => {
return (
transactionEvent?.transaction === 'Page Server Component (/server-component/parameter/[...parameters])' &&
(await clientNavigationTransactionPromise).contexts?.trace?.trace_id ===
Expand Down
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
import { expect, test } from '@playwright/test';
import { waitForError } from '@sentry-internal/test-utils';

test('Sends a client-side exception to Sentry', async ({ page }) => {
await page.goto('/');

const errorEventPromise = waitForError('nextjs-app-dir', errorEvent => {
return errorEvent?.exception?.values?.[0]?.value === 'Click Error';
});

await page.getByText('Throw error').click();

const errorEvent = await errorEventPromise;

expect(errorEvent.exception?.values).toHaveLength(1);
expect(errorEvent.exception?.values?.[0]?.value).toBe('Click Error');

expect(errorEvent.request).toEqual({
headers: expect.any(Object),
url: 'http://localhost:3030/',
});

expect(errorEvent.transaction).toEqual('/');

expect(errorEvent.contexts?.trace).toEqual({
trace_id: expect.any(String),
span_id: expect.any(String),
});
});
Original file line numberDiff line numberDiff line change
Expand Up@@ -4,7 +4,7 @@ import { waitForTransaction } from '@sentry-internal/test-utils';
test('Will capture a connected trace for all server components and generation functions when visiting a page', async ({
page,
}) => {
const someConnectedEvent = waitForTransaction('nextjs-13-app-dir', async transactionEvent => {
const someConnectedEvent = waitForTransaction('nextjs-app-dir', async transactionEvent => {
return (
transactionEvent?.transaction === 'Layout Server Component (/(nested-layout)/nested-layout)' ||
transactionEvent?.transaction === 'Layout Server Component (/(nested-layout))' ||
Expand All@@ -13,28 +13,28 @@ test('Will capture a connected trace for all server components and generation fu
);
});

const layout1Transaction = waitForTransaction('nextjs-13-app-dir', async transactionEvent => {
const layout1Transaction = waitForTransaction('nextjs-app-dir', async transactionEvent => {
return (
transactionEvent?.transaction === 'Layout Server Component (/(nested-layout)/nested-layout)' &&
(await someConnectedEvent).contexts?.trace?.trace_id === transactionEvent.contexts?.trace?.trace_id
);
});

const layout2Transaction = waitForTransaction('nextjs-13-app-dir', async transactionEvent => {
const layout2Transaction = waitForTransaction('nextjs-app-dir', async transactionEvent => {
return (
transactionEvent?.transaction === 'Layout Server Component (/(nested-layout))' &&
(await someConnectedEvent).contexts?.trace?.trace_id === transactionEvent.contexts?.trace?.trace_id
);
});

const pageTransaction = waitForTransaction('nextjs-13-app-dir', async transactionEvent => {
const pageTransaction = waitForTransaction('nextjs-app-dir', async transactionEvent => {
return (
transactionEvent?.transaction === 'Page Server Component (/(nested-layout)/nested-layout)' &&
(await someConnectedEvent).contexts?.trace?.trace_id === transactionEvent.contexts?.trace?.trace_id
);
});

const generateMetadataTransaction = waitForTransaction('nextjs-13-app-dir', async transactionEvent => {
const generateMetadataTransaction = waitForTransaction('nextjs-app-dir', async transactionEvent => {
return (
transactionEvent?.transaction === 'Page.generateMetadata (/(nested-layout)/nested-layout)' &&
(await someConnectedEvent).contexts?.trace?.trace_id === transactionEvent.contexts?.trace?.trace_id
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -10,7 +10,7 @@ test.describe('dev mode error symbolification', () => {
test('should have symbolicated dev errors', async ({ page }) => {
await page.goto('/');

const errorEventPromise = waitForError('nextjs-13-app-dir', errorEvent => {
const errorEventPromise = waitForError('nextjs-app-dir', errorEvent => {
return errorEvent?.exception?.values?.[0]?.value === 'Click Error';
});

Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -2,7 +2,7 @@ import { expect, test } from '@playwright/test';
import { waitForError, waitForTransaction } from '@sentry-internal/test-utils';

test('Should create a transaction for edge routes', async ({ request }) => {
const edgerouteTransactionPromise = waitForTransaction('nextjs-13-app-dir', async transactionEvent => {
const edgerouteTransactionPromise = waitForTransaction('nextjs-app-dir', async transactionEvent => {
return (
transactionEvent?.transaction === 'GET /api/edge-endpoint' && transactionEvent?.contexts?.trace?.status === 'ok'
);
Expand All@@ -24,7 +24,7 @@ test('Should create a transaction for edge routes', async ({ request }) => {
});

test('Should create a transaction with error status for faulty edge routes', async ({ request }) => {
const edgerouteTransactionPromise = waitForTransaction('nextjs-13-app-dir', async transactionEvent => {
const edgerouteTransactionPromise = waitForTransaction('nextjs-app-dir', async transactionEvent => {
return (
transactionEvent?.transaction === 'GET /api/error-edge-endpoint' &&
transactionEvent?.contexts?.trace?.status === 'internal_error'
Expand All@@ -47,7 +47,7 @@ test('Should create a transaction with error status for faulty edge routes', asy
});

test('Should record exceptions for faulty edge routes', async ({ request }) => {
const errorEventPromise = waitForError('nextjs-13-app-dir', errorEvent => {
const errorEventPromise = waitForError('nextjs-app-dir', errorEvent => {
return errorEvent?.exception?.values?.[0]?.value === 'Edge Route Error';
});

Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -2,7 +2,7 @@ import { expect, test } from '@playwright/test';
import { waitForError, waitForTransaction } from '@sentry-internal/test-utils';

test('Should record exceptions for faulty edge server components', async ({ page }) => {
const errorEventPromise = waitForError('nextjs-13-app-dir', errorEvent => {
const errorEventPromise = waitForError('nextjs-app-dir', errorEvent => {
return errorEvent?.exception?.values?.[0]?.value === 'Edge Server Component Error';
});

Expand All@@ -20,7 +20,7 @@ test('Should record exceptions for faulty edge server components', async ({ page
});

test('Should record transaction for edge server components', async ({ page }) => {
const serverComponentTransactionPromise = waitForTransaction('nextjs-13-app-dir', async transactionEvent => {
const serverComponentTransactionPromise = waitForTransaction('nextjs-app-dir', async transactionEvent => {
return transactionEvent?.transaction === 'Page Server Component (/edge-server-components)';
});

Expand Down

This file was deleted.

Original file line numberDiff line numberDiff line change
Expand Up@@ -2,7 +2,7 @@ import { expect, test } from '@playwright/test';
import { waitForError, waitForTransaction } from '@sentry-internal/test-utils';

test('Should create a transaction for middleware', async ({ request }) => {
const middlewareTransactionPromise = waitForTransaction('nextjs-13-app-dir', async transactionEvent => {
const middlewareTransactionPromise = waitForTransaction('nextjs-app-dir', async transactionEvent => {
return transactionEvent?.transaction === 'middleware' && transactionEvent?.contexts?.trace?.status === 'ok';
});

Expand All@@ -21,7 +21,7 @@ test('Should create a transaction for middleware', async ({ request }) => {
});

test('Should create a transaction with error status for faulty middleware', async ({ request }) => {
const middlewareTransactionPromise = waitForTransaction('nextjs-13-app-dir', async transactionEvent => {
const middlewareTransactionPromise = waitForTransaction('nextjs-app-dir', async transactionEvent => {
return (
transactionEvent?.transaction === 'middleware' && transactionEvent?.contexts?.trace?.status === 'internal_error'
);
Expand All@@ -39,7 +39,7 @@ test('Should create a transaction with error status for faulty middleware', asyn
});

test('Records exceptions happening in middleware', async ({ request }) => {
const errorEventPromise = waitForError('nextjs-13-app-dir', errorEvent => {
const errorEventPromise = waitForError('nextjs-app-dir', errorEvent => {
return errorEvent?.exception?.values?.[0]?.value === 'Middleware Error';
});

Expand All@@ -56,7 +56,7 @@ test('Records exceptions happening in middleware', async ({ request }) => {
});

test('Should trace outgoing fetch requests inside middleware and create breadcrumbs for it', async ({ request }) => {
const middlewareTransactionPromise = waitForTransaction('nextjs-13-app-dir', async transactionEvent => {
const middlewareTransactionPromise = waitForTransaction('nextjs-app-dir', async transactionEvent => {
return (
transactionEvent?.transaction === 'middleware' &&
!!transactionEvent.spans?.find(span => span.op === 'http.client')
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -2,11 +2,11 @@ import { expect, test } from '@playwright/test';
import { waitForError, waitForTransaction } from '@sentry-internal/test-utils';

test('Will capture error for SSR rendering error with a connected trace (Class Component)', async ({ page }) => {
const errorEventPromise = waitForError('nextjs-13-app-dir', errorEvent => {
const errorEventPromise = waitForError('nextjs-app-dir', errorEvent => {
return errorEvent?.exception?.values?.[0]?.value === 'Pages SSR Error Class';
});

const serverComponentTransaction = waitForTransaction('nextjs-13-app-dir', async transactionEvent => {
const serverComponentTransaction = waitForTransaction('nextjs-app-dir', async transactionEvent => {
return (
transactionEvent?.transaction === '/pages-router/ssr-error-class' &&
(await errorEventPromise).contexts?.trace?.trace_id === transactionEvent.contexts?.trace?.trace_id
Expand All@@ -20,11 +20,11 @@ test('Will capture error for SSR rendering error with a connected trace (Class C
});

test('Will capture error for SSR rendering error with a connected trace (Functional Component)', async ({ page }) => {
const errorEventPromise = waitForError('nextjs-13-app-dir', errorEvent => {
const errorEventPromise = waitForError('nextjs-app-dir', errorEvent => {
return errorEvent?.exception?.values?.[0]?.value === 'Pages SSR Error FC';
});

const ssrTransactionPromise = waitForTransaction('nextjs-13-app-dir', async transactionEvent => {
const ssrTransactionPromise = waitForTransaction('nextjs-app-dir', async transactionEvent => {
return (
transactionEvent?.transaction === '/pages-router/ssr-error-fc' &&
(await errorEventPromise).contexts?.trace?.trace_id === transactionEvent.contexts?.trace?.trace_id
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -5,7 +5,7 @@ import { waitForTransaction } from '@sentry-internal/test-utils';
// Sometimes the request span was included in the handler span, more often it wasn't. I have no idea why. Maybe one day we will
// figure it out. Today is not that day.
test.skip('Should send a transaction with a http span', async ({ request }) => {
const transactionPromise = waitForTransaction('nextjs-13-app-dir', async transactionEvent => {
const transactionPromise = waitForTransaction('nextjs-app-dir', async transactionEvent => {
return transactionEvent?.transaction === 'GET /api/request-instrumentation';
});

Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -2,7 +2,7 @@ import { expect, test } from '@playwright/test';
import { waitForError, waitForTransaction } from '@sentry-internal/test-utils';

test('Should create a transaction for route handlers', async ({ request }) => {
const routehandlerTransactionPromise = waitForTransaction('nextjs-13-app-dir', async transactionEvent => {
const routehandlerTransactionPromise = waitForTransaction('nextjs-app-dir', async transactionEvent => {
return transactionEvent?.transaction === 'GET /route-handlers/[param]';
});

Expand All@@ -19,7 +19,7 @@ test('Should create a transaction for route handlers', async ({ request }) => {
test('Should create a transaction for route handlers and correctly set span status depending on http status', async ({
request,
}) => {
const routehandlerTransactionPromise = waitForTransaction('nextjs-13-app-dir', async transactionEvent => {
const routehandlerTransactionPromise = waitForTransaction('nextjs-app-dir', async transactionEvent => {
return transactionEvent?.transaction === 'POST /route-handlers/[param]';
});

Expand All@@ -33,11 +33,11 @@ test('Should create a transaction for route handlers and correctly set span stat
});

test('Should record exceptions and transactions for faulty route handlers', async ({ request }) => {
const errorEventPromise = waitForError('nextjs-13-app-dir', errorEvent => {
const errorEventPromise = waitForError('nextjs-app-dir', errorEvent => {
return errorEvent?.exception?.values?.[0]?.value === 'route-handler-error';
});

const routehandlerTransactionPromise = waitForTransaction('nextjs-13-app-dir', async transactionEvent => {
const routehandlerTransactionPromise = waitForTransaction('nextjs-app-dir', async transactionEvent => {
return transactionEvent?.transaction === 'PUT /route-handlers/[param]/error';
});

Expand DownExpand Up@@ -65,7 +65,7 @@ test('Should record exceptions and transactions for faulty route handlers', asyn

test.describe('Edge runtime', () => {
test('should create a transaction for route handlers', async ({ request }) => {
const routehandlerTransactionPromise = waitForTransaction('nextjs-13-app-dir', async transactionEvent => {
const routehandlerTransactionPromise = waitForTransaction('nextjs-app-dir', async transactionEvent => {
return transactionEvent?.transaction === 'PATCH /route-handlers/[param]/edge';
});

Expand All@@ -79,11 +79,11 @@ test.describe('Edge runtime', () => {
});

test('should record exceptions and transactions for faulty route handlers', async ({ request }) => {
const errorEventPromise = waitForError('nextjs-13-app-dir', errorEvent => {
const errorEventPromise = waitForError('nextjs-app-dir', errorEvent => {
return errorEvent?.exception?.values?.[0]?.value === 'route-handler-edge-error';
});

const routehandlerTransactionPromise = waitForTransaction('nextjs-13-app-dir', async transactionEvent => {
const routehandlerTransactionPromise = waitForTransaction('nextjs-app-dir', async transactionEvent => {
return transactionEvent?.transaction === 'DELETE /route-handlers/[param]/edge';
});

Expand Down
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length \u003e 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line numberDiff line numberDiff line change
Expand Up@@ -2,5 +2,5 @@ import { startEventProxyServer } from '@sentry-internal/test-utils';

startEventProxyServer({
port: 3031,
proxyServerName: 'nextjs-13-app-dir',
proxyServerName: 'nextjs-app-dir',
});
Original file line numberDiff line numberDiff line change
Expand Up@@ -2,9 +2,7 @@ import { expect, test } from '@playwright/test';
import { waitForTransaction } from '@sentry-internal/test-utils';

test('Should allow for async context isolation in the edge SDK', async ({ request }) => {
// test.skip(process.env.TEST_ENV === 'development', "Doesn't work in dev mode.");

const edgerouteTransactionPromise = waitForTransaction('nextjs-13-app-dir', async transactionEvent => {
const edgerouteTransactionPromise = waitForTransaction('nextjs-app-dir', async transactionEvent => {
return transactionEvent?.transaction === 'GET /api/async-context-edge-endpoint';
});

Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -4,7 +4,7 @@ import { waitForTransaction } from '@sentry-internal/test-utils';
test('Creates a pageload transaction for app router routes', async ({ page }) => {
const randomRoute = String(Math.random());

const clientPageloadTransactionPromise = waitForTransaction('nextjs-13-app-dir', transactionEvent => {
const clientPageloadTransactionPromise = waitForTransaction('nextjs-app-dir', transactionEvent => {
return (
transactionEvent?.transaction === `/server-component/parameter/${randomRoute}` &&
transactionEvent.contexts?.trace?.op === 'pageload'
Expand All@@ -19,7 +19,7 @@ test('Creates a pageload transaction for app router routes', async ({ page }) =>
test('Creates a navigation transaction for app router routes', async ({ page }) => {
const randomRoute = String(Math.random());

const clientPageloadTransactionPromise = waitForTransaction('nextjs-13-app-dir', transactionEvent => {
const clientPageloadTransactionPromise = waitForTransaction('nextjs-app-dir', transactionEvent => {
return (
transactionEvent?.transaction === `/server-component/parameter/${randomRoute}` &&
transactionEvent.contexts?.trace?.op === 'pageload'
Expand All@@ -30,14 +30,14 @@ test('Creates a navigation transaction for app router routes', async ({ page })
await clientPageloadTransactionPromise;
await page.getByText('Page (/server-component/parameter/[parameter])').isVisible();

const clientNavigationTransactionPromise = waitForTransaction('nextjs-13-app-dir', transactionEvent => {
const clientNavigationTransactionPromise = waitForTransaction('nextjs-app-dir', transactionEvent => {
return (
transactionEvent?.transaction === '/server-component/parameter/foo/bar/baz' &&
transactionEvent.contexts?.trace?.op === 'navigation'
);
});

const serverComponentTransactionPromise = waitForTransaction('nextjs-13-app-dir', async transactionEvent => {
const serverComponentTransactionPromise = waitForTransaction('nextjs-app-dir', async transactionEvent => {
return (
transactionEvent?.transaction === 'Page Server Component (/server-component/parameter/[...parameters])' &&
(await clientNavigationTransactionPromise).contexts?.trace?.trace_id ===
Expand Down
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
import { expect, test } from '@playwright/test';
import { waitForError } from '@sentry-internal/test-utils';

test('Sends a client-side exception to Sentry', async ({ page }) => {
await page.goto('/');

const errorEventPromise = waitForError('nextjs-app-dir', errorEvent => {
return errorEvent?.exception?.values?.[0]?.value === 'Click Error';
});

await page.getByText('Throw error').click();

const errorEvent = await errorEventPromise;

expect(errorEvent.exception?.values).toHaveLength(1);
expect(errorEvent.exception?.values?.[0]?.value).toBe('Click Error');

expect(errorEvent.request).toEqual({
headers: expect.any(Object),
url: 'http://localhost:3030/',
});

expect(errorEvent.transaction).toEqual('/');

expect(errorEvent.contexts?.trace).toEqual({
trace_id: expect.any(String),
span_id: expect.any(String),
});
});
Original file line numberDiff line numberDiff line change
Expand Up@@ -4,7 +4,7 @@ import { waitForTransaction } from '@sentry-internal/test-utils';
test('Will capture a connected trace for all server components and generation functions when visiting a page', async ({
page,
}) => {
const someConnectedEvent = waitForTransaction('nextjs-13-app-dir', async transactionEvent => {
const someConnectedEvent = waitForTransaction('nextjs-app-dir', async transactionEvent => {
return (
transactionEvent?.transaction === 'Layout Server Component (/(nested-layout)/nested-layout)' ||
transactionEvent?.transaction === 'Layout Server Component (/(nested-layout))' ||
Expand All@@ -13,28 +13,28 @@ test('Will capture a connected trace for all server components and generation fu
);
});

const layout1Transaction = waitForTransaction('nextjs-13-app-dir', async transactionEvent => {
const layout1Transaction = waitForTransaction('nextjs-app-dir', async transactionEvent => {
return (
transactionEvent?.transaction === 'Layout Server Component (/(nested-layout)/nested-layout)' &&
(await someConnectedEvent).contexts?.trace?.trace_id === transactionEvent.contexts?.trace?.trace_id
);
});

const layout2Transaction = waitForTransaction('nextjs-13-app-dir', async transactionEvent => {
const layout2Transaction = waitForTransaction('nextjs-app-dir', async transactionEvent => {
return (
transactionEvent?.transaction === 'Layout Server Component (/(nested-layout))' &&
(await someConnectedEvent).contexts?.trace?.trace_id === transactionEvent.contexts?.trace?.trace_id
);
});

const pageTransaction = waitForTransaction('nextjs-13-app-dir', async transactionEvent => {
const pageTransaction = waitForTransaction('nextjs-app-dir', async transactionEvent => {
return (
transactionEvent?.transaction === 'Page Server Component (/(nested-layout)/nested-layout)' &&
(await someConnectedEvent).contexts?.trace?.trace_id === transactionEvent.contexts?.trace?.trace_id
);
});

const generateMetadataTransaction = waitForTransaction('nextjs-13-app-dir', async transactionEvent => {
const generateMetadataTransaction = waitForTransaction('nextjs-app-dir', async transactionEvent => {
return (
transactionEvent?.transaction === 'Page.generateMetadata (/(nested-layout)/nested-layout)' &&
(await someConnectedEvent).contexts?.trace?.trace_id === transactionEvent.contexts?.trace?.trace_id
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -10,7 +10,7 @@ test.describe('dev mode error symbolification', () => {
test('should have symbolicated dev errors', async ({ page }) => {
await page.goto('/');

const errorEventPromise = waitForError('nextjs-13-app-dir', errorEvent => {
const errorEventPromise = waitForError('nextjs-app-dir', errorEvent => {
return errorEvent?.exception?.values?.[0]?.value === 'Click Error';
});

Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -2,7 +2,7 @@ import { expect, test } from '@playwright/test';
import { waitForError, waitForTransaction } from '@sentry-internal/test-utils';

test('Should create a transaction for edge routes', async ({ request }) => {
const edgerouteTransactionPromise = waitForTransaction('nextjs-13-app-dir', async transactionEvent => {
const edgerouteTransactionPromise = waitForTransaction('nextjs-app-dir', async transactionEvent => {
return (
transactionEvent?.transaction === 'GET /api/edge-endpoint' && transactionEvent?.contexts?.trace?.status === 'ok'
);
Expand All@@ -24,7 +24,7 @@ test('Should create a transaction for edge routes', async ({ request }) => {
});

test('Should create a transaction with error status for faulty edge routes', async ({ request }) => {
const edgerouteTransactionPromise = waitForTransaction('nextjs-13-app-dir', async transactionEvent => {
const edgerouteTransactionPromise = waitForTransaction('nextjs-app-dir', async transactionEvent => {
return (
transactionEvent?.transaction === 'GET /api/error-edge-endpoint' &&
transactionEvent?.contexts?.trace?.status === 'internal_error'
Expand All@@ -47,7 +47,7 @@ test('Should create a transaction with error status for faulty edge routes', asy
});

test('Should record exceptions for faulty edge routes', async ({ request }) => {
const errorEventPromise = waitForError('nextjs-13-app-dir', errorEvent => {
const errorEventPromise = waitForError('nextjs-app-dir', errorEvent => {
return errorEvent?.exception?.values?.[0]?.value === 'Edge Route Error';
});

Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -2,7 +2,7 @@ import { expect, test } from '@playwright/test';
import { waitForError, waitForTransaction } from '@sentry-internal/test-utils';

test('Should record exceptions for faulty edge server components', async ({ page }) => {
const errorEventPromise = waitForError('nextjs-13-app-dir', errorEvent => {
const errorEventPromise = waitForError('nextjs-app-dir', errorEvent => {
return errorEvent?.exception?.values?.[0]?.value === 'Edge Server Component Error';
});

Expand All@@ -20,7 +20,7 @@ test('Should record exceptions for faulty edge server components', async ({ page
});

test('Should record transaction for edge server components', async ({ page }) => {
const serverComponentTransactionPromise = waitForTransaction('nextjs-13-app-dir', async transactionEvent => {
const serverComponentTransactionPromise = waitForTransaction('nextjs-app-dir', async transactionEvent => {
return transactionEvent?.transaction === 'Page Server Component (/edge-server-components)';
});

Expand Down

This file was deleted.

Original file line numberDiff line numberDiff line change
Expand Up@@ -2,7 +2,7 @@ import { expect, test } from '@playwright/test';
import { waitForError, waitForTransaction } from '@sentry-internal/test-utils';

test('Should create a transaction for middleware', async ({ request }) => {
const middlewareTransactionPromise = waitForTransaction('nextjs-13-app-dir', async transactionEvent => {
const middlewareTransactionPromise = waitForTransaction('nextjs-app-dir', async transactionEvent => {
return transactionEvent?.transaction === 'middleware' && transactionEvent?.contexts?.trace?.status === 'ok';
});

Expand All@@ -21,7 +21,7 @@ test('Should create a transaction for middleware', async ({ request }) => {
});

test('Should create a transaction with error status for faulty middleware', async ({ request }) => {
const middlewareTransactionPromise = waitForTransaction('nextjs-13-app-dir', async transactionEvent => {
const middlewareTransactionPromise = waitForTransaction('nextjs-app-dir', async transactionEvent => {
return (
transactionEvent?.transaction === 'middleware' && transactionEvent?.contexts?.trace?.status === 'internal_error'
);
Expand All@@ -39,7 +39,7 @@ test('Should create a transaction with error status for faulty middleware', asyn
});

test('Records exceptions happening in middleware', async ({ request }) => {
const errorEventPromise = waitForError('nextjs-13-app-dir', errorEvent => {
const errorEventPromise = waitForError('nextjs-app-dir', errorEvent => {
return errorEvent?.exception?.values?.[0]?.value === 'Middleware Error';
});

Expand All@@ -56,7 +56,7 @@ test('Records exceptions happening in middleware', async ({ request }) => {
});

test('Should trace outgoing fetch requests inside middleware and create breadcrumbs for it', async ({ request }) => {
const middlewareTransactionPromise = waitForTransaction('nextjs-13-app-dir', async transactionEvent => {
const middlewareTransactionPromise = waitForTransaction('nextjs-app-dir', async transactionEvent => {
return (
transactionEvent?.transaction === 'middleware' &&
!!transactionEvent.spans?.find(span => span.op === 'http.client')
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -2,11 +2,11 @@ import { expect, test } from '@playwright/test';
import { waitForError, waitForTransaction } from '@sentry-internal/test-utils';

test('Will capture error for SSR rendering error with a connected trace (Class Component)', async ({ page }) => {
const errorEventPromise = waitForError('nextjs-13-app-dir', errorEvent => {
const errorEventPromise = waitForError('nextjs-app-dir', errorEvent => {
return errorEvent?.exception?.values?.[0]?.value === 'Pages SSR Error Class';
});

const serverComponentTransaction = waitForTransaction('nextjs-13-app-dir', async transactionEvent => {
const serverComponentTransaction = waitForTransaction('nextjs-app-dir', async transactionEvent => {
return (
transactionEvent?.transaction === '/pages-router/ssr-error-class' &&
(await errorEventPromise).contexts?.trace?.trace_id === transactionEvent.contexts?.trace?.trace_id
Expand All@@ -20,11 +20,11 @@ test('Will capture error for SSR rendering error with a connected trace (Class C
});

test('Will capture error for SSR rendering error with a connected trace (Functional Component)', async ({ page }) => {
const errorEventPromise = waitForError('nextjs-13-app-dir', errorEvent => {
const errorEventPromise = waitForError('nextjs-app-dir', errorEvent => {
return errorEvent?.exception?.values?.[0]?.value === 'Pages SSR Error FC';
});

const ssrTransactionPromise = waitForTransaction('nextjs-13-app-dir', async transactionEvent => {
const ssrTransactionPromise = waitForTransaction('nextjs-app-dir', async transactionEvent => {
return (
transactionEvent?.transaction === '/pages-router/ssr-error-fc' &&
(await errorEventPromise).contexts?.trace?.trace_id === transactionEvent.contexts?.trace?.trace_id
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -5,7 +5,7 @@ import { waitForTransaction } from '@sentry-internal/test-utils';
// Sometimes the request span was included in the handler span, more often it wasn't. I have no idea why. Maybe one day we will
// figure it out. Today is not that day.
test.skip('Should send a transaction with a http span', async ({ request }) => {
const transactionPromise = waitForTransaction('nextjs-13-app-dir', async transactionEvent => {
const transactionPromise = waitForTransaction('nextjs-app-dir', async transactionEvent => {
return transactionEvent?.transaction === 'GET /api/request-instrumentation';
});

Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -2,7 +2,7 @@ import { expect, test } from '@playwright/test';
import { waitForError, waitForTransaction } from '@sentry-internal/test-utils';

test('Should create a transaction for route handlers', async ({ request }) => {
const routehandlerTransactionPromise = waitForTransaction('nextjs-13-app-dir', async transactionEvent => {
const routehandlerTransactionPromise = waitForTransaction('nextjs-app-dir', async transactionEvent => {
return transactionEvent?.transaction === 'GET /route-handlers/[param]';
});

Expand All@@ -19,7 +19,7 @@ test('Should create a transaction for route handlers', async ({ request }) => {
test('Should create a transaction for route handlers and correctly set span status depending on http status', async ({
request,
}) => {
const routehandlerTransactionPromise = waitForTransaction('nextjs-13-app-dir', async transactionEvent => {
const routehandlerTransactionPromise = waitForTransaction('nextjs-app-dir', async transactionEvent => {
return transactionEvent?.transaction === 'POST /route-handlers/[param]';
});

Expand All@@ -33,11 +33,11 @@ test('Should create a transaction for route handlers and correctly set span stat
});

test('Should record exceptions and transactions for faulty route handlers', async ({ request }) => {
const errorEventPromise = waitForError('nextjs-13-app-dir', errorEvent => {
const errorEventPromise = waitForError('nextjs-app-dir', errorEvent => {
return errorEvent?.exception?.values?.[0]?.value === 'route-handler-error';
});

const routehandlerTransactionPromise = waitForTransaction('nextjs-13-app-dir', async transactionEvent => {
const routehandlerTransactionPromise = waitForTransaction('nextjs-app-dir', async transactionEvent => {
return transactionEvent?.transaction === 'PUT /route-handlers/[param]/error';
});

Expand DownExpand Up@@ -65,7 +65,7 @@ test('Should record exceptions and transactions for faulty route handlers', asyn

test.describe('Edge runtime', () => {
test('should create a transaction for route handlers', async ({ request }) => {
const routehandlerTransactionPromise = waitForTransaction('nextjs-13-app-dir', async transactionEvent => {
const routehandlerTransactionPromise = waitForTransaction('nextjs-app-dir', async transactionEvent => {
return transactionEvent?.transaction === 'PATCH /route-handlers/[param]/edge';
});

Expand All@@ -79,11 +79,11 @@ test.describe('Edge runtime', () => {
});

test('should record exceptions and transactions for faulty route handlers', async ({ request }) => {
const errorEventPromise = waitForError('nextjs-13-app-dir', errorEvent => {
const errorEventPromise = waitForError('nextjs-app-dir', errorEvent => {
return errorEvent?.exception?.values?.[0]?.value === 'route-handler-edge-error';
});

const routehandlerTransactionPromise = waitForTransaction('nextjs-13-app-dir', async transactionEvent => {
const routehandlerTransactionPromise = waitForTransaction('nextjs-app-dir', async transactionEvent => {
return transactionEvent?.transaction === 'DELETE /route-handlers/[param]/edge';
});

Expand Down
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line numberDiff line numberDiff line change
Expand Up@@ -2,5 +2,5 @@ import { startEventProxyServer } from '@sentry-internal/test-utils';

startEventProxyServer({
port: 3031,
proxyServerName: 'nextjs-13-app-dir',
proxyServerName: 'nextjs-app-dir',
});
Original file line numberDiff line numberDiff line change
Expand Up@@ -2,9 +2,7 @@ import { expect, test } from '@playwright/test';
import { waitForTransaction } from '@sentry-internal/test-utils';

test('Should allow for async context isolation in the edge SDK', async ({ request }) => {
// test.skip(process.env.TEST_ENV === 'development', "Doesn't work in dev mode.");

const edgerouteTransactionPromise = waitForTransaction('nextjs-13-app-dir', async transactionEvent => {
const edgerouteTransactionPromise = waitForTransaction('nextjs-app-dir', async transactionEvent => {
return transactionEvent?.transaction === 'GET /api/async-context-edge-endpoint';
});

Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -4,7 +4,7 @@ import { waitForTransaction } from '@sentry-internal/test-utils';
test('Creates a pageload transaction for app router routes', async ({ page }) => {
const randomRoute = String(Math.random());

const clientPageloadTransactionPromise = waitForTransaction('nextjs-13-app-dir', transactionEvent => {
const clientPageloadTransactionPromise = waitForTransaction('nextjs-app-dir', transactionEvent => {
return (
transactionEvent?.transaction === `/server-component/parameter/${randomRoute}` &&
transactionEvent.contexts?.trace?.op === 'pageload'
Expand All@@ -19,7 +19,7 @@ test('Creates a pageload transaction for app router routes', async ({ page }) =>
test('Creates a navigation transaction for app router routes', async ({ page }) => {
const randomRoute = String(Math.random());

const clientPageloadTransactionPromise = waitForTransaction('nextjs-13-app-dir', transactionEvent => {
const clientPageloadTransactionPromise = waitForTransaction('nextjs-app-dir', transactionEvent => {
return (
transactionEvent?.transaction === `/server-component/parameter/${randomRoute}` &&
transactionEvent.contexts?.trace?.op === 'pageload'
Expand All@@ -30,14 +30,14 @@ test('Creates a navigation transaction for app router routes', async ({ page })
await clientPageloadTransactionPromise;
await page.getByText('Page (/server-component/parameter/[parameter])').isVisible();

const clientNavigationTransactionPromise = waitForTransaction('nextjs-13-app-dir', transactionEvent => {
const clientNavigationTransactionPromise = waitForTransaction('nextjs-app-dir', transactionEvent => {
return (
transactionEvent?.transaction === '/server-component/parameter/foo/bar/baz' &&
transactionEvent.contexts?.trace?.op === 'navigation'
);
});

const serverComponentTransactionPromise = waitForTransaction('nextjs-13-app-dir', async transactionEvent => {
const serverComponentTransactionPromise = waitForTransaction('nextjs-app-dir', async transactionEvent => {
return (
transactionEvent?.transaction === 'Page Server Component (/server-component/parameter/[...parameters])' &&
(await clientNavigationTransactionPromise).contexts?.trace?.trace_id ===
Expand Down
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
import { expect, test } from '@playwright/test';
import { waitForError } from '@sentry-internal/test-utils';

test('Sends a client-side exception to Sentry', async ({ page }) => {
await page.goto('/');

const errorEventPromise = waitForError('nextjs-app-dir', errorEvent => {
return errorEvent?.exception?.values?.[0]?.value === 'Click Error';
});

await page.getByText('Throw error').click();

const errorEvent = await errorEventPromise;

expect(errorEvent.exception?.values).toHaveLength(1);
expect(errorEvent.exception?.values?.[0]?.value).toBe('Click Error');

expect(errorEvent.request).toEqual({
headers: expect.any(Object),
url: 'http://localhost:3030/',
});

expect(errorEvent.transaction).toEqual('/');

expect(errorEvent.contexts?.trace).toEqual({
trace_id: expect.any(String),
span_id: expect.any(String),
});
});
Original file line numberDiff line numberDiff line change
Expand Up@@ -4,7 +4,7 @@ import { waitForTransaction } from '@sentry-internal/test-utils';
test('Will capture a connected trace for all server components and generation functions when visiting a page', async ({
page,
}) => {
const someConnectedEvent = waitForTransaction('nextjs-13-app-dir', async transactionEvent => {
const someConnectedEvent = waitForTransaction('nextjs-app-dir', async transactionEvent => {
return (
transactionEvent?.transaction === 'Layout Server Component (/(nested-layout)/nested-layout)' ||
transactionEvent?.transaction === 'Layout Server Component (/(nested-layout))' ||
Expand All@@ -13,28 +13,28 @@ test('Will capture a connected trace for all server components and generation fu
);
});

const layout1Transaction = waitForTransaction('nextjs-13-app-dir', async transactionEvent => {
const layout1Transaction = waitForTransaction('nextjs-app-dir', async transactionEvent => {
return (
transactionEvent?.transaction === 'Layout Server Component (/(nested-layout)/nested-layout)' &&
(await someConnectedEvent).contexts?.trace?.trace_id === transactionEvent.contexts?.trace?.trace_id
);
});

const layout2Transaction = waitForTransaction('nextjs-13-app-dir', async transactionEvent => {
const layout2Transaction = waitForTransaction('nextjs-app-dir', async transactionEvent => {
return (
transactionEvent?.transaction === 'Layout Server Component (/(nested-layout))' &&
(await someConnectedEvent).contexts?.trace?.trace_id === transactionEvent.contexts?.trace?.trace_id
);
});

const pageTransaction = waitForTransaction('nextjs-13-app-dir', async transactionEvent => {
const pageTransaction = waitForTransaction('nextjs-app-dir', async transactionEvent => {
return (
transactionEvent?.transaction === 'Page Server Component (/(nested-layout)/nested-layout)' &&
(await someConnectedEvent).contexts?.trace?.trace_id === transactionEvent.contexts?.trace?.trace_id
);
});

const generateMetadataTransaction = waitForTransaction('nextjs-13-app-dir', async transactionEvent => {
const generateMetadataTransaction = waitForTransaction('nextjs-app-dir', async transactionEvent => {
return (
transactionEvent?.transaction === 'Page.generateMetadata (/(nested-layout)/nested-layout)' &&
(await someConnectedEvent).contexts?.trace?.trace_id === transactionEvent.contexts?.trace?.trace_id
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -10,7 +10,7 @@ test.describe('dev mode error symbolification', () => {
test('should have symbolicated dev errors', async ({ page }) => {
await page.goto('/');

const errorEventPromise = waitForError('nextjs-13-app-dir', errorEvent => {
const errorEventPromise = waitForError('nextjs-app-dir', errorEvent => {
return errorEvent?.exception?.values?.[0]?.value === 'Click Error';
});

Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -2,7 +2,7 @@ import { expect, test } from '@playwright/test';
import { waitForError, waitForTransaction } from '@sentry-internal/test-utils';

test('Should create a transaction for edge routes', async ({ request }) => {
const edgerouteTransactionPromise = waitForTransaction('nextjs-13-app-dir', async transactionEvent => {
const edgerouteTransactionPromise = waitForTransaction('nextjs-app-dir', async transactionEvent => {
return (
transactionEvent?.transaction === 'GET /api/edge-endpoint' && transactionEvent?.contexts?.trace?.status === 'ok'
);
Expand All@@ -24,7 +24,7 @@ test('Should create a transaction for edge routes', async ({ request }) => {
});

test('Should create a transaction with error status for faulty edge routes', async ({ request }) => {
const edgerouteTransactionPromise = waitForTransaction('nextjs-13-app-dir', async transactionEvent => {
const edgerouteTransactionPromise = waitForTransaction('nextjs-app-dir', async transactionEvent => {
return (
transactionEvent?.transaction === 'GET /api/error-edge-endpoint' &&
transactionEvent?.contexts?.trace?.status === 'internal_error'
Expand All@@ -47,7 +47,7 @@ test('Should create a transaction with error status for faulty edge routes', asy
});

test('Should record exceptions for faulty edge routes', async ({ request }) => {
const errorEventPromise = waitForError('nextjs-13-app-dir', errorEvent => {
const errorEventPromise = waitForError('nextjs-app-dir', errorEvent => {
return errorEvent?.exception?.values?.[0]?.value === 'Edge Route Error';
});

Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -2,7 +2,7 @@ import { expect, test } from '@playwright/test';
import { waitForError, waitForTransaction } from '@sentry-internal/test-utils';

test('Should record exceptions for faulty edge server components', async ({ page }) => {
const errorEventPromise = waitForError('nextjs-13-app-dir', errorEvent => {
const errorEventPromise = waitForError('nextjs-app-dir', errorEvent => {
return errorEvent?.exception?.values?.[0]?.value === 'Edge Server Component Error';
});

Expand All@@ -20,7 +20,7 @@ test('Should record exceptions for faulty edge server components', async ({ page
});

test('Should record transaction for edge server components', async ({ page }) => {
const serverComponentTransactionPromise = waitForTransaction('nextjs-13-app-dir', async transactionEvent => {
const serverComponentTransactionPromise = waitForTransaction('nextjs-app-dir', async transactionEvent => {
return transactionEvent?.transaction === 'Page Server Component (/edge-server-components)';
});

Expand Down

This file was deleted.

Original file line numberDiff line numberDiff line change
Expand Up@@ -2,7 +2,7 @@ import { expect, test } from '@playwright/test';
import { waitForError, waitForTransaction } from '@sentry-internal/test-utils';

test('Should create a transaction for middleware', async ({ request }) => {
const middlewareTransactionPromise = waitForTransaction('nextjs-13-app-dir', async transactionEvent => {
const middlewareTransactionPromise = waitForTransaction('nextjs-app-dir', async transactionEvent => {
return transactionEvent?.transaction === 'middleware' && transactionEvent?.contexts?.trace?.status === 'ok';
});

Expand All@@ -21,7 +21,7 @@ test('Should create a transaction for middleware', async ({ request }) => {
});

test('Should create a transaction with error status for faulty middleware', async ({ request }) => {
const middlewareTransactionPromise = waitForTransaction('nextjs-13-app-dir', async transactionEvent => {
const middlewareTransactionPromise = waitForTransaction('nextjs-app-dir', async transactionEvent => {
return (
transactionEvent?.transaction === 'middleware' && transactionEvent?.contexts?.trace?.status === 'internal_error'
);
Expand All@@ -39,7 +39,7 @@ test('Should create a transaction with error status for faulty middleware', asyn
});

test('Records exceptions happening in middleware', async ({ request }) => {
const errorEventPromise = waitForError('nextjs-13-app-dir', errorEvent => {
const errorEventPromise = waitForError('nextjs-app-dir', errorEvent => {
return errorEvent?.exception?.values?.[0]?.value === 'Middleware Error';
});

Expand All@@ -56,7 +56,7 @@ test('Records exceptions happening in middleware', async ({ request }) => {
});

test('Should trace outgoing fetch requests inside middleware and create breadcrumbs for it', async ({ request }) => {
const middlewareTransactionPromise = waitForTransaction('nextjs-13-app-dir', async transactionEvent => {
const middlewareTransactionPromise = waitForTransaction('nextjs-app-dir', async transactionEvent => {
return (
transactionEvent?.transaction === 'middleware' &&
!!transactionEvent.spans?.find(span => span.op === 'http.client')
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -2,11 +2,11 @@ import { expect, test } from '@playwright/test';
import { waitForError, waitForTransaction } from '@sentry-internal/test-utils';

test('Will capture error for SSR rendering error with a connected trace (Class Component)', async ({ page }) => {
const errorEventPromise = waitForError('nextjs-13-app-dir', errorEvent => {
const errorEventPromise = waitForError('nextjs-app-dir', errorEvent => {
return errorEvent?.exception?.values?.[0]?.value === 'Pages SSR Error Class';
});

const serverComponentTransaction = waitForTransaction('nextjs-13-app-dir', async transactionEvent => {
const serverComponentTransaction = waitForTransaction('nextjs-app-dir', async transactionEvent => {
return (
transactionEvent?.transaction === '/pages-router/ssr-error-class' &&
(await errorEventPromise).contexts?.trace?.trace_id === transactionEvent.contexts?.trace?.trace_id
Expand All@@ -20,11 +20,11 @@ test('Will capture error for SSR rendering error with a connected trace (Class C
});

test('Will capture error for SSR rendering error with a connected trace (Functional Component)', async ({ page }) => {
const errorEventPromise = waitForError('nextjs-13-app-dir', errorEvent => {
const errorEventPromise = waitForError('nextjs-app-dir', errorEvent => {
return errorEvent?.exception?.values?.[0]?.value === 'Pages SSR Error FC';
});

const ssrTransactionPromise = waitForTransaction('nextjs-13-app-dir', async transactionEvent => {
const ssrTransactionPromise = waitForTransaction('nextjs-app-dir', async transactionEvent => {
return (
transactionEvent?.transaction === '/pages-router/ssr-error-fc' &&
(await errorEventPromise).contexts?.trace?.trace_id === transactionEvent.contexts?.trace?.trace_id
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -5,7 +5,7 @@ import { waitForTransaction } from '@sentry-internal/test-utils';
// Sometimes the request span was included in the handler span, more often it wasn't. I have no idea why. Maybe one day we will
// figure it out. Today is not that day.
test.skip('Should send a transaction with a http span', async ({ request }) => {
const transactionPromise = waitForTransaction('nextjs-13-app-dir', async transactionEvent => {
const transactionPromise = waitForTransaction('nextjs-app-dir', async transactionEvent => {
return transactionEvent?.transaction === 'GET /api/request-instrumentation';
});

Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -2,7 +2,7 @@ import { expect, test } from '@playwright/test';
import { waitForError, waitForTransaction } from '@sentry-internal/test-utils';

test('Should create a transaction for route handlers', async ({ request }) => {
const routehandlerTransactionPromise = waitForTransaction('nextjs-13-app-dir', async transactionEvent => {
const routehandlerTransactionPromise = waitForTransaction('nextjs-app-dir', async transactionEvent => {
return transactionEvent?.transaction === 'GET /route-handlers/[param]';
});

Expand All@@ -19,7 +19,7 @@ test('Should create a transaction for route handlers', async ({ request }) => {
test('Should create a transaction for route handlers and correctly set span status depending on http status', async ({
request,
}) => {
const routehandlerTransactionPromise = waitForTransaction('nextjs-13-app-dir', async transactionEvent => {
const routehandlerTransactionPromise = waitForTransaction('nextjs-app-dir', async transactionEvent => {
return transactionEvent?.transaction === 'POST /route-handlers/[param]';
});

Expand All@@ -33,11 +33,11 @@ test('Should create a transaction for route handlers and correctly set span stat
});

test('Should record exceptions and transactions for faulty route handlers', async ({ request }) => {
const errorEventPromise = waitForError('nextjs-13-app-dir', errorEvent => {
const errorEventPromise = waitForError('nextjs-app-dir', errorEvent => {
return errorEvent?.exception?.values?.[0]?.value === 'route-handler-error';
});

const routehandlerTransactionPromise = waitForTransaction('nextjs-13-app-dir', async transactionEvent => {
const routehandlerTransactionPromise = waitForTransaction('nextjs-app-dir', async transactionEvent => {
return transactionEvent?.transaction === 'PUT /route-handlers/[param]/error';
});

Expand DownExpand Up@@ -65,7 +65,7 @@ test('Should record exceptions and transactions for faulty route handlers', asyn

test.describe('Edge runtime', () => {
test('should create a transaction for route handlers', async ({ request }) => {
const routehandlerTransactionPromise = waitForTransaction('nextjs-13-app-dir', async transactionEvent => {
const routehandlerTransactionPromise = waitForTransaction('nextjs-app-dir', async transactionEvent => {
return transactionEvent?.transaction === 'PATCH /route-handlers/[param]/edge';
});

Expand All@@ -79,11 +79,11 @@ test.describe('Edge runtime', () => {
});

test('should record exceptions and transactions for faulty route handlers', async ({ request }) => {
const errorEventPromise = waitForError('nextjs-13-app-dir', errorEvent => {
const errorEventPromise = waitForError('nextjs-app-dir', errorEvent => {
return errorEvent?.exception?.values?.[0]?.value === 'route-handler-edge-error';
});

const routehandlerTransactionPromise = waitForTransaction('nextjs-13-app-dir', async transactionEvent => {
const routehandlerTransactionPromise = waitForTransaction('nextjs-app-dir', async transactionEvent => {
return transactionEvent?.transaction === 'DELETE /route-handlers/[param]/edge';
});

Expand Down
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line numberDiff line numberDiff line change
Expand Up@@ -2,5 +2,5 @@ import { startEventProxyServer } from '@sentry-internal/test-utils';

startEventProxyServer({
port: 3031,
proxyServerName: 'nextjs-13-app-dir',
proxyServerName: 'nextjs-app-dir',
});
Original file line numberDiff line numberDiff line change
Expand Up@@ -2,9 +2,7 @@ import { expect, test } from '@playwright/test';
import { waitForTransaction } from '@sentry-internal/test-utils';

test('Should allow for async context isolation in the edge SDK', async ({ request }) => {
// test.skip(process.env.TEST_ENV === 'development', "Doesn't work in dev mode.");

const edgerouteTransactionPromise = waitForTransaction('nextjs-13-app-dir', async transactionEvent => {
const edgerouteTransactionPromise = waitForTransaction('nextjs-app-dir', async transactionEvent => {
return transactionEvent?.transaction === 'GET /api/async-context-edge-endpoint';
});

Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -4,7 +4,7 @@ import { waitForTransaction } from '@sentry-internal/test-utils';
test('Creates a pageload transaction for app router routes', async ({ page }) => {
const randomRoute = String(Math.random());

const clientPageloadTransactionPromise = waitForTransaction('nextjs-13-app-dir', transactionEvent => {
const clientPageloadTransactionPromise = waitForTransaction('nextjs-app-dir', transactionEvent => {
return (
transactionEvent?.transaction === `/server-component/parameter/${randomRoute}` &&
transactionEvent.contexts?.trace?.op === 'pageload'
Expand All@@ -19,7 +19,7 @@ test('Creates a pageload transaction for app router routes', async ({ page }) =>
test('Creates a navigation transaction for app router routes', async ({ page }) => {
const randomRoute = String(Math.random());

const clientPageloadTransactionPromise = waitForTransaction('nextjs-13-app-dir', transactionEvent => {
const clientPageloadTransactionPromise = waitForTransaction('nextjs-app-dir', transactionEvent => {
return (
transactionEvent?.transaction === `/server-component/parameter/${randomRoute}` &&
transactionEvent.contexts?.trace?.op === 'pageload'
Expand All@@ -30,14 +30,14 @@ test('Creates a navigation transaction for app router routes', async ({ page })
await clientPageloadTransactionPromise;
await page.getByText('Page (/server-component/parameter/[parameter])').isVisible();

const clientNavigationTransactionPromise = waitForTransaction('nextjs-13-app-dir', transactionEvent => {
const clientNavigationTransactionPromise = waitForTransaction('nextjs-app-dir', transactionEvent => {
return (
transactionEvent?.transaction === '/server-component/parameter/foo/bar/baz' &&
transactionEvent.contexts?.trace?.op === 'navigation'
);
});

const serverComponentTransactionPromise = waitForTransaction('nextjs-13-app-dir', async transactionEvent => {
const serverComponentTransactionPromise = waitForTransaction('nextjs-app-dir', async transactionEvent => {
return (
transactionEvent?.transaction === 'Page Server Component (/server-component/parameter/[...parameters])' &&
(await clientNavigationTransactionPromise).contexts?.trace?.trace_id ===
Expand Down
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
import { expect, test } from '@playwright/test';
import { waitForError } from '@sentry-internal/test-utils';

test('Sends a client-side exception to Sentry', async ({ page }) => {
await page.goto('/');

const errorEventPromise = waitForError('nextjs-app-dir', errorEvent => {
return errorEvent?.exception?.values?.[0]?.value === 'Click Error';
});

await page.getByText('Throw error').click();

const errorEvent = await errorEventPromise;

expect(errorEvent.exception?.values).toHaveLength(1);
expect(errorEvent.exception?.values?.[0]?.value).toBe('Click Error');

expect(errorEvent.request).toEqual({
headers: expect.any(Object),
url: 'http://localhost:3030/',
});

expect(errorEvent.transaction).toEqual('/');

expect(errorEvent.contexts?.trace).toEqual({
trace_id: expect.any(String),
span_id: expect.any(String),
});
});
Original file line numberDiff line numberDiff line change
Expand Up@@ -4,7 +4,7 @@ import { waitForTransaction } from '@sentry-internal/test-utils';
test('Will capture a connected trace for all server components and generation functions when visiting a page', async ({
page,
}) => {
const someConnectedEvent = waitForTransaction('nextjs-13-app-dir', async transactionEvent => {
const someConnectedEvent = waitForTransaction('nextjs-app-dir', async transactionEvent => {
return (
transactionEvent?.transaction === 'Layout Server Component (/(nested-layout)/nested-layout)' ||
transactionEvent?.transaction === 'Layout Server Component (/(nested-layout))' ||
Expand All@@ -13,28 +13,28 @@ test('Will capture a connected trace for all server components and generation fu
);
});

const layout1Transaction = waitForTransaction('nextjs-13-app-dir', async transactionEvent => {
const layout1Transaction = waitForTransaction('nextjs-app-dir', async transactionEvent => {
return (
transactionEvent?.transaction === 'Layout Server Component (/(nested-layout)/nested-layout)' &&
(await someConnectedEvent).contexts?.trace?.trace_id === transactionEvent.contexts?.trace?.trace_id
);
});

const layout2Transaction = waitForTransaction('nextjs-13-app-dir', async transactionEvent => {
const layout2Transaction = waitForTransaction('nextjs-app-dir', async transactionEvent => {
return (
transactionEvent?.transaction === 'Layout Server Component (/(nested-layout))' &&
(await someConnectedEvent).contexts?.trace?.trace_id === transactionEvent.contexts?.trace?.trace_id
);
});

const pageTransaction = waitForTransaction('nextjs-13-app-dir', async transactionEvent => {
const pageTransaction = waitForTransaction('nextjs-app-dir', async transactionEvent => {
return (
transactionEvent?.transaction === 'Page Server Component (/(nested-layout)/nested-layout)' &&
(await someConnectedEvent).contexts?.trace?.trace_id === transactionEvent.contexts?.trace?.trace_id
);
});

const generateMetadataTransaction = waitForTransaction('nextjs-13-app-dir', async transactionEvent => {
const generateMetadataTransaction = waitForTransaction('nextjs-app-dir', async transactionEvent => {
return (
transactionEvent?.transaction === 'Page.generateMetadata (/(nested-layout)/nested-layout)' &&
(await someConnectedEvent).contexts?.trace?.trace_id === transactionEvent.contexts?.trace?.trace_id
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -10,7 +10,7 @@ test.describe('dev mode error symbolification', () => {
test('should have symbolicated dev errors', async ({ page }) => {
await page.goto('/');

const errorEventPromise = waitForError('nextjs-13-app-dir', errorEvent => {
const errorEventPromise = waitForError('nextjs-app-dir', errorEvent => {
return errorEvent?.exception?.values?.[0]?.value === 'Click Error';
});

Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -2,7 +2,7 @@ import { expect, test } from '@playwright/test';
import { waitForError, waitForTransaction } from '@sentry-internal/test-utils';

test('Should create a transaction for edge routes', async ({ request }) => {
const edgerouteTransactionPromise = waitForTransaction('nextjs-13-app-dir', async transactionEvent => {
const edgerouteTransactionPromise = waitForTransaction('nextjs-app-dir', async transactionEvent => {
return (
transactionEvent?.transaction === 'GET /api/edge-endpoint' && transactionEvent?.contexts?.trace?.status === 'ok'
);
Expand All@@ -24,7 +24,7 @@ test('Should create a transaction for edge routes', async ({ request }) => {
});

test('Should create a transaction with error status for faulty edge routes', async ({ request }) => {
const edgerouteTransactionPromise = waitForTransaction('nextjs-13-app-dir', async transactionEvent => {
const edgerouteTransactionPromise = waitForTransaction('nextjs-app-dir', async transactionEvent => {
return (
transactionEvent?.transaction === 'GET /api/error-edge-endpoint' &&
transactionEvent?.contexts?.trace?.status === 'internal_error'
Expand All@@ -47,7 +47,7 @@ test('Should create a transaction with error status for faulty edge routes', asy
});

test('Should record exceptions for faulty edge routes', async ({ request }) => {
const errorEventPromise = waitForError('nextjs-13-app-dir', errorEvent => {
const errorEventPromise = waitForError('nextjs-app-dir', errorEvent => {
return errorEvent?.exception?.values?.[0]?.value === 'Edge Route Error';
});

Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -2,7 +2,7 @@ import { expect, test } from '@playwright/test';
import { waitForError, waitForTransaction } from '@sentry-internal/test-utils';

test('Should record exceptions for faulty edge server components', async ({ page }) => {
const errorEventPromise = waitForError('nextjs-13-app-dir', errorEvent => {
const errorEventPromise = waitForError('nextjs-app-dir', errorEvent => {
return errorEvent?.exception?.values?.[0]?.value === 'Edge Server Component Error';
});

Expand All@@ -20,7 +20,7 @@ test('Should record exceptions for faulty edge server components', async ({ page
});

test('Should record transaction for edge server components', async ({ page }) => {
const serverComponentTransactionPromise = waitForTransaction('nextjs-13-app-dir', async transactionEvent => {
const serverComponentTransactionPromise = waitForTransaction('nextjs-app-dir', async transactionEvent => {
return transactionEvent?.transaction === 'Page Server Component (/edge-server-components)';
});

Expand Down

This file was deleted.

Original file line numberDiff line numberDiff line change
Expand Up@@ -2,7 +2,7 @@ import { expect, test } from '@playwright/test';
import { waitForError, waitForTransaction } from '@sentry-internal/test-utils';

test('Should create a transaction for middleware', async ({ request }) => {
const middlewareTransactionPromise = waitForTransaction('nextjs-13-app-dir', async transactionEvent => {
const middlewareTransactionPromise = waitForTransaction('nextjs-app-dir', async transactionEvent => {
return transactionEvent?.transaction === 'middleware' && transactionEvent?.contexts?.trace?.status === 'ok';
});

Expand All@@ -21,7 +21,7 @@ test('Should create a transaction for middleware', async ({ request }) => {
});

test('Should create a transaction with error status for faulty middleware', async ({ request }) => {
const middlewareTransactionPromise = waitForTransaction('nextjs-13-app-dir', async transactionEvent => {
const middlewareTransactionPromise = waitForTransaction('nextjs-app-dir', async transactionEvent => {
return (
transactionEvent?.transaction === 'middleware' && transactionEvent?.contexts?.trace?.status === 'internal_error'
);
Expand All@@ -39,7 +39,7 @@ test('Should create a transaction with error status for faulty middleware', asyn
});

test('Records exceptions happening in middleware', async ({ request }) => {
const errorEventPromise = waitForError('nextjs-13-app-dir', errorEvent => {
const errorEventPromise = waitForError('nextjs-app-dir', errorEvent => {
return errorEvent?.exception?.values?.[0]?.value === 'Middleware Error';
});

Expand All@@ -56,7 +56,7 @@ test('Records exceptions happening in middleware', async ({ request }) => {
});

test('Should trace outgoing fetch requests inside middleware and create breadcrumbs for it', async ({ request }) => {
const middlewareTransactionPromise = waitForTransaction('nextjs-13-app-dir', async transactionEvent => {
const middlewareTransactionPromise = waitForTransaction('nextjs-app-dir', async transactionEvent => {
return (
transactionEvent?.transaction === 'middleware' &&
!!transactionEvent.spans?.find(span => span.op === 'http.client')
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -2,11 +2,11 @@ import { expect, test } from '@playwright/test';
import { waitForError, waitForTransaction } from '@sentry-internal/test-utils';

test('Will capture error for SSR rendering error with a connected trace (Class Component)', async ({ page }) => {
const errorEventPromise = waitForError('nextjs-13-app-dir', errorEvent => {
const errorEventPromise = waitForError('nextjs-app-dir', errorEvent => {
return errorEvent?.exception?.values?.[0]?.value === 'Pages SSR Error Class';
});

const serverComponentTransaction = waitForTransaction('nextjs-13-app-dir', async transactionEvent => {
const serverComponentTransaction = waitForTransaction('nextjs-app-dir', async transactionEvent => {
return (
transactionEvent?.transaction === '/pages-router/ssr-error-class' &&
(await errorEventPromise).contexts?.trace?.trace_id === transactionEvent.contexts?.trace?.trace_id
Expand All@@ -20,11 +20,11 @@ test('Will capture error for SSR rendering error with a connected trace (Class C
});

test('Will capture error for SSR rendering error with a connected trace (Functional Component)', async ({ page }) => {
const errorEventPromise = waitForError('nextjs-13-app-dir', errorEvent => {
const errorEventPromise = waitForError('nextjs-app-dir', errorEvent => {
return errorEvent?.exception?.values?.[0]?.value === 'Pages SSR Error FC';
});

const ssrTransactionPromise = waitForTransaction('nextjs-13-app-dir', async transactionEvent => {
const ssrTransactionPromise = waitForTransaction('nextjs-app-dir', async transactionEvent => {
return (
transactionEvent?.transaction === '/pages-router/ssr-error-fc' &&
(await errorEventPromise).contexts?.trace?.trace_id === transactionEvent.contexts?.trace?.trace_id
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -5,7 +5,7 @@ import { waitForTransaction } from '@sentry-internal/test-utils';
// Sometimes the request span was included in the handler span, more often it wasn't. I have no idea why. Maybe one day we will
// figure it out. Today is not that day.
test.skip('Should send a transaction with a http span', async ({ request }) => {
const transactionPromise = waitForTransaction('nextjs-13-app-dir', async transactionEvent => {
const transactionPromise = waitForTransaction('nextjs-app-dir', async transactionEvent => {
return transactionEvent?.transaction === 'GET /api/request-instrumentation';
});

Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -2,7 +2,7 @@ import { expect, test } from '@playwright/test';
import { waitForError, waitForTransaction } from '@sentry-internal/test-utils';

test('Should create a transaction for route handlers', async ({ request }) => {
const routehandlerTransactionPromise = waitForTransaction('nextjs-13-app-dir', async transactionEvent => {
const routehandlerTransactionPromise = waitForTransaction('nextjs-app-dir', async transactionEvent => {
return transactionEvent?.transaction === 'GET /route-handlers/[param]';
});

Expand All@@ -19,7 +19,7 @@ test('Should create a transaction for route handlers', async ({ request }) => {
test('Should create a transaction for route handlers and correctly set span status depending on http status', async ({
request,
}) => {
const routehandlerTransactionPromise = waitForTransaction('nextjs-13-app-dir', async transactionEvent => {
const routehandlerTransactionPromise = waitForTransaction('nextjs-app-dir', async transactionEvent => {
return transactionEvent?.transaction === 'POST /route-handlers/[param]';
});

Expand All@@ -33,11 +33,11 @@ test('Should create a transaction for route handlers and correctly set span stat
});

test('Should record exceptions and transactions for faulty route handlers', async ({ request }) => {
const errorEventPromise = waitForError('nextjs-13-app-dir', errorEvent => {
const errorEventPromise = waitForError('nextjs-app-dir', errorEvent => {
return errorEvent?.exception?.values?.[0]?.value === 'route-handler-error';
});

const routehandlerTransactionPromise = waitForTransaction('nextjs-13-app-dir', async transactionEvent => {
const routehandlerTransactionPromise = waitForTransaction('nextjs-app-dir', async transactionEvent => {
return transactionEvent?.transaction === 'PUT /route-handlers/[param]/error';
});

Expand DownExpand Up@@ -65,7 +65,7 @@ test('Should record exceptions and transactions for faulty route handlers', asyn

test.describe('Edge runtime', () => {
test('should create a transaction for route handlers', async ({ request }) => {
const routehandlerTransactionPromise = waitForTransaction('nextjs-13-app-dir', async transactionEvent => {
const routehandlerTransactionPromise = waitForTransaction('nextjs-app-dir', async transactionEvent => {
return transactionEvent?.transaction === 'PATCH /route-handlers/[param]/edge';
});

Expand All@@ -79,11 +79,11 @@ test.describe('Edge runtime', () => {
});

test('should record exceptions and transactions for faulty route handlers', async ({ request }) => {
const errorEventPromise = waitForError('nextjs-13-app-dir', errorEvent => {
const errorEventPromise = waitForError('nextjs-app-dir', errorEvent => {
return errorEvent?.exception?.values?.[0]?.value === 'route-handler-edge-error';
});

const routehandlerTransactionPromise = waitForTransaction('nextjs-13-app-dir', async transactionEvent => {
const routehandlerTransactionPromise = waitForTransaction('nextjs-app-dir', async transactionEvent => {
return transactionEvent?.transaction === 'DELETE /route-handlers/[param]/edge';
});

Expand Down
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line numberDiff line numberDiff line change
Expand Up@@ -2,5 +2,5 @@ import { startEventProxyServer } from '@sentry-internal/test-utils';

startEventProxyServer({
port: 3031,
proxyServerName: 'nextjs-13-app-dir',
proxyServerName: 'nextjs-app-dir',
});
Original file line numberDiff line numberDiff line change
Expand Up@@ -2,9 +2,7 @@ import { expect, test } from '@playwright/test';
import { waitForTransaction } from '@sentry-internal/test-utils';

test('Should allow for async context isolation in the edge SDK', async ({ request }) => {
// test.skip(process.env.TEST_ENV === 'development', "Doesn't work in dev mode.");

const edgerouteTransactionPromise = waitForTransaction('nextjs-13-app-dir', async transactionEvent => {
const edgerouteTransactionPromise = waitForTransaction('nextjs-app-dir', async transactionEvent => {
return transactionEvent?.transaction === 'GET /api/async-context-edge-endpoint';
});

Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -4,7 +4,7 @@ import { waitForTransaction } from '@sentry-internal/test-utils';
test('Creates a pageload transaction for app router routes', async ({ page }) => {
const randomRoute = String(Math.random());

const clientPageloadTransactionPromise = waitForTransaction('nextjs-13-app-dir', transactionEvent => {
const clientPageloadTransactionPromise = waitForTransaction('nextjs-app-dir', transactionEvent => {
return (
transactionEvent?.transaction === `/server-component/parameter/${randomRoute}` &&
transactionEvent.contexts?.trace?.op === 'pageload'
Expand All@@ -19,7 +19,7 @@ test('Creates a pageload transaction for app router routes', async ({ page }) =>
test('Creates a navigation transaction for app router routes', async ({ page }) => {
const randomRoute = String(Math.random());

const clientPageloadTransactionPromise = waitForTransaction('nextjs-13-app-dir', transactionEvent => {
const clientPageloadTransactionPromise = waitForTransaction('nextjs-app-dir', transactionEvent => {
return (
transactionEvent?.transaction === `/server-component/parameter/${randomRoute}` &&
transactionEvent.contexts?.trace?.op === 'pageload'
Expand All@@ -30,14 +30,14 @@ test('Creates a navigation transaction for app router routes', async ({ page })
await clientPageloadTransactionPromise;
await page.getByText('Page (/server-component/parameter/[parameter])').isVisible();

const clientNavigationTransactionPromise = waitForTransaction('nextjs-13-app-dir', transactionEvent => {
const clientNavigationTransactionPromise = waitForTransaction('nextjs-app-dir', transactionEvent => {
return (
transactionEvent?.transaction === '/server-component/parameter/foo/bar/baz' &&
transactionEvent.contexts?.trace?.op === 'navigation'
);
});

const serverComponentTransactionPromise = waitForTransaction('nextjs-13-app-dir', async transactionEvent => {
const serverComponentTransactionPromise = waitForTransaction('nextjs-app-dir', async transactionEvent => {
return (
transactionEvent?.transaction === 'Page Server Component (/server-component/parameter/[...parameters])' &&
(await clientNavigationTransactionPromise).contexts?.trace?.trace_id ===
Expand Down
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
import { expect, test } from '@playwright/test';
import { waitForError } from '@sentry-internal/test-utils';

test('Sends a client-side exception to Sentry', async ({ page }) => {
await page.goto('/');

const errorEventPromise = waitForError('nextjs-app-dir', errorEvent => {
return errorEvent?.exception?.values?.[0]?.value === 'Click Error';
});

await page.getByText('Throw error').click();

const errorEvent = await errorEventPromise;

expect(errorEvent.exception?.values).toHaveLength(1);
expect(errorEvent.exception?.values?.[0]?.value).toBe('Click Error');

expect(errorEvent.request).toEqual({
headers: expect.any(Object),
url: 'http://localhost:3030/',
});

expect(errorEvent.transaction).toEqual('/');

expect(errorEvent.contexts?.trace).toEqual({
trace_id: expect.any(String),
span_id: expect.any(String),
});
});
Original file line numberDiff line numberDiff line change
Expand Up@@ -4,7 +4,7 @@ import { waitForTransaction } from '@sentry-internal/test-utils';
test('Will capture a connected trace for all server components and generation functions when visiting a page', async ({
page,
}) => {
const someConnectedEvent = waitForTransaction('nextjs-13-app-dir', async transactionEvent => {
const someConnectedEvent = waitForTransaction('nextjs-app-dir', async transactionEvent => {
return (
transactionEvent?.transaction === 'Layout Server Component (/(nested-layout)/nested-layout)' ||
transactionEvent?.transaction === 'Layout Server Component (/(nested-layout))' ||
Expand All@@ -13,28 +13,28 @@ test('Will capture a connected trace for all server components and generation fu
);
});

const layout1Transaction = waitForTransaction('nextjs-13-app-dir', async transactionEvent => {
const layout1Transaction = waitForTransaction('nextjs-app-dir', async transactionEvent => {
return (
transactionEvent?.transaction === 'Layout Server Component (/(nested-layout)/nested-layout)' &&
(await someConnectedEvent).contexts?.trace?.trace_id === transactionEvent.contexts?.trace?.trace_id
);
});

const layout2Transaction = waitForTransaction('nextjs-13-app-dir', async transactionEvent => {
const layout2Transaction = waitForTransaction('nextjs-app-dir', async transactionEvent => {
return (
transactionEvent?.transaction === 'Layout Server Component (/(nested-layout))' &&
(await someConnectedEvent).contexts?.trace?.trace_id === transactionEvent.contexts?.trace?.trace_id
);
});

const pageTransaction = waitForTransaction('nextjs-13-app-dir', async transactionEvent => {
const pageTransaction = waitForTransaction('nextjs-app-dir', async transactionEvent => {
return (
transactionEvent?.transaction === 'Page Server Component (/(nested-layout)/nested-layout)' &&
(await someConnectedEvent).contexts?.trace?.trace_id === transactionEvent.contexts?.trace?.trace_id
);
});

const generateMetadataTransaction = waitForTransaction('nextjs-13-app-dir', async transactionEvent => {
const generateMetadataTransaction = waitForTransaction('nextjs-app-dir', async transactionEvent => {
return (
transactionEvent?.transaction === 'Page.generateMetadata (/(nested-layout)/nested-layout)' &&
(await someConnectedEvent).contexts?.trace?.trace_id === transactionEvent.contexts?.trace?.trace_id
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -10,7 +10,7 @@ test.describe('dev mode error symbolification', () => {
test('should have symbolicated dev errors', async ({ page }) => {
await page.goto('/');

const errorEventPromise = waitForError('nextjs-13-app-dir', errorEvent => {
const errorEventPromise = waitForError('nextjs-app-dir', errorEvent => {
return errorEvent?.exception?.values?.[0]?.value === 'Click Error';
});

Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -2,7 +2,7 @@ import { expect, test } from '@playwright/test';
import { waitForError, waitForTransaction } from '@sentry-internal/test-utils';

test('Should create a transaction for edge routes', async ({ request }) => {
const edgerouteTransactionPromise = waitForTransaction('nextjs-13-app-dir', async transactionEvent => {
const edgerouteTransactionPromise = waitForTransaction('nextjs-app-dir', async transactionEvent => {
return (
transactionEvent?.transaction === 'GET /api/edge-endpoint' && transactionEvent?.contexts?.trace?.status === 'ok'
);
Expand All@@ -24,7 +24,7 @@ test('Should create a transaction for edge routes', async ({ request }) => {
});

test('Should create a transaction with error status for faulty edge routes', async ({ request }) => {
const edgerouteTransactionPromise = waitForTransaction('nextjs-13-app-dir', async transactionEvent => {
const edgerouteTransactionPromise = waitForTransaction('nextjs-app-dir', async transactionEvent => {
return (
transactionEvent?.transaction === 'GET /api/error-edge-endpoint' &&
transactionEvent?.contexts?.trace?.status === 'internal_error'
Expand All@@ -47,7 +47,7 @@ test('Should create a transaction with error status for faulty edge routes', asy
});

test('Should record exceptions for faulty edge routes', async ({ request }) => {
const errorEventPromise = waitForError('nextjs-13-app-dir', errorEvent => {
const errorEventPromise = waitForError('nextjs-app-dir', errorEvent => {
return errorEvent?.exception?.values?.[0]?.value === 'Edge Route Error';
});

Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -2,7 +2,7 @@ import { expect, test } from '@playwright/test';
import { waitForError, waitForTransaction } from '@sentry-internal/test-utils';

test('Should record exceptions for faulty edge server components', async ({ page }) => {
const errorEventPromise = waitForError('nextjs-13-app-dir', errorEvent => {
const errorEventPromise = waitForError('nextjs-app-dir', errorEvent => {
return errorEvent?.exception?.values?.[0]?.value === 'Edge Server Component Error';
});

Expand All@@ -20,7 +20,7 @@ test('Should record exceptions for faulty edge server components', async ({ page
});

test('Should record transaction for edge server components', async ({ page }) => {
const serverComponentTransactionPromise = waitForTransaction('nextjs-13-app-dir', async transactionEvent => {
const serverComponentTransactionPromise = waitForTransaction('nextjs-app-dir', async transactionEvent => {
return transactionEvent?.transaction === 'Page Server Component (/edge-server-components)';
});

Expand Down

This file was deleted.

Original file line numberDiff line numberDiff line change
Expand Up@@ -2,7 +2,7 @@ import { expect, test } from '@playwright/test';
import { waitForError, waitForTransaction } from '@sentry-internal/test-utils';

test('Should create a transaction for middleware', async ({ request }) => {
const middlewareTransactionPromise = waitForTransaction('nextjs-13-app-dir', async transactionEvent => {
const middlewareTransactionPromise = waitForTransaction('nextjs-app-dir', async transactionEvent => {
return transactionEvent?.transaction === 'middleware' && transactionEvent?.contexts?.trace?.status === 'ok';
});

Expand All@@ -21,7 +21,7 @@ test('Should create a transaction for middleware', async ({ request }) => {
});

test('Should create a transaction with error status for faulty middleware', async ({ request }) => {
const middlewareTransactionPromise = waitForTransaction('nextjs-13-app-dir', async transactionEvent => {
const middlewareTransactionPromise = waitForTransaction('nextjs-app-dir', async transactionEvent => {
return (
transactionEvent?.transaction === 'middleware' && transactionEvent?.contexts?.trace?.status === 'internal_error'
);
Expand All@@ -39,7 +39,7 @@ test('Should create a transaction with error status for faulty middleware', asyn
});

test('Records exceptions happening in middleware', async ({ request }) => {
const errorEventPromise = waitForError('nextjs-13-app-dir', errorEvent => {
const errorEventPromise = waitForError('nextjs-app-dir', errorEvent => {
return errorEvent?.exception?.values?.[0]?.value === 'Middleware Error';
});

Expand All@@ -56,7 +56,7 @@ test('Records exceptions happening in middleware', async ({ request }) => {
});

test('Should trace outgoing fetch requests inside middleware and create breadcrumbs for it', async ({ request }) => {
const middlewareTransactionPromise = waitForTransaction('nextjs-13-app-dir', async transactionEvent => {
const middlewareTransactionPromise = waitForTransaction('nextjs-app-dir', async transactionEvent => {
return (
transactionEvent?.transaction === 'middleware' &&
!!transactionEvent.spans?.find(span => span.op === 'http.client')
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -2,11 +2,11 @@ import { expect, test } from '@playwright/test';
import { waitForError, waitForTransaction } from '@sentry-internal/test-utils';

test('Will capture error for SSR rendering error with a connected trace (Class Component)', async ({ page }) => {
const errorEventPromise = waitForError('nextjs-13-app-dir', errorEvent => {
const errorEventPromise = waitForError('nextjs-app-dir', errorEvent => {
return errorEvent?.exception?.values?.[0]?.value === 'Pages SSR Error Class';
});

const serverComponentTransaction = waitForTransaction('nextjs-13-app-dir', async transactionEvent => {
const serverComponentTransaction = waitForTransaction('nextjs-app-dir', async transactionEvent => {
return (
transactionEvent?.transaction === '/pages-router/ssr-error-class' &&
(await errorEventPromise).contexts?.trace?.trace_id === transactionEvent.contexts?.trace?.trace_id
Expand All@@ -20,11 +20,11 @@ test('Will capture error for SSR rendering error with a connected trace (Class C
});

test('Will capture error for SSR rendering error with a connected trace (Functional Component)', async ({ page }) => {
const errorEventPromise = waitForError('nextjs-13-app-dir', errorEvent => {
const errorEventPromise = waitForError('nextjs-app-dir', errorEvent => {
return errorEvent?.exception?.values?.[0]?.value === 'Pages SSR Error FC';
});

const ssrTransactionPromise = waitForTransaction('nextjs-13-app-dir', async transactionEvent => {
const ssrTransactionPromise = waitForTransaction('nextjs-app-dir', async transactionEvent => {
return (
transactionEvent?.transaction === '/pages-router/ssr-error-fc' &&
(await errorEventPromise).contexts?.trace?.trace_id === transactionEvent.contexts?.trace?.trace_id
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -5,7 +5,7 @@ import { waitForTransaction } from '@sentry-internal/test-utils';
// Sometimes the request span was included in the handler span, more often it wasn't. I have no idea why. Maybe one day we will
// figure it out. Today is not that day.
test.skip('Should send a transaction with a http span', async ({ request }) => {
const transactionPromise = waitForTransaction('nextjs-13-app-dir', async transactionEvent => {
const transactionPromise = waitForTransaction('nextjs-app-dir', async transactionEvent => {
return transactionEvent?.transaction === 'GET /api/request-instrumentation';
});

Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -2,7 +2,7 @@ import { expect, test } from '@playwright/test';
import { waitForError, waitForTransaction } from '@sentry-internal/test-utils';

test('Should create a transaction for route handlers', async ({ request }) => {
const routehandlerTransactionPromise = waitForTransaction('nextjs-13-app-dir', async transactionEvent => {
const routehandlerTransactionPromise = waitForTransaction('nextjs-app-dir', async transactionEvent => {
return transactionEvent?.transaction === 'GET /route-handlers/[param]';
});

Expand All@@ -19,7 +19,7 @@ test('Should create a transaction for route handlers', async ({ request }) => {
test('Should create a transaction for route handlers and correctly set span status depending on http status', async ({
request,
}) => {
const routehandlerTransactionPromise = waitForTransaction('nextjs-13-app-dir', async transactionEvent => {
const routehandlerTransactionPromise = waitForTransaction('nextjs-app-dir', async transactionEvent => {
return transactionEvent?.transaction === 'POST /route-handlers/[param]';
});

Expand All@@ -33,11 +33,11 @@ test('Should create a transaction for route handlers and correctly set span stat
});

test('Should record exceptions and transactions for faulty route handlers', async ({ request }) => {
const errorEventPromise = waitForError('nextjs-13-app-dir', errorEvent => {
const errorEventPromise = waitForError('nextjs-app-dir', errorEvent => {
return errorEvent?.exception?.values?.[0]?.value === 'route-handler-error';
});

const routehandlerTransactionPromise = waitForTransaction('nextjs-13-app-dir', async transactionEvent => {
const routehandlerTransactionPromise = waitForTransaction('nextjs-app-dir', async transactionEvent => {
return transactionEvent?.transaction === 'PUT /route-handlers/[param]/error';
});

Expand DownExpand Up@@ -65,7 +65,7 @@ test('Should record exceptions and transactions for faulty route handlers', asyn

test.describe('Edge runtime', () => {
test('should create a transaction for route handlers', async ({ request }) => {
const routehandlerTransactionPromise = waitForTransaction('nextjs-13-app-dir', async transactionEvent => {
const routehandlerTransactionPromise = waitForTransaction('nextjs-app-dir', async transactionEvent => {
return transactionEvent?.transaction === 'PATCH /route-handlers/[param]/edge';
});

Expand All@@ -79,11 +79,11 @@ test.describe('Edge runtime', () => {
});

test('should record exceptions and transactions for faulty route handlers', async ({ request }) => {
const errorEventPromise = waitForError('nextjs-13-app-dir', errorEvent => {
const errorEventPromise = waitForError('nextjs-app-dir', errorEvent => {
return errorEvent?.exception?.values?.[0]?.value === 'route-handler-edge-error';
});

const routehandlerTransactionPromise = waitForTransaction('nextjs-13-app-dir', async transactionEvent => {
const routehandlerTransactionPromise = waitForTransaction('nextjs-app-dir', async transactionEvent => {
return transactionEvent?.transaction === 'DELETE /route-handlers/[param]/edge';
});

Expand Down
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line numberDiff line numberDiff line change
Expand Up@@ -2,5 +2,5 @@ import { startEventProxyServer } from '@sentry-internal/test-utils';

startEventProxyServer({
port: 3031,
proxyServerName: 'nextjs-13-app-dir',
proxyServerName: 'nextjs-app-dir',
});
Original file line numberDiff line numberDiff line change
Expand Up@@ -2,9 +2,7 @@ import { expect, test } from '@playwright/test';
import { waitForTransaction } from '@sentry-internal/test-utils';

test('Should allow for async context isolation in the edge SDK', async ({ request }) => {
// test.skip(process.env.TEST_ENV === 'development', "Doesn't work in dev mode.");

const edgerouteTransactionPromise = waitForTransaction('nextjs-13-app-dir', async transactionEvent => {
const edgerouteTransactionPromise = waitForTransaction('nextjs-app-dir', async transactionEvent => {
return transactionEvent?.transaction === 'GET /api/async-context-edge-endpoint';
});

Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -4,7 +4,7 @@ import { waitForTransaction } from '@sentry-internal/test-utils';
test('Creates a pageload transaction for app router routes', async ({ page }) => {
const randomRoute = String(Math.random());

const clientPageloadTransactionPromise = waitForTransaction('nextjs-13-app-dir', transactionEvent => {
const clientPageloadTransactionPromise = waitForTransaction('nextjs-app-dir', transactionEvent => {
return (
transactionEvent?.transaction === `/server-component/parameter/${randomRoute}` &&
transactionEvent.contexts?.trace?.op === 'pageload'
Expand All@@ -19,7 +19,7 @@ test('Creates a pageload transaction for app router routes', async ({ page }) =>
test('Creates a navigation transaction for app router routes', async ({ page }) => {
const randomRoute = String(Math.random());

const clientPageloadTransactionPromise = waitForTransaction('nextjs-13-app-dir', transactionEvent => {
const clientPageloadTransactionPromise = waitForTransaction('nextjs-app-dir', transactionEvent => {
return (
transactionEvent?.transaction === `/server-component/parameter/${randomRoute}` &&
transactionEvent.contexts?.trace?.op === 'pageload'
Expand All@@ -30,14 +30,14 @@ test('Creates a navigation transaction for app router routes', async ({ page })
await clientPageloadTransactionPromise;
await page.getByText('Page (/server-component/parameter/[parameter])').isVisible();

const clientNavigationTransactionPromise = waitForTransaction('nextjs-13-app-dir', transactionEvent => {
const clientNavigationTransactionPromise = waitForTransaction('nextjs-app-dir', transactionEvent => {
return (
transactionEvent?.transaction === '/server-component/parameter/foo/bar/baz' &&
transactionEvent.contexts?.trace?.op === 'navigation'
);
});

const serverComponentTransactionPromise = waitForTransaction('nextjs-13-app-dir', async transactionEvent => {
const serverComponentTransactionPromise = waitForTransaction('nextjs-app-dir', async transactionEvent => {
return (
transactionEvent?.transaction === 'Page Server Component (/server-component/parameter/[...parameters])' &&
(await clientNavigationTransactionPromise).contexts?.trace?.trace_id ===
Expand Down
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
import { expect, test } from '@playwright/test';
import { waitForError } from '@sentry-internal/test-utils';

test('Sends a client-side exception to Sentry', async ({ page }) => {
await page.goto('/');

const errorEventPromise = waitForError('nextjs-app-dir', errorEvent => {
return errorEvent?.exception?.values?.[0]?.value === 'Click Error';
});

await page.getByText('Throw error').click();

const errorEvent = await errorEventPromise;

expect(errorEvent.exception?.values).toHaveLength(1);
expect(errorEvent.exception?.values?.[0]?.value).toBe('Click Error');

expect(errorEvent.request).toEqual({
headers: expect.any(Object),
url: 'http://localhost:3030/',
});

expect(errorEvent.transaction).toEqual('/');

expect(errorEvent.contexts?.trace).toEqual({
trace_id: expect.any(String),
span_id: expect.any(String),
});
});
Original file line numberDiff line numberDiff line change
Expand Up@@ -4,7 +4,7 @@ import { waitForTransaction } from '@sentry-internal/test-utils';
test('Will capture a connected trace for all server components and generation functions when visiting a page', async ({
page,
}) => {
const someConnectedEvent = waitForTransaction('nextjs-13-app-dir', async transactionEvent => {
const someConnectedEvent = waitForTransaction('nextjs-app-dir', async transactionEvent => {
return (
transactionEvent?.transaction === 'Layout Server Component (/(nested-layout)/nested-layout)' ||
transactionEvent?.transaction === 'Layout Server Component (/(nested-layout))' ||
Expand All@@ -13,28 +13,28 @@ test('Will capture a connected trace for all server components and generation fu
);
});

const layout1Transaction = waitForTransaction('nextjs-13-app-dir', async transactionEvent => {
const layout1Transaction = waitForTransaction('nextjs-app-dir', async transactionEvent => {
return (
transactionEvent?.transaction === 'Layout Server Component (/(nested-layout)/nested-layout)' &&
(await someConnectedEvent).contexts?.trace?.trace_id === transactionEvent.contexts?.trace?.trace_id
);
});

const layout2Transaction = waitForTransaction('nextjs-13-app-dir', async transactionEvent => {
const layout2Transaction = waitForTransaction('nextjs-app-dir', async transactionEvent => {
return (
transactionEvent?.transaction === 'Layout Server Component (/(nested-layout))' &&
(await someConnectedEvent).contexts?.trace?.trace_id === transactionEvent.contexts?.trace?.trace_id
);
});

const pageTransaction = waitForTransaction('nextjs-13-app-dir', async transactionEvent => {
const pageTransaction = waitForTransaction('nextjs-app-dir', async transactionEvent => {
return (
transactionEvent?.transaction === 'Page Server Component (/(nested-layout)/nested-layout)' &&
(await someConnectedEvent).contexts?.trace?.trace_id === transactionEvent.contexts?.trace?.trace_id
);
});

const generateMetadataTransaction = waitForTransaction('nextjs-13-app-dir', async transactionEvent => {
const generateMetadataTransaction = waitForTransaction('nextjs-app-dir', async transactionEvent => {
return (
transactionEvent?.transaction === 'Page.generateMetadata (/(nested-layout)/nested-layout)' &&
(await someConnectedEvent).contexts?.trace?.trace_id === transactionEvent.contexts?.trace?.trace_id
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -10,7 +10,7 @@ test.describe('dev mode error symbolification', () => {
test('should have symbolicated dev errors', async ({ page }) => {
await page.goto('/');

const errorEventPromise = waitForError('nextjs-13-app-dir', errorEvent => {
const errorEventPromise = waitForError('nextjs-app-dir', errorEvent => {
return errorEvent?.exception?.values?.[0]?.value === 'Click Error';
});

Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -2,7 +2,7 @@ import { expect, test } from '@playwright/test';
import { waitForError, waitForTransaction } from '@sentry-internal/test-utils';

test('Should create a transaction for edge routes', async ({ request }) => {
const edgerouteTransactionPromise = waitForTransaction('nextjs-13-app-dir', async transactionEvent => {
const edgerouteTransactionPromise = waitForTransaction('nextjs-app-dir', async transactionEvent => {
return (
transactionEvent?.transaction === 'GET /api/edge-endpoint' && transactionEvent?.contexts?.trace?.status === 'ok'
);
Expand All@@ -24,7 +24,7 @@ test('Should create a transaction for edge routes', async ({ request }) => {
});

test('Should create a transaction with error status for faulty edge routes', async ({ request }) => {
const edgerouteTransactionPromise = waitForTransaction('nextjs-13-app-dir', async transactionEvent => {
const edgerouteTransactionPromise = waitForTransaction('nextjs-app-dir', async transactionEvent => {
return (
transactionEvent?.transaction === 'GET /api/error-edge-endpoint' &&
transactionEvent?.contexts?.trace?.status === 'internal_error'
Expand All@@ -47,7 +47,7 @@ test('Should create a transaction with error status for faulty edge routes', asy
});

test('Should record exceptions for faulty edge routes', async ({ request }) => {
const errorEventPromise = waitForError('nextjs-13-app-dir', errorEvent => {
const errorEventPromise = waitForError('nextjs-app-dir', errorEvent => {
return errorEvent?.exception?.values?.[0]?.value === 'Edge Route Error';
});

Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -2,7 +2,7 @@ import { expect, test } from '@playwright/test';
import { waitForError, waitForTransaction } from '@sentry-internal/test-utils';

test('Should record exceptions for faulty edge server components', async ({ page }) => {
const errorEventPromise = waitForError('nextjs-13-app-dir', errorEvent => {
const errorEventPromise = waitForError('nextjs-app-dir', errorEvent => {
return errorEvent?.exception?.values?.[0]?.value === 'Edge Server Component Error';
});

Expand All@@ -20,7 +20,7 @@ test('Should record exceptions for faulty edge server components', async ({ page
});

test('Should record transaction for edge server components', async ({ page }) => {
const serverComponentTransactionPromise = waitForTransaction('nextjs-13-app-dir', async transactionEvent => {
const serverComponentTransactionPromise = waitForTransaction('nextjs-app-dir', async transactionEvent => {
return transactionEvent?.transaction === 'Page Server Component (/edge-server-components)';
});

Expand Down

This file was deleted.

Original file line numberDiff line numberDiff line change
Expand Up@@ -2,7 +2,7 @@ import { expect, test } from '@playwright/test';
import { waitForError, waitForTransaction } from '@sentry-internal/test-utils';

test('Should create a transaction for middleware', async ({ request }) => {
const middlewareTransactionPromise = waitForTransaction('nextjs-13-app-dir', async transactionEvent => {
const middlewareTransactionPromise = waitForTransaction('nextjs-app-dir', async transactionEvent => {
return transactionEvent?.transaction === 'middleware' && transactionEvent?.contexts?.trace?.status === 'ok';
});

Expand All@@ -21,7 +21,7 @@ test('Should create a transaction for middleware', async ({ request }) => {
});

test('Should create a transaction with error status for faulty middleware', async ({ request }) => {
const middlewareTransactionPromise = waitForTransaction('nextjs-13-app-dir', async transactionEvent => {
const middlewareTransactionPromise = waitForTransaction('nextjs-app-dir', async transactionEvent => {
return (
transactionEvent?.transaction === 'middleware' && transactionEvent?.contexts?.trace?.status === 'internal_error'
);
Expand All@@ -39,7 +39,7 @@ test('Should create a transaction with error status for faulty middleware', asyn
});

test('Records exceptions happening in middleware', async ({ request }) => {
const errorEventPromise = waitForError('nextjs-13-app-dir', errorEvent => {
const errorEventPromise = waitForError('nextjs-app-dir', errorEvent => {
return errorEvent?.exception?.values?.[0]?.value === 'Middleware Error';
});

Expand All@@ -56,7 +56,7 @@ test('Records exceptions happening in middleware', async ({ request }) => {
});

test('Should trace outgoing fetch requests inside middleware and create breadcrumbs for it', async ({ request }) => {
const middlewareTransactionPromise = waitForTransaction('nextjs-13-app-dir', async transactionEvent => {
const middlewareTransactionPromise = waitForTransaction('nextjs-app-dir', async transactionEvent => {
return (
transactionEvent?.transaction === 'middleware' &&
!!transactionEvent.spans?.find(span => span.op === 'http.client')
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -2,11 +2,11 @@ import { expect, test } from '@playwright/test';
import { waitForError, waitForTransaction } from '@sentry-internal/test-utils';

test('Will capture error for SSR rendering error with a connected trace (Class Component)', async ({ page }) => {
const errorEventPromise = waitForError('nextjs-13-app-dir', errorEvent => {
const errorEventPromise = waitForError('nextjs-app-dir', errorEvent => {
return errorEvent?.exception?.values?.[0]?.value === 'Pages SSR Error Class';
});

const serverComponentTransaction = waitForTransaction('nextjs-13-app-dir', async transactionEvent => {
const serverComponentTransaction = waitForTransaction('nextjs-app-dir', async transactionEvent => {
return (
transactionEvent?.transaction === '/pages-router/ssr-error-class' &&
(await errorEventPromise).contexts?.trace?.trace_id === transactionEvent.contexts?.trace?.trace_id
Expand All@@ -20,11 +20,11 @@ test('Will capture error for SSR rendering error with a connected trace (Class C
});

test('Will capture error for SSR rendering error with a connected trace (Functional Component)', async ({ page }) => {
const errorEventPromise = waitForError('nextjs-13-app-dir', errorEvent => {
const errorEventPromise = waitForError('nextjs-app-dir', errorEvent => {
return errorEvent?.exception?.values?.[0]?.value === 'Pages SSR Error FC';
});

const ssrTransactionPromise = waitForTransaction('nextjs-13-app-dir', async transactionEvent => {
const ssrTransactionPromise = waitForTransaction('nextjs-app-dir', async transactionEvent => {
return (
transactionEvent?.transaction === '/pages-router/ssr-error-fc' &&
(await errorEventPromise).contexts?.trace?.trace_id === transactionEvent.contexts?.trace?.trace_id
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -5,7 +5,7 @@ import { waitForTransaction } from '@sentry-internal/test-utils';
// Sometimes the request span was included in the handler span, more often it wasn't. I have no idea why. Maybe one day we will
// figure it out. Today is not that day.
test.skip('Should send a transaction with a http span', async ({ request }) => {
const transactionPromise = waitForTransaction('nextjs-13-app-dir', async transactionEvent => {
const transactionPromise = waitForTransaction('nextjs-app-dir', async transactionEvent => {
return transactionEvent?.transaction === 'GET /api/request-instrumentation';
});

Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -2,7 +2,7 @@ import { expect, test } from '@playwright/test';
import { waitForError, waitForTransaction } from '@sentry-internal/test-utils';

test('Should create a transaction for route handlers', async ({ request }) => {
const routehandlerTransactionPromise = waitForTransaction('nextjs-13-app-dir', async transactionEvent => {
const routehandlerTransactionPromise = waitForTransaction('nextjs-app-dir', async transactionEvent => {
return transactionEvent?.transaction === 'GET /route-handlers/[param]';
});

Expand All@@ -19,7 +19,7 @@ test('Should create a transaction for route handlers', async ({ request }) => {
test('Should create a transaction for route handlers and correctly set span status depending on http status', async ({
request,
}) => {
const routehandlerTransactionPromise = waitForTransaction('nextjs-13-app-dir', async transactionEvent => {
const routehandlerTransactionPromise = waitForTransaction('nextjs-app-dir', async transactionEvent => {
return transactionEvent?.transaction === 'POST /route-handlers/[param]';
});

Expand All@@ -33,11 +33,11 @@ test('Should create a transaction for route handlers and correctly set span stat
});

test('Should record exceptions and transactions for faulty route handlers', async ({ request }) => {
const errorEventPromise = waitForError('nextjs-13-app-dir', errorEvent => {
const errorEventPromise = waitForError('nextjs-app-dir', errorEvent => {
return errorEvent?.exception?.values?.[0]?.value === 'route-handler-error';
});

const routehandlerTransactionPromise = waitForTransaction('nextjs-13-app-dir', async transactionEvent => {
const routehandlerTransactionPromise = waitForTransaction('nextjs-app-dir', async transactionEvent => {
return transactionEvent?.transaction === 'PUT /route-handlers/[param]/error';
});

Expand DownExpand Up@@ -65,7 +65,7 @@ test('Should record exceptions and transactions for faulty route handlers', asyn

test.describe('Edge runtime', () => {
test('should create a transaction for route handlers', async ({ request }) => {
const routehandlerTransactionPromise = waitForTransaction('nextjs-13-app-dir', async transactionEvent => {
const routehandlerTransactionPromise = waitForTransaction('nextjs-app-dir', async transactionEvent => {
return transactionEvent?.transaction === 'PATCH /route-handlers/[param]/edge';
});

Expand All@@ -79,11 +79,11 @@ test.describe('Edge runtime', () => {
});

test('should record exceptions and transactions for faulty route handlers', async ({ request }) => {
const errorEventPromise = waitForError('nextjs-13-app-dir', errorEvent => {
const errorEventPromise = waitForError('nextjs-app-dir', errorEvent => {
return errorEvent?.exception?.values?.[0]?.value === 'route-handler-edge-error';
});

const routehandlerTransactionPromise = waitForTransaction('nextjs-13-app-dir', async transactionEvent => {
const routehandlerTransactionPromise = waitForTransaction('nextjs-app-dir', async transactionEvent => {
return transactionEvent?.transaction === 'DELETE /route-handlers/[param]/edge';
});

Expand Down
Loading