Skip to content

Commit

Permalink
Merge pull request #59 from yuchonghua/master
Browse files Browse the repository at this point in the history
Validator supports Promise
  • Loading branch information
yiminghe committed Aug 16, 2017
2 parents 3bb6943 + 9f37f71 commit b859921
Show file tree
Hide file tree
Showing 2 changed files with 147 additions and 1 deletion.
143 changes: 143 additions & 0 deletions __tests__/promise.spec.js
@@ -0,0 +1,143 @@
import Schema from '../src/';

describe('validator', () => {
it('works', (done) => {
new Schema({
v: [{
validator(rule, value) {
return Promise.reject(new Error('e1'));
},
}, {
validator(rule, value) {
return Promise.reject(new Error('e2'));
},
}],
v2: [{
validator(rule, value) {
return Promise.reject(new Error('e3'));
},
}],
}).validate({
v: 2,
}, (errors) => {
expect(errors.length).toBe(3);
expect(errors[0].message).toBe('e1');
expect(errors[1].message).toBe('e2');
expect(errors[2].message).toBe('e3');
done();
});
});

it('first works', (done) => {
new Schema({
v: [{
validator(rule, value) {
return Promise.reject(new Error('e1'));
},
}, {
validator(rule, value) {
return Promise.reject(new Error('e2'));
},
}],
v2: [{
validator(rule, value) {
return Promise.reject(new Error('e3'));
},
}],
}).validate({
v: 2,
v2: 1,
}, {
first: true,
}, (errors) => {
expect(errors.length).toBe(1);
expect(errors[0].message).toBe('e1');
done();
});
});

describe('firstFields', () => {
it('works for true', (done) => {
new Schema({
v: [{
validator(rule, value) {
return Promise.reject(new Error('e1'));
},
}, {
validator(rule, value) {
return Promise.reject(new Error('e2'));
},
}],

v2: [{
validator(rule, value) {
return Promise.reject(new Error('e3'));
},
}],
v3: [{
validator(rule, value) {
return Promise.reject(new Error('e4'));
},
}, {
validator(rule, value) {
return Promise.reject(new Error('e5'));
},
}],
}).validate({
v: 1,
v2: 1,
v3: 1,
}, {
firstFields: true,
}, (errors) => {
expect(errors.length).toBe(3);
expect(errors[0].message).toBe('e1');
expect(errors[1].message).toBe('e3');
expect(errors[2].message).toBe('e4');
done();
});
});

it('works for array', (done) => {
new Schema({
v: [{
validator(rule, value) {
return Promise.reject(new Error('e1'));
},
}, {
validator(rule, value) {
return Promise.reject(new Error('e2'));
},
}],

v2: [{
validator(rule, value) {
return Promise.reject(new Error('e3'));
},
}],
v3: [{
validator(rule, value) {
return Promise.reject(new Error('e4'));
},
}, {
validator(rule, value) {
return Promise.reject(new Error('e5'));
},
}],
}).validate({
v: 1,
v2: 1,
v3: 1,
}, {
firstFields: ['v'],
}, (errors) => {
expect(errors.length).toBe(4);
expect(errors[0].message).toBe('e1');
expect(errors[1].message).toBe('e3');
expect(errors[2].message).toBe('e4');
expect(errors[3].message).toBe('e5');
done();
});
});
});
});
5 changes: 4 additions & 1 deletion src/index.js
Expand Up @@ -211,8 +211,11 @@ Schema.prototype = {
}
}

rule.validator(
const res = rule.validator(
rule, data.value, cb, data.source, options);
if (res && res.then) {
res.then(() => cb(), e => cb(e));
}
}, (results) => {
complete(results);
});
Expand Down

0 comments on commit b859921

Please sign in to comment.