feat: remove headers from request using scripts (#7122)

This commit is contained in:
shubh-bruno
2026-02-16 12:07:35 +05:30
committed by GitHub
parent 471333fb80
commit 9e939a2188
6 changed files with 76 additions and 2 deletions

View File

@@ -24,6 +24,7 @@ const STATIC_API_HINTS = {
'req.setHeader(name, value)',
'req.setHeaders(data)',
'req.deleteHeader(name)',
'req.deleteHeaders(data)',
'req.getBody()',
'req.setBody(data)',
'req.setMaxRedirects(maxRedirects)',

View File

@@ -383,6 +383,22 @@ describe('Bruno Autocomplete', () => {
);
});
it('should provide deleteHeader and deleteHeaders hints for req.delete prefix', () => {
const line = 'req.delete';
mockedCodemirror.getCursor.mockReturnValue({ line: 0, ch: line.length });
mockedCodemirror.getLine.mockReturnValue(line);
mockedCodemirror.getRange.mockReturnValue(line);
const result = getAutoCompleteHints(mockedCodemirror, {}, [], {
showHintsFor: ['req']
});
expect(result).toBeTruthy();
expect(result.list).toEqual(
expect.arrayContaining(['deleteHeader(name)', 'deleteHeaders(data)'])
);
});
it('should handle case-insensitive matching', () => {
mockedCodemirror.getCursor.mockReturnValue({ line: 0, ch: 10 });
mockedCodemirror.getLine.mockReturnValue('{{varName}}');

View File

@@ -79,6 +79,18 @@ describe('Bruno to Postman Request Translation', () => {
expect(translatedCode).toBe('pm.request.headers.set("Authorization", "Bearer token123");');
});
it('should translate req.deleteHeader() to pm.request.headers.remove()', () => {
const code = 'req.deleteHeader("Authorization");';
const translatedCode = translateBruToPostman(code);
expect(translatedCode).toBe('pm.request.headers.remove("Authorization");');
});
it('should handle req.deleteHeader() with a variable argument', () => {
const code = 'const headerName = "X-Custom"; req.deleteHeader(headerName);';
const translatedCode = translateBruToPostman(code);
expect(translatedCode).toBe('const headerName = "X-Custom"; pm.request.headers.remove(headerName);');
});
it('should handle all request properties together', () => {
const code = `
// All request properties

View File

@@ -125,6 +125,13 @@ class BrunoRequest {
this.req.headers = headers;
}
deleteHeaders(headers) {
headers.forEach((name) => {
delete this.headers[name];
delete this.req.headers[name];
});
}
getHeader(name) {
return this.req.headers[name];
}

View File

@@ -102,6 +102,12 @@ const addBrunoRequestShimToContext = (vm, req) => {
vm.setProp(reqObject, 'setHeaders', setHeaders);
setHeaders.dispose();
let deleteHeaders = vm.newFunction('deleteHeaders', function (headers) {
req.deleteHeaders(vm.dump(headers));
});
vm.setProp(reqObject, 'deleteHeaders', deleteHeaders);
deleteHeaders.dispose();
let getHeader = vm.newFunction('getHeader', function (name) {
return marshallToVm(req.getHeader(vm.dump(name)), vm);
});
@@ -114,8 +120,8 @@ const addBrunoRequestShimToContext = (vm, req) => {
vm.setProp(reqObject, 'setHeader', setHeader);
setHeader.dispose();
let deleteHeader = vm.newFunction('deleteHeader', function (name) {
req.deleteHeader(vm.dump(name));
let deleteHeader = vm.newFunction('deleteHeader', function (header) {
req.deleteHeader(vm.dump(header));
});
vm.setProp(reqObject, 'deleteHeader', deleteHeader);
deleteHeader.dispose();

View File

@@ -0,0 +1,32 @@
meta {
name: deleteHeaders
type: http
seq: 13
}
get {
url: {{host}}/ping
body: none
auth: none
}
headers {
X-Frame-Options: 1
Content-Type: application/json
}
assert {
res.status: eq 200
res.body: eq pong
}
script:pre-request {
req.deleteHeaders(['X-Frame-Options']);
}
tests {
test("req.deleteHeaders(names)", function() {
const h = req.getHeaders();
expect(h["x-frame-options"]).to.be.undefined;
});
}