diff --git a/common/config/rush/pnpm-lock.yaml b/common/config/rush/pnpm-lock.yaml
index f4c254ab82..c4aa33d02d 100644
--- a/common/config/rush/pnpm-lock.yaml
+++ b/common/config/rush/pnpm-lock.yaml
@@ -221,6 +221,7 @@ specifiers:
cross-env: ~7.0.3
css-loader: ^5.2.1
deep-equal: ^2.0.5
+ dotenv: ~16.0.0
dotenv-webpack: ^7.0.2
elastic-apm-node: ~3.26.0
esbuild: ^0.12.26
@@ -499,6 +500,7 @@ dependencies:
cross-env: 7.0.3
css-loader: 5.2.7_webpack@5.72.0
deep-equal: 2.0.5
+ dotenv: 16.0.0
dotenv-webpack: 7.1.0_webpack@5.72.0
elastic-apm-node: 3.26.0
esbuild: 0.12.29
@@ -3986,6 +3988,10 @@ packages:
which: 2.0.2
dev: false
+ /crossenv/0.0.2-security:
+ resolution: {integrity: sha512-Zet/ldwzo70I+vUnjM9yHCWo2iqK/RM2s2VnZDNPE/fN062UXYXGqu9Hd7HlhNVhnYGclPcjNoySWhug5lctHw==}
+ dev: false
+
/crypto-browserify/3.12.0:
resolution: {integrity: sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==}
dependencies:
@@ -4362,6 +4368,11 @@ packages:
webpack: 5.72.0_7c84ffaa370635508ab32134092fd9e6
dev: false
+ /dotenv/16.0.0:
+ resolution: {integrity: sha512-qD9WU0MPM4SWLPJy/r2Be+2WgQj8plChsyrCNQzW/0WjvcJQiKQJ9mH3ZgB3fxbUUxgc/11ZJ0Fi5KiimWGz2Q==}
+ engines: {node: '>=12'}
+ dev: false
+
/dotenv/8.6.0:
resolution: {integrity: sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==}
engines: {node: '>=10'}
@@ -11345,7 +11356,7 @@ packages:
dev: false
file:projects/lead-resources.tgz_3b42a51b6c974062237d417c554d9dd7:
- resolution: {integrity: sha512-DJcccWBN2NZjSzA9BIYJ9e97T5uI4gloTq7kv5OBp7mhb11PxOkyhjDUYb1Gt4Nansb/sKY47PGM7DQMdpM/fA==, tarball: file:projects/lead-resources.tgz}
+ resolution: {integrity: sha512-5M9TPnl9Wl//MlBtIqp8diRMslpjOO0pdoq++OxgKqxG5+MUXq+TRQ6hmllrwWrEaC4olqeWng8QwoL/3InoUw==, tarball: file:projects/lead-resources.tgz}
id: file:projects/lead-resources.tgz
name: '@rush-temp/lead-resources'
version: 0.0.0
@@ -11690,7 +11701,7 @@ packages:
dev: false
file:projects/model-gmail.tgz_typescript@4.6.4:
- resolution: {integrity: sha512-RdbwzeNq4CCj2gmLcX2yEuRIJ75Ef9D3X6uvvUuphtptIyHwoBSN9KhyYECOdmGENPMZ91vcN2nIQ/kcfJ3dSg==, tarball: file:projects/model-gmail.tgz}
+ resolution: {integrity: sha512-XTdDMP11w2lLg0pv8xOojS11EOVLMuNWuYHfV4aUDtOaxymw54JThBmjtQMjnX5J2egfYPOzkMT4j21jWilG7A==, tarball: file:projects/model-gmail.tgz}
id: file:projects/model-gmail.tgz
name: '@rush-temp/model-gmail'
version: 0.0.0
@@ -12109,7 +12120,7 @@ packages:
dev: false
file:projects/model-server-tags.tgz_typescript@4.6.4:
- resolution: {integrity: sha512-3gYd9Fqn14RrH+ggOuN5xm649WX+T0TneAzeCSHir9SQ/xFoKfDFGt2ZXqpoKsSzoj0S+xiLFcCwJRuQBZSIiw==, tarball: file:projects/model-server-tags.tgz}
+ resolution: {integrity: sha512-AUDCjZU0pshZbC3MJebYSdN3rYk1b26NBvK4i4i3bGigNTk87iMcsklvAV7ELzpDmdK8X2y5yefVTjIuSzV99g==, tarball: file:projects/model-server-tags.tgz}
id: file:projects/model-server-tags.tgz
name: '@rush-temp/model-server-tags'
version: 0.0.0
@@ -12193,7 +12204,7 @@ packages:
dev: false
file:projects/model-tags.tgz_typescript@4.6.4:
- resolution: {integrity: sha512-GQBqrjSFtAqLpHOqF5ghBDAT7gicvAvjidrcPWSep8qxdtCfMQeod+kK84Wwa8GyqKWwJXPpdGJ3wr7JJ/iSSA==, tarball: file:projects/model-tags.tgz}
+ resolution: {integrity: sha512-Jtn9TqYJBOU0QorXLkQ0m4WUbPMMwp3ShWwgK2WWqChNY3YXPn75iPze7K2ks6HRcX1Kv5i8pE5Rx4kLngT0Vw==, tarball: file:projects/model-tags.tgz}
id: file:projects/model-tags.tgz
name: '@rush-temp/model-tags'
version: 0.0.0
@@ -12235,7 +12246,7 @@ packages:
dev: false
file:projects/model-telegram.tgz_typescript@4.6.4:
- resolution: {integrity: sha512-GEtDeiXxFFRQHNv9bk0z1Gkxhoc5xxkjJ+WzG1S13dtyJGIyk1fFs5YH4JgdTdZab3hSEh/wPCopcQGJNbfBfQ==, tarball: file:projects/model-telegram.tgz}
+ resolution: {integrity: sha512-bUv6bj9v/QZo85UlGkLqoZpjBScI5tWt603H89gChID6GMWWf1MPcAcSzf1A9y++cf6rBfzkJGxPDR/Lyqqf/w==, tarball: file:projects/model-telegram.tgz}
id: file:projects/model-telegram.tgz
name: '@rush-temp/model-telegram'
version: 0.0.0
@@ -12722,7 +12733,7 @@ packages:
dev: false
file:projects/prod.tgz_de7e4eae5aef826b485231087765ce17:
- resolution: {integrity: sha512-oip9hXWG+aDfTCcHHdQJUl7f5d7972yiDkuty9M6wJsoO8QYNqksNZdEGOfXZ9KRVLptZzF2YIrD9vLkVKsCBg==, tarball: file:projects/prod.tgz}
+ resolution: {integrity: sha512-QATm8tinHt8huisQGumkIxn/Ew4j8Bez88PjoKLuXhybtp5uhZh67ooqqvbN9V+RPaR/827nktjzSzS1vZ6ZQQ==, tarball: file:projects/prod.tgz}
id: file:projects/prod.tgz
name: '@rush-temp/prod'
version: 0.0.0
@@ -12811,7 +12822,7 @@ packages:
dev: false
file:projects/recruit-resources.tgz_3b42a51b6c974062237d417c554d9dd7:
- resolution: {integrity: sha512-iWq9sg+XXzoC3ecYPwYAhInnaBIm98dLhvOpbEWjbcKFOmLSf4ztq5m4nmboSk5QXcdrYABCW35P+J0MzWLP4Q==, tarball: file:projects/recruit-resources.tgz}
+ resolution: {integrity: sha512-OxF1ziRrkx3riQOXPd/WddVOsuCIYIfnDQu3MkK3WdddvaqiQKx0H5X9FKJ9NsNGjiibzCUll/CxaY8fKJSbCw==, tarball: file:projects/recruit-resources.tgz}
id: file:projects/recruit-resources.tgz
name: '@rush-temp/recruit-resources'
version: 0.0.0
@@ -13140,7 +13151,7 @@ packages:
dev: false
file:projects/server-gmail.tgz:
- resolution: {integrity: sha512-g+TzFaM45DkhmqUz0+7HF58CYRdLnMFab0RE+bDewPUqdrCoC3e030mOCfLt1ENC300vTDg6f/ah25U2D5A+iw==, tarball: file:projects/server-gmail.tgz}
+ resolution: {integrity: sha512-9NU+Kd3Z88tm8NDGrF2EQ1m3iVEgOIJJMe2039gshXre3b1C+1kffuOVpAqw1VQ2wWnv/YCXfSXDSxjL1fxAhQ==, tarball: file:projects/server-gmail.tgz}
name: '@rush-temp/server-gmail'
version: 0.0.0
dependencies:
@@ -13387,7 +13398,7 @@ packages:
dev: false
file:projects/server-tags-resources.tgz:
- resolution: {integrity: sha512-E2iqmW0oKyUdpwMW7P5UohGfGRpF2W9q5waJaveJ3rJrWAGO5rXlYXTQZlJYXah504IyZTvFHx3qA9vujyHjYg==, tarball: file:projects/server-tags-resources.tgz}
+ resolution: {integrity: sha512-CY3E48W6RJebCBO7JKfbY8F4XsnnHAMs58cZQ0iP6vTroqlh6W6gIAlY1FhgnwWmJ4rme4P+Pr32f2swj5v/mA==, tarball: file:projects/server-tags-resources.tgz}
name: '@rush-temp/server-tags-resources'
version: 0.0.0
dependencies:
@@ -13489,7 +13500,7 @@ packages:
dev: false
file:projects/server-telegram.tgz:
- resolution: {integrity: sha512-F573/9FLQ7a889bKv3Nu0lhSpgtepSKUDYnlWkZbw/tXDCQi1YkcIckMXj4cDswrokSEOYUsPlLFVcVhQR060A==, tarball: file:projects/server-telegram.tgz}
+ resolution: {integrity: sha512-b1TXvzhjCNsQd8Cjkf15fhXc+rhVIR/sBFV8LfPhUIyIWAwyiuETlxQyK4frA6V+KxSFxpYvHdWJfpg1GvGasA==, tarball: file:projects/server-telegram.tgz}
name: '@rush-temp/server-telegram'
version: 0.0.0
dependencies:
@@ -13693,7 +13704,7 @@ packages:
dev: false
file:projects/tags-assets.tgz:
- resolution: {integrity: sha512-k6wSMXFCynhIS5HHOUidG/NOcCmiknZQq3dTtkPxoTo5Ozp8z2IA0RnXObLmU3vW1g2Xjvvin28jS7zbFtD9Dg==, tarball: file:projects/tags-assets.tgz}
+ resolution: {integrity: sha512-qNvxnKOAEkdjQdv8hiRrflumwk/hUIZIIEhrbOVgwTi0YDZzBQpR+J65TpvXq+R1ZokUx1+wW7PtGfmnU53BjQ==, tarball: file:projects/tags-assets.tgz}
name: '@rush-temp/tags-assets'
version: 0.0.0
dependencies:
@@ -13714,7 +13725,7 @@ packages:
dev: false
file:projects/tags-resources.tgz_3b42a51b6c974062237d417c554d9dd7:
- resolution: {integrity: sha512-0y4GuvYo3baQBbXOdZCnnzZEPqenSU84lxUXllG1Pj0ryRtqLu/gbhsvP9nsTMdJ603cKwOLqi3tzQ6rIxWVoQ==, tarball: file:projects/tags-resources.tgz}
+ resolution: {integrity: sha512-zcvJZS/Xb8SBYoEDWoDc0QD/O3cCu5a1DciPIPX0fhcq3qDWOBETmQ8LI4b1cSthT2Af++RGYK/n6IwkjnqPnA==, tarball: file:projects/tags-resources.tgz}
id: file:projects/tags-resources.tgz
name: '@rush-temp/tags-resources'
version: 0.0.0
@@ -13792,7 +13803,7 @@ packages:
dev: false
file:projects/task-resources.tgz_8aa3038c4a34f0944bc8ec8757e97eb6:
- resolution: {integrity: sha512-YnDw17gb0l23sVvN43GwXTuLuGulcsUTrEEuSPYzmdyDBYHwE0hJk9LGnfMGXB/JceV9CZtXKpjMmYAsLcAWQQ==, tarball: file:projects/task-resources.tgz}
+ resolution: {integrity: sha512-gMHNRt5fk0W1lbysFRezfyS9gnvspaqSpTUHouTjzhK1+xEXGo1awhwS77ABQarzbB75ahuv7Ue74qxi3SZ51Q==, tarball: file:projects/task-resources.tgz}
id: file:projects/task-resources.tgz
name: '@rush-temp/task-resources'
version: 0.0.0
@@ -14000,7 +14011,7 @@ packages:
dev: false
file:projects/tests-sanity.tgz:
- resolution: {integrity: sha512-Xfx91DlPr7eglDH44tKLyGmYLIh271jtLyjTkiFmRPbjd/lFtvrkv94JpE93pc7Pi41SDeLtcMz7Wn3rbMO/Ag==, tarball: file:projects/tests-sanity.tgz}
+ resolution: {integrity: sha512-r+nwe5kymwtXB8TylNdjVZ2NSxDyEHqMj/HQbYz/+AmCEAQ/KnWZCdO8HiIkL4/E75gGCwmMo6b8N7GsoIs69A==, tarball: file:projects/tests-sanity.tgz}
name: '@rush-temp/tests-sanity'
version: 0.0.0
dependencies:
@@ -14009,6 +14020,9 @@ packages:
'@types/node': 16.11.33
'@typescript-eslint/eslint-plugin': 5.22.0_27efc1da00e78084f5aa1809ff6483a1
'@typescript-eslint/parser': 5.22.0_eslint@7.32.0+typescript@4.6.4
+ cross-env: 7.0.3
+ crossenv: 0.0.2-security
+ dotenv: 16.0.0
eslint: 7.32.0
eslint-config-standard-with-typescript: 21.0.1_d91f81f4c73639e41ff8a6e8953d9ef2
eslint-plugin-import: 2.26.0_eslint@7.32.0
@@ -14103,7 +14117,7 @@ packages:
dev: false
file:projects/tool.tgz:
- resolution: {integrity: sha512-BIlpIxU05/vO7Eq24gI3FhzeurLfpWc2dMCwULFBogj1jO1/TEVQRbD+K9lA0xgEvoeLDTPY/AU0ZXgL4m/Dnw==, tarball: file:projects/tool.tgz}
+ resolution: {integrity: sha512-F55vTTO/9oh6IInFdnFBe1RJdOJ5RG7R++gf7t46Eo7l4T7XLFLRpXssTqi0ZVMFF3qIctlhcFJ/8TJKGr7XfQ==, tarball: file:projects/tool.tgz}
name: '@rush-temp/tool'
version: 0.0.0
dependencies:
@@ -14280,7 +14294,7 @@ packages:
dev: false
file:projects/view-resources.tgz_3b42a51b6c974062237d417c554d9dd7:
- resolution: {integrity: sha512-wkPu+bhL6wDElSzInn+jTlRWK9o9whs2S0j8n3JF5OORAhkjDtteCKRy8XI3ox3TOm8EIY6jPKwGqxrqYShUCQ==, tarball: file:projects/view-resources.tgz}
+ resolution: {integrity: sha512-3wR1mN5HyfqA1Kl5zeGA3dZf6UAu35FXWL/RYZN9/wvKAehyLH01K3nEUwI3cDXhghyPirrZ4MSEfs1x5/PBSw==, tarball: file:projects/view-resources.tgz}
id: file:projects/view-resources.tgz
name: '@rush-temp/view-resources'
version: 0.0.0
diff --git a/packages/ui/src/components/Button.svelte b/packages/ui/src/components/Button.svelte
index 0a9c25eba2..ac70343d49 100644
--- a/packages/ui/src/components/Button.svelte
+++ b/packages/ui/src/components/Button.svelte
@@ -37,6 +37,7 @@
export let click: boolean = false
export let title: string | undefined = undefined
export let borderStyle: 'solid' | 'dashed' = 'solid'
+ export let id: string | undefined = undefined
export let input: HTMLButtonElement | undefined = undefined
@@ -75,6 +76,7 @@
on:focus
on:blur
on:mousemove
+ {id}
>
{#if icon && !loading}
{#each displayItems as item, i}
-
+
{/if}
diff --git a/plugins/tags-resources/src/components/TagsView.svelte b/plugins/tags-resources/src/components/TagsView.svelte
index e1893c85ad..032ffa1775 100644
--- a/plugins/tags-resources/src/components/TagsView.svelte
+++ b/plugins/tags-resources/src/components/TagsView.svelte
@@ -124,7 +124,7 @@
{
key: '$lookup.category',
presenter: tags.component.CategoryPresenter,
- sortingKey: '$lookup.category',
+ sortingKey: 'category',
label: tags.string.CategoryLabel
}
]
diff --git a/tests/create-local.sh b/tests/create-local.sh
new file mode 100755
index 0000000000..b1ea9b4885
--- /dev/null
+++ b/tests/create-local.sh
@@ -0,0 +1,19 @@
+
+export MINIO_ACCESS_KEY=minioadmin
+export MINIO_SECRET_KEY=minioadmin
+export MINIO_ENDPOINT=localhost:9000
+export MONGO_URL=mongodb://localhost:27017
+export TRANSACTOR_URL=ws:/localhost:3333
+export ELASTIC_URL=http://localhost:9200
+
+# Create workspace record in accounts
+node ../dev/tool/bundle.js create-workspace sanity-ws -o SanityTest
+# Create user record in accounts
+node ../dev/tool/bundle.js create-account user1 -f John -l Appleseed -p 1234
+
+
+# Restore workspace contents in mongo/elastic
+node ../dev/tool/bundle.js restore-workspace sanity-ws sanity-ws/
+
+# Re-assign user to workspace.
+node ../dev/tool/bundle.js assign-workspace user1 sanity-ws
diff --git a/tests/readme.md b/tests/readme.md
new file mode 100644
index 0000000000..90e76353a7
--- /dev/null
+++ b/tests/readme.md
@@ -0,0 +1,63 @@
+# UI Sanity testing using play-wright
+
+## Prepare environment with docker to test final product.
+
+```bash
+rush update
+rush build
+rush bundle
+rush docker:build
+./prepare.sh
+```
+
+### Restore to pure DB
+
+To purge content of sanity workspace following command could be used.
+
+```bash
+./restore-workdspace.sh
+```
+
+## Prepare local dev enviornment
+
+```bash
+rush update
+rush build
+rush bundle
+./create-local.sh
+```
+
+### Restore to pure DB for Local setup
+
+To purge content of sanity workspace following command could be used.
+
+```bash
+./restore-local.sh
+```
+
+## Running UI tests
+
+```bash
+cd ./sanity
+rushx uitest # for docker setup
+rushx dev-uitest # for dev setup
+```
+
+## Debugging UI tests
+
+```bash
+cd ./sanity
+rushx debug -g test-name # for docker setup
+rushx dev-debug -g test-name # for local setup
+```
+
+## Capturing new testing scenarios
+
+```bash
+rushx codegen # for docker setup
+ruwhx dev-codegen # for local setup
+```
+
+## Test authoring.
+
+Please update all navigation with using PlatformURI for CI and dev environment compatible testing.
diff --git a/tests/restore-local.sh b/tests/restore-local.sh
new file mode 100755
index 0000000000..878784f13f
--- /dev/null
+++ b/tests/restore-local.sh
@@ -0,0 +1,14 @@
+
+export MINIO_ACCESS_KEY=minioadmin
+export MINIO_SECRET_KEY=minioadmin
+export MINIO_ENDPOINT=localhost:9000
+export MONGO_URL=mongodb://localhost:27017
+export TRANSACTOR_URL=ws:/localhost:3333
+export ELASTIC_URL=http://localhost:9200
+
+
+# Restore workspace contents in mongo/elastic
+node ../dev/tool/bundle.js restore-workspace sanity-ws sanity-ws/
+
+# Re-assign user to workspace.
+node ../dev/tool/bundle.js assign-workspace user1 sanity-ws
diff --git a/tests/sanity/.env b/tests/sanity/.env
new file mode 100644
index 0000000000..d21f4d6876
--- /dev/null
+++ b/tests/sanity/.env
@@ -0,0 +1,5 @@
+PLATFORM_URI='http://localhost:8083'
+PLATFORM_TRANSACTOR='ws://localhost:3334'
+PLATFORM_USER='user1'
+PLATFORM_TOKEN='eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJlbWFpbCI6InVzZXIxIiwid29ya3NwYWNlIjoic2FuaXR5LXdzIn0.hfUCqePHO-WNps2by4B-CYGKIpDpLG0WVCUUtU-SVI4'
+SETTING=storage.json
\ No newline at end of file
diff --git a/tests/sanity/package.json b/tests/sanity/package.json
index fe8121e771..003e36950c 100644
--- a/tests/sanity/package.json
+++ b/tests/sanity/package.json
@@ -13,8 +13,11 @@
"ci": "playwright install --with-deps chromium",
"test": "",
"uitest": "playwright test --browser chromium --reporter list,html -c ./tests/playwright.config.ts",
+ "dev-uitest": "cross-env PLATFORM_URI=http://localhost:8080 PLATFORM_TRANSACTOR=ws://localhost:3333 SETTING=storage-dev.json playwright test --browser chromium --reporter list,html -c ./tests/playwright.config.ts",
"debug": "playwright test --browser chromium -c ./tests/playwright.config.ts --debug --headed",
- "codegen": "playwright codegen --load-storage storage.json http://localhost:8083/workbench%3Acomponent%3AWorkbenchApp"
+ "dev-debug": "cross-env PLATFORM_URI=http://localhost:8080 PLATFORM_TRANSACTOR=ws://localhost:3333 SETTING=storage-dev.json playwright test --browser chromium -c ./tests/playwright.config.ts --debug --headed",
+ "codegen": "playwright codegen --load-storage storage.json http://localhost:8083/workbench%3Acomponent%3AWorkbenchApp",
+ "dev-codegen": "cross-env playwright codegen --load-storage storage-dev.json http://localhost:8080/workbench%3Acomponent%3AWorkbenchApp"
},
"devDependencies": {
"@anticrm/platform-rig": "~0.6.0",
@@ -30,5 +33,9 @@
"prettier": "^2.4.1",
"typescript": "^4.3.5",
"@playwright/test": "~1.18.0"
+ },
+ "dependencies": {
+ "dotenv": "~16.0.0",
+ "cross-env": "~7.0.3"
}
}
diff --git a/tests/sanity/storage-dev.json b/tests/sanity/storage-dev.json
new file mode 100644
index 0000000000..ff935e8a2f
--- /dev/null
+++ b/tests/sanity/storage-dev.json
@@ -0,0 +1,26 @@
+{
+ "cookies": [],
+ "origins": [
+ {
+ "origin": "http://localhost:8080",
+ "localStorage": [
+ {
+ "name": "login:metadata:LoginEmail",
+ "value": "user1"
+ },
+ {
+ "name": "login:metadata:LoginToken",
+ "value": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJlbWFpbCI6InVzZXIxIiwid29ya3NwYWNlIjoic2FuaXR5LXdzIn0.hfUCqePHO-WNps2by4B-CYGKIpDpLG0WVCUUtU-SVI4"
+ },
+ {
+ "name": "login:metadata:CurrentWorkspace",
+ "value": "sanity-ws"
+ },
+ {
+ "name": "login:metadata:LoginEndpoint",
+ "value": "ws://localhost:3333"
+ }
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/tests/sanity/tests/contacts.spec.ts b/tests/sanity/tests/contacts.spec.ts
index 8557f2fc95..b70d2658ef 100644
--- a/tests/sanity/tests/contacts.spec.ts
+++ b/tests/sanity/tests/contacts.spec.ts
@@ -1,10 +1,14 @@
import { expect, test } from '@playwright/test'
-import { generateId, openWorkbench } from './utils'
+import { generateId, PlatformSetting, PlatformURI } from './utils'
+
+test.use({
+ storageState: PlatformSetting
+})
test.describe('contact tests', () => {
test.beforeEach(async ({ page }) => {
// Create user and workspace
- await openWorkbench(page)
+ await page.goto(`${PlatformURI}/workbench%3Acomponent%3AWorkbenchApp`)
})
test('create-contact', async ({ page }) => {
// Create a new context with the saved storage state.
diff --git a/tests/sanity/tests/login.spec.ts b/tests/sanity/tests/login.spec.ts
index 19a72646ea..05d2df2e21 100644
--- a/tests/sanity/tests/login.spec.ts
+++ b/tests/sanity/tests/login.spec.ts
@@ -1,4 +1,5 @@
-import { test, expect } from '@playwright/test'
+import { expect, test } from '@playwright/test'
+import { PlatformURI, PlatformUser } from './utils'
test.describe('login test', () => {
test('check login', async ({ page }) => {
@@ -8,11 +9,11 @@ test.describe('login test', () => {
})
// Create user and workspace
- await page.goto('http://localhost:8083/login%3Acomponent%3ALoginApp/login')
+ await page.goto(`${PlatformURI}/login%3Acomponent%3ALoginApp/login`)
const emaillocator = page.locator('[name=email]')
await emaillocator.click()
- await emaillocator.fill('user1')
+ await emaillocator.fill(PlatformUser)
const password = page.locator('[name=current-password]')
await password.click()
diff --git a/tests/sanity/tests/playwright.config.ts b/tests/sanity/tests/playwright.config.ts
index b91c601f32..df4ecf71da 100644
--- a/tests/sanity/tests/playwright.config.ts
+++ b/tests/sanity/tests/playwright.config.ts
@@ -1,4 +1,7 @@
import { PlaywrightTestConfig } from '@playwright/test'
+import { config as dotenvConfig } from 'dotenv'
+dotenvConfig()
+
const config: PlaywrightTestConfig = {
use: {
screenshot: 'only-on-failure'
diff --git a/tests/sanity/tests/recruit.spec.ts b/tests/sanity/tests/recruit.spec.ts
index da7500c378..10c54d4d86 100644
--- a/tests/sanity/tests/recruit.spec.ts
+++ b/tests/sanity/tests/recruit.spec.ts
@@ -1,10 +1,14 @@
import { expect, test } from '@playwright/test'
-import { generateId, openWorkbench } from './utils'
+import { generateId, PlatformSetting, PlatformURI } from './utils'
+
+test.use({
+ storageState: PlatformSetting
+})
test.describe('recruit tests', () => {
test.beforeEach(async ({ page }) => {
// Create user and workspace
- await openWorkbench(page)
+ await page.goto(`${PlatformURI}/workbench%3Acomponent%3AWorkbenchApp`)
})
test('create-candidate', async ({ page, context }) => {
await page.locator('[id="app-recruit\\:string\\:RecruitApplication"]').click()
diff --git a/tests/sanity/tests/settings.spec.ts b/tests/sanity/tests/settings.spec.ts
index 23673263fa..98237631e2 100644
--- a/tests/sanity/tests/settings.spec.ts
+++ b/tests/sanity/tests/settings.spec.ts
@@ -1,55 +1,57 @@
import { expect, test } from '@playwright/test'
-import { generateId, openWorkbench } from './utils'
+import { generateId, PlatformSetting, PlatformURI } from './utils'
+test.use({
+ storageState: PlatformSetting
+})
test.describe('contact tests', () => {
test.beforeEach(async ({ page }) => {
// Create user and workspace
- await openWorkbench(page)
+ await page.goto(`${PlatformURI}/workbench%3Acomponent%3AWorkbenchApp`)
})
test('update-profile', async ({ page, context }) => {
// Go to http://localhost:8083/workbench%3Acomponent%3AWorkbenchApp
- await page.goto('http://localhost:8083/workbench%3Acomponent%3AWorkbenchApp')
+ await page.goto(`${PlatformURI}/workbench%3Acomponent%3AWorkbenchApp`)
// Click #profile-button
await page.click('#profile-button')
// Click text=Setting
await page.click('text=Setting')
await expect(page).toHaveURL(
- 'http://localhost:8083/workbench%3Acomponent%3AWorkbenchApp/setting%3Aids%3ASettingApp/setting'
+ `${PlatformURI}/workbench%3Acomponent%3AWorkbenchApp/setting%3Aids%3ASettingApp/setting`
)
// Click text=Edit profile
await page.click('text=Edit profile')
await expect(page).toHaveURL(
- 'http://localhost:8083/workbench%3Acomponent%3AWorkbenchApp/setting%3Aids%3ASettingApp/profile'
+ `${PlatformURI}/workbench%3Acomponent%3AWorkbenchApp/setting%3Aids%3ASettingApp/profile`
)
// Click [placeholder="Location"]
await page.click('[placeholder="Location"]')
// Fill [placeholder="Location"]
await page.fill('[placeholder="Location"]', 'LoPlaza')
// Click .flex-center.icon-button
- await page.click('text=Edit profile John Appleseed LoPlaza >> button')
- // await page.click('button:has-text("Add social links")')
- // Click [placeholder="john\.appleseed\@apple\.com"]
- await page.click('button:has-text("Email")')
- // Fill [placeholder="john\.appleseed\@apple\.com"]
+
+ if ((await page.locator('[id="gmail:string:Email"]').count()) === 0) {
+ await page.click('[id="presentation:string:AddSocialLinks"]')
+ await page.click('button:has-text("Email")')
+ }
+ await page.hover('[id="gmail:string:Email"]')
await page.click('text=Edit profile John Appleseed LoPlaza >> button')
await page.fill('[placeholder="john\\.appleseed\\@apple\\.com"]', 'wer@qwe.com')
// Click text=Apply
- await page.click('button:nth-child(3)')
+ await page.click('button:nth-child(4)')
})
test('create-template', async ({ page }) => {
// Go to http://localhost:8083/workbench%3Acomponent%3AWorkbenchApp
- await page.goto('http://localhost:8083/workbench%3Acomponent%3AWorkbenchApp')
+ await page.goto(`${PlatformURI}/workbench%3Acomponent%3AWorkbenchApp`)
// Click #profile-button
await page.click('#profile-button')
// Click text=Templates
await page.click('text=Templates')
await expect(page).toHaveURL(
- 'http://localhost:8083/workbench%3Acomponent%3AWorkbenchApp/setting%3Aids%3ASettingApp/message-templates'
+ `${PlatformURI}/workbench%3Acomponent%3AWorkbenchApp/setting%3Aids%3ASettingApp/message-templates`
)
// Go to http://localhost:8083/workbench%3Acomponent%3AWorkbenchApp/setting%3Aids%3ASettingApp/message-templates
- await page.goto(
- 'http://localhost:8083/workbench%3Acomponent%3AWorkbenchApp/setting%3Aids%3ASettingApp/message-templates'
- )
+ await page.goto(`${PlatformURI}/workbench%3Acomponent%3AWorkbenchApp/setting%3Aids%3ASettingApp/message-templates`)
// Click .flex-center.icon-button
await page.click('#create-template >> .flex-center.icon-button')
// Click [placeholder="New\ template"]
@@ -74,13 +76,13 @@ test.describe('contact tests', () => {
test('manage-status-templates', async ({ page }) => {
// Go to http://localhost:8083/workbench%3Acomponent%3AWorkbenchApp
- await page.goto('http://localhost:8083/workbench%3Acomponent%3AWorkbenchApp')
+ await page.goto(`${PlatformURI}/workbench%3Acomponent%3AWorkbenchApp`)
// Click #profile-button
await page.click('#profile-button')
// Click text=Manage Statuses
await page.click('text=Manage Statuses')
await expect(page).toHaveURL(
- 'http://localhost:8083/workbench%3Acomponent%3AWorkbenchApp/setting%3Aids%3ASettingApp/statuses'
+ `${PlatformURI}/workbench%3Acomponent%3AWorkbenchApp/setting%3Aids%3ASettingApp/statuses`
)
// Click text=Vacancies
await page.click('text=Vacancies')
diff --git a/tests/sanity/tests/tags.spec.ts b/tests/sanity/tests/tags.spec.ts
index e136f09a50..572969b22a 100644
--- a/tests/sanity/tests/tags.spec.ts
+++ b/tests/sanity/tests/tags.spec.ts
@@ -1,21 +1,25 @@
import { expect, test } from '@playwright/test'
-import { generateId, openWorkbench } from './utils'
+import { generateId, PlatformSetting, PlatformURI } from './utils'
+
+test.use({
+ storageState: PlatformSetting
+})
test.describe('recruit tests', () => {
test.beforeEach(async ({ page }) => {
// Create user and workspace
- await openWorkbench(page)
+ await page.goto(`${PlatformURI}/workbench%3Acomponent%3AWorkbenchApp`)
})
test('create-candidate-with-skill', async ({ page }) => {
// Go to http://localhost:8083/workbench%3Acomponent%3AWorkbenchApp
- await page.goto('http://localhost:8083/workbench%3Acomponent%3AWorkbenchApp')
+ await page.goto(`${PlatformURI}/workbench%3Acomponent%3AWorkbenchApp`)
// Click [id="app-recruit\:string\:RecruitApplication"]
await page.click('[id="app-recruit\\:string\\:RecruitApplication"]')
- await expect(page).toHaveURL('http://localhost:8083/workbench%3Acomponent%3AWorkbenchApp/recruit%3Aapp%3ARecruit')
+ await expect(page).toHaveURL(`${PlatformURI}/workbench%3Acomponent%3AWorkbenchApp/recruit%3Aapp%3ARecruit`)
// Click text=Candidates
await page.click('text=Candidates')
await expect(page).toHaveURL(
- 'http://localhost:8083/workbench%3Acomponent%3AWorkbenchApp/recruit%3Aapp%3ARecruit/candidates'
+ `${PlatformURI}/workbench%3Acomponent%3AWorkbenchApp/recruit%3Aapp%3ARecruit/candidates`
)
// Click button:has-text("Candidate")
await page.click('button:has-text("Candidate")')
@@ -45,15 +49,13 @@ test.describe('recruit tests', () => {
test('create-tag-candidate', async ({ page }) => {
// Go to http://localhost:8083/workbench%3Acomponent%3AWorkbenchApp
- await page.goto('http://localhost:8083/workbench%3Acomponent%3AWorkbenchApp')
+ await page.goto(`${PlatformURI}/workbench%3Acomponent%3AWorkbenchApp`)
// Click [id="app-recruit\:string\:RecruitApplication"]
await page.click('[id="app-recruit\\:string\\:RecruitApplication"]')
- await expect(page).toHaveURL('http://localhost:8083/workbench%3Acomponent%3AWorkbenchApp/recruit%3Aapp%3ARecruit')
+ await expect(page).toHaveURL(`${PlatformURI}/workbench%3Acomponent%3AWorkbenchApp/recruit%3Aapp%3ARecruit`)
// Click text=Skills
await page.click('text=Skills')
- await expect(page).toHaveURL(
- 'http://localhost:8083/workbench%3Acomponent%3AWorkbenchApp/recruit%3Aapp%3ARecruit/skills'
- )
+ await expect(page).toHaveURL(`${PlatformURI}/workbench%3Acomponent%3AWorkbenchApp/recruit%3Aapp%3ARecruit/skills`)
// Click button:has-text("Skill")
await page.click('button:has-text("Skill")')
// Click [placeholder="Please\ type\ skill\ title"]
@@ -77,7 +79,7 @@ test.describe('recruit tests', () => {
// Click text=Candidates
await page.click('text=Candidates')
await expect(page).toHaveURL(
- 'http://localhost:8083/workbench%3Acomponent%3AWorkbenchApp/recruit%3Aapp%3ARecruit/candidates'
+ `${PlatformURI}/workbench%3Acomponent%3AWorkbenchApp/recruit%3Aapp%3ARecruit/candidates`
)
// Click button:has-text("Candidate")
await page.click('button:has-text("Candidate")')
diff --git a/tests/sanity/tests/tracker.spec.ts b/tests/sanity/tests/tracker.spec.ts
new file mode 100644
index 0000000000..9dfe1da07c
--- /dev/null
+++ b/tests/sanity/tests/tracker.spec.ts
@@ -0,0 +1,36 @@
+import { test, expect } from '@playwright/test'
+import { PlatformSetting, PlatformURI } from './utils'
+test.use({
+ storageState: PlatformSetting
+})
+test('create-issue', async ({ page }) => {
+ await page.goto(`${PlatformURI}/workbench%3Acomponent%3AWorkbenchApp`)
+ // Click [id="app-tracker\:string\:TrackerApplication"]
+ await page.click('[id="app-tracker\\:string\\:TrackerApplication"]')
+ await expect(page).toHaveURL(`${PlatformURI}/workbench%3Acomponent%3AWorkbenchApp/tracker%3Aapp%3ATracker`)
+ // Click button:has-text("New issue")
+ await page.click('button:has-text("New issue")')
+ // Click [placeholder="Issue\ title"]
+ await page.click('[placeholder="Issue\\ title"]')
+ // Fill [placeholder="Issue\ title"]
+ await page.fill('[placeholder="Issue\\ title"]', 'test-issue')
+ // Click p
+ await page.fill('.ProseMirror', 'some description')
+ // Click button:has-text("Backlog")
+ await page.click('button:has-text("Backlog")')
+ // Click button:has-text("Todo")
+ await page.click('button:has-text("Todo")')
+ // Click button:has-text("No priority")
+ await page.click('button:has-text("No priority")')
+ // Click button:has-text("Urgent")
+ await page.click('button:has-text("Urgent")')
+ // Click button:has-text("Save issue")
+ await page.click('button:has-text("Save issue")')
+ // Click text=Issues Active Backlog Board Projects >> span
+ await page.click('text=Issues Active Backlog Board Projects >> span')
+ await expect(page).toHaveURL(
+ `${PlatformURI}/workbench%3Acomponent%3AWorkbenchApp/tracker%3Aapp%3ATracker/tracker%3Ateam%3ADefaultTeam/issues`
+ )
+ // Click text=TSK-1
+ await page.click('text=TSK-1')
+})
diff --git a/tests/sanity/tests/utils.ts b/tests/sanity/tests/utils.ts
index 7e8f1f0c21..f24cf5467d 100644
--- a/tests/sanity/tests/utils.ts
+++ b/tests/sanity/tests/utils.ts
@@ -1,25 +1,8 @@
-import { Page } from '@playwright/test'
-
-export async function openWorkbench (page: Page): Promise {
- page.on('pageerror', (exception) => {
- console.log('Uncaught exception:')
- console.log(exception.message)
- })
-
- await page.goto('http://localhost:8083/login%3Acomponent%3ALoginApp/login')
-
- await page.evaluate(() => {
- localStorage.setItem(
- 'login:metadata:LoginToken',
- 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJlbWFpbCI6InVzZXIxIiwid29ya3NwYWNlIjoic2FuaXR5LXdzIn0.hfUCqePHO-WNps2by4B-CYGKIpDpLG0WVCUUtU-SVI4'
- )
- localStorage.setItem('login:metadata:LoginEmail', 'user1')
- localStorage.setItem('login:metadata:LoginEndpoint', 'ws://localhost:3334')
- })
-
- await page.goto('http://localhost:8083/workbench%3Acomponent%3AWorkbenchApp')
- await page.waitForSelector('[id="app-contact\\:string\\:Contacts"]')
-}
+export const PlatformURI = process.env.PLATFORM_URI as string
+export const PlatformTransactor = process.env.PLATFORM_TRANSACTOR as string
+export const PlatformUser = process.env.PLATFORM_USER as string
+export const PlatformToken = process.env.PLATFORM_TOKEN as string
+export const PlatformSetting = process.env.SETTING as string
function toHex (value: number, chars: number): string {
const result = value.toString(16)
diff --git a/tests/sanity/tests/workbench.spec.ts b/tests/sanity/tests/workbench.spec.ts
index 34dd08dfae..fa5cc6a301 100644
--- a/tests/sanity/tests/workbench.spec.ts
+++ b/tests/sanity/tests/workbench.spec.ts
@@ -1,28 +1,31 @@
import { expect, test } from '@playwright/test'
-import { openWorkbench } from './utils'
+import { PlatformSetting, PlatformURI } from './utils'
+test.use({
+ storageState: PlatformSetting
+})
test.describe('workbench tests', () => {
test.beforeEach(async ({ page }) => {
// Create user and workspace
- await openWorkbench(page)
+ await page.goto(`${PlatformURI}/workbench%3Acomponent%3AWorkbenchApp`)
})
test('navigator', async ({ page }) => {
// Click [id="app-recruit\:string\:RecruitApplication"]
await page.click('[id="app-recruit\\:string\\:RecruitApplication"]')
- await expect(page).toHaveURL('http://localhost:8083/workbench%3Acomponent%3AWorkbenchApp/recruit%3Aapp%3ARecruit')
+ await expect(page).toHaveURL(`${PlatformURI}/workbench%3Acomponent%3AWorkbenchApp/recruit%3Aapp%3ARecruit`)
// Click text=Applications
await page.click('text=Applications')
await expect(page).toHaveURL(
- 'http://localhost:8083/workbench%3Acomponent%3AWorkbenchApp/recruit%3Aapp%3ARecruit/applicants'
+ `${PlatformURI}/workbench%3Acomponent%3AWorkbenchApp/recruit%3Aapp%3ARecruit/applicants`
)
// Click text=Applications Application >> span
await expect(page.locator('text=Applications Application')).toBeVisible()
- await expect(page.locator('text=APP-1')).toBeVisible()
+ await expect(page.locator('text="APP-1')).toBeDefined()
// Click text=Candidates
await page.click('text=Candidates')
await expect(page).toHaveURL(
- 'http://localhost:8083/workbench%3Acomponent%3AWorkbenchApp/recruit%3Aapp%3ARecruit/candidates'
+ `${PlatformURI}/workbench%3Acomponent%3AWorkbenchApp/recruit%3Aapp%3ARecruit/candidates`
)
await expect(page.locator('text=Candidates Candidate')).toBeVisible()
@@ -31,17 +34,17 @@ test.describe('workbench tests', () => {
// Click text=Vacancies
await page.click('text=Vacancies')
await expect(page).toHaveURL(
- 'http://localhost:8083/workbench%3Acomponent%3AWorkbenchApp/recruit%3Aapp%3ARecruit/vacancies'
+ `${PlatformURI}/workbench%3Acomponent%3AWorkbenchApp/recruit%3Aapp%3ARecruit/vacancies`
)
// Click text=Software Engineer
await page.click('text=Software Engineer')
await expect(page.locator('text=Software Engineer')).toBeVisible()
- await expect(page.locator('text=APP-1')).toBeVisible()
+ await expect(page.locator('text="APP-1"')).toBeDefined()
await page.click('[name="tooltip-task:string:Kanban"]')
// Click [id="app-chunter\:string\:ApplicationLabelChunter"]
await page.click('[id="app-chunter\\:string\\:ApplicationLabelChunter"]')
- await expect(page).toHaveURL('http://localhost:8083/workbench%3Acomponent%3AWorkbenchApp/chunter%3Aapp%3AChunter')
+ await expect(page).toHaveURL(`${PlatformURI}/workbench%3Acomponent%3AWorkbenchApp/chunter%3Aapp%3AChunter`)
await page.click('text=general')
@@ -49,7 +52,7 @@ test.describe('workbench tests', () => {
await expect(page.locator('.textInput')).toBeVisible()
await page.click('[id="app-contact\\:string\\:Contacts"]')
- await expect(page).toHaveURL('http://localhost:8083/workbench%3Acomponent%3AWorkbenchApp/contact%3Aapp%3AContacts')
+ await expect(page).toHaveURL(`${PlatformURI}/workbench%3Acomponent%3AWorkbenchApp/contact%3Aapp%3AContacts`)
// Click text=John Appleseed
await expect(page.locator('text=John Appleseed')).toBeVisible()
})