Skip to content
This repository was archived by the owner on Nov 26, 2021. It is now read-only.

Commit b063769

Browse files
committed
fix schemas
add test
1 parent 159ae1a commit b063769

4 files changed

Lines changed: 104 additions & 11 deletions

File tree

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "react-validate-framework",
3-
"version": "0.9.3",
3+
"version": "0.9.4",
44
"description": "React validation framework.",
55
"main": "lib/index.js",
66
"scripts": {

src/FormControl.jsx

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,8 @@ export default (schemas = {}, methods) => FormComponent => (
3232
classNames: {},
3333
};
3434

35+
schemas = Object.assign({}, schemas);
36+
3537
constructor(props) {
3638
super(props);
3739
const {
@@ -127,7 +129,7 @@ export default (schemas = {}, methods) => FormComponent => (
127129
*/
128130
get isAllValid() {
129131
const { fields } = this.state;
130-
return Object.keys(schemas)
132+
return Object.keys(this.schemas)
131133
.every(name => fields[name] && fields[name].result);
132134
}
133135

@@ -160,7 +162,7 @@ export default (schemas = {}, methods) => FormComponent => (
160162
const { classNames } = this.props;
161163
const { fields } = this.state;
162164
// No schema is not to validate
163-
const schema = schemas[name] && Object.assign(schemas[name], { value });
165+
const schema = this.schemas[name] && Object.assign(this.schemas[name], { value });
164166
const { result, error } = schema ? this.validator.validateByField(schema) : {};
165167
// Assembly class name
166168
// Validation success and validation failure Add the appropriate class
@@ -271,7 +273,7 @@ export default (schemas = {}, methods) => FormComponent => (
271273
* @param schema
272274
*/
273275
addSchemas = (schema) => {
274-
Object.assign(schemas, schema);
276+
Object.assign(this.schemas, schema);
275277
};
276278

277279
/**
@@ -281,7 +283,7 @@ export default (schemas = {}, methods) => FormComponent => (
281283
removeSchemas = (...names) => {
282284
const { fields } = this.state;
283285
names.forEach((name) => {
284-
delete schemas[name]; // eslint-disable-line no-param-reassign
286+
delete this.schemas[name];
285287
});
286288
// Validate the deleted status
287289
this.validateFieldsByNames(...names);
@@ -342,7 +344,7 @@ export default (schemas = {}, methods) => FormComponent => (
342344

343345
// Validate all
344346
validate = () => {
345-
const names = Object.keys(schemas);
347+
const names = Object.keys(this.schemas);
346348
return this.validateByNames(...names);
347349
};
348350

test/TestApp.jsx

Lines changed: 25 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -36,12 +36,33 @@ export const TextApp3 = fromConnect({
3636
rules: 'required',
3737
messages: 'Can not be empty!',
3838
},
39+
sex: {
40+
rules: 'required',
41+
messages: 'Can not be empty!',
42+
},
43+
city: {
44+
rules: 'required',
45+
messages: 'Can not be empty!',
46+
},
47+
remarks: {
48+
rules: 'required',
49+
messages: 'Can not be empty!',
50+
},
3951
})(() => (
4052
<section>
41-
<Checkbox name="hobby" id="hobby1" />
42-
<label htmlFor="hobby1">hobby1</label>
43-
<Checkbox name="hobby" id="hobby2" />
44-
<label htmlFor="hobby2">hobby1</label>
53+
<Checkbox name="hobby" id="hobby1" value="1" />
54+
<Checkbox name="hobby" id="hobby2" value="2" />
55+
<Checkbox name="hobby" id="hobby3" value="3" />
4556
<Message name="hobby" />
57+
<Radio name="sex" id="sex1" value="1" />
58+
<Radio name="sex" id="sex2" value="2" />
59+
<Message name="sex" />
60+
<Select name="city">
61+
<option value="">option1</option>
62+
<option value="1">option2</option>
63+
</Select>
64+
<Message name="city" />
65+
<Textarea name="remarks" id="remarks" />
66+
<Message name="remarks" />
4667
</section>
4768
));

test/setup.js

Lines changed: 71 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
*/
44

55
import React from 'react';
6+
import { describe, it } from 'mocha';
67
import { expect } from 'chai';
78
import { shallow, render, mount } from 'enzyme';
89
import './jsdom';
@@ -36,6 +37,7 @@ describe('Test to create a basic form', () => {
3637

3738

3839
describe('Test Form change validation', () => {
40+
3941
it('The form is validated correctly', () => {
4042
const app = mount(
4143
<TextApp2
@@ -60,14 +62,82 @@ describe('Test Form change validation', () => {
6062
input.get(0).value = 'example#example.com';
6163
input.simulate('change');
6264
expect(label.text()).to.equal('Please enter a valid email address.');
65+
expect(app.node.validate()).to.equal(false);
6366
expect(app.node.isAllValid).to.equal(false);
6467
// Change
6568
input.get(0).value = 'example@example.com';
6669
input.simulate('change');
6770
expect(label.text()).to.be.empty;
6871
expect(input.props().className).to.contains('valid-success');
72+
expect(app.node.validate()).to.equal(true);
6973
expect(app.node.isAllValid).to.equal(true);
7074
});
7175

72-
// it('Initialize the parameter by function', () => {});
76+
it('API is executed correctly', () => {
77+
const app = mount(
78+
<TextApp2
79+
classNames={{
80+
static: 'form-control',
81+
success: 'valid-success',
82+
error: 'valid-error',
83+
}}
84+
values={{ email: '' }}
85+
/>,
86+
);
87+
// init
88+
app.node.init({ email2: '' });
89+
expect(app.node.formValues).to.have.property('email2');
90+
expect(app.node.validateByNames('email2')).to.equal(true);
91+
// add fields
92+
app.node.addFields({ email3: { value: '123#123.com' } });
93+
expect(app.node.formValues).to.have.property('email3');
94+
expect(app.node.validate()).to.equal(false);
95+
expect(app.node.validateByNames('email3')).to.equal(true);
96+
// add schemas
97+
app.node.addSchemas({ email4: { rules: 'isEmail' } });
98+
app.node.addFields({ email4: { value: '123#123.com' } });
99+
expect(app.node.validate()).to.equal(false);
100+
expect(app.node.validateByNames('email4')).to.equal(false);
101+
// change values
102+
app.node.changeValues({ email: '123@123.com', email4: '123@123.com' });
103+
expect(app.node.validateByNames('email')).to.equal(true);
104+
expect(app.node.validate()).to.equal(true);
105+
});
106+
107+
});
108+
109+
110+
describe('Test all types of forms', () => {
111+
112+
it('The all types of form is validated correctly', () => {
113+
const app = mount(
114+
<TextApp3
115+
classNames={{
116+
static: 'form-control',
117+
success: 'valid-success',
118+
error: 'valid-error',
119+
}}
120+
values={{
121+
hobby: ['1'],
122+
sex: '',
123+
city: '',
124+
remarks: '',
125+
}}
126+
/>,
127+
);
128+
app.find('#hobby2').simulate('change');
129+
expect(app.node.formValues.hobby.indexOf('2') !== -1).to.equal(true);
130+
app.find('#hobby3').simulate('change');
131+
expect(app.node.formValues.hobby.indexOf('3') !== -1).to.equal(true);
132+
app.find('#sex2').simulate('change');
133+
expect(app.node.formValues.sex).to.equal('2');
134+
app.find('select').get('0').value = '1';
135+
app.find('select').simulate('change');
136+
expect(app.node.formValues.city).to.equal('1');
137+
app.find('#remarks').get('0').value = 'abc';
138+
app.find('#remarks').simulate('change');
139+
expect(app.node.formValues.remarks).to.equal('abc');
140+
expect(app.node.validate()).to.equal(true);
141+
});
142+
73143
});

0 commit comments

Comments
 (0)