mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
react-panel: Add test for Input with validation on blur
This commit is contained in:
parent
c722ea4f76
commit
58da6e8c26
53
public/app/core/components/Form/Input.test.tsx
Normal file
53
public/app/core/components/Form/Input.test.tsx
Normal file
@ -0,0 +1,53 @@
|
|||||||
|
import React from 'react';
|
||||||
|
import renderer from 'react-test-renderer';
|
||||||
|
import { shallow } from 'enzyme';
|
||||||
|
import { Input, EventsWithValidation } from './Input';
|
||||||
|
import { ValidationEvents } from 'app/types';
|
||||||
|
|
||||||
|
const TEST_ERROR_MESSAGE = 'Value must be empty or less than 3 chars';
|
||||||
|
const testBlurValidation: ValidationEvents = {
|
||||||
|
[EventsWithValidation.onBlur]: [
|
||||||
|
{
|
||||||
|
rule: (value: string) => {
|
||||||
|
if (!value || value.length < 3) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
},
|
||||||
|
errorMessage: TEST_ERROR_MESSAGE,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
};
|
||||||
|
|
||||||
|
describe('Input', () => {
|
||||||
|
it('renders correctly', () => {
|
||||||
|
const tree = renderer.create(<Input />).toJSON();
|
||||||
|
expect(tree).toMatchSnapshot();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should validate with error onBlur', () => {
|
||||||
|
const wrapper = shallow(<Input validationEvents={testBlurValidation} />);
|
||||||
|
const evt = {
|
||||||
|
persist: jest.fn,
|
||||||
|
target: {
|
||||||
|
value: 'I can not be more than 2 chars',
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
wrapper.find('input').simulate('blur', evt);
|
||||||
|
expect(wrapper.state('error')).toBe(TEST_ERROR_MESSAGE);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should validate without error onBlur', () => {
|
||||||
|
const wrapper = shallow(<Input validationEvents={testBlurValidation} />);
|
||||||
|
const evt = {
|
||||||
|
persist: jest.fn,
|
||||||
|
target: {
|
||||||
|
value: 'Hi',
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
wrapper.find('input').simulate('blur', evt);
|
||||||
|
expect(wrapper.state('error')).toBe(null);
|
||||||
|
});
|
||||||
|
});
|
@ -45,7 +45,7 @@ export class Input extends PureComponent<Props> {
|
|||||||
|
|
||||||
validatorAsync = (validationRules: ValidationRule[]) => {
|
validatorAsync = (validationRules: ValidationRule[]) => {
|
||||||
return evt => {
|
return evt => {
|
||||||
const errors = validate(evt.currentTarget.value, validationRules);
|
const errors = validate(evt.target.value, validationRules);
|
||||||
this.setState(prevState => {
|
this.setState(prevState => {
|
||||||
return {
|
return {
|
||||||
...prevState,
|
...prevState,
|
||||||
@ -60,6 +60,7 @@ export class Input extends PureComponent<Props> {
|
|||||||
Object.keys(EventsWithValidation).forEach((eventName: EventsWithValidation) => {
|
Object.keys(EventsWithValidation).forEach((eventName: EventsWithValidation) => {
|
||||||
if (hasValidationEvent(eventName, validationEvents) || restProps[eventName]) {
|
if (hasValidationEvent(eventName, validationEvents) || restProps[eventName]) {
|
||||||
inputElementProps[eventName] = async evt => {
|
inputElementProps[eventName] = async evt => {
|
||||||
|
evt.persist(); // Needed for async. https://reactjs.org/docs/events.html#event-pooling
|
||||||
if (hasValidationEvent(eventName, validationEvents)) {
|
if (hasValidationEvent(eventName, validationEvents)) {
|
||||||
await this.validatorAsync(validationEvents[eventName]).apply(this, [evt]);
|
await this.validatorAsync(validationEvents[eventName]).apply(this, [evt]);
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,11 @@
|
|||||||
|
// Jest Snapshot v1, https://goo.gl/fbAQLP
|
||||||
|
|
||||||
|
exports[`Input renders correctly 1`] = `
|
||||||
|
<div
|
||||||
|
className="our-custom-wrapper-class"
|
||||||
|
>
|
||||||
|
<input
|
||||||
|
className="gf-form-input"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
`;
|
Loading…
Reference in New Issue
Block a user