From 645095e58f975a5714c22ac72bdbcee228af2ddc Mon Sep 17 00:00:00 2001 From: Matteo Pagliazzi Date: Mon, 23 Nov 2015 13:28:25 +0100 Subject: [PATCH] fix errorHandler tests, add tests for res.respond --- .../v3/unit/middlewares/errorHandler.test.js | 18 ++++--- test/api/v3/unit/middlewares/response.js | 51 +++++++++++++++++++ .../src/middlewares/api-v3/errorHandler.js | 4 +- 3 files changed, 63 insertions(+), 10 deletions(-) create mode 100644 test/api/v3/unit/middlewares/response.js diff --git a/test/api/v3/unit/middlewares/errorHandler.test.js b/test/api/v3/unit/middlewares/errorHandler.test.js index 4987e1e8ac..096d25b850 100644 --- a/test/api/v3/unit/middlewares/errorHandler.test.js +++ b/test/api/v3/unit/middlewares/errorHandler.test.js @@ -5,6 +5,8 @@ import { } from '../../../../helpers/api-unit.helper'; import errorHandler from '../../../../../website/src/middlewares/api-v3/errorHandler'; +import responseMiddleware from '../../../../../website/src/middlewares/api-v3/response'; +import getUserLanguage from '../../../../../website/src/middlewares/api-v3/getUserLanguage'; import { BadRequest } from '../../../../../website/src/libs/api-v3/errors'; import logger from '../../../../../website/src/libs/api-v3/logger'; @@ -16,6 +18,8 @@ describe('errorHandler', () => { res = generateRes(); req = generateReq(); next = generateNext(); + responseMiddleware(req, res, next); + getUserLanguage(req, res, next); sandbox.stub(logger, 'error'); }); @@ -30,6 +34,7 @@ describe('errorHandler', () => { expect(res.status).to.be.calledWith(500); expect(res.json).to.be.calledWith({ + success: false, error: 'InternalServerError', message: 'An unexpected error occurred.', }); @@ -46,6 +51,7 @@ describe('errorHandler', () => { expect(res.status).to.be.calledWith(400); expect(res.json).to.be.calledWith({ + success: false, error: 'Error', message: 'Error message', }); @@ -62,6 +68,7 @@ describe('errorHandler', () => { expect(res.status).to.be.calledWith(500); expect(res.json).to.be.calledWith({ + success: false, error: 'InternalServerError', message: 'An unexpected error occurred.', }); @@ -77,6 +84,7 @@ describe('errorHandler', () => { expect(res.status).to.be.calledWith(400); expect(res.json).to.be.calledWith({ + success: false, error: 'BadRequest', message: 'Bad request.', }); @@ -93,6 +101,7 @@ describe('errorHandler', () => { expect(res.status).to.be.calledWith(error.statusCode); expect(res.json).to.be.calledWith({ + success: false, error: error.name, message: error.message, }); @@ -108,6 +117,7 @@ describe('errorHandler', () => { expect(res.status).to.be.calledWith(400); expect(res.json).to.be.calledWith({ + success: false, error: 'BadRequest', message: 'Invalid request parameters.', errors: error, @@ -133,6 +143,7 @@ describe('errorHandler', () => { expect(res.status).to.be.calledWith(400); expect(res.json).to.be.calledWith({ + success: false, error: 'BadRequest', message: 'User validation failed.', errors: [ @@ -154,11 +165,4 @@ describe('errorHandler', () => { fullError: error, }); }); - - it('does not send error if error is not defined', () => { - errorHandler(null, req, res, next); - - expect(next).to.be.calledOnce; - expect(res.status).to.not.be.called; - }); }); diff --git a/test/api/v3/unit/middlewares/response.js b/test/api/v3/unit/middlewares/response.js new file mode 100644 index 0000000000..5850ef35fd --- /dev/null +++ b/test/api/v3/unit/middlewares/response.js @@ -0,0 +1,51 @@ +import { + generateRes, + generateReq, + generateNext, +} from '../../../../helpers/api-unit.helper'; +import responseMiddleware from '../../../../../website/src/middlewares/api-v3/response' + +describe('response middleware', function() { + let res, req, next; + + beforeEach(() => { + res = generateRes(); + req = generateReq(); + next = generateNext(); + }); + + + it('attaches respond method to res', function() { + responseMiddleware(req, res, next); + + expect(res.respond).to.exist; + }); + + it('can be used to respond to requests', function() { + responseMiddleware(req, res, next); + res.respond(200, {field: 1}); + + expect(res.status).to.be.calledOnce; + expect(res.json).to.be.calledOnce; + + expect(res.status).to.be.calledWith(200); + expect(res.json).to.be.calledWith({ + field: 1, + success: true, + }); + }); + + it('treats status >= 400 as failures', function() { + responseMiddleware(req, res, next); + res.respond(403, {field: 1}); + + expect(res.status).to.be.calledOnce; + expect(res.json).to.be.calledOnce; + + expect(res.status).to.be.calledWith(403); + expect(res.json).to.be.calledWith({ + field: 1, + success: false, + }); + }); +}); diff --git a/website/src/middlewares/api-v3/errorHandler.js b/website/src/middlewares/api-v3/errorHandler.js index e017910297..59bdca98d5 100644 --- a/website/src/middlewares/api-v3/errorHandler.js +++ b/website/src/middlewares/api-v3/errorHandler.js @@ -8,9 +8,7 @@ import { } from '../../libs/api-v3/errors'; import { map } from 'lodash'; -export default function errorHandler (err, req, res, next) { - if (!err) return next(); - +export default function errorHandler (err, req, res, next) { // eslint-disable-line no-unused-vars // Log the original error with some metadata let stack = err.stack || err.message || err;