feat: update skipRequest and stopExecution logic

This commit is contained in:
lohxt1
2025-01-01 15:01:26 +05:30
parent f72d643e02
commit 2a6f6704c3
5 changed files with 49 additions and 56 deletions

View File

@@ -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!');

View File

@@ -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) => {

View File

@@ -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>
-&nbsp;
<span>{item.responseReceived?.statusText}</span>
</span>
) : (
<span className="danger text-xs cursor-pointer" onClick={() => setSelectedItem(item)}>

View File

@@ -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;

View File

@@ -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) {