Skip to content

Commit ef508e6

Browse files
test(nextjs): Add test for the metadata builder (#3614)
The metadata builder has no tests atm; this PR adds them.
1 parent 76535b0 commit ef508e6

File tree

2 files changed

+54
-2
lines changed

2 files changed

+54
-2
lines changed

packages/nextjs/src/utils/metadataBuilder.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@ import { Package, SdkInfo } from '@sentry/types';
33

44
import { NextjsOptions } from './nextjsOptions';
55

6-
const SDK_NAME = 'sentry.javascript.nextjs';
7-
const PACKAGE_NAME_PREFIX = 'npm:@sentry/';
6+
export const SDK_NAME = 'sentry.javascript.nextjs';
7+
export const PACKAGE_NAME_PREFIX = 'npm:@sentry/';
88

99
/**
1010
* A builder for the SDK metadata in the options for the SDK initialization.
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
import { SDK_VERSION } from '@sentry/core';
2+
import { Package, SdkInfo } from '@sentry/types';
3+
4+
import { MetadataBuilder, PACKAGE_NAME_PREFIX, SDK_NAME } from '../../src/utils/metadataBuilder';
5+
import { NextjsOptions } from '../../src/utils/nextjsOptions';
6+
7+
describe('build metadata', () => {
8+
test('without packages', () => {
9+
const nextjsOptions: NextjsOptions = {};
10+
const metadataPackages: string[] = [];
11+
testMetadataBuilder(nextjsOptions, metadataPackages);
12+
});
13+
14+
test('with packages', () => {
15+
const nextjsOptions: NextjsOptions = {};
16+
const metadataPackages: string[] = ['packageA', 'packageB'];
17+
testMetadataBuilder(nextjsOptions, metadataPackages);
18+
});
19+
});
20+
21+
function testMetadataBuilder(nextjsOptions: NextjsOptions, packages: string[]): void {
22+
new MetadataBuilder(nextjsOptions, packages).addSdkMetadata();
23+
const optionsMetadata = nextjsOptions._metadata;
24+
expect(optionsMetadata).toBeDefined();
25+
const sdkInfo = optionsMetadata?.sdk;
26+
testSdkInfo(sdkInfo);
27+
testSdkInfoPackages(sdkInfo?.packages, packages);
28+
}
29+
30+
function testSdkInfo(sdkInfo: SdkInfo | undefined): void {
31+
expect(sdkInfo).toBeDefined();
32+
expect(sdkInfo?.name).toBeDefined();
33+
expect(sdkInfo?.name).toEqual(SDK_NAME);
34+
expect(sdkInfo?.version).toEqual(expect.any(String));
35+
expect(sdkInfo?.packages).toEqual(expect.any(Array));
36+
}
37+
38+
function testSdkInfoPackages(actualPkgs: Package[] | undefined, expectedPkgNames: string[]): void {
39+
expect(actualPkgs).toBeDefined();
40+
expect(actualPkgs).toHaveLength(expectedPkgNames.length);
41+
42+
const pkgNames = actualPkgs?.map((currentPkg: Package) => {
43+
expect(currentPkg.version).toBeDefined();
44+
expect(currentPkg.version).toEqual(SDK_VERSION);
45+
46+
expect(currentPkg.name).toBeDefined();
47+
const pkgPrefix = currentPkg.name.substring(0, PACKAGE_NAME_PREFIX.length);
48+
expect(pkgPrefix).toEqual(PACKAGE_NAME_PREFIX);
49+
return currentPkg.name.substring(PACKAGE_NAME_PREFIX.length);
50+
});
51+
expect(pkgNames).toEqual(expectedPkgNames);
52+
}

0 commit comments

Comments
 (0)