livr
Version:
Lightweight validator supporting Language Independent Validation Rules Specification
79 lines (60 loc) • 2.51 kB
JavaScript
const test = require('ava');
const fs = require('fs');
const LIVR = require('../../lib/LIVR');
const util = require('util');
iterateTestData('test_suite/positive', data => {
test(`Positive: ${data.name}`, t => {
const validator = new LIVR.Validator(data.rules);
const output = validator.validate(data.input);
const errors = validator.getErrors();
t.true(
!errors,
'Validator should contain no errors. The error was ' + util.inspect(errors)
);
t.deepEqual(output, data.output, 'Output should contain correct data');
});
});
iterateTestData('test_suite/negative', data => {
test(`Negative ${data.name}`, t => {
const validator = new LIVR.Validator(data.rules);
const output = validator.validate(data.input);
t.true(!output, 'Output should be false');
t.deepEqual(validator.getErrors(), data.errors, 'Validator should contain errors');
});
});
iterateTestData('test_suite/aliases_positive', data => {
test(`Aliases positive: ${data.name}`, t => {
const validator = new LIVR.Validator(data.rules);
data.aliases.forEach(alias => {
validator.registerAliasedRule(alias);
});
const output = validator.validate(data.input);
t.true(!validator.getErrors(), 'Validator should contain no errors');
t.deepEqual(output, data.output, 'Output should contain correct data');
});
});
iterateTestData('test_suite/aliases_negative', data => {
test(`Aliases negative: ${data.name}`, t => {
const validator = new LIVR.Validator(data.rules);
data.aliases.forEach(alias => {
validator.registerAliasedRule(alias);
});
const output = validator.validate(data.input);
t.true(!output, 'Output should be false');
t.deepEqual(validator.getErrors(), data.errors, 'Validator should contain errors');
});
});
function iterateTestData(path, cb) {
const rootPath = __dirname + '/../' + path;
console.log(`ITERATE: ${rootPath}`);
const casesDirs = fs.readdirSync(rootPath);
for (const caseDir of casesDirs) {
const caseFiles = fs.readdirSync(rootPath + '/' + caseDir);
const caseData = { name: caseDir };
for (const file of caseFiles) {
const json = fs.readFileSync(rootPath + '/' + caseDir + '/' + file);
caseData[file.replace(/\.json$/, '')] = JSON.parse(json);
}
cb(caseData);
}
}