selectTab('body')}>
Body
@@ -85,6 +89,9 @@ const HttpRequestPane = ({ item, collection, leftPaneWidth }) => {
selectTab('script')}>
Script
+
selectTab('assert')}>
+ Assert
+
selectTab('tests')}>
Tests
diff --git a/packages/bruno-app/src/components/RequestPane/Vars/VarsTable/index.js b/packages/bruno-app/src/components/RequestPane/Vars/VarsTable/index.js
index dda1f705d..0ea94b408 100644
--- a/packages/bruno-app/src/components/RequestPane/Vars/VarsTable/index.js
+++ b/packages/bruno-app/src/components/RequestPane/Vars/VarsTable/index.js
@@ -6,6 +6,7 @@ import { useTheme } from 'providers/Theme';
import { addVar, updateVar, deleteVar } from 'providers/ReduxStore/slices/collections';
import { sendRequest, saveRequest } from 'providers/ReduxStore/slices/collections/actions';
import SingleLineEditor from 'components/SingleLineEditor';
+import Tooltip from 'components/Tooltip';
import StyledWrapper from './StyledWrapper';
const VarsTable = ({ item, collection, vars, varType }) => {
@@ -67,7 +68,21 @@ const VarsTable = ({ item, collection, vars, varType }) => {
| Name |
- Value |
+ { varType === 'request' ? (
+
+
+ Value
+
+
+ |
+ ) : (
+
+
+ Expr
+
+
+ |
+ )}
|
diff --git a/packages/bruno-app/src/components/SingleLineEditor/StyledWrapper.js b/packages/bruno-app/src/components/SingleLineEditor/StyledWrapper.js
index ecea2d333..d28aef636 100644
--- a/packages/bruno-app/src/components/SingleLineEditor/StyledWrapper.js
+++ b/packages/bruno-app/src/components/SingleLineEditor/StyledWrapper.js
@@ -45,6 +45,8 @@ const StyledWrapper = styled.div`
.CodeMirror-line {
color: ${(props) => props.theme.text};
+ padding-left: 0;
+ padding-right: 0;
}
}
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 c62a9b77a..01a5f0836 100644
--- a/packages/bruno-app/src/providers/ReduxStore/slices/collections/index.js
+++ b/packages/bruno-app/src/providers/ReduxStore/slices/collections/index.js
@@ -707,6 +707,59 @@ export const collectionsSlice = createSlice({
}
}
},
+ addAssertion: (state, action) => {
+ const collection = findCollectionByUid(state.collections, action.payload.collectionUid);
+
+ if (collection) {
+ const item = findItemInCollection(collection, action.payload.itemUid);
+
+ if (item && isItemARequest(item)) {
+ if (!item.draft) {
+ item.draft = cloneDeep(item);
+ }
+ item.draft.request.assertions = item.draft.request.assertions || [];
+ item.draft.request.assertions.push({
+ uid: uuid(),
+ name: '',
+ value: '',
+ enabled: true
+ });
+ }
+ }
+ },
+ updateAssertion: (state, action) => {
+ const collection = findCollectionByUid(state.collections, action.payload.collectionUid);
+
+ if (collection) {
+ const item = findItemInCollection(collection, action.payload.itemUid);
+
+ if (item && isItemARequest(item)) {
+ if (!item.draft) {
+ item.draft = cloneDeep(item);
+ }
+ const assertion = item.draft.request.assertions.find((a) => a.uid === action.payload.assertion.uid);
+ if (assertion) {
+ assertion.name = action.payload.assertion.name;
+ assertion.value = action.payload.assertion.value;
+ assertion.enabled = action.payload.assertion.enabled;
+ }
+ }
+ }
+ },
+ deleteAssertion: (state, action) => {
+ const collection = findCollectionByUid(state.collections, action.payload.collectionUid);
+
+ if (collection) {
+ const item = findItemInCollection(collection, action.payload.itemUid);
+
+ if (item && isItemARequest(item)) {
+ if (!item.draft) {
+ item.draft = cloneDeep(item);
+ }
+ item.draft.request.assertions = item.draft.request.assertions.filter((a) => a.uid !== action.payload.assertUid);
+ }
+ }
+ },
addVar: (state, action) => {
const collection = findCollectionByUid(state.collections, action.payload.collectionUid);
const type = action.payload.type;
@@ -1122,6 +1175,9 @@ export const {
updateResponseScript,
updateRequestTests,
updateRequestMethod,
+ addAssertion,
+ updateAssertion,
+ deleteAssertion,
addVar,
updateVar,
deleteVar,
diff --git a/packages/bruno-app/src/utils/collections/export.js b/packages/bruno-app/src/utils/collections/export.js
index 87b02fb25..5551bddcc 100644
--- a/packages/bruno-app/src/utils/collections/export.js
+++ b/packages/bruno-app/src/utils/collections/export.js
@@ -9,6 +9,9 @@ const deleteUidsInItems = (items) => {
if (['http-request', 'graphql-request'].includes(item.type)) {
each(get(item, 'request.headers'), (header) => delete header.uid);
each(get(item, 'request.params'), (param) => delete param.uid);
+ each(get(item, 'request.vars.req'), (v) => delete v.uid);
+ each(get(item, 'request.vars.res'), (v) => delete v.uid);
+ each(get(item, 'request.vars.assertions'), (a) => delete a.uid);
each(get(item, 'request.body.multipartForm'), (param) => delete param.uid);
each(get(item, 'request.body.formUrlEncoded'), (param) => delete param.uid);
}
diff --git a/packages/bruno-app/src/utils/collections/index.js b/packages/bruno-app/src/utils/collections/index.js
index 0983713a7..bdb7d8cc6 100644
--- a/packages/bruno-app/src/utils/collections/index.js
+++ b/packages/bruno-app/src/utils/collections/index.js
@@ -282,6 +282,8 @@ export const transformCollectionToSaveToIdb = (collection, options = {}) => {
multipartForm: copyMultipartFormParams(si.draft.request.body.multipartForm)
},
script: si.draft.request.script,
+ vars: si.draft.request.vars,
+ assertions: si.draft.request.assertions,
tests: si.draft.request.tests
};
}
@@ -302,6 +304,8 @@ export const transformCollectionToSaveToIdb = (collection, options = {}) => {
multipartForm: copyMultipartFormParams(si.request.body.multipartForm)
},
script: si.request.script,
+ vars: si.request.vars,
+ assertions: si.request.assertions,
tests: si.request.tests
};
}
@@ -350,6 +354,7 @@ export const transformRequestToSaveToFilesystem = (item) => {
body: _item.request.body,
script: _item.request.script,
vars: _item.request.vars,
+ assertions: _item.request.assertions,
tests: _item.request.tests
}
};
diff --git a/packages/bruno-app/src/utils/importers/common.js b/packages/bruno-app/src/utils/importers/common.js
index 3388c531f..558d450ac 100644
--- a/packages/bruno-app/src/utils/importers/common.js
+++ b/packages/bruno-app/src/utils/importers/common.js
@@ -32,6 +32,9 @@ export const updateUidsInCollection = (_collection) => {
each(get(item, 'request.headers'), (header) => (header.uid = uuid()));
each(get(item, 'request.query'), (param) => (param.uid = uuid()));
each(get(item, 'request.params'), (param) => (param.uid = uuid()));
+ each(get(item, 'request.vars.req'), (v) => (v.uid = uuid()));
+ each(get(item, 'request.vars.res'), (v) => (v.uid = uuid()));
+ each(get(item, 'request.assertions'), (a) => (a.uid = uuid()));
each(get(item, 'request.body.multipartForm'), (param) => (param.uid = uuid()));
each(get(item, 'request.body.formUrlEncoded'), (param) => (param.uid = uuid()));
diff --git a/packages/bruno-electron/src/bru/index.js b/packages/bruno-electron/src/bru/index.js
index 0c2a9e2a0..402ac0439 100644
--- a/packages/bruno-electron/src/bru/index.js
+++ b/packages/bruno-electron/src/bru/index.js
@@ -69,6 +69,7 @@ const bruToJson = (bru) => {
"body": _.get(json, "body", {}),
"script": _.get(json, "script", {}),
"vars": _.get(json, "vars", {}),
+ "assertions": _.get(json, "assertions", []),
"tests": _.get(json, "tests", "")
}
};
@@ -118,6 +119,7 @@ const jsonToBru = (json) => {
req: _.get(json, 'request.vars.req', []),
res: _.get(json, 'request.vars.res', [])
},
+ assertions: _.get(json, 'request.assertions', []),
tests: _.get(json, 'request.tests', ''),
};
diff --git a/packages/bruno-lang/v2/src/bruToJson.js b/packages/bruno-lang/v2/src/bruToJson.js
index d7835fcf4..afbbbfb79 100644
--- a/packages/bruno-lang/v2/src/bruToJson.js
+++ b/packages/bruno-lang/v2/src/bruToJson.js
@@ -381,7 +381,7 @@ const sem = grammar.createSemantics().addAttribute('ast', {
},
assert(_1, dictionary) {
return {
- assert: mapPairListToKeyValPairs(dictionary.ast)
+ assertions: mapPairListToKeyValPairs(dictionary.ast)
};
},
scriptreq(_1, _2, _3, _4, textblock, _5) {
diff --git a/packages/bruno-lang/v2/src/jsonToBru.js b/packages/bruno-lang/v2/src/jsonToBru.js
index 5ec994ee8..d42961570 100644
--- a/packages/bruno-lang/v2/src/jsonToBru.js
+++ b/packages/bruno-lang/v2/src/jsonToBru.js
@@ -24,7 +24,7 @@ const jsonToBru = (json) => {
script,
tests,
vars,
- assert,
+ assertions,
docs
} = json;
@@ -196,15 +196,15 @@ ${indentString(body.xml)}
bru += '\n}\n\n';
}
- if(assert && assert.length) {
+ if(assertions && assertions.length) {
bru += `assert {`;
- if(enabled(assert).length) {
- bru += `\n${indentString(enabled(assert).map(item => `${item.name}: ${item.value}`).join('\n'))}`;
+ if(enabled(assertions).length) {
+ bru += `\n${indentString(enabled(assertions).map(item => `${item.name}: ${item.value}`).join('\n'))}`;
}
- if(disabled(assert).length) {
- bru += `\n${indentString(disabled(assert).map(item => `~${item.name}: ${item.value}`).join('\n'))}`;
+ if(disabled(assertions).length) {
+ bru += `\n${indentString(disabled(assertions).map(item => `~${item.name}: ${item.value}`).join('\n'))}`;
}
bru += '\n}\n\n';
diff --git a/packages/bruno-lang/v2/tests/assert.spec.js b/packages/bruno-lang/v2/tests/assert.spec.js
index 2aa0ec5a0..373dad6ca 100644
--- a/packages/bruno-lang/v2/tests/assert.spec.js
+++ b/packages/bruno-lang/v2/tests/assert.spec.js
@@ -13,7 +13,7 @@ assert {
const output = parser(input);
const expected = {
- "assert": [{
+ "assertions": [{
name: "res(\"data.airports\").filter(a => a.code ===\"BLR\").name",
value: '"Bangalore International Airport"',
enabled: true
diff --git a/packages/bruno-lang/v2/tests/fixtures/request.json b/packages/bruno-lang/v2/tests/fixtures/request.json
index fc4b0d4ad..cc015557d 100644
--- a/packages/bruno-lang/v2/tests/fixtures/request.json
+++ b/packages/bruno-lang/v2/tests/fixtures/request.json
@@ -124,7 +124,7 @@
}
]
},
- "assert": [
+ "assertions": [
{
"name": "$res.status",
"value": "200",
diff --git a/packages/bruno-schema/src/collections/index.js b/packages/bruno-schema/src/collections/index.js
index 46766d34a..dab7a1587 100644
--- a/packages/bruno-schema/src/collections/index.js
+++ b/packages/bruno-schema/src/collections/index.js
@@ -70,6 +70,7 @@ const requestSchema = Yup.object({
req: Yup.array().of(varsSchema).nullable(),
res: Yup.array().of(varsSchema).nullable()
}).noUnknown(true).strict().nullable(),
+ assertions: Yup.array().of(keyValueSchema).nullable(),
tests: Yup.string().nullable()
}).noUnknown(true).strict();