From d0f858681d3d27ba7de91daf64383ac8d46d671f Mon Sep 17 00:00:00 2001 From: Nelu Platonov Date: Thu, 30 Nov 2023 01:16:37 +0100 Subject: [PATCH] feat(#946): Fix PR #1070 - Add feature to CLI & prepend 'http://' to URL after interpolation --- .../bruno-cli/src/runner/run-single-request.js | 6 ++++++ packages/bruno-electron/src/ipc/network/index.js | 7 +++++++ .../src/ipc/network/prepare-request.js | 7 ------- .../bruno-electron/tests/network/index.spec.js | 15 +++++++++++++++ .../tests/network/prepare-request.spec.js | 13 ------------- 5 files changed, 28 insertions(+), 20 deletions(-) create mode 100644 packages/bruno-electron/tests/network/index.spec.js delete mode 100644 packages/bruno-electron/tests/network/prepare-request.spec.js diff --git a/packages/bruno-cli/src/runner/run-single-request.js b/packages/bruno-cli/src/runner/run-single-request.js index 486c82a26..50a30144a 100644 --- a/packages/bruno-cli/src/runner/run-single-request.js +++ b/packages/bruno-cli/src/runner/run-single-request.js @@ -17,6 +17,8 @@ const { SocksProxyAgent } = require('socks-proxy-agent'); const { makeAxiosInstance } = require('../utils/axios-instance'); const { shouldUseProxy, PatchedHttpsProxyAgent } = require('../utils/proxy-util'); +const protocolRegex = /([a-zA-Z]{2,20}:\/\/)(.*)/; + const runSingleRequest = async function ( filename, bruJson, @@ -81,6 +83,10 @@ const runSingleRequest = async function ( // interpolate variables inside request interpolateVars(request, envVariables, collectionVariables, processEnvVars); + if (!protocolRegex.test(request.url)) { + request.url = `http://${request.url}`; + } + const options = getOptions(); const insecure = get(options, 'insecure', false); const httpsAgentRequestFields = {}; diff --git a/packages/bruno-electron/src/ipc/network/index.js b/packages/bruno-electron/src/ipc/network/index.js index 82e0f3b7c..4dce1b357 100644 --- a/packages/bruno-electron/src/ipc/network/index.js +++ b/packages/bruno-electron/src/ipc/network/index.js @@ -72,6 +72,8 @@ const getEnvVars = (environment = {}) => { }; }; +const protocolRegex = /([a-zA-Z]{2,20}:\/\/)(.*)/; + const configureRequest = async ( collectionUid, request, @@ -80,6 +82,10 @@ const configureRequest = async ( processEnvVars, collectionPath ) => { + if (!protocolRegex.test(request.url)) { + request.url = `http://${request.url}`; + } + const httpsAgentRequestFields = {}; if (!preferencesUtil.shouldVerifyTls()) { httpsAgentRequestFields['rejectUnauthorized'] = false; @@ -932,3 +938,4 @@ const registerNetworkIpc = (mainWindow) => { }; module.exports = registerNetworkIpc; +module.exports.configureRequest = configureRequest; diff --git a/packages/bruno-electron/src/ipc/network/prepare-request.js b/packages/bruno-electron/src/ipc/network/prepare-request.js index c174b29b6..761984e65 100644 --- a/packages/bruno-electron/src/ipc/network/prepare-request.js +++ b/packages/bruno-electron/src/ipc/network/prepare-request.js @@ -70,18 +70,11 @@ const setAuthHeaders = (axiosRequest, request, collectionRoot) => { return axiosRequest; }; -const protocolRegex = /([a-zA-Z]{2,20}:\/\/)(.*)/; - const prepareRequest = (request, collectionRoot) => { const headers = {}; let contentTypeDefined = false; let url = request.url; - // Temporarily disabling this as this fails when url has vars Ex: {{baseUrl}}/api - // if (!protocolRegex.test(url)) { - // url = `http://${url}`; - // } - // collection headers each(get(collectionRoot, 'request.headers', []), (h) => { if (h.enabled) { diff --git a/packages/bruno-electron/tests/network/index.spec.js b/packages/bruno-electron/tests/network/index.spec.js new file mode 100644 index 000000000..02a9b9083 --- /dev/null +++ b/packages/bruno-electron/tests/network/index.spec.js @@ -0,0 +1,15 @@ +const { configureRequest } = require('../../src/ipc/network/index'); + +describe('index: configureRequest', () => { + it("Should add 'http://' to the URL if no protocol is specified", async () => { + const request = { method: 'GET', url: 'test-domain', body: {} }; + await configureRequest(null, request, null, null, null, null); + expect(request.url).toEqual('http://test-domain'); + }); + + it("Should NOT add 'http://' to the URL if a protocol is specified", async () => { + const request = { method: 'GET', url: 'ftp://test-domain', body: {} }; + await configureRequest(null, request, null, null, null, null); + expect(request.url).toEqual('ftp://test-domain'); + }); +}); diff --git a/packages/bruno-electron/tests/network/prepare-request.spec.js b/packages/bruno-electron/tests/network/prepare-request.spec.js deleted file mode 100644 index 5c97f23a5..000000000 --- a/packages/bruno-electron/tests/network/prepare-request.spec.js +++ /dev/null @@ -1,13 +0,0 @@ -const prepareRequest = require('../../src/ipc/network/prepare-request'); - -describe('prepare-request: prepareRequest', () => { - it("Should add 'http://' to the URL if no protocol is specified", () => { - const request = prepareRequest({ method: 'GET', url: 'test', body: {} }); - expect(request.url).toEqual('http://test'); - }); - - it("Should NOT add 'http://' to the URL if a protocol is specified", () => { - const request = prepareRequest({ method: 'GET', url: 'ftp://test', body: {} }); - expect(request.url).toEqual('ftp://test'); - }); -});