import { describe, it, expect, vi, beforeEach } from 'vitest'; import { render, screen, fireEvent } from '@testing-library/react'; import { KanbanBoard } from '../Kanban'; import type { Task, User } from '../data'; // Mock Shared components vi.mock('../Shared', () => ({ Avatar: ({ userId }: any) =>
{userId}
, PriorityBadge: ({ level }: any) =>
{level}
, StatusBadge: ({ status }: any) =>
{status}
, ProgressBar: () =>
Progress
})); describe('KanbanBoard Component', () => { const mockUser: User = { id: 'u1', name: 'Test User', email: 'test@example.com', role: 'emp', dept: 'dev', avatar: 'TU', color: '#000' }; const mockUsers = [mockUser]; const mockTasks: Task[] = [ { id: 't1', title: 'Task 1', description: 'Desc', status: 'todo', priority: 'medium', assignee: 'u1', reporter: 'u1', dueDate: '2023-12-31', tags: [], subtasks: [], comments: [], activity: [], dependencies: [] }, { id: 't2', title: 'Task 2', description: 'Desc', status: 'inprogress', priority: 'high', assignee: 'u1', reporter: 'u1', dueDate: '2023-12-31', tags: [], subtasks: [], comments: [], activity: [], dependencies: [] }, ]; const mockOnTaskClick = vi.fn(); const mockOnAddTask = vi.fn(); const mockOnMoveTask = vi.fn(); beforeEach(() => { vi.clearAllMocks(); }); it('renders columns and tasks', () => { render(); expect(screen.getByText('To Do')).toBeInTheDocument(); expect(screen.getByText('In Progress')).toBeInTheDocument(); expect(screen.getByText('Review')).toBeInTheDocument(); expect(screen.getByText('Done')).toBeInTheDocument(); expect(screen.getByText('Task 1')).toBeInTheDocument(); expect(screen.getByText('Task 2')).toBeInTheDocument(); }); it('filters tasks by search query', () => { render(); expect(screen.getByText('Task 1')).toBeInTheDocument(); expect(screen.queryByText('Task 2')).not.toBeInTheDocument(); }); it('calls onAddTask when + button clicked', () => { render(); // There are multiple + buttons (one per column) const addButtons = screen.getAllByText('+'); fireEvent.click(addButtons[0]); // Click first column (Todo) add button expect(mockOnAddTask).toHaveBeenCalledWith('todo'); }); it('calls onTaskClick when task clicked', () => { render(); fireEvent.click(screen.getByText('Task 1')); expect(mockOnTaskClick).toHaveBeenCalledWith(mockTasks[0]); }); });