From d195316fa0544b159d2cec6c5a82b503d72f1230 Mon Sep 17 00:00:00 2001 From: lohit-bruno Date: Tue, 6 Oct 2026 16:46:09 +0530 Subject: [PATCH] fix(bruno-request): set Buffer bodies from req.setBody as-is under a JSON Content-Type --- packages/bruno-js/src/bruno-request.js | 3 ++- .../bruno-js/tests/script-runtime-request-body.spec.js | 8 ++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/packages/bruno-js/src/bruno-request.js b/packages/bruno-js/src/bruno-request.js index 361feece6..242fd18f2 100644 --- a/packages/bruno-js/src/bruno-request.js +++ b/packages/bruno-js/src/bruno-request.js @@ -204,9 +204,10 @@ class BrunoRequest { * - We set the body property as the data itself * * If the user wants to override this behavior, they can pass the raw option as true + * A Buffer is always set as-is, since it already holds the exact bytes to send */ setBody(data, options = {}) { - if (options.raw) { + if (options.raw || Buffer.isBuffer(data)) { this.req.data = data; this.body = data; return; diff --git a/packages/bruno-js/tests/script-runtime-request-body.spec.js b/packages/bruno-js/tests/script-runtime-request-body.spec.js index 3bb2a312e..81dcb9a77 100644 --- a/packages/bruno-js/tests/script-runtime-request-body.spec.js +++ b/packages/bruno-js/tests/script-runtime-request-body.spec.js @@ -42,6 +42,14 @@ describe.each(['nodevm', 'quickjs'])('req.setBody() in a pre-request script on % expect(request.data).toStrictEqual(Buffer.from(BINARY_BYTES)); }); + it('keeps every byte of a Buffer body set without options when Content-Type is application/json', async () => { + const request = makeRequest({ headers: { 'content-type': 'application/json' } }); + + await runRequestScript(runtime, `req.setBody(Buffer.from(${JSON.stringify(BINARY_BYTES)}))`, request); + + expect(request.data).toStrictEqual(Buffer.from(BINARY_BYTES)); + }); + it('keeps only the bytes inside a sliced Buffer body', async () => { const request = makeRequest();