grafana/public/app/core/components/OptionsUI/NumberInput.test.tsx
Victor Marin e91135cf19
Fix NumberInput empty values (#57142)
* Fix NumberInput empty values

* tests

* tests
2022-10-18 16:59:34 +03:00

111 lines
2.6 KiB
TypeScript

import { render, screen, fireEvent } from '@testing-library/react';
import React from 'react';
import { NumberInput } from './NumberInput';
const setup = (min?: number, max?: number) => {
const onChange = jest.fn();
render(<NumberInput value={15} onChange={onChange} max={max} min={min} />);
return {
input: screen.getByTestId('input-wrapper').firstChild?.firstChild as HTMLInputElement,
onChange,
};
};
describe('NumberInput', () => {
it('updated input correctly', () => {
const data = setup();
const tests = [
{
value: '-10',
expected: -10,
onChangeCalledWith: -10,
},
{
value: '',
expected: null,
onChangeCalledWith: undefined,
},
{
value: '100',
expected: 100,
onChangeCalledWith: 100,
},
{
value: '1asd',
expected: null,
onChangeCalledWith: undefined,
},
{
value: -100,
expected: -100,
onChangeCalledWith: -100,
},
{
value: 20,
expected: 20,
onChangeCalledWith: 20,
},
{
value: 0,
expected: 0,
onChangeCalledWith: 0,
},
{
value: '0',
expected: 0,
onChangeCalledWith: 0,
},
];
tests.forEach((test, i) => {
fireEvent.blur(data.input, { target: { value: test.value } });
expect(data.onChange).toBeCalledWith(test.onChangeCalledWith);
expect(data.onChange).toBeCalledTimes(i + 1);
expect(data.input).toHaveValue(test.expected);
});
});
it('corrects input as per min and max', async () => {
const data = setup(-10, 10);
let input = data.input;
const tests = [
{
value: '-10',
expected: -10,
onChangeCalledWith: -10,
},
{
value: '-100',
expected: -10,
onChangeCalledWith: -10,
},
{
value: '10',
expected: 10,
onChangeCalledWith: 10,
},
{
value: '100',
expected: 10,
onChangeCalledWith: 10,
},
{
value: '5',
expected: 5,
onChangeCalledWith: 5,
},
];
tests.forEach((test, i) => {
input = screen.getByTestId('input-wrapper').firstChild?.firstChild as HTMLInputElement;
fireEvent.blur(input, { target: { value: test.value } });
expect(data.onChange).toBeCalledWith(test.onChangeCalledWith);
expect(data.onChange).toBeCalledTimes(i + 1);
expect(screen.getByTestId('input-wrapper').firstChild?.firstChild).toHaveValue(test.expected);
});
});
});