diff --git a/packages/bruno-app/src/components/RunnerResults/StyledWrapper.js b/packages/bruno-app/src/components/RunnerResults/StyledWrapper.js index d2aebd5a..f5020985 100644 --- a/packages/bruno-app/src/components/RunnerResults/StyledWrapper.js +++ b/packages/bruno-app/src/components/RunnerResults/StyledWrapper.js @@ -7,6 +7,10 @@ const Wrapper = styled.div` } } + .test-summary { + color: ${(props) => props.theme.tabs.active.border}; + } + /* test results */ .test-success { color: ${(props) => props.theme.colors.text.green}; diff --git a/packages/bruno-app/src/components/RunnerResults/index.js b/packages/bruno-app/src/components/RunnerResults/index.js index eafffec4..bef0cf84 100644 --- a/packages/bruno-app/src/components/RunnerResults/index.js +++ b/packages/bruno-app/src/components/RunnerResults/index.js @@ -41,12 +41,18 @@ export default function RunnerResults({collection}) { } }); + const passedRequests = items.filter((item) => item.testStatus === 'pass'); + const failedRequests = items.filter((item) => item.testStatus === 'fail'); + return (
Runner
+
+ Total Requests: {items.length}, Passed: {passedRequests.length}, Failed: {failedRequests.length} +
{items.map((item) => { diff --git a/packages/bruno-app/src/components/Sidebar/Collections/Collection/CollectionItem/RunCollectionItem/index.js b/packages/bruno-app/src/components/Sidebar/Collections/Collection/CollectionItem/RunCollectionItem/index.js index 194bb384..3c28a178 100644 --- a/packages/bruno-app/src/components/Sidebar/Collections/Collection/CollectionItem/RunCollectionItem/index.js +++ b/packages/bruno-app/src/components/Sidebar/Collections/Collection/CollectionItem/RunCollectionItem/index.js @@ -3,6 +3,7 @@ import get from 'lodash/get'; import Modal from 'components/Modal'; import { useDispatch } from 'react-redux'; import { runCollectionFolder } from 'providers/ReduxStore/slices/collections/actions'; +import { showRunnerView } from 'providers/ReduxStore/slices/collections'; import { flattenItems } from 'utils/collections'; import StyledWrapper from './StyledWrapper'; @@ -10,12 +11,15 @@ const RunCollectionItem = ({ collection, item, onClose }) => { const dispatch = useDispatch(); const onSubmit = (recursive) => { - dispatch(runCollectionFolder(collection.uid, item.uid, recursive)); + dispatch(showRunnerView({ + collectionUid: collection.uid, + })); + dispatch(runCollectionFolder(collection.uid, item ? item.uid : null, recursive)); onClose(); }; - const runLength = get(item, 'items.length', 0); - const items = flattenItems(item.items); + const runLength = item ? get(item, 'items.length', 0) : get(collection, 'items.length', 0); + const items = flattenItems(item ? item.items : collection.items); const requestItems = items.filter((item) => item.type !== 'folder'); const recursiveRunLength = requestItems.length; @@ -24,7 +28,7 @@ const RunCollectionItem = ({ collection, item, onClose }) => {
Run - ({runLength.length} requests) + ({runLength} requests)
This will only run the requests in this folder. @@ -32,7 +36,7 @@ const RunCollectionItem = ({ collection, item, onClose }) => {
Recursive Run - ({recursiveRunLength.length} requests) + ({recursiveRunLength} requests)
This will run all the requests in this folder and all its subfolders. diff --git a/packages/bruno-app/src/components/Sidebar/Collections/Collection/CollectionItem/index.js b/packages/bruno-app/src/components/Sidebar/Collections/Collection/CollectionItem/index.js index 818e620e..22b536df 100644 --- a/packages/bruno-app/src/components/Sidebar/Collections/Collection/CollectionItem/index.js +++ b/packages/bruno-app/src/components/Sidebar/Collections/Collection/CollectionItem/index.js @@ -6,7 +6,7 @@ import { useDrag, useDrop } from 'react-dnd'; import { IconChevronRight, IconDots } from '@tabler/icons'; import { useSelector, useDispatch } from 'react-redux'; import { addTab, focusTab } from 'providers/ReduxStore/slices/tabs'; -import { collectionFolderClicked } from 'providers/ReduxStore/slices/collections'; +import { collectionFolderClicked, hideRunnerView } from 'providers/ReduxStore/slices/collections'; import { moveItem } from 'providers/ReduxStore/slices/collections/actions'; import Dropdown from 'components/Dropdown'; import NewRequest from 'components/Sidebar/NewRequest'; @@ -86,6 +86,9 @@ const CollectionItem = ({ item, collection, searchText }) => { }); const handleClick = (event) => { + dispatch(hideRunnerView({ + collectionUid: collection.uid + })); if (isItemARequest(item)) { if (itemIsOpenedInTabs(item, tabs)) { dispatch( diff --git a/packages/bruno-app/src/components/Sidebar/Collections/Collection/index.js b/packages/bruno-app/src/components/Sidebar/Collections/Collection/index.js index 2e621cba..654f57f4 100644 --- a/packages/bruno-app/src/components/Sidebar/Collections/Collection/index.js +++ b/packages/bruno-app/src/components/Sidebar/Collections/Collection/index.js @@ -12,6 +12,7 @@ import NewRequest from 'components/Sidebar/NewRequest'; import NewFolder from 'components/Sidebar/NewFolder'; import CollectionItem from './CollectionItem'; import RemoveCollection from './RemoveCollection'; +import RunCollectionItem from './CollectionItem/RunCollectionItem'; import { doesCollectionHaveItemsMatchingSearchText } from 'utils/collections/search'; import { isItemAFolder, isItemARequest, transformCollectionToSaveToIdb } from 'utils/collections'; import exportCollection from 'utils/collections/export'; @@ -24,6 +25,7 @@ const Collection = ({ collection, searchText }) => { const [showNewRequestModal, setShowNewRequestModal] = useState(false); const [showRenameCollectionModal, setShowRenameCollectionModal] = useState(false); const [showRemoveCollectionModal, setShowRemoveCollectionModal] = useState(false); + const [showRunCollectionModal, setShowRunCollectionModal] = useState(false); const [collectionIsCollapsed, setCollectionIsCollapsed] = useState(collection.collapsed); const dispatch = useDispatch(); @@ -97,6 +99,7 @@ const Collection = ({ collection, searchText }) => { {showNewFolderModal && setShowNewFolderModal(false)} />} {showRenameCollectionModal && setShowRenameCollectionModal(false)} />} {showRemoveCollectionModal && setShowRemoveCollectionModal(false)} />} + {showRunCollectionModal && setShowRunCollectionModal(false)} />}
@@ -122,6 +125,15 @@ const Collection = ({ collection, searchText }) => { > New Folder
+
{ + menuDropdownTippyRef.current.hide(); + setShowRunCollectionModal(true); + }} + > + Run +
{ diff --git a/packages/bruno-app/src/providers/ReduxStore/slices/collections/actions.js b/packages/bruno-app/src/providers/ReduxStore/slices/collections/actions.js index 9b7c1612..126f15c7 100644 --- a/packages/bruno-app/src/providers/ReduxStore/slices/collections/actions.js +++ b/packages/bruno-app/src/providers/ReduxStore/slices/collections/actions.js @@ -151,7 +151,7 @@ export const runCollectionFolder = (collectionUid, folderUid, recursive) => (dis const collectionCopy = cloneDeep(collection); const folder = findItemInCollection(collectionCopy, folderUid); - if (!folder) { + if (folderUid && !folder) { return reject(new Error('Folder not found')); } @@ -164,7 +164,10 @@ export const runCollectionFolder = (collectionUid, folderUid, recursive) => (dis ipcRenderer .invoke('renderer:run-collection-folder', folder, collectionCopy, environment, recursive) .then(resolve) - .catch(reject); + .catch((err) => { + toast.error(get(err, 'error.message') || 'Something went wrong!'); + reject(err); + }); }); }; diff --git a/packages/bruno-app/src/providers/ReduxStore/slices/collections/index.js b/packages/bruno-app/src/providers/ReduxStore/slices/collections/index.js index dbd2b080..d5097c86 100644 --- a/packages/bruno-app/src/providers/ReduxStore/slices/collections/index.js +++ b/packages/bruno-app/src/providers/ReduxStore/slices/collections/index.js @@ -860,6 +860,22 @@ export const collectionsSlice = createSlice({ collection.showRunner = !collection.showRunner; } }, + showRunnerView: (state, action) => { + const { collectionUid } = action.payload; + const collection = findCollectionByUid(state.collections, collectionUid); + + if (collection) { + collection.showRunner = true; + } + }, + hideRunnerView: (state, action) => { + const { collectionUid } = action.payload; + const collection = findCollectionByUid(state.collections, collectionUid); + + if (collection) { + collection.showRunner = false; + } + }, resetRunResults: (state, action) => { const { collectionUid } = action.payload; const collection = findCollectionByUid(state.collections, collectionUid); @@ -956,6 +972,8 @@ export const { testResultsEvent, collectionRenamedEvent, toggleRunnerView, + showRunnerView, + hideRunnerView, resetRunResults, runFolderEvent } = collectionsSlice.actions; diff --git a/packages/bruno-electron/src/ipc/network/index.js b/packages/bruno-electron/src/ipc/network/index.js index 92f07554..09418c43 100644 --- a/packages/bruno-electron/src/ipc/network/index.js +++ b/packages/bruno-electron/src/ipc/network/index.js @@ -221,7 +221,11 @@ const registerNetworkIpc = (mainWindow, watcher, lastOpenedCollections) => { ipcMain.handle('renderer:run-collection-folder', async (event, folder, collection, environment, recursive) => { const collectionUid = collection.uid; const collectionPath = collection.pathname; - const folderUid = folder.uid; + const folderUid = folder ? folder.uid : null; + + if(!folder) { + folder = collection; + } try { const envVars = getEnvVars(environment); @@ -230,10 +234,6 @@ const registerNetworkIpc = (mainWindow, watcher, lastOpenedCollections) => { if(recursive) { let sortedFolder = sortFolder(folder); folderRequests = getAllRequestsInFolderRecursively(sortedFolder); - console.log('-----sortedFolder------'); - console.log(sortedFolder); - console.log('-----folderRequests------'); - console.log(folderRequests); } else { each(folder.items, (item) => { if(item.request) { @@ -331,7 +331,6 @@ const registerNetworkIpc = (mainWindow, watcher, lastOpenedCollections) => { } }); } catch (error) { - console.log(error); mainWindow.webContents.send('main:run-folder-event', { type: 'error', error, @@ -342,13 +341,8 @@ const registerNetworkIpc = (mainWindow, watcher, lastOpenedCollections) => { } catch (error) { mainWindow.webContents.send('main:run-folder-event', { type: 'error', - data: { - error : { - message: error.message - }, - collectionUid, - folderUid - } + error, + ...eventData }); } });