import {render, screen, userEvent} from 'sentry-test/reactTestingLibrary'; import NumberInput from 'sentry/components/numberInput'; describe('NumberInput', function () { it('renders input', function () { render(); expect(screen.getByRole('textbox')).toHaveValue('5'); }); it('responds to key presses', async function () { render(); const input = screen.getByRole('textbox'); await userEvent.type(input, '{ArrowDown}'); expect(input).toHaveValue('4'); await userEvent.type(input, '{ArrowUp>2}'); expect(input).toHaveValue('6'); }); it('responds to increment/decrement button clicks', async function () { render(); const input = screen.getByRole('textbox'); await userEvent.click(screen.getByRole('button', {name: 'Decrease Test'})); expect(input).toHaveValue('4'); await userEvent.click(screen.getByRole('button', {name: 'Increase Test'})); expect(input).toHaveValue('5'); }); it('forces min/max values', async function () { render(); const input = screen.getByRole('textbox'); // Should not be able to press arrow down to get below 0 await userEvent.type(input, '{ArrowDown>5}'); expect(input).toHaveValue('0'); await userEvent.type(input, '{ArrowDown}'); expect(input).toHaveValue('0'); // Should not be able to press arrow up to get above 10 await userEvent.type(input, '{ArrowUp>10}'); expect(input).toHaveValue('10'); await userEvent.type(input, '{ArrowUp}'); expect(input).toHaveValue('10'); // Type "100" await userEvent.type(input, '0'); expect(input).toHaveValue('100'); // Click outside the input, the value should be clamped down to 10 await userEvent.click(document.body); expect(input).toHaveValue('10'); }); });