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