UNPKG

@villedemontreal/general-utils

Version:
231 lines 13.6 kB
"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