Sergey Krylov cfadb2adbe feat: migrate from react-router-dom to @tanstack/react-router (code-first)
- 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
2026-06-23 06:51:48 +03:00

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')
})
})