verificator
Version:
Client and server-side validation JavaScript library
1,164 lines (1,077 loc) • 83.3 kB
text/typescript
import { Validator, Items } from '../src'
const validator = (data: Items, rules: Items<string|string[]|any[]>): Promise<boolean> => {
return new Validator(data, rules).validateAll()
}
test('empty rules skipped', () => {
const promises = [
validator({'x': 'aslsdlks'}, {'x': ['alpha', [], '']}),
validator({'x': 'aslsdlks'}, {'x': '|||required|'}),
]
return Promise.all(promises).then(result => {
expect(result[0]).toBe(true)
expect(result[1]).toBe(true)
})
})
test('alternative format', () => {
const promises = [
validator({'x': 'aslsdlks'}, {'x': ['alpha', ['min', 3], ['max', 10]]}),
]
return Promise.all(promises).then(result => {
expect(result[0]).toBe(true)
})
})
test('validate nullable', () => {
const promises = [
validator({}, { name: 'nullable' }),
validator({ 'name': undefined}, { name: 'nullable' }),
validator({ 'name': null}, { name: 'nullable' }),
validator({ 'name': true}, { name: 'nullable' }),
validator({ 'name': false}, { name: 'nullable' }),
validator({ 'name': 0}, { name: 'nullable' }),
validator({ 'name': 1}, { name: 'nullable' }),
validator({ 'name': '0'}, { name: 'nullable' }),
validator({ 'name': '1'}, { name: 'nullable' }),
validator({ 'name': 'test'}, { name: 'nullable' }),
validator({ 'name': []}, { name: 'nullable' }),
validator({ 'name': {}}, { name: 'nullable' }),
]
return Promise.all(promises).then(result => {
expect(result[0]).toBe(true)
expect(result[1]).toBe(true)
expect(result[2]).toBe(true)
expect(result[3]).toBe(true)
expect(result[4]).toBe(true)
expect(result[5]).toBe(true)
expect(result[6]).toBe(true)
expect(result[7]).toBe(true)
expect(result[8]).toBe(true)
expect(result[9]).toBe(true)
expect(result[10]).toBe(true)
expect(result[11]).toBe(true)
})
})
test('validate present', () => {
const promises = [
validator({}, { name: 'present' }),
validator({}, { name: 'present|nullable' }),
validator({ name: null }, { name: 'present|nullable' }),
validator({ name: '' }, { name: 'present' }),
validator({ foo: [ { id: 1 }, {} ] }, { name: 'present' }),
validator({ foo: [ { id: 1 }, { name: 'a' } ] }, { 'foo.*.id': 'present' }),
validator({ foo: [ { id: 1 }, {} ] }, { 'foo.*.id': 'present' }),
validator({ foo: [ { id: 1 }, { id: '' } ] }, { 'foo.*.id': 'present' }),
validator({ foo: [ { id: 1 }, { id: null } ] }, { 'foo.*.id': 'present' })
]
return Promise.all(promises).then(result => {
expect(result[0]).toBe(false)
expect(result[1]).toBe(false)
expect(result[2]).toBe(true)
expect(result[3]).toBe(true)
expect(result[4]).toBe(false)
expect(result[5]).toBe(false)
expect(result[6]).toBe(false)
expect(result[7]).toBe(true)
expect(result[8]).toBe(true)
})
})
test('validate required', () => {
const promises = [
validator({}, { name: 'required' }),
validator({ name: '' }, { name: 'required' }),
validator({ name: 'foo' }, { name: 'required' }),
]
return Promise.all(promises).then(result => {
expect(result[0]).toBe(false)
expect(result[1]).toBe(false)
expect(result[2]).toBe(true)
})
})
test('validate required_with', () => {
const promises = [
validator({ 'first': 'Nikita' }, { 'last': 'required_with:first' }),
validator({ 'first': 'Nikita', 'last': '' }, { 'last': 'required_with:first' }),
validator({ 'first': '' }, { 'last': 'required_with:first' }),
validator({}, { 'last': 'required_with:first' }),
validator({ 'first': 'Nikita', 'last': 'Stenin' }, { 'last': 'required_with:first' }),
]
return Promise.all(promises).then(result => {
expect(result[0]).toBe(false)
expect(result[1]).toBe(false)
expect(result[2]).toBe(true)
expect(result[3]).toBe(true)
expect(result[4]).toBe(true)
})
})
test('validate required_with_all', () => {
const promises = [
validator({ 'first': 'foo' }, { 'last': 'required_with_all:first,foo' }),
validator({ 'first': 'foo' }, { 'last': 'required_with_all:first' }),
]
return Promise.all(promises).then(result => {
expect(result[0]).toBe(true)
expect(result[1]).toBe(false)
})
})
test('validate required_without', () => {
const promises = [
validator({ 'first': 'Nikita' }, { 'last': 'required_without:first' }),
validator({ 'first': 'Nikita', 'last': '' }, { 'last': 'required_without:first' }),
validator({ 'first': '' }, { 'last': 'required_without:first' }),
validator({}, { 'last': 'required_without:first' }),
validator({ 'first': 'Nikita', 'last': 'Stenin' }, { 'last': 'required_without:first' }),
validator({ 'last': 'Stenin' }, { 'last': 'required_without:first' }),
]
return Promise.all(promises).then(result => {
expect(result[0]).toBe(true)
expect(result[1]).toBe(true)
expect(result[2]).toBe(false)
expect(result[3]).toBe(false)
expect(result[4]).toBe(true)
expect(result[5]).toBe(true)
})
})
test('validate required_without_multiple', () => {
const rules = {
'f1': 'required_without:f2,f3',
'f2': 'required_without:f1,f3',
'f3': 'required_without:f1,f2',
}
const promises = [
validator({}, rules),
validator({ 'f1': 'foo' }, rules),
validator({ 'f2': 'foo' }, rules),
validator({ 'f1': 'foo', 'f2': 'bar' }, rules),
validator({ 'f2': 'foo', 'f3': 'bar' }, rules),
validator({ 'f1': 'foo', 'f2': 'bar', 'f3': 'baz' }, rules)
]
return Promise.all(promises).then(result => {
expect(result[0]).toBe(false)
expect(result[1]).toBe(false)
expect(result[2]).toBe(false)
expect(result[3]).toBe(true)
expect(result[4]).toBe(true)
expect(result[5]).toBe(true)
})
})
test('validate required_without_all', () => {
const rules = {
'f1': 'required_without_all:f2,f3',
'f2': 'required_without_all:f1,f3',
'f3': 'required_without_all:f1,f2',
}
const promises = [
validator({}, rules),
validator({ 'f1': 'foo' }, rules),
validator({ 'f2': 'foo' }, rules),
validator({ 'f3': 'foo' }, rules),
validator({ 'f1': 'foo', 'f2': 'bar' }, rules),
validator({ 'f1': 'foo', 'f3': 'bar' }, rules),
validator({ 'f2': 'foo', 'f3': 'bar' }, rules),
validator({ 'f1': 'foo', 'f2': 'bar', 'f3': 'baz' }, rules),
]
return Promise.all(promises).then(result => {
expect(result[0]).toBe(false)
expect(result[1]).toBe(true)
expect(result[2]).toBe(true)
expect(result[3]).toBe(true)
expect(result[4]).toBe(true)
expect(result[5]).toBe(true)
expect(result[6]).toBe(true)
expect(result[7]).toBe(true)
})
})
test('validate required_if', () => {
const promises = [
validator({ 'first': 'nikita' }, { 'last': 'required_if:first,nikita' }),
validator({ 'first': 'nikita', 'last': 'stenin' }, { 'last': 'required_if:first,nikita' }),
validator({ 'first': 'nikita', 'last': 'stenin' }, { 'last': 'required_if:first,nikita,ivan' }),
validator({ 'first': 'ivan', 'last': 'ivanov' }, { 'last': 'required_if:first,nikita,ivan' }),
validator({ 'foo': true }, { 'bar': 'required_if:foo,false' }),
validator({ 'foo': true }, { 'bar': 'required_if:foo,true' }),
validator({ 'first': 'ivan', 'last': '' }, { 'last': 'required_if:first,nikita,ivan' }),
]
return Promise.all(promises).then(result => {
expect(result[0]).toBe(false)
expect(result[1]).toBe(true)
expect(result[2]).toBe(true)
expect(result[3]).toBe(true)
expect(result[4]).toBe(true)
expect(result[5]).toBe(false)
expect(result[6]).toBe(false)
})
})
test('validate required_unless', () => {
const promises = [
validator({ 'first': 'nikita' }, { 'last': 'required_unless:first,ivan' }),
validator({ 'first': 'nikita' }, { 'last': 'required_unless:first,nikita' }),
validator({ 'first': 'ivan', 'last': 'ivanov' }, { 'last': 'required_unless:first,nikita' }),
validator({ 'first': 'nikita' }, { 'last': 'required_unless:first,nikita,ivan' }),
validator({ 'first': 'ivan' }, { 'last': 'required_unless:first,nikita,ivan' }),
validator({ 'first': 'pavel', 'last': '' }, { 'last': 'required_unless:first,nikita,ivan' }),
]
return Promise.all(promises).then(result => {
expect(result[0]).toBe(false)
expect(result[1]).toBe(true)
expect(result[2]).toBe(true)
expect(result[3]).toBe(true)
expect(result[4]).toBe(true)
expect(result[5]).toBe(false)
})
})
test('validate in_array', () => {
const promises = [
validator({ 'foo': [1, 2, 3], 'bar': [1, 2] }, { 'foo.*': 'in_array:bar.*' }),
validator({ 'foo': [1, 2], 'bar': [1, 2, 3] }, { 'foo.*': 'in_array:bar.*' }),
validator({ 'foo': [{ 'bar_id': 5 }, { 'bar_id': 2 }], 'bar': [{'id': 1}, {'id': 2}] }, { 'foo.*.bar_id': 'in_array:bar.*.id' }),
validator({ 'foo': [{ 'bar_id': 1 }, { 'bar_id': 2 }], 'bar': [{'id': 1}, {'id': 2}] }, { 'foo.*.bar_id': 'in_array:bar.*.id' }),
]
return Promise.all(promises).then(result => {
expect(result[0]).toBe(false)
expect(result[1]).toBe(true)
expect(result[2]).toBe(false)
expect(result[3]).toBe(true)
})
})
test('validate confirmed', () => {
const promises = [
validator({ 'password': 'foo' }, {'password': 'confirmed'}),
validator({ 'password': 'foo', 'password_confirmation': 'bar' }, { 'password': 'confirmed'}),
validator({ 'password': 'foo', 'password_confirmation': 'foo' }, { 'password': 'confirmed'}),
validator({ 'password': '1e2', 'password_confirmation': '100' }, { 'password': 'confirmed'}),
]
return Promise.all(promises).then(result => {
expect(result[0]).toBe(false)
expect(result[1]).toBe(false)
expect(result[2]).toBe(true)
expect(result[3]).toBe(false)
})
})
test('validate same', () => {
const promises = [
validator({ 'foo': 'bar', 'baz': 'boom' }, { 'foo': 'same:baz' }),
validator({ 'foo': 'bar' }, { 'foo': 'same:baz' }),
validator({ 'foo': 'bar', 'baz': 'bar' }, { 'foo': 'same:baz'}),
validator({ 'foo': '1e2', 'baz': '100' }, { 'foo': 'same:baz'}),
validator({ 'foo': null, 'baz': null }, { 'foo': 'same:baz' }),
]
return Promise.all(promises).then(result => {
expect(result[0]).toBe(false)
expect(result[1]).toBe(false)
expect(result[2]).toBe(true)
expect(result[3]).toBe(false)
expect(result[4]).toBe(true)
})
})
test('validate different', () => {
const promises = [
validator({ 'foo': 'bar', 'baz': 'boom'}, {'foo': 'different:baz'}),
validator({ 'foo': 'bar'}, {'foo': 'different:baz'}),
validator({ 'foo': 'bar', 'baz': 'bar'}, {'foo': 'different:baz'}),
validator({ 'foo': '1e2', 'baz': '100'}, {'foo': 'different:baz'}),
validator({ 'foo': 'bar', 'fuu': 'baa', 'baz': 'boom'}, {'foo': 'different:fuu,baz'}),
validator({ 'foo': 'bar', 'baz': 'boom'}, {'foo': 'different:fuu,baz'}),
validator({ 'foo': 'bar', 'fuu': 'bar', 'baz': 'boom'}, {'foo': 'different:fuu,baz'}),
]
return Promise.all(promises).then(result => {
expect(result[0]).toBe(true)
expect(result[1]).toBe(false)
expect(result[2]).toBe(false)
expect(result[3]).toBe(true)
expect(result[4]).toBe(true)
expect(result[5]).toBe(false)
expect(result[6]).toBe(false)
})
})
test('validate accepted', () => {
const promises = [
validator({'foo': 'no'}, {'foo': 'accepted'}),
validator({'foo': null}, {'foo': 'accepted'}),
validator({}, {'foo': 'accepted'}),
validator({'foo': 0}, {'foo': 'accepted'}),
validator({'foo': false}, {'foo': 'accepted'}),
validator({'foo': 'false'}, {'foo': 'accepted'}),
validator({'foo': 'yes'}, {'foo': 'accepted'}),
validator({'foo': 'on'}, {'foo': 'accepted'}),
validator({'foo': '1'}, {'foo': 'accepted'}),
validator({'foo': 1}, {'foo': 'accepted'}),
validator({'foo': true}, {'foo': 'accepted'}),
validator({'foo': 'true'}, {'foo': 'accepted'}),
]
return Promise.all(promises).then(result => {
expect(result[0]).toBe(false)
expect(result[1]).toBe(false)
expect(result[2]).toBe(false)
expect(result[3]).toBe(false)
expect(result[4]).toBe(false)
expect(result[5]).toBe(false)
expect(result[6]).toBe(true)
expect(result[7]).toBe(true)
expect(result[8]).toBe(true)
expect(result[9]).toBe(true)
expect(result[10]).toBe(true)
expect(result[11]).toBe(true)
})
})
test('validate string', () => {
const promises = [
validator({'x': 'aslsdlks'}, {'x': 'string'}),
validator({'x': {'blah': 'test'}}, {'x': 'string'}),
validator({'x': undefined}, {'x': 'string'}),
validator({'x': null}, {'x': 'string'}),
validator({'x': true}, {'x': 'string'}),
validator({'x': false}, {'x': 'string'}),
validator({'x': 0}, {'x': 'string'}),
validator({'x': 1}, {'x': 'string'}),
validator({'x': []}, {'x': 'string'}),
]
return Promise.all(promises).then(result => {
expect(result[0]).toBe(true)
expect(result[1]).toBe(false)
expect(result[2]).toBe(false)
expect(result[3]).toBe(false)
expect(result[4]).toBe(false)
expect(result[5]).toBe(false)
expect(result[6]).toBe(false)
expect(result[7]).toBe(false)
expect(result[8]).toBe(false)
})
})
test('validate string', () => {
const promises = [
validator({'x': []}, {'x': 'array'}),
validator({'x': undefined}, {'x': 'array'}),
validator({'x': null}, {'x': 'array'}),
validator({'x': true}, {'x': 'array'}),
validator({'x': false}, {'x': 'array'}),
validator({'x': 1}, {'x': 'array'}),
validator({'x': 0}, {'x': 'array'}),
validator({'x': ''}, {'x': 'array'}),
validator({'x': 'test'}, {'x': 'array'}),
validator({'x': {}}, {'x': 'array'}),
]
return Promise.all(promises).then(result => {
expect(result[0]).toBe(true)
expect(result[1]).toBe(false)
expect(result[2]).toBe(false)
expect(result[3]).toBe(false)
expect(result[4]).toBe(false)
expect(result[5]).toBe(false)
expect(result[6]).toBe(false)
expect(result[7]).toBe(false)
expect(result[8]).toBe(false)
expect(result[9]).toBe(false)
})
})
test('validate json', () => {
const promises = [
validator({'foo': 'aslksd'}, {'foo': 'json'}),
validator({'foo': '{}'}, {'foo': 'json'}),
validator({'foo': '{"name":"John","age":"34"}'}, {'foo': 'json'}),
]
return Promise.all(promises).then(result => {
expect(result[0]).toBe(false)
expect(result[1]).toBe(true)
expect(result[2]).toBe(true)
})
})
test('validate boolean', () => {
const promises = [
validator({'foo': 'no'}, {'foo': 'boolean'}),
validator({'foo': 'yes'}, {'foo': 'boolean'}),
validator({'foo': 'false'}, {'foo': 'boolean'}),
validator({'foo': 'true'}, {'foo': 'boolean'}),
validator({}, {'foo': 'boolean'}),
validator({'foo': false}, {'foo': 'boolean'}),
validator({'foo': true}, {'foo': 'boolean'}),
validator({'foo': '1'}, {'foo': 'boolean'}),
validator({'foo': 1}, {'foo': 'boolean'}),
validator({'foo': '0'}, {'foo': 'boolean'}),
validator({'foo': 0}, {'foo': 'boolean'}),
]
return Promise.all(promises).then(result => {
expect(result[0]).toBe(false)
expect(result[1]).toBe(false)
expect(result[2]).toBe(false)
expect(result[3]).toBe(false)
expect(result[4]).toBe(false)
expect(result[5]).toBe(true)
expect(result[6]).toBe(true)
expect(result[7]).toBe(true)
expect(result[8]).toBe(true)
expect(result[9]).toBe(true)
expect(result[10]).toBe(true)
})
})
test('validate numeric', () => {
const promises = [
validator({'foo': 'asdad'}, {'foo': 'numeric'}),
validator({'foo': '1.23'}, {'foo': 'numeric'}),
validator({'foo': '-1'}, {'foo': 'numeric'}),
validator({'foo': '1'}, {'foo': 'numeric'}),
validator({'foo': 'a'}, {'foo': 'numeric'}),
validator({'foo': '1234567a89'}, {'foo': 'numeric'}),
validator({'foo': null}, {'foo': 'numeric'}),
validator({'foo': undefined}, {'foo': 'numeric'}),
validator({'foo': true}, {'foo': 'numeric'}),
validator({'foo': false}, {'foo': 'numeric'}),
validator({'foo': {}}, {'foo': 'numeric'}),
]
return Promise.all(promises).then(result => {
expect(result[0]).toBe(false)
expect(result[1]).toBe(true)
expect(result[2]).toBe(true)
expect(result[3]).toBe(true)
expect(result[4]).toBe(false)
expect(result[5]).toBe(false)
expect(result[6]).toBe(false)
expect(result[7]).toBe(false)
expect(result[8]).toBe(false)
expect(result[9]).toBe(false)
expect(result[10]).toBe(false)
})
})
test('validate integer', () => {
const promises = [
validator({'foo': 'asdad'}, {'foo': 'integer'}),
validator({'foo': '1.23'}, {'foo': 'integer'}),
validator({'foo': '-1'}, {'foo': 'integer'}),
validator({'foo': '1'}, {'foo': 'integer'}),
validator({'foo': '1234567890'}, {'foo': 'integer'}),
validator({'foo': 123}, {'foo': 'integer'}),
validator({'foo': -123}, {'foo': 'integer'}),
validator({'foo': '-123'}, {'foo': 'integer'}),
validator({'foo': 'a'}, {'foo': 'integer'}),
validator({'foo': '1234567a89'}, {'foo': 'integer'}),
validator({'foo': null}, {'foo': 'integer'}),
validator({'foo': undefined}, {'foo': 'integer'}),
validator({'foo': true}, {'foo': 'integer'}),
validator({'foo': false}, {'foo': 'integer'}),
validator({'foo': {}}, {'foo': 'integer'}),
validator({'foo': '+123'}, {'foo': 'integer'}),
validator({'foo': 12.2}, {'foo': 'integer'}),
validator({'foo': '13.3'}, {'foo': 'integer'}),
]
return Promise.all(promises).then(result => {
expect(result[0]).toBe(false)
expect(result[1]).toBe(false)
expect(result[2]).toBe(true)
expect(result[3]).toBe(true)
expect(result[4]).toBe(true)
expect(result[5]).toBe(true)
expect(result[6]).toBe(true)
expect(result[7]).toBe(true)
expect(result[8]).toBe(false)
expect(result[9]).toBe(false)
expect(result[10]).toBe(false)
expect(result[11]).toBe(false)
expect(result[12]).toBe(false)
expect(result[13]).toBe(false)
expect(result[14]).toBe(false)
expect(result[15]).toBe(false)
expect(result[16]).toBe(false)
expect(result[17]).toBe(false)
})
})
test('validate digits', () => {
const promises = [
validator({'foo': '12345'}, {'foo': 'digits:5'}),
validator({'foo': '123'}, {'foo': 'digits:200'}),
validator({'foo': '+2.37'}, {'foo': 'digits:5'}),
validator({'foo': '2e7'}, {'foo': 'digits:3'}),
validator({'foo': '12345'}, {'foo': 'digits_between:1,6'}),
validator({'foo': 'bar'}, {'foo': 'digits_between:1,10'}),
validator({'foo': '123'}, {'foo': 'digits_between:4,5'}),
validator({'foo': '+12.3'}, {'foo': 'digits_between:1,6'}),
]
return Promise.all(promises).then(result => {
expect(result[0]).toBe(true)
expect(result[1]).toBe(false)
expect(result[2]).toBe(false)
expect(result[3]).toBe(false)
expect(result[4]).toBe(true)
expect(result[5]).toBe(false)
expect(result[6]).toBe(false)
expect(result[7]).toBe(false)
})
})
test('validate size', () => {
const promises = [
validator({'foo': 'asdad'}, {'foo': 'size:3'}),
validator({'foo': 'anc'}, {'foo': 'size:3'}),
validator({'foo': '123'}, {'foo': 'numeric|size:3'}),
validator({'foo': '3'}, {'foo': 'numeric|size:3'}),
validator({'foo': [1, 2, 3]}, {'foo': 'array|size:3'}),
validator({'foo': [1, 2, 3]}, {'foo': 'array|size:4'}),
]
return Promise.all(promises).then(result => {
expect(result[0]).toBe(false)
expect(result[1]).toBe(true)
expect(result[2]).toBe(false)
expect(result[3]).toBe(true)
expect(result[4]).toBe(true)
expect(result[5]).toBe(false)
})
})
test('validate between', () => {
const promises = [
validator({'foo': 'asdad'}, {'foo': 'between:3,4'}),
validator({'foo': 'anc'}, {'foo': 'between:3,5'}),
validator({'foo': 'ancf'}, {'foo': 'between:3,5'}),
validator({'foo': 'ancfs'}, {'foo': 'between:3,5'}),
validator({'foo': '123'}, {'foo': 'numeric|between:50,100'}),
validator({'foo': '3'}, {'foo': 'numeric|between:1,5'}),
validator({'foo': [1, 2, 3]}, {'foo': 'array|between:1,5'}),
validator({'foo': [1, 2, 3]}, {'foo': 'array|between:1,2'}),
]
return Promise.all(promises).then(result => {
expect(result[0]).toBe(false)
expect(result[1]).toBe(true)
expect(result[2]).toBe(true)
expect(result[3]).toBe(true)
expect(result[4]).toBe(false)
expect(result[5]).toBe(true)
expect(result[6]).toBe(true)
expect(result[7]).toBe(false)
})
})
test('validate min', () => {
const promises = [
validator({'foo': '3'}, {'foo': 'min:3'}),
validator({'foo': 'anc'}, {'foo': 'min:3'}),
validator({'foo': '2'}, {'foo': 'numeric|min:3'}),
validator({'foo': '5'}, {'foo': 'numeric|min:3'}),
validator({'foo': [1, 2, 3, 4]}, {'foo': 'array|min:3'}),
validator({'foo': [1, 2]}, {'foo': 'array|min:3'}),
]
return Promise.all(promises).then(result => {
expect(result[0]).toBe(false)
expect(result[1]).toBe(true)
expect(result[2]).toBe(false)
expect(result[3]).toBe(true)
expect(result[4]).toBe(true)
expect(result[5]).toBe(false)
})
})
test('validate max', () => {
const promises = [
validator({'foo': 'aslksd'}, {'foo': 'max:3'}),
validator({'foo': 'anc'}, {'foo': 'max:3'}),
validator({'foo': '211'}, {'foo': 'numeric|max:100'}),
validator({'foo': '22'}, {'foo': 'numeric|max:33'}),
validator({'foo': [1, 2, 3]}, {'foo': 'array|max:4'}),
validator({'foo': [1, 2, 3]}, {'foo': 'array|max:2'}),
]
return Promise.all(promises).then(result => {
expect(result[0]).toBe(false)
expect(result[1]).toBe(true)
expect(result[2]).toBe(false)
expect(result[3]).toBe(true)
expect(result[4]).toBe(true)
expect(result[5]).toBe(false)
})
})
test('validate in', () => {
const promises = [
validator({'name': 'foo'}, {'name': 'in:bar,baz'}),
validator({'name': 0}, {'name': 'in:bar,baz'}),
validator({'name': 'foo'}, {'name': 'in:foo,baz'}),
validator({'name': ['foo', 'bar']}, {'name': 'array|in:foo,baz'}),
validator({'name': ['foo', 'qux']}, {'name': 'array|in:foo,baz,qux'}),
validator({'name': ['foo', 'bar']}, {'name': 'alpha|in:foo,bar'}),
validator({'name': ['foo', []]}, {'name': 'array|in:foo,bar'}),
]
return Promise.all(promises).then(result => {
expect(result[0]).toBe(false)
expect(result[1]).toBe(false)
expect(result[2]).toBe(true)
expect(result[3]).toBe(false)
expect(result[4]).toBe(true)
expect(result[5]).toBe(false)
expect(result[6]).toBe(false)
})
})
test('validate not_in', () => {
const promises = [
validator({'name': 'foo'}, {'name': 'not_in:bar,baz'}),
validator({'name': 'foo'}, {'name': 'not_in:foo,baz'}),
]
return Promise.all(promises).then(result => {
expect(result[0]).toBe(true)
expect(result[1]).toBe(false)
})
})
test('validate distinct', () => {
const promises = [
validator({'foo': ['foo', 'foo']}, {'foo.*': 'distinct'}),
validator({'foo': ['à', 'À']}, {'foo.*': 'distinct:ignore_case'}),
validator({'foo': ['f/oo', 'F/OO']}, {'foo.*': 'distinct:ignore_case'}),
validator({'foo': ['foo', 'bar']}, {'foo.*': 'distinct'}),
validator({'foo': {'bar': {'id': 1}, 'baz': {'id': 1}}}, {'foo.*.id': 'distinct'}),
validator({'foo': {'bar': {'id': 'qux'}, 'baz': {'id': 'QUX'}}}, {'foo.*.id': 'distinct'}),
validator({'foo': {'bar': {'id': 'qux'}, 'baz': {'id': 'QUX'}}}, {'foo.*.id': 'distinct:ignore_case'}),
validator({'foo': {'bar': {'id': 1}, 'baz': {'id': 2}}}, {'foo.*.id': 'distinct'}),
validator({'foo': [{'id': 1, 'nested': {'id': 1}}]}, {'foo.*.id': 'distinct'}),
validator({'foo': [{'id': 1}, {'id': 1}]}, {'foo.*.id': 'distinct'}),
validator({'foo': [{'id': 1}, {'id': 2}]}, {'foo.*.id': 'distinct'}),
validator({'cat': [{'prod': [{'id': 1}]}, {'prod': [{'id': 1}]}]}, {'cat.*.prod.*.id': 'distinct'}),
validator({'cat': [{'prod': [{'id': 1}]}, {'prod': [{'id': 2}]}]}, {'cat.*.prod.*.id': 'distinct'}),
validator({'cat': {'sub': [{'prod': [{'id': 1}]}, {'prod': [{'id': 2}]}]}}, {'cat.sub.*.prod.*.id': 'distinct'}),
validator({'cat': {'sub':[{'prod':[{'id': 2}]},{'prod':[{'id': 2}]}]}}, {'cat.sub.*.prod.*.id': 'distinct'}),
validator({'foo': ['foo', 'foo']}, {'foo.*': 'distinct'}),
]
return Promise.all(promises).then(result => {
expect(result[0]).toBe(false)
expect(result[1]).toBe(false)
expect(result[2]).toBe(false)
expect(result[3]).toBe(true)
expect(result[4]).toBe(false)
expect(result[5]).toBe(true)
expect(result[6]).toBe(false)
expect(result[7]).toBe(true)
expect(result[8]).toBe(true)
expect(result[9]).toBe(false)
expect(result[10]).toBe(true)
expect(result[11]).toBe(false)
expect(result[12]).toBe(true)
expect(result[13]).toBe(true)
expect(result[14]).toBe(false)
expect(result[15]).toBe(false)
})
})
test('validate ip', () => {
const promises = [
validator({'ip': 'aslsdlks'}, {'ip': 'ip'}),
validator({'ip': '127.0.0.1'}, {'ip': 'ip'}),
validator({'ip': '127.0.0.1'}, {'ip': 'ipv4'}),
validator({'ip': '::1'}, {'ip': 'ipv6'}),
validator({'ip': '127.0.0.1'}, {'ip': 'ipv6'}),
validator({'ip': '::1'}, {'ip': 'ipv4'}),
validator({'ip': '192.168.1.1'}, {'ip': 'ip'}),
validator({'ip': '255.255.255.255'}, {'ip': 'ip'}),
validator({'ip': '0.0.0.0'}, {'ip': 'ip'}),
validator({'ip': '::1'}, {'ip': 'ip'}),
validator({'ip': '2001:db8:0000:1:1:1:1:1'}, {'ip': 'ip'}),
validator({'ip': '::ffff:127.0.0.1'}, {'ip': 'ip'}),
validator({'ip': '192.168.a.1',}, {'ip': 'ip'}),
validator({'ip': '255.255.255.256',}, {'ip': 'ip'}),
validator({'ip': '23.a.f.234',}, {'ip': 'ip'}),
validator({'ip': '::ffff:287.0.0.1',}, {'ip': 'ip'}),
validator({'ip': '192.168.1.1'}, {'ip': 'ipv4'}),
validator({'ip': '255.255.255.255'}, {'ip': 'ipv4'}),
validator({'ip': '0.0.0.0'}, {'ip': 'ipv4'}),
validator({'ip': '2001:db8:0000:1:1:1:1:1'}, {'ip': 'ipv4'}),
validator({'ip': '::ffff:127.0.0.1'}, {'ip': 'ipv4'}),
validator({'ip': '192.168.a.1'}, {'ip': 'ipv4'}),
validator({'ip': '255.255.255.256'}, {'ip': 'ipv4'}),
validator({'ip': '23.a.f.234'}, {'ip': 'ipv4'}),
validator({'ip': '::ffff:287.0.0.1'}, {'ip': 'ipv4'}),
validator({'ip': '2001:db8:0000:1:1:1:1:1'}, {'ip': 'ipv6'}),
validator({'ip': '::ffff:127.0.0.1'}, {'ip': 'ipv6'}),
validator({'ip': '192.168.a.1'}, {'ip': 'ipv6'}),
validator({'ip': '255.255.255.256'}, {'ip': 'ipv6'}),
validator({'ip': '23.a.f.234'}, {'ip': 'ipv6'}),
validator({'ip': '192.168.1.1'}, {'ip': 'ipv6'}),
validator({'ip': '255.255.255.255'}, {'ip': 'ipv6'}),
validator({'ip': '0.0.0.0'}, {'ip': 'ipv6'}),
validator({'ip': '::ffff:287.0.0.1'}, {'ip': 'ipv6'}),
]
return Promise.all(promises).then(result => {
expect(result[0]).toBe(false)
expect(result[1]).toBe(true)
expect(result[2]).toBe(true)
expect(result[3]).toBe(true)
expect(result[4]).toBe(false)
expect(result[5]).toBe(false)
expect(result[6]).toBe(true)
expect(result[7]).toBe(true)
expect(result[8]).toBe(true)
expect(result[9]).toBe(true)
expect(result[10]).toBe(true)
expect(result[11]).toBe(true)
expect(result[12]).toBe(false)
expect(result[13]).toBe(false)
expect(result[14]).toBe(false)
expect(result[15]).toBe(false)
expect(result[16]).toBe(true)
expect(result[17]).toBe(true)
expect(result[18]).toBe(true)
expect(result[19]).toBe(false)
expect(result[20]).toBe(false)
expect(result[21]).toBe(false)
expect(result[22]).toBe(false)
expect(result[23]).toBe(false)
expect(result[24]).toBe(false)
expect(result[25]).toBe(true)
expect(result[26]).toBe(true)
expect(result[27]).toBe(false)
expect(result[28]).toBe(false)
expect(result[29]).toBe(false)
expect(result[30]).toBe(false)
expect(result[31]).toBe(false)
expect(result[32]).toBe(false)
expect(result[33]).toBe(false)
})
})
test('validate email', () => {
const promises = [
validator({'x': 'aslsdlks'}, {'x': 'email'}),
validator({'x': '@example.com'}, {'x': 'email'}),
validator({'x': '@example'}, {'x': 'email'}),
validator({'x': undefined}, {'x': 'email'}),
validator({'x': null}, {'x': 'email'}),
validator({'x': 'undefined'}, {'x': 'email'}),
validator({'x': 'null'}, {'x': 'email'}),
validator({'x': 'someone@example.c'}, {'x': 'email'}),
validator({'x': true}, {'x': 'email'}),
validator({'x': false}, {'x': 'email'}),
validator({'x': 'foo@gmail.com'}, {'x': 'email'}),
validator({'x': 'someone@example.com'}, {'x': 'email'}),
validator({'x': 'someone@example.co'}, {'x': 'email'}),
validator({'x': 'someone123@example.co.uk'}, {'x': 'email'}),
validator({'x': 'Pelé@example.com'}, {'x': 'email'}),
validator({'x': 'very.common@example.com'}, {'x': 'email'}),
validator({'x': 'other.email-with-dash@example.com'}, {'x': 'email'}),
validator({'x': 'disposable.style.email.with+symbol@example.com'}, {'x': 'email'}),
]
return Promise.all(promises).then(result => {
expect(result[0]).toBe(false)
expect(result[1]).toBe(false)
expect(result[2]).toBe(false)
expect(result[3]).toBe(false)
expect(result[4]).toBe(false)
expect(result[5]).toBe(false)
expect(result[6]).toBe(false)
expect(result[7]).toBe(false)
expect(result[8]).toBe(false)
expect(result[9]).toBe(false)
expect(result[10]).toBe(true)
expect(result[11]).toBe(true)
expect(result[12]).toBe(true)
expect(result[13]).toBe(true)
expect(result[14]).toBe(true)
expect(result[15]).toBe(true)
expect(result[16]).toBe(true)
expect(result[17]).toBe(true)
})
})
test('validate alpha', () => {
const promises = [
validator({'x': 'aslsdlks'}, {'x': 'alpha'}),
validator({'x': `aslsdlks
1
1`}, {'x': 'alpha'}),
validator({'x': 'http://google.com'}, {'x': 'alpha'}),
validator({'x': 'Continuación'}, {'x': 'alpha'}),
validator({'x': 'ofreció su dimisión'}, {'x': 'alpha'}),
validator({'x': '❤'}, {'x': 'alpha'}),
validator({'x': '123'}, {'x': 'alpha'}),
validator({'x': 123}, {'x': 'alpha'}),
validator({'x': 'abc123'}, {'x': 'alpha'}),
// any locale.
validator({'x': 'سلام'}, {'x': 'alpha'}),
validator({'x': 'Привет'}, {'x': 'alpha'}),
// specfic locale
validator({'x': 'peace'}, {'x': 'alpha:ar'}),
validator({'x': 'peace'}, {'x': 'alpha:ru'}),
// non-existant locale defaults to english validation.
validator({'x': 'peace'}, {'x': 'alpha:blah'}),
// non english characters.
validator({'x': 'اين اشيائي'}, {'x': 'alpha:blah'}),
]
return Promise.all(promises).then(result => {
expect(result[0]).toBe(true)
expect(result[1]).toBe(false)
expect(result[2]).toBe(false)
expect(result[3]).toBe(true)
expect(result[4]).toBe(false)
expect(result[5]).toBe(false)
expect(result[6]).toBe(false)
expect(result[7]).toBe(false)
expect(result[8]).toBe(false)
expect(result[9]).toBe(true)
expect(result[10]).toBe(true)
expect(result[11]).toBe(false)
expect(result[12]).toBe(false)
expect(result[13]).toBe(true)
expect(result[14]).toBe(false)
})
})
test('validate alpha_num', () => {
const promises = [
validator({'x': 'asls13dlks'}, {'x': 'alpha_num'}),
validator({'x': 'http://g232oogle.com'}, {'x': 'alpha_num'}),
validator({'x': '٧٨٩'}, {'x': 'alpha_num'}),
// any locale.
validator({'x': 'سلام12'}, {'x': 'alpha_num'}),
validator({'x': 'Привет12'}, {'x': 'alpha_num'}),
// specfic locale
validator({'x': 'peace'}, {'x': 'alpha_num:ar'}),
validator({'x': 'peace'}, {'x': 'alpha_num:ru'}),
// non-existant locale defaults to english validation.
validator({'x': 'peace'}, {'x': 'alpha_num:blah'}),
// non english characters.
validator({'x': 'اين اشيائي'}, {'x': 'alpha_num:blah'}),
]
return Promise.all(promises).then(result => {
expect(result[0]).toBe(true)
expect(result[1]).toBe(false)
expect(result[2]).toBe(true)
expect(result[3]).toBe(true)
expect(result[4]).toBe(true)
expect(result[5]).toBe(false)
expect(result[6]).toBe(false)
expect(result[7]).toBe(true)
expect(result[8]).toBe(false)
})
})
test('validate alpha_dash', () => {
const promises = [
validator({'x': 'asls1-_3dlks'}, {'x': 'alpha_dash'}),
validator({'x': 'http://-g232oogle.com'}, {'x': 'alpha_dash'}),
validator({'x': '٧٨٩'}, {'x': 'alpha_dash'}),
// any locale.
validator({'x': 'سلا-م_'}, {'x': 'alpha_dash'}),
validator({'x': 'Привет_-'}, {'x': 'alpha_dash'}),
// specfic locale
validator({'x': 'peace'}, {'x': 'alpha_dash:ar'}),
validator({'x': 'peace'}, {'x': 'alpha_dash:ru'}),
// non-existant locale defaults to english validation.
validator({'x': 'peace'}, {'x': 'alpha_dash:blah'}),
// non english characters.
validator({'x': 'اين اشيائي'}, {'x': 'alpha_dash:blah'}),
]
return Promise.all(promises).then(result => {
expect(result[0]).toBe(true)
expect(result[1]).toBe(false)
expect(result[2]).toBe(true)
expect(result[3]).toBe(true)
expect(result[4]).toBe(true)
expect(result[5]).toBe(false)
expect(result[6]).toBe(false)
expect(result[7]).toBe(true)
expect(result[8]).toBe(false)
})
})
test('validate regex', () => {
const promises = [
validator({'x': 'asdasdf'}, {'x': [['regex', /^([a-z])+$/i]]}),
validator({'x': 'aasd234fsd1'}, {'x': [['regex', /^([a-z])+$/i]]}),
validator({'x': 'a,b'}, {'x': [['regex', /^a,b$/i]]}),
validator({'x': '12'}, {'x': [['regex', /^12$/i]]}),
validator({'x': 123}, {'x': [['regex', /^123$/i]]}),
]
return Promise.all(promises).then(result => {
expect(result[0]).toBe(true)
expect(result[1]).toBe(false)
expect(result[2]).toBe(true)
expect(result[3]).toBe(true)
expect(result[4]).toBe(true)
})
})
test('validate date and date_format', () => {
const promises = [
validator({'x': '2000-01-01'}, {'x': 'date'}),
validator({'x': '01/01/2000'}, {'x': 'date'}),
validator({'x': '1325376000'}, {'x': 'date'}),
validator({'x': 'Not a date'}, {'x': 'date'}),
validator({'x': ['Not', 'a', 'date']}, {'x': 'date'}),
validator({'x': new Date()}, {'x': 'date'}),
validator({'x': '2000-01-01'}, {'x': 'date_format:YYYY-MM-DD'}),
validator({'x': '01/01/2001'}, {'x': 'date_format:YYYY-MM-DD'}),
validator({'x': '22000-01-01'}, {'x': 'date_format:YYYY-MM-DD'}),
validator({'x': '00-01-01'}, {'x': 'date_format:YYYY-MM-DD'}),
validator({'x': ['Not', 'a', 'date']}, {'x': 'date_format:YYYY-MM-DD'}),
validator({'x': '2013-02'}, {'x': 'date_format:YYYY-MM'}),
validator({'x': '2000-01-01T00:00:00Z'}, {'x': 'date_format:YYYY-MM-DD[T]HH:mm:ss[Z]'}),
validator({'x': '2000-01-01T00:00:00+0000'}, {'x': 'date_format:YYYY-MM-DD[T]HH:mm:ssZZ'}),
validator({'x': '2000-01-01T00:00:00+00:00'}, {'x': 'date_format:YYYY-MM-DD[T]HH:mm:ssZ'}), // with +00:30 failed ???
validator({'x': '2000-01-01 17:43:59'}, {'x': 'date_format:YYYY-MM-DD HH:mm:ss'}),
validator({'x': '2000-01-01 17:43:59'}, {'x': 'date_format:HH:mm:ss'}),
validator({'x': '17:43:59'}, {'x': 'date_format:HH:mm:ss'}),
validator({'x': '17:43:59'}, {'x': 'date_format:HH:mm'}),
validator({'x': '17:43'}, {'x': 'date_format:HH:mm'}),
validator({'x': 1325376000}, {'x': 'date'}),
]
return Promise.all(promises).then(result => {
expect(result[0]).toBe(true)
expect(result[1]).toBe(true) // true
expect(result[2]).toBe(false)
expect(result[3]).toBe(false)
expect(result[4]).toBe(false)
expect(result[5]).toBe(true)
expect(result[6]).toBe(true) // true
expect(result[7]).toBe(false)
expect(result[8]).toBe(false)
expect(result[9]).toBe(false)
expect(result[10]).toBe(false)
expect(result[11]).toBe(true) // true
expect(result[12]).toBe(true) // true
expect(result[13]).toBe(true) // true
expect(result[14]).toBe(true) // true
expect(result[15]).toBe(true) // true
expect(result[16]).toBe(false)
expect(result[17]).toBe(true)
expect(result[18]).toBe(false)
expect(result[19]).toBe(true)
expect(result[20]).toBe(true)
})
})
test('validate date_equals', () => {
const promises = [
validator({'x': '2000-01-01'}, {'x': 'date_equals:2000-01-01'}),
validator({'x': new Date(2000, 0, 1)}, {'x': 'date_equals:2000-01-01'}),
validator({'x': new Date(2000, 0, 1)}, {'x': 'date_equals:2001-01-01'}),
validator({'start': new Date(2000, 0, 1), 'ends': new Date(2000, 0, 1)}, {'ends': 'date_equals:start'}),
validator({'x': '2012-01-01 17:44:00'}, {'x': 'date_format:YYYY-MM-DD HH:mm:ss|date_equals:2012-01-01 17:44:00'}),
validator({'x': '2012-01-01 17:44:00'}, {'x': 'date_format:YYYY-MM-DD HH:mm:ss|date_equals:2012-01-01 17:43:59'}),
validator({'x': '2012-01-01 17:44:00'}, {'x': 'date_format:YYYY-MM-DD HH:mm:ss|date_equals:2012-01-01 17:44:01'}),
validator({'x': '17:44:00'}, {'x': 'date_format:HH:mm:ss|date_equals:17:44:00'}),
validator({'x': '17:44:00'}, {'x': 'date_format:HH:mm:ss|date_equals:17:43:59'}),
validator({'x': '17:44:00'}, {'x': 'date_format:HH:mm:ss|date_equals:17:44:01'}),
validator({'x': '17:44'}, {'x': 'date_format:HH:mm|date_equals:17:44'}),
validator({'x': '17:44'}, {'x': 'date_format:HH:mm|date_equals:17:43'}),
validator({'x': '17:44'}, {'x': 'date_format:HH:mm|date_equals:17:45'}),
]
return Promise.all(promises).then(result => {
expect(result[0]).toBe(true)
expect(result[1]).toBe(true)
expect(result[2]).toBe(false)
expect(result[3]).toBe(true)
expect(result[4]).toBe(true)
expect(result[5]).toBe(false)
expect(result[6]).toBe(false)
expect(result[7]).toBe(true)
expect(result[8]).toBe(false)
expect(result[9]).toBe(false)
expect(result[10]).toBe(true)
expect(result[11]).toBe(false)
expect(result[12]).toBe(false)
})
})
test('validate before and after', () => {
const promises = [
validator({'x': '2000-01-01'}, {'x': 'before:2012-01-01'}),
validator({'x': ['2000-01-01']}, {'x': 'before:2012-01-01'}),
validator({'x': new Date(2000, 0, 1)}, {'x': 'before:2012-01-01'}),
validator({'x': [new Date(2000, 0, 1)]}, {'x': 'before:2012-01-01'}),
validator({'x': '2012-01-01'}, {'x': 'after:2000-01-01'}),
validator({'x': ['2012-01-01']}, {'x': 'after:2000-01-01'}),
validator({'x': new Date(2012, 0, 1)}, {'x': 'after:2000-01-01'}),
validator({'x': [new Date(2012, 0, 1)]}, {'x': 'after:2000-01-01'}),
validator({'start': '2012-01-01', 'ends': '2013-01-01'}, {'start': 'after:2000-01-01', 'ends': 'after:start'}),
validator({'start': '2012-01-01', 'ends': '2000-01-01'}, {'start': 'after:2000-01-01', 'ends': 'after:start'}),
validator({'start': '2012-01-01', 'ends': '2013-01-01'}, {'start': 'before:ends', 'ends': 'after:start'}),
validator({'start': '2012-01-01', 'ends': '2000-01-01'}, {'start': 'before:ends', 'ends': 'after:start'}),
validator({'x': new Date(2000, 0, 1)}, {'x': 'before:2012-01-01'}),
validator({'start': new Date(2012, 0, 1), 'ends': new Date(2013, 0, 1)}, {'start': 'before:ends', 'ends': 'after:start'}),
validator({'start': '2012-01-01', 'ends': new Date(2013, 0, 1)}, {'start': 'before:ends', 'ends': 'after:start'}),
validator({'start': new Date(2012, 0, 1), 'ends': new Date(2000, 0, 1)}, {'start': 'after:2000-01-01', 'ends': 'after:start'}),
validator({'x': '2012-01-01 17:43:59'}, {'x': 'before:2012-01-01 17:44|after:2012-01-01 17:43:58'}),
validator({'x': '2012-01-01 17:44:01'}, {'x': 'before:2012-01-01 17:44:02|after:2012-01-01 17:44'}),
validator({'x': '2012-01-01 17:44'}, {'x': 'before:2012-01-01 17:44:00'}),
validator({'x': '2012-01-01 17:44'}, {'x': 'after:2012-01-01 17:44:00'}),
validator({'x': '17:43:59'}, {'x': 'before:17:44|after:17:43:58'}),
validator({'x': '17:44:01'}, {'x': 'before:17:44:02|after:17:44'}),
validator({'x': '17:44'}, {'x': 'before:17:44:00'}),
validator({'x': '17:44'}, {'x': 'after:17:44:00'}),
]
return Promise.all(promises).then(result => {
expect(result[0]).toBe(true)
expect(result[1]).toBe(false)
expect(result[2]).toBe(true)
expect(result[3]).toBe(false)
expect(result[4]).toBe(true)
expect(result[5]).toBe(false)
expect(result[6]).toBe(true)
expect(result[7]).toBe(false)
expect(result[8]).toBe(true)
expect(result[9]).toBe(false)
expect(result[10]).toBe(true)
expect(result[11]).toBe(false)
expect(result[12]).toBe(true)
expect(result[13]).toBe(true)
expect(result[14]).toBe(true)
expect(result[15]).toBe(false)
expect(result[16]).toBe(true)
expect(result[17]).toBe(true)
expect(result[18]).toBe(false)
expect(result[19]).toBe(false)
expect(result[20]).toBe(true)
expect(result[21]).toBe(true)
expect(result[22]).toBe(false)
expect(result[23]).toBe(false)
})
})
test('validate before and after with format', () => {
const promises = [
validator({'x': '31/12/2000'}, {'x': 'before:31/02/2012'}),
validator({'x': ['31/12/2000']}, {'x': 'before:31/02/2012'}),
validator({'x': '31/12/2000'}, {'x': 'date_format:DD/MM/YYYY|before:31/12/2012'}),
validator({'x': '31/12/2012'}, {'x': 'after:31/12/2000'}),
validator({'x': ['31/12/2012']}, {'x': 'after:31/12/2000'}),
validator({'x': '31/12/2012'}, {'x': 'date_format:DD/MM/YYYY|after:31/12/2000'}),
validator({'start': '31/12/2012', 'ends': '31/12/2013'}, {'start': 'after:01/01/2000', 'ends': 'after:start'}),
validator({'start': '31/12/2012', 'ends': '31/12/2013'}, {'start': 'date_format:DD/MM/YYYY|after:31/12/2000', 'ends': 'date_format:DD/MM/YYYY|after:start'}),
validator({'start': '31/12/2012', 'ends': '31/12/2000'}, {'start': 'after:31/12/2000', 'ends': 'after:start'}),
validator({'start': '31/12/2012', 'ends': '31/12/2000'}, {'start': 'date_format:DD/MM/YYYY|after:31/12/2000', 'ends': 'date_format:DD/MM/YYYY|after:start'}),
validator({'start': '31/12/2012', 'ends': '31/12/2013'}, {'start': 'before:ends', 'ends': 'after:start'}),
validator({'start': '31/12/2012', 'ends': '31/12/2013'}, {'start': 'date_format:DD/MM/YYYY|before:ends', 'ends': 'date_format:DD/MM/YYYY|after:start'}),
validator({'start': '31/12/2012', 'ends': '31/12/2000'}, {'start': 'before:ends', 'ends': 'after:start'}),
validator({'start': '31/12/2012', 'ends': '31/12/2000'}, {'start': 'date_format:DD/MM/YYYY|before:ends', 'ends': 'date_format:DD/MM/YYYY|after:start'}),
validator({'start': 'invalid', 'ends': 'invalid'}, {'start': 'date_format:DD/MM/YYYY|before:ends', 'ends': 'date_format:DD/MM/YYYY|after:start'}),
validator({'x': '2012-01-01 17:44:00'}, {'x': 'date_format:YYYY-MM-DD HH:mm:ss|before:2012-01-01 17:44:01|after:2012-01-01 17:43:59'}),
validator({'x': '2012-01-01 17:44:00'}, {'x': 'date_format:YYYY-MM-DD HH:mm:ss|before:2012-01-01 17:44:00'}),
validator({'x': '2012-01-01 17:44:00'}, {'x': 'date_format:YYYY-MM-DD HH:mm:ss|after:2012-01-01 17:44:00'}),
validator({'x': '17:44:00'}, {'x': 'date_format:HH:mm:ss|before:17:44:01|after:17:43:59'}),
validator({'x': '17:44:00'}, {'x': 'date_format:HH:mm:ss|before:17:44:00'}),
validator({'x': '17:44:00'}, {'x': 'date_format:HH:mm:ss|after:17:44:00'}),
validator({'x': '17:44'}, {'x': 'date_format:HH:mm|before:17:45|after:17:43'}),
validator({'x': '17:44'}, {'x': 'date_format:HH:mm|before:17:44'}),
validator({'x': '17:44'}, {'x': 'date_format:HH:mm|after:17:44'}),
]
return Promise.all(promises).then(result => {
expect(result[0]).toBe(false)
expect(result[1]).toBe(false)
expect(result[2]).toBe(true) // true
expect(result[3]).toBe(false)
expect(result[4]).toBe(false)
expect(result[5]).toBe(true) // true
expect(result[6]).toBe(false)
expect(result[7]).toBe(true) // true
expect(result[8]).toBe(false)
expect(result[9]).toBe(false)
expect(result[10]).toBe(false)
expect(result[11]).toBe(true) // true
expect(result[12]).toBe(false)
expect(result[13]).toBe(false)
expect(result[14]).toBe(false)
expect(result[15]).toBe(true)
expect(result[16]).toBe(false)
expect(result[17]).toBe(false)
expect(result[18]).toBe(true)
expect(result[19]).toBe(false)
expect(result[20]).toBe(false)
expect(result[21]).toBe(true)
expect(result[22]).toBe(false)
expect(result[23]).toBe(false)
})
})
test('validate weak before and after', () => {
const promises = [
validator({'x': '2012-01-15'}, {'x': 'before_or_equal:2012-01-15'}),
validator({'x': '2012-01-15'}, {'x': 'before_or_equal:2012-01-16'}),
validator({'x': '2012-01-15'}, {'x': 'before_or_equal:2012-01-14'}),
validator({'x': '15/01/2012'}, {'x': 'date_format:DD/MM/YYYY|before_or_equal:15/01/2012'}),
validator({'x': '15/01/2012'}, {'x': 'date_format:DD/MM/YYYY|before_or_equal:14/01/2012'}),
validator({'x': '2012-01-15'}, {'x': 'after_or_equal:2012-01-15'}),
validator({'x': '2012-01-15'}, {'x': 'after_or_equal:2012-01-14'}),
validator({'x': '2012-01-15'}, {'x': 'after_or_equal:2012-01-16'}),
validator({'x': '15/01/2012'}, {'x': 'date_format:DD/MM/YYYY|after_or_equal:15/01/2012'}),
validator({'x': '15/01/2012'}, {'x': 'date_format:DD/MM/YYYY|after_or_equal:16/01/2012'}),
validator({'x': '2012-01-01 17:44:00'}, {'x': 'date_format:YYYY-MM-DD HH:mm:ss|before_or_equal:2012-01-01 17:44:00|after_or_equal:2012-01-01 17:44:00'}),
validator({'x': '2012-01-01 17:44:00'}, {'x': 'date_format:YYYY-MM-DD HH:mm:ss|before_or_equal:2012-01-01 17:43:59'}),
validator({'x': '2012-01-01 17:44:00'}, {'x': 'date_format:YYYY-MM-DD HH:mm:ss|after_or_equal:2012-01-01 17:44:01'}),
validator({'x': '17:44:00'}, {'x': 'date_format:HH:mm:ss|before_or_equal:17:44:00|after_or_equal:17:44:00'}),
validator({'x': '17:44:00'}, {'x': 'date_format:HH:mm:ss|before_or_equal:17:43:59'}),
validator({'x': '17:44:00'}, {'x': 'date_format:HH:mm:ss|after_or_equal:17:44:01'}),
validator({'x': '17:44'}, {'x': 'date_format:HH:mm|bef