CartoDB-SQL-API/test/unit/error_handler.test.js

144 lines
3.7 KiB
JavaScript
Raw Normal View History

2017-11-29 00:19:48 +08:00
'use strict';
var assert = require('assert');
var errorMiddleware = require('../../app/middlewares/error');
require('../helper');
2017-11-29 00:19:48 +08:00
2018-03-28 18:10:48 +08:00
const req = { query: { callback: true } };
const getRes = () => {
return {
headers: {},
set (key, value) {
this.headers[key] = value;
},
header (key, value) {
this.set(key, value);
},
statusCode: 0,
status (status) {
this.statusCode = status;
},
json () {},
jsonp () {}
2018-03-28 18:17:42 +08:00
};
2018-03-28 18:10:48 +08:00
};
const getErrorHeader = (context, detail, hint, message) => {
return {
context,
detail,
hint,
statusCode: 400,
message
2018-03-28 18:17:42 +08:00
};
2018-03-28 18:10:48 +08:00
};
2018-03-28 18:15:23 +08:00
describe('error-handler', function() {
2017-11-29 00:19:48 +08:00
it('should return a header with errors', function (done) {
2017-12-18 19:46:03 +08:00
let error = new Error('error test');
2017-11-29 00:19:48 +08:00
error.detail = 'test detail';
error.hint = 'test hint';
error.context = 'test context';
2018-03-28 18:10:48 +08:00
const errorHeader = getErrorHeader(
error.context,
error.detail,
error.hint,
error.message
);
const res = getRes();
2017-11-29 00:19:48 +08:00
errorMiddleware()(error, req, res, function next () {
assert.ok(res.headers['X-SQLAPI-Errors'].length > 0);
assert.deepEqual(
res.headers['X-SQLAPI-Errors'],
JSON.stringify(errorHeader)
);
2017-11-29 00:19:48 +08:00
done();
});
2017-11-29 00:19:48 +08:00
});
it('JSONP should return a header with error statuscode', function (done) {
2017-12-18 19:46:03 +08:00
let error = new Error('error test');
2017-11-29 00:19:48 +08:00
error.detail = 'test detail';
error.hint = 'test hint';
error.context = 'test context';
2018-03-28 18:10:48 +08:00
const errorHeader = getErrorHeader(
error.context,
error.detail,
error.hint,
error.message
);
const res = getRes();
2017-11-29 00:19:48 +08:00
errorMiddleware()(error, req, res, function next () {
assert.ok(res.headers['X-SQLAPI-Errors'].length > 0);
assert.deepEqual(
res.headers['X-SQLAPI-Errors'],
JSON.stringify(errorHeader)
);
2017-11-29 00:19:48 +08:00
done();
});
2017-11-29 00:19:48 +08:00
});
2017-12-18 19:46:03 +08:00
it('should escape chars that broke logs regex', function (done) {
const badString = 'error: ( ) = " \" \' * $ & |';
const escapedString = 'error ';
let error = new Error(badString);
error.detail = badString;
error.hint = badString;
error.context = badString;
2018-03-28 18:10:48 +08:00
const errorHeader = getErrorHeader(
escapedString,
escapedString,
escapedString,
escapedString
);
2017-12-18 19:46:03 +08:00
2018-03-28 18:10:48 +08:00
const res = getRes();
errorMiddleware()(error, req, res, function () {
assert.ok(res.headers['X-SQLAPI-Errors'].length > 0);
assert.deepEqual(
res.headers['X-SQLAPI-Errors'],
JSON.stringify(errorHeader)
);
2017-12-18 19:46:03 +08:00
done();
});
2017-12-18 19:46:03 +08:00
});
it('should truncat too long errors', function (done) {
const veryLongString = 'Very long error message '.repeat(2);
const truncatedString = veryLongString.substring(0,10);
let error = new Error(veryLongString);
const expectedErrorHeader = {
statusCode: 400,
message: truncatedString
};
const res = getRes();
errorMiddleware()(error, req, res, function () {
assert.ok(res.headers['X-SQLAPI-Errors'].length > 0);
assert.deepEqual(
res.headers['X-SQLAPI-Errors'],
JSON.stringify(expectedErrorHeader)
);
done();
});
});
2017-11-29 00:19:48 +08:00
});