mirror of
https://github.com/usebruno/bruno.git
synced 2026-06-16 04:11:29 +00:00
feat: update skipRequest and stopExecution logic
This commit is contained in:
@@ -11,7 +11,7 @@ const ResponseSave = ({ item }) => {
|
||||
const saveResponseToFile = () => {
|
||||
return new Promise((resolve, reject) => {
|
||||
ipcRenderer
|
||||
.invoke('renderer:save-response-to-file', response, item.requestSent.url)
|
||||
.invoke('renderer:save-response-to-file', response, item?.requestSent?.url)
|
||||
.then(resolve)
|
||||
.catch((err) => {
|
||||
toast.error(get(err, 'error.message') || 'Something went wrong!');
|
||||
|
||||
@@ -43,7 +43,7 @@ const Timeline = ({ request, response }) => {
|
||||
|
||||
<div className="mt-4">
|
||||
<pre className="line response font-bold">
|
||||
<span className="arrow">{'<'}</span> {response.status} {response.statusText}
|
||||
<span className="arrow">{'<'}</span> {response.status} - {response.statusText}
|
||||
</pre>
|
||||
|
||||
{responseHeaders.map((h) => {
|
||||
|
||||
@@ -59,7 +59,7 @@ export default function RunnerResults({ collection }) {
|
||||
pathname: info.pathname,
|
||||
relativePath: getRelativePath(collection.pathname, info.pathname)
|
||||
};
|
||||
if (newItem.status !== 'error' && newItem.status !== 'skipped') {
|
||||
if (newItem.status !== 'error' && newItem.status !== 'skipped' && newItem.status !== 'terminated') {
|
||||
if (newItem.testResults) {
|
||||
const failed = newItem.testResults.filter((result) => result.status === 'fail');
|
||||
newItem.testStatus = failed.length ? 'fail' : 'pass';
|
||||
@@ -142,6 +142,8 @@ export default function RunnerResults({ collection }) {
|
||||
);
|
||||
}
|
||||
|
||||
console.log("results", items);
|
||||
|
||||
return (
|
||||
<StyledWrapper className="px-4 pb-4 flex flex-grow flex-col relative">
|
||||
<div className="flex flex-row">
|
||||
@@ -163,29 +165,35 @@ export default function RunnerResults({ collection }) {
|
||||
<div className="pb-2 font-medium test-summary">
|
||||
Total Requests: {items.length}, Passed: {passedRequests.length}, Failed: {failedRequests.length}
|
||||
</div>
|
||||
{runnerInfo?.statusText ?
|
||||
<div className="pb-2 font-medium danger">
|
||||
{runnerInfo?.statusText}
|
||||
</div>
|
||||
: null}
|
||||
{items.map((item) => {
|
||||
return (
|
||||
<div key={item.uid}>
|
||||
<div className="item-path mt-2">
|
||||
<div className="flex items-center">
|
||||
<span>
|
||||
{item.status !== 'error' && item.testStatus === 'pass' && item.status !== 'skipped' ? (
|
||||
{item.status !== 'error' && item.testStatus === 'pass' && item.status !== 'skipped' && item.status !== 'terminated' ? (
|
||||
<IconCircleCheck className="test-success" size={20} strokeWidth={1.5} />
|
||||
) : (
|
||||
<IconCircleX className="test-failure" size={20} strokeWidth={1.5} />
|
||||
)}
|
||||
</span>
|
||||
<span
|
||||
className={`mr-1 ml-2 ${item.status == 'error' || item.status == 'skipped' || item.testStatus == 'fail' ? 'danger' : ''}`}
|
||||
className={`mr-1 ml-2 ${item.status == 'error' || item.status == 'skipped' || item.status == 'terminated' || item.testStatus == 'fail' ? 'danger' : ''}`}
|
||||
>
|
||||
{item.relativePath}
|
||||
</span>
|
||||
{item.status !== 'error' && item.status !== 'skipped' && item.status !== 'completed' ? (
|
||||
{item.status !== 'error' && item.status !== 'skipped' && item.status !== 'terminated' && item.status !== 'completed' ? (
|
||||
<IconRefresh className="animate-spin ml-1" size={18} strokeWidth={1.5} />
|
||||
) : item.responseReceived?.status ? (
|
||||
<span className="text-xs link cursor-pointer" onClick={() => setSelectedItem(item)}>
|
||||
(<span className="mr-1">{item.responseReceived?.status}</span>
|
||||
<span>{item.responseReceived?.statusText}</span>)
|
||||
<span className="mr-1">{item.responseReceived?.status}</span>
|
||||
-
|
||||
<span>{item.responseReceived?.statusText}</span>
|
||||
</span>
|
||||
) : (
|
||||
<span className="danger text-xs cursor-pointer" onClick={() => setSelectedItem(item)}>
|
||||
|
||||
@@ -1675,6 +1675,9 @@ export const collectionsSlice = createSlice({
|
||||
if (type === 'testrun-ended') {
|
||||
const info = collection.runnerResult.info;
|
||||
info.status = 'ended';
|
||||
if (action.payload.statusText) {
|
||||
info.statusText = action.payload.statusText;
|
||||
}
|
||||
}
|
||||
|
||||
if (type === 'request-queued') {
|
||||
@@ -1713,7 +1716,7 @@ export const collectionsSlice = createSlice({
|
||||
item.status = 'error';
|
||||
}
|
||||
|
||||
if (type === 'request-skipped') {
|
||||
if (type === 'runner-request-skipped') {
|
||||
const item = collection.runnerResult.items.findLast((i) => i.uid === request.uid);
|
||||
item.status = 'skipped';
|
||||
item.responseReceived = action.payload.responseReceived;
|
||||
|
||||
@@ -933,6 +933,7 @@ const registerNetworkIpc = (mainWindow) => {
|
||||
const scriptingConfig = get(brunoConfig, 'scripts', {});
|
||||
scriptingConfig.runtime = getJsSandboxRuntime(collection);
|
||||
const collectionRoot = get(collection, 'root', {});
|
||||
let stopRunnerExecution = false;
|
||||
|
||||
const abortController = new AbortController();
|
||||
saveCancelToken(cancelTokenUid, abortController);
|
||||
@@ -979,6 +980,8 @@ const registerNetworkIpc = (mainWindow) => {
|
||||
throw error;
|
||||
}
|
||||
|
||||
stopRunnerExecution = false;
|
||||
|
||||
const item = folderRequests[currentRequestIndex];
|
||||
let nextRequestName;
|
||||
const itemUid = item.uid;
|
||||
@@ -1020,28 +1023,12 @@ const registerNetworkIpc = (mainWindow) => {
|
||||
}
|
||||
|
||||
if (preRequestScriptResult?.stopExecution) {
|
||||
deleteCancelToken(cancelTokenUid);
|
||||
mainWindow.webContents.send('main:run-folder-event', {
|
||||
type: 'response-received',
|
||||
error: 'Request has been stopped from pre-request script',
|
||||
responseReceived: {
|
||||
status: 'terminated',
|
||||
statusText: 'Request execution stopped!',
|
||||
data: null
|
||||
},
|
||||
...eventData
|
||||
});
|
||||
mainWindow.webContents.send('main:run-folder-event', {
|
||||
type: 'testrun-ended',
|
||||
collectionUid,
|
||||
folderUid
|
||||
});
|
||||
break;
|
||||
stopRunnerExecution = true;
|
||||
}
|
||||
|
||||
if (preRequestScriptResult?.skipRequest) {
|
||||
mainWindow.webContents.send('main:run-folder-event', {
|
||||
type: 'request-skipped',
|
||||
type: 'runner-request-skipped',
|
||||
error: 'Request has been skipped from pre-request script',
|
||||
responseReceived: {
|
||||
status: 'skipped',
|
||||
@@ -1173,38 +1160,21 @@ const registerNetworkIpc = (mainWindow) => {
|
||||
}
|
||||
|
||||
if (postRequestScriptResult?.stopExecution) {
|
||||
deleteCancelToken(cancelTokenUid);
|
||||
mainWindow.webContents.send('main:run-folder-event', {
|
||||
type: 'response-received',
|
||||
error: 'Request has been stopped from post-response script',
|
||||
responseReceived: {
|
||||
status: 'terminated',
|
||||
statusText: 'Request execution stopped!',
|
||||
data: null
|
||||
},
|
||||
...eventData
|
||||
});
|
||||
mainWindow.webContents.send('main:run-folder-event', {
|
||||
type: 'testrun-ended',
|
||||
collectionUid,
|
||||
folderUid
|
||||
});
|
||||
break;
|
||||
stopRunnerExecution = true;
|
||||
}
|
||||
|
||||
if (postRequestScriptResult?.skipRequest) {
|
||||
mainWindow.webContents.send('main:run-folder-event', {
|
||||
type: 'request-skipped',
|
||||
error: 'Request has been skipped from post-response script',
|
||||
responseReceived: {
|
||||
status: 'skipped',
|
||||
statusText: 'request skipped via post-response script',
|
||||
data: null
|
||||
},
|
||||
...eventData
|
||||
});
|
||||
currentRequestIndex++;
|
||||
continue;
|
||||
// mainWindow.webContents.send('main:run-folder-event', {
|
||||
// type: 'runner-request-skipped',
|
||||
// error: 'Request has been skipped from post-response script',
|
||||
// responseReceived: {
|
||||
// status: 'skipped',
|
||||
// statusText: 'request skipped via post-response script'
|
||||
// },
|
||||
// ...eventData
|
||||
// });
|
||||
// currentRequestIndex++;
|
||||
// continue;
|
||||
}
|
||||
|
||||
// run assertions
|
||||
@@ -1271,6 +1241,18 @@ const registerNetworkIpc = (mainWindow) => {
|
||||
...eventData
|
||||
});
|
||||
}
|
||||
|
||||
if (stopRunnerExecution) {
|
||||
deleteCancelToken(cancelTokenUid);
|
||||
mainWindow.webContents.send('main:run-folder-event', {
|
||||
type: 'testrun-ended',
|
||||
collectionUid,
|
||||
folderUid,
|
||||
statusText: 'collection run was terminated!'
|
||||
});
|
||||
break;
|
||||
}
|
||||
|
||||
if (nextRequestName !== undefined) {
|
||||
nJumps++;
|
||||
if (nJumps > 10000) {
|
||||
|
||||
Reference in New Issue
Block a user