diff --git a/src/cmd/cmd.gen.js b/src/cmd/cmd.gen.js index db58496..0cf9040 100644 --- a/src/cmd/cmd.gen.js +++ b/src/cmd/cmd.gen.js @@ -123,7 +123,9 @@ module.exports = { let spec = generateTemplate(config) if(!args['skip-linting']) { - linter.lint(spec) + if(!linter.lint(spec).success) { + throw 'Lintin Error!' + } } if(!args.q && !args.quiet) { diff --git a/src/linter.js b/src/linter.js index fb7a6e1..64adcfe 100644 --- a/src/linter.js +++ b/src/linter.js @@ -41,14 +41,22 @@ const linterMappings = [ module.exports.lint = function(spec) { - let messages = []; + let results = { + success: true + } linterMappings.forEach(element => { let value = objectPath.get(spec, element.path); element.linters.forEach(linter => { - linter(element.path, value, messages); + let msg = linter(element.path, value) + if(msg) { + results.success = false + } + msg = msg || 'OK' + results[element.path] = msg; + console.log(element.path, msg) }); }); - return messages; + return results; } module.exports.regex = { diff --git a/tests/cmd.gen.test.js b/tests/cmd.gen.test.js index ab0af84..c906966 100644 --- a/tests/cmd.gen.test.js +++ b/tests/cmd.gen.test.js @@ -67,5 +67,18 @@ describe("gen command", () => { expect(spec_json).to.have.ownProperty('namespace') fs.unlinkSync(spec_path) }) + it('fails on invalid linting properties', () => { + expect(() => commands.gen.run({ + ...test_spec, + name: 'Test' + })).to.throw() + }) + it('does not fail on invalid linting properties when lintin disabled', () => { + expect(() => commands.gen.run({ + ...test_spec, + name: 'Test', + 'skip-linting': true + })).to.not.throw() + }) }) \ No newline at end of file diff --git a/tests/lint.test.js b/tests/lint.test.js index 136a372..67b4556 100644 --- a/tests/lint.test.js +++ b/tests/lint.test.js @@ -30,4 +30,24 @@ describe('linter validators', () => { expect(linter.validators.regex(/[0-9]+/)('path', ' ')).to.not.be.empty expect(linter.validators.regex(/.+/)('path', ' ')).to.not.be.empty }) +}) + + +describe('linter for spec', () => { + it('fails on invalid name property', () => { + let result = linter.lint({ + name: "Test", + description: "Test." + }) + expect(result.success).to.equal(false) + expect(result.name).to.not.equal('OK') + }) + it('fails on invalid description property', () => { + let result = linter.lint({ + name: "test-service", + description: "test." + }) + expect(result.success).to.equal(false) + expect(result.description).to.not.equal('OK') + }) }) \ No newline at end of file