diff --git a/frontend/src/context/wallet-context.test.tsx b/frontend/src/context/wallet-context.test.tsx index 7a1dad1d..777f0b2e 100644 --- a/frontend/src/context/wallet-context.test.tsx +++ b/frontend/src/context/wallet-context.test.tsx @@ -77,6 +77,23 @@ describe('WalletProvider', () => { expect(result.current.session).toBeNull(); }); + it('should recover from a syntactically invalid stored session without crashing', async () => { + localStorage.setItem(STORAGE_KEY, '{not valid json,,,'); + + const { result } = renderHook(() => useWallet(), { + wrapper: createWrapper(), + }); + + await waitFor(() => { + expect(result.current.isHydrated).toBe(true); + }); + + expect(result.current.status).toBe('idle'); + expect(result.current.session).toBeNull(); + expect(result.current.errorMessage).toBeNull(); + expect(localStorage.getItem(STORAGE_KEY)).toBeNull(); + }); + it('should discard a session with mocked !== false', async () => { const mockedSession = { ...mockSession, mocked: true }; localStorage.setItem(STORAGE_KEY, JSON.stringify(mockedSession)); diff --git a/frontend/src/context/wallet-context.tsx b/frontend/src/context/wallet-context.tsx index 3538a7c9..43d9f4d9 100644 --- a/frontend/src/context/wallet-context.tsx +++ b/frontend/src/context/wallet-context.tsx @@ -142,7 +142,7 @@ function readStoredSession(): WalletSession | null { return null; } - const raw = window.localStorage.getItem(STORAGE_KEY); + const raw = window.localStorage.getItem(STORAGE_KEY)?.trim(); if (!raw) { return null; }