mirror of https://gitee.com/bigwinds/arangodb
440 lines
12 KiB
JavaScript
Executable File
440 lines
12 KiB
JavaScript
Executable File
// Load modules
|
|
|
|
var Lab = require('lab');
|
|
var Joi = require('../lib');
|
|
var Helper = require('./helper');
|
|
|
|
|
|
// Declare internals
|
|
|
|
var internals = {};
|
|
|
|
|
|
// Test shortcuts
|
|
|
|
var expect = Lab.expect;
|
|
var before = Lab.before;
|
|
var after = Lab.after;
|
|
var describe = Lab.experiment;
|
|
var it = Lab.test;
|
|
|
|
|
|
describe('number', function () {
|
|
|
|
it('fails on boolean', function (done) {
|
|
|
|
var schema = Joi.number();
|
|
Helper.validate(schema, [
|
|
[true, false],
|
|
[false, false]
|
|
], done);
|
|
});
|
|
|
|
describe('#validate', function () {
|
|
|
|
it('should, by default, allow undefined', function (done) {
|
|
|
|
Helper.validate(Joi.number(), [
|
|
[undefined, true]
|
|
], done);
|
|
});
|
|
|
|
it('should, when .required(), deny undefined', function (done) {
|
|
|
|
Helper.validate(Joi.number().required(), [
|
|
[undefined, false]
|
|
], done);
|
|
});
|
|
|
|
it('should return false for denied value', function (done) {
|
|
|
|
var text = Joi.number().invalid(50);
|
|
text.validate(50, function (err, value) {
|
|
|
|
expect(err).to.exist;
|
|
done();
|
|
});
|
|
});
|
|
|
|
it('should validate integer', function (done) {
|
|
|
|
var t = Joi.number().integer();
|
|
Helper.validate(t, [
|
|
[100, true],
|
|
[0, true],
|
|
[null, false],
|
|
[1.02, false],
|
|
[0.01, false]
|
|
], done);
|
|
});
|
|
|
|
it('can accept string numbers', function (done) {
|
|
|
|
var t = Joi.number();
|
|
Helper.validate(t, [
|
|
['1', true],
|
|
['100', true],
|
|
['1e3', true],
|
|
['1 some text', false],
|
|
['\t\r', false],
|
|
[' ', false],
|
|
[' 2', true],
|
|
['\t\r43', true],
|
|
['43 ', true],
|
|
['', false]
|
|
], done);
|
|
});
|
|
|
|
it('required validates correctly', function (done) {
|
|
|
|
var t = Joi.number().required();
|
|
Helper.validate(t, [
|
|
[NaN, false],
|
|
['100', true]
|
|
], done);
|
|
});
|
|
|
|
it('converts an object string to a number', function (done) {
|
|
|
|
var config = { a: Joi.number() };
|
|
var obj = { a: '123' };
|
|
|
|
Joi.compile(config).validate(obj, function (err, value) {
|
|
|
|
expect(err).to.not.exist;
|
|
expect(value.a).to.equal(123);
|
|
done();
|
|
});
|
|
});
|
|
|
|
it('converts a string to a number', function (done) {
|
|
|
|
Joi.number().validate('1', function (err, value) {
|
|
|
|
expect(err).to.not.exist;
|
|
expect(value).to.equal(1);
|
|
done();
|
|
});
|
|
});
|
|
|
|
it('errors on null', function (done) {
|
|
|
|
Joi.number().validate(null, function (err, value) {
|
|
|
|
expect(err).to.exist;
|
|
expect(value).to.equal(null);
|
|
done();
|
|
});
|
|
});
|
|
|
|
it('should handle combination of min and max', function (done) {
|
|
|
|
var rule = Joi.number().min(8).max(10);
|
|
Helper.validate(rule, [
|
|
[1, false],
|
|
[11, false],
|
|
[8, true],
|
|
[9, true],
|
|
[null, false]
|
|
], done);
|
|
});
|
|
|
|
it('should handle combination of min, max, and null allowed', function (done) {
|
|
|
|
var rule = Joi.number().min(8).max(10).allow(null);
|
|
Helper.validate(rule, [
|
|
[1, false],
|
|
[11, false],
|
|
[8, true],
|
|
[9, true],
|
|
[null, true]
|
|
], done);
|
|
});
|
|
|
|
it('should handle combination of min and positive', function (done) {
|
|
|
|
var rule = Joi.number().min(-3).positive();
|
|
Helper.validate(rule, [
|
|
[1, true],
|
|
[-2, false],
|
|
[8, true],
|
|
[null, false]
|
|
], done);
|
|
});
|
|
|
|
it('should handle combination of max and positive', function (done) {
|
|
|
|
var rule = Joi.number().max(5).positive();
|
|
Helper.validate(rule, [
|
|
[4, true],
|
|
[-2, false],
|
|
[8, false],
|
|
[null, false]
|
|
], done);
|
|
});
|
|
|
|
it('should handle combination of min and negative', function (done) {
|
|
|
|
var rule = Joi.number().min(-3).negative();
|
|
Helper.validate(rule, [
|
|
[4, false],
|
|
[-2, true],
|
|
[-4, false],
|
|
[null, false]
|
|
], done);
|
|
});
|
|
|
|
it('should handle combination of negative and positive', function (done) {
|
|
|
|
var rule = Joi.number().negative().positive();
|
|
Helper.validate(rule, [
|
|
[4, false],
|
|
[-2, false],
|
|
[0, false],
|
|
[null, false]
|
|
], done);
|
|
});
|
|
|
|
it('should handle combination of negative and allow', function (done) {
|
|
|
|
var rule = Joi.number().negative().allow(1);
|
|
Helper.validate(rule, [
|
|
[1, true],
|
|
[-10, true],
|
|
[8, false],
|
|
[0, false],
|
|
[null, false]
|
|
], done);
|
|
});
|
|
|
|
it('should handle combination of positive and allow', function (done) {
|
|
|
|
var rule = Joi.number().positive().allow(-1);
|
|
Helper.validate(rule, [
|
|
[1, true],
|
|
[-1, true],
|
|
[8, true],
|
|
[-10, false],
|
|
[null, false]
|
|
], done);
|
|
});
|
|
|
|
it('should handle combination of positive, allow, and null allowed', function (done) {
|
|
|
|
var rule = Joi.number().positive().allow(-1).allow(null);
|
|
Helper.validate(rule, [
|
|
[1, true],
|
|
[-1, true],
|
|
[8, true],
|
|
[-10, false],
|
|
[null, true]
|
|
], done);
|
|
});
|
|
|
|
it('should handle combination of negative, allow, and null allowed', function (done) {
|
|
|
|
var rule = Joi.number().negative().allow(1).allow(null);
|
|
Helper.validate(rule, [
|
|
[1, true],
|
|
[-10, true],
|
|
[8, false],
|
|
[0, false],
|
|
[null, true]
|
|
], done);
|
|
});
|
|
|
|
it('should handle combination of positive, allow, null allowed, and invalid', function (done) {
|
|
|
|
var rule = Joi.number().positive().allow(-1).allow(null).invalid(1);
|
|
Helper.validate(rule, [
|
|
[1, false],
|
|
[-1, true],
|
|
[8, true],
|
|
[-10, false],
|
|
[null, true]
|
|
], done);
|
|
});
|
|
|
|
it('should handle combination of negative, allow, null allowed, and invalid', function (done) {
|
|
|
|
var rule = Joi.number().negative().allow(1).allow(null).invalid(-5);
|
|
Helper.validate(rule, [
|
|
[1, true],
|
|
[-10, true],
|
|
[-5, false],
|
|
[8, false],
|
|
[0, false],
|
|
[null, true]
|
|
], done);
|
|
});
|
|
|
|
it('should handle combination of min, max, and allow', function (done) {
|
|
|
|
var rule = Joi.number().min(8).max(10).allow(1);
|
|
Helper.validate(rule, [
|
|
[1, true],
|
|
[11, false],
|
|
[8, true],
|
|
[9, true],
|
|
[null, false]
|
|
], done);
|
|
});
|
|
|
|
it('should handle combination of min, max, allow, and null allowed', function (done) {
|
|
|
|
var rule = Joi.number().min(8).max(10).allow(1).allow(null);
|
|
Helper.validate(rule, [
|
|
[1, true],
|
|
[11, false],
|
|
[8, true],
|
|
[9, true],
|
|
[null, true]
|
|
], done);
|
|
});
|
|
|
|
it('should handle combination of min, max, allow, and invalid', function (done) {
|
|
|
|
var rule = Joi.number().min(8).max(10).allow(1).invalid(9);
|
|
Helper.validate(rule, [
|
|
[1, true],
|
|
[11, false],
|
|
[8, true],
|
|
[9, false],
|
|
[null, false]
|
|
], done);
|
|
});
|
|
|
|
it('should handle combination of min, max, allow, invalid, and null allowed', function (done) {
|
|
|
|
var rule = Joi.number().min(8).max(10).allow(1).invalid(9).allow(null);
|
|
Helper.validate(rule, [
|
|
[1, true],
|
|
[11, false],
|
|
[8, true],
|
|
[9, false],
|
|
[null, true]
|
|
], done);
|
|
});
|
|
|
|
it('should handle combination of min, max, and integer', function (done) {
|
|
|
|
var rule = Joi.number().min(8).max(10).integer();
|
|
Helper.validate(rule, [
|
|
[1, false],
|
|
[11, false],
|
|
[8, true],
|
|
[9, true],
|
|
[9.1, false],
|
|
[null, false]
|
|
], done);
|
|
});
|
|
|
|
it('should handle combination of min, max, integer, and allow', function (done) {
|
|
|
|
var rule = Joi.number().min(8).max(10).integer().allow(9.1);
|
|
Helper.validate(rule, [
|
|
[1, false],
|
|
[11, false],
|
|
[8, true],
|
|
[9, true],
|
|
[9.1, true],
|
|
[9.2, false],
|
|
[null, false]
|
|
], done);
|
|
});
|
|
|
|
it('should handle combination of min, max, integer, allow, and invalid', function (done) {
|
|
|
|
var rule = Joi.number().min(8).max(10).integer().allow(9.1).invalid(8);
|
|
Helper.validate(rule, [
|
|
[1, false],
|
|
[11, false],
|
|
[8, false],
|
|
[9, true],
|
|
[9.1, true],
|
|
[9.2, false],
|
|
[null, false]
|
|
], done);
|
|
});
|
|
|
|
it('should handle combination of min, max, integer, allow, invalid, and null allowed', function (done) {
|
|
|
|
var rule = Joi.number().min(8).max(10).integer().allow(9.1).invalid(8).allow(null);
|
|
Helper.validate(rule, [
|
|
[1, false],
|
|
[11, false],
|
|
[8, false],
|
|
[9, true],
|
|
[9.1, true],
|
|
[9.2, false],
|
|
[null, true]
|
|
], done);
|
|
});
|
|
});
|
|
|
|
it('should instantiate separate copies on invocation', function (done) {
|
|
|
|
var result1 = Joi.number().min(5);
|
|
var result2 = Joi.number().max(5);
|
|
|
|
expect(Object.keys(result1)).to.not.equal(Object.keys(result2));
|
|
done();
|
|
});
|
|
|
|
it('should show resulting object with #valueOf', function (done) {
|
|
|
|
var result = Joi.number().min(5);
|
|
expect(result.valueOf()).to.exist;
|
|
done();
|
|
});
|
|
|
|
describe('error message', function () {
|
|
|
|
it('should display correctly for int type', function (done) {
|
|
|
|
var t = Joi.number().integer();
|
|
Joi.compile(t).validate('1.1', function (err, value) {
|
|
|
|
expect(err.message).to.contain('integer');
|
|
done();
|
|
});
|
|
});
|
|
});
|
|
|
|
describe('#min', function () {
|
|
|
|
it('throws when limit is not a number', function (done) {
|
|
|
|
expect(function () {
|
|
|
|
Joi.number().min('a');
|
|
}).to.throw('limit must be an integer');
|
|
done();
|
|
});
|
|
|
|
it('supports 64bit numbers', function (done) {
|
|
|
|
var schema = Joi.number().min(1394035612500);
|
|
var input = 1394035612552
|
|
|
|
schema.validate(input, function (err, value) {
|
|
|
|
expect(err).to.not.exist;
|
|
expect(value).to.equal(input);
|
|
done();
|
|
});
|
|
});
|
|
});
|
|
|
|
describe('#max', function () {
|
|
|
|
it('throws when limit is not a number', function (done) {
|
|
|
|
expect(function () {
|
|
|
|
Joi.number().max('a');
|
|
}).to.throw('limit must be an integer');
|
|
done();
|
|
});
|
|
});
|
|
}); |