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');
});
});