import { describe, it, expect, vi, beforeEach } from 'vitest' import { renderHook } from '@testing-library/react' vi.mock('@/stores/usePermissionStore', () => ({ usePermissionStore: vi.fn(), })) import { usePermissionStore } from '@/stores/usePermissionStore' import { usePermission } from '@/hooks/usePermission' const mockUsePermissionStore = vi.mocked(usePermissionStore) describe('usePermission', () => { beforeEach(() => { vi.clearAllMocks() }) it('should return hasPermission, hasRole, permissions, roles', () => { const mockState = { hasPermission: (p: string) => p === 'system:user:list', hasRole: (r: string) => r === 'admin', permissions: ['system:user:list', 'system:user:add'], roles: ['admin'], } mockUsePermissionStore.mockImplementation((selector: any) => selector(mockState)) const { result } = renderHook(() => usePermission()) expect(result.current.hasPermission('system:user:list')).toBe(true) expect(result.current.hasPermission('system:role:list')).toBe(false) expect(result.current.hasRole('admin')).toBe(true) expect(result.current.hasRole('user')).toBe(false) expect(result.current.permissions).toEqual(['system:user:list', 'system:user:add']) expect(result.current.roles).toEqual(['admin']) }) it('should return empty arrays when no permissions', () => { const mockState = { hasPermission: () => false, hasRole: () => false, permissions: [], roles: [], } mockUsePermissionStore.mockImplementation((selector: any) => selector(mockState)) const { result } = renderHook(() => usePermission()) expect(result.current.permissions).toEqual([]) expect(result.current.roles).toEqual([]) }) })