diff --git a/packages/bruno-cli/src/runner/interpolate-vars.js b/packages/bruno-cli/src/runner/interpolate-vars.js index 0253c10cd..2b727e671 100644 --- a/packages/bruno-cli/src/runner/interpolate-vars.js +++ b/packages/bruno-cli/src/runner/interpolate-vars.js @@ -74,17 +74,17 @@ const interpolateVars = (request, envVars = {}, runtimeVariables = {}, processEn } else if (contentType === '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); + forOwn(request?.data, (value, key) => { + request.data[key] = _interpolate(value); + }); } catch (err) {} } } else if (contentType === 'multipart/form-data') { if (typeof request.data === 'object' && !(request?.data instanceof FormData)) { try { - let parsed = JSON.stringify(request.data); - parsed = _interpolate(parsed); - request.data = JSON.parse(parsed); + forOwn(request?.data, (value, key) => { + request.data[key] = _interpolate(value); + }); } catch (err) {} } } else { diff --git a/packages/bruno-electron/src/ipc/network/interpolate-vars.js b/packages/bruno-electron/src/ipc/network/interpolate-vars.js index e60d52428..99b0191cd 100644 --- a/packages/bruno-electron/src/ipc/network/interpolate-vars.js +++ b/packages/bruno-electron/src/ipc/network/interpolate-vars.js @@ -78,17 +78,17 @@ const interpolateVars = (request, envVariables = {}, runtimeVariables = {}, proc } else if (contentType === '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); + forOwn(request?.data, (value, key) => { + request.data[key] = _interpolate(value); + }); } catch (err) {} } } else if (contentType === 'multipart/form-data') { if (typeof request.data === 'object' && !(request.data instanceof FormData)) { try { - let parsed = JSON.stringify(request.data); - parsed = _interpolate(parsed); - request.data = JSON.parse(parsed); + forOwn(request?.data, (value, key) => { + request.data[key] = _interpolate(value); + }); } catch (err) {} } } else { diff --git a/packages/bruno-tests/collection/echo/echo form-url-encoded.bru b/packages/bruno-tests/collection/echo/echo form-url-encoded.bru index a0d2f0afb..7c0ce77eb 100644 --- a/packages/bruno-tests/collection/echo/echo form-url-encoded.bru +++ b/packages/bruno-tests/collection/echo/echo form-url-encoded.bru @@ -12,12 +12,15 @@ post { body:form-urlencoded { form-data-key: {{form-data-key}} -} - -script:pre-request { - bru.setVar('form-data-key', 'form-data-value'); + form-data-stringified-object: {{form-data-stringified-object}} } assert { - res.body: eq form-data-key=form-data-value + res.body: eq form-data-key=form-data-value&form-data-stringified-object=%7B%22foo%22%3A123%7D +} + +script:pre-request { + let obj = JSON.stringify({foo:123}); + bru.setVar('form-data-key', 'form-data-value'); + bru.setVar('form-data-stringified-object', obj); } diff --git a/packages/bruno-tests/collection/echo/echo multipart.bru b/packages/bruno-tests/collection/echo/echo multipart.bru index b8fd8abf7..1edb2ca8a 100644 --- a/packages/bruno-tests/collection/echo/echo multipart.bru +++ b/packages/bruno-tests/collection/echo/echo multipart.bru @@ -11,14 +11,18 @@ post { } body:multipart-form { - foo: {{form-data-key}} + form-data-key: {{form-data-key}} + form-data-stringified-object: {{form-data-stringified-object}} file: @file(bruno.png) } assert { res.body: contains form-data-value + res.body: contains {"foo":123} } script:pre-request { + let obj = JSON.stringify({foo:123}); bru.setVar('form-data-key', 'form-data-value'); + bru.setVar('form-data-stringified-object', obj); }