From a9153f2baaa452d52e747ebcbe07fac2d2cd95c2 Mon Sep 17 00:00:00 2001 From: iker-barriocanal <32816711+iker-barriocanal@users.noreply.github.com> Date: Fri, 28 May 2021 15:50:35 +0200 Subject: [PATCH 1/3] test(nextjs): Add test for the metadata builder --- packages/nextjs/src/utils/metadataBuilder.ts | 4 +- .../nextjs/test/utils/metadataBuilder.test.ts | 56 +++++++++++++++++++ 2 files changed, 58 insertions(+), 2 deletions(-) create mode 100644 packages/nextjs/test/utils/metadataBuilder.test.ts diff --git a/packages/nextjs/src/utils/metadataBuilder.ts b/packages/nextjs/src/utils/metadataBuilder.ts index 6c80e680783b..fbe43194e094 100644 --- a/packages/nextjs/src/utils/metadataBuilder.ts +++ b/packages/nextjs/src/utils/metadataBuilder.ts @@ -3,8 +3,8 @@ import { Package, SdkInfo } from '@sentry/types'; import { NextjsOptions } from './nextjsOptions'; -const SDK_NAME = 'sentry.javascript.nextjs'; -const PACKAGE_NAME_PREFIX = 'npm:@sentry/'; +export const SDK_NAME = 'sentry.javascript.nextjs'; +export const PACKAGE_NAME_PREFIX = 'npm:@sentry/'; /** * A builder for the SDK metadata in the options for the SDK initialization. diff --git a/packages/nextjs/test/utils/metadataBuilder.test.ts b/packages/nextjs/test/utils/metadataBuilder.test.ts new file mode 100644 index 000000000000..cd4f101582ad --- /dev/null +++ b/packages/nextjs/test/utils/metadataBuilder.test.ts @@ -0,0 +1,56 @@ +import { SDK_VERSION } from '@sentry/core'; +import { Package, SdkInfo } from '@sentry/types'; + +import { MetadataBuilder, PACKAGE_NAME_PREFIX, SDK_NAME } from '../../src/utils/metadataBuilder'; +import { NextjsOptions } from '../../src/utils/nextjsOptions'; + +describe('build metadata', () => { + test('without packages', () => { + const nextjsOptions: NextjsOptions = {}; + const metadataPackages: string[] = []; + new MetadataBuilder(nextjsOptions, metadataPackages).addSdkMetadata(); + + const optionsMetadata = nextjsOptions._metadata; + expect(optionsMetadata).toBeDefined(); + const sdkInfo = optionsMetadata?.sdk; + testSdkInfo(sdkInfo); + testSdkInfoPackages(sdkInfo?.packages, metadataPackages); + }); + + test('with packages', () => { + const nextjsOptions: NextjsOptions = {}; + const metadataPackages: string[] = ['packageA', 'packageB']; + new MetadataBuilder(nextjsOptions, metadataPackages).addSdkMetadata(); + + const optionsMetadata = nextjsOptions._metadata; + expect(optionsMetadata).toBeDefined(); + const sdkInfo = optionsMetadata?.sdk; + testSdkInfo(sdkInfo); + testSdkInfoPackages(sdkInfo?.packages, metadataPackages); + }); +}); + +function testSdkInfo(sdkInfo: SdkInfo | undefined): void { + expect(sdkInfo).toBeDefined(); + expect(sdkInfo?.name).toBeDefined(); + expect(sdkInfo?.name).toEqual(SDK_NAME); + expect(sdkInfo?.version).toBeDefined(); + expect(sdkInfo?.packages).toBeDefined(); +} + +function testSdkInfoPackages(actualPkgs: Package[] | undefined, expectedPkgNames: string[]): void { + expect(actualPkgs).toBeDefined(); + expect(actualPkgs).toHaveLength(expectedPkgNames.length); + + const pkgNames = actualPkgs?.map((currentPkg: Package) => { + expect(currentPkg.version).toBeDefined(); + expect(currentPkg.version).toEqual(SDK_VERSION); + + expect(currentPkg.name).toBeDefined(); + const pkgPrefix = currentPkg.name.substring(0, PACKAGE_NAME_PREFIX.length); + expect(pkgPrefix).toEqual(PACKAGE_NAME_PREFIX); + const packageName = currentPkg.name.substring(PACKAGE_NAME_PREFIX.length); + return packageName; + }); + expect(pkgNames).toEqual(expectedPkgNames); +} From 5dadac2f69890f0c5223481d55829a208088c740 Mon Sep 17 00:00:00 2001 From: iker-barriocanal <32816711+iker-barriocanal@users.noreply.github.com> Date: Fri, 28 May 2021 16:18:42 +0200 Subject: [PATCH 2/3] Remove code duplication --- .../nextjs/test/utils/metadataBuilder.test.ts | 25 ++++++++----------- 1 file changed, 11 insertions(+), 14 deletions(-) diff --git a/packages/nextjs/test/utils/metadataBuilder.test.ts b/packages/nextjs/test/utils/metadataBuilder.test.ts index cd4f101582ad..8b8ec72c61f7 100644 --- a/packages/nextjs/test/utils/metadataBuilder.test.ts +++ b/packages/nextjs/test/utils/metadataBuilder.test.ts @@ -8,28 +8,25 @@ describe('build metadata', () => { test('without packages', () => { const nextjsOptions: NextjsOptions = {}; const metadataPackages: string[] = []; - new MetadataBuilder(nextjsOptions, metadataPackages).addSdkMetadata(); - - const optionsMetadata = nextjsOptions._metadata; - expect(optionsMetadata).toBeDefined(); - const sdkInfo = optionsMetadata?.sdk; - testSdkInfo(sdkInfo); - testSdkInfoPackages(sdkInfo?.packages, metadataPackages); + testMetadataBuilder(nextjsOptions, metadataPackages); }); test('with packages', () => { const nextjsOptions: NextjsOptions = {}; const metadataPackages: string[] = ['packageA', 'packageB']; - new MetadataBuilder(nextjsOptions, metadataPackages).addSdkMetadata(); - - const optionsMetadata = nextjsOptions._metadata; - expect(optionsMetadata).toBeDefined(); - const sdkInfo = optionsMetadata?.sdk; - testSdkInfo(sdkInfo); - testSdkInfoPackages(sdkInfo?.packages, metadataPackages); + testMetadataBuilder(nextjsOptions, metadataPackages); }); }); +function testMetadataBuilder(nextjsOptions: NextjsOptions, packages: string[]): void { + new MetadataBuilder(nextjsOptions, packages).addSdkMetadata(); + const optionsMetadata = nextjsOptions._metadata; + expect(optionsMetadata).toBeDefined(); + const sdkInfo = optionsMetadata?.sdk; + testSdkInfo(sdkInfo); + testSdkInfoPackages(sdkInfo?.packages, packages); +} + function testSdkInfo(sdkInfo: SdkInfo | undefined): void { expect(sdkInfo).toBeDefined(); expect(sdkInfo?.name).toBeDefined(); From 0a0c3755805e456ff7ced5b9234dd4cb241327ba Mon Sep 17 00:00:00 2001 From: iker-barriocanal <32816711+iker-barriocanal@users.noreply.github.com> Date: Mon, 31 May 2021 10:01:21 +0200 Subject: [PATCH 3/3] Expect types in tests instead of just being defined --- packages/nextjs/test/utils/metadataBuilder.test.ts | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/packages/nextjs/test/utils/metadataBuilder.test.ts b/packages/nextjs/test/utils/metadataBuilder.test.ts index 8b8ec72c61f7..888a35f765d4 100644 --- a/packages/nextjs/test/utils/metadataBuilder.test.ts +++ b/packages/nextjs/test/utils/metadataBuilder.test.ts @@ -31,8 +31,8 @@ function testSdkInfo(sdkInfo: SdkInfo | undefined): void { expect(sdkInfo).toBeDefined(); expect(sdkInfo?.name).toBeDefined(); expect(sdkInfo?.name).toEqual(SDK_NAME); - expect(sdkInfo?.version).toBeDefined(); - expect(sdkInfo?.packages).toBeDefined(); + expect(sdkInfo?.version).toEqual(expect.any(String)); + expect(sdkInfo?.packages).toEqual(expect.any(Array)); } function testSdkInfoPackages(actualPkgs: Package[] | undefined, expectedPkgNames: string[]): void { @@ -46,8 +46,7 @@ function testSdkInfoPackages(actualPkgs: Package[] | undefined, expectedPkgNames expect(currentPkg.name).toBeDefined(); const pkgPrefix = currentPkg.name.substring(0, PACKAGE_NAME_PREFIX.length); expect(pkgPrefix).toEqual(PACKAGE_NAME_PREFIX); - const packageName = currentPkg.name.substring(PACKAGE_NAME_PREFIX.length); - return packageName; + return currentPkg.name.substring(PACKAGE_NAME_PREFIX.length); }); expect(pkgNames).toEqual(expectedPkgNames); }