Implement Response URL variable (#2983)

This commit is contained in:
Tim Nikischin
2025-07-30 16:05:17 +02:00
committed by GitHub
parent aae4f03fdf
commit 60a0a32743
6 changed files with 43 additions and 0 deletions

View File

@@ -463,6 +463,7 @@ const runSingleRequest = async function (
statusText: null,
headers: null,
data: null,
url: null,
responseTime: 0
},
error: err?.message || err?.errors?.map(e => e?.message)?.at(0) || err?.code || 'Request Failed!',
@@ -602,6 +603,7 @@ const runSingleRequest = async function (
statusText: response.statusText,
headers: response.headers,
data: response.data,
url: response.request ? response.request.protocol + '//' + response.request.host + response.request.path : null,
responseTime
},
error: null,
@@ -630,6 +632,7 @@ const runSingleRequest = async function (
statusText: null,
headers: null,
data: null,
url: null,
responseTime: 0
},
status: 'error',

View File

@@ -901,6 +901,7 @@ const registerNetworkIpc = (mainWindow) => {
dataBuffer: response.dataBuffer.toString('base64'),
size: Buffer.byteLength(response.dataBuffer),
duration: responseTime ?? 0,
url: response.request ? response.request.protocol + '//' + response.request.host + response.request.path : null,
timeline: response.timeline
};
} catch (error) {
@@ -1208,6 +1209,7 @@ const registerNetworkIpc = (mainWindow) => {
data: response.data,
responseTime: response.responseTime,
timeline: response.timeline,
url: response.request ? response.request.protocol + '//' + response.request.host + response.request.path : null
},
...eventData
});

View File

@@ -9,6 +9,7 @@ class BrunoResponse {
this.headers = res ? res.headers : null;
this.body = res ? res.data : null;
this.responseTime = res ? res.responseTime : null;
this.url = res?.request ? res.request.protocol + '//' + res.request.host + res.request.path : null;
// Make the instance callable
const callable = (...args) => get(this.body, ...args);
@@ -42,6 +43,10 @@ class BrunoResponse {
return this.res ? this.res.responseTime : null;
}
getUrl() {
return this.res ? this.url : null;
}
setBody(data) {
if (!this.res) {
return;

View File

@@ -10,17 +10,20 @@ const addBrunoResponseShimToContext = (vm, res) => {
const headers = marshallToVm(res?.headers, vm);
const body = marshallToVm(res?.body, vm);
const responseTime = marshallToVm(res?.responseTime, vm);
const url = marshallToVm(res?.url, vm);
vm.setProp(resFn, 'status', status);
vm.setProp(resFn, 'statusText', statusText);
vm.setProp(resFn, 'headers', headers);
vm.setProp(resFn, 'body', body);
vm.setProp(resFn, 'responseTime', responseTime);
vm.setProp(resFn, 'url', url);
status.dispose();
headers.dispose();
body.dispose();
responseTime.dispose();
url.dispose();
statusText.dispose();
let getStatusText = vm.newFunction('getStatusText', function () {
@@ -59,6 +62,12 @@ const addBrunoResponseShimToContext = (vm, res) => {
vm.setProp(resFn, 'getResponseTime', getResponseTime);
getResponseTime.dispose();
let getUrl = vm.newFunction('getUrl', function () {
return marshallToVm(res.getUrl(), vm);
});
vm.setProp(resFn, 'getUrl', getUrl);
getUrl.dispose();
let setBody = vm.newFunction('setBody', function (data) {
res.setBody(vm.dump(data));
});

View File

@@ -117,6 +117,7 @@ const createResponseParser = (response = {}) => {
res.headers = response.headers;
res.body = response.data;
res.responseTime = response.responseTime;
res.url = response.request ? response.request.protocol + '//' + response.request.host + response.request.path : null;
res.jq = (expr) => {
const output = jsonQuery(expr, { data: response.data });

View File

@@ -0,0 +1,23 @@
meta {
name: getUrl
type: http
seq: 1
}
get {
url: {{host}}/ping
body: none
auth: none
}
assert {
res.status: eq 200
res.body: eq pong
}
tests {
test("res.getUrl()", function() {
const url = res.getUrl();
expect(url).to.equal("https://testbench-sanity.usebruno.com/ping");
});
}