diff --git a/lib/commands/smapi/smapi-command-handler.js b/lib/commands/smapi/smapi-command-handler.js index 1192f6b9..340d54ee 100644 --- a/lib/commands/smapi/smapi-command-handler.js +++ b/lib/commands/smapi/smapi-command-handler.js @@ -76,6 +76,24 @@ const _mapToParams = (optionsValues, flatParamsMap, commanderToApiCustomizationM const _sdkFunctionName = (swaggerApiOperationName) => `call${swaggerApiOperationName.charAt(0).toUpperCase() + swaggerApiOperationName.slice(1)}`; +/** + * Parses response from smapi + * @param {Object} response object + */ +const parseSmapiResponse = (response) => { + let result = ''; + const { body, headers } = response; + const contentType = headers.find((h) => h.key === 'content-type'); + // json if no content type or content type is application/json + const isJson = !contentType || contentType.value.includes('application/json'); + if (body && Object.keys(body).length) { + result = isJson ? jsonView.toString(body) : body; + } else { + result = 'Command executed successfully!'; + } + return result; +}; + /** * Handles smapi command request * @param {string} swaggerApiOperationName Swagger operation name. @@ -137,10 +155,10 @@ const smapiCommandHandler = (swaggerApiOperationName, flatParamsMap, commanderTo } else if (inputOpts.fullResponse) { result = jsonView.toString({ body, headers, statusCode }); } else { - result = body && Object.keys(body).length ? jsonView.toString(body) : 'Command executed successfully!'; + result = parseSmapiResponse(response); } return result; }); }; -module.exports = smapiCommandHandler; +module.exports = { smapiCommandHandler, parseSmapiResponse }; diff --git a/lib/commands/smapi/smapi-commander.js b/lib/commands/smapi/smapi-commander.js index 2eff3c4c..8c697ed9 100644 --- a/lib/commands/smapi/smapi-commander.js +++ b/lib/commands/smapi/smapi-commander.js @@ -3,7 +3,7 @@ const { ModelIntrospector } = require('ask-smapi-sdk'); const { kebabCase } = require('@src/utils/string-utils'); const { CliCustomizationProcessor } = require('@src/commands/smapi/cli-customization-processor'); const optionModel = require('@src/commands/option-model.json'); -const smapiCommandHandler = require('@src/commands/smapi/smapi-command-handler'); +const { smapiCommandHandler } = require('@src/commands/smapi/smapi-command-handler'); const aliases = require('@src/commands/smapi/customizations/aliases.json'); const { apiToCommanderMap } = require('@src/commands/smapi/customizations/parameters-map'); diff --git a/test/unit/commands/smapi/smapi-command-handler-test.js b/test/unit/commands/smapi/smapi-command-handler-test.js index 9ee2d0b3..dbdcf3fe 100644 --- a/test/unit/commands/smapi/smapi-command-handler-test.js +++ b/test/unit/commands/smapi/smapi-command-handler-test.js @@ -9,7 +9,7 @@ const jsonView = require('@src/view/json-view'); const BeforeSendProcessor = require('@src/commands/smapi/before-send-processor'); const AuthorizationController = require('@src/controllers/authorization-controller'); const profileHelper = require('@src/utils/profile-helper'); -const smapiCommandHandler = require('@src/commands/smapi/smapi-command-handler'); +const { smapiCommandHandler, parseSmapiResponse } = require('@src/commands/smapi/smapi-command-handler'); describe('Smapi test - smapiCommandHandler function', () => { @@ -182,3 +182,31 @@ describe('Smapi test - smapiCommandHandler function', () => { sinon.restore(); }); }); + +describe('Smapi test - parseSmapiResponse function', () => { + it('| should parse text/csv response', () => { + const content = 'foo bar\n foo'; + const response = { headers: [{ key: 'content-type', value: 'text/csv' }], body: content }; + + const result = parseSmapiResponse(response); + + expect(result).eql(content); + }); + + it('| should parse application/json response', () => { + const content = { foo: 'bar' }; + const response = { headers: [{ key: 'content-type', value: 'application/json' }], body: content }; + + const result = parseSmapiResponse(response); + + expect(result).eql(jsonView.toString(content)); + }); + + it('| should return command executed successfully if not response body', () => { + const response = { headers: [] }; + + const result = parseSmapiResponse(response); + + expect(result).eql('Command executed successfully!'); + }); +});