From 23ca869438bb92d742d48fbfa99192694876e90c Mon Sep 17 00:00:00 2001 From: Onur Temizkan Date: Fri, 25 Mar 2022 14:24:10 +0000 Subject: [PATCH] test(node): Add `captureMessage` integration tests. --- .../simple_message}/scenario.ts | 0 .../simple_message}/test.ts | 4 +- .../captureMessage/with_level/scenario.ts | 14 +++++++ .../captureMessage/with_level/test.ts | 41 +++++++++++++++++++ .../node-integration-tests/utils/index.ts | 28 ++++++++----- 5 files changed, 75 insertions(+), 12 deletions(-) rename packages/node-integration-tests/suites/public-api/{capture-message => captureMessage/simple_message}/scenario.ts (100%) rename packages/node-integration-tests/suites/public-api/{capture-message => captureMessage/simple_message}/test.ts (75%) create mode 100644 packages/node-integration-tests/suites/public-api/captureMessage/with_level/scenario.ts create mode 100644 packages/node-integration-tests/suites/public-api/captureMessage/with_level/test.ts diff --git a/packages/node-integration-tests/suites/public-api/capture-message/scenario.ts b/packages/node-integration-tests/suites/public-api/captureMessage/simple_message/scenario.ts similarity index 100% rename from packages/node-integration-tests/suites/public-api/capture-message/scenario.ts rename to packages/node-integration-tests/suites/public-api/captureMessage/simple_message/scenario.ts diff --git a/packages/node-integration-tests/suites/public-api/capture-message/test.ts b/packages/node-integration-tests/suites/public-api/captureMessage/simple_message/test.ts similarity index 75% rename from packages/node-integration-tests/suites/public-api/capture-message/test.ts rename to packages/node-integration-tests/suites/public-api/captureMessage/simple_message/test.ts index 0b15bed6204a..69fa8c27764b 100644 --- a/packages/node-integration-tests/suites/public-api/capture-message/test.ts +++ b/packages/node-integration-tests/suites/public-api/captureMessage/simple_message/test.ts @@ -1,6 +1,6 @@ -import { assertSentryEvent, getEventRequest, runServer } from '../../../utils'; +import { assertSentryEvent, getEventRequest, runServer } from '../../../../utils'; -test('should send captureMessage', async () => { +test('should capture a simple message string', async () => { const url = await runServer(__dirname); const requestBody = await getEventRequest(url); diff --git a/packages/node-integration-tests/suites/public-api/captureMessage/with_level/scenario.ts b/packages/node-integration-tests/suites/public-api/captureMessage/with_level/scenario.ts new file mode 100644 index 000000000000..61f8e2532ee6 --- /dev/null +++ b/packages/node-integration-tests/suites/public-api/captureMessage/with_level/scenario.ts @@ -0,0 +1,14 @@ +import * as Sentry from '@sentry/node'; + +Sentry.init({ + dsn: 'https://public@dsn.ingest.sentry.io/1337', + release: '1.0', +}); + +Sentry.captureMessage('debug_message', Sentry.Severity.Debug); +Sentry.captureMessage('info_message', Sentry.Severity.Info); +Sentry.captureMessage('warning_message', Sentry.Severity.Warning); +Sentry.captureMessage('error_message', Sentry.Severity.Error); +Sentry.captureMessage('fatal_message', Sentry.Severity.Fatal); +Sentry.captureMessage('critical_message', Sentry.Severity.Critical); +Sentry.captureMessage('log_message', Sentry.Severity.Log); diff --git a/packages/node-integration-tests/suites/public-api/captureMessage/with_level/test.ts b/packages/node-integration-tests/suites/public-api/captureMessage/with_level/test.ts new file mode 100644 index 000000000000..e43c13db3711 --- /dev/null +++ b/packages/node-integration-tests/suites/public-api/captureMessage/with_level/test.ts @@ -0,0 +1,41 @@ +import { assertSentryEvent, getMultipleEventRequests, runServer } from '../../../../utils'; + +test('should capture with different severity levels', async () => { + const url = await runServer(__dirname); + const events = await getMultipleEventRequests(url, 7); + + assertSentryEvent(events[0], { + message: 'debug_message', + level: 'debug', + }); + + assertSentryEvent(events[1], { + message: 'info_message', + level: 'info', + }); + + assertSentryEvent(events[2], { + message: 'warning_message', + level: 'warning', + }); + + assertSentryEvent(events[3], { + message: 'error_message', + level: 'error', + }); + + assertSentryEvent(events[4], { + message: 'fatal_message', + level: 'fatal', + }); + + assertSentryEvent(events[5], { + message: 'critical_message', + level: 'critical', + }); + + assertSentryEvent(events[6], { + message: 'log_message', + level: 'log', + }); +}); diff --git a/packages/node-integration-tests/utils/index.ts b/packages/node-integration-tests/utils/index.ts index 73c5cdfc9191..8e31c2ee3514 100644 --- a/packages/node-integration-tests/utils/index.ts +++ b/packages/node-integration-tests/utils/index.ts @@ -5,7 +5,7 @@ import nock from 'nock'; import * as path from 'path'; import { getPortPromise } from 'portfinder'; -const assertSentryEvent = (actual: Record, expected: Record): void => { +export const assertSentryEvent = (actual: Record, expected: Record): void => { expect(actual).toMatchObject({ event_id: expect.any(String), timestamp: expect.any(Number), @@ -13,7 +13,7 @@ const assertSentryEvent = (actual: Record, expected: Record, expected: Record): void => { +export const assertSentryTransaction = (actual: Record, expected: Record): void => { expect(actual).toMatchObject({ event_id: expect.any(String), timestamp: expect.any(Number), @@ -24,24 +24,34 @@ const assertSentryTransaction = (actual: Record, expected: Reco }); }; -const parseEnvelope = (body: string): Array> => { +export const parseEnvelope = (body: string): Array> => { return body.split('\n').map(e => JSON.parse(e)); }; -const getEventRequest = async (url: string): Promise> => { +export const getMultipleEventRequests = async (url: string, count: number): Promise>> => { + const events: Record[] = []; + return new Promise(resolve => { nock('https://dsn.ingest.sentry.io') .post('/api/1337/store/', body => { - resolve(body); + events.push(body); + + if (events.length === count) { + resolve(events); + } return true; }) + .times(7) .reply(200); - http.get(url); }); }; -const getEnvelopeRequest = async (url: string): Promise>> => { +export const getEventRequest = async (url: string): Promise> => { + return (await getMultipleEventRequests(url, 1))[0]; +}; + +export const getEnvelopeRequest = async (url: string): Promise>> => { return new Promise(resolve => { nock('https://dsn.ingest.sentry.io') .post('/api/1337/envelope/', body => { @@ -55,7 +65,7 @@ const getEnvelopeRequest = async (url: string): Promise { +export async function runServer(testDir: string, serverPath?: string, scenarioPath?: string): Promise { const port = await getPortPromise(); const url = `http://localhost:${port}/test`; const defaultServerPath = path.resolve(process.cwd(), 'utils', 'defaults', 'server'); @@ -77,5 +87,3 @@ async function runServer(testDir: string, serverPath?: string, scenarioPath?: st return url; } - -export { assertSentryEvent, assertSentryTransaction, parseEnvelope, getEventRequest, getEnvelopeRequest, runServer };