import { render, screen } from '@testing-library/react'; import userEvent from '@testing-library/user-event'; import { describe, expect, it, vi } from 'vitest'; import { Input } from '../input'; describe('Input', () => { it('renders an input element', () => { render(); expect(screen.getByPlaceholderText('Enter text')).toBeInTheDocument(); }); it('accepts and displays typed value', async () => { render(); const input = screen.getByPlaceholderText('Type here'); await userEvent.type(input, 'Hello'); expect(input).toHaveValue('Hello'); }); it('applies type attribute', () => { render(); expect(screen.getByPlaceholderText('Email')).toHaveAttribute('type', 'email'); }); it('is disabled when disabled prop is set', () => { render(); expect(screen.getByPlaceholderText('Disabled')).toBeDisabled(); }); it('calls onChange handler', async () => { const onChange = vi.fn(); render(); await userEvent.type(screen.getByPlaceholderText('Input'), 'a'); expect(onChange).toHaveBeenCalled(); }); it('applies custom className', () => { render(); expect(screen.getByPlaceholderText('Custom')).toHaveClass('my-class'); }); });