UNPKG

react-sessionstorage-ttl-hook

Version:

React hook for sessionStorage with TTL and auto-expiry

59 lines (58 loc) 2.6 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const react_hooks_1 = require("@testing-library/react-hooks"); const useSessionStorageWithTTL_1 = __importDefault(require("./useSessionStorageWithTTL")); describe('useSessionStorageWithTTL', () => { beforeEach(() => { sessionStorage.clear(); jest.useFakeTimers(); }); afterEach(() => { jest.runOnlyPendingTimers(); jest.useRealTimers(); }); it('should return default value initially', () => { const { result } = (0, react_hooks_1.renderHook)(() => (0, useSessionStorageWithTTL_1.default)('key1', 'default', 1000)); expect(result.current[0]).toBe('default'); }); it('should store and retrieve value', () => { const { result, rerender } = (0, react_hooks_1.renderHook)(() => (0, useSessionStorageWithTTL_1.default)('key2', 'default', 1000)); (0, react_hooks_1.act)(() => { result.current[1]('newValue'); }); rerender(); const stored = JSON.parse(sessionStorage.getItem('key2')); expect(stored.value).toBe('newValue'); expect(result.current[0]).toBe('newValue'); }); it('should auto-expire after TTL', () => { const { result, rerender } = (0, react_hooks_1.renderHook)(() => (0, useSessionStorageWithTTL_1.default)('key3', 'default', 1000)); (0, react_hooks_1.act)(() => { result.current[1]('expiringValue'); }); rerender(); expect(result.current[0]).toBe('expiringValue'); (0, react_hooks_1.act)(() => { jest.advanceTimersByTime(1001); }); rerender(); const expired = sessionStorage.getItem('key3'); expect(expired).toBeNull(); }); it('should ignore invalid JSON', () => { sessionStorage.setItem('key4', '{invalid json'); const { result } = (0, react_hooks_1.renderHook)(() => (0, useSessionStorageWithTTL_1.default)('key4', 'fallback', 1000)); expect(result.current[0]).toBe('fallback'); }); it('should skip all logic in SSR (no window)', () => { const originalWindow = global.window; // @ts-ignore delete global.window; const { result } = (0, react_hooks_1.renderHook)(() => (0, useSessionStorageWithTTL_1.default)('keySSR', 'defaultSSR', 1000)); expect(result.current[0]).toBe('defaultSSR'); global.window = originalWindow; }); });