/** * Tasks page tests — basic rendering and interaction. */ import { describe, it, expect, vi } from 'vitest'; import { render, screen, fireEvent, waitFor } from '@testing-library/react'; import { TasksPage } from '@/pages/Tasks'; import * as tasksApi from '@/api/tasks'; // Mock i18n vi.mock('react-i18next', () => ({ useTranslation: () => ({ t: (key: string) => key }), })); // Mock toast vi.mock('@/components/ui/Toast', () => ({ useToast: () => ({ success: vi.fn(), error: vi.fn(), warning: vi.fn(), info: vi.fn(), }), })); // Mock UI components vi.mock('@/components/ui/Input', () => ({ Input: ({ value, onChange, type, label, ...props }: any) => (
{label && }
), })); vi.mock('@/components/ui/Select', () => ({ Select: ({ value, onChange, options, label, ...props }: any) => (
{label && }
), })); vi.mock('@/components/ui/Modal', () => ({ Modal: ({ open, onClose, title, children }: any) => open ? (

{title}

{children}
) : null, })); vi.mock('@/components/ui/Button', () => ({ Button: ({ children, onClick, disabled, ...props }: any) => ( ), })); vi.mock('@/components/ui/Badge', () => ({ Badge: ({ children, variant }: any) => {children}, })); vi.mock('@/components/ui/EmptyState', () => ({ EmptyState: ({ title, description }: any) => (

{title}

{description}

), })); // Mock tasks API vi.mock('@/api/tasks', () => ({ useTasks: vi.fn(() => ({ data: { items: [ { id: 'task-1', title: 'Test Task', description: 'Test description', status: 'open', priority: 'high', due_date: '2025-12-31T10:00:00Z', assigned_to: null, contact_id: null, created_by: null, created_at: '2025-01-01T00:00:00Z', updated_at: '2025-01-01T00:00:00Z', }, ], total: 1, page: 1, page_size: 25, }, isLoading: false, })), useCreateTask: vi.fn(() => ({ mutateAsync: vi.fn() })), useUpdateTask: vi.fn(() => ({ mutateAsync: vi.fn() })), useDeleteTask: vi.fn(() => ({ mutateAsync: vi.fn() })), useUpdateTaskStatus: vi.fn(() => ({ mutateAsync: vi.fn() })), })); describe('TasksPage', () => { it('renders the tasks page with header', () => { render(); expect(screen.getByTestId('tasks-page')).toBeInTheDocument(); expect(screen.getByText('tasks.title')).toBeInTheDocument(); }); it('renders task items from API', () => { render(); expect(screen.getByText('Test Task')).toBeInTheDocument(); expect(screen.getByText('Test description')).toBeInTheDocument(); }); it('opens create modal when create button is clicked', () => { render(); const createBtn = screen.getByText('tasks.create'); fireEvent.click(createBtn); expect(screen.getByTestId('modal')).toBeInTheDocument(); expect(screen.getByTestId('task-title-input')).toBeInTheDocument(); }); });