Merge branch 'release' into fix/Multiselect-style-specificity

This commit is contained in:
Tolulope Adetula 2022-04-01 05:25:20 +01:00
commit d6ee01ca29
154 changed files with 15948 additions and 1911 deletions

View File

@ -1097,7 +1097,7 @@ jobs:
- run: echo "::set-output name=run_result::success" > ~/run_result
ui-test-result:
needs: ui-test
needs: [ui-test, fat-conatiner-test]
# Only run if the ui-test with matrices step is successful
if: always()
runs-on: ubuntu-latest
@ -1209,7 +1209,7 @@ jobs:
run: echo "$PAYLOAD_CONTEXT"
package:
needs: ui-test
needs: [ui-test, fat-conatiner-test]
runs-on: ubuntu-latest
defaults:
run:

View File

@ -1159,7 +1159,7 @@ jobs:
- run: echo "::set-output name=run_result::success" > ~/run_result
ui-test-result:
needs: ui-test
needs: [ui-test, fat-container-test]
if: always() &&
(github.event_name == 'workflow_dispatch' ||
github.event_name == 'push' ||
@ -1220,7 +1220,7 @@ jobs:
fi
package:
needs: ui-test
needs: [ui-test, fat-container-test]
runs-on: ubuntu-latest
# Run this job irrespective of tests failing, if this is the release branch; or only if the tests pass, if this is the master branch.

View File

@ -10,10 +10,12 @@ ENV LANG C.UTF-8
ENV LC_ALL C.UTF-8
# Update APT packages - Base Layer
RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install --no-install-recommends -y \
supervisor curl cron certbot nginx gnupg wget netcat openssh-client \
software-properties-common gettext openjdk-11-jre \
python3-pip python-setuptools git \
RUN apt-get update \
&& apt-get upgrade --yes \
&& DEBIAN_FRONTEND=noninteractive apt-get install --no-install-recommends -y \
supervisor curl cron certbot nginx gnupg wget netcat openssh-client \
software-properties-common gettext openjdk-11-jre \
python3-pip python-setuptools git \
&& add-apt-repository ppa:redislabs/redis \
&& pip install --no-cache-dir git+https://github.com/coderanger/supervisor-stdout@973ba19967cdaf46d9c1634d1675fc65b9574f6e \
&& apt-get remove -y git python3-pip \

View File

@ -8,6 +8,7 @@
# testing
/coverage
/stacks
# production
/build

File diff suppressed because one or more lines are too long

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 MiB

View File

@ -2,91 +2,713 @@
"dsl": {
"widgetName": "MainContainer",
"backgroundColor": "none",
"rightColumn": 776,
"rightColumn": 647,
"snapColumns": 64,
"detachFromLayout": true,
"widgetId": "0",
"topRow": 0,
"bottomRow": 1290,
"bottomRow": 1070,
"containerStyle": "none",
"snapRows": 125,
"snapRows": 104,
"parentRowSpace": 1,
"type": "CANVAS_WIDGET",
"canExtend": true,
"version": 46,
"minHeight": 1292,
"version": 53,
"minHeight": 1050,
"parentColumnSpace": 1,
"dynamicBindingPathList": [
],
"dynamicBindingPathList": [],
"leftColumn": 0,
"children": [
{
"widgetName": "Button1",
"onClick": "{{CatImage.run();\nCatFacts.run();\nDogImage.run();\nDogFacts.run();}}",
"buttonColor": "#03B365",
"dynamicPropertyPathList": [
"template": {
"Image1Copy": {
"widgetName": "Image1Copy",
"displayName": "Image",
"iconSVG": "/static/media/icon.52d8fb96.svg",
"topRow": 1,
"bottomRow": 19,
"parentRowSpace": 10,
"type": "IMAGE_WIDGET",
"hideCard": false,
"animateLoading": true,
"parentColumnSpace": 10.935302734375,
"dynamicTriggerPathList": [],
"imageShape": "RECTANGLE",
"leftColumn": 1,
"dynamicBindingPathList": [
{
"key": "image"
}
],
"defaultImage": "https://assets.appsmith.com/widgets/default.png",
"key": "k7gqsx8va7",
"image": "{{List1.listData.map((currentItem) => currentItem.image)}}",
"rightColumn": 13,
"objectFit": "contain",
"widgetId": "6xs9n3qas8",
"logBlackList": {
"isVisible": true,
"defaultImage": true,
"imageShape": true,
"maxZoomLevel": true,
"enableRotation": true,
"enableDownload": true,
"objectFit": true,
"image": true,
"widgetName": true,
"version": true,
"animateLoading": true,
"type": true,
"hideCard": true,
"displayName": true,
"key": true,
"iconSVG": true,
"isCanvas": true,
"minHeight": true,
"widgetId": true,
"renderMode": true,
"isLoading": true,
"parentColumnSpace": true,
"parentRowSpace": true,
"leftColumn": true,
"rightColumn": true,
"topRow": true,
"bottomRow": true,
"parentId": true
},
"isVisible": true,
"version": 1,
"parentId": "ukkqmnxanx",
"renderMode": "CANVAS",
"isLoading": false,
"maxZoomLevel": 1,
"enableDownload": false,
"enableRotation": false
},
"Canvas1": {
"widgetName": "Canvas1",
"displayName": "Canvas",
"topRow": 0,
"bottomRow": 390,
"parentRowSpace": 1,
"type": "CANVAS_WIDGET",
"canExtend": false,
"hideCard": true,
"dropDisabled": true,
"openParentPropertyPane": true,
"minHeight": 400,
"noPad": true,
"parentColumnSpace": 1,
"leftColumn": 0,
"children": [
"mno4dkclkn"
],
"key": "st5e69fis5",
"rightColumn": 472.125,
"detachFromLayout": true,
"widgetId": "i7op8tv8mv",
"containerStyle": "none",
"isVisible": true,
"version": 1,
"parentId": "lkyh2v8k8s",
"renderMode": "CANVAS",
"isLoading": false
},
"Container1": {
"boxShadow": "NONE",
"widgetName": "Container1",
"borderColor": "transparent",
"disallowCopy": true,
"isCanvas": true,
"displayName": "Container",
"iconSVG": "/static/media/icon.1977dca3.svg",
"topRow": 0,
"bottomRow": 22,
"dragDisabled": true,
"type": "CONTAINER_WIDGET",
"hideCard": false,
"openParentPropertyPane": true,
"isDeletable": false,
"animateLoading": true,
"leftColumn": 0,
"children": [
"ukkqmnxanx"
],
"borderWidth": "0",
"key": "c509lus1x5",
"disablePropertyPane": true,
"backgroundColor": "white",
"rightColumn": 64,
"widgetId": "mno4dkclkn",
"containerStyle": "card",
"isVisible": true,
"version": 1,
"parentId": "i7op8tv8mv",
"renderMode": "CANVAS",
"isLoading": false,
"borderRadius": "0"
},
"Canvas2": {
"widgetName": "Canvas2",
"detachFromLayout": true,
"displayName": "Canvas",
"widgetId": "ukkqmnxanx",
"containerStyle": "none",
"topRow": 0,
"bottomRow": 210,
"parentRowSpace": 1,
"isVisible": true,
"type": "CANVAS_WIDGET",
"canExtend": false,
"version": 1,
"hideCard": true,
"parentId": "mno4dkclkn",
"renderMode": "CANVAS",
"isLoading": false,
"parentColumnSpace": 1,
"leftColumn": 0,
"children": [
"6xs9n3qas8",
"ii4kp8uzl9",
"bx88oni4aa"
],
"key": "st5e69fis5"
},
"Text1": {
"widgetName": "Text1",
"displayName": "Text",
"iconSVG": "/static/media/icon.97c59b52.svg",
"topRow": 1,
"bottomRow": 5,
"parentRowSpace": 10,
"type": "TEXT_WIDGET",
"hideCard": false,
"animateLoading": true,
"parentColumnSpace": 10.935302734375,
"dynamicTriggerPathList": [],
"leftColumn": 14,
"dynamicBindingPathList": [
{
"key": "text"
}
],
"shouldTruncate": false,
"truncateButtonColor": "#FFC13D",
"text": "{{List1.listData.map((currentItem) => 'Drink Name: ' + currentItem.name)}}",
"key": "pwuql7fds3",
"rightColumn": 40,
"textAlign": "LEFT",
"widgetId": "ii4kp8uzl9",
"logBlackList": {
"isVisible": true,
"text": true,
"fontSize": true,
"fontStyle": true,
"textAlign": true,
"textColor": true,
"truncateButtonColor": true,
"widgetName": true,
"shouldScroll": true,
"shouldTruncate": true,
"version": true,
"animateLoading": true,
"type": true,
"hideCard": true,
"displayName": true,
"key": true,
"iconSVG": true,
"isCanvas": true,
"minHeight": true,
"widgetId": true,
"renderMode": true,
"isLoading": true,
"parentColumnSpace": true,
"parentRowSpace": true,
"leftColumn": true,
"rightColumn": true,
"topRow": true,
"bottomRow": true,
"parentId": true
},
"isVisible": true,
"fontStyle": "BOLD",
"textColor": "#231F20",
"shouldScroll": false,
"version": 1,
"parentId": "ukkqmnxanx",
"renderMode": "CANVAS",
"isLoading": false,
"fontSize": "PARAGRAPH"
},
"Text2": {
"widgetName": "Text2",
"displayName": "Text",
"iconSVG": "/static/media/icon.97c59b52.svg",
"topRow": 5,
"bottomRow": 19,
"parentRowSpace": 10,
"type": "TEXT_WIDGET",
"hideCard": false,
"animateLoading": true,
"parentColumnSpace": 10.935302734375,
"dynamicTriggerPathList": [],
"leftColumn": 14,
"dynamicBindingPathList": [
{
"key": "text"
}
],
"shouldTruncate": false,
"truncateButtonColor": "#FFC13D",
"text": "{{List1.listData.map((currentItem) => currentItem.instruction)}}",
"key": "pwuql7fds3",
"rightColumn": 62,
"textAlign": "LEFT",
"widgetId": "bx88oni4aa",
"logBlackList": {
"isVisible": true,
"text": true,
"fontSize": true,
"fontStyle": true,
"textAlign": true,
"textColor": true,
"truncateButtonColor": true,
"widgetName": true,
"shouldScroll": true,
"shouldTruncate": true,
"version": true,
"animateLoading": true,
"type": true,
"hideCard": true,
"displayName": true,
"key": true,
"iconSVG": true,
"isCanvas": true,
"minHeight": true,
"widgetId": true,
"renderMode": true,
"isLoading": true,
"parentColumnSpace": true,
"parentRowSpace": true,
"leftColumn": true,
"rightColumn": true,
"topRow": true,
"bottomRow": true,
"parentId": true
},
"isVisible": true,
"fontStyle": "BOLD",
"textColor": "#231F20",
"shouldScroll": false,
"version": 1,
"parentId": "ukkqmnxanx",
"renderMode": "CANVAS",
"isLoading": false,
"fontSize": "PARAGRAPH"
}
},
"widgetName": "List1",
"listData": "{{CocktailDB.data.drinks.map(item => {\n\treturn {\n\t\timage: item.strDrinkThumb,\n\t\tname: item.strDrink,\n\t\tinstruction: item.strInstructions\n\t}\n})}}",
"isCanvas": true,
"displayName": "List",
"iconSVG": "/static/media/icon.9925ee17.svg",
"topRow": 29,
"bottomRow": 104,
"parentRowSpace": 10,
"type": "LIST_WIDGET",
"hideCard": false,
"gridGap": 0,
"animateLoading": true,
"parentColumnSpace": 19.671875,
"dynamicTriggerPathList": [],
"leftColumn": 12,
"dynamicBindingPathList": [
{
"key": "onClick"
"key": "template.Text1.text"
},
{
"key": "listData"
},
{
"key": "template.Image1Copy.image"
},
{
"key": "template.Text2.text"
},
{
"key": "template.Image1Copy.image"
},
{
"key": "template.Text1.text"
},
{
"key": "template.Text2.text"
}
],
"gridType": "vertical",
"enhancements": true,
"children": [
{
"widgetName": "Canvas1",
"displayName": "Canvas",
"topRow": 0,
"bottomRow": 390,
"parentRowSpace": 1,
"type": "CANVAS_WIDGET",
"canExtend": false,
"hideCard": true,
"dropDisabled": true,
"openParentPropertyPane": true,
"minHeight": 400,
"noPad": true,
"parentColumnSpace": 1,
"leftColumn": 0,
"children": [
{
"boxShadow": "NONE",
"widgetName": "Container1",
"borderColor": "transparent",
"disallowCopy": true,
"isCanvas": true,
"displayName": "Container",
"iconSVG": "/static/media/icon.1977dca3.svg",
"topRow": 0,
"bottomRow": 22,
"dragDisabled": true,
"type": "CONTAINER_WIDGET",
"hideCard": false,
"openParentPropertyPane": true,
"isDeletable": false,
"animateLoading": true,
"leftColumn": 0,
"children": [
{
"widgetName": "Canvas2",
"detachFromLayout": true,
"displayName": "Canvas",
"widgetId": "ukkqmnxanx",
"containerStyle": "none",
"topRow": 0,
"bottomRow": 210,
"parentRowSpace": 1,
"isVisible": true,
"type": "CANVAS_WIDGET",
"canExtend": false,
"version": 1,
"hideCard": true,
"parentId": "mno4dkclkn",
"renderMode": "CANVAS",
"isLoading": false,
"parentColumnSpace": 1,
"leftColumn": 0,
"children": [
{
"widgetName": "Image1Copy",
"displayName": "Image",
"iconSVG": "/static/media/icon.52d8fb96.svg",
"topRow": 1,
"bottomRow": 19,
"parentRowSpace": 10,
"type": "IMAGE_WIDGET",
"hideCard": false,
"animateLoading": true,
"parentColumnSpace": 10.935302734375,
"dynamicTriggerPathList": [],
"imageShape": "RECTANGLE",
"leftColumn": 1,
"dynamicBindingPathList": [
{
"key": "image"
}
],
"defaultImage": "https://assets.appsmith.com/widgets/default.png",
"key": "k7gqsx8va7",
"image": "{{currentItem.image}}",
"rightColumn": 13,
"objectFit": "contain",
"widgetId": "6xs9n3qas8",
"logBlackList": {
"isVisible": true,
"defaultImage": true,
"imageShape": true,
"maxZoomLevel": true,
"enableRotation": true,
"enableDownload": true,
"objectFit": true,
"image": true,
"widgetName": true,
"version": true,
"animateLoading": true,
"type": true,
"hideCard": true,
"displayName": true,
"key": true,
"iconSVG": true,
"isCanvas": true,
"minHeight": true,
"widgetId": true,
"renderMode": true,
"isLoading": true,
"parentColumnSpace": true,
"parentRowSpace": true,
"leftColumn": true,
"rightColumn": true,
"topRow": true,
"bottomRow": true,
"parentId": true
},
"isVisible": true,
"version": 1,
"parentId": "ukkqmnxanx",
"renderMode": "CANVAS",
"isLoading": false,
"maxZoomLevel": 1,
"enableDownload": false,
"enableRotation": false
},
{
"widgetName": "Text1",
"displayName": "Text",
"iconSVG": "/static/media/icon.97c59b52.svg",
"topRow": 1,
"bottomRow": 5,
"parentRowSpace": 10,
"type": "TEXT_WIDGET",
"hideCard": false,
"animateLoading": true,
"parentColumnSpace": 10.935302734375,
"dynamicTriggerPathList": [],
"leftColumn": 14,
"dynamicBindingPathList": [
{
"key": "text"
}
],
"shouldTruncate": false,
"truncateButtonColor": "#FFC13D",
"text": "Drink Name: {{currentItem.name}}",
"key": "pwuql7fds3",
"rightColumn": 40,
"textAlign": "LEFT",
"widgetId": "ii4kp8uzl9",
"logBlackList": {
"isVisible": true,
"text": true,
"fontSize": true,
"fontStyle": true,
"textAlign": true,
"textColor": true,
"truncateButtonColor": true,
"widgetName": true,
"shouldScroll": true,
"shouldTruncate": true,
"version": true,
"animateLoading": true,
"type": true,
"hideCard": true,
"displayName": true,
"key": true,
"iconSVG": true,
"isCanvas": true,
"minHeight": true,
"widgetId": true,
"renderMode": true,
"isLoading": true,
"parentColumnSpace": true,
"parentRowSpace": true,
"leftColumn": true,
"rightColumn": true,
"topRow": true,
"bottomRow": true,
"parentId": true
},
"isVisible": true,
"fontStyle": "BOLD",
"textColor": "#231F20",
"shouldScroll": false,
"version": 1,
"parentId": "ukkqmnxanx",
"renderMode": "CANVAS",
"isLoading": false,
"fontSize": "PARAGRAPH"
},
{
"widgetName": "Text2",
"displayName": "Text",
"iconSVG": "/static/media/icon.97c59b52.svg",
"topRow": 5,
"bottomRow": 19,
"parentRowSpace": 10,
"type": "TEXT_WIDGET",
"hideCard": false,
"animateLoading": true,
"parentColumnSpace": 10.935302734375,
"dynamicTriggerPathList": [],
"leftColumn": 14,
"dynamicBindingPathList": [
{
"key": "text"
}
],
"shouldTruncate": false,
"truncateButtonColor": "#FFC13D",
"text": "{{currentItem.instruction}}",
"key": "pwuql7fds3",
"rightColumn": 62,
"textAlign": "LEFT",
"widgetId": "bx88oni4aa",
"logBlackList": {
"isVisible": true,
"text": true,
"fontSize": true,
"fontStyle": true,
"textAlign": true,
"textColor": true,
"truncateButtonColor": true,
"widgetName": true,
"shouldScroll": true,
"shouldTruncate": true,
"version": true,
"animateLoading": true,
"type": true,
"hideCard": true,
"displayName": true,
"key": true,
"iconSVG": true,
"isCanvas": true,
"minHeight": true,
"widgetId": true,
"renderMode": true,
"isLoading": true,
"parentColumnSpace": true,
"parentRowSpace": true,
"leftColumn": true,
"rightColumn": true,
"topRow": true,
"bottomRow": true,
"parentId": true
},
"isVisible": true,
"fontStyle": "BOLD",
"textColor": "#231F20",
"shouldScroll": false,
"version": 1,
"parentId": "ukkqmnxanx",
"renderMode": "CANVAS",
"isLoading": false,
"fontSize": "PARAGRAPH"
}
],
"key": "st5e69fis5"
}
],
"borderWidth": "0",
"key": "c509lus1x5",
"disablePropertyPane": true,
"backgroundColor": "white",
"rightColumn": 64,
"widgetId": "mno4dkclkn",
"containerStyle": "card",
"isVisible": true,
"version": 1,
"parentId": "i7op8tv8mv",
"renderMode": "CANVAS",
"isLoading": false,
"borderRadius": "0"
}
],
"key": "st5e69fis5",
"rightColumn": 472.125,
"detachFromLayout": true,
"widgetId": "i7op8tv8mv",
"containerStyle": "none",
"isVisible": true,
"version": 1,
"parentId": "lkyh2v8k8s",
"renderMode": "CANVAS",
"isLoading": false
}
],
"privateWidgets": {
"Image1Copy": true,
"Text1": true,
"Text2": true
},
"key": "zh4de7als8",
"backgroundColor": "transparent",
"rightColumn": 53,
"itemBackgroundColor": "#FFFFFF",
"widgetId": "lkyh2v8k8s",
"isVisible": true,
"parentId": "0",
"renderMode": "CANVAS",
"isLoading": false
},
{
"widgetName": "Button1",
"buttonColor": "#03B365",
"displayName": "Button",
"iconSVG": "/static/media/icon.cca02633.svg",
"topRow": 18,
"bottomRow": 22,
"topRow": 3,
"bottomRow": 7,
"parentRowSpace": 10,
"type": "BUTTON_WIDGET",
"hideCard": false,
"parentColumnSpace": 16.921875,
"animateLoading": true,
"parentColumnSpace": 19.671875,
"dynamicTriggerPathList": [
{
"key": "onClick"
}
],
"leftColumn": 24,
"dynamicBindingPathList": [
],
"text": "Get Facts!",
"leftColumn": 25,
"dynamicBindingPathList": [],
"text": "Invoke APIs!",
"isDisabled": false,
"key": "lys38w8oo5",
"rightColumn": 40,
"key": "f4fix3idzp",
"rightColumn": 41,
"isDefaultClickDisabled": true,
"widgetId": "4q03mtvedv",
"recaptchaV2": false,
"widgetId": "c552h69exh",
"isVisible": true,
"recaptchaType": "V3",
"version": 1,
"parentId": "0",
"renderMode": "CANVAS",
"isLoading": false,
"buttonVariant": "PRIMARY"
"buttonVariant": "PRIMARY",
"placement": "CENTER",
"onClick": "{{CatImage.run();\nDogImage.run();\nNumberFact.run();\nCocktailDB.run()}}",
"dynamicPropertyPathList": [
{
"key": "onClick"
}
]
},
{
"widgetName": "Image1",
"displayName": "Image",
"iconSVG": "/static/media/icon.52d8fb96.svg",
"topRow": 24,
"bottomRow": 41,
"topRow": 9,
"bottomRow": 28,
"parentRowSpace": 10,
"type": "IMAGE_WIDGET",
"hideCard": false,
"parentColumnSpace": 16.921875,
"dynamicTriggerPathList": [
],
"animateLoading": true,
"parentColumnSpace": 19.671875,
"dynamicTriggerPathList": [],
"imageShape": "RECTANGLE",
"leftColumn": 11,
"leftColumn": 12,
"dynamicBindingPathList": [
{
"key": "image"
}
],
"defaultImage": "https://assets.appsmith.com/widgets/default.png",
"key": "khcxwti5gq",
"key": "k7gqsx8va7",
"image": "{{CatImage.data[0].url}}",
"rightColumn": 31,
"objectFit": "cover",
"widgetId": "t9b2aacss5",
"rightColumn": 24,
"objectFit": "contain",
"widgetId": "14dy28sgfl",
"isVisible": true,
"version": 1,
"parentId": "0",
@ -100,28 +722,27 @@
"widgetName": "Image2",
"displayName": "Image",
"iconSVG": "/static/media/icon.52d8fb96.svg",
"topRow": 24,
"bottomRow": 41,
"topRow": 9,
"bottomRow": 28,
"parentRowSpace": 10,
"type": "IMAGE_WIDGET",
"hideCard": false,
"parentColumnSpace": 16.921875,
"dynamicTriggerPathList": [
],
"animateLoading": true,
"parentColumnSpace": 19.671875,
"dynamicTriggerPathList": [],
"imageShape": "RECTANGLE",
"leftColumn": 33,
"leftColumn": 25,
"dynamicBindingPathList": [
{
"key": "image"
}
],
"defaultImage": "https://assets.appsmith.com/widgets/default.png",
"key": "khcxwti5gq",
"key": "k7gqsx8va7",
"image": "{{DogImage.data.message}}",
"rightColumn": 54,
"objectFit": "cover",
"widgetId": "v4iy6l1z9x",
"rightColumn": 37,
"objectFit": "contain",
"widgetId": "ctl1a3f5iq",
"isVisible": true,
"version": 1,
"parentId": "0",
@ -132,65 +753,34 @@
"enableRotation": false
},
{
"widgetName": "Text1",
"widgetName": "Text3",
"displayName": "Text",
"iconSVG": "/static/media/icon.97c59b52.svg",
"topRow": 45,
"bottomRow": 65,
"topRow": 9,
"bottomRow": 28,
"parentRowSpace": 10,
"type": "TEXT_WIDGET",
"hideCard": false,
"parentColumnSpace": 16.921875,
"dynamicTriggerPathList": [
],
"leftColumn": 6,
"animateLoading": true,
"parentColumnSpace": 19.671875,
"dynamicTriggerPathList": [],
"leftColumn": 38,
"dynamicBindingPathList": [
{
"key": "text"
}
],
"text": "{{CatFacts.data.text}}",
"key": "7tipkwe4lq",
"rightColumn": 31,
"shouldTruncate": false,
"truncateButtonColor": "#FFC13D",
"text": "Number fact for you: {{NumberFact.data}}",
"key": "pwuql7fds3",
"rightColumn": 53,
"textAlign": "CENTER",
"widgetId": "d5shcrpvxp",
"widgetId": "mvtnucnzf7",
"isVisible": true,
"fontStyle": "ITALIC,BOLD",
"textColor": "#231F20",
"version": 1,
"parentId": "0",
"renderMode": "CANVAS",
"isLoading": false,
"fontSize": "PARAGRAPH"
},
{
"widgetName": "Text2",
"displayName": "Text",
"iconSVG": "/static/media/icon.97c59b52.svg",
"topRow": 45,
"bottomRow": 65,
"parentRowSpace": 10,
"type": "TEXT_WIDGET",
"hideCard": false,
"parentColumnSpace": 16.921875,
"dynamicTriggerPathList": [
],
"leftColumn": 33,
"dynamicBindingPathList": [
{
"key": "text"
}
],
"text": "{{DogFacts.data.text}}",
"key": "7tipkwe4lq",
"rightColumn": 59,
"textAlign": "CENTER",
"widgetId": "sqllxxccb7",
"isVisible": true,
"fontStyle": "BOLD,ITALIC",
"fontStyle": "BOLD",
"textColor": "#231F20",
"shouldScroll": false,
"version": 1,
"parentId": "0",
"renderMode": "CANVAS",

View File

@ -46,4 +46,4 @@
"mockDatabasePassword": "LimitedAccess123#",
"readonly":"readonly",
"authenticatedApiUrl": "https://fakeapi.com"
}
}

View File

@ -172,7 +172,7 @@
"type": "LIST_WIDGET",
"isLoading": false,
"parentColumnSpace": 57.875,
"parentRowSpace": 10,
"parentRowSpace": 40,
"leftColumn": 4,
"rightColumn": 12,
"topRow": 2,

View File

@ -0,0 +1,93 @@
{
"dsl": {
"widgetName": "MainContainer",
"backgroundColor": "none",
"rightColumn": 539,
"snapColumns": 64,
"detachFromLayout": true,
"widgetId": "0",
"topRow": 0,
"bottomRow": 1320,
"containerStyle": "none",
"snapRows": 125,
"parentRowSpace": 1,
"type": "CANVAS_WIDGET",
"canExtend": true,
"version": 53,
"minHeight": 1292,
"parentColumnSpace": 1,
"dynamicBindingPathList": [],
"leftColumn": 0,
"children": [
{
"widgetName": "FilePicker1",
"dynamicPropertyPathList": [],
"displayName": "FilePicker",
"iconSVG": "/static/media/icon.7c5ad9c3.svg",
"topRow": 19,
"bottomRow": 23,
"parentRowSpace": 10,
"allowedFileTypes": [],
"type": "FILE_PICKER_WIDGET_V2",
"hideCard": false,
"animateLoading": true,
"parentColumnSpace": 16.921875,
"dynamicTriggerPathList": [
{
"key": "onFilesSelected"
}
],
"leftColumn": 24,
"dynamicBindingPathList": [],
"isDisabled": false,
"key": "p3l7kkj73w",
"onFilesSelected": "",
"isRequired": false,
"rightColumn": 40,
"isDefaultClickDisabled": true,
"widgetId": "fa9qrs8i86",
"isVisible": true,
"label": "Select Files",
"maxFileSize": 5,
"version": 1,
"fileDataType": "Base64",
"parentId": "0",
"selectedFiles": [],
"renderMode": "CANVAS",
"isLoading": false,
"files": [],
"maxNumFiles": 1
},
{
"widgetName": "Image1",
"displayName": "Image",
"iconSVG": "/static/media/icon.52d8fb96.svg",
"topRow": 26,
"bottomRow": 71,
"parentRowSpace": 10,
"type": "IMAGE_WIDGET",
"hideCard": false,
"animateLoading": true,
"parentColumnSpace": 16.921875,
"dynamicTriggerPathList": [],
"imageShape": "RECTANGLE",
"leftColumn": 18,
"dynamicBindingPathList": [],
"defaultImage": "",
"key": "tfm5uqw4f4",
"image": "",
"rightColumn": 46,
"objectFit": "contain",
"widgetId": "m59cig84vv",
"isVisible": true,
"version": 1,
"parentId": "0",
"renderMode": "CANVAS",
"isLoading": false,
"maxZoomLevel": 1,
"enableDownload": false,
"enableRotation": false
}
]
}
}

View File

@ -137,5 +137,9 @@
"apiContentTypeForm": "tab--FORM_URLENCODED",
"apiContentTypeMultiPart": "tab--MULTIPART_FORM_DATA",
"noBodyErrorMessageDiv": "#NoBodyMessageDiv",
"noBodyErrorMessage": "This request does not have a body"
"noBodyErrorMessage": "This request does not have a body",
"v2Key": "6LeIxAcTAAAAAJcZVRqyHh71UMIEGNQ_MXjiZKhI",
"v3Key": "6LcnzQgfAAAAAMwMlQLppqx7STvZ6pZJoDMXti8k",
"invalidKey": "abc123",
"errorMsg": "Google Re-Captcha token generation failed! Please check the Re-captcha site key."
}

View File

@ -1,4 +1,5 @@
import "cypress-xpath";
import "cypress-file-upload";
// data: string;
// cy.fixture("example").then(function (data) {

View File

@ -0,0 +1,564 @@
/// <reference types="Cypress" />
import { ObjectsRegistry } from "../../../support/Objects/Registry";
let homePage = ObjectsRegistry.HomePage,
dataSources = ObjectsRegistry.DataSources,
table = ObjectsRegistry.Table,
agHelper = ObjectsRegistry.AggregateHelper,
ee = ObjectsRegistry.EntityExplorer,
jsEditor = ObjectsRegistry.JSEditor;
describe("AForce - Community Issues page validations", function () {
let reconnect = true, selectedRow: number;
it("1. Import application json and validate headers", () => {
homePage.ImportApp("AForceMigrationExport.json", reconnect)
if (reconnect)
dataSources.ReconnectDataSourcePostgres("AForceDB")
//Validate table is not empty!
table.WaitUntilTableLoad()
//Validating order of header columns!
table.AssertTableHeaderOrder("TypeTitleStatus+1CommentorsVotesAnswerUpVoteStatesupvote_ididgithub_issue_idauthorcreated_atdescriptionlabelsstatelinkupdated_at")
//Validating hidden columns:
table.AssertHiddenColumns(['States', 'upvote_id', 'id', 'github_issue_id', 'author', 'created_at', 'description', 'labels', 'state', 'link', 'updated_at'])
});
it("2. Validate table navigation with Server Side pagination enabled with Default selected row", () => {
ee.expandCollapseEntity("WIDGETS")
ee.SelectEntityByName("Table1")
agHelper.AssertExistingToggleState("serversidepagination", 'checked')
agHelper.EvaluateExistingPropertyFieldValue("Default Selected Row")
.then($selectedRow => {
selectedRow = Number($selectedRow);
table.AssertSelectedRow(selectedRow)
});
agHelper.DeployApp()
table.WaitUntilTableLoad()
//Verify hidden columns are infact hidden in deployed app!
table.AssertTableHeaderOrder("TypeTitleStatus+1CommentorsVotesAnswerUpVote")//from case #1
table.AssertSelectedRow(selectedRow)//Assert default selected row
table.AssertPageNumber(1);
table.NavigateToNextPage()//page 2
agHelper.Sleep(3000)//wait for table navigation to take effect!
table.WaitUntilTableLoad()
table.AssertSelectedRow(selectedRow)
table.NavigateToNextPage()//page 3
agHelper.Sleep(3000)//wait for table navigation to take effect!
table.WaitForTableEmpty()//page 3
table.NavigateToPreviousPage()//page 2
agHelper.Sleep(3000)//wait for table navigation to take effect!
table.WaitUntilTableLoad()
table.AssertSelectedRow(selectedRow)
table.NavigateToPreviousPage()//page 1
agHelper.Sleep(3000)//wait for table navigation to take effect!
table.WaitUntilTableLoad()
table.AssertSelectedRow(selectedRow)
table.AssertPageNumber(1);
})
it("3. Validate table navigation with Server Side pagination disabled with Default selected row selection", () => {
agHelper.NavigateBacktoEditor()
table.WaitUntilTableLoad()
ee.expandCollapseEntity("WIDGETS")
ee.SelectEntityByName("Table1")
agHelper.ToggleOnOrOff('serversidepagination', 'Off')
agHelper.DeployApp()
table.WaitUntilTableLoad()
table.AssertPageNumber(1, 'Off');
table.AssertSelectedRow(selectedRow)
agHelper.NavigateBacktoEditor()
table.WaitUntilTableLoad()
ee.SelectEntityByName("Table1")
agHelper.ToggleOnOrOff('serversidepagination', 'On')
});
it("4. Change Default selected row in table and verify", () => {
jsEditor.EnterJSContext("defaultselectedrow", "1", true)
agHelper.DeployApp()
table.WaitUntilTableLoad()
table.AssertPageNumber(1);
table.AssertSelectedRow(1)
table.NavigateToNextPage()//page 2
table.AssertPageNumber(2);
table.AssertSelectedRow(1)
agHelper.NavigateBacktoEditor()
table.WaitUntilTableLoad()
});
// it("4. Verify Default search text in table as per 'Default Search Text' property set", () => {
// });
// it.skip("5. Validate Search table with Client Side Search enabled & disabled", () => {
// })
// it.skip("6. Validate Filter table", () => {
// })
// it.skip("7. Validate Filter table", () => {
// })
// it.skip("8. Validate Updating issue from Details tab", () => {
// })
// it.skip("9. Validate Adding a New issue from Add Modal", () => {
// })
// it.skip("10. Validate Deleting the newly created issue", () => {
// //Validating Id column sorting happens as Datatype is Number in app!
// cy.xpath(
// "//div[@class='tableWrap']//div[@class='thead']//div[@class='tr'][1]//div[@role='columnheader']//div[text()='id']",
// )
// .click()
// .wait(2000);
// cy.readTabledataPublish("0", "1").then((cellData) => {
// expect(cellData).to.be.equal("100");
// });
// cy.readTabledataPublish("1", "1").then((cellData) => {
// expect(cellData).to.be.equal("99");
// });
// cy.readTabledataPublish("2", "1").then((cellData) => {
// expect(cellData).to.be.equal("98");
// });
// //Revert the Id column sorting!
// cy.xpath(
// "//div[@class='tableWrap']//div[@class='thead']//div[@class='tr'][1]//div[@role='columnheader']//div[text()='id']",
// )
// .click()
// .wait(2000);
// cy.readTabledataPublish("0", "1").then((cellData) => {
// expect(cellData).to.be.equal("1");
// });
// cy.readTabledataPublish("1", "1").then((cellData) => {
// expect(cellData).to.be.equal("2");
// });
// cy.readTabledataPublish("2", "1").then((cellData) => {
// expect(cellData).to.be.equal("3");
// });
// //Validating image column is present:
// cy.getTableDataSelector("0", "10").then((selector) => {
// cy.get(selector + " div")
// .invoke("attr", "class")
// .then((classes) => {
// cy.log("classes are:" + classes);
// expect(classes).to.eq("image-cell");
// });
// });
// //Card Number mapping to text widget!
// cy.isSelectRow(2);
// cy.wait(2500); //time for table row select to reflect!
// cy.readTabledataPublish("2", "0").then((cardNumber) => {
// cy.xpath("//div[contains(@class, ' t--widget-textwidget')][1]")
// .eq(1)
// .invoke("text")
// .then((cardNo) => {
// var format = /^\d{4}-\d{4}-\d{4}(-\d{4})?$/;
// expect(cardNumber).match(format);
// expect(cardNumber).to.be.equal(cardNo);
// });
// });
// //Address mapping to text widget!
// cy.readTabledataPublish("2", "4").then((address) => {
// cy.xpath("//div[contains(@class, ' t--widget-textwidget')][2]")
// .eq(1)
// .invoke("text")
// .then((addr) => {
// expect(address.replace(/\r?\n|\r/, "")).to.eq(addr);
// });
// });
// //Validating Available limit column computation maintained!
// cy.readTabledataPublish("2", "16").then((availLimit) => {
// cy.readTabledataPublish("2", "13").then((creditLimit) => {
// cy.readTabledataPublish("2", "14").then((outstanding) => {
// expect(Number(availLimit)).to.eq(creditLimit - outstanding);
// });
// });
// });
// //Validating State button click & binding & text widget mapping!
// cy.getTableDataSelector("2", "15").then((selector) => {
// cy.get(selector + " button.bp3-button")
// .click()
// .wait(3000);
// cy.waitUntil(
// () =>
// cy
// .xpath("//div[contains(@class, ' t--widget-textwidget')][2]", {
// timeout: 30000,
// })
// .eq(0)
// .should("contain.text", "State:"),
// {
// errorMsg: "Execute call did not complete evn after 10 secs",
// timeout: 20000,
// interval: 1000,
// },
// ).then(() => cy.wait(500));
// cy.get(selector + " button span")
// .invoke("text")
// .then((statetxt) => {
// cy.xpath("//div[contains(@class, ' t--widget-textwidget')][2]")
// .eq(0)
// .invoke("text")
// .then((txtWidtxt) => {
// cy.log("statetxt is:" + statetxt);
// let text =
// statetxt == "Activate" ? "State:Inactive" : "State:Active";
// expect(text).to.eq(txtWidtxt);
// });
// });
// });
// //Validating Image URL click & navigation!
// cy.getTableDataSelector("2", "19").then((selector) => {
// // Stubbing window.open to open in the same tab
// cy.window().then((window) => {
// cy.stub(window, "open").callsFake((url) => {
// window.location.href = url; //.substring(1);
// window.location.target = "_self";
// });
// });
// cy.get(selector + " span.bp3-popover-target span")
// .invoke("text")
// .then((url) => {
// cy.get(selector + " span.bp3-popover-target")
// .click()
// .wait(2000);
// cy.wait("@postExecute");
// cy.url().should("contain", url);
// cy.go(-1);
// });
// });
// // cy.wait(4000);
// // cy.get("div.tableWrap").should("be.visible"); //wait for page load!
// cy.waitUntil(
// () => cy.get("div.tableWrap", { timeout: 30000 }).should("be.visible"),
// {
// errorMsg: "Page is not loaded evn after 10 secs",
// timeout: 30000,
// interval: 2000,
// },
// ).then(() => cy.wait(1000)); //wait for page load!
// cy.isSelectRow(2); //as aft refresh row selection is also gone
// cy.getTableDataSelector("2", "18").then((selector) => {
// cy.get(selector + " button")
// .click()
// .wait(1000);
// cy.xpath(
// "//div//a[contains(@class, 'bp3-menu-item')]/div[text()='AddcreditLimit']/parent::a",
// )
// .click()
// .wait(2000);
// cy.waitUntil(
// () =>
// cy
// .xpath("//div[contains(@class, ' t--widget-textwidget')][1]", {
// timeout: 30000,
// })
// .eq(0)
// .should("contain.text", "CreditLimit:"),
// {
// errorMsg: "Execute call did not complete evn after 10 secs",
// timeout: 20000,
// interval: 1000,
// },
// ).then(() => cy.wait(500)); //allow time for n/w to finish
// cy.xpath("//div[contains(@class, ' t--widget-textwidget')][1]", {
// timeout: 30000,
// })
// .eq(0)
// .invoke("text")
// .then((addreduce) => {
// expect(addreduce).to.eq("CreditLimit:Add");
// });
// });
// //Manu Btn validation: - 2nd menu item
// cy.getTableDataSelector("2", "18").then((selector) => {
// cy.get(selector + " button")
// .click()
// .wait(1000);
// cy.xpath(
// "//div//a[contains(@class, 'bp3-menu-item')]/div[text()='Reducecreditlimit']/parent::a",
// )
// .click()
// .wait(2000);
// cy.waitUntil(
// () =>
// cy
// .xpath("//div[contains(@class, ' t--widget-textwidget')][1]", {
// timeout: 30000,
// })
// .eq(0)
// .should("contain.text", "CreditLimit:"),
// {
// errorMsg: "Execute call did not complete evn after 10 secs",
// timeout: 20000,
// interval: 1000,
// },
// ).then(() => cy.wait(500)); //allow time for n/w to finish
// cy.xpath("//div[contains(@class, ' t--widget-textwidget')][1]", {
// timeout: 30000,
// })
// .eq(0)
// .invoke("text")
// .then((addreduce) => {
// expect(addreduce).to.eq("CreditLimit:Reduce");
// });
// });
// //Another row!
// //Card Number mapping to text widget!
// cy.isSelectRow(4);
// cy.wait(2500); //time for table row select to reflect!
// cy.readTabledataPublish("4", "0").then((cardNumber) => {
// cy.xpath("//div[contains(@class, ' t--widget-textwidget')][1]")
// .eq(1)
// .invoke("text")
// .then((cardNo) => {
// var format = /^\d{4}-\d{4}-\d{4}(-\d{4})?$/;
// expect(cardNumber).match(format);
// expect(cardNumber).to.be.equal(cardNo);
// });
// });
// //Address mapping to text widget!
// cy.readTabledataPublish("4", "4").then((address) => {
// cy.xpath("//div[contains(@class, ' t--widget-textwidget')][2]")
// .eq(1)
// .invoke("text")
// .then((addr) => {
// expect(address.replace(/\r?\n|\r/, "")).to.eq(addr);
// });
// });
// //Validating Available limit column computation maintained!
// cy.readTabledataPublish("4", "16").then((availLimit) => {
// cy.readTabledataPublish("4", "13").then((creditLimit) => {
// cy.readTabledataPublish("4", "14").then((outstanding) => {
// expect(Number(availLimit)).to.eq(creditLimit - outstanding);
// });
// });
// });
// //Validating State button click & binding & text widget mapping!
// cy.getTableDataSelector("4", "15").then((selector) => {
// cy.get(selector + " button.bp3-button")
// .click()
// .wait(2000);
// cy.waitUntil(
// () =>
// cy
// .xpath("//div[contains(@class, ' t--widget-textwidget')][2]", {
// timeout: 30000,
// })
// .eq(0)
// .should("contain.text", "State:"),
// {
// errorMsg: "Execute call did not complete evn after 10 secs",
// timeout: 20000,
// interval: 1000,
// },
// ).then(() => cy.wait(500));
// cy.get(selector + " button span")
// .invoke("text")
// .then((statetxt) => {
// cy.xpath("//div[contains(@class, ' t--widget-textwidget')][2]")
// .eq(0)
// .invoke("text")
// .then((txtWidtxt) => {
// cy.log("statetxt is:" + statetxt);
// let text =
// statetxt == "Activate" ? "State:Inactive" : "State:Active";
// expect(text).to.eq(txtWidtxt);
// });
// });
// });
// //Validating Image URL click & navigation!
// cy.getTableDataSelector("4", "19").then((selector) => {
// // Stubbing window.open to open in the same tab
// cy.window().then((window) => {
// cy.stub(window, "open").callsFake((url) => {
// window.location.href = url; //.substring(1);
// window.location.target = "_self";
// });
// });
// cy.get(selector + " span.bp3-popover-target span")
// .invoke("text")
// .then((url) => {
// cy.get(selector + " span.bp3-popover-target")
// .click()
// .wait(2000);
// cy.wait("@postExecute");
// cy.url().should("contain", url);
// cy.go(-1);
// });
// });
// //cy.wait(4000);
// //cy.get("div.tableWrap").should("be.visible");
// cy.waitUntil(
// () => cy.get("div.tableWrap", { timeout: 30000 }).should("be.visible"),
// {
// errorMsg: "Page is not loaded evn after 10 secs",
// timeout: 30000,
// interval: 2000,
// },
// ).then(() => cy.wait(1000)); //wait for page load!
// //Manu Btn validation: - 1st menu item
// cy.isSelectRow(4); //as aft refresh row selection is also gone
// cy.getTableDataSelector("4", "18").then((selector) => {
// cy.get(selector + " button")
// .click()
// .wait(1000);
// cy.xpath(
// "//div//a[contains(@class, 'bp3-menu-item')]/div[text()='AddcreditLimit']/parent::a",
// )
// .click()
// .wait(2000); //allow time for n/w to finish
// cy.waitUntil(
// () =>
// cy
// .xpath("//div[contains(@class, ' t--widget-textwidget')][1]", {
// timeout: 30000,
// })
// .eq(0)
// .should("contain.text", "CreditLimit:"),
// {
// errorMsg: "Execute call did not complete evn after 10 secs",
// timeout: 20000,
// interval: 1000,
// },
// ).then(() => cy.wait(500)); //allow time for n/w to finish
// cy.xpath("//div[contains(@class, ' t--widget-textwidget')][1]", {
// timeout: 30000,
// })
// .eq(0)
// .invoke("text")
// .then((addreduce) => {
// expect(addreduce).to.eq("CreditLimit:Add");
// });
// });
// //Manu Btn validation: - 2nd menu item
// cy.getTableDataSelector("4", "18").then((selector) => {
// cy.get(selector + " button")
// .click()
// .wait(1000);
// cy.xpath(
// "//div//a[contains(@class, 'bp3-menu-item')]/div[text()='Reducecreditlimit']/parent::a",
// )
// .click()
// .wait(2000); //allow time for n/w to finish
// cy.waitUntil(
// () =>
// cy
// .xpath("//div[contains(@class, ' t--widget-textwidget')][1]", {
// timeout: 30000,
// })
// .eq(0)
// .should("contain.text", "CreditLimit:"),
// {
// errorMsg: "Execute call did not complete evn after 10 secs",
// timeout: 20000,
// interval: 1000,
// },
// ).then(() => cy.wait(500)); //allow time for n/w to finish
// cy.xpath("//div[contains(@class, ' t--widget-textwidget')][1]", {
// timeout: 30000,
// })
// .eq(0)
// .invoke("text")
// .then((addreduce) => {
// expect(addreduce).to.eq("CreditLimit:Reduce");
// });
// });
// });
// //Page 2 Validations:
// cy.selectEntityByName("Change color and font");
// cy.selectEntityByName("WIDGETS");
// cy.selectEntityByName("Table1");
// cy.get(widgetsPage.bold)
// .invoke("attr", "aria-selected")
// .then((sel) => expect(Boolean(sel)).to.be.true);
// cy.get(widgetsPage.centerAlign)
// .eq(0)
// .invoke("attr", "aria-selected")
// .then((sel) => expect(Boolean(sel)).to.be.true); //Text align
// cy.get(widgetsPage.centerAlign)
// .eq(1)
// .invoke("attr", "aria-selected")
// .then((sel) => expect(Boolean(sel)).to.be.true); //Vertical align
// cy.get(widgetsPage.textColor)
// .first()
// .invoke("attr", "value")
// .should("contain", "#2E3D49");
// cy.get(`${widgetsPage.cellBackground} input`)
// .first()
// .invoke("attr", "value")
// .should("contain", "#FFC13D");
// cy.get(widgetsPage.selectedTextSize).should("have.text", "24px");
//});
});

View File

@ -1,36 +1,26 @@
const commonlocators = require("../../../../locators/commonlocators.json");
const testdata = require("../../../../fixtures/testdata.json");
const apiwidget = require("../../../../locators/apiWidgetslocator.json");
const {
AggregateHelper,
} = require("../../../../support/Pages/AggregateHelper");
const helper = new AggregateHelper();
import { ObjectsRegistry } from "../../../../support/Objects/Registry";
let ee = ObjectsRegistry.EntityExplorer;
describe("API Panel Test Functionality ", function() {
it("Test API copy/Move/delete feature", function() {
cy.log("Login Successful");
cy.Createpage("SecondPage");
cy.NavigateToAPI_Panel();
cy.log("Navigation to API Panel screen successful");
cy.CreateAPI("FirstAPI");
cy.enterDatasourceAndPath(testdata.baseUrl, "{{ '/random' }}");
cy.log("Creation of FirstAPI Action successful");
helper.ActionContextMenuByEntityName(
"FirstAPI",
"Copy to page",
"SecondPage",
);
cy.assertPageSave();
cy.get("body").click(0, 0);
ee.expandCollapseEntity("QUERIES/JS");
ee.ActionContextMenuByEntityName("FirstAPI", "Copy to page", "SecondPage");
// click on learn how link
cy.get(".t--learn-how-apis-link").click();
// this should open in a global search modal
cy.get(commonlocators.globalSearchModal);
cy.get("body").click(0, 0);
helper.ActionContextMenuByEntityName(
"FirstAPICopy",
"Move to page",
"Page1",
);
ee.ActionContextMenuByEntityName("FirstAPICopy", "Move to page", "Page1");
cy.wait(2000);
cy.get(".t--entity-name")
.contains("FirstAPICopy")

View File

@ -0,0 +1,136 @@
import { ObjectsRegistry } from "../../../../support/Objects/Registry"
let agHelper = ObjectsRegistry.AggregateHelper,
ee = ObjectsRegistry.EntityExplorer,
jsEditor = ObjectsRegistry.JSEditor,
apiPage = ObjectsRegistry.ApiPage,
locator = ObjectsRegistry.CommonLocators;
describe("Validate API request body panel", () => {
it("1. Check whether input and type dropdown selector exist when multi-part is selected", () => {
apiPage.CreateApi("FirstAPI", 'POST');
apiPage.SelectAPITab('Body')
apiPage.SelectSubTab('FORM_URLENCODED')
apiPage.CheckElementPresence(apiPage._bodyKey(0))
apiPage.CheckElementPresence(apiPage._bodyValue(0))
apiPage.SelectSubTab('MULTIPART_FORM_DATA')
apiPage.CheckElementPresence(apiPage._bodyKey(0))
apiPage.CheckElementPresence(apiPage._bodyTypeDropdown)
apiPage.CheckElementPresence(apiPage._bodyValue(0))
agHelper.ActionContextMenuWithInPane('Delete')
});
it("2. Checks whether No body error message is shown when None API body content type is selected", function () {
apiPage.CreateApi("FirstAPI", 'GET');
apiPage.SelectAPITab('Body')
apiPage.SelectSubTab('NONE')
cy.get(apiPage._noBodyMessageDiv).contains(apiPage._noBodyMessage);
agHelper.ActionContextMenuWithInPane('Delete')
});
it("3. Checks whether header content type is being changed when FORM_URLENCODED API body content type is selected", function () {
apiPage.CreateApi("FirstAPI", 'POST');
apiPage.ValidateHeaderParams({
key: "content-type",
value: "application/json",
});
apiPage.SelectAPITab('Body')
apiPage.SelectSubTab('FORM_URLENCODED')
apiPage.ValidateHeaderParams({
key: "content-type",
value: "application/x-www-form-urlencoded",
});
agHelper.ActionContextMenuWithInPane('Delete')
});
it("4. Checks whether header content type is being changed when MULTIPART_FORM_DATA API body content type is selected", function () {
apiPage.CreateApi("FirstAPI", 'POST');
apiPage.ValidateHeaderParams({
key: "content-type",
value: "application/json",
});
apiPage.SelectAPITab('Body')
apiPage.SelectSubTab('MULTIPART_FORM_DATA')
apiPage.ValidateHeaderParams({
key: "content-type",
value: "multipart/form-data",
});
agHelper.ActionContextMenuWithInPane('Delete')
});
it("5. Checks whether content type 'FORM_URLENCODED' is preserved when user selects None API body content type", function () {
apiPage.CreateApi("FirstAPI", 'POST');
apiPage.SelectAPITab('Body')
apiPage.SelectSubTab('FORM_URLENCODED')
apiPage.SelectSubTab('NONE')
apiPage.ValidateHeaderParams({
key: "content-type",
value: "application/x-www-form-urlencoded",
});
agHelper.ActionContextMenuWithInPane('Delete')
});
it("6. Checks whether content type 'MULTIPART_FORM_DATA' is preserved when user selects None API body content type", function () {
apiPage.CreateApi("FirstAPI", 'POST');
apiPage.SelectAPITab('Body')
apiPage.SelectSubTab('MULTIPART_FORM_DATA')
apiPage.SelectSubTab('NONE')
apiPage.ValidateHeaderParams({
key: "content-type",
value: "multipart/form-data",
});
agHelper.ActionContextMenuWithInPane('Delete')
});
it("7. Checks MultiPart form data for a File Type upload", () => {
let imageNameToUpload = "ConcreteHouse.jpg";
cy.fixture('multiPartFormDataDsl').then((val: any) => {
agHelper.AddDsl(val)
});
apiPage.CreateAndFillApi('https://api.cloudinary.com/v1_1/appsmithautomationcloud/image/upload?upload_preset=fbbhg4xu', 'CloudinaryUploadApi', 'POST')
apiPage.EnterBodyFormData('MULTIPART_FORM_DATA', 'file', '{{FilePicker1.files[0]}}', 'File')
jsEditor.CreateJSObject(`export default {
myVar1: [],
myVar2: {},
upload: async () => {
await CloudinaryUploadApi.run().then(()=> showAlert('Image uploaded to Cloudinary successfully', 'success')).catch(err => showAlert(err.message, 'error'));
await resetWidget('FilePicker1', true);
}
}`, true, true, false);
ee.expandCollapseEntity("WIDGETS")//to expand widgets
ee.SelectEntityByName("FilePicker1");
jsEditor.EnterJSContext('onfilesselected', `{{JSObject1.upload()}}`, true, true);
ee.SelectEntityByName("Image1");
jsEditor.EnterJSContext('image', '{{CloudinaryUploadApi.data.url}}')
agHelper.ClickButton('Select Files');
agHelper.UploadFile(imageNameToUpload)
agHelper.ValidateToastMessage("Image uploaded to Cloudinary successfully")
agHelper.Sleep()
cy.xpath(apiPage._imageSrc).find('img')
.invoke('attr', 'src').then($src => {
expect($src).not.eq("https://assets.appsmith.com/widgets/default.png")
})
apiPage.CheckElementPresence(locator._spanButton('Select Files'))//verifying if reset!
});
it("8. Checks MultiPart form data for a Array Type upload results in API error", () => {
let imageNameToUpload = "AAAFlowerVase.jpeg";
ee.expandCollapseEntity("QUERIES/JS")//to expand widgets
ee.SelectEntityByName("CloudinaryUploadApi");
apiPage.EnterBodyFormData('MULTIPART_FORM_DATA', 'file', '{{FilePicker1.files[0]}}', 'Array', true)
ee.SelectEntityByName("FilePicker1");
agHelper.ClickButton('Select Files');
agHelper.UploadFile(imageNameToUpload, false)
agHelper.ValidateToastMessage("CloudinaryUploadApi failed to execute")
apiPage.CheckElementPresence(locator._spanButton('Select Files'))//verifying if reset!
agHelper.AssertDebugError("Execution failed with status 400 BAD_REQUEST", '{"error":{"message":"Unsupported source URL: {\\"type\\":\\"image/jpeg\\"')
});
});

View File

@ -1,68 +0,0 @@
const testdata = require("../../../../fixtures/testdata.json");
const apiwidget = require("../../../../locators/apiWidgetslocator.json");
import apiEditor from "../../../../locators/ApiEditor";
describe("API Panel request body", function() {
it("Check whether input and type dropdown selector exist when multi-part is selected", function() {
cy.NavigateToAPI_Panel();
cy.CreateAPI("FirstAPI");
cy.SelectAction(testdata.postAction);
cy.contains(apiEditor.bodyTab).click();
cy.get(`[data-cy=${testdata.apiContentTypeForm}]`).click();
cy.get(`[data-cy=${testdata.apiContentTypeMultiPart}]`).click();
cy.get(apiwidget.formEncoded).should("be.visible");
cy.get(apiwidget.multipartTypeDropdown).should("be.visible");
cy.DeleteAPI();
});
it("Checks whether No body error message is shown when None API body content type is selected", function() {
cy.NavigateToAPI_Panel();
cy.CreateAPI("FirstAPI");
cy.SelectAction(testdata.getAction);
cy.contains(apiEditor.bodyTab).click();
cy.get(`[data-cy=${testdata.apiContentTypeNone}]`).click();
cy.get(testdata.noBodyErrorMessageDiv).should("exist");
cy.get(testdata.noBodyErrorMessageDiv).contains(
testdata.noBodyErrorMessage,
);
cy.DeleteAPI();
});
it("Checks whether header content type is being changed when FORM_URLENCODED API body content type is selected", function() {
cy.NavigateToAPI_Panel();
cy.CreateAPI("FirstAPI");
cy.SelectAction(testdata.postAction);
cy.contains(apiEditor.bodyTab).click({ force: true });
cy.get(`[data-cy=${testdata.apiContentTypeForm}]`).click();
cy.contains(apiEditor.headersTab).click({ force: true });
cy.get(apiwidget.headerKey).contains(testdata.headerKey.toLowerCase());
cy.get(apiwidget.headerValue).contains(testdata.apiFormDataHeaderValue);
cy.DeleteAPI();
});
it("Checks whether content type is preserved when user selects None API body content type", function() {
cy.NavigateToAPI_Panel();
cy.CreateAPI("FirstAPI");
cy.SelectAction(testdata.postAction);
cy.contains(apiEditor.bodyTab).click({ force: true });
cy.get(`[data-cy=${testdata.apiContentTypeForm}]`).click({ force: true });
cy.get(`[data-cy=${testdata.apiContentTypeNone}]`).click({ force: true });
cy.contains(apiEditor.headersTab).click({ force: true });
cy.get(apiwidget.headerKey).contains(testdata.headerKey.toLowerCase());
cy.get(apiwidget.headerValue).contains(testdata.apiFormDataHeaderValue);
cy.DeleteAPI();
});
});

View File

@ -35,4 +35,145 @@ describe("Binding the Button widget with Text widget using Recpatcha v3", functi
cy.get(".t--draggable-textwidget .bp3-ui-text").should("be.visible");
cy.get(".t--draggable-textwidget .bp3-ui-text").should("have.value", "");
});
/* This test to be enabled once the product bug is fixed
it("Validate the Button binding with Text Widget with Recaptcha Token with invalid key before using valid key", function() {
cy.get("button")
.contains("Submit")
.should("be.visible")
.click({ force: true });
cy.testCodeMirrorLast(testdata.invalidKey)
cy.SearchEntityandOpen("Text1");
cy.get(".t--draggable-textwidget span").last().invoke('text').then((x) => {
cy.log(x);
expect(x).to.be.empty;
})
cy.SearchEntityandOpen("Button1");
cy.get(".t--property-control-googlerecaptchaversion .bp3-popover-target")
.last()
.should("be.visible")
.click({ force: true });
cy.get(".t--dropdown-option:contains('reCAPTCHA v2')").click({
force: true,
});
cy.get("button")
.contains("Submit")
.should("be.visible")
.click({ force: true });
cy.get(".t--toast-action span").should("have.text",testdata.errorMsg)
cy.SearchEntityandOpen("Text1");
cy.wait(3000);
cy.get(".t--draggable-textwidget span").last().invoke('text').then((x) => {
cy.log(x);
expect(x).to.be.empty;
})
});
*/
it("Validate the Button binding with Text Widget with Recaptcha Token with v2Key", function() {
cy.get("button")
.contains("Submit")
.should("be.visible")
.click({ force: true });
cy.testCodeMirrorLast(testdata.v2Key);
cy.SearchEntityandOpen("Text1");
cy.get(".t--draggable-textwidget span")
.last()
.invoke("text")
.then((x) => {
cy.log(x);
expect(x).to.be.empty;
});
cy.SearchEntityandOpen("Button1");
cy.get(".t--property-control-googlerecaptchaversion .bp3-popover-target")
.last()
.should("be.visible")
.click({ force: true });
cy.get(".t--dropdown-option:contains('reCAPTCHA v2')").click({
force: true,
});
cy.get("button")
.contains("Submit")
.should("be.visible")
.click({ force: true });
cy.SearchEntityandOpen("Text1");
cy.wait(3000);
cy.get(".t--draggable-textwidget span")
.last()
.invoke("text")
.then((x) => {
cy.log(x);
expect(x).not.to.be.empty;
});
});
it("Validate the Button binding with Text Widget with Recaptcha Token with v3Key", function() {
cy.get("button")
.contains("Submit")
.should("be.visible")
.click({ force: true });
cy.testCodeMirrorLast(testdata.v3Key);
cy.SearchEntityandOpen("Text1");
cy.get(".t--draggable-textwidget span")
.last()
.invoke("text")
.then((x) => {
cy.log(x);
expect(x).not.to.be.empty;
});
cy.SearchEntityandOpen("Button1");
cy.get(".t--property-control-googlerecaptchaversion .bp3-popover-target")
.last()
.should("be.visible")
.click({ force: true });
cy.get(".t--dropdown-option:contains('reCAPTCHA v2')").click({
force: true,
});
cy.get("button")
.contains("Submit")
.should("be.visible")
.click({ force: true });
cy.SearchEntityandOpen("Text1");
cy.wait(3000);
cy.get(".t--draggable-textwidget span")
.last()
.invoke("text")
.then((x) => {
cy.log(x);
expect(x).not.to.be.empty;
});
});
/* This test to be enabled once the product bug is fixed
it("Validate the Button binding with Text Widget with Recaptcha Token with invalid key", function() {
cy.get("button")
.contains("Submit")
.should("be.visible")
.click({ force: true });
cy.testCodeMirrorLast(testdata.invalidKey)
cy.SearchEntityandOpen("Text1");
cy.get(".t--draggable-textwidget span").last().invoke('text').then((x) => {
cy.log(x);
expect(x).not.to.be.empty;
})
cy.SearchEntityandOpen("Button1");
cy.get(".t--property-control-googlerecaptchaversion .bp3-popover-target")
.last()
.should("be.visible")
.click({ force: true });
cy.get(".t--dropdown-option:contains('reCAPTCHA v2')").click({
force: true,
});
cy.get("button")
.contains("Submit")
.should("be.visible")
.click({ force: true });
cy.SearchEntityandOpen("Text1");
cy.wait(3000);
cy.get(".t--draggable-textwidget span").last().invoke('text').then((x) => {
cy.log(x);
expect(x).not.to.be.empty;
})
});
*/
});

View File

@ -1,10 +1,9 @@
import { AggregateHelper } from "../../../../support/Pages/AggregateHelper";
import { JSEditor } from "../../../../support/Pages/JSEditor";
import { CommonLocators } from "../../../../support/Objects/CommonLocators";
import { ObjectsRegistry } from "../../../../support/Objects/Registry"
const agHelper = new AggregateHelper();
const jsEditor = new JSEditor();
const locator = new CommonLocators();
let agHelper = ObjectsRegistry.AggregateHelper,
ee = ObjectsRegistry.EntityExplorer,
jsEditor = ObjectsRegistry.JSEditor,
locator = ObjectsRegistry.CommonLocators;
describe("Validate Create Api and Bind to Table widget via JSObject", () => {
before(() => {
@ -15,9 +14,9 @@ describe("Validate Create Api and Bind to Table widget via JSObject", () => {
it("1. Bind Input widget with JSObject", function () {
jsEditor.CreateJSObject('return "Success";', false);
agHelper.expandCollapseEntity("WIDGETS")//to expand widgets
agHelper.expandCollapseEntity("Form1")
agHelper.SelectEntityByName("Input2")
ee.expandCollapseEntity("WIDGETS")//to expand widgets
ee.expandCollapseEntity("Form1")
ee.SelectEntityByName("Input2")
cy.get("@jsObjName").then((jsObjName) => {
jsEditor.EnterJSContext("defaulttext", "{{" + jsObjName + ".myFun1()}}")
});
@ -33,8 +32,8 @@ describe("Validate Create Api and Bind to Table widget via JSObject", () => {
it.skip("2. Bug 10284, 11529 - Verify timeout issue with running JS Objects", function () {
jsEditor.CreateJSObject('return "Success";', true);
agHelper.expandCollapseEntity("Form1")
agHelper.SelectEntityByName("Input2")
ee.expandCollapseEntity("Form1")
ee.SelectEntityByName("Input2")
cy.get("@jsObjName").then((jsObjName) => {
jsEditor.EnterJSContext("defaulttext", "{{" + jsObjName + ".myFun1()}}")
});

View File

@ -1,14 +1,12 @@
import { ApiPage } from "../../../../support/Pages/ApiPage";
import { AggregateHelper } from "../../../../support/Pages/AggregateHelper";
import { JSEditor } from "../../../../support/Pages/JSEditor";
import { CommonLocators } from "../../../../support/Objects/CommonLocators";
const apiPage = new ApiPage();
const agHelper = new AggregateHelper();
const jsEditor = new JSEditor();
const locator = new CommonLocators();
import { ObjectsRegistry } from "../../../../support/Objects/Registry"
let dataSet: any, valueToTest: any, jsName: any;
let agHelper = ObjectsRegistry.AggregateHelper,
ee = ObjectsRegistry.EntityExplorer,
jsEditor = ObjectsRegistry.JSEditor,
locator = ObjectsRegistry.CommonLocators,
apiPage = ObjectsRegistry.ApiPage;
describe("Validate Create Api and Bind to Table widget via JSObject", () => {
before(() => {
@ -38,8 +36,8 @@ describe("Validate Create Api and Bind to Table widget via JSObject", () => {
});
it("2. Validate the Api data is updated on List widget", function () {
agHelper.expandCollapseEntity("WIDGETS")//to expand widgets
agHelper.SelectEntityByName("List1");
ee.expandCollapseEntity("WIDGETS")//to expand widgets
ee.SelectEntityByName("List1");
jsEditor.EnterJSContext("items", "{{" + jsName as string + ".myFun1()}}")
cy.get(locator._textWidget).should("have.length", 8);
cy.get(locator._textWidget)
@ -61,8 +59,8 @@ describe("Validate Create Api and Bind to Table widget via JSObject", () => {
it("3. Validate the List widget ", function () {
agHelper.NavigateBacktoEditor()
agHelper.expandCollapseEntity("WIDGETS")//to expand widgets
agHelper.SelectEntityByName("List1");
ee.expandCollapseEntity("WIDGETS")//to expand widgets
ee.SelectEntityByName("List1");
jsEditor.EnterJSContext("itemspacing\\(px\\)", "50")
cy.get(locator._textWidget).should("have.length", 6);
cy.get(locator._textWidget)

View File

@ -1,12 +1,10 @@
import { AggregateHelper } from "../../../../support/Pages/AggregateHelper";
import { JSEditor } from "../../../../support/Pages/JSEditor";
import { CommonLocators } from "../../../../support/Objects/CommonLocators";
const agHelper = new AggregateHelper();
const jsEditor = new JSEditor();
const locator = new CommonLocators();
import { ObjectsRegistry } from "../../../../support/Objects/Registry"
let dataSet: any;
let agHelper = ObjectsRegistry.AggregateHelper,
ee = ObjectsRegistry.EntityExplorer,
jsEditor = ObjectsRegistry.JSEditor,
locator = ObjectsRegistry.CommonLocators;
describe("Loadash basic test with input Widget", () => {
@ -21,16 +19,16 @@ describe("Loadash basic test with input Widget", () => {
});
it("1. Input widget test with default value for atob method", () => {
agHelper.expandCollapseEntity("WIDGETS")
agHelper.SelectEntityByName("Input1")
ee.expandCollapseEntity("WIDGETS")
ee.SelectEntityByName("Input1")
jsEditor.EnterJSContext("defaulttext", dataSet.defaultInputBinding + "}}");
agHelper.ValidateNetworkCallRespPut('@updateLayout')
agHelper.ValidateNetworkStatus('@updateLayout')
});
it("2. Input widget test with default value for btoa method", function () {
agHelper.SelectEntityByName("Input2")
ee.SelectEntityByName("Input2")
jsEditor.EnterJSContext("defaulttext", dataSet.loadashInput + "}}");
agHelper.ValidateNetworkCallRespPut('@updateLayout')
agHelper.ValidateNetworkStatus('@updateLayout')
});
it("3. Publish and validate the data displayed in input widgets value for aToB and bToa", function () {

View File

@ -1,12 +1,10 @@
import { AggregateHelper } from "../../../../support/Pages/AggregateHelper";
import { JSEditor } from "../../../../support/Pages/JSEditor";
import { CommonLocators } from "../../../../support/Objects/CommonLocators";
const agHelper = new AggregateHelper();
const jsEditor = new JSEditor();
const locator = new CommonLocators();
import { ObjectsRegistry } from "../../../../support/Objects/Registry"
let dataSet: any;
let agHelper = ObjectsRegistry.AggregateHelper,
ee = ObjectsRegistry.EntityExplorer,
jsEditor = ObjectsRegistry.JSEditor,
locator = ObjectsRegistry.CommonLocators;
describe("Validate basic binding of Input widget to Input widget", () => {
@ -21,16 +19,16 @@ describe("Validate basic binding of Input widget to Input widget", () => {
});
it("1. Input widget test with default value from another Input widget", () => {
agHelper.expandCollapseEntity("WIDGETS")
agHelper.SelectEntityByName("Input1")
ee.expandCollapseEntity("WIDGETS")
ee.SelectEntityByName("Input1")
jsEditor.EnterJSContext("defaulttext", dataSet.defaultInputBinding + "}}");
agHelper.ValidateNetworkCallRespPut('@updateLayout')
agHelper.ValidateNetworkStatus('@updateLayout')
});
it("2. Binding second input widget with first input widget and validating", function () {
agHelper.SelectEntityByName("Input2")
ee.SelectEntityByName("Input2")
jsEditor.EnterJSContext("defaulttext", dataSet.momentInput + "}}");
agHelper.ValidateNetworkCallRespPut('@updateLayout')
agHelper.ValidateNetworkStatus('@updateLayout')
});
it("3. Publish widget and validate the data displayed in input widgets", function () {

View File

@ -1,12 +1,10 @@
import { AggregateHelper } from "../../../../support/Pages/AggregateHelper";
import { JSEditor } from "../../../../support/Pages/JSEditor";
import { CommonLocators } from "../../../../support/Objects/CommonLocators";
import { ApiPage } from "../../../../support/Pages/ApiPage";
import { ObjectsRegistry } from "../../../../support/Objects/Registry"
const agHelper = new AggregateHelper();
const jsEditor = new JSEditor();
const locator = new CommonLocators();
const apiPage = new ApiPage();
let agHelper = ObjectsRegistry.AggregateHelper,
ee = ObjectsRegistry.EntityExplorer,
jsEditor = ObjectsRegistry.JSEditor,
locator = ObjectsRegistry.CommonLocators,
apiPage = ObjectsRegistry.ApiPage;
describe("Validate basic operations on Entity explorer JSEditor structure", () => {
@ -15,22 +13,20 @@ describe("Validate basic operations on Entity explorer JSEditor structure", () =
cy.fixture('promisesBtnDsl').then((val: any) => {
agHelper.AddDsl(val)
});
agHelper.expandCollapseEntity("WIDGETS")//to expand widgets
agHelper.SelectEntityByName("Button1");
ee.expandCollapseEntity("WIDGETS")//to expand widgets
ee.SelectEntityByName("Button1");
jsEditor.EnterJSContext('onclick', "{{storeValue('date', Date()).then(() => showAlert(appsmith.store.date))}}", true, true);
agHelper.ClickButton('Submit')
cy.log("Date is:" + date)
cy.get(locator._toastMsg)
.should("have.length", 1)
.should("contain.text", date);
})
agHelper.ValidateToastMessage(date)
});
it("2. Verify resolve & chaining via direct Promises", () => {
cy.fixture("promisesBtnDsl").then((val: any) => {
agHelper.AddDsl(val);
});
agHelper.expandCollapseEntity("WIDGETS");
agHelper.SelectEntityByName("Button1");
ee.expandCollapseEntity("WIDGETS");
ee.SelectEntityByName("Button1");
jsEditor.EnterJSContext(
"onclick",
`{{
@ -43,9 +39,7 @@ describe("Validate basic operations on Entity explorer JSEditor structure", () =
}).catch(err => { showAlert(err, 'error') });
}}`, true, true);
agHelper.ClickButton('Submit')
cy.get(locator._toastMsg)
.should("have.length", 1)
.should("contain.text", "We are on planet Earth");
agHelper.ValidateToastMessage('We are on planet Earth')
});
it("3. Verify Async Await in direct Promises", () => {
@ -61,8 +55,8 @@ describe("Validate basic operations on Entity explorer JSEditor structure", () =
key: "name",
value: "{{this.params.country}}",
}); // verifies Bug 10055
agHelper.expandCollapseEntity("WIDGETS");
agHelper.SelectEntityByName("Button1");
ee.expandCollapseEntity("WIDGETS");
ee.SelectEntityByName("Button1");
jsEditor.EnterJSContext(
"onclick",
`{{(async function(){
@ -93,8 +87,8 @@ describe("Validate basic operations on Entity explorer JSEditor structure", () =
"https://source.unsplash.com/collection/8439505",
"Christmas",
);
agHelper.expandCollapseEntity("WIDGETS"); //to expand widgets
agHelper.SelectEntityByName("Button1");
ee.expandCollapseEntity("WIDGETS"); //to expand widgets
ee.SelectEntityByName("Button1");
jsEditor.EnterJSContext(
"onclick",
`{{
@ -107,7 +101,7 @@ describe("Validate basic operations on Entity explorer JSEditor structure", () =
true,
true,
);
agHelper.SelectEntityByName("Image1");
ee.SelectEntityByName("Image1");
jsEditor.EnterJSContext("image", `{{Christmas.data}}`, true);
agHelper.WaitUntilEleDisappear(
locator._toastMsg,
@ -126,15 +120,13 @@ describe("Validate basic operations on Entity explorer JSEditor structure", () =
apiPage.CreateAndFillApi("https://favqs.com/api/qotd", "InspiringQuotes");
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'))`);
agHelper.expandCollapseEntity("WIDGETS"); //to expand widgets
agHelper.SelectEntityByName("Button1");
ee.expandCollapseEntity("WIDGETS"); //to expand widgets
ee.SelectEntityByName("Button1");
cy.get("@jsObjName").then((jsObjName) => {
jsEditor.EnterJSContext('onclick', "{{" + jsObjName + ".myFun1()}}", true, true);
})
agHelper.ClickButton("Submit");
cy.get(locator._toastMsg)
.should("have.length", 1)
.should("contain.text", "Today's quote for You");
agHelper.ValidateToastMessage("Today's quote for You")
});
it("6. Verify Promise.race via direct Promises", () => {
@ -143,8 +135,8 @@ return InspiringQuotes.run().then((res) => { showAlert("Today's quote for " + us
});
apiPage.CreateAndFillApi("https://api.agify.io?name={{this.params.person}}", "Agify")
apiPage.ValidateQueryParams({ key: "name", value: "{{this.params.person}}" }); // verifies Bug 10055
agHelper.expandCollapseEntity("WIDGETS")
agHelper.SelectEntityByName("Button1");
ee.expandCollapseEntity("WIDGETS")
ee.SelectEntityByName("Button1");
jsEditor.EnterJSContext('onclick', `{{ Promise.race([Agify.run({ person: 'Melinda' }), Agify.run({ person: 'Trump' })]).then((res) => { showAlert('Winner is ' + JSON.stringify(res.name), 'success') }) }} `, true, true);
agHelper.ClickButton('Submit')
cy.get(locator._toastMsg).should("have.length", 1).contains(/Melinda|Trump/g)
@ -158,8 +150,8 @@ return InspiringQuotes.run().then((res) => { showAlert("Today's quote for " + us
"https://api.jikan.moe/v3/search/anime?q={{this.params.name}}",
"GetAnime",
);
agHelper.expandCollapseEntity("WIDGETS"); //to expand widgets
agHelper.SelectEntityByName("List1");
ee.expandCollapseEntity("WIDGETS"); //to expand widgets
ee.SelectEntityByName("List1");
jsEditor.EnterJSContext(
"items",
`[{
@ -183,7 +175,7 @@ return InspiringQuotes.run().then((res) => { showAlert("Today's quote for " + us
locator._toastMsg,
"will be executed automatically on page load",
);
agHelper.SelectEntityByName("Button1");
ee.SelectEntityByName("Button1");
jsEditor.EnterJSContext(
"onclick",
`{{
@ -207,8 +199,8 @@ return InspiringQuotes.run().then((res) => { showAlert("Today's quote for " + us
cy.fixture('promisesBtnDsl').then((val: any) => {
agHelper.AddDsl(val)
});
agHelper.expandCollapseEntity("WIDGETS")//to expand widgets
agHelper.SelectEntityByName("Button1");
ee.expandCollapseEntity("WIDGETS")//to expand widgets
ee.SelectEntityByName("Button1");
jsEditor.EnterJSContext('onclick', `{{
(function () {
let agifyy = [];
@ -221,7 +213,7 @@ return InspiringQuotes.run().then((res) => { showAlert("Today's quote for " + us
})()
}} `, true, true);
agHelper.ClickButton('Submit')
cy.get(locator._toastMsg).should("have.length", 1).should("have.text", "cat,dog,camel,rabbit,rat")
agHelper.ValidateToastMessage("cat,dog,camel,rabbit,rat")
});
it("9. Bug 10150: Verify Promise.all via JSObjects", () => {
@ -240,9 +232,9 @@ showAlert("Running all api's", "warning");
return Promise.all(allFuncs).then(() =>
showAlert("Wonderful! all apis executed", "success")).catch(() => showAlert("Please check your api's again", "error")); `)
agHelper.expandCollapseEntity("WIDGETS")
ee.expandCollapseEntity("WIDGETS")
agHelper.SelectEntityByName("Button1");
ee.SelectEntityByName("Button1");
cy.get("@jsObjName").then((jsObjName) => {
jsEditor.EnterJSContext('onclick', "{{storeValue('date', Date()).then(() => { showAlert(appsmith.store.date, 'success'); return " + jsObjName + ".myFun1()})}}", true, true);
});
@ -275,8 +267,8 @@ showAlert("Wonderful! all apis executed", "success")).catch(() => showAlert("Ple
return Promise.any([this.func2(), this.func3(), this.func1()]).then((value) => showAlert("Resolved promise is:" + value))
}
}`, true, true)
agHelper.expandCollapseEntity('WIDGETS')
agHelper.SelectEntityByName("Button1");
ee.expandCollapseEntity('WIDGETS')
ee.SelectEntityByName("Button1");
cy.get("@jsObjName").then((jsObjName) => {
jsEditor.EnterJSContext('onclick', "{{" + jsObjName + ".runAny()}}", true, true);
});
@ -291,8 +283,8 @@ showAlert("Wonderful! all apis executed", "success")).catch(() => showAlert("Ple
cy.fixture("promisesBtnDsl").then((dsl: any) => {
agHelper.AddDsl(dsl);
});
agHelper.expandCollapseEntity("WIDGETS"); //to expand widgets
agHelper.SelectEntityByName("Button1");
ee.expandCollapseEntity("WIDGETS"); //to expand widgets
ee.SelectEntityByName("Button1");
jsEditor.EnterJSContext(
"onclick",
"{{resetWidget('Input1').then(() => showAlert(Input1.text))}}",
@ -302,10 +294,7 @@ showAlert("Wonderful! all apis executed", "success")).catch(() => showAlert("Ple
agHelper.DeployApp();
cy.get(locator._inputWidgetInDeployed).type("Update value");
agHelper.ClickButton("Submit");
cy.get(locator._toastMsg)
.should("have.length", 1)
.should("contain.text", "Test");
agHelper.ValidateToastMessage("Test")
agHelper.NavigateBacktoEditor()
})
@ -316,12 +305,12 @@ showAlert("Wonderful! all apis executed", "success")).catch(() => showAlert("Ple
});
jsEditor.CreateJSObject(`const user = 'You';
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'))`);
agHelper.SelectEntityByName("Button1");
ee.SelectEntityByName("Button1");
cy.get("@jsObjName").then((jsObjName) => {
jsEditor.EnterJSContext('onclick', "{{" + jsObjName + ".myFun1()}}", true, true);
});
agHelper.ClickButton('Submit')
cy.get(locator._toastMsg).should("have.length", 1).should("contain.text", "Today's quote for You");
agHelper.ValidateToastMessage("Today's quote for You")
});
})

View File

@ -1,13 +1,11 @@
import { AggregateHelper } from "../../../../support/Pages/AggregateHelper";
import { JSEditor } from "../../../../support/Pages/JSEditor";
import { CommonLocators } from "../../../../support/Objects/CommonLocators";
const agHelper = new AggregateHelper();
const jsEditor = new JSEditor();
const locator = new CommonLocators();
import { ObjectsRegistry } from "../../../../support/Objects/Registry"
let dataSet: any;
let agHelper = ObjectsRegistry.AggregateHelper,
ee = ObjectsRegistry.EntityExplorer,
jsEditor = ObjectsRegistry.JSEditor,
locator = ObjectsRegistry.CommonLocators;
describe("Validate basic binding of Input widget to Input widget", () => {
before(() => {
@ -21,16 +19,16 @@ describe("Validate basic binding of Input widget to Input widget", () => {
});
it("1. Input widget test with default value for atob method", () => {
agHelper.expandCollapseEntity("WIDGETS")
agHelper.SelectEntityByName("Input1")
ee.expandCollapseEntity("WIDGETS")
ee.SelectEntityByName("Input1")
jsEditor.EnterJSContext("defaulttext", dataSet.atobInput + "}}");
agHelper.ValidateNetworkCallRespPut('@updateLayout')
agHelper.ValidateNetworkStatus('@updateLayout')
});
it("2. Input widget test with default value for btoa method", function () {
agHelper.SelectEntityByName("Input2")
ee.SelectEntityByName("Input2")
jsEditor.EnterJSContext("defaulttext", dataSet.btoaInput + "}}");
agHelper.ValidateNetworkCallRespPut('@updateLayout')
agHelper.ValidateNetworkStatus('@updateLayout')
});
it("3. Publish and validate the data displayed in input widgets value for aToB and bToa", function () {

View File

@ -66,6 +66,7 @@ describe("Comments", function() {
.its("length")
.should("eq", 2);
});
it("Completing comments tour adds bot comment in first thread", function() {
cy.generateUUID().then((uid) => {
cy.Signup(`${uid}@appsmithtest.com`, uid);

View File

@ -1,12 +1,10 @@
import { AggregateHelper } from "../../../../support/Pages/AggregateHelper";
import { JSEditor } from "../../../../support/Pages/JSEditor";
import { CommonLocators } from "../../../../support/Objects/CommonLocators";
const agHelper = new AggregateHelper();
const jsEditor = new JSEditor();
const locator = new CommonLocators();
import { ObjectsRegistry } from "../../../../support/Objects/Registry"
let dataSet: any, dsl: any;
let agHelper = ObjectsRegistry.AggregateHelper,
ee = ObjectsRegistry.EntityExplorer,
jsEditor = ObjectsRegistry.JSEditor,
locator = ObjectsRegistry.CommonLocators;
describe("Input widget test with default value from chart datapoint", () => {
@ -21,14 +19,14 @@ describe("Input widget test with default value from chart datapoint", () => {
});
it("1. Input widget test with default value from another Input widget", () => {
agHelper.expandCollapseEntity("WIDGETS")
agHelper.SelectEntityByName("Input1")
ee.expandCollapseEntity("WIDGETS")
ee.SelectEntityByName("Input1")
jsEditor.EnterJSContext("defaulttext", dataSet.bindChartData + "}}");
agHelper.ValidateNetworkCallRespPut('@updateLayout')
agHelper.ValidateNetworkStatus('@updateLayout')
});
it("2. Chart with datapoint feature validation", function () {
agHelper.SelectEntityByName("Chart1")
ee.SelectEntityByName("Chart1")
agHelper.SelectPropertiesDropDown("ondatapointclick", "Show message")
agHelper.EnterActionValue("Message", dataSet.bindingDataPoint)
agHelper.XpathNClick("(//*[local-name()='rect'])[13]")
@ -40,7 +38,7 @@ describe("Input widget test with default value from chart datapoint", () => {
})
it("3. Chart with seriesTitle feature validation", function () {
agHelper.SelectEntityByName("Input2")
ee.SelectEntityByName("Input2")
jsEditor.EnterJSContext("defaulttext", dataSet.bindingSeriesTitle + "}}");
cy.get(locator._inputWidget).last().should("have.value", dsl.dsl.children[0].chartData[0].seriesName);
});

View File

@ -1,19 +1,19 @@
import { AggregateHelper } from "../../../../support/Pages/AggregateHelper";
import { CommonLocators } from "../../../../support/Objects/CommonLocators";
import { ObjectsRegistry } from "../../../../support/Objects/Registry"
const agHelper = new AggregateHelper();
const locator = new CommonLocators();
let agHelper = ObjectsRegistry.AggregateHelper,
ee = ObjectsRegistry.EntityExplorer,
locator = ObjectsRegistry.CommonLocators;
describe("DocumentViewer Widget Functionality", () => {
it("1. Add new DocumentViewer and verify in canvas", () => {
agHelper.DragDropWidgetNVerify("documentviewerwidget", 300, 300);
ee.DragDropWidgetNVerify("documentviewerwidget", 300, 300);
});
it("2. Modify visibility & Publish app & verify", () => {
agHelper.NavigateToExplorer();
agHelper.expandCollapseEntity("WIDGETS"); //to expand widgets
agHelper.SelectEntityByName("DocumentViewer1");
agHelper.ToggleOrDisable("visible", false);
ee.NavigateToSwitcher('explorer')
ee.expandCollapseEntity("WIDGETS"); //to expand widgets
ee.SelectEntityByName("DocumentViewer1");
agHelper.ToggleOnOrOff("visible", 'Off');
agHelper.DeployApp();
cy.get(locator._widgetInDeployed("documentviewerwidget")).should(
"not.exist",
@ -22,9 +22,9 @@ describe("DocumentViewer Widget Functionality", () => {
});
it("3. Change visibility & Publish app & verify again", () => {
agHelper.expandCollapseEntity("WIDGETS"); //to expand widgets
agHelper.SelectEntityByName("DocumentViewer1");
agHelper.ToggleOrDisable("visible");
ee.expandCollapseEntity("WIDGETS"); //to expand widgets
ee.SelectEntityByName("DocumentViewer1");
agHelper.ToggleOnOrOff("visible", 'On');
agHelper.DeployApp();
cy.get(locator._widgetInDeployed("documentviewerwidget")).should("exist");
});

View File

@ -1,11 +1,9 @@
const explorer = require("../../../../locators/explorerlocators.json");
import { ObjectsRegistry } from "../../../../support/Objects/Registry";
let ee = ObjectsRegistry.EntityExplorer;
const firstApiName = "First";
const secondApiName = "Second";
const {
AggregateHelper,
} = require("../../../../support/Pages/AggregateHelper");
const helper = new AggregateHelper();
describe("Api Naming conflict on a page test", function() {
it("expects actions on the same page cannot have identical names", function() {
@ -17,7 +15,7 @@ describe("Api Naming conflict on a page test", function() {
// create another API
cy.NavigateToAPI_Panel();
cy.CreateAPI(secondApiName);
helper.expandCollapseEntity("QUERIES/JS", true);
ee.expandCollapseEntity("QUERIES/JS", true);
// try to rename one of the APIs with an existing API name
cy.get(`.t--entity-item:contains(${secondApiName})`).within(() => {
cy.get(".t--context-menu").click({ force: true });
@ -46,11 +44,11 @@ describe("Api Naming conflict on different pages test", function() {
cy.log("Login Successful");
// create a new API
cy.CreateAPI(firstApiName);
helper.expandCollapseEntity("QUERIES/JS", true);
ee.expandCollapseEntity("QUERIES/JS", true);
// create a new page and an API on that page
cy.Createpage("Page2");
cy.CreateAPI(firstApiName);
helper.expandCollapseEntity("QUERIES/JS", true);
ee.expandCollapseEntity("QUERIES/JS", true);
cy.get(".t--entity-name")
.contains(firstApiName)
.should("exist");
@ -73,7 +71,7 @@ describe("Api Naming conflict on different pages test", function() {
describe("Entity Naming conflict test", function() {
it("expects JS objects and actions to not have identical names on the same page.", function() {
cy.log("Login Successful");
helper.expandCollapseEntity("QUERIES/JS", true);
ee.expandCollapseEntity("QUERIES/JS", true);
// create JS object and name it
cy.createJSObject('return "Hello World";');

View File

@ -4,9 +4,9 @@ const datasource = require("../../../../locators/DatasourcesEditor.json");
const apiwidget = require("../../../../locators/apiWidgetslocator.json");
const commonlocators = require("../../../../locators/commonlocators.json");
const pages = require("../../../../locators/Pages.json");
import { AggregateHelper } from "../../../../support/Pages/AggregateHelper";
const AHelper = new AggregateHelper();
import { ObjectsRegistry } from "../../../../support/Objects/Registry";
let ee = ObjectsRegistry.EntityExplorer;
const pageid = "MyPage";
let datasourceName;
@ -93,7 +93,7 @@ describe("Entity explorer tests related to query and datasource", function() {
cy.EvaluateCurrentValue("select * from users");
cy.get(".t--action-name-edit-field").click({ force: true });
AHelper.ActionContextMenuByEntityName("Query1", "Show Bindings");
ee.ActionContextMenuByEntityName("Query1", "Show Bindings");
cy.get(apiwidget.propertyList).then(function($lis) {
expect($lis).to.have.length(5);
expect($lis.eq(0)).to.contain("{{Query1.isLoading}}");
@ -102,9 +102,9 @@ describe("Entity explorer tests related to query and datasource", function() {
expect($lis.eq(3)).to.contain("{{Query1.run()}}");
expect($lis.eq(4)).to.contain("{{Query1.clear()}}");
});
AHelper.ActionContextMenuByEntityName("Query1", "Edit Name");
ee.ActionContextMenuByEntityName("Query1", "Edit Name");
cy.EditApiNameFromExplorer("MyQuery");
AHelper.ActionContextMenuByEntityName("MyQuery", "Move to page", pageid);
ee.ActionContextMenuByEntityName("MyQuery", "Move to page", pageid);
cy.get(".t--entity-name")
.contains("MyQuery")
.click();

View File

@ -1,9 +1,6 @@
const testdata = require("../../../../fixtures/testdata.json");
const apiwidget = require("../../../../locators/apiWidgetslocator.json");
const explorer = require("../../../../locators/explorerlocators.json");
const commonlocators = require("../../../../locators/commonlocators.json");
const formWidgetsPage = require("../../../../locators/FormWidgets.json");
const publish = require("../../../../locators/publishWidgetspage.json");
const dsl = require("../../../../fixtures/formWidgetdsl.json");
const pageid = "MyPage";

View File

@ -2,9 +2,9 @@ const apiwidget = require("../../../../locators/apiWidgetslocator.json");
const commonlocators = require("../../../../locators/commonlocators.json");
const formWidgetsPage = require("../../../../locators/FormWidgets.json");
const dsl = require("../../../../fixtures/formWithInputdsl.json");
import { AggregateHelper } from "../../../../support/Pages/AggregateHelper";
import { ObjectsRegistry } from "../../../../support/Objects/Registry";
const AgHelper = new AggregateHelper();
let ee = ObjectsRegistry.EntityExplorer;
const pageid = "MyPage";
before(() => {
@ -42,9 +42,9 @@ describe("Test Suite to validate copy/delete/undo functionalites", function() {
200,
);
cy.get("body").type(`{${modifierKey}}z`);
AgHelper.expandCollapseEntity("WIDGETS");
AgHelper.expandCollapseEntity("FormTest");
AgHelper.ActionContextMenuByEntityName("FormTestCopy", "Show Bindings");
ee.expandCollapseEntity("WIDGETS");
ee.expandCollapseEntity("FormTest");
ee.ActionContextMenuByEntityName("FormTestCopy", "Show Bindings");
cy.get(apiwidget.propertyList).then(function($lis) {
expect($lis).to.have.length(2);
expect($lis.eq(0)).to.contain("{{FormTestCopy.isVisible}}");

View File

@ -9,7 +9,7 @@ describe("Phone input widget - ", () => {
cy.addDsl(dsl);
});
it("Add new dropdown widget", () => {
it("1. Add new dropdown widget", () => {
cy.get(explorer.addWidget).click();
cy.dragAndDropToCanvas(widgetName, { x: 300, y: 300 });
cy.get(`.t--widget-${widgetName}`).should("exist");
@ -21,7 +21,7 @@ describe("Phone input widget - ", () => {
);
});
it("should check for the format and dialCode", () => {
it("2. Should check for the format and dialCode", () => {
cy.get(`.t--widget-${widgetName} input`).clear();
cy.wait(500);
cy.get(`.t--widget-${widgetName} input`).type("9999999999");
@ -80,7 +80,7 @@ describe("Phone input widget - ", () => {
cy.get(".t--input-country-code-change").should("contain", "🇮🇳+91");
});
it("should check that widget input resets on submit", () => {
it("3. Should check that widget input resets on submit", () => {
cy.openPropertyPane("textwidget");
cy.updateCodeInput(
".t--property-control-text",
@ -94,9 +94,11 @@ describe("Phone input widget - ", () => {
cy.addSuccessMessage("Submitted!!");
cy.get(widgetInput).clear();
cy.wait(300);
cy.get(widgetInput).type("1234567890");
cy.wait(300);
cy.wait(500);
cy.get(widgetInput)
.click()
.type("1234567890");
cy.wait(500);
cy.get(".t--widget-textwidget").should("contain", "1234567890:1234567890");
cy.get(widgetInput).type("{enter}");
cy.wait(300);

View File

@ -5,10 +5,9 @@ const pages = require("../../../../locators/Pages.json");
const testdata = require("../../../../fixtures/testdata.json");
describe("Rest Bugs tests", function() {
//Skipping until api endpoint fixed
it.skip("Bug 5550: Not able to run APIs in parallel", function() {
it("Bug 5550: Not able to run APIs in parallel", function() {
cy.addDsl(dslParallel);
cy.wait(5000); //settling time for dsl!
cy.wait(8000); //settling time for dsl!
cy.get(".bp3-spinner").should("not.exist");
//Api 1
@ -20,56 +19,90 @@ describe("Rest Bugs tests", function() {
//Api 2
cy.NavigateToAPI_Panel();
cy.CreateAPI("CatFacts");
cy.enterDatasource(
"https://cat-fact.herokuapp.com/facts/random?animal_type=cat",
);
cy.assertPageSave();
cy.get("body").click(0, 0);
//Api 3
cy.NavigateToAPI_Panel();
cy.CreateAPI("DogImage");
cy.enterDatasource("https://dog.ceo/api/breeds/image/random");
cy.assertPageSave();
//important - needed for autosave of API before running
cy.get("body").click(0, 0);
//Api 3
cy.NavigateToAPI_Panel();
cy.CreateAPI("NumberFact");
cy.enterDatasource("http://numbersapi.com/random/math");
cy.assertPageSave();
cy.get("body").click(0, 0);
//Api 4
cy.NavigateToAPI_Panel();
cy.CreateAPI("DogFacts");
cy.CreateAPI("CocktailDB");
cy.enterDatasource(
"https://cat-fact.herokuapp.com/facts/random?animal_type=dog",
"https://www.thecocktaildb.com/api/json/v1/1/search.php?s=margarita",
);
cy.assertPageSave();
cy.get("body").click(0, 0);
cy.contains(commonlocators.entityName, "Page1").click({ force: true });
cy.clickButton("Get Facts!");
cy.contains(commonlocators.entityName, "Page1")
.click({ force: true })
.wait(2000);
cy.clickButton("Invoke APIs!");
cy.wait(12000); // for all api calls to complete!
cy.wait("@postExecute", { timeout: 8000 }).then(({ response }) => {
expect(response.body.data.isExecutionSuccess).to.eq(true);
expect(response.body.data.body[0].url.length).to.be.above(0);
});
//Cat Image
cy.xpath("//img/parent::div")
.eq(0)
.find("img")
.invoke("attr", "src")
.then(($src) => {
expect($src).not.eq("https://assets.appsmith.com/widgets/default.png");
expect($src).contains("cat");
});
cy.wait("@postExecute", { timeout: 8000 }).then(({ response }) => {
expect(response.body.data.isExecutionSuccess).to.eq(true);
expect(response.body.data.body.type).to.eq("cat");
});
// cy.wait("@postExecute").then(({ response }) => {
// expect(response.body.data.isExecutionSuccess).to.eq(true);
// expect(response.body.data.body[0].url.length).to.be.above(0); //Cat image
// });
cy.wait("@postExecute", { timeout: 8000 }).then(({ response }) => {
expect(response.body.data.isExecutionSuccess).to.eq(true);
expect(response.body.data.body.message.length).to.be.above(0);
});
// cy.wait("@postExecute", { timeout: 8000 }).then(({ response }) => {
// expect(response.body.data.isExecutionSuccess).to.eq(true);
// expect(response.body.data.body.message.length).to.be.above(0); //Dog Image
// });
cy.wait("@postExecute", { timeout: 8000 }).then(({ response }) => {
//cy.log("Response is :"+ JSON.stringify(response.body))
//Dog Image
cy.xpath("//img/parent::div")
.eq(1)
.find("img")
.invoke("attr", "src")
.then(($src) => {
expect($src).not.eq("https://assets.appsmith.com/widgets/default.png");
expect($src).contains("dog");
});
expect(response.body.data.isExecutionSuccess).to.eq(true);
expect(response.body.data.body.type).to.eq("dog");
});
// cy.wait("@postExecute", { timeout: 8000 }).then(({ response }) => {
// expect(response.body.data.isExecutionSuccess).to.eq(true);
// expect(response.body.data.body.length).to.be.above(0); //Number fact
// });
cy.get(".t--draggable-textwidget")
.eq(0)
.invoke("text")
.then(($txt) => expect($txt).to.have.length.greaterThan(25));
// cy.wait("@postExecute", { timeout: 8000 }).then(({ response }) => {
// //cy.log("Response is :"+ JSON.stringify(response.body))
// expect(response.body.data.isExecutionSuccess).to.eq(true);
// expect(response.body.data.request.url.length).to.be.above(0); //Cocktail
// });
//Cocktail DB
cy.xpath("//img/parent::div")
.eq(2)
.find("img")
.invoke("attr", "src")
.then(($src) => {
expect($src).not.eq("https://assets.appsmith.com/widgets/default.png");
expect($src).contains("cocktail");
});
//Spread to check later!
// cy.wait(['@postExecute', '@postExecute', '@postExecute', '@postExecute'], { timeout: 8000 }).spread(

View File

@ -1,8 +1,11 @@
const apiwidget = require("../../../../locators/apiWidgetslocator.json");
const datasourceFormData = require("../../../../fixtures/datasources.json");
const datasourceEditor = require("../../../../locators/DatasourcesEditor.json");
describe("Authenticated API Datasource", function() {
it("Can create New Authentication API datasource", function() {
const URL = datasourceFormData["authenticatedApiUrl"];
it("1. Bug: 12045 - No Blank screen diplay after New Authentication API datasource creation", function() {
cy.NavigateToAPI_Panel();
cy.get(apiwidget.createAuthApiDatasource).click({ force: true });
cy.wait("@createDatasource").should(
@ -10,9 +13,17 @@ describe("Authenticated API Datasource", function() {
"response.body.responseMeta.status",
201,
);
cy.renameDatasource("FakeAuthenticatedApi");
cy.fillAuthenticatedAPIForm();
cy.saveDatasource();
const URL = datasourceFormData["authenticatedApiUrl"];
cy.contains(URL);
});
it("2. Bug: 12045 - No Blank screen diplay after editing/opening existing Authentication API datasource", function() {
cy.xpath("//span[text()='EDIT']/parent::a").click();
cy.get(datasourceEditor.url).type("/users");
cy.saveDatasource();
cy.contains(URL + "/users");
cy.deleteDatasource("FakeAuthenticatedApi");
});
});

View File

@ -3,9 +3,8 @@ const apiwidget = require("../../../../locators/apiWidgetslocator.json");
const explorer = require("../../../../locators/explorerlocators.json");
const pageid = "MyPage";
import { AggregateHelper } from "../../../../support/Pages/AggregateHelper";
const AHelper = new AggregateHelper();
import { ObjectsRegistry } from "../../../../support/Objects/Registry";
let ee = ObjectsRegistry.EntityExplorer;
describe("Entity explorer API pane related testcases", function() {
it("Empty Message validation for Widgets/API/Queries", function() {
@ -33,7 +32,7 @@ describe("Entity explorer API pane related testcases", function() {
);
cy.ResponseStatusCheck(testdata.successStatusCode);
cy.CheckAndUnfoldEntityItem("QUERIES/JS");
AHelper.ActionContextMenuByEntityName("FirstAPI", "Show Bindings");
ee.ActionContextMenuByEntityName("FirstAPI", "Show Bindings");
cy.get(apiwidget.propertyList).then(function($lis) {
expect($lis).to.have.length(5);
expect($lis.eq(0)).to.contain("{{FirstAPI.isLoading}}");
@ -49,14 +48,14 @@ describe("Entity explorer API pane related testcases", function() {
cy.get(".t--entity-name")
.contains("Page1")
.click();
AHelper.ActionContextMenuByEntityName("FirstAPI", "Edit Name");
ee.ActionContextMenuByEntityName("FirstAPI", "Edit Name");
cy.EditApiNameFromExplorer("SecondAPI");
cy.xpath(apiwidget.popover)
.last()
.should("be.hidden")
.invoke("show")
.click({ force: true });
AHelper.ActionContextMenuByEntityName("SecondAPI", "Move to page", pageid);
ee.ActionContextMenuByEntityName("SecondAPI", "Move to page", pageid);
cy.get(".t--entity-name")
.contains("SecondAPI")
.should("exist");

View File

@ -1,8 +1,9 @@
const queryLocators = require("../../../../locators/QueryEditor.json");
const datasource = require("../../../../locators/DatasourcesEditor.json");
const apiwidget = require("../../../../locators/apiWidgetslocator.json");
import { AggregateHelper } from "../../../../support/Pages/AggregateHelper";
const agHelper = new AggregateHelper();
import { ObjectsRegistry } from "../../../../support/Objects/Registry";
let ee = ObjectsRegistry.EntityExplorer;
const pageid = "MyPage";
let updatedName;
@ -55,7 +56,7 @@ describe("Entity explorer tests related to copy query", function() {
datasourceName = httpResponse.response.body.data.name;
cy.CheckAndUnfoldEntityItem("QUERIES/JS");
agHelper.ActionContextMenuByEntityName("Query1", "Show Bindings");
ee.ActionContextMenuByEntityName("Query1", "Show Bindings");
cy.get(apiwidget.propertyList).then(function($lis) {
expect($lis).to.have.length(5);
expect($lis.eq(0)).to.contain("{{Query1.isLoading}}");
@ -71,13 +72,13 @@ describe("Entity explorer tests related to copy query", function() {
cy.get(".t--entity-name")
.contains("Page1")
.click({ force: true });
agHelper.ActionContextMenuByEntityName("Query1", "Copy to page", pageid);
ee.ActionContextMenuByEntityName("Query1", "Copy to page", pageid);
cy.CheckAndUnfoldEntityItem("QUERIES/JS");
cy.get(".t--entity-name")
.contains("Query1")
.click({ force: true });
cy.runQuery();
agHelper.ActionContextMenuByEntityName("Query1", "Show Bindings");
ee.ActionContextMenuByEntityName("Query1", "Show Bindings");
cy.get(apiwidget.propertyList).then(function($lis) {
expect($lis.eq(0)).to.contain("{{Query1.isLoading}}");
expect($lis.eq(1)).to.contain("{{Query1.data}}");
@ -100,11 +101,7 @@ describe("Entity explorer tests related to copy query", function() {
cy.CheckAndUnfoldEntityItem("QUERIES/JS");
cy.EditEntityNameByDoubleClick(datasourceName, updatedName);
cy.wait(1000);
agHelper.ActionContextMenuByEntityName(
updatedName,
"Delete",
"Are you sure?",
);
ee.ActionContextMenuByEntityName(updatedName, "Delete", "Are you sure?");
cy.wait(1000);
//This is check to make sure if a datasource is active 409
cy.wait("@deleteDatasource").should(
@ -116,6 +113,6 @@ describe("Entity explorer tests related to copy query", function() {
cy.get(".t--entity-name")
.contains("Query1")
.click();
agHelper.ActionContextMenuByEntityName("Query1", "Delete", "Are you sure?");
ee.ActionContextMenuByEntityName("Query1", "Delete", "Are you sure?");
});
});

View File

@ -1,27 +1,27 @@
import { AggregateHelper } from "../../../../support/Pages/AggregateHelper";
import { JSEditor } from "../../../../support/Pages/JSEditor";
import { ObjectsRegistry } from "../../../../support/Objects/Registry"
const agHelper = new AggregateHelper();
const jsEditor = new JSEditor();
let agHelper = ObjectsRegistry.AggregateHelper,
ee = ObjectsRegistry.EntityExplorer,
jsEditor = ObjectsRegistry.JSEditor;
describe("Validate basic operations on Entity explorer JSEditor structure", () => {
const pageId = "Page1";
it("1. Validate JSObject creation & Run", () => {
jsEditor.CreateJSObject('return "Hello World";');
agHelper.expandCollapseEntity("QUERIES/JS");
agHelper.ValidateEntityPresenceInExplorer("JSObject1");
ee.expandCollapseEntity("QUERIES/JS");
ee.AssertEntityPresenceInExplorer("JSObject1");
jsEditor.validateDefaultJSObjProperties("JSObject1");
});
it("2. Validate Rename JSObject from Form Header", function() {
jsEditor.RenameJSObjFromForm("RenamedJSObject");
agHelper.ValidateEntityPresenceInExplorer("RenamedJSObject");
ee.AssertEntityPresenceInExplorer("RenamedJSObject");
jsEditor.validateDefaultJSObjProperties("RenamedJSObject");
});
it("3. Validate Copy JSObject", function() {
agHelper.ActionContextMenuByEntityName(
ee.ActionContextMenuByEntityName(
"RenamedJSObject",
"Copy to page",
pageId,
@ -31,40 +31,40 @@ describe("Validate basic operations on Entity explorer JSEditor structure", () =
"response.body.responseMeta.status",
201,
);
agHelper.ValidateEntityPresenceInExplorer("RenamedJSObjectCopy");
ee.AssertEntityPresenceInExplorer("RenamedJSObjectCopy");
jsEditor.validateDefaultJSObjProperties("RenamedJSObjectCopy");
});
it("4. Validate Rename JSObject from Entity Explorer", function() {
jsEditor.RenameJSObjFromExplorer("RenamedJSObject", "ExplorerRenamed");
agHelper.ValidateEntityPresenceInExplorer("ExplorerRenamed");
ee.AssertEntityPresenceInExplorer("ExplorerRenamed");
jsEditor.validateDefaultJSObjProperties("ExplorerRenamed");
});
it("5. Validate Move JSObject", function() {
const newPageId = "Page2";
agHelper.AddNewPage();
agHelper.ValidateEntityPresenceInExplorer(newPageId);
agHelper.SelectEntityByName(pageId);
agHelper.expandCollapseEntity("QUERIES/JS");
agHelper.ActionContextMenuByEntityName(
ee.AssertEntityPresenceInExplorer(newPageId);
ee.SelectEntityByName(pageId);
ee.expandCollapseEntity("QUERIES/JS");
ee.ActionContextMenuByEntityName(
"RenamedJSObjectCopy",
"Move to page",
newPageId,
);
agHelper.SelectEntityByName(newPageId);
agHelper.ValidateEntityPresenceInExplorer("RenamedJSObjectCopy");
ee.SelectEntityByName(newPageId);
ee.AssertEntityPresenceInExplorer("RenamedJSObjectCopy");
jsEditor.validateDefaultJSObjProperties("RenamedJSObjectCopy");
});
it("6. Validate Deletion of JSObject", function() {
agHelper.SelectEntityByName(pageId);
agHelper.expandCollapseEntity("QUERIES/JS");
agHelper.ActionContextMenuByEntityName(
ee.SelectEntityByName(pageId);
ee.expandCollapseEntity("QUERIES/JS");
ee.ActionContextMenuByEntityName(
"ExplorerRenamed",
"Delete",
"Are you sure?",
);
agHelper.ValidateEntityAbsenceInExplorer("ExplorerRenamed");
ee.AssertEntityAbsenceInExplorer("ExplorerRenamed");
});
});

View File

@ -1,13 +1,12 @@
import { ApiPage } from "../../../../support/Pages/ApiPage";
import { AggregateHelper } from "../../../../support/Pages/AggregateHelper";
import { HomePage } from "../../../../support/Pages/HomePage";
import { ObjectsRegistry } from "../../../../support/Objects/Registry"
const apiPage = new ApiPage();
const agHelper = new AggregateHelper();
const homePage = new HomePage();
let dsl: any;
let agHelper = ObjectsRegistry.AggregateHelper,
homePage = ObjectsRegistry.HomePage,
ee = ObjectsRegistry.EntityExplorer,
apiPage = ObjectsRegistry.ApiPage;
describe("Layout OnLoad Actions tests", function() {
let dsl: any;
before(() => {
cy.fixture("onPageLoadActionsDsl").then((val: any) => {
dsl = val;
@ -16,8 +15,8 @@ describe("Layout OnLoad Actions tests", function() {
it("1. Bug 8595: OnPageLoad execution - when No api to run on Pageload", function() {
agHelper.AddDsl(dsl);
agHelper.SelectEntityByName("WIDGETS");
agHelper.SelectEntityByName("Page1");
ee.SelectEntityByName("WIDGETS");
ee.SelectEntityByName("Page1");
cy.url().then((url) => {
const pageid = url.split("/")[4]?.split("-").pop();
cy.log(pageid + "page id");
@ -55,8 +54,8 @@ describe("Layout OnLoad Actions tests", function() {
apiPage.CreateAndFillApi("https://api.genderize.io", "Genderize");
apiPage.EnterParams("name", "{{RandomUser.data.results[0].name.first}}");
apiPage.RunAPI();
agHelper.SelectEntityByName("WIDGETS");
agHelper.SelectEntityByName("Page1");
ee.SelectEntityByName("WIDGETS");
ee.SelectEntityByName("Page1");
cy.url().then((url) => {
const pageid = url.split("/")[4]?.split("-").pop();
@ -132,8 +131,8 @@ describe("Layout OnLoad Actions tests", function() {
value: "{{RandomUser.data.results[0].name.first}}",
}); // verifies Bug 10055
apiPage.RunAPI();
agHelper.SelectEntityByName("WIDGETS");
agHelper.SelectEntityByName("Page1");
ee.SelectEntityByName("WIDGETS");
ee.SelectEntityByName("Page1");
cy.url().then((url) => {
const pageid = url.split("/")[4]?.split("-").pop();

View File

@ -1,13 +1,10 @@
import { AggregateHelper } from "../../../../support/Pages/AggregateHelper";
import { HomePage } from "../../../../support/Pages/HomePage";
import { ObjectsRegistry } from "../../../../support/Objects/Registry"
const agHelper = new AggregateHelper();
const homePage = new HomePage();
let orgid: any, appid: any;
let agHelper = ObjectsRegistry.AggregateHelper,
homePage = ObjectsRegistry.HomePage;
describe("Create new org and invite user & validate all roles", () => {
let orgid: any;
let appid: any;
it("1. Create new Organization, Share with a user from UI & verify", () => {
homePage.NavigateToHome()
agHelper.GenerateUUID()

View File

@ -1,12 +1,12 @@
import { AggregateHelper } from "../../../../support/Pages/AggregateHelper";
import { JSEditor } from "../../../../support/Pages/JSEditor";
import { DataSources } from "../../../../support/Pages/DataSources";
import { CommonLocators } from "../../../../support/Objects/CommonLocators";
import { ObjectsRegistry } from "../../../../support/Objects/Registry"
const agHelper = new AggregateHelper();
const jsEditor = new JSEditor();
const dataSources = new DataSources();
const locator = new CommonLocators();
let guid: any;
let agHelper = ObjectsRegistry.AggregateHelper,
dataSources = ObjectsRegistry.DataSources,
jsEditor = ObjectsRegistry.JSEditor,
locator = ObjectsRegistry.CommonLocators,
ee = ObjectsRegistry.EntityExplorer,
table = ObjectsRegistry.Table;
describe("[Bug] - 10784 - Passing params from JS to SQL query should not break", () => {
before(() => {
@ -15,10 +15,8 @@ describe("[Bug] - 10784 - Passing params from JS to SQL query should not break",
});
});
let guid: any;
it("1. With Optional chaining : {{ this?.params?.condition }}", function() {
agHelper.NavigateToDSCreateNew();
it("1. With Optional chaining : {{ this?.params?.condition }}", function () {
dataSources.NavigateToDSCreateNew();
dataSources.CreatePlugIn("PostgreSQL");
dataSources.FillPostgresDSForm();
agHelper.GenerateUUID();
@ -37,8 +35,8 @@ describe("[Bug] - 10784 - Passing params from JS to SQL query should not break",
'Params1.run(() => {},() => {},{"condition": selRecordFilter.selectedOptionValue})',
);
});
agHelper.expandCollapseEntity("WIDGETS");
agHelper.SelectEntityByName("Button1");
ee.expandCollapseEntity("WIDGETS");
ee.SelectEntityByName("Button1");
cy.get("@jsObjName").then((jsObjName) => {
jsEditor.EnterJSContext(
"onclick",
@ -47,12 +45,12 @@ describe("[Bug] - 10784 - Passing params from JS to SQL query should not break",
true,
);
});
agHelper.SelectEntityByName("Table1");
ee.SelectEntityByName("Table1");
jsEditor.EnterJSContext("tabledata", "{{Params1.data}}");
agHelper.ClickButton("Submit");
agHelper.ValidateNetworkExecutionSuccess("@postExecute");
agHelper.ReadTableRowColumnData(0, 0).then((cellData) => {
table.ReadTableRowColumnData(0, 0).then((cellData) => {
expect(cellData).to.be.equal("8");
});
@ -61,12 +59,12 @@ describe("[Bug] - 10784 - Passing params from JS to SQL query should not break",
agHelper.ClickButton("Submit");
agHelper.Sleep(2000);
agHelper.ValidateNetworkExecutionSuccess("@postExecute");
agHelper.ReadTableRowColumnData(0, 0).then((cellData) => {
table.ReadTableRowColumnData(0, 0).then((cellData) => {
expect(cellData).to.be.equal("7");
});
});
it("2. With Optional chaining : {{ (function() { return this?.params?.condition })() }}", function() {
it("2. With Optional chaining : {{ (function() { return this?.params?.condition })() }}", function () {
dataSources.NavigateToActiveDSQueryPane(guid);
agHelper.GetNClick(dataSources._templateMenu);
agHelper.RenameWithInPane("Params2");
@ -77,7 +75,7 @@ describe("[Bug] - 10784 - Passing params from JS to SQL query should not break",
'Params2.run(() => {},() => {},{"condition": selRecordFilter.selectedOptionValue})',
);
agHelper.SelectEntityByName("Button1");
ee.SelectEntityByName("Button1");
cy.get("@jsObjName").then((jsObjName) => {
jsEditor.EnterJSContext(
"onclick",
@ -86,12 +84,12 @@ describe("[Bug] - 10784 - Passing params from JS to SQL query should not break",
true,
);
});
agHelper.SelectEntityByName("Table1");
ee.SelectEntityByName("Table1");
jsEditor.EnterJSContext("tabledata", "{{Params2.data}}");
agHelper.ClickButton("Submit");
agHelper.ValidateNetworkExecutionSuccess("@postExecute");
agHelper.ReadTableRowColumnData(0, 0).then((cellData) => {
table.ReadTableRowColumnData(0, 0).then((cellData) => {
expect(cellData).to.be.equal("7");
});
@ -100,12 +98,12 @@ describe("[Bug] - 10784 - Passing params from JS to SQL query should not break",
agHelper.ClickButton("Submit");
agHelper.Sleep(2000);
agHelper.ValidateNetworkExecutionSuccess("@postExecute");
agHelper.ReadTableRowColumnData(0, 0).then((cellData) => {
table.ReadTableRowColumnData(0, 0).then((cellData) => {
expect(cellData).to.be.equal("9");
});
});
it("3. With Optional chaining : {{ (() => { return this?.params?.condition })() }}", function() {
it("3. With Optional chaining : {{ (() => { return this?.params?.condition })() }}", function () {
dataSources.NavigateToActiveDSQueryPane(guid);
agHelper.GetNClick(dataSources._templateMenu);
agHelper.RenameWithInPane("Params3");
@ -116,7 +114,7 @@ describe("[Bug] - 10784 - Passing params from JS to SQL query should not break",
'Params3.run(() => {},() => {},{"condition": selRecordFilter.selectedOptionValue})',
);
agHelper.SelectEntityByName("Button1");
ee.SelectEntityByName("Button1");
cy.get("@jsObjName").then((jsObjName) => {
jsEditor.EnterJSContext(
"onclick",
@ -125,12 +123,12 @@ describe("[Bug] - 10784 - Passing params from JS to SQL query should not break",
true,
);
});
agHelper.SelectEntityByName("Table1");
ee.SelectEntityByName("Table1");
jsEditor.EnterJSContext("tabledata", "{{Params3.data}}");
agHelper.ClickButton("Submit");
agHelper.ValidateNetworkExecutionSuccess("@postExecute");
agHelper.ReadTableRowColumnData(0, 0).then((cellData) => {
table.ReadTableRowColumnData(0, 0).then((cellData) => {
expect(cellData).to.be.equal("9");
});
@ -139,12 +137,12 @@ describe("[Bug] - 10784 - Passing params from JS to SQL query should not break",
agHelper.ClickButton("Submit");
agHelper.Sleep(2000);
agHelper.ValidateNetworkExecutionSuccess("@postExecute");
agHelper.ReadTableRowColumnData(0, 0).then((cellData) => {
table.ReadTableRowColumnData(0, 0).then((cellData) => {
expect(cellData).to.be.equal("8");
});
});
it("4. With Optional chaining : {{ this?.params.condition }}", function() {
it("4. With Optional chaining : {{ this?.params.condition }}", function () {
dataSources.NavigateToActiveDSQueryPane(guid);
agHelper.GetNClick(dataSources._templateMenu);
agHelper.RenameWithInPane("Params4");
@ -155,7 +153,7 @@ describe("[Bug] - 10784 - Passing params from JS to SQL query should not break",
'Params4.run(() => {},() => {},{"condition": selRecordFilter.selectedOptionValue})',
);
agHelper.SelectEntityByName("Button1");
ee.SelectEntityByName("Button1");
cy.get("@jsObjName").then((jsObjName) => {
jsEditor.EnterJSContext(
"onclick",
@ -164,12 +162,12 @@ describe("[Bug] - 10784 - Passing params from JS to SQL query should not break",
true,
);
});
agHelper.SelectEntityByName("Table1");
ee.SelectEntityByName("Table1");
jsEditor.EnterJSContext("tabledata", "{{Params4.data}}");
agHelper.ClickButton("Submit");
agHelper.ValidateNetworkExecutionSuccess("@postExecute");
agHelper.ReadTableRowColumnData(0, 0).then((cellData) => {
table.ReadTableRowColumnData(0, 0).then((cellData) => {
expect(cellData).to.be.equal("8");
});
@ -178,12 +176,12 @@ describe("[Bug] - 10784 - Passing params from JS to SQL query should not break",
agHelper.ClickButton("Submit");
agHelper.Sleep(2000);
agHelper.ValidateNetworkExecutionSuccess("@postExecute");
agHelper.ReadTableRowColumnData(0, 0).then((cellData) => {
table.ReadTableRowColumnData(0, 0).then((cellData) => {
expect(cellData).to.be.equal("7");
});
});
it("5. With Optional chaining : {{ (function() { return this?.params.condition })() }}", function() {
it("5. With Optional chaining : {{ (function() { return this?.params.condition })() }}", function () {
dataSources.NavigateToActiveDSQueryPane(guid);
agHelper.GetNClick(dataSources._templateMenu);
agHelper.RenameWithInPane("Params5");
@ -194,7 +192,7 @@ describe("[Bug] - 10784 - Passing params from JS to SQL query should not break",
'Params5.run(() => {},() => {},{"condition": selRecordFilter.selectedOptionValue})',
);
agHelper.SelectEntityByName("Button1");
ee.SelectEntityByName("Button1");
cy.get("@jsObjName").then((jsObjName) => {
jsEditor.EnterJSContext(
"onclick",
@ -203,12 +201,12 @@ describe("[Bug] - 10784 - Passing params from JS to SQL query should not break",
true,
);
});
agHelper.SelectEntityByName("Table1");
ee.SelectEntityByName("Table1");
jsEditor.EnterJSContext("tabledata", "{{Params5.data}}");
agHelper.ClickButton("Submit");
agHelper.ValidateNetworkExecutionSuccess("@postExecute");
agHelper.ReadTableRowColumnData(0, 0).then((cellData) => {
table.ReadTableRowColumnData(0, 0).then((cellData) => {
expect(cellData).to.be.equal("7");
});
@ -217,12 +215,12 @@ describe("[Bug] - 10784 - Passing params from JS to SQL query should not break",
agHelper.ClickButton("Submit");
agHelper.Sleep(2000);
agHelper.ValidateNetworkExecutionSuccess("@postExecute");
agHelper.ReadTableRowColumnData(0, 0).then((cellData) => {
table.ReadTableRowColumnData(0, 0).then((cellData) => {
expect(cellData).to.be.equal("9");
});
});
it("6. With Optional chaining : {{ (() => { return this?.params.condition })() }}", function() {
it("6. With Optional chaining : {{ (() => { return this?.params.condition })() }}", function () {
dataSources.NavigateToActiveDSQueryPane(guid);
agHelper.GetNClick(dataSources._templateMenu);
agHelper.RenameWithInPane("Params6");
@ -233,7 +231,7 @@ describe("[Bug] - 10784 - Passing params from JS to SQL query should not break",
'Params6.run(() => {},() => {},{"condition": selRecordFilter.selectedOptionValue})',
);
agHelper.SelectEntityByName("Button1");
ee.SelectEntityByName("Button1");
cy.get("@jsObjName").then((jsObjName) => {
jsEditor.EnterJSContext(
"onclick",
@ -242,12 +240,12 @@ describe("[Bug] - 10784 - Passing params from JS to SQL query should not break",
true,
);
});
agHelper.SelectEntityByName("Table1");
ee.SelectEntityByName("Table1");
jsEditor.EnterJSContext("tabledata", "{{Params6.data}}");
agHelper.ClickButton("Submit");
agHelper.ValidateNetworkExecutionSuccess("@postExecute");
agHelper.ReadTableRowColumnData(0, 0).then((cellData) => {
table.ReadTableRowColumnData(0, 0).then((cellData) => {
expect(cellData).to.be.equal("9");
});
@ -256,12 +254,12 @@ describe("[Bug] - 10784 - Passing params from JS to SQL query should not break",
agHelper.ClickButton("Submit");
agHelper.Sleep(2000);
agHelper.ValidateNetworkExecutionSuccess("@postExecute");
agHelper.ReadTableRowColumnData(0, 0).then((cellData) => {
table.ReadTableRowColumnData(0, 0).then((cellData) => {
expect(cellData).to.be.equal("8");
});
});
it("7. With No Optional chaining : {{ this.params.condition }}", function() {
it("7. With No Optional chaining : {{ this.params.condition }}", function () {
dataSources.NavigateToActiveDSQueryPane(guid);
agHelper.GetNClick(dataSources._templateMenu);
agHelper.RenameWithInPane("Params7");
@ -272,7 +270,7 @@ describe("[Bug] - 10784 - Passing params from JS to SQL query should not break",
'Params7.run(() => {},() => {},{"condition": selRecordFilter.selectedOptionValue})',
);
agHelper.SelectEntityByName("Button1");
ee.SelectEntityByName("Button1");
cy.get("@jsObjName").then((jsObjName) => {
jsEditor.EnterJSContext(
"onclick",
@ -281,12 +279,12 @@ describe("[Bug] - 10784 - Passing params from JS to SQL query should not break",
true,
);
});
agHelper.SelectEntityByName("Table1");
ee.SelectEntityByName("Table1");
jsEditor.EnterJSContext("tabledata", "{{Params7.data}}");
agHelper.ClickButton("Submit");
agHelper.ValidateNetworkExecutionSuccess("@postExecute");
agHelper.ReadTableRowColumnData(0, 0).then((cellData) => {
table.ReadTableRowColumnData(0, 0).then((cellData) => {
expect(cellData).to.be.equal("8");
});
@ -295,12 +293,12 @@ describe("[Bug] - 10784 - Passing params from JS to SQL query should not break",
agHelper.ClickButton("Submit");
agHelper.Sleep(2000);
agHelper.ValidateNetworkExecutionSuccess("@postExecute");
agHelper.ReadTableRowColumnData(0, 0).then((cellData) => {
table.ReadTableRowColumnData(0, 0).then((cellData) => {
expect(cellData).to.be.equal("7");
});
});
it("8. With No Optional chaining : {{ (function() { return this.params.condition })() }}", function() {
it("8. With No Optional chaining : {{ (function() { return this.params.condition })() }}", function () {
dataSources.NavigateToActiveDSQueryPane(guid);
agHelper.GetNClick(dataSources._templateMenu);
agHelper.RenameWithInPane("Params8");
@ -311,7 +309,7 @@ describe("[Bug] - 10784 - Passing params from JS to SQL query should not break",
'Params8.run(() => {},() => {},{"condition": selRecordFilter.selectedOptionValue})',
);
agHelper.SelectEntityByName("Button1");
ee.SelectEntityByName("Button1");
cy.get("@jsObjName").then((jsObjName) => {
jsEditor.EnterJSContext(
"onclick",
@ -320,12 +318,12 @@ describe("[Bug] - 10784 - Passing params from JS to SQL query should not break",
true,
);
});
agHelper.SelectEntityByName("Table1");
ee.SelectEntityByName("Table1");
jsEditor.EnterJSContext("tabledata", "{{Params8.data}}");
agHelper.ClickButton("Submit");
agHelper.ValidateNetworkExecutionSuccess("@postExecute");
agHelper.ReadTableRowColumnData(0, 0).then((cellData) => {
table.ReadTableRowColumnData(0, 0).then((cellData) => {
expect(cellData).to.be.equal("7");
});
@ -334,12 +332,12 @@ describe("[Bug] - 10784 - Passing params from JS to SQL query should not break",
agHelper.ClickButton("Submit");
agHelper.Sleep(2000);
agHelper.ValidateNetworkExecutionSuccess("@postExecute");
agHelper.ReadTableRowColumnData(0, 0).then((cellData) => {
table.ReadTableRowColumnData(0, 0).then((cellData) => {
expect(cellData).to.be.equal("9");
});
});
it("9. With No Optional chaining : {{ (() => { return this.params.condition })() }}", function() {
it("9. With No Optional chaining : {{ (() => { return this.params.condition })() }}", function () {
dataSources.NavigateToActiveDSQueryPane(guid);
agHelper.GetNClick(dataSources._templateMenu);
agHelper.RenameWithInPane("Params9");
@ -350,7 +348,7 @@ describe("[Bug] - 10784 - Passing params from JS to SQL query should not break",
'Params9.run(() => {},() => {},{"condition": selRecordFilter.selectedOptionValue})',
);
agHelper.SelectEntityByName("Button1");
ee.SelectEntityByName("Button1");
cy.get("@jsObjName").then((jsObjName) => {
jsEditor.EnterJSContext(
"onclick",
@ -359,12 +357,12 @@ describe("[Bug] - 10784 - Passing params from JS to SQL query should not break",
true,
);
});
agHelper.SelectEntityByName("Table1");
ee.SelectEntityByName("Table1");
jsEditor.EnterJSContext("tabledata", "{{Params9.data}}");
agHelper.ClickButton("Submit");
agHelper.ValidateNetworkExecutionSuccess("@postExecute");
agHelper.ReadTableRowColumnData(0, 0).then((cellData) => {
table.ReadTableRowColumnData(0, 0).then((cellData) => {
expect(cellData).to.be.equal("9");
});
@ -373,12 +371,12 @@ describe("[Bug] - 10784 - Passing params from JS to SQL query should not break",
agHelper.ClickButton("Submit");
agHelper.Sleep(2000);
agHelper.ValidateNetworkExecutionSuccess("@postExecute");
agHelper.ReadTableRowColumnData(0, 0).then((cellData) => {
table.ReadTableRowColumnData(0, 0).then((cellData) => {
expect(cellData).to.be.equal("8");
});
});
it("10. With Optional chaining : {{ this?.params?.condition }} && no optional paramter passed", function() {
it("10. With Optional chaining : {{ this?.params?.condition }} && no optional paramter passed", function () {
dataSources.NavigateToActiveDSQueryPane(guid);
agHelper.GetNClick(dataSources._templateMenu);
agHelper.RenameWithInPane("Params10");
@ -389,7 +387,7 @@ describe("[Bug] - 10784 - Passing params from JS to SQL query should not break",
'Params10.run(() => {},() => {},{"condition": selRecordFilter.selectedOptionValue})',
);
agHelper.SelectEntityByName("Button1");
ee.SelectEntityByName("Button1");
cy.get("@jsObjName").then((jsObjName) => {
jsEditor.EnterJSContext(
"onclick",
@ -398,7 +396,7 @@ describe("[Bug] - 10784 - Passing params from JS to SQL query should not break",
true,
);
});
agHelper.SelectEntityByName("Table1");
ee.SelectEntityByName("Table1");
jsEditor.EnterJSContext("tabledata", "{{Params10.data}}");
//When No selected option passed
@ -408,7 +406,7 @@ describe("[Bug] - 10784 - Passing params from JS to SQL query should not break",
agHelper.ClickButton("Submit");
agHelper.Sleep(2000);
agHelper.ValidateNetworkExecutionSuccess("@postExecute");
agHelper.ReadTableRowColumnData(0, 0).then((cellData) => {
table.ReadTableRowColumnData(0, 0).then((cellData) => {
expect(cellData).to.be.equal("7");
});
});

View File

@ -2,10 +2,10 @@ const queryLocators = require("../../../../locators/QueryEditor.json");
const generatePage = require("../../../../locators/GeneratePage.json");
const datasource = require("../../../../locators/DatasourcesEditor.json");
import homePage from "../../../../locators/HomePage";
import { AggregateHelper } from "../../../../support/Pages/AggregateHelper";
import { ObjectsRegistry } from "../../../../support/Objects/Registry";
let ee = ObjectsRegistry.EntityExplorer;
let datasourceName;
const agHelper = new AggregateHelper();
describe("Create a query with a mongo datasource, run, save and then delete the query", function() {
beforeEach(() => {
@ -228,7 +228,7 @@ describe("Create a query with a mongo datasource, run, save and then delete the
it("9. Bug 7399: Validate Form based & Raw command based templates", function() {
let id;
agHelper.expandCollapseEntity(`${datasourceName}`);
ee.expandCollapseEntity(`${datasourceName}`);
cy.xpath(queryLocators.listingAndReviewContext)
.invoke("show")
.click({ force: true });

View File

@ -400,7 +400,7 @@ describe("Validate CRUD queries for Amazon S3 along with UI flow verifications",
//Verifying Searching File from UI
cy.xpath(queryLocators.searchFilefield)
.type("CRUD")
.wait(500); //for search to finish
.wait(7000); //for search to finish
expect(
cy.xpath(
"//div[@data-cy='overlay-comments-wrapper']//span[text()='CRUDNewPageFile']",

View File

@ -1,507 +0,0 @@
// const widgetsPage = require("../../../locators/Widgets.json");
// import homePage from "../../locators/HomePage";
// describe("Migration Validate", function () {
// it("1. Import application and Validate Migration on pageload", function () {
// // import application
// cy.get(homePage.homeIcon).click();
// cy.get(homePage.optionsIcon)
// .first()
// .click();
// cy.get(homePage.orgImportAppOption).click({ force: true });
// cy.get(homePage.orgImportAppModal).should("be.visible");
// cy.xpath(homePage.uploadLogo)
// .attachFile("TableMigrationAppExported.json")
// .wait(500);
// cy.get(homePage.orgImportAppButton)
// .trigger("click")
// .wait(500);
// cy.get(homePage.orgImportAppModal).should("not.exist");
// cy.wait("@importNewApplication").then((interception) => {
// let appId = interception.response.body.data.id;
// let defaultPage = interception.response.body.data.pages.find(
// (eachPage) => !!eachPage.isDefault,
// );
// cy.get(homePage.toastMessage).should(
// "contain",
// "Application imported successfully",
// );
// //Renaming imported app!
// const uuid = () => Cypress._.random(0, 1e4);
// const name = uuid();
// cy.wait(2000);
// cy.get(homePage.applicationName)
// .clear()
// .type(`app${name}`);
// cy.wrap(`app${name}`).as("appname");
// cy.wait(2000);
// // Validating data binding for the imported application - Page1
// //Validating Latitude & Longitude are hidden columns:
// cy.xpath(
// "//div[@class='tableWrap']//div[@class='thead']//div[@class='tr'][1]//div[@role='columnheader']//div[text()='latitude']/parent::div/parent::div",
// )
// .invoke("attr", "class")
// .then((classes) => {
// cy.log("classes are:" + classes);
// expect(classes).includes("hidden-header");
// });
// cy.xpath(
// "//div[@class='tableWrap']//div[@class='thead']//div[@class='tr'][1]//div[@role='columnheader']//div[text()='longitude']/parent::div/parent::div",
// )
// .invoke("attr", "class")
// .then((classes) => {
// cy.log("classes are:" + classes);
// expect(classes).includes("hidden-header");
// });
// //Validating order of header row!
// cy.xpath(
// "//div[@class='tableWrap']//div[@class='thead']//div[@class='tr'][1]",
// )
// .invoke("text")
// .then((x) => {
// expect(x).to.eq(
// "Card NumberidNameاسمaddress住所PhoneemailCompanyjobimagessnPin CodeCreditLimitOutstandingStateAvailable LimitCard TypeChange Credit limitimageURLlatitudelongitude",
// );
// cy.log("header set is:" + x);
// });
// //Validating Id column sorting happens as Datatype is Number in app!
// cy.xpath(
// "//div[@class='tableWrap']//div[@class='thead']//div[@class='tr'][1]//div[@role='columnheader']//div[text()='id']",
// )
// .click()
// .wait(2000);
// cy.readTabledataPublish("0", "1").then((cellData) => {
// expect(cellData).to.be.equal("100");
// });
// cy.readTabledataPublish("1", "1").then((cellData) => {
// expect(cellData).to.be.equal("99");
// });
// cy.readTabledataPublish("2", "1").then((cellData) => {
// expect(cellData).to.be.equal("98");
// });
// //Revert the Id column sorting!
// cy.xpath(
// "//div[@class='tableWrap']//div[@class='thead']//div[@class='tr'][1]//div[@role='columnheader']//div[text()='id']",
// )
// .click()
// .wait(2000);
// cy.readTabledataPublish("0", "1").then((cellData) => {
// expect(cellData).to.be.equal("1");
// });
// cy.readTabledataPublish("1", "1").then((cellData) => {
// expect(cellData).to.be.equal("2");
// });
// cy.readTabledataPublish("2", "1").then((cellData) => {
// expect(cellData).to.be.equal("3");
// });
// //Validating image column is present:
// cy.getTableDataSelector("0", "10").then((selector) => {
// cy.get(selector + " div")
// .invoke("attr", "class")
// .then((classes) => {
// cy.log("classes are:" + classes);
// expect(classes).to.eq("image-cell");
// });
// });
// //Card Number mapping to text widget!
// cy.isSelectRow(2);
// cy.wait(2500); //time for table row select to reflect!
// cy.readTabledataPublish("2", "0").then((cardNumber) => {
// cy.xpath("//div[contains(@class, ' t--widget-textwidget')][1]")
// .eq(1)
// .invoke("text")
// .then((cardNo) => {
// var format = /^\d{4}-\d{4}-\d{4}(-\d{4})?$/;
// expect(cardNumber).match(format);
// expect(cardNumber).to.be.equal(cardNo);
// });
// });
// //Address mapping to text widget!
// cy.readTabledataPublish("2", "4").then((address) => {
// cy.xpath("//div[contains(@class, ' t--widget-textwidget')][2]")
// .eq(1)
// .invoke("text")
// .then((addr) => {
// expect(address.replace(/\r?\n|\r/, "")).to.eq(addr);
// });
// });
// //Validating Available limit column computation maintained!
// cy.readTabledataPublish("2", "16").then((availLimit) => {
// cy.readTabledataPublish("2", "13").then((creditLimit) => {
// cy.readTabledataPublish("2", "14").then((outstanding) => {
// expect(Number(availLimit)).to.eq(creditLimit - outstanding);
// });
// });
// });
// //Validating State button click & binding & text widget mapping!
// cy.getTableDataSelector("2", "15").then((selector) => {
// cy.get(selector + " button.bp3-button")
// .click()
// .wait(3000);
// cy.waitUntil(
// () =>
// cy
// .xpath("//div[contains(@class, ' t--widget-textwidget')][2]", {
// timeout: 30000,
// })
// .eq(0)
// .should("contain.text", "State:"),
// {
// errorMsg: "Execute call did not complete evn after 10 secs",
// timeout: 20000,
// interval: 1000,
// },
// ).then(() => cy.wait(500));
// cy.get(selector + " button span")
// .invoke("text")
// .then((statetxt) => {
// cy.xpath("//div[contains(@class, ' t--widget-textwidget')][2]")
// .eq(0)
// .invoke("text")
// .then((txtWidtxt) => {
// cy.log("statetxt is:" + statetxt);
// let text =
// statetxt == "Activate" ? "State:Inactive" : "State:Active";
// expect(text).to.eq(txtWidtxt);
// });
// });
// });
// //Validating Image URL click & navigation!
// cy.getTableDataSelector("2", "19").then((selector) => {
// // Stubbing window.open to open in the same tab
// cy.window().then((window) => {
// cy.stub(window, "open").callsFake((url) => {
// window.location.href = url; //.substring(1);
// window.location.target = "_self";
// });
// });
// cy.get(selector + " span.bp3-popover-target span")
// .invoke("text")
// .then((url) => {
// cy.get(selector + " span.bp3-popover-target")
// .click()
// .wait(2000);
// cy.wait("@postExecute");
// cy.url().should("contain", url);
// cy.go(-1);
// });
// });
// // cy.wait(4000);
// // cy.get("div.tableWrap").should("be.visible"); //wait for page load!
// cy.waitUntil(
// () => cy.get("div.tableWrap", { timeout: 30000 }).should("be.visible"),
// {
// errorMsg: "Page is not loaded evn after 10 secs",
// timeout: 30000,
// interval: 2000,
// },
// ).then(() => cy.wait(1000)); //wait for page load!
// cy.isSelectRow(2); //as aft refresh row selection is also gone
// cy.getTableDataSelector("2", "18").then((selector) => {
// cy.get(selector + " button")
// .click()
// .wait(1000);
// cy.xpath(
// "//div//a[contains(@class, 'bp3-menu-item')]/div[text()='AddcreditLimit']/parent::a",
// )
// .click()
// .wait(2000);
// cy.waitUntil(
// () =>
// cy
// .xpath("//div[contains(@class, ' t--widget-textwidget')][1]", {
// timeout: 30000,
// })
// .eq(0)
// .should("contain.text", "CreditLimit:"),
// {
// errorMsg: "Execute call did not complete evn after 10 secs",
// timeout: 20000,
// interval: 1000,
// },
// ).then(() => cy.wait(500)); //allow time for n/w to finish
// cy.xpath("//div[contains(@class, ' t--widget-textwidget')][1]", {
// timeout: 30000,
// })
// .eq(0)
// .invoke("text")
// .then((addreduce) => {
// expect(addreduce).to.eq("CreditLimit:Add");
// });
// });
// //Manu Btn validation: - 2nd menu item
// cy.getTableDataSelector("2", "18").then((selector) => {
// cy.get(selector + " button")
// .click()
// .wait(1000);
// cy.xpath(
// "//div//a[contains(@class, 'bp3-menu-item')]/div[text()='Reducecreditlimit']/parent::a",
// )
// .click()
// .wait(2000);
// cy.waitUntil(
// () =>
// cy
// .xpath("//div[contains(@class, ' t--widget-textwidget')][1]", {
// timeout: 30000,
// })
// .eq(0)
// .should("contain.text", "CreditLimit:"),
// {
// errorMsg: "Execute call did not complete evn after 10 secs",
// timeout: 20000,
// interval: 1000,
// },
// ).then(() => cy.wait(500)); //allow time for n/w to finish
// cy.xpath("//div[contains(@class, ' t--widget-textwidget')][1]", {
// timeout: 30000,
// })
// .eq(0)
// .invoke("text")
// .then((addreduce) => {
// expect(addreduce).to.eq("CreditLimit:Reduce");
// });
// });
// //Another row!
// //Card Number mapping to text widget!
// cy.isSelectRow(4);
// cy.wait(2500); //time for table row select to reflect!
// cy.readTabledataPublish("4", "0").then((cardNumber) => {
// cy.xpath("//div[contains(@class, ' t--widget-textwidget')][1]")
// .eq(1)
// .invoke("text")
// .then((cardNo) => {
// var format = /^\d{4}-\d{4}-\d{4}(-\d{4})?$/;
// expect(cardNumber).match(format);
// expect(cardNumber).to.be.equal(cardNo);
// });
// });
// //Address mapping to text widget!
// cy.readTabledataPublish("4", "4").then((address) => {
// cy.xpath("//div[contains(@class, ' t--widget-textwidget')][2]")
// .eq(1)
// .invoke("text")
// .then((addr) => {
// expect(address.replace(/\r?\n|\r/, "")).to.eq(addr);
// });
// });
// //Validating Available limit column computation maintained!
// cy.readTabledataPublish("4", "16").then((availLimit) => {
// cy.readTabledataPublish("4", "13").then((creditLimit) => {
// cy.readTabledataPublish("4", "14").then((outstanding) => {
// expect(Number(availLimit)).to.eq(creditLimit - outstanding);
// });
// });
// });
// //Validating State button click & binding & text widget mapping!
// cy.getTableDataSelector("4", "15").then((selector) => {
// cy.get(selector + " button.bp3-button")
// .click()
// .wait(2000);
// cy.waitUntil(
// () =>
// cy
// .xpath("//div[contains(@class, ' t--widget-textwidget')][2]", {
// timeout: 30000,
// })
// .eq(0)
// .should("contain.text", "State:"),
// {
// errorMsg: "Execute call did not complete evn after 10 secs",
// timeout: 20000,
// interval: 1000,
// },
// ).then(() => cy.wait(500));
// cy.get(selector + " button span")
// .invoke("text")
// .then((statetxt) => {
// cy.xpath("//div[contains(@class, ' t--widget-textwidget')][2]")
// .eq(0)
// .invoke("text")
// .then((txtWidtxt) => {
// cy.log("statetxt is:" + statetxt);
// let text =
// statetxt == "Activate" ? "State:Inactive" : "State:Active";
// expect(text).to.eq(txtWidtxt);
// });
// });
// });
// //Validating Image URL click & navigation!
// cy.getTableDataSelector("4", "19").then((selector) => {
// // Stubbing window.open to open in the same tab
// cy.window().then((window) => {
// cy.stub(window, "open").callsFake((url) => {
// window.location.href = url; //.substring(1);
// window.location.target = "_self";
// });
// });
// cy.get(selector + " span.bp3-popover-target span")
// .invoke("text")
// .then((url) => {
// cy.get(selector + " span.bp3-popover-target")
// .click()
// .wait(2000);
// cy.wait("@postExecute");
// cy.url().should("contain", url);
// cy.go(-1);
// });
// });
// //cy.wait(4000);
// //cy.get("div.tableWrap").should("be.visible");
// cy.waitUntil(
// () => cy.get("div.tableWrap", { timeout: 30000 }).should("be.visible"),
// {
// errorMsg: "Page is not loaded evn after 10 secs",
// timeout: 30000,
// interval: 2000,
// },
// ).then(() => cy.wait(1000)); //wait for page load!
// //Manu Btn validation: - 1st menu item
// cy.isSelectRow(4); //as aft refresh row selection is also gone
// cy.getTableDataSelector("4", "18").then((selector) => {
// cy.get(selector + " button")
// .click()
// .wait(1000);
// cy.xpath(
// "//div//a[contains(@class, 'bp3-menu-item')]/div[text()='AddcreditLimit']/parent::a",
// )
// .click()
// .wait(2000); //allow time for n/w to finish
// cy.waitUntil(
// () =>
// cy
// .xpath("//div[contains(@class, ' t--widget-textwidget')][1]", {
// timeout: 30000,
// })
// .eq(0)
// .should("contain.text", "CreditLimit:"),
// {
// errorMsg: "Execute call did not complete evn after 10 secs",
// timeout: 20000,
// interval: 1000,
// },
// ).then(() => cy.wait(500)); //allow time for n/w to finish
// cy.xpath("//div[contains(@class, ' t--widget-textwidget')][1]", {
// timeout: 30000,
// })
// .eq(0)
// .invoke("text")
// .then((addreduce) => {
// expect(addreduce).to.eq("CreditLimit:Add");
// });
// });
// //Manu Btn validation: - 2nd menu item
// cy.getTableDataSelector("4", "18").then((selector) => {
// cy.get(selector + " button")
// .click()
// .wait(1000);
// cy.xpath(
// "//div//a[contains(@class, 'bp3-menu-item')]/div[text()='Reducecreditlimit']/parent::a",
// )
// .click()
// .wait(2000); //allow time for n/w to finish
// cy.waitUntil(
// () =>
// cy
// .xpath("//div[contains(@class, ' t--widget-textwidget')][1]", {
// timeout: 30000,
// })
// .eq(0)
// .should("contain.text", "CreditLimit:"),
// {
// errorMsg: "Execute call did not complete evn after 10 secs",
// timeout: 20000,
// interval: 1000,
// },
// ).then(() => cy.wait(500)); //allow time for n/w to finish
// cy.xpath("//div[contains(@class, ' t--widget-textwidget')][1]", {
// timeout: 30000,
// })
// .eq(0)
// .invoke("text")
// .then((addreduce) => {
// expect(addreduce).to.eq("CreditLimit:Reduce");
// });
// });
// });
// //Page 2 Validations:
// cy.selectEntityByName("Change color and font");
// cy.selectEntityByName("WIDGETS");
// cy.selectEntityByName("Table1");
// cy.get(widgetsPage.bold)
// .invoke("attr", "aria-selected")
// .then((sel) => expect(Boolean(sel)).to.be.true);
// cy.get(widgetsPage.centerAlign)
// .eq(0)
// .invoke("attr", "aria-selected")
// .then((sel) => expect(Boolean(sel)).to.be.true); //Text align
// cy.get(widgetsPage.centerAlign)
// .eq(1)
// .invoke("attr", "aria-selected")
// .then((sel) => expect(Boolean(sel)).to.be.true); //Vertical align
// cy.get(widgetsPage.textColor)
// .first()
// .invoke("attr", "value")
// .should("contain", "#2E3D49");
// cy.get(`${widgetsPage.cellBackground} input`)
// .first()
// .invoke("attr", "value")
// .should("contain", "#FFC13D");
// cy.get(widgetsPage.selectedTextSize).should("have.text", "24px");
// });
// });

View File

@ -57,6 +57,12 @@ module.exports = (on, config) => {
return launchOptions;
}
if (browser.name === "electron") {
// && browser.isHeadless) {
launchOptions.preferences.fullscreen = true;
launchOptions.preferences.darkTheme = true;
}
return launchOptions;
});

View File

@ -1,13 +1,10 @@
export class CommonLocators {
_addNewDataSource = ".datasources .t--entity-add-btn"
_integrationCreateNew = "[data-cy=t--tab-CREATE_NEW]"
_loading = "#loading"
_spinner = ".bp3-spinner"
_queryName = ".t--action-name-edit-field span"
_queryNameTxt = ".t--action-name-edit-field input"
_dsName = ".t--edit-datasource-name span"
_dsNameTxt = ".t--edit-datasource-name input"
_homeIcon = ".t--appsmith-logo"
_homePageAppCreateBtn = ".t--applications-container .createnew"
_saveStatusSuccess = ".t--save-status-success"
_codeMirrorTextArea = ".CodeMirror textarea"
_codeMirrorCode = ".CodeMirror-code"
@ -24,10 +21,20 @@ export class CommonLocators {
_newPage = ".pages .t--entity-add-btn"
_toastMsg = ".t--toast-action"
_empty = "span[name='no-response']"
_contextMenuInPane = "span[name='context-menu']"
_visibleTextDiv = (divText: string) => "//div[text()='" + divText + "']"
_openWidget = ".widgets .t--entity-add-btn"
_dropHere = "#comment-overlay-wrapper-0"
_activeTab = "span:contains('Active')"
_createQuery = ".t--create-query"
_crossBtn = "span.cancel-icon"
_createNew = ".t--entity-add-btn.group.files"
_uploadFiles = "div.uppy-Dashboard-AddFiles input"
_uploadBtn = "button.uppy-StatusBar-actionBtn--upload"
_debuggerIcon = ".t--debugger svg"
_errorTab = "[data-cy=t--tab-ERROR]"
_debugErrorMsg = ".t--debugger-message"
_debuggerLabel = "span.debugger-label"
_entityNameInExplorer = (entityNameinLeftSidebar: string) => "//div[contains(@class, 't--entity-name')][text()='" + entityNameinLeftSidebar + "']"
_expandCollapseArrow = (entityNameinLeftSidebar: string) => "//div[text()='" + entityNameinLeftSidebar + "']/ancestor::div/preceding-sibling::a[contains(@class, 't--entity-collapse-toggle')]"
_entityProperties = (entityNameinLeftSidebar: string) => "//div[text()='" + entityNameinLeftSidebar + "']/ancestor::div[contains(@class, 't--entity-item')]/following-sibling::div//div[contains(@class, 't--entity-property')]//code"
@ -45,13 +52,11 @@ export class CommonLocators {
_widgetInCanvas = (widgetType: string) => `.t--draggable-${widgetType}`
_widgetInDeployed = (widgetType: string) => `.t--widget-${widgetType}`
_propertyToggle = (controlToToggle: string) => ".t--property-control-" + controlToToggle + " input[type='checkbox']"
_propertyToggleValue = (controlToToggle: string) => "//div[contains(@class, 't--property-control-" + controlToToggle + "')]//input[@type='checkbox']/parent::label"
_openNavigationTab = (tabToOpen: string) => `#switcher--${tabToOpen}`
_selectWidgetDropdown = (widgetType: string) => "//div[contains(@class, 't--draggable-" + widgetType + "')]//button"
_createNewPlgin = (pluginName: string) => ".t--plugin-name:contains('" + pluginName + "')"
_inputFieldByName = (fieldName: string) => "//p[text()='" + fieldName + "']/parent::label/following-sibling::div"
_existingFieldValueByName = (fieldName: string) => "//label[text()='" + fieldName + "']/ancestor::div//div[contains(@class,'CodeMirror-code')]"
_evaluatedCurrentValue = "div:last-of-type .t--CodeEditor-evaluatedValue > div:last-of-type pre"
_tableRowColumn = (rowNum: number, colNum: number) => `.t--widget-tablewidget .tbody .td[data-rowindex=${rowNum}][data-colindex=${colNum}] div div`
_crossBtn = "span.cancel-icon"
_createNew = ".t--entity-add-btn.group.files"
}

View File

@ -0,0 +1,75 @@
import { AggregateHelper } from "../Pages/AggregateHelper";
import { JSEditor } from "../Pages/JSEditor";
import { EntityExplorer } from "../Pages/EntityExplorer";
import { CommonLocators } from "./CommonLocators";
import { ApiPage } from "../Pages/ApiPage";
import { HomePage } from "../Pages/HomePage";
import { DataSources } from "../Pages/DataSources";
import { Table } from "../Pages/Table";
export class ObjectsRegistry {
private static aggregateHelper__: AggregateHelper;
static get AggregateHelper(): AggregateHelper {
if (ObjectsRegistry.aggregateHelper__ === undefined) {
ObjectsRegistry.aggregateHelper__ = new AggregateHelper()
}
return ObjectsRegistry.aggregateHelper__;
}
private static jsEditor__: JSEditor;
static get JSEditor(): JSEditor {
if (ObjectsRegistry.jsEditor__ === undefined) {
ObjectsRegistry.jsEditor__ = new JSEditor()
}
return ObjectsRegistry.jsEditor__;
}
private static commonLocators__: CommonLocators;
static get CommonLocators(): CommonLocators {
if (ObjectsRegistry.commonLocators__ === undefined) {
ObjectsRegistry.commonLocators__ = new CommonLocators()
}
return ObjectsRegistry.commonLocators__;
}
private static entityExplorer__: EntityExplorer;
static get EntityExplorer(): EntityExplorer {
if (ObjectsRegistry.entityExplorer__ === undefined) {
ObjectsRegistry.entityExplorer__ = new EntityExplorer()
}
return ObjectsRegistry.entityExplorer__;
}
private static apiPage__: ApiPage;
static get ApiPage(): ApiPage {
if (ObjectsRegistry.apiPage__ === undefined) {
ObjectsRegistry.apiPage__ = new ApiPage()
}
return ObjectsRegistry.apiPage__;
}
private static homePage__: HomePage;
static get HomePage(): HomePage {
if (ObjectsRegistry.homePage__ === undefined) {
ObjectsRegistry.homePage__ = new HomePage()
}
return ObjectsRegistry.homePage__;
}
private static dataSources__: DataSources;
static get DataSources(): DataSources {
if (ObjectsRegistry.dataSources__ === undefined) {
ObjectsRegistry.dataSources__ = new DataSources()
}
return ObjectsRegistry.dataSources__;
}
private static table__: Table;
static get Table(): Table {
if (ObjectsRegistry.table__ === undefined) {
ObjectsRegistry.table__ = new Table()
}
return ObjectsRegistry.table__;
}
}

View File

@ -1,9 +1,8 @@
import 'cypress-wait-until';
const uuid = require("uuid");
import { CommonLocators } from "../Objects/CommonLocators";
const locator = new CommonLocators();
import { ObjectsRegistry } from '../Objects/Registry';
export class AggregateHelper {
private locator = ObjectsRegistry.CommonLocators;
public AddDsl(dsl: string) {
let currentURL;
@ -29,20 +28,7 @@ export class AggregateHelper {
});
});
this.Sleep(5000)//settling time for dsl
}
public NavigateToDSCreateNew() {
this.NavigateToDSAdd()
cy.get(locator._integrationCreateNew)
.should("be.visible")
.click({ force: true });
cy.get(locator._loading).should("not.exist");
}
public NavigateToDSAdd() {
cy.get(locator._addNewDataSource).last().scrollIntoView()
.should("be.visible")
.click({ force: true });
cy.get(this.locator._loading).should("not.exist");//Checks the spinner is gone & dsl loaded!
}
public StartServerAndRoutes() {
@ -52,8 +38,8 @@ export class AggregateHelper {
}
public RenameWithInPane(renameVal: string, query = true) {
let name = query ? locator._queryName : locator._dsName;
let text = query ? locator._queryNameTxt : locator._dsNameTxt;
let name = query ? this.locator._queryName : this.locator._dsName;
let text = query ? this.locator._queryNameTxt : this.locator._dsNameTxt;
cy.get(name).click({ force: true });
cy.get(text)
.clear({ force: true })
@ -62,30 +48,14 @@ export class AggregateHelper {
.blur();
}
public WaitAutoSave() {
public AssertAutoSave() {
// wait for save query to trigger & n/w call to finish occuring
cy.get(locator._saveStatusSuccess, { timeout: 40000 }).should("exist");
}
public SelectEntityByName(entityNameinLeftSidebar: string) {
cy.xpath(locator._entityNameInExplorer(entityNameinLeftSidebar), { timeout: 30000 })
.last()
.click({ multiple: true })
this.Sleep()
}
public NavigateToExplorer() {
cy.get(locator._openNavigationTab('explorer')).click()
}
public ValidateEntityPresenceInExplorer(entityNameinLeftSidebar: string) {
cy.xpath(locator._entityNameInExplorer(entityNameinLeftSidebar))
.should("have.length", 1);
cy.get(this.locator._saveStatusSuccess, { timeout: 40000 }).should("exist");
}
public ValidateCodeEditorContent(selector: string, contentToValidate: any) {
cy.get(selector).within(() => {
cy.get(locator._codeMirrorCode).should("have.text", contentToValidate);
cy.get(this.locator._codeMirrorCode).should("have.text", contentToValidate);
});
}
@ -94,31 +64,21 @@ export class AggregateHelper {
cy.intercept("POST", "/api/v1/applications/publish/*").as("publishApp");
// Wait before publish
this.Sleep(2000)
this.WaitAutoSave()
this.AssertAutoSave()
// Stubbing window.open to open in the same tab
cy.window().then((window) => {
cy.stub(window, "open").callsFake((url) => {
window.location.href = Cypress.config().baseUrl + url.substring(1);
});
});
cy.get(locator._publishButton).click();
cy.wait("@publishApp");
cy.get(this.locator._publishButton).click();
cy.log("Pagename: " + localStorage.getItem("PageName"));
}
public expandCollapseEntity(entityName: string, expand = true) {
cy.xpath(locator._expandCollapseArrow(entityName)).invoke('attr', 'name').then((arrow) => {
if (expand && arrow == 'arrow-right')
cy.xpath(locator._expandCollapseArrow(entityName)).trigger('click', { multiple: true }).wait(1000);
else if (!expand && arrow == 'arrow-down')
cy.xpath(locator._expandCollapseArrow(entityName)).trigger('click', { multiple: true }).wait(1000);
else
this.Sleep()
})
cy.wait("@publishApp").its("request.url").should("not.contain", "edit")
//cy.wait('@publishApp').wait('@publishApp') //waitng for 2 calls to complete
}
public AddNewPage() {
cy.get(locator._newPage)
cy.get(this.locator._newPage)
.first()
.click();
cy.wait("@createPage").should(
@ -128,8 +88,14 @@ export class AggregateHelper {
);
}
public ValidateToastMessage(text: string, length = 1, index = 1) {
cy.get(this.locator._toastMsg)
.should("have.length", length)
.should("contain.text", text);
}
public ClickButton(btnVisibleText: string) {
cy.xpath(locator._spanButton(btnVisibleText))
cy.xpath(this.locator._spanButton(btnVisibleText))
.scrollIntoView()
.click({ force: true });
}
@ -148,22 +114,22 @@ export class AggregateHelper {
});
}
public WaitUntilEleDisappear(selector: string, msgToCheckforDisappearance: string, timeout = 1000) {
public WaitUntilEleDisappear(selector: string, msgToCheckforDisappearance: string) {
cy.waitUntil(() => cy.get(selector).contains(msgToCheckforDisappearance).should("have.length", 0),
{
errorMsg: msgToCheckforDisappearance + " did not disappear",
timeout: 5000,
interval: 1000
}).then(() => this.Sleep(timeout))
}).then(() => this.Sleep())
}
public WaitUntilEleAppear(selector: string, timeout = 500) {
public WaitUntilEleAppear(selector: string) {
cy.waitUntil(() => cy.get(selector, { timeout: 50000 }).should("have.length.greaterThan", 0),
{
errorMsg: "Element did not appear",
timeout: 5000,
interval: 1000
}).then(() => this.Sleep(timeout))
}).then(() => this.Sleep(500))
}
public ValidateNetworkExecutionSuccess(aliasName: string, expectedRes = true) {
@ -174,15 +140,15 @@ export class AggregateHelper {
)
}
public ValidateNetworkStatus(aliasName: string, expectedRes = 200) {
public ValidateNetworkDataSuccess(aliasName: string, expectedRes = true) {
cy.wait(aliasName).should(
"have.nested.property",
"response.body.responseMeta.status",
"response.body.data.success",
expectedRes,
)
}
public ValidateNetworkCallRespPut(aliasName: string, expectedStatus = 200) {
public ValidateNetworkStatus(aliasName: string, expectedStatus = 200) {
cy.wait(aliasName).should(
"have.nested.property",
"response.body.responseMeta.status",
@ -191,24 +157,24 @@ export class AggregateHelper {
}
public SelectPropertiesDropDown(endp: string, ddOption: string,) {
cy.xpath(locator._selectPropDropdown(endp))
cy.xpath(this.locator._selectPropDropdown(endp))
.first()
.scrollIntoView()
.click()
cy.get(locator._dropDownValue(ddOption)).click()
cy.get(this.locator._dropDownValue(ddOption)).click()
}
public SelectDropDown(endp: string, ddOption: string,) {
cy.xpath(locator._selectWidgetDropdown(endp))
cy.xpath(this.locator._selectWidgetDropdown(endp))
.first()
.scrollIntoView()
.click()
cy.get(locator._selectOptionValue(ddOption)).click({ force: true })
cy.get(this.locator._selectOptionValue(ddOption)).click({ force: true })
this.Sleep(2000)
}
public EnterActionValue(actionName: string, value: string, paste = true) {
cy.xpath(locator._actionTextArea(actionName))
cy.xpath(this.locator._actionTextArea(actionName))
.first()
.focus()
.type("{uparrow}", { force: true })
@ -216,7 +182,7 @@ export class AggregateHelper {
cy.focused().then(($cm: any) => {
if ($cm.contents != "") {
cy.log("The field is not empty");
cy.xpath(locator._actionTextArea(actionName))
cy.xpath(this.locator._actionTextArea(actionName))
.first()
.click({ force: true })
.focused()
@ -225,7 +191,7 @@ export class AggregateHelper {
});
}
this.Sleep()
cy.xpath(locator._actionTextArea(actionName))
cy.xpath(this.locator._actionTextArea(actionName))
.first()
.then((el: any) => {
const input = cy.get(el);
@ -238,7 +204,7 @@ export class AggregateHelper {
});
}
});
this.WaitAutoSave()
this.AssertAutoSave()
})
}
@ -253,36 +219,29 @@ export class AggregateHelper {
cy.get(selector).click({ force: true });
}
public DragDropWidgetNVerify(widgetType: string, x: number, y: number) {
cy.get(locator._openNavigationTab('widgets')).click({ force: true })
this.Sleep()
cy.get(locator._widgetPageIcon(widgetType)).first()
.trigger("dragstart", { force: true })
.trigger("mousemove", x, y, { force: true });
cy.get(locator._dropHere)
.trigger("mousemove", x, y, { eventConstructor: "MouseEvent" })
.trigger("mousemove", x, y, { eventConstructor: "MouseEvent" })
.trigger("mouseup", x, y, { eventConstructor: "MouseEvent" });
this.WaitAutoSave()//settling time for widget on canvas!
cy.get(locator._widgetInCanvas(widgetType)).should('exist')
}
public ToggleOrDisable(propertyName: string, check = true) {
if (check) {
cy.get(locator._propertyToggle(propertyName))
public ToggleOnOrOff(propertyName: string, toggle: 'On' | 'Off') {
if (toggle == 'On') {
cy.get(this.locator._propertyToggle(propertyName))
.check({ force: true })
.should("be.checked");
}
else {
cy.get(locator._propertyToggle(propertyName))
cy.get(this.locator._propertyToggle(propertyName))
.uncheck({ force: true })
.should("not.checked");
}
this.WaitAutoSave()
this.AssertAutoSave()
}
public AssertExistingToggleState(propertyName: string, toggle: 'checked' | 'unchecked') {
cy.xpath(this.locator._propertyToggleValue(propertyName)).invoke("attr", "class")
.then((classes) => {
expect(classes).includes(toggle);
});
}
public NavigateBacktoEditor() {
cy.get(locator._backToEditor).click({ force: true });
cy.get(this.locator._backToEditor).click({ force: true });
this.Sleep(2000)
}
@ -293,54 +252,27 @@ export class AggregateHelper {
}
public GetObjectName() {
//cy.get(locator._queryName).invoke("text").then((text) => cy.wrap(text).as("queryName")); or below syntax
return cy.get(locator._queryName).invoke("text");
//cy.get(this.locator._queryName).invoke("text").then((text) => cy.wrap(text).as("queryName")); or below syntax
return cy.get(this.locator._queryName).invoke("text");
}
public Sleep(timeout = 1000) {
cy.wait(timeout)
}
public NavigateToHome() {
cy.get(locator._homeIcon).click({ force: true });
this.Sleep(3000);
cy.wait("@applications");
cy.get(locator._homePageAppCreateBtn)
.should("be.visible")
.should("be.enabled");
}
public CreateNewApplication() {
cy.get(locator._homePageAppCreateBtn).click({ force: true });
cy.wait("@createNewApplication").should(
"have.nested.property",
"response.body.responseMeta.status",
201,
);
}
public ActionContextMenuByEntityName(
entityNameinLeftSidebar: string,
action = "Delete",
subAction = "") {
this.Sleep();
cy.xpath(locator._contextMenu(entityNameinLeftSidebar))
.last()
.click({ force: true });
cy.xpath(locator._contextMenuItem(action))
.click({ force: true })
this.Sleep(500)
public ActionContextMenuWithInPane(action: 'Copy to page' | 'Move to page' | 'Delete', subAction = "") {
cy.get(this.locator._contextMenuInPane).click()
cy.xpath(this.locator._visibleTextDiv(action)).should('be.visible').click()
if (action == 'Delete') {
cy.xpath(this.locator._visibleTextDiv('Are you sure?')).click()
this.ValidateNetworkStatus("@deleteAction");
}
if (subAction) {
cy.xpath(locator._contextMenuItem(subAction))
.click({ force: true })
cy.xpath(this.locator._visibleTextDiv(subAction)).click()
this.Sleep(500)
}
}
public ValidateEntityAbsenceInExplorer(entityNameinLeftSidebar: string) {
cy.xpath(locator._entityNameInExplorer(entityNameinLeftSidebar)).should('not.exist');
}
public TypeValueNValidate(valueToType: string, fieldName = "") {
this.EnterValue(valueToType, fieldName)
this.VerifyEvaluatedValue(valueToType);
@ -348,11 +280,11 @@ export class AggregateHelper {
public EnterValue(valueToType: string, fieldName = "") {
if (fieldName) {
cy.xpath(locator._inputFieldByName(fieldName)).then(($field: any) => {
cy.xpath(this.locator._inputFieldByName(fieldName)).then(($field: any) => {
this.UpdateCodeInput($field, valueToType);
});
} else {
cy.get(locator._codeEditorTarget).then(($field: any) => {
cy.get(this.locator._codeEditorTarget).then(($field: any) => {
this.UpdateCodeInput($field, valueToType);
});
}
@ -373,11 +305,11 @@ export class AggregateHelper {
public VerifyEvaluatedValue(currentValue: string) {
this.Sleep(3000);
cy.get(locator._evaluatedCurrentValue)
cy.get(this.locator._evaluatedCurrentValue)
.first()
.should("be.visible")
.should("not.have.text", "undefined");
cy.get(locator._evaluatedCurrentValue)
cy.get(this.locator._evaluatedCurrentValue)
.first()
.click({ force: true })
.then(($text) => {
@ -385,7 +317,47 @@ export class AggregateHelper {
});
}
public ReadTableRowColumnData(rowNum: number, colNum: number) {
return cy.get(locator._tableRowColumn(rowNum, colNum)).invoke("text");
public EvaluateExistingPropertyFieldValue(fieldName = "", currentValue = "") {
let toValidate = false;
if (currentValue) toValidate = true;
if (fieldName) {
cy.xpath(this.locator._existingFieldValueByName(fieldName)).eq(0).click();
} else {
cy.xpath(this.locator._codeMirrorCode).click();
}
this.Sleep(3000); //Increasing wait time to evaluate non-undefined values
const val = cy
.get(this.locator._evaluatedCurrentValue)
.first()
.should("be.visible")
.invoke("text");
if (toValidate) expect(val).to.eq(currentValue);
return val;
}
public UploadFile(fixtureName: string, execStat = true) {
cy.get(this.locator._uploadFiles).attachFile(fixtureName).wait(1000);
cy.get(this.locator._uploadBtn).click().wait(3000);
this.ValidateNetworkExecutionSuccess("@postExecute", execStat);
}
public AssertDebugError(label: string, messgae: string) {
cy.get(this.locator._debuggerIcon)
.should("be.visible")
.click({ force: true });
cy.get(this.locator._errorTab)
.should("be.visible")
.click({ force: true });
cy.get(this.locator._debuggerLabel).eq(0)
.invoke("text")
.then(($text) => {
expect($text).to.eq(label);
});
cy.get(this.locator._debugErrorMsg).eq(0)
.invoke("text")
.then(($text) => {
expect($text).contains(messgae);
});
}
}

View File

@ -1,10 +1,7 @@
import { AggregateHelper } from "./AggregateHelper";
import { CommonLocators } from "../Objects/CommonLocators";
const agHelper = new AggregateHelper();
const locator = new CommonLocators()
import { ObjectsRegistry } from "../Objects/Registry"
export class ApiPage {
public agHelper = ObjectsRegistry.AggregateHelper
public locator = ObjectsRegistry.CommonLocators;
private _createapi = ".t--createBlankApiCard"
private _resourceUrl = ".t--dataSourceField"
@ -12,22 +9,32 @@ export class ApiPage {
private _headerValue = (index: number) => ".t--actionConfiguration\\.headers\\[0\\]\\.value\\." + index + ""
private _paramKey = (index: number) => ".t--actionConfiguration\\.queryParameters\\[0\\]\\.key\\." + index + ""
private _paramValue = (index: number) => ".t--actionConfiguration\\.queryParameters\\[0\\]\\.value\\." + index + ""
private _paramsTab = "//li//span[text()='Params']"
_bodyKey = (index: number) => ".t--actionConfiguration\\.bodyFormData\\[0\\]\\.key\\." + index + ""
_bodyValue = (index: number) => ".t--actionConfiguration\\.bodyFormData\\[0\\]\\.value\\." + index + ""
_bodyTypeDropdown = "//span[text()='Type'][@class='bp3-button-text']/parent::button"
private _apiRunBtn = ".t--apiFormRunBtn"
private _queryTimeout = "//input[@name='actionConfiguration.timeoutInMillisecond']"
private _apiTab = (tabValue: string) => "span:contains('" + tabValue + "')"
_responseBody = ".CodeMirror-code span.cm-string.cm-property"
private _blankAPI = "span:contains('New Blank API')"
private _apiVerbDropdown = ".t--apiFormHttpMethod"
private _verbToSelect = (verb: string) => "//div[contains(@class, 't--dropdown-option')]//span[contains(text(),'" + verb + "')]"
private _bodySubTab = (subTab: string) => `[data-cy='tab--${subTab}']`
_visibleTextSpan = (spanText: string) => "//span[text()='" + spanText + "']"
_visibleTextDiv = (divText: string) => "//div[text()='" + divText + "']"
_noBodyMessageDiv = "#NoBodyMessageDiv"
_noBodyMessage = "This request does not have a body"
_imageSrc = "//img/parent::div"
private _trashDelete = "span[name='delete']"
CreateAndFillApi(url: string, apiname: string = "", queryTimeout = 30000) {
cy.get(locator._createNew).click({ force: true });
CreateApi(apiName: string = "", apiVerb: 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH' = 'GET',) {
cy.get(this.locator._createNew).click({ force: true });
cy.get(this._blankAPI).click({ force: true });
agHelper.ValidateNetworkStatus("@createNewApi", 201)
this.agHelper.ValidateNetworkStatus("@createNewApi", 201)
// cy.get("@createNewApi").then((response: any) => {
// expect(response.response.body.responseMeta.success).to.eq(true);
// cy.get(agHelper._actionName)
// cy.get(this.agHelper._actionName)
// .click()
// .invoke("text")
// .then((text) => {
@ -36,12 +43,18 @@ export class ApiPage {
// });
// }); // to check if Api1 = Api1 when Create Api invoked
if (apiname)
agHelper.RenameWithInPane(apiname)
if (apiName)
this.agHelper.RenameWithInPane(apiName)
cy.get(this._resourceUrl).should("be.visible");
if (apiVerb != 'GET')
this.SelectAPIVerb(apiVerb)
}
CreateAndFillApi(url: string, apiname: string = "", apiVerb: 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH' = 'GET', queryTimeout = 30000) {
this.CreateApi(apiname, apiVerb)
this.EnterURL(url)
agHelper.WaitAutoSave()
agHelper.Sleep(2000);// Added because api name edit takes some time to reflect in api sidebar after the call passes.
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)
}
@ -51,58 +64,103 @@ export class ApiPage {
.first()
.click({ force: true })
.type(url, { parseSpecialCharSequences: false });
agHelper.WaitAutoSave()
this.agHelper.AssertAutoSave()
}
EnterHeader(hKey: string, hValue: string) {
cy.get(this._apiTab('Headers')).eq(0).should('be.visible').click();
this.SelectAPITab('Headers');
cy.get(this._headerKey(0))
.first()
.click({ force: true })
.type(hKey, { parseSpecialCharSequences: false });
.type(hKey, { parseSpecialCharSequences: false })
.type("{esc}");
cy.get(this._headerValue(0))
.first()
.click({ force: true })
.type(hValue, { parseSpecialCharSequences: false });
agHelper.WaitAutoSave()
.type(hValue, { parseSpecialCharSequences: false })
.type("{esc}");
this.agHelper.AssertAutoSave()
}
EnterParams(pKey: string, pValue: string) {
cy.xpath(this._paramsTab)
.should("be.visible")
.click({ force: true });
this.SelectAPITab('Params')
cy.get(this._paramKey(0))
.first()
.click({ force: true })
.type(pKey, { parseSpecialCharSequences: false });
.type(pKey, { parseSpecialCharSequences: false })
.type("{esc}");
cy.get(this._paramValue(0))
.first()
.click({ force: true })
.type(pValue, { parseSpecialCharSequences: false });
agHelper.WaitAutoSave()
.type(pValue, { parseSpecialCharSequences: false })
.type("{esc}");
this.agHelper.AssertAutoSave()
}
EnterBodyFormData(subTab: 'FORM_URLENCODED' | 'MULTIPART_FORM_DATA', bKey: string, bValue: string, type = "", toTrash = false) {
this.SelectAPITab('Body')
this.SelectSubTab(subTab)
if (toTrash)
{
cy.get(this._trashDelete).click()
cy.xpath(this._visibleTextSpan('Add more')).click()
}
cy.get(this._bodyKey(0))
.first()
.click({ force: true })
.type(bKey, { parseSpecialCharSequences: false })
.type("{esc}");
if (type) {
cy.xpath(this._bodyTypeDropdown).eq(0).click()
cy.xpath(this._visibleTextDiv(type)).click()
}
cy.get(this._bodyValue(0))
.first()
.click({ force: true })
.type(bValue, { parseSpecialCharSequences: false })
.type("{esc}");
this.agHelper.AssertAutoSave()
}
RunAPI() {
cy.get(this._apiRunBtn).click({ force: true });
agHelper.ValidateNetworkExecutionSuccess("@postExecute")
this.agHelper.ValidateNetworkExecutionSuccess("@postExecute")
}
SetAPITimeout(timeout: number) {
cy.get(this._apiTab('Settings')).click();
this.SelectAPITab('Settings');
cy.xpath(this._queryTimeout)
.clear()
.type(timeout.toString());
this.SelectAPITab('Headers');
}
cy.get(this._apiTab('Headers')).eq(0).click();
SelectAPITab(tabName: 'Headers' | 'Params' | 'Body' | 'Pagination' | 'Authentication' | 'Settings') {
cy.xpath(this._visibleTextSpan(tabName)).should('be.visible').eq(0).click();
}
SelectSubTab(subTabName: 'NONE' | 'JSON' | 'FORM_URLENCODED' | 'MULTIPART_FORM_DATA' | 'RAW') {
cy.get(this._bodySubTab(subTabName)).eq(0).should('be.visible').click();
}
public CheckElementPresence(selector: string) {
if (selector.startsWith("//"))
cy.xpath(selector).should('be.visible')
else
cy.get(selector).should('be.visible')
}
ValidateQueryParams(param: { key: string; value: string; }) {
cy.xpath(this._paramsTab)
.should("be.visible")
.click({ force: true });
this.SelectAPITab('Params')
this.agHelper.ValidateCodeEditorContent(this._paramKey(0), param.key)
this.agHelper.ValidateCodeEditorContent(this._paramValue(0), param.value)
}
agHelper.ValidateCodeEditorContent(this._paramKey(0), param.key)
agHelper.ValidateCodeEditorContent(this._paramValue(0), param.value)
ValidateHeaderParams(header: { key: string; value: string; }) {
this.SelectAPITab('Headers')
this.agHelper.ValidateCodeEditorContent(this._headerKey(0), header.key)
this.agHelper.ValidateCodeEditorContent(this._headerValue(0), header.value)
}
ReadApiResponsebyKey(key: string) {
@ -117,4 +175,9 @@ export class ApiPage {
cy.wrap(apiResp).as("apiResp")
});
}
}
public SelectAPIVerb(verb: 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH') {
cy.get(this._apiVerbDropdown).click()
cy.xpath(this._verbToSelect(verb)).should('be.visible').click()
}
}

View File

@ -1,12 +1,13 @@
import { CommonLocators } from "../Objects/CommonLocators";
import datasourceFormData from "../../fixtures/datasources.json";
import { AggregateHelper } from "./AggregateHelper";
const agHelper = new AggregateHelper();
const locator = new CommonLocators();
import { ObjectsRegistry } from "../Objects/Registry"
export class DataSources {
private agHelper = ObjectsRegistry.AggregateHelper
private locator = ObjectsRegistry.CommonLocators;
private _dsCreateNewTab = "[data-cy=t--tab-CREATE_NEW]"
private _addNewDataSource = ".datasources .t--entity-add-btn"
private _createNewPlgin = (pluginName: string) => ".t--plugin-name:contains('" + pluginName + "')"
private _host = "input[name='datasourceConfiguration.endpoints[0].host']"
private _port = "input[name='datasourceConfiguration.endpoints[0].port']"
private _databaseName = "input[name='datasourceConfiguration.authentication.databaseName']"
@ -17,9 +18,27 @@ export class DataSources {
private _saveDs = ".t--save-datasource"
private _datasourceCard = ".t--datasource"
_templateMenu = ".t--template-menu"
_visibleTextSpan = (spanText: string) => "//span[contains(text(),'" + spanText + "')]"
_dropdownTitle = (ddTitle: string) => "//p[contains(text(),'" + ddTitle + "')]/parent::label/following-sibling::div/div/div"
_reconnectModal = "div.reconnect-datasource-modal"
_activeDSListReconnectModal = (dbName: string) => "//div[contains(@class, 't--ds-list')]//span[text()='" + dbName + "']"
public NavigateToDSAdd() {
cy.get(this._addNewDataSource).last().scrollIntoView()
.should("be.visible")
.click({ force: true });
}
public CreatePlugIn(pluginName: string) {
cy.get(locator._createNewPlgin(pluginName)).click();
cy.get(this._createNewPlgin(pluginName)).click();
}
public NavigateToDSCreateNew() {
this.NavigateToDSAdd()
cy.get(this._dsCreateNewTab)
.should("be.visible")
.click({ force: true });
cy.get(this.locator._loading).should("not.exist");
}
public FillPostgresDSForm(shouldAddTrailingSpaces = false) {
@ -40,32 +59,52 @@ export class DataSources {
public TestDatasource(expectedRes = true) {
cy.get(this._testDs).click();
cy.wait("@testDatasource").should(
"have.nested.property",
"response.body.data.success",
expectedRes,
);
this.agHelper.ValidateNetworkDataSuccess("@testDatasource", expectedRes)
}
public SaveDatasource() {
cy.get(this._saveDs).click();
cy.wait("@saveDatasource")
.then((xhr) => {
cy.log(JSON.stringify(xhr.response!.body));
}).should("have.nested.property", "response.body.responseMeta.status", 200);
this.agHelper.ValidateNetworkStatus("@saveDatasource", 200)
// cy.wait("@saveDatasource")
// .then((xhr) => {
// cy.log(JSON.stringify(xhr.response!.body));
// }).should("have.nested.property", "response.body.responseMeta.status", 200);
}
public NavigateToActiveDSQueryPane(datasourceName: string) {
agHelper.NavigateToDSAdd()
agHelper.GetNClick(locator._activeTab)
this.NavigateToDSAdd()
this.agHelper.GetNClick(this.locator._activeTab)
cy.get(this._datasourceCard)
.contains(datasourceName)
.scrollIntoView()
.should("be.visible")
.closest(this._datasourceCard)
.within(() => {
cy.get(locator._createQuery).click({ force: true });
cy.get(this.locator._createQuery).click({ force: true });
})
agHelper.Sleep(2000); //for the CreateQuery page to load
this.agHelper.Sleep(2000); //for the CreateQuery page to load
}
public ValidateNSelectDropdown(ddTitle: string, currentValue = "", newValue = "") {
let toChange = false;
if (currentValue)
cy.xpath(this._visibleTextSpan(currentValue)).scrollIntoView().should("be.visible", currentValue + " dropdown value not present")
if (newValue) toChange = true;
if (toChange) {
cy.xpath(this._dropdownTitle(ddTitle)).click(); //to expand the dropdown
cy.xpath(this._visibleTextSpan(newValue)).last().click({ force: true }); //to select the new value
}
}
public ReconnectDataSourcePostgres(dbName: string) {
cy.get(this._reconnectModal).should('exist')
cy.xpath(this._activeDSListReconnectModal("PostgreSQL")).should('be.visible')
cy.xpath(this._activeDSListReconnectModal(dbName)).should('be.visible')//.click()
this.ValidateNSelectDropdown("Connection Mode", "", "Read / Write")
this.FillPostgresDSForm()
cy.get(this._saveDs).click();
}
}

View File

@ -0,0 +1,67 @@
import { ObjectsRegistry } from "../Objects/Registry"
export class EntityExplorer {
public agHelper = ObjectsRegistry.AggregateHelper
public locator = ObjectsRegistry.CommonLocators;
public SelectEntityByName(entityNameinLeftSidebar: string) {
cy.xpath(this.locator._entityNameInExplorer(entityNameinLeftSidebar), { timeout: 30000 })
.last()
.click({ multiple: true })
this.agHelper.Sleep()
}
public NavigateToSwitcher(navigationTab: 'explorer' | 'widgets') {
cy.get(this.locator._openNavigationTab(navigationTab)).click()
}
public AssertEntityPresenceInExplorer(entityNameinLeftSidebar: string) {
cy.xpath(this.locator._entityNameInExplorer(entityNameinLeftSidebar))
.should("have.length", 1);
}
public AssertEntityAbsenceInExplorer(entityNameinLeftSidebar: string) {
cy.xpath(this.locator._entityNameInExplorer(entityNameinLeftSidebar)).should('not.exist');
}
public expandCollapseEntity(entityName: string, expand = true) {
cy.xpath(this.locator._expandCollapseArrow(entityName)).invoke('attr', 'name').then((arrow) => {
if (expand && arrow == 'arrow-right')
cy.xpath(this.locator._expandCollapseArrow(entityName)).trigger('click', { multiple: true }).wait(1000);
else if (!expand && arrow == 'arrow-down')
cy.xpath(this.locator._expandCollapseArrow(entityName)).trigger('click', { multiple: true }).wait(1000);
else
this.agHelper.Sleep()
})
}
public ActionContextMenuByEntityName(entityNameinLeftSidebar: string, action = "Delete", subAction = "") {
this.agHelper.Sleep();
cy.xpath(this.locator._contextMenu(entityNameinLeftSidebar))
.last()
.click({ force: true });
cy.xpath(this.locator._contextMenuItem(action))
.click({ force: true })
this.agHelper.Sleep(500)
if (subAction) {
cy.xpath(this.locator._contextMenuItem(subAction))
.click({ force: true })
this.agHelper.Sleep(500)
}
}
public DragDropWidgetNVerify(widgetType: string, x: number, y: number) {
this.NavigateToSwitcher('widgets')
this.agHelper.Sleep()
cy.get(this.locator._widgetPageIcon(widgetType)).first()
.trigger("dragstart", { force: true })
.trigger("mousemove", x, y, { force: true });
cy.get(this.locator._dropHere)
.trigger("mousemove", x, y, { eventConstructor: "MouseEvent" })
.trigger("mousemove", x, y, { eventConstructor: "MouseEvent" })
.trigger("mouseup", x, y, { eventConstructor: "MouseEvent" });
this.agHelper.AssertAutoSave()//settling time for widget on canvas!
cy.get(this.locator._widgetInCanvas(widgetType)).should('exist')
}
}

View File

@ -1,11 +1,9 @@
import { AggregateHelper } from "./AggregateHelper";
import { CommonLocators } from "../Objects/CommonLocators";
const agHelper = new AggregateHelper();
const locator = new CommonLocators();
import { ObjectsRegistry } from "../Objects/Registry"
export class HomePage {
private agHelper = ObjectsRegistry.AggregateHelper;
private locator = ObjectsRegistry.CommonLocators;
private _username = "input[name='username']"
private _password = "input[name='password']"
private _submitBtn = "button[type='submit']"
@ -39,11 +37,13 @@ export class HomePage {
private _userRoleDropDown = (email: string, role: string) => "//td[text()='" + email + "']/following-sibling::td//span[text()='" + role + "']"
//private _userRoleDropDown = (email: string) => "//td[text()='" + email + "']/following-sibling::td"
private _leaveOrgConfirmModal = ".t--member-delete-confirmation-modal"
private _orgImportAppModal = ".t--import-application-modal"
private _leaveOrgConfirmButton = "[data - cy= t--org-leave - button]"
private _lastOrgInHomePage = "//div[contains(@class, 't--org-section')][last()]//span/span"
_editPageLanding = "//h2[text()='Drag and drop a widget here']"
_usersEmailList = "[data-colindex='1']"
private _orgImport = "[data-cy=t--org-import-app]"
private _uploadFile = "//div/form/input"
public CreateNewOrg(orgNewName: string) {
let oldName: string = ""
@ -52,7 +52,7 @@ export class HomePage {
.first()
.click({ force: true });
cy.wait("@createOrg")
agHelper.Sleep(2000)
this.agHelper.Sleep(2000)
cy.xpath(this._lastOrgInHomePage).first().then($ele => {
oldName = $ele.text();
cy.log("oldName is : " + oldName);
@ -69,7 +69,7 @@ export class HomePage {
cy.get(this._renameOrgInput)
.should("be.visible")
.type(newOrgName.concat("{enter}"));
agHelper.Sleep(2000)
this.agHelper.Sleep(2000)
cy.wait("@updateOrganization").should(
"have.nested.property",
"response.body.responseMeta.status",
@ -101,9 +101,9 @@ export class HomePage {
.click({ force: true })
.type(email);
cy.xpath(this._selectRole).first().click({ force: true });
agHelper.Sleep(500)
this.agHelper.Sleep(500)
cy.xpath(this._userRole(role)).click({ force: true });
agHelper.ClickButton('Invite')
this.agHelper.ClickButton('Invite')
cy.wait("@mockPostInvite")
.its("request.headers")
.should("have.property", "origin", "Cypress");
@ -117,21 +117,17 @@ export class HomePage {
public NavigateToHome() {
cy.get(this._homeIcon).click({ force: true });
agHelper.Sleep(3000)
this.agHelper.Sleep(3000)
//cy.wait("@applications"); this randomly fails & introduces flakyness hence commenting!
cy.get(this._homePageAppCreateBtn).should("be.visible").should("be.enabled");
}
public CreateNewApplication() {
cy.get(this._homePageAppCreateBtn).first().click({ force: true })
cy.wait("@createNewApplication").should(
"have.nested.property",
"response.body.responseMeta.status",
201,
);
cy.get(locator._loading).should("not.exist");
this.agHelper.ValidateNetworkStatus("@createNewApplication", 201)
cy.get(this.locator._loading).should("not.exist");
}
//Maps to CreateAppForOrg in command.js
public CreateAppInOrg(orgName: string, appname: string) {
cy.xpath(this._newOrganizationCreateNewApp(orgName))
@ -143,8 +139,8 @@ export class HomePage {
"response.body.responseMeta.status",
201,
);
cy.get(locator._loading).should("not.exist");
agHelper.Sleep(2000)
cy.get(this.locator._loading).should("not.exist");
this.agHelper.Sleep(2000)
this.RenameApplication(appname)
cy.get(this._buildFromScratchActionCard).click();
cy.wait("@updateApplication").should(
@ -170,11 +166,11 @@ export class HomePage {
//Maps to LogOut in command.js
public LogOutviaAPI() {
cy.request("POST", "/api/v1/logout");
agHelper.Sleep()//for logout to complete!
this.agHelper.Sleep()//for logout to complete!
}
public LogintoApp(uname: string, pswd: string, role: 'App Viewer' | 'Developer' | 'Administrator' = 'Administrator') {
agHelper.Sleep() //waiting for window to load
this.agHelper.Sleep() //waiting for window to load
cy.window().its("store").invoke("dispatch", { type: "LOGOUT_USER_INIT" });
cy.wait("@postLogout");
cy.visit("/user/login");
@ -182,16 +178,16 @@ export class HomePage {
cy.get(this._password).type(pswd);
cy.get(this._submitBtn).click();
cy.wait("@getUser");
agHelper.Sleep(3000)
this.agHelper.Sleep(3000)
if (role != 'App Viewer')
cy.get(this._homePageAppCreateBtn).should("be.visible").should("be.enabled");
}
public FilterApplication(appName: string, orgId: string) {
cy.get(this._searchInput).type(appName);
agHelper.Sleep(2000)
this.agHelper.Sleep(2000)
cy.get(this._appContainer).contains(orgId);
cy.xpath(locator._spanButton('Share'))
cy.xpath(this.locator._spanButton('Share'))
.first()
.should("be.visible")
}
@ -202,7 +198,7 @@ export class HomePage {
.should("be.visible")
.first()
.click();
cy.get(locator._loading).should("not.exist");
cy.get(this.locator._loading).should("not.exist");
cy.wait("@getPagesForViewApp").should(
"have.nested.property",
"response.body.responseMeta.status",
@ -249,7 +245,7 @@ export class HomePage {
"response.body.responseMeta.status",
200,
);
agHelper.Sleep(2500)//wait for members page to load!
this.agHelper.Sleep(2500)//wait for members page to load!
}
public UpdateUserRoleInOrg(orgName: string, email: string, currentRole: string, newRole: string) {
@ -257,9 +253,27 @@ export class HomePage {
cy.xpath(this._userRoleDropDown(email, currentRole)).first().trigger('click');
//cy.xpath(this._userRoleDropDown(email)).first().click({force: true});
cy.get(this._visibleTextSpan(newRole)).last().click({ force: true });
agHelper.Sleep()
this.agHelper.Sleep()
this.NavigateToHome()
}
public ImportApp(fixtureJson: string, reconnect = false) {
cy.get(this._homeIcon).click();
cy.get(this._optionsIcon).first().click();
cy.get(this._orgImport).click({ force: true });
cy.get(this._orgImportAppModal).should("be.visible");
cy.xpath(this._uploadFile).attachFile(fixtureJson).wait(500);
cy.get(this._orgImportAppModal).should("not.exist");
if (!reconnect) {
this.AssertImport()
}
}
public AssertImport() {
this.agHelper.ValidateToastMessage("Application imported successfully")
this.agHelper.Sleep(5000)//for imported app to settle!
cy.get(this.locator._loading).should("not.exist");
}
}

View File

@ -1,63 +1,64 @@
import { AggregateHelper } from "./AggregateHelper";
import { CommonLocators } from "../Objects/CommonLocators";
import apiwidget from "../../locators/apiWidgetslocator.json";
const agHelper = new AggregateHelper();
const locator = new CommonLocators();
import { ObjectsRegistry } from "../Objects/Registry"
export class JSEditor {
public agHelper = ObjectsRegistry.AggregateHelper
public locator = ObjectsRegistry.CommonLocators;
public ee = ObjectsRegistry.EntityExplorer;
private _runButton = "//li//*[local-name() = 'svg' and @class='run-button']";
private _jsObjName = ".t--js-action-name-edit-field span";
private _jsObjTxt = ".t--js-action-name-edit-field input";
private _newJSobj = "span:contains('New JS Object')"
private _bindingsClose = ".t--entity-property-close"
private _propertyList = ".t--entity-property"
public NavigateToJSEditor() {
cy.get(locator._createNew)
cy.get(this.locator._createNew)
.last()
.click({ force: true });
cy.get(this._newJSobj).click({ force: true });
//cy.waitUntil(() => cy.get(locator._toastMsg).should('not.be.visible')) // fails sometimes
agHelper.WaitUntilEleDisappear(locator._toastMsg, 'created successfully', 1000)
//cy.waitUntil(() => cy.get(this.locator._toastMsg).should('not.be.visible')) // fails sometimes
this.agHelper.WaitUntilEleDisappear(this.locator._toastMsg, 'created successfully')
}
public CreateJSObject(JSCode: string, paste = true, completeReplace = false) {
public CreateJSObject(JSCode: string, paste = true, completeReplace = false, toRun = true) {
this.NavigateToJSEditor();
if (!completeReplace) {
cy.get(locator._codeMirrorTextArea)
cy.get(this.locator._codeMirrorTextArea)
.first()
.focus()
.type("{downarrow}{downarrow}{downarrow}{downarrow} ")
}
else {
cy.get(locator._codeMirrorTextArea)
.first()
.focus()
.type("{downarrow}{downarrow}{downarrow}{downarrow}{downarrow}{downarrow}{downarrow}{downarrow}{downarrow}{downarrow}")
.type("{shift}{uparrow}{uparrow}{uparrow}{uparrow}{uparrow}{uparrow}{uparrow}{uparrow}{uparrow}", { force: true })
.type("{backspace}",{ force: true });
cy.get(this.locator._codeMirrorTextArea)
.first()
.focus()
.type("{downarrow}{downarrow}{downarrow}{downarrow}{downarrow}{downarrow}{downarrow}{downarrow}{downarrow}{downarrow}")
.type("{shift}{uparrow}{uparrow}{uparrow}{uparrow}{uparrow}{uparrow}{uparrow}{uparrow}{uparrow}", { force: true })
.type("{backspace}", { force: true });
// .type("{uparrow}", { force: true })
// .type("{ctrl}{shift}{downarrow}", { force: true })
// .type("{del}",{ force: true });
// cy.get(locator._codeEditorTarget).contains('export').click().closest(locator._codeEditorTarget)
// cy.get(this.locator._codthis.eeditorTarget).contains('export').click().closest(this.locator._codthis.eeditorTarget)
// .type("{uparrow}", { force: true })
// .type("{ctrl}{shift}{downarrow}", { force: true })
// .type("{backspace}",{ force: true });
//.type("{downarrow}{downarrow}{downarrow}{downarrow}{downarrow}{downarrow}{downarrow}{downarrow}{downarrow}{downarrow} ")
}
}
cy.get(locator._codeMirrorTextArea)
cy.get(this.locator._codeMirrorTextArea)
.first()
.then((el: any) => {
const input = cy.get(el);
if (paste) {
//input.invoke("val", value);
agHelper.Paste(el, JSCode)
this.agHelper.Paste(el, JSCode)
} else {
input.type(JSCode, {
parseSpecialCharSequences: false, delay: 150
@ -65,34 +66,36 @@ export class JSEditor {
}
});
agHelper.WaitAutoSave()//Ample wait due to open bug # 10284
agHelper.Sleep(5000)//Ample wait due to open bug # 10284
this.agHelper.AssertAutoSave()//Ample wait due to open bug # 10284
this.agHelper.Sleep(5000)//Ample wait due to open bug # 10284
//clicking 1 times & waits for 3 second for result to be populated!
Cypress._.times(1, () => {
cy.xpath(this._runButton)
.first()
.click()
.wait(3000)
})
cy.get(locator._empty).should('not.exist')
cy.get(locator._toastMsg).should("have.length", 0)
if (toRun) {
//clicking 1 times & waits for 3 second for result to be populated!
Cypress._.times(1, () => {
cy.xpath(this._runButton)
.first()
.click()
.wait(3000)
})
cy.get(this.locator._empty).should('not.exist')
cy.get(this.locator._toastMsg).should("have.length", 0)
}
this.GetJSObjectName()
}
public EnterJSContext(endp: string, value: string, paste = true, toToggleOnJS = false) {
if (toToggleOnJS) {
cy.get(locator._jsToggle(endp))
cy.get(this.locator._jsToggle(endp))
.invoke("attr", "class")
.then((classes: any) => {
if (!classes.includes("is-active")) {
cy.get(locator._jsToggle(endp))
cy.get(this.locator._jsToggle(endp))
.first()
.click({ force: true });
}
});
}
cy.get(locator._propertyControl + endp + " " + locator._codeMirrorTextArea)
cy.get(this.locator._propertyControl + endp + " " + this.locator._codeMirrorTextArea)
.first()
.focus()
.type("{uparrow}", { force: true })
@ -102,7 +105,7 @@ export class JSEditor {
cy.focused().then(($cm: any) => {
if ($cm.contents != "") {
cy.log("The field is not empty");
cy.get(locator._propertyControl + endp + " " + locator._codeMirrorTextArea)
cy.get(this.locator._propertyControl + endp + " " + this.locator._codeMirrorTextArea)
.first()
.click({ force: true })
.focused()
@ -110,14 +113,14 @@ export class JSEditor {
force: true,
});
}
agHelper.Sleep()
cy.get(locator._propertyControl + endp + " " + locator._codeMirrorTextArea)
this.agHelper.Sleep()
cy.get(this.locator._propertyControl + endp + " " + this.locator._codeMirrorTextArea)
.first()
.then((el: any) => {
const input = cy.get(el);
if (paste) {
//input.invoke("val", value);
agHelper.Paste(el, value)
this.agHelper.Paste(el, value)
} else {
input.type(value, {
parseSpecialCharSequences: false,
@ -125,7 +128,7 @@ export class JSEditor {
}
});
});
agHelper.WaitAutoSave()//Allowing time for Evaluate value to capture value
this.agHelper.AssertAutoSave()//Allowing time for Evaluate value to capture value
}
public RenameJSObjFromForm(renameVal: string) {
@ -135,16 +138,16 @@ export class JSEditor {
.type(renameVal, { force: true })
.should("have.value", renameVal)
.blur();
agHelper.Sleep(); //allowing time for name change to reflect in EntityExplorer
this.agHelper.Sleep(); //allowing time for name change to reflect in EntityExplorer
}
public RenameJSObjFromExplorer(entityName: string, renameVal: string) {
agHelper.ActionContextMenuByEntityName("RenamedJSObject", "Edit Name");
cy.xpath(locator._entityNameEditing(entityName)).type(
this.ee.ActionContextMenuByEntityName("RenamedJSObject", "Edit Name");
cy.xpath(this.locator._entityNameEditing(entityName)).type(
renameVal + "{enter}",
);
agHelper.ValidateEntityPresenceInExplorer(renameVal);
agHelper.Sleep(); //allowing time for name change to reflect in EntityExplorer
this.ee.AssertEntityPresenceInExplorer(renameVal);
this.agHelper.Sleep(); //allowing time for name change to reflect in EntityExplorer
}
public GetJSObjectName() {
@ -153,8 +156,8 @@ export class JSEditor {
}
public validateDefaultJSObjProperties(jsObjName: string) {
agHelper.ActionContextMenuByEntityName(jsObjName, "Show Bindings");
cy.get(apiwidget.propertyList).then(function ($lis) {
this.ee.ActionContextMenuByEntityName(jsObjName, "Show Bindings");
cy.get(this._propertyList).then(function ($lis) {
expect($lis).to.have.length(4);
expect($lis.eq(0).text()).to.be.oneOf([
"{{" + jsObjName + ".myFun2()}}",

View File

@ -0,0 +1,106 @@
import { ObjectsRegistry } from "../Objects/Registry"
export class Table {
public agHelper = ObjectsRegistry.AggregateHelper
public locator = ObjectsRegistry.CommonLocators
private _tableWrap = "//div[@class='tableWrap']"
private _tableHeader = this._tableWrap + "//div[@class='thead']//div[@class='tr'][1]"
private _columnHeader = (columnName: string) => this._tableWrap + "//div[@class='thead']//div[@class='tr'][1]//div[@role='columnheader']//div[text()='" + columnName + "']/parent::div/parent::div"
private _nextPage = ".t--widget-tablewidget .t--table-widget-next-page"
private _previousPage = ".t--widget-tablewidget .t--table-widget-prev-page"
private _pageNumber = ".t--widget-tablewidget .page-item"
private _pageNumberServerSideOff = ".t--widget-tablewidget .t--table-widget-page-input input"
_tableRowColumn = (rowNum: number, colNum: number) => `.t--widget-tablewidget .tbody .td[data-rowindex=${rowNum}][data-colindex=${colNum}] div div`
_tableEmptyColumnData = `.t--widget-tablewidget .tbody .td` //selected-row
_tableSelectedRow = this._tableWrap + "//div[contains(@class, 'tbody')]//div[contains(@class, 'selected-row')]/div"
public WaitUntilTableLoad() {
// cy.waitUntil(() => cy.xpath(this._table, { timeout: 80000 }).should('be.visible'),
// {
// errorMsg: "Element did not appear",
// timeout: 10000,
// interval: 2000
// }).then(() => this.agHelper.Sleep(500))
// this.ReadTableRowColumnData(0, 0).then((cellData) => {
// expect(cellData).not.empty;
// });
cy.waitUntil(() => this.ReadTableRowColumnData(0, 0).then(cellData => expect(cellData).not.empty),
{
errorMsg: "Table is not populated",
timeout: 10000,
interval: 2000
}).then(() => this.agHelper.Sleep(500))
}
public WaitForTableEmpty() {
cy.waitUntil(() => cy.get(this._tableEmptyColumnData).children().should("have.length", 0),
{
errorMsg: "Table is populated when not expected",
timeout: 10000,
interval: 2000
}).then(() => this.agHelper.Sleep(500))
}
public AssertTableHeaderOrder(expectedOrder: string) {
cy.xpath(this._tableHeader).invoke("text").then((x) => {
expect(x).to.eq(expectedOrder);
});
}
public ReadTableRowColumnData(rowNum: number, colNum: number) {
return cy.get(this._tableRowColumn(rowNum, colNum), { timeout: 80000 }).invoke("text");
}
public AssertHiddenColumns(columnNames: string[]) {
columnNames.forEach($header => {
cy.xpath(this._columnHeader($header))
.invoke("attr", "class")
.then((classes) => {
expect(classes).includes("hidden-header");
});
})
}
public NavigateToNextPage() {
let curPageNo: number;
cy.get(this._pageNumber).invoke('text').then($currentPageNo =>
curPageNo = Number($currentPageNo))
cy.get(this._nextPage).click()
cy.get(this._pageNumber).invoke('text').then($newPageNo =>
expect(Number($newPageNo)).to.eq(curPageNo + 1))
}
public NavigateToPreviousPage() {
let curPageNo: number;
cy.get(this._pageNumber).invoke('text').then($currentPageNo =>
curPageNo = Number($currentPageNo))
cy.get(this._previousPage).click()
cy.get(this._pageNumber).invoke('text').then($newPageNo =>
expect(Number($newPageNo)).to.eq(curPageNo - 1))
}
public AssertPageNumber(pageNo: number, serverSide: 'Off' | 'On' = 'On') {
if (serverSide == 'On')
cy.get(this._pageNumber).should('have.text', Number(pageNo))
else {
cy.get(this._pageNumberServerSideOff).should('have.value', Number(pageNo))
cy.get(this._previousPage).should("have.attr", 'disabled')
cy.get(this._nextPage).should("have.attr", 'disabled')
}
if (pageNo == 1)
cy.get(this._previousPage).should("have.attr", 'disabled')
}
public AssertSelectedRow(rowNum: number = 0) {
cy.xpath(this._tableSelectedRow)
.invoke("attr", "data-rowindex")
.then($rowIndex => {
expect(Number($rowIndex)).to.eq(rowNum);
});
}
}

View File

@ -479,7 +479,7 @@ Cypress.Commands.add("LogintoApp", (uname, pword) => {
cy.visit("/user/login");
cy.get(loginPage.username).should("be.visible");
cy.get(loginPage.username).type(uname);
cy.get(loginPage.password).type(pword);
cy.get(loginPage.password).type(pword, { log: false });
cy.get(loginPage.submitBtn).click();
cy.wait("@getUser");
cy.wait(3000);
@ -889,7 +889,8 @@ Cypress.Commands.add("enterDatasource", (datasource) => {
cy.get(apiwidget.resourceUrl)
.first()
.click({ force: true })
.type(datasource, { parseSpecialCharSequences: false });
.type(datasource, { parseSpecialCharSequences: false })
.type("{esc}}");
});
Cypress.Commands.add("changeZoomLevel", (zoomValue) => {

View File

@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" fill="none" viewBox="0 0 32 32"><path fill="#F2FAFF" fill-opacity=".9" d="M17.1818 18.1818C17.1818 18.7341 16.7341 19.1818 16.1818 19.1818H15.8182C15.2659 19.1818 14.8182 18.7341 14.8182 18.1818V15.4545C14.8182 14.9023 15.2659 14.4545 15.8182 14.4545H16.1818C16.7341 14.4545 17.1818 14.9023 17.1818 15.4545V18.1818ZM17.1818 22.9091C17.1818 23.4614 16.7341 23.9091 16.1818 23.9091H15.8182C15.2659 23.9091 14.8182 23.4614 14.8182 22.9091V22.5455C14.8182 21.9932 15.2659 21.5455 15.8182 21.5455H16.1818C16.7341 21.5455 17.1818 21.9932 17.1818 22.5455V22.9091ZM3.86902 25.9535C3.48306 26.6202 3.96411 27.4545 4.73445 27.4545H27.2656C28.0359 27.4545 28.5169 26.6202 28.131 25.9535L16.8654 6.49483C16.4803 5.82954 15.5197 5.82954 15.1346 6.49483L3.86902 25.9535Z"/></svg>

Before

Width:  |  Height:  |  Size: 828 B

View File

@ -1 +0,0 @@
<svg fill="none" height="32" viewBox="0 0 32 32" width="32" xmlns="http://www.w3.org/2000/svg"><g fill="#4b4848"><path d="m23.7299 14.3547c0-.6242-.4316-1.1349-.9592-1.1349-.5275 0-.9591.5107-.9591 1.1349 0 3.9148-2.6856 7.0354-5.9467 7.0354-3.261 0-5.94663-3.1206-5.94663-7.0354 0-.6242-.4316-1.1349-.95914-1.1349-.52752 0-.95913.5107-.95913 1.1349 0 4.7658 3.0213 8.6808 6.9057 9.1914v3.5178h-2.158c-.5275 0-.9591.5106-.9591 1.1346 0 .6242.4316 1.1348.9591 1.1348h6.1864c.5276 0 .9592-.5106.9592-1.1348 0-.624-.4316-1.1346-.9592-1.1346h-2.1101v-3.5178c3.8845-.5106 6.9059-4.4256 6.9059-9.1914z"/><path d="m16.0088 2.66666h-.2879c-2.206 0-4.0283 2.15602-4.0283 4.76596v6.86528c0 2.61 1.8223 4.766 4.0283 4.766h.2879c2.206 0 4.0283-2.156 4.0283-4.766v-6.86528c0-2.60994-1.8223-4.76596-4.0283-4.76596z"/></g></svg>

Before

Width:  |  Height:  |  Size: 813 B

View File

@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" width="18" height="14" fill="none" viewBox="0 0 18 14"><path fill="#4b4848" d="M0.5 11V3H2.5V11H0.5Z"/><path fill="#4b4848" d="M3.5 13V1H5.5V13H3.5Z"/><path fill="#4b4848" d="M6.5 10V5H8.5V10H6.5Z"/><path fill="#4b4848" d="M9.5 14V0H11.5V14H9.5Z"/><path fill="#4b4848" d="M12.5 12V2H14.5V12H12.5Z"/><path fill="#4b4848" d="M15.5 10V4H17.5V10H15.5Z"/></svg>

Before

Width:  |  Height:  |  Size: 396 B

View File

@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" width="32" height="13" fill="none" viewBox="0 0 32 13"><mask id="path-1-inside-1" fill="#fff"><path fill-rule="evenodd" d="M0 2C0 0.895431 0.895431 0 2 0H9.5V13H2C0.895431 13 0 12.1046 0 11V2ZM11 13V0H21V13H11ZM22.5 13H30C31.1046 13 32 12.1046 32 11V2C32 0.895431 31.1046 0 30 0H22.5V13Z" clip-rule="evenodd"/></mask><path fill="#4b4848" fill-rule="evenodd" d="M0 2C0 0.895431 0.895431 0 2 0H9.5V13H2C0.895431 13 0 12.1046 0 11V2ZM11 13V0H21V13H11ZM22.5 13H30C31.1046 13 32 12.1046 32 11V2C32 0.895431 31.1046 0 30 0H22.5V13Z" clip-rule="evenodd"/><path fill="#4b4848" d="M9.5 0H10.5V-1H9.5V0ZM9.5 13V14H10.5V13H9.5ZM11 0V-1H10V0H11ZM11 13H10V14H11V13ZM21 0H22V-1H21V0ZM21 13V14H22V13H21ZM22.5 13H21.5V14H22.5V13ZM22.5 0V-1H21.5V0H22.5ZM2 -1C0.343146 -1 -1 0.343146 -1 2H1C1 1.44772 1.44772 1 2 1V-1ZM9.5 -1H2V1H9.5V-1ZM10.5 13V0H8.5V13H10.5ZM2 14H9.5V12H2V14ZM-1 11C-1 12.6569 0.343146 14 2 14V12C1.44772 12 1 11.5523 1 11H-1ZM-1 2V11H1V2H-1ZM10 0V13H12V0H10ZM21 -1H11V1H21V-1ZM22 13V0H20V13H22ZM11 14H21V12H11V14ZM22.5 14H30V12H22.5V14ZM30 14C31.6569 14 33 12.6569 33 11H31C31 11.5523 30.5523 12 30 12V14ZM33 11V2H31V11H33ZM33 2C33 0.343146 31.6569 -1 30 -1V1C30.5523 1 31 1.44772 31 2H33ZM30 -1H22.5V1H30V-1ZM21.5 0V13H23.5V0H21.5Z" mask="url(#path-1-inside-1)"/></svg>

Before

Width:  |  Height:  |  Size: 1.3 KiB

View File

@ -1 +0,0 @@
<svg fill="none" height="32" viewBox="0 0 32 32" width="32" xmlns="http://www.w3.org/2000/svg"><path clip-rule="evenodd" d="m24 19v-8h-16v10h8v-2h-6v-6h12v6zm-9.4727 3.0555c1.1911-.4051 1.3299-.3724 2.2775.6936.0151.0138.0302.0277.0453.0416.239.2192.4717.4326.7838.3138.3327-.1256.4008-.3158.4008-.6439v-6.4815c0-.4464.5133-.953 1.0043-.953.4911 0 .9938.5066.9938.953v3.4791l2.7653 1.2297c.4139.184.6524.6233.5813 1.0707l-.5152 3.2414h-6.8642l-.4913-1z" fill="#4b4848" fill-rule="evenodd"/></svg>

Before

Width:  |  Height:  |  Size: 496 B

View File

@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="none" viewBox="0 0 24 24"><path fill="#4b4848" d="M9 3h6l2 2h4a1 1 0 0 1 1 1v14a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V6a1 1 0 0 1 1-1h4l2-2zm3 16a6 6 0 1 0 0-12 6 6 0 0 0 0 12zm0-2a4 4 0 1 1 0-8 4 4 0 0 1 0 8z"/></svg>

Before

Width:  |  Height:  |  Size: 279 B

View File

@ -1 +0,0 @@
<svg fill="none" height="32" viewBox="0 0 32 32" width="32" xmlns="http://www.w3.org/2000/svg"><g fill="#4b4848"><path d="m10.6666 22.6667v6.6666h-5.33335v-6.6666z"/><path d="m18.6666 16v13.3333h-5.3333v-13.3333z"/><path d="m26.6666 2.66666v26.66664h-5.3333v-26.66664z"/></g></svg>

Before

Width:  |  Height:  |  Size: 281 B

View File

@ -1 +0,0 @@
<svg fill="none" height="32" viewBox="0 0 32 32" width="32" xmlns="http://www.w3.org/2000/svg"><g fill="#4b4848"><path d="m4.8147 16.815 1.14288-1.1428 1.14286 1.1428 2.85719-2.8571 1.14287 1.1428-4.00006 4.0001z"/><path d="m4.8147 8.00004 1.14288-1.14287 1.14286 1.14287 2.85719-2.85719 1.14287 1.14288-4.00006 4.00007z"/><path d="m26.6666 6.66666h-13.3333v2.66666h13.3333z"/><path d="m26.6666 14.6667h-13.3333v2.6666h13.3333z"/><path d="m26.6666 22.6667h-13.3333v2.6666h13.3333z"/></g></svg>

Before

Width:  |  Height:  |  Size: 493 B

View File

@ -1 +0,0 @@
<svg fill="none" height="32" viewBox="0 0 32 32" width="32" xmlns="http://www.w3.org/2000/svg"><path clip-rule="evenodd" d="m25.3334 25.3333v-18.66664h-18.66665v18.66664zm-15.99999-15.99998v13.33338h13.33329v-13.33338zm3.21889 5.42618-1.8856 1.8856 3.7712 3.7712 6.5997-6.5997-1.8856-1.8856-4.7141 4.7141z" fill="#4b4848" fill-rule="evenodd"/></svg>

Before

Width:  |  Height:  |  Size: 349 B

View File

@ -1,4 +0,0 @@
<svg width="24" height="25" viewBox="0 0 24 25" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M12 22.0195C6.477 22.0195 2 17.5425 2 12.0195C2 7.54154 4.943 3.75154 9 2.47754V4.60154C7.28092 5.29958 5.8578 6.57325 4.97406 8.20465C4.09032 9.83606 3.80088 11.7238 4.15525 13.5451C4.50963 15.3663 5.48579 17.0078 6.91676 18.1889C8.34774 19.3699 10.1446 20.017 12 20.0195C13.5938 20.0195 15.1513 19.5436 16.4728 18.6528C17.7944 17.762 18.82 16.4969 19.418 15.0195H21.542C20.268 19.0765 16.478 22.0195 12 22.0195Z" fill="#858282"/>
<path d="M15.6027 5.82699C15.6027 6.58113 15.3881 7.16124 14.9589 7.56732C14.5388 7.9734 13.9863 8.17643 13.3014 8.17643C12.9635 8.17643 12.653 8.12671 12.3699 8.02726C12.0868 7.91953 11.8447 7.76621 11.6438 7.56732C11.4429 7.36842 11.2831 7.12395 11.1644 6.83389C11.0548 6.53555 11 6.19991 11 5.82699C11 5.06456 11.21 4.48444 11.6301 4.08665C12.0594 3.68058 12.6164 3.47754 13.3014 3.47754C13.9863 3.47754 14.5388 3.68058 14.9589 4.08665C15.3881 4.48444 15.6027 5.06456 15.6027 5.82699ZM14.3014 5.82699C14.3014 5.38776 14.21 5.06041 14.0274 4.84494C13.8539 4.62119 13.6119 4.50931 13.3014 4.50931C12.9909 4.50931 12.7489 4.62119 12.5753 4.84494C12.4018 5.06041 12.3151 5.38776 12.3151 5.82699C12.3151 6.26621 12.4018 6.5977 12.5753 6.82146C12.7489 7.03693 12.9909 7.14467 13.3014 7.14467C13.6119 7.14467 13.8539 7.03693 14.0274 6.82146C14.21 6.5977 14.3014 6.26621 14.3014 5.82699ZM18.3836 3.664H19.9589L14.6027 12.2786H13.0274L18.3836 3.664ZM22 10.1281C22 10.8822 21.7854 11.4623 21.3562 11.8684C20.9361 12.2745 20.3836 12.4775 19.6986 12.4775C19.3607 12.4775 19.0502 12.4237 18.7671 12.3159C18.484 12.2165 18.242 12.0673 18.0411 11.8684C17.8402 11.6695 17.6804 11.4251 17.5616 11.135C17.4521 10.8367 17.3973 10.501 17.3973 10.1281C17.3973 9.36566 17.6073 8.78555 18.0274 8.38776C18.4566 7.98168 19.0137 7.77864 19.6986 7.77864C20.3836 7.77864 20.9361 7.98168 21.3562 8.38776C21.7854 8.78555 22 9.36566 22 10.1281ZM20.6986 10.1281C20.6986 9.68886 20.6073 9.36152 20.4247 9.14605C20.2511 8.92229 20.0091 8.81041 19.6986 8.81041C19.3881 8.81041 19.1461 8.92229 18.9726 9.14605C18.7991 9.36152 18.7123 9.68886 18.7123 10.1281C18.7123 10.5673 18.7991 10.8988 18.9726 11.1226C19.1461 11.338 19.3881 11.4458 19.6986 11.4458C20.0091 11.4458 20.2511 11.338 20.4247 11.1226C20.6073 10.8988 20.6986 10.5673 20.6986 10.1281Z" fill="#858282"/>
</svg>

Before

Width:  |  Height:  |  Size: 2.3 KiB

View File

@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" fill="none" viewBox="0 0 32 32"><path fill="#F2FAFF" fill-opacity=".9" d="M25.4286 28H6.57143C5.15125 28 4 26.8488 4 25.4286V6.57143C4 5.15125 5.15125 4 6.57143 4H25.4286C26.8488 4 28 5.15125 28 6.57143V25.4286C28 26.8488 26.8488 28 25.4286 28ZM17.9026 8.95455L11.3117 15.5454C11.0607 15.7965 11.0607 16.2035 11.3117 16.4546L17.9025 23.0454C18.3075 23.4504 18.9999 23.1636 18.9999 22.5909V9.40916C19 8.83643 18.3075 8.54961 17.9026 8.95455Z"/></svg>

Before

Width:  |  Height:  |  Size: 512 B

View File

@ -1 +0,0 @@
<svg fill="none" height="32" viewBox="0 0 32 32" width="32" xmlns="http://www.w3.org/2000/svg"><g fill="#4b4848"><path d="m2.66658 2.66666h5.33334v2.66666h-2.66667v2.66667h-2.66667z"/><path d="m29.3333 29.3333h-5.3334v-2.6666h2.6667v-2.6667h2.6667z"/><path d="m2.66658 29.3333v-5.3333h2.66667v2.6667h2.66667v2.6666z"/><path d="m2.66658 14.6667v-4h2.66667v4z"/><path d="m26.6666 14.6667v-4h2.6667v4z"/><path d="m14.6666 5.33332h-4v-2.66666h4z"/><path d="m14.6666 29.3333h-4v-2.6666h4z"/><path d="m2.66658 21.3333v-4h2.66667v4z"/><path d="m26.6666 21.3333v-4h2.6667v4z"/><path d="m21.3332 5.33332h-4l.0001-2.66666h4z"/><path d="m21.3333 29.3333h-4v-2.6666h3.9999z"/><path d="m29.3333 7.99999v-5.33333h-5.3334v2.66666h2.6667v2.66667z"/></g></svg>

Before

Width:  |  Height:  |  Size: 743 B

View File

@ -1,4 +0,0 @@
<svg width="20" height="12" viewBox="0 0 20 12" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M0 0H20V12H0V0ZM2 10V2H18V10H2Z" fill="#4B4848"/>
<path d="M4.5915 5.6705C4.82608 6.08262 5.16738 6.42392 5.5795 6.6585L5.8005 6.349C5.83604 6.29923 5.88859 6.26422 5.9482 6.25058C6.00781 6.23695 6.07036 6.24563 6.124 6.275C6.47758 6.46823 6.86805 6.58444 7.26975 6.616C7.33244 6.62097 7.39096 6.64938 7.43364 6.69558C7.47631 6.74178 7.50001 6.80236 7.5 6.86525V7.98075C7.50001 8.04265 7.47706 8.10235 7.43559 8.1483C7.39412 8.19425 7.33708 8.22319 7.2755 8.2295C7.143 8.24325 7.0095 8.25 6.875 8.25C4.735 8.25 3 6.515 3 4.375C3 4.2405 3.00675 4.107 3.0205 3.9745C3.02681 3.91292 3.05575 3.85588 3.1017 3.81441C3.14765 3.77294 3.20735 3.74999 3.26925 3.75H4.38475C4.44764 3.74999 4.50822 3.77369 4.55442 3.81636C4.60062 3.85904 4.62903 3.91756 4.634 3.98025C4.66556 4.38195 4.78177 4.77242 4.975 5.126C5.00437 5.17964 5.01305 5.24219 4.99942 5.3018C4.98578 5.36141 4.95077 5.41396 4.901 5.4495L4.5915 5.6705ZM3.961 5.50625L4.436 5.167C4.3012 4.87602 4.20884 4.56721 4.16175 4.25H3.5025C3.501 4.2915 3.50025 4.33325 3.50025 4.375C3.5 6.239 5.011 7.75 6.875 7.75C6.91675 7.75 6.9585 7.74925 7 7.7475V7.08825C6.68279 7.04116 6.37398 6.9488 6.083 6.814L5.74375 7.289C5.60717 7.23593 5.4745 7.17327 5.34675 7.1015L5.33225 7.09325C4.84189 6.81418 4.43582 6.40811 4.15675 5.91775L4.1485 5.90325C4.07673 5.7755 4.01407 5.64283 3.961 5.50625Z" fill="#4B4848"/>
</svg>

Before

Width:  |  Height:  |  Size: 1.5 KiB

View File

@ -1 +0,0 @@
<svg fill="none" height="32" viewBox="0 0 32 32" width="32" xmlns="http://www.w3.org/2000/svg"><g fill="#4b4848"><path clip-rule="evenodd" d="m2.66675 5.33335h7.99995 10.6667 2.6667 5.3333v24.00005h-26.66665zm2.66666 21.33335v-13.3333-2.6667-2.66668h21.33329v2.66668 2.6667 13.3333z" fill-rule="evenodd"/><path d="m8.00008 2.66669v2.66666h2.66662v-2.66666z"/><path d="m21.3334 2.66669v2.66666h2.6667v-2.66666z"/><path d="m5.33341 13.3334h21.33329v-2.6667h-21.33329z"/><path d="m9.33342 18.6667v-2.6667h2.66668v2.6667z"/><path d="m9.33342 24v-2.6666h2.66668v2.6666z"/><path d="m14.6667 18.6667v-2.6667h2.6667v2.6667z"/><path d="m14.6667 24v-2.6666h2.6667v2.6666z"/><path d="m20.0001 18.6667v-2.6667h2.6666v2.6667z"/><path d="m20.0001 24v-2.6666h2.6666v2.6666z"/></g></svg>

Before

Width:  |  Height:  |  Size: 771 B

View File

@ -1 +0,0 @@
<svg width="20" height="4" viewBox="0 0 20 4" fill="#4b4848" xmlns="http://www.w3.org/2000/svg"><rect width="20" height="3"/></svg>

Before

Width:  |  Height:  |  Size: 131 B

View File

@ -1 +0,0 @@
<svg fill="none" height="32" viewBox="0 0 32 32" width="32" xmlns="http://www.w3.org/2000/svg"><path clip-rule="evenodd" d="m28 9.33331h-24v13.33329h24zm-21.33333 2.66669v8h18.66663v-8zm10.66773 3.0666 3.0666 3.0667 3.0667-3.0667-1.2267-1.2266-1.84 1.84-1.8399-1.84z" fill="#4b4848" fill-rule="evenodd"/></svg>

Before

Width:  |  Height:  |  Size: 310 B

View File

@ -1 +0,0 @@
<svg fill="none" height="32" viewBox="0 0 32 32" width="32" xmlns="http://www.w3.org/2000/svg"><path clip-rule="evenodd" d="m28.7999 3.20001v7.99999h-3.2v-4.79999h-19.19995v4.79999h-3.2v-7.99999zm-25.59995 25.59999v-8h3.2v4.8h19.19995v-4.8h3.2v8zm18.44255-16.7948.8447-.8278 3.8942 3.8942.8193.8361-.8193.8363-4.3842 4.3842-.8361-.8363-.8362-.8364 3.5478-3.5477-3.058-3.0583zm-11.4891 9.123.8447-.8279.8278-.8443-3.05808-3.0582 3.54778-3.5478-.8362-.8364-.8361-.8363-4.38417 4.3842-.81932.8363.81932.8361zm10.6821-12.51198-2.1496-.98653-6.9057 15.04761 2.1496.9866z" fill="#4b4848" fill-rule="evenodd"/></svg>

Before

Width:  |  Height:  |  Size: 609 B

View File

@ -1 +0,0 @@
<svg fill="none" height="32" viewBox="0 0 32 32" width="32" xmlns="http://www.w3.org/2000/svg"><path clip-rule="evenodd" d="m24.7267 26.2857h-3.7402-3.1173v-7.4857h2.4942l-4.3636-5.4857-4.3636 5.4857h2.4927v7.4857h-3.1165-3.74023c-2.75408 0-4.98701-2.4563-4.98701-5.4858 0-2.5618 1.60457-4.6971 3.7627-5.2992.23937-5.4473 4.31754-9.78647 9.32824-9.78647 4.9546 0 8.999 4.24183 9.3194 9.60407 2.7965-.0219 5.0182 2.4686 5.0182 5.4816 0 3.0295-2.2329 5.4858-4.987 5.4858z" fill="#4b4848" fill-rule="evenodd"/></svg>

Before

Width:  |  Height:  |  Size: 513 B

View File

@ -1 +0,0 @@
<svg fill="none" height="32" viewBox="0 0 32 32" width="32" xmlns="http://www.w3.org/2000/svg"><g fill="#4b4848"><path clip-rule="evenodd" d="m5.33325 2.66669v26.66671h21.33335v-26.66671zm2.66667 24.00001v-21.33335h15.99998v21.33335z" fill-rule="evenodd"/><path d="m10.6666 10.6667v-2.66668h8v2.66668z"/><path d="m10.6666 14.6667v-2.6667h9.3333v2.6667z"/><path d="m10.6666 18.6667v-2.6667h8v2.6667z"/><path d="m15.9999 24.6667v-3.3333h5.3334v3.3333z"/></g></svg>

Before

Width:  |  Height:  |  Size: 462 B

View File

@ -1 +0,0 @@
<svg fill="none" height="32" viewBox="0 0 32 32" width="32" xmlns="http://www.w3.org/2000/svg"><path clip-rule="evenodd" d="m15.9999 30.6666c8.1001 0 14.6667-6.5665 14.6667-14.6666 0-8.10019-6.5666-14.66669-14.6667-14.66669-8.10016 0-14.66665 6.5665-14.66665 14.66669 0 8.1001 6.56649 14.6666 14.66665 14.6666zm1.3334-16v-5.99995h-2.6667v5.99995h-6.66668v2.6667h6.66668v6.6667h2.6667v-6.6667h6v-2.6667z" fill="#4b4848" fill-rule="evenodd"/></svg>

Before

Width:  |  Height:  |  Size: 446 B

View File

@ -1 +0,0 @@
<svg fill="none" height="32" viewBox="0 0 32 32" width="32" xmlns="http://www.w3.org/2000/svg"><g fill="#4b4848"><path clip-rule="evenodd" d="m2.66675 2.66669h26.66665v26.66671h-26.66665zm2.66666 24.00001v-21.33335h21.33329v21.33335z" fill-rule="evenodd"/><path d="m13.3334 18.6667-7.99999 5.3333v3.3334h21.33329v-6l-5.3333-6.6667-5.3333 6.6667z"/><path d="m13.3334 10.6667c0 1.4727-1.1939 2.6667-2.6667 2.6667-1.47271 0-2.66662-1.194-2.66662-2.6667 0-1.47277 1.19391-2.66668 2.66662-2.66668 1.4728 0 2.6667 1.19391 2.6667 2.66668z"/></g></svg>

Before

Width:  |  Height:  |  Size: 544 B

View File

@ -1 +0,0 @@
<svg fill="none" height="32" viewBox="0 0 32 32" width="32" xmlns="http://www.w3.org/2000/svg"><g fill="#4b4848"><path clip-rule="evenodd" d="m2.66675 8h26.66665v16h-26.66665zm2.66666 13.3333v-10.6666h21.33329v10.6666z" fill-rule="evenodd"/><path d="m6.66675 20v-8h1.33333v8z"/></g></svg>

Before

Width:  |  Height:  |  Size: 288 B

View File

@ -1,7 +0,0 @@
<svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M5.3335 2.6665V29.3332H26.6668V2.6665H5.3335ZM8.00016 26.6665V5.33317H24.0002V26.6665H8.00016Z" fill="#4B4848"/>
<path d="M13 18.04V15H20.5V18.04H13Z" fill="#4B4848"/>
<path d="M17 23V20.2H22V23H17Z" fill="#4B4848"/>
<path d="M10 11V8H18V11H10Z" fill="#4B4848"/>
<path d="M13 13V10H20V13H13Z" stroke="#4B4848" stroke-width="0.7"/>
</svg>

Before

Width:  |  Height:  |  Size: 483 B

View File

@ -1 +0,0 @@
<svg fill="none" height="32" viewBox="0 0 32 32" width="32" xmlns="http://www.w3.org/2000/svg"><path clip-rule="evenodd" d="m12.0001 5.33331h-5.33335v5.33329h5.33335zm13.3333 1.33334h-10.6667v2.66666h10.6667zm-10.6667 7.99995h10.6667v2.6667h-10.6667zm10.6667 8h-10.6667v2.6667h10.6667zm-18.66665-9.3333h5.33335v5.3333h-5.33335zm5.33335 8h-5.33335v5.3333h5.33335z" fill="#4b4848" fill-rule="evenodd"/></svg>

Before

Width:  |  Height:  |  Size: 406 B

View File

@ -1,3 +0,0 @@
<svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M16 2.664C20.416 2.664 24 6.216 24 10.5973C24 16.548 16 25.3307 16 25.3307C16 25.3307 8.00001 16.548 8.00001 10.5973C8.00001 6.216 11.5813 2.664 16 2.664ZM16 8C15.2928 8 14.6145 8.28095 14.1144 8.78105C13.6143 9.28115 13.3333 9.95942 13.3333 10.6667C13.3333 11.3739 13.6143 12.0522 14.1144 12.5523C14.6145 13.0524 15.2928 13.3333 16 13.3333C16.7073 13.3333 17.3855 13.0524 17.8856 12.5523C18.3857 12.0522 18.6667 11.3739 18.6667 10.6667C18.6667 9.95942 18.3857 9.28115 17.8856 8.78105C17.3855 8.28095 16.7073 8 16 8ZM26.6667 25.3333C26.6667 28.28 21.8907 30.6667 16 30.6667C10.1093 30.6667 5.33334 28.28 5.33334 25.3333C5.33334 23.6147 6.96001 22.0867 9.48401 21.1107L10.328 22.316C8.88801 22.92 8.00001 23.7493 8.00001 24.6667C8.00001 26.5067 11.5813 28 16 28C20.4187 28 24 26.5067 24 24.6667C24 23.7493 23.1107 22.92 21.672 22.316L22.516 21.1107C25.0413 22.0867 26.6667 23.6147 26.6667 25.3333Z" fill="#F2FAFF" fill-opacity="0.9"/>
</svg>

Before

Width:  |  Height:  |  Size: 1.0 KiB

View File

@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" fill="none" viewBox="0 0 32 32"><path fill="#F2FAFF" fill-opacity=".9" d="M16 2.664C20.416 2.664 24 6.216 24 10.5973C24 16.548 16 25.3307 16 25.3307C16 25.3307 8.00001 16.548 8.00001 10.5973C8.00001 6.216 11.5813 2.664 16 2.664ZM16 8C15.2928 8 14.6145 8.28095 14.1144 8.78105C13.6143 9.28115 13.3333 9.95942 13.3333 10.6667C13.3333 11.3739 13.6143 12.0522 14.1144 12.5523C14.6145 13.0524 15.2928 13.3333 16 13.3333C16.7073 13.3333 17.3855 13.0524 17.8856 12.5523C18.3857 12.0522 18.6667 11.3739 18.6667 10.6667C18.6667 9.95942 18.3857 9.28115 17.8856 8.78105C17.3855 8.28095 16.7073 8 16 8ZM26.6667 25.3333C26.6667 28.28 21.8907 30.6667 16 30.6667C10.1093 30.6667 5.33334 28.28 5.33334 25.3333C5.33334 23.6147 6.96001 22.0867 9.48401 21.1107L10.328 22.316C8.88801 22.92 8.00001 23.7493 8.00001 24.6667C8.00001 26.5067 11.5813 28 16 28C20.4187 28 24 26.5067 24 24.6667C24 23.7493 23.1107 22.92 21.672 22.316L22.516 21.1107C25.0413 22.0867 26.6667 23.6147 26.6667 25.3333Z"/></svg>

Before

Width:  |  Height:  |  Size: 1.0 KiB

View File

@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="none" viewBox="0 0 24 24"><path fill="#4B4848" fill-rule="evenodd" d="M9.50001 11.8034V18.5L14.5 21V11.55L12 15C11.3917 14.2179 10.4119 12.9626 9.50001 11.8034Z" clip-rule="evenodd"/><path fill="#4B4848" fill-rule="evenodd" d="M15.5 10.17V21L20.5 18V6L17 8.1L15.5 10.17Z" clip-rule="evenodd"/><path fill="#4B4848" d="M3.5 9V21L8.5 18V10.5374C8.5 10.5374 7.83441 9.63336 7.5 9C7.12002 8.28033 6.72229 7.06662 6.72229 7.06662L3.5 9Z"/><path fill="#4B4848" fill-rule="evenodd" d="M9.1559 9.87818C8.30481 8.73014 7.6 7.67255 7.6 6.35454C7.6 3.95998 9.56392 2.01104 11.9821 2H12.0032C14.431 2 16.4065 3.95362 16.4065 6.35454C16.4065 7.67255 15.7017 8.73038 14.8506 9.87818C14.8506 9.87818 12.1182 13.3703 12.0069 13.5208L9.1559 9.87818Z" clip-rule="evenodd"/></svg>

Before

Width:  |  Height:  |  Size: 829 B

View File

@ -1 +0,0 @@
<svg fill="none" height="32" viewBox="0 0 32 32" width="32" xmlns="http://www.w3.org/2000/svg"><g fill="#4b4848"><path d="m16 15.6667c1.4728 0 2.6667-1.1939 2.6667-2.6667s-1.1939-2.6667-2.6667-2.6667-2.6667 1.1939-2.6667 2.6667 1.1939 2.6667 2.6667 2.6667z"/><path clip-rule="evenodd" d="m24 13c0 1.7856-.585 3.4345-1.5737 4.7656l-6.4264 8.5677-6.42616-8.5677c-.98876-1.3311-1.57374-2.98-1.57374-4.7656 0-4.41828 3.5817-8 8-8s8 3.58172 8 8zm-2.6667 0c0 1.1915-.3875 2.2847-1.0443 3.1709l-4.2891 5.7182-4.2888-5.7181c-.6569-.8862-1.0444-1.9795-1.0444-3.171 0-2.9455 2.3878-5.33333 5.3333-5.33333s5.3333 2.38783 5.3333 5.33333z" fill-rule="evenodd"/></g></svg>

Before

Width:  |  Height:  |  Size: 658 B

View File

@ -1 +0,0 @@
<svg fill="none" height="32" viewBox="0 0 32 32" width="32" xmlns="http://www.w3.org/2000/svg"><g fill="#4b4848"><path d="m18.6666 5.33331h-5.3333v5.33329h5.3333z"/><path d="m18.6666 13.3333h-5.3333v5.3333h5.3333z"/><path d="m18.6666 21.3333h-5.3333v5.3333h5.3333z"/></g></svg>

Before

Width:  |  Height:  |  Size: 277 B

View File

@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="none" viewBox="0 0 24 24"><rect width="24" height="24" fill="#262626"/><rect width="4" height="4" x="10" y="4" fill="#EAEAEA"/><rect width="4" height="4" x="10" y="10" fill="#EAEAEA"/><rect width="4" height="4" x="10" y="16" fill="#EAEAEA"/></svg>

Before

Width:  |  Height:  |  Size: 316 B

View File

@ -1 +0,0 @@
<svg fill="none" height="32" viewBox="0 0 32 32" width="32" xmlns="http://www.w3.org/2000/svg"><g fill="#4b4848"><path clip-rule="evenodd" d="m2.66675 29.3334v-26.66671h26.66665v26.66671zm2.66666-2.6667v-21.33335h21.33329v21.33335z" fill-rule="evenodd"/><path d="m23.9334 15.152-6.5997-6.59967 1.8857-1.88562 6.5996 6.59969z"/><path d="m25.8188 8.55231-6.5996 6.59969-1.8857-1.8856 6.5997-6.5997z"/></g></svg>

Before

Width:  |  Height:  |  Size: 409 B

View File

@ -1 +0,0 @@
<svg fill="none" height="24" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg"><g fill="#4b4848"><path d="m2 2h20v8h-20z"/><path d="m9.99985 12.05h6.99995v1.5h-6.99995z"/><path d="m9.99985 16.75h5.99995v1.5h-5.99995z"/><path d="m7.99985 12.5h-3l1.5 1.5z"/><path d="m8 17h-3l1.5 1.5z"/><path clip-rule="evenodd" d="m2 8.5v13.5h18v-13.5zm1.5 12v-10.5h15v10.5z" fill-rule="evenodd"/></g></svg>

Before

Width:  |  Height:  |  Size: 406 B

View File

@ -1 +0,0 @@
<svg fill="none" height="24" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg"><path d="m2.75 2.75h18.5v6.5h-18.5z" stroke="#4b4848" stroke-width="1.5"/><g fill="#4b4848"><path d="m9.99985 12.05h6.99995v1.5h-6.99995z"/><path d="m9.99985 16.75h5.99995v1.5h-5.99995z"/><path d="m7.99985 12.5h-3l1.5 1.5z"/><path d="m8 17h-3l1.5 1.5z"/><path clip-rule="evenodd" d="m2 8.5v13.5h18v-13.5zm1.5 12v-10.5h15v10.5z" fill-rule="evenodd"/><path d="m14 5.25h5v1.5h-5z"/><path clip-rule="evenodd" d="m7 5.25h-2v1.5h2zm1 1.5h5v-1.5h-5z" fill-rule="evenodd"/></g></svg>

Before

Width:  |  Height:  |  Size: 570 B

View File

@ -1,4 +0,0 @@
<svg width="20" height="12" viewBox="0 0 20 12" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M0 0H20V12H0V0ZM2 10V2H18V10H2Z" fill="#4B4848"/>
<path d="M4.81348 8.41895H5.15625V7.93262C5.93555 7.87695 6.52441 7.46094 6.52441 6.74023V6.73438C6.52441 6.10156 6.10254 5.78516 5.32031 5.60352L5.15625 5.56543V4.42871C5.50781 4.47852 5.75098 4.68652 5.78906 5.0293L5.79199 5.03516L6.47168 5.03223V5.0293C6.44531 4.3584 5.91797 3.90137 5.15625 3.83984V3.34766H4.81348V3.83984C4.04883 3.89258 3.50098 4.3291 3.50098 5V5.00586C3.50098 5.61523 3.91113 5.95508 4.66406 6.12793L4.81348 6.16309V7.34668C4.37402 7.2998 4.15723 7.07129 4.10742 6.75195L4.10449 6.74609L3.4248 6.74902L3.42188 6.75195C3.44531 7.46094 4.03711 7.88281 4.81348 7.93262V8.41895ZM4.20703 4.95312V4.94727C4.20703 4.69531 4.41504 4.47559 4.81348 4.42871V5.48633C4.37988 5.37207 4.20703 5.19922 4.20703 4.95312ZM5.81836 6.80469V6.81055C5.81836 7.10059 5.61328 7.30859 5.15625 7.34668V6.24219C5.65723 6.36816 5.81836 6.52637 5.81836 6.80469Z" fill="#4B4848"/>
</svg>

Before

Width:  |  Height:  |  Size: 1.1 KiB

View File

@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M13 7h-2v4H7v2h4v4h2v-4h4v-2h-4V7zm-1-5C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8z"/></svg>

Before

Width:  |  Height:  |  Size: 296 B

View File

@ -1,15 +0,0 @@
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_172_5437)">
<path d="M2 9H14V15H2V9Z" fill="#4B4848"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M14 9.75L15 9H17L14 11.25V9.75Z" fill="#4B4848"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M14 12.75L19 9H21L14 14.25V12.75Z" fill="#4B4848"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M22 14.25V12.75L19 15H21L22 14.25Z" fill="#4B4848"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M22 11.25V9.75L15 15H17L22 11.25Z" fill="#4B4848"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M21 9H19L14 12.75V14.25L21 9ZM15 15H17L22 11.25V9.75L15 15ZM21 15H19L22 12.75V14.25L21 15ZM15 9H17L14 11.25V9.75L15 9Z" fill="#4B4848"/>
</g>
<defs>
<clipPath id="clip0_172_5437">
<rect width="24" height="24" fill="white"/>
</clipPath>
</defs>
</svg>

Before

Width:  |  Height:  |  Size: 879 B

View File

@ -1 +0,0 @@
<svg fill="none" height="32" viewBox="0 0 32 32" width="32" xmlns="http://www.w3.org/2000/svg"><g fill="#4b4848"><path clip-rule="evenodd" d="m16.0001 6.66669c5.1546 0 9.3333 4.17871 9.3333 9.33331 0 5.1547-4.1787 9.3334-9.3333 9.3334-5.1547 0-9.33335-4.1787-9.33335-9.3334 0-5.1546 4.17865-9.33331 9.33335-9.33331zm0 16.00001c-3.6819 0-6.66669-2.9848-6.66669-6.6667s2.98479-6.66665 6.66669-6.66665 6.6666 2.98475 6.6666 6.66665-2.9847 6.6667-6.6666 6.6667z" fill-rule="evenodd"/><path d="m16.0001 20c-2.2092 0-4-1.7908-4-4 0-2.2091 1.7908-4 4-4 2.2091 0 4 1.7909 4 4 0 2.2092-1.7909 4-4 4z"/></g></svg>

Before

Width:  |  Height:  |  Size: 603 B

View File

@ -1 +0,0 @@
<svg fill="none" height="32" viewBox="0 0 32 32" width="32" xmlns="http://www.w3.org/2000/svg"><path d="m15.8562 7.06976 2.6109 4.48144c.1811.3552.6601.6927 1.0644.7496l5.3058 1.0236-3.6923 3.7917c-.2928.2766-.4757.8223-.4066 1.2127l.6054 5.1131-4.8298-2.1397c-.3619-.1845-.9539-.1845-1.3159 0l-4.8294 2.1379.6053-5.113c.0691-.3904-.1137-.9366-.4065-1.2128l-3.59069-3.7917 5.20419-1.0236c.4047-.057.8837-.3944 1.0643-.7496z" fill="#4b4848"/></svg>

Before

Width:  |  Height:  |  Size: 447 B

View File

@ -1 +0,0 @@
<svg fill="none" height="32" viewBox="0 0 32 32" width="32" xmlns="http://www.w3.org/2000/svg"><path clip-rule="evenodd" d="m25.3334 6.66669h-18.66665v2.66666h18.66665zm-2.6667 5.33331h-15.99995v2.6667h15.99995zm-15.99995 5.3334h13.33335v2.6666h-13.33335zm18.66665 5.3333h-18.66665v2.6667h18.66665z" fill="#4b4848" fill-rule="evenodd"/></svg>

Before

Width:  |  Height:  |  Size: 342 B

View File

@ -1 +0,0 @@
<svg fill="none" height="32" viewBox="0 0 32 32" width="32" xmlns="http://www.w3.org/2000/svg"><path clip-rule="evenodd" d="m28 9.33331h-24v13.33329h24zm-21.33333 2.66669v8h18.66663v-8zm10.66773 3.0666 3.0666 3.0667 3.0667-3.0667-1.2267-1.2266-1.84 1.84-1.8399-1.84z" fill="#4b4848" fill-rule="evenodd"/></svg>

Before

Width:  |  Height:  |  Size: 310 B

View File

@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" width="15" height="19" fill="none" viewBox="0 0 15 19"><line x1="1.191" x2="13.431" y1="18.263" y2="1.412" stroke="#D0D7DD" stroke-width="2"/></svg>

Before

Width:  |  Height:  |  Size: 188 B

View File

@ -1 +0,0 @@
<svg fill="none" height="32" viewBox="0 0 32 32" width="32" xmlns="http://www.w3.org/2000/svg"><path clip-rule="evenodd" d="m0 10c0-1.10457.895431-2 2-2h28c1.1046 0 2 .89543 2 2v12c0 1.1046-.8954 2-2 2h-28c-1.104569 0-2-.8954-2-2zm22.9758 3.778c-.0012-.1311.0497-.2564.1416-.3485.0918-.092.2171-.1432.3482-.1422l4.1957.0306c.1311.001.2574.054.351.1474.0935.0934.1468.2195.148.3506l.0392 4.1956c-.0011.1296-.053.2528-.1446.343s-.2156.1402-.3453.1393c-.1296-.001-.2546-.0528-.3479-.1443-.0933-.0916-.1476-.2155-.151-.3452l-.028-3.002-4.0132 4.0214c-.0919.092-.2172.1432-.3483.1422-.1311-.0009-.2574-.0539-.351-.1473-.0936-.0935-.1469-.2196-.1481-.3507-.0012-.1312.0497-.2566.1416-.3486l4.0132-4.0214-3.0021-.0219c-.1311-.0009-.2573-.054-.3509-.1473-.0936-.0934-.1468-.2196-.1481-.3507zm-18.03439-.821v7.043h1.3125v-8.4551h-1.30664l-2.22657 1.5703v1.3418l2.1211-1.5zm5.29999-.873c-.53124.4922-.79687 1.1269-.79687 1.9043v.0176h1.24217v-.0176c0-.4531.1426-.8184.4278-1.0957.289-.2774.666-.416 1.1308-.416.4375 0 .8027.1289 1.0957.3867s.4395.5801.4395.9668c0 .3125-.0938.6191-.2813.9199-.1875.2969-.5625.7383-1.125 1.3242l-2.85936 2.9766v.9492h5.69536v-1.1777h-3.8672v-.0996l1.8808-1.9043c.7071-.7149 1.1914-1.2911 1.4532-1.7286.2656-.4414.3984-.8867.3984-1.3359 0-.6953-.2637-1.2715-.791-1.7285-.5274-.457-1.1934-.6856-1.9981-.6856-.832 0-1.5136.2481-2.0449.7442z" fill="#4b4848" fill-rule="evenodd"/></svg>

Before

Width:  |  Height:  |  Size: 1.4 KiB

View File

@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="none" viewBox="0 0 24 24"><path fill="#4B4848" fill-rule="evenodd" d="M11 6C11 4.89543 10.1046 4 9 4H6C4.89543 4 4 4.89543 4 6C4 7.10457 4.89543 8 6 8H9C10.1046 8 11 7.10457 11 6ZM9 7C9.55228 7 10 6.55228 10 6C10 5.44772 9.55228 5 9 5C8.44772 5 8 5.44772 8 6C8 6.55228 8.44772 7 9 7Z" clip-rule="evenodd"/><path fill="#4B4848" d="M12.9998 5.80005C12.9998 5.38584 13.3355 5.05005 13.7498 5.05005L19.2498 5.05005C19.664 5.05005 19.9998 5.38584 19.9998 5.80005C19.9998 6.21426 19.664 6.55005 19.2498 6.55005L13.7498 6.55005C13.3355 6.55005 12.9998 6.21426 12.9998 5.80005Z"/><path fill="#4B4848" fill-rule="evenodd" d="M11 12C11 10.8954 10.1046 10 9 10H6C4.89543 10 4 10.8954 4 12C4 13.1046 4.89543 14 6 14H9C10.1046 14 11 13.1046 11 12ZM9 13C9.55228 13 10 12.5523 10 12C10 11.4477 9.55228 11 9 11C8.44772 11 8 11.4477 8 12C8 12.5523 8.44772 13 9 13Z" clip-rule="evenodd"/><path fill="#4B4848" d="M12.9998 11.8C12.9998 11.3858 13.3355 11.05 13.7498 11.05L19.2498 11.05C19.664 11.05 19.9998 11.3858 19.9998 11.8C19.9998 12.2143 19.664 12.55 19.2498 12.55L13.7498 12.55C13.3355 12.55 12.9998 12.2143 12.9998 11.8Z"/><circle cx="6" cy="18" r="1" fill="#4B4848"/><path stroke="#4B4848" stroke-width=".5" d="M4.25 18C4.25 17.0335 5.0335 16.25 6 16.25H9C9.9665 16.25 10.75 17.0335 10.75 18C10.75 18.9665 9.9665 19.75 9 19.75H6C5.0335 19.75 4.25 18.9665 4.25 18Z"/><path fill="#4B4848" d="M13 17.8C13 17.3858 13.3358 17.05 13.75 17.05L19.25 17.05C19.6642 17.05 20 17.3858 20 17.8C20 18.2143 19.6642 18.55 19.25 18.55L13.75 18.55C13.3358 18.55 13 18.2143 13 17.8Z"/></svg>

Before

Width:  |  Height:  |  Size: 1.6 KiB

View File

@ -1 +0,0 @@
<svg fill="none" height="24" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg"><g fill="#4b4848"><path clip-rule="evenodd" d="m3 12c0-3.31371 2.68629-6 6-6h6c3.3137 0 6 2.68629 6 6 0 3.3137-2.6863 6-6 6h-6c-3.31371 0-6-2.6863-6-6zm6.25 4c-2.20914 0-4-1.7909-4-4 0-2.20914 1.79086-4 4-4h5.5c2.2091 0 4 1.79086 4 4 0 2.2091-1.7909 4-4 4z" fill-rule="evenodd"/><path d="m15 9c1.6569 0 3 1.3431 3 3s-1.3431 3-3 3-3-1.3431-3-3 1.3431-3 3-3z"/></g></svg>

Before

Width:  |  Height:  |  Size: 464 B

View File

@ -1 +0,0 @@
<svg fill="none" height="32" viewBox="0 0 32 32" width="32" xmlns="http://www.w3.org/2000/svg"><g fill="#4b4848"><path clip-rule="evenodd" d="m2.66675 2.66663v26.66667h26.66665v-26.66667zm2.66666 23.99997v-21.33331h21.33329v21.33331z" fill-rule="evenodd"/><path d="m14.6667 5.33329v21.33331h2.6667v-21.33331z"/><path d="m5.33341 16h21.33329v-2.6667h-21.33329z"/><path d="m5.33341 22.6666h21.33329v-2.6666h-21.33329z"/><path d="m5.33341 9.33329h21.33329v-4h-21.33329z"/></g></svg>

Before

Width:  |  Height:  |  Size: 479 B

View File

@ -1 +0,0 @@
<svg fill="none" height="32" viewBox="0 0 32 32" width="32" xmlns="http://www.w3.org/2000/svg"><path clip-rule="evenodd" d="m6.66675 12v-5.33337h7.99995v5.33337h10.6667v13.3333h-18.66665zm2.66666 2.6666v8h13.33329v-8zm6.66669-4h1 6 1v-.99997-.66667-1h-1-6-1v1 .66667zm7-1.66664v.66667h-6v-.66667z" fill="#4b4848" fill-rule="evenodd"/></svg>

Before

Width:  |  Height:  |  Size: 340 B

View File

@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" fill="none" viewBox="0 0 32 32"><path fill="#4B4848" d="M14.0001 22.6666V9.33329H9.33342V12H6.66675V6.66663H25.3334V12H22.6667V9.33329H18.0001V22.6666H20.6667V25.3333H11.3334V22.6666H14.0001Z"/></svg>

Before

Width:  |  Height:  |  Size: 263 B

Some files were not shown because too many files have changed in this diff Show More