diff --git a/.github/workflows/cypress-appbuilder.yml b/.github/workflows/cypress-appbuilder.yml
index 67eb0ae432..8f0a20615e 100644
--- a/.github/workflows/cypress-appbuilder.yml
+++ b/.github/workflows/cypress-appbuilder.yml
@@ -13,16 +13,18 @@ jobs:
Cypress-App-Builder:
runs-on: ubuntu-22.04
if: |
- contains(github.event.pull_request.labels.*.name, 'run-ce-app-builder') ||
- contains(github.event.pull_request.labels.*.name, 'run-ee-app-builder') ||
- contains(github.event.pull_request.labels.*.name, 'run-cypress')
+ contains(github.event.pull_request.labels.*.name, 'run-cypress-app-builder-ce') ||
+ contains(github.event.pull_request.labels.*.name, 'run-cypress-app-builder-ee') ||
+ contains(github.event.pull_request.labels.*.name, 'run-cypress') ||
+ contains(github.event.pull_request.labels.*.name, 'run-cypress-ce')
strategy:
matrix:
edition: >-
${{
- contains(github.event.pull_request.labels.*.name, 'run-ce-app-builder') && fromJson('["ce"]') ||
- contains(github.event.pull_request.labels.*.name, 'run-ee-app-builder') && fromJson('["ee"]') ||
+ contains(github.event.pull_request.labels.*.name, 'run-cypress-app-builder-ce') && fromJson('["ce"]') ||
+ contains(github.event.pull_request.labels.*.name, 'run-cypress-ce') && fromJson('["ce"]') ||
+ contains(github.event.pull_request.labels.*.name, 'run-cypress-app-builder-ee') && fromJson('["ee"]') ||
contains(github.event.pull_request.labels.*.name, 'run-cypress') && fromJson('["ce", "ee"]') ||
fromJson('[]')
}}
@@ -158,35 +160,35 @@ jobs:
name: screenshots-appbuilder-${{ matrix.edition }}
path: cypress-tests/cypress/screenshots
- Cypress-App-builder-Subpath:
- runs-on: ubuntu-22.04
- if: contains(github.event.pull_request.labels.*.name, 'run-cypress') ||
- contains(github.event.pull_request.labels.*.name, 'run-cypress-app-builder-subpath')
+ # Cypress-App-builder-Subpath:
+ # runs-on: ubuntu-22.04
+ # if: contains(github.event.pull_request.labels.*.name, 'run-cypress') ||
+ # contains(github.event.pull_request.labels.*.name, 'run-cypress-app-builder-subpath')
- steps:
- - name: Checkout
- uses: actions/checkout@v3
- with:
- ref: ${{ github.event.pull_request.head.ref }}
+ # steps:
+ # - name: Checkout
+ # uses: actions/checkout@v3
+ # with:
+ # ref: ${{ github.event.pull_request.head.ref }}
- - name: Create Cypress environment file
- id: create-json
- uses: jsdaniell/create-json@1.1.2
- with:
- name: "cypress.env.json"
- json: ${{ secrets.CYPRESS_SECRETS }}
- dir: "./cypress-tests"
+ # - name: Create Cypress environment file
+ # id: create-json
+ # uses: jsdaniell/create-json@1.1.2
+ # with:
+ # name: "cypress.env.json"
+ # json: ${{ secrets.CYPRESS_SECRETS }}
+ # dir: "./cypress-tests"
- - name: App Builder subpath
- uses: cypress-io/github-action@v5
- with:
- working-directory: ./cypress-tests
- config: "baseUrl=http://localhost:80/apps/tooljet/"
- config-file: cypress-app-builder.config.js
+ # - name: App Builder subpath
+ # uses: cypress-io/github-action@v5
+ # with:
+ # working-directory: ./cypress-tests
+ # config: "baseUrl=http://localhost:80/apps/tooljet/"
+ # config-file: cypress-app-builder.config.js
- - name: Capture Screenshots
- uses: actions/upload-artifact@v4
- if: always()
- with:
- name: screenshots
- path: cypress-tests/cypress/screenshots
+ # - name: Capture Screenshots
+ # uses: actions/upload-artifact@v4
+ # if: always()
+ # with:
+ # name: screenshots
+ # path: cypress-tests/cypress/screenshots
diff --git a/.github/workflows/cypress-marketplace.yml b/.github/workflows/cypress-marketplace.yml
index 4d34523219..9ddf476e12 100644
--- a/.github/workflows/cypress-marketplace.yml
+++ b/.github/workflows/cypress-marketplace.yml
@@ -14,17 +14,19 @@ jobs:
Cypress-Marketplace:
runs-on: ubuntu-22.04
- if: contains(github.event.pull_request.labels.*.name, 'run-cypress') ||
- contains(github.event.pull_request.labels.*.name, 'run-ce-cypress-marketplace') ||
- contains(github.event.pull_request.labels.*.name, 'run-ee-cypress-marketplace')
+ if: contains(github.event.pull_request.labels.*.name, 'run-cypress') ||
+ contains(github.event.pull_request.labels.*.name, 'run-cypress-marketplace-ce') ||
+ contains(github.event.pull_request.labels.*.name, 'run-cypress-marketplace-ee') ||
+ contains(github.event.pull_request.labels.*.name, 'run-cypress-ce')
strategy:
matrix:
edition: >-
${{
contains(github.event.pull_request.labels.*.name, 'run-cypress') && fromJson('["ce", "ee"]') ||
- contains(github.event.pull_request.labels.*.name, 'run-ce-cypress-marketplace') && fromJson('["ce"]') ||
- contains(github.event.pull_request.labels.*.name, 'run-ee-cypress-marketplace') && fromJson('["ee"]') ||
+ contains(github.event.pull_request.labels.*.name, 'run-cypress-ce') && fromJson('["ce"]') ||
+ contains(github.event.pull_request.labels.*.name, 'run-cypress-marketplace-ce') && fromJson('["ce"]') ||
+ contains(github.event.pull_request.labels.*.name, 'run-cypress-marketplace-ee') && fromJson('["ee"]') ||
fromJson('[]')
}}
@@ -159,13 +161,12 @@ jobs:
"password": "password"
}'
-
- name: Create Cypress environment file
id: create-json
uses: jsdaniell/create-json@1.1.2
with:
name: "cypress.env.json"
- json: ${{ secrets.CYPRESS_SECRETS }}
+ json: ${{ secrets.CYPRESS_SECRETS_MARKETPLACE }}
dir: "./cypress-tests"
- name: Marketplace
@@ -185,8 +186,8 @@ jobs:
Cypress-Marketplace-Subpath:
runs-on: ubuntu-22.04
- if: contains(github.event.pull_request.labels.*.name, 'run-cypress') ||
- contains(github.event.pull_request.labels.*.name, 'run-cypress-marketplace-subpath')
+ if: contains(github.event.pull_request.labels.*.name, 'run-cypress') ||
+ contains(github.event.pull_request.labels.*.name, 'run-cypress-marketplace-subpath')
steps:
- name: Checkout
diff --git a/.github/workflows/cypress-platform.yml b/.github/workflows/cypress-platform.yml
index 0480db39f9..c6a0db4be6 100644
--- a/.github/workflows/cypress-platform.yml
+++ b/.github/workflows/cypress-platform.yml
@@ -13,15 +13,18 @@ jobs:
Cypress-Platform:
runs-on: ubuntu-22.04
if: contains(github.event.pull_request.labels.*.name, 'run-cypress') ||
- contains(github.event.pull_request.labels.*.name, 'run-ce-cypress-platform') ||
- contains(github.event.pull_request.labels.*.name, 'run-ee-cypress-platform')
+ contains(github.event.pull_request.labels.*.name, 'run-cypress-platform-ce') ||
+ contains(github.event.pull_request.labels.*.name, 'run-cypress-platform-ee') ||
+ contains(github.event.pull_request.labels.*.name, 'run-cypress-ce')
+
strategy:
matrix:
edition: >-
${{
contains(github.event.pull_request.labels.*.name, 'run-cypress') && fromJson('["ce", "ee"]') ||
- contains(github.event.pull_request.labels.*.name, 'run-ce-cypress-platform') && fromJson('["ce"]') ||
- contains(github.event.pull_request.labels.*.name, 'run-ee-cypress-platform') && fromJson('["ee"]') ||
+ contains(github.event.pull_request.labels.*.name, 'run-cypress-ce') && fromJson('["ce"]') ||
+ contains(github.event.pull_request.labels.*.name, 'run-cypress-platform-ce') && fromJson('["ce"]') ||
+ contains(github.event.pull_request.labels.*.name, 'run-cypress-platform-ee') && fromJson('["ee"]') ||
fromJson('[]')
}}
diff --git a/.github/workflows/render-preview-deploy.yml b/.github/workflows/render-preview-deploy.yml
index d1ca481d02..c5cb025cba 100644
--- a/.github/workflows/render-preview-deploy.yml
+++ b/.github/workflows/render-preview-deploy.yml
@@ -80,7 +80,7 @@ jobs:
},
{
"key": "PG_USER",
- "value": "tooljet"
+ "value": "postgres"
},
{
"key": "PG_PASS",
@@ -100,7 +100,7 @@ jobs:
},
{
"key": "TOOLJET_DB_USER",
- "value": "tooljet"
+ "value": "postgres"
},
{
"key": "TOOLJET_DB_PASS",
@@ -116,7 +116,7 @@ jobs:
},
{
"key": "PGRST_DB_URI",
- "value": "postgres://tooljet:postgres@localhost/${{ env.PR_NUMBER }}-ce-tjdb"
+ "value": "postgres://postgres:postgres@localhost/${{ env.PR_NUMBER }}-ce-tjdb"
},
{
"key": "PGRST_HOST",
@@ -168,7 +168,11 @@ jobs:
}
],
"serviceDetails": {
- "disk": null,
+ "disk": {
+ "name": "tooljet-ce-pr-${{ env.PR_NUMBER }}-postgresql",
+ "mountPath": "/var/lib/postgresql/13/main",
+ "sizeGB": 10
+ },
"env": "docker",
"envSpecificDetails": {
"dockerCommand": "",
@@ -279,35 +283,35 @@ jobs:
console.log(e)
}
- - name: Install PostgreSQL client
- run: |
- sudo apt update
- sudo apt install postgresql-client -y
+ # - name: Install PostgreSQL client
+ # run: |
+ # sudo apt update
+ # sudo apt install postgresql-client -y
- - name: Wait after installing PostgreSQL
- run: sleep 25
+ # - name: Wait after installing PostgreSQL
+ # run: sleep 25
- - name: Drop PostgreSQL PR databases
- env:
- PGHOST: ${{ secrets.RENDER_DS_PG_HOST }}
- PGPORT: 5432
- PGUSER: ${{ secrets.RENDER_DS_PG_USER }}
- PGDATABASE: ${{ env.PR_NUMBER }}-ce
- PGTJBDATABASE: ${{ env.PR_NUMBER }}-ce-tjdb
- run: |
- if PGPASSWORD=${{ secrets.RENDER_DS_PG_PASS }} psql -h $PGHOST -p $PGPORT -U $PGUSER -lqt | cut -d \| -f 1 | grep -qw $PGDATABASE; then
- echo "Database $PGDATABASE exists, deleting..."
- PGPASSWORD=${{ secrets.RENDER_DS_PG_PASS }} psql -h $PGHOST -p $PGPORT -U $PGUSER -d postgres -c "drop database \"$PGDATABASE\" ;"
- else
- echo "Database $PGDATABASE does not exist."
- fi
+ # - name: Drop PostgreSQL PR databases
+ # env:
+ # PGHOST: ${{ secrets.RENDER_DS_PG_HOST }}
+ # PGPORT: 5432
+ # PGUSER: ${{ secrets.RENDER_DS_PG_USER }}
+ # PGDATABASE: ${{ env.PR_NUMBER }}-ce
+ # PGTJBDATABASE: ${{ env.PR_NUMBER }}-ce-tjdb
+ # run: |
+ # if PGPASSWORD=${{ secrets.RENDER_DS_PG_PASS }} psql -h $PGHOST -p $PGPORT -U $PGUSER -lqt | cut -d \| -f 1 | grep -qw $PGDATABASE; then
+ # echo "Database $PGDATABASE exists, deleting..."
+ # PGPASSWORD=${{ secrets.RENDER_DS_PG_PASS }} psql -h $PGHOST -p $PGPORT -U $PGUSER -d postgres -c "drop database \"$PGDATABASE\" ;"
+ # else
+ # echo "Database $PGDATABASE does not exist."
+ # fi
- if PGPASSWORD=${{ secrets.RENDER_DS_PG_PASS }} psql -h $PGHOST -p $PGPORT -U $PGUSER -lqt | cut -d \| -f 1 | grep -qw $PGTJBDATABASE; then
- echo "Database $PGTJBDATABASE exists, deleting..."
- PGPASSWORD=${{ secrets.RENDER_DS_PG_PASS }} psql -h $PGHOST -p $PGPORT -U $PGUSER -d postgres -c "drop database \"$PGTJBDATABASE\" ;"
- else
- echo "Database $PGTJBDATABASE does not exist."
- fi
+ # if PGPASSWORD=${{ secrets.RENDER_DS_PG_PASS }} psql -h $PGHOST -p $PGPORT -U $PGUSER -lqt | cut -d \| -f 1 | grep -qw $PGTJBDATABASE; then
+ # echo "Database $PGTJBDATABASE exists, deleting..."
+ # PGPASSWORD=${{ secrets.RENDER_DS_PG_PASS }} psql -h $PGHOST -p $PGPORT -U $PGUSER -d postgres -c "drop database \"$PGTJBDATABASE\" ;"
+ # else
+ # echo "Database $PGTJBDATABASE does not exist."
+ # fi
suspend-ce-review-app:
if: ${{ github.event.action == 'labeled' && github.event.label.name == 'suspend-ce-review-app' }}
@@ -317,7 +321,7 @@ jobs:
- name: Suspend service
run: |
export SERVICE_ID=$(curl --request GET \
- --url 'https://api.render.com/v1/services?name=ToolJet%20PR%20%23${{ env.PR_NUMBER }}&limit=1' \
+ --url 'https://api.render.com/v1/services?name=ToolJet%20CE%20PR%20%23${{ env.PR_NUMBER }}&limit=1' \
--header 'accept: application/json' \
--header 'authorization: Bearer ${{ secrets.RENDER_API_KEY }}' | \
jq -r '.[0].service.id')
@@ -349,7 +353,7 @@ jobs:
- name: Resume service
run: |
export SERVICE_ID=$(curl --request GET \
- --url 'https://api.render.com/v1/services?name=ToolJet%20PR%20%23${{ env.PR_NUMBER }}&limit=1' \
+ --url 'https://api.render.com/v1/services?name=ToolJet%20CE%20PR%20%23${{ env.PR_NUMBER }}&limit=1' \
--header 'accept: application/json' \
--header 'authorization: Bearer ${{ secrets.RENDER_API_KEY }}' | \
jq -r '.[0].service.id')
@@ -389,6 +393,39 @@ jobs:
runs-on: ubuntu-latest
steps:
+
+ - name: Sync repo
+ uses: actions/checkout@v3
+
+ - name: Check if Forked Repository
+ id: check_repo
+ run: |
+ if [[ "${{ github.event.pull_request.head.repo.fork }}" == "true" ]]; then
+ echo "is_fork=true" >> $GITHUB_ENV
+ echo "FORKED_OWNER=${{ github.event.pull_request.head.repo.owner.login }}" >> $GITHUB_ENV
+ else
+ echo "is_fork=false" >> $GITHUB_ENV
+ fi
+
+ - name: Set Repository URL
+ run: |
+ if [[ "$is_fork" == "true" ]]; then
+ echo "REPO_URL=https://github.com/${FORKED_OWNER}/ToolJet" >> $GITHUB_ENV
+ else
+ echo "REPO_URL=https://github.com/ToolJet/ToolJet" >> $GITHUB_ENV
+ fi
+
+ - name: Fetch and Checkout Forked Branch
+ if: env.is_fork == 'true'
+ run: |
+ git fetch origin pull/${{ github.event.number }}/head:${{ env.BRANCH_NAME }}
+ git checkout ${{ env.BRANCH_NAME }}
+
+ - name: Checkout Default Branch
+ if: env.is_fork == 'false'
+ uses: actions/checkout@v3
+
+
- name: Creating deployment for Enterprise Edition
id: create-ee-deployment
run: |
@@ -404,7 +441,7 @@ jobs:
"name": "ToolJet EE PR #${{ env.PR_NUMBER }}",
"notifyOnFail": "default",
"ownerId": "tea-caeo4bj19n072h3dddc0",
- "repo": "https://github.com/ToolJet/ToolJet",
+ "repo": "'"$REPO_URL"'",
"slug": "tooljet-ee-pr-${{ env.PR_NUMBER }}",
"suspended": "not_suspended",
"suspenders": [],
@@ -420,7 +457,7 @@ jobs:
},
{
"key": "PG_USER",
- "value": "tooljet"
+ "value": "postgres"
},
{
"key": "PG_PASS",
@@ -440,7 +477,7 @@ jobs:
},
{
"key": "TOOLJET_DB_USER",
- "value": "tooljet"
+ "value": "postgres"
},
{
"key": "TOOLJET_DB_PASS",
@@ -456,7 +493,7 @@ jobs:
},
{
"key": "PGRST_DB_URI",
- "value": "postgres://tooljet:postgres@localhost/${{ env.PR_NUMBER }}-ee-tjdb"
+ "value": "postgres://postgres:postgres@localhost/${{ env.PR_NUMBER }}-ee-tjdb"
},
{
"key": "PGRST_HOST",
@@ -536,7 +573,11 @@ jobs:
}
],
"serviceDetails": {
- "disk": null,
+ "disk": {
+ "name": "tooljet-ee-pr-${{ env.PR_NUMBER }}-postgresql",
+ "mountPath": "/var/lib/postgresql/13/main",
+ "sizeGB": 10
+ },
"env": "docker",
"envSpecificDetails": {
"dockerCommand": "",
@@ -549,7 +590,7 @@ jobs:
"port": 80,
"protocol": "TCP"
}],
- "plan": "starter",
+ "plan": "standard",
"pullRequestPreviewsEnabled": "no",
"region": "oregon",
"url": "https://tooljet-ee-pr-${{ env.PR_NUMBER }}.onrender.com"
@@ -647,35 +688,35 @@ jobs:
console.log(e)
}
- - name: Install PostgreSQL client
- run: |
- sudo apt update
- sudo apt install postgresql-client -y
+ # - name: Install PostgreSQL client
+ # run: |
+ # sudo apt update
+ # sudo apt install postgresql-client -y
- - name: Wait after installing PostgreSQL
- run: sleep 25
+ # - name: Wait after installing PostgreSQL
+ # run: sleep 25
- - name: Drop PostgreSQL PR databases
- env:
- PGHOST: ${{ secrets.RENDER_DS_PG_HOST }}
- PGPORT: 5432
- PGUSER: ${{ secrets.RENDER_DS_PG_USER }}
- PGDATABASE: ${{ env.PR_NUMBER }}-ee
- PGTJBDATABASE: ${{ env.PR_NUMBER }}-ee-tjdb
- run: |
- if PGPASSWORD=${{ secrets.RENDER_DS_PG_PASS }} psql -h $PGHOST -p $PGPORT -U $PGUSER -lqt | cut -d \| -f 1 | grep -qw $PGDATABASE; then
- echo "Database $PGDATABASE exists, deleting..."
- PGPASSWORD=${{ secrets.RENDER_DS_PG_PASS }} psql -h $PGHOST -p $PGPORT -U $PGUSER -d postgres -c "drop database \"$PGDATABASE\" ;"
- else
- echo "Database $PGDATABASE does not exist."
- fi
+ # - name: Drop PostgreSQL PR databases
+ # env:
+ # PGHOST: ${{ secrets.RENDER_DS_PG_HOST }}
+ # PGPORT: 5432
+ # PGUSER: ${{ secrets.RENDER_DS_PG_USER }}
+ # PGDATABASE: ${{ env.PR_NUMBER }}-ee
+ # PGTJBDATABASE: ${{ env.PR_NUMBER }}-ee-tjdb
+ # run: |
+ # if PGPASSWORD=${{ secrets.RENDER_DS_PG_PASS }} psql -h $PGHOST -p $PGPORT -U $PGUSER -lqt | cut -d \| -f 1 | grep -qw $PGDATABASE; then
+ # echo "Database $PGDATABASE exists, deleting..."
+ # PGPASSWORD=${{ secrets.RENDER_DS_PG_PASS }} psql -h $PGHOST -p $PGPORT -U $PGUSER -d postgres -c "drop database \"$PGDATABASE\" ;"
+ # else
+ # echo "Database $PGDATABASE does not exist."
+ # fi
- if PGPASSWORD=${{ secrets.RENDER_DS_PG_PASS }} psql -h $PGHOST -p $PGPORT -U $PGUSER -lqt | cut -d \| -f 1 | grep -qw $PGTJBDATABASE; then
- echo "Database $PGTJBDATABASE exists, deleting..."
- PGPASSWORD=${{ secrets.RENDER_DS_PG_PASS }} psql -h $PGHOST -p $PGPORT -U $PGUSER -d postgres -c "drop database \"$PGTJBDATABASE\" ;"
- else
- echo "Database $PGTJBDATABASE does not exist."
- fi
+ # if PGPASSWORD=${{ secrets.RENDER_DS_PG_PASS }} psql -h $PGHOST -p $PGPORT -U $PGUSER -lqt | cut -d \| -f 1 | grep -qw $PGTJBDATABASE; then
+ # echo "Database $PGTJBDATABASE exists, deleting..."
+ # PGPASSWORD=${{ secrets.RENDER_DS_PG_PASS }} psql -h $PGHOST -p $PGPORT -U $PGUSER -d postgres -c "drop database \"$PGTJBDATABASE\" ;"
+ # else
+ # echo "Database $PGTJBDATABASE does not exist."
+ # fi
suspend-ee-review-app:
if: ${{ github.event.action == 'labeled' && github.event.label.name == 'suspend-ee-review-app' }}
@@ -685,7 +726,7 @@ jobs:
- name: Suspend service
run: |
export SERVICE_ID=$(curl --request GET \
- --url 'https://api.render.com/v1/services?name=ToolJet%20PR%20%23${{ env.PR_NUMBER }}&limit=1' \
+ --url 'https://api.render.com/v1/services?name=ToolJet%20EE%20PR%20%23${{ env.PR_NUMBER }}&limit=1' \
--header 'accept: application/json' \
--header 'authorization: Bearer ${{ secrets.RENDER_API_KEY }}' | \
jq -r '.[0].service.id')
@@ -717,7 +758,7 @@ jobs:
- name: Resume service
run: |
export SERVICE_ID=$(curl --request GET \
- --url 'https://api.render.com/v1/services?name=ToolJet%20PR%20%23${{ env.PR_NUMBER }}&limit=1' \
+ --url 'https://api.render.com/v1/services?name=ToolJet%20EE%20PR%20%23${{ env.PR_NUMBER }}&limit=1' \
--header 'accept: application/json' \
--header 'authorization: Bearer ${{ secrets.RENDER_API_KEY }}' | \
jq -r '.[0].service.id')
diff --git a/.version b/.version
index afad818663..171a6a93d6 100644
--- a/.version
+++ b/.version
@@ -1 +1 @@
-3.11.0
+3.12.1
diff --git a/cypress-tests/cypress-platform.config.js b/cypress-tests/cypress-platform.config.js
index a53733a70d..b565a0c1d1 100644
--- a/cypress-tests/cypress-platform.config.js
+++ b/cypress-tests/cypress-platform.config.js
@@ -39,11 +39,11 @@ module.exports = defineConfig({
chromeWebSecurity: false,
trashAssetsBeforeRuns: true,
e2e: {
- setupNodeEvents(on, config) {
+ setupNodeEvents (on, config) {
config.baseUrl = environment.baseUrl;
on("task", {
- readPdf(pathToPdf) {
+ readPdf (pathToPdf) {
return new Promise((resolve) => {
const pdfPath = path.resolve(pathToPdf);
let dataBuffer = fs.readFileSync(pdfPath);
@@ -55,7 +55,7 @@ module.exports = defineConfig({
});
on("task", {
- readXlsx(filePath) {
+ readXlsx (filePath) {
return new Promise((resolve, reject) => {
try {
let dataBuffer = fs.readFileSync(filePath);
@@ -69,7 +69,7 @@ module.exports = defineConfig({
});
on("task", {
- deleteFolder(folderName) {
+ deleteFolder (folderName) {
return new Promise((resolve, reject) => {
rmdir(folderName, { maxRetries: 10, recursive: true }, (err) => {
if (err) {
@@ -83,7 +83,7 @@ module.exports = defineConfig({
});
on("task", {
- dbConnection({ dbconfig, sql }) {
+ dbConnection ({ dbconfig, sql }) {
const client = new pg.Pool(dbconfig);
return client.query(sql);
},
@@ -97,9 +97,9 @@ module.exports = defineConfig({
baseUrl: environment.baseUrl,
configFile: environment.configFile,
specPattern: [
- "cypress/e2e/happyPath/platform/ceTestcases/userFlow/firstUserOnboarding.cy.js",
- "cypress/e2e/happyPath/platform/commonTestcases/workspace/dashboard.cy.js",
- "cypress/e2e/happyPath/platform/ceTestcases/!(userFlow)/**/*.cy.js",
+ "cypress/e2e/happyPath/platform/firstUser/firstUserOnboarding.cy.js",
+ "cypress/e2e/happyPath/platform/ceTestcases/apps/appSlug.cy.js",
+ "cypress/e2e/happyPath/platform/ceTestcases/**/!(*appSlug).cy.js",
"cypress/e2e/happyPath/platform/commonTestcases/**/*.cy.js",
],
numTestsKeptInMemory: 1,
diff --git a/cypress-tests/cypress/commands/apiCommands.js b/cypress-tests/cypress/commands/apiCommands.js
index e9891c962e..c625e6cc33 100644
--- a/cypress-tests/cypress/commands/apiCommands.js
+++ b/cypress-tests/cypress/commands/apiCommands.js
@@ -689,7 +689,7 @@ Cypress.Commands.add(
name: dataSourceName,
options: [
{ key: "connection_type", value: "manual", encrypted: false },
- { key: "host", value: "35.238.9.114" },
+ { key: "host", value: "9.234.17.31" },
{ key: "port", value: 5432 },
{ key: "database", value: "student" },
{ key: "username", value: "postgres" },
diff --git a/cypress-tests/cypress/commands/commands.js b/cypress-tests/cypress/commands/commands.js
index 10c849d807..d242eb1895 100644
--- a/cypress-tests/cypress/commands/commands.js
+++ b/cypress-tests/cypress/commands/commands.js
@@ -6,6 +6,7 @@ import { passwordInputText } from "Texts/passwordInput";
import { importSelectors } from "Selectors/exportImport";
import { importText } from "Texts/exportImport";
import { onboardingSelectors } from "Selectors/onboarding";
+import { selectAppCardOption } from "Support/utils/common";
const API_ENDPOINT =
Cypress.env("environment") === "Community"
@@ -160,13 +161,15 @@ Cypress.Commands.add(
Cypress.Commands.add("deleteApp", (appName) => {
cy.intercept("DELETE", "/api/apps/*").as("appDeleted");
- cy.get(commonSelectors.appCard(appName))
- .realHover()
- .find(commonSelectors.appCardOptionsButton)
- .realHover()
- .click();
- cy.get(commonSelectors.deleteAppOption).click();
+ selectAppCardOption(
+ appName,
+ commonSelectors.appCardOptions(commonText.deleteAppOption)
+ );
cy.get(commonSelectors.buttonSelector(commonText.modalYesButton)).click();
+ cy.verifyToastMessage(
+ commonSelectors.toastMessage,
+ commonText.appDeletedToast
+ );
cy.wait("@appDeleted");
});
@@ -394,39 +397,37 @@ Cypress.Commands.add("getPosition", (componentName) => {
});
Cypress.Commands.add("defaultWorkspaceLogin", () => {
- cy.apiLogin();
+ cy.task("dbConnection", {
+ dbconfig: Cypress.env("app_db"),
+ sql: `
+ SELECT id FROM organizations WHERE name = 'My workspace';`,
+ }).then((resp) => {
+ const workspaceId = resp.rows[0].id;
- // cy.intercept("GET", API_ENDPOINT).as("library_apps");
- cy.visit("/my-workspace");
- cy.wait(2000)
- cy.get(commonSelectors.homePageLogo, { timeout: 10000 });
- // cy.wait("@library_apps");
+ cy.apiLogin(
+ "dev@tooljet.io",
+ "password",
+ workspaceId,
+ "/my-workspace"
+ ).then(() => {
+ cy.visit("/");
+ cy.wait(2000);
+ cy.get(commonSelectors.homePageLogo, { timeout: 10000 });
+ });
+ });
});
-Cypress.Commands.add(
- "visitSlug",
- ({
- actualUrl,
- errorUrls = [
- `${Cypress.config("baseUrl")}/error/unknown`,
- `${Cypress.config("baseUrl")}/error/restricted`,
- ],
- }) => {
- if (!actualUrl) {
- throw new Error("actualUrl is required for visitSlug command.");
+Cypress.Commands.add("visitSlug", ({ actualUrl }) => {
+ cy.visit(actualUrl);
+ cy.wait(1000);
+
+ cy.url().then((currentUrl) => {
+ if (currentUrl !== actualUrl) {
+ cy.visit(actualUrl);
+ cy.wait(1000);
}
-
- cy.visit(actualUrl);
-
- cy.url().then((url) => {
- if (errorUrls.includes(url)) {
- cy.log(`Navigation resulted in error URL: ${url}. Retrying...`);
- cy.visit(actualUrl);
- cy.wait(1000);
- }
- });
- }
-);
+ });
+});
Cypress.Commands.add("releaseApp", () => {
@@ -513,13 +514,58 @@ Cypress.Commands.overwrite(
}
);
+Cypress.Commands.add("installMarketplacePlugin", (pluginName) => {
+ const MARKETPLACE_URL = `${Cypress.config("baseUrl")}/integrations/marketplace`;
+
+ cy.visit(MARKETPLACE_URL);
+ cy.wait(1000);
+
+ cy.get('[data-cy="-list-item"]').eq(0).click();
+ cy.wait(1000);
+
+ cy.get("body").then(($body) => {
+ if ($body.find(".plugins-card").length === 0) {
+ cy.log("No plugins found, proceeding to install...");
+ installPlugin(pluginName);
+ } else {
+ cy.get(".plugins-card").then(($cards) => {
+ const isInstalled = $cards.toArray().some((card) => {
+ return (
+ Cypress.$(card)
+ .find(".font-weight-medium.text-capitalize")
+ .text()
+ .trim() === pluginName
+ );
+ });
+
+ if (isInstalled) {
+ cy.log(`${pluginName} is already installed. Skipping installation.`);
+ cy.get(commonSelectors.globalDataSourceIcon).click();
+ } else {
+ installPlugin(pluginName);
+ cy.get(commonSelectors.globalDataSourceIcon).click();
+ }
+ });
+ }
+ });
+
+ function installPlugin (pluginName) {
+ cy.get('[data-cy="-list-item"]').eq(1).click();
+ cy.wait(1000);
+
+ cy.contains(".plugins-card", pluginName).within(() => {
+ cy.get(".marketplace-install").click();
+ cy.wait(1000);
+ });
+ }
+});
+
Cypress.Commands.add("verifyElement", (selector, text, eqValue) => {
const element =
eqValue !== undefined ? cy.get(selector).eq(eqValue) : cy.get(selector);
element.should("be.visible").and("have.text", text);
});
-
Cypress.Commands.add("getAppId", (appName) => {
cy.task("dbConnection", {
dbconfig: Cypress.env("app_db"),
@@ -529,3 +575,33 @@ Cypress.Commands.add("getAppId", (appName) => {
return appId;
});
});
+
+Cypress.Commands.add("uninstallMarketplacePlugin", (pluginName) => {
+ const MARKETPLACE_URL = `${Cypress.config("baseUrl")}/integrations/marketplace`;
+
+ cy.visit(MARKETPLACE_URL);
+ cy.wait(1000);
+
+ cy.get('[data-cy="-list-item"]').eq(0).click();
+ cy.wait(1000);
+
+ cy.get(".plugins-card").each(($card) => {
+ cy.wrap($card)
+ .find(".font-weight-medium.text-capitalize")
+ .invoke("text")
+ .then((text) => {
+ if (text.trim() === pluginName) {
+ cy.wrap($card).find(".link-primary").contains("Remove").click();
+ cy.wait(1000);
+
+ cy.get('[data-cy="delete-plugin-title"]').should("be.visible");
+ cy.get('[data-cy="yes-button"]').click();
+ cy.wait(2000);
+
+ cy.log(`${pluginName} has been successfully uninstalled.`);
+ } else {
+ cy.log(`${pluginName} is not installed. Skipping uninstallation.`);
+ }
+ });
+ });
+});
diff --git a/cypress-tests/cypress/constants/selectors/common.js b/cypress-tests/cypress/constants/selectors/common.js
index 42e3378825..ec104d67bc 100644
--- a/cypress-tests/cypress/constants/selectors/common.js
+++ b/cypress-tests/cypress/constants/selectors/common.js
@@ -6,7 +6,8 @@ export const commonSelectors = {
toastMessage: ".go3958317564",
oldToastMessage: ".go318386747",
appSlugAccept: '[data-cy="app-slug-accepted-label"]',
- newToastMessage: '.drawer-container > [style="position: fixed; z-index: 9999; inset: 16px; pointer-events: none;"] > .go4109123758 > .go2072408551 > .go3958317564',
+ newToastMessage:
+ '.drawer-container > [style="position: fixed; z-index: 9999; inset: 16px; pointer-events: none;"] > .go4109123758 > .go2072408551 > .go3958317564',
toastCloseButton: '[data-cy="toast-close-button"]',
editButton: "[data-cy=edit-button]",
workspaceConstantNameInput: '[data-cy="name-input-field"]',
@@ -18,7 +19,7 @@ export const commonSelectors = {
appCardOptionsButton: "[data-cy=app-card-menu-icon]",
autoSave: "[data-cy=autosave-indicator]",
nameInputFieldd: "[data-cy=name-input-field]",
- valueInputFieldd: '[data-cy=value-input-field]',
+ valueInputFieldd: "[data-cy=value-input-field]",
skipButton: ".driver-close-btn",
skipInstallationModal: "[data-cy=skip-button]",
homePageLogo: "[data-cy=home-page-logo]",
@@ -395,7 +396,7 @@ export const commonWidgetSelector = {
modalCloseButton: '[data-cy="modal-close-button"]',
iframeLinkLabel: '[data-cy="iframe-link-label"]',
ifameLinkCopyButton: '[data-cy="iframe-link-copy-button"]',
- appSlugLabel: '[data-cy="input-field-label"]',
+ appSlugLabel: '[data-cy="unique-app-slug-field-label"]',
appSlugInput: '[data-cy="app-slug-input-field"]',
appSlugInfoLabel: '[data-cy="helper-text"]',
appLinkLabel: '[data-cy="app-link-label"]',
diff --git a/cypress-tests/cypress/constants/selectors/restAPI.js b/cypress-tests/cypress/constants/selectors/restAPI.js
index a24c115712..5ec2d73954 100644
--- a/cypress-tests/cypress/constants/selectors/restAPI.js
+++ b/cypress-tests/cypress/constants/selectors/restAPI.js
@@ -24,7 +24,7 @@ export const restAPISelector = {
return `[data-cy="${cyParamName(header)}-delete-button-${cyParamName(index)}"]`;
},
addMoreButton: (header) => {
- return `[data-cy="${cyParamName(header)}-add-more-button"]`;
+ return `[data-cy="${cyParamName(header)}-add-button"]`;
},
dropdownLabel: (label) => {
return `[data-cy="${cyParamName(label)}-dropdown-label"]`;
diff --git a/cypress-tests/cypress/constants/texts/postgreSql.js b/cypress-tests/cypress/constants/texts/postgreSql.js
index f7c9baf984..9db745b58d 100644
--- a/cypress-tests/cypress/constants/texts/postgreSql.js
+++ b/cypress-tests/cypress/constants/texts/postgreSql.js
@@ -4,8 +4,8 @@ export const postgreSqlText = {
allDataSources: () => {
return Cypress.env("marketplace_action")
- ? "All data sources (44)"
- : "All data sources (45)";
+ ? "All data sources (45)"
+ : "All data sources (43)";
},
commonlyUsed: "Commonly used (5)",
allDatabase: () => {
diff --git a/cypress-tests/cypress/constants/texts/version.js b/cypress-tests/cypress/constants/texts/version.js
index 4f640db63a..ed92ea4c29 100644
--- a/cypress-tests/cypress/constants/texts/version.js
+++ b/cypress-tests/cypress/constants/texts/version.js
@@ -8,11 +8,7 @@ export const editVersionText = {
export const deleteVersionText = {
deleteModalText: (text) => {
- // return `Are you sure you want to delete this version - ${cyParamName(
- // text
- // )}?`;
-
- return `Deleting a version will permanently remove it from all environments.Are you sure you want to delete this version - ${cyParamName(
+ return `Are you sure you want to delete this version - ${cyParamName(
text
)}?`;
},
diff --git a/cypress-tests/cypress/e2e/happyPath/appbuilder/commonTestcases/components/buttonHappyPath.cy.js b/cypress-tests/cypress/e2e/happyPath/appbuilder/commonTestcases/components/buttonHappyPath.cy.js
index 67be49e530..acc65395f7 100644
--- a/cypress-tests/cypress/e2e/happyPath/appbuilder/commonTestcases/components/buttonHappyPath.cy.js
+++ b/cypress-tests/cypress/e2e/happyPath/appbuilder/commonTestcases/components/buttonHappyPath.cy.js
@@ -32,7 +32,7 @@ import {
addSupportCSAData,
} from "Support/utils/events";
-describe("Editor- Test Button widget", () => {
+describe("Editor- Test Button widget ", () => {
beforeEach(() => {
cy.apiLogin();
cy.apiCreateApp(`${fake.companyName}-button-App`);
diff --git a/cypress-tests/cypress/e2e/happyPath/marketplace/commonTestcases/data-source/addAllPluginsToApp.cy.js b/cypress-tests/cypress/e2e/happyPath/marketplace/commonTestcases/data-source/addAllPluginsToApp.cy.js
index 46f6339e11..51b65aeb60 100644
--- a/cypress-tests/cypress/e2e/happyPath/marketplace/commonTestcases/data-source/addAllPluginsToApp.cy.js
+++ b/cypress-tests/cypress/e2e/happyPath/marketplace/commonTestcases/data-source/addAllPluginsToApp.cy.js
@@ -66,7 +66,7 @@ describe("Add all Data sources to app", () => {
cy.apiLogin();
});
- it("Should verify global data source page", () => {
+ it.skip("Should verify global data source page", () => {
cy.apiCreateWorkspace(data.workspaceName, data.workspaceSlug);
cy.visit(`${data.workspaceSlug}`);
@@ -87,7 +87,7 @@ describe("Add all Data sources to app", () => {
);
});
- it("Should add all data sources in data source page", () => {
+ it.skip("Should add all data sources in data source page", () => {
cy.visit(`${data.workspaceSlug}`);
dataSources.forEach((dsName) => {
@@ -109,7 +109,7 @@ describe("Add all Data sources to app", () => {
});
});
- it("Should add all data sources in the app", () => {
+ it.skip("Should add all data sources in the app", () => {
cy.visit(`${data.workspaceSlug}`);
cy.get(commonSelectors.dashboardIcon).click();
cy.get(commonSelectors.appCreateButton).click();
@@ -135,7 +135,7 @@ describe("Add all Data sources to app", () => {
});
});
- it("Should install all makretplace plugins and add them into the app", () => {
+ it.skip("Should install all makretplace plugins and add them into the app", () => {
cy.visit(`${data.workspaceSlug}`);
const dataSourcesMarketplace = [
"Plivo",
@@ -189,12 +189,15 @@ describe("Add all Data sources to app", () => {
cy.wrap(dataSourcesMarketplace).each((dsName) => {
cy.get(commonSelectors.globalDataSourceIcon).click();
selectAndAddDataSource("databases", dsName, dsName);
- cy.wait(500);
+ cy.wait(1000);
});
- cy.get(commonSelectors.dashboardIcon).click();
- cy.get(commonSelectors.appCreateButton).click();
- cy.get(commonSelectors.appNameInput).click().type(data.dsNamefake1);
+ cy.get(commonSelectors.dashboardIcon).should("be.visible").click();
+ cy.get(commonSelectors.appCreateButton).should("be.visible").click();
+ cy.get(commonSelectors.appNameInput)
+ .should("be.visible")
+ .click()
+ .type(data.dsNamefake1);
cy.get(commonSelectors.createAppButton).click();
cy.skipWalkthrough();
@@ -203,7 +206,7 @@ describe("Add all Data sources to app", () => {
cy.get(".css-4e90k9").type(
`cypress-${cyParamName(dsName)}-${cyParamName(dsName)}`
);
- cy.wait(500);
+ cy.wait(1000);
cy.contains(
`[id*="react-select-"]`,
@@ -212,7 +215,7 @@ describe("Add all Data sources to app", () => {
.should("be.visible")
.click();
- cy.wait(500);
+ cy.wait(1000);
});
});
});
diff --git a/cypress-tests/cypress/e2e/happyPath/marketplace/commonTestcases/data-source/airTable.cy.js b/cypress-tests/cypress/e2e/happyPath/marketplace/commonTestcases/data-source/airTableHappyPath.cy.skip.js
similarity index 96%
rename from cypress-tests/cypress/e2e/happyPath/marketplace/commonTestcases/data-source/airTable.cy.js
rename to cypress-tests/cypress/e2e/happyPath/marketplace/commonTestcases/data-source/airTableHappyPath.cy.skip.js
index 1ae1290180..0733373ece 100644
--- a/cypress-tests/cypress/e2e/happyPath/marketplace/commonTestcases/data-source/airTable.cy.js
+++ b/cypress-tests/cypress/e2e/happyPath/marketplace/commonTestcases/data-source/airTableHappyPath.cy.skip.js
@@ -19,13 +19,14 @@ import {
import { dataSourceSelector } from "../../../../../constants/selectors/dataSource";
const data = {};
-data.dsName = fake.lastName.toLowerCase().replaceAll("[^A-Za-z]", "");
-data.dsName1 = fake.lastName.toLowerCase().replaceAll("[^A-Za-z]", "");
+
+data.queryName = fake.lastName.toLowerCase().replaceAll("[^A-Za-z]", "");
describe("Data source Airtable", () => {
beforeEach(() => {
cy.apiLogin();
- cy.defaultWorkspaceLogin();
+ cy.visit("/");
+ data.dsName = fake.lastName.toLowerCase().replaceAll("[^A-Za-z]", "");
});
it("Should verify elements on connection AirTable form", () => {
@@ -199,7 +200,7 @@ describe("Data source Airtable", () => {
cy.get('[data-cy="show-ds-popover-button"]').click();
cy.get(".css-4e90k9").type(`${data.dsName}`);
cy.contains(`[id*="react-select-"]`, data.dsName).click();
- cy.get('[data-cy="query-rename-input"]').clear().type(data.dsName1);
+ cy.get('[data-cy="query-rename-input"]').clear().type(data.queryName);
cy.get(airTableSelector.operationSelectDropdown)
.click()
@@ -225,7 +226,7 @@ describe("Data source Airtable", () => {
cy.get(dataSourceSelector.queryPreviewButton).click();
cy.verifyToastMessage(
commonSelectors.toastMessage,
- `Query (${data.dsName1}) completed.`
+ `Query (${data.queryName}) completed.`
);
// Verify Delete record operation
@@ -277,7 +278,7 @@ describe("Data source Airtable", () => {
cy.get(dataSourceSelector.queryPreviewButton).click();
cy.verifyToastMessage(
commonSelectors.toastMessage,
- `Query (${data.dsName1}) completed.`
+ `Query (${data.queryName}) completed.`
);
deleteAppandDatasourceAfterExecution(
data.dsName,
diff --git a/cypress-tests/cypress/e2e/happyPath/marketplace/commonTestcases/data-source/amazonAthena.cy.js b/cypress-tests/cypress/e2e/happyPath/marketplace/commonTestcases/data-source/amazonAthenaHappyPath.cy.skip.js
similarity index 92%
rename from cypress-tests/cypress/e2e/happyPath/marketplace/commonTestcases/data-source/amazonAthena.cy.js
rename to cypress-tests/cypress/e2e/happyPath/marketplace/commonTestcases/data-source/amazonAthenaHappyPath.cy.skip.js
index 167ecdb2c5..f207f62058 100644
--- a/cypress-tests/cypress/e2e/happyPath/marketplace/commonTestcases/data-source/amazonAthena.cy.js
+++ b/cypress-tests/cypress/e2e/happyPath/marketplace/commonTestcases/data-source/amazonAthenaHappyPath.cy.skip.js
@@ -20,15 +20,15 @@ import {
import { dataSourceSelector } from "../../../../../constants/selectors/dataSource";
const data = {};
-data.dsName = fake.lastName.toLowerCase().replaceAll("[^A-Za-z]", "");
describe("Data source amazon athena", () => {
beforeEach(() => {
cy.apiLogin();
- cy.defaultWorkspaceLogin();
+ cy.visit("/");
+ data.dsName = fake.lastName.toLowerCase().replaceAll("[^A-Za-z]", "");
});
- it("Should verify elements on amazon athena connection form", () => {
+ it.skip("Should verify elements on amazon athena connection form", () => {
const Accesskey = Cypress.env("amazonathena_accessKey");
const Secretkey = Cypress.env("amazonathena_secretKey");
const DbName = Cypress.env("amazonathena_DbName");
@@ -97,7 +97,7 @@ describe("Data source amazon athena", () => {
deleteDatasource(`cypress-${data.dsName}-Amazon-Athena`);
});
- it("Should verify the functionality of amazon athena connection form.", () => {
+ it.skip("Should verify the functionality of amazon athena connection form.", () => {
const Accesskey = Cypress.env("amazonathena_accessKey");
const Secretkey = Cypress.env("amazonathena_secretKey");
const DbName = Cypress.env("amazonathena_DbName");
@@ -134,7 +134,7 @@ describe("Data source amazon athena", () => {
deleteDatasource(`cypress-${data.dsName}-amazon-Athena`);
});
- it("Should able to run the query with valid conection", () => {
+ it.skip("Should able to run the query with valid conection", () => {
const Accesskey = Cypress.env("amazonathena_accessKey");
const Secretkey = Cypress.env("amazonathena_secretKey");
const DbName = Cypress.env("amazonathena_DbName");
@@ -188,11 +188,13 @@ describe("Data source amazon athena", () => {
cy.get(".css-4e90k9").type(`${data.dsName}`);
cy.contains(`[id*="react-select-"]`, data.dsName).click();
cy.get('[data-cy="query-rename-input"]').clear().type(data.dsName);
-
+ cy.get(`[data-cy="list-query-${data.dsName}"]`).should("be.visible");
cy.get('[data-cy="query-input-field"]').clearAndTypeOnCodeMirror(
"SHOW DATABASES;"
);
-
+ cy.get(
+ '[data-cy="query-input-field"] >>> .cm-editor >> .cm-content > .cm-line'
+ ).should("have.text", "SHOW DATABASES;");
cy.get(dataSourceSelector.queryPreviewButton).click();
cy.verifyToastMessage(
commonSelectors.toastMessage,
diff --git a/cypress-tests/cypress/e2e/happyPath/marketplace/commonTestcases/data-source/amazonses.cy.js b/cypress-tests/cypress/e2e/happyPath/marketplace/commonTestcases/data-source/amazonsesHappyPath.cy.skip.js
similarity index 95%
rename from cypress-tests/cypress/e2e/happyPath/marketplace/commonTestcases/data-source/amazonses.cy.js
rename to cypress-tests/cypress/e2e/happyPath/marketplace/commonTestcases/data-source/amazonsesHappyPath.cy.skip.js
index 674c694d28..9c3864c9fd 100644
--- a/cypress-tests/cypress/e2e/happyPath/marketplace/commonTestcases/data-source/amazonses.cy.js
+++ b/cypress-tests/cypress/e2e/happyPath/marketplace/commonTestcases/data-source/amazonsesHappyPath.cy.skip.js
@@ -20,15 +20,15 @@ import {
import { dataSourceSelector } from "../../../../../constants/selectors/dataSource";
const data = {};
-data.dsName = fake.lastName.toLowerCase().replaceAll("[^A-Za-z]", "");
describe("Data source amazon ses", () => {
beforeEach(() => {
cy.apiLogin();
- cy.defaultWorkspaceLogin();
+ cy.visit("/");
+ data.dsName = fake.lastName.toLowerCase().replaceAll("[^A-Za-z]", "");
});
- it("Should verify elements on amazonses connection form", () => {
+ it.skip("Should verify elements on amazonses connection form", () => {
const Accesskey = Cypress.env("amazonSes_accessKey");
const Secretkey = Cypress.env("amazonSes_secretKey");
@@ -80,7 +80,7 @@ describe("Data source amazon ses", () => {
deleteDatasource(`cypress-${data.dsName}-Amazon-ses`);
});
- it("Should verify the functionality of amazonses connection form.", () => {
+ it.skip("Should verify the functionality of amazonses connection form.", () => {
selectAndAddDataSource("databases", amazonSesText.AmazonSES, data.dsName);
cy.get(".react-select__dropdown-indicator").eq(1).click();
@@ -112,7 +112,7 @@ describe("Data source amazon ses", () => {
deleteDatasource(`cypress-${data.dsName}-amazon-ses`);
});
- it("Should able to run the query with valid conection", () => {
+ it.skip("Should able to run the query with valid conection", () => {
const email = "adish" + "@" + "tooljet.com";
selectAndAddDataSource("databases", amazonSesText.AmazonSES, data.dsName);
diff --git a/cypress-tests/cypress/e2e/happyPath/marketplace/commonTestcases/data-source/appWrite.cy.js b/cypress-tests/cypress/e2e/happyPath/marketplace/commonTestcases/data-source/appWriteHappyPath.cy.skip.js
similarity index 96%
rename from cypress-tests/cypress/e2e/happyPath/marketplace/commonTestcases/data-source/appWrite.cy.js
rename to cypress-tests/cypress/e2e/happyPath/marketplace/commonTestcases/data-source/appWriteHappyPath.cy.skip.js
index 8ed50754ad..27f52fd99d 100644
--- a/cypress-tests/cypress/e2e/happyPath/marketplace/commonTestcases/data-source/appWrite.cy.js
+++ b/cypress-tests/cypress/e2e/happyPath/marketplace/commonTestcases/data-source/appWriteHappyPath.cy.skip.js
@@ -20,15 +20,15 @@ import {
import { dataSourceSelector } from "../../../../../constants/selectors/dataSource";
const data = {};
-data.dsName = fake.lastName.toLowerCase().replaceAll("[^A-Za-z]", "");
describe("Data source AppWrite", () => {
beforeEach(() => {
cy.apiLogin();
- cy.defaultWorkspaceLogin();
+ cy.visit("/");
+ data.dsName = fake.lastName.toLowerCase().replaceAll("[^A-Za-z]", "");
});
- it("Should verify elements on appwrite connection form", () => {
+ it.skip("Should verify elements on appwrite connection form", () => {
const Host = Cypress.env("appwrite_host");
const ProjectID = Cypress.env("appwrite_projectID");
const DatabaseID = Cypress.env("appwrite_databaseID");
@@ -100,7 +100,7 @@ describe("Data source AppWrite", () => {
deleteDatasource(`cypress-${data.dsName}-Appwrite`);
});
- it("Should verify the functionality of appwrite connection form.", () => {
+ it.skip("Should verify the functionality of appwrite connection form.", () => {
const Host = Cypress.env("appwrite_host");
const ProjectID = Cypress.env("appwrite_projectID");
const DatabaseID = Cypress.env("appwrite_databaseID");
@@ -150,7 +150,7 @@ describe("Data source AppWrite", () => {
deleteDatasource(`cypress-${data.dsName}-Appwrite`);
});
- it("Should be able to run the query with a valid connection", () => {
+ it.skip("Should be able to run the query with a valid connection", () => {
const Host = Cypress.env("appwrite_host");
const ProjectID = Cypress.env("appwrite_projectID");
const DatabaseID = Cypress.env("appwrite_databaseID");
diff --git a/cypress-tests/cypress/e2e/happyPath/marketplace/commonTestcases/data-source/awsLambda.cy.js b/cypress-tests/cypress/e2e/happyPath/marketplace/commonTestcases/data-source/awsLambdaHappyPath.cy.skip.js
similarity index 92%
rename from cypress-tests/cypress/e2e/happyPath/marketplace/commonTestcases/data-source/awsLambda.cy.js
rename to cypress-tests/cypress/e2e/happyPath/marketplace/commonTestcases/data-source/awsLambdaHappyPath.cy.skip.js
index f127beb854..17a3f0426c 100644
--- a/cypress-tests/cypress/e2e/happyPath/marketplace/commonTestcases/data-source/awsLambda.cy.js
+++ b/cypress-tests/cypress/e2e/happyPath/marketplace/commonTestcases/data-source/awsLambdaHappyPath.cy.skip.js
@@ -20,15 +20,15 @@ import {
import { dataSourceSelector } from "../../../../../constants/selectors/dataSource";
const data = {};
-data.dsName = fake.lastName.toLowerCase().replaceAll("[^A-Za-z]", "");
describe("Data source AWS Lambda", () => {
beforeEach(() => {
cy.apiLogin();
- cy.defaultWorkspaceLogin();
+ cy.visit("/");
+ data.dsName = fake.lastName.toLowerCase().replaceAll("[^A-Za-z]", "");
});
- it("Should verify elements on AWS Lambda connection form", () => {
+ it.skip("Should verify elements on AWS Lambda connection form", () => {
const Accesskey = Cypress.env("awslamda_access");
const Secretkey = Cypress.env("awslamda_secret");
@@ -80,9 +80,10 @@ describe("Data source AWS Lambda", () => {
);
deleteDatasource(`cypress-${data.dsName}-aws-lambda`);
+ cy.uninstallMarketplacePlugin("AWS Lambda");
});
- it("Should verify the functionality of AWS Lambda connection form", () => {
+ it.skip("Should verify the functionality of AWS Lambda connection form", () => {
const Accesskey = Cypress.env("awslamda_access");
const Secretkey = Cypress.env("awslamda_secret");
@@ -113,9 +114,10 @@ describe("Data source AWS Lambda", () => {
);
deleteDatasource(`cypress-${data.dsName}-aws-lambda`);
+ cy.uninstallMarketplacePlugin("AWS Lambda");
});
- it("Should able to run the query with valid conection", () => {
+ it.skip("Should able to run the query with valid conection", () => {
const Accesskey = Cypress.env("awslamda_access");
const Secretkey = Cypress.env("awslamda_secret");
diff --git a/cypress-tests/cypress/e2e/happyPath/marketplace/commonTestcases/data-source/awsTextract.cy.js b/cypress-tests/cypress/e2e/happyPath/marketplace/commonTestcases/data-source/awsTextractHappyPath.cy.skip.js
similarity index 94%
rename from cypress-tests/cypress/e2e/happyPath/marketplace/commonTestcases/data-source/awsTextract.cy.js
rename to cypress-tests/cypress/e2e/happyPath/marketplace/commonTestcases/data-source/awsTextractHappyPath.cy.skip.js
index 7af21cf467..1a01ecc757 100644
--- a/cypress-tests/cypress/e2e/happyPath/marketplace/commonTestcases/data-source/awsTextract.cy.js
+++ b/cypress-tests/cypress/e2e/happyPath/marketplace/commonTestcases/data-source/awsTextractHappyPath.cy.skip.js
@@ -21,15 +21,15 @@ import {
import { dataSourceSelector } from "../../../../../constants/selectors/dataSource";
const data = {};
-data.dsName = fake.lastName.toLowerCase().replaceAll("[^A-Za-z]", "");
describe("Data source AWS Textract", () => {
beforeEach(() => {
cy.apiLogin();
- cy.defaultWorkspaceLogin();
+ cy.visit("/");
+ data.dsName = fake.lastName.toLowerCase().replaceAll("[^A-Za-z]", "");
});
- it("Should verify elements on AWS Textract connection form", () => {
+ it.skip("Should verify elements on AWS Textract connection form", () => {
const Accesskey = Cypress.env("awstextract_access");
const Secretkey = Cypress.env("awstextract_secret");
@@ -87,7 +87,7 @@ describe("Data source AWS Textract", () => {
deleteDatasource(`cypress-${data.dsName}-aws-textract`);
});
- it("Should verify functionality of AWS Textract connection form", () => {
+ it.skip("Should verify functionality of AWS Textract connection form", () => {
const Accesskey = Cypress.env("awstextract_access");
const Secretkey = Cypress.env("awstextract_secret");
@@ -122,9 +122,10 @@ describe("Data source AWS Textract", () => {
);
deleteDatasource(`cypress-${data.dsName}-aws-textract`);
+ cy.uninstallMarketplacePlugin("AWS Textract");
});
- it("Should able to run the query with valid conection", () => {
+ it.skip("Should able to run the query with valid conection", () => {
const Accesskey = Cypress.env("awstextract_access");
const Secretkey = Cypress.env("awstextract_secret");
diff --git a/cypress-tests/cypress/e2e/happyPath/marketplace/commonTestcases/data-source/azureBlobStorageHappyPath.cy.js b/cypress-tests/cypress/e2e/happyPath/marketplace/commonTestcases/data-source/azureBlobStorageHappyPath.cy.js
index b148f92735..0c505cc417 100644
--- a/cypress-tests/cypress/e2e/happyPath/marketplace/commonTestcases/data-source/azureBlobStorageHappyPath.cy.js
+++ b/cypress-tests/cypress/e2e/happyPath/marketplace/commonTestcases/data-source/azureBlobStorageHappyPath.cy.js
@@ -17,8 +17,8 @@ data.customText = fake.randomSentence;
describe("Data source Azure Blob Storage", () => {
beforeEach(() => {
- cy.appUILogin();
- cy.defaultWorkspaceLogin();
+ cy.apiLogin();
+ cy.visit("/");
data.dataSourceName = fake.lastName
.toLowerCase()
.replaceAll("[^A-Za-z]", "");
diff --git a/cypress-tests/cypress/e2e/happyPath/marketplace/commonTestcases/data-source/baseRow.cy.js b/cypress-tests/cypress/e2e/happyPath/marketplace/commonTestcases/data-source/baseRowHappyPath.cy.skip.js
similarity index 95%
rename from cypress-tests/cypress/e2e/happyPath/marketplace/commonTestcases/data-source/baseRow.cy.js
rename to cypress-tests/cypress/e2e/happyPath/marketplace/commonTestcases/data-source/baseRowHappyPath.cy.skip.js
index 05c250d01c..4b03148e9e 100644
--- a/cypress-tests/cypress/e2e/happyPath/marketplace/commonTestcases/data-source/baseRow.cy.js
+++ b/cypress-tests/cypress/e2e/happyPath/marketplace/commonTestcases/data-source/baseRowHappyPath.cy.skip.js
@@ -20,15 +20,15 @@ import {
import { dataSourceSelector } from "../../../../../constants/selectors/dataSource";
const data = {};
-data.dsName = fake.lastName.toLowerCase().replaceAll("[^A-Za-z]", "");
describe("Data source baserow", () => {
beforeEach(() => {
cy.apiLogin();
- cy.defaultWorkspaceLogin();
+ cy.visit("/");
+ data.dsName = fake.lastName.toLowerCase().replaceAll("[^A-Za-z]", "");
});
- it("Should verify elements on baserow connection form", () => {
+ it.skip("Should verify elements on baserow connection form", () => {
const Apikey = Cypress.env("baserow_apikey");
cy.get(commonSelectors.globalDataSourceIcon).click();
@@ -78,7 +78,7 @@ describe("Data source baserow", () => {
deleteDatasource(`cypress-${data.dsName}-baserow`);
});
- it("Should verify the functionality of baserow connection form.", () => {
+ it.skip("Should verify the functionality of baserow connection form.", () => {
const Apikey = Cypress.env("baserow_apikey");
selectAndAddDataSource("databases", baseRowText.baserow, data.dsName);
@@ -103,7 +103,7 @@ describe("Data source baserow", () => {
deleteDatasource(`cypress-${data.dsName}-baserow`);
});
- it("Should be able to run the query with a valid connection", () => {
+ it.skip("Should be able to run the query with a valid connection", () => {
const baserowTableID = Cypress.env("baserow_tableid");
const baserowRowID = Cypress.env("baserow_rowid");
const Apikey = Cypress.env("baserow_apikey");
diff --git a/cypress-tests/cypress/e2e/happyPath/marketplace/commonTestcases/data-source/bigqueryHappyPath.cy.js b/cypress-tests/cypress/e2e/happyPath/marketplace/commonTestcases/data-source/bigqueryHappyPath.cy.skip.js
similarity index 98%
rename from cypress-tests/cypress/e2e/happyPath/marketplace/commonTestcases/data-source/bigqueryHappyPath.cy.js
rename to cypress-tests/cypress/e2e/happyPath/marketplace/commonTestcases/data-source/bigqueryHappyPath.cy.skip.js
index cee23b0807..24a39a3acc 100644
--- a/cypress-tests/cypress/e2e/happyPath/marketplace/commonTestcases/data-source/bigqueryHappyPath.cy.js
+++ b/cypress-tests/cypress/e2e/happyPath/marketplace/commonTestcases/data-source/bigqueryHappyPath.cy.skip.js
@@ -16,8 +16,8 @@ const data = {};
describe("Data source BigQuery", () => {
beforeEach(() => {
- cy.appUILogin();
- cy.defaultWorkspaceLogin();
+ cy.apiLogin();
+ cy.visit("/");
data.dataSourceName = fake.lastName
.toLowerCase()
.replaceAll("[^A-Za-z]", "");
diff --git a/cypress-tests/cypress/e2e/happyPath/marketplace/commonTestcases/data-source/clickHouseHappyPath.cy.js b/cypress-tests/cypress/e2e/happyPath/marketplace/commonTestcases/data-source/clickHouseHappyPath.cy.js
index f221ed3c16..6ac8a3c8d1 100644
--- a/cypress-tests/cypress/e2e/happyPath/marketplace/commonTestcases/data-source/clickHouseHappyPath.cy.js
+++ b/cypress-tests/cypress/e2e/happyPath/marketplace/commonTestcases/data-source/clickHouseHappyPath.cy.js
@@ -19,8 +19,8 @@ const data = {};
describe("Data sources", () => {
beforeEach(() => {
- cy.appUILogin();
- cy.defaultWorkspaceLogin();
+ cy.apiLogin();
+ cy.visit("/");
data.dataSourceName = fake.lastName
.toLowerCase()
.replaceAll("[^A-Za-z]", "");
diff --git a/cypress-tests/cypress/e2e/happyPath/marketplace/commonTestcases/data-source/cosmosDbHappyPath.cy.js b/cypress-tests/cypress/e2e/happyPath/marketplace/commonTestcases/data-source/cosmosDbHappyPath.cy.js
index 53fab94f67..bb5923ec7b 100644
--- a/cypress-tests/cypress/e2e/happyPath/marketplace/commonTestcases/data-source/cosmosDbHappyPath.cy.js
+++ b/cypress-tests/cypress/e2e/happyPath/marketplace/commonTestcases/data-source/cosmosDbHappyPath.cy.js
@@ -19,8 +19,8 @@ const data = {};
describe("Data sources", () => {
beforeEach(() => {
- cy.appUILogin();
- cy.defaultWorkspaceLogin();
+ cy.apiLogin();
+ cy.visit("/");
data.dataSourceName = fake.lastName
.toLowerCase()
.replaceAll("[^A-Za-z]", "");
diff --git a/cypress-tests/cypress/e2e/happyPath/marketplace/commonTestcases/data-source/couchDbHappyPath.cy.js b/cypress-tests/cypress/e2e/happyPath/marketplace/commonTestcases/data-source/couchDbHappyPath.cy.js
index e16c6d5314..8e4a17d173 100644
--- a/cypress-tests/cypress/e2e/happyPath/marketplace/commonTestcases/data-source/couchDbHappyPath.cy.js
+++ b/cypress-tests/cypress/e2e/happyPath/marketplace/commonTestcases/data-source/couchDbHappyPath.cy.js
@@ -21,8 +21,8 @@ const data = {};
describe("Data sources", () => {
beforeEach(() => {
- cy.appUILogin();
- cy.defaultWorkspaceLogin();
+ cy.apiLogin();
+ cy.visit("/");
data.dataSourceName = fake.lastName
.toLowerCase()
.replaceAll("[^A-Za-z]", "");
diff --git a/cypress-tests/cypress/e2e/happyPath/marketplace/commonTestcases/data-source/dynamoDbHappyPath.cy.js b/cypress-tests/cypress/e2e/happyPath/marketplace/commonTestcases/data-source/dynamoDbHappyPath.cy.js
index eb9a030963..5ff912d2d8 100644
--- a/cypress-tests/cypress/e2e/happyPath/marketplace/commonTestcases/data-source/dynamoDbHappyPath.cy.js
+++ b/cypress-tests/cypress/e2e/happyPath/marketplace/commonTestcases/data-source/dynamoDbHappyPath.cy.js
@@ -19,8 +19,8 @@ const data = {};
describe("Data source DynamoDB", () => {
beforeEach(() => {
- cy.appUILogin();
- cy.defaultWorkspaceLogin();
+ cy.apiLogin();
+ cy.visit("/");
data.dataSourceName = fake.lastName
.toLowerCase()
.replaceAll("[^A-Za-z]", "");
diff --git a/cypress-tests/cypress/e2e/happyPath/marketplace/commonTestcases/data-source/elasticsearchHappyPath.cy.js b/cypress-tests/cypress/e2e/happyPath/marketplace/commonTestcases/data-source/elasticsearchHappyPath.cy.js
index c7a1f242fa..88627284ad 100644
--- a/cypress-tests/cypress/e2e/happyPath/marketplace/commonTestcases/data-source/elasticsearchHappyPath.cy.js
+++ b/cypress-tests/cypress/e2e/happyPath/marketplace/commonTestcases/data-source/elasticsearchHappyPath.cy.js
@@ -17,9 +17,12 @@ import {
const data = {};
describe("Data source Elasticsearch", () => {
beforeEach(() => {
- cy.appUILogin();
- cy.defaultWorkspaceLogin();
- data.lastName = fake.lastName.toLowerCase().replaceAll("[^A-Za-z]", "");
+ cy.apiLogin();
+ cy.visit("/");
+
+ data.dataSourceName = fake.lastName
+ .toLowerCase()
+ .replaceAll("[^A-Za-z]", "");
});
it("Should verify elements on Elasticsearch connection form", () => {
@@ -123,14 +126,14 @@ describe("Data source Elasticsearch", () => {
"have.text",
elasticsearchText.errorConnectionRefused
);
- deleteDatasource(`cypress-${data.lastName}-elasticsearch`);
+ deleteDatasource(`cypress-${data.dataSourceName}-elasticsearch`);
});
it("Should verify the functionality of Elasticsearch connection form.", () => {
selectAndAddDataSource(
"databases",
elasticsearchText.elasticSearch,
- data.lastName
+ data.dataSourceName
);
fillDataSourceTextField(
@@ -210,12 +213,12 @@ describe("Data source Elasticsearch", () => {
);
cy.get(
- `[data-cy="cypress-${data.lastName}-elasticsearch-button"]`
+ `[data-cy="cypress-${data.dataSourceName}-elasticsearch-button"]`
).verifyVisibleElement(
"have.text",
- `cypress-${data.lastName}-elasticsearch`
+ `cypress-${data.dataSourceName}-elasticsearch`
);
- deleteDatasource(`cypress-${data.lastName}-elasticsearch`);
+ deleteDatasource(`cypress-${data.dataSourceName}-elasticsearch`);
});
});
diff --git a/cypress-tests/cypress/e2e/happyPath/marketplace/commonTestcases/data-source/fireStoreHappyPath.cy.js b/cypress-tests/cypress/e2e/happyPath/marketplace/commonTestcases/data-source/fireStoreHappyPath.cy.js
index 6e703fc895..674501b2db 100644
--- a/cypress-tests/cypress/e2e/happyPath/marketplace/commonTestcases/data-source/fireStoreHappyPath.cy.js
+++ b/cypress-tests/cypress/e2e/happyPath/marketplace/commonTestcases/data-source/fireStoreHappyPath.cy.js
@@ -17,8 +17,8 @@ const data = {};
describe("Data source Firestore", () => {
beforeEach(() => {
- cy.appUILogin();
- cy.defaultWorkspaceLogin();
+ cy.apiLogin();
+ cy.visit("/");
data.dataSourceName = fake.lastName
.toLowerCase()
.replaceAll("[^A-Za-z]", "");
diff --git a/cypress-tests/cypress/e2e/happyPath/marketplace/commonTestcases/data-source/graphQL.cy.js b/cypress-tests/cypress/e2e/happyPath/marketplace/commonTestcases/data-source/graphQLHappyPath.cy.js
similarity index 97%
rename from cypress-tests/cypress/e2e/happyPath/marketplace/commonTestcases/data-source/graphQL.cy.js
rename to cypress-tests/cypress/e2e/happyPath/marketplace/commonTestcases/data-source/graphQLHappyPath.cy.js
index 008121b863..7ad8e5484b 100644
--- a/cypress-tests/cypress/e2e/happyPath/marketplace/commonTestcases/data-source/graphQL.cy.js
+++ b/cypress-tests/cypress/e2e/happyPath/marketplace/commonTestcases/data-source/graphQLHappyPath.cy.js
@@ -19,12 +19,12 @@ import {
import { dataSourceSelector } from "../../../../../constants/selectors/dataSource";
const data = {};
-data.dsName = fake.lastName.toLowerCase().replaceAll("[^A-Za-z]", "");
describe("Data source GraphQL", () => {
beforeEach(() => {
cy.apiLogin();
- cy.defaultWorkspaceLogin();
+ cy.visit("/");
+ data.dsName = fake.lastName.toLowerCase().replaceAll("[^A-Za-z]", "");
});
it("Should verify elements on GraphQL connection form", () => {
diff --git a/cypress-tests/cypress/e2e/happyPath/marketplace/commonTestcases/data-source/harperDb.cy.js b/cypress-tests/cypress/e2e/happyPath/marketplace/commonTestcases/data-source/harperDbHappyPath.cy.js
similarity index 97%
rename from cypress-tests/cypress/e2e/happyPath/marketplace/commonTestcases/data-source/harperDb.cy.js
rename to cypress-tests/cypress/e2e/happyPath/marketplace/commonTestcases/data-source/harperDbHappyPath.cy.js
index 9ec327cf71..12ad23efd9 100644
--- a/cypress-tests/cypress/e2e/happyPath/marketplace/commonTestcases/data-source/harperDb.cy.js
+++ b/cypress-tests/cypress/e2e/happyPath/marketplace/commonTestcases/data-source/harperDbHappyPath.cy.js
@@ -20,13 +20,13 @@ import {
import { dataSourceSelector } from "../../../../../constants/selectors/dataSource";
const data = {};
-data.dsName = fake.lastName.toLowerCase().replaceAll("[^A-Za-z]", "");
data.dsName1 = fake.lastName.toLowerCase().replaceAll("[^A-Za-z]", "");
describe("Data source HarperDB", () => {
beforeEach(() => {
cy.apiLogin();
- cy.defaultWorkspaceLogin();
+ cy.visit("/");
+ data.dsName = fake.lastName.toLowerCase().replaceAll("[^A-Za-z]", "");
});
it("Should verify elements on HarperDB connection form", () => {
@@ -102,6 +102,7 @@ describe("Data source HarperDB", () => {
);
deleteDatasource(`cypress-${data.dsName}-HarperDB`);
+ cy.uninstallMarketplacePlugin("HarperDB");
});
it("Should verify functionality of HarperDB connection form", () => {
@@ -156,9 +157,10 @@ describe("Data source HarperDB", () => {
);
deleteDatasource(`cypress-${data.dsName}-HarperDB`);
+ cy.uninstallMarketplacePlugin("HarperDB");
});
- it("Should be able to run the query with a valid connection", () => {
+ it.skip("Should be able to run the query with a valid connection", () => {
const Host = Cypress.env("harperdb_host");
const Port = Cypress.env("harperdb_port");
const Username = Cypress.env("harperdb_username");
diff --git a/cypress-tests/cypress/e2e/happyPath/marketplace/commonTestcases/data-source/influxDbHappyPath.cy.js b/cypress-tests/cypress/e2e/happyPath/marketplace/commonTestcases/data-source/influxDbHappyPath.cy.js
index 36b39572d4..24dc92359c 100644
--- a/cypress-tests/cypress/e2e/happyPath/marketplace/commonTestcases/data-source/influxDbHappyPath.cy.js
+++ b/cypress-tests/cypress/e2e/happyPath/marketplace/commonTestcases/data-source/influxDbHappyPath.cy.js
@@ -23,8 +23,8 @@ const data = {};
describe("Data sources", () => {
beforeEach(() => {
- cy.appUILogin();
- cy.defaultWorkspaceLogin();
+ cy.apiLogin();
+ cy.visit("/");
data.dataSourceName = fake.lastName
.toLowerCase()
.replaceAll("[^A-Za-z]", "");
diff --git a/cypress-tests/cypress/e2e/happyPath/marketplace/commonTestcases/data-source/mariaDbHappyPath.cy.js b/cypress-tests/cypress/e2e/happyPath/marketplace/commonTestcases/data-source/mariaDbHappyPath.cy.js
index 4c6c57d596..58c8c30705 100644
--- a/cypress-tests/cypress/e2e/happyPath/marketplace/commonTestcases/data-source/mariaDbHappyPath.cy.js
+++ b/cypress-tests/cypress/e2e/happyPath/marketplace/commonTestcases/data-source/mariaDbHappyPath.cy.js
@@ -19,8 +19,8 @@ const data = {};
describe("Data sources", () => {
beforeEach(() => {
- cy.appUILogin();
- cy.defaultWorkspaceLogin();
+ cy.apiLogin();
+ cy.visit("/");
data.dataSourceName = fake.lastName
.toLowerCase()
.replaceAll("[^A-Za-z]", "");
diff --git a/cypress-tests/cypress/e2e/happyPath/marketplace/commonTestcases/data-source/minio.cy.js b/cypress-tests/cypress/e2e/happyPath/marketplace/commonTestcases/data-source/minioHappyPath.cy.js
similarity index 97%
rename from cypress-tests/cypress/e2e/happyPath/marketplace/commonTestcases/data-source/minio.cy.js
rename to cypress-tests/cypress/e2e/happyPath/marketplace/commonTestcases/data-source/minioHappyPath.cy.js
index 7ea22b8693..6572724e3d 100644
--- a/cypress-tests/cypress/e2e/happyPath/marketplace/commonTestcases/data-source/minio.cy.js
+++ b/cypress-tests/cypress/e2e/happyPath/marketplace/commonTestcases/data-source/minioHappyPath.cy.js
@@ -20,12 +20,12 @@ import {
import { dataSourceSelector } from "../../../../../constants/selectors/dataSource";
const data = {};
-data.dsName = fake.lastName.toLowerCase().replaceAll("[^A-Za-z]", "");
describe("Data source minio", () => {
beforeEach(() => {
cy.apiLogin();
- cy.defaultWorkspaceLogin();
+ cy.visit("/");
+ data.dsName = fake.lastName.toLowerCase().replaceAll("[^A-Za-z]", "");
});
it("Should verify elements on minio connection form", () => {
@@ -157,7 +157,7 @@ describe("Data source minio", () => {
deleteDatasource(`cypress-${data.dsName}-minio`);
});
- it("Should be able to run the query with a valid connection", () => {
+ it.skip("Should be able to run the query with a valid connection", () => {
const Host = Cypress.env("minio_host");
const Port = Cypress.env("minio_port");
const AccessKey = Cypress.env("minio_accesskey");
diff --git a/cypress-tests/cypress/e2e/happyPath/marketplace/commonTestcases/data-source/mongoDbHappyPath.cy.js b/cypress-tests/cypress/e2e/happyPath/marketplace/commonTestcases/data-source/mongoDbHappyPath.cy.skip.js
similarity index 99%
rename from cypress-tests/cypress/e2e/happyPath/marketplace/commonTestcases/data-source/mongoDbHappyPath.cy.js
rename to cypress-tests/cypress/e2e/happyPath/marketplace/commonTestcases/data-source/mongoDbHappyPath.cy.skip.js
index 77d2e2ffa4..5729ea18c8 100644
--- a/cypress-tests/cypress/e2e/happyPath/marketplace/commonTestcases/data-source/mongoDbHappyPath.cy.js
+++ b/cypress-tests/cypress/e2e/happyPath/marketplace/commonTestcases/data-source/mongoDbHappyPath.cy.skip.js
@@ -27,8 +27,8 @@ const data = {};
describe("Data source MongoDB", () => {
beforeEach(() => {
- cy.appUILogin();
- cy.defaultWorkspaceLogin();
+ cy.apiLogin();
+ cy.visit("/");
data.dataSourceName = fake.lastName
.toLowerCase()
.replaceAll("[^A-Za-z]", "");
@@ -133,7 +133,7 @@ describe("Data source MongoDB", () => {
"have.text",
mongoDbText.errorConnectionRefused
);
- cy.get('[data-cy="query-select-dropdown"]').type(
+ cy.get('[data-cy="connection-type-select-dropdown"]').type(
mongoDbText.optionConnectUsingConnectionString
);
cy.get('[data-cy="label-connection-string"]').verifyVisibleElement(
diff --git a/cypress-tests/cypress/e2e/happyPath/marketplace/commonTestcases/data-source/mysqlHappyPath.cy.js b/cypress-tests/cypress/e2e/happyPath/marketplace/commonTestcases/data-source/mysqlHappyPath.cy.skip.js
similarity index 99%
rename from cypress-tests/cypress/e2e/happyPath/marketplace/commonTestcases/data-source/mysqlHappyPath.cy.js
rename to cypress-tests/cypress/e2e/happyPath/marketplace/commonTestcases/data-source/mysqlHappyPath.cy.skip.js
index 38e221ba0a..d54e15c933 100644
--- a/cypress-tests/cypress/e2e/happyPath/marketplace/commonTestcases/data-source/mysqlHappyPath.cy.js
+++ b/cypress-tests/cypress/e2e/happyPath/marketplace/commonTestcases/data-source/mysqlHappyPath.cy.skip.js
@@ -26,8 +26,8 @@ const data = {};
describe("Data sources MySql", () => {
beforeEach(() => {
- cy.appUILogin();
- cy.defaultWorkspaceLogin();
+ cy.apiLogin();
+ cy.visit("/");
data.dataSourceName = fake.lastName
.toLowerCase()
.replaceAll("[^A-Za-z]", "");
diff --git a/cypress-tests/cypress/e2e/happyPath/marketplace/commonTestcases/data-source/oracleDbHappyPath.cy.skip.js b/cypress-tests/cypress/e2e/happyPath/marketplace/commonTestcases/data-source/oracleDbHappyPath.cy.skip.js
index e7ae4f296b..0cd7ea4223 100644
--- a/cypress-tests/cypress/e2e/happyPath/marketplace/commonTestcases/data-source/oracleDbHappyPath.cy.skip.js
+++ b/cypress-tests/cypress/e2e/happyPath/marketplace/commonTestcases/data-source/oracleDbHappyPath.cy.skip.js
@@ -15,7 +15,7 @@ import {
describe("Data sources", () => {
beforeEach(() => {
- cy.appUILogin();
+ cy.apiLogin();
// cy.createApp();
});
diff --git a/cypress-tests/cypress/e2e/happyPath/marketplace/commonTestcases/data-source/postgresHappyPath.cy.js b/cypress-tests/cypress/e2e/happyPath/marketplace/commonTestcases/data-source/postgresHappyPath.cy.js
index a6ff7595e5..2da4902edd 100644
--- a/cypress-tests/cypress/e2e/happyPath/marketplace/commonTestcases/data-source/postgresHappyPath.cy.js
+++ b/cypress-tests/cypress/e2e/happyPath/marketplace/commonTestcases/data-source/postgresHappyPath.cy.js
@@ -20,14 +20,14 @@ const data = {};
describe("Data sources", () => {
beforeEach(() => {
- cy.appUILogin();
- cy.defaultWorkspaceLogin();
+ cy.apiLogin();
+ cy.visit("/");
data.dataSourceName = fake.lastName
.toLowerCase()
.replaceAll("[^A-Za-z]", "");
});
- it("Should verify elements on connection form", () => {
+ it.skip("Should verify elements on connection form", () => {
cy.log(process.env.NODE_ENV);
cy.log(postgreSqlText.allDatabase());
cy.get(commonSelectors.globalDataSourceIcon).click();
@@ -140,7 +140,7 @@ describe("Data sources", () => {
deleteDatasource(`cypress-${data.dataSourceName}-postgresql`);
});
- it("Should verify the functionality of PostgreSQL connection form.", () => {
+ it.skip("Should verify the functionality of PostgreSQL connection form.", () => {
selectAndAddDataSource(
"databases",
postgreSqlText.postgreSQL,
diff --git a/cypress-tests/cypress/e2e/happyPath/marketplace/commonTestcases/data-source/redisHappyPath.cy.js b/cypress-tests/cypress/e2e/happyPath/marketplace/commonTestcases/data-source/redisHappyPath.cy.js
index 8217a9db60..ddceea1b52 100644
--- a/cypress-tests/cypress/e2e/happyPath/marketplace/commonTestcases/data-source/redisHappyPath.cy.js
+++ b/cypress-tests/cypress/e2e/happyPath/marketplace/commonTestcases/data-source/redisHappyPath.cy.js
@@ -23,7 +23,7 @@ data.dsName = fake.lastName.toLowerCase().replaceAll("[^A-Za-z]", "");
describe("Data source Redis", () => {
beforeEach(() => {
cy.apiLogin();
- cy.defaultWorkspaceLogin();
+ cy.visit("/");
});
it("Should verify elements on connection Redis form", () => {
@@ -215,7 +215,7 @@ describe("Data source Redis", () => {
deleteDatasource(`cypress-${data.dsName}-redis`);
});
- it("Should able to run the query with valid conection", () => {
+ it.skip("Should able to run the query with valid conection", () => {
selectAndAddDataSource("databases", redisText.redis, data.dsName);
fillDataSourceTextField(
diff --git a/cypress-tests/cypress/e2e/happyPath/marketplace/commonTestcases/data-source/restAPIHappyPath.cy.js b/cypress-tests/cypress/e2e/happyPath/marketplace/commonTestcases/data-source/restAPIHappyPath.cy.js
index 0d45f8af89..825439e687 100644
--- a/cypress-tests/cypress/e2e/happyPath/marketplace/commonTestcases/data-source/restAPIHappyPath.cy.js
+++ b/cypress-tests/cypress/e2e/happyPath/marketplace/commonTestcases/data-source/restAPIHappyPath.cy.js
@@ -20,7 +20,7 @@ const clientAuthenticationDropdown =
describe("Data source Rest API", () => {
beforeEach(() => {
cy.apiLogin();
- cy.defaultWorkspaceLogin();
+ cy.visit("/");
data.dataSourceName = fake.lastName
.toLowerCase()
.replaceAll("[^A-Za-z]", "");
@@ -332,7 +332,6 @@ describe("Data source Rest API", () => {
deleteDatasource(`cypress-${data.dataSourceName}-restapi`);
});
it("Should verify basic connection for Rest API", () => {
- const storedId = Cypress.env("storedId");
cy.apiCreateGDS(
`${Cypress.env("server_host")}/api/data-sources`,
`cypress-${data.dataSourceName}-restapi`,
diff --git a/cypress-tests/cypress/e2e/happyPath/marketplace/commonTestcases/data-source/rethinkDbHappyPath.cy.skip.js b/cypress-tests/cypress/e2e/happyPath/marketplace/commonTestcases/data-source/rethinkDbHappyPath.cy.skip.js
index 267eedea1f..abdde2ba00 100644
--- a/cypress-tests/cypress/e2e/happyPath/marketplace/commonTestcases/data-source/rethinkDbHappyPath.cy.skip.js
+++ b/cypress-tests/cypress/e2e/happyPath/marketplace/commonTestcases/data-source/rethinkDbHappyPath.cy.skip.js
@@ -19,8 +19,8 @@ const data = {};
describe("Data sources", () => {
beforeEach(() => {
- cy.appUILogin();
- cy.defaultWorkspaceLogin();
+ cy.apiLogin();
+ cy.visit("/");
data.dataSourceName = fake.lastName
.toLowerCase()
.replaceAll("[^A-Za-z]", "");
diff --git a/cypress-tests/cypress/e2e/happyPath/marketplace/commonTestcases/data-source/s3HappyPath.cy.js b/cypress-tests/cypress/e2e/happyPath/marketplace/commonTestcases/data-source/s3HappyPath.cy.js
index 12b3817f16..73ccc703c3 100644
--- a/cypress-tests/cypress/e2e/happyPath/marketplace/commonTestcases/data-source/s3HappyPath.cy.js
+++ b/cypress-tests/cypress/e2e/happyPath/marketplace/commonTestcases/data-source/s3HappyPath.cy.js
@@ -20,7 +20,7 @@ const data = {};
describe("Data sources AWS S3", () => {
beforeEach(() => {
cy.apiLogin();
- cy.defaultWorkspaceLogin();
+ cy.visit("/");
data.dataSourceName = fake.lastName
.toLowerCase()
.replaceAll("[^A-Za-z]", "");
diff --git a/cypress-tests/cypress/e2e/happyPath/marketplace/commonTestcases/data-source/sapHanaHappyPath.cy.skip.js b/cypress-tests/cypress/e2e/happyPath/marketplace/commonTestcases/data-source/sapHanaHappyPath.cy.skip.js
index c240286274..25ec2e4a9c 100644
--- a/cypress-tests/cypress/e2e/happyPath/marketplace/commonTestcases/data-source/sapHanaHappyPath.cy.skip.js
+++ b/cypress-tests/cypress/e2e/happyPath/marketplace/commonTestcases/data-source/sapHanaHappyPath.cy.skip.js
@@ -15,7 +15,7 @@ import {
describe("Data sources", () => {
beforeEach(() => {
- cy.appUILogin();
+ cy.apiLogin();
// cy.createApp();
});
diff --git a/cypress-tests/cypress/e2e/happyPath/marketplace/commonTestcases/data-source/smtpHappyPath.cy.js b/cypress-tests/cypress/e2e/happyPath/marketplace/commonTestcases/data-source/smtpHappyPath.cy.js
index 4e824aeda5..506fe5d660 100644
--- a/cypress-tests/cypress/e2e/happyPath/marketplace/commonTestcases/data-source/smtpHappyPath.cy.js
+++ b/cypress-tests/cypress/e2e/happyPath/marketplace/commonTestcases/data-source/smtpHappyPath.cy.js
@@ -13,8 +13,8 @@ const data = {};
describe("Data source SMTP", () => {
beforeEach(() => {
- cy.appUILogin();
- cy.defaultWorkspaceLogin();
+ cy.apiLogin();
+ cy.visit("/");
data.dataSourceName = fake.lastName
.toLowerCase()
.replaceAll("[^A-Za-z]", "");
diff --git a/cypress-tests/cypress/e2e/happyPath/marketplace/commonTestcases/data-source/snowflakeHappyPath.cy.js b/cypress-tests/cypress/e2e/happyPath/marketplace/commonTestcases/data-source/snowflakeHappyPath.cy.js
index 4409c0577b..7c1fb5b588 100644
--- a/cypress-tests/cypress/e2e/happyPath/marketplace/commonTestcases/data-source/snowflakeHappyPath.cy.js
+++ b/cypress-tests/cypress/e2e/happyPath/marketplace/commonTestcases/data-source/snowflakeHappyPath.cy.js
@@ -20,8 +20,8 @@ import {
const data = {};
describe("Data sources", () => {
beforeEach(() => {
- cy.appUILogin();
- cy.defaultWorkspaceLogin();
+ cy.apiLogin();
+ cy.visit("/");
data.dataSourceName = fake.lastName
.toLowerCase()
.replaceAll("[^A-Za-z]", "");
diff --git a/cypress-tests/cypress/e2e/happyPath/marketplace/commonTestcases/data-source/sqlServerHappyPath.cy.js b/cypress-tests/cypress/e2e/happyPath/marketplace/commonTestcases/data-source/sqlServerHappyPath.cy.skip.js
similarity index 99%
rename from cypress-tests/cypress/e2e/happyPath/marketplace/commonTestcases/data-source/sqlServerHappyPath.cy.js
rename to cypress-tests/cypress/e2e/happyPath/marketplace/commonTestcases/data-source/sqlServerHappyPath.cy.skip.js
index 9501fdabbb..954fb659b5 100644
--- a/cypress-tests/cypress/e2e/happyPath/marketplace/commonTestcases/data-source/sqlServerHappyPath.cy.js
+++ b/cypress-tests/cypress/e2e/happyPath/marketplace/commonTestcases/data-source/sqlServerHappyPath.cy.skip.js
@@ -21,8 +21,8 @@ const data = {};
describe("Data sources", () => {
beforeEach(() => {
- cy.appUILogin();
- cy.defaultWorkspaceLogin();
+ cy.apiLogin();
+ cy.visit("/");
data.dataSourceName = fake.lastName
.toLowerCase()
.replaceAll("[^A-Za-z]", "");
diff --git a/cypress-tests/cypress/e2e/happyPath/marketplace/commonTestcases/data-source/twilio.cy.js b/cypress-tests/cypress/e2e/happyPath/marketplace/commonTestcases/data-source/twilioHappyPath.cy.skip.js
similarity index 94%
rename from cypress-tests/cypress/e2e/happyPath/marketplace/commonTestcases/data-source/twilio.cy.js
rename to cypress-tests/cypress/e2e/happyPath/marketplace/commonTestcases/data-source/twilioHappyPath.cy.skip.js
index ee2fa9a6e3..4ac2575266 100644
--- a/cypress-tests/cypress/e2e/happyPath/marketplace/commonTestcases/data-source/twilio.cy.js
+++ b/cypress-tests/cypress/e2e/happyPath/marketplace/commonTestcases/data-source/twilioHappyPath.cy.skip.js
@@ -21,15 +21,15 @@ import { dataSourceSelector } from "../../../../../constants/selectors/dataSourc
import { pluginSelectors } from "Selectors/plugins";
const data = {};
-data.dsName = fake.lastName.toLowerCase().replaceAll("[^A-Za-z]", "");
describe("Data source Twilio", () => {
beforeEach(() => {
cy.apiLogin();
- cy.defaultWorkspaceLogin();
+ cy.visit("/");
+ data.dsName = fake.lastName.toLowerCase().replaceAll("[^A-Za-z]", "");
});
- it("Should verify elements on Twilio connection form", () => {
+ it.skip("Should verify elements on Twilio connection form", () => {
const AuthToken = Cypress.env("twilio_auth_token");
const AccountSID = Cypress.env("twilio_account_SID");
const MessageSID = Cypress.env("twilio_messaging_service_SID");
@@ -89,7 +89,7 @@ describe("Data source Twilio", () => {
deleteDatasource(`cypress-${data.dsName}-twilio`);
});
- it("Should verify functionality of Twilio connection form", () => {
+ it.skip("Should verify functionality of Twilio connection form", () => {
const AuthToken = Cypress.env("twilio_auth_token");
const AccountSID = Cypress.env("twilio_account_SID");
const MessageSID = Cypress.env("twilio_messaging_service_SID");
@@ -128,7 +128,7 @@ describe("Data source Twilio", () => {
deleteDatasource(`cypress-${data.dsName}-twilio`);
});
- it("Should be able to run the query with a valid connection", () => {
+ it.skip("Should be able to run the query with a valid connection", () => {
const AuthToken = Cypress.env("twilio_auth_token");
const AccountSID = Cypress.env("twilio_account_SID");
const MessageSID = Cypress.env("twilio_messaging_service_SID");
diff --git a/cypress-tests/cypress/e2e/happyPath/marketplace/commonTestcases/data-source/typeSenseHappyPath.cy.skip.js b/cypress-tests/cypress/e2e/happyPath/marketplace/commonTestcases/data-source/typeSenseHappyPath.cy.skip.js
index ff15053f09..4b4fe20e62 100644
--- a/cypress-tests/cypress/e2e/happyPath/marketplace/commonTestcases/data-source/typeSenseHappyPath.cy.skip.js
+++ b/cypress-tests/cypress/e2e/happyPath/marketplace/commonTestcases/data-source/typeSenseHappyPath.cy.skip.js
@@ -20,7 +20,7 @@ const data = {};
describe("Data sources", () => {
beforeEach(() => {
- cy.appUILogin();
+ cy.apiLogin();
data.dataSourceName = fake.lastName
.toLowerCase()
.replaceAll("[^A-Za-z]", "");
diff --git a/cypress-tests/cypress/e2e/happyPath/platform/ceTestcases/apps/appExport.cy.js b/cypress-tests/cypress/e2e/happyPath/platform/ceTestcases/apps/appExport.cy.js
index e97269cf39..b1f3733c73 100644
--- a/cypress-tests/cypress/e2e/happyPath/platform/ceTestcases/apps/appExport.cy.js
+++ b/cypress-tests/cypress/e2e/happyPath/platform/ceTestcases/apps/appExport.cy.js
@@ -46,9 +46,7 @@ describe("App Export", () => {
});
it("Verify the elements of export dialog box", () => {
- cy.window({ log: false }).then((win) => {
- win.localStorage.setItem("walkthroughCompleted", "true");
- });
+ cy.skipWalkthrough()
cy.apiLogin();
cy.visit(`${data.workspaceSlug}`);
diff --git a/cypress-tests/cypress/e2e/happyPath/platform/ceTestcases/apps/appImport.cy.js b/cypress-tests/cypress/e2e/happyPath/platform/ceTestcases/apps/appImport.cy.js
index a6b068d137..2bd1ccf51e 100644
--- a/cypress-tests/cypress/e2e/happyPath/platform/ceTestcases/apps/appImport.cy.js
+++ b/cypress-tests/cypress/e2e/happyPath/platform/ceTestcases/apps/appImport.cy.js
@@ -34,6 +34,7 @@ describe("App Import Functionality", () => {
cy.apiLogin();
cy.apiCreateWorkspace(data.workspaceName, data.workspaceSlug);
cy.apiLogout();
+ cy.skipWalkthrough()
});
it("should verify app import functionality", () => {
@@ -100,12 +101,13 @@ describe("App Import Functionality", () => {
.and("have.text", importText.appImportedToastMessage);
// Verify imported app
- cy.get(".driver-close-btn").click();
+ cy.get(commonSelectors.toastCloseButton).click();
cy.wait(500);
cy.get(commonSelectors.appNameInput).verifyVisibleElement(
"contain.value",
"three-versions"
);
+ cy.get(appVersionSelectors.currentVersionField("v3")).should("be.visible");
// Configure app
cy.skipEditorPopover();
diff --git a/cypress-tests/cypress/e2e/happyPath/platform/ceTestcases/apps/appSlug.cy.js b/cypress-tests/cypress/e2e/happyPath/platform/ceTestcases/apps/appSlug.cy.js
index b3e3f975dc..b65d54eac6 100644
--- a/cypress-tests/cypress/e2e/happyPath/platform/ceTestcases/apps/appSlug.cy.js
+++ b/cypress-tests/cypress/e2e/happyPath/platform/ceTestcases/apps/appSlug.cy.js
@@ -27,17 +27,21 @@ describe("App Slug", () => {
});
it("Verify app slug cases in global settings", () => {
- cy.apiLogin();
const workspaceId = Cypress.env("workspaceId");
const appId = Cypress.env("appId");
+ const appUrl = `${host}/${Cypress.env("workspaceId")}/apps/${Cypress.env("appId")}/`;
- cy.visit("/my-workspace");
- cy.wait(1000);
+ cy.apiLogin();
+ cy.skipWalkthrough();
- cy.window({ log: false }).then((win) => {
- win.localStorage.setItem("walkthroughCompleted", "true");
+ cy.visit(appUrl);
+ cy.url().then((url) => {
+ if (url !== appUrl) {
+ cy.visit(appUrl);
+ }
});
- cy.visit(`/${Cypress.env("workspaceId")}/apps/${Cypress.env("appId")}/`);
+ cy.url().should("eq", appUrl);
+
cy.wait(1000);
cy.get(commonSelectors.leftSideBarSettingsButton).click();
diff --git a/cypress-tests/cypress/e2e/happyPath/platform/ceTestcases/apps/privateAndpublicApps.skip.js b/cypress-tests/cypress/e2e/happyPath/platform/ceTestcases/apps/privateAndpublicApps.cy.js
similarity index 96%
rename from cypress-tests/cypress/e2e/happyPath/platform/ceTestcases/apps/privateAndpublicApps.skip.js
rename to cypress-tests/cypress/e2e/happyPath/platform/ceTestcases/apps/privateAndpublicApps.cy.js
index fdd6acfe80..d6483fa400 100644
--- a/cypress-tests/cypress/e2e/happyPath/platform/ceTestcases/apps/privateAndpublicApps.skip.js
+++ b/cypress-tests/cypress/e2e/happyPath/platform/ceTestcases/apps/privateAndpublicApps.cy.js
@@ -78,11 +78,11 @@ describe("Private and Public apps", {
// Test private access
logout();
- cy.get(onboardingSelectors.signInButton, { timeout: 20000 }).should("be.visible");
cy.visitSlug({
actualUrl: `${Cypress.config("baseUrl")}/applications/${data.slug}`,
});
+
cy.get(onboardingSelectors.signInButton, { timeout: 20000 }).should("be.visible");
cy.wait(2000);
cy.appUILogin();
@@ -116,6 +116,9 @@ describe("Private and Public apps", {
inviteUserToWorkspace(data.firstName, data.email);
logout();
+ cy.visit("/");
+ cy.wait(2000);
+ cy.get(onboardingSelectors.signInButton, { timeout: 20000 }).should("be.visible");
// Test private access
cy.visitSlug({
@@ -141,6 +144,8 @@ describe("Private and Public apps", {
cy.wait(1000);
cy.apiMakeAppPublic();
logout();
+ cy.wait(1000);
+ cy.get(onboardingSelectors.signInButton, { timeout: 20000 }).should("be.visible");
cy.visitSlug({
actualUrl: `${Cypress.config("baseUrl")}/applications/${data.slug}`,
@@ -177,6 +182,9 @@ describe("Private and Public apps", {
cy.apiMakeAppPublic();
logout();
+ cy.wait(1000);
+ cy.get(onboardingSelectors.signInButton, { timeout: 20000 }).should("be.visible");
+
cy.visitSlug({
actualUrl: `${Cypress.config("baseUrl")}/applications/${data.slug}`,
});
@@ -229,6 +237,8 @@ describe("Private and Public apps", {
cy.get('[data-cy="viewer-page-logo"]').click();
logout();
+ cy.wait(1000);
+ cy.get(onboardingSelectors.signInButton, { timeout: 20000 }).should("be.visible");
// Setup new workspace and app
cy.defaultWorkspaceLogin();
diff --git a/cypress-tests/cypress/e2e/happyPath/platform/ceTestcases/apps/version.skip.js b/cypress-tests/cypress/e2e/happyPath/platform/ceTestcases/apps/version.cy.js
similarity index 98%
rename from cypress-tests/cypress/e2e/happyPath/platform/ceTestcases/apps/version.skip.js
rename to cypress-tests/cypress/e2e/happyPath/platform/ceTestcases/apps/version.cy.js
index f97962d910..c0f6064564 100644
--- a/cypress-tests/cypress/e2e/happyPath/platform/ceTestcases/apps/version.skip.js
+++ b/cypress-tests/cypress/e2e/happyPath/platform/ceTestcases/apps/version.cy.js
@@ -123,7 +123,7 @@ describe("App Version", () => {
releasedVersionAndVerify("v2");
});
- it.only("should verify version management with components and queries", () => {
+ it("should verify version management with components and queries", () => {
// Initial setup with component and datasource
cy.apiAddComponentToApp(
data.appName,
diff --git a/cypress-tests/cypress/e2e/happyPath/platform/ceTestcases/workspace/workspaceConstants.cy.js b/cypress-tests/cypress/e2e/happyPath/platform/ceTestcases/workspace/workspaceConstants.cy.js
index 4ccd01274a..17f0872846 100644
--- a/cypress-tests/cypress/e2e/happyPath/platform/ceTestcases/workspace/workspaceConstants.cy.js
+++ b/cypress-tests/cypress/e2e/happyPath/platform/ceTestcases/workspace/workspaceConstants.cy.js
@@ -80,8 +80,8 @@ describe("Workspace constants", () => {
addNewconstants("restapiHeaderKey", "customHeader");
addNewconstants("restapiHeaderValue", "key=value");
addNewconstants("deleteConst", "deleteconst");
- addNewconstants("gconst", "236");
- addNewconstants("gconstUrl", "http://34.66.166.236:4000/");
+ addNewconstants("gconst", "108");
+ addNewconstants("gconstUrl", "http://20.29.40.108:4000/");
addNewconstants("gconstEndpoint", "production");
// create secret constants
@@ -118,6 +118,7 @@ describe("Workspace constants", () => {
//Verify all static and datasource queries output in components
for (let i = 3; i <= 16; i++) {
+ cy.log("Verifying textinput" + i);
cy.get(commonWidgetSelector.draggableWidget(`textinput${i}`))
.verifyVisibleElement("have.value", "Production environment testing");
}
diff --git a/cypress-tests/cypress/e2e/happyPath/platform/commonTestcases/workspace/appCreate.skip.js b/cypress-tests/cypress/e2e/happyPath/platform/commonTestcases/workspace/appCreate.cy.js
similarity index 100%
rename from cypress-tests/cypress/e2e/happyPath/platform/commonTestcases/workspace/appCreate.skip.js
rename to cypress-tests/cypress/e2e/happyPath/platform/commonTestcases/workspace/appCreate.cy.js
diff --git a/cypress-tests/cypress/e2e/happyPath/platform/commonTestcases/workspace/dashboard.skip.js b/cypress-tests/cypress/e2e/happyPath/platform/commonTestcases/workspace/dashboard.cy.js
similarity index 63%
rename from cypress-tests/cypress/e2e/happyPath/platform/commonTestcases/workspace/dashboard.skip.js
rename to cypress-tests/cypress/e2e/happyPath/platform/commonTestcases/workspace/dashboard.cy.js
index 64a05d00c7..fb8e932973 100644
--- a/cypress-tests/cypress/e2e/happyPath/platform/commonTestcases/workspace/dashboard.skip.js
+++ b/cypress-tests/cypress/e2e/happyPath/platform/commonTestcases/workspace/dashboard.cy.js
@@ -44,6 +44,164 @@ describe("dashboard", () => {
cy.visit(`${data.workspaceSlug}`);
});
+ // it("Should verify app card elements and app card operations", () => {
+ // const customLayout = {
+ // desktop: { top: 100, left: 20 },
+ // mobile: { width: 8, height: 50 },
+ // };
+
+ // cy.apiCreateApp(data.appName);
+ // cy.visit(`${data.workspaceSlug}`);
+
+ // cy.wait(2000);
+ // cy.get(commonSelectors.appCreationDetails).should("be.visible");
+ // cy.get(commonSelectors.appCard(data.appName)).should("be.visible");
+ // cy.get(commonSelectors.appTitle(data.appName)).verifyVisibleElement(
+ // "have.text",
+ // data.appName
+ // );
+
+ // viewAppCardOptions(data.appName);
+ // cy.get(
+ // commonSelectors.appCardOptions(commonText.changeIconOption)
+ // ).verifyVisibleElement("have.text", commonText.changeIconOption);
+ // cy.get(
+ // commonSelectors.appCardOptions(commonText.addToFolderOption)
+ // ).verifyVisibleElement("have.text", commonText.addToFolderOption);
+ // cy.get(
+ // commonSelectors.appCardOptions(commonText.cloneAppOption)
+ // ).verifyVisibleElement("have.text", commonText.cloneAppOption);
+ // cy.get(
+ // commonSelectors.appCardOptions(commonText.exportAppOption)
+ // ).verifyVisibleElement("have.text", commonText.exportAppOption);
+ // cy.get(
+ // commonSelectors.appCardOptions(commonText.deleteAppOption)
+ // ).verifyVisibleElement("have.text", commonText.deleteAppOption);
+
+ // modifyAndVerifyAppCardIcon(data.appName);
+ // createFolder(data.folderName);
+
+ // viewAppCardOptions(data.appName);
+ // cy.get(
+ // commonSelectors.appCardOptions(commonText.addToFolderOption)
+ // ).click();
+ // verifyModal(
+ // dashboardText.addToFolderTitle,
+ // dashboardText.addToFolderButton,
+ // dashboardSelector.selectFolder
+ // );
+ // cy.get(dashboardSelector.moveAppText).verifyVisibleElement(
+ // "have.text",
+ // dashboardText.moveAppText(data.appName)
+ // );
+
+ // cy.get(dashboardSelector.selectFolder).click();
+ // cy.get(commonSelectors.folderList).contains(data.folderName).click();
+ // cy.get(dashboardSelector.addToFolderButton).click();
+ // cy.verifyToastMessage(
+ // commonSelectors.toastMessage,
+ // commonText.AddedToFolderToast,
+ // false
+ // );
+
+ // cy.get(dashboardSelector.folderName(data.folderName)).verifyVisibleElement(
+ // "have.text",
+ // dashboardText.folderName(`${data.folderName} (1)`)
+ // );
+
+ // cy.get(dashboardSelector.folderName(data.folderName)).click();
+ // cy.get(commonSelectors.appCard(data.appName))
+ // .contains(data.appName)
+ // .should("be.visible");
+
+ // viewAppCardOptions(data.appName);
+
+ // cy.get(commonSelectors.appCardOptions(commonText.removeFromFolderOption))
+ // .verifyVisibleElement("have.text", commonText.removeFromFolderOption)
+ // .click();
+ // verifyConfirmationModal(commonText.appRemovedFromFolderMessage);
+
+ // cancelModal(commonText.cancelButton);
+
+ // viewAppCardOptions(data.appName);
+ // cy.get(
+ // commonSelectors.appCardOptions(commonText.removeFromFolderOption)
+ // ).click();
+ // cy.get(commonSelectors.buttonSelector(commonText.modalYesButton)).click();
+ // cy.verifyToastMessage(
+ // commonSelectors.toastMessage,
+ // commonText.appRemovedFromFolderTaost,
+ // false
+ // );
+ // cy.get(commonSelectors.modalComponent).should("not.exist");
+ // cy.get(commonSelectors.empytyFolderImage).should("be.visible");
+ // cy.get(commonSelectors.emptyFolderText).verifyVisibleElement(
+ // "have.text",
+ // commonText.emptyFolderText
+ // );
+ // cy.get(commonSelectors.allApplicationsLink).click();
+ // deleteFolder(data.folderName);
+
+ // cy.get(commonSelectors.allApplicationsLink).click();
+
+ // cy.wait(1000);
+ // viewAppCardOptions(data.appName);
+ // cy.wait(2000);
+ // cy.get(commonSelectors.appCardOptions(commonText.exportAppOption)).click();
+ // cy.get(commonSelectors.exportAllButton).click();
+
+ // cy.exec("ls ./cypress/downloads/").then((result) => {
+ // const downloadedAppExportFileName = result.stdout.split("\n")[0];
+ // expect(downloadedAppExportFileName).to.contain.string("app");
+ // });
+
+ // viewAppCardOptions(data.appName);
+ // cy.get(commonSelectors.appCardOptions(commonText.cloneAppOption)).click();
+ // cy.get('[data-cy="clone-app"]').click();
+ // cy.get(".go3958317564")
+ // .should("be.visible")
+ // .and("have.text", dashboardText.appClonedToast);
+ // cy.wait(3000);
+
+ // cy.renameApp(data.cloneAppName);
+ // cy.apiAddComponentToApp(data.cloneAppName, "button", 25, 25);
+ // cy.backToApps();
+ // cy.wait("@appLibrary");
+ // cy.wait(1000);
+
+ // cy.get(commonSelectors.appCard(data.cloneAppName)).should("be.visible");
+
+ // cy.wait(1000);
+
+ // viewAppCardOptions(data.cloneAppName);
+ // cy.get(commonSelectors.deleteAppOption).click();
+ // cy.get(commonSelectors.modalMessage).verifyVisibleElement(
+ // "have.text",
+ // commonText.deleteAppModalMessage(data.cloneAppName)
+ // );
+ // cy.get(
+ // commonSelectors.buttonSelector(commonText.cancelButton)
+ // ).verifyVisibleElement("have.text", commonText.cancelButton);
+ // cy.get(
+ // commonSelectors.buttonSelector(commonText.modalYesButton)
+ // ).verifyVisibleElement("have.text", commonText.modalYesButton);
+ // cancelModal(commonText.cancelButton);
+
+ // viewAppCardOptions(data.cloneAppName);
+ // cy.get(commonSelectors.deleteAppOption).click();
+ // cy.get(commonSelectors.buttonSelector(commonText.modalYesButton)).click();
+ // cy.verifyToastMessage(
+ // commonSelectors.toastMessage,
+ // commonText.appDeletedToast,
+ // false
+ // );
+ // verifyAppDelete(data.cloneAppName);
+ // cy.wait("@appLibrary");
+
+ // cy.deleteApp(data.appName);
+ // verifyAppDelete(data.appName);
+ // });
+
it("should verify the elements on empty dashboard", () => {
cy.intercept("GET", "/api/metadata", {
body: {
@@ -171,181 +329,6 @@ describe("dashboard", () => {
verifyTooltip(dashboardSelector.modeToggle, "Mode");
});
- it.skip("Should verify app card elements and app card operations", () => {
- const customLayout = {
- desktop: { top: 100, left: 20 },
- mobile: { width: 8, height: 50 },
- };
-
- cy.apiCreateApp(data.appName);
- cy.openApp();
- cy.apiAddComponentToApp(data.appName, "text1", customLayout);
-
- cy.backToApps();
-
- cy.wait(500);
- cy.get(commonSelectors.appCard(data.appName))
- .parent()
- .within(() => {
- cy.get(commonSelectors.appCard(data.appName)).should("be.visible");
- cy.get(commonSelectors.appTitle(data.appName)).verifyVisibleElement(
- "have.text",
- data.appName
- );
- cy.get(commonSelectors.appCreationDetails).should("be.visible");
-
- //Add the edited details
- });
-
- viewAppCardOptions(data.appName);
- cy.get(
- commonSelectors.appCardOptions(commonText.changeIconOption)
- ).verifyVisibleElement("have.text", commonText.changeIconOption);
- cy.get(
- commonSelectors.appCardOptions(commonText.addToFolderOption)
- ).verifyVisibleElement("have.text", commonText.addToFolderOption);
- cy.get(
- commonSelectors.appCardOptions(commonText.cloneAppOption)
- ).verifyVisibleElement("have.text", commonText.cloneAppOption);
- cy.get(
- commonSelectors.appCardOptions(commonText.exportAppOption)
- ).verifyVisibleElement("have.text", commonText.exportAppOption);
- cy.get(
- commonSelectors.appCardOptions(commonText.deleteAppOption)
- ).verifyVisibleElement("have.text", commonText.deleteAppOption);
-
- modifyAndVerifyAppCardIcon(data.appName);
- createFolder(data.folderName);
-
- viewAppCardOptions(data.appName);
- cy.get(
- commonSelectors.appCardOptions(commonText.addToFolderOption)
- ).click();
- verifyModal(
- dashboardText.addToFolderTitle,
- dashboardText.addToFolderButton,
- dashboardSelector.selectFolder
- );
- cy.get(dashboardSelector.moveAppText).verifyVisibleElement(
- "have.text",
- dashboardText.moveAppText(data.appName)
- );
-
- cy.get(dashboardSelector.selectFolder).click();
- cy.get(commonSelectors.folderList).contains(data.folderName).click();
- cy.get(dashboardSelector.addToFolderButton).click();
- cy.verifyToastMessage(
- commonSelectors.toastMessage,
- commonText.AddedToFolderToast
- );
-
- cy.get(dashboardSelector.folderName(data.folderName)).verifyVisibleElement(
- "have.text",
- dashboardText.folderName(`${data.folderName} (1)`)
- );
-
- cy.get(dashboardSelector.folderName(data.folderName)).click();
- cy.get(commonSelectors.appCard(data.appName))
- .contains(data.appName)
- .should("be.visible");
-
- cy.wait(2000);
- viewAppCardOptions(data.appName);
-
- cy.get(commonSelectors.appCardOptions(commonText.removeFromFolderOption))
- .verifyVisibleElement("have.text", commonText.removeFromFolderOption)
- .click();
- verifyConfirmationModal(commonText.appRemovedFromFolderMessage);
-
- cancelModal(commonText.cancelButton);
-
- cy.wait(3000);
- viewAppCardOptions(data.appName);
- cy.get(
- commonSelectors.appCardOptions(commonText.removeFromFolderOption)
- ).click();
- cy.get(commonSelectors.buttonSelector(commonText.modalYesButton)).click();
- cy.verifyToastMessage(
- commonSelectors.toastMessage,
- commonText.appRemovedFromFolderTaost
- );
- cy.get(commonSelectors.modalComponent).should("not.exist");
- cy.get(commonSelectors.empytyFolderImage).should("be.visible");
- cy.get(commonSelectors.emptyFolderText).verifyVisibleElement(
- "have.text",
- commonText.emptyFolderText
- );
- cy.get(commonSelectors.allApplicationsLink).click();
- deleteFolder(data.folderName);
-
- cy.get(commonSelectors.allApplicationsLink).click();
-
- cy.wait(3000);
- viewAppCardOptions(data.appName);
- cy.get(commonSelectors.appCardOptions(commonText.cloneAppOption)).click();
- cy.get('[data-cy="clone-app"]').click();
- cy.get(".go3958317564")
- .should("be.visible")
- .and("have.text", dashboardText.appClonedToast);
- cy.wait(3000);
- cy.renameApp(data.cloneAppName);
- cy.apiAddComponentToApp(data.cloneAppName, "button", 25, 25);
- cy.backToApps();
- cy.wait("@appLibrary");
- cy.wait(1000);
- cy.reloadAppForTheElement(data.cloneAppName);
-
- cy.get(commonSelectors.appCard(data.cloneAppName)).should("be.visible");
-
- cy.get(commonSelectors.globalDataSourceIcon).click();
- cy.get(commonSelectors.dashboardIcon).click();
- cy.wait(3000);
- cy.reloadAppForTheElement(data.cloneAppName);
- viewAppCardOptions(data.cloneAppName);
- cy.get(commonSelectors.appCardOptions(commonText.exportAppOption)).click();
- cy.get(commonSelectors.exportAllButton).click();
-
- cy.exec("ls ./cypress/downloads/").then((result) => {
- const downloadedAppExportFileName = result.stdout.split("\n")[0];
- expect(downloadedAppExportFileName).to.contain.string("app");
- });
-
- cy.wait(3000);
- cy.reloadAppForTheElement(data.cloneAppName);
- viewAppCardOptions(data.cloneAppName);
- cy.get(commonSelectors.deleteAppOption).click();
- cy.get(commonSelectors.modalMessage).verifyVisibleElement(
- "have.text",
- commonText.deleteAppModalMessage(data.cloneAppName)
- );
- cy.get(
- commonSelectors.buttonSelector(commonText.cancelButton)
- ).verifyVisibleElement("have.text", commonText.cancelButton);
- cy.get(
- commonSelectors.buttonSelector(commonText.modalYesButton)
- ).verifyVisibleElement("have.text", commonText.modalYesButton);
- cancelModal(commonText.cancelButton);
-
- cy.wait(3000);
- cy.reloadAppForTheElement(data.cloneAppName);
- viewAppCardOptions(data.cloneAppName);
- cy.get(commonSelectors.deleteAppOption).click();
- cy.get(commonSelectors.buttonSelector(commonText.modalYesButton)).click();
- cy.verifyToastMessage(
- commonSelectors.toastMessage,
- commonText.appDeletedToast
- );
- verifyAppDelete(data.cloneAppName);
- cy.wait("@appLibrary");
-
- cy.deleteApp(data.appName);
- cy.verifyToastMessage(
- commonSelectors.toastMessage,
- commonText.appDeletedToast
- );
- verifyAppDelete(data.appName);
- });
-
it("Should verify the app CRUD operation", () => {
const customLayout = {
desktop: { top: 100, left: 20 },
@@ -369,10 +352,7 @@ describe("dashboard", () => {
cy.wait("@appLibrary");
cy.deleteApp(data.appName);
- cy.verifyToastMessage(
- commonSelectors.toastMessage,
- commonText.appDeletedToast
- );
+
verifyAppDelete(data.appName);
});
@@ -493,10 +473,7 @@ describe("dashboard", () => {
cy.get(commonSelectors.allApplicationsLink).click();
cy.deleteApp(data.appName);
- cy.verifyToastMessage(
- commonSelectors.toastMessage,
- commonText.appDeletedToast
- );
+
verifyAppDelete(data.appName);
logout();
});
diff --git a/cypress-tests/cypress/e2e/happyPath/platform/commonTestcases/workspace/groups/basicPermissions.cy.js b/cypress-tests/cypress/e2e/happyPath/platform/commonTestcases/workspace/groups/basicPermissions.cy.js
index d69cf77689..96b87dd9b7 100644
--- a/cypress-tests/cypress/e2e/happyPath/platform/commonTestcases/workspace/groups/basicPermissions.cy.js
+++ b/cypress-tests/cypress/e2e/happyPath/platform/commonTestcases/workspace/groups/basicPermissions.cy.js
@@ -78,14 +78,16 @@ describe("Manage Groups", () => {
cy.createApp(data.appName);
cy.verifyToastMessage(
commonSelectors.toastMessage,
- commonText.appCreatedToast
+ commonText.appCreatedToast,
+ false
);
cy.backToApps();
cy.deleteApp(data.appName);
cy.verifyToastMessage(
commonSelectors.toastMessage,
- commonText.appDeletedToast
+ commonText.appDeletedToast,
+ false
);
// Folder operations
@@ -115,7 +117,8 @@ describe("Manage Groups", () => {
cy.get(commonSelectors.cloneAppButton).click();
cy.verifyToastMessage(
commonSelectors.toastMessage,
- dashboardText.appClonedToast
+ dashboardText.appClonedToast,
+ false
);
// cy.get(commonSelectors.cancelButton).click();
cy.apiLogout();
@@ -177,14 +180,16 @@ describe("Manage Groups", () => {
cy.createApp(data.appName);
cy.verifyToastMessage(
commonSelectors.toastMessage,
- commonText.appCreatedToast
+ commonText.appCreatedToast,
+ false
);
cy.backToApps();
cy.deleteApp(data.appName);
cy.verifyToastMessage(
commonSelectors.toastMessage,
- commonText.appDeletedToast
+ commonText.appDeletedToast,
+ false
);
// Folder operations
diff --git a/cypress-tests/cypress/e2e/happyPath/platform/commonTestcases/workspace/groups/permissions.cy.js b/cypress-tests/cypress/e2e/happyPath/platform/commonTestcases/workspace/groups/permissions.cy.js
index 22b6c6b6a5..bfa5806939 100644
--- a/cypress-tests/cypress/e2e/happyPath/platform/commonTestcases/workspace/groups/permissions.cy.js
+++ b/cypress-tests/cypress/e2e/happyPath/platform/commonTestcases/workspace/groups/permissions.cy.js
@@ -204,10 +204,7 @@ describe("Manage Groups", () => {
cy.wait(2500);
cy.deleteApp(data.appName);
- cy.verifyToastMessage(
- commonSelectors.toastMessage,
- commonText.appDeletedToast
- );
+
// Folder operations
createFolder(data.folderName);
diff --git a/cypress-tests/cypress/e2e/happyPath/platform/externalApi/apiUsers.cy.js b/cypress-tests/cypress/e2e/happyPath/platform/eeTestcases/externalApi/apiUsers.cy.js
similarity index 100%
rename from cypress-tests/cypress/e2e/happyPath/platform/externalApi/apiUsers.cy.js
rename to cypress-tests/cypress/e2e/happyPath/platform/eeTestcases/externalApi/apiUsers.cy.js
diff --git a/cypress-tests/cypress/e2e/happyPath/platform/externalApi/appImportAndExportAPI.cy.js b/cypress-tests/cypress/e2e/happyPath/platform/eeTestcases/externalApi/appImportAndExportAPI.cy.js
similarity index 100%
rename from cypress-tests/cypress/e2e/happyPath/platform/externalApi/appImportAndExportAPI.cy.js
rename to cypress-tests/cypress/e2e/happyPath/platform/eeTestcases/externalApi/appImportAndExportAPI.cy.js
diff --git a/cypress-tests/cypress/e2e/happyPath/platform/ceTestcases/userFlow/firstUserOnboarding.cy.js b/cypress-tests/cypress/e2e/happyPath/platform/firstUser/firstUserOnboarding.cy.js
similarity index 100%
rename from cypress-tests/cypress/e2e/happyPath/platform/ceTestcases/userFlow/firstUserOnboarding.cy.js
rename to cypress-tests/cypress/e2e/happyPath/platform/firstUser/firstUserOnboarding.cy.js
diff --git a/cypress-tests/cypress/fixtures/templates/invalid_app.json b/cypress-tests/cypress/fixtures/templates/invalid_app.json
index e2ebed4bce..edb4c882a3 100644
--- a/cypress-tests/cypress/fixtures/templates/invalid_app.json
+++ b/cypress-tests/cypress/fixtures/templates/invalid_app.json
@@ -2127,7 +2127,7 @@
"encrypted": false
},
"host": {
- "value": "35.238.9.114",
+ "value": "9.234.17.31",
"encrypted": false
},
"port": {
diff --git a/cypress-tests/cypress/fixtures/templates/one_version.json b/cypress-tests/cypress/fixtures/templates/one_version.json
index 08dad1d1c0..a93a35900e 100644
--- a/cypress-tests/cypress/fixtures/templates/one_version.json
+++ b/cypress-tests/cypress/fixtures/templates/one_version.json
@@ -585,7 +585,7 @@
"encrypted": false
},
"host": {
- "value": "35.238.9.114",
+ "value": "9.234.17.31",
"encrypted": false
},
"port": {
diff --git a/cypress-tests/cypress/fixtures/templates/three-versions.json b/cypress-tests/cypress/fixtures/templates/three-versions.json
index bff312ac54..715f5e68cc 100644
--- a/cypress-tests/cypress/fixtures/templates/three-versions.json
+++ b/cypress-tests/cypress/fixtures/templates/three-versions.json
@@ -1862,7 +1862,7 @@
"encrypted": false
},
"host": {
- "value": "35.238.9.114",
+ "value": "9.234.17.31",
"encrypted": false
},
"port": {
diff --git a/cypress-tests/cypress/fixtures/templates/workspace_constants.json b/cypress-tests/cypress/fixtures/templates/workspace_constants.json
index c5c015e832..074e6e408b 100644
--- a/cypress-tests/cypress/fixtures/templates/workspace_constants.json
+++ b/cypress-tests/cypress/fixtures/templates/workspace_constants.json
@@ -2766,7 +2766,7 @@
"name": "restapiStaticUrlG",
"options": {
"method": "get",
- "url": "http://34.66.166.236:4000/{{constants.gconstEndpoint}}",
+ "url": "http://20.29.40.108:4000/{{constants.gconstEndpoint}}",
"url_params": [
[
"",
@@ -2814,7 +2814,7 @@
"name": "restapiUrlS",
"options": {
"method": "get",
- "url": "http://34.66.166.236:4000/{{secrets.sconstEndpoint}}",
+ "url": "http://20.29.40.108:4000/{{secrets.sconstEndpoint}}",
"url_params": [
[
"",
@@ -2908,7 +2908,7 @@
"name": "restapiUrlGS",
"options": {
"method": "get",
- "url": "http://34.66.166.{{constants.gconst}}{{secrets.sconst}}/production",
+ "url": "http://20.29.40.{{constants.gconst}}{{secrets.sconst}}/production",
"url_params": [
[
"",
@@ -3419,7 +3419,7 @@
"environmentId": "dab04b8d-7d1a-468a-b219-b2e1d0169d8c",
"options": {
"url": {
- "value": "http://34.66.166.236:4000/{{constants.gconstEndpoint}}",
+ "value": "http://20.29.40.108:4000/{{constants.gconstEndpoint}}",
"encrypted": false
},
"auth_type": {
@@ -3540,7 +3540,7 @@
"environmentId": "dab04b8d-7d1a-468a-b219-b2e1d0169d8c",
"options": {
"url": {
- "value": "http://34.66.166.236:4000/{{secrets.sconstEndpoint}}",
+ "value": "http://20.29.40.108:4000/{{secrets.sconstEndpoint}}",
"encrypted": false
},
"auth_type": {
@@ -3782,7 +3782,7 @@
"environmentId": "dab04b8d-7d1a-468a-b219-b2e1d0169d8c",
"options": {
"url": {
- "value": "http://34.66.166.{{constants.gconst}}{{secrets.sconst}}/production",
+ "value": "http://20.29.40.{{constants.gconst}}{{secrets.sconst}}/production",
"encrypted": false
},
"auth_type": {
diff --git a/cypress-tests/cypress/support/utils/common.js b/cypress-tests/cypress/support/utils/common.js
index 0f54553472..7a8c55ffcf 100644
--- a/cypress-tests/cypress/support/utils/common.js
+++ b/cypress-tests/cypress/support/utils/common.js
@@ -101,11 +101,14 @@ export const navigateToAppEditor = (appName) => {
export const viewAppCardOptions = (appName) => {
cy.wait(1000);
- cy.reloadAppForTheElement(appName);
+ cy.get(commonSelectors.appCard(appName))
+ .realHover()
+ .find(commonSelectors.appCardOptionsButton)
+ .realHover()
cy.contains("div", appName)
.parent()
.within(() => {
- cy.get(commonSelectors.appCardOptionsButton).invoke("click");
+ cy.get(commonSelectors.appCardOptionsButton).click();
});
};
@@ -185,8 +188,9 @@ export const searchUser = (email) => {
};
export const selectAppCardOption = (appName, appCardOption) => {
+ cy.wait(1000);
viewAppCardOptions(appName);
- cy.get(appCardOption).should("be.visible").click({ force: true });
+ cy.get(appCardOption).should("be.visible").click();
};
export const navigateToDatabase = () => {
diff --git a/cypress-tests/cypress/support/utils/dashboard.js b/cypress-tests/cypress/support/utils/dashboard.js
index 0809909297..dbc090735b 100644
--- a/cypress-tests/cypress/support/utils/dashboard.js
+++ b/cypress-tests/cypress/support/utils/dashboard.js
@@ -53,6 +53,8 @@ export const modifyAndVerifyAppCardIcon = (appName) => {
};
export const verifyAppDelete = (appName) => {
+ cy.get("body").should("exist").and("be.visible");
+ cy.get('[data-cy="dashboard-section-header"]').should("be.visible");
cy.get("body").then(($title) => {
if (!$title.text().includes(commonText.introductionMessage)) {
cy.clearAndType(commonSelectors.homePageSearchBar, appName);
diff --git a/cypress-tests/cypress/support/utils/dataSource.js b/cypress-tests/cypress/support/utils/dataSource.js
index 6f17004409..4c1446636e 100644
--- a/cypress-tests/cypress/support/utils/dataSource.js
+++ b/cypress-tests/cypress/support/utils/dataSource.js
@@ -239,7 +239,8 @@ export const createRestAPIQuery = (
key = "",
value = "",
url = "",
- run = true
+ run = true,
+ kind = "restapi"
) => {
cy.getCookie("tj_auth_token").then((cookie) => {
const headers = {
@@ -247,7 +248,6 @@ export const createRestAPIQuery = (
Cookie: `tj_auth_token=${cookie.value}`,
};
- cy.log(Cypress.env("appId"));
cy.request({
method: "GET",
url: `${Cypress.env("server_host")}/api/apps/${Cypress.env("appId")}`,
@@ -255,13 +255,13 @@ export const createRestAPIQuery = (
}).then((response) => {
const editingVersionId = response.body.editing_version.id;
- const data_source_id = Cypress.env(`${dsName}-id`);
+ const data_source_id = Cypress.env(kind);
const requestBody = {
app_id: Cypress.env("appId"),
app_version_id: editingVersionId,
name: queryName,
- kind: "restapi",
+ kind: kind,
options: {
method: "get",
url: url,
diff --git a/cypress-tests/cypress/support/utils/restAPI.js b/cypress-tests/cypress/support/utils/restAPI.js
index f5a44e3fd5..2dfc225a65 100644
--- a/cypress-tests/cypress/support/utils/restAPI.js
+++ b/cypress-tests/cypress/support/utils/restAPI.js
@@ -18,79 +18,97 @@ export const createAndRunRestAPIQuery = (
method: "GET",
url: `${Cypress.env("server_host")}/api/apps/${Cypress.env("appId")}`,
headers,
- }).then((response) => {
- const editingVersionId = response.body.editing_version.id;
- const data_source_id = Cypress.env(`${dsName}-id`);
- const useJsonBody =
- ["POST", "PATCH", "PUT"].includes(method.toUpperCase()) &&
- jsonBody !== null;
-
- const queryOptions = {
- method: method.toLowerCase(),
- url: url + urlSuffix,
- url_params: [["", ""]],
- headers: headersList.length ? headersList : [["", ""]],
- body: !useJsonBody && bodyList.length ? bodyList : [["", ""]],
- json_body: useJsonBody ? jsonBody : null,
- body_toggle: useJsonBody,
- runOnPageLoad: run,
- transformationLanguage: "javascript",
- enableTransformation: false,
- };
-
- const requestBody = {
- app_id: Cypress.env("appId"),
- app_version_id: editingVersionId,
- name: queryName,
- kind: "restapi",
- options: queryOptions,
- data_source_id,
- plugin_id: null,
- };
+ }).then((appResponse) => {
+ const currentEnvironmentId = appResponse.body.editorEnvironment.id;
+ const editingVersionId = appResponse.body.editing_version.id;
cy.request({
- method: "POST",
- url: `${Cypress.env("server_host")}/api/data-queries/data-sources/${data_source_id}/versions/${editingVersionId}`,
+ method: "GET",
+ url: `${Cypress.env("server_host")}/api/data-sources/${Cypress.env("workspaceId")}/environments/${currentEnvironmentId}/versions/${editingVersionId}`,
headers,
- body: requestBody,
- }).then((createResponse) => {
- expect(createResponse.status).to.equal(201);
- const queryId = createResponse.body.id;
- cy.log("Query created successfully:", queryId);
+ }).then((dsResponse) => {
+ expect(dsResponse.status).to.eq(200);
- const createdOptions = createResponse.body.options;
- expect(createdOptions.method).to.equal(queryOptions.method);
- expect(createdOptions.url).to.equal(queryOptions.url);
- expect(createdOptions.headers).to.deep.equal(queryOptions.headers);
+ const dataSource = dsResponse.body.data_sources.find(
+ (ds) => ds.name === dsName
+ );
- if (useJsonBody) {
- expect(createdOptions.json_body).to.deep.equal(
- queryOptions.json_body
- );
- expect(createdOptions.body_toggle).to.equal(true);
- } else {
- expect(createdOptions.body).to.deep.equal(queryOptions.body);
- expect(createdOptions.body_toggle).to.equal(false);
+ if (!dataSource) {
+ throw new Error(`Data source '${dsName}' not found.`);
}
- expect(createdOptions.runOnPageLoad).to.equal(run);
- cy.log("Metadata verified successfully");
- if (run) {
- cy.request({
- method: "POST",
- url: `${Cypress.env("server_host")}/api/data-queries/${queryId}/run`,
- headers,
- }).then((runResponse) => {
- expect([200, 201]).to.include(runResponse.status);
- cy.log("Query executed successfully:", runResponse.body);
- if (runResponse.body?.data.id) {
- cy.writeFile("cypress/fixtures/restAPI/storedId.json", {
- id: runResponse.body.data.id,
- });
- cy.log("Stored ID:", runResponse.body.data.id);
- }
- });
- }
+ const data_source_id = dataSource.id;
+ const useJsonBody =
+ ["POST", "PATCH", "PUT"].includes(method.toUpperCase()) &&
+ jsonBody !== null;
+
+ const queryOptions = {
+ method: method.toLowerCase(),
+ url: url + urlSuffix,
+ url_params: [["", ""]],
+ headers: headersList.length ? headersList : [["", ""]],
+ body: !useJsonBody && bodyList.length ? bodyList : [["", ""]],
+ json_body: useJsonBody ? jsonBody : null,
+ body_toggle: useJsonBody,
+ runOnPageLoad: run,
+ transformationLanguage: "javascript",
+ enableTransformation: false,
+ };
+
+ const requestBody = {
+ app_id: Cypress.env("appId"),
+ app_version_id: editingVersionId,
+ name: queryName,
+ kind: "restapi",
+ options: queryOptions,
+ data_source_id,
+ plugin_id: null,
+ };
+
+ cy.request({
+ method: "POST",
+ url: `${Cypress.env("server_host")}/api/data-queries/data-sources/${data_source_id}/versions/${editingVersionId}`,
+ headers,
+ body: requestBody,
+ }).then((createResponse) => {
+ expect(createResponse.status).to.equal(201);
+ const queryId = createResponse.body.id;
+ cy.log("Query created successfully:", queryId);
+
+ const createdOptions = createResponse.body.options;
+ expect(createdOptions.method).to.equal(queryOptions.method);
+ expect(createdOptions.url).to.equal(queryOptions.url);
+ expect(createdOptions.headers).to.deep.equal(queryOptions.headers);
+
+ if (useJsonBody) {
+ expect(createdOptions.json_body).to.deep.equal(
+ queryOptions.json_body
+ );
+ expect(createdOptions.body_toggle).to.equal(true);
+ } else {
+ expect(createdOptions.body).to.deep.equal(queryOptions.body);
+ expect(createdOptions.body_toggle).to.equal(false);
+ }
+
+ expect(createdOptions.runOnPageLoad).to.equal(run);
+ cy.log("Metadata verified successfully");
+ if (run) {
+ cy.request({
+ method: "POST",
+ url: `${Cypress.env("server_host")}/api/data-queries/${queryId}/run`,
+ headers,
+ }).then((runResponse) => {
+ expect([200, 201]).to.include(runResponse.status);
+ cy.log("Query executed successfully:", runResponse.body);
+ if (runResponse.body?.data.id) {
+ cy.writeFile("cypress/fixtures/restAPI/storedId.json", {
+ id: runResponse.body.data.id,
+ });
+ cy.log("Stored ID:", runResponse.body.data.id);
+ }
+ });
+ }
+ });
});
});
});
diff --git a/cypress-tests/cypress/support/utils/version.js b/cypress-tests/cypress/support/utils/version.js
index 77b7d8b0e8..b15d84f45b 100644
--- a/cypress-tests/cypress/support/utils/version.js
+++ b/cypress-tests/cypress/support/utils/version.js
@@ -115,8 +115,8 @@ export const verifyDuplicateVersion = (newVersion = [], version) => {
cy.get(appVersionSelectors.createNewVersionButton).click();
cy.verifyToastMessage(
commonSelectors.toastMessage,
- // appVersionText.versionNameAlreadyExists
- "Already exists!"
+ appVersionText.versionNameAlreadyExists
+ // "Already exists!"
);
};
diff --git a/docker/ce-preview.Dockerfile b/docker/ce-preview.Dockerfile
index d71e6c1dbc..0c481e13a3 100644
--- a/docker/ce-preview.Dockerfile
+++ b/docker/ce-preview.Dockerfile
@@ -38,7 +38,7 @@ COPY --from=postgrest/postgrest:v12.2.0 /bin/postgrest /bin
ENV NODE_ENV=production
ENV NODE_OPTIONS="--max-old-space-size=4096"
-RUN apt-get update && apt-get install -y postgresql-client freetds-dev libaio1 wget supervisor
+RUN apt-get update && apt-get install -y freetds-dev libaio1 wget supervisor
# Install Instantclient Basic Light Oracle and Dependencies
WORKDIR /opt/oracle
@@ -54,9 +54,6 @@ ENV LD_LIBRARY_PATH="/opt/oracle/instantclient_11_2:/opt/oracle/instantclient_21
WORKDIR /
-RUN mkdir -p /app /var/log/supervisor
-COPY /deploy/docker/supervisord.conf /etc/supervisor/conf.d/supervisord.conf
-
# copy npm scripts
COPY --from=builder /app/package.json ./app/package.json
# copy plugins dependencies
@@ -77,32 +74,64 @@ COPY --from=builder /app/server/dist ./app/server/dist
WORKDIR /app
+# Install PostgreSQL
USER root
RUN wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | apt-key add -
RUN echo "deb http://apt.postgresql.org/pub/repos/apt/ bullseye-pgdg main" | tee /etc/apt/sources.list.d/pgdg.list
-RUN echo "deb http://deb.debian.org/debian"
RUN apt update && apt -y install postgresql-13 postgresql-client-13 supervisor
-USER postgres
-RUN service postgresql start && \
- psql -c "create role tooljet with login superuser password 'postgres';"
-USER root
+
+# Explicitly create PG main directory with correct ownership
+RUN mkdir -p /var/lib/postgresql/13/main && \
+ chown -R postgres:postgres /var/lib/postgresql
+
+RUN mkdir -p /var/log/supervisor /var/run/postgresql && \
+ chown -R postgres:postgres /var/run/postgresql /var/log/supervisor
+
+# Remove existing data and create directory with proper ownership
+RUN rm -rf /var/lib/postgresql/13/main && \
+ mkdir -p /var/lib/postgresql/13/main && \
+ chown -R postgres:postgres /var/lib/postgresql
+
+# Initialize PostgreSQL
+RUN su - postgres -c "/usr/lib/postgresql/13/bin/initdb -D /var/lib/postgresql/13/main"
+
+# Configure Supervisor to manage PostgREST, ToolJet, and Redis
+RUN echo "[supervisord] \n" \
+ "nodaemon=true \n" \
+ "user=root \n" \
+ "\n" \
+ "[program:postgrest] \n" \
+ "command=/bin/postgrest \n" \
+ "autostart=true \n" \
+ "autorestart=true \n" \
+ "\n" \
+ "[program:tooljet] \n" \
+ "user=root \n" \
+ "command=/bin/bash -c '/app/server/scripts/boot.sh' \n" \
+ "autostart=true \n" \
+ "autorestart=true \n" \
+ "stderr_logfile=/dev/stdout \n" \
+ "stderr_logfile_maxbytes=0 \n" \
+ "stdout_logfile=/dev/stdout \n" \
+ "stdout_logfile_maxbytes=0 \n" | sed 's/ //' > /etc/supervisor/conf.d/supervisord.conf
# ENV defaults
ENV TOOLJET_HOST=http://localhost \
+ PORT=80 \
NODE_ENV=production \
LOCKBOX_MASTER_KEY=replace_with_lockbox_master_key \
SECRET_KEY_BASE=replace_with_secret_key_base \
PG_DB=tooljet_production \
- PG_USER=tooljet \
+ PG_USER=postgres \
PG_PASS=postgres \
PG_HOST=localhost \
ENABLE_TOOLJET_DB=true \
TOOLJET_DB_HOST=localhost \
- TOOLJET_DB_USER=tooljet \
+ TOOLJET_DB_USER=postgres \
TOOLJET_DB_PASS=postgres \
TOOLJET_DB=tooljet_db \
PGRST_HOST=http://localhost:3000 \
- PGRST_DB_URI=postgres://tooljet:postgres@localhost/tooljet_db \
+ PGRST_DB_URI=postgres://postgres:postgres@localhost/tooljet_db \
PGRST_JWT_SECRET=r9iMKoe5CRMgvJBBtp4HrqN7QiPpUToj \
PGRST_DB_PRE_CONFIG=postgrest.pre_config \
ORM_LOGGING=true \
@@ -110,4 +139,7 @@ ENV TOOLJET_HOST=http://localhost \
HOME=/home/appuser \
TERM=xterm
-CMD ["/usr/bin/supervisord"]
+
+RUN chmod +x ./server/scripts/preview.sh
+# Set the entrypoint
+ENTRYPOINT ["./server/scripts/preview.sh"]
diff --git a/docker/ee/ee-preview.Dockerfile b/docker/ee/ee-preview.Dockerfile
index 91e0864bd0..77ecbff29d 100644
--- a/docker/ee/ee-preview.Dockerfile
+++ b/docker/ee/ee-preview.Dockerfile
@@ -9,7 +9,7 @@ WORKDIR /app
ARG CUSTOM_GITHUB_TOKEN
ARG BRANCH_NAME
-# Clone and checkout the frontend repository
+# Clone and checkout the frontend repositorys
RUN git config --global url."https://x-access-token:${CUSTOM_GITHUB_TOKEN}@github.com/".insteadOf "https://github.com/"
RUN git config --global http.version HTTP/1.1
@@ -66,7 +66,7 @@ COPY --from=postgrest/postgrest:v12.2.0 /bin/postgrest /bin
ENV NODE_ENV=production
ENV TOOLJET_EDITION=ee
ENV NODE_OPTIONS="--max-old-space-size=4096"
-RUN apt-get update && apt-get install -y postgresql-client freetds-dev libaio1 wget supervisor
+RUN apt-get update && apt-get install -y freetds-dev libaio1 wget supervisor
# Install Instantclient Basic Light Oracle and Dependencies
WORKDIR /opt/oracle
@@ -82,9 +82,6 @@ ENV LD_LIBRARY_PATH="/opt/oracle/instantclient_11_2:/opt/oracle/instantclient_21
WORKDIR /
-RUN mkdir -p /app /var/log/supervisor
-COPY /deploy/docker/supervisord.conf /etc/supervisor/conf.d/supervisord.conf
-
# copy npm scripts
COPY --from=builder /app/package.json ./app/package.json
# copy plugins dependencies
@@ -106,38 +103,73 @@ COPY --from=builder /app/server/dist ./app/server/dist
WORKDIR /app
-# ENV defaults
+# Install PostgreSQL
USER root
RUN wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | apt-key add -
RUN echo "deb http://apt.postgresql.org/pub/repos/apt/ bullseye-pgdg main" | tee /etc/apt/sources.list.d/pgdg.list
-RUN echo "deb http://deb.debian.org/debian"
-RUN apt update && apt -y install postgresql-13 postgresql-client-13 supervisor
-USER postgres
-RUN service postgresql start && \
- psql -c "create role tooljet with login superuser password 'postgres';"
-USER root
+RUN apt update && apt -y install postgresql-13 postgresql-client-13 supervisor --fix-missing
+
+
+# Explicitly create PG main directory with correct ownership
+RUN mkdir -p /var/lib/postgresql/13/main && \
+ chown -R postgres:postgres /var/lib/postgresql
+
+RUN mkdir -p /var/log/supervisor /var/run/postgresql && \
+ chown -R postgres:postgres /var/run/postgresql /var/log/supervisor
+
+# Remove existing data and create directory with proper ownership
+RUN rm -rf /var/lib/postgresql/13/main && \
+ mkdir -p /var/lib/postgresql/13/main && \
+ chown -R postgres:postgres /var/lib/postgresql
+
+# Initialize PostgreSQL
+RUN su - postgres -c "/usr/lib/postgresql/13/bin/initdb -D /var/lib/postgresql/13/main"
+
+# Configure Supervisor to manage PostgREST, ToolJet, and Redis
+RUN echo "[supervisord] \n" \
+ "nodaemon=true \n" \
+ "user=root \n" \
+ "\n" \
+ "[program:postgrest] \n" \
+ "command=/bin/postgrest \n" \
+ "autostart=true \n" \
+ "autorestart=true \n" \
+ "\n" \
+ "[program:tooljet] \n" \
+ "user=root \n" \
+ "command=/bin/bash -c '/app/server/scripts/boot.sh' \n" \
+ "autostart=true \n" \
+ "autorestart=true \n" \
+ "stderr_logfile=/dev/stdout \n" \
+ "stderr_logfile_maxbytes=0 \n" \
+ "stdout_logfile=/dev/stdout \n" \
+ "stdout_logfile_maxbytes=0 \n" | sed 's/ //' > /etc/supervisor/conf.d/supervisord.conf
# ENV defaults
ENV TOOLJET_HOST=http://localhost \
+ PORT=80 \
NODE_ENV=production \
LOCKBOX_MASTER_KEY=replace_with_lockbox_master_key \
SECRET_KEY_BASE=replace_with_secret_key_base \
PG_DB=tooljet_production \
- PG_USER=tooljet \
+ PG_USER=postgres \
PG_PASS=postgres \
PG_HOST=localhost \
ENABLE_TOOLJET_DB=true \
TOOLJET_DB_HOST=localhost \
- TOOLJET_DB_USER=tooljet \
+ TOOLJET_DB_USER=postgres \
TOOLJET_DB_PASS=postgres \
TOOLJET_DB=tooljet_db \
PGRST_HOST=http://localhost:3000 \
- PGRST_DB_URI=postgres://tooljet:postgres@localhost/tooljet_db \
+ PGRST_DB_URI=postgres://postgres:postgres@localhost/tooljet_db \
PGRST_JWT_SECRET=r9iMKoe5CRMgvJBBtp4HrqN7QiPpUToj \
PGRST_DB_PRE_CONFIG=postgrest.pre_config \
ORM_LOGGING=true \
DEPLOYMENT_PLATFORM=docker:local \
- REDIS_PASS= \
+ HOME=/home/appuser \
TERM=xterm
-CMD ["/usr/bin/supervisord"]
+
+RUN chmod +x ./server/scripts/preview.sh
+# Set the entrypoint
+ENTRYPOINT ["./server/scripts/preview.sh"]
diff --git a/frontend/.version b/frontend/.version
index afad818663..171a6a93d6 100644
--- a/frontend/.version
+++ b/frontend/.version
@@ -1 +1 @@
-3.11.0
+3.12.1
diff --git a/frontend/ee b/frontend/ee
index 518f3334b1..1b77a55670 160000
--- a/frontend/ee
+++ b/frontend/ee
@@ -1 +1 @@
-Subproject commit 518f3334b12a83785fd37dd53b0245d72848211a
+Subproject commit 1b77a556709211daed8924821383db9dccc95eb5
diff --git a/frontend/package.json b/frontend/package.json
index 45d94532f5..3821a370f5 100644
--- a/frontend/package.json
+++ b/frontend/package.json
@@ -58,6 +58,7 @@
"dotenv": "^16.0.3",
"draft-js": "^0.11.7",
"draft-js-export-html": "^1.4.1",
+ "draft-js-import-html": "^1.4.1",
"driver.js": "^0.9.8",
"emoji-mart": "^5.5.2",
"file-loader": "^6.2.0",
diff --git a/frontend/src/AppBuilder/AppCanvas/appCanvasUtils.js b/frontend/src/AppBuilder/AppCanvas/appCanvasUtils.js
index 913d3a22df..5f362ba0b3 100644
--- a/frontend/src/AppBuilder/AppCanvas/appCanvasUtils.js
+++ b/frontend/src/AppBuilder/AppCanvas/appCanvasUtils.js
@@ -232,6 +232,7 @@ export const getAllChildComponents = (allComponents, parentId) => {
const childTabId = componentParentId.split('-').at(-1);
if (componentParentId === `${parentId}-${childTabId}`) {
childComponent.isParentTabORCalendar = true;
+ childComponent.events = useStore.getState().eventsSlice.getEventsByComponentsId(componentId);
childComponents.push(childComponent);
// Recursively find children of the current child component
const childrenOfChild = getAllChildComponents(allComponents, componentId);
@@ -242,6 +243,7 @@ export const getAllChildComponents = (allComponents, parentId) => {
if (componentParentId === parentId) {
let childComponent = deepClone(allComponents[componentId]);
childComponent.id = componentId;
+ childComponent.events = useStore.getState().eventsSlice.getEventsByComponentsId(componentId);
childComponents.push(childComponent);
// Recursively find children of the current child component
diff --git a/frontend/src/AppBuilder/CodeEditor/CodehinterOverlayTriggers.jsx b/frontend/src/AppBuilder/CodeEditor/CodehinterOverlayTriggers.jsx
new file mode 100644
index 0000000000..c79c473169
--- /dev/null
+++ b/frontend/src/AppBuilder/CodeEditor/CodehinterOverlayTriggers.jsx
@@ -0,0 +1,27 @@
+/* eslint-disable import/no-unresolved */
+import React from 'react';
+import { openSearchPanel } from '@codemirror/search';
+import './SearchBox.scss';
+import { Button as ButtonComponent } from '@/components/ui/Button/Button.jsx';
+
+export const CodeHinterBtns = ({ view, isPanelOpen, renderCopilot }) => {
+ return (
+
+ {!isPanelOpen && (
+ openSearchPanel(view)}
+ />
+ )}
+ {renderCopilot && renderCopilot()}
+
+ );
+};
diff --git a/frontend/src/AppBuilder/CodeEditor/MultiLineCodeEditor.jsx b/frontend/src/AppBuilder/CodeEditor/MultiLineCodeEditor.jsx
index cbebcb0425..98af1dc9e4 100644
--- a/frontend/src/AppBuilder/CodeEditor/MultiLineCodeEditor.jsx
+++ b/frontend/src/AppBuilder/CodeEditor/MultiLineCodeEditor.jsx
@@ -20,10 +20,12 @@ import { PreviewBox } from './PreviewBox';
import { removeNestedDoubleCurlyBraces } from '@/_helpers/utils';
import useStore from '@/AppBuilder/_stores/store';
import { shallow } from 'zustand/shallow';
+import { syntaxTree } from '@codemirror/language';
import { search, searchKeymap, searchPanelOpen } from '@codemirror/search';
-import { handleSearchPanel, SearchBtn } from './SearchBox';
+import { handleSearchPanel } from './SearchBox';
import { useQueryPanelKeyHooks } from './useQueryPanelKeyHooks';
import { isInsideParent } from './utils';
+import { CodeHinterBtns } from './CodehinterOverlayTriggers';
const langSupport = Object.freeze({
javascript: javascript(),
@@ -66,7 +68,7 @@ const MultiLineCodeEditor = (props) => {
const context = useContext(CodeHinterContext);
- const { suggestionList } = createReferencesLookup(context, true);
+ const { suggestionList: paramList } = createReferencesLookup(context, true);
const currentValueRef = useRef(initialValue);
@@ -74,6 +76,7 @@ const MultiLineCodeEditor = (props) => {
const [editorView, setEditorView] = React.useState(null);
+ const [isSearchPanelOpen, setIsSearchPanelOpen] = React.useState(false);
const { queryPanelKeybindings } = useQueryPanelKeyHooks(onChange, currentValueRef, 'multiline');
const handleOnBlur = () => {
@@ -146,8 +149,29 @@ const MultiLineCodeEditor = (props) => {
return suggestion.hint.includes(nearestSubstring);
});
+ const localVariables = new Set();
+
+ // Traverse the syntax tree to extract variable declarations
+ syntaxTree(context.state).iterate({
+ enter: (node) => {
+ // JavaScript: Detect variable declarations (var, let, const)
+ if (node.name === 'VariableDefinition') {
+ const varName = context.state.sliceDoc(node.from, node.to);
+ if (varName && varName.startsWith(nearestSubstring)) localVariables.add(varName);
+ }
+ },
+ });
+
+ // Convert Set to an array of completion suggestions
+ const localVariableSuggestions = [...localVariables].map((varName) => ({
+ hint: varName,
+ type: 'variable',
+ }));
+
+ const suggestionList = paramList.filter((paramSuggestion) => paramSuggestion.hint.includes(nearestSubstring));
+
const suggestions = generateHints(
- [...JSLangHints, ...autoSuggestionList, ...suggestionList],
+ [...localVariableSuggestions, ...JSLangHints, ...autoSuggestionList, ...suggestionList],
null,
nearestSubstring
).map((hint) => {
@@ -204,6 +228,7 @@ const MultiLineCodeEditor = (props) => {
return {
from: context.pos,
options: [...suggestions],
+ filter: false,
};
}
@@ -237,7 +262,7 @@ const MultiLineCodeEditor = (props) => {
]);
// eslint-disable-next-line react-hooks/exhaustive-deps
- const overRideFunction = React.useCallback((context) => autoCompleteExtensionConfig(context), []);
+ const overRideFunction = React.useCallback((context) => autoCompleteExtensionConfig(context), [paramList]);
const { handleTogglePopupExapand, isOpen, setIsOpen, forceUpdate } = portalProps;
let cyLabel = paramLabel ? paramLabel.toLowerCase().trim().replace(/\s+/g, '-') : props.cyLabel;
@@ -258,7 +283,7 @@ const MultiLineCodeEditor = (props) => {
ref={wrapperRef}
>
-
+
{
isMultiEditor={true}
isQueryManager={isInsideQueryPane}
/>
- {renderCopilot && renderCopilot()}
{
readOnly={readOnly}
editable={editable} //for transformations in query manager
onCreateEditor={(view) => setEditorView(view)}
- onUpdate={(view) => {
- const icon = document.querySelector('.codehinter-search-btn');
- if (searchPanelOpen(view.state)) {
- icon.style.display = 'none';
- } else icon.style.display = 'block';
- }}
+ onUpdate={(view) => setIsSearchPanelOpen(searchPanelOpen(view.state))}
/>
{showPreview && (
diff --git a/frontend/src/AppBuilder/CodeEditor/SearchBox.jsx b/frontend/src/AppBuilder/CodeEditor/SearchBox.jsx
index 28f7451b95..140ff2a7db 100644
--- a/frontend/src/AppBuilder/CodeEditor/SearchBox.jsx
+++ b/frontend/src/AppBuilder/CodeEditor/SearchBox.jsx
@@ -9,7 +9,6 @@ import {
findPrevious,
replaceNext,
replaceAll,
- openSearchPanel,
} from '@codemirror/search';
import './SearchBox.scss';
import InputComponent from '@/components/ui/Input/Index.jsx';
@@ -162,22 +161,3 @@ function SearchPanel({ view }) {
);
}
-
-export const SearchBtn = ({ view }) => {
- return (
-
- openSearchPanel(view)}
- />
-
- );
-};
diff --git a/frontend/src/AppBuilder/CodeEditor/SearchBox.scss b/frontend/src/AppBuilder/CodeEditor/SearchBox.scss
index 24c948b0ee..79de28f28a 100644
--- a/frontend/src/AppBuilder/CodeEditor/SearchBox.scss
+++ b/frontend/src/AppBuilder/CodeEditor/SearchBox.scss
@@ -44,7 +44,5 @@
}
.code-hinter-wrapper .codehinter-search-btn {
- display: block;
- padding-top: 1px;
- z-index: 10000;
+ z-index: 1000;
}
\ No newline at end of file
diff --git a/frontend/src/AppBuilder/CodeEditor/SingleLineCodeEditor.jsx b/frontend/src/AppBuilder/CodeEditor/SingleLineCodeEditor.jsx
index 65e6f2eadd..16514ca409 100644
--- a/frontend/src/AppBuilder/CodeEditor/SingleLineCodeEditor.jsx
+++ b/frontend/src/AppBuilder/CodeEditor/SingleLineCodeEditor.jsx
@@ -1,12 +1,18 @@
/* eslint-disable import/no-unresolved */
-import React, { useEffect, useMemo, useRef, useState } from 'react';
+import React, { useEffect, useMemo, useRef, useState, useContext } from 'react';
import { PreviewBox } from './PreviewBox';
import { ToolTip } from '@/Editor/Inspector/Elements/Components/ToolTip';
import { useTranslation } from 'react-i18next';
import { camelCase, isEmpty, noop, get } from 'lodash';
import CodeMirror from '@uiw/react-codemirror';
import { javascript } from '@codemirror/lang-javascript';
-import { autocompletion, completionKeymap, completionStatus, acceptCompletion } from '@codemirror/autocomplete';
+import {
+ autocompletion,
+ completionKeymap,
+ completionStatus,
+ acceptCompletion,
+ startCompletion,
+} from '@codemirror/autocomplete';
import { defaultKeymap } from '@codemirror/commands';
import { keymap } from '@codemirror/view';
import FxButton from '../CodeBuilder/Elements/FxButton';
@@ -22,6 +28,8 @@ import CodeHinter from './CodeHinter';
import { removeNestedDoubleCurlyBraces } from '@/_helpers/utils';
import useStore from '@/AppBuilder/_stores/store';
import { shallow } from 'zustand/shallow';
+import { CodeHinterContext } from '../CodeBuilder/CodeHinterContext';
+import { createReferencesLookup } from '@/_stores/utils';
import { useQueryPanelKeyHooks } from './useQueryPanelKeyHooks';
const SingleLineCodeEditor = ({ componentName, fieldMeta = {}, componentId, ...restProps }) => {
@@ -73,6 +81,7 @@ const SingleLineCodeEditor = ({ componentName, fieldMeta = {}, componentId, ...r
if (typeof initialValue === 'string' && (initialValue?.includes('components') || initialValue?.includes('queries'))) {
newInitialValue = replaceIdsWithName(initialValue);
}
+
//! Re render the component when the componentName changes as the initialValue is not updated
// const { variablesExposedForPreview } = useContext(EditorContext) || {};
@@ -199,9 +208,14 @@ const EditorInput = ({
wrapperRef,
showSuggestions,
}) => {
- const getServerSideGlobalSuggestions = useStore((state) => state.getServerSideGlobalSuggestions, shallow);
+ const codeHinterContext = useContext(CodeHinterContext);
+ const { suggestionList: paramHints } = createReferencesLookup(codeHinterContext, true);
const getSuggestions = useStore((state) => state.getSuggestions, shallow);
+ const [codeMirrorView, setCodeMirrorView] = useState(undefined);
+
+ const getServerSideGlobalSuggestions = useStore((state) => state.getServerSideGlobalSuggestions, shallow);
+
const { queryPanelKeybindings } = useQueryPanelKeyHooks(onBlurUpdate, currentValue, 'singleline');
const isInsideQueryManager = useMemo(
@@ -209,16 +223,16 @@ const EditorInput = ({
[wrapperRef.current]
);
function autoCompleteExtensionConfig(context) {
- const hints = getSuggestions();
+ const hintsWithoutParamHints = getSuggestions();
const serverHints = getServerSideGlobalSuggestions(isInsideQueryManager);
- const allHints = {
- ...hints,
- appHints: [...hints.appHints, ...serverHints],
- };
-
let word = context.matchBefore(/\w*/);
+ const hints = {
+ ...hintsWithoutParamHints,
+ appHints: [...hintsWithoutParamHints.appHints, ...serverHints, ...paramHints],
+ };
+
const totalReferences = (context.state.doc.toString().match(/{{/g) || []).length;
let queryInput = context.state.doc.toString();
@@ -247,17 +261,18 @@ const EditorInput = ({
queryInput = '{{' + currentWord + '}}';
}
- let completions = getAutocompletion(queryInput, validationType, allHints, totalReferences, originalQueryInput);
+ let completions = getAutocompletion(queryInput, validationType, hints, totalReferences, originalQueryInput);
return {
from: word.from,
options: completions,
validFor: /^\{\{.*\}\}$/,
+ filter: false,
};
}
// eslint-disable-next-line react-hooks/exhaustive-deps
- const overRideFunction = React.useCallback((context) => autoCompleteExtensionConfig(context), [isInsideQueryManager]);
+ const overRideFunction = React.useCallback((context) => autoCompleteExtensionConfig(context), [isInsideQueryManager, paramHints]);
const autoCompleteConfig = autocompletion({
override: [overRideFunction],
@@ -424,6 +439,9 @@ const EditorInput = ({
ref={previewRef}
>
{
+ setCodeMirrorView(view);
+ }}
value={currentValue}
placeholder={placeholder}
height={isInsideQueryPane ? '100%' : showLineNumbers ? '400px' : '100%'}
@@ -460,11 +478,16 @@ const EditorInput = ({
theme={theme}
indentWithTab={false}
readOnly={disabled}
+ onKeyDown={(event) => {
+ if (event.key === 'Backspace') {
+ startCompletion(codeMirrorView);
+ }
+ }}
/>
-
-
-
+
+
+
);
};
diff --git a/frontend/src/AppBuilder/CodeEditor/autocompleteExtensionConfig.js b/frontend/src/AppBuilder/CodeEditor/autocompleteExtensionConfig.js
index e1d597c957..d845fa521e 100644
--- a/frontend/src/AppBuilder/CodeEditor/autocompleteExtensionConfig.js
+++ b/frontend/src/AppBuilder/CodeEditor/autocompleteExtensionConfig.js
@@ -67,7 +67,8 @@ export const getAutocompletion = (input, fieldType, hints, totalReferences = 1,
originalQueryInput,
searchInput
);
- return orderSuggestions(suggestions, fieldType);
+
+ return suggestions;
};
function orderSuggestions(suggestions, validationType) {
@@ -90,10 +91,18 @@ export const generateHints = (hints, totalReferences = 1, input, searchText) =>
const hasDepth = currentWord.includes('.');
const lastDepth = getLastSubstring(currentWord);
- const displayLabel = getLastDepth(displayedHint);
+ let displayLabel = getLastDepth(displayedHint);
+
+ if (type != 'js_method') {
+ const currentWordDepth = currentWord.split('.').length;
+ displayLabel = hint
+ .split('.')
+ .slice(currentWordDepth - 1)
+ .join('.');
+ }
return {
- displayLabel: lastDepth === '' ? displayedHint : displayLabel,
+ displayLabel,
label: displayedHint,
info: displayedHint,
type: type === 'js_method' ? 'js_methods' : type?.toLowerCase(),
@@ -154,40 +163,24 @@ export const generateHints = (hints, totalReferences = 1, input, searchText) =>
};
function filterHintsByDepth(input, hints) {
- if (input === '') return hints;
+ const inputParts = input.split('.');
+ const inputDepth = inputParts.length + 1;
- const inputDepth = input.includes('.') ? input.split('.').length : 0;
-
- const filteredHints = hints.filter((cm) => {
- const hintParts = cm.hint.split('.');
-
- let shouldInclude =
- (cm.hint.startsWith(input) && hintParts.length === inputDepth + 1) ||
- (cm.hint.startsWith(input) && hintParts.length === inputDepth);
-
- const shouldFuzzyMatch = !shouldInclude ? hintParts.length > inputDepth : false;
-
- if (shouldFuzzyMatch) {
- // fuzzy match
- let matchedDepth = -1;
- for (let i = 0; i < hintParts.length; i++) {
- if (hintParts[i].includes(input)) {
- matchedDepth = i;
- break;
- }
- }
-
- if (matchedDepth !== -1) {
- shouldInclude = hintParts.length === matchedDepth + 1;
- }
- } else if (input.endsWith('.')) {
- shouldInclude = cm.hint.startsWith(input) && hintParts.length === inputDepth;
- }
-
- return shouldInclude;
+ const hintsWithDepth = hints.map((hint) => {
+ const hintParts = hint.hint.split('.');
+ return {
+ ...hint,
+ depth: hintParts.length,
+ };
});
- return filteredHints;
+ const filteredHints = hintsWithDepth.filter((hint) => {
+ return hint.depth <= inputDepth;
+ });
+
+ const sortedHints = filteredHints.sort((hint1, hint2) => hint1.depth - hint2.depth);
+
+ return sortedHints;
}
export function findNearestSubstring(inputStr, currentCurosorPos) {
diff --git a/frontend/src/AppBuilder/QueryManager/Components/ChangeDataSource.jsx b/frontend/src/AppBuilder/QueryManager/Components/ChangeDataSource.jsx
index 244668cf8a..85958cd97b 100644
--- a/frontend/src/AppBuilder/QueryManager/Components/ChangeDataSource.jsx
+++ b/frontend/src/AppBuilder/QueryManager/Components/ChangeDataSource.jsx
@@ -1,8 +1,20 @@
-import React from 'react';
+import React, { useState } from 'react';
import Select from '@/_ui/Select';
import { decodeEntities } from '@/_helpers/utils';
+import usePopoverObserver from '@/AppBuilder/_hooks/usePopoverObserver';
export const ChangeDataSource = ({ dataSources, onChange, value, isVersionReleased }) => {
+ const [isMenuOpen, setIsMenuOpen] = useState(false);
+
+ usePopoverObserver(
+ document.getElementsByClassName('query-details')[0],
+ document.querySelector('.change-data-source-select.react-select__control'),
+ document.querySelector('.change-data-source-select.react-select__menu'),
+ isMenuOpen,
+ () => (document.querySelector('.change-data-source-select.react-select__menu').style.display = 'block'),
+ () => (document.querySelector('.change-data-source-select.react-select__menu').style.display = 'none')
+ );
+
return (