UNPKG

daynitejs

Version:

A lightweight JavaScript library for toggling light and dark themes.

100 lines (91 loc) 4 kB
/** * Unit tests for storage utilities. */ globalThis.localStorageStore = {}; const originalLocalStorage = globalThis.localStorage; globalThis.localStorage = { getItem: (key) => globalThis.localStorageStore[key] || null, setItem: (key, val) => { globalThis.localStorageStore[key] = val; }, removeItem: (key) => { delete globalThis.localStorageStore[key]; }, clear: () => { globalThis.localStorageStore = {}; } }; describe('Storage Utils', () => { afterEach(() => { globalThis.localStorageStore = {}; globalThis.localStorage = { getItem: (key) => globalThis.localStorageStore[key] || null, setItem: (key, val) => { globalThis.localStorageStore[key] = val; }, removeItem: (key) => { delete globalThis.localStorageStore[key]; }, clear: () => { globalThis.localStorageStore = {}; } }; delete require.cache[require.resolve('../src/utils/storage.js')]; }); afterAll(() => { globalThis.localStorage = originalLocalStorage; }); beforeEach(() => { jest.resetModules(); globalThis.localStorageStore = {}; globalThis.localStorage = { getItem: (key) => globalThis.localStorageStore[key] || null, setItem: (key, val) => { globalThis.localStorageStore[key] = val; }, removeItem: (key) => { delete globalThis.localStorageStore[key]; }, clear: () => { globalThis.localStorageStore = {}; } }; delete require.cache[require.resolve('../src/utils/storage.js')]; }); test('getStoredTheme retrieves theme', () => { jest.setTimeout(10000); globalThis.localStorage.setItem('DayniteJs-theme', 'dark'); const { getStoredTheme } = require('../src/utils/storage.js'); expect(getStoredTheme('DayniteJs-theme')).toBe('dark'); }); test('getStoredTheme handles localStorage error', () => { jest.setTimeout(10000); // Ensure no value is set in localStorageStore globalThis.localStorageStore = {}; const consoleWarn = jest.spyOn(console, 'warn').mockImplementation(); // Mock error BEFORE requiring the module globalThis.localStorage = { getItem: () => { throw new Error('Storage error'); }, setItem: (key, val) => { globalThis.localStorageStore[key] = val; }, removeItem: (key) => { delete globalThis.localStorageStore[key]; }, clear: () => { globalThis.localStorageStore = {}; } }; delete require.cache[require.resolve('../src/utils/storage.js')]; jest.resetModules(); // Double check store is empty expect(globalThis.localStorageStore['DayniteJs-theme']).toBeUndefined(); const { getStoredTheme } = require('../src/utils/storage.js'); expect(getStoredTheme('DayniteJs-theme')).toBe(null); expect(consoleWarn).toHaveBeenCalled(); consoleWarn.mockRestore(); }); test('storeTheme saves theme', () => { jest.setTimeout(10000); const { storeTheme } = require('../src/utils/storage.js'); storeTheme('DayniteJs-theme', 'dark'); expect(globalThis.localStorage.getItem('DayniteJs-theme')).toBe('dark'); }); test('storeTheme handles localStorage error', () => { jest.setTimeout(10000); // Ensure no value is set in localStorageStore globalThis.localStorageStore = {}; delete require.cache[require.resolve('../src/utils/storage.js')]; jest.resetModules(); const consoleWarn = jest.spyOn(console, 'warn').mockImplementation(); // Mock error BEFORE requiring the module globalThis.localStorage = { getItem: (key) => globalThis.localStorageStore[key] || null, setItem: () => { throw new Error('Storage error'); }, removeItem: (key) => { delete globalThis.localStorageStore[key]; }, clear: () => { globalThis.localStorageStore = {}; } }; // Double check store is empty expect(globalThis.localStorageStore['DayniteJs-theme']).toBeUndefined(); const { storeTheme } = require('../src/utils/storage.js'); storeTheme('DayniteJs-theme', 'dark'); expect(consoleWarn).toHaveBeenCalled(); consoleWarn.mockRestore(); }); });