From cfa51a5b11f7d39d53fb627d7a77a925d4cb1100 Mon Sep 17 00:00:00 2001
From: Semjon Geist
Date: Sun, 19 Feb 2023 19:01:47 +0100
Subject: [PATCH 01/33] add mysql to helm chart
---
charts/nocodb/Chart.yaml | 4 ++++
charts/nocodb/values.yaml | 11 +++++++++++
2 files changed, 15 insertions(+)
diff --git a/charts/nocodb/Chart.yaml b/charts/nocodb/Chart.yaml
index db58bf049b..afa5532f36 100644
--- a/charts/nocodb/Chart.yaml
+++ b/charts/nocodb/Chart.yaml
@@ -5,6 +5,10 @@ dependencies:
name: postgresql
repository: https://charts.bitnami.com/bitnami
version: ~11.6.6
+- condition: mysql.enabled
+ name: mysql
+ repository: https://charts.bitnami.com/bitnami
+ version: ~9.4.6
description: A Helm chart for Kubernetes
maintainers: []
name: nocodb
diff --git a/charts/nocodb/values.yaml b/charts/nocodb/values.yaml
index 5d7bf7887e..881e31cdbb 100644
--- a/charts/nocodb/values.yaml
+++ b/charts/nocodb/values.yaml
@@ -83,6 +83,7 @@ extraEnvs:
extraSecretEnvs:
NC_AUTH_JWT_SECRET: secretString
+ NC_DB: "mysql2://mysql:3306?u=nocodb&p=secretPass&d=nocodb"
storage:
size: 3Gi
@@ -96,3 +97,13 @@ postgresql:
password: secretPass
persistence:
size: 8Gi
+
+mysql:
+ enabled: false
+ auth:
+ database: nocodb
+ username: nocodb
+ password: secretPass
+ persistence:
+ enabled: false
+ size: 8Gi
From bc3c591b3bf40df08927a9c72fdc54f9f2e6f874 Mon Sep 17 00:00:00 2001
From: gitstart
Date: Tue, 11 Apr 2023 10:30:31 +0000
Subject: [PATCH 02/33] chores: used a better name
Co-authored-by: gitstart
Co-authored-by: frankmagoba
Co-authored-by: gitstart_bot
---
packages/nc-gui/components/smartsheet/Grid.vue | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/packages/nc-gui/components/smartsheet/Grid.vue b/packages/nc-gui/components/smartsheet/Grid.vue
index b0ba0793bd..acebc53d36 100644
--- a/packages/nc-gui/components/smartsheet/Grid.vue
+++ b/packages/nc-gui/components/smartsheet/Grid.vue
@@ -753,7 +753,7 @@ const closeAddColumnDropdown = () => {
addColumnDropdown.value = false
}
-const deleteRowModal = (row: number) => {
+const confirmDeleteRow = (row: number) => {
Modal.confirm({
title: `Do you want to delete this row?`,
wrapClassName: 'nc-modal-attachment-delete',
@@ -990,7 +990,7 @@ const deleteRowModal = (row: number) => {
-
+
From 018cff6e67e5fe9b2877699b4b223ba3a6b925ac Mon Sep 17 00:00:00 2001
From: Wing-Kam Wong
Date: Thu, 20 Apr 2023 12:32:09 +0800
Subject: [PATCH 06/33] fix(nocodb): audit edit details
---
packages/nocodb-nest/src/db/BaseModelSqlv2.ts | 14 +++++++++-----
.../db/sql-data-mapper/lib/sql/BaseModelSqlv2.ts | 6 +++++-
2 files changed, 14 insertions(+), 6 deletions(-)
diff --git a/packages/nocodb-nest/src/db/BaseModelSqlv2.ts b/packages/nocodb-nest/src/db/BaseModelSqlv2.ts
index 96be9282d3..a5bd653825 100644
--- a/packages/nocodb-nest/src/db/BaseModelSqlv2.ts
+++ b/packages/nocodb-nest/src/db/BaseModelSqlv2.ts
@@ -15,10 +15,6 @@ import ejs from 'ejs';
import Validator from 'validator';
import { customAlphabet } from 'nanoid';
import DOMPurify from 'isomorphic-dompurify';
-
-const GROUP_COL = '__nc_group_id';
-
-const nanoidv2 = customAlphabet('1234567890abcdefghijklmnopqrstuvwxyz', 14);
import { v4 as uuidv4 } from 'uuid';
import { NcError } from '../helpers/catchError';
import getAst from '../helpers/getAst';
@@ -67,6 +63,10 @@ import type {
import type { Knex } from 'knex';
import type { SortType } from 'nocodb-sdk';
+const GROUP_COL = '__nc_group_id';
+
+const nanoidv2 = customAlphabet('1234567890abcdefghijklmnopqrstuvwxyz', 14);
+
export async function getViewAndModelByAliasOrId(param: {
projectName: string;
tableName: string;
@@ -2434,6 +2434,7 @@ class BaseModelSqlv2 {
): Promise {
const id = this._extractPksValues(newData);
let desc = `Record with ID ${id} has been updated in Table ${this.model.title}.`;
+ let details = '';
if (updateObj) {
updateObj = await this.model.mapColumnToAlias(updateObj);
for (const k of Object.keys(updateObj)) {
@@ -2447,6 +2448,9 @@ class BaseModelSqlv2 {
: newData[k];
desc += `\n`;
desc += `Column "${k}" got changed from "${prevValue}" to "${newValue}"`;
+ details += DOMPurify.sanitize(`${k}
+ : ${prevValue}
+ ${newValue}`);
}
}
await Audit.insert({
@@ -2455,7 +2459,7 @@ class BaseModelSqlv2 {
op_type: AuditOperationTypes.DATA,
op_sub_type: AuditOperationSubTypes.UPDATE,
description: DOMPurify.sanitize(desc),
- // details: JSON.stringify(data),
+ details,
ip: req?.clientIp,
user: req?.user?.email,
});
diff --git a/packages/nocodb/src/lib/db/sql-data-mapper/lib/sql/BaseModelSqlv2.ts b/packages/nocodb/src/lib/db/sql-data-mapper/lib/sql/BaseModelSqlv2.ts
index 426445c431..c38e47b8ed 100644
--- a/packages/nocodb/src/lib/db/sql-data-mapper/lib/sql/BaseModelSqlv2.ts
+++ b/packages/nocodb/src/lib/db/sql-data-mapper/lib/sql/BaseModelSqlv2.ts
@@ -2402,6 +2402,7 @@ class BaseModelSqlv2 {
): Promise {
const id = this._extractPksValues(newData);
let desc = `Record with ID ${id} has been updated in Table ${this.model.title}.`;
+ let details = '';
if (updateObj) {
updateObj = await this.model.mapColumnToAlias(updateObj);
for (const k of Object.keys(updateObj)) {
@@ -2415,6 +2416,9 @@ class BaseModelSqlv2 {
: newData[k];
desc += `\n`;
desc += `Column "${k}" got changed from "${prevValue}" to "${newValue}"`;
+ details += DOMPurify.sanitize(`${k}
+ : ${prevValue}
+ ${newValue}`);
}
}
await Audit.insert({
@@ -2423,7 +2427,7 @@ class BaseModelSqlv2 {
op_type: AuditOperationTypes.DATA,
op_sub_type: AuditOperationSubTypes.UPDATE,
description: DOMPurify.sanitize(desc),
- // details: JSON.stringify(data),
+ details,
ip: req?.clientIp,
user: req?.user?.email,
});
From a5754755f1af9d90738381593e5378f4251127b5 Mon Sep 17 00:00:00 2001
From: Wing-Kam Wong
Date: Thu, 20 Apr 2023 12:37:27 +0800
Subject: [PATCH 07/33] fix(nc-gui): show audit description if details are not
available
---
.../nc-gui/components/smartsheet/expanded-form/Comments.vue | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/packages/nc-gui/components/smartsheet/expanded-form/Comments.vue b/packages/nc-gui/components/smartsheet/expanded-form/Comments.vue
index 1f19f92927..f5c7d5b283 100644
--- a/packages/nc-gui/components/smartsheet/expanded-form/Comments.vue
+++ b/packages/nc-gui/components/smartsheet/expanded-form/Comments.vue
@@ -166,7 +166,9 @@ watch(
-
+
+
+ {{ log.description }}
{{ timeAgo(log.created_at) }}
From 8bcc3a9f1b76abf5e011ea1f58becc4ac90803f0 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Thu, 20 Apr 2023 15:19:10 +0000
Subject: [PATCH 08/33] chore(deps): bump vm2 from 3.9.16 to 3.9.17 in
/packages/nocodb
Bumps [vm2](https://github.com/patriksimek/vm2) from 3.9.16 to 3.9.17.
- [Release notes](https://github.com/patriksimek/vm2/releases)
- [Changelog](https://github.com/patriksimek/vm2/blob/master/CHANGELOG.md)
- [Commits](https://github.com/patriksimek/vm2/compare/3.9.16...3.9.17)
---
updated-dependencies:
- dependency-name: vm2
dependency-type: indirect
...
Signed-off-by: dependabot[bot]
---
packages/nocodb/package-lock.json | 12 ++++++------
1 file changed, 6 insertions(+), 6 deletions(-)
diff --git a/packages/nocodb/package-lock.json b/packages/nocodb/package-lock.json
index ad88e5c453..34291db1ac 100644
--- a/packages/nocodb/package-lock.json
+++ b/packages/nocodb/package-lock.json
@@ -17364,9 +17364,9 @@
"dev": true
},
"node_modules/vm2": {
- "version": "3.9.16",
- "resolved": "https://registry.npmjs.org/vm2/-/vm2-3.9.16.tgz",
- "integrity": "sha512-3T9LscojNTxdOyG+e8gFeyBXkMlOBYDoF6dqZbj+MPVHi9x10UfiTAJIobuchRCp3QvC+inybTbMJIUrLsig0w==",
+ "version": "3.9.17",
+ "resolved": "https://registry.npmjs.org/vm2/-/vm2-3.9.17.tgz",
+ "integrity": "sha512-AqwtCnZ/ERcX+AVj9vUsphY56YANXxRuqMb7GsDtAr0m0PcQX3u0Aj3KWiXM0YAHy7i6JEeHrwOnwXbGYgRpAw==",
"dependencies": {
"acorn": "^8.7.0",
"acorn-walk": "^8.2.0"
@@ -32786,9 +32786,9 @@
"dev": true
},
"vm2": {
- "version": "3.9.16",
- "resolved": "https://registry.npmjs.org/vm2/-/vm2-3.9.16.tgz",
- "integrity": "sha512-3T9LscojNTxdOyG+e8gFeyBXkMlOBYDoF6dqZbj+MPVHi9x10UfiTAJIobuchRCp3QvC+inybTbMJIUrLsig0w==",
+ "version": "3.9.17",
+ "resolved": "https://registry.npmjs.org/vm2/-/vm2-3.9.17.tgz",
+ "integrity": "sha512-AqwtCnZ/ERcX+AVj9vUsphY56YANXxRuqMb7GsDtAr0m0PcQX3u0Aj3KWiXM0YAHy7i6JEeHrwOnwXbGYgRpAw==",
"requires": {
"acorn": "^8.7.0",
"acorn-walk": "^8.2.0"
From 546a7d6b248adeb60b195ff35837cb4c15bde82e Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Mon, 24 Apr 2023 23:44:09 +0000
Subject: [PATCH 09/33] chore(deps): bump yaml from 2.1.3 to 2.2.2 in
/tests/playwright
Bumps [yaml](https://github.com/eemeli/yaml) from 2.1.3 to 2.2.2.
- [Release notes](https://github.com/eemeli/yaml/releases)
- [Commits](https://github.com/eemeli/yaml/compare/v2.1.3...v2.2.2)
---
updated-dependencies:
- dependency-name: yaml
dependency-type: indirect
...
Signed-off-by: dependabot[bot]
---
tests/playwright/package-lock.json | 14 +++++++-------
1 file changed, 7 insertions(+), 7 deletions(-)
diff --git a/tests/playwright/package-lock.json b/tests/playwright/package-lock.json
index 046cacca2a..18189b8a16 100644
--- a/tests/playwright/package-lock.json
+++ b/tests/playwright/package-lock.json
@@ -37,7 +37,7 @@
}
},
"../../packages/nocodb-sdk": {
- "version": "0.105.3",
+ "version": "0.106.1",
"license": "AGPL-3.0-or-later",
"dependencies": {
"axios": "^0.21.1",
@@ -4991,9 +4991,9 @@
"dev": true
},
"node_modules/yaml": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.1.3.tgz",
- "integrity": "sha512-AacA8nRULjKMX2DvWvOAdBZMOfQlypSFkjcOcu9FalllIDJ1kvlREzcdIZmidQUqqeMv7jorHjq2HlLv/+c2lg==",
+ "version": "2.2.2",
+ "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.2.2.tgz",
+ "integrity": "sha512-CBKFWExMn46Foo4cldiChEzn7S7SRV+wqiluAb6xmueD/fGyRHIhX8m14vVGgeFWjN540nKCNVj6P21eQjgTuA==",
"dev": true,
"engines": {
"node": ">= 14"
@@ -8651,9 +8651,9 @@
"dev": true
},
"yaml": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.1.3.tgz",
- "integrity": "sha512-AacA8nRULjKMX2DvWvOAdBZMOfQlypSFkjcOcu9FalllIDJ1kvlREzcdIZmidQUqqeMv7jorHjq2HlLv/+c2lg==",
+ "version": "2.2.2",
+ "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.2.2.tgz",
+ "integrity": "sha512-CBKFWExMn46Foo4cldiChEzn7S7SRV+wqiluAb6xmueD/fGyRHIhX8m14vVGgeFWjN540nKCNVj6P21eQjgTuA==",
"dev": true
}
}
From a80b544bb2ec17c8e0fe9b7a85ef7458315c5fa9 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Mon, 24 Apr 2023 23:44:40 +0000
Subject: [PATCH 10/33] chore(deps): bump yaml and @commitlint/load in
/packages/nc-plugin
Removes [yaml](https://github.com/eemeli/yaml). It's no longer used after updating ancestor dependency [@commitlint/load](https://github.com/conventional-changelog/commitlint/tree/HEAD/@commitlint/load). These dependencies need to be updated together.
Removes `yaml`
Updates `@commitlint/load` from 12.1.1 to 17.5.0
- [Release notes](https://github.com/conventional-changelog/commitlint/releases)
- [Changelog](https://github.com/conventional-changelog/commitlint/blob/master/@commitlint/load/CHANGELOG.md)
- [Commits](https://github.com/conventional-changelog/commitlint/commits/v17.5.0/@commitlint/load)
---
updated-dependencies:
- dependency-name: yaml
dependency-type: indirect
- dependency-name: "@commitlint/load"
dependency-type: indirect
...
Signed-off-by: dependabot[bot]
---
packages/nc-plugin/package-lock.json | 606 +++++++++++++++++++++++----
1 file changed, 516 insertions(+), 90 deletions(-)
diff --git a/packages/nc-plugin/package-lock.json b/packages/nc-plugin/package-lock.json
index 574708a321..84784a7aef 100644
--- a/packages/nc-plugin/package-lock.json
+++ b/packages/nc-plugin/package-lock.json
@@ -414,62 +414,184 @@
"to-fast-properties": "^2.0.0"
}
},
+ "node_modules/@commitlint/config-validator": {
+ "version": "17.4.4",
+ "resolved": "https://registry.npmjs.org/@commitlint/config-validator/-/config-validator-17.4.4.tgz",
+ "integrity": "sha512-bi0+TstqMiqoBAQDvdEP4AFh0GaKyLFlPPEObgI29utoKEYoPQTvF0EYqIwYYLEoJYhj5GfMIhPHJkTJhagfeg==",
+ "dev": true,
+ "optional": true,
+ "dependencies": {
+ "@commitlint/types": "^17.4.4",
+ "ajv": "^8.11.0"
+ },
+ "engines": {
+ "node": ">=v14"
+ }
+ },
+ "node_modules/@commitlint/config-validator/node_modules/ajv": {
+ "version": "8.12.0",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz",
+ "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==",
+ "dev": true,
+ "optional": true,
+ "dependencies": {
+ "fast-deep-equal": "^3.1.1",
+ "json-schema-traverse": "^1.0.0",
+ "require-from-string": "^2.0.2",
+ "uri-js": "^4.2.2"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/epoberezkin"
+ }
+ },
+ "node_modules/@commitlint/config-validator/node_modules/json-schema-traverse": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
+ "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
+ "dev": true,
+ "optional": true
+ },
"node_modules/@commitlint/execute-rule": {
- "version": "12.1.1",
- "resolved": "https://registry.npmjs.org/@commitlint/execute-rule/-/execute-rule-12.1.1.tgz",
- "integrity": "sha512-6mplMGvLCKF5LieL7BRhydpg32tm6LICnWQADrWU4S5g9PKi2utNvhiaiuNPoHUXr29RdbNaGNcyyPv8DSjJsQ==",
+ "version": "17.4.0",
+ "resolved": "https://registry.npmjs.org/@commitlint/execute-rule/-/execute-rule-17.4.0.tgz",
+ "integrity": "sha512-LIgYXuCSO5Gvtc0t9bebAMSwd68ewzmqLypqI2Kke1rqOqqDbMpYcYfoPfFlv9eyLIh4jocHWwCK5FS7z9icUA==",
"dev": true,
"optional": true,
"engines": {
- "node": ">=v10"
+ "node": ">=v14"
}
},
"node_modules/@commitlint/load": {
- "version": "12.1.1",
- "resolved": "https://registry.npmjs.org/@commitlint/load/-/load-12.1.1.tgz",
- "integrity": "sha512-qOQtgNdJRULUQWP9jkpTwhj7aEtnqUtqeUpbQ9rjS+GIUST65HZbteNUX4S0mAEGPWqy2aK5xGd73cUfFSvuuw==",
+ "version": "17.5.0",
+ "resolved": "https://registry.npmjs.org/@commitlint/load/-/load-17.5.0.tgz",
+ "integrity": "sha512-l+4W8Sx4CD5rYFsrhHH8HP01/8jEP7kKf33Xlx2Uk2out/UKoKPYMOIRcDH5ppT8UXLMV+x6Wm5osdRKKgaD1Q==",
"dev": true,
"optional": true,
"dependencies": {
- "@commitlint/execute-rule": "^12.1.1",
- "@commitlint/resolve-extends": "^12.1.1",
- "@commitlint/types": "^12.1.1",
- "chalk": "^4.0.0",
- "cosmiconfig": "^7.0.0",
- "lodash": "^4.17.19",
- "resolve-from": "^5.0.0"
+ "@commitlint/config-validator": "^17.4.4",
+ "@commitlint/execute-rule": "^17.4.0",
+ "@commitlint/resolve-extends": "^17.4.4",
+ "@commitlint/types": "^17.4.4",
+ "@types/node": "*",
+ "chalk": "^4.1.0",
+ "cosmiconfig": "^8.0.0",
+ "cosmiconfig-typescript-loader": "^4.0.0",
+ "lodash.isplainobject": "^4.0.6",
+ "lodash.merge": "^4.6.2",
+ "lodash.uniq": "^4.5.0",
+ "resolve-from": "^5.0.0",
+ "ts-node": "^10.8.1",
+ "typescript": "^4.6.4 || ^5.0.0"
+ },
+ "engines": {
+ "node": ">=v14"
+ }
+ },
+ "node_modules/@commitlint/load/node_modules/cosmiconfig-typescript-loader": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/cosmiconfig-typescript-loader/-/cosmiconfig-typescript-loader-4.3.0.tgz",
+ "integrity": "sha512-NTxV1MFfZDLPiBMjxbHRwSh5LaLcPMwNdCutmnHJCKoVnlvldPWlllonKwrsRJ5pYZBIBGRWWU2tfvzxgeSW5Q==",
+ "dev": true,
+ "optional": true,
+ "engines": {
+ "node": ">=12",
+ "npm": ">=6"
+ },
+ "peerDependencies": {
+ "@types/node": "*",
+ "cosmiconfig": ">=7",
+ "ts-node": ">=10",
+ "typescript": ">=3"
+ }
+ },
+ "node_modules/@commitlint/load/node_modules/ts-node": {
+ "version": "10.9.1",
+ "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz",
+ "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==",
+ "dev": true,
+ "optional": true,
+ "dependencies": {
+ "@cspotcode/source-map-support": "^0.8.0",
+ "@tsconfig/node10": "^1.0.7",
+ "@tsconfig/node12": "^1.0.7",
+ "@tsconfig/node14": "^1.0.0",
+ "@tsconfig/node16": "^1.0.2",
+ "acorn": "^8.4.1",
+ "acorn-walk": "^8.1.1",
+ "arg": "^4.1.0",
+ "create-require": "^1.1.0",
+ "diff": "^4.0.1",
+ "make-error": "^1.1.1",
+ "v8-compile-cache-lib": "^3.0.1",
+ "yn": "3.1.1"
+ },
+ "bin": {
+ "ts-node": "dist/bin.js",
+ "ts-node-cwd": "dist/bin-cwd.js",
+ "ts-node-esm": "dist/bin-esm.js",
+ "ts-node-script": "dist/bin-script.js",
+ "ts-node-transpile-only": "dist/bin-transpile.js",
+ "ts-script": "dist/bin-script-deprecated.js"
+ },
+ "peerDependencies": {
+ "@swc/core": ">=1.2.50",
+ "@swc/wasm": ">=1.2.50",
+ "@types/node": "*",
+ "typescript": ">=2.7"
+ },
+ "peerDependenciesMeta": {
+ "@swc/core": {
+ "optional": true
+ },
+ "@swc/wasm": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@commitlint/load/node_modules/typescript": {
+ "version": "5.0.4",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.0.4.tgz",
+ "integrity": "sha512-cW9T5W9xY37cc+jfEnaUvX91foxtHkza3Nw3wkoF4sSlKn0MONdkdEndig/qPBWXNkmplh3NzayQzCiHM4/hqw==",
+ "dev": true,
+ "optional": true,
+ "bin": {
+ "tsc": "bin/tsc",
+ "tsserver": "bin/tsserver"
},
"engines": {
- "node": ">=v10"
+ "node": ">=12.20"
}
},
"node_modules/@commitlint/resolve-extends": {
- "version": "12.1.1",
- "resolved": "https://registry.npmjs.org/@commitlint/resolve-extends/-/resolve-extends-12.1.1.tgz",
- "integrity": "sha512-/DXRt0S0U3o9lq5cc8OL1Lkx0IjW0HcDWjUkUXshAajBIKBYSJB8x/loNCi1krNEJ8SwLXUEFt5OLxNO6wE9yQ==",
+ "version": "17.4.4",
+ "resolved": "https://registry.npmjs.org/@commitlint/resolve-extends/-/resolve-extends-17.4.4.tgz",
+ "integrity": "sha512-znXr1S0Rr8adInptHw0JeLgumS11lWbk5xAWFVno+HUFVN45875kUtqjrI6AppmD3JI+4s0uZlqqlkepjJd99A==",
"dev": true,
"optional": true,
"dependencies": {
+ "@commitlint/config-validator": "^17.4.4",
+ "@commitlint/types": "^17.4.4",
"import-fresh": "^3.0.0",
- "lodash": "^4.17.19",
+ "lodash.mergewith": "^4.6.2",
"resolve-from": "^5.0.0",
"resolve-global": "^1.0.0"
},
"engines": {
- "node": ">=v10"
+ "node": ">=v14"
}
},
"node_modules/@commitlint/types": {
- "version": "12.1.1",
- "resolved": "https://registry.npmjs.org/@commitlint/types/-/types-12.1.1.tgz",
- "integrity": "sha512-+qGH+s2Lo6qwacV2X3/ZypZwaAI84ift+1HBjXdXtI/q0F5NtmXucV3lcQOTviMTNiJhq4qWON2fjci2NItASw==",
+ "version": "17.4.4",
+ "resolved": "https://registry.npmjs.org/@commitlint/types/-/types-17.4.4.tgz",
+ "integrity": "sha512-amRN8tRLYOsxRr6mTnGGGvB5EmW/4DDjLMgiwK3CCVEmN6Sr/6xePGEpWaspKkckILuUORCwe6VfDBw6uj4axQ==",
"dev": true,
"optional": true,
"dependencies": {
- "chalk": "^4.0.0"
+ "chalk": "^4.1.0"
},
"engines": {
- "node": ">=v10"
+ "node": ">=v14"
}
},
"node_modules/@cspell/dict-aws": {
@@ -670,6 +792,19 @@
"integrity": "sha512-CXCuXcrgAc56P3kL9I6gW6bZwTs6t3duyAtHerHg5YAYbPs6/4nXgniQgLgu8kjFHFy07XrqaaBdLU9V2DmMtQ==",
"dev": true
},
+ "node_modules/@cspotcode/source-map-support": {
+ "version": "0.8.1",
+ "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz",
+ "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==",
+ "dev": true,
+ "optional": true,
+ "dependencies": {
+ "@jridgewell/trace-mapping": "0.3.9"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
"node_modules/@eslint/eslintrc": {
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.0.tgz",
@@ -774,6 +909,34 @@
"node": ">=8"
}
},
+ "node_modules/@jridgewell/resolve-uri": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz",
+ "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==",
+ "dev": true,
+ "optional": true,
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@jridgewell/sourcemap-codec": {
+ "version": "1.4.15",
+ "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz",
+ "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==",
+ "dev": true,
+ "optional": true
+ },
+ "node_modules/@jridgewell/trace-mapping": {
+ "version": "0.3.9",
+ "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz",
+ "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==",
+ "dev": true,
+ "optional": true,
+ "dependencies": {
+ "@jridgewell/resolve-uri": "^3.0.3",
+ "@jridgewell/sourcemap-codec": "^1.4.10"
+ }
+ },
"node_modules/@nodelib/fs.scandir": {
"version": "2.1.4",
"resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.4.tgz",
@@ -824,6 +987,34 @@
"node": ">= 6"
}
},
+ "node_modules/@tsconfig/node10": {
+ "version": "1.0.9",
+ "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz",
+ "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==",
+ "dev": true,
+ "optional": true
+ },
+ "node_modules/@tsconfig/node12": {
+ "version": "1.0.11",
+ "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz",
+ "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==",
+ "dev": true,
+ "optional": true
+ },
+ "node_modules/@tsconfig/node14": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz",
+ "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==",
+ "dev": true,
+ "optional": true
+ },
+ "node_modules/@tsconfig/node16": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.3.tgz",
+ "integrity": "sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==",
+ "dev": true,
+ "optional": true
+ },
"node_modules/@types/json-schema": {
"version": "7.0.7",
"resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.7.tgz",
@@ -842,19 +1033,19 @@
"integrity": "sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==",
"dev": true
},
+ "node_modules/@types/node": {
+ "version": "18.16.0",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-18.16.0.tgz",
+ "integrity": "sha512-BsAaKhB+7X+H4GnSjGhJG9Qi8Tw+inU9nJDwmD5CgOmBLEI6ArdhikpLX7DjbjDRDTbqZzU2LSQNZg8WGPiSZQ==",
+ "dev": true,
+ "optional": true
+ },
"node_modules/@types/normalize-package-data": {
"version": "2.4.0",
"resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz",
"integrity": "sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA==",
"dev": true
},
- "node_modules/@types/parse-json": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz",
- "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==",
- "dev": true,
- "optional": true
- },
"node_modules/@typescript-eslint/eslint-plugin": {
"version": "4.21.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.21.0.tgz",
@@ -3060,20 +3251,42 @@
"dev": true
},
"node_modules/cosmiconfig": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.0.tgz",
- "integrity": "sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA==",
+ "version": "8.1.3",
+ "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.1.3.tgz",
+ "integrity": "sha512-/UkO2JKI18b5jVMJUp0lvKFMpa/Gye+ZgZjKD+DGEN9y7NRcf/nK1A0sp67ONmKtnDCNMS44E6jrk0Yc3bDuUw==",
"dev": true,
"optional": true,
"dependencies": {
- "@types/parse-json": "^4.0.0",
"import-fresh": "^3.2.1",
+ "js-yaml": "^4.1.0",
"parse-json": "^5.0.0",
- "path-type": "^4.0.0",
- "yaml": "^1.10.0"
+ "path-type": "^4.0.0"
},
"engines": {
- "node": ">=10"
+ "node": ">=14"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/d-fischer"
+ }
+ },
+ "node_modules/cosmiconfig/node_modules/argparse": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
+ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
+ "dev": true,
+ "optional": true
+ },
+ "node_modules/cosmiconfig/node_modules/js-yaml": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
+ "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
+ "dev": true,
+ "optional": true,
+ "dependencies": {
+ "argparse": "^2.0.1"
+ },
+ "bin": {
+ "js-yaml": "bin/js-yaml.js"
}
},
"node_modules/cosmiconfig/node_modules/parse-json": {
@@ -6577,18 +6790,46 @@
"integrity": "sha1-dWy1FQyjum8RCFp4hJZF8Yj4Xzc=",
"dev": true
},
+ "node_modules/lodash.isplainobject": {
+ "version": "4.0.6",
+ "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz",
+ "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==",
+ "dev": true,
+ "optional": true
+ },
"node_modules/lodash.map": {
"version": "4.6.0",
"resolved": "https://registry.npmjs.org/lodash.map/-/lodash.map-4.6.0.tgz",
"integrity": "sha1-dx7Hg540c9nEzeKLGTlMNWL09tM=",
"dev": true
},
+ "node_modules/lodash.merge": {
+ "version": "4.6.2",
+ "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
+ "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
+ "dev": true,
+ "optional": true
+ },
+ "node_modules/lodash.mergewith": {
+ "version": "4.6.2",
+ "resolved": "https://registry.npmjs.org/lodash.mergewith/-/lodash.mergewith-4.6.2.tgz",
+ "integrity": "sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ==",
+ "dev": true,
+ "optional": true
+ },
"node_modules/lodash.truncate": {
"version": "4.4.2",
"resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz",
"integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=",
"dev": true
},
+ "node_modules/lodash.uniq": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz",
+ "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==",
+ "dev": true,
+ "optional": true
+ },
"node_modules/log-symbols": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz",
@@ -10166,6 +10407,13 @@
"integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==",
"dev": true
},
+ "node_modules/v8-compile-cache-lib": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz",
+ "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==",
+ "dev": true,
+ "optional": true
+ },
"node_modules/validate-npm-package-license": {
"version": "3.0.4",
"resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz",
@@ -10348,16 +10596,6 @@
"integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
"dev": true
},
- "node_modules/yaml": {
- "version": "1.10.2",
- "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz",
- "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==",
- "dev": true,
- "optional": true,
- "engines": {
- "node": ">= 6"
- }
- },
"node_modules/yargs": {
"version": "16.2.0",
"resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz",
@@ -10742,50 +10980,131 @@
"to-fast-properties": "^2.0.0"
}
},
+ "@commitlint/config-validator": {
+ "version": "17.4.4",
+ "resolved": "https://registry.npmjs.org/@commitlint/config-validator/-/config-validator-17.4.4.tgz",
+ "integrity": "sha512-bi0+TstqMiqoBAQDvdEP4AFh0GaKyLFlPPEObgI29utoKEYoPQTvF0EYqIwYYLEoJYhj5GfMIhPHJkTJhagfeg==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "@commitlint/types": "^17.4.4",
+ "ajv": "^8.11.0"
+ },
+ "dependencies": {
+ "ajv": {
+ "version": "8.12.0",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz",
+ "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "fast-deep-equal": "^3.1.1",
+ "json-schema-traverse": "^1.0.0",
+ "require-from-string": "^2.0.2",
+ "uri-js": "^4.2.2"
+ }
+ },
+ "json-schema-traverse": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
+ "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
+ "dev": true,
+ "optional": true
+ }
+ }
+ },
"@commitlint/execute-rule": {
- "version": "12.1.1",
- "resolved": "https://registry.npmjs.org/@commitlint/execute-rule/-/execute-rule-12.1.1.tgz",
- "integrity": "sha512-6mplMGvLCKF5LieL7BRhydpg32tm6LICnWQADrWU4S5g9PKi2utNvhiaiuNPoHUXr29RdbNaGNcyyPv8DSjJsQ==",
+ "version": "17.4.0",
+ "resolved": "https://registry.npmjs.org/@commitlint/execute-rule/-/execute-rule-17.4.0.tgz",
+ "integrity": "sha512-LIgYXuCSO5Gvtc0t9bebAMSwd68ewzmqLypqI2Kke1rqOqqDbMpYcYfoPfFlv9eyLIh4jocHWwCK5FS7z9icUA==",
"dev": true,
"optional": true
},
"@commitlint/load": {
- "version": "12.1.1",
- "resolved": "https://registry.npmjs.org/@commitlint/load/-/load-12.1.1.tgz",
- "integrity": "sha512-qOQtgNdJRULUQWP9jkpTwhj7aEtnqUtqeUpbQ9rjS+GIUST65HZbteNUX4S0mAEGPWqy2aK5xGd73cUfFSvuuw==",
+ "version": "17.5.0",
+ "resolved": "https://registry.npmjs.org/@commitlint/load/-/load-17.5.0.tgz",
+ "integrity": "sha512-l+4W8Sx4CD5rYFsrhHH8HP01/8jEP7kKf33Xlx2Uk2out/UKoKPYMOIRcDH5ppT8UXLMV+x6Wm5osdRKKgaD1Q==",
"dev": true,
"optional": true,
"requires": {
- "@commitlint/execute-rule": "^12.1.1",
- "@commitlint/resolve-extends": "^12.1.1",
- "@commitlint/types": "^12.1.1",
- "chalk": "^4.0.0",
- "cosmiconfig": "^7.0.0",
- "lodash": "^4.17.19",
- "resolve-from": "^5.0.0"
+ "@commitlint/config-validator": "^17.4.4",
+ "@commitlint/execute-rule": "^17.4.0",
+ "@commitlint/resolve-extends": "^17.4.4",
+ "@commitlint/types": "^17.4.4",
+ "@types/node": "*",
+ "chalk": "^4.1.0",
+ "cosmiconfig": "^8.0.0",
+ "cosmiconfig-typescript-loader": "^4.0.0",
+ "lodash.isplainobject": "^4.0.6",
+ "lodash.merge": "^4.6.2",
+ "lodash.uniq": "^4.5.0",
+ "resolve-from": "^5.0.0",
+ "ts-node": "^10.8.1",
+ "typescript": "^4.6.4 || ^5.0.0"
+ },
+ "dependencies": {
+ "cosmiconfig-typescript-loader": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/cosmiconfig-typescript-loader/-/cosmiconfig-typescript-loader-4.3.0.tgz",
+ "integrity": "sha512-NTxV1MFfZDLPiBMjxbHRwSh5LaLcPMwNdCutmnHJCKoVnlvldPWlllonKwrsRJ5pYZBIBGRWWU2tfvzxgeSW5Q==",
+ "dev": true,
+ "optional": true,
+ "requires": {}
+ },
+ "ts-node": {
+ "version": "10.9.1",
+ "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz",
+ "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "@cspotcode/source-map-support": "^0.8.0",
+ "@tsconfig/node10": "^1.0.7",
+ "@tsconfig/node12": "^1.0.7",
+ "@tsconfig/node14": "^1.0.0",
+ "@tsconfig/node16": "^1.0.2",
+ "acorn": "^8.4.1",
+ "acorn-walk": "^8.1.1",
+ "arg": "^4.1.0",
+ "create-require": "^1.1.0",
+ "diff": "^4.0.1",
+ "make-error": "^1.1.1",
+ "v8-compile-cache-lib": "^3.0.1",
+ "yn": "3.1.1"
+ }
+ },
+ "typescript": {
+ "version": "5.0.4",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.0.4.tgz",
+ "integrity": "sha512-cW9T5W9xY37cc+jfEnaUvX91foxtHkza3Nw3wkoF4sSlKn0MONdkdEndig/qPBWXNkmplh3NzayQzCiHM4/hqw==",
+ "dev": true,
+ "optional": true
+ }
}
},
"@commitlint/resolve-extends": {
- "version": "12.1.1",
- "resolved": "https://registry.npmjs.org/@commitlint/resolve-extends/-/resolve-extends-12.1.1.tgz",
- "integrity": "sha512-/DXRt0S0U3o9lq5cc8OL1Lkx0IjW0HcDWjUkUXshAajBIKBYSJB8x/loNCi1krNEJ8SwLXUEFt5OLxNO6wE9yQ==",
+ "version": "17.4.4",
+ "resolved": "https://registry.npmjs.org/@commitlint/resolve-extends/-/resolve-extends-17.4.4.tgz",
+ "integrity": "sha512-znXr1S0Rr8adInptHw0JeLgumS11lWbk5xAWFVno+HUFVN45875kUtqjrI6AppmD3JI+4s0uZlqqlkepjJd99A==",
"dev": true,
"optional": true,
"requires": {
+ "@commitlint/config-validator": "^17.4.4",
+ "@commitlint/types": "^17.4.4",
"import-fresh": "^3.0.0",
- "lodash": "^4.17.19",
+ "lodash.mergewith": "^4.6.2",
"resolve-from": "^5.0.0",
"resolve-global": "^1.0.0"
}
},
"@commitlint/types": {
- "version": "12.1.1",
- "resolved": "https://registry.npmjs.org/@commitlint/types/-/types-12.1.1.tgz",
- "integrity": "sha512-+qGH+s2Lo6qwacV2X3/ZypZwaAI84ift+1HBjXdXtI/q0F5NtmXucV3lcQOTviMTNiJhq4qWON2fjci2NItASw==",
+ "version": "17.4.4",
+ "resolved": "https://registry.npmjs.org/@commitlint/types/-/types-17.4.4.tgz",
+ "integrity": "sha512-amRN8tRLYOsxRr6mTnGGGvB5EmW/4DDjLMgiwK3CCVEmN6Sr/6xePGEpWaspKkckILuUORCwe6VfDBw6uj4axQ==",
"dev": true,
"optional": true,
"requires": {
- "chalk": "^4.0.0"
+ "chalk": "^4.1.0"
}
},
"@cspell/dict-aws": {
@@ -10986,6 +11305,16 @@
"integrity": "sha512-CXCuXcrgAc56P3kL9I6gW6bZwTs6t3duyAtHerHg5YAYbPs6/4nXgniQgLgu8kjFHFy07XrqaaBdLU9V2DmMtQ==",
"dev": true
},
+ "@cspotcode/source-map-support": {
+ "version": "0.8.1",
+ "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz",
+ "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "@jridgewell/trace-mapping": "0.3.9"
+ }
+ },
"@eslint/eslintrc": {
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.0.tgz",
@@ -11062,6 +11391,31 @@
"integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==",
"dev": true
},
+ "@jridgewell/resolve-uri": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz",
+ "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==",
+ "dev": true,
+ "optional": true
+ },
+ "@jridgewell/sourcemap-codec": {
+ "version": "1.4.15",
+ "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz",
+ "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==",
+ "dev": true,
+ "optional": true
+ },
+ "@jridgewell/trace-mapping": {
+ "version": "0.3.9",
+ "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz",
+ "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "@jridgewell/resolve-uri": "^3.0.3",
+ "@jridgewell/sourcemap-codec": "^1.4.10"
+ }
+ },
"@nodelib/fs.scandir": {
"version": "2.1.4",
"resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.4.tgz",
@@ -11100,6 +11454,34 @@
"integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==",
"dev": true
},
+ "@tsconfig/node10": {
+ "version": "1.0.9",
+ "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz",
+ "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==",
+ "dev": true,
+ "optional": true
+ },
+ "@tsconfig/node12": {
+ "version": "1.0.11",
+ "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz",
+ "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==",
+ "dev": true,
+ "optional": true
+ },
+ "@tsconfig/node14": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz",
+ "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==",
+ "dev": true,
+ "optional": true
+ },
+ "@tsconfig/node16": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.3.tgz",
+ "integrity": "sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==",
+ "dev": true,
+ "optional": true
+ },
"@types/json-schema": {
"version": "7.0.7",
"resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.7.tgz",
@@ -11118,19 +11500,19 @@
"integrity": "sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==",
"dev": true
},
+ "@types/node": {
+ "version": "18.16.0",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-18.16.0.tgz",
+ "integrity": "sha512-BsAaKhB+7X+H4GnSjGhJG9Qi8Tw+inU9nJDwmD5CgOmBLEI6ArdhikpLX7DjbjDRDTbqZzU2LSQNZg8WGPiSZQ==",
+ "dev": true,
+ "optional": true
+ },
"@types/normalize-package-data": {
"version": "2.4.0",
"resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz",
"integrity": "sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA==",
"dev": true
},
- "@types/parse-json": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz",
- "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==",
- "dev": true,
- "optional": true
- },
"@typescript-eslint/eslint-plugin": {
"version": "4.21.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.21.0.tgz",
@@ -12730,19 +13112,35 @@
"dev": true
},
"cosmiconfig": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.0.tgz",
- "integrity": "sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA==",
+ "version": "8.1.3",
+ "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.1.3.tgz",
+ "integrity": "sha512-/UkO2JKI18b5jVMJUp0lvKFMpa/Gye+ZgZjKD+DGEN9y7NRcf/nK1A0sp67ONmKtnDCNMS44E6jrk0Yc3bDuUw==",
"dev": true,
"optional": true,
"requires": {
- "@types/parse-json": "^4.0.0",
"import-fresh": "^3.2.1",
+ "js-yaml": "^4.1.0",
"parse-json": "^5.0.0",
- "path-type": "^4.0.0",
- "yaml": "^1.10.0"
+ "path-type": "^4.0.0"
},
"dependencies": {
+ "argparse": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
+ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
+ "dev": true,
+ "optional": true
+ },
+ "js-yaml": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
+ "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "argparse": "^2.0.1"
+ }
+ },
"parse-json": {
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz",
@@ -15378,18 +15776,46 @@
"integrity": "sha1-dWy1FQyjum8RCFp4hJZF8Yj4Xzc=",
"dev": true
},
+ "lodash.isplainobject": {
+ "version": "4.0.6",
+ "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz",
+ "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==",
+ "dev": true,
+ "optional": true
+ },
"lodash.map": {
"version": "4.6.0",
"resolved": "https://registry.npmjs.org/lodash.map/-/lodash.map-4.6.0.tgz",
"integrity": "sha1-dx7Hg540c9nEzeKLGTlMNWL09tM=",
"dev": true
},
+ "lodash.merge": {
+ "version": "4.6.2",
+ "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
+ "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
+ "dev": true,
+ "optional": true
+ },
+ "lodash.mergewith": {
+ "version": "4.6.2",
+ "resolved": "https://registry.npmjs.org/lodash.mergewith/-/lodash.mergewith-4.6.2.tgz",
+ "integrity": "sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ==",
+ "dev": true,
+ "optional": true
+ },
"lodash.truncate": {
"version": "4.4.2",
"resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz",
"integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=",
"dev": true
},
+ "lodash.uniq": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz",
+ "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==",
+ "dev": true,
+ "optional": true
+ },
"log-symbols": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz",
@@ -17947,6 +18373,13 @@
"integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==",
"dev": true
},
+ "v8-compile-cache-lib": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz",
+ "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==",
+ "dev": true,
+ "optional": true
+ },
"validate-npm-package-license": {
"version": "3.0.4",
"resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz",
@@ -18098,13 +18531,6 @@
"integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
"dev": true
},
- "yaml": {
- "version": "1.10.2",
- "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz",
- "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==",
- "dev": true,
- "optional": true
- },
"yargs": {
"version": "16.2.0",
"resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz",
From ed779cc625f74edf031d34e506c3af8d8e503ef0 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Tue, 25 Apr 2023 03:47:54 +0000
Subject: [PATCH 11/33] chore(deps): bump vm2 from 3.9.16 to 3.9.17 in
/packages/nocodb-nest
Bumps [vm2](https://github.com/patriksimek/vm2) from 3.9.16 to 3.9.17.
- [Release notes](https://github.com/patriksimek/vm2/releases)
- [Changelog](https://github.com/patriksimek/vm2/blob/master/CHANGELOG.md)
- [Commits](https://github.com/patriksimek/vm2/compare/3.9.16...3.9.17)
---
updated-dependencies:
- dependency-name: vm2
dependency-type: indirect
...
Signed-off-by: dependabot[bot]
---
packages/nocodb-nest/package-lock.json | 12 ++++++------
1 file changed, 6 insertions(+), 6 deletions(-)
diff --git a/packages/nocodb-nest/package-lock.json b/packages/nocodb-nest/package-lock.json
index c47ff03cf2..5033baa226 100644
--- a/packages/nocodb-nest/package-lock.json
+++ b/packages/nocodb-nest/package-lock.json
@@ -17464,9 +17464,9 @@
"integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ=="
},
"node_modules/vm2": {
- "version": "3.9.16",
- "resolved": "https://registry.npmjs.org/vm2/-/vm2-3.9.16.tgz",
- "integrity": "sha512-3T9LscojNTxdOyG+e8gFeyBXkMlOBYDoF6dqZbj+MPVHi9x10UfiTAJIobuchRCp3QvC+inybTbMJIUrLsig0w==",
+ "version": "3.9.17",
+ "resolved": "https://registry.npmjs.org/vm2/-/vm2-3.9.17.tgz",
+ "integrity": "sha512-AqwtCnZ/ERcX+AVj9vUsphY56YANXxRuqMb7GsDtAr0m0PcQX3u0Aj3KWiXM0YAHy7i6JEeHrwOnwXbGYgRpAw==",
"dependencies": {
"acorn": "^8.7.0",
"acorn-walk": "^8.2.0"
@@ -31578,9 +31578,9 @@
}
},
"vm2": {
- "version": "3.9.16",
- "resolved": "https://registry.npmjs.org/vm2/-/vm2-3.9.16.tgz",
- "integrity": "sha512-3T9LscojNTxdOyG+e8gFeyBXkMlOBYDoF6dqZbj+MPVHi9x10UfiTAJIobuchRCp3QvC+inybTbMJIUrLsig0w==",
+ "version": "3.9.17",
+ "resolved": "https://registry.npmjs.org/vm2/-/vm2-3.9.17.tgz",
+ "integrity": "sha512-AqwtCnZ/ERcX+AVj9vUsphY56YANXxRuqMb7GsDtAr0m0PcQX3u0Aj3KWiXM0YAHy7i6JEeHrwOnwXbGYgRpAw==",
"requires": {
"acorn": "^8.7.0",
"acorn-walk": "^8.2.0"
From 5dbf98cf211507b9486042cf9beae7e05d8c0ff4 Mon Sep 17 00:00:00 2001
From: Wing-Kam Wong
Date: Tue, 25 Apr 2023 18:03:59 +0800
Subject: [PATCH 12/33] fix(nc-gui): add missing else
---
.../nc-gui/components/smartsheet/expanded-form/Comments.vue | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/packages/nc-gui/components/smartsheet/expanded-form/Comments.vue b/packages/nc-gui/components/smartsheet/expanded-form/Comments.vue
index f5c7d5b283..a7c93920e5 100644
--- a/packages/nc-gui/components/smartsheet/expanded-form/Comments.vue
+++ b/packages/nc-gui/components/smartsheet/expanded-form/Comments.vue
@@ -166,7 +166,7 @@ watch(
-
+
{{ log.description }}
From aeb530a682f30ad2f079a9420b5b4c9e1bc3028e Mon Sep 17 00:00:00 2001
From: Wing-Kam Wong
Date: Tue, 25 Apr 2023 18:32:25 +0800
Subject: [PATCH 13/33] fix(nocodb): allow kanban for calling publicHmList and
publicMmList
---
packages/nocodb-nest/src/services/public-datas.service.ts | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/packages/nocodb-nest/src/services/public-datas.service.ts b/packages/nocodb-nest/src/services/public-datas.service.ts
index f18ae79f2a..07b5653f5e 100644
--- a/packages/nocodb-nest/src/services/public-datas.service.ts
+++ b/packages/nocodb-nest/src/services/public-datas.service.ts
@@ -360,7 +360,8 @@ export class PublicDatasService {
const view = await View.getByUUID(param.sharedViewUuid);
if (!view) NcError.notFound('Not found');
- if (view.type !== ViewTypes.GRID) NcError.notFound('Not found');
+ if (view.type !== ViewTypes.GRID && view.type !== ViewTypes.KANBAN)
+ NcError.notFound('Not found');
if (view.password && view.password !== param.password) {
NcError.forbidden(ErrorMessages.INVALID_SHARED_VIEW_PASSWORD);
@@ -425,7 +426,8 @@ export class PublicDatasService {
const view = await View.getByUUID(param.sharedViewUuid);
if (!view) NcError.notFound('Not found');
- if (view.type !== ViewTypes.GRID) NcError.notFound('Not found');
+ if (view.type !== ViewTypes.GRID && view.type !== ViewTypes.KANBAN)
+ NcError.notFound('Not found');
if (view.password && view.password !== param.password) {
NcError.forbidden(ErrorMessages.INVALID_SHARED_VIEW_PASSWORD);
From 704fcaf30f42fb1eb745b9e4ccc88e4261ff2460 Mon Sep 17 00:00:00 2001
From: Raju Udava <86527202+dstala@users.noreply.github.com>
Date: Tue, 25 Apr 2023 20:49:49 +0530
Subject: [PATCH 14/33] chore: folder restructure
---
tests/playwright/tests/{ => db}/01-webhook.spec.ts | 12 ++++++------
.../tests/{ => db}/accountLicense.spec.ts | 8 ++++----
.../tests/{ => db}/accountTokenManagement.spec.ts | 6 +++---
.../tests/{ => db}/accountUserManagement.spec.ts | 10 +++++-----
.../tests/{ => db}/accountUserSettings.spec.ts | 8 ++++----
.../tests/{ => db}/authChangePassword.spec.ts | 14 +++++++-------
tests/playwright/tests/{ => db}/baseShare.spec.ts | 10 +++++-----
.../tests/{ => db}/cellSelection.spec.ts | 6 +++---
.../tests/{ => db}/columnAttachments.spec.ts | 10 +++++-----
.../tests/{ => db}/columnBarcode.spec.ts | 6 +++---
.../tests/{ => db}/columnCheckbox.spec.ts | 6 +++---
.../tests/{ => db}/columnDateTime.spec.ts | 4 ++--
.../tests/{ => db}/columnDuration.spec.ts | 4 ++--
.../tests/{ => db}/columnFormula.spec.ts | 6 +++---
.../tests/{ => db}/columnGeoData.spec.ts | 6 +++---
.../{ => db}/columnLinkToAnotherRecord.spec.ts | 4 ++--
.../tests/{ => db}/columnLookupRollup.spec.ts | 4 ++--
.../tests/{ => db}/columnMenuOperations.spec.ts | 4 ++--
.../tests/{ => db}/columnMultiSelect.spec.ts | 8 ++++----
.../playwright/tests/{ => db}/columnQrCode.spec.ts | 6 +++---
.../playwright/tests/{ => db}/columnRating.spec.ts | 6 +++---
.../{ => db}/columnRelationalExtendedTests.spec.ts | 6 +++---
.../tests/{ => db}/columnSingleSelect.spec.ts | 8 ++++----
tests/playwright/tests/{ => db}/erd.spec.ts | 14 +++++++-------
.../tests/{ => db}/expandedFormUrl.spec.ts | 10 +++++-----
tests/playwright/tests/{ => db}/filters.spec.ts | 8 ++++----
.../tests/{ => db}/findRowByScanner.spec.ts | 8 ++++----
tests/playwright/tests/{ => db}/import.spec.ts | 10 +++++-----
.../tests/{ => db}/keyboardShortcuts.spec.ts | 6 +++---
tests/playwright/tests/{ => db}/language.spec.ts | 6 +++---
tests/playwright/tests/{ => db}/megaTable.spec.ts | 2 +-
tests/playwright/tests/{ => db}/metaSync.spec.ts | 8 ++++----
tests/playwright/tests/{ => db}/mobileMode.spec.ts | 8 ++++----
tests/playwright/tests/{ => db}/pagination.spec.ts | 4 ++--
.../tests/{ => db}/projectOperations.spec.ts | 8 ++++----
.../playwright/tests/{ => db}/rolesCreate.spec.ts | 10 +++++-----
.../playwright/tests/{ => db}/rolesPreview.spec.ts | 8 ++++----
.../tests/{ => db}/rolesSuperUser.spec.ts | 4 ++--
tests/playwright/tests/{ => db}/swagger.spec.ts | 6 +++---
.../tests/{ => db}/tableColumnOperation.spec.ts | 6 +++---
.../tests/{ => db}/tableOperations.spec.ts | 6 +++---
.../tests/{ => db}/toolbarOperations.spec.ts | 6 +++---
tests/playwright/tests/{ => db}/undo-redo.spec.ts | 10 +++++-----
tests/playwright/tests/{ => db}/viewForm.spec.ts | 12 ++++++------
.../tests/{ => db}/viewFormShareSurvey.spec.ts | 6 +++---
.../tests/{ => db}/viewGridShare.spec.ts | 6 +++---
tests/playwright/tests/{ => db}/viewKanban.spec.ts | 8 ++++----
tests/playwright/tests/{ => db}/viewMap.spec.ts | 6 +++---
tests/playwright/tests/{ => db}/viewMenu.spec.ts | 6 +++---
tests/playwright/tests/{ => db}/views.spec.ts | 6 +++---
50 files changed, 180 insertions(+), 180 deletions(-)
rename tests/playwright/tests/{ => db}/01-webhook.spec.ts (98%)
rename tests/playwright/tests/{ => db}/accountLicense.spec.ts (80%)
rename tests/playwright/tests/{ => db}/accountTokenManagement.spec.ts (81%)
rename tests/playwright/tests/{ => db}/accountUserManagement.spec.ts (88%)
rename tests/playwright/tests/{ => db}/accountUserSettings.spec.ts (89%)
rename tests/playwright/tests/{ => db}/authChangePassword.spec.ts (85%)
rename tests/playwright/tests/{ => db}/baseShare.spec.ts (91%)
rename tests/playwright/tests/{ => db}/cellSelection.spec.ts (96%)
rename tests/playwright/tests/{ => db}/columnAttachments.spec.ts (96%)
rename tests/playwright/tests/{ => db}/columnBarcode.spec.ts (99%)
rename tests/playwright/tests/{ => db}/columnCheckbox.spec.ts (96%)
rename tests/playwright/tests/{ => db}/columnDateTime.spec.ts (96%)
rename tests/playwright/tests/{ => db}/columnDuration.spec.ts (97%)
rename tests/playwright/tests/{ => db}/columnFormula.spec.ts (97%)
rename tests/playwright/tests/{ => db}/columnGeoData.spec.ts (92%)
rename tests/playwright/tests/{ => db}/columnLinkToAnotherRecord.spec.ts (98%)
rename tests/playwright/tests/{ => db}/columnLookupRollup.spec.ts (94%)
rename tests/playwright/tests/{ => db}/columnMenuOperations.spec.ts (97%)
rename tests/playwright/tests/{ => db}/columnMultiSelect.spec.ts (97%)
rename tests/playwright/tests/{ => db}/columnQrCode.spec.ts (99%)
rename tests/playwright/tests/{ => db}/columnRating.spec.ts (95%)
rename tests/playwright/tests/{ => db}/columnRelationalExtendedTests.spec.ts (96%)
rename tests/playwright/tests/{ => db}/columnSingleSelect.spec.ts (97%)
rename tests/playwright/tests/{ => db}/erd.spec.ts (96%)
rename tests/playwright/tests/{ => db}/expandedFormUrl.spec.ts (95%)
rename tests/playwright/tests/{ => db}/filters.spec.ts (99%)
rename tests/playwright/tests/{ => db}/findRowByScanner.spec.ts (80%)
rename tests/playwright/tests/{ => db}/import.spec.ts (86%)
rename tests/playwright/tests/{ => db}/keyboardShortcuts.spec.ts (98%)
rename tests/playwright/tests/{ => db}/language.spec.ts (90%)
rename tests/playwright/tests/{ => db}/megaTable.spec.ts (99%)
rename tests/playwright/tests/{ => db}/metaSync.spec.ts (97%)
rename tests/playwright/tests/{ => db}/mobileMode.spec.ts (91%)
rename tests/playwright/tests/{ => db}/pagination.spec.ts (90%)
rename tests/playwright/tests/{ => db}/projectOperations.spec.ts (88%)
rename tests/playwright/tests/{ => db}/rolesCreate.spec.ts (93%)
rename tests/playwright/tests/{ => db}/rolesPreview.spec.ts (93%)
rename tests/playwright/tests/{ => db}/rolesSuperUser.spec.ts (95%)
rename tests/playwright/tests/{ => db}/swagger.spec.ts (90%)
rename tests/playwright/tests/{ => db}/tableColumnOperation.spec.ts (93%)
rename tests/playwright/tests/{ => db}/tableOperations.spec.ts (92%)
rename tests/playwright/tests/{ => db}/toolbarOperations.spec.ts (94%)
rename tests/playwright/tests/{ => db}/undo-redo.spec.ts (98%)
rename tests/playwright/tests/{ => db}/viewForm.spec.ts (95%)
rename tests/playwright/tests/{ => db}/viewFormShareSurvey.spec.ts (93%)
rename tests/playwright/tests/{ => db}/viewGridShare.spec.ts (98%)
rename tests/playwright/tests/{ => db}/viewKanban.spec.ts (97%)
rename tests/playwright/tests/{ => db}/viewMap.spec.ts (93%)
rename tests/playwright/tests/{ => db}/viewMenu.spec.ts (94%)
rename tests/playwright/tests/{ => db}/views.spec.ts (96%)
diff --git a/tests/playwright/tests/01-webhook.spec.ts b/tests/playwright/tests/db/01-webhook.spec.ts
similarity index 98%
rename from tests/playwright/tests/01-webhook.spec.ts
rename to tests/playwright/tests/db/01-webhook.spec.ts
index 325bde44bb..7996142655 100644
--- a/tests/playwright/tests/01-webhook.spec.ts
+++ b/tests/playwright/tests/db/01-webhook.spec.ts
@@ -1,11 +1,11 @@
import { expect, test } from '@playwright/test';
-import { DashboardPage } from '../pages/Dashboard';
-import setup from '../setup';
-import makeServer from '../setup/server';
-import { WebhookFormPage } from '../pages/Dashboard/WebhookForm';
-import { isSubset } from './utils/general';
+import { DashboardPage } from '../../pages/Dashboard';
+import setup from '../../setup';
+import makeServer from '../../setup/server';
+import { WebhookFormPage } from '../../pages/Dashboard/WebhookForm';
+import { isSubset } from '../utils/general';
import { Api, UITypes } from 'nocodb-sdk';
-import { isMysql, isPg, isSqlite } from '../setup/db';
+import { isMysql, isPg, isSqlite } from '../../setup/db';
const hookPath = 'http://localhost:9090/hook';
let api: Api;
diff --git a/tests/playwright/tests/accountLicense.spec.ts b/tests/playwright/tests/db/accountLicense.spec.ts
similarity index 80%
rename from tests/playwright/tests/accountLicense.spec.ts
rename to tests/playwright/tests/db/accountLicense.spec.ts
index 64e4af62d7..9d9e6038e2 100644
--- a/tests/playwright/tests/accountLicense.spec.ts
+++ b/tests/playwright/tests/db/accountLicense.spec.ts
@@ -1,8 +1,8 @@
import { test } from '@playwright/test';
-import { AccountPage } from '../pages/Account';
-import setup from '../setup';
-import { AccountLicensePage } from '../pages/Account/License';
-import { DashboardPage } from '../pages/Dashboard';
+import { AccountPage } from '../../pages/Account';
+import setup from '../../setup';
+import { AccountLicensePage } from '../../pages/Account/License';
+import { DashboardPage } from '../../pages/Dashboard';
test.describe('Enterprise License', () => {
// @ts-ignore
diff --git a/tests/playwright/tests/accountTokenManagement.spec.ts b/tests/playwright/tests/db/accountTokenManagement.spec.ts
similarity index 81%
rename from tests/playwright/tests/accountTokenManagement.spec.ts
rename to tests/playwright/tests/db/accountTokenManagement.spec.ts
index 7093318b92..8fbe1c305c 100644
--- a/tests/playwright/tests/accountTokenManagement.spec.ts
+++ b/tests/playwright/tests/db/accountTokenManagement.spec.ts
@@ -1,7 +1,7 @@
import { test } from '@playwright/test';
-import { AccountPage } from '../pages/Account';
-import { AccountTokenPage } from '../pages/Account/Token';
-import setup from '../setup';
+import { AccountPage } from '../../pages/Account';
+import { AccountTokenPage } from '../../pages/Account/Token';
+import setup from '../../setup';
test.describe('User roles', () => {
let accountTokenPage: AccountTokenPage;
diff --git a/tests/playwright/tests/accountUserManagement.spec.ts b/tests/playwright/tests/db/accountUserManagement.spec.ts
similarity index 88%
rename from tests/playwright/tests/accountUserManagement.spec.ts
rename to tests/playwright/tests/db/accountUserManagement.spec.ts
index 285a818749..abc2b70671 100644
--- a/tests/playwright/tests/accountUserManagement.spec.ts
+++ b/tests/playwright/tests/db/accountUserManagement.spec.ts
@@ -1,9 +1,9 @@
import { test } from '@playwright/test';
-import { AccountPage } from '../pages/Account';
-import { AccountUsersPage } from '../pages/Account/Users';
-import { ProjectsPage } from '../pages/ProjectsPage';
-import { SignupPage } from '../pages/SignupPage';
-import setup from '../setup';
+import { AccountPage } from '../../pages/Account';
+import { AccountUsersPage } from '../../pages/Account/Users';
+import { ProjectsPage } from '../../pages/ProjectsPage';
+import { SignupPage } from '../../pages/SignupPage';
+import setup from '../../setup';
const roleDb = [
{ email: 'creator@nocodb.com', role: 'Organization Level Creator', url: '' },
diff --git a/tests/playwright/tests/accountUserSettings.spec.ts b/tests/playwright/tests/db/accountUserSettings.spec.ts
similarity index 89%
rename from tests/playwright/tests/accountUserSettings.spec.ts
rename to tests/playwright/tests/db/accountUserSettings.spec.ts
index e8034e5448..bfff8f510d 100644
--- a/tests/playwright/tests/accountUserSettings.spec.ts
+++ b/tests/playwright/tests/db/accountUserSettings.spec.ts
@@ -1,8 +1,8 @@
import { test } from '@playwright/test';
-import { AccountPage } from '../pages/Account';
-import { AccountSettingsPage } from '../pages/Account/Settings';
-import { SignupPage } from '../pages/SignupPage';
-import setup from '../setup';
+import { AccountPage } from '../../pages/Account';
+import { AccountSettingsPage } from '../../pages/Account/Settings';
+import { SignupPage } from '../../pages/SignupPage';
+import setup from '../../setup';
test.describe('App settings', () => {
let accountSettingsPage: AccountSettingsPage;
diff --git a/tests/playwright/tests/authChangePassword.spec.ts b/tests/playwright/tests/db/authChangePassword.spec.ts
similarity index 85%
rename from tests/playwright/tests/authChangePassword.spec.ts
rename to tests/playwright/tests/db/authChangePassword.spec.ts
index da947665aa..08408c2ef2 100644
--- a/tests/playwright/tests/authChangePassword.spec.ts
+++ b/tests/playwright/tests/db/authChangePassword.spec.ts
@@ -1,11 +1,11 @@
import { test } from '@playwright/test';
-import { DashboardPage } from '../pages/Dashboard';
-import setup from '../setup';
-import { LoginPage } from '../pages/LoginPage';
-import { SettingsPage, SettingTab } from '../pages/Dashboard/Settings';
-import { SignupPage } from '../pages/SignupPage';
-import { ProjectsPage } from '../pages/ProjectsPage';
-import { AccountPage } from '../pages/Account';
+import { DashboardPage } from '../../pages/Dashboard';
+import setup from '../../setup';
+import { LoginPage } from '../../pages/LoginPage';
+import { SettingsPage, SettingTab } from '../../pages/Dashboard/Settings';
+import { SignupPage } from '../../pages/SignupPage';
+import { ProjectsPage } from '../../pages/ProjectsPage';
+import { AccountPage } from '../../pages/Account';
test.describe('Auth', () => {
let context: any;
diff --git a/tests/playwright/tests/baseShare.spec.ts b/tests/playwright/tests/db/baseShare.spec.ts
similarity index 91%
rename from tests/playwright/tests/baseShare.spec.ts
rename to tests/playwright/tests/db/baseShare.spec.ts
index 656ef5846e..e60707f4c8 100644
--- a/tests/playwright/tests/baseShare.spec.ts
+++ b/tests/playwright/tests/db/baseShare.spec.ts
@@ -1,9 +1,9 @@
import { test } from '@playwright/test';
-import { DashboardPage } from '../pages/Dashboard';
-import setup from '../setup';
-import { ToolbarPage } from '../pages/Dashboard/common/Toolbar';
-import { LoginPage } from '../pages/LoginPage';
-import { ProjectsPage } from '../pages/ProjectsPage';
+import { DashboardPage } from '../../pages/Dashboard';
+import setup from '../../setup';
+import { ToolbarPage } from '../../pages/Dashboard/common/Toolbar';
+import { LoginPage } from '../../pages/LoginPage';
+import { ProjectsPage } from '../../pages/ProjectsPage';
test.describe('Shared base', () => {
let dashboard: DashboardPage;
diff --git a/tests/playwright/tests/cellSelection.spec.ts b/tests/playwright/tests/db/cellSelection.spec.ts
similarity index 96%
rename from tests/playwright/tests/cellSelection.spec.ts
rename to tests/playwright/tests/db/cellSelection.spec.ts
index f15c6fb277..5603796794 100644
--- a/tests/playwright/tests/cellSelection.spec.ts
+++ b/tests/playwright/tests/db/cellSelection.spec.ts
@@ -1,7 +1,7 @@
import { expect, test } from '@playwright/test';
-import { DashboardPage } from '../pages/Dashboard';
-import { GridPage } from '../pages/Dashboard/Grid';
-import setup from '../setup';
+import { DashboardPage } from '../../pages/Dashboard';
+import { GridPage } from '../../pages/Dashboard/Grid';
+import setup from '../../setup';
test.describe('Verify cell selection', () => {
let dashboard: DashboardPage, grid: GridPage;
diff --git a/tests/playwright/tests/columnAttachments.spec.ts b/tests/playwright/tests/db/columnAttachments.spec.ts
similarity index 96%
rename from tests/playwright/tests/columnAttachments.spec.ts
rename to tests/playwright/tests/db/columnAttachments.spec.ts
index a9858f07e2..0d6a3590dc 100644
--- a/tests/playwright/tests/columnAttachments.spec.ts
+++ b/tests/playwright/tests/db/columnAttachments.spec.ts
@@ -1,9 +1,9 @@
import { expect, test } from '@playwright/test';
-import { DashboardPage } from '../pages/Dashboard';
-import { SharedFormPage } from '../pages/SharedForm';
-import setup from '../setup';
-import { AccountPage } from '../pages/Account';
-import { AccountLicensePage } from '../pages/Account/License';
+import { DashboardPage } from '../../pages/Dashboard';
+import { SharedFormPage } from '../../pages/SharedForm';
+import setup from '../../setup';
+import { AccountPage } from '../../pages/Account';
+import { AccountLicensePage } from '../../pages/Account/License';
test.describe('Attachment column', () => {
let dashboard: DashboardPage;
diff --git a/tests/playwright/tests/columnBarcode.spec.ts b/tests/playwright/tests/db/columnBarcode.spec.ts
similarity index 99%
rename from tests/playwright/tests/columnBarcode.spec.ts
rename to tests/playwright/tests/db/columnBarcode.spec.ts
index 52cc5e5be2..1570e0185a 100644
--- a/tests/playwright/tests/columnBarcode.spec.ts
+++ b/tests/playwright/tests/db/columnBarcode.spec.ts
@@ -1,7 +1,7 @@
import { expect, test } from '@playwright/test';
-import { DashboardPage } from '../pages/Dashboard';
-import setup from '../setup';
-import { GridPage } from '../pages/Dashboard/Grid';
+import { DashboardPage } from '../../pages/Dashboard';
+import setup from '../../setup';
+import { GridPage } from '../../pages/Dashboard/Grid';
interface ExpectedBarcodeData {
referencedValue: string;
diff --git a/tests/playwright/tests/columnCheckbox.spec.ts b/tests/playwright/tests/db/columnCheckbox.spec.ts
similarity index 96%
rename from tests/playwright/tests/columnCheckbox.spec.ts
rename to tests/playwright/tests/db/columnCheckbox.spec.ts
index 9615550b31..23334c80d6 100644
--- a/tests/playwright/tests/columnCheckbox.spec.ts
+++ b/tests/playwright/tests/db/columnCheckbox.spec.ts
@@ -1,7 +1,7 @@
import { test } from '@playwright/test';
-import { DashboardPage } from '../pages/Dashboard';
-import setup from '../setup';
-import { ToolbarPage } from '../pages/Dashboard/common/Toolbar';
+import { DashboardPage } from '../../pages/Dashboard';
+import setup from '../../setup';
+import { ToolbarPage } from '../../pages/Dashboard/common/Toolbar';
test.describe('Checkbox - cell, filter, sort', () => {
let dashboard: DashboardPage, toolbar: ToolbarPage;
diff --git a/tests/playwright/tests/columnDateTime.spec.ts b/tests/playwright/tests/db/columnDateTime.spec.ts
similarity index 96%
rename from tests/playwright/tests/columnDateTime.spec.ts
rename to tests/playwright/tests/db/columnDateTime.spec.ts
index c5349a9a98..d63b03b1e7 100644
--- a/tests/playwright/tests/columnDateTime.spec.ts
+++ b/tests/playwright/tests/db/columnDateTime.spec.ts
@@ -1,6 +1,6 @@
import { test } from '@playwright/test';
-import { DashboardPage } from '../pages/Dashboard';
-import setup from '../setup';
+import { DashboardPage } from '../../pages/Dashboard';
+import setup from '../../setup';
const dateTimeData = [
{
diff --git a/tests/playwright/tests/columnDuration.spec.ts b/tests/playwright/tests/db/columnDuration.spec.ts
similarity index 97%
rename from tests/playwright/tests/columnDuration.spec.ts
rename to tests/playwright/tests/db/columnDuration.spec.ts
index 82b28267eb..885fe9b268 100644
--- a/tests/playwright/tests/columnDuration.spec.ts
+++ b/tests/playwright/tests/db/columnDuration.spec.ts
@@ -1,6 +1,6 @@
import { test } from '@playwright/test';
-import { DashboardPage } from '../pages/Dashboard';
-import setup from '../setup';
+import { DashboardPage } from '../../pages/Dashboard';
+import setup from '../../setup';
// Storing one additional dummy value "10" at end of every input array
// this will trigger update to previously committed data
diff --git a/tests/playwright/tests/columnFormula.spec.ts b/tests/playwright/tests/db/columnFormula.spec.ts
similarity index 97%
rename from tests/playwright/tests/columnFormula.spec.ts
rename to tests/playwright/tests/db/columnFormula.spec.ts
index a285e6a9da..e97803624b 100644
--- a/tests/playwright/tests/columnFormula.spec.ts
+++ b/tests/playwright/tests/db/columnFormula.spec.ts
@@ -1,7 +1,7 @@
import { test } from '@playwright/test';
-import { DashboardPage } from '../pages/Dashboard';
-import setup, { NcContext } from '../setup';
-import { isPg, isSqlite } from '../setup/db';
+import { DashboardPage } from '../../pages/Dashboard';
+import setup, { NcContext } from '../../setup';
+import { isPg, isSqlite } from '../../setup/db';
// Add formula to be verified here & store expected results for 5 rows
// Column data from City table (Sakila DB)
diff --git a/tests/playwright/tests/columnGeoData.spec.ts b/tests/playwright/tests/db/columnGeoData.spec.ts
similarity index 92%
rename from tests/playwright/tests/columnGeoData.spec.ts
rename to tests/playwright/tests/db/columnGeoData.spec.ts
index 290269b6b3..9cc27561fb 100644
--- a/tests/playwright/tests/columnGeoData.spec.ts
+++ b/tests/playwright/tests/db/columnGeoData.spec.ts
@@ -1,7 +1,7 @@
import { test } from '@playwright/test';
-import { DashboardPage } from '../pages/Dashboard';
-import setup from '../setup';
-import { GridPage } from '../pages/Dashboard/Grid';
+import { DashboardPage } from '../../pages/Dashboard';
+import setup from '../../setup';
+import { GridPage } from '../../pages/Dashboard/Grid';
test.describe('Geo Data column', () => {
let dashboard: DashboardPage;
diff --git a/tests/playwright/tests/columnLinkToAnotherRecord.spec.ts b/tests/playwright/tests/db/columnLinkToAnotherRecord.spec.ts
similarity index 98%
rename from tests/playwright/tests/columnLinkToAnotherRecord.spec.ts
rename to tests/playwright/tests/db/columnLinkToAnotherRecord.spec.ts
index dd74bf0fd4..3253f115f8 100644
--- a/tests/playwright/tests/columnLinkToAnotherRecord.spec.ts
+++ b/tests/playwright/tests/db/columnLinkToAnotherRecord.spec.ts
@@ -1,6 +1,6 @@
import { test } from '@playwright/test';
-import { DashboardPage } from '../pages/Dashboard';
-import setup from '../setup';
+import { DashboardPage } from '../../pages/Dashboard';
+import setup from '../../setup';
test.describe('LTAR create & update', () => {
let dashboard: DashboardPage;
diff --git a/tests/playwright/tests/columnLookupRollup.spec.ts b/tests/playwright/tests/db/columnLookupRollup.spec.ts
similarity index 94%
rename from tests/playwright/tests/columnLookupRollup.spec.ts
rename to tests/playwright/tests/db/columnLookupRollup.spec.ts
index 710a298db6..e08940b6bf 100644
--- a/tests/playwright/tests/columnLookupRollup.spec.ts
+++ b/tests/playwright/tests/db/columnLookupRollup.spec.ts
@@ -1,6 +1,6 @@
import { test } from '@playwright/test';
-import { DashboardPage } from '../pages/Dashboard';
-import setup from '../setup';
+import { DashboardPage } from '../../pages/Dashboard';
+import setup from '../../setup';
test.describe('Virtual columns', () => {
let dashboard: DashboardPage;
diff --git a/tests/playwright/tests/columnMenuOperations.spec.ts b/tests/playwright/tests/db/columnMenuOperations.spec.ts
similarity index 97%
rename from tests/playwright/tests/columnMenuOperations.spec.ts
rename to tests/playwright/tests/db/columnMenuOperations.spec.ts
index 429d9cf5d7..cf01f9a313 100644
--- a/tests/playwright/tests/columnMenuOperations.spec.ts
+++ b/tests/playwright/tests/db/columnMenuOperations.spec.ts
@@ -1,6 +1,6 @@
import { test } from '@playwright/test';
-import { DashboardPage } from '../pages/Dashboard';
-import setup from '../setup';
+import { DashboardPage } from '../../pages/Dashboard';
+import setup from '../../setup';
const columns = [
{
diff --git a/tests/playwright/tests/columnMultiSelect.spec.ts b/tests/playwright/tests/db/columnMultiSelect.spec.ts
similarity index 97%
rename from tests/playwright/tests/columnMultiSelect.spec.ts
rename to tests/playwright/tests/db/columnMultiSelect.spec.ts
index 54b9a4a273..60e8fcabcb 100644
--- a/tests/playwright/tests/columnMultiSelect.spec.ts
+++ b/tests/playwright/tests/db/columnMultiSelect.spec.ts
@@ -1,8 +1,8 @@
import { test } from '@playwright/test';
-import { DashboardPage } from '../pages/Dashboard';
-import { GridPage } from '../pages/Dashboard/Grid';
-import setup from '../setup';
-import { ToolbarPage } from '../pages/Dashboard/common/Toolbar';
+import { DashboardPage } from '../../pages/Dashboard';
+import { GridPage } from '../../pages/Dashboard/Grid';
+import setup from '../../setup';
+import { ToolbarPage } from '../../pages/Dashboard/common/Toolbar';
test.describe('Multi select', () => {
let dashboard: DashboardPage, grid: GridPage;
diff --git a/tests/playwright/tests/columnQrCode.spec.ts b/tests/playwright/tests/db/columnQrCode.spec.ts
similarity index 99%
rename from tests/playwright/tests/columnQrCode.spec.ts
rename to tests/playwright/tests/db/columnQrCode.spec.ts
index dac1d4b3e8..527effe1c1 100644
--- a/tests/playwright/tests/columnQrCode.spec.ts
+++ b/tests/playwright/tests/db/columnQrCode.spec.ts
@@ -1,7 +1,7 @@
import { test } from '@playwright/test';
-import { DashboardPage } from '../pages/Dashboard';
-import setup from '../setup';
-import { GridPage } from '../pages/Dashboard/Grid';
+import { DashboardPage } from '../../pages/Dashboard';
+import setup from '../../setup';
+import { GridPage } from '../../pages/Dashboard/Grid';
type ExpectedQrCodeData = {
referencedValue: string;
diff --git a/tests/playwright/tests/columnRating.spec.ts b/tests/playwright/tests/db/columnRating.spec.ts
similarity index 95%
rename from tests/playwright/tests/columnRating.spec.ts
rename to tests/playwright/tests/db/columnRating.spec.ts
index 9eff749818..3c50d319a8 100644
--- a/tests/playwright/tests/columnRating.spec.ts
+++ b/tests/playwright/tests/db/columnRating.spec.ts
@@ -1,7 +1,7 @@
import { test } from '@playwright/test';
-import { DashboardPage } from '../pages/Dashboard';
-import setup from '../setup';
-import { ToolbarPage } from '../pages/Dashboard/common/Toolbar';
+import { DashboardPage } from '../../pages/Dashboard';
+import setup from '../../setup';
+import { ToolbarPage } from '../../pages/Dashboard/common/Toolbar';
test.describe('Rating - cell, filter, sort', () => {
let dashboard: DashboardPage, toolbar: ToolbarPage;
diff --git a/tests/playwright/tests/columnRelationalExtendedTests.spec.ts b/tests/playwright/tests/db/columnRelationalExtendedTests.spec.ts
similarity index 96%
rename from tests/playwright/tests/columnRelationalExtendedTests.spec.ts
rename to tests/playwright/tests/db/columnRelationalExtendedTests.spec.ts
index 8ea6fa67d9..99a70262d3 100644
--- a/tests/playwright/tests/columnRelationalExtendedTests.spec.ts
+++ b/tests/playwright/tests/db/columnRelationalExtendedTests.spec.ts
@@ -1,7 +1,7 @@
import { test } from '@playwright/test';
-import { DashboardPage } from '../pages/Dashboard';
-import setup from '../setup';
-import { isPg } from '../setup/db';
+import { DashboardPage } from '../../pages/Dashboard';
+import setup from '../../setup';
+import { isPg } from '../../setup/db';
test.describe('Relational Columns', () => {
let dashboard: DashboardPage;
diff --git a/tests/playwright/tests/columnSingleSelect.spec.ts b/tests/playwright/tests/db/columnSingleSelect.spec.ts
similarity index 97%
rename from tests/playwright/tests/columnSingleSelect.spec.ts
rename to tests/playwright/tests/db/columnSingleSelect.spec.ts
index b987827b39..935dcf9310 100644
--- a/tests/playwright/tests/columnSingleSelect.spec.ts
+++ b/tests/playwright/tests/db/columnSingleSelect.spec.ts
@@ -1,8 +1,8 @@
import { test } from '@playwright/test';
-import { DashboardPage } from '../pages/Dashboard';
-import { GridPage } from '../pages/Dashboard/Grid';
-import setup from '../setup';
-import { ToolbarPage } from '../pages/Dashboard/common/Toolbar';
+import { DashboardPage } from '../../pages/Dashboard';
+import { GridPage } from '../../pages/Dashboard/Grid';
+import setup from '../../setup';
+import { ToolbarPage } from '../../pages/Dashboard/common/Toolbar';
test.describe('Single select', () => {
let dashboard: DashboardPage, grid: GridPage;
diff --git a/tests/playwright/tests/erd.spec.ts b/tests/playwright/tests/db/erd.spec.ts
similarity index 96%
rename from tests/playwright/tests/erd.spec.ts
rename to tests/playwright/tests/db/erd.spec.ts
index 4d4a5af20f..bd332dc524 100644
--- a/tests/playwright/tests/erd.spec.ts
+++ b/tests/playwright/tests/db/erd.spec.ts
@@ -5,13 +5,13 @@ import {
pgSakilaSqlViews,
pgSakilaTables,
sqliteSakilaSqlViews,
-} from './utils/sakila';
-import { DashboardPage } from '../pages/Dashboard';
-import { SettingsSubTab, SettingTab } from '../pages/Dashboard/Settings';
-import setup from '../setup';
-import { isMysql, isPg, isSqlite } from '../setup/db';
-import { SettingsErdPage } from '../pages/Dashboard/Settings/Erd';
-import { defaultBaseName } from '../constants';
+} from '../utils/sakila';
+import { DashboardPage } from '../../pages/Dashboard';
+import { SettingsSubTab, SettingTab } from '../../pages/Dashboard/Settings';
+import setup from '../../setup';
+import { isMysql, isPg, isSqlite } from '../../setup/db';
+import { SettingsErdPage } from '../../pages/Dashboard/Settings/Erd';
+import { defaultBaseName } from '../../constants';
test.describe('Erd', () => {
let dashboard: DashboardPage;
diff --git a/tests/playwright/tests/expandedFormUrl.spec.ts b/tests/playwright/tests/db/expandedFormUrl.spec.ts
similarity index 95%
rename from tests/playwright/tests/expandedFormUrl.spec.ts
rename to tests/playwright/tests/db/expandedFormUrl.spec.ts
index 8c260f201f..fc1ed91fa8 100644
--- a/tests/playwright/tests/expandedFormUrl.spec.ts
+++ b/tests/playwright/tests/db/expandedFormUrl.spec.ts
@@ -1,9 +1,9 @@
import { expect, test } from '@playwright/test';
-import { DashboardPage } from '../pages/Dashboard';
-import { GalleryPage } from '../pages/Dashboard/Gallery';
-import { GridPage } from '../pages/Dashboard/Grid';
-import setup from '../setup';
-import { ToolbarPage } from '../pages/Dashboard/common/Toolbar';
+import { DashboardPage } from '../../pages/Dashboard';
+import { GalleryPage } from '../../pages/Dashboard/Gallery';
+import { GridPage } from '../../pages/Dashboard/Grid';
+import setup from '../../setup';
+import { ToolbarPage } from '../../pages/Dashboard/common/Toolbar';
test.describe('Expanded form URL', () => {
let dashboard: DashboardPage;
diff --git a/tests/playwright/tests/filters.spec.ts b/tests/playwright/tests/db/filters.spec.ts
similarity index 99%
rename from tests/playwright/tests/filters.spec.ts
rename to tests/playwright/tests/db/filters.spec.ts
index f3a16de396..b30c2bfb9a 100644
--- a/tests/playwright/tests/filters.spec.ts
+++ b/tests/playwright/tests/db/filters.spec.ts
@@ -1,10 +1,10 @@
import { expect, test } from '@playwright/test';
-import { DashboardPage } from '../pages/Dashboard';
-import setup from '../setup';
-import { ToolbarPage } from '../pages/Dashboard/common/Toolbar';
+import { DashboardPage } from '../../pages/Dashboard';
+import setup from '../../setup';
+import { ToolbarPage } from '../../pages/Dashboard/common/Toolbar';
import { UITypes } from 'nocodb-sdk';
import { Api } from 'nocodb-sdk';
-import { rowMixedValue } from '../setup/xcdb-records';
+import { rowMixedValue } from '../../setup/xcdb-records';
import dayjs from 'dayjs';
let dashboard: DashboardPage, toolbar: ToolbarPage;
diff --git a/tests/playwright/tests/findRowByScanner.spec.ts b/tests/playwright/tests/db/findRowByScanner.spec.ts
similarity index 80%
rename from tests/playwright/tests/findRowByScanner.spec.ts
rename to tests/playwright/tests/db/findRowByScanner.spec.ts
index 3d1c6d73cc..167412c99e 100644
--- a/tests/playwright/tests/findRowByScanner.spec.ts
+++ b/tests/playwright/tests/db/findRowByScanner.spec.ts
@@ -1,8 +1,8 @@
import { expect, test } from '@playwright/test';
-import { DashboardPage } from '../pages/Dashboard';
-import { ToolbarPage } from '../pages/Dashboard/common/Toolbar';
-import { FormPage } from '../pages/Dashboard/Form';
-import setup from '../setup';
+import { DashboardPage } from '../../pages/Dashboard';
+import { ToolbarPage } from '../../pages/Dashboard/common/Toolbar';
+import { FormPage } from '../../pages/Dashboard/Form';
+import setup from '../../setup';
// Skip for now as it is not working in CI atm
test.describe.skip('Find row by scanner', () => {
diff --git a/tests/playwright/tests/import.spec.ts b/tests/playwright/tests/db/import.spec.ts
similarity index 86%
rename from tests/playwright/tests/import.spec.ts
rename to tests/playwright/tests/db/import.spec.ts
index c47e4d3783..9a8167d004 100644
--- a/tests/playwright/tests/import.spec.ts
+++ b/tests/playwright/tests/db/import.spec.ts
@@ -1,9 +1,9 @@
import { test } from '@playwright/test';
-import { airtableApiBase, airtableApiKey } from '../constants';
-import { DashboardPage } from '../pages/Dashboard';
-import { quickVerify } from '../quickTests/commonTest';
-import setup from '../setup';
-import { isPg, isSqlite } from '../setup/db';
+import { airtableApiBase, airtableApiKey } from '../../constants';
+import { DashboardPage } from '../../pages/Dashboard';
+import { quickVerify } from '../../quickTests/commonTest';
+import setup from '../../setup';
+import { isPg, isSqlite } from '../../setup/db';
test.describe('Import', () => {
let dashboard: DashboardPage;
diff --git a/tests/playwright/tests/keyboardShortcuts.spec.ts b/tests/playwright/tests/db/keyboardShortcuts.spec.ts
similarity index 98%
rename from tests/playwright/tests/keyboardShortcuts.spec.ts
rename to tests/playwright/tests/db/keyboardShortcuts.spec.ts
index 2c027f542d..98312bf2c5 100644
--- a/tests/playwright/tests/keyboardShortcuts.spec.ts
+++ b/tests/playwright/tests/db/keyboardShortcuts.spec.ts
@@ -1,7 +1,7 @@
import { expect, test } from '@playwright/test';
-import { DashboardPage } from '../pages/Dashboard';
-import { GridPage } from '../pages/Dashboard/Grid';
-import setup from '../setup';
+import { DashboardPage } from '../../pages/Dashboard';
+import { GridPage } from '../../pages/Dashboard/Grid';
+import setup from '../../setup';
import { Api, UITypes } from 'nocodb-sdk';
let api: Api;
diff --git a/tests/playwright/tests/language.spec.ts b/tests/playwright/tests/db/language.spec.ts
similarity index 90%
rename from tests/playwright/tests/language.spec.ts
rename to tests/playwright/tests/db/language.spec.ts
index c3d2453546..949e949bc6 100644
--- a/tests/playwright/tests/language.spec.ts
+++ b/tests/playwright/tests/db/language.spec.ts
@@ -1,7 +1,7 @@
import { test } from '@playwright/test';
-import { DashboardPage } from '../pages/Dashboard';
-import { ProjectsPage } from '../pages/ProjectsPage';
-import setup from '../setup';
+import { DashboardPage } from '../../pages/Dashboard';
+import { ProjectsPage } from '../../pages/ProjectsPage';
+import setup from '../../setup';
const langMenu = [
'help-translate',
diff --git a/tests/playwright/tests/megaTable.spec.ts b/tests/playwright/tests/db/megaTable.spec.ts
similarity index 99%
rename from tests/playwright/tests/megaTable.spec.ts
rename to tests/playwright/tests/db/megaTable.spec.ts
index ffa3976579..b47c09ecf2 100644
--- a/tests/playwright/tests/megaTable.spec.ts
+++ b/tests/playwright/tests/db/megaTable.spec.ts
@@ -1,5 +1,5 @@
import { test } from '@playwright/test';
-import setup from '../setup';
+import setup from '../../setup';
import { UITypes } from 'nocodb-sdk';
import { Api } from 'nocodb-sdk';
let api: Api;
diff --git a/tests/playwright/tests/metaSync.spec.ts b/tests/playwright/tests/db/metaSync.spec.ts
similarity index 97%
rename from tests/playwright/tests/metaSync.spec.ts
rename to tests/playwright/tests/db/metaSync.spec.ts
index 77e927acb3..e830ac99e6 100644
--- a/tests/playwright/tests/metaSync.spec.ts
+++ b/tests/playwright/tests/db/metaSync.spec.ts
@@ -1,8 +1,8 @@
import { test } from '@playwright/test';
-import { DashboardPage } from '../pages/Dashboard';
-import { SettingsPage, SettingTab } from '../pages/Dashboard/Settings';
-import setup, { NcContext } from '../setup';
-import { isMysql, isPg, isSqlite, mysqlExec, pgExec, sqliteExec } from '../setup/db';
+import { DashboardPage } from '../../pages/Dashboard';
+import { SettingsPage, SettingTab } from '../../pages/Dashboard/Settings';
+import setup, { NcContext } from '../../setup';
+import { isMysql, isPg, isSqlite, mysqlExec, pgExec, sqliteExec } from '../../setup/db';
test.describe('Meta sync', () => {
let dashboard: DashboardPage;
diff --git a/tests/playwright/tests/mobileMode.spec.ts b/tests/playwright/tests/db/mobileMode.spec.ts
similarity index 91%
rename from tests/playwright/tests/mobileMode.spec.ts
rename to tests/playwright/tests/db/mobileMode.spec.ts
index 899363c236..3b82f02677 100644
--- a/tests/playwright/tests/mobileMode.spec.ts
+++ b/tests/playwright/tests/db/mobileMode.spec.ts
@@ -1,8 +1,8 @@
import { test } from '@playwright/test';
-import { DashboardPage } from '../pages/Dashboard';
-import { ToolbarPage } from '../pages/Dashboard/common/Toolbar';
-import { FormPage } from '../pages/Dashboard/Form';
-import setup from '../setup';
+import { DashboardPage } from '../../pages/Dashboard';
+import { ToolbarPage } from '../../pages/Dashboard/common/Toolbar';
+import { FormPage } from '../../pages/Dashboard/Form';
+import setup from '../../setup';
test.describe('Mobile Mode', () => {
let dashboard: DashboardPage;
diff --git a/tests/playwright/tests/pagination.spec.ts b/tests/playwright/tests/db/pagination.spec.ts
similarity index 90%
rename from tests/playwright/tests/pagination.spec.ts
rename to tests/playwright/tests/db/pagination.spec.ts
index 52040b7975..7939e320b2 100644
--- a/tests/playwright/tests/pagination.spec.ts
+++ b/tests/playwright/tests/db/pagination.spec.ts
@@ -1,6 +1,6 @@
import { test } from '@playwright/test';
-import { DashboardPage } from '../pages/Dashboard';
-import setup from '../setup';
+import { DashboardPage } from '../../pages/Dashboard';
+import setup from '../../setup';
test.describe('Grid pagination', () => {
let dashboard: DashboardPage;
diff --git a/tests/playwright/tests/projectOperations.spec.ts b/tests/playwright/tests/db/projectOperations.spec.ts
similarity index 88%
rename from tests/playwright/tests/projectOperations.spec.ts
rename to tests/playwright/tests/db/projectOperations.spec.ts
index 2684b90ac9..a8ebc03b57 100644
--- a/tests/playwright/tests/projectOperations.spec.ts
+++ b/tests/playwright/tests/db/projectOperations.spec.ts
@@ -1,8 +1,8 @@
import { test } from '@playwright/test';
-import { DashboardPage } from '../pages/Dashboard';
-import setup from '../setup';
-import { ToolbarPage } from '../pages/Dashboard/common/Toolbar';
-import { ProjectsPage } from '../pages/ProjectsPage';
+import { DashboardPage } from '../../pages/Dashboard';
+import setup from '../../setup';
+import { ToolbarPage } from '../../pages/Dashboard/common/Toolbar';
+import { ProjectsPage } from '../../pages/ProjectsPage';
import { Api } from 'nocodb-sdk';
test.describe('Project operations', () => {
diff --git a/tests/playwright/tests/rolesCreate.spec.ts b/tests/playwright/tests/db/rolesCreate.spec.ts
similarity index 93%
rename from tests/playwright/tests/rolesCreate.spec.ts
rename to tests/playwright/tests/db/rolesCreate.spec.ts
index 79aa72649e..740503758f 100644
--- a/tests/playwright/tests/rolesCreate.spec.ts
+++ b/tests/playwright/tests/db/rolesCreate.spec.ts
@@ -1,9 +1,9 @@
import { test } from '@playwright/test';
-import { DashboardPage } from '../pages/Dashboard';
-import setup from '../setup';
-import { SettingsPage, SettingTab } from '../pages/Dashboard/Settings';
-import { SignupPage } from '../pages/SignupPage';
-import { ProjectsPage } from '../pages/ProjectsPage';
+import { DashboardPage } from '../../pages/Dashboard';
+import setup from '../../setup';
+import { SettingsPage, SettingTab } from '../../pages/Dashboard/Settings';
+import { SignupPage } from '../../pages/SignupPage';
+import { ProjectsPage } from '../../pages/ProjectsPage';
const roleDb = [
{ email: 'creator@nocodb.com', role: 'creator', url: '' },
diff --git a/tests/playwright/tests/rolesPreview.spec.ts b/tests/playwright/tests/db/rolesPreview.spec.ts
similarity index 93%
rename from tests/playwright/tests/rolesPreview.spec.ts
rename to tests/playwright/tests/db/rolesPreview.spec.ts
index eaca9f9fea..acee19aa6e 100644
--- a/tests/playwright/tests/rolesPreview.spec.ts
+++ b/tests/playwright/tests/db/rolesPreview.spec.ts
@@ -1,8 +1,8 @@
import { test } from '@playwright/test';
-import { DashboardPage } from '../pages/Dashboard';
-import setup from '../setup';
-import { ToolbarPage } from '../pages/Dashboard/common/Toolbar';
-import { SettingsPage, SettingTab } from '../pages/Dashboard/Settings';
+import { DashboardPage } from '../../pages/Dashboard';
+import setup from '../../setup';
+import { ToolbarPage } from '../../pages/Dashboard/common/Toolbar';
+import { SettingsPage, SettingTab } from '../../pages/Dashboard/Settings';
const roles = ['Editor', 'Commenter', 'Viewer'];
diff --git a/tests/playwright/tests/rolesSuperUser.spec.ts b/tests/playwright/tests/db/rolesSuperUser.spec.ts
similarity index 95%
rename from tests/playwright/tests/rolesSuperUser.spec.ts
rename to tests/playwright/tests/db/rolesSuperUser.spec.ts
index 80dcf58c06..ec2c8c7e10 100644
--- a/tests/playwright/tests/rolesSuperUser.spec.ts
+++ b/tests/playwright/tests/db/rolesSuperUser.spec.ts
@@ -1,6 +1,6 @@
import { test } from '@playwright/test';
-import { DashboardPage } from '../pages/Dashboard';
-import setup from '../setup';
+import { DashboardPage } from '../../pages/Dashboard';
+import setup from '../../setup';
test.describe('Super user', () => {
let dashboard: DashboardPage;
diff --git a/tests/playwright/tests/swagger.spec.ts b/tests/playwright/tests/db/swagger.spec.ts
similarity index 90%
rename from tests/playwright/tests/swagger.spec.ts
rename to tests/playwright/tests/db/swagger.spec.ts
index 9033784985..05b51f7568 100644
--- a/tests/playwright/tests/swagger.spec.ts
+++ b/tests/playwright/tests/db/swagger.spec.ts
@@ -1,7 +1,7 @@
import { expect, test } from '@playwright/test';
-import { DashboardPage } from '../pages/Dashboard';
-import { GridPage } from '../pages/Dashboard/Grid';
-import setup from '../setup';
+import { DashboardPage } from '../../pages/Dashboard';
+import { GridPage } from '../../pages/Dashboard/Grid';
+import setup from '../../setup';
test.describe('Table Column Operations', () => {
let grid: GridPage, dashboard: DashboardPage;
diff --git a/tests/playwright/tests/tableColumnOperation.spec.ts b/tests/playwright/tests/db/tableColumnOperation.spec.ts
similarity index 93%
rename from tests/playwright/tests/tableColumnOperation.spec.ts
rename to tests/playwright/tests/db/tableColumnOperation.spec.ts
index 6c921d3b6b..4b58919550 100644
--- a/tests/playwright/tests/tableColumnOperation.spec.ts
+++ b/tests/playwright/tests/db/tableColumnOperation.spec.ts
@@ -1,7 +1,7 @@
import { test } from '@playwright/test';
-import { DashboardPage } from '../pages/Dashboard';
-import { GridPage } from '../pages/Dashboard/Grid';
-import setup from '../setup';
+import { DashboardPage } from '../../pages/Dashboard';
+import { GridPage } from '../../pages/Dashboard/Grid';
+import setup from '../../setup';
test.describe('Table Column Operations', () => {
let grid: GridPage, dashboard: DashboardPage;
diff --git a/tests/playwright/tests/tableOperations.spec.ts b/tests/playwright/tests/db/tableOperations.spec.ts
similarity index 92%
rename from tests/playwright/tests/tableOperations.spec.ts
rename to tests/playwright/tests/db/tableOperations.spec.ts
index 9a2d56ebea..a38ec0cd8b 100644
--- a/tests/playwright/tests/tableOperations.spec.ts
+++ b/tests/playwright/tests/db/tableOperations.spec.ts
@@ -1,7 +1,7 @@
import { test } from '@playwright/test';
-import { DashboardPage } from '../pages/Dashboard';
-import { SettingsPage, SettingTab } from '../pages/Dashboard/Settings';
-import setup from '../setup';
+import { DashboardPage } from '../../pages/Dashboard';
+import { SettingsPage, SettingTab } from '../../pages/Dashboard/Settings';
+import setup from '../../setup';
test.describe('Table Operations', () => {
let dashboard: DashboardPage, settings: SettingsPage;
diff --git a/tests/playwright/tests/toolbarOperations.spec.ts b/tests/playwright/tests/db/toolbarOperations.spec.ts
similarity index 94%
rename from tests/playwright/tests/toolbarOperations.spec.ts
rename to tests/playwright/tests/db/toolbarOperations.spec.ts
index 654aab5e1b..75d3a11ed7 100644
--- a/tests/playwright/tests/toolbarOperations.spec.ts
+++ b/tests/playwright/tests/db/toolbarOperations.spec.ts
@@ -1,7 +1,7 @@
import { expect, test } from '@playwright/test';
-import { DashboardPage } from '../pages/Dashboard';
-import { ToolbarPage } from '../pages/Dashboard/common/Toolbar';
-import setup from '../setup';
+import { DashboardPage } from '../../pages/Dashboard';
+import { ToolbarPage } from '../../pages/Dashboard/common/Toolbar';
+import setup from '../../setup';
test.describe('Toolbar operations (GRID)', () => {
let dashboard: DashboardPage, toolbar: ToolbarPage;
diff --git a/tests/playwright/tests/undo-redo.spec.ts b/tests/playwright/tests/db/undo-redo.spec.ts
similarity index 98%
rename from tests/playwright/tests/undo-redo.spec.ts
rename to tests/playwright/tests/db/undo-redo.spec.ts
index e8484ed2b9..e55a27cf3e 100644
--- a/tests/playwright/tests/undo-redo.spec.ts
+++ b/tests/playwright/tests/db/undo-redo.spec.ts
@@ -1,10 +1,10 @@
import { expect, Page, test } from '@playwright/test';
-import { DashboardPage } from '../pages/Dashboard';
-import setup from '../setup';
+import { DashboardPage } from '../../pages/Dashboard';
+import setup from '../../setup';
import { Api, UITypes } from 'nocodb-sdk';
-import { rowMixedValue } from '../setup/xcdb-records';
-import { GridPage } from '../pages/Dashboard/Grid';
-import { ToolbarPage } from '../pages/Dashboard/common/Toolbar';
+import { rowMixedValue } from '../../setup/xcdb-records';
+import { GridPage } from '../../pages/Dashboard/Grid';
+import { ToolbarPage } from '../../pages/Dashboard/common/Toolbar';
let dashboard: DashboardPage,
grid: GridPage,
diff --git a/tests/playwright/tests/viewForm.spec.ts b/tests/playwright/tests/db/viewForm.spec.ts
similarity index 95%
rename from tests/playwright/tests/viewForm.spec.ts
rename to tests/playwright/tests/db/viewForm.spec.ts
index 1685f7c886..3c2e7d56e2 100644
--- a/tests/playwright/tests/viewForm.spec.ts
+++ b/tests/playwright/tests/db/viewForm.spec.ts
@@ -1,10 +1,10 @@
import { test } from '@playwright/test';
-import { DashboardPage } from '../pages/Dashboard';
-import setup from '../setup';
-import { FormPage } from '../pages/Dashboard/Form';
-import { SharedFormPage } from '../pages/SharedForm';
-import { AccountPage } from '../pages/Account';
-import { AccountAppStorePage } from '../pages/Account/AppStore';
+import { DashboardPage } from '../../pages/Dashboard';
+import setup from '../../setup';
+import { FormPage } from '../../pages/Dashboard/Form';
+import { SharedFormPage } from '../../pages/SharedForm';
+import { AccountPage } from '../../pages/Account';
+import { AccountAppStorePage } from '../../pages/Account/AppStore';
// todo: Move most of the ui actions to page object and await on the api response
test.describe('Form view', () => {
diff --git a/tests/playwright/tests/viewFormShareSurvey.spec.ts b/tests/playwright/tests/db/viewFormShareSurvey.spec.ts
similarity index 93%
rename from tests/playwright/tests/viewFormShareSurvey.spec.ts
rename to tests/playwright/tests/db/viewFormShareSurvey.spec.ts
index 11f1ced4ca..6d0b74ee4b 100644
--- a/tests/playwright/tests/viewFormShareSurvey.spec.ts
+++ b/tests/playwright/tests/db/viewFormShareSurvey.spec.ts
@@ -1,7 +1,7 @@
import { test } from '@playwright/test';
-import { DashboardPage } from '../pages/Dashboard';
-import { SurveyFormPage } from '../pages/Dashboard/SurveyForm';
-import setup from '../setup';
+import { DashboardPage } from '../../pages/Dashboard';
+import { SurveyFormPage } from '../../pages/Dashboard/SurveyForm';
+import setup from '../../setup';
test.describe('Share form', () => {
let dashboard: DashboardPage;
diff --git a/tests/playwright/tests/viewGridShare.spec.ts b/tests/playwright/tests/db/viewGridShare.spec.ts
similarity index 98%
rename from tests/playwright/tests/viewGridShare.spec.ts
rename to tests/playwright/tests/db/viewGridShare.spec.ts
index ec932816e1..63fe94da44 100644
--- a/tests/playwright/tests/viewGridShare.spec.ts
+++ b/tests/playwright/tests/db/viewGridShare.spec.ts
@@ -1,7 +1,7 @@
import { test } from '@playwright/test';
-import { DashboardPage } from '../pages/Dashboard';
-import setup from '../setup';
-import { isMysql, isPg, isSqlite } from '../setup/db';
+import { DashboardPage } from '../../pages/Dashboard';
+import setup from '../../setup';
+import { isMysql, isPg, isSqlite } from '../../setup/db';
test.describe('Shared view', () => {
let dashboard: DashboardPage;
diff --git a/tests/playwright/tests/viewKanban.spec.ts b/tests/playwright/tests/db/viewKanban.spec.ts
similarity index 97%
rename from tests/playwright/tests/viewKanban.spec.ts
rename to tests/playwright/tests/db/viewKanban.spec.ts
index 568d8db418..433d3f79ee 100644
--- a/tests/playwright/tests/viewKanban.spec.ts
+++ b/tests/playwright/tests/db/viewKanban.spec.ts
@@ -1,9 +1,9 @@
import { test } from '@playwright/test';
-import { DashboardPage } from '../pages/Dashboard';
-import { ToolbarPage } from '../pages/Dashboard/common/Toolbar';
+import { DashboardPage } from '../../pages/Dashboard';
+import { ToolbarPage } from '../../pages/Dashboard/common/Toolbar';
-import setup from '../setup';
-import { isPg, isSqlite } from '../setup/db';
+import setup from '../../setup';
+import { isPg, isSqlite } from '../../setup/db';
const filmRatings = ['G', 'PG', 'PG-13', 'R', 'NC-17'];
diff --git a/tests/playwright/tests/viewMap.spec.ts b/tests/playwright/tests/db/viewMap.spec.ts
similarity index 93%
rename from tests/playwright/tests/viewMap.spec.ts
rename to tests/playwright/tests/db/viewMap.spec.ts
index 48612c2668..6315237852 100644
--- a/tests/playwright/tests/viewMap.spec.ts
+++ b/tests/playwright/tests/db/viewMap.spec.ts
@@ -1,8 +1,8 @@
import { test } from '@playwright/test';
-import { DashboardPage } from '../pages/Dashboard';
-import { ToolbarPage } from '../pages/Dashboard/common/Toolbar';
+import { DashboardPage } from '../../pages/Dashboard';
+import { ToolbarPage } from '../../pages/Dashboard/common/Toolbar';
-import setup from '../setup';
+import setup from '../../setup';
test.describe('Map View', () => {
let dashboard: DashboardPage, toolbar: ToolbarPage;
diff --git a/tests/playwright/tests/viewMenu.spec.ts b/tests/playwright/tests/db/viewMenu.spec.ts
similarity index 94%
rename from tests/playwright/tests/viewMenu.spec.ts
rename to tests/playwright/tests/db/viewMenu.spec.ts
index 39ac76bd33..0cadbc718c 100644
--- a/tests/playwright/tests/viewMenu.spec.ts
+++ b/tests/playwright/tests/db/viewMenu.spec.ts
@@ -1,7 +1,7 @@
import { test } from '@playwright/test';
-import { DashboardPage } from '../pages/Dashboard';
-import setup from '../setup';
-import { isPg } from '../setup/db';
+import { DashboardPage } from '../../pages/Dashboard';
+import setup from '../../setup';
+import { isPg } from '../../setup/db';
test.describe('Grid view locked', () => {
let dashboard: DashboardPage;
diff --git a/tests/playwright/tests/views.spec.ts b/tests/playwright/tests/db/views.spec.ts
similarity index 96%
rename from tests/playwright/tests/views.spec.ts
rename to tests/playwright/tests/db/views.spec.ts
index b00f98848c..0390ba3200 100644
--- a/tests/playwright/tests/views.spec.ts
+++ b/tests/playwright/tests/db/views.spec.ts
@@ -1,7 +1,7 @@
import { expect, test } from '@playwright/test';
-import { DashboardPage } from '../pages/Dashboard';
-import { ToolbarPage } from '../pages/Dashboard/common/Toolbar';
-import setup from '../setup';
+import { DashboardPage } from '../../pages/Dashboard';
+import { ToolbarPage } from '../../pages/Dashboard/common/Toolbar';
+import setup from '../../setup';
test.describe('Views CRUD Operations', () => {
let dashboard: DashboardPage;
From 116ce656c521a596ecabfc89276e0d86d6167d71 Mon Sep 17 00:00:00 2001
From: Raju Udava <86527202+dstala@users.noreply.github.com>
Date: Tue, 25 Apr 2023 21:05:50 +0530
Subject: [PATCH 15/33] test: sync
---
tests/playwright/tests/db/01-webhook.spec.ts | 11 ++--
.../tests/db/accountLicense.spec.ts | 2 +-
.../tests/db/accountTokenManagement.spec.ts | 2 +-
.../tests/db/accountUserManagement.spec.ts | 5 +-
.../tests/db/accountUserSettings.spec.ts | 7 ++-
.../tests/db/authChangePassword.spec.ts | 9 +--
tests/playwright/tests/db/baseShare.spec.ts | 5 +-
.../playwright/tests/db/cellSelection.spec.ts | 49 ++++++---------
.../tests/db/columnAttachments.spec.ts | 2 +-
.../playwright/tests/db/columnBarcode.spec.ts | 2 +-
.../tests/db/columnCheckbox.spec.ts | 59 ++++++++++++++++---
.../tests/db/columnDateTime.spec.ts | 2 +-
.../tests/db/columnDuration.spec.ts | 2 +-
.../playwright/tests/db/columnFormula.spec.ts | 2 +-
.../playwright/tests/db/columnGeoData.spec.ts | 2 +-
.../db/columnLinkToAnotherRecord.spec.ts | 2 +-
.../tests/db/columnLookupRollup.spec.ts | 2 +-
.../tests/db/columnMenuOperations.spec.ts | 2 +-
.../tests/db/columnMultiSelect.spec.ts | 2 +-
.../playwright/tests/db/columnQrCode.spec.ts | 2 +-
.../playwright/tests/db/columnRating.spec.ts | 2 +-
.../db/columnRelationalExtendedTests.spec.ts | 2 +-
.../tests/db/columnSingleSelect.spec.ts | 2 +-
tests/playwright/tests/db/erd.spec.ts | 2 +-
.../tests/db/expandedFormUrl.spec.ts | 2 +-
tests/playwright/tests/db/filters.spec.ts | 41 +++++++++----
.../tests/db/keyboardShortcuts.spec.ts | 2 +-
tests/playwright/tests/db/language.spec.ts | 2 +-
tests/playwright/tests/db/metaSync.spec.ts | 2 +-
tests/playwright/tests/db/mobileMode.spec.ts | 2 +-
tests/playwright/tests/db/pagination.spec.ts | 2 +-
tests/playwright/tests/db/rolesCreate.spec.ts | 5 +-
.../playwright/tests/db/rolesPreview.spec.ts | 2 +-
.../tests/db/rolesSuperUser.spec.ts | 2 +-
.../tests/db/tableColumnOperation.spec.ts | 2 +-
.../tests/db/tableOperations.spec.ts | 2 +-
.../tests/db/toolbarOperations.spec.ts | 2 +-
tests/playwright/tests/db/viewForm.spec.ts | 2 +-
.../tests/db/viewFormShareSurvey.spec.ts | 2 +-
.../playwright/tests/db/viewGridShare.spec.ts | 2 +-
tests/playwright/tests/db/viewKanban.spec.ts | 2 +-
tests/playwright/tests/db/viewMap.spec.ts | 2 +-
tests/playwright/tests/db/viewMenu.spec.ts | 2 +-
tests/playwright/tests/db/views.spec.ts | 2 +-
tests/playwright/tests/utils/general.ts | 14 ++++-
45 files changed, 169 insertions(+), 106 deletions(-)
diff --git a/tests/playwright/tests/db/01-webhook.spec.ts b/tests/playwright/tests/db/01-webhook.spec.ts
index 7996142655..cf0dce6e4d 100644
--- a/tests/playwright/tests/db/01-webhook.spec.ts
+++ b/tests/playwright/tests/db/01-webhook.spec.ts
@@ -427,8 +427,8 @@ test.describe.serial('Webhook', () => {
async function verifyBulkOperationTrigger(rsp, type) {
for (let i = 0; i < rsp.length; i++) {
expect(rsp[i].type).toBe(type);
- expect(rsp[i].data.table_name).toBe('numberBased');
- expect(rsp[i].data.view_name).toBe('numberBased');
+ expect(rsp[i].data.table_name).toBe('Test');
+ expect(rsp[i].data.view_name).toBe('Test');
// only for insert, rows inserted will not be returned in response. just count
if (type === 'records.after.bulkInsert') {
@@ -476,8 +476,8 @@ test.describe.serial('Webhook', () => {
try {
project = await api.project.read(context.project.id);
table = await api.base.tableCreate(context.project.id, project.bases?.[0].id, {
- table_name: 'numberBased',
- title: 'numberBased',
+ table_name: 'Test',
+ title: 'Test',
columns: columns,
});
} catch (e) {
@@ -485,7 +485,7 @@ test.describe.serial('Webhook', () => {
}
await page.reload();
- await dashboard.treeView.openTable({ title: 'numberBased' });
+ await dashboard.treeView.openTable({ title: 'Test' });
// create after insert webhook
await webhook.create({
@@ -508,7 +508,6 @@ test.describe.serial('Webhook', () => {
}));
await api.dbTableRow.bulkCreate('noco', context.project.id, table.id, rowAttributesForInsert);
await page.reload();
- // 50 records inserted, we expect 2 webhook responses
let rsp = await getWebhookResponses({ request, count: 1 });
await verifyBulkOperationTrigger(rsp, 'records.after.bulkInsert');
diff --git a/tests/playwright/tests/db/accountLicense.spec.ts b/tests/playwright/tests/db/accountLicense.spec.ts
index 9d9e6038e2..ec3ab37502 100644
--- a/tests/playwright/tests/db/accountLicense.spec.ts
+++ b/tests/playwright/tests/db/accountLicense.spec.ts
@@ -11,7 +11,7 @@ test.describe('Enterprise License', () => {
let accountLicensePage: AccountLicensePage, accountPage: AccountPage, context: any;
test.beforeEach(async ({ page }) => {
- context = await setup({ page });
+ context = await setup({ page, isEmptyProject: true });
accountPage = new AccountPage(page);
accountLicensePage = new AccountLicensePage(accountPage);
dashboard = new DashboardPage(page, context.project);
diff --git a/tests/playwright/tests/db/accountTokenManagement.spec.ts b/tests/playwright/tests/db/accountTokenManagement.spec.ts
index 8fbe1c305c..10de551fd9 100644
--- a/tests/playwright/tests/db/accountTokenManagement.spec.ts
+++ b/tests/playwright/tests/db/accountTokenManagement.spec.ts
@@ -10,7 +10,7 @@ test.describe('User roles', () => {
let context: any;
test.beforeEach(async ({ page }) => {
- context = await setup({ page });
+ context = await setup({ page, isEmptyProject: true });
accountPage = new AccountPage(page);
accountTokenPage = new AccountTokenPage(accountPage);
});
diff --git a/tests/playwright/tests/db/accountUserManagement.spec.ts b/tests/playwright/tests/db/accountUserManagement.spec.ts
index abc2b70671..45b4a3c3da 100644
--- a/tests/playwright/tests/db/accountUserManagement.spec.ts
+++ b/tests/playwright/tests/db/accountUserManagement.spec.ts
@@ -4,6 +4,7 @@ import { AccountUsersPage } from '../../pages/Account/Users';
import { ProjectsPage } from '../../pages/ProjectsPage';
import { SignupPage } from '../../pages/SignupPage';
import setup from '../../setup';
+import { getDefaultPwd } from '../utils/general';
const roleDb = [
{ email: 'creator@nocodb.com', role: 'Organization Level Creator', url: '' },
@@ -19,7 +20,7 @@ test.describe('User roles', () => {
let context: any;
test.beforeEach(async ({ page }) => {
- context = await setup({ page });
+ context = await setup({ page, isEmptyProject: true });
accountPage = new AccountPage(page);
accountUsersPage = new AccountUsersPage(accountPage);
@@ -68,7 +69,7 @@ test.describe('User roles', () => {
await signupPage.signUp({
email: roleDb[roleIdx].email,
- password: 'Password123.',
+ password: getDefaultPwd(),
});
await projectsPage.checkProjectCreateButton({
diff --git a/tests/playwright/tests/db/accountUserSettings.spec.ts b/tests/playwright/tests/db/accountUserSettings.spec.ts
index bfff8f510d..8386445d47 100644
--- a/tests/playwright/tests/db/accountUserSettings.spec.ts
+++ b/tests/playwright/tests/db/accountUserSettings.spec.ts
@@ -3,6 +3,7 @@ import { AccountPage } from '../../pages/Account';
import { AccountSettingsPage } from '../../pages/Account/Settings';
import { SignupPage } from '../../pages/SignupPage';
import setup from '../../setup';
+import { getDefaultPwd } from '../utils/general';
test.describe('App settings', () => {
let accountSettingsPage: AccountSettingsPage;
@@ -11,7 +12,7 @@ test.describe('App settings', () => {
let context: any;
test.beforeEach(async ({ page }) => {
- context = await setup({ page });
+ context = await setup({ page, isEmptyProject: true });
accountPage = new AccountPage(page);
accountSettingsPage = accountPage.settings;
});
@@ -39,7 +40,7 @@ test.describe('App settings', () => {
await signupPage.signUp({
email: 'test-user-1@nocodb.com',
- password: 'Password123.',
+ password: getDefaultPwd(),
expectedError: 'Not allowed to signup, contact super admin.',
});
@@ -59,7 +60,7 @@ test.describe('App settings', () => {
await signupPage.signUp({
email: 'test-user-1@nocodb.com',
- password: 'Password123.',
+ password: getDefaultPwd(),
});
});
});
diff --git a/tests/playwright/tests/db/authChangePassword.spec.ts b/tests/playwright/tests/db/authChangePassword.spec.ts
index 08408c2ef2..82ec5be74f 100644
--- a/tests/playwright/tests/db/authChangePassword.spec.ts
+++ b/tests/playwright/tests/db/authChangePassword.spec.ts
@@ -6,6 +6,7 @@ import { SettingsPage, SettingTab } from '../../pages/Dashboard/Settings';
import { SignupPage } from '../../pages/SignupPage';
import { ProjectsPage } from '../../pages/ProjectsPage';
import { AccountPage } from '../../pages/Account';
+import { getDefaultPwd } from '../utils/general';
test.describe('Auth', () => {
let context: any;
@@ -16,7 +17,7 @@ test.describe('Auth', () => {
let accountPage: AccountPage;
test.beforeEach(async ({ page }) => {
- context = await setup({ page });
+ context = await setup({ page, isEmptyProject: true });
dashboard = new DashboardPage(page, context.project);
signupPage = new SignupPage(page);
projectsPage = new ProjectsPage(page);
@@ -41,7 +42,7 @@ test.describe('Auth', () => {
await dashboard.rootPage.goto(url);
await signupPage.signUp({
email: 'user-1@nocodb.com',
- password: 'Password123.',
+ password: getDefaultPwd(),
});
await projectsPage.openPasswordChangeModal();
@@ -56,7 +57,7 @@ test.describe('Auth', () => {
// New pass and repeat pass mismatch
await accountPage.users.changePasswordPage.changePassword({
- oldPass: 'Password123.',
+ oldPass: getDefaultPwd(),
newPass: '123456789',
repeatPass: '987654321',
networkValidation: false,
@@ -65,7 +66,7 @@ test.describe('Auth', () => {
// All good
await accountPage.users.changePasswordPage.changePassword({
- oldPass: 'Password123.',
+ oldPass: getDefaultPwd(),
newPass: 'NewPasswordConfigured',
repeatPass: 'NewPasswordConfigured',
networkValidation: true,
diff --git a/tests/playwright/tests/db/baseShare.spec.ts b/tests/playwright/tests/db/baseShare.spec.ts
index e60707f4c8..e9d83a5be1 100644
--- a/tests/playwright/tests/db/baseShare.spec.ts
+++ b/tests/playwright/tests/db/baseShare.spec.ts
@@ -4,6 +4,7 @@ import setup from '../../setup';
import { ToolbarPage } from '../../pages/Dashboard/common/Toolbar';
import { LoginPage } from '../../pages/LoginPage';
import { ProjectsPage } from '../../pages/ProjectsPage';
+import { getDefaultPwd } from '../utils/general';
test.describe('Shared base', () => {
let dashboard: DashboardPage;
@@ -47,7 +48,7 @@ test.describe('Shared base', () => {
}
test.beforeEach(async ({ page }) => {
- context = await setup({ page });
+ context = await setup({ page, isEmptyProject: false });
dashboard = new DashboardPage(page, context.project);
projectPage = new ProjectsPage(page);
toolbar = dashboard.grid.toolbar;
@@ -77,7 +78,7 @@ test.describe('Shared base', () => {
await loginPage.signIn({
email: 'user@nocodb.com',
- password: 'Password123.',
+ password: getDefaultPwd(),
withoutPrefix: true,
});
diff --git a/tests/playwright/tests/db/cellSelection.spec.ts b/tests/playwright/tests/db/cellSelection.spec.ts
index 5603796794..5b59c533aa 100644
--- a/tests/playwright/tests/db/cellSelection.spec.ts
+++ b/tests/playwright/tests/db/cellSelection.spec.ts
@@ -8,102 +8,91 @@ test.describe('Verify cell selection', () => {
let context: any;
test.beforeEach(async ({ page }) => {
- context = await setup({ page });
+ context = await setup({ page, isEmptyProject: false });
dashboard = new DashboardPage(page, context.project);
grid = dashboard.grid;
+ await dashboard.closeAllTabs();
});
- test('#1 when range is selected, it has correct number of selected cells', async () => {
+ test('Suite-1', async () => {
+ // #1 when range is selected, it has correct number of selected cells
await dashboard.treeView.openTable({ title: 'Customer' });
await grid.selectRange({
start: { index: 0, columnHeader: 'FirstName' },
end: { index: 2, columnHeader: 'Email' },
});
-
expect(await grid.selectedCount()).toBe(9);
- });
+ await dashboard.closeAllTabs();
- test('#2 when copied with clipboard, it copies correct text', async () => {
+ // #2 when copied with clipboard, it copies correct text
await dashboard.treeView.openTable({ title: 'Customer' });
await grid.selectRange({
start: { index: 0, columnHeader: 'FirstName' },
end: { index: 1, columnHeader: 'LastName' },
});
-
expect(await grid.copyWithKeyboard()).toBe('MARY \t SMITH\n' + ' PATRICIA \t JOHNSON\n');
- });
+ await dashboard.closeAllTabs();
- test('#3 when copied with mouse, it copies correct text', async () => {
+ // #3 when copied with mouse, it copies correct text
await dashboard.treeView.openTable({ title: 'Customer' });
await grid.selectRange({
start: { index: 0, columnHeader: 'FirstName' },
end: { index: 1, columnHeader: 'LastName' },
});
-
expect(await grid.copyWithMouse({ index: 0, columnHeader: 'FirstName' })).toBe(
'MARY \t SMITH\n' + ' PATRICIA \t JOHNSON\n'
);
+ await dashboard.closeAllTabs();
});
- // FIXME: this is edge case, better be moved to integration tests
- test('#4 when cell inside selection range is clicked, it clears previous selection', async () => {
+ test('Suite-2', async ({ page }) => {
+ // #4 when cell inside selection range is clicked, it clears previous selection
await dashboard.treeView.openTable({ title: 'Country' });
await grid.selectRange({
start: { index: 0, columnHeader: 'Country' },
end: { index: 2, columnHeader: 'City List' },
});
-
expect(await grid.selectedCount()).toBe(9);
-
await grid.cell.get({ index: 0, columnHeader: 'Country' }).click();
-
expect(await grid.selectedCount()).toBe(1);
expect(await grid.cell.verifyCellActiveSelected({ index: 0, columnHeader: 'Country' }));
- });
+ await dashboard.closeAllTabs();
- // FIXME: this is edge case, better be moved to integration tests
- test('#5 when cell outside selection range is clicked, it clears previous selection', async () => {
+ // #5 when cell outside selection range is clicked, it clears previous selection
await dashboard.treeView.openTable({ title: 'Country' });
await grid.selectRange({
start: { index: 0, columnHeader: 'Country' },
end: { index: 2, columnHeader: 'City List' },
});
-
expect(await grid.selectedCount()).toBe(9);
-
await grid.cell.get({ index: 5, columnHeader: 'Country' }).click();
-
expect(await grid.selectedCount()).toBe(1);
expect(await grid.cell.verifyCellActiveSelected({ index: 5, columnHeader: 'Country' }));
- });
+ await dashboard.closeAllTabs();
- // FIXME: this is edge case, better be moved to integration tests
- test('#6 when selection ends on locked field, it still works as expected', async () => {
+ // #6 when selection ends on locked field, it still works as expected
await dashboard.treeView.openTable({ title: 'Country' });
await dashboard.grid.toolbar.fields.toggleShowSystemFields();
await grid.selectRange({
start: { index: 2, columnHeader: 'City List' },
end: { index: 0, columnHeader: 'Country' },
});
-
expect(await grid.selectedCount()).toBe(12);
-
await grid.cell.get({ index: 1, columnHeader: 'Country' }).click();
-
expect(await grid.selectedCount()).toBe(1);
expect(await grid.cell.verifyCellActiveSelected({ index: 1, columnHeader: 'Country' }));
- });
+ await dashboard.grid.toolbar.fields.toggleShowSystemFields();
+ await dashboard.closeAllTabs();
- // FIXME: this is edge case, better be moved to integration tests
- test('#7 when navigated with keyboard, only active cell is affected', async ({ page }) => {
+ // #7 when navigated with keyboard, only active cell is affected
await dashboard.treeView.openTable({ title: 'Country' });
await grid.selectRange({
start: { index: 0, columnHeader: 'Country' },
end: { index: 2, columnHeader: 'City List' },
});
-
await page.keyboard.press('ArrowRight');
expect(await grid.selectedCount()).toBe(1);
expect(await grid.cell.verifyCellActiveSelected({ index: 0, columnHeader: 'LastUpdate' }));
+ await dashboard.closeAllTabs();
});
});
diff --git a/tests/playwright/tests/db/columnAttachments.spec.ts b/tests/playwright/tests/db/columnAttachments.spec.ts
index 0d6a3590dc..7593457cde 100644
--- a/tests/playwright/tests/db/columnAttachments.spec.ts
+++ b/tests/playwright/tests/db/columnAttachments.spec.ts
@@ -10,7 +10,7 @@ test.describe('Attachment column', () => {
let accountLicensePage: AccountLicensePage, accountPage: AccountPage, context: any;
test.beforeEach(async ({ page }) => {
- context = await setup({ page });
+ context = await setup({ page, isEmptyProject: false });
dashboard = new DashboardPage(page, context.project);
accountPage = new AccountPage(page);
accountLicensePage = new AccountLicensePage(accountPage);
diff --git a/tests/playwright/tests/db/columnBarcode.spec.ts b/tests/playwright/tests/db/columnBarcode.spec.ts
index 1570e0185a..783ce1eae5 100644
--- a/tests/playwright/tests/db/columnBarcode.spec.ts
+++ b/tests/playwright/tests/db/columnBarcode.spec.ts
@@ -14,7 +14,7 @@ test.describe('Virtual Columns', () => {
let context: any;
test.beforeEach(async ({ page }) => {
- context = await setup({ page });
+ context = await setup({ page, isEmptyProject: false });
dashboard = new DashboardPage(page, context.project);
grid = dashboard.grid;
});
diff --git a/tests/playwright/tests/db/columnCheckbox.spec.ts b/tests/playwright/tests/db/columnCheckbox.spec.ts
index 23334c80d6..b0e1d94c50 100644
--- a/tests/playwright/tests/db/columnCheckbox.spec.ts
+++ b/tests/playwright/tests/db/columnCheckbox.spec.ts
@@ -2,6 +2,9 @@ import { test } from '@playwright/test';
import { DashboardPage } from '../../pages/Dashboard';
import setup from '../../setup';
import { ToolbarPage } from '../../pages/Dashboard/common/Toolbar';
+import { UITypes } from 'nocodb-sdk';
+import { Api } from 'nocodb-sdk';
+let api: Api;
test.describe('Checkbox - cell, filter, sort', () => {
let dashboard: DashboardPage, toolbar: ToolbarPage;
@@ -37,23 +40,61 @@ test.describe('Checkbox - cell, filter, sort', () => {
}
test.beforeEach(async ({ page }) => {
- context = await setup({ page });
+ context = await setup({ page, isEmptyProject: true });
dashboard = new DashboardPage(page, context.project);
toolbar = dashboard.grid.toolbar;
+
+ api = new Api({
+ baseURL: `http://localhost:8080/`,
+ headers: {
+ 'xc-auth': context.token,
+ },
+ });
+
+ const columns = [
+ {
+ column_name: 'Id',
+ title: 'Id',
+ uidt: UITypes.ID,
+ },
+ {
+ column_name: 'Title',
+ title: 'Title',
+ uidt: UITypes.SingleLineText,
+ },
+ ];
+
+ try {
+ const project = await api.project.read(context.project.id);
+ const table = await api.base.tableCreate(context.project.id, project.bases?.[0].id, {
+ table_name: 'Sheet-1',
+ title: 'Sheet-1',
+ columns: columns,
+ });
+
+ const rowAttributes = [];
+ for (let i = 0; i < 6; i++) {
+ const row = {
+ Id: i + 1,
+ Title: `1${String.fromCharCode(97 + i)}`,
+ };
+ rowAttributes.push(row);
+ }
+
+ await api.dbTableRow.bulkCreate('noco', context.project.id, table.id, rowAttributes);
+ } catch (e) {
+ console.error(e);
+ }
+
+ // page reload
+ await page.reload();
});
test('Checkbox', async () => {
// close 'Team & Auth' tab
await dashboard.closeTab({ title: 'Team & Auth' });
- await dashboard.treeView.createTable({ title: 'Sheet1' });
-
- await dashboard.grid.addNewRow({ index: 0, value: '1a' });
- await dashboard.grid.addNewRow({ index: 1, value: '1b' });
- await dashboard.grid.addNewRow({ index: 2, value: '1c' });
- await dashboard.grid.addNewRow({ index: 3, value: '1d' });
- await dashboard.grid.addNewRow({ index: 4, value: '1e' });
- await dashboard.grid.addNewRow({ index: 5, value: '1f' });
+ await dashboard.treeView.openTable({ title: 'Sheet-1' });
// Create Checkbox column
await dashboard.grid.column.create({
diff --git a/tests/playwright/tests/db/columnDateTime.spec.ts b/tests/playwright/tests/db/columnDateTime.spec.ts
index d63b03b1e7..7647dea6b3 100644
--- a/tests/playwright/tests/db/columnDateTime.spec.ts
+++ b/tests/playwright/tests/db/columnDateTime.spec.ts
@@ -61,7 +61,7 @@ test.describe('DateTime Column', () => {
let context: any;
test.beforeEach(async ({ page }) => {
- context = await setup({ page });
+ context = await setup({ page, isEmptyProject: true });
dashboard = new DashboardPage(page, context.project);
});
diff --git a/tests/playwright/tests/db/columnDuration.spec.ts b/tests/playwright/tests/db/columnDuration.spec.ts
index 885fe9b268..6998c55062 100644
--- a/tests/playwright/tests/db/columnDuration.spec.ts
+++ b/tests/playwright/tests/db/columnDuration.spec.ts
@@ -45,7 +45,7 @@ test.describe.skip('Duration column', () => {
let context: any;
test.beforeEach(async ({ page }) => {
- context = await setup({ page });
+ context = await setup({ page, isEmptyProject: true });
dashboard = new DashboardPage(page, context.project);
});
diff --git a/tests/playwright/tests/db/columnFormula.spec.ts b/tests/playwright/tests/db/columnFormula.spec.ts
index e97803624b..4aabefe37e 100644
--- a/tests/playwright/tests/db/columnFormula.spec.ts
+++ b/tests/playwright/tests/db/columnFormula.spec.ts
@@ -141,7 +141,7 @@ test.describe('Virtual Columns', () => {
let context: any;
test.beforeEach(async ({ page }) => {
- context = await setup({ page });
+ context = await setup({ page, isEmptyProject: false });
dashboard = new DashboardPage(page, context.project);
});
diff --git a/tests/playwright/tests/db/columnGeoData.spec.ts b/tests/playwright/tests/db/columnGeoData.spec.ts
index 9cc27561fb..29e35ce5e7 100644
--- a/tests/playwright/tests/db/columnGeoData.spec.ts
+++ b/tests/playwright/tests/db/columnGeoData.spec.ts
@@ -9,7 +9,7 @@ test.describe('Geo Data column', () => {
let context: any;
test.beforeEach(async ({ page }) => {
- context = await setup({ page });
+ context = await setup({ page, isEmptyProject: false });
dashboard = new DashboardPage(page, context.project);
grid = dashboard.grid;
});
diff --git a/tests/playwright/tests/db/columnLinkToAnotherRecord.spec.ts b/tests/playwright/tests/db/columnLinkToAnotherRecord.spec.ts
index 3253f115f8..1be725e05d 100644
--- a/tests/playwright/tests/db/columnLinkToAnotherRecord.spec.ts
+++ b/tests/playwright/tests/db/columnLinkToAnotherRecord.spec.ts
@@ -10,7 +10,7 @@ test.describe('LTAR create & update', () => {
test.setTimeout(150000);
test.beforeEach(async ({ page }) => {
- context = await setup({ page });
+ context = await setup({ page, isEmptyProject: true });
dashboard = new DashboardPage(page, context.project);
});
diff --git a/tests/playwright/tests/db/columnLookupRollup.spec.ts b/tests/playwright/tests/db/columnLookupRollup.spec.ts
index e08940b6bf..236b94d5ed 100644
--- a/tests/playwright/tests/db/columnLookupRollup.spec.ts
+++ b/tests/playwright/tests/db/columnLookupRollup.spec.ts
@@ -7,7 +7,7 @@ test.describe('Virtual columns', () => {
let context: any;
test.beforeEach(async ({ page }) => {
- context = await setup({ page });
+ context = await setup({ page, isEmptyProject: false });
dashboard = new DashboardPage(page, context.project);
});
diff --git a/tests/playwright/tests/db/columnMenuOperations.spec.ts b/tests/playwright/tests/db/columnMenuOperations.spec.ts
index cf01f9a313..f80b3fc482 100644
--- a/tests/playwright/tests/db/columnMenuOperations.spec.ts
+++ b/tests/playwright/tests/db/columnMenuOperations.spec.ts
@@ -43,7 +43,7 @@ test.describe('Column menu operations', () => {
let context: any;
test.beforeEach(async ({ page }) => {
- context = await setup({ page });
+ context = await setup({ page, isEmptyProject: false });
dashboard = new DashboardPage(page, context.project);
});
diff --git a/tests/playwright/tests/db/columnMultiSelect.spec.ts b/tests/playwright/tests/db/columnMultiSelect.spec.ts
index 60e8fcabcb..029830a155 100644
--- a/tests/playwright/tests/db/columnMultiSelect.spec.ts
+++ b/tests/playwright/tests/db/columnMultiSelect.spec.ts
@@ -9,7 +9,7 @@ test.describe('Multi select', () => {
let context: any;
test.beforeEach(async ({ page }) => {
- context = await setup({ page });
+ context = await setup({ page, isEmptyProject: true });
dashboard = new DashboardPage(page, context.project);
grid = dashboard.grid;
diff --git a/tests/playwright/tests/db/columnQrCode.spec.ts b/tests/playwright/tests/db/columnQrCode.spec.ts
index 527effe1c1..603601c686 100644
--- a/tests/playwright/tests/db/columnQrCode.spec.ts
+++ b/tests/playwright/tests/db/columnQrCode.spec.ts
@@ -14,7 +14,7 @@ test.describe('Virtual Columns', () => {
let context: any;
test.beforeEach(async ({ page }) => {
- context = await setup({ page });
+ context = await setup({ page, isEmptyProject: false });
dashboard = new DashboardPage(page, context.project);
grid = dashboard.grid;
});
diff --git a/tests/playwright/tests/db/columnRating.spec.ts b/tests/playwright/tests/db/columnRating.spec.ts
index 3c50d319a8..d11916fdee 100644
--- a/tests/playwright/tests/db/columnRating.spec.ts
+++ b/tests/playwright/tests/db/columnRating.spec.ts
@@ -37,7 +37,7 @@ test.describe('Rating - cell, filter, sort', () => {
}
test.beforeEach(async ({ page }) => {
- context = await setup({ page });
+ context = await setup({ page, isEmptyProject: true });
dashboard = new DashboardPage(page, context.project);
toolbar = dashboard.grid.toolbar;
});
diff --git a/tests/playwright/tests/db/columnRelationalExtendedTests.spec.ts b/tests/playwright/tests/db/columnRelationalExtendedTests.spec.ts
index 99a70262d3..eecae61ed4 100644
--- a/tests/playwright/tests/db/columnRelationalExtendedTests.spec.ts
+++ b/tests/playwright/tests/db/columnRelationalExtendedTests.spec.ts
@@ -8,7 +8,7 @@ test.describe('Relational Columns', () => {
let context: any;
test.beforeEach(async ({ page }) => {
- context = await setup({ page });
+ context = await setup({ page, isEmptyProject: false });
dashboard = new DashboardPage(page, context.project);
});
diff --git a/tests/playwright/tests/db/columnSingleSelect.spec.ts b/tests/playwright/tests/db/columnSingleSelect.spec.ts
index 935dcf9310..9e5302f5fc 100644
--- a/tests/playwright/tests/db/columnSingleSelect.spec.ts
+++ b/tests/playwright/tests/db/columnSingleSelect.spec.ts
@@ -9,7 +9,7 @@ test.describe('Single select', () => {
let context: any;
test.beforeEach(async ({ page }) => {
- context = await setup({ page });
+ context = await setup({ page, isEmptyProject: true });
dashboard = new DashboardPage(page, context.project);
grid = dashboard.grid;
diff --git a/tests/playwright/tests/db/erd.spec.ts b/tests/playwright/tests/db/erd.spec.ts
index bd332dc524..0000b64df1 100644
--- a/tests/playwright/tests/db/erd.spec.ts
+++ b/tests/playwright/tests/db/erd.spec.ts
@@ -21,7 +21,7 @@ test.describe('Erd', () => {
test.slow();
test.beforeEach(async ({ page }) => {
- context = await setup({ page });
+ context = await setup({ page, isEmptyProject: false });
dashboard = new DashboardPage(page, context.project);
if (isPg(context)) {
diff --git a/tests/playwright/tests/db/expandedFormUrl.spec.ts b/tests/playwright/tests/db/expandedFormUrl.spec.ts
index fc1ed91fa8..78b7b28bf0 100644
--- a/tests/playwright/tests/db/expandedFormUrl.spec.ts
+++ b/tests/playwright/tests/db/expandedFormUrl.spec.ts
@@ -10,7 +10,7 @@ test.describe('Expanded form URL', () => {
let context: any;
test.beforeEach(async ({ page }) => {
- context = await setup({ page });
+ context = await setup({ page, isEmptyProject: false });
dashboard = new DashboardPage(page, context.project);
});
diff --git a/tests/playwright/tests/db/filters.spec.ts b/tests/playwright/tests/db/filters.spec.ts
index b30c2bfb9a..714201072b 100644
--- a/tests/playwright/tests/db/filters.spec.ts
+++ b/tests/playwright/tests/db/filters.spec.ts
@@ -89,7 +89,6 @@ async function verifyFilter(param: {
return;
}
- await toolbar.clickFilter();
await toolbar.filter.add({
title: param.column,
operation: param.opType,
@@ -97,16 +96,13 @@ async function verifyFilter(param: {
value: param.value,
locallySaved: false,
dataType: param?.dataType,
+ openModal: true,
});
- await toolbar.clickFilter();
// verify filtered rows
await validateRowArray({
rowCount: param.result.rowCount,
});
-
- // Reset filter
- await toolbar.filter.reset();
}
// Number based filters
@@ -206,6 +202,8 @@ test.describe('Filter Tests: Numerical', () => {
},
];
+ await toolbar.clickFilter();
+ await toolbar.filter.clickAddFilter();
for (let i = 0; i < filterList.length; i++) {
await verifyFilter({
column: dataType,
@@ -218,7 +216,7 @@ test.describe('Filter Tests: Numerical', () => {
}
test.beforeEach(async ({ page }) => {
- context = await setup({ page });
+ context = await setup({ page, isEmptyProject: true });
dashboard = new DashboardPage(page, context.project);
toolbar = dashboard.grid.toolbar;
@@ -305,6 +303,8 @@ test.describe('Filter Tests: Numerical', () => {
} catch (e) {
console.error(e);
}
+
+ await page.reload();
});
test('Filter: Number', async () => {
@@ -405,6 +405,8 @@ test.describe('Filter Tests: Text based', () => {
},
];
+ await toolbar.clickFilter();
+ await toolbar.filter.clickAddFilter();
for (let i = 0; i < filterList.length; i++) {
await verifyFilter({
column: dataType,
@@ -416,7 +418,7 @@ test.describe('Filter Tests: Text based', () => {
}
test.beforeEach(async ({ page }) => {
- context = await setup({ page });
+ context = await setup({ page, isEmptyProject: true });
dashboard = new DashboardPage(page, context.project);
toolbar = dashboard.grid.toolbar;
@@ -485,6 +487,7 @@ test.describe('Filter Tests: Text based', () => {
} catch (e) {
console.error(e);
}
+ await page.reload();
});
test('Filter: Single Line Text', async () => {
@@ -577,6 +580,8 @@ test.describe('Filter Tests: Select based', () => {
},
];
+ await toolbar.clickFilter();
+ await toolbar.filter.clickAddFilter();
for (let i = 0; i < filterList.length; i++) {
await verifyFilter({
column: dataType,
@@ -587,8 +592,9 @@ test.describe('Filter Tests: Select based', () => {
});
}
}
+
test.beforeEach(async ({ page }) => {
- context = await setup({ page });
+ context = await setup({ page, isEmptyProject: true });
dashboard = new DashboardPage(page, context.project);
toolbar = dashboard.grid.toolbar;
@@ -641,6 +647,7 @@ test.describe('Filter Tests: Select based', () => {
} catch (e) {
console.error(e);
}
+ await page.reload();
});
test('Filter: Single Select', async () => {
@@ -933,7 +940,7 @@ test.describe('Filter Tests: Date based', () => {
}
test.beforeEach(async ({ page }) => {
- context = await setup({ page });
+ context = await setup({ page, isEmptyProject: true });
dashboard = new DashboardPage(page, context.project);
toolbar = dashboard.grid.toolbar;
@@ -978,6 +985,7 @@ test.describe('Filter Tests: Date based', () => {
} catch (e) {
console.error(e);
}
+ await page.reload();
});
test('Date : filters-1', async () => {
@@ -1018,6 +1026,8 @@ test.describe('Filter Tests: AddOn', () => {
},
];
+ await toolbar.clickFilter();
+ await toolbar.filter.clickAddFilter();
for (let i = 0; i < filterList.length; i++) {
await verifyFilter({
column: dataType,
@@ -1029,7 +1039,7 @@ test.describe('Filter Tests: AddOn', () => {
}
}
test.beforeEach(async ({ page }) => {
- context = await setup({ page });
+ context = await setup({ page, isEmptyProject: true });
dashboard = new DashboardPage(page, context.project);
toolbar = dashboard.grid.toolbar;
@@ -1080,6 +1090,7 @@ test.describe('Filter Tests: AddOn', () => {
} catch (e) {
console.error(e);
}
+ await page.reload();
});
test('Filter: Checkbox', async () => {
@@ -1108,6 +1119,8 @@ test.describe('Filter Tests: Link to another record, Lookup, Rollup', () => {
{ op: 'is not blank', value: null, rowCount: 109 },
];
+ await toolbar.clickFilter();
+ await toolbar.filter.clickAddFilter();
for (let i = 0; i < filterList.length; i++) {
await verifyFilter({
column: 'City List',
@@ -1144,6 +1157,8 @@ test.describe('Filter Tests: Link to another record, Lookup, Rollup', () => {
{ op: 'is not blank', value: null, rowCount: 599 },
];
+ await toolbar.clickFilter();
+ await toolbar.filter.clickAddFilter();
for (let i = 0; i < filterList.length; i++) {
await verifyFilter({
column: 'Lookup',
@@ -1181,6 +1196,8 @@ test.describe('Filter Tests: Link to another record, Lookup, Rollup', () => {
{ op: 'is not blank', value: null, rowCount: 598 },
];
+ await toolbar.clickFilter();
+ await toolbar.filter.clickAddFilter();
for (let i = 0; i < filterList.length; i++) {
await verifyFilter({
column: 'Lookup',
@@ -1193,7 +1210,7 @@ test.describe('Filter Tests: Link to another record, Lookup, Rollup', () => {
}
test.beforeEach(async ({ page }) => {
- context = await setup({ page });
+ context = await setup({ page, isEmptyProject: true });
dashboard = new DashboardPage(page, context.project);
toolbar = dashboard.grid.toolbar;
@@ -1237,7 +1254,7 @@ test.describe('Filter Tests: Toggle button', () => {
*/
test.beforeEach(async ({ page }) => {
- context = await setup({ page });
+ context = await setup({ page, isEmptyProject: true });
dashboard = new DashboardPage(page, context.project);
toolbar = dashboard.grid.toolbar;
});
diff --git a/tests/playwright/tests/db/keyboardShortcuts.spec.ts b/tests/playwright/tests/db/keyboardShortcuts.spec.ts
index 98312bf2c5..1e73cb5243 100644
--- a/tests/playwright/tests/db/keyboardShortcuts.spec.ts
+++ b/tests/playwright/tests/db/keyboardShortcuts.spec.ts
@@ -11,7 +11,7 @@ test.describe('Verify shortcuts', () => {
let context: any;
test.beforeEach(async ({ page }) => {
- context = await setup({ page });
+ context = await setup({ page, isEmptyProject: false });
dashboard = new DashboardPage(page, context.project);
grid = dashboard.grid;
});
diff --git a/tests/playwright/tests/db/language.spec.ts b/tests/playwright/tests/db/language.spec.ts
index 949e949bc6..d027457e8e 100644
--- a/tests/playwright/tests/db/language.spec.ts
+++ b/tests/playwright/tests/db/language.spec.ts
@@ -47,7 +47,7 @@ test.describe('Common', () => {
let projectsPage: ProjectsPage;
test.beforeEach(async ({ page }) => {
- context = await setup({ page });
+ context = await setup({ page, isEmptyProject: true });
dashboard = new DashboardPage(page, context.project);
projectsPage = new ProjectsPage(page);
});
diff --git a/tests/playwright/tests/db/metaSync.spec.ts b/tests/playwright/tests/db/metaSync.spec.ts
index e830ac99e6..a0f3f9ee55 100644
--- a/tests/playwright/tests/db/metaSync.spec.ts
+++ b/tests/playwright/tests/db/metaSync.spec.ts
@@ -11,7 +11,7 @@ test.describe('Meta sync', () => {
let dbExec;
test.beforeEach(async ({ page }) => {
- context = await setup({ page });
+ context = await setup({ page, isEmptyProject: false });
dashboard = new DashboardPage(page, context.project);
settings = dashboard.settings;
diff --git a/tests/playwright/tests/db/mobileMode.spec.ts b/tests/playwright/tests/db/mobileMode.spec.ts
index 3b82f02677..997c3b958a 100644
--- a/tests/playwright/tests/db/mobileMode.spec.ts
+++ b/tests/playwright/tests/db/mobileMode.spec.ts
@@ -11,7 +11,7 @@ test.describe('Mobile Mode', () => {
let form: FormPage;
test.beforeEach(async ({ page }) => {
- context = await setup({ page });
+ context = await setup({ page, isEmptyProject: false });
dashboard = new DashboardPage(page, context.project);
form = dashboard.form;
toolbar = dashboard.grid.toolbar;
diff --git a/tests/playwright/tests/db/pagination.spec.ts b/tests/playwright/tests/db/pagination.spec.ts
index 7939e320b2..45b7040c88 100644
--- a/tests/playwright/tests/db/pagination.spec.ts
+++ b/tests/playwright/tests/db/pagination.spec.ts
@@ -7,7 +7,7 @@ test.describe('Grid pagination', () => {
let context: any;
test.beforeEach(async ({ page }) => {
- context = await setup({ page });
+ context = await setup({ page, isEmptyProject: false });
dashboard = new DashboardPage(page, context.project);
});
diff --git a/tests/playwright/tests/db/rolesCreate.spec.ts b/tests/playwright/tests/db/rolesCreate.spec.ts
index 740503758f..9b6c244e1e 100644
--- a/tests/playwright/tests/db/rolesCreate.spec.ts
+++ b/tests/playwright/tests/db/rolesCreate.spec.ts
@@ -4,6 +4,7 @@ import setup from '../../setup';
import { SettingsPage, SettingTab } from '../../pages/Dashboard/Settings';
import { SignupPage } from '../../pages/SignupPage';
import { ProjectsPage } from '../../pages/ProjectsPage';
+import { getDefaultPwd } from '../utils/general';
const roleDb = [
{ email: 'creator@nocodb.com', role: 'creator', url: '' },
@@ -20,7 +21,7 @@ test.describe('User roles', () => {
let context: any;
test.beforeEach(async ({ page }) => {
- context = await setup({ page });
+ context = await setup({ page, isEmptyProject: false });
dashboard = new DashboardPage(page, context.project);
settings = dashboard.settings;
signupPage = new SignupPage(page);
@@ -110,7 +111,7 @@ test.describe('User roles', () => {
await dashboard.rootPage.goto(roleDb[roleIdx].url);
await signupPage.signUp({
email: roleDb[roleIdx].email,
- password: 'Password123.',
+ password: getDefaultPwd(),
});
await projectsPage.openProject({
diff --git a/tests/playwright/tests/db/rolesPreview.spec.ts b/tests/playwright/tests/db/rolesPreview.spec.ts
index acee19aa6e..16a9349767 100644
--- a/tests/playwright/tests/db/rolesPreview.spec.ts
+++ b/tests/playwright/tests/db/rolesPreview.spec.ts
@@ -16,7 +16,7 @@ test.describe('Preview Mode', () => {
let context: any;
test.beforeEach(async ({ page }) => {
- context = await setup({ page });
+ context = await setup({ page, isEmptyProject: false });
dashboard = new DashboardPage(page, context.project);
toolbar = dashboard.grid.toolbar;
settings = dashboard.settings;
diff --git a/tests/playwright/tests/db/rolesSuperUser.spec.ts b/tests/playwright/tests/db/rolesSuperUser.spec.ts
index ec2c8c7e10..f5fd01aeab 100644
--- a/tests/playwright/tests/db/rolesSuperUser.spec.ts
+++ b/tests/playwright/tests/db/rolesSuperUser.spec.ts
@@ -7,7 +7,7 @@ test.describe('Super user', () => {
let context: any;
test.beforeEach(async ({ page }) => {
- context = await setup({ page });
+ context = await setup({ page, isEmptyProject: true });
dashboard = new DashboardPage(page, context.project);
});
diff --git a/tests/playwright/tests/db/tableColumnOperation.spec.ts b/tests/playwright/tests/db/tableColumnOperation.spec.ts
index 4b58919550..39fdc99de5 100644
--- a/tests/playwright/tests/db/tableColumnOperation.spec.ts
+++ b/tests/playwright/tests/db/tableColumnOperation.spec.ts
@@ -8,7 +8,7 @@ test.describe('Table Column Operations', () => {
let context: any;
test.beforeEach(async ({ page }) => {
- context = await setup({ page });
+ context = await setup({ page, isEmptyProject: true });
dashboard = new DashboardPage(page, context.project);
grid = dashboard.grid;
diff --git a/tests/playwright/tests/db/tableOperations.spec.ts b/tests/playwright/tests/db/tableOperations.spec.ts
index a38ec0cd8b..2751ffc5cb 100644
--- a/tests/playwright/tests/db/tableOperations.spec.ts
+++ b/tests/playwright/tests/db/tableOperations.spec.ts
@@ -8,7 +8,7 @@ test.describe('Table Operations', () => {
let context: any;
test.beforeEach(async ({ page }) => {
- context = await setup({ page });
+ context = await setup({ page, isEmptyProject: false });
dashboard = new DashboardPage(page, context.project);
settings = dashboard.settings;
});
diff --git a/tests/playwright/tests/db/toolbarOperations.spec.ts b/tests/playwright/tests/db/toolbarOperations.spec.ts
index 75d3a11ed7..8ad08d58e1 100644
--- a/tests/playwright/tests/db/toolbarOperations.spec.ts
+++ b/tests/playwright/tests/db/toolbarOperations.spec.ts
@@ -16,7 +16,7 @@ test.describe('Toolbar operations (GRID)', () => {
}
test.beforeEach(async ({ page }) => {
- context = await setup({ page });
+ context = await setup({ page, isEmptyProject: false });
dashboard = new DashboardPage(page, context.project);
toolbar = dashboard.grid.toolbar;
});
diff --git a/tests/playwright/tests/db/viewForm.spec.ts b/tests/playwright/tests/db/viewForm.spec.ts
index 3c2e7d56e2..6aca59fcfb 100644
--- a/tests/playwright/tests/db/viewForm.spec.ts
+++ b/tests/playwright/tests/db/viewForm.spec.ts
@@ -15,7 +15,7 @@ test.describe('Form view', () => {
let context: any;
test.beforeEach(async ({ page }) => {
- context = await setup({ page });
+ context = await setup({ page, isEmptyProject: false });
dashboard = new DashboardPage(page, context.project);
form = dashboard.form;
accountPage = new AccountPage(page);
diff --git a/tests/playwright/tests/db/viewFormShareSurvey.spec.ts b/tests/playwright/tests/db/viewFormShareSurvey.spec.ts
index 6d0b74ee4b..b05528155d 100644
--- a/tests/playwright/tests/db/viewFormShareSurvey.spec.ts
+++ b/tests/playwright/tests/db/viewFormShareSurvey.spec.ts
@@ -9,7 +9,7 @@ test.describe('Share form', () => {
let context: any;
test.beforeEach(async ({ page }) => {
- context = await setup({ page });
+ context = await setup({ page, isEmptyProject: false });
dashboard = new DashboardPage(page, context.project);
});
diff --git a/tests/playwright/tests/db/viewGridShare.spec.ts b/tests/playwright/tests/db/viewGridShare.spec.ts
index 63fe94da44..6464426587 100644
--- a/tests/playwright/tests/db/viewGridShare.spec.ts
+++ b/tests/playwright/tests/db/viewGridShare.spec.ts
@@ -10,7 +10,7 @@ test.describe('Shared view', () => {
let sharedLink: string;
test.beforeEach(async ({ page }) => {
- context = await setup({ page });
+ context = await setup({ page, isEmptyProject: false });
dashboard = new DashboardPage(page, context.project);
});
diff --git a/tests/playwright/tests/db/viewKanban.spec.ts b/tests/playwright/tests/db/viewKanban.spec.ts
index 433d3f79ee..6231f9636e 100644
--- a/tests/playwright/tests/db/viewKanban.spec.ts
+++ b/tests/playwright/tests/db/viewKanban.spec.ts
@@ -12,7 +12,7 @@ test.describe('View', () => {
let context: any;
test.beforeEach(async ({ page }) => {
- context = await setup({ page });
+ context = await setup({ page, isEmptyProject: false });
dashboard = new DashboardPage(page, context.project);
toolbar = toolbar = dashboard.kanban.toolbar;
diff --git a/tests/playwright/tests/db/viewMap.spec.ts b/tests/playwright/tests/db/viewMap.spec.ts
index 6315237852..d2ca547f17 100644
--- a/tests/playwright/tests/db/viewMap.spec.ts
+++ b/tests/playwright/tests/db/viewMap.spec.ts
@@ -15,7 +15,7 @@ test.describe('Map View', () => {
const longitudeInShortDecimalLength = '30.5234';
test.beforeEach(async ({ page }) => {
- context = await setup({ page });
+ context = await setup({ page, isEmptyProject: false });
dashboard = new DashboardPage(page, context.project);
toolbar = dashboard.map.toolbar;
diff --git a/tests/playwright/tests/db/viewMenu.spec.ts b/tests/playwright/tests/db/viewMenu.spec.ts
index 0cadbc718c..5a9f93471e 100644
--- a/tests/playwright/tests/db/viewMenu.spec.ts
+++ b/tests/playwright/tests/db/viewMenu.spec.ts
@@ -8,7 +8,7 @@ test.describe('Grid view locked', () => {
let context: any;
test.beforeEach(async ({ page }) => {
- context = await setup({ page });
+ context = await setup({ page, isEmptyProject: false });
dashboard = new DashboardPage(page, context.project);
});
diff --git a/tests/playwright/tests/db/views.spec.ts b/tests/playwright/tests/db/views.spec.ts
index 0390ba3200..2ee1add7b9 100644
--- a/tests/playwright/tests/db/views.spec.ts
+++ b/tests/playwright/tests/db/views.spec.ts
@@ -9,7 +9,7 @@ test.describe('Views CRUD Operations', () => {
let toolbar: ToolbarPage;
test.beforeEach(async ({ page }) => {
- context = await setup({ page });
+ context = await setup({ page, isEmptyProject: false });
dashboard = new DashboardPage(page, context.project);
toolbar = dashboard.grid.toolbar;
});
diff --git a/tests/playwright/tests/utils/general.ts b/tests/playwright/tests/utils/general.ts
index 2bb3bdf035..56a9e1a2b3 100644
--- a/tests/playwright/tests/utils/general.ts
+++ b/tests/playwright/tests/utils/general.ts
@@ -19,6 +19,14 @@ async function getTextExcludeIconText(selector) {
return text.trim();
}
+async function getIconText(selector) {
+ // List of icons
+ const icons = await selector.locator('.material-symbols-outlined');
+
+ await icons.nth(0).waitFor();
+ return await icons.nth(0).textContent();
+}
+
function isSubset(obj, potentialSubset) {
for (const prop in potentialSubset) {
// eslint-disable-next-line no-prototype-builtins
@@ -38,4 +46,8 @@ function isSubset(obj, potentialSubset) {
return true;
}
-export { getTextExcludeIconText, isSubset };
+function getDefaultPwd() {
+ return 'Password123.';
+}
+
+export { getTextExcludeIconText, isSubset, getIconText, getDefaultPwd };
From 59995d9038d3d1647779acba14ed3825b994b197 Mon Sep 17 00:00:00 2001
From: Raju Udava <86527202+dstala@users.noreply.github.com>
Date: Tue, 25 Apr 2023 21:15:59 +0530
Subject: [PATCH 16/33] test: sync-2
---
tests/playwright/pages/Account/AppStore.ts | 12 +++++------
.../pages/Account/ChangePassword.ts | 8 ++++++++
tests/playwright/pages/Account/Settings.ts | 11 +++++-----
.../pages/Dashboard/Grid/Column/index.ts | 2 +-
tests/playwright/pages/Dashboard/TreeView.ts | 2 +-
.../pages/Dashboard/ViewSidebar/index.ts | 1 +
.../pages/Dashboard/WebhookForm/index.ts | 9 ---------
.../pages/Dashboard/common/Toolbar/Filter.ts | 20 ++++++++++++++++---
tests/playwright/pages/Dashboard/index.ts | 10 ++++++++++
tests/playwright/playwright.config.ts | 2 +-
.../playwright/quickTests/quickTests.spec.ts | 3 ++-
.../scripts/docker-compose-playwright-pg.yml | 2 +-
12 files changed, 53 insertions(+), 29 deletions(-)
diff --git a/tests/playwright/pages/Account/AppStore.ts b/tests/playwright/pages/Account/AppStore.ts
index c617df54a5..0ac3ff39d2 100644
--- a/tests/playwright/pages/Account/AppStore.ts
+++ b/tests/playwright/pages/Account/AppStore.ts
@@ -11,13 +11,11 @@ export class AccountAppStorePage extends BasePage {
}
async goto() {
- await this.rootPage.goto('/#/account/apps', { waitUntil: 'networkidle' });
- }
-
- async waitUntilContentLoads() {
- return this.rootPage.waitForResponse(
- resp => resp.url().includes('api/v1/db/meta/plugins') && resp.status() === 200
- );
+ await this.waitForResponse({
+ uiAction: () => this.rootPage.goto('/#/account/apps', { waitUntil: 'networkidle' }),
+ httpMethodsToMatch: ['GET'],
+ requestUrlPathToMatch: 'api/v1/db/meta/plugins',
+ });
}
get() {
diff --git a/tests/playwright/pages/Account/ChangePassword.ts b/tests/playwright/pages/Account/ChangePassword.ts
index 9e9795d5a7..af414c4c25 100644
--- a/tests/playwright/pages/Account/ChangePassword.ts
+++ b/tests/playwright/pages/Account/ChangePassword.ts
@@ -25,6 +25,14 @@ export class ChangePasswordPage extends BasePage {
const newPassword = this.get().locator('input[data-testid="nc-user-settings-form__new-password"]');
const confirmPassword = this.get().locator('input[data-testid="nc-user-settings-form__new-password-repeat"]');
+ await currentPassword.waitFor({ state: 'visible' });
+ await newPassword.waitFor({ state: 'visible' });
+ await confirmPassword.waitFor({ state: 'visible' });
+
+ // in-spite of the waitFor above, the input fields are not always ready to be filled
+ // this is a workaround
+ await this.rootPage.waitForTimeout(500);
+
await currentPassword.fill(oldPass);
await newPassword.fill(newPass);
await confirmPassword.fill(repeatPass);
diff --git a/tests/playwright/pages/Account/Settings.ts b/tests/playwright/pages/Account/Settings.ts
index fa5fbcd1f6..07bdd37d7a 100644
--- a/tests/playwright/pages/Account/Settings.ts
+++ b/tests/playwright/pages/Account/Settings.ts
@@ -11,11 +11,12 @@ export class AccountSettingsPage extends BasePage {
}
async goto() {
- await this.rootPage.goto('/#/account/users/settings', { waitUntil: 'networkidle' });
- }
-
- async waitUntilContentLoads() {
- return this.rootPage.waitForResponse(resp => resp.url().includes('api/v1/app-settings') && resp.status() === 200);
+ // await this.rootPage.goto('/#/account/users/settings', { waitUntil: 'networkidle' });
+ await this.waitForResponse({
+ uiAction: () => this.rootPage.goto('/#/account/users/settings', { waitUntil: 'networkidle' }),
+ httpMethodsToMatch: ['GET'],
+ requestUrlPathToMatch: `api/v1/app-settings`,
+ });
}
get() {
diff --git a/tests/playwright/pages/Dashboard/Grid/Column/index.ts b/tests/playwright/pages/Dashboard/Grid/Column/index.ts
index 54448d6f3b..3e188aed76 100644
--- a/tests/playwright/pages/Dashboard/Grid/Column/index.ts
+++ b/tests/playwright/pages/Dashboard/Grid/Column/index.ts
@@ -252,7 +252,7 @@ export class ColumnPageObject extends BasePage {
async delete({ title }: { title: string }) {
await this.getColumnHeader(title).locator('div.ant-dropdown-trigger').locator('.nc-ui-dt-dropdown').click();
// await this.rootPage.locator('li[role="menuitem"]:has-text("Delete")').waitFor();
- await this.rootPage.locator('li[role="menuitem"]:has-text("Delete")').click();
+ await this.rootPage.locator('li[role="menuitem"]:has-text("Delete"):visible').click();
await this.rootPage.locator('button:has-text("Delete")').click();
diff --git a/tests/playwright/pages/Dashboard/TreeView.ts b/tests/playwright/pages/Dashboard/TreeView.ts
index 75c02c04f3..23b21b9192 100644
--- a/tests/playwright/pages/Dashboard/TreeView.ts
+++ b/tests/playwright/pages/Dashboard/TreeView.ts
@@ -82,7 +82,7 @@ export class TreeViewPage extends BasePage {
await this.dashboard.waitForTabRender({ title, mode });
} else {
await this.get().locator(`.nc-project-tree-tbl-${title}`).click();
- await this.rootPage.waitForTimeout(3000);
+ await this.rootPage.waitForTimeout(300);
}
}
diff --git a/tests/playwright/pages/Dashboard/ViewSidebar/index.ts b/tests/playwright/pages/Dashboard/ViewSidebar/index.ts
index 4cc1f9e445..161149f456 100644
--- a/tests/playwright/pages/Dashboard/ViewSidebar/index.ts
+++ b/tests/playwright/pages/Dashboard/ViewSidebar/index.ts
@@ -46,6 +46,7 @@ export class ViewSidebarPage extends BasePage {
private async createView({ title, locator }: { title: string; locator: Locator }) {
await locator.click();
+ await this.rootPage.locator('input[id="form_item_title"]:visible').waitFor({ state: 'visible' });
await this.rootPage.locator('input[id="form_item_title"]:visible').fill(title);
const submitAction = () =>
this.rootPage.locator('.ant-modal-content').locator('button:has-text("Submit"):visible').click();
diff --git a/tests/playwright/pages/Dashboard/WebhookForm/index.ts b/tests/playwright/pages/Dashboard/WebhookForm/index.ts
index 3a203fe1b6..e69da5eca6 100644
--- a/tests/playwright/pages/Dashboard/WebhookForm/index.ts
+++ b/tests/playwright/pages/Dashboard/WebhookForm/index.ts
@@ -68,25 +68,16 @@ export class WebhookFormPage extends BasePage {
await this.get().locator(`.nc-check-box-hook-condition`).click();
const modal = await this.get().locator(`.menu-filter-dropdown`).last();
- // todo: All delays are for api calls that filter does, which rerenders
- await this.rootPage.waitForTimeout(1000);
-
await modal.locator(`button:has-text("Add Filter")`).click();
- await this.rootPage.waitForTimeout(1500);
-
await modal.locator('.nc-filter-field-select').click();
const modalField = await this.dashboard.rootPage.locator('.nc-dropdown-toolbar-field-list:visible');
await modalField.locator(`.ant-select-item:has-text("${column}")`).click();
- await this.rootPage.waitForTimeout(1500);
-
await modal.locator('.nc-filter-operation-select').click();
const modalOp = await this.dashboard.rootPage.locator('.nc-dropdown-filter-comp-op:visible');
await modalOp.locator(`.ant-select-item:has-text("${operator}")`).click();
- await this.rootPage.waitForTimeout(1500);
-
if (operator != 'is null' && operator != 'is not null') {
await modal.locator('.nc-filter-value-select > input').fill(value);
}
diff --git a/tests/playwright/pages/Dashboard/common/Toolbar/Filter.ts b/tests/playwright/pages/Dashboard/common/Toolbar/Filter.ts
index 89bc0ea572..9f53ab1881 100644
--- a/tests/playwright/pages/Dashboard/common/Toolbar/Filter.ts
+++ b/tests/playwright/pages/Dashboard/common/Toolbar/Filter.ts
@@ -56,7 +56,7 @@ export class ToolbarFilterPage extends BasePage {
}) {
if (!openModal) await this.get().locator(`button:has-text("Add Filter")`).first().click();
- const selectedField = await this.rootPage.locator('.nc-filter-field-select').textContent();
+ const selectedField = await getTextExcludeIconText(await this.rootPage.locator('.nc-filter-field-select'));
if (selectedField !== title) {
await this.rootPage.locator('.nc-filter-field-select').last().click();
await this.rootPage
@@ -65,7 +65,7 @@ export class ToolbarFilterPage extends BasePage {
.click();
}
- const selectedOpType = await this.rootPage.locator('.nc-filter-operation-select').textContent();
+ const selectedOpType = await getTextExcludeIconText(await this.rootPage.locator('.nc-filter-operation-select'));
if (selectedOpType !== operation) {
await this.rootPage.locator('.nc-filter-operation-select').click();
// first() : filter list has >, >=
@@ -78,7 +78,9 @@ export class ToolbarFilterPage extends BasePage {
// subtype for date
if (dataType === UITypes.Date && subOperation) {
- const selectedSubType = await this.rootPage.locator('.nc-filter-sub_operation-select').textContent();
+ const selectedSubType = await getTextExcludeIconText(
+ await this.rootPage.locator('.nc-filter-sub_operation-select')
+ );
if (selectedSubType !== subOperation) {
await this.rootPage.locator('.nc-filter-sub_operation-select').click();
// first() : filter list has >, >=
@@ -197,6 +199,18 @@ export class ToolbarFilterPage extends BasePage {
await this.toolbar.clickFilter();
}
+ async remove({ networkValidation = true }: { networkValidation?: boolean } = {}) {
+ if (networkValidation) {
+ await this.waitForResponse({
+ uiAction: () => this.get().locator('.nc-filter-item-remove-btn').click(),
+ httpMethodsToMatch: ['DELETE'],
+ requestUrlPathToMatch: '/api/v1/db/meta/filters/',
+ });
+ } else {
+ await this.get().locator('.nc-filter-item-remove-btn').click();
+ }
+ }
+
async columnOperatorList(param: { columnTitle: string }) {
await this.get().locator(`button:has-text("Add Filter")`).first().click();
diff --git a/tests/playwright/pages/Dashboard/index.ts b/tests/playwright/pages/Dashboard/index.ts
index e0a8e098ed..635ca8f546 100644
--- a/tests/playwright/pages/Dashboard/index.ts
+++ b/tests/playwright/pages/Dashboard/index.ts
@@ -212,4 +212,14 @@ export class DashboardPage extends BasePage {
async waitForLoaderToDisappear() {
await this.rootPage.locator('[data-testid="nc-loading"]').waitFor({ state: 'hidden' });
}
+
+ async closeAllTabs() {
+ const tab = await this.tabBar.locator(`.ant-tabs-tab`);
+ const tabCount = await tab.count();
+
+ for (let i = 0; i < tabCount; i++) {
+ await tab.nth(i).locator('button.ant-tabs-tab-remove').click();
+ await this.rootPage.waitForTimeout(200);
+ }
+ }
}
diff --git a/tests/playwright/playwright.config.ts b/tests/playwright/playwright.config.ts
index 8fd59e91b5..52b9567659 100644
--- a/tests/playwright/playwright.config.ts
+++ b/tests/playwright/playwright.config.ts
@@ -11,7 +11,7 @@ require('dotenv').config();
* See https://playwright.dev/docs/test-configuration.
*/
const config: PlaywrightTestConfig = {
- testDir: process.env.PW_QUICK_TEST ? './quickTests' : './tests',
+ testDir: process.env.PW_QUICK_TEST ? './quickTests' : './tests/db',
/* Maximum time one test can run for. */
timeout: process.env.CI ? 140 * 1000 : 100 * 1000,
expect: {
diff --git a/tests/playwright/quickTests/quickTests.spec.ts b/tests/playwright/quickTests/quickTests.spec.ts
index ef9069ce0e..417d2162fe 100644
--- a/tests/playwright/quickTests/quickTests.spec.ts
+++ b/tests/playwright/quickTests/quickTests.spec.ts
@@ -4,6 +4,7 @@ import { LoginPage } from '../pages/LoginPage';
import { ProjectsPage } from '../pages/ProjectsPage';
import { quickVerify } from './commonTest';
import { NcContext } from '../setup';
+import { getDefaultPwd } from '../tests/utils/general';
test.describe('Quick tests', () => {
let dashboard: DashboardPage;
@@ -12,7 +13,7 @@ test.describe('Quick tests', () => {
const loginPage = new LoginPage(page);
await loginPage.goto();
await loginPage.fillEmail({ email: 'user@nocodb.com', withoutPrefix: true });
- await loginPage.fillPassword('Password123.');
+ await loginPage.fillPassword(getDefaultPwd());
await loginPage.submit();
const projectsPage = new ProjectsPage(page);
diff --git a/tests/playwright/scripts/docker-compose-playwright-pg.yml b/tests/playwright/scripts/docker-compose-playwright-pg.yml
index 046efbb48a..7eb08c02d4 100644
--- a/tests/playwright/scripts/docker-compose-playwright-pg.yml
+++ b/tests/playwright/scripts/docker-compose-playwright-pg.yml
@@ -1,4 +1,4 @@
-version: "2.1"
+version: "2.2"
services:
pg147:
From ebe2fed2f726778e5943093696e1d3fbd719f9ac Mon Sep 17 00:00:00 2001
From: navi
Date: Tue, 25 Apr 2023 23:41:21 +0100
Subject: [PATCH 17/33] New translations en.json (Russian)
---
packages/nc-gui/lang/ru.json | 54 ++++++++++++++++++------------------
1 file changed, 27 insertions(+), 27 deletions(-)
diff --git a/packages/nc-gui/lang/ru.json b/packages/nc-gui/lang/ru.json
index 5fbdccadf2..0d00f23412 100644
--- a/packages/nc-gui/lang/ru.json
+++ b/packages/nc-gui/lang/ru.json
@@ -39,7 +39,7 @@
"signIn": "ВОЙТИ",
"signOut": "Выход",
"required": "Обязательно",
- "enableScanner": "Enable Scanner for filling",
+ "enableScanner": "Включить сканер для заполнения",
"preferred": "Рекомендовано",
"mandatory": "Обязательный",
"loading": "Загрузка ...",
@@ -76,7 +76,7 @@
"hideField": "Скрыть поле",
"sortAsc": "По Возрастанию",
"sortDesc": "По убыванию",
- "geoDataField": "GeoData Field"
+ "geoDataField": "Поле геоданных"
},
"objects": {
"project": "Проект",
@@ -101,7 +101,7 @@
"form": "Форма",
"kanban": "Канбан",
"calendar": "Календарь",
- "map": "Map"
+ "map": "Карта"
},
"user": "Пользователь",
"users": "Пользователи",
@@ -139,7 +139,7 @@
"Currency": "Валюта",
"Percent": "Процент",
"Duration": "Интервал времени",
- "GeoData": "GeoData",
+ "GeoData": "Геоданные",
"Rating": "Рейтинг",
"Formula": "Формула",
"Rollup": "Итоги (Rollup)",
@@ -211,7 +211,7 @@
"codeSnippet": "Сниппет кода",
"keyboardShortcut": "Горячие клавиши",
"generateRandomName": "Сгенерировать случайное имя",
- "findRowByScanningCode": "Find row by scanning a QR or Barcode"
+ "findRowByScanningCode": "Найти строку путем сканирования QR или штрих-кода"
},
"labels": {
"createdBy": "Автор",
@@ -260,9 +260,9 @@
"barcodeFormat": "Формат штрих-кода",
"qrCodeValueTooLong": "Слишком много символов для QR-кода",
"barcodeValueTooLong": "Слишком много символов для штрихкода",
- "currentLocation": "Current Location",
- "lng": "Lng",
- "lat": "Lat",
+ "currentLocation": "Текущее местоположение",
+ "lng": "Долг",
+ "lat": "Шир",
"aggregateFunction": "Агрегатная функция",
"dbCreateIfNotExists": "База данных: создать, если не существует",
"clientKey": "Ключ клиента",
@@ -396,7 +396,7 @@
"saveAndExit": "Сохранить и выйти",
"saveAndStay": "Сохранить и остаться",
"insertRow": "Вставить новую строку",
- "duplicateRow": "Duplicate Row",
+ "duplicateRow": "Копировать запись",
"deleteRow": "Удалить строку",
"deleteSelectedRow": "Удалить выбранные строки",
"importExcel": "Импорт из Excel",
@@ -412,7 +412,7 @@
"changePwd": "Изменить пароль",
"createView": "Создать представление",
"shareView": "Поделиться представлением",
- "findRowByCodeScan": "Find row by scan",
+ "findRowByCodeScan": "Найти строку путем сканирования",
"fillByCodeScan": "Fill by scan",
"listSharedView": "Общий список представлений",
"ListView": "Список представлений",
@@ -429,10 +429,10 @@
"openTab": "Открыть новую вкладку",
"iFrame": "Копировать встраеваемый HTML-код",
"addWebhook": "Добавить новый Web Hook",
- "enableWebhook": "Enable Webhook",
- "testWebhook": "Test Webhook",
- "copyWebhook": "Copy Webhook",
- "deleteWebhook": "Delete Webhook",
+ "enableWebhook": "Включить Webhook",
+ "testWebhook": "Проверить Webhook",
+ "copyWebhook": "Копировать Webhook",
+ "deleteWebhook": "Удалить Webhook",
"newToken": "Добавить новый токен",
"exportZip": "Экспорт в zip",
"importZip": "Импорт из zip",
@@ -472,10 +472,10 @@
"map": {
"mappedBy": "Mapped By",
"chooseMappingField": "Choose a Mapping Field",
- "openInGoogleMaps": "Google Maps",
+ "openInGoogleMaps": "Google Карты",
"openInOpenStreetMap": "OSM"
},
- "toggleMobileMode": "Toggle Mobile Mode"
+ "toggleMobileMode": "Переключить мобильный режим"
},
"tooltip": {
"saveChanges": "Сохранить изменения",
@@ -542,15 +542,15 @@
"orgViewer": "Наблюдатель не может создавать новые проекты, но может получить доступ к любому проекту по приглашению."
},
"codeScanner": {
- "loadingScanner": "Loading the scanner...",
+ "loadingScanner": "Загрузка сканера...",
"selectColumn": "Select a column (QR code or Barcode) that you want to use for finding a row by scanning.",
"moreThanOneRowFoundForCode": "More than one row found for this code. Currently only unique codes are supported.",
"noRowFoundForCode": "No row found for this code for the selected column"
},
"map": {
- "overLimit": "You're over the limit.",
- "closeLimit": "You're getting close to the limit.",
- "limitNumber": "The limit of markers shown in a Map View is 1000 records."
+ "overLimit": "Вы превысили лимит.",
+ "closeLimit": "Вы приближаетесь к лимиту.",
+ "limitNumber": "Предельное количество маркеров, отображаемых в представлении карты, составляет 1000 записей."
},
"footerInfo": "Количество строк на странице",
"upload": "Выберите файл для загрузки",
@@ -634,7 +634,7 @@
"gallery": "Добавить представление галерея",
"form": "Добавить представление форма",
"kanban": "Добавить представление Канбан",
- "map": "Add Map View",
+ "map": "Добавить представление карты",
"calendar": "Добавить представление календарь"
},
"tablesMetadataInSync": "Таблицы метаданные синхронизируются",
@@ -667,9 +667,9 @@
"deleteTableConfirmation": "Вы действительно хотите удалить эту таблицу",
"showM2mTables": "Показать таблицы M2M",
"showM2mTablesDesc": "Many-to-many relation is supported via a junction table & is hidden by default. Enable this option to list all such tables along with existing tables.",
- "showNullInCells": "Show NULL in Cells",
- "showNullInCellsDesc": "Display 'NULL' tag in cells holding NULL value. This helps differentiate against cells holding EMPTY string.",
- "showNullAndEmptyInFilter": "Show NULL and EMPTY in Filter",
+ "showNullInCells": "Показывать NULL в ячейках",
+ "showNullInCellsDesc": "Отображайте тег 'NULL' в ячейках, содержащих значение NULL. Это помогает отличить ячейки, содержащие строку EMPTY.",
+ "showNullAndEmptyInFilter": "Показать NULL и EMPTY в фильтре",
"showNullAndEmptyInFilterDesc": "Enable 'additional' filters to differentiate fields containing NULL & Empty Strings. Default support for Blank treats both NULL & Empty strings alike.",
"deleteKanbanStackConfirmation": "Удаление этого стека также удалит опцию выбора `{stackToBeDeleted}` из `{groupingField}`. Записи переместятся в стек без категории.",
"computedFieldEditWarning": "Вычисляемое поле: содержимое доступно только для чтения. Используйте меню редактирования столбцов для изменения конфигурации",
@@ -698,7 +698,7 @@
"allowedSpecialCharList": "Список разрешенных специальных символов"
},
"invalidURL": "Неверный URL",
- "invalidEmail": "Invalid Email",
+ "invalidEmail": "Неверный адрес электронной почты",
"internalError": "Произошла какая-то внутренняя ошибка",
"templateGeneratorNotFound": "Генератор шаблонов не найден!",
"fileUploadFailed": "Не удалось загрузить файл",
@@ -759,7 +759,7 @@
},
"success": {
"columnDuplicated": "Столбец успешно скопирован",
- "rowDuplicatedWithoutSavedYet": "Row duplicated (not saved)",
+ "rowDuplicatedWithoutSavedYet": "Строка продублирована (не сохранена)",
"updatedUIACL": "Успешно обновлен пользовательский интерфейс ACL для таблиц",
"pluginUninstalled": "Плагин успешно удален",
"pluginSettingsSaved": "Настройки плагина сохранены",
@@ -779,7 +779,7 @@
"userDeletedFromProject": "Успешное удаление пользователя из проекта",
"inviteEmailSent": "Приглашение по электронной почте отправлено успешно",
"inviteURLCopied": "URL-адрес приглашения скопирован в буфер обмена",
- "commentCopied": "Comment copied to clipboard",
+ "commentCopied": "Комментарий скопирован в буфер обмена",
"passwordResetURLCopied": "URL-адрес сброса пароля скопирован в буфер обмена",
"shareableURLCopied": "Копирование URL базы с возможностью совместного использования в буфер обмена!",
"embeddableHTMLCodeCopied": "Скопированный встраиваемый HTML-код!",
From 81edc6b1ef172cfc857f74e96a58b90c8a087333 Mon Sep 17 00:00:00 2001
From: Raju Udava <86527202+dstala@users.noreply.github.com>
Date: Wed, 26 Apr 2023 10:20:02 +0530
Subject: [PATCH 18/33] fix: missing routine invocation
---
tests/playwright/tests/db/accountUserSettings.spec.ts | 4 ----
tests/playwright/tests/db/viewForm.spec.ts | 4 ----
2 files changed, 8 deletions(-)
diff --git a/tests/playwright/tests/db/accountUserSettings.spec.ts b/tests/playwright/tests/db/accountUserSettings.spec.ts
index 8386445d47..dd4904cd66 100644
--- a/tests/playwright/tests/db/accountUserSettings.spec.ts
+++ b/tests/playwright/tests/db/accountUserSettings.spec.ts
@@ -25,8 +25,6 @@ test.describe('App settings', () => {
// todo: remove after route navigation issue resolved
await accountSettingsPage.rootPage.reload({ waitUntil: 'networkidle' });
- await accountSettingsPage.waitUntilContentLoads();
-
// enable invite only signup
if (!(await accountSettingsPage.getInviteOnlyCheckboxValue())) {
await accountSettingsPage.toggleInviteOnlyCheckbox();
@@ -48,8 +46,6 @@ test.describe('App settings', () => {
await accountSettingsPage.goto();
- await accountSettingsPage.waitUntilContentLoads();
-
await accountSettingsPage.checkInviteOnlySignupCheckbox(true);
await accountSettingsPage.toggleInviteOnlyCheckbox();
await accountSettingsPage.checkInviteOnlySignupCheckbox(false);
diff --git a/tests/playwright/tests/db/viewForm.spec.ts b/tests/playwright/tests/db/viewForm.spec.ts
index 6aca59fcfb..558905dde0 100644
--- a/tests/playwright/tests/db/viewForm.spec.ts
+++ b/tests/playwright/tests/db/viewForm.spec.ts
@@ -177,8 +177,6 @@ test.describe('Form view', () => {
// activate SMTP plugin
await accountAppStorePage.goto();
- await accountAppStorePage.rootPage.reload({ waitUntil: 'networkidle' });
- await accountAppStorePage.waitUntilContentLoads();
// install SMTP
await accountAppStorePage.install({ name: 'SMTP' });
@@ -205,8 +203,6 @@ test.describe('Form view', () => {
// Uninstall SMTP
await accountAppStorePage.goto();
- await accountAppStorePage.rootPage.reload({ waitUntil: 'networkidle' });
- await accountAppStorePage.waitUntilContentLoads();
await accountAppStorePage.uninstall({ name: 'SMTP' });
await dashboard.verifyToast({
From 0fe9090ad7517efcac9660f381aecd0db2bb0901 Mon Sep 17 00:00:00 2001
From: Wing-Kam Wong
Date: Wed, 26 Apr 2023 13:37:00 +0800
Subject: [PATCH 19/33] feat(nc-gui): add IsExpandedFormOpenInj
---
packages/nc-gui/context/index.ts | 1 +
1 file changed, 1 insertion(+)
diff --git a/packages/nc-gui/context/index.ts b/packages/nc-gui/context/index.ts
index ff359ea77f..0ea07a931e 100644
--- a/packages/nc-gui/context/index.ts
+++ b/packages/nc-gui/context/index.ts
@@ -19,6 +19,7 @@ export const IsGridInj: InjectionKey[> = Symbol('is-grid-injection')
export const IsGalleryInj: InjectionKey][> = Symbol('is-gallery-injection')
export const IsKanbanInj: InjectionKey][> = Symbol('is-kanban-injection')
export const IsLockedInj: InjectionKey][> = Symbol('is-locked-injection')
+export const IsExpandedFormOpenInj: InjectionKey][> = Symbol('is-expanded-form-open-injection')
export const CellValueInj: InjectionKey][> = Symbol('cell-value-injection')
export const ActiveViewInj: InjectionKey][> = Symbol('active-view-injection')
export const ReadonlyInj: InjectionKey][> = Symbol('readonly-injection')
From 59f5b886ecd48b18ce2a7a7c49bdbaad5d2040fa Mon Sep 17 00:00:00 2001
From: Wing-Kam Wong
Date: Wed, 26 Apr 2023 13:37:04 +0800
Subject: [PATCH 20/33] fix(nc-gui): cellWrapperEl + provide
IsExpandedFormOpenInj
---
.../nc-gui/components/smartsheet/expanded-form/index.vue | 9 +++++++--
1 file changed, 7 insertions(+), 2 deletions(-)
diff --git a/packages/nc-gui/components/smartsheet/expanded-form/index.vue b/packages/nc-gui/components/smartsheet/expanded-form/index.vue
index d1dc2d97f8..f03d3eb229 100644
--- a/packages/nc-gui/components/smartsheet/expanded-form/index.vue
+++ b/packages/nc-gui/components/smartsheet/expanded-form/index.vue
@@ -5,6 +5,7 @@ import type { Ref } from 'vue'
import {
CellClickHookInj,
FieldsInj,
+ IsExpandedFormOpenInj,
IsFormInj,
IsKanbanInj,
MetaInj,
@@ -180,10 +181,14 @@ if (isKanban.value) {
}
}
-const cellWrapperEl = ref()
+provide(IsExpandedFormOpenInj, isExpanded)
+
+const cellWrapperEl = ref()
onMounted(() => {
- setTimeout(() => (cellWrapperEl.value?.querySelector('input,select,textarea') as HTMLInputElement)?.focus())
+ setTimeout(() => {
+ cellWrapperEl.value?.$el?.querySelector('input,select,textarea')?.focus()
+ }, 300)
})
const addNewRow = () => {
From 7a5e76ed510dd26b2c0dc5b533ed1e923d832254 Mon Sep 17 00:00:00 2001
From: Wing-Kam Wong
Date: Wed, 26 Apr 2023 13:46:56 +0800
Subject: [PATCH 21/33] fix(nc-gui): focus when expanded form not open
---
packages/nc-gui/components/cell/Currency.vue | 6 ++++--
packages/nc-gui/components/cell/Decimal.vue | 6 ++++--
packages/nc-gui/components/cell/Duration.vue | 5 ++++-
packages/nc-gui/components/cell/Email.vue | 6 ++++--
packages/nc-gui/components/cell/Float.vue | 6 ++++--
packages/nc-gui/components/cell/Integer.vue | 6 ++++--
packages/nc-gui/components/cell/Percent.vue | 8 ++++----
packages/nc-gui/components/cell/Text.vue | 8 ++++----
packages/nc-gui/components/cell/TextArea.vue | 6 ++++--
packages/nc-gui/components/cell/Url.vue | 5 ++++-
10 files changed, 40 insertions(+), 22 deletions(-)
diff --git a/packages/nc-gui/components/cell/Currency.vue b/packages/nc-gui/components/cell/Currency.vue
index ee025aa9a2..e2ea7a9e77 100644
--- a/packages/nc-gui/components/cell/Currency.vue
+++ b/packages/nc-gui/components/cell/Currency.vue
@@ -1,6 +1,6 @@
diff --git a/packages/nc-gui/components/cell/Duration.vue b/packages/nc-gui/components/cell/Duration.vue
index 3d160dc0a2..7b374e3b37 100644
--- a/packages/nc-gui/components/cell/Duration.vue
+++ b/packages/nc-gui/components/cell/Duration.vue
@@ -3,6 +3,7 @@ import type { VNodeRef } from '@vue/runtime-core'
import {
ColumnInj,
EditModeInj,
+ IsExpandedFormOpenInj,
computed,
convertDurationToSeconds,
convertMS2Duration,
@@ -73,7 +74,9 @@ const submitDuration = () => {
isEdited.value = false
}
-const focus: VNodeRef = (el) => (el as HTMLInputElement)?.focus()
+const isExpandedFormOpen = inject(IsExpandedFormOpenInj)!
+
+const focus: VNodeRef = (el) => !isExpandedFormOpen && (el as HTMLInputElement)?.focus()
diff --git a/packages/nc-gui/components/cell/Email.vue b/packages/nc-gui/components/cell/Email.vue
index 215c4055de..49f742ec31 100644
--- a/packages/nc-gui/components/cell/Email.vue
+++ b/packages/nc-gui/components/cell/Email.vue
@@ -1,6 +1,6 @@
diff --git a/packages/nc-gui/components/cell/Integer.vue b/packages/nc-gui/components/cell/Integer.vue
index e70b83f240..7e643524d0 100644
--- a/packages/nc-gui/components/cell/Integer.vue
+++ b/packages/nc-gui/components/cell/Integer.vue
@@ -1,6 +1,6 @@
diff --git a/packages/nc-gui/components/cell/Text.vue b/packages/nc-gui/components/cell/Text.vue
index 05fcbc4856..6c333f878a 100644
--- a/packages/nc-gui/components/cell/Text.vue
+++ b/packages/nc-gui/components/cell/Text.vue
@@ -1,6 +1,6 @@
diff --git a/packages/nc-gui/components/cell/TextArea.vue b/packages/nc-gui/components/cell/TextArea.vue
index 859b495bbd..7407f03eed 100644
--- a/packages/nc-gui/components/cell/TextArea.vue
+++ b/packages/nc-gui/components/cell/TextArea.vue
@@ -1,6 +1,6 @@
diff --git a/packages/nc-gui/components/cell/Url.vue b/packages/nc-gui/components/cell/Url.vue
index 26090a07bd..d781d3b28c 100644
--- a/packages/nc-gui/components/cell/Url.vue
+++ b/packages/nc-gui/components/cell/Url.vue
@@ -4,6 +4,7 @@ import {
CellUrlDisableOverlayInj,
ColumnInj,
EditModeInj,
+ IsExpandedFormOpenInj,
IsSurveyFormInj,
computed,
inject,
@@ -62,7 +63,9 @@ const url = computed(() => {
const { cellUrlOptions } = useCellUrlConfig(url)
-const focus: VNodeRef = (el) => (el as HTMLInputElement)?.focus()
+const isExpandedFormOpen = inject(IsExpandedFormOpenInj)!
+
+const focus: VNodeRef = (el) => !isExpandedFormOpen && (el as HTMLInputElement)?.focus()
watch(
() => editEnabled.value,
From b13715005f67984cf05392e43c38b8ddecc02641 Mon Sep 17 00:00:00 2001
From: Pranav C
Date: Wed, 26 Apr 2023 11:29:25 +0530
Subject: [PATCH 22/33] feat: add description field to meta tables
Signed-off-by: Pranav C
---
.../src/lib/migrations/XcMigrationSourcev2.ts | 4 ++
.../v2/nc_030_add_description_field.ts | 40 +++++++++++++++++++
2 files changed, 44 insertions(+)
create mode 100644 packages/nocodb/src/lib/migrations/v2/nc_030_add_description_field.ts
diff --git a/packages/nocodb/src/lib/migrations/XcMigrationSourcev2.ts b/packages/nocodb/src/lib/migrations/XcMigrationSourcev2.ts
index 664e29ca2e..1870872da5 100644
--- a/packages/nocodb/src/lib/migrations/XcMigrationSourcev2.ts
+++ b/packages/nocodb/src/lib/migrations/XcMigrationSourcev2.ts
@@ -17,6 +17,7 @@ import * as nc_026_map_view from './v2/nc_026_map_view';
import * as nc_027_add_comparison_sub_op from './v2/nc_027_add_comparison_sub_op';
import * as nc_028_add_enable_scanner_in_form_columns_meta_table from './v2/nc_028_add_enable_scanner_in_form_columns_meta_table';
import * as nc_029_webhook from './v2/nc_029_webhook';
+import * as nc_030_add_description_field from './v2/nc_030_add_description_field';
// Create a custom migration source class
export default class XcMigrationSourcev2 {
@@ -45,6 +46,7 @@ export default class XcMigrationSourcev2 {
'nc_027_add_comparison_sub_op',
'nc_028_add_enable_scanner_in_form_columns_meta_table',
'nc_029_webhook',
+ 'nc_030_add_description_field'
]);
}
@@ -92,6 +94,8 @@ export default class XcMigrationSourcev2 {
return nc_028_add_enable_scanner_in_form_columns_meta_table;
case 'nc_029_webhook':
return nc_029_webhook;
+ case 'nc_030_add_description_field':
+ return nc_030_add_description_field;
}
}
}
diff --git a/packages/nocodb/src/lib/migrations/v2/nc_030_add_description_field.ts b/packages/nocodb/src/lib/migrations/v2/nc_030_add_description_field.ts
new file mode 100644
index 0000000000..61274e3b35
--- /dev/null
+++ b/packages/nocodb/src/lib/migrations/v2/nc_030_add_description_field.ts
@@ -0,0 +1,40 @@
+import { MetaTable } from '../../utils/globals';
+import type { Knex } from 'knex';
+
+const up = async (knex: Knex) => {
+ await knex.schema.alterTable(MetaTable.PROJECT, (table) => {
+ table.string('description', 255);
+ });
+ await knex.schema.alterTable(MetaTable.BASES, (table) => {
+ table.string('description', 255);
+ });
+ await knex.schema.alterTable(MetaTable.MODELS, (table) => {
+ table.string('description', 255);
+ });
+ await knex.schema.alterTable(MetaTable.VIEWS, (table) => {
+ table.string('description', 255);
+ });
+ await knex.schema.alterTable(MetaTable.COLUMNS, (table) => {
+ table.string('description', 255);
+ });
+};
+
+const down = async (knex) => {
+ await knex.schema.alterTable(MetaTable.PROJECT, (table) => {
+ table.dropColumn('description');
+ });
+ await knex.schema.alterTable(MetaTable.BASES, (table) => {
+ table.dropColumn('description');
+ });
+ await knex.schema.alterTable(MetaTable.MODELS, (table) => {
+ table.dropColumn('description');
+ });
+ await knex.schema.alterTable(MetaTable.VIEWS, (table) => {
+ table.dropColumn('description');
+ });
+ await knex.schema.alterTable(MetaTable.COLUMNS, (table) => {
+ table.dropColumn('description');
+ });
+};
+
+export { up, down };
From 0d7c1877747f7a4f64839bb60bff62ae9c71e309 Mon Sep 17 00:00:00 2001
From: Raju Udava <86527202+dstala@users.noreply.github.com>
Date: Wed, 26 Apr 2023 14:34:36 +0530
Subject: [PATCH 23/33] fix: close all tabs with waitFor
---
tests/playwright/pages/Dashboard/index.ts | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/tests/playwright/pages/Dashboard/index.ts b/tests/playwright/pages/Dashboard/index.ts
index 635ca8f546..31ff8a9fa7 100644
--- a/tests/playwright/pages/Dashboard/index.ts
+++ b/tests/playwright/pages/Dashboard/index.ts
@@ -214,12 +214,13 @@ export class DashboardPage extends BasePage {
}
async closeAllTabs() {
+ await this.tabBar.locator(`.ant-tabs-tab`).waitFor({ state: 'visible' });
const tab = await this.tabBar.locator(`.ant-tabs-tab`);
const tabCount = await tab.count();
for (let i = 0; i < tabCount; i++) {
await tab.nth(i).locator('button.ant-tabs-tab-remove').click();
- await this.rootPage.waitForTimeout(200);
+ await tab.nth(i).waitFor({ state: 'detached' });
}
}
}
From 582b98021dbb7a899f336d3c75f0d67293192b1b Mon Sep 17 00:00:00 2001
From: Raju Udava <86527202+dstala@users.noreply.github.com>
Date: Wed, 26 Apr 2023 14:45:42 +0530
Subject: [PATCH 24/33] test: skip duration filters
---
tests/playwright/tests/db/filters.spec.ts | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/tests/playwright/tests/db/filters.spec.ts b/tests/playwright/tests/db/filters.spec.ts
index 714201072b..cefd2c3dfa 100644
--- a/tests/playwright/tests/db/filters.spec.ts
+++ b/tests/playwright/tests/db/filters.spec.ts
@@ -327,7 +327,7 @@ test.describe('Filter Tests: Numerical', () => {
await numBasedFilterTest('Rating', '3', '2');
});
- test('Filter: Duration', async () => {
+ test.skip('Filter: Duration', async () => {
await numBasedFilterTest('Duration', '00:01', '01:03');
});
From 4cf223b37f8c4cda95e9437d206d631b8910276d Mon Sep 17 00:00:00 2001
From: Raju Udava <86527202+dstala@users.noreply.github.com>
Date: Wed, 26 Apr 2023 15:13:33 +0530
Subject: [PATCH 25/33] fix: file path correction
---
tests/playwright/tests/db/language.spec.ts | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/tests/playwright/tests/db/language.spec.ts b/tests/playwright/tests/db/language.spec.ts
index d027457e8e..d78b049e16 100644
--- a/tests/playwright/tests/db/language.spec.ts
+++ b/tests/playwright/tests/db/language.spec.ts
@@ -58,7 +58,7 @@ test.describe('Common', () => {
// Index is the order in which menu options appear
for (let i = 1; i < langMenu.length; i++) {
// scripts/playwright/tests/language.spec.ts
- const json = require(`../../../packages/nc-gui/lang/${langMenu[i]}`);
+ const json = require(`../../../../packages/nc-gui/lang/${langMenu[i]}`);
await projectsPage.openLanguageMenu();
await projectsPage.selectLanguage({ index: i });
await projectsPage.verifyLanguage({ json });
From b6758c449f23cae0a7e0d76493127900eab964be Mon Sep 17 00:00:00 2001
From: Raju Udava <86527202+dstala@users.noreply.github.com>
Date: Wed, 26 Apr 2023 15:26:01 +0530
Subject: [PATCH 26/33] fix: undo redo
---
tests/playwright/pages/Dashboard/Grid/index.ts | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/tests/playwright/pages/Dashboard/Grid/index.ts b/tests/playwright/pages/Dashboard/Grid/index.ts
index 8f53c922ab..9819a567e2 100644
--- a/tests/playwright/pages/Dashboard/Grid/index.ts
+++ b/tests/playwright/pages/Dashboard/Grid/index.ts
@@ -72,10 +72,12 @@ export class GridPage extends BasePage {
networkValidation?: boolean;
} = {}) {
const rowValue = value ?? `Row ${index}`;
+ // wait for render to complete before count
+ await this.get().locator('.nc-grid-row').nth(0).waitFor({ state: 'attached' });
const rowCount = await this.get().locator('.nc-grid-row').count();
await this.get().locator('.nc-grid-add-new-cell').click();
- await expect(this.get().locator('.nc-grid-row')).toHaveCount(rowCount + 1);
+ await expect(await this.get().locator('.nc-grid-row')).toHaveCount(rowCount + 1);
await this._fillRow({ index, columnHeader, value: rowValue });
From c38550c143eaca5f06d128492ca8bb0f1e55baa8 Mon Sep 17 00:00:00 2001
From: Raju Udava <86527202+dstala@users.noreply.github.com>
Date: Wed, 26 Apr 2023 16:09:35 +0530
Subject: [PATCH 27/33] fix: sync corrections
---
tests/playwright/pages/Dashboard/Grid/index.ts | 2 +-
tests/playwright/pages/Dashboard/TreeView.ts | 2 +-
tests/playwright/tests/db/filters.spec.ts | 7 ++++---
3 files changed, 6 insertions(+), 5 deletions(-)
diff --git a/tests/playwright/pages/Dashboard/Grid/index.ts b/tests/playwright/pages/Dashboard/Grid/index.ts
index 9819a567e2..3b944ba101 100644
--- a/tests/playwright/pages/Dashboard/Grid/index.ts
+++ b/tests/playwright/pages/Dashboard/Grid/index.ts
@@ -73,7 +73,7 @@ export class GridPage extends BasePage {
} = {}) {
const rowValue = value ?? `Row ${index}`;
// wait for render to complete before count
- await this.get().locator('.nc-grid-row').nth(0).waitFor({ state: 'attached' });
+ if (index !== 0) await this.get().locator('.nc-grid-row').nth(0).waitFor({ state: 'attached' });
const rowCount = await this.get().locator('.nc-grid-row').count();
await this.get().locator('.nc-grid-add-new-cell').click();
diff --git a/tests/playwright/pages/Dashboard/TreeView.ts b/tests/playwright/pages/Dashboard/TreeView.ts
index 23b21b9192..804cc1d2fe 100644
--- a/tests/playwright/pages/Dashboard/TreeView.ts
+++ b/tests/playwright/pages/Dashboard/TreeView.ts
@@ -82,7 +82,7 @@ export class TreeViewPage extends BasePage {
await this.dashboard.waitForTabRender({ title, mode });
} else {
await this.get().locator(`.nc-project-tree-tbl-${title}`).click();
- await this.rootPage.waitForTimeout(300);
+ await this.rootPage.waitForTimeout(1000);
}
}
diff --git a/tests/playwright/tests/db/filters.spec.ts b/tests/playwright/tests/db/filters.spec.ts
index cefd2c3dfa..7097b12744 100644
--- a/tests/playwright/tests/db/filters.spec.ts
+++ b/tests/playwright/tests/db/filters.spec.ts
@@ -651,11 +651,12 @@ test.describe('Filter Tests: Select based', () => {
});
test('Filter: Single Select', async () => {
- await selectBasedFilterTest('SingleSelect', 'jan', 'jan,feb,mar', '');
+ // hack. jan inserted twice as in filter, toggling operation is not clearing value
+ await selectBasedFilterTest('SingleSelect', 'jan', 'jan,jan,feb,mar', '');
});
test('Filter: Multi Select', async () => {
- await selectBasedFilterTest('MultiSelect', '', 'jan,feb,mar', 'jan,feb,mar');
+ await selectBasedFilterTest('MultiSelect', '', 'jan,jan,feb,mar', 'jan,feb,mar');
});
});
@@ -1210,7 +1211,7 @@ test.describe('Filter Tests: Link to another record, Lookup, Rollup', () => {
}
test.beforeEach(async ({ page }) => {
- context = await setup({ page, isEmptyProject: true });
+ context = await setup({ page, isEmptyProject: false });
dashboard = new DashboardPage(page, context.project);
toolbar = dashboard.grid.toolbar;
From bdbe6b702d0b4fd87e7654fd9653b9eec6dacdc9 Mon Sep 17 00:00:00 2001
From: Raju Udava <86527202+dstala@users.noreply.github.com>
Date: Wed, 26 Apr 2023 16:38:28 +0530
Subject: [PATCH 28/33] fix: toggle button in filters
---
tests/playwright/tests/db/filters.spec.ts | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/tests/playwright/tests/db/filters.spec.ts b/tests/playwright/tests/db/filters.spec.ts
index 7097b12744..48a91be267 100644
--- a/tests/playwright/tests/db/filters.spec.ts
+++ b/tests/playwright/tests/db/filters.spec.ts
@@ -1255,7 +1255,7 @@ test.describe('Filter Tests: Toggle button', () => {
*/
test.beforeEach(async ({ page }) => {
- context = await setup({ page, isEmptyProject: true });
+ context = await setup({ page, isEmptyProject: false });
dashboard = new DashboardPage(page, context.project);
toolbar = dashboard.grid.toolbar;
});
From 57fa9491b45f8400cb9aaa6c449f362e010b1bab Mon Sep 17 00:00:00 2001
From: navi
Date: Sat, 29 Apr 2023 18:09:58 +0100
Subject: [PATCH 29/33] New translations en.json (Czech)
---
packages/nc-gui/lang/cs.json | 28 ++++++++++++++--------------
1 file changed, 14 insertions(+), 14 deletions(-)
diff --git a/packages/nc-gui/lang/cs.json b/packages/nc-gui/lang/cs.json
index fdd5a6e161..6c258b2f78 100644
--- a/packages/nc-gui/lang/cs.json
+++ b/packages/nc-gui/lang/cs.json
@@ -101,7 +101,7 @@
"form": "Formulář",
"kanban": "Kanban",
"calendar": "Kalendář",
- "map": "Map"
+ "map": "Mapa"
},
"user": "Uživatel",
"users": "Uživatelé",
@@ -260,9 +260,9 @@
"barcodeFormat": "Formát čárového kódu",
"qrCodeValueTooLong": "Příliš mnoho znaků pro QR kód",
"barcodeValueTooLong": "Příliš mnoho znaků pro čárový kód",
- "currentLocation": "Current Location",
- "lng": "Lng",
- "lat": "Lat",
+ "currentLocation": "Současná poloha",
+ "lng": "Zem. délka",
+ "lat": "Zem. šířka",
"aggregateFunction": "Agregační funkce",
"dbCreateIfNotExists": "Databáze : vytvořit, pokud neexistuje",
"clientKey": "Klíč klienta",
@@ -396,7 +396,7 @@
"saveAndExit": "Uložit a odejít",
"saveAndStay": "Uložit a zůstat",
"insertRow": "Vložit nový řádek",
- "duplicateRow": "Duplicate Row",
+ "duplicateRow": "Duplikovat řádek",
"deleteRow": "Odstranit řádek",
"deleteSelectedRow": "Odstranit vybrané řádky",
"importExcel": "Importovat Excel",
@@ -429,10 +429,10 @@
"openTab": "Otevřít novou kartu",
"iFrame": "Kopírování vložitelného kódu HTML",
"addWebhook": "Přidat nový webhook",
- "enableWebhook": "Enable Webhook",
- "testWebhook": "Test Webhook",
- "copyWebhook": "Copy Webhook",
- "deleteWebhook": "Delete Webhook",
+ "enableWebhook": "Povolit Webhook",
+ "testWebhook": "Otestovat Webhook",
+ "copyWebhook": "Kopírovat Webhook",
+ "deleteWebhook": "Smazat Webhook",
"newToken": "Přidat nový token",
"exportZip": "Exportovat zip archív",
"importZip": "Importovat zip archív",
@@ -472,7 +472,7 @@
"map": {
"mappedBy": "Mapped By",
"chooseMappingField": "Choose a Mapping Field",
- "openInGoogleMaps": "Google Maps",
+ "openInGoogleMaps": "Google mapy",
"openInOpenStreetMap": "OSM"
},
"toggleMobileMode": "Toggle Mobile Mode"
@@ -634,7 +634,7 @@
"gallery": "Přidat zobrazení galerie",
"form": "Přidání zobrazení formuláře",
"kanban": "Přidání zobrazení Kanban",
- "map": "Add Map View",
+ "map": "Přidat zobrazení mapy",
"calendar": "Přidat zobrazení kalendáře"
},
"tablesMetadataInSync": "Metadata tabulek jsou synchronizována",
@@ -667,7 +667,7 @@
"deleteTableConfirmation": "Chcete odstranit tabulku",
"showM2mTables": "Zobrazit tabulky M2M",
"showM2mTablesDesc": "Many-to-many relation is supported via a junction table & is hidden by default. Enable this option to list all such tables along with existing tables.",
- "showNullInCells": "Show NULL in Cells",
+ "showNullInCells": "Zobrazit NULL v buňkách",
"showNullInCellsDesc": "Display 'NULL' tag in cells holding NULL value. This helps differentiate against cells holding EMPTY string.",
"showNullAndEmptyInFilter": "Show NULL and EMPTY in Filter",
"showNullAndEmptyInFilterDesc": "Enable 'additional' filters to differentiate fields containing NULL & Empty Strings. Default support for Blank treats both NULL & Empty strings alike.",
@@ -698,7 +698,7 @@
"allowedSpecialCharList": "Seznam povolených speciálních znaků"
},
"invalidURL": "Neplatná adresa URL",
- "invalidEmail": "Invalid Email",
+ "invalidEmail": "Neplatný e-mail",
"internalError": "Došlo k nějaké interní chybě",
"templateGeneratorNotFound": "Generátor šablon nelze najít!",
"fileUploadFailed": "Nepodařilo se nahrát soubor",
@@ -759,7 +759,7 @@
},
"success": {
"columnDuplicated": "Sloupec úspěšně duplikován",
- "rowDuplicatedWithoutSavedYet": "Row duplicated (not saved)",
+ "rowDuplicatedWithoutSavedYet": "Řádek duplikován (neuložen)",
"updatedUIACL": "Úspěšná aktualizace uživatelského rozhraní ACL pro tabulky",
"pluginUninstalled": "Plugin byl úspěšně odinstalován",
"pluginSettingsSaved": "Nastavení zásuvného modulu bylo úspěšně uloženo",
From 1d3eee6b166db5f8e85618290ca1aba1af12448b Mon Sep 17 00:00:00 2001
From: Pranav C
Date: Mon, 1 May 2023 11:52:42 +0530
Subject: [PATCH 30/33] fix: create meta db if missing
Signed-off-by: Pranav C
---
packages/nocodb-nest/src/app.module.ts | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/packages/nocodb-nest/src/app.module.ts b/packages/nocodb-nest/src/app.module.ts
index 8bcb1806f8..bb84e054f4 100644
--- a/packages/nocodb-nest/src/app.module.ts
+++ b/packages/nocodb-nest/src/app.module.ts
@@ -16,6 +16,7 @@ import { GlobalModule } from './modules/global/global.module';
import { LocalStrategy } from './strategies/local.strategy';
import { AuthTokenStrategy } from './strategies/authtoken.strategy/authtoken.strategy';
import { BaseViewStrategy } from './strategies/base-view.strategy/base-view.strategy';
+import NcConfigFactory from './utils/NcConfigFactory'
import NcUpgrader from './version-upgrader/NcUpgrader';
import { MetasModule } from './modules/metas/metas.module';
import NocoCache from './cache/NocoCache';
@@ -68,6 +69,9 @@ export class AppModule implements OnApplicationBootstrap {
await NocoCache.init();
await this.connection.init();
+
+ await NcConfigFactory.metaDbCreateIfNotExist(Noco.config);
+
await this.metaService.init();
// todo: remove
From 970cd3da983f2294e4cfcbd38b0df1a8d8af06f2 Mon Sep 17 00:00:00 2001
From: Pranav C
Date: Mon, 1 May 2023 12:07:40 +0530
Subject: [PATCH 31/33] fix: pass proper meta config
Signed-off-by: Pranav C
---
packages/nocodb-nest/src/app.module.ts | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/packages/nocodb-nest/src/app.module.ts b/packages/nocodb-nest/src/app.module.ts
index bb84e054f4..1307931d5d 100644
--- a/packages/nocodb-nest/src/app.module.ts
+++ b/packages/nocodb-nest/src/app.module.ts
@@ -70,7 +70,7 @@ export class AppModule implements OnApplicationBootstrap {
await this.connection.init();
- await NcConfigFactory.metaDbCreateIfNotExist(Noco.config);
+ await NcConfigFactory.metaDbCreateIfNotExist(this.connection.config);
await this.metaService.init();
From 49a79a37e01a1e973ad8cde0548026990e16bdee Mon Sep 17 00:00:00 2001
From: Pranav C
Date: Wed, 3 May 2023 14:59:58 +0530
Subject: [PATCH 32/33] fix: nc_project_v2 already have description field -
remove it from latest migration
Signed-off-by: Pranav C
---
.../src/lib/migrations/v2/nc_030_add_description_field.ts | 6 ------
1 file changed, 6 deletions(-)
diff --git a/packages/nocodb/src/lib/migrations/v2/nc_030_add_description_field.ts b/packages/nocodb/src/lib/migrations/v2/nc_030_add_description_field.ts
index 61274e3b35..81382796fe 100644
--- a/packages/nocodb/src/lib/migrations/v2/nc_030_add_description_field.ts
+++ b/packages/nocodb/src/lib/migrations/v2/nc_030_add_description_field.ts
@@ -2,9 +2,6 @@ import { MetaTable } from '../../utils/globals';
import type { Knex } from 'knex';
const up = async (knex: Knex) => {
- await knex.schema.alterTable(MetaTable.PROJECT, (table) => {
- table.string('description', 255);
- });
await knex.schema.alterTable(MetaTable.BASES, (table) => {
table.string('description', 255);
});
@@ -20,9 +17,6 @@ const up = async (knex: Knex) => {
};
const down = async (knex) => {
- await knex.schema.alterTable(MetaTable.PROJECT, (table) => {
- table.dropColumn('description');
- });
await knex.schema.alterTable(MetaTable.BASES, (table) => {
table.dropColumn('description');
});
From 45208895e5ecf8ff4fdf920c0dc566e7db905c0e Mon Sep 17 00:00:00 2001
From: Pranav C
Date: Wed, 3 May 2023 15:06:07 +0530
Subject: [PATCH 33/33] fix: nc_project_v2 already have description field -
remove it from latest migration and add missing migration to nocodb-nest
Signed-off-by: Pranav C
---
.../meta/migrations/XcMigrationSourcev2.ts | 4 +++
.../v2/nc_030_add_description_field.ts | 34 +++++++++++++++++++
.../src/lib/migrations/XcMigrationSourcev2.ts | 2 +-
3 files changed, 39 insertions(+), 1 deletion(-)
create mode 100644 packages/nocodb-nest/src/meta/migrations/v2/nc_030_add_description_field.ts
diff --git a/packages/nocodb-nest/src/meta/migrations/XcMigrationSourcev2.ts b/packages/nocodb-nest/src/meta/migrations/XcMigrationSourcev2.ts
index 664e29ca2e..e6d0c0f84b 100644
--- a/packages/nocodb-nest/src/meta/migrations/XcMigrationSourcev2.ts
+++ b/packages/nocodb-nest/src/meta/migrations/XcMigrationSourcev2.ts
@@ -17,6 +17,7 @@ import * as nc_026_map_view from './v2/nc_026_map_view';
import * as nc_027_add_comparison_sub_op from './v2/nc_027_add_comparison_sub_op';
import * as nc_028_add_enable_scanner_in_form_columns_meta_table from './v2/nc_028_add_enable_scanner_in_form_columns_meta_table';
import * as nc_029_webhook from './v2/nc_029_webhook';
+import * as nc_030_add_description_field from './v2/nc_030_add_description_field';
// Create a custom migration source class
export default class XcMigrationSourcev2 {
@@ -45,6 +46,7 @@ export default class XcMigrationSourcev2 {
'nc_027_add_comparison_sub_op',
'nc_028_add_enable_scanner_in_form_columns_meta_table',
'nc_029_webhook',
+ 'nc_030_add_description_field',
]);
}
@@ -92,6 +94,8 @@ export default class XcMigrationSourcev2 {
return nc_028_add_enable_scanner_in_form_columns_meta_table;
case 'nc_029_webhook':
return nc_029_webhook;
+ case 'nc_030_add_description_field':
+ return nc_030_add_description_field;
}
}
}
diff --git a/packages/nocodb-nest/src/meta/migrations/v2/nc_030_add_description_field.ts b/packages/nocodb-nest/src/meta/migrations/v2/nc_030_add_description_field.ts
new file mode 100644
index 0000000000..9fe1f1b606
--- /dev/null
+++ b/packages/nocodb-nest/src/meta/migrations/v2/nc_030_add_description_field.ts
@@ -0,0 +1,34 @@
+import type { Knex } from 'knex';
+import { MetaTable } from '../../meta.service'
+
+const up = async (knex: Knex) => {
+ await knex.schema.alterTable(MetaTable.BASES, (table) => {
+ table.string('description', 255);
+ });
+ await knex.schema.alterTable(MetaTable.MODELS, (table) => {
+ table.string('description', 255);
+ });
+ await knex.schema.alterTable(MetaTable.VIEWS, (table) => {
+ table.string('description', 255);
+ });
+ await knex.schema.alterTable(MetaTable.COLUMNS, (table) => {
+ table.string('description', 255);
+ });
+};
+
+const down = async (knex) => {
+ await knex.schema.alterTable(MetaTable.BASES, (table) => {
+ table.dropColumn('description');
+ });
+ await knex.schema.alterTable(MetaTable.MODELS, (table) => {
+ table.dropColumn('description');
+ });
+ await knex.schema.alterTable(MetaTable.VIEWS, (table) => {
+ table.dropColumn('description');
+ });
+ await knex.schema.alterTable(MetaTable.COLUMNS, (table) => {
+ table.dropColumn('description');
+ });
+};
+
+export { up, down };
diff --git a/packages/nocodb/src/lib/migrations/XcMigrationSourcev2.ts b/packages/nocodb/src/lib/migrations/XcMigrationSourcev2.ts
index 1870872da5..e6d0c0f84b 100644
--- a/packages/nocodb/src/lib/migrations/XcMigrationSourcev2.ts
+++ b/packages/nocodb/src/lib/migrations/XcMigrationSourcev2.ts
@@ -46,7 +46,7 @@ export default class XcMigrationSourcev2 {
'nc_027_add_comparison_sub_op',
'nc_028_add_enable_scanner_in_form_columns_meta_table',
'nc_029_webhook',
- 'nc_030_add_description_field'
+ 'nc_030_add_description_field',
]);
}
]