From e92131ff8aa4fd0739bc1e345f8fa42c0f5a42f4 Mon Sep 17 00:00:00 2001 From: Pragadesh-45 <54320162+Pragadesh-45@users.noreply.github.com> Date: Wed, 6 May 2026 13:57:29 +0530 Subject: [PATCH] fix(cli): skip headers with empty name when building request (#7869) --- .../bruno-cli/src/runner/prepare-request.js | 2 +- .../tests/runner/prepare-request.spec.js | 65 +++++++++++++++++++ 2 files changed, 66 insertions(+), 1 deletion(-) diff --git a/packages/bruno-cli/src/runner/prepare-request.js b/packages/bruno-cli/src/runner/prepare-request.js index 4842fd253..49a433418 100644 --- a/packages/bruno-cli/src/runner/prepare-request.js +++ b/packages/bruno-cli/src/runner/prepare-request.js @@ -30,7 +30,7 @@ const prepareRequest = async (item = {}, collection = {}) => { const disabledHeaders = []; each(get(request, 'headers', []), (h) => { - if (h.enabled) { + if (h.enabled && h.name.length > 0) { headers[h.name] = h.value; if (h.name.toLowerCase() === 'content-type') { contentTypeDefined = true; diff --git a/packages/bruno-cli/tests/runner/prepare-request.spec.js b/packages/bruno-cli/tests/runner/prepare-request.spec.js index 27515eb51..1847d7792 100644 --- a/packages/bruno-cli/tests/runner/prepare-request.spec.js +++ b/packages/bruno-cli/tests/runner/prepare-request.spec.js @@ -607,6 +607,71 @@ describe('prepare-request: prepareRequest', () => { }); }); + describe('Header filtering', () => { + it('skips headers with empty name', async () => { + const item = { + request: { + method: 'GET', + url: 'https://example.com', + headers: [ + { name: '', value: 'ghost', enabled: true }, + { name: 'X-Valid', value: 'yes', enabled: true } + ] + } + }; + const result = await prepareRequest(item); + expect(result.headers).not.toHaveProperty(''); + expect(result.headers).toHaveProperty('X-Valid', 'yes'); + }); + + it('skips disabled headers regardless of name', async () => { + const item = { + request: { + method: 'GET', + url: 'https://example.com', + headers: [ + { name: 'X-Disabled', value: 'nope', enabled: false }, + { name: 'X-Enabled', value: 'yes', enabled: true } + ] + } + }; + const result = await prepareRequest(item); + expect(result.headers).not.toHaveProperty('X-Disabled'); + expect(result.headers).toHaveProperty('X-Enabled', 'yes'); + }); + + it('includes all valid enabled headers', async () => { + const item = { + request: { + method: 'GET', + url: 'https://example.com', + headers: [ + { name: 'X-One', value: '1', enabled: true }, + { name: 'X-Two', value: '2', enabled: true } + ] + } + }; + const result = await prepareRequest(item); + expect(result.headers).toHaveProperty('X-One', '1'); + expect(result.headers).toHaveProperty('X-Two', '2'); + }); + + it('produces no headers when all have empty names', async () => { + const item = { + request: { + method: 'GET', + url: 'https://example.com', + headers: [ + { name: '', value: '', enabled: true }, + { name: '', value: 'some-value', enabled: true } + ] + } + }; + const result = await prepareRequest(item); + expect(Object.keys(result.headers).filter((k) => k === '')).toHaveLength(0); + }); + }); + describe('GraphQL request', () => { it('keeps variables as string for interpolation', async () => { const item = {