- Create code-first route tree in src/app/routing/routeTree.tsx - Replace ProtectedRoute with beforeLoad auth guards - Add useSearchParamsCompat for URLSearchParams access - Update App.tsx, layouts, and all page/widget imports - Add frontend tooling: biome, prettier, env config - Update all tests for TanStack Router compatibility - Remove react-router-dom dependency, @tanstack/router-plugin - Consolidate biome config at root level
60 lines
2.1 KiB
TypeScript
60 lines
2.1 KiB
TypeScript
import { renderHook } from '@testing-library/react'
|
|
import type { ReactNode } from 'react'
|
|
import { describe, expect, it } from 'vitest'
|
|
import { SessionContext } from './sessionContext'
|
|
import { useSession } from './useSession'
|
|
|
|
type SessionState = {
|
|
user: { id: number; email: string; name: string; role: string } | null
|
|
accessToken: string | null
|
|
isAuthenticated: boolean
|
|
isLoading: boolean
|
|
login: () => Promise<void>
|
|
logout: () => Promise<void>
|
|
register: () => Promise<void>
|
|
updateProfile: () => Promise<void>
|
|
refreshSession: () => Promise<void>
|
|
}
|
|
|
|
const mockSession: SessionState = {
|
|
user: { id: 1, email: 'user@test.com', name: 'Test User', role: 'user' },
|
|
accessToken: 'mock-access-token',
|
|
isAuthenticated: true,
|
|
isLoading: false,
|
|
login: vi.fn().mockResolvedValue(undefined),
|
|
logout: vi.fn(),
|
|
register: vi.fn().mockResolvedValue(undefined),
|
|
updateProfile: vi.fn().mockResolvedValue(undefined),
|
|
refreshSession: vi.fn().mockResolvedValue(undefined),
|
|
}
|
|
|
|
function createWrapper(session: SessionState = mockSession) {
|
|
return function Wrapper({ children }: { children: ReactNode }) {
|
|
return <SessionContext.Provider value={session}>{children}</SessionContext.Provider>
|
|
}
|
|
}
|
|
|
|
describe('useSession', () => {
|
|
it('returns session context with user', () => {
|
|
const { result } = renderHook(() => useSession(), { wrapper: createWrapper() })
|
|
expect(result.current.isAuthenticated).toBe(true)
|
|
expect(result.current.user?.email).toBe('user@test.com')
|
|
expect(result.current.accessToken).toBe('mock-access-token')
|
|
})
|
|
|
|
it('provides login function', () => {
|
|
const { result } = renderHook(() => useSession(), { wrapper: createWrapper() })
|
|
expect(typeof result.current.login).toBe('function')
|
|
})
|
|
|
|
it('provides logout function', () => {
|
|
const { result } = renderHook(() => useSession(), { wrapper: createWrapper() })
|
|
expect(typeof result.current.logout).toBe('function')
|
|
})
|
|
|
|
it('provides register function', () => {
|
|
const { result } = renderHook(() => useSession(), { wrapper: createWrapper() })
|
|
expect(typeof result.current.register).toBe('function')
|
|
})
|
|
})
|