react / wstein / node_modules / jest-cli / node_modules / jsdom / node_modules / request / node_modules / hawk / node_modules / boom / test / index.js
81154 views// Load modules12var Util = require('util');3var Code = require('code');4var Boom = require('../lib');5var Lab = require('lab');678// Declare internals910var internals = {};111213// Test shortcuts1415var lab = exports.lab = Lab.script();16var describe = lab.describe;17var it = lab.it;18var expect = Code.expect;192021it('returns the same object when already boom', function (done) {2223var error = Boom.badRequest();24var wrapped = Boom.wrap(error);25expect(error).to.equal(wrapped);26done();27});2829it('returns an error with info when constructed using another error', function (done) {3031var error = new Error('ka-boom');32error.xyz = 123;33var err = Boom.wrap(error);34expect(err.xyz).to.equal(123);35expect(err.message).to.equal('ka-boom');36expect(err.output).to.deep.equal({37statusCode: 500,38payload: {39statusCode: 500,40error: 'Internal Server Error',41message: 'An internal server error occurred'42},43headers: {}44});45expect(err.data).to.equal(null);46done();47});4849it('does not override data when constructed using another error', function (done) {5051var error = new Error('ka-boom');52error.data = { useful: 'data' };53var err = Boom.wrap(error);54expect(err.data).to.equal(error.data);55done();56});5758it('sets new message when none exists', function (done) {5960var error = new Error();61var wrapped = Boom.wrap(error, 400, 'something bad');62expect(wrapped.message).to.equal('something bad');63done();64});6566it('throws when statusCode is not a number', function (done) {6768expect(function () {6970Boom.create('x');71}).to.throw('First argument must be a number (400+): x');72done();73});7475it('will cast a number-string to an integer', function (done) {7677var codes = [78{ input: '404', result: 404 },79{ input: '404.1', result: 404 },80{ input: 400, result: 400 },81{ input: 400.123, result: 400 }]82for (var i = 0, il = codes.length; i < il; ++i) {83var code = codes[i];84var err = Boom.create(code.input);85expect(err.output.statusCode).to.equal(code.result);86}8788done();89});9091it('throws when statusCode is not finite', function (done) {9293expect(function () {9495Boom.create(1 / 0);96}).to.throw('First argument must be a number (400+): null');97done();98});99100it('sets error code to unknown', function (done) {101102var err = Boom.create(999);103expect(err.output.payload.error).to.equal('Unknown');104done();105});106107describe('create()', function () {108109it('does not sets null message', function (done) {110111var error = Boom.unauthorized(null);112expect(error.output.payload.message).to.not.exist();113expect(error.isServer).to.be.false();114done();115});116117it('sets message and data', function (done) {118119var error = Boom.badRequest('Missing data', { type: 'user' });120expect(error.data.type).to.equal('user');121expect(error.output.payload.message).to.equal('Missing data');122done();123});124});125126describe('isBoom()', function () {127128it('returns true for Boom object', function (done) {129130expect(Boom.badRequest().isBoom).to.equal(true);131done();132});133134it('returns false for Error object', function (done) {135136expect((new Error()).isBoom).to.not.exist();137done();138});139});140141describe('badRequest()', function () {142143it('returns a 400 error statusCode', function (done) {144145var error = Boom.badRequest();146147expect(error.output.statusCode).to.equal(400);148expect(error.isServer).to.be.false();149done();150});151152it('sets the message with the passed in message', function (done) {153154expect(Boom.badRequest('my message').message).to.equal('my message');155done();156});157158it('sets the message to HTTP status if none provided', function (done) {159160expect(Boom.badRequest().message).to.equal('Bad Request');161done();162});163});164165describe('unauthorized()', function () {166167it('returns a 401 error statusCode', function (done) {168169var err = Boom.unauthorized();170expect(err.output.statusCode).to.equal(401);171expect(err.output.headers).to.deep.equal({});172done();173});174175it('sets the message with the passed in message', function (done) {176177expect(Boom.unauthorized('my message').message).to.equal('my message');178done();179});180181it('returns a WWW-Authenticate header when passed a scheme', function (done) {182183var err = Boom.unauthorized('boom', 'Test');184expect(err.output.statusCode).to.equal(401);185expect(err.output.headers['WWW-Authenticate']).to.equal('Test error="boom"');186done();187});188189it('returns a WWW-Authenticate header set to the schema array value', function (done) {190191var err = Boom.unauthorized(null, ['Test','one','two']);192expect(err.output.statusCode).to.equal(401);193expect(err.output.headers['WWW-Authenticate']).to.equal('Test, one, two');194done();195});196197it('returns a WWW-Authenticate header when passed a scheme and attributes', function (done) {198199var err = Boom.unauthorized('boom', 'Test', { a: 1, b: 'something', c: null, d: 0 });200expect(err.output.statusCode).to.equal(401);201expect(err.output.headers['WWW-Authenticate']).to.equal('Test a="1", b="something", c="", d="0", error="boom"');202done();203});204205it('returns a WWW-Authenticate header when passed attributes, missing error', function (done) {206207var err = Boom.unauthorized(null, 'Test', { a: 1, b: 'something', c: null, d: 0 });208expect(err.output.statusCode).to.equal(401);209expect(err.output.headers['WWW-Authenticate']).to.equal('Test a="1", b="something", c="", d="0"');210expect(err.isMissing).to.equal(true);211done();212});213214it('sets the isMissing flag when error message is empty', function (done) {215216var err = Boom.unauthorized('', 'Basic');217expect(err.isMissing).to.equal(true);218done();219});220221it('does not set the isMissing flag when error message is not empty', function (done) {222223var err = Boom.unauthorized('message', 'Basic');224expect(err.isMissing).to.equal(undefined);225done();226});227228it('sets a WWW-Authenticate when passed as an array', function (done) {229230var err = Boom.unauthorized('message', ['Basic', 'Example e="1"', 'Another x="3", y="4"']);231expect(err.output.headers['WWW-Authenticate']).to.equal('Basic, Example e="1", Another x="3", y="4"');232done();233});234});235236237describe('methodNotAllowed()', function () {238239it('returns a 405 error statusCode', function (done) {240241expect(Boom.methodNotAllowed().output.statusCode).to.equal(405);242done();243});244245it('sets the message with the passed in message', function (done) {246247expect(Boom.methodNotAllowed('my message').message).to.equal('my message');248done();249});250});251252253describe('notAcceptable()', function () {254255it('returns a 406 error statusCode', function (done) {256257expect(Boom.notAcceptable().output.statusCode).to.equal(406);258done();259});260261it('sets the message with the passed in message', function (done) {262263expect(Boom.notAcceptable('my message').message).to.equal('my message');264done();265});266});267268269describe('proxyAuthRequired()', function () {270271it('returns a 407 error statusCode', function (done) {272273expect(Boom.proxyAuthRequired().output.statusCode).to.equal(407);274done();275});276277it('sets the message with the passed in message', function (done) {278279expect(Boom.proxyAuthRequired('my message').message).to.equal('my message');280done();281});282});283284285describe('clientTimeout()', function () {286287it('returns a 408 error statusCode', function (done) {288289expect(Boom.clientTimeout().output.statusCode).to.equal(408);290done();291});292293it('sets the message with the passed in message', function (done) {294295expect(Boom.clientTimeout('my message').message).to.equal('my message');296done();297});298});299300301describe('conflict()', function () {302303it('returns a 409 error statusCode', function (done) {304305expect(Boom.conflict().output.statusCode).to.equal(409);306done();307});308309it('sets the message with the passed in message', function (done) {310311expect(Boom.conflict('my message').message).to.equal('my message');312done();313});314});315316317describe('resourceGone()', function () {318319it('returns a 410 error statusCode', function (done) {320321expect(Boom.resourceGone().output.statusCode).to.equal(410);322done();323});324325it('sets the message with the passed in message', function (done) {326327expect(Boom.resourceGone('my message').message).to.equal('my message');328done();329});330});331332333describe('lengthRequired()', function () {334335it('returns a 411 error statusCode', function (done) {336337expect(Boom.lengthRequired().output.statusCode).to.equal(411);338done();339});340341it('sets the message with the passed in message', function (done) {342343expect(Boom.lengthRequired('my message').message).to.equal('my message');344done();345});346});347348349describe('preconditionFailed()', function () {350351it('returns a 412 error statusCode', function (done) {352353expect(Boom.preconditionFailed().output.statusCode).to.equal(412);354done();355});356357it('sets the message with the passed in message', function (done) {358359expect(Boom.preconditionFailed('my message').message).to.equal('my message');360done();361});362});363364365describe('entityTooLarge()', function () {366367it('returns a 413 error statusCode', function (done) {368369expect(Boom.entityTooLarge().output.statusCode).to.equal(413);370done();371});372373it('sets the message with the passed in message', function (done) {374375expect(Boom.entityTooLarge('my message').message).to.equal('my message');376done();377});378});379380381describe('uriTooLong()', function () {382383it('returns a 414 error statusCode', function (done) {384385expect(Boom.uriTooLong().output.statusCode).to.equal(414);386done();387});388389it('sets the message with the passed in message', function (done) {390391expect(Boom.uriTooLong('my message').message).to.equal('my message');392done();393});394});395396397describe('unsupportedMediaType()', function () {398399it('returns a 415 error statusCode', function (done) {400401expect(Boom.unsupportedMediaType().output.statusCode).to.equal(415);402done();403});404405it('sets the message with the passed in message', function (done) {406407expect(Boom.unsupportedMediaType('my message').message).to.equal('my message');408done();409});410});411412413describe('rangeNotSatisfiable()', function () {414415it('returns a 416 error statusCode', function (done) {416417expect(Boom.rangeNotSatisfiable().output.statusCode).to.equal(416);418done();419});420421it('sets the message with the passed in message', function (done) {422423expect(Boom.rangeNotSatisfiable('my message').message).to.equal('my message');424done();425});426});427428429describe('expectationFailed()', function () {430431it('returns a 417 error statusCode', function (done) {432433expect(Boom.expectationFailed().output.statusCode).to.equal(417);434done();435});436437it('sets the message with the passed in message', function (done) {438439expect(Boom.expectationFailed('my message').message).to.equal('my message');440done();441});442});443444445describe('badData()', function () {446447it('returns a 422 error statusCode', function (done) {448449expect(Boom.badData().output.statusCode).to.equal(422);450done();451});452453it('sets the message with the passed in message', function (done) {454455expect(Boom.badData('my message').message).to.equal('my message');456done();457});458});459460461describe('tooManyRequests()', function () {462463it('returns a 429 error statusCode', function (done) {464465expect(Boom.tooManyRequests().output.statusCode).to.equal(429);466done();467});468469it('sets the message with the passed-in message', function (done) {470471expect(Boom.tooManyRequests('my message').message).to.equal('my message');472done();473});474});475476describe('serverTimeout()', function () {477478it('returns a 503 error statusCode', function (done) {479480expect(Boom.serverTimeout().output.statusCode).to.equal(503);481done();482});483484it('sets the message with the passed in message', function (done) {485486expect(Boom.serverTimeout('my message').message).to.equal('my message');487done();488});489});490491describe('forbidden()', function () {492493it('returns a 403 error statusCode', function (done) {494495expect(Boom.forbidden().output.statusCode).to.equal(403);496done();497});498499it('sets the message with the passed in message', function (done) {500501expect(Boom.forbidden('my message').message).to.equal('my message');502done();503});504});505506describe('notFound()', function () {507508it('returns a 404 error statusCode', function (done) {509510expect(Boom.notFound().output.statusCode).to.equal(404);511done();512});513514it('sets the message with the passed in message', function (done) {515516expect(Boom.notFound('my message').message).to.equal('my message');517done();518});519});520521describe('internal()', function () {522523it('returns a 500 error statusCode', function (done) {524525expect(Boom.internal().output.statusCode).to.equal(500);526done();527});528529it('sets the message with the passed in message', function (done) {530531var err = Boom.internal('my message');532expect(err.message).to.equal('my message');533expect(err.isServer).to.true();534expect(err.output.payload.message).to.equal('An internal server error occurred');535done();536});537538it('passes data on the callback if its passed in', function (done) {539540expect(Boom.internal('my message', { my: 'data' }).data.my).to.equal('data');541done();542});543544it('returns an error with composite message', function (done) {545546try {547JSON.parse('{');548}549catch (err) {550var boom = Boom.internal('Someting bad', err);551expect(boom.message).to.equal('Someting bad: Unexpected end of input');552expect(boom.isServer).to.be.true();553done();554}555});556});557558describe('notImplemented()', function () {559560it('returns a 501 error statusCode', function (done) {561562expect(Boom.notImplemented().output.statusCode).to.equal(501);563done();564});565566it('sets the message with the passed in message', function (done) {567568expect(Boom.notImplemented('my message').message).to.equal('my message');569done();570});571});572573574describe('badGateway()', function () {575576it('returns a 502 error statusCode', function (done) {577578expect(Boom.badGateway().output.statusCode).to.equal(502);579done();580});581582it('sets the message with the passed in message', function (done) {583584expect(Boom.badGateway('my message').message).to.equal('my message');585done();586});587});588589describe('gatewayTimeout()', function () {590591it('returns a 504 error statusCode', function (done) {592593expect(Boom.gatewayTimeout().output.statusCode).to.equal(504);594done();595});596597it('sets the message with the passed in message', function (done) {598599expect(Boom.gatewayTimeout('my message').message).to.equal('my message');600done();601});602});603604describe('badImplementation()', function () {605606it('returns a 500 error statusCode', function (done) {607608var err = Boom.badImplementation();609expect(err.output.statusCode).to.equal(500);610expect(err.isDeveloperError).to.equal(true);611expect(err.isServer).to.be.true();612done();613});614});615616617