// Mock data for all currencies used in the constants file const mockCurrencyConstants = { CURRENCY_EUR: 978, CURRENCY_ALL: 8, CURRENCY_DZD: 12, CURRENCY_USD: 840, CURRENCY_AOA: 973, CURRENCY_XCD: 951, CURRENCY_ARS: 32, CURRENCY_AMD: 51, CURRENCY_AWG: 533, CURRENCY_AUD: 36, CURRENCY_AZN: 944, CURRENCY_BHD: 48, CURRENCY_BDT: 50, CURRENCY_BBD: 52, CURRENCY_BYN: 933, CURRENCY_BZD: 84, CURRENCY_XOF: 952, CURRENCY_BMD: 60, CURRENCY_INR: 356, CURRENCY_BTN: 64, CURRENCY_BOB: 68, CURRENCY_BOV: 984, CURRENCY_BAM: 977, CURRENCY_BWP: 72, CURRENCY_NOK: 578, CURRENCY_BRL: 986, CURRENCY_BND: 96, CURRENCY_BGN: 975, CURRENCY_BIF: 108, CURRENCY_CVE: 132, CURRENCY_KHR: 116, CURRENCY_XAF: 950, CURRENCY_CAD: 124, CURRENCY_KYD: 136, CURRENCY_CLP: 152, CURRENCY_CLF: 990, CURRENCY_CNY: 156, CURRENCY_COP: 170, CURRENCY_COU: 970, CURRENCY_KMF: 174, CURRENCY_CDF: 976, CURRENCY_NZD: 554, CURRENCY_CRC: 188, CURRENCY_HRK: 191, CURRENCY_CUP: 192, CURRENCY_CUC: 931, CURRENCY_ANG: 532, CURRENCY_CZK: 203, CURRENCY_DKK: 208, CURRENCY_DJF: 262, CURRENCY_DOP: 214, CURRENCY_EGP: 818, CURRENCY_SVC: 222, CURRENCY_ERN: 232, CURRENCY_ETB: 230, CURRENCY_FKP: 238, CURRENCY_FJD: 242, CURRENCY_XPF: 953, CURRENCY_GMD: 270, CURRENCY_GEL: 981, CURRENCY_GHS: 936, CURRENCY_GIP: 292, CURRENCY_GTQ: 320, CURRENCY_GBP: 826, CURRENCY_GNF: 324, CURRENCY_GYD: 328, CURRENCY_HTG: 332, CURRENCY_HNL: 340, CURRENCY_HKD: 344, CURRENCY_HUF: 348, CURRENCY_ISK: 352, CURRENCY_IDR: 360, CURRENCY_XDR: 960, CURRENCY_IRR: 364, CURRENCY_IQD: 368, CURRENCY_ILS: 376, CURRENCY_JMD: 388, CURRENCY_JPY: 392, CURRENCY_JOD: 400, CURRENCY_KZT: 398, CURRENCY_KES: 404, CURRENCY_KPW: 408, CURRENCY_KRW: 410, CURRENCY_KWD: 414, CURRENCY_KGS: 417, CURRENCY_LAK: 418, CURRENCY_LBP: 422, CURRENCY_LSL: 426, CURRENCY_ZAR: 710, CURRENCY_LRD: 430, CURRENCY_LYD: 434, CURRENCY_CHF: 756, CURRENCY_MOP: 446, CURRENCY_MKD: 807, CURRENCY_MGA: 969, CURRENCY_MWK: 454, CURRENCY_MYR: 458, CURRENCY_MVR: 462, CURRENCY_MRU: 929, CURRENCY_MUR: 480, CURRENCY_MXN: 484, CURRENCY_MXV: 979, CURRENCY_MDL: 498, CURRENCY_MNT: 496, CURRENCY_MAD: 504, CURRENCY_AFN: 971, CURRENCY_BSD: 44, CURRENCY_SLE: 925, CURRENCY_VED: 926, CURRENCY_UYW: 927, CURRENCY_VES: 928, CURRENCY_MZN: 943, CURRENCY_MMK: 104, CURRENCY_NAD: 516, CURRENCY_NPR: 524, CURRENCY_NIO: 558, CURRENCY_NGN: 566, CURRENCY_OMR: 512, CURRENCY_PKR: 586, CURRENCY_PAB: 590, CURRENCY_PGK: 598, CURRENCY_PYG: 600, CURRENCY_PEN: 604, CURRENCY_PHP: 608, CURRENCY_PLN: 985, CURRENCY_QAR: 634, CURRENCY_RON: 946, CURRENCY_RUB: 643, CURRENCY_RWF: 646, CURRENCY_SHP: 654, CURRENCY_WST: 882, CURRENCY_STN: 930, CURRENCY_SAR: 682, CURRENCY_RSD: 941, CURRENCY_SCR: 690, CURRENCY_SLL: 694, CURRENCY_SGD: 702, CURRENCY_XUA: 965, CURRENCY_XSU: 994, CURRENCY_SBD: 90, CURRENCY_SOS: 706, CURRENCY_SSP: 728, CURRENCY_LKR: 144, CURRENCY_SDG: 938, CURRENCY_SRD: 968, CURRENCY_SZL: 748, CURRENCY_SEK: 752, CURRENCY_CHE: 947, CURRENCY_CHW: 948, CURRENCY_SYP: 760, CURRENCY_TWD: 901, CURRENCY_TJS: 972, CURRENCY_TZS: 834, CURRENCY_THB: 764, CURRENCY_TOP: 776, CURRENCY_TTD: 780, CURRENCY_TND: 788, CURRENCY_TRY: 949, CURRENCY_TMT: 934, CURRENCY_UGX: 800, CURRENCY_UAH: 980, CURRENCY_AED: 784, CURRENCY_USN: 997, CURRENCY_UYU: 858, CURRENCY_UYI: 940, CURRENCY_UZS: 860, CURRENCY_VUV: 548, CURRENCY_VND: 704, CURRENCY_YER: 886, CURRENCY_ZMW: 967, CURRENCY_ZWL: 932, CURRENCY_XBA: 955, CURRENCY_XBB: 956, CURRENCY_XBC: 957, CURRENCY_XBD: 958, CURRENCY_XTS: 963, CURRENCY_XXX: 999, CURRENCY_XAU: 959, CURRENCY_XPD: 964, CURRENCY_XPT: 962, CURRENCY_XAG: 961, }; // Mock the TurboModule spec jest.mock('../../core/specs/NativeContentsquareModule', () => ({ __esModule: true, default: { getConstants: jest.fn(() => mockCurrencyConstants), }, })); // Mock the legacy native module jest.mock('react-native', () => ({ NativeModules: { ContentsquareModule: mockCurrencyConstants, }, })); // Mock nativeModules to control which module is used jest.mock('../../core/nativeModules', () => ({ ContentsquareModule: mockCurrencyConstants, })); describe('Currency Enum from constants.ts', () => { let Currency: any; beforeEach(() => { jest.resetModules(); // Clear all mocks before each test jest.clearAllMocks(); }); describe('Currency enum values', () => { beforeEach(() => { ({ Currency } = require('../../tracking/constants')); }); it('should correctly map common currencies to their ISO 4217 numeric codes', () => { expect(Currency.EUR).toBe(978); // Euro expect(Currency.USD).toBe(840); // US Dollar expect(Currency.GBP).toBe(826); // British Pound expect(Currency.JPY).toBe(392); // Japanese Yen expect(Currency.CAD).toBe(124); // Canadian Dollar expect(Currency.AUD).toBe(36); // Australian Dollar expect(Currency.CHF).toBe(756); // Swiss Franc }); it('should include all major world currencies', () => { const majorCurrencies = [ 'EUR', 'USD', 'GBP', 'JPY', 'CAD', 'AUD', 'CHF', 'CNY', 'INR', 'BRL', ]; majorCurrencies.forEach(currency => { expect(Currency[currency]).toBeDefined(); expect(typeof Currency[currency]).toBe('number'); }); }); it('should have the correct number of currency entries', () => { const currencyKeys = Object.keys(Currency).filter(key => isNaN(Number(key)) ); expect(currencyKeys.length).toBe( Object.keys(mockCurrencyConstants).length ); }); it('should map all currency constants correctly', () => { // Test a representative sample of currencies expect(Currency.AFN).toBe(mockCurrencyConstants.CURRENCY_AFN); expect(Currency.ALL).toBe(mockCurrencyConstants.CURRENCY_ALL); expect(Currency.DZD).toBe(mockCurrencyConstants.CURRENCY_DZD); expect(Currency.AOA).toBe(mockCurrencyConstants.CURRENCY_AOA); expect(Currency.XCD).toBe(mockCurrencyConstants.CURRENCY_XCD); }); it('should include special currency codes', () => { // Test special drawing rights and testing codes expect(Currency.XDR).toBe(960); // Special Drawing Rights expect(Currency.XTS).toBe(963); // Testing currency code expect(Currency.XXX).toBe(999); // No currency }); it('should include precious metals codes', () => { expect(Currency.XAU).toBe(959); // Gold expect(Currency.XAG).toBe(961); // Silver expect(Currency.XPT).toBe(962); // Platinum expect(Currency.XPD).toBe(964); // Palladium }); it('should not contain undefined values', () => { const currencyKeys = Object.keys(Currency).filter(key => isNaN(Number(key)) ); currencyKeys.forEach(key => { expect(Currency[key]).toBeDefined(); expect(Currency[key]).not.toBeNull(); expect(typeof Currency[key]).toBe('number'); }); }); it('should be a proper TypeScript enum with reverse mappings', () => { // TypeScript numeric enums create reverse mappings expect(Currency[978]).toBe('EUR'); expect(Currency[840]).toBe('USD'); expect(Currency[826]).toBe('GBP'); expect(Currency[392]).toBe('JPY'); }); }); describe('Module fallback behavior', () => { it('should use NativeContentsquareModule.getConstants() when available', () => { const mockGetConstants = jest.fn(() => mockCurrencyConstants); jest.doMock('../../core/specs/NativeContentsquareModule', () => ({ __esModule: true, default: { getConstants: mockGetConstants, }, })); jest.resetModules(); ({ Currency } = require('../../tracking/constants')); expect(mockGetConstants).toHaveBeenCalled(); expect(Currency.EUR).toBe(978); }); it('should fallback to ContentsquareModule when getConstants is not available', () => { jest.doMock('../../core/specs/NativeContentsquareModule', () => ({ __esModule: true, default: { // No getConstants method }, })); jest.doMock('../../core/nativeModules', () => ({ ContentsquareModule: mockCurrencyConstants, })); jest.resetModules(); ({ Currency } = require('../../tracking/constants')); expect(Currency.EUR).toBe(978); }); }); describe('Edge cases', () => { it('should handle missing currency constants gracefully', () => { const incompleteMockConstants = { CURRENCY_EUR: 978, CURRENCY_USD: 840, // Missing other currencies }; jest.doMock('../../core/specs/NativeContentsquareModule', () => ({ __esModule: true, default: { getConstants: jest.fn(() => incompleteMockConstants), }, })); jest.resetModules(); ({ Currency } = require('../../tracking/constants')); expect(Currency.EUR).toBe(978); expect(Currency.USD).toBe(840); expect(Currency.GBP).toBeUndefined(); }); it('should handle null/undefined constants', () => { const nullMockConstants = { CURRENCY_EUR: null, CURRENCY_USD: undefined, CURRENCY_GBP: 826, }; jest.doMock('../../core/specs/NativeContentsquareModule', () => ({ __esModule: true, default: { getConstants: jest.fn(() => nullMockConstants), }, })); jest.resetModules(); ({ Currency } = require('../../tracking/constants')); expect(Currency.EUR).toBeNull(); expect(Currency.USD).toBeUndefined(); expect(Currency.GBP).toBe(826); }); }); });