json-schema-everywhere/pajv

View on GitHub
commands/test.js

Summary

Maintainability
A
1 hr
Test Coverage
'use strict';

var util = require('./util');
var getAjv = require('./ajv');


module.exports = {
    execute: execute,
    schema: {
        type: 'object',
        required: ['s', 'd'],
        oneOf: [
            { required: [ 'valid' ] },
            { required: [ 'invalid' ] }
        ],
        properties: {
            s: {
                type: 'string',
                format: 'notGlob'
            },
            d: { $ref: '#/definitions/stringOrArray' },
            r: { $ref: '#/definitions/stringOrArray' },
            m: { $ref: '#/definitions/stringOrArray' },
            c: { $ref: '#/definitions/stringOrArray' },
            valid:   { type: 'boolean' },
            invalid: { type: 'boolean', enum: [true] },
            errors:  { enum: ['json', 'line', 'text', 'js', 'no'] }
        }
    }
};


function execute(argv) {
    var ajv = getAjv(argv);
    var validate = util.compile(ajv, argv.s);
    var shouldBeValid = !!argv.valid && argv.valid != 'false';
    var allPassed = true;

    var dataFiles = util.getFiles(argv.d);
    dataFiles.forEach(testDataFile);

    return allPassed;


    function testDataFile(file) {
        var data = util.openFile(file, 'data file ' + file);
        var validData = validate(data);
        var errors;
        if (!validData) errors = util.logJSON(argv.errors, validate.errors, ajv);

        if (validData === shouldBeValid) {
            console.log(file, 'passed test');
            if (errors) console.log(errors);
        } else {
            allPassed = false;
            console.error(file, 'failed test');
            if (errors) console.error(errors);
        }
    }
}