const { createSessionStore } = require('../stores/modules/session') describe('createSessionStore', () => { test('hydrates persisted session and notifies subscribers on updates', () => { const storage = new Map([ [ 'session', { token: 'cached-token', userInfo: { id: 1, name: 'Xuanzhi' }, permissions: ['dashboard:view'] } ] ]) const sessionStore = createSessionStore({ storageKey: 'session', storage: { get(key) { return storage.get(key) }, set(key, value) { storage.set(key, value) }, remove(key) { storage.delete(key) } } }) const subscriber = jest.fn() sessionStore.subscribe(subscriber) sessionStore.hydrate() sessionStore.setSession({ token: 'next-token', userInfo: { id: 2, name: 'Architect' }, permissions: ['dashboard:view', 'dashboard:edit'] }) expect(sessionStore.getState()).toEqual({ isLoggedIn: true, token: 'next-token', userInfo: { id: 2, name: 'Architect' }, permissions: ['dashboard:view', 'dashboard:edit'] }) expect(storage.get('session')).toEqual({ token: 'next-token', userInfo: { id: 2, name: 'Architect' }, permissions: ['dashboard:view', 'dashboard:edit'] }) expect(subscriber).toHaveBeenCalled() }) test('clears persisted state on logout', () => { const storage = new Map() const sessionStore = createSessionStore({ storageKey: 'session', storage: { get(key) { return storage.get(key) }, set(key, value) { storage.set(key, value) }, remove(key) { storage.delete(key) } } }) sessionStore.setSession({ token: 'next-token', userInfo: { id: 2, name: 'Architect' }, permissions: ['dashboard:view', 'dashboard:edit'] }) sessionStore.clearSession() expect(sessionStore.getState()).toEqual({ isLoggedIn: false, token: '', userInfo: null, permissions: [] }) expect(storage.has('session')).toBe(false) }) })