Skip to content

Commit 5794348

Browse files
committed
Add missing tests for fieldWrapper
1 parent 2e9c877 commit 5794348

File tree

3 files changed

+70
-3
lines changed

3 files changed

+70
-3
lines changed

packages/react-form-renderer/src/form-renderer/field-provider.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -87,9 +87,9 @@ FieldProvider.propTypes = {
8787
getFieldState: PropTypes.func,
8888
clearedValue: PropTypes.any,
8989
}),
90-
component: PropTypes.oneOfType(PropTypes.node, PropTypes.element, PropTypes.func),
90+
component: PropTypes.oneOfType([ PropTypes.node, PropTypes.element, PropTypes.func ]),
9191
render: PropTypes.func,
92-
children: PropTypes.oneOfType(PropTypes.node, PropTypes.element, PropTypes.func),
92+
children: PropTypes.oneOfType([ PropTypes.node, PropTypes.element, PropTypes.func ]),
9393
dataType: PropTypes.oneOf(Object.values(dataTypes)),
9494
name: PropTypes.string,
9595
clearOnUnmount: PropTypes.bool,

packages/react-form-renderer/src/form-renderer/field-wrapper.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ const FieldWrapper = ({ componentType, validate, component, ...rest }) => {
2424
}
2525

2626
const arrayValidator = composeValidators(validate);
27-
let result = arrayValidator(value ? value.length > 0 ? value : undefined : undefined);
27+
let result = arrayValidator(value && value.length > 0 ? value : undefined);
2828
if (typeof result === 'function') {
2929
result = result(value);
3030
}
Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
import React from 'react';
2+
import { mount } from 'enzyme';
3+
import { componentTypes } from '@data-driven-forms/react-form-renderer';
4+
import { Form } from 'react-final-form';
5+
6+
import FieldWrapper from '../../form-renderer/field-wrapper';
7+
import FieldProvider from '../../form-renderer/field-provider';
8+
9+
describe('fieldWrapper', () => {
10+
const Component = (props) => <div>{ JSON.stringify(props, null, 2) }</div>;
11+
12+
it('use arrayValidator if it is fieldArray', () => {
13+
const wrapper = mount(<Form
14+
onSubmit={ jest.fn() }
15+
render={ () => <FieldWrapper
16+
componentType={ componentTypes.FIELD_ARRAY }
17+
validate={ [
18+
(value) => value === 4,
19+
] }
20+
component={ Component }
21+
/> }
22+
/>);
23+
24+
expect(wrapper.find(Component).props().arrayValidator).toEqual(expect.any(Function));
25+
expect(wrapper.find(FieldProvider).props().validate).toEqual(undefined);
26+
});
27+
28+
it('do not use arrayValidator', () => {
29+
const wrapper = mount(<Form
30+
onSubmit={ jest.fn() }
31+
render={ () => <FieldWrapper
32+
componentType={ componentTypes.TEXT_FIELD }
33+
validate={ [
34+
(value) => value === 4,
35+
] }
36+
component={ Component }
37+
/> }
38+
/>);
39+
40+
expect(wrapper.find(Component).props().arrayValidator).toEqual(undefined);
41+
expect(wrapper.find(FieldProvider).props().validate).toEqual(expect.any(Function));
42+
});
43+
44+
it('custom component - should not be wrapper in field provider', () => {
45+
const wrapper = mount(<Form
46+
onSubmit={ jest.fn() }
47+
render={ () => <FieldWrapper
48+
componentType='custom type'
49+
component={ Component }
50+
/> }
51+
/>);
52+
53+
expect(wrapper.find(FieldProvider)).toHaveLength(0);
54+
});
55+
56+
it('data driven forms component - should be wrapper in field provider', () => {
57+
const wrapper = mount(<Form
58+
onSubmit={ jest.fn() }
59+
render={ () => <FieldWrapper
60+
componentType={ componentTypes.TEXT_FIELD }
61+
component={ Component }
62+
/> }
63+
/>);
64+
65+
expect(wrapper.find(FieldProvider)).toHaveLength(1);
66+
});
67+
});

0 commit comments

Comments
 (0)