import FeatureFlagManager from '../../../core/featureFlags/featureFlagManager'; import { FeatureFlags } from '../../../types/types'; jest.mock('../../../types/types', () => ({ Feature: { checkFeatureFlagImplementation: 'checkFeatureFlagImplementation', crashReporter: 'crashReporter', }, })); describe('FeatureFlagManager', () => { let manager: typeof FeatureFlagManager; beforeEach(() => { jest.resetModules(); // Reset modules to ensure a clean slate for tests jest.isolateModules(() => { manager = require('../../../core/featureFlags/featureFlagManager').default; }); }); it('should be a singleton', () => { const manager1 = require('../../../core/featureFlags/featureFlagManager').default; const manager2 = require('../../../core/featureFlags/featureFlagManager').default; expect(manager1).toBe(manager2); // Singleton instance check }); describe('Default Configuration', () => { let originalDev: boolean; beforeEach(() => { // @ts-ignore - __DEV__ is a global variable global.__DEV__ = true; }); afterEach(() => { // @ts-ignore - __DEV__ is a global variable global.__DEV__ = originalDev; }); it('should use developmentFeatureFlagConfiguration when __DEV__ is true', () => { jest.isolateModules(() => { manager = require('../../../core/featureFlags/featureFlagManager').default; }); expect(manager.featureFlags).toEqual({ checkFeatureFlagImplementation: false, crashReporter: false, }); }); it('should use productionFeatureFlagConfiguration when __DEV__ is false', () => { jest.isolateModules(() => { manager = require('../../../core/featureFlags/featureFlagManager').default; }); expect(manager.featureFlags).toEqual({ checkFeatureFlagImplementation: false, crashReporter: false, }); }); }); describe('Feature Flag Management', () => { it('should set a specific feature flag', () => { manager.setFeatureFlag('crashReporter', true); expect(manager.featureFlags).toEqual({ checkFeatureFlagImplementation: false, crashReporter: true, }); }); it('should replace the entire featureFlags object', () => { const newFeatureFlags: FeatureFlags = { checkFeatureFlagImplementation: true, crashReporter: true, }; manager.featureFlags = newFeatureFlags; expect(manager.featureFlags).toEqual(newFeatureFlags); }); it('should get the current featureFlags object', () => { const flags = manager.featureFlags; expect(flags).toEqual({ checkFeatureFlagImplementation: false, crashReporter: false, }); }); }); });