grommet
Version:
focus on the essential experience
236 lines (217 loc) • 6.83 kB
JavaScript
import React from 'react';
import 'jest-styled-components';
import { cleanup, fireEvent, render } from 'react-testing-library';
import { getByText } from 'dom-testing-library';
import { createPortal, expectPortal } from '../../../utils/portal';
import { Grommet } from '../../Grommet';
import { TextInput } from '..';
describe('TextInput', function () {
beforeEach(createPortal);
afterEach(cleanup);
test('basic', function () {
var _render = render(React.createElement(TextInput, {
name: "item"
})),
container = _render.container;
expect(container.firstChild).toMatchSnapshot();
});
test('suggestions', function (done) {
var onChange = jest.fn();
var onFocus = jest.fn();
var _render2 = render(React.createElement(TextInput, {
"data-testid": "test-input",
id: "item",
name: "item",
suggestions: ['test', 'test1'],
onChange: onChange,
onFocus: onFocus
})),
getByTestId = _render2.getByTestId,
container = _render2.container;
expect(container.firstChild).toMatchSnapshot();
fireEvent.focus(getByTestId('test-input'));
fireEvent.change(getByTestId('test-input'), {
target: {
value: ' '
}
});
setTimeout(function () {
expectPortal('text-input-drop__item').toMatchSnapshot();
expect(onChange).toBeCalled();
expect(onFocus).toBeCalled();
fireEvent(document, new MouseEvent('mousedown', {
bubbles: true,
cancelable: true
}));
expect(document.getElementById('text-input-drop__item')).toBeNull();
done();
}, 50);
});
test('complex suggestions', function (done) {
var _render3 = render(React.createElement(Grommet, null, React.createElement(TextInput, {
"data-testid": "test-input",
id: "item",
name: "item",
suggestions: [{
label: 'test',
value: 'test'
}, {
value: 'test1'
}]
}))),
getByTestId = _render3.getByTestId,
container = _render3.container;
expect(container.firstChild).toMatchSnapshot();
fireEvent.change(getByTestId('test-input'), {
target: {
value: ' '
}
});
setTimeout(function () {
expectPortal('text-input-drop__item').toMatchSnapshot();
fireEvent(document, new MouseEvent('mousedown', {
bubbles: true,
cancelable: true
}));
expect(document.getElementById('text-input-drop__item')).toBeNull();
done();
}, 50);
});
test('close suggestion drop', function (done) {
var _render4 = render(React.createElement(Grommet, null, React.createElement(TextInput, {
"data-testid": "test-input",
id: "item",
name: "item",
suggestions: ['test', 'test1']
}))),
getByTestId = _render4.getByTestId,
container = _render4.container;
expect(container.firstChild).toMatchSnapshot();
fireEvent.change(getByTestId('test-input'), {
target: {
value: ' '
}
});
setTimeout(function () {
expectPortal('text-input-drop__item').toMatchSnapshot();
fireEvent.keyDown(getByTestId('test-input'), {
key: 'Esc',
keyCode: 27,
which: 27
});
setTimeout(function () {
expect(document.getElementById('text-input-drop__item')).toBeNull();
expect(container.firstChild).toMatchSnapshot();
done();
}, 50);
}, 50);
});
test('select suggestion', function (done) {
var onSelect = jest.fn();
var _render5 = render(React.createElement(Grommet, null, React.createElement(TextInput, {
"data-testid": "test-input",
plain: true,
size: "large",
id: "item",
name: "item",
suggestions: ['test', 'test1'],
onSelect: onSelect
}))),
getByTestId = _render5.getByTestId,
container = _render5.container;
expect(container.firstChild).toMatchSnapshot();
fireEvent.change(getByTestId('test-input'), {
target: {
value: ' '
}
});
setTimeout(function () {
expectPortal('text-input-drop__item').toMatchSnapshot();
fireEvent.click(getByText(document, 'test1'));
expect(container.firstChild).toMatchSnapshot();
expect(document.getElementById('text-input-drop__item')).toBeNull();
expect(onSelect).toBeCalledWith(expect.objectContaining({
suggestion: 'test1'
}));
done();
}, 50);
});
test('select a suggestion', function () {
var onSelect = jest.fn();
var _render6 = render(React.createElement(Grommet, null, React.createElement(TextInput, {
"data-testid": "test-input",
id: "item",
name: "item",
suggestions: ['test', {
value: 'test1'
}],
onSelect: onSelect
}))),
getByTestId = _render6.getByTestId,
container = _render6.container;
expect(container.firstChild).toMatchSnapshot();
var input = getByTestId('test-input'); // pressing enter here nothing will happen
fireEvent.keyDown(input, {
keyCode: 13
}); // enter
fireEvent.keyDown(input, {
keyCode: 40
}); // down
fireEvent.keyDown(input, {
keyCode: 40
}); // down
fireEvent.keyDown(input, {
keyCode: 38
}); // up
fireEvent.keyDown(input, {
keyCode: 13
}); // enter
expect(onSelect).toBeCalledWith(expect.objectContaining({
suggestion: 'test'
}));
});
test('handles next and previous without suggestion', function () {
var onSelect = jest.fn();
var _render7 = render(React.createElement(Grommet, null, React.createElement(TextInput, {
"data-testid": "test-input",
id: "item",
name: "item",
onSelect: onSelect
}))),
getByTestId = _render7.getByTestId,
container = _render7.container;
expect(container.firstChild).toMatchSnapshot();
var input = getByTestId('test-input');
fireEvent.keyDown(input, {
keyCode: 40
});
fireEvent.keyDown(input, {
keyCode: 40
});
fireEvent.keyDown(input, {
keyCode: 38
});
fireEvent.keyDown(input, {
keyCode: 13
}); // enter
expect(onSelect).not.toBeCalled();
expect(container.firstChild).toMatchSnapshot();
});
['small', 'medium', 'large'].forEach(function (dropHeight) {
test(dropHeight + " drop height", function (done) {
var _render8 = render(React.createElement(TextInput, {
"data-testid": "test-input",
id: "item",
name: "item",
suggestions: ['test', 'test1'],
dropHeight: dropHeight
})),
getByTestId = _render8.getByTestId;
fireEvent.focus(getByTestId('test-input'));
setTimeout(function () {
expectPortal('text-input-drop__item').toMatchSnapshot();
done();
}, 50);
});
});
});