/
custom_input.test.jsx
125 lines (104 loc) · 3.45 KB
/
custom_input.test.jsx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
import React from 'react';
import { mount } from 'enzyme';
import { expectComponent, extractPropsFromWrapper, mockComponent } from 'testUtils';
jest.mock('ui/input/text_input', () => mockComponent('text_input'));
jest.mock('ui/input/select_input', () => mockComponent('select_input'));
const getComponent = () => require('field/custom_input').default;
describe('CustomInput', () => {
const defaultProps = {
iconUrl: 'iconUrl',
placeholder: 'placeholder',
name: 'custom_input',
model: {},
validator: 'validator'
};
beforeEach(() => {
jest.resetModules();
jest.mock('core/index', () => ({
id: () => 1
}));
jest.mock('field/actions', () => ({
changeField: jest.fn(),
startOptionSelection: jest.fn()
}));
jest.mock('field/index', () => ({
getFieldInvalidHint: (model, name) => `invalid-hint-${name}`,
getFieldLabel: jest.fn(),
getFieldValue: (model, name) => `field-value-${name}`,
isFieldVisiblyInvalid: () => true
}));
jest.mock('store/index', () => ({
swap: jest.fn(),
updateEntity: 'updateEntity'
}));
});
describe('when type === select', () => {
beforeEach(() => defaultProps.type = 'select');
it('renders correctly as a SelectInput', () => {
const CustomInput = getComponent();
expectComponent(
<CustomInput
{...defaultProps}
/>
).toMatchSnapshot();
});
it('sets isValid as true when `isFieldVisiblyInvalid` is false', () => {
require('field/index').isFieldVisiblyInvalid = () => false;
let CustomInput = getComponent();
expectComponent(
<CustomInput
{...defaultProps}
/>
).toMatchSnapshot();
});
it('calls `startOptionSelection` when clicked', () => {
let CustomInput = getComponent();
const wrapper = mount(<CustomInput {...defaultProps} />);
const props = extractPropsFromWrapper(wrapper);
props.onClick();
const {mock} = require('field/actions').startOptionSelection;
expect(mock.calls.length).toBe(1);
expect(mock.calls[0]).toMatchSnapshot();
});
});
describe('when type == input', () => {
beforeEach(() => defaultProps.type = 'input');
it('renders correctly as a TextInput', () => {
const CustomInput = getComponent();
expectComponent(
<CustomInput
{...defaultProps}
/>
).toMatchSnapshot();
});
it('sets isValid as true when `isFieldVisiblyInvalid` is false', () => {
require('field/index').isFieldVisiblyInvalid = () => false;
let CustomInput = getComponent();
expectComponent(
<CustomInput
{...defaultProps}
/>
).toMatchSnapshot();
});
it('calls `changeField` when changed', () => {
let CustomInput = getComponent();
const wrapper = mount(<CustomInput {...defaultProps} />);
const props = extractPropsFromWrapper(wrapper);
props.onChange({ target: { value: 'newUser' } });
const {mock} = require('field/actions').changeField;
expect(mock.calls.length).toBe(1);
expect(mock.calls[0]).toMatchSnapshot();
});
});
describe('when type == checkbox', () => {
beforeEach(() => defaultProps.type = 'checkbox');
it('renders correctly as a CheckBoxInput', () => {
const CustomInput = getComponent();
expectComponent(
<CustomInput
{...defaultProps}
/>
).toMatchSnapshot();
});
});
});