lara-validator
Version:
Validating data based on Laravel validation style
315 lines (298 loc) • 13.5 kB
JavaScript
import testHelper from "./testHelper";
describe('wrappers.gt', () => {
describe('one layer data', () => {
describe('expect [true]', () => {
const expect = { result: true, fail: [] };
const testCases = [
{mainDish: 410, appetizer: 80},
{mainDish: '410', appetizer: '80'},
{mainDish: ['dish0', 'dish1', 'dish2'], appetizer: ['snack0', 'snack1']},
];
const nullTestCases = [
{mainDish: null, appetizer: 80},
];
testHelper({
parentPath: [],
fieldName: 'mainDish',
ruleWithOptions: 'gt:appetizer',
isNullable: false,
presentOnly: false
}, testCases, expect);
testHelper({
parentPath: [],
fieldName: 'mainDish',
ruleWithOptions: 'gt:appetizer',
isNullable: true,
presentOnly: false
}, nullTestCases, expect);
});
describe('expect [false]', () => {
const expect = { result: false, fail: [['mainDish']] };
const testCases = [
{mainDish: 120, appetizer: 240},
{mainDish: '6chars', appetizer: '7 chars'},
{mainDish: ['dish0'], appetizer: ['snack0', 'snack1']},
{mainDish: 240, appetizer: '7 chars'},
{mainDish: '7 chars', appetizer: ['dish0']},
{mainDish: undefined, appetizer: 240},
{mainDish: 120, appetizer: null},
{mainDish: {}, appetizer: {}},
];
testHelper({
parentPath: [],
fieldName: 'mainDish',
ruleWithOptions: 'gt:appetizer',
isNullable: false,
presentOnly: false
}, testCases, expect);
});
});
describe('three layers data', () => {
describe('expect [true]', () => {
const expect = { result: true, fail: [] };
const testCases = [
{order: {aLaCaret: {dish: 800}, sideDish: {appetizer: 410}}},
{order: {aLaCaret: {dish: 'abcd'}, sideDish: {appetizer: 'abc'}}},
{order: {aLaCaret: {dish: ['dish0', 'dish1']}, sideDish: {appetizer: ['snack0']}}},
];
const nullTestCases = [
{order: {aLaCaret: {dish: null}, sideDish: {appetizer: 410}}},
];
testHelper({
parentPath: ['order', 'aLaCaret'],
fieldName: 'dish',
ruleWithOptions: 'gt:order.sideDish.appetizer',
isNullable: false,
presentOnly: false
}, testCases, expect);
testHelper({
parentPath: ['order', 'aLaCaret'],
fieldName: 'dish',
ruleWithOptions: 'gt:order.sideDish.appetizer',
isNullable: true,
presentOnly: false
}, nullTestCases, expect);
});
describe('expect [false]', () => {
const expect = { result: false, fail: [['order', 'aLaCaret', 'dish']] };
const testCases = [
{order: {aLaCaret: {dish: 410}, sideDish: {appetizer: 410}}},
{order: {aLaCaret: {dish: 'ab'}, sideDish: {appetizer: 'abc'}}},
{order: {aLaCaret: {dish: []}, sideDish: {appetizer: ['snack0']}}},
{order: {aLaCaret: {dish: 240}, sideDish: {appetizer: '7 chars'}}},
{order: {aLaCaret: {dish: '7 chars'}, sideDish: {appetizer: ['snack0']}}},
{order: {aLaCaret: {dish: undefined}, sideDish: {appetizer: 240}}},
{order: {aLaCaret: {dish: 120}, sideDish: {appetizer: null}}},
{order: {aLaCaret: {dish: {}}, sideDish: {appetizer: {}}}},
{order: {aLaCaret: {dish: {}}, sideDish: {}}},
{order: {aLaCaret: {}, sideDish: {appetizer: {}}}},
];
testHelper({
parentPath: ['order', 'aLaCaret'],
fieldName: 'dish',
ruleWithOptions: 'gt:order.sideDish.appetizer',
isNullable: false,
presentOnly: false
}, testCases, expect);
});
});
describe('array data', () => {
describe('both array', () => {
describe('expect [true]', () => {
const expect = { result: true, fail: [] };
const testCases = [
{
aLaCaret: [{dish: 100}, {dish: 98}, {dish: 96}],
sideDish: [{appetizer: 95}, {appetizer: 93}, {appetizer: 95}],
},
{
aLaCaret: [{dish: 'Abcde'}, {dish: 'Abcd'}, {dish: 'abc'}],
sideDish: [{appetizer: 'Fg'}, {appetizer: 'F'}, {appetizer: 'FA'}],
},
{
aLaCaret: [{dish: [0, 1, 2, 3, 4]}, {dish: ['A', 'B', 'C', 'D']}, {dish: [0, 'B', 1]}],
sideDish: [{appetizer: ['a', 1]}, {appetizer: [0]}, {appetizer: ['A', 'C']}],
},
{
aLaCaret: [],
sideDish: [{appetizer: 100}, {appetizer: 500}, {appetizer: 1000}]
}
];
const nullTestCases = [
{
aLaCaret: [{dish: [0, 1, 2, 3, 4]}, {dish: ['A', 'B', 'C', 'D']}, {dish: null}],
sideDish: [{appetizer: ['a', 1]}, {appetizer: [0]}],
},
{
aLaCaret: [{dish: null}, {dish: null}, {dish: null}],
sideDish: [{appetizer: ['a', 1]}, {appetizer: [0]}],
},
];
testHelper({
parentPath: ['aLaCaret', '*'],
fieldName: 'dish',
ruleWithOptions: 'gt:sideDish.*.appetizer',
isNullable: false,
presentOnly: false
}, testCases, expect);
testHelper({
parentPath: ['aLaCaret', '*'],
fieldName: 'dish',
ruleWithOptions: 'gt:sideDish.*.appetizer',
isNullable: true,
presentOnly: false
}, nullTestCases, expect);
});
describe('expect [false]', () => {
const expects = [
{ result: false, fail: [['aLaCaret', '2', 'dish']] },
{ result: false, fail: [['aLaCaret', '2', 'dish']] },
{ result: false, fail: [['aLaCaret', '1', 'dish']] },
{ result: false, fail: [['aLaCaret', '1', 'dish']] },
{ result: false, fail: [['aLaCaret', '0', 'dish']] },
{ result: false, fail: [['aLaCaret', '0', 'dish']] },
{ result: false, fail: [['aLaCaret', '0', 'dish']] },
{ result: false, fail: [['aLaCaret', '0', 'dish']] },
{ result: false, fail: [['aLaCaret', '0', 'dish']] },
];
const testCases = [
{
aLaCaret: [{dish: 100}, {dish: 98}, {dish: 96}],
sideDish: [{appetizer: 97}, {appetizer: 93}],
},
{
aLaCaret: [{dish: 'Abcde123'}, {dish: 'Abcd'}, {dish: 'abc'}],
sideDish: [{appetizer: '6chars'}, {appetizer: 'F'}],
},
{
aLaCaret: [{dish: [0, 1, 2, 3, 4]}, {dish: ['A', 'B', 'C', 'D']}, {dish: [0, 'B', 1]}],
sideDish: [{appetizer: ['a', 1]}, {appetizer: [0, 1, 2, 3]}],
},
{
aLaCaret: [{dish: [0, 1, 2, 3, 4]}, {dish: ['A', 'B', 'C', 'D']}, {dish: [0, 'B', 1]}],
sideDish: [{appetizer: ['a', 1]}, {appetizer: 100}],
},
{
aLaCaret: [{dish: [0, 1, 2, 3, 4]}, {dish: ['A', 'B', 'C', 'D']}, {dish: [0, 'B', 1]}],
sideDish: [{appetizer: 'appetizer value'}, {appetizer: [0, 1, 2, 3]}],
},
{
aLaCaret: [{dish: 100}, {dish: 98}, {dish: 96}],
sideDish: [{appetizer: 'appetizer value'}, {appetizer: 0}],
},
{
aLaCaret: [{dish: 100}, {dish: 98}],
sideDish: [{appetizer: undefined}],
},
{
aLaCaret: [{dish: 100}, {dish: 98}, {dish: 96}],
sideDish: [{appetizer: null}],
},
{
aLaCaret: [{dish: 100}, {dish: 98}, {dish: 96}],
sideDish: [{}],
},
];
testCases.forEach((testCase, index) => {
testHelper({
parentPath: ['aLaCaret', '*'],
fieldName: 'dish',
ruleWithOptions: 'gt:sideDish.*.appetizer',
isNullable: false,
presentOnly: false
}, [testCase], expects[index]);
});
});
});
describe('fields in rule is not array', () => {
describe('expect [true]', () => {
const expect = { result: true, fail: [] };
const testCases = [
{
aLaCaret: [{dish: 100}, {dish: 98}, {dish: 96}],
appetizer: 95
},
{
aLaCaret: [{dish: 'ABCDE'}, {dish: '123456'}, {dish: '12S_W-5!6'}],
appetizer: '012'
},
];
testHelper({
parentPath: ['aLaCaret', '*'],
fieldName: 'dish',
ruleWithOptions: 'gt:appetizer',
isNullable: false,
presentOnly: false
}, testCases, expect);
});
describe('expect [false]', () => {
const expects = [
{ result: false, fail: [['aLaCaret', '2', 'dish']] },
{ result: false, fail: [['aLaCaret', '0', 'dish']] },
];
const testCases = [
{
aLaCaret: [{dish: 100}, {dish: 98}, {dish: 96}],
appetizer: 97
},
{
aLaCaret: [{dish: 'ABCDE'}, {dish: '123456'}, {dish: '12S_W-5!6'}],
appetizer: '0123456789'
},
];
testCases.forEach((testCase, index) => {
testHelper({
parentPath: ['aLaCaret', '*'],
fieldName: 'dish',
ruleWithOptions: 'gt:appetizer',
isNullable: false,
presentOnly: false
}, [testCase], expects[index]);
});
});
});
describe('validate field is not array, fields in rule is array', () => {
describe('expect [false]', () => {
const expect = { result: false, fail: [['dish']] };
const testCases = [
{
dish: 100,
sideDish: [{appetizer: 95}, {appetizer: 93}, {appetizer: 101}],
},
{
dish: 'A123asd5',
sideDish: [{appetizer: 'Fg'}, {appetizer: 'A123asd5X'}, {appetizer: 'FA'}],
},
{
dish: [0, 1, 2, 3],
sideDish: [{appetizer: ['a', 0, 1, 2, 3]}, {appetizer: [0]}, {appetizer: ['A', 'C']}],
}
];
testHelper({
parentPath: [],
fieldName: 'dish',
ruleWithOptions: 'gt:sideDish.*.appetizer',
isNullable: false,
presentOnly: false
}, testCases, expect);
});
});
});
describe('no field in rule [false]', () => {
const expect = { result: false, fail: [['data']] };
const testCases = [
{data: ''},
{data: {}},
{data: []},
{data: null},
{data: undefined},
];
testHelper({
parentPath: [],
fieldName: 'data',
ruleWithOptions: 'gt',
isNullable: false,
presentOnly: false
}, testCases, expect);
});
});