diff --git a/packages/core/src/__tests__/user-role.test.ts b/packages/core/src/__tests__/user-role.test.ts new file mode 100644 index 00000000..cd3d379d --- /dev/null +++ b/packages/core/src/__tests__/user-role.test.ts @@ -0,0 +1,29 @@ +import { UserRole } from '../definitions/jwt'; + +describe('UserRole', () => { + const values = Object.values(UserRole); + + it('has no duplicate values', () => { + const seen = new Set(); + const duplicates: string[] = []; + for (const value of values) { + if (seen.has(value)) { + duplicates.push(value); + } + seen.add(value); + } + expect(duplicates).toEqual([]); + }); + + it('uses contiguous PascalCase contract strings', () => { + // Anchored: rejects trailing/embedded junk (spaces, hyphens, underscores, digits, …). + // Allows VIP and KycClientCompany (single PascalCase / all-caps word). + const pattern = /^[A-Z][A-Za-z]*$/; + const invalid = values.filter((value) => !pattern.test(value)); + expect(invalid).toEqual([]); + }); + + it('has exactly 13 members', () => { + expect(values).toHaveLength(13); + }); +}); diff --git a/packages/core/src/definitions/jwt.ts b/packages/core/src/definitions/jwt.ts index 0c071f14..40c39073 100644 --- a/packages/core/src/definitions/jwt.ts +++ b/packages/core/src/definitions/jwt.ts @@ -13,6 +13,7 @@ export enum UserRole { REALUNIT = 'RealUnit', MARKETING = 'Marketing', MONITORING = 'Monitoring', + NON_CUSTODIAL_WALLET_PARTNER = 'NonCustodialWalletPartner', } export interface Jwt {