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 logout: () => Promise register: () => Promise updateProfile: () => Promise refreshSession: () => Promise } 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 {children} } } 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') }) })