hapi-boombox
Advanced tools
Comparing version 1.1.4 to 1.1.5
150
lib/index.js
@@ -5,3 +5,3 @@ var Boom = require('boom'); | ||
var internals = { | ||
tags: ['hapi-boombox'] | ||
tags: ['hapi-boombox'] | ||
}; | ||
@@ -12,50 +12,50 @@ | ||
var explosion = null; | ||
var explosion = null; | ||
// convert && return error by default | ||
if (convert === null || convert === undefined) { | ||
convert = true; | ||
} | ||
// convert && return error by default | ||
if (convert === null || convert === undefined) { | ||
convert = true; | ||
} | ||
if (returnError === null || returnError === undefined) { | ||
returnError = true; | ||
} | ||
if (returnError === null || returnError === undefined) { | ||
returnError = true; | ||
} | ||
if (convert) { | ||
if (typeof error === 'string') { | ||
var data = internals.errors[error]; | ||
if (convert) { | ||
if (typeof error === 'string') { | ||
var data = internals.errors[error]; | ||
if (!data) { | ||
explosion = Boom.badImplementation(error + ' is not a valid error key'); | ||
} else { | ||
if (returnError) { | ||
var customBoom = Boom[data.type](); | ||
if (!data) { | ||
explosion = Boom.badImplementation(error + ' is not a valid error key'); | ||
} else { | ||
if (returnError) { | ||
var customBoom = Boom[data.type](); | ||
explosion = new Error(data.message); | ||
explosion = new Error(data.message); | ||
Boom.wrap(explosion, customBoom.output.statusCode, data.message); | ||
} else { | ||
explosion = data.message; | ||
} | ||
} | ||
} else if (error instanceof Error) { | ||
Boom.wrap(error, 400); | ||
Boom.wrap(explosion, customBoom.output.statusCode, data.message); | ||
} else { | ||
explosion = data.message; | ||
} | ||
} | ||
} else if (error instanceof Error) { | ||
Boom.wrap(error, 400); | ||
explosion = error; | ||
} else if (returnError) { | ||
explosion = new Error(error); | ||
} else { | ||
explosion = error; | ||
} | ||
} else if (returnError) { | ||
explosion = new Error(error); | ||
} else { | ||
explosion = error; | ||
} | ||
explosion = error; | ||
} else if (returnError) { | ||
explosion = new Error(error); | ||
} else { | ||
explosion = error; | ||
} | ||
} else if (returnError) { | ||
explosion = new Error(error); | ||
} else { | ||
explosion = error; | ||
} | ||
if (returnError) { | ||
return explosion; | ||
} | ||
if (returnError) { | ||
return explosion; | ||
} | ||
return explosion.message || explosion; | ||
return explosion.message || explosion; | ||
}; | ||
@@ -65,52 +65,52 @@ | ||
if (!options.hasOwnProperty('errors')) { | ||
throw new Error('Options must include errors object'); | ||
} | ||
if (!options.hasOwnProperty('errors')) { | ||
throw new Error('Options must include errors object'); | ||
} | ||
internals.errors = options.errors; | ||
internals.errors = options.errors; | ||
server.decorate('reply', 'boom', function (error, returnError, convert) { | ||
server.decorate('reply', 'boom', function (error, returnError, convert) { | ||
var explosion = internals.boom(error, returnError, convert); | ||
var explosion = internals.boom(error, returnError, convert); | ||
var log = { | ||
originalError: error, | ||
boomboxError: explosion, | ||
data: { | ||
path: this.request.url.path, | ||
query: this.request.query, | ||
method: this.request.method, | ||
payload: this.request.payload, | ||
headers: this.request.headers, | ||
info: this.request.info | ||
} | ||
}; | ||
var log = { | ||
originalError: error, | ||
boomboxError: explosion, | ||
data: { | ||
path: this.request.url.path, | ||
query: this.request.query, | ||
method: this.request.method, | ||
payload: this.request.payload, | ||
headers: this.request.headers, | ||
info: this.request.info | ||
} | ||
}; | ||
if (this.request.auth.credentials) { | ||
log.data.credentials = { | ||
id: this.request.auth.credentials.id, | ||
name: this.request.auth.credentials.name | ||
}; | ||
} | ||
if (this.request.auth.credentials) { | ||
log.data.credentials = { | ||
id: this.request.auth.credentials.id, | ||
name: this.request.auth.credentials.name | ||
}; | ||
} | ||
this.response(explosion); | ||
return server.log(internals.tags, log); | ||
}); | ||
this.response(explosion); | ||
return server.log(internals.tags, log); | ||
}); | ||
server.decorate('server', 'boom', function (error, returnError, convert) { | ||
server.decorate('server', 'boom', function (error, returnError, convert) { | ||
var explosion = internals.boom(error, returnError, convert); | ||
var explosion = internals.boom(error, returnError, convert); | ||
server.log(internals.tags, explosion.output || explosion); | ||
server.log(internals.tags, explosion.output || explosion); | ||
return explosion; | ||
}); | ||
return explosion; | ||
}); | ||
server.log(internals.tags, 'Registered reply.boom() and server.boom()'); | ||
server.log(internals.tags, 'Registered reply.boom() and server.boom()'); | ||
return next(); | ||
return next(); | ||
}; | ||
exports.register.attributes = { | ||
pkg: require('../package.json') | ||
pkg: require('../package.json') | ||
}; |
{ | ||
"name": "hapi-boombox", | ||
"version": "1.1.4", | ||
"version": "1.1.5", | ||
"description": "Boom error wrapper", | ||
@@ -5,0 +5,0 @@ "main": "index.js", |
@@ -14,182 +14,182 @@ var Lab = require('lab'); | ||
it('Registers', function (done) { | ||
it('Registers', function (done) { | ||
var server = new Hapi.Server(); | ||
server.connection(); | ||
var server = new Hapi.Server(); | ||
server.connection(); | ||
server.register({ | ||
register: require('../'), | ||
options: { errors: errors } | ||
}, function (err) { | ||
server.register({ | ||
register: require('../'), | ||
options: { errors: errors } | ||
}, function (err) { | ||
expect(err).to.not.exist(); | ||
expect(err).to.not.exist(); | ||
server.start(function(err) { | ||
server.start(function(err) { | ||
expect(err).to.not.exist(); | ||
expect(err).to.not.exist(); | ||
done(); | ||
}); | ||
}); | ||
}); | ||
done(); | ||
}); | ||
}); | ||
}); | ||
it('Throws when not passed errors key in options', function (done) { | ||
it('Throws when not passed errors key in options', function (done) { | ||
var server = new Hapi.Server(); | ||
server.connection(); | ||
var server = new Hapi.Server(); | ||
server.connection(); | ||
try { | ||
try { | ||
server.register({ register: require('../') }, function () {}); | ||
} catch (e) { | ||
expect(e).to.exist(); | ||
server.register({ register: require('../') }, function () {}); | ||
} catch (e) { | ||
expect(e).to.exist(); | ||
done(); | ||
} | ||
}); | ||
done(); | ||
} | ||
}); | ||
it('Throws when not passed errors object', function (done) { | ||
it('Throws when not passed errors object', function (done) { | ||
var server = new Hapi.Server(); | ||
server.connection(); | ||
var server = new Hapi.Server(); | ||
server.connection(); | ||
try { | ||
try { | ||
server.register({ | ||
register: require('../'), | ||
options: 'test' | ||
}, function () {}); | ||
server.register({ | ||
register: require('../'), | ||
options: 'test' | ||
}, function () {}); | ||
} catch (e) { | ||
expect(e).to.exist(); | ||
} catch (e) { | ||
expect(e).to.exist(); | ||
done(); | ||
} | ||
}); | ||
done(); | ||
} | ||
}); | ||
it('Registers server method', function (done) { | ||
it('Registers server method', function (done) { | ||
var server = new Hapi.Server(); | ||
server.connection(); | ||
var server = new Hapi.Server(); | ||
server.connection(); | ||
server.register({ | ||
register: require('../'), | ||
options: { errors: errors } | ||
}, function (err) { | ||
server.register({ | ||
register: require('../'), | ||
options: { errors: errors } | ||
}, function (err) { | ||
expect(err).to.not.exist(); | ||
expect(err).to.not.exist(); | ||
expect(server.boom).to.exist(); | ||
expect(server.boom).to.exist(); | ||
done(); | ||
}); | ||
}); | ||
done(); | ||
}); | ||
}); | ||
it('Registers reply method', function (done) { | ||
it('Registers reply method', function (done) { | ||
var server = new Hapi.Server(); | ||
server.connection(); | ||
var server = new Hapi.Server(); | ||
server.connection(); | ||
server.register({ | ||
register: require('../'), | ||
options: { errors: errors } | ||
}, function (err) { | ||
server.register({ | ||
register: require('../'), | ||
options: { errors: errors } | ||
}, function (err) { | ||
expect(err).to.not.exist(); | ||
expect(err).to.not.exist(); | ||
server.route([{ | ||
method: 'GET', | ||
path: '/test', | ||
config: { | ||
handler: function (request, reply) { | ||
server.route([{ | ||
method: 'GET', | ||
path: '/test', | ||
config: { | ||
handler: function (request, reply) { | ||
expect(reply.boom).to.exist(); | ||
expect(reply.boom).to.exist(); | ||
// set credentials for test | ||
request.auth.credentials = { | ||
id: 1, | ||
name: 'Box' | ||
}; | ||
// set credentials for test | ||
request.auth.credentials = { | ||
id: 1, | ||
name: 'Box' | ||
}; | ||
return reply.boom(new Error('error')); | ||
} | ||
} | ||
}]); | ||
return reply.boom(new Error('error')); | ||
} | ||
} | ||
}]); | ||
server.inject({ | ||
method: 'GET', | ||
url: '/test' | ||
}, function (response) { | ||
server.inject({ | ||
method: 'GET', | ||
url: '/test' | ||
}, function (response) { | ||
expect(response.result).to.deep.equal({ | ||
statusCode: 400, | ||
error: 'Bad Request', | ||
message: 'error' | ||
}); | ||
expect(response.result).to.deep.equal({ | ||
statusCode: 400, | ||
error: 'Bad Request', | ||
message: 'error' | ||
}); | ||
done(); | ||
}); | ||
}); | ||
}); | ||
done(); | ||
}); | ||
}); | ||
}); | ||
it('Registers reply method and also logs not converted errors', function (done) { | ||
it('Registers reply method and also logs not converted errors', function (done) { | ||
var server = new Hapi.Server(); | ||
server.connection(); | ||
var server = new Hapi.Server(); | ||
server.connection(); | ||
server.register({ | ||
register: require('../'), | ||
options: { errors: errors } | ||
}, function (err) { | ||
server.register({ | ||
register: require('../'), | ||
options: { errors: errors } | ||
}, function (err) { | ||
expect(err).to.not.exist(); | ||
expect(err).to.not.exist(); | ||
server.route([{ | ||
method: 'GET', | ||
path: '/test', | ||
config: { | ||
handler: function (request, reply) { | ||
server.route([{ | ||
method: 'GET', | ||
path: '/test', | ||
config: { | ||
handler: function (request, reply) { | ||
expect(reply.boom).to.exist(); | ||
expect(reply.boom).to.exist(); | ||
return reply.boom(new Error('error'), true, false); | ||
} | ||
} | ||
}]); | ||
return reply.boom(new Error('error'), true, false); | ||
} | ||
} | ||
}]); | ||
server.inject({ | ||
method: 'GET', | ||
url: '/test' | ||
}, function (response) { | ||
server.inject({ | ||
method: 'GET', | ||
url: '/test' | ||
}, function (response) { | ||
expect(response.result).to.deep.equal({ | ||
statusCode: 500, | ||
error: 'Internal Server Error', | ||
message: 'An internal server error occurred' | ||
}); | ||
expect(response.result).to.deep.equal({ | ||
statusCode: 500, | ||
error: 'Internal Server Error', | ||
message: 'An internal server error occurred' | ||
}); | ||
done(); | ||
}); | ||
}); | ||
}); | ||
done(); | ||
}); | ||
}); | ||
}); | ||
it('Accepts null as options and defaults to true', function (done) { | ||
it('Accepts null as options and defaults to true', function (done) { | ||
var server = new Hapi.Server(); | ||
server.connection(); | ||
var server = new Hapi.Server(); | ||
server.connection(); | ||
server.register({ | ||
register: require('../'), | ||
options: { errors: errors } | ||
}, function (err) { | ||
server.register({ | ||
register: require('../'), | ||
options: { errors: errors } | ||
}, function (err) { | ||
expect(err).to.not.exist(); | ||
expect(err).to.not.exist(); | ||
var error = server.boom(new Error(), null, null); | ||
var error = server.boom(new Error(), null, null); | ||
expect(error).to.exist(); | ||
expect(error).to.exist(); | ||
done(); | ||
}); | ||
}); | ||
done(); | ||
}); | ||
}); | ||
@@ -201,161 +201,161 @@ }); | ||
var server = new Hapi.Server(); | ||
var server = new Hapi.Server(); | ||
lab.before(function (done) { | ||
lab.before(function (done) { | ||
server.connection(); | ||
server.connection(); | ||
server.register({ | ||
register: require('../'), | ||
options: { errors: require('./config/errors.json') } | ||
}, function (err) { | ||
server.register({ | ||
register: require('../'), | ||
options: { errors: require('./config/errors.json') } | ||
}, function (err) { | ||
expect(err).to.not.exist(); | ||
expect(err).to.not.exist(); | ||
return done(); | ||
}); | ||
}); | ||
return done(); | ||
}); | ||
}); | ||
it('Returns the right error for the provided key', function (done) { | ||
it('Returns the right error for the provided key', function (done) { | ||
var error = server.boom('ERROR_KEY_1'); | ||
var error = server.boom('ERROR_KEY_1'); | ||
expect(error.isBoom).to.equal(true); | ||
expect(error.output.payload).to.deep.equal({ | ||
statusCode: 405, | ||
error: 'Method Not Allowed', | ||
message: 'Error one' | ||
}); | ||
expect(error.isBoom).to.equal(true); | ||
expect(error.output.payload).to.deep.equal({ | ||
statusCode: 405, | ||
error: 'Method Not Allowed', | ||
message: 'Error one' | ||
}); | ||
done(); | ||
}); | ||
done(); | ||
}); | ||
it('Returns the right error for a custom error', function (done) { | ||
it('Returns the right error for a custom error', function (done) { | ||
var error = server.boom(new Error('Custom error')); | ||
var error = server.boom(new Error('Custom error')); | ||
expect(error.isBoom).to.equal(true); | ||
expect(error.output.payload).to.deep.equal({ | ||
statusCode: 400, | ||
error: 'Bad Request', | ||
message: 'Custom error' | ||
}); | ||
expect(error.isBoom).to.equal(true); | ||
expect(error.output.payload).to.deep.equal({ | ||
statusCode: 400, | ||
error: 'Bad Request', | ||
message: 'Custom error' | ||
}); | ||
done(); | ||
}); | ||
done(); | ||
}); | ||
it('Does not return an error when told to', function (done) { | ||
it('Does not return an error when told to', function (done) { | ||
var error = server.boom(new Error('Custom error'), false); | ||
var error = server.boom(new Error('Custom error'), false); | ||
expect(error).to.equal('Custom error'); | ||
expect(error).to.equal('Custom error'); | ||
return done(); | ||
}); | ||
return done(); | ||
}); | ||
it('Does not convert the error when told to', function (done) { | ||
it('Does not convert the error when told to', function (done) { | ||
var error = server.boom('Custom error', false, false); | ||
var error = server.boom('Custom error', false, false); | ||
expect(error).to.equal('Custom error'); | ||
expect(error).to.equal('Custom error'); | ||
return done(); | ||
}); | ||
return done(); | ||
}); | ||
it('Returns message when given Error and returnError = false && convert = true', function (done) { | ||
it('Returns message when given Error and returnError = false && convert = true', function (done) { | ||
var error = server.boom(new Error('ERROR_KEY_1'), false, true); | ||
var error = server.boom(new Error('ERROR_KEY_1'), false, true); | ||
expect(error).to.equal('ERROR_KEY_1'); | ||
expect(error).to.equal('ERROR_KEY_1'); | ||
return done(); | ||
}); | ||
return done(); | ||
}); | ||
it('Returns message corresponding with given key with returnError = false && convert = true', function (done) { | ||
it('Returns message corresponding with given key with returnError = false && convert = true', function (done) { | ||
var error = server.boom('ERROR_KEY_1', false, true); | ||
var error = server.boom('ERROR_KEY_1', false, true); | ||
expect(error).to.equal('Error one'); | ||
expect(error).to.equal('Error one'); | ||
return done(); | ||
}); | ||
return done(); | ||
}); | ||
it('Returns error corresponding with given key with returnError = true && convert = false', function (done) { | ||
it('Returns error corresponding with given key with returnError = true && convert = false', function (done) { | ||
var error = server.boom('ERROR_KEY_1', true, false); | ||
var error = server.boom('ERROR_KEY_1', true, false); | ||
expect(error).to.be.an.instanceOf(Error); | ||
expect(error.message).to.equal('ERROR_KEY_1'); | ||
expect(error).to.be.an.instanceOf(Error); | ||
expect(error.message).to.equal('ERROR_KEY_1'); | ||
return done(); | ||
}); | ||
return done(); | ||
}); | ||
it('Returns error given Error and returnError = true && convert = false', function (done) { | ||
it('Returns error given Error and returnError = true && convert = false', function (done) { | ||
var error = server.boom(new Error('Custom error'), true, false); | ||
var error = server.boom(new Error('Custom error'), true, false); | ||
expect(error).to.be.an.instanceOf(Error); | ||
expect(error.message).to.equal('Error: Custom error'); | ||
expect(error).to.be.an.instanceOf(Error); | ||
expect(error.message).to.equal('Error: Custom error'); | ||
return done(); | ||
}); | ||
return done(); | ||
}); | ||
it('Returns Internal server error if trying to convert non existing key', function (done) { | ||
it('Returns Internal server error if trying to convert non existing key', function (done) { | ||
var error = server.boom('ERROR_KEY_INKNOWN'); | ||
var error = server.boom('ERROR_KEY_INKNOWN'); | ||
expect(error.isBoom).to.equal(true); | ||
expect(error.output.payload).to.deep.equal({ | ||
statusCode: 500, | ||
error: 'Internal Server Error', | ||
message: 'An internal server error occurred' | ||
}); | ||
expect(error.isBoom).to.equal(true); | ||
expect(error.output.payload).to.deep.equal({ | ||
statusCode: 500, | ||
error: 'Internal Server Error', | ||
message: 'An internal server error occurred' | ||
}); | ||
return done(); | ||
}); | ||
return done(); | ||
}); | ||
it('Returns same Boom error if given Boom error', function (done) { | ||
it('Returns same Boom error if given Boom error', function (done) { | ||
var error = server.boom(Boom.badRequest()); | ||
var error = server.boom(Boom.badRequest()); | ||
expect(error.isBoom).to.equal(true); | ||
expect(error.output.payload).to.deep.equal({ | ||
statusCode: 400, | ||
error: 'Bad Request' | ||
}); | ||
expect(error.isBoom).to.equal(true); | ||
expect(error.output.payload).to.deep.equal({ | ||
statusCode: 400, | ||
error: 'Bad Request' | ||
}); | ||
return done(); | ||
}); | ||
return done(); | ||
}); | ||
it('Returns Boom error if given Error', function (done) { | ||
it('Returns Boom error if given Error', function (done) { | ||
var error = server.boom(new Error()); | ||
var error = server.boom(new Error()); | ||
expect(error.isBoom).to.equal(true); | ||
expect(error.output.payload).to.deep.equal({ | ||
statusCode: 400, | ||
error: 'Bad Request' | ||
}); | ||
expect(error.isBoom).to.equal(true); | ||
expect(error.output.payload).to.deep.equal({ | ||
statusCode: 400, | ||
error: 'Bad Request' | ||
}); | ||
return done(); | ||
}); | ||
return done(); | ||
}); | ||
it('Returns error from object', function (done) { | ||
it('Returns error from object', function (done) { | ||
var error = server.boom({ foo: 'bar' }); | ||
var error = server.boom({ foo: 'bar' }); | ||
expect(error).to.be.an.instanceOf(Error); | ||
expect(error).to.be.an.instanceOf(Error); | ||
return done(); | ||
}); | ||
return done(); | ||
}); | ||
it('Tries to convert but does not return error', function (done) { | ||
it('Tries to convert but does not return error', function (done) { | ||
var error = server.boom({ foo: 'bar' }, false, true); | ||
var error = server.boom({ foo: 'bar' }, false, true); | ||
expect(error).to.deep.equal({ foo: 'bar' }); | ||
expect(error).to.deep.equal({ foo: 'bar' }); | ||
return done(); | ||
}); | ||
return done(); | ||
}); | ||
}); |
17862
10