2013-05-26 22:51:58 +04:00
|
|
|
/*globals describe, beforeEach, it*/
|
2013-06-25 15:43:15 +04:00
|
|
|
var should = require('should'),
|
|
|
|
when = require('when'),
|
|
|
|
sinon = require('sinon'),
|
2013-07-16 22:57:19 +04:00
|
|
|
errors = require('../../server/errorHandling'),
|
|
|
|
// storing current environment
|
|
|
|
currentEnv = process.env.NODE_ENV;
|
|
|
|
|
|
|
|
|
2013-05-26 22:51:58 +04:00
|
|
|
|
2013-06-25 15:43:15 +04:00
|
|
|
describe("Error handling", function () {
|
2013-05-26 22:51:58 +04:00
|
|
|
|
2013-06-25 15:43:15 +04:00
|
|
|
// Just getting rid of jslint unused error
|
|
|
|
should.exist(errors);
|
2013-05-26 22:51:58 +04:00
|
|
|
|
2013-06-25 15:43:15 +04:00
|
|
|
it("throws error objects", function () {
|
|
|
|
var toThrow = new Error("test1"),
|
|
|
|
runThrowError = function () {
|
|
|
|
errors.throwError(toThrow);
|
|
|
|
};
|
2013-05-26 22:51:58 +04:00
|
|
|
|
2013-06-25 15:43:15 +04:00
|
|
|
runThrowError.should['throw']("test1");
|
|
|
|
});
|
2013-05-26 22:51:58 +04:00
|
|
|
|
2013-06-25 15:43:15 +04:00
|
|
|
it("throws error strings", function () {
|
|
|
|
var toThrow = "test2",
|
|
|
|
runThrowError = function () {
|
|
|
|
errors.throwError(toThrow);
|
|
|
|
};
|
2013-05-26 22:51:58 +04:00
|
|
|
|
2013-06-25 15:43:15 +04:00
|
|
|
runThrowError.should['throw']("test2");
|
|
|
|
});
|
2013-05-26 22:51:58 +04:00
|
|
|
|
2013-06-25 15:43:15 +04:00
|
|
|
it("throws error even if nothing passed", function () {
|
|
|
|
var runThrowError = function () {
|
|
|
|
errors.throwError();
|
|
|
|
};
|
2013-05-26 22:51:58 +04:00
|
|
|
|
2013-06-25 15:43:15 +04:00
|
|
|
runThrowError.should['throw']("An error occurred");
|
|
|
|
});
|
2013-05-26 22:51:58 +04:00
|
|
|
|
2013-06-25 15:43:15 +04:00
|
|
|
it("logs errors", function () {
|
|
|
|
var err = new Error("test1"),
|
|
|
|
logStub = sinon.stub(console, "log");
|
2013-05-27 23:27:41 +04:00
|
|
|
|
2013-07-16 22:57:19 +04:00
|
|
|
// give environment a value that will console log
|
|
|
|
process.env.NODE_ENV = "development";
|
2013-06-25 15:43:15 +04:00
|
|
|
errors.logError(err);
|
2013-05-27 23:27:41 +04:00
|
|
|
|
2013-06-25 15:43:15 +04:00
|
|
|
// Calls log with message on Error objects
|
|
|
|
logStub.calledWith("Error occurred: ", err.message).should.equal(true);
|
2013-05-26 22:51:58 +04:00
|
|
|
|
2013-06-25 15:43:15 +04:00
|
|
|
logStub.reset();
|
2013-05-26 22:51:58 +04:00
|
|
|
|
2013-06-25 15:43:15 +04:00
|
|
|
err = "test2";
|
2013-05-26 22:51:58 +04:00
|
|
|
|
2013-06-25 15:43:15 +04:00
|
|
|
errors.logError(err);
|
2013-05-26 22:51:58 +04:00
|
|
|
|
2013-06-25 15:43:15 +04:00
|
|
|
// Calls log with string on strings
|
|
|
|
logStub.calledWith("Error occurred: ", err).should.equal(true);
|
2013-05-26 22:51:58 +04:00
|
|
|
|
2013-06-25 15:43:15 +04:00
|
|
|
logStub.restore();
|
2013-07-16 22:57:19 +04:00
|
|
|
process.env.NODE_ENV = currentEnv;
|
|
|
|
|
2013-06-25 15:43:15 +04:00
|
|
|
});
|
2013-05-26 22:51:58 +04:00
|
|
|
|
2013-06-25 15:43:15 +04:00
|
|
|
it("logs promise errors with custom messages", function (done) {
|
|
|
|
var def = when.defer(),
|
|
|
|
prom = def.promise,
|
|
|
|
logStub = sinon.stub(console, "log");
|
2013-05-26 22:51:58 +04:00
|
|
|
|
2013-07-16 22:57:19 +04:00
|
|
|
// give environment a value that will console log
|
|
|
|
process.env.NODE_ENV = "development";
|
2013-06-25 15:43:15 +04:00
|
|
|
prom.then(function () {
|
|
|
|
throw new Error("Ran success handler");
|
|
|
|
}, errors.logErrorWithMessage("test1"));
|
|
|
|
|
|
|
|
prom.otherwise(function () {
|
|
|
|
logStub.calledWith("Error occurred: ", "test1").should.equal(true);
|
2013-05-26 22:51:58 +04:00
|
|
|
logStub.restore();
|
|
|
|
|
2013-06-25 15:43:15 +04:00
|
|
|
done();
|
|
|
|
});
|
2013-07-16 22:57:19 +04:00
|
|
|
prom.ensure(function () {
|
|
|
|
// gives the environment the correct value back
|
|
|
|
process.env.NODE_ENV = currentEnv;
|
|
|
|
});
|
2013-06-25 15:43:15 +04:00
|
|
|
def.reject();
|
|
|
|
});
|
2013-05-26 22:51:58 +04:00
|
|
|
|
2013-06-25 15:43:15 +04:00
|
|
|
it("logs promise errors and redirects", function (done) {
|
|
|
|
var def = when.defer(),
|
|
|
|
prom = def.promise,
|
|
|
|
req = null,
|
|
|
|
res = {
|
|
|
|
redirect: function () {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
},
|
|
|
|
logStub = sinon.stub(console, "log"),
|
|
|
|
redirectStub = sinon.stub(res, "redirect");
|
|
|
|
|
2013-07-16 22:57:19 +04:00
|
|
|
// give environment a value that will console log
|
|
|
|
process.env.NODE_ENV = "development";
|
2013-06-25 15:43:15 +04:00
|
|
|
prom.then(function () {
|
|
|
|
throw new Error("Ran success handler");
|
|
|
|
}, errors.logErrorWithRedirect("test1", "/testurl", req, res));
|
|
|
|
|
|
|
|
prom.otherwise(function () {
|
|
|
|
logStub.calledWith("Error occurred: ", "test1").should.equal(true);
|
|
|
|
logStub.restore();
|
2013-05-26 22:51:58 +04:00
|
|
|
|
2013-06-25 15:43:15 +04:00
|
|
|
redirectStub.calledWith('/testurl').should.equal(true);
|
|
|
|
redirectStub.restore();
|
2013-05-26 22:51:58 +04:00
|
|
|
|
2013-06-25 15:43:15 +04:00
|
|
|
done();
|
2013-05-26 22:51:58 +04:00
|
|
|
});
|
2013-07-16 22:57:19 +04:00
|
|
|
prom.ensure(function () {
|
|
|
|
// gives the environment the correct value back
|
|
|
|
process.env.NODE_ENV = currentEnv;
|
|
|
|
});
|
2013-06-25 15:43:15 +04:00
|
|
|
def.reject();
|
2013-05-26 22:51:58 +04:00
|
|
|
});
|
2013-06-25 15:43:15 +04:00
|
|
|
});
|