From 0883564143ff539709a6767246dd4240cfe90796 Mon Sep 17 00:00:00 2001 From: hurtadof Date: Fri, 23 Jan 2026 15:36:04 -0400 Subject: [PATCH] fix: invoke callback on request error --- lib/apicontrollersbase.js | 1 + package.json | 3 ++ test/test-controllerbase.js | 66 +++++++++++++++++++++++++++++++++++++ 3 files changed, 70 insertions(+) create mode 100644 test/test-controllerbase.js diff --git a/lib/apicontrollersbase.js b/lib/apicontrollersbase.js index 613b51a..7d48f8b 100644 --- a/lib/apicontrollersbase.js +++ b/lib/apicontrollersbase.js @@ -116,6 +116,7 @@ class APIOperationBase { }).catch(error => { obj._error = error; logger.error(error); + callback(error); }); logger.debug('Exit APIOperationBase execute'); diff --git a/package.json b/package.json index ab21788..6933a21 100644 --- a/package.json +++ b/package.json @@ -6,6 +6,9 @@ "directories": { "test": "tests" }, + "engines": { + "node": ">=18" + }, "dependencies": { "axios": "1.8.3", "https-proxy-agent": "^7.0.0", diff --git a/test/test-controllerbase.js b/test/test-controllerbase.js new file mode 100644 index 0000000..3627c20 --- /dev/null +++ b/test/test-controllerbase.js @@ -0,0 +1,66 @@ +'use strict'; + +var assert = require('assert'); +var ApiContracts = require('../lib/apicontracts.js'); +var APIOperationBase = require('../lib/apicontrollersbase.js').APIOperationBase; +var constants = require('./constants.js'); + +var apiLoginKey = constants.apiLoginKey; +var transactionKey = constants.transactionKey; + +class TestRequestData { + constructor(externalConfig = null) { + this.merchant = new ApiContracts.MerchantAuthenticationType(); + this.merchant.setName(apiLoginKey); + this.merchant.setTransactionKey(transactionKey); + this.request = new ApiContracts.AuthenticateTestRequest(); + this.request.setMerchantAuthentication(this.merchant); + this.ctrl = new APIOperationBase(this.request.getJSON(), externalConfig); + } +} + +describe('Controller base', function () { + this.timeout(120000); + + describe.skip('Generate request', function () { + var response; + var requestError; + + before(function (done) { + var ctrl = new TestRequestData().ctrl; + ctrl.execute(function () { + var apiResponse = ctrl.getResponse(); + response = new ApiContracts.AuthenticateTestResponse(apiResponse); + requestError = ctrl.getError(); + //console.log(JSON.stringify(response.getMessages().getResultCode())); + done(); + }); + }); + + it('should return resultcode Ok when successful', function () { + assert.equal(response.getMessages().getResultCode(), 'Ok'); + assert.equal(!!requestError, false); + }); + }); + + describe('Handle request error', function () { + var response; + var requestError; + + before(function (done) { + //set a low timeout to force an axios error + var requestOptions = { timeout: 1, logger: {}, proxy: {} }; + var ctrl = new TestRequestData(requestOptions).ctrl; + ctrl.execute(function () { + response = ctrl.getResponse(); + requestError = ctrl.getError(); + done(); + }); + }); + + it('should retrieve request error', function () { + assert.equal(!!response, false); + assert.equal(!!requestError, true); + }); + }); +});