import { render, screen } from '@testing-library/react'; import userEvent from '@testing-library/user-event'; import { describe, expect, it, vi } from 'vitest'; import { CreateLeadDialog } from '../create-lead-dialog'; // Mock the hook const mockMutate = vi.fn(); vi.mock('@/lib/hooks/use-leads', () => ({ useCreateLead: () => ({ mutate: mockMutate, isPending: false, }), })); // Mock Dialog components with simplified versions vi.mock('@/components/ui/dialog', () => ({ Dialog: ({ children, open }: { children: React.ReactNode; open: boolean }) => open ?
{children}
: null, DialogContent: ({ children, className }: { children: React.ReactNode; className?: string }) => (
{children}
), DialogHeader: ({ children }: { children: React.ReactNode }) =>
{children}
, DialogTitle: ({ children }: { children: React.ReactNode }) =>

{children}

, DialogDescription: ({ children }: { children: React.ReactNode }) =>

{children}

, DialogFooter: ({ children }: { children: React.ReactNode }) =>
{children}
, })); describe('CreateLeadDialog', () => { beforeEach(() => { mockMutate.mockClear(); }); it('renders dialog when open', () => { render(); expect(screen.getByText('Thêm lead mới')).toBeInTheDocument(); }); it('does not render when closed', () => { render(); expect(screen.queryByText('Thêm lead mới')).not.toBeInTheDocument(); }); it('renders customer name input', () => { render(); expect(screen.getByLabelText('Tên khách hàng *')).toBeInTheDocument(); }); it('renders phone input', () => { render(); expect(screen.getByLabelText('Số điện thoại *')).toBeInTheDocument(); }); it('renders email input', () => { render(); expect(screen.getByLabelText('Email')).toBeInTheDocument(); }); it('renders source select', () => { render(); expect(screen.getByLabelText('Nguồn')).toBeInTheDocument(); }); it('renders score input', () => { render(); expect(screen.getByLabelText('Điểm (0-100)')).toBeInTheDocument(); }); it('renders notes textarea', () => { render(); expect(screen.getByLabelText('Ghi chú')).toBeInTheDocument(); }); it('renders cancel and submit buttons', () => { render(); expect(screen.getByText('Hủy')).toBeInTheDocument(); expect(screen.getByText('Tạo lead')).toBeInTheDocument(); }); it('calls onOpenChange when cancel clicked', async () => { const user = userEvent.setup(); const onOpenChange = vi.fn(); render(); await user.click(screen.getByText('Hủy')); expect(onOpenChange).toHaveBeenCalledWith(false); }); it('calls mutate when form is submitted', async () => { const user = userEvent.setup(); render(); await user.type(screen.getByLabelText('Tên khách hàng *'), 'Nguyễn Văn Test'); await user.type(screen.getByLabelText('Số điện thoại *'), '0901234567'); await user.click(screen.getByText('Tạo lead')); expect(mockMutate).toHaveBeenCalled(); }); it('renders description text', () => { render(); expect(screen.getByText('Nhập thông tin khách hàng tiềm năng')).toBeInTheDocument(); }); });