|
|
@@ -0,0 +1,83 @@
|
|
|
+import { beforeEach, describe, expect, it, vi } from 'vitest'
|
|
|
+
|
|
|
+function clearAllCookies() {
|
|
|
+ for (const part of document.cookie.split(';')) {
|
|
|
+ const name = part.split('=')[0]?.trim()
|
|
|
+ if (!name) continue
|
|
|
+ document.cookie = `${name}=; expires=Thu, 01 Jan 1970 00:00:00 GMT; path=/`
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+async function importAuthStore() {
|
|
|
+ const { useAuthStore } = await import('./auth-store')
|
|
|
+ return useAuthStore
|
|
|
+}
|
|
|
+
|
|
|
+const sampleUser = {
|
|
|
+ accountNo: 'ACC-1',
|
|
|
+ email: 'user@example.com',
|
|
|
+ role: ['user'],
|
|
|
+ exp: 1_700_000_000,
|
|
|
+}
|
|
|
+
|
|
|
+describe('useAuthStore', () => {
|
|
|
+ beforeEach(() => {
|
|
|
+ clearAllCookies()
|
|
|
+ vi.resetModules()
|
|
|
+ })
|
|
|
+
|
|
|
+ it('starts with an empty access token when nothing is persisted', async () => {
|
|
|
+ const useAuthStore = await importAuthStore()
|
|
|
+
|
|
|
+ expect(useAuthStore.getState().auth.accessToken).toBe('')
|
|
|
+ expect(useAuthStore.getState().auth.user).toBeNull()
|
|
|
+ })
|
|
|
+
|
|
|
+ it('persists access token so a new store instance reads it back', async () => {
|
|
|
+ const useAuthStore = await importAuthStore()
|
|
|
+ useAuthStore.getState().auth.setAccessToken('session-token')
|
|
|
+
|
|
|
+ vi.resetModules()
|
|
|
+ const useAuthStoreAfterReload = await importAuthStore()
|
|
|
+
|
|
|
+ expect(useAuthStoreAfterReload.getState().auth.accessToken).toBe(
|
|
|
+ 'session-token'
|
|
|
+ )
|
|
|
+ })
|
|
|
+
|
|
|
+ it('clears persisted access token when resetAccessToken is used', async () => {
|
|
|
+ const useAuthStore = await importAuthStore()
|
|
|
+ useAuthStore.getState().auth.setAccessToken('to-clear')
|
|
|
+ useAuthStore.getState().auth.resetAccessToken()
|
|
|
+
|
|
|
+ vi.resetModules()
|
|
|
+ const useAuthStoreAfterReload = await importAuthStore()
|
|
|
+
|
|
|
+ expect(useAuthStoreAfterReload.getState().auth.accessToken).toBe('')
|
|
|
+ })
|
|
|
+
|
|
|
+ it('updates the signed-in user via setUser', async () => {
|
|
|
+ const useAuthStore = await importAuthStore()
|
|
|
+
|
|
|
+ useAuthStore.getState().auth.setUser({ ...sampleUser })
|
|
|
+
|
|
|
+ expect(useAuthStore.getState().auth.user).toEqual(sampleUser)
|
|
|
+ })
|
|
|
+
|
|
|
+ it('reset clears user and access token and drops persistence', async () => {
|
|
|
+ const useAuthStore = await importAuthStore()
|
|
|
+ useAuthStore.getState().auth.setAccessToken('will-be-cleared')
|
|
|
+ useAuthStore.getState().auth.setUser({ ...sampleUser })
|
|
|
+
|
|
|
+ useAuthStore.getState().auth.reset()
|
|
|
+
|
|
|
+ expect(useAuthStore.getState().auth.user).toBeNull()
|
|
|
+ expect(useAuthStore.getState().auth.accessToken).toBe('')
|
|
|
+
|
|
|
+ vi.resetModules()
|
|
|
+ const useAuthStoreAfterReload = await importAuthStore()
|
|
|
+
|
|
|
+ expect(useAuthStoreAfterReload.getState().auth.user).toBeNull()
|
|
|
+ expect(useAuthStoreAfterReload.getState().auth.accessToken).toBe('')
|
|
|
+ })
|
|
|
+})
|