import { describe, it, expect } from 'vitest'; import { render, screen } from '@testing-library/react'; import { Input } from '../input'; describe('Input', () => { it('renders input element', () => { render(); expect(screen.getByRole('textbox')).toBeInTheDocument(); }); it('applies custom className', () => { render(); expect(screen.getByRole('textbox')).toHaveClass('custom-input'); }); it('handles different input types', () => { const { rerender } = render(); expect(screen.getByRole('textbox')).toHaveAttribute('type', 'text'); rerender(); expect(screen.getByTestId('email')).toHaveAttribute('type', 'email'); rerender(); expect(screen.getByTestId('password')).toHaveAttribute('type', 'password'); }); it('forwards ref correctly', () => { const ref = { current: null }; render(); expect(ref.current).toBeInstanceOf(HTMLInputElement); }); it('is disabled when disabled prop is true', () => { render(); expect(screen.getByRole('textbox')).toBeDisabled(); }); it('accepts placeholder', () => { render(); expect(screen.getByPlaceholderText('Enter text')).toBeInTheDocument(); }); it('handles onChange events', () => { render( { // onChange handler }} /> ); const input = screen.getByRole('textbox'); input.focus(); expect(input).toBeInTheDocument(); }); it('applies default styling classes', () => { render(); const input = screen.getByTestId('styled-input'); expect(input).toHaveClass('flex', 'h-10', 'w-full', 'rounded-md'); }); });