import { fireEvent, render, screen, waitFor } from '@testing-library/react'; import { CardForm } from '@/app/(platform)/(dashboard)/board/[boardId]/_components/card-form'; import { toast } from 'sonner'; jest.mock('@/hooks/use-action', () => ({ useAction: jest.fn().mockImplementation(() => ({ execute: jest.fn().mockImplementation(({ title }) => { toast.success(`Card "${title}" created`); }), })), })); jest.mock('next/navigation', () => ({ useParams: jest.fn(() => ({ boardId: 'test-board-id', })), })); let isEditing; const mockEnableEditing = jest.fn(() => { isEditing = true; }); const mockDisableEditing = jest.fn(() => { isEditing = false; }); const mockListId = 'test-list-id'; describe('CardForm', () => { it('should render correctly in browser environment', () => { render( ); expect( screen.getByPlaceholderText(/Enter a title for this card\.\.\./i) ).toBeInTheDocument(); }); it('should create a new card when form is submitted using button', async () => { render( ); const input = await screen.getByPlaceholderText( 'Enter a title for this card...' ); fireEvent.change(input, { target: { value: 'New Card' } }); fireEvent.click(screen.getByText(/Add Card/i)); await waitFor(() => { expect(toast.success).toHaveBeenCalledWith('Card "New Card" created'); }); }); it('should create a new card when form is submitted using the enter key', async () => { render( ); const input = await screen.getByPlaceholderText( 'Enter a title for this card...' ); fireEvent.change(input, { target: { value: 'New Card' } }); fireEvent.keyDown(input, { key: 'Enter', code: 'Enter' }); await waitFor(() => { expect(toast.success).toHaveBeenCalledWith('Card "New Card" created'); }); }); });