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..888a35f765d4 --- /dev/null +++ b/packages/nextjs/test/utils/metadataBuilder.test.ts @@ -0,0 +1,52 @@ +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[] = []; + testMetadataBuilder(nextjsOptions, metadataPackages); + }); + + test('with packages', () => { + const nextjsOptions: NextjsOptions = {}; + const metadataPackages: string[] = ['packageA', 'packageB']; + 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(); + expect(sdkInfo?.name).toEqual(SDK_NAME); + expect(sdkInfo?.version).toEqual(expect.any(String)); + expect(sdkInfo?.packages).toEqual(expect.any(Array)); +} + +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); + return currentPkg.name.substring(PACKAGE_NAME_PREFIX.length); + }); + expect(pkgNames).toEqual(expectedPkgNames); +}