88 lines
2.1 KiB
JavaScript
88 lines
2.1 KiB
JavaScript
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)
|
|
})
|
|
})
|