diff --git a/packages/bruno-app/src/components/Sidebar/index.js b/packages/bruno-app/src/components/Sidebar/index.js
index 92ddf191f..712ba6b88 100644
--- a/packages/bruno-app/src/components/Sidebar/index.js
+++ b/packages/bruno-app/src/components/Sidebar/index.js
@@ -117,7 +117,7 @@ const Sidebar = () => {
)}
-
v0.12.0
+ v0.12.2
diff --git a/packages/bruno-cli/package.json b/packages/bruno-cli/package.json
index 8f31679cd..ec6932f41 100644
--- a/packages/bruno-cli/package.json
+++ b/packages/bruno-cli/package.json
@@ -1,6 +1,6 @@
{
"name": "@usebruno/cli",
- "version": "0.4.4",
+ "version": "0.5.1",
"main": "src/index.js",
"bin": {
"bru": "./bin/bru.js"
diff --git a/packages/bruno-cli/src/commands/run.js b/packages/bruno-cli/src/commands/run.js
index 80900bbd3..325ced567 100644
--- a/packages/bruno-cli/src/commands/run.js
+++ b/packages/bruno-cli/src/commands/run.js
@@ -35,6 +35,15 @@ const printRunSummary = (assertionResults, testResults) => {
console.log("\n" + chalk.bold(assertSummary));
console.log(chalk.bold(testSummary));
+
+ return {
+ totalAssertions,
+ passedAssertions,
+ failedAssertions,
+ totalTests,
+ passedTests,
+ failedTests
+ }
};
const getBruFilesRecursively = (dir) => {
@@ -45,6 +54,10 @@ const getBruFilesRecursively = (dir) => {
const traverse = (currentPath) => {
const filesInCurrentDir = fs.readdirSync(currentPath);
+
+ if (currentPath.includes('node_modules')) {
+ return;
+ }
for (const file of filesInCurrentDir) {
const filePath = path.join(currentPath, file);
@@ -170,8 +183,14 @@ const handler = async function (argv) {
testResults
} = result;
- printRunSummary(assertionResults, testResults);
+ const summary = printRunSummary(assertionResults, testResults);
console.log(chalk.dim(chalk.grey('Done.')));
+
+ if(summary.failedAssertions > 0 || summary.failedTests > 0) {
+ process.exit(1);
+ }
+ } else {
+ process.exit(1);
}
}
@@ -226,12 +245,17 @@ const handler = async function (argv) {
}
}
- printRunSummary(assertionResults, testResults);
+ const summary = printRunSummary(assertionResults, testResults);
console.log(chalk.dim(chalk.grey('Ran all requests.')));
+
+ if(summary.failedAssertions > 0 || summary.failedTests > 0) {
+ process.exit(1);
+ }
}
} catch (err) {
console.log("Something went wrong");
console.error(chalk.red(err.message));
+ process.exit(1);
}
};
diff --git a/packages/bruno-cli/src/runner/interpolate-vars.js b/packages/bruno-cli/src/runner/interpolate-vars.js
index 6debaffb0..cf7109ad2 100644
--- a/packages/bruno-cli/src/runner/interpolate-vars.js
+++ b/packages/bruno-cli/src/runner/interpolate-vars.js
@@ -42,6 +42,15 @@ const interpolateVars = (request, envVars = {}, collectionVariables ={}) => {
request.data = interpolate(request.data);
}
}
+ } else if(request.headers["content-type"] === "application/x-www-form-urlencoded") {
+ if(typeof request.data === "object") {
+ try {
+ let parsed = JSON.stringify(request.data);
+ parsed = interpolate(parsed);
+ request.data = JSON.parse(parsed);
+ } catch (err) {
+ }
+ }
} else {
request.data = interpolate(request.data);
}
diff --git a/packages/bruno-cli/src/runner/prepare-request.js b/packages/bruno-cli/src/runner/prepare-request.js
index bcc388d9c..44d3465b8 100644
--- a/packages/bruno-cli/src/runner/prepare-request.js
+++ b/packages/bruno-cli/src/runner/prepare-request.js
@@ -1,5 +1,4 @@
const { get, each, filter } = require('lodash');
-const qs = require('qs');
const prepareRequest = (request) => {
const headers = {};
@@ -41,7 +40,7 @@ const prepareRequest = (request) => {
const params = {};
const enabledParams = filter(request.body.formUrlEncoded, (p) => p.enabled);
each(enabledParams, (p) => (params[p.name] = p.value));
- axiosRequest.data = qs.stringify(params);
+ axiosRequest.data = params;
}
if (request.body.mode === 'multipartForm') {
diff --git a/packages/bruno-cli/src/runner/run-single-request.js b/packages/bruno-cli/src/runner/run-single-request.js
index 659536107..950c07901 100644
--- a/packages/bruno-cli/src/runner/run-single-request.js
+++ b/packages/bruno-cli/src/runner/run-single-request.js
@@ -1,3 +1,4 @@
+const qs = require('qs');
const chalk = require('chalk');
const { forOwn, each, extend, get } = require('lodash');
const FormData = require('form-data');
@@ -39,6 +40,11 @@ const runSingleRequest = async function (filename, bruJson, collectionPath, coll
// interpolate variables inside request
interpolateVars(request, envVariables, collectionVariables);
+ // stringify the request url encoded params
+ if(request.headers['content-type'] === 'application/x-www-form-urlencoded') {
+ request.data = qs.stringify(request.data);
+ }
+
// run request
const response = await axios(request);
diff --git a/packages/bruno-electron/package.json b/packages/bruno-electron/package.json
index 50bbb5c94..c8b1382d3 100644
--- a/packages/bruno-electron/package.json
+++ b/packages/bruno-electron/package.json
@@ -1,5 +1,5 @@
{
- "version": "0.12.0",
+ "version": "0.12.2",
"name": "bruno",
"description": "Opensource API Client",
"homepage": "https://www.usebruno.com",
diff --git a/packages/bruno-electron/src/ipc/network/index.js b/packages/bruno-electron/src/ipc/network/index.js
index 1c9b0ace4..8e1997721 100644
--- a/packages/bruno-electron/src/ipc/network/index.js
+++ b/packages/bruno-electron/src/ipc/network/index.js
@@ -1,3 +1,4 @@
+const qs = require('qs');
const axios = require('axios');
const Mustache = require('mustache');
const FormData = require('form-data');
@@ -124,6 +125,11 @@ const registerNetworkIpc = (mainWindow, watcher, lastOpenedCollections) => {
interpolateVars(request, envVars, collectionVariables);
+ // stringify the request url encoded params
+ if(request.headers['content-type'] === 'application/x-www-form-urlencoded') {
+ request.data = qs.stringify(request.data);
+ }
+
// todo:
// i have no clue why electron can't send the request object
// without safeParseJSON(safeStringifyJSON(request.data))
diff --git a/packages/bruno-electron/src/ipc/network/interpolate-vars.js b/packages/bruno-electron/src/ipc/network/interpolate-vars.js
index c9845f230..8e54430c1 100644
--- a/packages/bruno-electron/src/ipc/network/interpolate-vars.js
+++ b/packages/bruno-electron/src/ipc/network/interpolate-vars.js
@@ -42,6 +42,15 @@ const interpolateVars = (request, envVars = {}, collectionVariables ={}) => {
request.data = interpolate(request.data);
}
}
+ } else if(request.headers["content-type"] === "application/x-www-form-urlencoded") {
+ if(typeof request.data === "object") {
+ try {
+ let parsed = JSON.stringify(request.data);
+ parsed = interpolate(parsed);
+ request.data = JSON.parse(parsed);
+ } catch (err) {
+ }
+ }
} else {
request.data = interpolate(request.data);
}
diff --git a/packages/bruno-electron/src/ipc/network/prepare-request.js b/packages/bruno-electron/src/ipc/network/prepare-request.js
index ef2feb45e..9305c25ff 100644
--- a/packages/bruno-electron/src/ipc/network/prepare-request.js
+++ b/packages/bruno-electron/src/ipc/network/prepare-request.js
@@ -1,5 +1,4 @@
const { get, each, filter } = require('lodash');
-const qs = require('qs');
const prepareRequest = (request) => {
const headers = {};
@@ -39,7 +38,7 @@ const prepareRequest = (request) => {
const params = {};
const enabledParams = filter(request.body.formUrlEncoded, (p) => p.enabled);
each(enabledParams, (p) => (params[p.name] = p.value));
- axiosRequest.data = qs.stringify(params);
+ axiosRequest.data = params;
}
if (request.body.mode === 'multipartForm') {