Comparing version 2.0.3 to 2.1.0
@@ -62,4 +62,6 @@ { | ||
"regex": "the value of {{key}} must match the regular expression {{value}}", | ||
"email": "The value of {{key}} must be a valid email" | ||
"email": "The value of {{key}} must be a valid email", | ||
"isoDate": "the value of {{key}} must be a valid ISO 8601 date", | ||
"guid": "the value of {{key}} must be a valid GUID" | ||
} | ||
} |
@@ -436,3 +436,3 @@ // Load modules | ||
internals.Any.prototype._describe = function () { | ||
internals.Any.prototype.describe = function () { | ||
@@ -439,0 +439,0 @@ var description = { |
@@ -72,7 +72,7 @@ // Load modules | ||
if (schema instanceof Any) { | ||
return schema._describe(); | ||
return schema.describe(); | ||
} | ||
return exports.object(schema)._describe(); | ||
return exports.object(schema).describe(); | ||
}; | ||
@@ -31,5 +31,9 @@ // Load modules | ||
internals.Number.prototype._convert = function (value) { | ||
if (typeof value === 'string') { | ||
var number = parseFloat(value); | ||
if (isNaN(number) || !isFinite(value)) { | ||
return NaN; | ||
} | ||
if (typeof value === 'string' && value) { | ||
return Number(value); | ||
return number; | ||
} | ||
@@ -88,1 +92,31 @@ | ||
}; | ||
internals.Number.prototype.negative = function () { | ||
this._test('negative', function (value, state, options) { | ||
if (value < 0) { | ||
return null; | ||
} | ||
return Any.error('number.negative', { value: value }, state); | ||
}); | ||
return this; | ||
}; | ||
internals.Number.prototype.positive = function () { | ||
this._test('positive', function (value, state, options) { | ||
if (value > 0) { | ||
return null; | ||
} | ||
return Any.error('number.positive', { value: value }, state); | ||
}); | ||
return this; | ||
}; |
@@ -52,5 +52,5 @@ // Load modules | ||
internals.Object.prototype._describe = function () { | ||
internals.Object.prototype.describe = function () { | ||
var description = Any.prototype._describe.call(this); | ||
var description = Any.prototype.describe.call(this); | ||
@@ -70,6 +70,6 @@ if (this._children) { | ||
description.children[key] = description.children[key] || []; | ||
description.children[key].push(config._describe()); | ||
description.children[key].push(config.describe()); | ||
} | ||
else { | ||
description.children[key] = config._describe(); | ||
description.children[key] = config.describe(); | ||
} | ||
@@ -84,2 +84,62 @@ } | ||
internals.Object.prototype.length = function (limit) { | ||
Utils.assert((!isNaN(limit) && ((limit | 0) === parseFloat(limit))), 'limit must be an integer'); | ||
this._test('length', limit, function (value, state, options) { | ||
if (value !== null && | ||
value !== undefined && | ||
Object.keys(value).length === limit) { | ||
return null; | ||
} | ||
return Any.error('object.length', { value: limit }, state); | ||
}); | ||
return this; | ||
}; | ||
internals.Object.prototype.min = function (limit) { | ||
Utils.assert((!isNaN(limit) && ((limit | 0) === parseFloat(limit))), 'limit must be an integer'); | ||
this._test('min', limit, function (value, state, options) { | ||
if (value !== null && | ||
value !== undefined && | ||
Object.keys(value).length >= limit) { | ||
return null; | ||
} | ||
return Any.error('object.min', { value: limit }, state); | ||
}); | ||
return this; | ||
}; | ||
internals.Object.prototype.max = function (limit) { | ||
Utils.assert((!isNaN(limit) && ((limit | 0) === parseFloat(limit))), 'limit must be an integer'); | ||
this._test('max', limit, function (value, state, options) { | ||
if (value !== null && | ||
value !== undefined && | ||
Object.keys(value).length <= limit) { | ||
return null; | ||
} | ||
return Any.error('object.max', { value: limit }, state); | ||
}); | ||
return this; | ||
}; | ||
internals.Object.prototype._traverse = function (value, state, options) { | ||
@@ -94,5 +154,6 @@ | ||
var errors = []; | ||
var key; | ||
for (var i = 0, il = keys.length; i < il; ++i) { | ||
var key = keys[i]; | ||
key = keys[i]; | ||
var child = this._children[key]; | ||
@@ -132,3 +193,3 @@ var item = value[key]; | ||
for (var k = 0, kl = unprocessedKeys.length; k < kl; ++k) { | ||
var key = unprocessedKeys[k]; | ||
key = unprocessedKeys[k]; | ||
if (options.stripUnknown) { | ||
@@ -135,0 +196,0 @@ delete value[key]; |
@@ -177,1 +177,36 @@ // Load modules | ||
}; | ||
internals.String.prototype.isoDate = function () { | ||
var regex = /^(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d\.\d+([+-][0-2]\d:[0-5]\d|Z))|(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d([+-][0-2]\d:[0-5]\d|Z))|(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d([+-][0-2]\d:[0-5]\d|Z))$/; | ||
this._test(function (value, state, options) { | ||
if (value.match(regex)) { | ||
return null; | ||
} | ||
return Any.error('string.isoDate', null, state); | ||
}); | ||
return this; | ||
}; | ||
internals.String.prototype.guid = function () { | ||
var regex = /^[A-F0-9]{8}(?:-?[A-F0-9]{4}){3}-?[A-F0-9]{12}$/i; | ||
var regex2 = /^\{[A-F0-9]{8}(?:-?[A-F0-9]{4}){3}-?[A-F0-9]{12}\}$/i; | ||
this._test(function (value, state, options) { | ||
if (value.match(regex) || value.match(regex2)) { | ||
return null; | ||
} | ||
return Any.error('string.guid', null, state); | ||
}); | ||
return this; | ||
}; |
{ | ||
"name": "joi", | ||
"description": "Object schema validation", | ||
"version": "2.0.3", | ||
"version": "2.1.0", | ||
"repository": "git://github.com/spumko/joi", | ||
@@ -6,0 +6,0 @@ "main": "index", |
@@ -316,3 +316,3 @@ <a href="https://github.com/spumko"><img src="https://raw.github.com/spumko/spumko/master/images/from.png" align="right" /></a> | ||
var schema = { | ||
a: Joi.any().strinct() | ||
a: Joi.any().strict() | ||
}; | ||
@@ -418,3 +418,3 @@ ``` | ||
var err = any.validate(true); | ||
var err = boolean.validate(true); | ||
``` | ||
@@ -628,2 +628,22 @@ | ||
#### `string.guid()` | ||
Requires the string value to be a valid GUID. | ||
```javascript | ||
var schema = { | ||
a: Joi.string().guid() | ||
}; | ||
``` | ||
#### `string.isoDate()` | ||
Requires the string value to be in valid ISO 8601 date format. | ||
```javascript | ||
var schema = { | ||
a: Joi.string().isoDate() | ||
}; | ||
``` | ||
# Migration notes | ||
@@ -661,2 +681,1 @@ | ||
@@ -0,0 +0,0 @@ { |
@@ -68,3 +68,11 @@ // Load modules | ||
['1', true], | ||
['100', true] | ||
['100', true], | ||
['1e3', true], | ||
['1 some text', false], | ||
['\t\r', false], | ||
[' ', false], | ||
[' 2', true], | ||
['\t\r43', true], | ||
['43 ', true], | ||
['', false] | ||
]); | ||
@@ -135,2 +143,129 @@ done(); | ||
it('should handle combination of min and positive', function (done) { | ||
var rule = Joi.number().min(-3).positive(); | ||
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(); | ||
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(); | ||
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(); | ||
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); | ||
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); | ||
Validate(rule, [ | ||
[1, true], | ||
[-1, true], | ||
[8, true], | ||
[-10, false], | ||
[null, false] | ||
]); | ||
done(); | ||
}); | ||
it('should handle combination of positive, allow, and nullOk', function (done) { | ||
var rule = Joi.number().positive().allow(-1).nullOk(); | ||
Validate(rule, [ | ||
[1, true], | ||
[-1, true], | ||
[8, true], | ||
[-10, false], | ||
[null, true] | ||
]); | ||
done(); | ||
}); | ||
it('should handle combination of negative, allow, and nullOk', function (done) { | ||
var rule = Joi.number().negative().allow(1).nullOk(); | ||
Validate(rule, [ | ||
[1, true], | ||
[-10, true], | ||
[8, false], | ||
[0, false], | ||
[null, true] | ||
]); | ||
done(); | ||
}); | ||
it('should handle combination of positive, allow, nullOk, and deny', function (done) { | ||
var rule = Joi.number().positive().allow(-1).nullOk().deny(1); | ||
Validate(rule, [ | ||
[1, false], | ||
[-1, true], | ||
[8, true], | ||
[-10, false], | ||
[null, true] | ||
]); | ||
done(); | ||
}); | ||
it('should handle combination of negative, allow, nullOk, and deny', function (done) { | ||
var rule = Joi.number().negative().allow(1).nullOk().deny(-5); | ||
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) { | ||
@@ -269,3 +404,3 @@ | ||
var t = Joi.number().integer(); | ||
var result = Joi.validate('', t); | ||
var result = Joi.validate('1.1', t); | ||
expect(result.message).to.contain('integer'); | ||
@@ -272,0 +407,0 @@ done(); |
@@ -68,2 +68,51 @@ // Load modules | ||
it('should validate the key count when min is set', function (done) { | ||
var schema = Joi.object().min(3); | ||
Validate(schema, [ | ||
[{ item: 'something' }, false], | ||
[{ item: 'something', item2: 'something else' }, false], | ||
[{ item: 'something', item2: 'something else', item3: 'something something else' }, true], | ||
['', false] | ||
]); | ||
done(); | ||
}); | ||
it('should validate the key count when max is set', function (done) { | ||
var schema = Joi.object().max(2); | ||
Validate(schema, [ | ||
[{ item: 'something' }, true], | ||
[{ item: 'something', item2: 'something else' }, true], | ||
[{ item: 'something', item2: 'something else', item3: 'something something else' }, false], | ||
['', false] | ||
]); | ||
done(); | ||
}); | ||
it('should validate the key count when min and max is set', function (done) { | ||
var schema = Joi.object().max(3).min(2); | ||
Validate(schema, [ | ||
[{ item: 'something' }, false], | ||
[{ item: 'something', item2: 'something else' }, true], | ||
[{ item: 'something', item2: 'something else', item3: 'something something else' }, true], | ||
[{ item: 'something', item2: 'something else', item3: 'something something else', item4: 'item4' }, false], | ||
['', false] | ||
]); | ||
done(); | ||
}); | ||
it('should validate the key count when length is set', function (done) { | ||
var schema = Joi.object().length(2); | ||
Validate(schema, [ | ||
[{ item: 'something' }, false], | ||
[{ item: 'something', item2: 'something else' }, true], | ||
[{ item: 'something', item2: 'something else', item3: 'something something else' }, false], | ||
['', false] | ||
]); | ||
done(); | ||
}); | ||
it('should traverse an object and validate all properties in the top level', function (done) { | ||
@@ -70,0 +119,0 @@ |
@@ -815,3 +815,624 @@ // Load modules | ||
}); | ||
it('should validate isoDate', function (done) { | ||
Validate(Joi.string().isoDate(), [ | ||
['2013-06-07T14:21:46.295Z', true], | ||
['2013-06-07T14:21:46.295+07:00', true], | ||
['2013-06-07T14:21:46.295-07:00', true], | ||
['2013-06-07T14:21:46Z', true], | ||
['2013-06-07T14:21:46+07:00', true], | ||
['2013-06-07T14:21:46-07:00', true], | ||
['2013-06-07T14:21Z', true], | ||
['2013-06-07T14:21+07:00', true], | ||
['2013-06-07T14:21-07:00', true], | ||
['2013-06-07T14:21Z+7:00', false], | ||
['1-1-2013', false] | ||
]); | ||
done(); | ||
}); | ||
it('should validate isoDate with a friendly error message', function (done) { | ||
var schema = { item: Joi.string().isoDate() }; | ||
var err = Joi.validate({ item: 'something' }, schema); | ||
expect(err.message).to.contain('must be a valid ISO 8601 date'); | ||
done(); | ||
}); | ||
it('should handle combination of isoDate and min', function (done) { | ||
var rule = Joi.string().isoDate().min(23); | ||
Validate(rule, [ | ||
['2013-06-07T14:21:46.295Z', true], | ||
['2013-06-07T14:21:46.295+07:00', true], | ||
['2013-06-07T14:21:46.295-07:00', true], | ||
['2013-06-07T14:21:46Z', false], | ||
['2013-06-07T14:21:46+07:00', true], | ||
['2013-06-07T14:21:46-07:00', true], | ||
['2013-06-07T14:21Z', false], | ||
['2013-06-07T14:21+07:00', false], | ||
['2013-06-07T14:21-07:00', false], | ||
['2013-06-07T14:21Z+7:00', false], | ||
['1-1-2013', false], | ||
['', false], | ||
[null, false] | ||
]); | ||
done(); | ||
}); | ||
it('should handle combination of isoDate, min and max', function (done) { | ||
var rule = Joi.string().isoDate().min(17).max(23); | ||
Validate(rule, [ | ||
['2013-06-07T14:21:46.295Z', false], | ||
['2013-06-07T14:21:46.295+07:00', false], | ||
['2013-06-07T14:21:46.295-07:00', false], | ||
['2013-06-07T14:21:46Z', true], | ||
['2013-06-07T14:21:46+07:00', false], | ||
['2013-06-07T14:21:46-07:00', false], | ||
['2013-06-07T14:21Z', true], | ||
['2013-06-07T14:21+07:00', true], | ||
['2013-06-07T14:21-07:00', true], | ||
['2013-06-07T14:21Z+7:00', false], | ||
['1-1-2013', false], | ||
['', false], | ||
[null, false] | ||
]); | ||
done(); | ||
}); | ||
it('should handle combination of isoDate, min and max', function (done) { | ||
var rule = Joi.string().isoDate().min(17).max(23); | ||
Validate(rule, [ | ||
['2013-06-07T14:21:46.295Z', false], | ||
['2013-06-07T14:21:46.295+07:00', false], | ||
['2013-06-07T14:21:46.295-07:00', false], | ||
['2013-06-07T14:21:46Z', true], | ||
['2013-06-07T14:21:46+07:00', false], | ||
['2013-06-07T14:21:46-07:00', false], | ||
['2013-06-07T14:21Z', true], | ||
['2013-06-07T14:21+07:00', true], | ||
['2013-06-07T14:21-07:00', true], | ||
['2013-06-07T14:21Z+7:00', false], | ||
['1-1-2013', false], | ||
['', false], | ||
[null, false] | ||
]); | ||
done(); | ||
}); | ||
it('should handle combination of isoDate, min, max and deny', function (done) { | ||
var rule = Joi.string().isoDate().min(17).max(23).deny('2013-06-07T14:21+07:00'); | ||
Validate(rule, [ | ||
['2013-06-07T14:21:46.295Z', false], | ||
['2013-06-07T14:21:46.295+07:00', false], | ||
['2013-06-07T14:21:46.295-07:00', false], | ||
['2013-06-07T14:21:46Z', true], | ||
['2013-06-07T14:21:46+07:00', false], | ||
['2013-06-07T14:21:46-07:00', false], | ||
['2013-06-07T14:21Z', true], | ||
['2013-06-07T14:21+07:00', false], | ||
['2013-06-07T14:21-07:00', true], | ||
['2013-06-07T14:21Z+7:00', false], | ||
['1-1-2013', false], | ||
['', false], | ||
[null, false] | ||
]); | ||
done(); | ||
}); | ||
it('should handle combination of isoDate, min, max and allow', function (done) { | ||
var rule = Joi.string().isoDate().min(17).max(23).allow('2013-06-07T14:21:46.295+07:00'); | ||
Validate(rule, [ | ||
['2013-06-07T14:21:46.295Z', false], | ||
['2013-06-07T14:21:46.295+07:00', true], | ||
['2013-06-07T14:21:46.295-07:00', false], | ||
['2013-06-07T14:21:46Z', true], | ||
['2013-06-07T14:21:46+07:00', false], | ||
['2013-06-07T14:21:46-07:00', false], | ||
['2013-06-07T14:21Z', true], | ||
['2013-06-07T14:21+07:00', true], | ||
['2013-06-07T14:21-07:00', true], | ||
['2013-06-07T14:21Z+7:00', false], | ||
['1-1-2013', false], | ||
['', false], | ||
[null, false] | ||
]); | ||
done(); | ||
}); | ||
it('should handle combination of isoDate, min, max, allow and deny', function (done) { | ||
var rule = Joi.string().isoDate().min(17).max(23).allow('2013-06-07T14:21:46.295+07:00').deny('2013-06-07T14:21+07:00'); | ||
Validate(rule, [ | ||
['2013-06-07T14:21:46.295Z', false], | ||
['2013-06-07T14:21:46.295+07:00', true], | ||
['2013-06-07T14:21:46.295-07:00', false], | ||
['2013-06-07T14:21:46Z', true], | ||
['2013-06-07T14:21:46+07:00', false], | ||
['2013-06-07T14:21:46-07:00', false], | ||
['2013-06-07T14:21Z', true], | ||
['2013-06-07T14:21+07:00', false], | ||
['2013-06-07T14:21-07:00', true], | ||
['2013-06-07T14:21Z+7:00', false], | ||
['1-1-2013', false], | ||
['', false], | ||
[null, false] | ||
]); | ||
done(); | ||
}); | ||
it('should handle combination of isoDate, min, max, allow, deny and emptyOK', function (done) { | ||
var rule = Joi.string().isoDate().min(17).max(23).allow('2013-06-07T14:21:46.295+07:00').deny('2013-06-07T14:21+07:00').emptyOk(); | ||
Validate(rule, [ | ||
['2013-06-07T14:21:46.295Z', false], | ||
['2013-06-07T14:21:46.295+07:00', true], | ||
['2013-06-07T14:21:46.295-07:00', false], | ||
['2013-06-07T14:21:46Z', true], | ||
['2013-06-07T14:21:46+07:00', false], | ||
['2013-06-07T14:21:46-07:00', false], | ||
['2013-06-07T14:21Z', true], | ||
['2013-06-07T14:21+07:00', false], | ||
['2013-06-07T14:21-07:00', true], | ||
['2013-06-07T14:21Z+7:00', false], | ||
['1-1-2013', false], | ||
['', true], | ||
[null, false] | ||
]); | ||
done(); | ||
}); | ||
it('should handle combination of isoDate, min, max, allow, deny and emptyOK', function (done) { | ||
var rule = Joi.string().isoDate().min(17).max(23).allow('2013-06-07T14:21:46.295+07:00').emptyOk(); | ||
Validate(rule, [ | ||
['2013-06-07T14:21:46.295Z', false], | ||
['2013-06-07T14:21:46.295+07:00', true], | ||
['2013-06-07T14:21:46.295-07:00', false], | ||
['2013-06-07T14:21:46Z', true], | ||
['2013-06-07T14:21:46+07:00', false], | ||
['2013-06-07T14:21:46-07:00', false], | ||
['2013-06-07T14:21Z', true], | ||
['2013-06-07T14:21+07:00', true], | ||
['2013-06-07T14:21-07:00', true], | ||
['2013-06-07T14:21Z+7:00', false], | ||
['1-1-2013', false], | ||
['', true], | ||
[null, false] | ||
]); | ||
done(); | ||
}); | ||
it('should handle combination of isoDate, min, max, allow, deny and regex', function (done) { | ||
var rule = Joi.string().isoDate().min(17).max(23).allow('2013-06-07T14:21:46.295+07:00').deny('2013-06-07T14:21Z').regex(/Z$/); | ||
Validate(rule, [ | ||
['2013-06-07T14:21:46.295Z', false], | ||
['2013-06-07T14:21:46.295+07:00', true], | ||
['2013-06-07T14:21:46.295-07:00', false], | ||
['2013-06-07T14:21:46Z', true], | ||
['2013-06-07T14:21:46+07:00', false], | ||
['2013-06-07T14:21:46-07:00', false], | ||
['2013-06-07T14:21Z', false], | ||
['2013-06-07T14:21+07:00', false], | ||
['2013-06-07T14:21-07:00', false], | ||
['2013-06-07T14:21Z+7:00', false], | ||
['1-1-2013', false], | ||
['', false], | ||
[null, false] | ||
]); | ||
done(); | ||
}); | ||
it('should handle combination of isoDate, min, max, allow, deny, regex and emptyOK', function (done) { | ||
var rule = Joi.string().isoDate().min(17).max(23).allow('2013-06-07T14:21:46.295+07:00').deny('2013-06-07T14:21Z').regex(/Z$/).emptyOk(); | ||
Validate(rule, [ | ||
['2013-06-07T14:21:46.295Z', false], | ||
['2013-06-07T14:21:46.295+07:00', true], | ||
['2013-06-07T14:21:46.295-07:00', false], | ||
['2013-06-07T14:21:46Z', true], | ||
['2013-06-07T14:21:46+07:00', false], | ||
['2013-06-07T14:21:46-07:00', false], | ||
['2013-06-07T14:21Z', false], | ||
['2013-06-07T14:21+07:00', false], | ||
['2013-06-07T14:21-07:00', false], | ||
['2013-06-07T14:21Z+7:00', false], | ||
['1-1-2013', false], | ||
['', true], | ||
[null, false] | ||
]); | ||
done(); | ||
}); | ||
it('should handle combination of isoDate, min, max and emptyOK', function (done) { | ||
var rule = Joi.string().isoDate().min(17).max(23).emptyOk(); | ||
Validate(rule, [ | ||
['2013-06-07T14:21:46.295Z', false], | ||
['2013-06-07T14:21:46.295+07:00', false], | ||
['2013-06-07T14:21:46.295-07:00', false], | ||
['2013-06-07T14:21:46Z', true], | ||
['2013-06-07T14:21:46+07:00', false], | ||
['2013-06-07T14:21:46-07:00', false], | ||
['2013-06-07T14:21Z', true], | ||
['2013-06-07T14:21+07:00', true], | ||
['2013-06-07T14:21-07:00', true], | ||
['2013-06-07T14:21Z+7:00', false], | ||
['1-1-2013', false], | ||
['', true], | ||
[null, false] | ||
]); | ||
done(); | ||
}); | ||
it('should handle combination of isoDate, min, max and regex', function (done) { | ||
var rule = Joi.string().isoDate().min(17).max(23).regex(/Z$/); | ||
Validate(rule, [ | ||
['2013-06-07T14:21:46.295Z', false], | ||
['2013-06-07T14:21:46.295+07:00', false], | ||
['2013-06-07T14:21:46.295-07:00', false], | ||
['2013-06-07T14:21:46Z', true], | ||
['2013-06-07T14:21:46+07:00', false], | ||
['2013-06-07T14:21:46-07:00', false], | ||
['2013-06-07T14:21Z', true], | ||
['2013-06-07T14:21+07:00', false], | ||
['2013-06-07T14:21-07:00', false], | ||
['2013-06-07T14:21Z+7:00', false], | ||
['1-1-2013', false], | ||
['', false], | ||
[null, false] | ||
]); | ||
done(); | ||
}); | ||
it('should handle combination of isoDate, min, max, regex and emptyOK', function (done) { | ||
var rule = Joi.string().isoDate().min(17).max(23).regex(/Z$/).emptyOk(); | ||
Validate(rule, [ | ||
['2013-06-07T14:21:46.295Z', false], | ||
['2013-06-07T14:21:46.295+07:00', false], | ||
['2013-06-07T14:21:46.295-07:00', false], | ||
['2013-06-07T14:21:46Z', true], | ||
['2013-06-07T14:21:46+07:00', false], | ||
['2013-06-07T14:21:46-07:00', false], | ||
['2013-06-07T14:21Z', true], | ||
['2013-06-07T14:21+07:00', false], | ||
['2013-06-07T14:21-07:00', false], | ||
['2013-06-07T14:21Z+7:00', false], | ||
['1-1-2013', false], | ||
['', true], | ||
[null, false] | ||
]); | ||
done(); | ||
}); | ||
it('should handle combination of isoDate, min, max, regex and required', function (done) { | ||
var rule = Joi.string().isoDate().min(17).max(23).regex(/Z$/).required(); | ||
Validate(rule, [ | ||
['2013-06-07T14:21:46.295Z', false], | ||
['2013-06-07T14:21:46.295+07:00', false], | ||
['2013-06-07T14:21:46.295-07:00', false], | ||
['2013-06-07T14:21:46Z', true], | ||
['2013-06-07T14:21:46+07:00', false], | ||
['2013-06-07T14:21:46-07:00', false], | ||
['2013-06-07T14:21Z', true], | ||
['2013-06-07T14:21+07:00', false], | ||
['2013-06-07T14:21-07:00', false], | ||
['2013-06-07T14:21Z+7:00', false], | ||
['1-1-2013', false], | ||
['', false], | ||
[null, false] | ||
]); | ||
done(); | ||
}); | ||
it('should validate guid', function (done) { | ||
Validate(Joi.string().guid(), [ | ||
['{D1A5279D-B27D-4CD4-A05E-EFDD53D08E8D}', true], | ||
['{B59511BD6A5F4DF09ECF562A108D8A2E}', true], | ||
['69593D62-71EA-4548-85E4-04FC71357423', true], | ||
['677E2553DD4D43B09DA77414DB1EB8EA', true], | ||
['{5ba3bba3-729a-4717-88c1-b7c4b7ba80db}', true], | ||
['{7e9081b59a6d4cc1a8c347f69fb4198d}', true], | ||
['0c74f13f-fa83-4c48-9b33-68921dd72463', true], | ||
['b4b2fb69c6244e5eb0698e0c6ec66618', true], | ||
['{283B67B2-430F-4E6F-97E6-19041992-C1B0}', false], | ||
['{D1A5279D-B27D-4CD4-A05E-EFDD53D08E8D', false], | ||
['D1A5279D-B27D-4CD4-A05E-EFDD53D08E8D}', false] | ||
]); | ||
done(); | ||
}); | ||
it('should validate guid with a friendly error message', function (done) { | ||
var schema = { item: Joi.string().guid() }; | ||
var err = Joi.validate({ item: 'something' }, schema); | ||
expect(err.message).to.contain('must be a valid GUID'); | ||
done(); | ||
}); | ||
it('should handle combination of guid and min', function (done) { | ||
var rule = Joi.string().guid().min(36); | ||
Validate(rule, [ | ||
['{D1A5279D-B27D-4CD4-A05E-EFDD53D08E8D}', true], | ||
['{B59511BD6A5F4DF09ECF562A108D8A2E}', false], | ||
['69593D62-71EA-4548-85E4-04FC71357423', true], | ||
['677E2553DD4D43B09DA77414DB1EB8EA', false], | ||
['{5ba3bba3-729a-4717-88c1-b7c4b7ba80db}', true], | ||
['{7e9081b59a6d4cc1a8c347f69fb4198d}', false], | ||
['0c74f13f-fa83-4c48-9b33-68921dd72463', true], | ||
['b4b2fb69c6244e5eb0698e0c6ec66618', false], | ||
['{283B67B2-430F-4E6F-97E6-19041992-C1B0}', false], | ||
['{D1A5279D-B27D-4CD4-A05E-EFDD53D08E8D', false], | ||
['D1A5279D-B27D-4CD4-A05E-EFDD53D08E8D}', false], | ||
['', false], | ||
[null, false] | ||
]); | ||
done(); | ||
}); | ||
it('should handle combination of guid, min and max', function (done) { | ||
var rule = Joi.string().guid().min(32).max(34); | ||
Validate(rule, [ | ||
['{D1A5279D-B27D-4CD4-A05E-EFDD53D08E8D}', false], | ||
['{B59511BD6A5F4DF09ECF562A108D8A2E}', true], | ||
['69593D62-71EA-4548-85E4-04FC71357423', false], | ||
['677E2553DD4D43B09DA77414DB1EB8EA', true], | ||
['{5ba3bba3-729a-4717-88c1-b7c4b7ba80db}', false], | ||
['{7e9081b59a6d4cc1a8c347f69fb4198d}', true], | ||
['0c74f13f-fa83-4c48-9b33-68921dd72463', false], | ||
['b4b2fb69c6244e5eb0698e0c6ec66618', true], | ||
['{283B67B2-430F-4E6F-97E6-19041992-C1B0}', false], | ||
['{D1A5279D-B27D-4CD4-A05E-EFDD53D08E8D', false], | ||
['D1A5279D-B27D-4CD4-A05E-EFDD53D08E8D}', false], | ||
['', false], | ||
[null, false] | ||
]); | ||
done(); | ||
}); | ||
it('should handle combination of guid, min, max and deny', function (done) { | ||
var rule = Joi.string().guid().min(32).max(34).deny('b4b2fb69c6244e5eb0698e0c6ec66618'); | ||
Validate(rule, [ | ||
['{D1A5279D-B27D-4CD4-A05E-EFDD53D08E8D}', false], | ||
['{B59511BD6A5F4DF09ECF562A108D8A2E}', true], | ||
['69593D62-71EA-4548-85E4-04FC71357423', false], | ||
['677E2553DD4D43B09DA77414DB1EB8EA', true], | ||
['{5ba3bba3-729a-4717-88c1-b7c4b7ba80db}', false], | ||
['{7e9081b59a6d4cc1a8c347f69fb4198d}', true], | ||
['0c74f13f-fa83-4c48-9b33-68921dd72463', false], | ||
['b4b2fb69c6244e5eb0698e0c6ec66618', false], | ||
['{283B67B2-430F-4E6F-97E6-19041992-C1B0}', false], | ||
['{D1A5279D-B27D-4CD4-A05E-EFDD53D08E8D', false], | ||
['D1A5279D-B27D-4CD4-A05E-EFDD53D08E8D}', false], | ||
['', false], | ||
[null, false] | ||
]); | ||
done(); | ||
}); | ||
it('should handle combination of guid, min, max and allow', function (done) { | ||
var rule = Joi.string().guid().min(32).max(34).allow('{D1A5279D-B27D-4CD4-A05E-EFDD53D08E8D'); | ||
Validate(rule, [ | ||
['{D1A5279D-B27D-4CD4-A05E-EFDD53D08E8D}', false], | ||
['{B59511BD6A5F4DF09ECF562A108D8A2E}', true], | ||
['69593D62-71EA-4548-85E4-04FC71357423', false], | ||
['677E2553DD4D43B09DA77414DB1EB8EA', true], | ||
['{5ba3bba3-729a-4717-88c1-b7c4b7ba80db}', false], | ||
['{7e9081b59a6d4cc1a8c347f69fb4198d}', true], | ||
['0c74f13f-fa83-4c48-9b33-68921dd72463', false], | ||
['b4b2fb69c6244e5eb0698e0c6ec66618', true], | ||
['{283B67B2-430F-4E6F-97E6-19041992-C1B0}', false], | ||
['{D1A5279D-B27D-4CD4-A05E-EFDD53D08E8D', true], | ||
['D1A5279D-B27D-4CD4-A05E-EFDD53D08E8D}', false], | ||
['', false], | ||
[null, false] | ||
]); | ||
done(); | ||
}); | ||
it('should handle combination of guid, min, max, allow and deny', function (done) { | ||
var rule = Joi.string().guid().min(32).max(34).allow('{D1A5279D-B27D-4CD4-A05E-EFDD53D08E8D').deny('b4b2fb69c6244e5eb0698e0c6ec66618'); | ||
Validate(rule, [ | ||
['{D1A5279D-B27D-4CD4-A05E-EFDD53D08E8D}', false], | ||
['{B59511BD6A5F4DF09ECF562A108D8A2E}', true], | ||
['69593D62-71EA-4548-85E4-04FC71357423', false], | ||
['677E2553DD4D43B09DA77414DB1EB8EA', true], | ||
['{5ba3bba3-729a-4717-88c1-b7c4b7ba80db}', false], | ||
['{7e9081b59a6d4cc1a8c347f69fb4198d}', true], | ||
['0c74f13f-fa83-4c48-9b33-68921dd72463', false], | ||
['b4b2fb69c6244e5eb0698e0c6ec66618', false], | ||
['{283B67B2-430F-4E6F-97E6-19041992-C1B0}', false], | ||
['{D1A5279D-B27D-4CD4-A05E-EFDD53D08E8D', true], | ||
['D1A5279D-B27D-4CD4-A05E-EFDD53D08E8D}', false], | ||
['', false], | ||
[null, false] | ||
]); | ||
done(); | ||
}); | ||
it('should handle combination of guid, min, max, allow, deny and emptyOK', function (done) { | ||
var rule = Joi.string().guid().min(32).max(34).allow('{D1A5279D-B27D-4CD4-A05E-EFDD53D08E8D').deny('b4b2fb69c6244e5eb0698e0c6ec66618').emptyOk(); | ||
Validate(rule, [ | ||
['{D1A5279D-B27D-4CD4-A05E-EFDD53D08E8D}', false], | ||
['{B59511BD6A5F4DF09ECF562A108D8A2E}', true], | ||
['69593D62-71EA-4548-85E4-04FC71357423', false], | ||
['677E2553DD4D43B09DA77414DB1EB8EA', true], | ||
['{5ba3bba3-729a-4717-88c1-b7c4b7ba80db}', false], | ||
['{7e9081b59a6d4cc1a8c347f69fb4198d}', true], | ||
['0c74f13f-fa83-4c48-9b33-68921dd72463', false], | ||
['b4b2fb69c6244e5eb0698e0c6ec66618', false], | ||
['{283B67B2-430F-4E6F-97E6-19041992-C1B0}', false], | ||
['{D1A5279D-B27D-4CD4-A05E-EFDD53D08E8D', true], | ||
['D1A5279D-B27D-4CD4-A05E-EFDD53D08E8D}', false], | ||
['', true], | ||
[null, false] | ||
]); | ||
done(); | ||
}); | ||
it('should handle combination of guid, min, max, allow and emptyOK', function (done) { | ||
var rule = Joi.string().guid().min(32).max(34).allow('{D1A5279D-B27D-4CD4-A05E-EFDD53D08E8D').emptyOk(); | ||
Validate(rule, [ | ||
['{D1A5279D-B27D-4CD4-A05E-EFDD53D08E8D}', false], | ||
['{B59511BD6A5F4DF09ECF562A108D8A2E}', true], | ||
['69593D62-71EA-4548-85E4-04FC71357423', false], | ||
['677E2553DD4D43B09DA77414DB1EB8EA', true], | ||
['{5ba3bba3-729a-4717-88c1-b7c4b7ba80db}', false], | ||
['{7e9081b59a6d4cc1a8c347f69fb4198d}', true], | ||
['0c74f13f-fa83-4c48-9b33-68921dd72463', false], | ||
['b4b2fb69c6244e5eb0698e0c6ec66618', true], | ||
['{283B67B2-430F-4E6F-97E6-19041992-C1B0}', false], | ||
['{D1A5279D-B27D-4CD4-A05E-EFDD53D08E8D', true], | ||
['D1A5279D-B27D-4CD4-A05E-EFDD53D08E8D}', false], | ||
['', true], | ||
[null, false] | ||
]); | ||
done(); | ||
}); | ||
it('should handle combination of guid, min, max, allow, deny and regex', function (done) { | ||
var rule = Joi.string().guid().min(32).max(34).allow('{D1A5279D-B27D-4CD4-A05E-EFDD53D08').deny('b4b2fb69c6244e5eb0698e0c6ec66618').regex(/^{7e908/); | ||
Validate(rule, [ | ||
['{D1A5279D-B27D-4CD4-A05E-EFDD53D08E8D}', false], | ||
['{B59511BD6A5F4DF09ECF562A108D8A2E}', false], | ||
['69593D62-71EA-4548-85E4-04FC71357423', false], | ||
['677E2553DD4D43B09DA77414DB1EB8EA', false], | ||
['{5ba3bba3-729a-4717-88c1-b7c4b7ba80db}', false], | ||
['{7e9081b59a6d4cc1a8c347f69fb4198d}', true], | ||
['0c74f13f-fa83-4c48-9b33-68921dd72463', false], | ||
['b4b2fb69c6244e5eb0698e0c6ec66618', false], | ||
['{283B67B2-430F-4E6F-97E6-19041992-C1B0}', false], | ||
['{D1A5279D-B27D-4CD4-A05E-EFDD53D08', true], | ||
['D1A5279D-B27D-4CD4-A05E-EFDD53D08E8D}', false], | ||
['', false], | ||
[null, false] | ||
]); | ||
done(); | ||
}); | ||
it('should handle combination of guid, min, max, allow, deny, regex and emptyOK', function (done) { | ||
var rule = Joi.string().guid().min(32).max(34).allow('{D1A5279D-B27D-4CD4-A05E-EFDD53D08').deny('b4b2fb69c6244e5eb0698e0c6ec66618').regex(/^{7e908/).emptyOk(); | ||
Validate(rule, [ | ||
['{D1A5279D-B27D-4CD4-A05E-EFDD53D08E8D}', false], | ||
['{B59511BD6A5F4DF09ECF562A108D8A2E}', false], | ||
['69593D62-71EA-4548-85E4-04FC71357423', false], | ||
['677E2553DD4D43B09DA77414DB1EB8EA', false], | ||
['{5ba3bba3-729a-4717-88c1-b7c4b7ba80db}', false], | ||
['{7e9081b59a6d4cc1a8c347f69fb4198d}', true], | ||
['0c74f13f-fa83-4c48-9b33-68921dd72463', false], | ||
['b4b2fb69c6244e5eb0698e0c6ec66618', false], | ||
['{283B67B2-430F-4E6F-97E6-19041992-C1B0}', false], | ||
['{D1A5279D-B27D-4CD4-A05E-EFDD53D08', true], | ||
['D1A5279D-B27D-4CD4-A05E-EFDD53D08E8D}', false], | ||
['', true], | ||
[null, false] | ||
]); | ||
done(); | ||
}); | ||
it('should handle combination of guid, min, max and emptyOK', function (done) { | ||
var rule = Joi.string().guid().min(32).max(34).emptyOk(); | ||
Validate(rule, [ | ||
['{D1A5279D-B27D-4CD4-A05E-EFDD53D08E8D}', false], | ||
['{B59511BD6A5F4DF09ECF562A108D8A2E}', true], | ||
['69593D62-71EA-4548-85E4-04FC71357423', false], | ||
['677E2553DD4D43B09DA77414DB1EB8EA', true], | ||
['{5ba3bba3-729a-4717-88c1-b7c4b7ba80db}', false], | ||
['{7e9081b59a6d4cc1a8c347f69fb4198d}', true], | ||
['0c74f13f-fa83-4c48-9b33-68921dd72463', false], | ||
['b4b2fb69c6244e5eb0698e0c6ec66618', true], | ||
['{283B67B2-430F-4E6F-97E6-19041992-C1B0}', false], | ||
['{D1A5279D-B27D-4CD4-A05E-EFDD53D08E8D', false], | ||
['D1A5279D-B27D-4CD4-A05E-EFDD53D08E8D}', false], | ||
['', true], | ||
[null, false] | ||
]); | ||
done(); | ||
}); | ||
it('should handle combination of guid, min, max and regex', function (done) { | ||
var rule = Joi.string().guid().min(32).max(34).regex(/^{7e9081/i); | ||
Validate(rule, [ | ||
['{D1A5279D-B27D-4CD4-A05E-EFDD53D08E8D}', false], | ||
['{B59511BD6A5F4DF09ECF562A108D8A2E}', false], | ||
['69593D62-71EA-4548-85E4-04FC71357423', false], | ||
['677E2553DD4D43B09DA77414DB1EB8EA', false], | ||
['{5ba3bba3-729a-4717-88c1-b7c4b7ba80db}', false], | ||
['{7e9081b59a6d4cc1a8c347f69fb4198d}', true], | ||
['0c74f13f-fa83-4c48-9b33-68921dd72463', false], | ||
['b4b2fb69c6244e5eb0698e0c6ec66618', false], | ||
['{283B67B2-430F-4E6F-97E6-19041992-C1B0}', false], | ||
['{D1A5279D-B27D-4CD4-A05E-EFDD53D08E8D', false], | ||
['D1A5279D-B27D-4CD4-A05E-EFDD53D08E8D}', false], | ||
['', false], | ||
[null, false] | ||
]); | ||
done(); | ||
}); | ||
it('should handle combination of guid, min, max, regex and emptyOK', function (done) { | ||
var rule = Joi.string().guid().min(32).max(34).regex(/^{7e9081/i).emptyOk(); | ||
Validate(rule, [ | ||
['{D1A5279D-B27D-4CD4-A05E-EFDD53D08E8D}', false], | ||
['{B59511BD6A5F4DF09ECF562A108D8A2E}', false], | ||
['69593D62-71EA-4548-85E4-04FC71357423', false], | ||
['677E2553DD4D43B09DA77414DB1EB8EA', false], | ||
['{5ba3bba3-729a-4717-88c1-b7c4b7ba80db}', false], | ||
['{7e9081b59a6d4cc1a8c347f69fb4198d}', true], | ||
['0c74f13f-fa83-4c48-9b33-68921dd72463', false], | ||
['b4b2fb69c6244e5eb0698e0c6ec66618', false], | ||
['{283B67B2-430F-4E6F-97E6-19041992-C1B0}', false], | ||
['{D1A5279D-B27D-4CD4-A05E-EFDD53D08E8D', false], | ||
['D1A5279D-B27D-4CD4-A05E-EFDD53D08E8D}', false], | ||
['', true], | ||
[null, false] | ||
]); | ||
done(); | ||
}); | ||
it('should handle combination of guid, min, max, regex and required', function (done) { | ||
var rule = Joi.string().guid().min(32).max(34).regex(/^{7e9081/i).required(); | ||
Validate(rule, [ | ||
['{D1A5279D-B27D-4CD4-A05E-EFDD53D08E8D}', false], | ||
['{B59511BD6A5F4DF09ECF562A108D8A2E}', false], | ||
['69593D62-71EA-4548-85E4-04FC71357423', false], | ||
['677E2553DD4D43B09DA77414DB1EB8EA', false], | ||
['{5ba3bba3-729a-4717-88c1-b7c4b7ba80db}', false], | ||
['{7e9081b59a6d4cc1a8c347f69fb4198d}', true], | ||
['0c74f13f-fa83-4c48-9b33-68921dd72463', false], | ||
['b4b2fb69c6244e5eb0698e0c6ec66618', false], | ||
['{283B67B2-430F-4E6F-97E6-19041992-C1B0}', false], | ||
['{D1A5279D-B27D-4CD4-A05E-EFDD53D08E8D', false], | ||
['D1A5279D-B27D-4CD4-A05E-EFDD53D08E8D}', false], | ||
['', false], | ||
[null, false] | ||
]); | ||
done(); | ||
}); | ||
}); | ||
}); |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
326879
4112
678