import { FeatureName } from '../../../core/featureFlags/feature'; import { getSupportedFeatureFlags } from '../../../core/featureFlags/helpers'; import { FeatureFlagRemote } from '../../../types/types'; // import { version } from '../../../package.json'; jest.mock('../../../core/logging/logger', () => ({ warn: jest.fn(), })); jest.mock('../../../../package.json', () => ({ version: '2.0.0', })); describe('getSupportedFeatureFlags', () => { beforeEach(() => { jest.clearAllMocks(); }); it('should filter and update feature flags based on version and name mapping', () => { FeatureName['newFeature'] = 'mappedFeature'; const featureFlags: FeatureFlagRemote[] = [ { name: 'mappedFeature', min_version: '1.0.0', enabled: true }, // Valid { name: 'irrelevantFeature', min_version: '1.0.0', enabled: true }, // Invalid name { name: 'mappedFeature', min_version: '3.0.0', enabled: true }, // Invalid version ]; const result = getSupportedFeatureFlags(featureFlags); expect(result).toEqual([ { name: 'newFeature', min_version: '1.0.0', enabled: true }, // Updated and valid ]); }); it('should return an empty array if no feature flags are supported', () => { const featureFlags: FeatureFlagRemote[] = [ { name: 'irrelevantFeature', min_version: '1.0.0', enabled: true }, { name: 'mappedFeature', min_version: '3.0.0', enabled: true }, ]; const result = getSupportedFeatureFlags(featureFlags); expect(result).toEqual([]); }); // TODO: Fix this, currently unabe to test due to code exiting early // MOBILE-12985, https://contentsquare.atlassian.net/browse/MOBILE-12985 // it('should handle missing min_version gracefully', () => { // FeatureName['newFeature'] = 'mappedFeature'; // const featureFlags: FeatureFlagRemote[] = [ // { name: 'mappedFeature', enabled: true }, // Missing min_version // ]; // const result = getSupportedFeatureFlags(featureFlags); // expect(result).toEqual([]); // Should be filtered out // }); it('should handle empty feature flags array', () => { const result = getSupportedFeatureFlags([]); expect(result).toEqual([]); }); it('should throw an error if version format is invalid', () => { FeatureName['newFeature'] = 'mappedFeature'; const featureFlags: FeatureFlagRemote[] = [ { name: 'mappedFeature', min_version: '1.0.x', enabled: true }, // Invalid version format ]; expect(() => { getSupportedFeatureFlags(featureFlags); }).toThrow('Invalid version format'); }); });