test: Script updates for flaky fixes (#16143)
* Remove mongo coll dataset * JSEXe spec flaky trial fix * AbortActions to ts * js func exe fix * Abort spec fix * Appsmith down flaky fix * SelectWidget bug 12531 comment * JSfun exec spec flaky fix * Scrolling spec fix * mysql crud fix * mySql crud fix * CRUD generate page fix * jsonload flaky fix * Automcomplete spec update * jsOnload-1 spec flaky fix * http patch * patch install * patch path correction * cypress instal force * removed * yarn * adding dev * applypatch path corrected * patch fix * patch update * patches * patch file name update * Adding blureprint patch back * Cypress install removed * Removed .only * Autocomplete + Abort spec fix * CI run key press fix * https proxy update path fix * JS editor parsing delay handle * Autocmplete js fix * Abort Query added * Removed "dev": "cypress open" * js func exec spec fix * js editor type flaky fix * GetNClick revert * Saving JS editor aft removal * JS specs flaky fixes * JSfun flaky fix * Auto complete spec fi * jSonkoad1 spec fix * JSOnload spec * Auto complete JS spec fix * Removing waiting for toasts * jsfun fix * EditJSObj Preetify update * contains index or colection * SetQueryTimeout update * DS toasts handle * POstgresCRUD toast change * POstgres CRUD toasts fix * Bug 15372 spec toast fix + Api timeout update * Added DeleteDSDirectly() * Arango spec fix * JSEditor indent spec - 6 fix * JSeditor indent spec update 7, 1,2 * removed only * JSEDitor Indent spec fixes * removed only * MySQK CRUD fixes * BUg 14006 spec fix * Mongo spec toast fix * Mongo update * text wrapping spec flaky fix
53
app/client/cypress/apply-patches.js
Normal file
|
|
@ -0,0 +1,53 @@
|
|||
const { getVersionDir } = require("cypress/lib/tasks/state");
|
||||
const chalk = require("chalk");
|
||||
const Diff = require("diff");
|
||||
const fs = require("fs/promises");
|
||||
const path = require("path");
|
||||
|
||||
async function applyPatches() {
|
||||
const patchesDir = path.join("cypress", "patches");
|
||||
const patchesAbsDir = path.join(process.cwd(), patchesDir);
|
||||
const patches = await fs.readdir(patchesAbsDir);
|
||||
const installDir = getVersionDir();
|
||||
|
||||
console.log(`\n> Applying patches on to ${chalk.cyan(installDir)}\n`);
|
||||
|
||||
for (const filename of patches) {
|
||||
if (!filename.endsWith(".patch")) {
|
||||
continue;
|
||||
}
|
||||
const fullpath = path.join(patchesAbsDir, filename);
|
||||
const enc = "utf8";
|
||||
const patch = await fs.readFile(fullpath, enc);
|
||||
const relativeFilename = path.join(patchesDir, filename);
|
||||
console.log(`>> Applying patch ${chalk.cyan(relativeFilename)}`);
|
||||
await Diff.applyPatches(patch, {
|
||||
loadFile: (index, callback) => {
|
||||
console.debug(`>>> Loading old file: ${chalk.red(index.oldFileName)}`);
|
||||
fs.readFile(path.join(installDir, index.oldFileName), enc)
|
||||
.then((contents) => {
|
||||
callback(null, contents);
|
||||
})
|
||||
.catch(callback);
|
||||
},
|
||||
patched: (index, content, callback) => {
|
||||
console.debug(
|
||||
`>>> Patched new file: ${chalk.green(index.newFileName)}`,
|
||||
);
|
||||
fs.writeFile(path.join(installDir, index.newFileName), content, enc)
|
||||
.then(callback)
|
||||
.catch(callback);
|
||||
},
|
||||
complete: () => {
|
||||
console.log(
|
||||
`>> Successfully applied patch ${chalk.cyan(relativeFilename)}`,
|
||||
);
|
||||
},
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
applyPatches().catch((e) => {
|
||||
console.error(e);
|
||||
process.exit(42);
|
||||
});
|
||||
|
|
@ -1,240 +1,272 @@
|
|||
{
|
||||
"dsl": {
|
||||
"widgetName": "MainContainer",
|
||||
"backgroundColor": "none",
|
||||
"rightColumn": 453,
|
||||
"snapColumns": 64,
|
||||
"detachFromLayout": true,
|
||||
"widgetId": "0",
|
||||
"topRow": 0,
|
||||
"bottomRow": 1320,
|
||||
"containerStyle": "none",
|
||||
"snapRows": 125,
|
||||
"parentRowSpace": 1,
|
||||
"type": "CANVAS_WIDGET",
|
||||
"canExtend": true,
|
||||
"version": 54,
|
||||
"minHeight": 1292,
|
||||
"parentColumnSpace": 1,
|
||||
"dynamicBindingPathList": [
|
||||
|
||||
],
|
||||
"leftColumn": 0,
|
||||
"children": [
|
||||
{
|
||||
"widgetName": "Select1",
|
||||
"isFilterable": true,
|
||||
"displayName": "Select",
|
||||
"iconSVG": "/static/media/icon.bd99caba.svg",
|
||||
"labelText": "",
|
||||
"topRow": 16,
|
||||
"bottomRow": 20,
|
||||
"parentRowSpace": 10,
|
||||
"type": "SELECT_WIDGET",
|
||||
"serverSideFiltering": false,
|
||||
"hideCard": false,
|
||||
"defaultOptionValue": "{\n \"label\": \"{{Table1.selectedRow.step}}\",\n \"value\": \"{{Table1.selectedRow.step}}\"\n }",
|
||||
"animateLoading": true,
|
||||
"parentColumnSpace": 21.203125,
|
||||
"dynamicTriggerPathList": [
|
||||
|
||||
],
|
||||
"leftColumn": 39,
|
||||
"dynamicBindingPathList": [
|
||||
{
|
||||
"key": "defaultOptionValue"
|
||||
}
|
||||
],
|
||||
"options": "[\n {\n \"label\": \"#1\",\n \"value\": \"#1\"\n },\n {\n \"label\": \"#2\",\n \"value\": \"#2\"\n }\n]",
|
||||
"placeholderText": "Select option",
|
||||
"isDisabled": false,
|
||||
"key": "2zzcijdy0f",
|
||||
"isRequired": false,
|
||||
"rightColumn": 59,
|
||||
"widgetId": "uiu9bz9s1b",
|
||||
"isVisible": true,
|
||||
"version": 1,
|
||||
"parentId": "0",
|
||||
"renderMode": "CANVAS",
|
||||
"isLoading": false
|
||||
},
|
||||
{
|
||||
"isVisible": true,
|
||||
"animateLoading": true,
|
||||
"defaultSelectedRow": "0",
|
||||
"label": "Data",
|
||||
"widgetName": "Table1",
|
||||
"searchKey": "",
|
||||
"textSize": "PARAGRAPH",
|
||||
"horizontalAlignment": "LEFT",
|
||||
"verticalAlignment": "CENTER",
|
||||
"totalRecordsCount": 0,
|
||||
"defaultPageSize": 0,
|
||||
"dynamicBindingPathList": [
|
||||
{
|
||||
"key": "primaryColumns.step.computedValue"
|
||||
},
|
||||
{
|
||||
"key": "primaryColumns.task.computedValue"
|
||||
},
|
||||
{
|
||||
"key": "primaryColumns.status.computedValue"
|
||||
},
|
||||
{
|
||||
"key": "primaryColumns.action.computedValue"
|
||||
}
|
||||
],
|
||||
"primaryColumns": {
|
||||
"step": {
|
||||
"index": 0,
|
||||
"width": 150,
|
||||
"id": "step",
|
||||
"horizontalAlignment": "LEFT",
|
||||
"verticalAlignment": "CENTER",
|
||||
"columnType": "text",
|
||||
"textSize": "PARAGRAPH",
|
||||
"enableFilter": true,
|
||||
"enableSort": true,
|
||||
"isVisible": true,
|
||||
"isDisabled": false,
|
||||
"isCellVisible": true,
|
||||
"isDerived": false,
|
||||
"label": "step",
|
||||
"computedValue": "{{Table1.sanitizedTableData.map((currentRow) => ( currentRow.step))}}"
|
||||
},
|
||||
"task": {
|
||||
"index": 1,
|
||||
"width": 150,
|
||||
"id": "task",
|
||||
"horizontalAlignment": "LEFT",
|
||||
"verticalAlignment": "CENTER",
|
||||
"columnType": "text",
|
||||
"textSize": "PARAGRAPH",
|
||||
"enableFilter": true,
|
||||
"enableSort": true,
|
||||
"isVisible": true,
|
||||
"isDisabled": false,
|
||||
"isCellVisible": true,
|
||||
"isDerived": false,
|
||||
"label": "task",
|
||||
"computedValue": "{{Table1.sanitizedTableData.map((currentRow) => ( currentRow.task))}}"
|
||||
},
|
||||
"status": {
|
||||
"index": 2,
|
||||
"width": 150,
|
||||
"id": "status",
|
||||
"horizontalAlignment": "LEFT",
|
||||
"verticalAlignment": "CENTER",
|
||||
"columnType": "text",
|
||||
"textSize": "PARAGRAPH",
|
||||
"enableFilter": true,
|
||||
"enableSort": true,
|
||||
"isVisible": true,
|
||||
"isDisabled": false,
|
||||
"isCellVisible": true,
|
||||
"isDerived": false,
|
||||
"label": "status",
|
||||
"computedValue": "{{Table1.sanitizedTableData.map((currentRow) => ( currentRow.status))}}"
|
||||
},
|
||||
"action": {
|
||||
"index": 3,
|
||||
"width": 150,
|
||||
"id": "action",
|
||||
"horizontalAlignment": "LEFT",
|
||||
"verticalAlignment": "CENTER",
|
||||
"columnType": "text",
|
||||
"textSize": "PARAGRAPH",
|
||||
"enableFilter": true,
|
||||
"enableSort": true,
|
||||
"isVisible": true,
|
||||
"isDisabled": false,
|
||||
"isCellVisible": true,
|
||||
"isDerived": false,
|
||||
"label": "action",
|
||||
"computedValue": "{{Table1.sanitizedTableData.map((currentRow) => ( currentRow.action))}}"
|
||||
}
|
||||
},
|
||||
"derivedColumns": {
|
||||
},
|
||||
"tableData": "[\n {\n \"step\": \"#1\",\n \"task\": \"Drop a table\",\n \"status\": \"✅\",\n \"action\": \"\"\n },\n {\n \"step\": \"#2\",\n \"task\": \"Create a query fetch_users with the Mock DB\",\n \"status\": \"--\",\n \"action\": \"\"\n },\n {\n \"step\": \"#3\",\n \"task\": \"Bind the query using => fetch_users.data\",\n \"status\": \"--\",\n \"action\": \"\"\n }\n]",
|
||||
"columnSizeMap": {
|
||||
"task": 245,
|
||||
"step": 62,
|
||||
"status": 75
|
||||
},
|
||||
"columnOrder": [
|
||||
"step",
|
||||
"task",
|
||||
"status",
|
||||
"action"
|
||||
],
|
||||
"enableClientSideSearch": true,
|
||||
"isVisibleSearch": true,
|
||||
"isVisibleFilters": true,
|
||||
"isVisibleDownload": true,
|
||||
"isVisiblePagination": true,
|
||||
"isSortable": true,
|
||||
"delimiter": ",",
|
||||
"version": 3,
|
||||
"type": "TABLE_WIDGET",
|
||||
"hideCard": false,
|
||||
"displayName": "Table",
|
||||
"key": "t22odw8rfj",
|
||||
"iconSVG": "/static/media/icon.db8a9cbd.svg",
|
||||
"widgetId": "f427h0lu92",
|
||||
"renderMode": "CANVAS",
|
||||
"isLoading": false,
|
||||
"parentColumnSpace": 16.703125,
|
||||
"parentRowSpace": 10,
|
||||
"leftColumn": 6,
|
||||
"rightColumn": 34,
|
||||
"topRow": 9,
|
||||
"bottomRow": 37,
|
||||
"parentId": "0",
|
||||
"dynamicTriggerPathList": [
|
||||
|
||||
],
|
||||
"dynamicPropertyPathList": [
|
||||
|
||||
]
|
||||
},
|
||||
{
|
||||
"isVisible": true,
|
||||
"text": "{{Select1.selectedOptionValue}}",
|
||||
"fontSize": "PARAGRAPH",
|
||||
"fontStyle": "BOLD",
|
||||
"textAlign": "LEFT",
|
||||
"textColor": "#231F20",
|
||||
"truncateButtonColor": "#FFC13D",
|
||||
"widgetName": "Text1",
|
||||
"shouldTruncate": false,
|
||||
"overflow": "NONE",
|
||||
"version": 1,
|
||||
"animateLoading": true,
|
||||
"type": "TEXT_WIDGET",
|
||||
"hideCard": false,
|
||||
"displayName": "Text",
|
||||
"key": "cdb5qeydze",
|
||||
"iconSVG": "/static/media/icon.97c59b52.svg",
|
||||
"widgetId": "5qb4nik2gy",
|
||||
"renderMode": "CANVAS",
|
||||
"isLoading": false,
|
||||
"parentColumnSpace": 16.703125,
|
||||
"parentRowSpace": 10,
|
||||
"leftColumn": 39,
|
||||
"rightColumn": 59,
|
||||
"topRow": 33,
|
||||
"bottomRow": 37,
|
||||
"parentId": "0",
|
||||
"dynamicBindingPathList": [
|
||||
{
|
||||
"key": "text"
|
||||
}
|
||||
],
|
||||
"dynamicTriggerPathList": [
|
||||
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
"dsl": {
|
||||
"widgetName": "MainContainer",
|
||||
"backgroundColor": "none",
|
||||
"rightColumn": 453,
|
||||
"snapColumns": 64,
|
||||
"detachFromLayout": true,
|
||||
"widgetId": "0",
|
||||
"topRow": 0,
|
||||
"bottomRow": 920,
|
||||
"containerStyle": "none",
|
||||
"snapRows": 125,
|
||||
"parentRowSpace": 1,
|
||||
"type": "CANVAS_WIDGET",
|
||||
"canExtend": true,
|
||||
"version": 60,
|
||||
"minHeight": 1292,
|
||||
"parentColumnSpace": 1,
|
||||
"dynamicBindingPathList": [],
|
||||
"leftColumn": 0,
|
||||
"children": [
|
||||
{
|
||||
"boxShadow": "none",
|
||||
"widgetName": "Select1",
|
||||
"isFilterable": true,
|
||||
"displayName": "Select",
|
||||
"iconSVG": "/static/media/icon.bd99caba.svg",
|
||||
"labelText": "",
|
||||
"topRow": 16,
|
||||
"bottomRow": 20,
|
||||
"parentRowSpace": 10,
|
||||
"type": "SELECT_WIDGET",
|
||||
"serverSideFiltering": false,
|
||||
"hideCard": false,
|
||||
"defaultOptionValue": "{{ ((options, serverSideFiltering) => ( Table1.selectedRow.step))(Select1.options, Select1.serverSideFiltering) }}",
|
||||
"animateLoading": true,
|
||||
"parentColumnSpace": 21.203125,
|
||||
"dynamicTriggerPathList": [],
|
||||
"leftColumn": 39,
|
||||
"dynamicBindingPathList": [
|
||||
{
|
||||
"key": "defaultOptionValue"
|
||||
},
|
||||
{
|
||||
"key": "accentColor"
|
||||
}
|
||||
],
|
||||
"options": "[\n {\n \"label\": \"#1\",\n \"value\": \"#1\"\n },\n {\n \"label\": \"#2\",\n \"value\": \"#2\"\n }\n]",
|
||||
"placeholderText": "Select option",
|
||||
"isDisabled": false,
|
||||
"key": "2zzcijdy0f",
|
||||
"labelTextSize": "0.875rem",
|
||||
"isRequired": false,
|
||||
"rightColumn": 59,
|
||||
"widgetId": "uiu9bz9s1b",
|
||||
"accentColor": "{{appsmith.theme.colors.primaryColor}}",
|
||||
"isVisible": true,
|
||||
"version": 1,
|
||||
"parentId": "0",
|
||||
"renderMode": "CANVAS",
|
||||
"isLoading": false,
|
||||
"borderRadius": "0px"
|
||||
},
|
||||
{
|
||||
"boxShadow": "none",
|
||||
"widgetName": "Table1",
|
||||
"defaultPageSize": 0,
|
||||
"columnOrder": [
|
||||
"step",
|
||||
"task",
|
||||
"status",
|
||||
"action"
|
||||
],
|
||||
"isVisibleDownload": true,
|
||||
"dynamicPropertyPathList": [],
|
||||
"displayName": "Table",
|
||||
"iconSVG": "/static/media/icon.db8a9cbd.svg",
|
||||
"topRow": 9,
|
||||
"bottomRow": 37,
|
||||
"isSortable": true,
|
||||
"parentRowSpace": 10,
|
||||
"type": "TABLE_WIDGET",
|
||||
"defaultSelectedRow": "0",
|
||||
"hideCard": false,
|
||||
"animateLoading": true,
|
||||
"parentColumnSpace": 16.703125,
|
||||
"dynamicTriggerPathList": [],
|
||||
"dynamicBindingPathList": [
|
||||
{
|
||||
"key": "primaryColumns.step.computedValue"
|
||||
},
|
||||
{
|
||||
"key": "primaryColumns.task.computedValue"
|
||||
},
|
||||
{
|
||||
"key": "primaryColumns.status.computedValue"
|
||||
},
|
||||
{
|
||||
"key": "primaryColumns.action.computedValue"
|
||||
},
|
||||
{
|
||||
"key": "accentColor"
|
||||
}
|
||||
],
|
||||
"leftColumn": 6,
|
||||
"primaryColumns": {
|
||||
"step": {
|
||||
"index": 0,
|
||||
"width": 150,
|
||||
"id": "step",
|
||||
"horizontalAlignment": "LEFT",
|
||||
"verticalAlignment": "CENTER",
|
||||
"columnType": "text",
|
||||
"textSize": "0.875rem",
|
||||
"enableFilter": true,
|
||||
"enableSort": true,
|
||||
"isVisible": true,
|
||||
"isDisabled": false,
|
||||
"isCellVisible": true,
|
||||
"isDerived": false,
|
||||
"label": "step",
|
||||
"computedValue": "{{Table1.sanitizedTableData.map((currentRow) => ( currentRow.step))}}",
|
||||
"borderRadius": "0px",
|
||||
"boxShadow": "none"
|
||||
},
|
||||
"task": {
|
||||
"index": 1,
|
||||
"width": 150,
|
||||
"id": "task",
|
||||
"horizontalAlignment": "LEFT",
|
||||
"verticalAlignment": "CENTER",
|
||||
"columnType": "text",
|
||||
"textSize": "0.875rem",
|
||||
"enableFilter": true,
|
||||
"enableSort": true,
|
||||
"isVisible": true,
|
||||
"isDisabled": false,
|
||||
"isCellVisible": true,
|
||||
"isDerived": false,
|
||||
"label": "task",
|
||||
"computedValue": "{{Table1.sanitizedTableData.map((currentRow) => ( currentRow.task))}}",
|
||||
"borderRadius": "0px",
|
||||
"boxShadow": "none"
|
||||
},
|
||||
"status": {
|
||||
"index": 2,
|
||||
"width": 150,
|
||||
"id": "status",
|
||||
"horizontalAlignment": "LEFT",
|
||||
"verticalAlignment": "CENTER",
|
||||
"columnType": "text",
|
||||
"textSize": "0.875rem",
|
||||
"enableFilter": true,
|
||||
"enableSort": true,
|
||||
"isVisible": true,
|
||||
"isDisabled": false,
|
||||
"isCellVisible": true,
|
||||
"isDerived": false,
|
||||
"label": "status",
|
||||
"computedValue": "{{Table1.sanitizedTableData.map((currentRow) => ( currentRow.status))}}",
|
||||
"borderRadius": "0px",
|
||||
"boxShadow": "none"
|
||||
},
|
||||
"action": {
|
||||
"index": 3,
|
||||
"width": 150,
|
||||
"id": "action",
|
||||
"horizontalAlignment": "LEFT",
|
||||
"verticalAlignment": "CENTER",
|
||||
"columnType": "text",
|
||||
"textSize": "0.875rem",
|
||||
"enableFilter": true,
|
||||
"enableSort": true,
|
||||
"isVisible": true,
|
||||
"isDisabled": false,
|
||||
"isCellVisible": true,
|
||||
"isDerived": false,
|
||||
"label": "action",
|
||||
"computedValue": "{{Table1.sanitizedTableData.map((currentRow) => ( currentRow.action))}}",
|
||||
"borderRadius": "0px",
|
||||
"boxShadow": "none"
|
||||
}
|
||||
},
|
||||
"delimiter": ",",
|
||||
"key": "t22odw8rfj",
|
||||
"derivedColumns": {},
|
||||
"labelTextSize": "0.875rem",
|
||||
"rightColumn": 34,
|
||||
"textSize": "0.875rem",
|
||||
"widgetId": "f427h0lu92",
|
||||
"accentColor": "{{appsmith.theme.colors.primaryColor}}",
|
||||
"isVisibleFilters": true,
|
||||
"tableData": "[\n {\n \"step\": \"#1\",\n \"task\": \"Drop a table\",\n \"status\": \"✅\",\n \"action\": \"\"\n },\n {\n \"step\": \"#2\",\n \"task\": \"Create a query fetch_users with the Mock DB\",\n \"status\": \"--\",\n \"action\": \"\"\n },\n {\n \"step\": \"#3\",\n \"task\": \"Bind the query using => fetch_users.data\",\n \"status\": \"--\",\n \"action\": \"\"\n }\n]",
|
||||
"isVisible": true,
|
||||
"label": "Data",
|
||||
"searchKey": "",
|
||||
"enableClientSideSearch": true,
|
||||
"version": 3,
|
||||
"totalRecordsCount": 0,
|
||||
"parentId": "0",
|
||||
"renderMode": "CANVAS",
|
||||
"isLoading": false,
|
||||
"horizontalAlignment": "LEFT",
|
||||
"isVisibleSearch": true,
|
||||
"childStylesheet": {
|
||||
"button": {
|
||||
"buttonColor": "{{appsmith.theme.colors.primaryColor}}",
|
||||
"borderRadius": "{{appsmith.theme.borderRadius.appBorderRadius}}",
|
||||
"boxShadow": "none"
|
||||
},
|
||||
"menuButton": {
|
||||
"menuColor": "{{appsmith.theme.colors.primaryColor}}",
|
||||
"borderRadius": "{{appsmith.theme.borderRadius.appBorderRadius}}",
|
||||
"boxShadow": "none"
|
||||
},
|
||||
"iconButton": {
|
||||
"menuColor": "{{appsmith.theme.colors.primaryColor}}",
|
||||
"borderRadius": "{{appsmith.theme.borderRadius.appBorderRadius}}",
|
||||
"boxShadow": "none"
|
||||
}
|
||||
},
|
||||
"borderRadius": "0px",
|
||||
"isVisiblePagination": true,
|
||||
"verticalAlignment": "CENTER",
|
||||
"columnSizeMap": {
|
||||
"task": 245,
|
||||
"step": 62,
|
||||
"status": 75
|
||||
}
|
||||
},
|
||||
{
|
||||
"boxShadow": "none",
|
||||
"widgetName": "Text1",
|
||||
"displayName": "Text",
|
||||
"iconSVG": "/static/media/icon.97c59b52.svg",
|
||||
"topRow": 33,
|
||||
"bottomRow": 37,
|
||||
"parentRowSpace": 10,
|
||||
"type": "TEXT_WIDGET",
|
||||
"hideCard": false,
|
||||
"animateLoading": true,
|
||||
"overflow": "NONE",
|
||||
"parentColumnSpace": 16.703125,
|
||||
"dynamicTriggerPathList": [],
|
||||
"fontFamily": "System Default",
|
||||
"leftColumn": 39,
|
||||
"dynamicBindingPathList": [
|
||||
{
|
||||
"key": "text"
|
||||
}
|
||||
],
|
||||
"shouldTruncate": false,
|
||||
"truncateButtonColor": "#FFC13D",
|
||||
"text": "{{Select1.selectedOptionValue}}",
|
||||
"key": "cdb5qeydze",
|
||||
"labelTextSize": "0.875rem",
|
||||
"rightColumn": 59,
|
||||
"textAlign": "LEFT",
|
||||
"widgetId": "5qb4nik2gy",
|
||||
"isVisible": true,
|
||||
"fontStyle": "BOLD",
|
||||
"textColor": "#231F20",
|
||||
"version": 1,
|
||||
"parentId": "0",
|
||||
"renderMode": "CANVAS",
|
||||
"isLoading": false,
|
||||
"borderRadius": "0px",
|
||||
"fontSize": "0.875rem"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,47 +0,0 @@
|
|||
const commonlocators = require("../../../../locators/commonlocators.json");
|
||||
const queryLocators = require("../../../../locators/QueryEditor.json");
|
||||
const datasource = require("../../../../locators/DatasourcesEditor.json");
|
||||
const formControls = require("../../../../locators/FormControl.json");
|
||||
|
||||
const testApiUrl = "https://jsonplaceholder.typicode.com/photos";
|
||||
|
||||
const ERROR_ACTION_EXECUTE_FAIL = (actionName) =>
|
||||
`${actionName} action returned an error response`;
|
||||
|
||||
describe("Abort Action Execution", function() {
|
||||
it("Cancel Request button should abort API action execution", function() {
|
||||
cy.createAndFillApi(testApiUrl, "");
|
||||
cy.RunAPIWithoutWaitingForResolution();
|
||||
cy.get(commonlocators.cancelActionExecution).click();
|
||||
cy.VerifyErrorMsgPresence(ERROR_ACTION_EXECUTE_FAIL("Api1"));
|
||||
});
|
||||
|
||||
// Queries were resolving quicker than we could cancel them
|
||||
// Commenting this out till we can find a query that resolves slow enough for us to cancel its execution.
|
||||
|
||||
// it("Cancel Request button should abort Query action execution", function() {
|
||||
// cy.NavigateToDatasourceEditor();
|
||||
// cy.get(datasource.MongoDB).click();
|
||||
// cy.fillMongoDatasourceForm();
|
||||
// cy.testSaveDatasource();
|
||||
// cy.get("@createDatasource").then(
|
||||
// (httpResponse) => httpResponse.response.body.data.name,
|
||||
// );
|
||||
// cy.NavigateToQueryEditor();
|
||||
// cy.NavigateToActiveTab();
|
||||
// cy.get(queryLocators.createQuery)
|
||||
// .last()
|
||||
// .click();
|
||||
// cy.get(queryLocators.queryNameField).type("AbortQuery");
|
||||
// cy.ValidateAndSelectDropdownOption(
|
||||
// formControls.commandDropdown,
|
||||
// "Find Document(s)",
|
||||
// );
|
||||
|
||||
// cy.typeValueNValidate("friends", formControls.mongoCollection);
|
||||
// cy.typeValueNValidate("300", formControls.mongoFindLimit);
|
||||
// cy.RunQueryWithoutWaitingForResolution();
|
||||
// cy.get(commonlocators.cancelActionExecution).click();
|
||||
// cy.VerifyErrorMsgPresence(ERROR_ACTION_EXECUTE_FAIL("AbortQuery"));
|
||||
// });
|
||||
});
|
||||
|
|
@ -1,236 +0,0 @@
|
|||
import { WIDGET } from "../../../../locators/WidgetLocators";
|
||||
import { ObjectsRegistry } from "../../../../support/Objects/Registry";
|
||||
const explorer = require("../../../../locators/explorerlocators.json");
|
||||
|
||||
const {
|
||||
AggregateHelper: agHelper,
|
||||
ApiPage,
|
||||
CommonLocators,
|
||||
EntityExplorer,
|
||||
JSEditor: jsEditor,
|
||||
} = ObjectsRegistry;
|
||||
|
||||
const jsObjectBody = `export default {
|
||||
myVar1: [],
|
||||
myVar2: {},
|
||||
myFun1(){
|
||||
|
||||
},
|
||||
myFun2: async () => {
|
||||
//use async-await or promises
|
||||
}
|
||||
}`;
|
||||
|
||||
describe("Autocomplete tests", () => {
|
||||
it("1. Verify widgets autocomplete: ButtonGroup & Document viewer widget", () => {
|
||||
cy.get(explorer.addWidget).click();
|
||||
EntityExplorer.DragDropWidgetNVerify(WIDGET.BUTTON_GROUP, 200, 200);
|
||||
EntityExplorer.DragDropWidgetNVerify(WIDGET.DOCUMENT_VIEWER, 200, 500);
|
||||
|
||||
// create js object
|
||||
jsEditor.CreateJSObject(jsObjectBody, {
|
||||
paste: true,
|
||||
completeReplace: true,
|
||||
toRun: false,
|
||||
shouldCreateNewJSObj: true,
|
||||
});
|
||||
|
||||
// focus on 5th line
|
||||
cy.get(`:nth-child(5) > .CodeMirror-line`).click();
|
||||
|
||||
// 1. Button group widget autocomplete verification
|
||||
cy.get(CommonLocators._codeMirrorTextArea)
|
||||
.focus()
|
||||
.type(`ButtonGroup1.`);
|
||||
|
||||
agHelper.AssertElementText(CommonLocators._hints, "groupButtons");
|
||||
|
||||
cy.get(CommonLocators._codeMirrorTextArea)
|
||||
.focus()
|
||||
.type(`groupButtons.`);
|
||||
|
||||
agHelper.AssertElementText(CommonLocators._hints, "groupButton1");
|
||||
|
||||
// 2. Document view widget autocomplete verification
|
||||
cy.get(CommonLocators._codeMirrorTextArea)
|
||||
.focus()
|
||||
.type("{backspace}".repeat("ButtonGroup1.groupButtons.".length)) // remove "ButtonGroup1.groupButtons."
|
||||
.wait(20)
|
||||
.type(`DocumentViewer1.`);
|
||||
|
||||
agHelper.AssertElementText(CommonLocators._hints, "docUrl");
|
||||
});
|
||||
|
||||
it("2. Verify browser JavaScript APIs in autocomplete ", () => {
|
||||
// create js object
|
||||
jsEditor.CreateJSObject(jsObjectBody, {
|
||||
paste: true,
|
||||
completeReplace: true,
|
||||
toRun: false,
|
||||
shouldCreateNewJSObj: true,
|
||||
prettify: false,
|
||||
});
|
||||
|
||||
// focus on 5th line
|
||||
cy.get(`:nth-child(5) > .CodeMirror-line`).click();
|
||||
|
||||
const JSAPIsToTest = [
|
||||
// console API verification
|
||||
{
|
||||
type: "console",
|
||||
expected: "console",
|
||||
shouldBePresent: true,
|
||||
},
|
||||
// crypto API verification
|
||||
{
|
||||
type: "crypto",
|
||||
expected: "crypto",
|
||||
shouldBePresent: true,
|
||||
},
|
||||
// eval function verification
|
||||
{
|
||||
type: "eval",
|
||||
expected: "eval()",
|
||||
shouldBePresent: false,
|
||||
},
|
||||
{
|
||||
type: "Blob",
|
||||
expected: "Blob()",
|
||||
shouldBePresent: true,
|
||||
},
|
||||
{
|
||||
type: "FormData",
|
||||
expected: "FormData()",
|
||||
shouldBePresent: true,
|
||||
},
|
||||
{
|
||||
type: "FileReader",
|
||||
expected: "FileReader()",
|
||||
shouldBePresent: true,
|
||||
},
|
||||
];
|
||||
|
||||
JSAPIsToTest.forEach((test, index) => {
|
||||
const deleteCharCount = (JSAPIsToTest[index - 1]?.type || " ").length;
|
||||
cy.get(CommonLocators._codeMirrorTextArea)
|
||||
.focus()
|
||||
// remove previously typed code
|
||||
.type(deleteCharCount ? "{backspace}".repeat(deleteCharCount) : " ")
|
||||
.wait(20)
|
||||
.type(test.type);
|
||||
|
||||
cy.get(CommonLocators._hints)
|
||||
.eq(0)
|
||||
.should(
|
||||
test.shouldBePresent ? "have.text" : "not.have.text",
|
||||
test.expected,
|
||||
);
|
||||
});
|
||||
});
|
||||
|
||||
it("3. JSObject this. autocomplete", () => {
|
||||
// create js object
|
||||
jsEditor.CreateJSObject(jsObjectBody, {
|
||||
paste: true,
|
||||
completeReplace: true,
|
||||
toRun: false,
|
||||
shouldCreateNewJSObj: true,
|
||||
});
|
||||
// focus on 5th line
|
||||
cy.get(`:nth-child(5) > .CodeMirror-line`).click();
|
||||
|
||||
cy.get(CommonLocators._codeMirrorTextArea)
|
||||
.focus()
|
||||
.type("this.");
|
||||
|
||||
["myFun2()", "myVar1", "myVar2"].forEach((element, index) => {
|
||||
cy.get(`.CodeMirror-hints > :nth-child(${index + 1})`).contains(element);
|
||||
});
|
||||
});
|
||||
|
||||
it("4. Local variables & complex data autocompletion test", () => {
|
||||
// create js object
|
||||
jsEditor.CreateJSObject(jsObjectBody, {
|
||||
paste: true,
|
||||
completeReplace: true,
|
||||
toRun: false,
|
||||
shouldCreateNewJSObj: true,
|
||||
});
|
||||
|
||||
const lineNumber = 5;
|
||||
|
||||
const users = [
|
||||
{ label: "a", value: "b" },
|
||||
{ label: "a", value: "b" },
|
||||
];
|
||||
|
||||
const codeToType = `
|
||||
const users = ${JSON.stringify(users)};
|
||||
const data = { userCollection: [{ users }, { users }] };
|
||||
|
||||
users.map(callBack)
|
||||
`;
|
||||
|
||||
// component re-render cause DOM element of cy.get to lost
|
||||
// added wait to finish re-render before cy.get
|
||||
cy.wait(100);
|
||||
|
||||
cy.get(`:nth-child(${lineNumber}) > .CodeMirror-line`).click();
|
||||
|
||||
cy.get(CommonLocators._codeMirrorTextArea)
|
||||
.focus()
|
||||
.type(`${codeToType}`, { parseSpecialCharSequences: false })
|
||||
.type(`{upArrow}{upArrow}`)
|
||||
.type(`const callBack = (user) => user.l`);
|
||||
|
||||
agHelper.AssertElementText(CommonLocators._hints, "label");
|
||||
|
||||
cy.get(CommonLocators._codeMirrorTextArea)
|
||||
.focus()
|
||||
.type(`abel;`);
|
||||
|
||||
cy.get(CommonLocators._codeMirrorTextArea)
|
||||
.focus()
|
||||
.type(`data.`);
|
||||
|
||||
agHelper.AssertElementText(CommonLocators._hints, "userCollection");
|
||||
|
||||
cy.get(CommonLocators._codeMirrorTextArea)
|
||||
.focus()
|
||||
.type(`userCollection[0].`);
|
||||
|
||||
agHelper.AssertElementText(CommonLocators._hints, "users");
|
||||
|
||||
cy.get(CommonLocators._codeMirrorTextArea)
|
||||
.focus()
|
||||
.type(`users[0].`);
|
||||
|
||||
agHelper.AssertElementText(CommonLocators._hints, "label");
|
||||
});
|
||||
|
||||
it("5. Api data with array of object autocompletion test", () => {
|
||||
ApiPage.CreateAndFillApi("https://mock-api.appsmith.com/users");
|
||||
ApiPage.RunAPI();
|
||||
// create js object
|
||||
jsEditor.CreateJSObject(jsObjectBody, {
|
||||
paste: true,
|
||||
completeReplace: true,
|
||||
toRun: false,
|
||||
shouldCreateNewJSObj: true,
|
||||
});
|
||||
|
||||
cy.get(`:nth-child(${5}) > .CodeMirror-line`).click();
|
||||
|
||||
cy.get(CommonLocators._codeMirrorTextArea)
|
||||
.focus()
|
||||
.type("Api1.data.u");
|
||||
|
||||
agHelper.AssertElementText(CommonLocators._hints, "users");
|
||||
|
||||
cy.get(CommonLocators._codeMirrorTextArea)
|
||||
.focus()
|
||||
.type("sers[0].e");
|
||||
|
||||
agHelper.AssertElementText(CommonLocators._hints, "email");
|
||||
});
|
||||
});
|
||||
|
|
@ -52,10 +52,10 @@ describe("Validate basic Promises", () => {
|
|||
cy.fixture("promisesBtnDsl").then((val: any) => {
|
||||
agHelper.AddDsl(val, locator._spanButton("Submit"));
|
||||
});
|
||||
apiPage.CreateAndFillApi("https://randomuser.me/api/", "RandomUser");
|
||||
apiPage.CreateAndFillApi("https://randomuser.me/api/", "RandomUser", 30000);
|
||||
apiPage.CreateAndFillApi(
|
||||
"https://api.genderize.io?name={{this.params.country}}",
|
||||
"Genderize",
|
||||
"Genderize", 30000
|
||||
);
|
||||
apiPage.ValidateQueryParams({
|
||||
key: "name",
|
||||
|
|
@ -92,7 +92,7 @@ describe("Validate basic Promises", () => {
|
|||
});
|
||||
apiPage.CreateAndFillApi(
|
||||
"https://source.unsplash.com/collection/8439505",
|
||||
"Christmas",
|
||||
"Christmas", 30000
|
||||
);
|
||||
ee.SelectEntityByName("Button1", "WIDGETS");
|
||||
jsEditor.EnterJSContext(
|
||||
|
|
@ -122,7 +122,7 @@ describe("Validate basic Promises", () => {
|
|||
cy.fixture("promisesBtnDsl").then((val: any) => {
|
||||
agHelper.AddDsl(val, locator._spanButton("Submit"));
|
||||
});
|
||||
apiPage.CreateAndFillApi("https://favqs.com/api/qotd", "InspiringQuotes");
|
||||
apiPage.CreateAndFillApi("https://favqs.com/api/qotd", "InspiringQuotes", 30000);
|
||||
jsEditor.CreateJSObject(`const user = 'You';
|
||||
return InspiringQuotes.run().then((res) => { showAlert("Today's quote for " + user + " is " + JSON.stringify(res.quote.body), 'success') }).catch(() => showAlert("Unable to fetch quote for " + user, 'warning'))`);
|
||||
ee.SelectEntityByName("Button1", "WIDGETS");
|
||||
|
|
@ -144,7 +144,7 @@ return InspiringQuotes.run().then((res) => { showAlert("Today's quote for " + us
|
|||
});
|
||||
apiPage.CreateAndFillApi(
|
||||
"https://api.agify.io?name={{this.params.person}}",
|
||||
"Agify",
|
||||
"Agify", 30000
|
||||
);
|
||||
apiPage.ValidateQueryParams({
|
||||
key: "name",
|
||||
|
|
@ -169,7 +169,7 @@ return InspiringQuotes.run().then((res) => { showAlert("Today's quote for " + us
|
|||
});
|
||||
apiPage.CreateAndFillApi(
|
||||
"https://api.jikan.moe/v3/search/anime?q={{this.params.name}}",
|
||||
"GetAnime",
|
||||
"GetAnime", 30000
|
||||
);
|
||||
ee.SelectEntityByName("List1", "WIDGETS");
|
||||
propPane.UpdatePropertyFieldValue(
|
||||
|
|
|
|||
|
|
@ -33,12 +33,7 @@ describe("Validate basic binding of Input widget to Input widget", () => {
|
|||
expect($selectedValue).to.eq("Select option");
|
||||
});
|
||||
|
||||
//Change select value now - if below is #2 - it will fail
|
||||
agHelper.SelectDropDown("#1");
|
||||
agHelper.ReadSelectedDropDownValue().then(($selectedValue) => {
|
||||
expect($selectedValue).to.eq("#1");
|
||||
});
|
||||
|
||||
//Change select value now:
|
||||
agHelper.SelectDropDown("#2");
|
||||
agHelper.ReadSelectedDropDownValue().then(($selectedValue) => {
|
||||
expect($selectedValue).to.eq("#2");
|
||||
|
|
@ -50,12 +45,23 @@ describe("Validate basic binding of Input widget to Input widget", () => {
|
|||
});
|
||||
});
|
||||
|
||||
it("2. Validation of default displayed in Select widget based on row selected + Bug 12531", function() {
|
||||
//Till bug fixed
|
||||
it.skip("2. Validation of default displayed in Select widget based on row selected + Bug 12531", function() {
|
||||
table.SelectTableRow(1);
|
||||
agHelper.ReadSelectedDropDownValue().then(($selectedValue) => {
|
||||
expect($selectedValue).to.eq("#2");
|
||||
});
|
||||
|
||||
table.SelectTableRow(0);
|
||||
agHelper.ReadSelectedDropDownValue().then(($selectedValue) => {
|
||||
expect($selectedValue).to.eq("#1");
|
||||
});
|
||||
|
||||
table.SelectTableRow(2);
|
||||
agHelper.ReadSelectedDropDownValue().then(($selectedValue) => {
|
||||
expect($selectedValue).to.eq("Select option");
|
||||
});
|
||||
|
||||
//Change select value now - failing here!
|
||||
agHelper.SelectDropDown("#1");
|
||||
agHelper.ReadSelectedDropDownValue().then(($selectedValue) => {
|
||||
|
|
|
|||
|
|
@ -0,0 +1,205 @@
|
|||
import { EEXIST } from "constants";
|
||||
import { WIDGET } from "../../../../locators/WidgetLocators";
|
||||
import { ObjectsRegistry } from "../../../../support/Objects/Registry";
|
||||
|
||||
const {
|
||||
AggregateHelper: agHelper,
|
||||
ApiPage,
|
||||
CommonLocators,
|
||||
EntityExplorer,
|
||||
JSEditor: jsEditor,
|
||||
} = ObjectsRegistry;
|
||||
|
||||
const jsObjectBody = `export default {
|
||||
myVar1: [],
|
||||
myVar2: {},
|
||||
myFun1(){
|
||||
|
||||
},
|
||||
myFun2: async () => {
|
||||
//use async-await or promises
|
||||
}
|
||||
}`;
|
||||
|
||||
describe("Autocomplete tests", () => {
|
||||
it("1. Bug #13613 Verify widgets autocomplete: ButtonGroup & Document viewer widget", () => {
|
||||
EntityExplorer.DragDropWidgetNVerify(WIDGET.BUTTON_GROUP, 200, 200);
|
||||
EntityExplorer.DragDropWidgetNVerify(WIDGET.DOCUMENT_VIEWER, 200, 500);
|
||||
|
||||
// create js object
|
||||
jsEditor.CreateJSObject(jsObjectBody, {
|
||||
paste: true,
|
||||
completeReplace: true,
|
||||
toRun: false,
|
||||
shouldCreateNewJSObj: true,
|
||||
prettify: false,
|
||||
});
|
||||
|
||||
// focus on 5th line
|
||||
agHelper.GetNClick(jsEditor._lineinJsEditor(5));
|
||||
|
||||
// 1. Button group widget autocomplete verification
|
||||
agHelper.TypeText(CommonLocators._codeMirrorTextArea, "ButtonGroup1.");
|
||||
agHelper.GetNAssertElementText(CommonLocators._hints, "groupButtons");
|
||||
agHelper.Sleep();
|
||||
agHelper.GetNClickByContains(CommonLocators._hints, "groupButtons");
|
||||
agHelper.TypeText(CommonLocators._codeMirrorTextArea, ".");
|
||||
agHelper.GetNAssertElementText(CommonLocators._hints, "groupButton1");
|
||||
agHelper.Sleep();
|
||||
agHelper.GetNClickByContains(CommonLocators._hints, "groupButton1");
|
||||
|
||||
// 2. Document view widget autocomplete verification
|
||||
|
||||
agHelper.SelectNRemoveLineText(CommonLocators._codeMirrorTextArea);
|
||||
agHelper.TypeText(CommonLocators._codeMirrorTextArea, "DocumentViewer1.");
|
||||
agHelper.GetNAssertElementText(CommonLocators._hints, "docUrl");
|
||||
agHelper.Sleep();
|
||||
agHelper.GetNClickByContains(CommonLocators._hints, "docUrl");
|
||||
});
|
||||
|
||||
it("2. Bug #15568 Verify browser JavaScript APIs in autocomplete ", () => {
|
||||
// Using same js object
|
||||
agHelper.SelectNRemoveLineText(CommonLocators._codeMirrorTextArea);
|
||||
// focus on 5th line
|
||||
agHelper.GetNClick(jsEditor._lineinJsEditor(5));
|
||||
|
||||
const JSAPIsToTest = [
|
||||
// console API verification
|
||||
{
|
||||
type: "console",
|
||||
expected: "console",
|
||||
haveOrNotHave: true,
|
||||
},
|
||||
// crypto API verification
|
||||
{
|
||||
type: "crypto",
|
||||
expected: "crypto",
|
||||
haveOrNotHave: true,
|
||||
},
|
||||
// eval function verification
|
||||
{
|
||||
type: "eval",
|
||||
expected: "eval()",
|
||||
haveOrNotHave: false,
|
||||
},
|
||||
{
|
||||
type: "Blob",
|
||||
expected: "Blob()",
|
||||
haveOrNotHave: true,
|
||||
},
|
||||
{
|
||||
type: "FormData",
|
||||
expected: "FormData()",
|
||||
haveOrNotHave: true,
|
||||
},
|
||||
{
|
||||
type: "FileReader",
|
||||
expected: "FileReader()",
|
||||
haveOrNotHave: true,
|
||||
},
|
||||
];
|
||||
|
||||
JSAPIsToTest.forEach((test, index) => {
|
||||
agHelper.TypeText(CommonLocators._codeMirrorTextArea, test.type);
|
||||
agHelper.GetNAssertElementText(
|
||||
CommonLocators._hints,
|
||||
test.expected,
|
||||
test.haveOrNotHave ? "have.text" : "not.have.text",
|
||||
);
|
||||
agHelper.SelectNRemoveLineText(CommonLocators._codeMirrorTextArea);
|
||||
|
||||
//const deleteCharCount = (JSAPIsToTest[index - 1]?.type || " ").length;
|
||||
// cy.get(CommonLocators._codeMirrorTextArea)
|
||||
// .focus()
|
||||
// // remove previously typed code
|
||||
// .type(deleteCharCount ? "{backspace}".repeat(deleteCharCount) : " ")
|
||||
// .wait(20)
|
||||
// .type(test.type);
|
||||
});
|
||||
//EntityExplorer.ActionContextMenuByEntityName("JSObject1", "Delete", "Are you sure?", true);
|
||||
});
|
||||
|
||||
it("3. JSObject this. autocomplete", () => {
|
||||
// Using same js object
|
||||
//agHelper.SelectNRemoveLineText(CommonLocators._codeMirrorTextArea);
|
||||
// focus on 5th line
|
||||
agHelper.GetNClick(jsEditor._lineinJsEditor(5));
|
||||
agHelper.TypeText(CommonLocators._codeMirrorTextArea, "this.");
|
||||
|
||||
["myFun2()", "myVar1", "myVar2"].forEach((element, index) => {
|
||||
agHelper.AssertContains(element);
|
||||
//cy.get(`.CodeMirror-hints > :nth-child(${index + 1})`).contains(element);
|
||||
});
|
||||
});
|
||||
|
||||
it("4. Api data with array of object autocompletion test", () => {
|
||||
ApiPage.CreateAndFillApi("https://mock-api.appsmith.com/users");
|
||||
ApiPage.RunAPI();
|
||||
// Using same js object
|
||||
EntityExplorer.SelectEntityByName("JSObject1", "QUERIES/JS");
|
||||
agHelper.GetNClick(jsEditor._lineinJsEditor(5));
|
||||
agHelper.SelectNRemoveLineText(CommonLocators._codeMirrorTextArea);
|
||||
//agHelper.GetNClick(jsEditor._lineinJsEditor(5));
|
||||
agHelper.TypeText(CommonLocators._codeMirrorTextArea, "Api1.data.u");
|
||||
agHelper.GetNAssertElementText(CommonLocators._hints, "users");
|
||||
agHelper.Sleep();
|
||||
agHelper.TypeText(CommonLocators._codeMirrorTextArea, "sers[0].e");
|
||||
agHelper.GetNAssertElementText(CommonLocators._hints, "email");
|
||||
agHelper.Sleep();
|
||||
agHelper.TypeText(CommonLocators._codeMirrorTextArea, "mail");
|
||||
});
|
||||
|
||||
it("5. Local variables & complex data autocompletion test", () => {
|
||||
// Using same js object
|
||||
agHelper.SelectNRemoveLineText(CommonLocators._codeMirrorTextArea);
|
||||
const users = [
|
||||
{ label: "a", value: "b" },
|
||||
{ label: "a", value: "b" },
|
||||
];
|
||||
|
||||
const codeToType = `const users = ${JSON.stringify(users)};
|
||||
const data = { userCollection: [{ users }, { users }] };
|
||||
|
||||
users.map(callBack);`;
|
||||
|
||||
// component re-render cause DOM element of cy.get to lost
|
||||
// added wait to finish re-render before cy.get
|
||||
agHelper.Sleep();
|
||||
agHelper.GetNClick(jsEditor._lineinJsEditor(5));
|
||||
agHelper.TypeText(CommonLocators._codeMirrorTextArea, codeToType);
|
||||
agHelper.GetNClick(jsEditor._lineinJsEditor(7));
|
||||
agHelper.TypeText(
|
||||
CommonLocators._codeMirrorTextArea,
|
||||
"const callBack = (user) => user.l",
|
||||
);
|
||||
agHelper.GetNAssertElementText(CommonLocators._hints, "label");
|
||||
agHelper.TypeText(CommonLocators._codeMirrorTextArea, "abel;");
|
||||
agHelper.TypeText(CommonLocators._codeMirrorTextArea, "data.");
|
||||
agHelper.GetNAssertElementText(CommonLocators._hints, "userCollection");
|
||||
agHelper.Sleep();
|
||||
agHelper.GetNClickByContains(CommonLocators._hints, "userCollection");
|
||||
agHelper.TypeText(CommonLocators._codeMirrorTextArea, "[0].");
|
||||
agHelper.GetNAssertElementText(CommonLocators._hints, "users");
|
||||
agHelper.Sleep();
|
||||
agHelper.GetNClickByContains(CommonLocators._hints, "users");
|
||||
agHelper.TypeText(CommonLocators._codeMirrorTextArea, "[0].");
|
||||
agHelper.GetNAssertElementText(CommonLocators._hints, "label");
|
||||
agHelper.GetNAssertElementText(
|
||||
CommonLocators._hints,
|
||||
"value",
|
||||
"have.text",
|
||||
1,
|
||||
);
|
||||
EntityExplorer.ActionContextMenuByEntityName(
|
||||
"JSObject1",
|
||||
"Delete",
|
||||
"Are you sure?",
|
||||
true,
|
||||
);
|
||||
EntityExplorer.ActionContextMenuByEntityName(
|
||||
"Api1",
|
||||
"Delete",
|
||||
"Are you sure?",
|
||||
);
|
||||
});
|
||||
});
|
||||
|
|
@ -14,8 +14,8 @@ describe("Autocomplete bug fixes", function() {
|
|||
ee.SelectEntityByName("Text1");
|
||||
propPane.TypeTextIntoField("Text", "{{Table1.");
|
||||
agHelper.AssertElementExist(locator._hints);
|
||||
agHelper.AssertElementText(locator._hints, "Best Match");
|
||||
agHelper.AssertElementText(locator._hints, "selectedRow", 1);
|
||||
agHelper.GetNAssertElementText(locator._hints, "Best Match");
|
||||
agHelper.GetNAssertElementText(locator._hints, "selectedRow", "have.text", 1);
|
||||
});
|
||||
|
||||
it("2. Bug #14990 Checks if copied widget show up on autocomplete suggestions", function() {
|
||||
|
|
@ -24,8 +24,8 @@ describe("Autocomplete bug fixes", function() {
|
|||
propPane.UpdatePropertyFieldValue("Text", "");
|
||||
propPane.TypeTextIntoField("Text", "{{Te");
|
||||
agHelper.AssertElementExist(locator._hints);
|
||||
agHelper.AssertElementText(locator._hints, "Best Match");
|
||||
agHelper.AssertElementText(locator._hints, "Text1Copy.text", 1);
|
||||
agHelper.GetNAssertElementText(locator._hints, "Best Match");
|
||||
agHelper.GetNAssertElementText(locator._hints, "Text1Copy.text", "have.text", 1);
|
||||
});
|
||||
|
||||
it("3. Bug #14100 Custom columns name label change should reflect in autocomplete", function() {
|
||||
|
|
@ -45,6 +45,6 @@ describe("Autocomplete bug fixes", function() {
|
|||
|
||||
// type {{Table1.selectedRow. and check for autocompletion suggestion having edited column name
|
||||
propPane.TypeTextIntoField("Text", "{{Table1.selectedRow.");
|
||||
agHelper.AssertElementText(locator._hints, "columnAlias", 1);
|
||||
agHelper.GetNAssertElementText(locator._hints, "columnAlias", "have.text", 1);
|
||||
});
|
||||
});
|
||||
|
|
|
|||
|
|
@ -0,0 +1,45 @@
|
|||
import { ObjectsRegistry } from "../../../../support/Objects/Registry";
|
||||
|
||||
let agHelper = ObjectsRegistry.AggregateHelper,
|
||||
locator = ObjectsRegistry.CommonLocators,
|
||||
apiPage = ObjectsRegistry.ApiPage,
|
||||
dataSources = ObjectsRegistry.DataSources;
|
||||
|
||||
let dsName: any;
|
||||
|
||||
const largeResponseApiUrl = "https://api.publicapis.org/entries";
|
||||
//"https://jsonplaceholder.typicode.com/photos";//Commenting since this is faster sometimes & case is failing
|
||||
|
||||
const ERROR_ACTION_EXECUTE_FAIL = (actionName: any) =>
|
||||
`${actionName} action returned an error response`;
|
||||
|
||||
describe("Abort Action Execution", function() {
|
||||
it("1. Bug #14006 - Cancel Request button should abort API action execution", function() {
|
||||
apiPage.CreateAndFillApi(largeResponseApiUrl, "AbortApi", 0);
|
||||
apiPage.RunAPI(false, 0);
|
||||
agHelper.GetNClick(locator._cancelActionExecution, 0, true);
|
||||
agHelper.AssertContains(ERROR_ACTION_EXECUTE_FAIL("AbortApi"));
|
||||
agHelper.ActionContextMenuWithInPane("Delete", "Are you sure?")
|
||||
});
|
||||
|
||||
// Queries were resolving quicker than we could cancel them
|
||||
// Commenting this out till we can find a query that resolves slow enough for us to cancel its execution.
|
||||
|
||||
it("2. Bug #14006 Cancel Request button should abort Query action execution", function() {
|
||||
dataSources.CreateDataSource("MySql");
|
||||
cy.get("@dsName").then(($dsName) => {
|
||||
dsName = $dsName;
|
||||
dataSources.CreateNewQueryInDS(
|
||||
dsName,
|
||||
"SELECT * FROM worldCountryInfo wc join countryFlags cf on wc.Name = cf.Country",
|
||||
"AbortQuery",
|
||||
);
|
||||
dataSources.SetQueryTimeout(0);
|
||||
dataSources.RunQuery(false, false, 0);
|
||||
agHelper.GetNClick(locator._cancelActionExecution, 0, true);
|
||||
agHelper.AssertContains(ERROR_ACTION_EXECUTE_FAIL("AbortQuery"));
|
||||
agHelper.ActionContextMenuWithInPane("Delete", "Are you sure?")
|
||||
dataSources.DeleteDatasouceFromWinthinDS(dsName);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
|
@ -4,13 +4,12 @@ const {
|
|||
AggregateHelper: agHelper,
|
||||
ApiPage: apiPage,
|
||||
JSEditor: jsEditor,
|
||||
EntityExplorer : ee
|
||||
} = ObjectsRegistry;
|
||||
|
||||
describe("[Bug]: Catch block was not triggering in Safari/firefox", () => {
|
||||
it("1. Triggers the catch block when the API hits a 404", () => {
|
||||
apiPage.CreateAndFillApi("https://swapi.dev/api/people/18261826", "Api1");
|
||||
cy.wait(3000);
|
||||
|
||||
apiPage.CreateAndFillApi("https://swapi.dev/api/people/18261826");
|
||||
jsEditor.CreateJSObject(
|
||||
`export default {
|
||||
fun: async () => {
|
||||
|
|
@ -24,6 +23,9 @@ describe("[Bug]: Catch block was not triggering in Safari/firefox", () => {
|
|||
shouldCreateNewJSObj: true,
|
||||
},
|
||||
);
|
||||
agHelper.WaitUntilToastDisappear("404 hit : Api1 failed to execute");
|
||||
agHelper.AssertContains("404 hit : Api1 failed to execute");
|
||||
agHelper.ActionContextMenuWithInPane("Delete", "Are you sure?", true);
|
||||
ee.SelectEntityByName("Api1", "QUERIES/JS");
|
||||
ee.ActionContextMenuByEntityName("Api1", "Delete");
|
||||
});
|
||||
});
|
||||
|
|
|
|||
|
|
@ -29,7 +29,7 @@ describe("Entity explorer context menu should hide on scrolling", function() {
|
|||
//clean up
|
||||
ee.ActionContextMenuByEntityName("Query1", "Delete", "Are you sure?");
|
||||
ee.ActionContextMenuByEntityName("Query2", "Delete", "Are you sure?");
|
||||
ee.ActionContextMenuByEntityName("Movies", "Delete", "Are you sure?");
|
||||
ee.ActionContextMenuByEntityName("Users", "Delete", "Are you sure?");
|
||||
dataSources.DeleteDatasouceFromActiveTab("Movies");//Since sometimes after Queries are deleted, ds is no more visible in EE tree
|
||||
dataSources.DeleteDatasouceFromActiveTab("Users");
|
||||
});
|
||||
});
|
||||
|
|
|
|||
|
|
@ -76,9 +76,7 @@ describe("Linting", () => {
|
|||
|
||||
// create Api1
|
||||
apiPage.CreateAndFillApi(
|
||||
"https://jsonplaceholder.typicode.com/",
|
||||
"",
|
||||
"GET",
|
||||
"https://jsonplaceholder.typicode.com/"
|
||||
);
|
||||
|
||||
clickButtonAndAssertLintError(false);
|
||||
|
|
@ -91,9 +89,7 @@ describe("Linting", () => {
|
|||
|
||||
// Re-create Api1
|
||||
apiPage.CreateAndFillApi(
|
||||
"https://jsonplaceholder.typicode.com/",
|
||||
"",
|
||||
"GET",
|
||||
"https://jsonplaceholder.typicode.com/"
|
||||
);
|
||||
|
||||
clickButtonAndAssertLintError(false);
|
||||
|
|
@ -277,9 +273,7 @@ describe("Linting", () => {
|
|||
},
|
||||
);
|
||||
apiPage.CreateAndFillApi(
|
||||
"https://jsonplaceholder.typicode.com/",
|
||||
"Api1",
|
||||
"GET",
|
||||
"https://jsonplaceholder.typicode.com/"
|
||||
);
|
||||
|
||||
createMySQLDatasourceQuery();
|
||||
|
|
|
|||
|
|
@ -1,10 +1,10 @@
|
|||
import { ObjectsRegistry } from "../../../../support/Objects/Registry";
|
||||
import homePage from "../../../../locators/HomePage";
|
||||
|
||||
let jsEditor = ObjectsRegistry.JSEditor,
|
||||
agHelper = ObjectsRegistry.AggregateHelper,
|
||||
ee = ObjectsRegistry.EntityExplorer;
|
||||
const pages = require("../../../../locators/Pages.json");
|
||||
ee = ObjectsRegistry.EntityExplorer,
|
||||
homePage = ObjectsRegistry.HomePage,
|
||||
locator = ObjectsRegistry.CommonLocators;
|
||||
|
||||
describe("JSEditor Indendation - Visual tests", () => {
|
||||
// for any changes in UI, update the screenshot in snapshot folder, to do so:
|
||||
|
|
@ -49,48 +49,26 @@ myFun2: async () => {
|
|||
completeReplace: true,
|
||||
toRun: false,
|
||||
shouldCreateNewJSObj: true,
|
||||
prettify: false,
|
||||
},
|
||||
);
|
||||
|
||||
cy.get("[name='expand-more']")
|
||||
.eq(1)
|
||||
.click({ force: true });
|
||||
|
||||
agHelper.GetNClick("[name='expand-more']", 1, true, 100);
|
||||
agHelper.WaitUntilEleDisappear(locator._toastMsg);
|
||||
cy.get("div.CodeMirror").matchImageSnapshot("jsObjBeforePrettify6");
|
||||
cy.get(".t--more-action-menu")
|
||||
.first()
|
||||
.click();
|
||||
cy.contains("Prettify Code")
|
||||
.trigger("click")
|
||||
.wait(3000); //allowing time to prettify!
|
||||
|
||||
agHelper.ActionContextMenuWithInPane("Prettify Code");
|
||||
agHelper.Sleep(2000); //allowing time to prettify!
|
||||
cy.get("div.CodeMirror").matchImageSnapshot("jsObjAfterPrettify6");
|
||||
|
||||
// taking a snap after clicking inside the editor to make sure prettify has not reverted
|
||||
cy.get("div.CodeMirror").click();
|
||||
agHelper.GetNClick(jsEditor._lineinJsEditor(26));
|
||||
cy.get("div.CodeMirror").matchImageSnapshot("jsObjAfterPrettify6");
|
||||
cy.wait(2000);
|
||||
cy.NavigateToHome();
|
||||
cy.wait(2000);
|
||||
cy.get(homePage.searchInput).type(appname);
|
||||
// eslint-disable-next-line cypress/no-unnecessary-waiting
|
||||
cy.wait(2000);
|
||||
cy.get(homePage.applicationCard)
|
||||
.first()
|
||||
.trigger("mouseover");
|
||||
cy.get(homePage.appMoreIcon)
|
||||
.first()
|
||||
.click({ force: true });
|
||||
cy.get(homePage.duplicateApp).click({ force: true });
|
||||
|
||||
cy.CheckAndUnfoldEntityItem("QUERIES/JS");
|
||||
cy.SearchEntityandOpen("JSObject1");
|
||||
cy.wait(3000);
|
||||
|
||||
cy.get("[name='expand-more']")
|
||||
.eq(1)
|
||||
.click({ force: true });
|
||||
|
||||
homePage.NavigateToHome();
|
||||
homePage.DuplicateApplication(appname);
|
||||
agHelper.WaitUntilEleDisappear(locator._toastMsg);
|
||||
ee.SelectEntityByName("JSObject1", "QUERIES/JS");
|
||||
agHelper.GetNClick("[name='expand-more']", 1, true, 100);
|
||||
cy.get("div.CodeMirror").matchImageSnapshot("jsObjAfterPrettify6");
|
||||
});
|
||||
|
||||
|
|
@ -130,35 +108,25 @@ myFun2: async () => {
|
|||
completeReplace: true,
|
||||
toRun: false,
|
||||
shouldCreateNewJSObj: true,
|
||||
prettify: false,
|
||||
},
|
||||
);
|
||||
|
||||
cy.get("[name='expand-more']")
|
||||
.eq(1)
|
||||
.click({ force: true });
|
||||
|
||||
agHelper.GetNClick("[name='expand-more']", 1, true, 100);
|
||||
cy.get("div.CodeMirror").matchImageSnapshot("jsObjBeforePrettify7");
|
||||
cy.get(".t--more-action-menu")
|
||||
.first()
|
||||
.click();
|
||||
cy.contains("Prettify Code")
|
||||
.trigger("click")
|
||||
.wait(3000); //allowing time to prettify!
|
||||
|
||||
agHelper.ActionContextMenuWithInPane("Prettify Code");
|
||||
agHelper.Sleep(); //allowing time to prettify!
|
||||
cy.get("div.CodeMirror").matchImageSnapshot("jsObjAfterPrettify7");
|
||||
|
||||
// taking a snap after clicking inside the editor to make sure prettify has not reverted
|
||||
cy.get("div.CodeMirror").click();
|
||||
agHelper.GetNClick(jsEditor._lineinJsEditor(26));
|
||||
cy.get("div.CodeMirror").matchImageSnapshot("jsObjAfterPrettify7");
|
||||
|
||||
ee.ClonePage("Page1");
|
||||
ee.SelectEntityByName("JSObject1", "QUERIES/JS");
|
||||
cy.wait(3000);
|
||||
|
||||
cy.get("[name='expand-more']")
|
||||
.eq(1)
|
||||
.click({ force: true });
|
||||
|
||||
agHelper.Sleep(3000);
|
||||
agHelper.GetNClick("[name='expand-more']", 1, true, 100);
|
||||
cy.get("div.CodeMirror").matchImageSnapshot("jsObjAfterPrettify7");
|
||||
});
|
||||
|
||||
|
|
@ -183,25 +151,19 @@ return Promise.all(allFuncs).then(() => showAlert("Wonderful! all apis executed"
|
|||
completeReplace: true,
|
||||
toRun: false,
|
||||
shouldCreateNewJSObj: true,
|
||||
prettify: false,
|
||||
},
|
||||
);
|
||||
|
||||
cy.get("[name='expand-more']")
|
||||
.eq(1)
|
||||
.click({ force: true });
|
||||
|
||||
agHelper.GetNClick("[name='expand-more']", 1, true, 100);
|
||||
cy.get("div.CodeMirror").matchImageSnapshot("jsObjBeforePrettify1");
|
||||
cy.get(".t--more-action-menu")
|
||||
.first()
|
||||
.click();
|
||||
cy.contains("Prettify Code")
|
||||
.trigger("click")
|
||||
.wait(3000); //allowing time to prettify!
|
||||
|
||||
agHelper.ActionContextMenuWithInPane("Prettify Code");
|
||||
agHelper.Sleep(2000); //allowing time to prettify!
|
||||
cy.get("div.CodeMirror").matchImageSnapshot("jsObjAfterPrettify1");
|
||||
|
||||
// taking a snap after clicking inside the editor to make sure prettify has not reverted
|
||||
cy.get("div.CodeMirror").click();
|
||||
agHelper.GetNClick("div.CodeMirror");
|
||||
cy.get("div.CodeMirror").matchImageSnapshot("jsObjAfterPrettify1");
|
||||
});
|
||||
|
||||
|
|
@ -241,41 +203,31 @@ myFun2: async () => {
|
|||
completeReplace: true,
|
||||
toRun: false,
|
||||
shouldCreateNewJSObj: true,
|
||||
prettify: false,
|
||||
},
|
||||
);
|
||||
|
||||
cy.get("[name='expand-more']")
|
||||
.eq(1)
|
||||
.click({ force: true });
|
||||
|
||||
agHelper.GetNClick("[name='expand-more']", 1, true, 100);
|
||||
cy.get("div.CodeMirror").matchImageSnapshot("jsObjBeforePrettify2");
|
||||
cy.get(".t--more-action-menu")
|
||||
.first()
|
||||
.click();
|
||||
cy.contains("Prettify Code")
|
||||
.trigger("click")
|
||||
.wait(3000); //allowing time to prettify!
|
||||
|
||||
agHelper.ActionContextMenuWithInPane("Prettify Code");
|
||||
agHelper.Sleep(2000); //allowing time to prettify!
|
||||
cy.get("div.CodeMirror").matchImageSnapshot("jsObjAfterPrettify2");
|
||||
|
||||
// taking a snap after clicking inside the editor to make sure prettify has not reverted
|
||||
cy.get("div.CodeMirror").click();
|
||||
agHelper.GetNClick(jsEditor._lineinJsEditor(26));
|
||||
cy.get("div.CodeMirror").matchImageSnapshot("jsObjAfterPrettify2");
|
||||
|
||||
// click run button and take a snap to make sure prettify did not revert
|
||||
cy.contains("Run")
|
||||
.click({ force: true })
|
||||
.wait(3000); // allow time to run
|
||||
agHelper.GetNClick(jsEditor._runButton);
|
||||
agHelper.Sleep(); // allow time to run
|
||||
cy.get("div.CodeMirror").matchImageSnapshot("jsObjAfterPrettify2");
|
||||
|
||||
// click dropdown to change function and make sure prettify has not reverted
|
||||
|
||||
cy.get("[name='expand-more']")
|
||||
.eq(0)
|
||||
.click({ force: true });
|
||||
cy.contains("myFun2").trigger("click");
|
||||
agHelper.GetNClick("[name='expand-more']", 0, true, 100);
|
||||
agHelper.ContainsNClick("myFun2");
|
||||
cy.get("div.CodeMirror").matchImageSnapshot("jsObjAfterPrettify2");
|
||||
agHelper.WaitUntilToastDisappear("ran successfully");
|
||||
agHelper.AssertContains("ran successfully");
|
||||
});
|
||||
|
||||
it("3. TC 1863 : JSEditor validation for Prettify Code with lint errors, triggered by keyboard shortcut", () => {
|
||||
|
|
@ -302,26 +254,24 @@ myFun2: async () => {
|
|||
completeReplace: true,
|
||||
toRun: false,
|
||||
shouldCreateNewJSObj: true,
|
||||
prettify: false,
|
||||
},
|
||||
);
|
||||
|
||||
cy.get("[name='expand-more']")
|
||||
.eq(1)
|
||||
.click({ force: true });
|
||||
|
||||
agHelper.GetNClick("[name='expand-more']", 1, true, 100);
|
||||
cy.get("div.CodeMirror")
|
||||
.wait(1000)
|
||||
.matchImageSnapshot("jsObjBeforePrettify3");
|
||||
cy.get("div.CodeMirror").type("{shift+cmd+p}");
|
||||
|
||||
agHelper.WaitUntilEleDisappear(locator._toastMsg);
|
||||
cy.get("div.CodeMirror").type("{shift+cmd+p}");
|
||||
cy.get("div.CodeMirror")
|
||||
.wait(1000)
|
||||
.matchImageSnapshot("jsObjAfterPrettify3");
|
||||
|
||||
// taking a snap after clicking inside the editor to make sure prettify has not reverted
|
||||
cy.get("div.CodeMirror")
|
||||
.click()
|
||||
.wait(1000);
|
||||
agHelper.GetNClick("div.CodeMirror");
|
||||
|
||||
cy.get("div.CodeMirror").matchImageSnapshot("jsObjAfterPrettify3");
|
||||
});
|
||||
|
||||
|
|
@ -363,42 +313,34 @@ myFun2: async () => {
|
|||
completeReplace: true,
|
||||
toRun: false,
|
||||
shouldCreateNewJSObj: true,
|
||||
prettify: false,
|
||||
},
|
||||
);
|
||||
|
||||
cy.get("[name='expand-more']")
|
||||
.eq(1)
|
||||
.click({ force: true });
|
||||
|
||||
agHelper.GetNClick("[name='expand-more']", 1, true, 100);
|
||||
agHelper.WaitUntilEleDisappear(locator._toastMsg);
|
||||
cy.get("div.CodeMirror").matchImageSnapshot("jsObjBeforePrettify4");
|
||||
|
||||
cy.get("div.CodeMirror")
|
||||
.type("{shift+cmd+p}")
|
||||
.wait(1000);
|
||||
|
||||
cy.get("div.CodeMirror").matchImageSnapshot("jsObjAfterPrettify4");
|
||||
|
||||
// taking a snap after clicking inside the editor to make sure prettify has not reverted
|
||||
cy.get("div.CodeMirror")
|
||||
.click()
|
||||
.wait(1000);
|
||||
agHelper.GetNClick(jsEditor._lineinJsEditor(26));
|
||||
cy.get("div.CodeMirror").matchImageSnapshot("jsObjAfterPrettify4_1");
|
||||
|
||||
// click run button and take a snap to make sure prettify did not revert
|
||||
cy.contains("Run")
|
||||
.click({ force: true })
|
||||
.wait(3000); // allow time to run
|
||||
agHelper.GetNClick(jsEditor._runButton);
|
||||
agHelper.Sleep(); // allow time to run
|
||||
cy.get("div.CodeMirror").matchImageSnapshot("jsObjAfterPrettify4_1");
|
||||
|
||||
// click dropdown to change function and make sure prettify has not reverted
|
||||
// click dropdown to change function and make sure prettify has not reverted
|
||||
cy.get("[name='expand-more']")
|
||||
.eq(0)
|
||||
.click({ force: true });
|
||||
cy.contains("myFun2")
|
||||
.trigger("click")
|
||||
.wait(1000);
|
||||
agHelper.GetNClick("[name='expand-more']", 0, true, 100);
|
||||
agHelper.ContainsNClick("myFun2");
|
||||
cy.get("div.CodeMirror").matchImageSnapshot("jsObjAfterPrettify4_1");
|
||||
agHelper.WaitUntilToastDisappear("ran successfully");
|
||||
agHelper.AssertContains("ran successfully");
|
||||
});
|
||||
|
||||
it("5. TC 1862 - JSEditor validation for goLineStartSmart with no errors, triggered by keyboard shortcut", () => {
|
||||
|
|
@ -409,10 +351,7 @@ myFun2: async () => {
|
|||
shouldCreateNewJSObj: true,
|
||||
});
|
||||
|
||||
cy.get("[name='expand-more']")
|
||||
.eq(1)
|
||||
.click({ force: true });
|
||||
|
||||
agHelper.GetNClick("[name='expand-more']", 1, true, 100);
|
||||
cy.get("div.CodeMirror").matchImageSnapshot("jsObjBeforeGoLineStartSmart5");
|
||||
|
||||
cy.get("div.CodeMirror").type("{cmd+leftArrow}");
|
||||
|
|
|
|||
|
|
@ -16,8 +16,8 @@ describe("Table Widget text wrapping functionality", function() {
|
|||
cy.editColumn("image");
|
||||
cy.get(".t--property-control-cellwrapping .bp3-control-indicator")
|
||||
.first()
|
||||
.click();
|
||||
|
||||
.click({ force: true });
|
||||
cy.wait(1000);
|
||||
cy.getTableCellHeight(1, 0).then((height) => {
|
||||
expect(height).to.not.equal("28px");
|
||||
});
|
||||
|
|
@ -36,9 +36,10 @@ describe("Table Widget text wrapping functionality", function() {
|
|||
cy.openPropertyPane("tablewidgetv2");
|
||||
cy.wait(2000);
|
||||
cy.editColumn("email");
|
||||
cy.get(".t--property-control-cellwrapping .bp3-control-indicator")
|
||||
.first()
|
||||
.click();
|
||||
cy.get(".t--property-control-cellwrapping .bp3-control-indicator").click({
|
||||
force: true,
|
||||
});
|
||||
cy.wait(1000);
|
||||
cy.getTableCellHeight(2, 0).then((height) => {
|
||||
expect(height).to.not.equal("28px");
|
||||
});
|
||||
|
|
|
|||
|
|
@ -93,7 +93,7 @@ describe("Validate API request body panel", () => {
|
|||
apiPage.CreateAndFillApi(
|
||||
"https://api.cloudinary.com/v1_1/appsmithautomationcloud/image/upload?upload_preset=fbbhg4xu",
|
||||
"CloudinaryUploadApi",
|
||||
"POST",
|
||||
30000, "POST"
|
||||
);
|
||||
apiPage.EnterBodyFormData(
|
||||
"MULTIPART_FORM_DATA",
|
||||
|
|
|
|||
|
|
@ -1,7 +1,11 @@
|
|||
const datasource = require("../../../../locators/DatasourcesEditor.json");
|
||||
const queryEditor = require("../../../../locators/QueryEditor.json");
|
||||
const datasourceEditor = require("../../../../locators/DatasourcesEditor.json");
|
||||
|
||||
import { ObjectsRegistry } from "../../../../support/Objects/Registry";
|
||||
|
||||
let agHelper = ObjectsRegistry.AggregateHelper,
|
||||
dataSources = ObjectsRegistry.DataSources;
|
||||
|
||||
let datasourceName;
|
||||
|
||||
describe("Arango datasource test cases", function() {
|
||||
|
|
@ -13,13 +17,8 @@ describe("Arango datasource test cases", function() {
|
|||
cy.NavigateToDatasourceEditor();
|
||||
cy.get(datasource.ArangoDB).click();
|
||||
cy.getPluginFormsAndCreateDatasource();
|
||||
|
||||
cy.renameDatasource("ArangoWithnoTrailing");
|
||||
cy.fillArangoDBDatasourceForm();
|
||||
cy.generateUUID().then((UUID) => {
|
||||
datasourceName = `Arango MOCKDS ${UUID}`;
|
||||
cy.renameDatasource(datasourceName);
|
||||
});
|
||||
|
||||
cy.get("@createDatasource").then((httpResponse) => {
|
||||
datasourceName = httpResponse.response.body.data.name;
|
||||
});
|
||||
|
|
@ -27,20 +26,20 @@ describe("Arango datasource test cases", function() {
|
|||
fixture: "testAction.json",
|
||||
}).as("testDatasource");
|
||||
cy.testSaveDatasource(false);
|
||||
dataSources.DeleteDatasouceFromActiveTab("ArangoWithnoTrailing");
|
||||
});
|
||||
|
||||
it("2. Create with trailing white spaces in host address and database name, test, save then delete a Arango datasource", function() {
|
||||
cy.NavigateToDatasourceEditor();
|
||||
cy.get(datasource.ArangoDB).click();
|
||||
cy.getPluginFormsAndCreateDatasource();
|
||||
cy.renameDatasource("ArangoWithTrailing");
|
||||
cy.fillArangoDBDatasourceForm(true);
|
||||
cy.get("@createDatasource").then((httpResponse) => {
|
||||
datasourceName = httpResponse.response.body.data.name;
|
||||
});
|
||||
cy.intercept("POST", "/api/v1/datasources/test", {
|
||||
fixture: "testAction.json",
|
||||
}).as("testDatasource");
|
||||
cy.testSaveDatasource(false);
|
||||
//dataSources.DeleteDatasouceFromActiveTab("ArangoWithTrailing");
|
||||
});
|
||||
|
||||
it("3. Create a new query from the datasource editor", function() {
|
||||
|
|
@ -53,9 +52,16 @@ describe("Arango datasource test cases", function() {
|
|||
"response.body.responseMeta.status",
|
||||
201,
|
||||
);
|
||||
|
||||
cy.deleteQueryUsingContext();
|
||||
cy.deleteDatasource("ArangoWithTrailing");
|
||||
});
|
||||
|
||||
cy.deleteDatasource(datasourceName);
|
||||
it("4. Arango Default name change", () => {
|
||||
dataSources.NavigateToDSCreateNew();
|
||||
dataSources.CreatePlugIn("ArangoDB");
|
||||
agHelper
|
||||
.GetText(dataSources._databaseName, "val")
|
||||
.then(($dbName) => expect($dbName).to.eq("default"));
|
||||
dataSources.DeleteDSDirectly();
|
||||
});
|
||||
});
|
||||
|
|
|
|||
|
|
@ -12,9 +12,7 @@ describe("Google Sheets datasource test cases", function() {
|
|||
"Read, Edit and Create Files",
|
||||
"Read, Edit, Create and Delete Files",
|
||||
]);
|
||||
agHelper.ClickButton("Delete");
|
||||
agHelper.ClickButton("Are you sure?");
|
||||
agHelper.ValidateToastMessage("deleted successfully");
|
||||
dataSources.DeleteDSDirectly();
|
||||
});
|
||||
|
||||
function VerifyFunctionDropdown(scopeOptions: string[]) {
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
import { ObjectsRegistry } from "../../../../support/Objects/Registry";
|
||||
|
||||
let guid: any, dsName: any;
|
||||
let dsName: any;
|
||||
|
||||
let agHelper = ObjectsRegistry.AggregateHelper,
|
||||
ee = ObjectsRegistry.EntityExplorer,
|
||||
|
|
@ -91,7 +91,7 @@ describe("Validate Mongo CRUD with JSON Form", () => {
|
|||
) {
|
||||
agHelper.GetNClick(dataSources._generatePageBtn);
|
||||
agHelper.ValidateNetworkStatus("@replaceLayoutWithCRUDPage", 201);
|
||||
//agHelper.ValidateToastMessage("Successfully generated a page");// Commenting this since FindQuery failure appears sometimes
|
||||
agHelper.AssertContains("Successfully generated a page");// Commenting this since FindQuery failure appears sometimes
|
||||
agHelper.ValidateNetworkStatus("@getActions", 200);
|
||||
agHelper.ValidateNetworkStatus("@postExecute", 200);
|
||||
agHelper.ValidateNetworkStatus("@updateLayout", 200);
|
||||
|
|
|
|||
|
|
@ -157,7 +157,7 @@ describe("Validate MySQL Generate CRUD with JSON Form", () => {
|
|||
agHelper.GetNClick(dataSources._selectTableDropdown);
|
||||
agHelper.GetNClickByContains(dataSources._dropdownOption, "productlines");
|
||||
agHelper.GetNClick(dataSources._generatePageBtn);
|
||||
agHelper.ValidateToastMessage("Successfully generated a page");
|
||||
agHelper.AssertContains("Successfully generated a page");
|
||||
agHelper.ValidateNetworkStatus("@replaceLayoutWithCRUDPage", 201);
|
||||
agHelper.ValidateNetworkStatus("@getActions", 200);
|
||||
agHelper.ValidateNetworkStatus("@postExecute", 200);
|
||||
|
|
@ -452,8 +452,10 @@ describe("Validate MySQL Generate CRUD with JSON Form", () => {
|
|||
//agHelper.AssertElementVisible(locator._jsonFormWidget, 1); //Insert Modal at index 1
|
||||
agHelper.AssertElementVisible(locator._visibleTextDiv("Insert Row"));
|
||||
agHelper.ClickButton("Submit");
|
||||
agHelper.ValidateToastMessage("Column 'store_id' cannot be null");
|
||||
agHelper.AssertContains("Column 'store_id' cannot be null");
|
||||
agHelper.AssertContains("error response");
|
||||
|
||||
agHelper.WaitUntilEleDisappear(locator._toastMsg);
|
||||
deployMode.EnterJSONInputValue("Store Id", "2106");
|
||||
deployMode.EnterJSONInputValue("Name", "Keokuk Spirits", 1);
|
||||
cy.xpath(deployMode._jsonFormRadioFieldByName("Store Status"))
|
||||
|
|
@ -470,7 +472,7 @@ describe("Validate MySQL Generate CRUD with JSON Form", () => {
|
|||
.should("eq", "password");
|
||||
|
||||
agHelper.ClickButton("Submit");
|
||||
agHelper.ValidateToastMessage("Duplicate entry '2106' for key 'PRIMARY'");
|
||||
agHelper.AssertContains("Duplicate entry '2106' for key 'PRIMARY'");
|
||||
|
||||
cy.xpath(deployMode._jsonFormFieldByName("Store Id", true))
|
||||
.clear()
|
||||
|
|
@ -594,8 +596,8 @@ describe("Validate MySQL Generate CRUD with JSON Form", () => {
|
|||
) {
|
||||
agHelper.GetNClick(dataSources._generatePageBtn);
|
||||
agHelper.ValidateNetworkStatus("@replaceLayoutWithCRUDPage", 201);
|
||||
agHelper.ValidateToastMessage("Successfully generated a page");
|
||||
agHelper.ValidateNetworkStatus("@getActions", 200);
|
||||
agHelper.AssertContains("Successfully generated a page");
|
||||
//agHelper.ValidateNetworkStatus("@getActions", 200);//Since failing sometimes
|
||||
agHelper.ValidateNetworkStatus("@postExecute", 200);
|
||||
agHelper.ValidateNetworkStatus("@updateLayout", 200);
|
||||
|
||||
|
|
|
|||
|
|
@ -391,17 +391,18 @@ describe("Validate Postgres Generate CRUD with JSON Form", () => {
|
|||
deployMode.ClearJSONFieldValue("Current Port");
|
||||
|
||||
agHelper.ClickButton("Update");
|
||||
agHelper.WaitUntilToastDisappear(
|
||||
agHelper.AssertContains(
|
||||
`null value in column "vessel_type" violates not-null constraint`,
|
||||
);
|
||||
deployMode.SelectJsonFormDropDown("Passenger");
|
||||
|
||||
deployMode.ClearJSONFieldValue("Distance To Go");
|
||||
agHelper.ClickButton("Update");
|
||||
agHelper.WaitUntilToastDisappear(
|
||||
agHelper.AssertContains(
|
||||
`null value in column "distance_to_go" violates not-null constraint`,
|
||||
);
|
||||
deployMode.EnterJSONInputValue("Distance To Go", "7.4");
|
||||
agHelper.WaitUntilEleDisappear(locator._toastMsg); //for previous case toasts for next Update to be Success!!
|
||||
|
||||
updateNVerify(8, 3, "");
|
||||
});
|
||||
|
|
@ -599,7 +600,7 @@ describe("Validate Postgres Generate CRUD with JSON Form", () => {
|
|||
deployMode.EnterJSONInputValue("Shipname", "MALTESE FALCON", 1);
|
||||
|
||||
agHelper.ClickButton("Submit");
|
||||
agHelper.WaitUntilToastDisappear(
|
||||
agHelper.AssertContains(
|
||||
`duplicate key value violates unique constraint "vessels_pkey"`,
|
||||
);
|
||||
|
||||
|
|
@ -706,8 +707,8 @@ describe("Validate Postgres Generate CRUD with JSON Form", () => {
|
|||
) {
|
||||
agHelper.GetNClick(dataSources._generatePageBtn);
|
||||
agHelper.ValidateNetworkStatus("@replaceLayoutWithCRUDPage", 201);
|
||||
agHelper.ValidateToastMessage("Successfully generated a page");
|
||||
agHelper.ValidateNetworkStatus("@getActions", 200);
|
||||
agHelper.AssertContains("Successfully generated a page");
|
||||
//agHelper.ValidateNetworkStatus("@getActions", 200);//Since failing sometimes
|
||||
agHelper.ValidateNetworkStatus("@postExecute", 200);
|
||||
agHelper.ValidateNetworkStatus("@updateLayout", 200);
|
||||
|
||||
|
|
|
|||
|
|
@ -84,6 +84,7 @@ describe("JS Function Execution", function() {
|
|||
completeReplace: true,
|
||||
toRun: false,
|
||||
shouldCreateNewJSObj: true,
|
||||
prettify: false,
|
||||
},
|
||||
);
|
||||
|
||||
|
|
@ -103,6 +104,7 @@ describe("JS Function Execution", function() {
|
|||
completeReplace: true,
|
||||
toRun: false,
|
||||
shouldCreateNewJSObj: true,
|
||||
prettify: false,
|
||||
},
|
||||
);
|
||||
|
||||
|
|
@ -129,6 +131,7 @@ describe("JS Function Execution", function() {
|
|||
completeReplace: true,
|
||||
toRun: true,
|
||||
shouldCreateNewJSObj: true,
|
||||
prettify: false,
|
||||
});
|
||||
|
||||
// Assert presence of function execution parse error callout
|
||||
|
|
@ -140,6 +143,7 @@ describe("JS Function Execution", function() {
|
|||
completeReplace: true,
|
||||
toRun: false,
|
||||
shouldCreateNewJSObj: false,
|
||||
prettify: false,
|
||||
});
|
||||
|
||||
agHelper.Sleep(2000); // Giving more time for parsing to reduce flakiness!
|
||||
|
|
@ -152,7 +156,7 @@ describe("JS Function Execution", function() {
|
|||
it("4. Shows lint error and toast modal when JS Object doesn't start with 'export default'", () => {
|
||||
const invalidJSObjectStartToastMessage = "Start object with export default";
|
||||
const jsComment = "// This is a comment";
|
||||
const jsObjectStartLine = "export default{";
|
||||
const jsObjectStartLine = `export default{`;
|
||||
const jsObjectStartLineWithSpace = `export default{`;
|
||||
const jsObjectStartingWithAComment = `${jsComment}
|
||||
${jsObjectStartLine}
|
||||
|
|
@ -163,7 +167,7 @@ describe("JS Function Execution", function() {
|
|||
}`;
|
||||
|
||||
const jsObjectStartingWithANewLine = `
|
||||
${jsObjectStartLine}
|
||||
${jsObjectStartLine}
|
||||
fun1:()=>true
|
||||
}`;
|
||||
|
||||
|
|
@ -178,16 +182,21 @@ describe("JS Function Execution", function() {
|
|||
toRun: false,
|
||||
shouldCreateNewJSObj: true,
|
||||
});
|
||||
agHelper.WaitUntilToastDisappear("created successfully"); //to not hinder with other toast msgs in this case!
|
||||
// Assert presence of toast message
|
||||
agHelper.WaitUntilToastDisappear(invalidJSObjectStartToastMessage);
|
||||
|
||||
// Assert presence of lint error at the start line
|
||||
cy.get(locator._lintErrorElement)
|
||||
.should("exist")
|
||||
.should("contain.text", highlightedLintText);
|
||||
agHelper.GetNAssertElementText(
|
||||
locator._lintErrorElement,
|
||||
highlightedLintText,
|
||||
"contain.text", -1
|
||||
);
|
||||
agHelper.ActionContextMenuWithInPane("Delete", "", true);
|
||||
agHelper.WaitUntilToastDisappear("deleted successfully");
|
||||
};
|
||||
|
||||
agHelper.WaitUntilEleDisappear(locator._toastMsg); //for previous case toasts!!
|
||||
assertInvalidJSObjectStart(jsObjectStartingWithAComment, jsComment);
|
||||
assertInvalidJSObjectStart(jsObjectStartingWithANewLine, jsObjectStartLine);
|
||||
assertInvalidJSObjectStart(
|
||||
|
|
@ -201,16 +210,12 @@ describe("JS Function Execution", function() {
|
|||
myVar1: [],
|
||||
myVar2: {},
|
||||
myFun1: () => {
|
||||
//write code here
|
||||
return Table1.unknown.name
|
||||
}
|
||||
}`;
|
||||
return Table1.unknown.name`;
|
||||
|
||||
const JS_OBJECT_WITHOUT_PARSE_ERROR = `export default {
|
||||
myVar1: [],
|
||||
myVar2: {},
|
||||
myFun1: () => {
|
||||
//write code here
|
||||
return Table1.unknown
|
||||
}
|
||||
}`;
|
||||
|
|
@ -222,10 +227,11 @@ describe("JS Function Execution", function() {
|
|||
|
||||
// Create js object
|
||||
jsEditor.CreateJSObject(JS_OBJECT_WITH_PARSE_ERROR, {
|
||||
paste: true,
|
||||
paste: false,
|
||||
completeReplace: true,
|
||||
toRun: true,
|
||||
shouldCreateNewJSObj: true,
|
||||
prettify: false,
|
||||
});
|
||||
|
||||
// Assert that there is a function execution parse error
|
||||
|
|
@ -233,37 +239,41 @@ describe("JS Function Execution", function() {
|
|||
// click the debug icon
|
||||
agHelper.GetNClick(jsEditor._debugCTA);
|
||||
// Assert that errors tab is not empty
|
||||
cy.contains("No signs of trouble here!").should("not.exist");
|
||||
agHelper.AssertContains("No signs of trouble here!", "not.exist");
|
||||
// Assert presence of typeError
|
||||
cy.contains(
|
||||
agHelper.AssertContains(
|
||||
"TypeError: Cannot read properties of undefined (reading 'name')",
|
||||
).should("exist");
|
||||
"exist",
|
||||
);
|
||||
|
||||
// Fix parse error and assert that debugger error is removed
|
||||
jsEditor.EditJSObj(JS_OBJECT_WITHOUT_PARSE_ERROR);
|
||||
jsEditor.EditJSObj(JS_OBJECT_WITHOUT_PARSE_ERROR, false);
|
||||
agHelper.GetNClick(jsEditor._runButton);
|
||||
agHelper.WaitUntilToastDisappear("ran successfully"); //to not hinder with next toast msg in next case!
|
||||
agHelper.AssertContains("ran successfully"); //to not hinder with next toast msg in next case!
|
||||
jsEditor.AssertParseError(false, true);
|
||||
agHelper.GetNClick(locator._errorTab);
|
||||
cy.contains(
|
||||
agHelper.AssertContains(
|
||||
"TypeError: Cannot read properties of undefined (reading 'name')",
|
||||
).should("not.exist");
|
||||
"not.exist",
|
||||
);
|
||||
|
||||
// Switch back to response tab
|
||||
agHelper.GetNClick(locator._responseTab);
|
||||
// Re-introduce parse errors
|
||||
jsEditor.EditJSObj(JS_OBJECT_WITH_PARSE_ERROR);
|
||||
jsEditor.EditJSObj(JS_OBJECT_WITH_PARSE_ERROR + "}}", false);
|
||||
agHelper.GetNClick(jsEditor._runButton);
|
||||
// Assert that there is a function execution parse error
|
||||
jsEditor.AssertParseError(true, true);
|
||||
|
||||
// Delete function
|
||||
jsEditor.EditJSObj(JS_OBJECT_WITH_DELETED_FUNCTION);
|
||||
jsEditor.EditJSObj(JS_OBJECT_WITH_DELETED_FUNCTION, false);
|
||||
// Assert that parse error is removed from debugger when function is deleted
|
||||
agHelper.GetNClick(locator._errorTab);
|
||||
cy.contains(
|
||||
agHelper.AssertContains(
|
||||
"TypeError: Cannot read properties of undefined (reading 'name')",
|
||||
).should("not.exist");
|
||||
"not.exist",
|
||||
);
|
||||
agHelper.ActionContextMenuWithInPane("Delete", "", true);
|
||||
});
|
||||
|
||||
it("6. Supports the use of large JSON data (doesn't crash)", () => {
|
||||
|
|
@ -281,8 +291,8 @@ describe("JS Function Execution", function() {
|
|||
});
|
||||
|
||||
// wait for 3 secs and assert that App doesn't crash
|
||||
cy.wait(3000);
|
||||
cy.contains(crashMessage).should("not.exist");
|
||||
agHelper.Sleep(3000);
|
||||
agHelper.AssertContains(crashMessage, "not.exist");
|
||||
|
||||
// Edit JSObject and run
|
||||
jsEditor.CreateJSObject(" ", {
|
||||
|
|
@ -307,6 +317,12 @@ describe("JS Function Execution", function() {
|
|||
expect($cellData).to.eq("1"); //validating id column value - row 0
|
||||
deployMode.NavigateBacktoEditor();
|
||||
});
|
||||
ee.ActionContextMenuByEntityName(
|
||||
"JSObject1",
|
||||
"Delete",
|
||||
"Are you sure?",
|
||||
true,
|
||||
);
|
||||
});
|
||||
|
||||
it("7. Doesn't cause cyclic dependency when function name is edited", () => {
|
||||
|
|
@ -347,29 +363,31 @@ describe("JS Function Execution", function() {
|
|||
}`;
|
||||
|
||||
jsEditor.CreateJSObject(syncJSCode, {
|
||||
paste: true,
|
||||
paste: false,
|
||||
completeReplace: true,
|
||||
toRun: false,
|
||||
shouldCreateNewJSObj: true,
|
||||
prettify: false,
|
||||
});
|
||||
|
||||
// change sync function name and test that cyclic dependency is not created
|
||||
jsEditor.EditJSObj(syncJSCodeWithRenamedFunction1);
|
||||
agHelper.AssertElementAbsence(locator._toastMsg);
|
||||
jsEditor.EditJSObj(syncJSCodeWithRenamedFunction2);
|
||||
agHelper.AssertElementAbsence(locator._toastMsg);
|
||||
jsEditor.EditJSObj(syncJSCodeWithRenamedFunction1, false);
|
||||
agHelper.AssertContains("Cyclic dependency", "not.exist");
|
||||
jsEditor.EditJSObj(syncJSCodeWithRenamedFunction2, false);
|
||||
agHelper.AssertContains("Cyclic dependency", "not.exist");
|
||||
|
||||
jsEditor.CreateJSObject(asyncJSCode, {
|
||||
paste: true,
|
||||
paste: false,
|
||||
completeReplace: true,
|
||||
toRun: false,
|
||||
shouldCreateNewJSObj: true,
|
||||
prettify: false,
|
||||
});
|
||||
// change async function name and test that cyclic dependency is not created
|
||||
jsEditor.EditJSObj(asyncJSCodeWithRenamedFunction1);
|
||||
agHelper.AssertElementAbsence(locator._toastMsg);
|
||||
jsEditor.EditJSObj(asyncJSCodeWithRenamedFunction2);
|
||||
agHelper.AssertElementAbsence(locator._toastMsg);
|
||||
jsEditor.EditJSObj(asyncJSCodeWithRenamedFunction1, false);
|
||||
agHelper.AssertContains("Cyclic dependency", "not.exist");
|
||||
jsEditor.EditJSObj(asyncJSCodeWithRenamedFunction2, false);
|
||||
agHelper.AssertContains("Cyclic dependency", "not.exist");
|
||||
});
|
||||
|
||||
it("8. Maintains order of async functions in settings tab alphabetically at all times", function() {
|
||||
|
|
@ -403,6 +421,7 @@ describe("JS Function Execution", function() {
|
|||
completeReplace: true,
|
||||
toRun: false,
|
||||
shouldCreateNewJSObj: true,
|
||||
prettify: false,
|
||||
});
|
||||
|
||||
cy.get("@jsObjName").then((jsObjName: any) => {
|
||||
|
|
@ -476,13 +495,12 @@ describe("JS Function Execution", function() {
|
|||
}
|
||||
|
||||
ee.SelectEntityByName(jsObj, "QUERIES/JS");
|
||||
|
||||
agHelper.GetNClick(jsEditor._settingsTab);
|
||||
assertAsyncFunctionsOrder(FUNCTIONS_SETTINGS_DEFAULT_DATA);
|
||||
|
||||
// rename functions and assert order
|
||||
agHelper.GetNClick(jsEditor._codeTab);
|
||||
jsEditor.EditJSObj(getJSObject(FUNCTIONS_SETTINGS_RENAMED_DATA));
|
||||
jsEditor.EditJSObj(getJSObject(FUNCTIONS_SETTINGS_RENAMED_DATA), false);
|
||||
agHelper.Sleep(3000);
|
||||
agHelper.GetNClick(jsEditor._settingsTab);
|
||||
assertAsyncFunctionsOrder(FUNCTIONS_SETTINGS_RENAMED_DATA);
|
||||
|
|
@ -490,31 +508,30 @@ describe("JS Function Execution", function() {
|
|||
|
||||
it("10. Bug 13197: Verify converting async functions to sync resets all settings", () => {
|
||||
const asyncJSCode = `export default {
|
||||
myFun1 : async ()=>{
|
||||
return "yes"
|
||||
}
|
||||
}`;
|
||||
asyncToSync : async ()=>{
|
||||
return "yes";`;
|
||||
|
||||
const syncJSCode = `export default {
|
||||
myFun1 : ()=>{
|
||||
return "yes"
|
||||
asyncToSync : ()=>{
|
||||
return "yes";
|
||||
}
|
||||
}`;
|
||||
|
||||
jsEditor.CreateJSObject(asyncJSCode, {
|
||||
paste: true,
|
||||
paste: false,
|
||||
completeReplace: true,
|
||||
toRun: false,
|
||||
shouldCreateNewJSObj: true,
|
||||
prettify: false,
|
||||
});
|
||||
|
||||
// Switch to settings tab
|
||||
agHelper.GetNClick(jsEditor._settingsTab);
|
||||
// Enable all settings
|
||||
jsEditor.EnableDisableAsyncFuncSettings("myFun1", true, true);
|
||||
jsEditor.EnableDisableAsyncFuncSettings("asyncToSync", true, true);
|
||||
|
||||
// Modify js object
|
||||
jsEditor.EditJSObj(syncJSCode);
|
||||
jsEditor.EditJSObj(syncJSCode, false);
|
||||
|
||||
agHelper.RefreshPage();
|
||||
cy.wait("@jsCollections").then(({ response }) => {
|
||||
|
|
|
|||
|
|
@ -30,8 +30,8 @@ describe("JSObjects OnLoad Actions tests", function() {
|
|||
it("2. Tc 54, 55 - Verify User enables only 'Before Function calling' & OnPage Load is Automatically enable after mapping done on JSOBject", function() {
|
||||
jsEditor.CreateJSObject(
|
||||
`export default {
|
||||
getId: async () => {
|
||||
return 8;
|
||||
getEmployee: async () => {
|
||||
return 2;
|
||||
}
|
||||
}`,
|
||||
{
|
||||
|
|
@ -41,34 +41,35 @@ describe("JSObjects OnLoad Actions tests", function() {
|
|||
shouldCreateNewJSObj: true,
|
||||
},
|
||||
);
|
||||
jsEditor.EnableDisableAsyncFuncSettings("getId", false, true); //Only before calling confirmation is enabled by User here
|
||||
jsEditor.EnableDisableAsyncFuncSettings("getEmployee", false, true); //Only before calling confirmation is enabled by User here
|
||||
dataSources.NavigateFromActiveDS(dsName, true);
|
||||
agHelper.GetNClick(dataSources._templateMenu);
|
||||
agHelper.RenameWithInPane("GetUser");
|
||||
agHelper.RenameWithInPane("GetEmployee");
|
||||
cy.get("@jsObjName").then((jsObjName) => {
|
||||
jsName = jsObjName;
|
||||
dataSources.EnterQuery(
|
||||
"SELECT * FROM public.users where id = {{" +
|
||||
"SELECT * FROM public.employees where employee_id = {{" +
|
||||
jsObjName +
|
||||
".getId.data}}",
|
||||
".getEmployee.data}}",
|
||||
);
|
||||
ee.SelectEntityByName("Table1", "WIDGETS");
|
||||
propPane.UpdatePropertyFieldValue("Table Data", "{{GetUser.data}}");
|
||||
propPane.UpdatePropertyFieldValue("Table Data", "{{GetEmployee.data}}");
|
||||
agHelper.ValidateToastMessage(
|
||||
(("[" + jsName) as string) +
|
||||
".getId, GetUser] will be executed automatically on page load",
|
||||
"[GetEmployee, " +
|
||||
(jsName as string) +
|
||||
".getEmployee] will be executed automatically on page load",
|
||||
);
|
||||
deployMode.DeployApp();
|
||||
agHelper.AssertElementVisible(jsEditor._dialog("Confirmation Dialog"));
|
||||
agHelper.AssertElementVisible(
|
||||
jsEditor._dialogBody((jsName as string) + ".getId"),
|
||||
jsEditor._dialogBody((jsName as string) + ".getEmployee"),
|
||||
);
|
||||
agHelper.ClickButton("Yes");
|
||||
agHelper.Sleep(1000);
|
||||
});
|
||||
agHelper.ValidateNetworkExecutionSuccess("@postExecute");
|
||||
table.ReadTableRowColumnData(0, 0).then((cellData) => {
|
||||
expect(cellData).to.be.equal("8");
|
||||
expect(cellData).to.be.equal("2");
|
||||
});
|
||||
deployMode.NavigateBacktoEditor();
|
||||
});
|
||||
|
|
@ -76,37 +77,43 @@ describe("JSObjects OnLoad Actions tests", function() {
|
|||
it("3. Tc 54, 55 - Verify OnPage Load - auto enabled from above case for JSOBject", function() {
|
||||
agHelper.AssertElementVisible(jsEditor._dialog("Confirmation Dialog"));
|
||||
agHelper.AssertElementVisible(
|
||||
jsEditor._dialogBody((jsName as string) + ".getId"),
|
||||
jsEditor._dialogBody((jsName as string) + ".getEmployee"),
|
||||
);
|
||||
agHelper.ClickButton("Yes");
|
||||
//agHelper.Sleep(1000);
|
||||
agHelper.ValidateToastMessage("getId ran successfully"); //Verify this toast comes in EDIT page only
|
||||
agHelper.ValidateToastMessage("getEmployee ran successfully"); //Verify this toast comes in EDIT page only
|
||||
ee.SelectEntityByName(jsName as string, "QUERIES/JS");
|
||||
jsEditor.VerifyAsyncFuncSettings("getId", true, true);
|
||||
jsEditor.VerifyAsyncFuncSettings("getEmployee", true, true);
|
||||
});
|
||||
|
||||
it("4. Verify Error for OnPage Load - disable & Before Function calling enabled for JSOBject", function() {
|
||||
ee.SelectEntityByName(jsName as string, "QUERIES/JS");
|
||||
jsEditor.EnableDisableAsyncFuncSettings("getId", false, true);
|
||||
jsEditor.EnableDisableAsyncFuncSettings("getEmployee", false, true);
|
||||
deployMode.DeployApp(locator._widgetInDeployed("tablewidget"), false);
|
||||
agHelper.WaitUntilToastDisappear('The action "GetUser" has failed');
|
||||
agHelper.WaitUntilToastDisappear('The action "GetEmployee" has failed');
|
||||
deployMode.NavigateBacktoEditor();
|
||||
agHelper.WaitUntilToastDisappear('The action "GetUser" has failed');
|
||||
agHelper.WaitUntilToastDisappear('The action "GetEmployee" has failed');
|
||||
});
|
||||
|
||||
it("5. Tc 53 - Verify OnPage Load - Enabling back & Before Function calling disabled for JSOBject", function() {
|
||||
ee.SelectEntityByName(jsName as string, "QUERIES/JS");
|
||||
jsEditor.EnableDisableAsyncFuncSettings("getId", true, false);
|
||||
jsEditor.EnableDisableAsyncFuncSettings("getEmployee", true, false);
|
||||
agHelper.Sleep(2000); //to allow for changes to take effect!
|
||||
agHelper.RefreshPage(); //For bug #
|
||||
cy.wait("@jsCollections").then(({ response }) => {
|
||||
expect(response?.body.data.actions[0].executeOnLoad).to.eq(true);
|
||||
expect(response?.body.data.actions[0].confirmBeforeExecute).to.eq(false);
|
||||
});
|
||||
deployMode.DeployApp();
|
||||
agHelper.AssertElementAbsence(jsEditor._dialog("Confirmation Dialog"));
|
||||
agHelper.AssertElementAbsence(
|
||||
jsEditor._dialogBody((jsName as string) + ".getId"),
|
||||
jsEditor._dialogBody((jsName as string) + ".getEmployee"),
|
||||
);
|
||||
// assert that on view mode, we don't get "successful run" toast message for onpageload actions
|
||||
agHelper.AssertElementAbsence(locator._toastMsg);
|
||||
agHelper.ValidateNetworkExecutionSuccess("@postExecute");
|
||||
table.ReadTableRowColumnData(0, 0).then((cellData) => {
|
||||
expect(cellData).to.be.equal("8");
|
||||
expect(cellData).to.be.equal("2");
|
||||
});
|
||||
deployMode.NavigateBacktoEditor();
|
||||
});
|
||||
|
|
@ -114,32 +121,32 @@ describe("JSObjects OnLoad Actions tests", function() {
|
|||
it("6. Tc 55 - Verify OnPage Load - Enabling & Before Function calling Enabling for JSOBject", function() {
|
||||
ee.ExpandCollapseEntity("QUERIES/JS");
|
||||
ee.SelectEntityByName(jsName as string);
|
||||
jsEditor.EnableDisableAsyncFuncSettings("getId", true, true);
|
||||
jsEditor.EnableDisableAsyncFuncSettings("getEmployee", true, true);
|
||||
deployMode.DeployApp();
|
||||
agHelper.AssertElementVisible(jsEditor._dialog("Confirmation Dialog"));
|
||||
agHelper.AssertElementVisible(
|
||||
jsEditor._dialogBody((jsName as string) + ".getId"),
|
||||
jsEditor._dialogBody((jsName as string) + ".getEmployee"),
|
||||
);
|
||||
agHelper.ClickButton("Yes");
|
||||
agHelper.AssertElementAbsence(locator._toastMsg);
|
||||
table.ReadTableRowColumnData(0, 0, 2000).then((cellData) => {
|
||||
expect(cellData).to.be.equal("8");
|
||||
expect(cellData).to.be.equal("2");
|
||||
});
|
||||
//agHelper.ValidateNetworkExecutionSuccess("@postExecute");
|
||||
deployMode.NavigateBacktoEditor();
|
||||
agHelper.AssertElementVisible(jsEditor._dialog("Confirmation Dialog"));
|
||||
agHelper.AssertElementVisible(
|
||||
jsEditor._dialogBody((jsName as string) + ".getId"),
|
||||
jsEditor._dialogBody((jsName as string) + ".getEmployee"),
|
||||
);
|
||||
agHelper.ClickButton("Yes");
|
||||
agHelper.ValidateToastMessage("getId ran successfully"); //Verify this toast comes in EDIT page only
|
||||
agHelper.ValidateToastMessage("getEmployee ran successfully"); //Verify this toast comes in EDIT page only
|
||||
});
|
||||
|
||||
it("7. Tc 56 - Verify OnPage Load - Enabled & Before Function calling Enabled for JSOBject & User clicks No in Confirmation dialog", function() {
|
||||
deployMode.DeployApp();
|
||||
agHelper.AssertElementVisible(jsEditor._dialog("Confirmation Dialog"));
|
||||
agHelper.AssertElementVisible(
|
||||
jsEditor._dialogBody((jsName as string) + ".getId"),
|
||||
jsEditor._dialogBody((jsName as string) + ".getEmployee"),
|
||||
);
|
||||
agHelper.ClickButton("No");
|
||||
agHelper.ValidateToastMessage("Failed to execute actions during page load"); //When Confirmation is NO
|
||||
|
|
@ -147,21 +154,21 @@ describe("JSObjects OnLoad Actions tests", function() {
|
|||
agHelper.RefreshPage();
|
||||
agHelper.AssertElementVisible(jsEditor._dialog("Confirmation Dialog"));
|
||||
agHelper.AssertElementVisible(
|
||||
jsEditor._dialogBody((jsName as string) + ".getId"),
|
||||
jsEditor._dialogBody((jsName as string) + ".getEmployee"),
|
||||
);
|
||||
agHelper.ClickButton("Yes");
|
||||
agHelper.AssertElementAbsence(locator._toastMsg);
|
||||
agHelper.ValidateNetworkExecutionSuccess("@postExecute");
|
||||
table.ReadTableRowColumnData(0, 0).then((cellData) => {
|
||||
expect(cellData).to.be.equal("8");
|
||||
expect(cellData).to.be.equal("2");
|
||||
});
|
||||
deployMode.NavigateBacktoEditor();
|
||||
agHelper.AssertElementVisible(jsEditor._dialog("Confirmation Dialog"));
|
||||
agHelper.AssertElementVisible(
|
||||
jsEditor._dialogBody((jsName as string) + ".getId"),
|
||||
jsEditor._dialogBody((jsName as string) + ".getEmployee"),
|
||||
);
|
||||
agHelper.ClickButton("Yes");
|
||||
agHelper.ValidateToastMessage("getId ran successfully"); //Verify this toast comes in EDIT page only
|
||||
agHelper.ValidateToastMessage("getEmployee ran successfully"); //Verify this toast comes in EDIT page only
|
||||
|
||||
ee.SelectEntityByName(jsName as string, "QUERIES/JS");
|
||||
ee.ActionContextMenuByEntityName(
|
||||
|
|
@ -171,7 +178,7 @@ describe("JSObjects OnLoad Actions tests", function() {
|
|||
true,
|
||||
);
|
||||
|
||||
ee.ActionContextMenuByEntityName("GetUser", "Delete", "Are you sure?");
|
||||
ee.ActionContextMenuByEntityName("GetEmployee", "Delete", "Are you sure?");
|
||||
});
|
||||
|
||||
it("8. Tc 51, 52 Verify that JS editor function has a settings button available for functions marked async", () => {
|
||||
|
|
@ -234,12 +241,14 @@ describe("JSObjects OnLoad Actions tests", function() {
|
|||
apiPage.CreateAndFillApi(
|
||||
"https://api.forismatic.com/api/1.0/?method=getQuote&lang=en&format=json",
|
||||
"Quotes",
|
||||
30000,
|
||||
);
|
||||
apiPage.ToggleConfirmBeforeRunningApi(true);
|
||||
|
||||
apiPage.CreateAndFillApi(
|
||||
"https://api.whatdoestrumpthink.com/api/v1/quotes/random",
|
||||
"WhatTrumpThinks",
|
||||
30000,
|
||||
);
|
||||
apiPage.ToggleConfirmBeforeRunningApi(true);
|
||||
|
||||
|
|
@ -368,7 +377,7 @@ describe("JSObjects OnLoad Actions tests", function() {
|
|||
agHelper.ValidateToastMessage("Failed to execute actions during page load");
|
||||
|
||||
ee.ExpandCollapseEntity("QUERIES/JS");
|
||||
apiPage.CreateAndFillApi("https://catfact.ninja/fact", "CatFacts");
|
||||
apiPage.CreateAndFillApi("https://catfact.ninja/fact", "CatFacts", 30000);
|
||||
apiPage.ToggleOnPageLoadRun(true);
|
||||
apiPage.ToggleConfirmBeforeRunningApi(true);
|
||||
|
||||
|
|
@ -410,6 +419,7 @@ describe("JSObjects OnLoad Actions tests", function() {
|
|||
apiPage.CreateAndFillApi(
|
||||
"https://anapioficeandfire.com/api/books/{{this.params.id}}",
|
||||
"getBooks",
|
||||
30000,
|
||||
);
|
||||
//apiPage.OnPageLoadRun(true); //OnPageLoad made true after mapping to JSONForm
|
||||
apiPage.ToggleConfirmBeforeRunningApi(true);
|
||||
|
|
|
|||
|
|
@ -39,24 +39,30 @@ describe("Layout OnLoad Actions tests", function() {
|
|||
apiPage.CreateAndFillApi(
|
||||
"https://source.unsplash.com/collection/1599413",
|
||||
"RandomFlora",
|
||||
30000,
|
||||
);
|
||||
//apiPage.RunAPI();
|
||||
|
||||
apiPage.CreateAndFillApi("https://randomuser.me/api/", "RandomUser");
|
||||
apiPage.CreateAndFillApi("https://randomuser.me/api/", "RandomUser", 30000);
|
||||
//apiPage.RunAPI();
|
||||
|
||||
apiPage.CreateAndFillApi("https://favqs.com/api/qotd", "InspiringQuotes");
|
||||
apiPage.CreateAndFillApi(
|
||||
"https://favqs.com/api/qotd",
|
||||
"InspiringQuotes",
|
||||
30000,
|
||||
);
|
||||
apiPage.EnterHeader("dependency", "{{RandomUser.data}}"); //via Params tab
|
||||
//apiPage.RunAPI();
|
||||
|
||||
apiPage.CreateAndFillApi(
|
||||
"https://www.boredapi.com/api/activity",
|
||||
"Suggestions",
|
||||
30000,
|
||||
);
|
||||
apiPage.EnterHeader("dependency", "{{InspiringQuotes.data}}");
|
||||
//apiPage.RunAPI();
|
||||
|
||||
apiPage.CreateAndFillApi("https://api.genderize.io", "Genderize");
|
||||
apiPage.CreateAndFillApi("https://api.genderize.io", "Genderize", 30000);
|
||||
apiPage.EnterParams("name", "{{RandomUser.data.results[0].name.first}}"); //via Params tab
|
||||
//apiPage.RunAPI();
|
||||
|
||||
|
|
@ -168,7 +174,7 @@ describe("Layout OnLoad Actions tests", function() {
|
|||
|
||||
apiPage.CreateAndFillApi(
|
||||
"https://api.genderize.io?name={{RandomUser.data.results[0].name.first}}",
|
||||
"Genderize",
|
||||
"Genderize", 30000
|
||||
);
|
||||
apiPage.ValidateQueryParams({
|
||||
key: "name",
|
||||
|
|
|
|||
|
|
@ -684,7 +684,7 @@ describe("Validate Mongo Query Pane Validations", () => {
|
|||
},
|
||||
"birth": ISODate("1927-09-04T04:00:00Z"),
|
||||
"death": ISODate("2011-12-24T05:00:00Z"),
|
||||
"issue": 13285
|
||||
"issue": 13286
|
||||
},
|
||||
{
|
||||
"name": {
|
||||
|
|
@ -694,7 +694,7 @@ describe("Validate Mongo Query Pane Validations", () => {
|
|||
"title": "Rear Admiral",
|
||||
"birth": ISODate("1906-12-09T05:00:00Z"),
|
||||
"death": ISODate("1992-01-01T05:00:00Z"),
|
||||
"issue": 13285
|
||||
"issue": 13287
|
||||
},
|
||||
{
|
||||
"name": {
|
||||
|
|
@ -703,7 +703,7 @@ describe("Validate Mongo Query Pane Validations", () => {
|
|||
},
|
||||
"birth": ISODate("1926-08-27T04:00:00Z"),
|
||||
"death": ISODate("2002-08-10T04:00:00Z"),
|
||||
"issue": 13285
|
||||
"issue": 13288
|
||||
}
|
||||
]`;
|
||||
|
||||
|
|
@ -760,6 +760,11 @@ describe("Validate Mongo Query Pane Validations", () => {
|
|||
dataSources.EnterQuery(dropCollection);
|
||||
agHelper.FocusElement(locator._codeMirrorTextArea);
|
||||
dataSources.RunQuery();
|
||||
|
||||
ee.ExpandCollapseEntity("DATASOURCES");
|
||||
ee.ExpandCollapseEntity(dsName);
|
||||
ee.ActionContextMenuByEntityName(dsName, "Refresh");
|
||||
agHelper.AssertElementAbsence(ee._entityNameInExplorer("BirthNDeath"));
|
||||
});
|
||||
|
||||
it("20. Verify Deletion of the datasource", () => {
|
||||
|
|
@ -780,7 +785,7 @@ describe("Validate Mongo Query Pane Validations", () => {
|
|||
) {
|
||||
agHelper.GetNClick(dataSources._generatePageBtn);
|
||||
agHelper.ValidateNetworkStatus("@replaceLayoutWithCRUDPage", 201);
|
||||
agHelper.ValidateToastMessage("Successfully generated a page");
|
||||
agHelper.AssertContains("Successfully generated a page");
|
||||
agHelper.ValidateNetworkStatus("@getActions", 200);
|
||||
agHelper.ValidateNetworkStatus("@postExecute", 200);
|
||||
agHelper.ValidateNetworkStatus("@updateLayout", 200);
|
||||
|
|
|
|||
11
app/client/cypress/patches/17288-check-socket-open.patch
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
--- Cypress/resources/app/node_modules/http-proxy/lib/http-proxy/passes/ws-incoming.js
|
||||
+++ Cypress/resources/app/node_modules/http-proxy/lib/http-proxy/passes/ws-incoming.js
|
||||
@@ -111,7 +111,7 @@ module.exports = {
|
||||
proxyReq.on('error', onOutgoingError);
|
||||
proxyReq.on('response', function (res) {
|
||||
// if upgrade event isn't going to happen, close the socket
|
||||
- if (!res.upgrade && !socket.destroyed) {
|
||||
+ if (!res.upgrade && socket.readyState === socket.OPEN && !socket.destroyed) {
|
||||
socket.write(createHttpHeader('HTTP/' + res.httpVersion + ' ' + res.statusCode + ' ' + res.statusMessage, res.headers));
|
||||
res.pipe(socket);
|
||||
}
|
||||
|
|
@ -1,17 +0,0 @@
|
|||
{
|
||||
"indexes": [
|
||||
{
|
||||
"v": {
|
||||
"$numberInt": "2"
|
||||
},
|
||||
"key": {
|
||||
"_id": {
|
||||
"$numberInt": "1"
|
||||
}
|
||||
},
|
||||
"name": "_id_"
|
||||
}
|
||||
],
|
||||
"uuid": "8474766f7d1d4e548747ccf36a197261",
|
||||
"collectionName": "listingAndReviews"
|
||||
}
|
||||
|
Before Width: | Height: | Size: 5.7 KiB After Width: | Height: | Size: 5.7 KiB |
|
Before Width: | Height: | Size: 61 KiB After Width: | Height: | Size: 61 KiB |
|
Before Width: | Height: | Size: 45 KiB After Width: | Height: | Size: 45 KiB |
|
Before Width: | Height: | Size: 71 KiB After Width: | Height: | Size: 70 KiB |
|
Before Width: | Height: | Size: 46 KiB After Width: | Height: | Size: 45 KiB |
|
Before Width: | Height: | Size: 5.6 KiB After Width: | Height: | Size: 5.6 KiB |
|
Before Width: | Height: | Size: 60 KiB After Width: | Height: | Size: 60 KiB |
|
Before Width: | Height: | Size: 44 KiB After Width: | Height: | Size: 44 KiB |
|
Before Width: | Height: | Size: 44 KiB After Width: | Height: | Size: 45 KiB |
|
Before Width: | Height: | Size: 44 KiB After Width: | Height: | Size: 45 KiB |
|
|
@ -83,4 +83,6 @@ export class CommonLocators {
|
|||
_jsonToggle = (fieldName: string) => `//p[text()='${fieldName}']/parent::div//following-sibling::div//input[@type='checkbox']`
|
||||
_deployedPage = `.t--page-switch-tab`
|
||||
_hints = "ul.CodeMirror-hints li"
|
||||
_cancelActionExecution = ".t--cancel-action-button"
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -17,6 +17,13 @@ const DEFAULT_ENTERVALUE_OPTIONS = {
|
|||
export class AggregateHelper {
|
||||
private locator = ObjectsRegistry.CommonLocators;
|
||||
|
||||
private isMac = Cypress.platform === "darwin";
|
||||
private selectLine = `${
|
||||
this.isMac
|
||||
? "{cmd}{shift}{leftArrow}{backspace}"
|
||||
: "{shift}{home}{backspace}"
|
||||
}`;
|
||||
|
||||
public SaveLocalStorageCache() {
|
||||
Object.keys(localStorage).forEach((key) => {
|
||||
LOCAL_STORAGE_MEMORY[key] = localStorage[key];
|
||||
|
|
@ -110,11 +117,17 @@ export class AggregateHelper {
|
|||
});
|
||||
}
|
||||
|
||||
public AssertElementText(selector: string, text: string, index = 0) {
|
||||
public GetNAssertElementText(
|
||||
selector: string,
|
||||
text: string,
|
||||
textPresence: "have.text" | "contain.text" | "not.have.text" = "have.text",
|
||||
index = 0,
|
||||
) {
|
||||
const locator = selector.startsWith("//")
|
||||
? cy.xpath(selector)
|
||||
: cy.get(selector);
|
||||
locator.eq(index).should("have.text", text);
|
||||
if (index >= 0) locator.eq(index).should(textPresence, text);
|
||||
else locator.should(textPresence, text);
|
||||
}
|
||||
|
||||
public ValidateToastMessage(text: string, index = 0, length = 1) {
|
||||
|
|
@ -166,18 +179,18 @@ export class AggregateHelper {
|
|||
|
||||
public WaitUntilEleDisappear(
|
||||
selector: string,
|
||||
msgToCheckforDisappearance: string | "",
|
||||
msgToCheckforDisappearance: string | "" = "",
|
||||
) {
|
||||
cy.waitUntil(
|
||||
() => (selector.includes("//") ? cy.xpath(selector) : cy.get(selector)),
|
||||
{
|
||||
errorMsg: msgToCheckforDisappearance + " did not disappear",
|
||||
timeout: 5000,
|
||||
//errorMsg: msgToCheckforDisappearance + " did not disappear",
|
||||
timeout: 10000,
|
||||
interval: 1000,
|
||||
},
|
||||
).then(($ele) => {
|
||||
cy.wrap($ele)
|
||||
.contains(msgToCheckforDisappearance)
|
||||
//.contains(msgToCheckforDisappearance)
|
||||
.should("have.length", 0);
|
||||
this.Sleep();
|
||||
});
|
||||
|
|
@ -404,6 +417,27 @@ export class AggregateHelper {
|
|||
.wait(waitTimeInterval);
|
||||
}
|
||||
|
||||
public SelectNRemoveLineText(selector: string) {
|
||||
const locator = selector.startsWith("//")
|
||||
? cy.xpath(selector)
|
||||
: cy.get(selector);
|
||||
return locator.type(this.selectLine);
|
||||
}
|
||||
|
||||
public TypeText(selector: string, value: string, index = 0, force = false) {
|
||||
const locator = selector.startsWith("//")
|
||||
? cy.xpath(selector)
|
||||
: cy.get(selector);
|
||||
return locator
|
||||
.eq(index)
|
||||
.focus()
|
||||
.type(value, {
|
||||
parseSpecialCharSequences: false,
|
||||
delay: 1,
|
||||
force: true,
|
||||
});
|
||||
}
|
||||
|
||||
public ContainsNClick(
|
||||
text: string,
|
||||
index = 0,
|
||||
|
|
@ -529,13 +563,16 @@ export class AggregateHelper {
|
|||
subAction = "Are you sure?";
|
||||
}
|
||||
if (subAction) {
|
||||
cy.xpath(this.locator._contextMenuSubItemDiv(subAction)).click({ force: true });
|
||||
cy.xpath(this.locator._contextMenuSubItemDiv(subAction)).click({
|
||||
force: true,
|
||||
});
|
||||
this.Sleep(500);
|
||||
}
|
||||
if (action == "Delete") {
|
||||
!jsDelete && this.ValidateNetworkStatus("@deleteAction");
|
||||
jsDelete && this.ValidateNetworkStatus("@deleteJSCollection");
|
||||
jsDelete && this.WaitUntilToastDisappear("deleted successfully");
|
||||
jsDelete && this.AssertContains("deleted successfully");
|
||||
//jsDelete && this.WaitUntilToastDisappear("deleted successfully");
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -739,7 +776,7 @@ export class AggregateHelper {
|
|||
const locator = selector.startsWith("//")
|
||||
? cy.xpath(selector)
|
||||
: cy.get(selector);
|
||||
locator
|
||||
return locator
|
||||
.eq(index)
|
||||
.scrollIntoView()
|
||||
.should("be.visible");
|
||||
|
|
|
|||
|
|
@ -68,15 +68,15 @@ export class ApiPage {
|
|||
CreateAndFillApi(
|
||||
url: string,
|
||||
apiName = "",
|
||||
queryTimeout = 10000,
|
||||
apiVerb: "GET" | "POST" | "PUT" | "DELETE" | "PATCH" = "GET",
|
||||
queryTimeout = 30000,
|
||||
) {
|
||||
this.CreateApi(apiName, apiVerb);
|
||||
this.EnterURL(url);
|
||||
this.agHelper.AssertAutoSave();
|
||||
//this.agHelper.Sleep(2000);// Added because api name edit takes some time to reflect in api sidebar after the call passes.
|
||||
cy.get(this._apiRunBtn).should("not.be.disabled");
|
||||
this.SetAPITimeout(queryTimeout);
|
||||
if (queryTimeout != 10000) this.SetAPITimeout(queryTimeout);
|
||||
}
|
||||
|
||||
EnterURL(url: string) {
|
||||
|
|
@ -157,9 +157,10 @@ export class ApiPage {
|
|||
this.agHelper.AssertAutoSave();
|
||||
}
|
||||
|
||||
RunAPI() {
|
||||
cy.get(this._apiRunBtn).click({ force: true });
|
||||
this.agHelper.ValidateNetworkExecutionSuccess("@postExecute");
|
||||
RunAPI(toValidateResponse = true, waitTimeInterval = 20) {
|
||||
this.agHelper.GetNClick(this._apiRunBtn, 0, true, waitTimeInterval);
|
||||
toValidateResponse &&
|
||||
this.agHelper.ValidateNetworkExecutionSuccess("@postExecute");
|
||||
}
|
||||
|
||||
SetAPITimeout(timeout: number) {
|
||||
|
|
@ -204,10 +205,7 @@ export class ApiPage {
|
|||
| "Authentication"
|
||||
| "Settings",
|
||||
) {
|
||||
cy.xpath(this._visibleTextSpan(tabName))
|
||||
.should("be.visible")
|
||||
.eq(0)
|
||||
.click();
|
||||
this.agHelper.GetNClick(this._visibleTextSpan(tabName));
|
||||
}
|
||||
|
||||
SelectSubTab(
|
||||
|
|
@ -218,10 +216,7 @@ export class ApiPage {
|
|||
| "MULTIPART_FORM_DATA"
|
||||
| "RAW",
|
||||
) {
|
||||
cy.get(this._bodySubTab(subTabName))
|
||||
.eq(0)
|
||||
.should("be.visible")
|
||||
.click();
|
||||
this.agHelper.GetNClick(this._bodySubTab(subTabName));
|
||||
}
|
||||
|
||||
ValidateQueryParams(param: { key: string; value: string }) {
|
||||
|
|
|
|||
|
|
@ -19,7 +19,7 @@ export class DataSources {
|
|||
".t--plugin-name:contains('" + pluginName + "')";
|
||||
private _host = "input[name='datasourceConfiguration.endpoints[0].host']";
|
||||
private _port = "input[name='datasourceConfiguration.endpoints[0].port']";
|
||||
private _databaseName =
|
||||
_databaseName =
|
||||
"input[name='datasourceConfiguration.authentication.databaseName']";
|
||||
private _username =
|
||||
"input[name='datasourceConfiguration.authentication.username']";
|
||||
|
|
@ -86,6 +86,8 @@ export class DataSources {
|
|||
_gsScopeDropdown =
|
||||
"[data-cy='datasourceConfiguration.authentication.scopeString']";
|
||||
_gsScopeOptions = ".ads-dropdown-options-wrapper div > span div span";
|
||||
private _queryTimeout =
|
||||
"//input[@name='actionConfiguration.timeoutInMillisecond']";
|
||||
|
||||
public StartDataSourceRoutes() {
|
||||
cy.intercept("PUT", "/api/v1/datasources/*").as("saveDatasource");
|
||||
|
|
@ -173,11 +175,13 @@ export class DataSources {
|
|||
}).as("testDatasource");
|
||||
}
|
||||
|
||||
public CreatePlugIn(pluginName: string) {
|
||||
public CreatePlugIn(pluginName: string, waitForToastDisappear = false) {
|
||||
cy.get(this._createNewPlgin(pluginName))
|
||||
.parent("div")
|
||||
.trigger("click", { force: true });
|
||||
this.agHelper.WaitUntilToastDisappear("datasource created");
|
||||
if (waitForToastDisappear)
|
||||
this.agHelper.WaitUntilToastDisappear("datasource created");
|
||||
else this.agHelper.AssertContains("datasource created");
|
||||
}
|
||||
|
||||
public NavigateToDSCreateNew() {
|
||||
|
|
@ -264,15 +268,15 @@ export class DataSources {
|
|||
}
|
||||
|
||||
public TestDatasource(expectedRes = true) {
|
||||
cy.get(this._testDs).click();
|
||||
this.agHelper.GetNClick(this._testDs, 0, false, 0);
|
||||
this.agHelper.ValidateNetworkDataSuccess("@testDatasource", expectedRes);
|
||||
this.agHelper.WaitUntilToastDisappear("datasource is valid");
|
||||
this.agHelper.AssertContains("datasource is valid");
|
||||
}
|
||||
|
||||
public SaveDatasource() {
|
||||
cy.get(this._saveDs).click();
|
||||
this.agHelper.ValidateNetworkStatus("@saveDatasource", 200);
|
||||
this.agHelper.WaitUntilToastDisappear("datasource updated successfully");
|
||||
this.agHelper.AssertContains("datasource updated successfully");
|
||||
|
||||
// cy.wait("@saveDatasource")
|
||||
// .then((xhr) => {
|
||||
|
|
@ -296,11 +300,14 @@ export class DataSources {
|
|||
this.agHelper.GetNClick(this._contextMenuDelete);
|
||||
this.agHelper.GetNClick(this._visibleTextSpan("Are you sure?"));
|
||||
this.agHelper.ValidateNetworkStatus("@deleteDatasource", expectedRes);
|
||||
if (expectedRes == 200)
|
||||
this.agHelper.AssertContains("datasource deleted successfully");
|
||||
else this.agHelper.AssertContains("action(s) using it.");
|
||||
}
|
||||
|
||||
public DeleteDatasouceFromWinthinDS(
|
||||
datasourceName: string,
|
||||
expectedStatus = 200,
|
||||
expectedRes = 200,
|
||||
) {
|
||||
this.NavigateToActiveTab();
|
||||
cy.get(this._datasourceCard)
|
||||
|
|
@ -311,7 +318,16 @@ export class DataSources {
|
|||
this.agHelper.Sleep(2000); //for the Datasource page to open
|
||||
this.agHelper.ClickButton("Delete");
|
||||
this.agHelper.ClickButton("Are you sure?");
|
||||
this.agHelper.ValidateNetworkStatus("@deleteDatasource", expectedStatus);
|
||||
this.agHelper.ValidateNetworkStatus("@deleteDatasource", expectedRes);
|
||||
if (expectedRes == 200)
|
||||
this.agHelper.AssertContains("datasource deleted successfully");
|
||||
else this.agHelper.AssertContains("action(s) using it.");
|
||||
}
|
||||
|
||||
public DeleteDSDirectly() {
|
||||
this.agHelper.ClickButton("Delete");
|
||||
this.agHelper.ClickButton("Are you sure?");
|
||||
this.agHelper.AssertContains("deleted successfully");
|
||||
}
|
||||
|
||||
public NavigateToActiveTab() {
|
||||
|
|
@ -382,13 +398,19 @@ export class DataSources {
|
|||
cy.get(this._saveDs).click();
|
||||
}
|
||||
|
||||
RunQuery(expectedStatus = true) {
|
||||
cy.get(this._runQueryBtn).click({ force: true });
|
||||
this.agHelper.Sleep(2000);
|
||||
this.agHelper.ValidateNetworkExecutionSuccess(
|
||||
"@postExecute",
|
||||
expectedStatus,
|
||||
);
|
||||
RunQuery(
|
||||
expectedStatus = true,
|
||||
toValidateResponse = true,
|
||||
waitTimeInterval = 500,
|
||||
) {
|
||||
this.agHelper.GetNClick(this._runQueryBtn, 0, true, waitTimeInterval);
|
||||
if (toValidateResponse) {
|
||||
this.agHelper.Sleep(1500);
|
||||
this.agHelper.ValidateNetworkExecutionSuccess(
|
||||
"@postExecute",
|
||||
expectedStatus,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
public ReadQueryTableResponse(index: number, timeout = 100) {
|
||||
|
|
@ -490,4 +512,13 @@ export class DataSources {
|
|||
this.agHelper.GetNClick(this._templateMenu);
|
||||
this.EnterQuery(query);
|
||||
}
|
||||
|
||||
public SetQueryTimeout(queryTimeout = 20000) {
|
||||
this.agHelper.GetNClick(this._queryResponse("SETTINGS"));
|
||||
cy.xpath(this._queryTimeout)
|
||||
.clear()
|
||||
.type(queryTimeout.toString(), { delay: 0 }); //Delay 0 to work like paste!
|
||||
this.agHelper.AssertAutoSave();
|
||||
this.agHelper.GetNClick(this._queryResponse("QUERY"));
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -93,11 +93,13 @@ export class EntityExplorer {
|
|||
.invoke("attr", "name")
|
||||
.then((arrow) => {
|
||||
if (expand && arrow == "arrow-right")
|
||||
cy.xpath(this._expandCollapseArrow(entityName)).eq(index)
|
||||
cy.xpath(this._expandCollapseArrow(entityName))
|
||||
.eq(index)
|
||||
.trigger("click", { multiple: true })
|
||||
.wait(1000);
|
||||
else if (!expand && arrow == "arrow-down")
|
||||
cy.xpath(this._expandCollapseArrow(entityName)).eq(index)
|
||||
cy.xpath(this._expandCollapseArrow(entityName))
|
||||
.eq(index)
|
||||
.trigger("click", { multiple: true })
|
||||
.wait(1000);
|
||||
else this.agHelper.Sleep(500);
|
||||
|
|
@ -115,10 +117,13 @@ export class EntityExplorer {
|
|||
.last()
|
||||
.click({ force: true });
|
||||
cy.xpath(this._contextMenuItem(action)).click({ force: true });
|
||||
this.agHelper.Sleep(500);
|
||||
this.agHelper.Sleep(300);
|
||||
if (action == "Delete") {
|
||||
subAction = "Are you sure?";
|
||||
}
|
||||
if (subAction) {
|
||||
cy.xpath(this._contextMenuItem(subAction)).click({ force: true });
|
||||
this.agHelper.Sleep(500);
|
||||
this.agHelper.Sleep(300);
|
||||
}
|
||||
if (action == "Delete") {
|
||||
jsDelete && this.agHelper.ValidateNetworkStatus("@deleteJSCollection");
|
||||
|
|
|
|||
|
|
@ -29,7 +29,7 @@ export class HomePage {
|
|||
private _userRole = (role: string, workspaceName: string) =>
|
||||
"//div[contains(@class, 'label-container')]//span[1][text()='" +
|
||||
role + ' - ' + workspaceName + "']";
|
||||
|
||||
|
||||
private _manageUsers = ".manageUsers";
|
||||
private _appHome = "//a[@href='/applications']";
|
||||
_applicationCard = ".t--application-card";
|
||||
|
|
@ -158,11 +158,10 @@ export class HomePage {
|
|||
|
||||
public NavigateToHome() {
|
||||
cy.get(this._homeIcon).click({ force: true });
|
||||
this.agHelper.Sleep(3000);
|
||||
this.agHelper.Sleep(2000);
|
||||
//cy.wait("@applications"); this randomly fails & introduces flakyness hence commenting!
|
||||
cy.get(this._homePageAppCreateBtn)
|
||||
.should("be.visible")
|
||||
.should("be.enabled");
|
||||
this.agHelper.AssertElementVisible(this._homePageAppCreateBtn).then($ele=>
|
||||
expect($ele).be.enabled);
|
||||
}
|
||||
|
||||
public CreateNewApplication() {
|
||||
|
|
@ -291,13 +290,13 @@ export class HomePage {
|
|||
|
||||
cy.xpath(this._visibleTextSpan("Members"))
|
||||
.last()
|
||||
.click({ force: true });
|
||||
.click({ force: true });
|
||||
cy.wait("@getMembers").should(
|
||||
"have.nested.property",
|
||||
"response.body.responseMeta.status",
|
||||
200,
|
||||
);
|
||||
this.agHelper.Sleep(2500);
|
||||
this.agHelper.Sleep(2500);
|
||||
//wait for members page to load!
|
||||
}
|
||||
|
||||
|
|
@ -312,13 +311,13 @@ export class HomePage {
|
|||
cy.xpath(this._userRoleDropDown(currentRole, workspaceName))
|
||||
.first()
|
||||
.click({force:true})
|
||||
|
||||
|
||||
//cy.xpath(this._userRoleDropDown(email)).first().click({force: true});
|
||||
cy.xpath(this._visibleTextSpan(`${newRole} - ${workspaceName}`))
|
||||
.last()
|
||||
.click({ force: true });
|
||||
this.agHelper.Sleep();
|
||||
this.NavigateToHome();
|
||||
this.NavigateToHome();
|
||||
}
|
||||
|
||||
public ImportApp(fixtureJson: string, intoWorkspaceName = "") {
|
||||
|
|
@ -362,7 +361,7 @@ export class HomePage {
|
|||
);
|
||||
this.agHelper.GetNClick(this._wsAction("Delete Workspace")); //Are you sure?
|
||||
this.agHelper.GetNClick(this._wsAction("Are you sure?")); //
|
||||
this.agHelper.ValidateToastMessage("Workspace deleted successfully");
|
||||
this.agHelper.AssertContains("Workspace deleted successfully");
|
||||
}
|
||||
|
||||
public AssertNCloseImport() {
|
||||
|
|
@ -386,7 +385,7 @@ export class HomePage {
|
|||
public DuplicateApplication(appliName: string) {
|
||||
this.agHelper.GetNClick(this._applicationContextMenu(appliName));
|
||||
this.agHelper.GetNClick(this._duplicateApp);
|
||||
this.agHelper.WaitUntilToastDisappear("Duplicating application...");
|
||||
this.agHelper.AssertContains("Duplicating application...");
|
||||
}
|
||||
|
||||
public DeleteApplication(appliName: string) {
|
||||
|
|
|
|||
|
|
@ -86,6 +86,8 @@ export class JSEditor {
|
|||
`${JSFunctionName}-settings`;
|
||||
_asyncJSFunctionSettings = `.t--async-js-function-settings`;
|
||||
_debugCTA = `button.js-editor-debug-cta`;
|
||||
_lineinJsEditor = (lineNumber: number) =>
|
||||
":nth-child(" + lineNumber + ") > .CodeMirror-line";
|
||||
//#endregion
|
||||
|
||||
//#region constants
|
||||
|
|
@ -113,7 +115,8 @@ export class JSEditor {
|
|||
cy.get(this._jsObjTxt).should("not.exist");
|
||||
|
||||
//cy.waitUntil(() => cy.get(this.locator._toastMsg).should('not.be.visible')) // fails sometimes
|
||||
this.agHelper.WaitUntilToastDisappear("created successfully"); //to not hinder with other toast msgs!
|
||||
//this.agHelper.WaitUntilToastDisappear("created successfully"); //to not hinder with other toast msgs!
|
||||
this.agHelper.AssertContains("created successfully");
|
||||
this.agHelper.Sleep();
|
||||
}
|
||||
|
||||
|
|
@ -143,6 +146,8 @@ export class JSEditor {
|
|||
.focus()
|
||||
.type(this.selectAllJSObjectContentShortcut)
|
||||
.type("{backspace}", { force: true });
|
||||
this.agHelper.AssertContains("Start object with export default");
|
||||
this.agHelper.AssertAutoSave();
|
||||
}
|
||||
|
||||
cy.get(this.locator._codeMirrorTextArea)
|
||||
|
|
@ -154,7 +159,7 @@ export class JSEditor {
|
|||
} else {
|
||||
cy.get(el).type(JSCode, {
|
||||
parseSpecialCharSequences: false,
|
||||
delay: 100,
|
||||
delay: 50,
|
||||
force: true,
|
||||
});
|
||||
}
|
||||
|
|
@ -179,7 +184,7 @@ export class JSEditor {
|
|||
}
|
||||
|
||||
//Edit the name of a JSObject's property (variable or function)
|
||||
public EditJSObj(newContent: string) {
|
||||
public EditJSObj(newContent: string, toPrettify = true) {
|
||||
cy.get(this.locator._codeMirrorTextArea)
|
||||
.first()
|
||||
.focus()
|
||||
|
|
@ -187,8 +192,8 @@ export class JSEditor {
|
|||
.then((el: JQuery<HTMLElement>) => {
|
||||
this.agHelper.Paste(el, newContent);
|
||||
});
|
||||
this.agHelper.Sleep(2000);//Settling time for edited js code
|
||||
this.agHelper.ActionContextMenuWithInPane("Prettify Code");
|
||||
this.agHelper.Sleep(2000); //Settling time for edited js code
|
||||
toPrettify && this.agHelper.ActionContextMenuWithInPane("Prettify Code");
|
||||
this.agHelper.AssertAutoSave();
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -76,7 +76,7 @@ export class PropertyPane {
|
|||
public ChangeTheme(newTheme: string) {
|
||||
this.agHelper.GetNClick(this._changeThemeBtn, 0, true);
|
||||
this.agHelper.GetNClick(this._themeCard(newTheme));
|
||||
this.agHelper.WaitUntilToastDisappear("Theme " + newTheme + " Applied");
|
||||
this.agHelper.AssertContains("Theme " + newTheme + " Applied");
|
||||
}
|
||||
|
||||
public ChangeColor(
|
||||
|
|
|
|||
|
|
@ -298,6 +298,7 @@ Cypress.Commands.add("CreateAppInFirstListedWorkspace", (appname) => {
|
|||
cy.get("#loading").should("not.exist");
|
||||
// eslint-disable-next-line cypress/no-unnecessary-waiting
|
||||
cy.wait(2000);
|
||||
//cy.reload();
|
||||
cy.AppSetupForRename();
|
||||
cy.get(homePage.applicationName).type(appname + "{enter}");
|
||||
cy.wait("@updateApplication").should(
|
||||
|
|
|
|||
|
|
@ -179,7 +179,8 @@
|
|||
"generate:widget": "plop --plopfile generators/index.js",
|
||||
"postbuild": "rm build/mockServiceWorker.js",
|
||||
"postinstall": "patch-package && CURRENT_SCOPE=client node ../shared/install-dependencies.js",
|
||||
"preinstall": "CURRENT_SCOPE=client node ../shared/build-shared-dep.js"
|
||||
"preinstall": "CURRENT_SCOPE=client node ../shared/build-shared-dep.js",
|
||||
"install": "node cypress/apply-patches.js"
|
||||
},
|
||||
"browserslist": [
|
||||
">0.2%",
|
||||
|
|
@ -243,6 +244,9 @@
|
|||
"cra-bundle-analyzer": "^0.1.0",
|
||||
"cy-verify-downloads": "^0.0.5",
|
||||
"cypress": "9.7.0",
|
||||
"chalk": "^4.1.1",
|
||||
"diff": "^5.0.0",
|
||||
"semver": "^7.3.5",
|
||||
"cypress-file-upload": "^4.1.1",
|
||||
"cypress-image-snapshot": "^4.0.1",
|
||||
"cypress-multi-reporters": "^1.2.4",
|
||||
|
|
@ -262,8 +266,8 @@
|
|||
"factory.ts": "^0.5.1",
|
||||
"jest-canvas-mock": "^2.3.1",
|
||||
"jest-styled-components": "^7.0.8",
|
||||
"mocha": "^7.1.0",
|
||||
"mocha-junit-reporter": "^1.23.3",
|
||||
"mocha": "^9.0.2",
|
||||
"mocha-junit-reporter": "^2.0.0",
|
||||
"mochawesome": "^7.1.2",
|
||||
"mochawesome-report-generator": "^6.1.1",
|
||||
"msw": "^0.28.0",
|
||||
|
|
|
|||
|
|
@ -3615,6 +3615,11 @@
|
|||
"@typescript-eslint/types" "5.25.0"
|
||||
eslint-visitor-keys "^3.3.0"
|
||||
|
||||
"@ungap/promise-all-settled@1.1.2":
|
||||
version "1.1.2"
|
||||
resolved "https://registry.yarnpkg.com/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz#aa58042711d6e3275dd37dc597e5d31e8c290a44"
|
||||
integrity sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==
|
||||
|
||||
"@uppy/companion-client@^1.8.1":
|
||||
version "1.8.1"
|
||||
resolved "https://registry.npmjs.org/@uppy/companion-client/-/companion-client-1.8.1.tgz"
|
||||
|
|
@ -4107,11 +4112,7 @@ algoliasearch@^4.2.0:
|
|||
"@algolia/requester-node-http" "4.5.1"
|
||||
"@algolia/transporter" "4.5.1"
|
||||
|
||||
ansi-colors@3.2.3:
|
||||
version "3.2.3"
|
||||
resolved "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.3.tgz"
|
||||
|
||||
ansi-colors@^4.1.1:
|
||||
ansi-colors@4.1.1, ansi-colors@^4.1.1:
|
||||
version "4.1.1"
|
||||
resolved "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz"
|
||||
|
||||
|
|
@ -4134,24 +4135,22 @@ ansi-html-community@^0.0.8:
|
|||
|
||||
ansi-regex@^2.0.0:
|
||||
version "2.1.1"
|
||||
resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz"
|
||||
|
||||
ansi-regex@^3.0.0:
|
||||
version "3.0.0"
|
||||
resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz"
|
||||
resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df"
|
||||
integrity sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==
|
||||
|
||||
ansi-regex@^4.1.0:
|
||||
version "4.1.0"
|
||||
resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz"
|
||||
version "4.1.1"
|
||||
resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.1.tgz#164daac87ab2d6f6db3a29875e2d1766582dabed"
|
||||
integrity sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==
|
||||
|
||||
ansi-regex@^5.0.0, ansi-regex@^5.0.1:
|
||||
version "5.0.1"
|
||||
resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz"
|
||||
resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304"
|
||||
integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==
|
||||
|
||||
ansi-regex@^6.0.1:
|
||||
version "6.0.1"
|
||||
resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz"
|
||||
resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.0.1.tgz#3183e38fae9a65d7cb5e53945cd5897d0260a06a"
|
||||
integrity sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==
|
||||
|
||||
ansi-styles@^2.2.1:
|
||||
|
|
@ -4919,7 +4918,7 @@ camelcase@^5.0.0, camelcase@^5.3.1:
|
|||
version "5.3.1"
|
||||
resolved "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz"
|
||||
|
||||
camelcase@^6.2.0, camelcase@^6.2.1:
|
||||
camelcase@^6.0.0, camelcase@^6.2.0, camelcase@^6.2.1:
|
||||
version "6.3.0"
|
||||
resolved "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz"
|
||||
integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==
|
||||
|
|
@ -5084,7 +5083,7 @@ check-types@^8.0.3:
|
|||
version "8.0.3"
|
||||
resolved "https://registry.npmjs.org/check-types/-/check-types-8.0.3.tgz"
|
||||
|
||||
chokidar@3.3.0, chokidar@3.5.3, chokidar@^3.4.2, chokidar@^3.5.3:
|
||||
chokidar@3.5.3, chokidar@^3.4.2, chokidar@^3.5.3:
|
||||
version "3.5.3"
|
||||
resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd"
|
||||
integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==
|
||||
|
|
@ -6015,12 +6014,6 @@ debug@2.6.9, debug@^2.2.0, debug@^2.6.0, debug@^2.6.9:
|
|||
dependencies:
|
||||
ms "2.0.0"
|
||||
|
||||
debug@3.2.6, debug@^3.1.0:
|
||||
version "3.2.6"
|
||||
resolved "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz"
|
||||
dependencies:
|
||||
ms "^2.1.1"
|
||||
|
||||
debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.0, debug@^4.3.2, debug@^4.3.4, debug@~4.3.1, debug@~4.3.2:
|
||||
version "4.3.4"
|
||||
resolved "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz"
|
||||
|
|
@ -6028,6 +6021,19 @@ debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.0, debug@^4.3.2, debug@^4.3.4, d
|
|||
dependencies:
|
||||
ms "2.1.2"
|
||||
|
||||
debug@4.3.3:
|
||||
version "4.3.3"
|
||||
resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.3.tgz#04266e0b70a98d4462e6e288e38259213332b664"
|
||||
integrity sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==
|
||||
dependencies:
|
||||
ms "2.1.2"
|
||||
|
||||
debug@^3.1.0:
|
||||
version "3.2.6"
|
||||
resolved "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz"
|
||||
dependencies:
|
||||
ms "^2.1.1"
|
||||
|
||||
debug@^3.2.7:
|
||||
version "3.2.7"
|
||||
resolved "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz"
|
||||
|
|
@ -6038,6 +6044,11 @@ decamelize@^1.2.0:
|
|||
version "1.2.0"
|
||||
resolved "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz"
|
||||
|
||||
decamelize@^4.0.0:
|
||||
version "4.0.0"
|
||||
resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-4.0.0.tgz#aa472d7bf660eb15f3494efd531cab7f2a709837"
|
||||
integrity sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==
|
||||
|
||||
decimal.js@^10.2.1:
|
||||
version "10.3.1"
|
||||
resolved "https://registry.npmjs.org/decimal.js/-/decimal.js-10.3.1.tgz"
|
||||
|
|
@ -6093,7 +6104,7 @@ define-lazy-prop@^2.0.0:
|
|||
resolved "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz"
|
||||
integrity sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==
|
||||
|
||||
define-properties@^1.1.2, define-properties@^1.1.3, define-properties@^1.1.4:
|
||||
define-properties@^1.1.3, define-properties@^1.1.4:
|
||||
version "1.1.4"
|
||||
resolved "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz"
|
||||
integrity sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==
|
||||
|
|
@ -6205,20 +6216,16 @@ diff-sequences@^27.5.1:
|
|||
resolved "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.5.1.tgz"
|
||||
integrity sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ==
|
||||
|
||||
diff@3.5.0:
|
||||
version "3.5.0"
|
||||
resolved "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz"
|
||||
diff@5.0.0, diff@^5.0.0:
|
||||
version "5.0.0"
|
||||
resolved "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz"
|
||||
integrity sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==
|
||||
|
||||
diff@^4.0.1:
|
||||
version "4.0.2"
|
||||
resolved "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz"
|
||||
integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==
|
||||
|
||||
diff@^5.0.0:
|
||||
version "5.0.0"
|
||||
resolved "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz"
|
||||
integrity sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==
|
||||
|
||||
dingbat-to-unicode@^1.0.1:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.npmjs.org/dingbat-to-unicode/-/dingbat-to-unicode-1.0.1.tgz"
|
||||
|
|
@ -6650,7 +6657,12 @@ escape-html@^1.0.3, escape-html@~1.0.3:
|
|||
version "1.0.3"
|
||||
resolved "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz"
|
||||
|
||||
escape-string-regexp@1.0.5, escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5:
|
||||
escape-string-regexp@4.0.0, escape-string-regexp@^4.0.0:
|
||||
version "4.0.0"
|
||||
resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz"
|
||||
integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==
|
||||
|
||||
escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5:
|
||||
version "1.0.5"
|
||||
resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz"
|
||||
integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=
|
||||
|
|
@ -6660,11 +6672,6 @@ escape-string-regexp@^2.0.0:
|
|||
resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz"
|
||||
integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==
|
||||
|
||||
escape-string-regexp@^4.0.0:
|
||||
version "4.0.0"
|
||||
resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz"
|
||||
integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==
|
||||
|
||||
escodegen@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz"
|
||||
|
|
@ -7473,12 +7480,13 @@ find-root@^1.1.0:
|
|||
version "1.1.0"
|
||||
resolved "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz"
|
||||
|
||||
find-up@3.0.0, find-up@^3.0.0:
|
||||
version "3.0.0"
|
||||
resolved "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz"
|
||||
integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==
|
||||
find-up@5.0.0, find-up@^5.0.0:
|
||||
version "5.0.0"
|
||||
resolved "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz"
|
||||
integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==
|
||||
dependencies:
|
||||
locate-path "^3.0.0"
|
||||
locate-path "^6.0.0"
|
||||
path-exists "^4.0.0"
|
||||
|
||||
find-up@^2.1.0:
|
||||
version "2.1.0"
|
||||
|
|
@ -7486,6 +7494,13 @@ find-up@^2.1.0:
|
|||
dependencies:
|
||||
locate-path "^2.0.0"
|
||||
|
||||
find-up@^3.0.0:
|
||||
version "3.0.0"
|
||||
resolved "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz"
|
||||
integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==
|
||||
dependencies:
|
||||
locate-path "^3.0.0"
|
||||
|
||||
find-up@^4.0.0, find-up@^4.1.0:
|
||||
version "4.1.0"
|
||||
resolved "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz"
|
||||
|
|
@ -7493,14 +7508,6 @@ find-up@^4.0.0, find-up@^4.1.0:
|
|||
locate-path "^5.0.0"
|
||||
path-exists "^4.0.0"
|
||||
|
||||
find-up@^5.0.0:
|
||||
version "5.0.0"
|
||||
resolved "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz"
|
||||
integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==
|
||||
dependencies:
|
||||
locate-path "^6.0.0"
|
||||
path-exists "^4.0.0"
|
||||
|
||||
find-yarn-workspace-root@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.npmjs.org/find-yarn-workspace-root/-/find-yarn-workspace-root-2.0.0.tgz"
|
||||
|
|
@ -7541,11 +7548,10 @@ flat-cache@^3.0.4:
|
|||
flatted "^3.1.0"
|
||||
rimraf "^3.0.2"
|
||||
|
||||
flat@^4.1.0:
|
||||
version "4.1.0"
|
||||
resolved "https://registry.npmjs.org/flat/-/flat-4.1.0.tgz"
|
||||
dependencies:
|
||||
is-buffer "~2.0.3"
|
||||
flat@^5.0.2:
|
||||
version "5.0.2"
|
||||
resolved "https://registry.yarnpkg.com/flat/-/flat-5.0.2.tgz#8ca6fe332069ffa9d324c327198c598259ceb241"
|
||||
integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==
|
||||
|
||||
flatted@^3.1.0:
|
||||
version "3.2.5"
|
||||
|
|
@ -7916,9 +7922,10 @@ glob-to-regexp@^0.4.1:
|
|||
resolved "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz"
|
||||
integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==
|
||||
|
||||
glob@7.1.3:
|
||||
version "7.1.3"
|
||||
resolved "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz"
|
||||
glob@7.2.0:
|
||||
version "7.2.0"
|
||||
resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023"
|
||||
integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==
|
||||
dependencies:
|
||||
fs.realpath "^1.0.0"
|
||||
inflight "^1.0.4"
|
||||
|
|
@ -8108,7 +8115,7 @@ has-property-descriptors@^1.0.0:
|
|||
dependencies:
|
||||
get-intrinsic "^1.1.1"
|
||||
|
||||
has-symbols@^1.0.0, has-symbols@^1.0.1, has-symbols@^1.0.2, has-symbols@^1.0.3:
|
||||
has-symbols@^1.0.1, has-symbols@^1.0.2, has-symbols@^1.0.3:
|
||||
version "1.0.3"
|
||||
resolved "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz"
|
||||
integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==
|
||||
|
|
@ -8677,10 +8684,6 @@ is-buffer@~1.1.6:
|
|||
resolved "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz"
|
||||
integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==
|
||||
|
||||
is-buffer@~2.0.3:
|
||||
version "2.0.4"
|
||||
resolved "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.4.tgz"
|
||||
|
||||
is-callable@^1.1.4, is-callable@^1.2.4:
|
||||
version "1.2.4"
|
||||
resolved "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz"
|
||||
|
|
@ -8829,6 +8832,11 @@ is-path-inside@^3.0.2:
|
|||
version "3.0.3"
|
||||
resolved "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz"
|
||||
|
||||
is-plain-obj@^2.1.0:
|
||||
version "2.1.0"
|
||||
resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287"
|
||||
integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==
|
||||
|
||||
is-plain-obj@^3.0.0:
|
||||
version "3.0.0"
|
||||
resolved "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz"
|
||||
|
|
@ -9589,12 +9597,12 @@ js-sha256@^0.9.0:
|
|||
version "4.0.0"
|
||||
resolved "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz"
|
||||
|
||||
js-yaml@3.13.1:
|
||||
version "3.13.1"
|
||||
resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz"
|
||||
js-yaml@4.1.0, js-yaml@^4.1.0:
|
||||
version "4.1.0"
|
||||
resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz"
|
||||
integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==
|
||||
dependencies:
|
||||
argparse "^1.0.7"
|
||||
esprima "^4.0.0"
|
||||
argparse "^2.0.1"
|
||||
|
||||
js-yaml@^3.13.1:
|
||||
version "3.14.0"
|
||||
|
|
@ -9603,13 +9611,6 @@ js-yaml@^3.13.1:
|
|||
argparse "^1.0.7"
|
||||
esprima "^4.0.0"
|
||||
|
||||
js-yaml@^4.1.0:
|
||||
version "4.1.0"
|
||||
resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz"
|
||||
integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==
|
||||
dependencies:
|
||||
argparse "^2.0.1"
|
||||
|
||||
jsbn@~0.1.0:
|
||||
version "0.1.1"
|
||||
resolved "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz"
|
||||
|
|
@ -10122,19 +10123,7 @@ lodash@4.x, lodash@^4, lodash@^4.16.2, lodash@^4.17.11, lodash@^4.17.14, lodash@
|
|||
version "4.17.21"
|
||||
resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz"
|
||||
|
||||
log-symbols@3.0.0:
|
||||
version "3.0.0"
|
||||
resolved "https://registry.npmjs.org/log-symbols/-/log-symbols-3.0.0.tgz"
|
||||
dependencies:
|
||||
chalk "^2.4.2"
|
||||
|
||||
log-symbols@^4.0.0:
|
||||
version "4.0.0"
|
||||
resolved "https://registry.npmjs.org/log-symbols/-/log-symbols-4.0.0.tgz"
|
||||
dependencies:
|
||||
chalk "^4.0.0"
|
||||
|
||||
log-symbols@^4.1.0:
|
||||
log-symbols@4.1.0, log-symbols@^4.1.0:
|
||||
version "4.1.0"
|
||||
resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503"
|
||||
integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==
|
||||
|
|
@ -10142,6 +10131,12 @@ log-symbols@^4.1.0:
|
|||
chalk "^4.1.0"
|
||||
is-unicode-supported "^0.1.0"
|
||||
|
||||
log-symbols@^4.0.0:
|
||||
version "4.0.0"
|
||||
resolved "https://registry.npmjs.org/log-symbols/-/log-symbols-4.0.0.tgz"
|
||||
dependencies:
|
||||
chalk "^4.0.0"
|
||||
|
||||
log-symbols@^5.1.0:
|
||||
version "5.1.0"
|
||||
resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-5.1.0.tgz#a20e3b9a5f53fac6aeb8e2bb22c07cf2c8f16d93"
|
||||
|
|
@ -10459,6 +10454,13 @@ minimatch@3.0.4, minimatch@^3.0.3, minimatch@~3.0.2:
|
|||
dependencies:
|
||||
brace-expansion "^1.1.7"
|
||||
|
||||
minimatch@4.2.1:
|
||||
version "4.2.1"
|
||||
resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-4.2.1.tgz#40d9d511a46bdc4e563c22c3080cde9c0d8299b4"
|
||||
integrity sha512-9Uq1ChtSZO+Mxa/CL1eGizn2vRn3MlLgzhT0Iz8zaY8NdvxvB0d5QdPFmCKf7JKA9Lerx5vRrnwO03jsSfGG9g==
|
||||
dependencies:
|
||||
brace-expansion "^1.1.7"
|
||||
|
||||
minimatch@^3.0.4, minimatch@^3.1.2:
|
||||
version "3.1.2"
|
||||
resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz"
|
||||
|
|
@ -10482,16 +10484,16 @@ mkdirp@0.3.0:
|
|||
version "0.3.0"
|
||||
resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-0.3.0.tgz"
|
||||
|
||||
mkdirp@0.5.5, "mkdirp@>=0.5 0", mkdirp@^0.5.1, mkdirp@~0.5.1:
|
||||
mkdirp@1.x, mkdirp@^1.0.4:
|
||||
version "1.0.4"
|
||||
resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz"
|
||||
|
||||
"mkdirp@>=0.5 0", mkdirp@^0.5.1, mkdirp@~0.5.1:
|
||||
version "0.5.5"
|
||||
resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz"
|
||||
dependencies:
|
||||
minimist "^1.2.5"
|
||||
|
||||
mkdirp@1.x, mkdirp@^1.0.4:
|
||||
version "1.0.4"
|
||||
resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz"
|
||||
|
||||
mkdirp@^0.5.5:
|
||||
version "0.5.6"
|
||||
resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6"
|
||||
|
|
@ -10499,44 +10501,46 @@ mkdirp@^0.5.5:
|
|||
dependencies:
|
||||
minimist "^1.2.6"
|
||||
|
||||
mocha-junit-reporter@^1.23.3:
|
||||
version "1.23.3"
|
||||
resolved "https://registry.npmjs.org/mocha-junit-reporter/-/mocha-junit-reporter-1.23.3.tgz"
|
||||
mocha-junit-reporter@^2.0.0:
|
||||
version "2.0.2"
|
||||
resolved "https://registry.yarnpkg.com/mocha-junit-reporter/-/mocha-junit-reporter-2.0.2.tgz#d521689b651dc52f52044739f8ffb368be415731"
|
||||
integrity sha512-vYwWq5hh3v1lG0gdQCBxwNipBfvDiAM1PHroQRNp96+2l72e9wEUTw+mzoK+O0SudgfQ7WvTQZ9Nh3qkAYAjfg==
|
||||
dependencies:
|
||||
debug "^2.2.0"
|
||||
md5 "^2.1.0"
|
||||
mkdirp "~0.5.1"
|
||||
strip-ansi "^4.0.0"
|
||||
strip-ansi "^6.0.1"
|
||||
xml "^1.0.0"
|
||||
|
||||
mocha@^7.1.0:
|
||||
version "7.2.0"
|
||||
resolved "https://registry.npmjs.org/mocha/-/mocha-7.2.0.tgz"
|
||||
mocha@^9.0.2:
|
||||
version "9.2.2"
|
||||
resolved "https://registry.yarnpkg.com/mocha/-/mocha-9.2.2.tgz#d70db46bdb93ca57402c809333e5a84977a88fb9"
|
||||
integrity sha512-L6XC3EdwT6YrIk0yXpavvLkn8h+EU+Y5UcCHKECyMbdUIxyMuZj4bX4U9e1nvnvUUvQVsV2VHQr5zLdcUkhW/g==
|
||||
dependencies:
|
||||
ansi-colors "3.2.3"
|
||||
"@ungap/promise-all-settled" "1.1.2"
|
||||
ansi-colors "4.1.1"
|
||||
browser-stdout "1.3.1"
|
||||
chokidar "3.3.0"
|
||||
debug "3.2.6"
|
||||
diff "3.5.0"
|
||||
escape-string-regexp "1.0.5"
|
||||
find-up "3.0.0"
|
||||
glob "7.1.3"
|
||||
chokidar "3.5.3"
|
||||
debug "4.3.3"
|
||||
diff "5.0.0"
|
||||
escape-string-regexp "4.0.0"
|
||||
find-up "5.0.0"
|
||||
glob "7.2.0"
|
||||
growl "1.10.5"
|
||||
he "1.2.0"
|
||||
js-yaml "3.13.1"
|
||||
log-symbols "3.0.0"
|
||||
minimatch "3.0.4"
|
||||
mkdirp "0.5.5"
|
||||
ms "2.1.1"
|
||||
node-environment-flags "1.0.6"
|
||||
object.assign "4.1.0"
|
||||
strip-json-comments "2.0.1"
|
||||
supports-color "6.0.0"
|
||||
which "1.3.1"
|
||||
wide-align "1.1.3"
|
||||
yargs "13.3.2"
|
||||
yargs-parser "13.1.2"
|
||||
yargs-unparser "1.6.0"
|
||||
js-yaml "4.1.0"
|
||||
log-symbols "4.1.0"
|
||||
minimatch "4.2.1"
|
||||
ms "2.1.3"
|
||||
nanoid "3.3.1"
|
||||
serialize-javascript "6.0.0"
|
||||
strip-json-comments "3.1.1"
|
||||
supports-color "8.1.1"
|
||||
which "2.0.2"
|
||||
workerpool "6.2.0"
|
||||
yargs "16.2.0"
|
||||
yargs-parser "20.2.4"
|
||||
yargs-unparser "2.0.0"
|
||||
|
||||
mochawesome-report-generator@^6.1.1:
|
||||
version "6.1.1"
|
||||
|
|
@ -10657,6 +10661,11 @@ namespace-emitter@^2.0.1:
|
|||
version "2.0.1"
|
||||
resolved "https://registry.npmjs.org/namespace-emitter/-/namespace-emitter-2.0.1.tgz"
|
||||
|
||||
nanoid@3.3.1:
|
||||
version "3.3.1"
|
||||
resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.1.tgz#6347a18cac88af88f58af0b3594b723d5e99bb35"
|
||||
integrity sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==
|
||||
|
||||
nanoid@^2.0.4:
|
||||
version "2.1.11"
|
||||
resolved "https://registry.npmjs.org/nanoid/-/nanoid-2.1.11.tgz"
|
||||
|
|
@ -10699,13 +10708,6 @@ no-case@^3.0.4:
|
|||
lower-case "^2.0.2"
|
||||
tslib "^2.0.3"
|
||||
|
||||
node-environment-flags@1.0.6:
|
||||
version "1.0.6"
|
||||
resolved "https://registry.npmjs.org/node-environment-flags/-/node-environment-flags-1.0.6.tgz"
|
||||
dependencies:
|
||||
object.getownpropertydescriptors "^2.0.3"
|
||||
semver "^5.7.0"
|
||||
|
||||
node-fetch@2.6.7, node-fetch@^1.0.1, node-fetch@^2.6.1, node-fetch@^2.6.7:
|
||||
version "2.6.7"
|
||||
resolved "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz"
|
||||
|
|
@ -10867,19 +10869,10 @@ object-is@^1.0.1:
|
|||
define-properties "^1.1.3"
|
||||
es-abstract "^1.18.0-next.1"
|
||||
|
||||
object-keys@^1.0.11, object-keys@^1.1.1:
|
||||
object-keys@^1.1.1:
|
||||
version "1.1.1"
|
||||
resolved "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz"
|
||||
|
||||
object.assign@4.1.0:
|
||||
version "4.1.0"
|
||||
resolved "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz"
|
||||
dependencies:
|
||||
define-properties "^1.1.2"
|
||||
function-bind "^1.1.1"
|
||||
has-symbols "^1.0.0"
|
||||
object-keys "^1.0.11"
|
||||
|
||||
object.assign@^4.1.0, object.assign@^4.1.1, object.assign@^4.1.2:
|
||||
version "4.1.2"
|
||||
resolved "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz"
|
||||
|
|
@ -10917,7 +10910,7 @@ object.fromentries@^2.0.5:
|
|||
define-properties "^1.1.3"
|
||||
es-abstract "^1.19.1"
|
||||
|
||||
object.getownpropertydescriptors@^2.0.3, object.getownpropertydescriptors@^2.1.0:
|
||||
object.getownpropertydescriptors@^2.1.0:
|
||||
version "2.1.0"
|
||||
resolved "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.0.tgz"
|
||||
dependencies:
|
||||
|
|
@ -13693,7 +13686,7 @@ semver-compare@^1.0.0:
|
|||
version "1.0.0"
|
||||
resolved "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz"
|
||||
|
||||
"semver@2 || 3 || 4 || 5", semver@^5.5.0, semver@^5.6.0, semver@^5.7.0:
|
||||
"semver@2 || 3 || 4 || 5", semver@^5.5.0, semver@^5.6.0:
|
||||
version "5.7.1"
|
||||
resolved "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz"
|
||||
|
||||
|
|
@ -13770,19 +13763,19 @@ sentence-case@^3.0.4:
|
|||
tslib "^2.0.3"
|
||||
upper-case-first "^2.0.2"
|
||||
|
||||
serialize-javascript@^4.0.0:
|
||||
version "4.0.0"
|
||||
resolved "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz"
|
||||
dependencies:
|
||||
randombytes "^2.1.0"
|
||||
|
||||
serialize-javascript@^6.0.0:
|
||||
serialize-javascript@6.0.0, serialize-javascript@^6.0.0:
|
||||
version "6.0.0"
|
||||
resolved "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz"
|
||||
integrity sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==
|
||||
dependencies:
|
||||
randombytes "^2.1.0"
|
||||
|
||||
serialize-javascript@^4.0.0:
|
||||
version "4.0.0"
|
||||
resolved "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz"
|
||||
dependencies:
|
||||
randombytes "^2.1.0"
|
||||
|
||||
serve-index@^1.9.1:
|
||||
version "1.9.1"
|
||||
resolved "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz"
|
||||
|
|
@ -14186,13 +14179,6 @@ string-width@^1.0.1:
|
|||
is-fullwidth-code-point "^1.0.0"
|
||||
strip-ansi "^3.0.0"
|
||||
|
||||
"string-width@^1.0.2 || 2":
|
||||
version "2.1.1"
|
||||
resolved "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz"
|
||||
dependencies:
|
||||
is-fullwidth-code-point "^2.0.0"
|
||||
strip-ansi "^4.0.0"
|
||||
|
||||
"string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.2.3:
|
||||
version "4.2.3"
|
||||
resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz"
|
||||
|
|
@ -14294,12 +14280,6 @@ strip-ansi@^3.0.0, strip-ansi@^3.0.1:
|
|||
dependencies:
|
||||
ansi-regex "^2.0.0"
|
||||
|
||||
strip-ansi@^4.0.0:
|
||||
version "4.0.0"
|
||||
resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz"
|
||||
dependencies:
|
||||
ansi-regex "^3.0.0"
|
||||
|
||||
strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0:
|
||||
version "5.2.0"
|
||||
resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz"
|
||||
|
|
@ -14356,12 +14336,7 @@ strip-json-comments@1.0.x:
|
|||
version "1.0.4"
|
||||
resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-1.0.4.tgz"
|
||||
|
||||
strip-json-comments@2.0.1:
|
||||
version "2.0.1"
|
||||
resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a"
|
||||
integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo=
|
||||
|
||||
strip-json-comments@^3.1.0, strip-json-comments@^3.1.1:
|
||||
strip-json-comments@3.1.1, strip-json-comments@^3.1.0, strip-json-comments@^3.1.1:
|
||||
version "3.1.1"
|
||||
resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz"
|
||||
|
||||
|
|
@ -14400,11 +14375,11 @@ substyle@^9.1.0:
|
|||
"@babel/runtime" "^7.3.4"
|
||||
invariant "^2.2.4"
|
||||
|
||||
supports-color@6.0.0:
|
||||
version "6.0.0"
|
||||
resolved "https://registry.npmjs.org/supports-color/-/supports-color-6.0.0.tgz"
|
||||
supports-color@8.1.1, supports-color@^8.0.0, supports-color@^8.1.1:
|
||||
version "8.1.1"
|
||||
resolved "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz"
|
||||
dependencies:
|
||||
has-flag "^3.0.0"
|
||||
has-flag "^4.0.0"
|
||||
|
||||
supports-color@^2.0.0:
|
||||
version "2.0.0"
|
||||
|
|
@ -14423,12 +14398,6 @@ supports-color@^7.0.0, supports-color@^7.1.0:
|
|||
dependencies:
|
||||
has-flag "^4.0.0"
|
||||
|
||||
supports-color@^8.0.0, supports-color@^8.1.1:
|
||||
version "8.1.1"
|
||||
resolved "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz"
|
||||
dependencies:
|
||||
has-flag "^4.0.0"
|
||||
|
||||
supports-hyperlinks@^2.0.0:
|
||||
version "2.1.0"
|
||||
resolved "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.1.0.tgz"
|
||||
|
|
@ -15504,24 +15473,18 @@ which-module@^2.0.0:
|
|||
version "2.0.0"
|
||||
resolved "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz"
|
||||
|
||||
which@1.3.1, which@^1.2.14, which@^1.2.9, which@^1.3.1:
|
||||
version "1.3.1"
|
||||
resolved "https://registry.npmjs.org/which/-/which-1.3.1.tgz"
|
||||
dependencies:
|
||||
isexe "^2.0.0"
|
||||
|
||||
which@^2.0.1, which@^2.0.2:
|
||||
which@2.0.2, which@^2.0.1, which@^2.0.2:
|
||||
version "2.0.2"
|
||||
resolved "https://registry.npmjs.org/which/-/which-2.0.2.tgz"
|
||||
integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==
|
||||
dependencies:
|
||||
isexe "^2.0.0"
|
||||
|
||||
wide-align@1.1.3:
|
||||
version "1.1.3"
|
||||
resolved "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz"
|
||||
which@^1.2.14, which@^1.2.9, which@^1.3.1:
|
||||
version "1.3.1"
|
||||
resolved "https://registry.npmjs.org/which/-/which-1.3.1.tgz"
|
||||
dependencies:
|
||||
string-width "^1.0.2 || 2"
|
||||
isexe "^2.0.0"
|
||||
|
||||
wide-align@^1.1.0:
|
||||
version "1.1.5"
|
||||
|
|
@ -15723,6 +15686,11 @@ worker-loader@^3.0.2:
|
|||
loader-utils "^2.0.0"
|
||||
schema-utils "^3.0.0"
|
||||
|
||||
workerpool@6.2.0:
|
||||
version "6.2.0"
|
||||
resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.2.0.tgz#827d93c9ba23ee2019c3ffaff5c27fccea289e8b"
|
||||
integrity sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A==
|
||||
|
||||
wrap-ansi@^5.1.0:
|
||||
version "5.1.0"
|
||||
resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz"
|
||||
|
|
@ -15841,12 +15809,10 @@ yaml@^2.1.1:
|
|||
resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.1.1.tgz#1e06fb4ca46e60d9da07e4f786ea370ed3c3cfec"
|
||||
integrity sha512-o96x3OPo8GjWeSLF+wOAbrPfhFOGY0W00GNaxCDv+9hkcDJEnev1yh8S7pgHF0ik6zc8sQLuL8hjHjJULZp8bw==
|
||||
|
||||
yargs-parser@13.1.2, yargs-parser@^13.1.2:
|
||||
version "13.1.2"
|
||||
resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz"
|
||||
dependencies:
|
||||
camelcase "^5.0.0"
|
||||
decamelize "^1.2.0"
|
||||
yargs-parser@20.2.4:
|
||||
version "20.2.4"
|
||||
resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.4.tgz#b42890f14566796f85ae8e3a25290d205f154a54"
|
||||
integrity sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==
|
||||
|
||||
yargs-parser@20.x:
|
||||
version "20.2.9"
|
||||
|
|
@ -15868,28 +15834,27 @@ yargs-parser@^21.0.0:
|
|||
resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.0.0.tgz"
|
||||
integrity sha512-z9kApYUOCwoeZ78rfRYYWdiU/iNL6mwwYlkkZfJoyMR1xps+NEBX5X7XmRpxkZHhXJ6+Ey00IwKxBBSW9FIjyA==
|
||||
|
||||
yargs-unparser@1.6.0:
|
||||
version "1.6.0"
|
||||
resolved "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-1.6.0.tgz"
|
||||
yargs-unparser@2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/yargs-unparser/-/yargs-unparser-2.0.0.tgz#f131f9226911ae5d9ad38c432fe809366c2325eb"
|
||||
integrity sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==
|
||||
dependencies:
|
||||
flat "^4.1.0"
|
||||
lodash "^4.17.15"
|
||||
yargs "^13.3.0"
|
||||
camelcase "^6.0.0"
|
||||
decamelize "^4.0.0"
|
||||
flat "^5.0.2"
|
||||
is-plain-obj "^2.1.0"
|
||||
|
||||
yargs@13.3.2, yargs@^13.3.0:
|
||||
version "13.3.2"
|
||||
resolved "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz"
|
||||
yargs@16.2.0, yargs@^16.2.0:
|
||||
version "16.2.0"
|
||||
resolved "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz"
|
||||
dependencies:
|
||||
cliui "^5.0.0"
|
||||
find-up "^3.0.0"
|
||||
get-caller-file "^2.0.1"
|
||||
cliui "^7.0.2"
|
||||
escalade "^3.1.1"
|
||||
get-caller-file "^2.0.5"
|
||||
require-directory "^2.1.1"
|
||||
require-main-filename "^2.0.0"
|
||||
set-blocking "^2.0.0"
|
||||
string-width "^3.0.0"
|
||||
which-module "^2.0.0"
|
||||
y18n "^4.0.0"
|
||||
yargs-parser "^13.1.2"
|
||||
string-width "^4.2.0"
|
||||
y18n "^5.0.5"
|
||||
yargs-parser "^20.2.2"
|
||||
|
||||
yargs@^14.2:
|
||||
version "14.2.3"
|
||||
|
|
@ -15907,18 +15872,6 @@ yargs@^14.2:
|
|||
y18n "^4.0.0"
|
||||
yargs-parser "^15.0.1"
|
||||
|
||||
yargs@^16.2.0:
|
||||
version "16.2.0"
|
||||
resolved "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz"
|
||||
dependencies:
|
||||
cliui "^7.0.2"
|
||||
escalade "^3.1.1"
|
||||
get-caller-file "^2.0.5"
|
||||
require-directory "^2.1.1"
|
||||
string-width "^4.2.0"
|
||||
y18n "^5.0.5"
|
||||
yargs-parser "^20.2.2"
|
||||
|
||||
yargs@^17.2.1:
|
||||
version "17.3.1"
|
||||
resolved "https://registry.npmjs.org/yargs/-/yargs-17.3.1.tgz"
|
||||
|
|
|
|||