mirror of
https://github.com/atlanticbiomedical/biomedjs.git
synced 2025-07-02 00:47:26 -04:00
93 lines
3.1 KiB
JavaScript
93 lines
3.1 KiB
JavaScript
![]() |
var chai = require('chai');
|
||
|
var expect = chai.expect;
|
||
|
var request = require('supertest');
|
||
|
|
||
|
var app;
|
||
|
var errorMessage = 'Default error message';
|
||
|
var mustBeTwoDigitsMessage = 'testparam must have two digits';
|
||
|
var mustBeIntegerMessage = 'testparam must be an integer';
|
||
|
|
||
|
function validation(req, res) {
|
||
|
req.checkParams('testparam', errorMessage)
|
||
|
.notEmpty() // with default message
|
||
|
.isInt().withMessage(mustBeIntegerMessage)
|
||
|
.isInt() // with default message
|
||
|
.isLength(2, 2).withMessage(mustBeTwoDigitsMessage);
|
||
|
var errors = req.validationErrors();
|
||
|
if (errors) {
|
||
|
return res.send(errors);
|
||
|
}
|
||
|
res.send({ testparam: req.params.testparam });
|
||
|
}
|
||
|
|
||
|
function fail(expectedMessage) {
|
||
|
if (Array.isArray(expectedMessage)) {
|
||
|
return function(body, length) {
|
||
|
expect(body).to.have.length(length);
|
||
|
expect(expectedMessage).to.have.length(length);
|
||
|
for (var i = 0; i < length; ++i) {
|
||
|
expect(body[i]).to.have.property('msg', expectedMessage[i]);
|
||
|
}
|
||
|
};
|
||
|
}
|
||
|
return function(body, length) {
|
||
|
expect(body).to.have.length(length);
|
||
|
expect(body[0]).to.have.property('msg', expectedMessage);
|
||
|
};
|
||
|
}
|
||
|
|
||
|
function pass(body) {
|
||
|
expect(body).to.have.property('testparam', '42');
|
||
|
}
|
||
|
|
||
|
function getRoute(path, test, length, done) {
|
||
|
request(app)
|
||
|
.get(path)
|
||
|
.end(function(err, res) {
|
||
|
test(res.body, length);
|
||
|
done();
|
||
|
});
|
||
|
}
|
||
|
|
||
|
// This before() is required in each set of tests in
|
||
|
// order to use a new validation function in each file
|
||
|
before(function() {
|
||
|
delete require.cache[require.resolve('./helpers/app')];
|
||
|
app = require('./helpers/app')(validation);
|
||
|
});
|
||
|
|
||
|
describe('#withMessage()', function() {
|
||
|
it('should return one error per validation failure, with custom message where defined', function(done) {
|
||
|
getRoute('/test', fail([mustBeIntegerMessage, errorMessage, mustBeTwoDigitsMessage]), 3, done);
|
||
|
});
|
||
|
|
||
|
it('should return four errors when param is missing, with default message for the first and third errors, and custom messages for the rest, as defined', function(done) {
|
||
|
getRoute('/', fail([errorMessage, mustBeIntegerMessage, errorMessage, mustBeTwoDigitsMessage]), 4, done);
|
||
|
});
|
||
|
|
||
|
it('should return a success when param validates', function(done) {
|
||
|
getRoute('/42', pass, null, done);
|
||
|
});
|
||
|
|
||
|
it('should provide a custom message when an invalid value is provided, and the validation is followed by withMessage', function(done) {
|
||
|
getRoute('/199', fail(mustBeTwoDigitsMessage), 1, done);
|
||
|
});
|
||
|
|
||
|
it('should update the error message only if the preceeding validation was the one to fail', function() {
|
||
|
var validator = require('../lib/express_validator')();
|
||
|
var req = {
|
||
|
body: {
|
||
|
testParam: 'abc'
|
||
|
}
|
||
|
};
|
||
|
|
||
|
validator(req, {}, function() {});
|
||
|
req.check('testParam', 'Default Error Message')
|
||
|
.isInt() // should produce 'Default Error Message'
|
||
|
.isLength(2).withMessage('Custom Error Message');
|
||
|
|
||
|
expect(req.validationErrors()).to.deep.equal([
|
||
|
{ param: 'testParam', msg: 'Default Error Message', value: 'abc' }
|
||
|
]);
|
||
|
});
|
||
|
});
|