import { fireEvent, render, screen } from '@testing-library/react' import { InputNumber } from './index' jest.mock('react-i18next', () => ({ useTranslation: () => ({ t: (key: string) => key, }), })) describe('InputNumber Component', () => { const defaultProps = { onChange: jest.fn(), } afterEach(() => { jest.clearAllMocks() }) it('renders input with default values', () => { render() const input = screen.getByRole('textbox') expect(input).toBeInTheDocument() }) it('handles increment button click', () => { render() const incrementBtn = screen.getByRole('button', { name: /increment/i }) fireEvent.click(incrementBtn) expect(defaultProps.onChange).toHaveBeenCalledWith(6) }) it('handles decrement button click', () => { render() const decrementBtn = screen.getByRole('button', { name: /decrement/i }) fireEvent.click(decrementBtn) expect(defaultProps.onChange).toHaveBeenCalledWith(4) }) it('respects max value constraint', () => { render() const incrementBtn = screen.getByRole('button', { name: /increment/i }) fireEvent.click(incrementBtn) expect(defaultProps.onChange).not.toHaveBeenCalled() }) it('respects min value constraint', () => { render() const decrementBtn = screen.getByRole('button', { name: /decrement/i }) fireEvent.click(decrementBtn) expect(defaultProps.onChange).not.toHaveBeenCalled() }) it('handles direct input changes', () => { render() const input = screen.getByRole('textbox') fireEvent.change(input, { target: { value: '42' } }) expect(defaultProps.onChange).toHaveBeenCalledWith(42) }) it('handles empty input', () => { render() const input = screen.getByRole('textbox') fireEvent.change(input, { target: { value: '' } }) expect(defaultProps.onChange).toHaveBeenCalledWith(undefined) }) it('handles invalid input', () => { render() const input = screen.getByRole('textbox') fireEvent.change(input, { target: { value: 'abc' } }) expect(defaultProps.onChange).not.toHaveBeenCalled() }) it('displays unit when provided', () => { const unit = 'px' render() expect(screen.getByText(unit)).toBeInTheDocument() }) it('disables controls when disabled prop is true', () => { render() const input = screen.getByRole('textbox') const incrementBtn = screen.getByRole('button', { name: /increment/i }) const decrementBtn = screen.getByRole('button', { name: /decrement/i }) expect(input).toBeDisabled() expect(incrementBtn).toBeDisabled() expect(decrementBtn).toBeDisabled() }) })