@villedemontreal/general-utils
Version:
General utilities library
231 lines • 13.6 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
// Disabling the "function length" rule is OK for the test files.
// tslint:disable:max-func-body-length
const chai_1 = require("chai");
const apiError_1 = require("./apiError");
const apiErrorBuilder_1 = require("./apiErrorBuilder");
const globalConstants_1 = require("./config/globalConstants");
const logLevel_1 = require("./logLevel");
// ==========================================
// API errors
// ==========================================
describe('API errors', () => {
// ==========================================
// Predefined errors
// ==========================================
describe('Predefined errors', () => {
it('createServerError - default', async () => {
const error = (0, apiErrorBuilder_1.createServerError)('myLogMessage');
chai_1.assert.strictEqual(error.httpStatus, 500);
chai_1.assert.strictEqual(error.logLevel, logLevel_1.LogLevel.ERROR);
chai_1.assert.strictEqual(error.logMessage, 'myLogMessage');
chai_1.assert.strictEqual(error.logStackTrace, true);
chai_1.assert.strictEqual(error.error.code, globalConstants_1.globalConstants.errors.apiGeneralErrors.codes.GENERIC_ERROR);
chai_1.assert.strictEqual(error.error.message, 'Server error');
});
it('createServerError - custom', async () => {
const error = (0, apiErrorBuilder_1.createServerError)('myLogMessage', 'myPublicMessage');
chai_1.assert.strictEqual(error.httpStatus, 500);
chai_1.assert.strictEqual(error.logLevel, logLevel_1.LogLevel.ERROR);
chai_1.assert.strictEqual(error.logMessage, 'myLogMessage');
chai_1.assert.strictEqual(error.logStackTrace, true);
chai_1.assert.strictEqual(error.error.code, globalConstants_1.globalConstants.errors.apiGeneralErrors.codes.GENERIC_ERROR);
chai_1.assert.strictEqual(error.error.message, 'myPublicMessage');
});
it('createNotFoundError - default', async () => {
const error = (0, apiErrorBuilder_1.createNotFoundError)('myLogMessage');
chai_1.assert.strictEqual(error.httpStatus, 404);
chai_1.assert.strictEqual(error.logLevel, logLevel_1.LogLevel.DEBUG);
chai_1.assert.strictEqual(error.logMessage, 'myLogMessage');
chai_1.assert.strictEqual(error.logStackTrace, false);
chai_1.assert.strictEqual(error.error.code, globalConstants_1.globalConstants.errors.apiGeneralErrors.codes.NOT_FOUND);
chai_1.assert.strictEqual(error.error.message, 'Not Found');
});
it('createNotFoundError - custom', async () => {
const error = (0, apiErrorBuilder_1.createNotFoundError)('myLogMessage', 'myPublicMessage', logLevel_1.LogLevel.INFO, true);
chai_1.assert.strictEqual(error.httpStatus, 404);
chai_1.assert.strictEqual(error.logLevel, logLevel_1.LogLevel.INFO);
chai_1.assert.strictEqual(error.logMessage, 'myLogMessage');
chai_1.assert.strictEqual(error.logStackTrace, true);
chai_1.assert.strictEqual(error.error.code, globalConstants_1.globalConstants.errors.apiGeneralErrors.codes.NOT_FOUND);
chai_1.assert.strictEqual(error.error.message, 'myPublicMessage');
});
it('createInvalidParameterError - default', async () => {
const error = (0, apiErrorBuilder_1.createInvalidParameterError)('myPublicMessage');
chai_1.assert.strictEqual(error.httpStatus, 400);
chai_1.assert.strictEqual(error.logLevel, logLevel_1.LogLevel.DEBUG);
chai_1.assert.strictEqual(error.logMessage, 'myPublicMessage');
chai_1.assert.strictEqual(error.logStackTrace, false);
chai_1.assert.strictEqual(error.error.code, globalConstants_1.globalConstants.errors.apiGeneralErrors.codes.INVALID_PARAMETER);
chai_1.assert.strictEqual(error.error.message, 'myPublicMessage');
chai_1.assert.isTrue(error.error.details === undefined || error.error.details.length === 0);
});
it('createInvalidParameterError - custom', async () => {
const details = [
{
code: 'myDetailCode1',
message: 'myDetailMessage1',
},
{
code: 'myDetailCode2',
message: 'myDetailMessage2',
},
];
const error = (0, apiErrorBuilder_1.createInvalidParameterError)('myPublicMessage', details, logLevel_1.LogLevel.INFO, true);
chai_1.assert.strictEqual(error.httpStatus, 400);
chai_1.assert.strictEqual(error.logLevel, logLevel_1.LogLevel.INFO);
chai_1.assert.strictEqual(error.logMessage, 'myPublicMessage');
chai_1.assert.strictEqual(error.logStackTrace, true);
chai_1.assert.strictEqual(error.error.code, globalConstants_1.globalConstants.errors.apiGeneralErrors.codes.INVALID_PARAMETER);
chai_1.assert.strictEqual(error.error.message, 'myPublicMessage');
chai_1.assert.strictEqual(error.error.details.length, 2);
chai_1.assert.strictEqual(error.error.details[0].code, 'myDetailCode1');
chai_1.assert.strictEqual(error.error.details[0].message, 'myDetailMessage1');
chai_1.assert.strictEqual(error.error.details[1].code, 'myDetailCode2');
chai_1.assert.strictEqual(error.error.details[1].message, 'myDetailMessage2');
});
it('createUnprocessableEntityError - default', async () => {
const error = (0, apiErrorBuilder_1.createUnprocessableEntityError)('myPublicMessage');
chai_1.assert.strictEqual(error.httpStatus, 422);
chai_1.assert.strictEqual(error.logLevel, logLevel_1.LogLevel.DEBUG);
chai_1.assert.strictEqual(error.logMessage, 'myPublicMessage');
chai_1.assert.strictEqual(error.logStackTrace, false);
chai_1.assert.strictEqual(error.error.code, globalConstants_1.globalConstants.errors.apiGeneralErrors.codes.UNPROCESSABLE_ENTITY);
chai_1.assert.strictEqual(error.error.message, 'myPublicMessage');
chai_1.assert.isTrue(error.error.details === undefined || error.error.details.length === 0);
});
it('createInvalidParameterError - custom', async () => {
const details = [
{
code: 'myDetailCode1',
message: 'myDetailMessage1',
target: 'aJsonPath',
},
{
code: 'myDetailCode2',
message: 'myDetailMessage2',
},
];
const error = (0, apiErrorBuilder_1.createUnprocessableEntityError)('myPublicMessage', details, logLevel_1.LogLevel.INFO, true);
chai_1.assert.strictEqual(error.httpStatus, 422);
chai_1.assert.strictEqual(error.logLevel, logLevel_1.LogLevel.INFO);
chai_1.assert.strictEqual(error.logMessage, 'myPublicMessage');
chai_1.assert.strictEqual(error.logStackTrace, true);
chai_1.assert.strictEqual(error.error.code, globalConstants_1.globalConstants.errors.apiGeneralErrors.codes.UNPROCESSABLE_ENTITY);
chai_1.assert.strictEqual(error.error.message, 'myPublicMessage');
chai_1.assert.strictEqual(error.error.details.length, 2);
chai_1.assert.strictEqual(error.error.details[0].code, 'myDetailCode1');
chai_1.assert.strictEqual(error.error.details[0].message, 'myDetailMessage1');
chai_1.assert.strictEqual(error.error.details[1].code, 'myDetailCode2');
chai_1.assert.strictEqual(error.error.details[1].message, 'myDetailMessage2');
});
it('createNotImplementedError - default', async () => {
const error = (0, apiErrorBuilder_1.createNotImplementedError)();
chai_1.assert.strictEqual(error.httpStatus, 501);
chai_1.assert.strictEqual(error.logLevel, logLevel_1.LogLevel.INFO);
chai_1.assert.strictEqual(error.logMessage, 'Not implemented');
chai_1.assert.strictEqual(error.logStackTrace, false);
chai_1.assert.strictEqual(error.error.code, globalConstants_1.globalConstants.errors.apiGeneralErrors.codes.NOT_IMPLEMENTED);
chai_1.assert.strictEqual(error.error.message, 'Not implemented yet');
});
it('createNotImplementedError - custom', async () => {
const error = (0, apiErrorBuilder_1.createNotImplementedError)('myLogMessage', 'myPublicMessage');
chai_1.assert.strictEqual(error.httpStatus, 501);
chai_1.assert.strictEqual(error.logLevel, logLevel_1.LogLevel.INFO);
chai_1.assert.strictEqual(error.logMessage, 'myLogMessage');
chai_1.assert.strictEqual(error.logStackTrace, false);
chai_1.assert.strictEqual(error.error.code, globalConstants_1.globalConstants.errors.apiGeneralErrors.codes.NOT_IMPLEMENTED);
chai_1.assert.strictEqual(error.error.message, 'myPublicMessage');
});
it('createUnauthorizedError - default', async () => {
const error = (0, apiErrorBuilder_1.createUnauthorizedError)();
chai_1.assert.strictEqual(error.httpStatus, 401);
chai_1.assert.strictEqual(error.logLevel, logLevel_1.LogLevel.INFO);
chai_1.assert.strictEqual(error.logMessage, 'Unauthorized');
chai_1.assert.strictEqual(error.logStackTrace, false);
chai_1.assert.strictEqual(error.error.code, globalConstants_1.globalConstants.errors.apiGeneralErrors.codes.UNAUTHORIZED);
chai_1.assert.strictEqual(error.error.message, 'Please authenticate yourself first.');
});
it('createUnauthorizedError - custom', async () => {
const error = (0, apiErrorBuilder_1.createUnauthorizedError)('myLogMessage', 'myPublicMessage');
chai_1.assert.strictEqual(error.httpStatus, 401);
chai_1.assert.strictEqual(error.logLevel, logLevel_1.LogLevel.INFO);
chai_1.assert.strictEqual(error.logMessage, 'myLogMessage');
chai_1.assert.strictEqual(error.logStackTrace, false);
chai_1.assert.strictEqual(error.error.code, globalConstants_1.globalConstants.errors.apiGeneralErrors.codes.UNAUTHORIZED);
chai_1.assert.strictEqual(error.error.message, 'myPublicMessage');
});
it('createForbiddenError - default', async () => {
const error = (0, apiErrorBuilder_1.createForbiddenError)();
chai_1.assert.strictEqual(error.httpStatus, 403);
chai_1.assert.strictEqual(error.logLevel, logLevel_1.LogLevel.INFO);
chai_1.assert.strictEqual(error.logMessage, 'Forbidden');
chai_1.assert.strictEqual(error.logStackTrace, false);
chai_1.assert.strictEqual(error.error.code, globalConstants_1.globalConstants.errors.apiGeneralErrors.codes.FORBIDDEN);
chai_1.assert.strictEqual(error.error.message, 'Access denied.');
});
it('createForbiddenError - custom', async () => {
const error = (0, apiErrorBuilder_1.createForbiddenError)('myLogMessage', 'myPublicMessage');
chai_1.assert.strictEqual(error.httpStatus, 403);
chai_1.assert.strictEqual(error.logLevel, logLevel_1.LogLevel.INFO);
chai_1.assert.strictEqual(error.logMessage, 'myLogMessage');
chai_1.assert.strictEqual(error.logStackTrace, false);
chai_1.assert.strictEqual(error.error.code, globalConstants_1.globalConstants.errors.apiGeneralErrors.codes.FORBIDDEN);
chai_1.assert.strictEqual(error.error.message, 'myPublicMessage');
});
});
// ==========================================
// isApiError
// ==========================================
describe('isApiError', () => {
it('is an ApiError', async () => {
for (const value of [
{
code: 'some code',
message: 'some message',
},
{
code: 'some code',
message: 'some message',
details: [],
},
{
code: 'some code',
message: 'some message',
target: 'target',
},
]) {
chai_1.assert.isTrue((0, apiError_1.isApiError)(value));
}
});
it('is not an ApiError', async () => {
for (const value of [
{
code: 'some code',
},
{
message: 'some message',
},
{
code: 'some code',
message: 'some message',
nope: 'nope',
},
{
code: 'some code',
message: 'some message',
target: 'target',
details: [],
innererror: {
code: 'some code',
},
nope: 123,
},
]) {
chai_1.assert.isFalse((0, apiError_1.isApiError)(value));
}
});
});
});
//# sourceMappingURL=apiError.test.js.map