Skip to content

Commit e72362e

Browse files
committed
Add tests for JS package.
1 parent 021dd12 commit e72362e

File tree

2 files changed

+69
-0
lines changed

2 files changed

+69
-0
lines changed

api-js/src/SDKMeta.ts

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import sdkNames from './data/names.json'
44
import sdkTypes from './data/types.json'
55
import sdkPopularity from './data/popularity.json'
66
import sdkReleases from './data/releases.json'
7+
import sdkUserAgents from './data/user_agents.json'
78

89
export enum Type {
910
// ClientSide is an SDK that runs in a client scenario.
@@ -68,3 +69,30 @@ export namespace ReleaseHelpers {
6869
export const Earliest = (releases: Release[]) => releases[releases.length - 1];
6970
export const Latest = (releases: Release[]) => releases[0];
7071
}
72+
73+
export interface UserAgent {
74+
userAgents?: string[];
75+
wrapperNames?: string[];
76+
}
77+
78+
export const UserAgents: Record<string, UserAgent> = sdkUserAgents;
79+
80+
export namespace UserAgentHelpers {
81+
export const getSDKNameByUserAgentOrWrapper = (identifier: string): string | undefined => {
82+
// First check wrapper names
83+
for (const [sdkId, info] of Object.entries(UserAgents)) {
84+
if (info.wrapperNames?.includes(identifier)) {
85+
return Names[sdkId];
86+
}
87+
}
88+
89+
// Then check user agents
90+
for (const [sdkId, info] of Object.entries(UserAgents)) {
91+
if (info.userAgents?.includes(identifier)) {
92+
return Names[sdkId];
93+
}
94+
}
95+
96+
return undefined;
97+
}
98+
}

api-js/tests/e2e.test.ts

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import { Names, Repos, Types, Type, Popularity, Languages, Releases, ReleaseHelpers } from '../src/SDKMeta';
2+
import { UserAgents, UserAgentHelpers } from '../src/SDKMeta';
23

34
test('names', () => {
45
expect(Names['node-server']).toBe('Node.js Server SDK');
@@ -67,3 +68,43 @@ test('eol calculations', () => {
6768
expect(ReleaseHelpers.IsApproachingEOL(earliest, new Date(earliestEOL.getTime() - thirty_minutes), hour)).toBe(true);
6869
expect(ReleaseHelpers.IsApproachingEOL(earliest, new Date(earliestEOL.getTime() - minute), hour)).toBe(true);
6970
})
71+
72+
test('user agents', () => {
73+
// Test basic user agent data structure
74+
expect(UserAgents['node-server']).toBeDefined();
75+
expect(UserAgents['node-server'].userAgents).toContain('NodeJSClient');
76+
77+
// Test SDK with both user agents and wrapper names
78+
expect(UserAgents['react-native']).toBeDefined();
79+
expect(UserAgents['react-native'].userAgents).toContain('ReactNativeClient');
80+
expect(UserAgents['react-native'].wrapperNames).toContain('react-native-client');
81+
});
82+
83+
describe('UserAgentHelpers.getSDKNameByUserAgentOrWrapper', () => {
84+
test('finds SDK by wrapper name', () => {
85+
const name = UserAgentHelpers.getSDKNameByUserAgentOrWrapper('react-native-client');
86+
expect(name).toBe('React Native SDK');
87+
});
88+
89+
test('finds SDK by user agent', () => {
90+
const name = UserAgentHelpers.getSDKNameByUserAgentOrWrapper('NodeJSClient');
91+
expect(name).toBe('Node.js Server SDK');
92+
});
93+
94+
test('returns undefined for unknown identifier', () => {
95+
const name = UserAgentHelpers.getSDKNameByUserAgentOrWrapper('UnknownIdentifier');
96+
expect(name).toBeUndefined();
97+
});
98+
99+
test('prioritizes wrapper names over user agents', () => {
100+
// In case there's ever a wrapper name that matches a user agent from another SDK,
101+
// we should ensure wrapper names are checked first
102+
const name = UserAgentHelpers.getSDKNameByUserAgentOrWrapper('react-native-client');
103+
expect(name).toBe('React Native SDK');
104+
});
105+
106+
test('finds edge SDK by user agent', () => {
107+
const name = UserAgentHelpers.getSDKNameByUserAgentOrWrapper('CloudflareEdgeSDK');
108+
expect(name).toBe('Cloudflare SDK');
109+
});
110+
});

0 commit comments

Comments
 (0)