diff --git a/package.json b/package.json index ca04910..6359e90 100644 --- a/package.json +++ b/package.json @@ -24,6 +24,7 @@ "handlebars": "^4.0.11", "hapi": "^17.0.1", "hapi-logr": "2.2.0", + "joi": "^14.0.0", "logr-console-color": "1.2.1", "tap": "^12.0.1", "vision": "^5.2.0", diff --git a/test/test.response.js b/test/test.response.js index 7051f55..5459fbb 100644 --- a/test/test.response.js +++ b/test/test.response.js @@ -38,10 +38,11 @@ test('logs errors responses', async (t) => { }); t.deepEqual(Object.keys(event.data.error), ['message', 'stack', 'data', 'output']); await server.stop(); - t.end(); }); await server.start(); await server.inject({ url: '/error' }); + await wait(600); + t.end(); }); test('logs errors responses, option to include hapi tags', async (t) => { @@ -972,3 +973,49 @@ test('options.requestHeaders will also include the request payload', async (t) = await server.inject({ method: 'POST', url: '/justYourAverageRoute', payload: { val1: 'one' } }); await wait(500); }); + +test('joi validation errors do not call request or log', async (t) => { + const server = new Hapi.Server({ + debug: { + }, + port: 8080 + }); + await server.register([ + { plugin: require('../'), + options: { + requestPayload: true, + requests: true, + } + } + ]); + const joi = require('joi'); + server.route({ + method: 'GET', + path: '/justYourAverageRoute', + config: { + validate: { + query: { + value: joi.number() + } + } + }, + handler(request, h) { + return 'everything is fine'; + } + }); + const oldLog = console.log; + const results = []; + console.log = (input) => { + results.push(input); + }; + server.events.on({ name: 'request' }, (request) => { + t.fail(); + }); + await server.start(); + await server.inject({ url: '/justYourAverageRoute?notValue=wrong' }); + await wait(1500); + await server.stop(); + console.log = oldLog; + t.equal(results.length, 0); + t.end(); +});