🧹 Remove unnecessary whitespace in unit tests for useFeatureFlags
This commit is contained in:
@@ -27,7 +27,7 @@ describe('useFeatureFlags', () => {
|
|||||||
describe('isEnabled', () => {
|
describe('isEnabled', () => {
|
||||||
it('returns flag default value when no override exists', () => {
|
it('returns flag default value when no override exists', () => {
|
||||||
const { isEnabled } = useFeatureFlags();
|
const { isEnabled } = useFeatureFlags();
|
||||||
|
|
||||||
// ENABLE_CACHING defaults to true
|
// ENABLE_CACHING defaults to true
|
||||||
expect(isEnabled.value('enable-caching')).toBe(true);
|
expect(isEnabled.value('enable-caching')).toBe(true);
|
||||||
// DARK_MODE defaults to false
|
// DARK_MODE defaults to false
|
||||||
@@ -41,9 +41,9 @@ describe('useFeatureFlags', () => {
|
|||||||
|
|
||||||
it('respects local override when set in same instance', () => {
|
it('respects local override when set in same instance', () => {
|
||||||
const { isEnabled, toggle } = useFeatureFlags();
|
const { isEnabled, toggle } = useFeatureFlags();
|
||||||
|
|
||||||
expect(isEnabled.value('dark-mode')).toBe(false);
|
expect(isEnabled.value('dark-mode')).toBe(false);
|
||||||
|
|
||||||
toggle('dark-mode');
|
toggle('dark-mode');
|
||||||
// Should be toggled in same instance
|
// Should be toggled in same instance
|
||||||
expect(isEnabled.value('dark-mode')).toBe(true);
|
expect(isEnabled.value('dark-mode')).toBe(true);
|
||||||
@@ -51,7 +51,7 @@ describe('useFeatureFlags', () => {
|
|||||||
|
|
||||||
it('returns false for flag requiring permission without it', () => {
|
it('returns false for flag requiring permission without it', () => {
|
||||||
const { isEnabled } = useFeatureFlags();
|
const { isEnabled } = useFeatureFlags();
|
||||||
|
|
||||||
// GAMEMASTER_DIFF_VIEWER requires 'gamemaster-advanced' permission
|
// GAMEMASTER_DIFF_VIEWER requires 'gamemaster-advanced' permission
|
||||||
expect(isEnabled.value('gamemaster-diff-viewer')).toBe(false);
|
expect(isEnabled.value('gamemaster-diff-viewer')).toBe(false);
|
||||||
});
|
});
|
||||||
@@ -60,9 +60,9 @@ describe('useFeatureFlags', () => {
|
|||||||
describe('toggle', () => {
|
describe('toggle', () => {
|
||||||
it('toggles flag override in development mode', () => {
|
it('toggles flag override in development mode', () => {
|
||||||
const { toggle, isEnabled } = useFeatureFlags();
|
const { toggle, isEnabled } = useFeatureFlags();
|
||||||
|
|
||||||
expect(isEnabled.value('dark-mode')).toBe(false);
|
expect(isEnabled.value('dark-mode')).toBe(false);
|
||||||
|
|
||||||
const result = toggle('dark-mode');
|
const result = toggle('dark-mode');
|
||||||
expect(result).toBe(true);
|
expect(result).toBe(true);
|
||||||
expect(isEnabled.value('dark-mode')).toBe(true);
|
expect(isEnabled.value('dark-mode')).toBe(true);
|
||||||
@@ -70,25 +70,28 @@ describe('useFeatureFlags', () => {
|
|||||||
|
|
||||||
it('persists override to localStorage', () => {
|
it('persists override to localStorage', () => {
|
||||||
const { toggle } = useFeatureFlags();
|
const { toggle } = useFeatureFlags();
|
||||||
|
|
||||||
toggle('dark-mode');
|
toggle('dark-mode');
|
||||||
|
|
||||||
const stored = localStorage.getItem('feature_flag_overrides');
|
const stored = localStorage.getItem('feature_flag_overrides');
|
||||||
expect(stored).not.toBeNull();
|
expect(stored).not.toBeNull();
|
||||||
|
|
||||||
const overrides = JSON.parse(stored);
|
const overrides = JSON.parse(stored);
|
||||||
expect(overrides['dark-mode']).toBe(true);
|
expect(overrides['dark-mode']).toBe(true);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('loads overrides from localStorage on init', () => {
|
it('loads overrides from localStorage on init', () => {
|
||||||
// Set override in storage first
|
// Set override in storage first
|
||||||
localStorage.setItem('feature_flag_overrides', JSON.stringify({
|
localStorage.setItem(
|
||||||
'dark-mode': true,
|
'feature_flag_overrides',
|
||||||
'experimental-search': true
|
JSON.stringify({
|
||||||
}));
|
'dark-mode': true,
|
||||||
|
'experimental-search': true
|
||||||
|
})
|
||||||
|
);
|
||||||
|
|
||||||
const { isEnabled } = useFeatureFlags();
|
const { isEnabled } = useFeatureFlags();
|
||||||
|
|
||||||
expect(isEnabled.value('dark-mode')).toBe(true);
|
expect(isEnabled.value('dark-mode')).toBe(true);
|
||||||
expect(isEnabled.value('experimental-search')).toBe(true);
|
expect(isEnabled.value('experimental-search')).toBe(true);
|
||||||
});
|
});
|
||||||
@@ -97,22 +100,22 @@ describe('useFeatureFlags', () => {
|
|||||||
describe('reset', () => {
|
describe('reset', () => {
|
||||||
it('removes override for specific flag', () => {
|
it('removes override for specific flag', () => {
|
||||||
const { isEnabled, toggle, reset } = useFeatureFlags();
|
const { isEnabled, toggle, reset } = useFeatureFlags();
|
||||||
|
|
||||||
toggle('dark-mode');
|
toggle('dark-mode');
|
||||||
expect(isEnabled.value('dark-mode')).toBe(true);
|
expect(isEnabled.value('dark-mode')).toBe(true);
|
||||||
|
|
||||||
reset('dark-mode');
|
reset('dark-mode');
|
||||||
expect(isEnabled.value('dark-mode')).toBe(false);
|
expect(isEnabled.value('dark-mode')).toBe(false);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('returns to default after reset', () => {
|
it('returns to default after reset', () => {
|
||||||
const { isEnabled, toggle, reset } = useFeatureFlags();
|
const { isEnabled, toggle, reset } = useFeatureFlags();
|
||||||
|
|
||||||
// ENABLE_CACHING defaults to true
|
// ENABLE_CACHING defaults to true
|
||||||
const beforeToggle = isEnabled.value('enable-caching');
|
const beforeToggle = isEnabled.value('enable-caching');
|
||||||
toggle('enable-caching');
|
toggle('enable-caching');
|
||||||
expect(isEnabled.value('enable-caching')).not.toBe(beforeToggle);
|
expect(isEnabled.value('enable-caching')).not.toBe(beforeToggle);
|
||||||
|
|
||||||
reset('enable-caching');
|
reset('enable-caching');
|
||||||
expect(isEnabled.value('enable-caching')).toBe(beforeToggle);
|
expect(isEnabled.value('enable-caching')).toBe(beforeToggle);
|
||||||
});
|
});
|
||||||
@@ -121,12 +124,12 @@ describe('useFeatureFlags', () => {
|
|||||||
describe('resetAll', () => {
|
describe('resetAll', () => {
|
||||||
it('clears all overrides', () => {
|
it('clears all overrides', () => {
|
||||||
const { isEnabled, toggle, resetAll } = useFeatureFlags();
|
const { isEnabled, toggle, resetAll } = useFeatureFlags();
|
||||||
|
|
||||||
toggle('dark-mode');
|
toggle('dark-mode');
|
||||||
toggle('experimental-search');
|
toggle('experimental-search');
|
||||||
|
|
||||||
resetAll();
|
resetAll();
|
||||||
|
|
||||||
// Should return to defaults
|
// Should return to defaults
|
||||||
expect(isEnabled.value('dark-mode')).toBe(false);
|
expect(isEnabled.value('dark-mode')).toBe(false);
|
||||||
expect(isEnabled.value('experimental-search')).toBe(false);
|
expect(isEnabled.value('experimental-search')).toBe(false);
|
||||||
@@ -134,10 +137,10 @@ describe('useFeatureFlags', () => {
|
|||||||
|
|
||||||
it('clears localStorage after reset', () => {
|
it('clears localStorage after reset', () => {
|
||||||
const { toggle, resetAll } = useFeatureFlags();
|
const { toggle, resetAll } = useFeatureFlags();
|
||||||
|
|
||||||
toggle('dark-mode');
|
toggle('dark-mode');
|
||||||
resetAll();
|
resetAll();
|
||||||
|
|
||||||
const stored = localStorage.getItem('feature_flag_overrides');
|
const stored = localStorage.getItem('feature_flag_overrides');
|
||||||
expect(stored).toBe('{}');
|
expect(stored).toBe('{}');
|
||||||
});
|
});
|
||||||
@@ -146,12 +149,12 @@ describe('useFeatureFlags', () => {
|
|||||||
describe('getFlags', () => {
|
describe('getFlags', () => {
|
||||||
it('returns array of all flags with status', () => {
|
it('returns array of all flags with status', () => {
|
||||||
const { getFlags } = useFeatureFlags();
|
const { getFlags } = useFeatureFlags();
|
||||||
|
|
||||||
const flags = getFlags();
|
const flags = getFlags();
|
||||||
|
|
||||||
expect(Array.isArray(flags)).toBe(true);
|
expect(Array.isArray(flags)).toBe(true);
|
||||||
expect(flags.length).toBeGreaterThan(0);
|
expect(flags.length).toBeGreaterThan(0);
|
||||||
|
|
||||||
const darkMode = flags.find(f => f.name === 'dark-mode');
|
const darkMode = flags.find(f => f.name === 'dark-mode');
|
||||||
expect(darkMode).toBeDefined();
|
expect(darkMode).toBeDefined();
|
||||||
expect(darkMode).toHaveProperty('isEnabled');
|
expect(darkMode).toHaveProperty('isEnabled');
|
||||||
@@ -161,25 +164,25 @@ describe('useFeatureFlags', () => {
|
|||||||
|
|
||||||
it('marks flags with overrides', () => {
|
it('marks flags with overrides', () => {
|
||||||
const { getFlags, toggle } = useFeatureFlags();
|
const { getFlags, toggle } = useFeatureFlags();
|
||||||
|
|
||||||
toggle('dark-mode');
|
toggle('dark-mode');
|
||||||
|
|
||||||
const flags = getFlags();
|
const flags = getFlags();
|
||||||
const darkMode = flags.find(f => f.name === 'dark-mode');
|
const darkMode = flags.find(f => f.name === 'dark-mode');
|
||||||
|
|
||||||
expect(darkMode.hasOverride).toBe(true);
|
expect(darkMode.hasOverride).toBe(true);
|
||||||
expect(darkMode.override).toBe(true);
|
expect(darkMode.override).toBe(true);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('indicates permission requirements for flags', () => {
|
it('indicates permission requirements for flags', () => {
|
||||||
const { getFlags } = useFeatureFlags();
|
const { getFlags } = useFeatureFlags();
|
||||||
|
|
||||||
const flags = getFlags();
|
const flags = getFlags();
|
||||||
|
|
||||||
// Should have flags with and without permissions
|
// Should have flags with and without permissions
|
||||||
const withPerm = flags.find(f => f.requiresPermission);
|
const withPerm = flags.find(f => f.requiresPermission);
|
||||||
const withoutPerm = flags.find(f => !f.requiresPermission);
|
const withoutPerm = flags.find(f => !f.requiresPermission);
|
||||||
|
|
||||||
expect(withPerm).toBeDefined();
|
expect(withPerm).toBeDefined();
|
||||||
expect(withoutPerm).toBeDefined();
|
expect(withoutPerm).toBeDefined();
|
||||||
});
|
});
|
||||||
@@ -188,27 +191,27 @@ describe('useFeatureFlags', () => {
|
|||||||
describe('setBackendFlags', () => {
|
describe('setBackendFlags', () => {
|
||||||
it('sets flags from backend response', () => {
|
it('sets flags from backend response', () => {
|
||||||
const { isEnabled, setBackendFlags } = useFeatureFlags();
|
const { isEnabled, setBackendFlags } = useFeatureFlags();
|
||||||
|
|
||||||
expect(isEnabled.value('dark-mode')).toBe(false);
|
expect(isEnabled.value('dark-mode')).toBe(false);
|
||||||
|
|
||||||
setBackendFlags({
|
setBackendFlags({
|
||||||
'dark-mode': true,
|
'dark-mode': true,
|
||||||
'experimental-search': true
|
'experimental-search': true
|
||||||
});
|
});
|
||||||
|
|
||||||
expect(isEnabled.value('dark-mode')).toBe(true);
|
expect(isEnabled.value('dark-mode')).toBe(true);
|
||||||
expect(isEnabled.value('experimental-search')).toBe(true);
|
expect(isEnabled.value('experimental-search')).toBe(true);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('local overrides take precedence over backend flags', () => {
|
it('local overrides take precedence over backend flags', () => {
|
||||||
const { isEnabled, toggle, setBackendFlags } = useFeatureFlags();
|
const { isEnabled, toggle, setBackendFlags } = useFeatureFlags();
|
||||||
|
|
||||||
toggle('dark-mode'); // Local override to true
|
toggle('dark-mode'); // Local override to true
|
||||||
|
|
||||||
setBackendFlags({
|
setBackendFlags({
|
||||||
'dark-mode': false // Backend says false
|
'dark-mode': false // Backend says false
|
||||||
});
|
});
|
||||||
|
|
||||||
// Local override should win
|
// Local override should win
|
||||||
expect(isEnabled.value('dark-mode')).toBe(true);
|
expect(isEnabled.value('dark-mode')).toBe(true);
|
||||||
});
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user