common-errors
Advanced tools
Comparing version
@@ -45,3 +45,5 @@ var util = require('util'); | ||
var params = req && req.params || {}; | ||
if(/GET|HEAD/i.test(method) || params.hasOwnProperty(err.argumentName)) err.status_code = 404; | ||
var route_path = req && req.route && req.route.path || ''; | ||
if(/GET|HEAD/i.test(method) || params.hasOwnProperty(err.argumentName) || new RegExp(":" + err.argumentName + '').test(route_path + '/')) err.status_code = 404; | ||
else err.status_code = 400; | ||
@@ -48,0 +50,0 @@ err.message = err.message.replace(new RegExp("^Missing argument: (" + err.argumentName + ")$"), 'Not Found: "$1"' ); |
@@ -15,3 +15,3 @@ var HttpStatusError = require('../http-status'); | ||
res.send(err.status_code, err.message); | ||
res.status(err.status_code).send(err.message); | ||
} |
@@ -5,3 +5,3 @@ { | ||
"description": "Common error classes and utility functions", | ||
"version": "0.4.17", | ||
"version": "0.4.18", | ||
"repository": { | ||
@@ -18,3 +18,4 @@ "type": "git", | ||
"dependencies": { | ||
"lodash": "= 2.4.1" | ||
"lodash": "= 2.4.1", | ||
"route-parser": "0.0.2" | ||
}, | ||
@@ -24,3 +25,7 @@ "devDependencies": { | ||
"sinon": "*", | ||
"common-errors": "git://github.com/shutterstock/node-common-errors.git#global_extend.v1" | ||
"supertest": "*", | ||
"common-errors": "git://github.com/shutterstock/node-common-errors.git#global_extend.v1", | ||
"express": "4.x.x", | ||
"express3": "git://github.com/dfenster/express3.git", | ||
"body-parser": "*" | ||
}, | ||
@@ -45,4 +50,5 @@ "keywords": [ | ||
"main": "index.js", | ||
"engines": { "node": ">= 0.8" } | ||
"engines": { | ||
"node": ">= 0.8" | ||
} | ||
} | ||
@@ -13,2 +13,5 @@ common-errors | ||
## Installation | ||
```npm install common-errors``` | ||
## Class Directory | ||
@@ -15,0 +18,0 @@ |
var assert = require('assert'); | ||
var sinon = require('sinon'); | ||
var supertest = require('supertest'); | ||
var express3 = require('express3'); | ||
var express4 = require('express'); | ||
var body_parser = require('body-parser'); | ||
var errors = require('../../'); | ||
@@ -8,12 +12,14 @@ var errorHandler = errors.middleware.errorHandler; | ||
var Response = function Response(){} | ||
Response.prototype.send = function(status_code, message){ | ||
this.status_code = status_code; | ||
this.message = message; | ||
}; | ||
describe("errorHandler", function(){ | ||
var err; | ||
describe("errorHandler", function(){ | ||
var app = new express4(); | ||
app.use(body_parser.json()); | ||
app.all('/error', function(req, res, next){ return next(err); }); | ||
app.post('/error/:test', function(req, res, next){ return next(err); }); | ||
app.use(errorHandler); | ||
var request = new supertest(app); | ||
beforeEach(function(){ | ||
sandbox.stub(console, 'error', function(message){ | ||
}) | ||
sandbox.stub(console, 'error', function(message){ }); | ||
}); | ||
@@ -25,112 +31,173 @@ | ||
it("should handle NotPermittedError", function(){ | ||
var res = new Response(); | ||
errorHandler(new errors.NotPermitted("don't do that"), {}, res); | ||
assert.equal(res.status_code, 403); | ||
assert.equal(res.message, "An attempt was made to perform an operation that is invalid: don't do that"); | ||
assert.ok(!console.error.called); | ||
it("should handle NotPermittedError", function(done){ | ||
err = new errors.NotPermitted("don't do that"); | ||
request.get('/error').end(function(err, res){ | ||
assert.equal(res.res.statusCode, 403); | ||
assert.equal(res.text, "An attempt was made to perform an operation that is invalid: don't do that"); | ||
assert.ok(!console.error.called, "console.error not called"); | ||
done(); | ||
}); | ||
}); | ||
it("should handle AuthenticationRequired", function(){ | ||
var res = new Response(); | ||
errorHandler(new errors.AuthenticationRequired("gime password"), {}, res); | ||
assert.equal(res.status_code, 401); | ||
assert.equal(res.message, "An attempt was made to perform an operation without authentication: gime password"); | ||
assert.ok(!console.error.called); | ||
it("should handle AuthenticationRequired", function(done){ | ||
err = new errors.AuthenticationRequired("gime password"); | ||
request.get('/error').end(function(err, res){ | ||
assert.equal(res.res.statusCode, 401); | ||
assert.equal(res.text, "An attempt was made to perform an operation without authentication: gime password"); | ||
assert.ok(!console.error.called, "console.error not called"); | ||
done(); | ||
}); | ||
}); | ||
it("should handle Validation", function(){ | ||
var res = new Response(); | ||
errorHandler(new errors.Validation("bad"), {}, res); | ||
assert.equal(res.status_code, 400); | ||
assert.equal(res.message, "bad"); | ||
assert.ok(!console.error.called); | ||
it("should handle Validation", function(done){ | ||
err = new errors.Validation("bad") | ||
request.get('/error').end(function(err, res){ | ||
assert.equal(res.res.statusCode, 400); | ||
assert.equal(res.text, "bad"); | ||
assert.ok(!console.error.called, "console.error not called"); | ||
done(); | ||
}); | ||
}); | ||
it("should handle AlreadyInUse", function(){ | ||
var res = new Response(); | ||
errorHandler(new errors.AlreadyInUse("bad", "test"), {}, res); | ||
assert.equal(res.status_code, 409); | ||
assert.equal(res.message, "The specified 'bad' value is already in use for: test"); | ||
assert.ok(!console.error.called); | ||
it("should handle AlreadyInUse", function(done){ | ||
err = new errors.AlreadyInUse("bad", "test"); | ||
request.get('/error').end(function(err, res){ | ||
assert.equal(res.res.statusCode, 409); | ||
assert.equal(res.text, "The specified 'bad' value is already in use for: test"); | ||
assert.ok(!console.error.called, "console.error not called"); | ||
done(); | ||
}); | ||
}); | ||
it("should handle AlreadyInUse", function(){ | ||
var res = new Response(); | ||
errorHandler(new errors.ArgumentNull("test"), {method:"GET"}, res); | ||
assert.equal(res.status_code, 404); | ||
assert.equal(res.message, "Not Found: \"test\""); | ||
assert.ok(!console.error.called); | ||
it("should handle ArgumentNull", function(done){ | ||
err = new errors.ArgumentNull("test"); | ||
request.get('/error').end(function(err, res){ | ||
assert.equal(res.res.statusCode, 404); | ||
assert.equal(res.text, "Not Found: \"test\""); | ||
assert.ok(!console.error.called, "console.error not called"); | ||
done(); | ||
}); | ||
}); | ||
it("should handle AlreadyInUse POST param", function(){ | ||
var res = new Response(); | ||
errorHandler(new errors.ArgumentNull("test"), {method:"POST", params:{"test":"1"}}, res); | ||
assert.equal(res.status_code, 404); | ||
assert.equal(res.message, "Not Found: \"test\""); | ||
assert.ok(!console.error.called); | ||
it("should handle ArgumentNull route param", function(done){ | ||
err = new errors.ArgumentNull("test"); | ||
request.post('/error/1').end(function(err, res){ | ||
assert.equal(res.res.statusCode, 404); | ||
assert.equal(res.text, "Not Found: \"test\""); | ||
assert.ok(!console.error.called, "console.error not called"); | ||
done(); | ||
}); | ||
}); | ||
it("should handle AlreadyInUse POST", function(){ | ||
var res = new Response(); | ||
errorHandler(new errors.ArgumentNull("test"), {method:"POST", params:{}}, res); | ||
assert.equal(res.status_code, 400); | ||
assert.equal(res.message, "Not Found: \"test\""); | ||
assert.ok(!console.error.called); | ||
it("should handle ArgumentNull route param in express3", function(done){ | ||
err = new errors.ArgumentNull("test"); | ||
var app = express3(); | ||
app.use(app.router) | ||
app.use(errorHandler); | ||
app.post('/error/:test', function(req, res, next){ | ||
return next(err); | ||
}); | ||
var request = new supertest(app); | ||
request.post('/error/1').end(function(err, res){ | ||
assert.equal(res.res.statusCode, 404); | ||
assert.equal(res.text, "Not Found: \"test\""); | ||
assert.ok(!console.error.called, "console.error not called"); | ||
done(); | ||
}); | ||
}); | ||
it("should handle NotFoundError", function(){ | ||
var res = new Response(); | ||
errorHandler(new errors.NotFoundError("test"), {}, res); | ||
assert.equal(res.status_code, 404); | ||
assert.equal(res.message, "Not Found: \"test\""); | ||
assert.ok(!console.error.called); | ||
it("should handle ArgumentNull POST", function(done){ | ||
err = new errors.ArgumentNull("test"); | ||
request.post('/error').send({test:1}).end(function(err, res){ | ||
assert.equal(res.res.statusCode, 400); | ||
assert.equal(res.text, "Not Found: \"test\""); | ||
assert.ok(!console.error.called, "console.error not called"); | ||
done(); | ||
}); | ||
}); | ||
it("should handle Error", function(){ | ||
var res = new Response(); | ||
errorHandler(new Error("test"), {}, res); | ||
assert.equal(res.status_code, 500); | ||
assert.equal(res.message, "Internal Server Error!"); | ||
assert.ok(console.error.called); | ||
assert.ok(/test/.test(console.error.getCall(0).args[0])); | ||
it("should handle NotFoundError", function(done){ | ||
err = new errors.NotFoundError("test"); | ||
request.get('/error').end(function(err, res){ | ||
assert.equal(res.res.statusCode, 404); | ||
assert.equal(res.text, "Not Found: \"test\""); | ||
assert.ok(!console.error.called, "console.error not called"); | ||
done(); | ||
}); | ||
}); | ||
it("should handle Error", function(done){ | ||
err = new Error("test"); | ||
request.get('/error').end(function(err, res){ | ||
assert.equal(res.res.statusCode, 500); | ||
assert.equal(res.text, "Internal Server Error!"); | ||
assert.ok(console.error.called); | ||
assert.ok(/test/.test(console.error.getCall(0).args[0])); | ||
done(); | ||
}); | ||
}); | ||
it("should handle Error status", function(){ | ||
var res = new Response(); | ||
var err = new Error("test"); | ||
it("should handle Error status", function(done){ | ||
err = new Error("test"); | ||
err.status = 544; | ||
errorHandler(err, {}, res); | ||
assert.equal(res.status_code, 544); | ||
assert.equal(res.message, "Internal Server Error!"); | ||
assert.ok(console.error.called); | ||
assert.ok(/test/.test(console.error.getCall(0).args[0])); | ||
request.get('/error').end(function(err, res){ | ||
assert.equal(res.res.statusCode, 544); | ||
assert.equal(res.text, "Internal Server Error!"); | ||
assert.ok(console.error.called); | ||
assert.ok(/test/.test(console.error.getCall(0).args[0])); | ||
done(); | ||
}); | ||
}); | ||
it("should handle HttpStatusError (deprecated)", function(){ | ||
var res = new Response(); | ||
errorHandler(new errors.HttpStatus('custom status message', 544), {}, res); | ||
assert.equal(res.status_code, 544); | ||
assert.equal(res.message, "Internal Server Error!"); | ||
assert.ok(console.error.called); | ||
assert.ok(/custom status message/.test(console.error.getCall(0).args[0])); | ||
it("should handle HttpStatusError (deprecated)", function(done){ | ||
err = new errors.HttpStatus('custom status message', 544); | ||
request.get('/error').end(function(err, res){ | ||
assert.equal(res.res.statusCode, 544); | ||
assert.equal(res.text, "Internal Server Error!"); | ||
assert.ok(console.error.called); | ||
assert.ok(/custom status message/.test(console.error.getCall(0).args[0])); | ||
done(); | ||
}); | ||
}); | ||
it("should handle HttpStatusError", function(){ | ||
var res = new Response(); | ||
errorHandler(new errors.HttpStatus(544, 'custom status message'), {}, res); | ||
assert.equal(res.status_code, 544); | ||
assert.equal(res.message, "Internal Server Error!"); | ||
assert.ok(console.error.called); | ||
assert.ok(/custom status message/.test(console.error.getCall(0).args[0])); | ||
it("should handle HttpStatusError", function(done){ | ||
err = new errors.HttpStatus(544, 'custom status message') | ||
request.get('/error').end(function(err, res){ | ||
assert.equal(res.res.statusCode, 544); | ||
assert.equal(res.text, "Internal Server Error!"); | ||
assert.ok(console.error.called); | ||
assert.ok(/custom status message/.test(console.error.getCall(0).args[0])); | ||
done(); | ||
}); | ||
}); | ||
it("should handle HttpStatusError 400", function(){ | ||
var res = new Response(); | ||
errorHandler(new errors.HttpStatus(444, 'custom status message'), {}, res); | ||
assert.equal(res.status_code, 444); | ||
assert.equal(res.message, "custom status message"); | ||
assert.ok(!console.error.called); | ||
it("should handle HttpStatusError 400", function(done){ | ||
err = new errors.HttpStatus(444, 'custom status message') | ||
request.get('/error').end(function(err, res){ | ||
assert.equal(res.res.statusCode, 444); | ||
assert.equal(res.text, "custom status message"); | ||
assert.ok(!console.error.called); | ||
done(); | ||
}); | ||
}); | ||
it("should work with express 3", function(done){ | ||
var app = express3(); | ||
app.use(app.router) | ||
app.use(errorHandler); | ||
app.get('/error', function(req, res, next){ | ||
return next(new Error("This is a test")); | ||
}); | ||
var request = new supertest(app); | ||
request.get('/error') | ||
.end(function(err, res){ | ||
assert.equal(res.res.statusCode, 500); | ||
done(); | ||
}) | ||
}) | ||
}); |
856
1.54%683
0.44%55145
-12.71%2
100%7
133.33%49
-12.5%+ Added
+ Added