diff --git a/.gitignore b/.gitignore index 85b3beeed0..a0c75b4c49 100644 --- a/.gitignore +++ b/.gitignore @@ -16,10 +16,9 @@ e2e-output/ /demo-shell/dist-dev-temp/ /lib/export-new.json /lib/config/exportCheck.js -/lib/config/export-check/export-new.json -/lib/config/export-check/exportCheck.js /docs/sourceinfo /docs/docs.json /protractorFailuresReport coverage/ /desktop.ini +out-tsc diff --git a/.travis.yml b/.travis.yml index 42fe59b828..942a7b0efe 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,6 +1,7 @@ git: depth: 3 quiet: true + language: node_js dist: trusty sudo: required @@ -22,10 +23,24 @@ branches: # TRAVIS_PULL_REQUEST == false means is running on dev branch and is not a PR stages: - - name: Warm Up Cache & Lint & Build Dist + - name: Lint & Build Dist + if: type = pull_request + - name: Lint & Build Dist & Release + if: (type = push OR type = cron) AND tag IS blank + - name: Check bundle + if: type = push AND tag IS blank - name: Unit test + if: type != cron AND tag IS blank + - name: Update Rancher + if: type = push AND tag IS blank - name: e2e Test - - name: Deploy PR + if: type != cron AND tag IS blank + - name: Update Rancher PR + if: type = pull_request + - name: Update Children Projects + if: branch = master AND type = push OR (tag =~ .*beta.*) + - name: Release beta tag + if: type = cron addons: chrome: stable @@ -41,10 +56,25 @@ before_install: jobs: include: - - stage: Warm Up Cache & Lint & Build Dist - name: Warm Up Cache & Lint & Build Dist + # Run Only for any PR + - stage: Lint & Build Dist + name: Lint & Build Dist script: - ./scripts/travis/build/build.sh + - ./scripts/travis/build/build.sh || exit 1; + - ./scripts/lint.sh || exit 1; + + # Run Only on Development and master + - stage: Lint & Build Dist & Release + name: Lint & Build Dist & Release + script: + - ./scripts/travis/build/build.sh || exit 1; + - ./scripts/lint.sh || exit 1; + - ./scripts/travis/release/release.sh + - TAG_VERSION=$(./scripts/travis/deploy/tag-travis-branch.sh) + - echo "Running the docker with tag" $TAG_VERSION + - ./node_modules/@alfresco/adf-cli/bin/adf-cli docker-publish --loginCheck --loginUsername "$DOCKER_REPOSITORY_USER" --loginPassword "$DOCKER_REPOSITORY_PASSWORD" --loginRepo "$DOCKER_REPOSITORY_DOMAIN" --dockerRepo "$DOCKER_REPOSITORY" --dockerTags "$TAG_VERSION,$TAGS" --pathProject "$(pwd)" + + - stage: Unit test name: Unit test content script: ./scripts/travis/unit-test/content.sh @@ -54,37 +84,65 @@ jobs: - stage: Unit test name: Unit test process process-cloud insights script: ./scripts/travis/unit-test/process.sh - - stage: Deploy PR - name: Deploy PR - script: - ./scripts/travis/deploy/deploy.sh - - stage: Update children projects dependency #Update children projects dependency - name: Update Related Project - if: tag =~ .*beta.* + + + - stage: Update Children Projects script: ./scripts/travis/update/update-children.sh + + - stage: Release beta tag + script: ./scripts/travis/release/git-tag-beta.sh + + - stage: e2e Test name: core script: ./scripts/travis/e2e/core-e2e.sh - stage: e2e Test name: content - script: - ./scripts/travis/e2e/content-services-e2e.sh + script: ./scripts/travis/e2e/content-services-e2e.sh - stage: e2e Test name: search - script: - ./scripts/travis/e2e/search-e2e.sh + script: ./scripts/travis/e2e/search-e2e.sh - stage: e2e Test name: process - script: - ./scripts/travis/e2e/process-services-e2e.sh + script: ./scripts/travis/e2e/process-services-e2e.sh - stage: e2e Test name: process Cloud - script: - ./scripts/travis/e2e/process-services-cloud-e2e.sh + script: ./scripts/travis/e2e/process-services-cloud-e2e.sh -# Send coverage data to codecov -after_success: - bash <(curl -s https://codecov.io/bash) -X gcov + + - stage: Check bundle + script: + - ADF_VERSION=$(npm view @alfresco/adf-core@${TAG_NPM} version) + - ./scripts/npm-check-bundles.sh -v ${ADF_VERSION} + + + - stage: Update Rancher + script: + - TAG_VERSION=$(./scripts/travis/deploy/tag-travis-branch.sh) + - echo "Update rancher with docker tag" $TAG_VERSION --url $REPO_RANCHER --environment_name $REPO_RANCHER_ADF_NAME + - ./scripts/rancher-update.sh --access_key $RANCHER_TOKEN --secret_key $RANCHER_SECRET --url $REPO_RANCHER --environment_name $REPO_RANCHER_ADF_NAME --image docker:$DOCKER_REPOSITORY:$TAG_VERSION + + + - stage: Update Rancher PR + name: Update Rancher PR + script: ./scripts/travis/deploy/deploy.sh + + +before_deploy: + # Set up git user name and tag this commit + - git config --local user.name "Alfresco" + - export TRAVIS_TAG=$(cat package.json | grep version | head -1 | awk -F= "{ print $2 }" | sed 's/[version:,\",]//g' | tr -d '[[:space:]]') + - echo "Create tag:" $TRAVIS_TAG + - git tag $TRAVIS_TAG + +deploy: + provider: releases + api_key: $GITHUB_TOKEN + name: $TRAVIS_TAG + body: "Add the release note" + skip_cleanup: true + on: + branch: master cache: directories: diff --git a/angular.json b/angular.json index a562a5e39d..2a7a81d70e 100644 --- a/angular.json +++ b/angular.json @@ -25,7 +25,6 @@ "demo-shell/src/assets", "demo-shell/src/favicon-96x96.png", "demo-shell/src/app.config.json", - "demo-shell/src/versions.json", { "glob": "**/*", "input": "demo-shell/resources", @@ -166,7 +165,6 @@ "demo-shell/src/assets", "demo-shell/src/favicon-96x96.png", "demo-shell/src/app.config.json", - "demo-shell/src/versions.json", { "glob": "**/*", "input": "demo-shell/resources", @@ -227,7 +225,8 @@ "./demo-shell/src/tsconfig.app.json" ], "exclude": [ - "**/node_modules/**/*" + "**/node_modules/**/*", + "package.json" ] } } @@ -254,7 +253,6 @@ "assets": [ "demo-shell/src/assets", "demo-shell/src/app.config.json", - "demo-shell/src/versions.json", { "glob": "**/*", "input": "demo-shell/src/assets", @@ -265,11 +263,6 @@ "input": "demo-shell/src", "output": "/" }, - { - "glob": "versions.json", - "input": "demo-shell/src", - "output": "/" - }, { "glob": "**/*", "input": "demo-shell/resources", @@ -317,7 +310,7 @@ }, { "glob": "**/*", - "input": "lib/process-services/i18n", + "input": "lib/process-services/src/lib/i18n", "output": "/assets/adf-process-services/i18n" }, { @@ -429,7 +422,6 @@ "assets": [ "demo-shell/src/assets", "demo-shell/src/app.config.json", - "demo-shell/src/versions.json", { "glob": "**/*", "input": "demo-shell/src/assets", @@ -440,11 +432,6 @@ "input": "demo-shell/src", "output": "/" }, - { - "glob": "versions.json", - "input": "demo-shell/src", - "output": "/" - }, { "glob": "**/*", "input": "demo-shell/resources", @@ -492,7 +479,7 @@ }, { "glob": "**/*", - "input": "lib/process-services/i18n", + "input": "lib/process-services/src/lib/i18n", "output": "/assets/adf-process-services/i18n" }, { @@ -525,7 +512,8 @@ "./demo-shell/src/tsconfig.app.json" ], "exclude": [ - "**/node_modules/**/*" + "**/node_modules/**/*", + "package.json" ] } } @@ -559,7 +547,9 @@ "lint": { "builder": "@angular-devkit/build-angular:tslint", "options": { - "tsConfig": [], + "tsConfig": [ + "./e2e/tsconfig.e2e.json" + ], "exclude": [ "**/node_modules/**/*" ] @@ -672,7 +662,7 @@ "test": { "builder": "@angular-devkit/build-angular:karma", "options": { - "main": "lib/process-services/test.ts", + "main": "lib/process-services/src/test.ts", "tsConfig": "lib/process-services/tsconfig.spec.json", "karmaConfig": "lib/process-services/karma.conf.js", "codeCoverage": true, @@ -684,7 +674,7 @@ "options": { "tsConfig": [ "lib/process-services/tsconfig.lib.json", - "lib/process-services/tsconfig.lib.json" + "lib/process-services/tsconfig.spec.json" ], "exclude": [ "**/node_modules/**" diff --git a/appveyor.yml b/appveyor.yml deleted file mode 100644 index 47b1aeeea9..0000000000 --- a/appveyor.yml +++ /dev/null @@ -1,63 +0,0 @@ -# Test against this version of Node.js -branches: - only: - - master - - development - - dev-build-test - -environment: - nodejs_version: "8" - - matrix: - - COMPONENT_NAME: process-service - - COMPONENT_NAME: content-service - - COMPONENT_NAME: core - - COMPONENT_NAME: insights -# - COMPONENT_NAME: ng2-demo-shell - -# Install scripts. (runs after repo cloning) -install: - # Get the latest stable version of Node.js or io.js - - ps: Install-Product node $env:nodejs_version - # install module - - if %COMPONENT_NAME% EQU process-service ( - if %APPVEYOR_REPO_BRANCH EQU master - (cd scripts && sh npm-build-all.sh -t "process-services" || exit 1) - else - (cd scripts && sh npm-build-all.sh -t "process-services" -vjsapi alpha|| exit 1) - ) - - if %COMPONENT_NAME% EQU content-service ( - if %APPVEYOR_REPO_BRANCH EQU master - (cd scripts && sh npm-build-all.sh -t "content-services" || exit 1) - else - (cd scripts && sh npm-build-all.sh -t "content-services" -vjsapi alpha|| exit 1) - ) - - if %COMPONENT_NAME% EQU insights ( - if %APPVEYOR_REPO_BRANCH EQU master - (cd scripts && sh npm-build-all.sh -t "insights" || exit 1) - else - (cd scripts && sh npm-build-all.sh -t "insights" -vjsapi alpha|| exit 1) - ) - - if %COMPONENT_NAME% EQU core ( - if %APPVEYOR_REPO_BRANCH EQU master - (cd scripts && sh npm-build-all.sh -t "core" || exit 1) - else - (cd scripts && sh npm-build-all.sh -t "core" -vjsapi alpha|| exit 1) - ) - - if %COMPONENT_NAME% EQU process-service-cloud ( - if %APPVEYOR_REPO_BRANCH EQU master - (cd scripts && sh npm-build-all.sh -t "process-services-cloud" || exit 1) - else - (cd scripts && sh npm-build-all.sh -t "process-services-cloud" -vjsapi alpha|| exit 1) - ) -# - if %COMPONENT_NAME% EQU ng2-demo-shell ( -# if %APPVEYOR_REPO_BRANCH EQU master -# (cd scripts && sh start.sh -t -ss || exit 1) -# else -# (cd scripts && sh start.sh -dev -t -ss -vjsapi alpha || exit 1) -# ) - -# Don't actually build. -build: off -matrix: - fast_finish: true diff --git a/cspell.json b/cspell.json index 3442ccab09..0d062bca4a 100644 --- a/cspell.json +++ b/cspell.json @@ -128,7 +128,8 @@ "ECMBPM", "processwithvariables", "dropdownrestprocess", - "devops" + "devops", + "mouseenter" ], "dictionaries": [ "html", diff --git a/demo-shell/.gitignore b/demo-shell/.gitignore index e17228dbb3..c443b0d0e1 100644 --- a/demo-shell/.gitignore +++ b/demo-shell/.gitignore @@ -52,7 +52,6 @@ app/**/*.d.ts !app/js/Polyline.js .idea -**/versions.json dist/ diff --git a/demo-shell/karma.conf.js b/demo-shell/karma.conf.js index 9bc97a7f0a..ba7b1277b0 100644 --- a/demo-shell/karma.conf.js +++ b/demo-shell/karma.conf.js @@ -1,5 +1,6 @@ // Karma configuration file, see link for more information // https://karma-runner.github.io/0.13/config/configuration-file.html +process.env.CHROME_BIN = require('puppeteer').executablePath(); module.exports = function (config) { config.set({ diff --git a/demo-shell/package.json b/demo-shell/package.json index cc997f7b72..1f514737d7 100644 --- a/demo-shell/package.json +++ b/demo-shell/package.json @@ -1,7 +1,7 @@ { "name": "Alfresco-ADF-Angular-Demo", "description": "Demo shell for Alfresco Angular components", - "version": "3.4.0", + "version": "3.5.0", "author": "Alfresco Software, Ltd.", "repository": { "type": "git", diff --git a/demo-shell/resources/i18n/ar.json b/demo-shell/resources/i18n/ar.json old mode 100644 new mode 100755 index 9c8e034f99..9905dfd46d --- a/demo-shell/resources/i18n/ar.json +++ b/demo-shell/resources/i18n/ar.json @@ -304,23 +304,26 @@ "ROLE_FILTER_MODE": "التصفية حسب الدور", "PRESELECT_VALIDATION": "التحديد المسبق للتحقق من الصحة" }, - "ABOUT": { - "TITLE": "مكونات إضافية", - "TABLE_HEADERS": { - "ID": "المعرف", - "NAME": "الاسم", - "VERSION": "الإصدار", - "VENDOR": "المورد", - "LICENSE": "الترخيص", - "RUNTIME": "وقت التشغيل", - "DESCRIPTION": "الوصف" - } - }, "SETTINGS_CLOUD": { "MULTISELECTION": "تحديد متعدد", "TESTING_MODE": "وضع الاختبار", "SELECTION_MODE": "وضع التحديد", + "SELECTED_ROWS": "الصفوف المحدّدة", "TASK_DETAILS_REDIRECTION": "عرض تفاصيل المهمة عند النقر فوق المهمة", - "PROCESS_DETAILS_REDIRECTION": "عرض تفاصيل العملية عند النقر على العملية" + "PROCESS_DETAILS_REDIRECTION": "عرض تفاصيل العملية عند النقر على العملية", + "ACTION": { + "ACTION_TITLE": "إضافة إجراء", + "ACTION_MENU": "قائمة الإجراءات", + "CONTEX_MENU": "قائمة السياق", + "ACTION_VISIBLE": "مرئي", + "ACTION_DISABLE": "معطّل", + "ADD_BUTTON": "إضافة", + "KEY": "المفتاح", + "TITLE": "العنوان", + "ICON": "أيقونة", + "TASK_ID": "معرف المهمة", + "PROCESS_ID": "معرّف مثيل المعالجة", + "ACTION_TYPE": "نوع الإجراء" + } } } \ No newline at end of file diff --git a/demo-shell/resources/i18n/cs.json b/demo-shell/resources/i18n/cs.json old mode 100644 new mode 100755 index c195d0a990..b413390b4c --- a/demo-shell/resources/i18n/cs.json +++ b/demo-shell/resources/i18n/cs.json @@ -304,23 +304,26 @@ "ROLE_FILTER_MODE": "Filtrovat podle role", "PRESELECT_VALIDATION": "Ověření předvolené hodnoty" }, - "ABOUT": { - "TITLE": "Doplňky", - "TABLE_HEADERS": { - "ID": "ID", - "NAME": "Název", - "VERSION": "Verze", - "VENDOR": "Dodavatel", - "LICENSE": "Licence", - "RUNTIME": "Délka", - "DESCRIPTION": "Popis" - } - }, "SETTINGS_CLOUD": { "MULTISELECTION": "Hromadný výběr", "TESTING_MODE": "Testovací režim", "SELECTION_MODE": "Režim výběru", + "SELECTED_ROWS": "Vybrané řádky", "TASK_DETAILS_REDIRECTION": "Zobrazit podrobnosti o úkolu při kliknutí na úkol", - "PROCESS_DETAILS_REDIRECTION": "Zobrazit podrobnosti o průběhu při kliknutí na proces" + "PROCESS_DETAILS_REDIRECTION": "Zobrazit podrobnosti o průběhu při kliknutí na proces", + "ACTION": { + "ACTION_TITLE": "Přidat akci", + "ACTION_MENU": "Nabídka akcí", + "CONTEX_MENU": "Místní nabídka", + "ACTION_VISIBLE": "Viditelné", + "ACTION_DISABLE": "Zakázat", + "ADD_BUTTON": "Přidat", + "KEY": "Klíč", + "TITLE": "Označení", + "ICON": "Ikona", + "TASK_ID": "ID úkolu", + "PROCESS_ID": "ID instance procesu", + "ACTION_TYPE": "Typ akce" + } } } \ No newline at end of file diff --git a/demo-shell/resources/i18n/da.json b/demo-shell/resources/i18n/da.json old mode 100644 new mode 100755 index 57e250e2f1..645ae153ae --- a/demo-shell/resources/i18n/da.json +++ b/demo-shell/resources/i18n/da.json @@ -304,23 +304,26 @@ "ROLE_FILTER_MODE": "Filtrer efter rolle", "PRESELECT_VALIDATION": "Forudvælg validering" }, - "ABOUT": { - "TITLE": "Plug-ins", - "TABLE_HEADERS": { - "ID": "Id", - "NAME": "Navn", - "VERSION": "Version", - "VENDOR": "Leverandør", - "LICENSE": "Licens", - "RUNTIME": "Kørselstidspunkt", - "DESCRIPTION": "Beskrivelse" - } - }, "SETTINGS_CLOUD": { "MULTISELECTION": "Multivalg", "TESTING_MODE": "Testtilstand", "SELECTION_MODE": "Valgtilstand", + "SELECTED_ROWS": "Valgte rækker", "TASK_DETAILS_REDIRECTION": "Vis opgavedetaljer på opgave ved at klikke", - "PROCESS_DETAILS_REDIRECTION": "Vis behandlingsdetaljer for processen ved at klikke" + "PROCESS_DETAILS_REDIRECTION": "Vis behandlingsdetaljer for processen ved at klikke", + "ACTION": { + "ACTION_TITLE": "Tilføj handling", + "ACTION_MENU": "Menuen Handling", + "CONTEX_MENU": "Genvejsmenu", + "ACTION_VISIBLE": "Synlig", + "ACTION_DISABLE": "Deaktiver", + "ADD_BUTTON": "Tilføj", + "KEY": "Nøgle", + "TITLE": "Titel", + "ICON": "Ikon", + "TASK_ID": "Opgave-id", + "PROCESS_ID": "Procesforekomst-id", + "ACTION_TYPE": "Handlingstype" + } } } \ No newline at end of file diff --git a/demo-shell/resources/i18n/de.json b/demo-shell/resources/i18n/de.json old mode 100644 new mode 100755 index 5e18aff1ce..41f9514929 --- a/demo-shell/resources/i18n/de.json +++ b/demo-shell/resources/i18n/de.json @@ -304,23 +304,26 @@ "ROLE_FILTER_MODE": "Nach Rolle filtern", "PRESELECT_VALIDATION": "Vorauswahl-Prüfung" }, - "ABOUT": { - "TITLE": "Plugins", - "TABLE_HEADERS": { - "ID": "ID", - "NAME": "Name", - "VERSION": "Version", - "VENDOR": "Hersteller", - "LICENSE": "Lizenz", - "RUNTIME": "Laufzeit", - "DESCRIPTION": "Beschreibung" - } - }, "SETTINGS_CLOUD": { "MULTISELECTION": "Mehrfachauswahl", "TESTING_MODE": "Testmodus", "SELECTION_MODE": "Auswahlmodus", + "SELECTED_ROWS": "Ausgewählte Zeilen", "TASK_DETAILS_REDIRECTION": "Bei Klicken auf Aufgabe Aufgabendetails einblenden", - "PROCESS_DETAILS_REDIRECTION": "Bei Klicken auf Prozess Prozessdetails anzeigen" + "PROCESS_DETAILS_REDIRECTION": "Bei Klicken auf Prozess Prozessdetails anzeigen", + "ACTION": { + "ACTION_TITLE": "Aktion hinzufügen", + "ACTION_MENU": "Aktionsmenü", + "CONTEX_MENU": "Kontextmenü", + "ACTION_VISIBLE": "Sichtbar", + "ACTION_DISABLE": "Deaktivieren", + "ADD_BUTTON": "Hinzufügen", + "KEY": "Schlüssel", + "TITLE": "Titel", + "ICON": "Symbol", + "TASK_ID": "Aufgaben-ID", + "PROCESS_ID": "Prozessinstanz-ID", + "ACTION_TYPE": "Aktionstyp" + } } } \ No newline at end of file diff --git a/demo-shell/resources/i18n/en.json b/demo-shell/resources/i18n/en.json index 9fb603b5f9..440b0cd64e 100644 --- a/demo-shell/resources/i18n/en.json +++ b/demo-shell/resources/i18n/en.json @@ -304,23 +304,26 @@ "ROLE_FILTER_MODE": "Filter by role", "PRESELECT_VALIDATION": "Preselect validation" }, - "ABOUT": { - "TITLE": "Plugins", - "TABLE_HEADERS": { - "ID": "ID", - "NAME": "Name", - "VERSION": "Version", - "VENDOR": "Vendor", - "LICENSE": "License", - "RUNTIME": "Runtime", - "DESCRIPTION": "Description" - } - }, "SETTINGS_CLOUD": { "MULTISELECTION": "Multiselection", "TESTING_MODE": "Testing Mode", "SELECTION_MODE": "Selection Mode", + "SELECTED_ROWS": "Selected Rows", "TASK_DETAILS_REDIRECTION": "Display task details on task click", - "PROCESS_DETAILS_REDIRECTION": "Display process details on process click" + "PROCESS_DETAILS_REDIRECTION": "Display process details on process click", + "ACTION": { + "ACTION_TITLE": "Add Action", + "ACTION_MENU": "Action Menu", + "CONTEX_MENU": "Context Menu", + "ACTION_VISIBLE": "Visible", + "ACTION_DISABLE": "Disable", + "ADD_BUTTON": "Add", + "KEY": "Key", + "TITLE": "Title", + "ICON": "Icon", + "TASK_ID": "Task ID", + "PROCESS_ID": "Process Instance ID", + "ACTION_TYPE": "Action Type" + } } } diff --git a/demo-shell/resources/i18n/es.json b/demo-shell/resources/i18n/es.json old mode 100644 new mode 100755 index 7b851b8cf3..ca8770fe49 --- a/demo-shell/resources/i18n/es.json +++ b/demo-shell/resources/i18n/es.json @@ -304,23 +304,26 @@ "ROLE_FILTER_MODE": "Filtrar por función", "PRESELECT_VALIDATION": "Preseleccionar validación" }, - "ABOUT": { - "TITLE": "Complementos", - "TABLE_HEADERS": { - "ID": "ID", - "NAME": "Nombre", - "VERSION": "Versión", - "VENDOR": "Proveedor", - "LICENSE": "Licencia", - "RUNTIME": "Tiempo de ejecución", - "DESCRIPTION": "Descripción" - } - }, "SETTINGS_CLOUD": { "MULTISELECTION": "Selección múltiple", "TESTING_MODE": "Modo de prueba", "SELECTION_MODE": "Modo de selección", + "SELECTED_ROWS": "Filas seleccionadas", "TASK_DETAILS_REDIRECTION": "Mostrar detalles de la tarea haciendo clic en la tarea", - "PROCESS_DETAILS_REDIRECTION": "Mostrar detalles del proceso al hacer clic en el proceso" + "PROCESS_DETAILS_REDIRECTION": "Mostrar detalles del proceso al hacer clic en el proceso", + "ACTION": { + "ACTION_TITLE": "Añadir acción", + "ACTION_MENU": "Menú de acción", + "CONTEX_MENU": "Menú de contexto", + "ACTION_VISIBLE": "Visible", + "ACTION_DISABLE": "Desactivar", + "ADD_BUTTON": "Añadir", + "KEY": "Clave", + "TITLE": "Título", + "ICON": "Icono", + "TASK_ID": "ID de tarea", + "PROCESS_ID": "ID de instancia del proceso", + "ACTION_TYPE": "Tipo de acción" + } } } \ No newline at end of file diff --git a/demo-shell/resources/i18n/fi.json b/demo-shell/resources/i18n/fi.json old mode 100644 new mode 100755 index 1458101006..1be5657f38 --- a/demo-shell/resources/i18n/fi.json +++ b/demo-shell/resources/i18n/fi.json @@ -304,23 +304,26 @@ "ROLE_FILTER_MODE": "Suodata roolin perusteella", "PRESELECT_VALIDATION": "Vahvistus esivalittu" }, - "ABOUT": { - "TITLE": "Lisäosat", - "TABLE_HEADERS": { - "ID": "Tunnus", - "NAME": "Nimi", - "VERSION": "Versio", - "VENDOR": "Toimittaja", - "LICENSE": "Käyttöoikeus", - "RUNTIME": "Suorituspalvelu", - "DESCRIPTION": "Kuvaus" - } - }, "SETTINGS_CLOUD": { "MULTISELECTION": "Monivalinta", "TESTING_MODE": "Testaustila", "SELECTION_MODE": "Valintatila", + "SELECTED_ROWS": "Valitut rivit", "TASK_DETAILS_REDIRECTION": "Näytä tehtävätiedot tehtävää napsauttamalla", - "PROCESS_DETAILS_REDIRECTION": "Näyttää prosessin tiedot prosessia napsautettaessa" + "PROCESS_DETAILS_REDIRECTION": "Näyttää prosessin tiedot prosessia napsautettaessa", + "ACTION": { + "ACTION_TITLE": "Lisää toiminto", + "ACTION_MENU": "Toiminnon valikko", + "CONTEX_MENU": "Pikavalikko", + "ACTION_VISIBLE": "Näkyvissä", + "ACTION_DISABLE": "Poista käytöstä", + "ADD_BUTTON": "Lisää", + "KEY": "Avain", + "TITLE": "Otsikko", + "ICON": "Kuvake", + "TASK_ID": "Tehtävätunnus", + "PROCESS_ID": "Prosessiesiintymätunnus", + "ACTION_TYPE": "Toiminnon tyyppi" + } } } \ No newline at end of file diff --git a/demo-shell/resources/i18n/fr.json b/demo-shell/resources/i18n/fr.json old mode 100644 new mode 100755 index 1f8111e590..51aae7284c --- a/demo-shell/resources/i18n/fr.json +++ b/demo-shell/resources/i18n/fr.json @@ -304,23 +304,26 @@ "ROLE_FILTER_MODE": "Filtrer par rôle", "PRESELECT_VALIDATION": "Validation présélectionnée" }, - "ABOUT": { - "TITLE": "Plugins", - "TABLE_HEADERS": { - "ID": "ID", - "NAME": "Nom", - "VERSION": "Version", - "VENDOR": "Fournisseur", - "LICENSE": "Licence", - "RUNTIME": "Java Runtime", - "DESCRIPTION": "Description" - } - }, "SETTINGS_CLOUD": { "MULTISELECTION": "Multisélection", "TESTING_MODE": "Mode de test", "SELECTION_MODE": "Mode de sélection", + "SELECTED_ROWS": "Lignes sélectionnées", "TASK_DETAILS_REDIRECTION": "Afficher les détails de la tâche en cliquant dessus", - "PROCESS_DETAILS_REDIRECTION": "Afficher les détails du processus en cliquant dessus" + "PROCESS_DETAILS_REDIRECTION": "Afficher les détails du processus en cliquant dessus", + "ACTION": { + "ACTION_TITLE": "Ajouter une action", + "ACTION_MENU": "Menu Action", + "CONTEX_MENU": "Menu contextuel", + "ACTION_VISIBLE": "Visible", + "ACTION_DISABLE": "Désactiver", + "ADD_BUTTON": "Ajouter", + "KEY": "Clé", + "TITLE": "Titre", + "ICON": "Icône", + "TASK_ID": "ID de la tâche", + "PROCESS_ID": "ID de l'instance de processus", + "ACTION_TYPE": "Type d'action" + } } } \ No newline at end of file diff --git a/demo-shell/resources/i18n/it.json b/demo-shell/resources/i18n/it.json old mode 100644 new mode 100755 index c27eb0f74d..595843f1d5 --- a/demo-shell/resources/i18n/it.json +++ b/demo-shell/resources/i18n/it.json @@ -304,23 +304,26 @@ "ROLE_FILTER_MODE": "Filtra per ruolo", "PRESELECT_VALIDATION": "Convalida preselezione" }, - "ABOUT": { - "TITLE": "Plug-in", - "TABLE_HEADERS": { - "ID": "ID", - "NAME": "Nome", - "VERSION": "Versione", - "VENDOR": "Fornitore", - "LICENSE": "Licenza", - "RUNTIME": "Runtime", - "DESCRIPTION": "Descrizione" - } - }, "SETTINGS_CLOUD": { "MULTISELECTION": "Selezione multipla", "TESTING_MODE": "Modalità di test", "SELECTION_MODE": "Modalità di selezione", + "SELECTED_ROWS": "Righe selezionate", "TASK_DETAILS_REDIRECTION": "Mostra dettagli compito dopo clic su compito", - "PROCESS_DETAILS_REDIRECTION": "Mostra i dettagli dopo il clic sul processo" + "PROCESS_DETAILS_REDIRECTION": "Mostra i dettagli dopo il clic sul processo", + "ACTION": { + "ACTION_TITLE": "Aggiungi azione", + "ACTION_MENU": "Menu azione", + "CONTEX_MENU": "Menu contestuale", + "ACTION_VISIBLE": "Visibile", + "ACTION_DISABLE": "Disattiva", + "ADD_BUTTON": "Aggiungi", + "KEY": "Chiave", + "TITLE": "Titolo", + "ICON": "Icona", + "TASK_ID": "ID compito", + "PROCESS_ID": "ID istanza di processo", + "ACTION_TYPE": "Tipo di azione" + } } } \ No newline at end of file diff --git a/demo-shell/resources/i18n/ja.json b/demo-shell/resources/i18n/ja.json old mode 100644 new mode 100755 index c5c0497005..7d412b526b --- a/demo-shell/resources/i18n/ja.json +++ b/demo-shell/resources/i18n/ja.json @@ -304,23 +304,26 @@ "ROLE_FILTER_MODE": "役割でフィルタ", "PRESELECT_VALIDATION": "事前選択の検証" }, - "ABOUT": { - "TITLE": "プラグイン", - "TABLE_HEADERS": { - "ID": "ID", - "NAME": "名前", - "VERSION": "バージョン", - "VENDOR": "ベンダー", - "LICENSE": "ライセンス", - "RUNTIME": "ランタイム", - "DESCRIPTION": "説明" - } - }, "SETTINGS_CLOUD": { "MULTISELECTION": "複数選択", "TESTING_MODE": "テストモード", "SELECTION_MODE": "選択モード", + "SELECTED_ROWS": "選択した行", "TASK_DETAILS_REDIRECTION": "タスクのクリック時にタスクの詳細を表示", - "PROCESS_DETAILS_REDIRECTION": "プロセスのクリックでプロセスの詳細を表示" + "PROCESS_DETAILS_REDIRECTION": "プロセスのクリックでプロセスの詳細を表示", + "ACTION": { + "ACTION_TITLE": "処理の追加", + "ACTION_MENU": "処理メニュー", + "CONTEX_MENU": "コンテキストメニュー", + "ACTION_VISIBLE": "表示", + "ACTION_DISABLE": "無効", + "ADD_BUTTON": "追加", + "KEY": "キー", + "TITLE": "タイトル", + "ICON": "アイコン", + "TASK_ID": "タスク ID", + "PROCESS_ID": "プロセスインスタンス ID", + "ACTION_TYPE": "処理のタイプ" + } } } \ No newline at end of file diff --git a/demo-shell/resources/i18n/nb.json b/demo-shell/resources/i18n/nb.json old mode 100644 new mode 100755 index 95dc7cfb95..7908f24275 --- a/demo-shell/resources/i18n/nb.json +++ b/demo-shell/resources/i18n/nb.json @@ -304,23 +304,26 @@ "ROLE_FILTER_MODE": "Filtrer etter rolle", "PRESELECT_VALIDATION": "Forhåndsvelg validering" }, - "ABOUT": { - "TITLE": "Plugin-moduler", - "TABLE_HEADERS": { - "ID": "ID", - "NAME": "Navn", - "VERSION": "Versjon", - "VENDOR": "Leverandør", - "LICENSE": "Lisens", - "RUNTIME": "Kjøretid", - "DESCRIPTION": "Beskrivelse" - } - }, "SETTINGS_CLOUD": { "MULTISELECTION": "Flervalg", "TESTING_MODE": "Testmodus", "SELECTION_MODE": "Valgmodus", + "SELECTED_ROWS": "Valgte rader", "TASK_DETAILS_REDIRECTION": "Vis oppgavedetaljer ved oppgaveklikk", - "PROCESS_DETAILS_REDIRECTION": "Vis prosessdetaljer ved prosessklikk" + "PROCESS_DETAILS_REDIRECTION": "Vis prosessdetaljer ved prosessklikk", + "ACTION": { + "ACTION_TITLE": "Legg til handling", + "ACTION_MENU": "Handlingsmeny", + "CONTEX_MENU": "Kontekstmeny", + "ACTION_VISIBLE": "Synlig", + "ACTION_DISABLE": "Deaktiver", + "ADD_BUTTON": "Legg til", + "KEY": "Nøkkel", + "TITLE": "Tittel", + "ICON": "Ikon", + "TASK_ID": "Oppgave-ID", + "PROCESS_ID": "Prosesstilfelle-ID", + "ACTION_TYPE": "Handlingstype" + } } } \ No newline at end of file diff --git a/demo-shell/resources/i18n/nl.json b/demo-shell/resources/i18n/nl.json old mode 100644 new mode 100755 index 584ffdf53b..78e51e10bf --- a/demo-shell/resources/i18n/nl.json +++ b/demo-shell/resources/i18n/nl.json @@ -304,23 +304,26 @@ "ROLE_FILTER_MODE": "Filteren op rol", "PRESELECT_VALIDATION": "Validatie voorselecteren" }, - "ABOUT": { - "TITLE": "Plug-ins", - "TABLE_HEADERS": { - "ID": "Id", - "NAME": "Naam", - "VERSION": "Versie", - "VENDOR": "Leverancier", - "LICENSE": "Licentie", - "RUNTIME": "Runtime", - "DESCRIPTION": "Beschrijving" - } - }, "SETTINGS_CLOUD": { "MULTISELECTION": "Multiselectie", "TESTING_MODE": "Testmodus", "SELECTION_MODE": "Selectiemodus", + "SELECTED_ROWS": "Geselecteerde rijen", "TASK_DETAILS_REDIRECTION": "Taakdetails weergeven bij klikken op taak", - "PROCESS_DETAILS_REDIRECTION": "Procesdetails weergeven bij klikken op proces" + "PROCESS_DETAILS_REDIRECTION": "Procesdetails weergeven bij klikken op proces", + "ACTION": { + "ACTION_TITLE": "Actie toevoegen", + "ACTION_MENU": "Actiemenu", + "CONTEX_MENU": "Contextmenu", + "ACTION_VISIBLE": "Zichtbaar", + "ACTION_DISABLE": "Uitschakelen", + "ADD_BUTTON": "Toevoegen", + "KEY": "Key", + "TITLE": "Titel", + "ICON": "Pictogram", + "TASK_ID": "Taak-ID", + "PROCESS_ID": "Procesinstantie-ID", + "ACTION_TYPE": "Actietype" + } } } \ No newline at end of file diff --git a/demo-shell/resources/i18n/pl.json b/demo-shell/resources/i18n/pl.json old mode 100644 new mode 100755 index 599abffea1..b048530981 --- a/demo-shell/resources/i18n/pl.json +++ b/demo-shell/resources/i18n/pl.json @@ -304,23 +304,26 @@ "ROLE_FILTER_MODE": "Filtruj według roli", "PRESELECT_VALIDATION": "Sprawdzanie poprawności wstępnego wyboru" }, - "ABOUT": { - "TITLE": "Dodatki typu plugin", - "TABLE_HEADERS": { - "ID": "Identyfikator", - "NAME": "Nazwa", - "VERSION": "Wersja", - "VENDOR": "Sprzedawca", - "LICENSE": "Licencja", - "RUNTIME": "Środowisko uruchomieniowe", - "DESCRIPTION": "Opis" - } - }, "SETTINGS_CLOUD": { "MULTISELECTION": "Wybór wielokrotny", "TESTING_MODE": "Tryb testowania", "SELECTION_MODE": "Tryb wyboru", + "SELECTED_ROWS": "Wybrane wiersze", "TASK_DETAILS_REDIRECTION": "Wyświetlaj szczegóły zadania po kliknięciu zadania", - "PROCESS_DETAILS_REDIRECTION": "Wyświetlaj szczegóły procesu po kliknięciu procesu" + "PROCESS_DETAILS_REDIRECTION": "Wyświetlaj szczegóły procesu po kliknięciu procesu", + "ACTION": { + "ACTION_TITLE": "Dodaj czynność", + "ACTION_MENU": "Menu czynności", + "CONTEX_MENU": "Menu kontekstowe", + "ACTION_VISIBLE": "Widoczne", + "ACTION_DISABLE": "Wyłącz", + "ADD_BUTTON": "Dodaj", + "KEY": "Klucz", + "TITLE": "Tytuł", + "ICON": "Ikona", + "TASK_ID": "Identyfikator zadania", + "PROCESS_ID": "Identyfikator wystąpienia procesu", + "ACTION_TYPE": "Typ czynności" + } } } \ No newline at end of file diff --git a/demo-shell/resources/i18n/pt-BR.json b/demo-shell/resources/i18n/pt-BR.json old mode 100644 new mode 100755 index 1d190fa616..09bd90dabd --- a/demo-shell/resources/i18n/pt-BR.json +++ b/demo-shell/resources/i18n/pt-BR.json @@ -97,7 +97,7 @@ "PEOPLE_CLOUD": "Componente da Nuvem de Pessoas", "GROUPS_CLOUD": "Componente da Nuvem de Grupos", "CONFIRM-DIALOG": "Caixa de diálogo de confirmação", - "COMMUNITY": "Community" + "COMMUNITY": "Comunidade" }, "TRASHCAN": { "ACTIONS": { @@ -304,23 +304,26 @@ "ROLE_FILTER_MODE": "Filtrar por função", "PRESELECT_VALIDATION": "Validação de pré-seleção" }, - "ABOUT": { - "TITLE": "Plugins", - "TABLE_HEADERS": { - "ID": "ID", - "NAME": "Nome", - "VERSION": "Versão", - "VENDOR": "Fornecedor", - "LICENSE": "Licença", - "RUNTIME": "Tempo de execução", - "DESCRIPTION": "Descrição" - } - }, "SETTINGS_CLOUD": { "MULTISELECTION": "Seleção Múltipla", "TESTING_MODE": "Modo de Teste", "SELECTION_MODE": "Modo de Seleção", + "SELECTED_ROWS": "Linhas selecionadas", "TASK_DETAILS_REDIRECTION": "Exibir detalhes da tarefa ao clicar na tarefa", - "PROCESS_DETAILS_REDIRECTION": "Exibir detalhes do processo ao clicar no processo" + "PROCESS_DETAILS_REDIRECTION": "Exibir detalhes do processo ao clicar no processo", + "ACTION": { + "ACTION_TITLE": "Adicionar ação", + "ACTION_MENU": "Menu de ação", + "CONTEX_MENU": "Menu de contexto", + "ACTION_VISIBLE": "Visível", + "ACTION_DISABLE": "Desativar", + "ADD_BUTTON": "Adicionar", + "KEY": "Chave", + "TITLE": "Título", + "ICON": "Ícone", + "TASK_ID": "ID de tarefa", + "PROCESS_ID": "ID de instância de processo", + "ACTION_TYPE": "Tipo de ação" + } } } \ No newline at end of file diff --git a/demo-shell/resources/i18n/ru.json b/demo-shell/resources/i18n/ru.json old mode 100644 new mode 100755 index ed1b312c12..264d21fbe3 --- a/demo-shell/resources/i18n/ru.json +++ b/demo-shell/resources/i18n/ru.json @@ -304,23 +304,26 @@ "ROLE_FILTER_MODE": "Фильтровать по роли", "PRESELECT_VALIDATION": "Проверка предварительного выбора" }, - "ABOUT": { - "TITLE": "Подключаемые модули", - "TABLE_HEADERS": { - "ID": "Идентификатор", - "NAME": "Имя", - "VERSION": "Версия", - "VENDOR": "Поставщик", - "LICENSE": "Лицензия", - "RUNTIME": "Среда выполнения", - "DESCRIPTION": "Описание" - } - }, "SETTINGS_CLOUD": { "MULTISELECTION": "Выбор нескольких", "TESTING_MODE": "Режим тестирования", "SELECTION_MODE": "Режим выбора", + "SELECTED_ROWS": "Выбранные ряды", "TASK_DETAILS_REDIRECTION": "Отображать подробные сведения о задаче при нажатии на задачу", - "PROCESS_DETAILS_REDIRECTION": "Показывать сведения о процессе при нажатии на процессе" + "PROCESS_DETAILS_REDIRECTION": "Показывать сведения о процессе при нажатии на процессе", + "ACTION": { + "ACTION_TITLE": "Добавить действие", + "ACTION_MENU": "Меню действий", + "CONTEX_MENU": "Контекстное меню", + "ACTION_VISIBLE": "Видимый", + "ACTION_DISABLE": "Отключить", + "ADD_BUTTON": "Добавить", + "KEY": "Ключ", + "TITLE": "Заголовок", + "ICON": "Значок", + "TASK_ID": "ИД задачи", + "PROCESS_ID": "Идентификатор экземпляра процесса", + "ACTION_TYPE": "Тип действия" + } } } \ No newline at end of file diff --git a/demo-shell/resources/i18n/sv.json b/demo-shell/resources/i18n/sv.json old mode 100644 new mode 100755 index 800f5415b5..0bc814ae3d --- a/demo-shell/resources/i18n/sv.json +++ b/demo-shell/resources/i18n/sv.json @@ -304,23 +304,26 @@ "ROLE_FILTER_MODE": "Filtrera på roll", "PRESELECT_VALIDATION": "Förval validering" }, - "ABOUT": { - "TITLE": "Plugins", - "TABLE_HEADERS": { - "ID": "ID", - "NAME": "Namn", - "VERSION": "Version", - "VENDOR": "Säljare", - "LICENSE": "Licens", - "RUNTIME": "Runtime", - "DESCRIPTION": "Beskrivning" - } - }, "SETTINGS_CLOUD": { "MULTISELECTION": "Flerval", "TESTING_MODE": "Testläge", "SELECTION_MODE": "Urvalsläge", + "SELECTED_ROWS": "Valda rader", "TASK_DETAILS_REDIRECTION": "Visa uppgiftsdetaljer vid klick på uppgift", - "PROCESS_DETAILS_REDIRECTION": "Visa processinformation vid processklick" + "PROCESS_DETAILS_REDIRECTION": "Visa processinformation vid processklick", + "ACTION": { + "ACTION_TITLE": "Lägg till åtgärd", + "ACTION_MENU": "Åtgärdsmeny", + "CONTEX_MENU": "Innehållsmeny", + "ACTION_VISIBLE": "Synlig", + "ACTION_DISABLE": "Avaktivera", + "ADD_BUTTON": "Lägg till", + "KEY": "Nyckel", + "TITLE": "Titel", + "ICON": "Ikon", + "TASK_ID": "Uppgifts-ID", + "PROCESS_ID": "Processinstans-ID", + "ACTION_TYPE": "Åtgärdstyp" + } } } \ No newline at end of file diff --git a/demo-shell/resources/i18n/zh-CN.json b/demo-shell/resources/i18n/zh-CN.json old mode 100644 new mode 100755 index 907ace4546..2b4ab709a2 --- a/demo-shell/resources/i18n/zh-CN.json +++ b/demo-shell/resources/i18n/zh-CN.json @@ -304,23 +304,26 @@ "ROLE_FILTER_MODE": "按角色筛选", "PRESELECT_VALIDATION": "预先选择验证" }, - "ABOUT": { - "TITLE": "插件", - "TABLE_HEADERS": { - "ID": "ID", - "NAME": "名称", - "VERSION": "版本", - "VENDOR": "供应商", - "LICENSE": "许可证", - "RUNTIME": "运行时", - "DESCRIPTION": "说明" - } - }, "SETTINGS_CLOUD": { "MULTISELECTION": "多重选择", "TESTING_MODE": "测试模式", "SELECTION_MODE": "选择模式", + "SELECTED_ROWS": "选定行", "TASK_DETAILS_REDIRECTION": "单击任务时显示任务详情", - "PROCESS_DETAILS_REDIRECTION": "单击流程时显示流程详细信息" + "PROCESS_DETAILS_REDIRECTION": "单击流程时显示流程详细信息", + "ACTION": { + "ACTION_TITLE": "添加操作", + "ACTION_MENU": "操作菜单", + "CONTEX_MENU": "上下文菜单", + "ACTION_VISIBLE": "可见", + "ACTION_DISABLE": "禁用", + "ADD_BUTTON": "添加", + "KEY": "Key", + "TITLE": "标题", + "ICON": "图标", + "TASK_ID": "任务 ID", + "PROCESS_ID": "流程实例 ID", + "ACTION_TYPE": "操作类型" + } } } \ No newline at end of file diff --git a/demo-shell/src/app.config.json b/demo-shell/src/app.config.json index 3f86aad399..9d565103eb 100644 --- a/demo-shell/src/app.config.json +++ b/demo-shell/src/app.config.json @@ -21,7 +21,8 @@ "silentLogin": true, "redirectSilentIframeUri": "{protocol}//{hostname}{:port}/assets/silent-refresh.html", "redirectUri": "/", - "redirectUriLogout": "/logout" + "redirectUriLogout": "/logout", + "publicUrls": ["**/preview/s/*", "**/settings"] }, "application": { "storagePrefix": "ADF", diff --git a/demo-shell/src/app/app.module.ts b/demo-shell/src/app/app.module.ts index c6658996eb..c2a36d66e4 100644 --- a/demo-shell/src/app/app.module.ts +++ b/demo-shell/src/app/app.module.ts @@ -83,6 +83,8 @@ import { ConfirmDialogExampleComponent } from './components/confirm-dialog/confi import { FormCloudDemoComponent } from './components/app-layout/cloud/form-demo/cloud-form-demo.component'; import { environment } from '../environments/environment'; import { AppCloudSharedModule } from './components/cloud/shared/cloud.shared.module'; +import { DemoErrorComponent } from './components/error/demo-error.component'; + import { UserPreferenceCloudService, PROCESS_FILTERS_SERVICE_TOKEN, @@ -171,6 +173,7 @@ registerLocaleData(localeSv); SharedLinkViewComponent, FormLoadingComponent, DemoPermissionComponent, + DemoErrorComponent, FormLoadingComponent, ReportIssueComponent, TreeViewSampleComponent, diff --git a/demo-shell/src/app/app.routes.ts b/demo-shell/src/app/app.routes.ts index a79b824203..14a23d5577 100644 --- a/demo-shell/src/app/app.routes.ts +++ b/demo-shell/src/app/app.routes.ts @@ -57,6 +57,7 @@ import { ProcessDetailsCloudDemoComponent } from './components/cloud/process-det import { TemplateDemoComponent } from './components/template-list/template-demo.component'; import { FormCloudDemoComponent } from './components/app-layout/cloud/form-demo/cloud-form-demo.component'; import { ConfirmDialogExampleComponent } from './components/confirm-dialog/confirm-dialog-example.component'; +import { DemoErrorComponent } from './components/error/demo-error.component'; export const appRoutes: Routes = [ { path: 'login', loadChildren: 'app/components/login/login.module#AppLoginModule' }, { path: 'logout', component: LogoutComponent }, @@ -414,7 +415,7 @@ export const appRoutes: Routes = [ }, { path: 'error/:id', - component: ErrorContentComponent + component: DemoErrorComponent }, { path: 'error/no-authorization', diff --git a/demo-shell/src/app/components/about/about.component.html b/demo-shell/src/app/components/about/about.component.html index a0ef038ca4..82efb08802 100644 --- a/demo-shell/src/app/components/about/about.component.html +++ b/demo-shell/src/app/components/about/about.component.html @@ -1 +1,12 @@ - + + + + + + + + diff --git a/demo-shell/src/app/components/about/about.component.ts b/demo-shell/src/app/components/about/about.component.ts index 93d5093a99..04c34daa83 100644 --- a/demo-shell/src/app/components/about/about.component.ts +++ b/demo-shell/src/app/components/about/about.component.ts @@ -16,6 +16,7 @@ */ import { Component } from '@angular/core'; +import { name, version, commit, dependencies } from '../../../../../package.json'; @Component({ selector: 'app-about-page', @@ -24,6 +25,11 @@ import { Component } from '@angular/core'; }) export class AboutComponent { + url = `https://github.com/Alfresco/${name}/commits/${commit}`; + version = version; + dependencies = dependencies; + showExtensions = true; + constructor() { } diff --git a/demo-shell/src/app/components/app-layout/app-layout.component.html b/demo-shell/src/app/components/app-layout/app-layout.component.html index 3dc2afb565..27a250f4a6 100644 --- a/demo-shell/src/app/components/app-layout/app-layout.component.html +++ b/demo-shell/src/app/components/app-layout/app-layout.component.html @@ -55,7 +55,7 @@ - + exit_to_app Logout diff --git a/demo-shell/src/app/components/app-layout/cloud/form-demo/cloud-form-demo.component.ts b/demo-shell/src/app/components/app-layout/cloud/form-demo/cloud-form-demo.component.ts index d875699933..e1e5c281fe 100644 --- a/demo-shell/src/app/components/app-layout/cloud/form-demo/cloud-form-demo.component.ts +++ b/demo-shell/src/app/components/app-layout/cloud/form-demo/cloud-form-demo.component.ts @@ -16,8 +16,8 @@ */ import { Component, OnDestroy, OnInit } from '@angular/core'; -import { FormFieldModel, NotificationService, FormRenderingService, CoreAutomationService } from '@alfresco/adf-core'; -import { FormCloud, FormCloudService, UploadCloudWidgetComponent } from '@alfresco/adf-process-services-cloud'; +import { FormFieldModel, NotificationService, FormRenderingService, CoreAutomationService, FormModel } from '@alfresco/adf-core'; +import { FormCloudService, UploadCloudWidgetComponent } from '@alfresco/adf-process-services-cloud'; import { Subscription } from 'rxjs'; @Component({ @@ -26,7 +26,7 @@ import { Subscription } from 'rxjs'; }) export class FormCloudDemoComponent implements OnInit, OnDestroy { - form: FormCloud; + form: FormModel; errorFields: FormFieldModel[] = []; formConfig: string; editor: any; diff --git a/demo-shell/src/app/components/cloud/people-groups-cloud-demo.component.ts b/demo-shell/src/app/components/cloud/people-groups-cloud-demo.component.ts index 60bf38f6d9..d353e2079d 100644 --- a/demo-shell/src/app/components/cloud/people-groups-cloud-demo.component.ts +++ b/demo-shell/src/app/components/cloud/people-groups-cloud-demo.component.ts @@ -16,8 +16,9 @@ */ import { Component, ViewEncapsulation } from '@angular/core'; -import { PeopleCloudComponent, GroupCloudComponent, GroupModel } from '@alfresco/adf-process-services-cloud'; +import { PeopleCloudComponent, GroupCloudComponent } from '@alfresco/adf-process-services-cloud'; import { MatRadioChange, MatCheckboxChange } from '@angular/material'; +import { IdentityGroupModel } from '@alfresco/adf-core'; @Component({ selector: 'app-people-groups-cloud', @@ -39,8 +40,8 @@ export class PeopleGroupCloudDemoComponent { peoplePreselectValidation: Boolean = false; groupMode: string = GroupCloudComponent.MODE_SINGLE; - preSelectGroup: GroupModel[] = []; - selectedGroupList: GroupModel[] = []; + preSelectGroup: IdentityGroupModel[] = []; + selectedGroupList: IdentityGroupModel[] = []; groupRoles: string[]; groupAppName: string; groupFilterMode: string = this.DEFAULT_FILTER_MODE; @@ -144,11 +145,11 @@ export class PeopleGroupCloudDemoComponent { return this.groupMode === GroupCloudComponent.MODE_MULTIPLE; } - onRemoveGroup(group: GroupModel) { + onRemoveGroup(group: IdentityGroupModel) { this.preSelectGroup = this.preSelectGroup.filter((value: any) => value.id !== group.id); } - onSelectGroup(group: GroupModel) { + onSelectGroup(group: IdentityGroupModel) { if (this.groupMode === GroupCloudComponent.MODE_MULTIPLE) { this.preSelectGroup.push(group); } diff --git a/demo-shell/src/app/components/cloud/processes-cloud-demo.component.html b/demo-shell/src/app/components/cloud/processes-cloud-demo.component.html index af3a0ec943..70dfb611ac 100644 --- a/demo-shell/src/app/components/cloud/processes-cloud-demo.component.html +++ b/demo-shell/src/app/components/cloud/processes-cloud-demo.component.html @@ -24,7 +24,13 @@ [lastModifiedTo]="editedFilter.lastModifiedTo" [sorting]="sortArray" [selectionMode]="selectionMode" + [stickyHeader]="true" + [showActions]="actionMenu" + [showContextMenu]="contextMenu" [multiselect]="multiselect" + (showRowActionsMenu)="onShowRowActionsMenu($event)" + (showRowContextMenu)="onShowRowContextMenu($event)" + (executeRowAction)="onExecuteRowAction($event)" (rowClick)="onRowClick($event)" (rowsSelected)="onRowsSelected($event)"> @@ -35,10 +41,28 @@ (prevPage)="resetSelectedRows()">
- Selected rows: - +
+ {{ 'SETTINGS_CLOUD.SELECTED_ROWS' | translate }}: +
    +
  • {{ row.id }}
  • +
+
+
+ {{ 'SETTINGS_CLOUD.ACTION.ACTION_MENU' | translate }}: +
+
+ {{ 'SETTINGS_CLOUD.ACTION.PROCESS_ID' | translate }}: {{ selectedAction.id }}
+ {{ 'SETTINGS_CLOUD.ACTION.ACTION_TYPE' | translate }}: {{ selectedAction.actionType }} +
+
+
+ {{ 'SETTINGS_CLOUD.ACTION.CONTEX_MENU' | translate }}: +
+
+ {{ 'SETTINGS_CLOUD.ACTION.PROCESS_ID' | translate }}: {{ selectedContextAction.id }}
+ {{ 'SETTINGS_CLOUD.ACTION.ACTION_TYPE' | translate }}: {{ selectedContextAction.actionType }} +
+
diff --git a/demo-shell/src/app/components/cloud/processes-cloud-demo.component.ts b/demo-shell/src/app/components/cloud/processes-cloud-demo.component.ts index 40455ff8c2..87f77c13bc 100644 --- a/demo-shell/src/app/components/cloud/processes-cloud-demo.component.ts +++ b/demo-shell/src/app/components/cloud/processes-cloud-demo.component.ts @@ -24,7 +24,7 @@ import { } from '@alfresco/adf-process-services-cloud'; import { ActivatedRoute, Router } from '@angular/router'; -import { UserPreferencesService, AppConfigService } from '@alfresco/adf-core'; +import { UserPreferencesService, AppConfigService, DataCellEvent } from '@alfresco/adf-core'; import { CloudLayoutService, CloudServiceSettings } from './services/cloud-layout.service'; import { Subject } from 'rxjs'; import { takeUntil } from 'rxjs/operators'; @@ -55,11 +55,17 @@ export class ProcessesCloudDemoComponent implements OnInit, OnDestroy { selectionMode: string; selectedRows: string[] = []; testingMode: boolean; + actionMenu: boolean; + contextMenu: boolean; + actions: any[] = []; + selectedAction: { id: number, name: string, actionType: string}; + selectedContextAction: { id: number, name: string, actionType: string}; processFilterProperties: any = { filterProperties: [], sortProperties: [], actions: [] }; processDetailsRedirection: boolean; editedFilter: ProcessFilterCloudModel; + private performAction$ = new Subject(); private onDestroy$ = new Subject(); constructor( @@ -89,6 +95,7 @@ export class ProcessesCloudDemoComponent implements OnInit, OnDestroy { this.cloudLayoutService.settings$ .pipe(takeUntil(this.onDestroy$)) .subscribe(settings => this.setCurrentSettings(settings)); + this.performContextActions(); } ngOnDestroy() { @@ -102,6 +109,9 @@ export class ProcessesCloudDemoComponent implements OnInit, OnDestroy { this.testingMode = settings.testingMode; this.selectionMode = settings.selectionMode; this.processDetailsRedirection = settings.processDetailsRedirection; + this.actionMenu = settings.actionMenu; + this.contextMenu = settings.contextMenu; + this.actions = settings.actions; } } @@ -140,4 +150,41 @@ export class ProcessesCloudDemoComponent implements OnInit, OnDestroy { this.resetSelectedRows(); this.selectedRows = nodes.map((node) => node.obj.entry); } + + onShowRowActionsMenu(event: DataCellEvent) { + event.value.actions = this.actions; + } + + onShowRowContextMenu(event: DataCellEvent) { + event.value.actions = this.actions.map((action) => { + return { + data: event.value.row['obj'], + model: action, + subject: this.performAction$ + + }; + }); + } + + onExecuteRowAction(row: any) { + const value = row.value.row['obj'].entry; + const action = row.value.action; + this.selectedAction = {id: value.id, name: value.name, actionType: action.title}; + } + + performContextActions() { + this.performAction$ + .pipe(takeUntil(this.onDestroy$)) + .subscribe((action: any) => { + if (action) { + this.onExecuteContextAction(action); + } + }); + } + + onExecuteContextAction(contextAction: any) { + const value = contextAction.data.entry; + const action = contextAction.model; + this.selectedContextAction = {id: value.id, name: value.name, actionType: action.title}; + } } diff --git a/demo-shell/src/app/components/cloud/services/cloud-layout.service.ts b/demo-shell/src/app/components/cloud/services/cloud-layout.service.ts index d3041063d3..8c5ff0dc60 100644 --- a/demo-shell/src/app/components/cloud/services/cloud-layout.service.ts +++ b/demo-shell/src/app/components/cloud/services/cloud-layout.service.ts @@ -20,10 +20,13 @@ import { BehaviorSubject } from 'rxjs'; export interface CloudServiceSettings { multiselect: boolean; + actionMenu: boolean; + contextMenu: boolean; testingMode: boolean; taskDetailsRedirection: boolean; processDetailsRedirection: boolean; selectionMode: string; + actions: any[]; } export interface FilterSettings { @@ -32,6 +35,17 @@ export interface FilterSettings { key?: string; } +export class ActionMenuModel { + constructor( + public key: string, + public icon: string, + public title: string, + public visible?: boolean, + public disabled?: boolean + ) { } + +} + @Injectable({ providedIn: 'root' }) @@ -39,10 +53,13 @@ export class CloudLayoutService { private settings: CloudServiceSettings = { multiselect: false, + actionMenu: false, + contextMenu: false, testingMode: false, taskDetailsRedirection: true, processDetailsRedirection: true, - selectionMode: 'single' + selectionMode: 'single', + actions: [] }; taskFilter$ = new BehaviorSubject({index: 0}); diff --git a/demo-shell/src/app/components/cloud/shared/cloud-settings.component.html b/demo-shell/src/app/components/cloud/shared/cloud-settings.component.html index 62d8ded230..e94b535709 100644 --- a/demo-shell/src/app/components/cloud/shared/cloud-settings.component.html +++ b/demo-shell/src/app/components/cloud/shared/cloud-settings.component.html @@ -2,6 +2,12 @@ {{ 'SETTINGS_CLOUD.MULTISELECTION' | translate }} + + {{ 'SETTINGS_CLOUD.ACTION.ACTION_MENU' | translate }} + + + {{ 'SETTINGS_CLOUD.ACTION.CONTEX_MENU' | translate }} + {{ 'SETTINGS_CLOUD.TESTING_MODE' | translate }} @@ -21,4 +27,45 @@ + + + {{ 'SETTINGS_CLOUD.ACTION.ACTION_TITLE' | translate }} + + +
+ + + + + + + + + + + + + {{ 'SETTINGS_CLOUD.ACTION.ACTION_VISIBLE' | translate }} + + + {{ 'SETTINGS_CLOUD.ACTION.ACTION_DISABLE' | translate }} + + +
+
+ + + {{action.title}} + + cancel + + + +
+
+
diff --git a/demo-shell/src/app/components/cloud/shared/cloud-settings.component.ts b/demo-shell/src/app/components/cloud/shared/cloud-settings.component.ts index d21e308386..faa96c6c56 100644 --- a/demo-shell/src/app/components/cloud/shared/cloud-settings.component.ts +++ b/demo-shell/src/app/components/cloud/shared/cloud-settings.component.ts @@ -16,9 +16,10 @@ */ import { Component, OnInit, OnDestroy } from '@angular/core'; -import { CloudLayoutService } from '../services/cloud-layout.service'; +import { CloudLayoutService, ActionMenuModel } from '../services/cloud-layout.service'; import { Subject } from 'rxjs'; import { takeUntil } from 'rxjs/operators'; +import { FormGroup, FormControl } from '@angular/forms'; @Component({ selector: 'app-cloud-settings', @@ -29,6 +30,9 @@ export class CloudSettingsComponent implements OnInit, OnDestroy { private onDestroy$ = new Subject(); multiselect: boolean; + actionMenu: boolean; + contextMenu: boolean; + actions: ActionMenuModel[] = []; selectionMode: string; testingMode: boolean; taskDetailsRedirection: boolean; @@ -40,6 +44,14 @@ export class CloudSettingsComponent implements OnInit, OnDestroy { { value: 'multiple', title: 'Multiple' } ]; + actionMenuForm = new FormGroup({ + key: new FormControl(''), + title: new FormControl(''), + icon: new FormControl(''), + visible: new FormControl(true), + disabled: new FormControl(false) + }); + constructor(private cloudLayoutService: CloudLayoutService) { } ngOnInit() { @@ -57,6 +69,9 @@ export class CloudSettingsComponent implements OnInit, OnDestroy { setCurrentSettings(settings) { if (settings) { this.multiselect = settings.multiselect; + this.actionMenu = this.actionMenu; + this.contextMenu = this.contextMenu; + this.actions = this.actions; this.testingMode = settings.testingMode; this.selectionMode = settings.selectionMode; this.taskDetailsRedirection = settings.taskDetailsRedirection; @@ -88,9 +103,35 @@ export class CloudSettingsComponent implements OnInit, OnDestroy { this.setSetting(); } + toggleActionMenu() { + this.actionMenu = !this.actionMenu; + this.setSetting(); + } + + toggleContextMenu() { + this.contextMenu = !this.contextMenu; + this.setSetting(); + } + + addAction() { + this.actions.push( this.actionMenuForm.value); + this.actionMenuForm.get('key').reset(); + this.actionMenuForm.get('title').reset(); + this.actionMenuForm.get('icon').reset(); + this.setSetting(); + } + + removeAction(removedAction: ActionMenuModel) { + this.actions = this.actions.filter((action: ActionMenuModel) => action.key !== removedAction.key); + this.setSetting(); + } + setSetting() { this.cloudLayoutService.setCurrentSettings({ multiselect: this.multiselect, + actionMenu: this.actionMenu, + contextMenu: this.contextMenu, + actions: this.actions, testingMode: this.testingMode, selectionMode: this.selectionMode, taskDetailsRedirection: this.taskDetailsRedirection, diff --git a/demo-shell/src/app/components/cloud/shared/cloud.shared.module.ts b/demo-shell/src/app/components/cloud/shared/cloud.shared.module.ts index a67fc6e948..7a72006f9d 100644 --- a/demo-shell/src/app/components/cloud/shared/cloud.shared.module.ts +++ b/demo-shell/src/app/components/cloud/shared/cloud.shared.module.ts @@ -20,6 +20,7 @@ import { CommonModule } from '@angular/common'; import { CloudSettingsComponent } from './cloud-settings.component'; import { MatDialogModule, MatInputModule, MatSelectModule, MatSlideToggleModule } from '@angular/material'; import { CoreModule } from '@alfresco/adf-core'; +import { FlexLayoutModule } from '@angular/flex-layout'; @NgModule({ imports: [ @@ -28,7 +29,8 @@ import { CoreModule } from '@alfresco/adf-core'; MatDialogModule, MatInputModule, MatSelectModule, - MatSlideToggleModule + MatSlideToggleModule, + FlexLayoutModule ], declarations: [ CloudSettingsComponent ], exports: [ CommonModule, CloudSettingsComponent] diff --git a/demo-shell/src/app/components/cloud/task-details-cloud-demo.component.html b/demo-shell/src/app/components/cloud/task-details-cloud-demo.component.html index c1a956acec..4249feb8d9 100644 --- a/demo-shell/src/app/components/cloud/task-details-cloud-demo.component.html +++ b/demo-shell/src/app/components/cloud/task-details-cloud-demo.component.html @@ -10,6 +10,7 @@ (taskCompleted)="onTaskCompleted()" (taskClaimed)="onTaskClaimed()" (taskUnclaimed)="onTaskUnclaimed()" + (formContentClicked)="onFormContentClicked($event)" (formSaved)="onFormSaved()"> diff --git a/demo-shell/src/app/components/cloud/task-details-cloud-demo.component.ts b/demo-shell/src/app/components/cloud/task-details-cloud-demo.component.ts index 9a724895e5..63b1d0549a 100644 --- a/demo-shell/src/app/components/cloud/task-details-cloud-demo.component.ts +++ b/demo-shell/src/app/components/cloud/task-details-cloud-demo.component.ts @@ -19,6 +19,7 @@ import { Component, ViewChild } from '@angular/core'; import { ActivatedRoute, Router } from '@angular/router'; import { NotificationService } from '@alfresco/adf-core'; import { TaskHeaderCloudComponent } from '@alfresco/adf-process-services-cloud'; +import { PreviewService } from 'app/services/preview.service'; @Component({ templateUrl: './task-details-cloud-demo.component.html', @@ -35,7 +36,8 @@ export class TaskDetailsCloudDemoComponent { constructor( private route: ActivatedRoute, private router: Router, - private notificationService: NotificationService + private notificationService: NotificationService, + private previewService: PreviewService ) { this.route.params.subscribe((params) => { this.taskId = params.taskId; @@ -66,8 +68,8 @@ export class TaskDetailsCloudDemoComponent { this.taskHeader.ngOnInit(); } - onFormContentClicked(resourceId) { - this.router.navigate([`/cloud/${this.appName}/task-details/${this.taskId}/files/${resourceId.nodeId}/view`]); + onFormContentClicked(resourceClicked: any) { + this.previewService.showResource(resourceClicked.nodeId); } onFormSaved() { diff --git a/demo-shell/src/app/components/cloud/tasks-cloud-demo.component.html b/demo-shell/src/app/components/cloud/tasks-cloud-demo.component.html index 310c709101..640e8c3892 100644 --- a/demo-shell/src/app/components/cloud/tasks-cloud-demo.component.html +++ b/demo-shell/src/app/components/cloud/tasks-cloud-demo.component.html @@ -29,6 +29,12 @@ [sorting]="sortArray" [multiselect]="multiselect" [selectionMode]="selectionMode" + [stickyHeader]="true" + [showActions]="actionMenu" + [showContextMenu]="contextMenu" + (showRowActionsMenu)="onShowRowActionsMenu($event)" + (showRowContextMenu)="onShowRowContextMenu($event)" + (executeRowAction)="onExecuteRowAction($event)" (rowClick)="onRowClick($event)" (rowsSelected)="onRowsSelected($event)" #taskCloud> @@ -40,10 +46,28 @@ (prevPage)="resetSelectedRows()">
- Selected rows: -
    -
  • {{ row.name }}
  • -
+
+ {{ 'SETTINGS_CLOUD.SELECTED_ROWS' | translate }}: +
    +
  • {{ row.name }}
  • +
+
+
+ {{ 'SETTINGS_CLOUD.ACTION.ACTION_MENU' | translate }}: +
+
+ {{ 'SETTINGS_CLOUD.ACTION.TASK_ID' | translate }}: {{ selectedAction.id }}
+ {{ 'SETTINGS_CLOUD.ACTION.ACTION_TYPE' | translate }}: {{ selectedAction.actionType }} +
+
+
+ {{ 'SETTINGS_CLOUD.ACTION.CONTEX_MENU' | translate }}: +
+
+ {{ 'SETTINGS_CLOUD.ACTION.TASK_ID' | translate }}: {{ selectedContextAction.id }}
+ {{ 'SETTINGS_CLOUD.ACTION.ACTION_TYPE' | translate }}: {{ selectedContextAction.actionType }} +
+
diff --git a/demo-shell/src/app/components/cloud/tasks-cloud-demo.component.ts b/demo-shell/src/app/components/cloud/tasks-cloud-demo.component.ts index daa4aeed93..c264bae8c8 100644 --- a/demo-shell/src/app/components/cloud/tasks-cloud-demo.component.ts +++ b/demo-shell/src/app/components/cloud/tasks-cloud-demo.component.ts @@ -17,7 +17,7 @@ import { Component, ViewChild, OnInit, OnDestroy } from '@angular/core'; import { TaskListCloudComponent, TaskListCloudSortingModel, TaskFilterCloudModel } from '@alfresco/adf-process-services-cloud'; -import { UserPreferencesService, AppConfigService } from '@alfresco/adf-core'; +import { UserPreferencesService, AppConfigService, DataCellEvent } from '@alfresco/adf-core'; import { ActivatedRoute, Router } from '@angular/router'; import { CloudLayoutService } from './services/cloud-layout.service'; import { Subject } from 'rxjs'; @@ -48,10 +48,16 @@ export class TasksCloudDemoComponent implements OnInit, OnDestroy { filterId; multiselect: boolean; selectedRows: string[] = []; + actionMenu: boolean; + contextMenu: boolean; + actions: any[] = []; + selectedAction: { id: number, name: string, actionType: string}; + selectedContextAction: { id: number, name: string, actionType: string}; testingMode: boolean; selectionMode: string; taskDetailsRedirection: boolean; + private performAction$ = new Subject(); private onDestroy$ = new Subject(); constructor( @@ -82,6 +88,7 @@ export class TasksCloudDemoComponent implements OnInit, OnDestroy { this.cloudLayoutService.settings$ .pipe(takeUntil(this.onDestroy$)) .subscribe(settings => this.setCurrentSettings(settings)); + this.performContextActions(); } ngOnDestroy() { @@ -95,6 +102,9 @@ export class TasksCloudDemoComponent implements OnInit, OnDestroy { this.testingMode = settings.testingMode; this.selectionMode = settings.selectionMode; this.taskDetailsRedirection = settings.taskDetailsRedirection; + this.actionMenu = settings.actionMenu; + this.contextMenu = settings.contextMenu; + this.actions = settings.actions; } } @@ -128,4 +138,41 @@ export class TasksCloudDemoComponent implements OnInit, OnDestroy { this.router.navigate([`/cloud/${this.appName}/tasks/`], { queryParams: filterAction.filter }); } } + + onShowRowActionsMenu(event: DataCellEvent) { + event.value.actions = this.actions; + } + + onShowRowContextMenu(event: DataCellEvent) { + event.value.actions = this.actions.map((action) => { + return { + data: event.value.row['obj'], + model: action, + subject: this.performAction$ + + }; + }); + } + + onExecuteRowAction(row: any) { + const value = row.value.row['obj'].entry; + const action = row.value.action; + this.selectedAction = {id: value.id, name: value.name, actionType: action.title}; + } + + performContextActions() { + this.performAction$ + .pipe(takeUntil(this.onDestroy$)) + .subscribe((action: any) => { + if (action) { + this.onExecuteContextAction(action); + } + }); + } + + onExecuteContextAction(contextAction: any) { + const value = contextAction.data.entry; + const action = contextAction.model; + this.selectedContextAction = {id: value.id, name: value.name, actionType: action.title}; + } } diff --git a/demo-shell/src/app/components/content-node-selector/content-node-selector.component.ts b/demo-shell/src/app/components/content-node-selector/content-node-selector.component.ts index c24e2321f4..5ce3bbca2d 100644 --- a/demo-shell/src/app/components/content-node-selector/content-node-selector.component.ts +++ b/demo-shell/src/app/components/content-node-selector/content-node-selector.component.ts @@ -18,7 +18,7 @@ import { Component, ViewEncapsulation } from '@angular/core'; import { SitePaging, SiteEntry, MinimalNodeEntryEntity } from '@alfresco/js-api'; import { ContentNodeDialogService, ShareDataRow, RowFilter } from '@alfresco/adf-content-services'; -import { DataRow, DataColumn, ThumbnailService } from '@alfresco/adf-core'; +import { ThumbnailService } from '@alfresco/adf-core'; @Component({ templateUrl: './content-node-selector.component.html', @@ -95,7 +95,7 @@ export class ContentNodeSelectorComponent { return showNode; } - customImageResolverExample(row: DataRow, col: DataColumn) { + customImageResolverExample() { return this.thumbnailService.getMimeTypeIcon('video/quicktime'); } diff --git a/demo-shell/src/app/components/datatable/datatable.component.html b/demo-shell/src/app/components/datatable/datatable.component.html index 2c0d852471..39f3fa192b 100644 --- a/demo-shell/src/app/components/datatable/datatable.component.html +++ b/demo-shell/src/app/components/datatable/datatable.component.html @@ -19,8 +19,8 @@ [multiselect]="multiselect" [actions]="true" rowStyleClass="custom-row-style" - (showRowActionsMenu)="onShowRowActionsMenu($event)" (executeRowAction)="onExecuteRowAction($event)" - (row-click)="onRowClick($event)" (row-dblclick)="onRowDblClick($event)"> + (showRowActionsMenu)="onShowRowActionsMenu($event)" + (executeRowAction)="onExecuteRowAction($event)"> @@ -451,6 +461,7 @@ for more information about installing and using the source code. | [Apps Process Cloud Service](process-services-cloud/services/apps-process-cloud.service.md) ![Experimental](docassets/images/ExperimentalIcon.png) | Gets details of deployed apps for the current user. | [Source](../lib/process-services-cloud/src/lib/app/services/apps-process-cloud.service.ts) | | [Form cloud service](process-services-cloud/services/form-cloud.service.md) | Implements Process Services form methods | [Source](../lib/process-services-cloud/src/lib/form/services/form-cloud.service.ts) | | [Group Cloud Service](process-services-cloud/services/group-cloud.service.md) ![Experimental](docassets/images/ExperimentalIcon.png) | Searches and gets information for groups. | [Source](../lib/process-services-cloud/src/lib/group/services/group-cloud.service.ts) | +| [Local Preference Cloud Service](process-services-cloud/services/local-preference-cloud.service.md) ![Experimental](docassets/images/ExperimentalIcon.png) | Manages Local Storage preferences. | [Source](../lib/process-services-cloud/src/lib/services/local-preference-cloud.service.ts) | | [Process Filter Cloud Service](process-services-cloud/services/process-filter-cloud.service.md) ![Experimental](docassets/images/ExperimentalIcon.png) | Manage Process Filters, which are pre-configured Process Instance queries. | [Source](../lib/process-services-cloud/src/lib/process/process-filters/services/process-filter-cloud.service.ts) | | [Process Header Cloud Service](process-services-cloud/services/process-header-cloud.service.md) ![Experimental](docassets/images/ExperimentalIcon.png) | Manages cloud process instances. | [Source](../lib/process-services-cloud/src/lib/process/process-header/services/process-header-cloud.service.ts) | | [Process List Cloud Service](process-services-cloud/services/process-list-cloud.service.md) ![Experimental](docassets/images/ExperimentalIcon.png) | Searches processes. | [Source](../lib/process-services-cloud/src/lib/process/process-list/services/process-list-cloud.service.ts) | @@ -459,6 +470,7 @@ for more information about installing and using the source code. | [Task Cloud Service](process-services-cloud/services/task-cloud.service.md) ![Experimental](docassets/images/ExperimentalIcon.png) | Manages task cloud. | [Source](../lib/process-services-cloud/src/lib/task/services/task-cloud.service.ts) | | [Task Filter Cloud Service](process-services-cloud/services/task-filter-cloud.service.md) ![Experimental](docassets/images/ExperimentalIcon.png) | Manages task filters. | [Source](../lib/process-services-cloud/src/lib/task/task-filters/services/task-filter-cloud.service.ts) | | [Task List Cloud Service](process-services-cloud/services/task-list-cloud.service.md) ![Experimental](docassets/images/ExperimentalIcon.png) | Searches tasks. | [Source](../lib/process-services-cloud/src/lib/task/task-list/services/task-list-cloud.service.ts) | +| [User Preference Cloud Service](process-services-cloud/services/user-preference-cloud.service.md) ![Experimental](docassets/images/ExperimentalIcon.png) | Manages user preferences. | [Source](../lib/process-services-cloud/src/lib/services/user-preference-cloud.service.ts) | diff --git a/docs/breaking-changes/breaking-change-2.6.0-3.0.0.md b/docs/breaking-changes/breaking-change-2.6.0-3.0.0.md index 73a158e17d..0ebf586b82 100644 --- a/docs/breaking-changes/breaking-change-2.6.0-3.0.0.md +++ b/docs/breaking-changes/breaking-change-2.6.0-3.0.0.md @@ -25,7 +25,7 @@ This document lists all the deprecated ADF v2.x components that were removed for classes without the **adf-** prefix, you will now need to update them. For example, `.card-view` is now `.adf-card-view`. -- [PR ADF-1443](https://github.com/Alfresco/alfresco-ng2-components/pull/4028): [`DownloadZipDialogComponent`](../../lib/core/dialogs/download-zip.dialog.ts) +- [PR ADF-1443](https://github.com/Alfresco/alfresco-ng2-components/pull/4028): [`DownloadZipDialogComponent`](../../lib/core/dialogs/download-zip/download-zip.dialog.ts) and [`NodeDownloadDirective`](../core/directives/node-download.directive.md) have been moved from the Content Services module to the Core module. This modification has enabled us to remove some code duplication between the two modules. @@ -51,7 +51,7 @@ This document lists all the deprecated ADF v2.x components that were removed for - `CommentProcessModel` was moved into the Core library with the name [`CommentModel`](../../lib/core/models/comment.model.ts) in v2.3.0. Now you can only import it from [`CoreModule`](../../lib/core/core.module.ts). - [`CommentsModule`](../../lib/core/comments/comments.module.ts), [`CommentListComponent`](../core/components/comment-list.component.md), and [`CommentsComponent`](../core/components/comments.component.md) are no longer exported from - [`ProcessModule`](../../lib/process-services/process.module.ts) but now from [`CoreModule`](../../lib/core/core.module.ts). The old usage was deprecated in v2.3.0. + [`ProcessModule`](../../lib/process-services/src/lib/process.module.ts) but now from [`CoreModule`](../../lib/core/core.module.ts). The old usage was deprecated in v2.3.0. - ``: The `parentId` input has been renamed as `rootFolderId`. The old name was deprecated in v2.4.0. - The `createFolder` event of the [`UploadBase`](../../lib/content-services/upload/components/base-upload/upload-base.ts) class (emitted when a folder was diff --git a/docs/compatibility.md b/docs/compatibility.md index 4fc5ad8b3d..ac5e1e86de 100644 --- a/docs/compatibility.md +++ b/docs/compatibility.md @@ -21,6 +21,7 @@ You can find further information about released versions of ADF in the | ADF version | Content Services | Process Services | | --- | --- | --- | +| [3.5.0](versionIndex.md#v350) | **Full test:** v6.1.0
**Smoke test:** v5.2.4 | **Full test:** v7.1.0 M4 (latest CI pipeline build), v1.9.0
**Smoke test:** v1.8.1 | | [3.4.0](versionIndex.md#v340) | **Full test:** v6.1.0
**Smoke test:** v5.2.4 | **Full test:** v7.1.0 M3 (latest CI pipeline build), v1.9.0
**Smoke test:** v1.8.1 | | [3.3.0](versionIndex.md#v330) | **Full test:** v6.1.0
**Smoke test:** v5.2.4 | **Full test:** v7.1.0 M2 (latest CI pipeline build), v1.9.0
**Smoke test:** v1.8.1 | | [3.2.0](versionIndex.md#v320) - [3.2.1](versionIndex.md#v321) | **Full test:** v6.1.0
**Smoke test:** v5.2.4 | **Full test:** v7.1.0 (latest CI pipeline build), v1.9.0
**Smoke test:** v1.8.1 | diff --git a/docs/content-services/components/content-action.component.md b/docs/content-services/components/content-action.component.md index ec5ca0e865..5b44465156 100644 --- a/docs/content-services/components/content-action.component.md +++ b/docs/content-services/components/content-action.component.md @@ -97,10 +97,10 @@ export class MyView { | Name | Type | Description | | ---- | ---- | ----------- | -| error | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`` | Emitted when an error occurs during the action. Applies to copy and move actions. | -| execute | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`` | Emitted when the user selects the action from the menu. | -| permissionEvent | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`` | Emitted when a permission error occurs | -| success | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`` | Emitted when the action succeeds with the success string message. Applies to copy, move and delete actions. | +| error | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`<>` | Emitted when an error occurs during the action. Applies to copy and move actions. | +| execute | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`<>` | Emitted when the user selects the action from the menu. | +| permissionEvent | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`<>` | Emitted when a permission error occurs | +| success | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`<>` | Emitted when the action succeeds with the success string message. Applies to copy, move and delete actions. | ## Details diff --git a/docs/content-services/components/like.component.md b/docs/content-services/components/like.component.md index 05b1e8ca64..58c5ea8e84 100644 --- a/docs/content-services/components/like.component.md +++ b/docs/content-services/components/like.component.md @@ -29,7 +29,7 @@ Allows a user to add "likes" to an item. | Name | Type | Description | | ---- | ---- | ----------- | -| changeVote | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`` | Emitted when the "vote" gets changed. | +| changeVote | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`<>` | Emitted when the "vote" gets changed. | ## See also diff --git a/docs/content-services/components/rating.component.md b/docs/content-services/components/rating.component.md index 86dfa9233c..2bcaadbae8 100644 --- a/docs/content-services/components/rating.component.md +++ b/docs/content-services/components/rating.component.md @@ -40,7 +40,7 @@ If the average is decimal number it will be rounded. | Name | Type | Description | | ---- | ---- | ----------- | -| changeVote | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`` | Emitted when the "vote" gets changed. | +| changeVote | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`<>` | Emitted when the "vote" gets changed. | ## See also diff --git a/docs/content-services/components/tag-actions.component.md b/docs/content-services/components/tag-actions.component.md index a49364c06b..0252743b46 100644 --- a/docs/content-services/components/tag-actions.component.md +++ b/docs/content-services/components/tag-actions.component.md @@ -32,5 +32,5 @@ Shows available actions for tags. | Name | Type | Description | | ---- | ---- | ----------- | | error | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`` | Emitted when an error occurs. | -| result | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`` | Emitted when an action is chosen. | +| result | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`<>` | Emitted when an action is chosen. | | successAdd | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`` | Emitted when a tag is added successfully. | diff --git a/docs/content-services/components/tag-list.component.md b/docs/content-services/components/tag-list.component.md index 74cee2593d..6135d0c93e 100644 --- a/docs/content-services/components/tag-list.component.md +++ b/docs/content-services/components/tag-list.component.md @@ -17,7 +17,7 @@ Shows tags for an item. | Name | Type | Description | | ---- | ---- | ----------- | -| result | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`` | Emitted when a tag is selected. | +| result | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`<>` | Emitted when a tag is selected. | ## See Also diff --git a/docs/content-services/components/tag-node-list.component.md b/docs/content-services/components/tag-node-list.component.md index 9459ffd737..f74bd5741d 100644 --- a/docs/content-services/components/tag-node-list.component.md +++ b/docs/content-services/components/tag-node-list.component.md @@ -32,4 +32,4 @@ Shows tags for a node. | Name | Type | Description | | ---- | ---- | ----------- | -| results | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`` | Emitted when a tag is selected. | +| results | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`<>` | Emitted when a tag is selected. | diff --git a/docs/content-services/components/upload-button.component.md b/docs/content-services/components/upload-button.component.md index 6924c28168..3b2942f95f 100644 --- a/docs/content-services/components/upload-button.component.md +++ b/docs/content-services/components/upload-button.component.md @@ -47,9 +47,9 @@ Activates a file upload. | Name | Type | Description | | ---- | ---- | ----------- | | beginUpload | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`<`[`UploadFilesEvent`](../../../lib/content-services/upload/components/upload-files.event.ts)`>` | Emitted when the upload begins. | -| error | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`` | Emitted when an error occurs. | +| error | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`<>` | Emitted when an error occurs. | | permissionEvent | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`<`[`PermissionModel`](../../../lib/content-services/document-list/models/permissions.model.ts)`>` | Emitted when create permission is missing. | -| success | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`` | Emitted when the file is uploaded successfully. | +| success | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`<>` | Emitted when the file is uploaded successfully. | ## Details diff --git a/docs/content-services/components/upload-drag-area.component.md b/docs/content-services/components/upload-drag-area.component.md index 1357f4f173..625bcdf8e6 100644 --- a/docs/content-services/components/upload-drag-area.component.md +++ b/docs/content-services/components/upload-drag-area.component.md @@ -75,8 +75,8 @@ as the drag/drop target: | Name | Type | Description | | ---- | ---- | ----------- | | beginUpload | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`<`[`UploadFilesEvent`](../../../lib/content-services/upload/components/upload-files.event.ts)`>` | Emitted when the upload begins. | -| error | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`` | Emitted when an error occurs. | -| success | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`` | Emitted when the file is uploaded successfully. | +| error | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`<>` | Emitted when an error occurs. | +| success | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`<>` | Emitted when the file is uploaded successfully. | ## Details diff --git a/docs/content-services/components/upload-version-button.component.md b/docs/content-services/components/upload-version-button.component.md index bb8df4dcf0..07e542f77a 100644 --- a/docs/content-services/components/upload-version-button.component.md +++ b/docs/content-services/components/upload-version-button.component.md @@ -50,9 +50,9 @@ to enrich the features and decrease the restrictions currently applied to node v | Name | Type | Description | | ---- | ---- | ----------- | | beginUpload | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`<`[`UploadFilesEvent`](../../../lib/content-services/upload/components/upload-files.event.ts)`>` | Emitted when the upload begins. | -| error | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`` | Emitted when an error occurs. | +| error | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`<>` | Emitted when an error occurs. | | permissionEvent | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`<`[`PermissionModel`](../../../lib/content-services/document-list/models/permissions.model.ts)`>` | Emitted when create permission is missing. | -| success | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`` | Emitted when the file is uploaded successfully. | +| success | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`<>` | Emitted when the file is uploaded successfully. | ## Details diff --git a/docs/content-services/components/webscript.component.md b/docs/content-services/components/webscript.component.md index 6209a69b4e..3c4c2d0727 100644 --- a/docs/content-services/components/webscript.component.md +++ b/docs/content-services/components/webscript.component.md @@ -75,7 +75,7 @@ export class AppComponent { | Name | Type | Description | | ---- | ---- | ----------- | -| success | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`` | Emitted when the operation succeeds. You can get the plain data from the webscript through the **success** event parameter and use it as you need in your application. | +| success | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`<>` | Emitted when the operation succeeds. You can get the plain data from the webscript through the **success** event parameter and use it as you need in your application. | ## Details diff --git a/docs/content-services/directives/toggle-icon.directive.md b/docs/content-services/directives/toggle-icon.directive.md new file mode 100644 index 0000000000..608ea20a25 --- /dev/null +++ b/docs/content-services/directives/toggle-icon.directive.md @@ -0,0 +1,27 @@ +--- +Title: Toggle Icon directive +Added: v2.0.0 +Status: Active +Last reviewed: 2019-04-09 +--- + +# [Toggle Icon directive](../../../lib/content-services/upload/directives/toggle-icon.directive.ts "Defined in toggle-icon.directive.ts") + +Toggle icon on mouse or keyboard event for a selectable element. + +## Example Usage + +```html + + +``` + +## Class members diff --git a/docs/core/components/about-application.component.md b/docs/core/components/about-application.component.md new file mode 100644 index 0000000000..02fe50153e --- /dev/null +++ b/docs/core/components/about-application.component.md @@ -0,0 +1,40 @@ +--- +Title: About Application Modules Component +Added: v3.5.0 +Status: Experimental +Last reviewed: 2019-09-09 +--- + +# [About Application Modules Component](../../../lib/core/about/about-application-modules/about-application-modules.component.ts "Defined in about-application-modules.component.ts") + +Shows which ADF libraries and plugins an application is using. + +## Basic Usage + +With default input values: + +```html + +``` + +With custom input values: + +```html + + +``` + +### Properties + +| Name | Type | Default value | Description | +| ---- | ---- | ------------- | ----------- | +| dependencies | `any` | | The dependencies value defined in the package.json | +| showExtensions | `boolean` | true | Toggles showing/hiding of extensions block. | +| regexp | `string` | "^(@alfresco)" | Regular expression for filtering dependencies packages. | + +## Details + +Use this component to display an overview of the dependencies and plugins used by an application. diff --git a/docs/core/components/about-github-link.component.md b/docs/core/components/about-github-link.component.md new file mode 100644 index 0000000000..9be1a2f0ca --- /dev/null +++ b/docs/core/components/about-github-link.component.md @@ -0,0 +1,39 @@ +--- +Title: About GitHub Link Component +Added: v3.5.0 +Status: Experimental +Last reviewed: 2019-09-09 +--- + +# [About GitHub Link Component](../../../lib/core/about/about-github-link/about-github-link.component.ts "Defined in about-github-link.component.ts") + +Shows which version of the application is running based on the latest GitHub commit, as well as the server settings for the application. + +## Basic Usage + +With default input values: + +```html + +``` + +With custom input values: + +```html + + + +``` + +### Properties + +| Name | Type | Default value | Description | +| ---- | ---- | ------------- | ----------- | +| url | `string` | | The GitHub commit that corresponds to the version of ADF in use. | +| version | `string` | "3.x.x" | A number displaying the version of ADF in use. | + +## Details + +Use this component to display an overview of the latest GitHub commit and the server settings used by an application. diff --git a/docs/core/components/about-product-version.component.md b/docs/core/components/about-product-version.component.md new file mode 100644 index 0000000000..776e150cf2 --- /dev/null +++ b/docs/core/components/about-product-version.component.md @@ -0,0 +1,22 @@ +--- +Title: About Product Version Component +Added: v3.5.0 +Status: Experimental +Last reviewed: 2019-09-09 +--- + +# [About Product Version Component](../../../lib/core/about/about-product-version/about-product-version.component.ts "Defined in about-product-version.component.ts") + +Shows which version of Process Services (BPM) and Content Services (ECM) an application is running. It also shows the relevant license information, application status and Alfresco modules running in an application. + +## Basic Usage + +With default input values: + +```html + +``` + +## Details + +Use this component to display an overview of which version of Process Services and Content Services an application is running as well as the associated license information. It also displays application status and any modules running. diff --git a/docs/core/components/about.component.md b/docs/core/components/about.component.md deleted file mode 100644 index 8af231c7a5..0000000000 --- a/docs/core/components/about.component.md +++ /dev/null @@ -1,47 +0,0 @@ ---- -Title: About Component -Added: v2.4.0 -Status: Experimental -Last reviewed: 2019-03-19 ---- - -# [About Component](../../../lib/core/about/about.component.ts "Defined in about.component.ts") - -Shows a general version and status overview of the installed ADF library. - -## Basic Usage - -With default input values - -```html - -``` - -With custom input values: - -```html - -``` - -## Class members - -### Properties - -| Name | Type | Default value | Description | -| ---- | ---- | ------------- | ----------- | -| githubUrlCommitAlpha | `string` | | Commit corresponding to the version of ADF to be used. | -| regexp | `string` | "^(@alfresco)" | Regular expression for filtering dependencies packages. | -| showExtensions | `boolean` | true | Toggles showing/hiding of extensions block. | - -## Details - -Use this component to get a general overview of the version of ADF installed and the status of the [Content service](../services/content.service.md) and [Process service](../../process-services/services/process.service.md). - -Note that at the moment this component is mostly for internal use and it requires you to: - -- create a version file : `npm list --depth=0 --json=true --prod=true > versions.json` -- provide this version file in the `dist` folder diff --git a/docs/core/components/card-view.component.md b/docs/core/components/card-view.component.md index cc78df900a..1bd8085072 100644 --- a/docs/core/components/card-view.component.md +++ b/docs/core/components/card-view.component.md @@ -234,7 +234,7 @@ const dateItemProperty = new CardViewDateItemModel(options); | default | any | | The default value to display if the value is empty | | displayValue\* | any | | The value to display | | editable | boolean | false | Toggles whether the item is editable | -| format | boolean | "MMM DD YYYY" | Any date format that momentjs accepts | +| format | string | "MMM DD YYYY" | Any date format that momentjs accepts | #### Card Datetime Item @@ -252,7 +252,7 @@ const datetimeItemProperty = new CardViewDatetimeItemModel(options); | default | any | any | The default value to display if the value is empty | | displayValue\* | string | | The value to display | | editable | boolean | false | Toggles whether the item is editable | -| format | boolean | "MMM DD YYYY HH:mm" | Any datetime format that momentjs accepts | +| format | string | "MMM DD YYYY HH:mm" | Any datetime format that momentjs accepts | #### Card Bool Item diff --git a/docs/core/components/data-column.component.md b/docs/core/components/data-column.component.md index 8d845e8ff2..d6286889af 100644 --- a/docs/core/components/data-column.component.md +++ b/docs/core/components/data-column.component.md @@ -45,6 +45,7 @@ Defines column properties for DataTable, Tasklist, Document List and other compo | ---- | ---- | ------------- | ----------- | | copyContent | `boolean` | | Enables/disables a [Clipboard directive](../../core/directives/clipboard.directive.md) to allow copying of cell contents. | | cssClass | `string` | | Additional CSS class to be applied to column (header and cells). | +| editable | `boolean` | false | | | format | `string` | | Value format (if supported by the parent component), for example format of the date. | | formatTooltip | `Function` | | Custom tooltip formatter function. | | key | `string` | | Data source key. Can be either a column/property key like `title` or a property path like `createdBy.name`. | diff --git a/docs/core/components/error-content.component.md b/docs/core/components/error-content.component.md index 79b32f4789..99cbc247e8 100644 --- a/docs/core/components/error-content.component.md +++ b/docs/core/components/error-content.component.md @@ -24,8 +24,6 @@ this.router.navigate(['/error', errorCode]); | Name | Type | Default value | Description | | ---- | ---- | ------------- | ----------- | | errorCode | `string` | | Error code associated with this error. | -| returnButtonUrl | `string` | "/" | Target URL for the return button. | -| secondaryButtonUrl | `string` | "report-issue" | Target URL for the secondary button. | ## Details @@ -49,6 +47,20 @@ You can customize your error messages by adding them to the translate files insi } ``` +## How to customise the action button. + +The errorContentComponent allows you to customise the actions section using the selector `adf-error-content-actions`. + +For example you can have a custom action button with the following code + +```html + +
+ +
+
+``` + ## See also - [Empty Content component](empty-content.component.md) diff --git a/docs/core/components/form-field.component.md b/docs/core/components/form-field.component.md index 8416db91b0..2c6e14d4b0 100644 --- a/docs/core/components/form-field.component.md +++ b/docs/core/components/form-field.component.md @@ -11,14 +11,14 @@ Represents a UI field in a form. ## Basic Usage -All form field editors (aka widgets) on a [`Form`](../../../lib/process-services/task-list/models/form.model.ts) are rendered by means of a [`FormFieldComponent`](../../core/components/form-field.component.md) +All form field editors (aka widgets) on a [`Form`](../../../lib/process-services/src/lib/task-list/models/form.model.ts) are rendered by means of a [`FormFieldComponent`](../../core/components/form-field.component.md) that takes an instance of a [`FormFieldModel`](../../core/models/form-field.model.md): ```html ``` -This component depends on the [`FormRenderingService`](../../core/services/form-rendering.service.md) to map the [`FormFieldModel`](../../core/models/form-field.model.md) to a [`Form`](../../../lib/process-services/task-list/models/form.model.ts) Field UI component +This component depends on the [`FormRenderingService`](../../core/services/form-rendering.service.md) to map the [`FormFieldModel`](../../core/models/form-field.model.md) to a [`Form`](../../../lib/process-services/src/lib/task-list/models/form.model.ts) Field UI component based on the field type or the metadata information. ## Class members @@ -38,8 +38,8 @@ uses `` components to render the form fields. Forms defined in APS have the following default mappings for the form fields: -| _APS [`Form`](../../../lib/process-services/task-list/models/form.model.ts) Designer_ Widget | Field Type | Component Type | -| -------------------------------------------------------------------------------------------- | ---------- | -------------- | +| _APS [`Form`](../../../lib/process-services/src/lib/task-list/models/form.model.ts) Designer_ Widget | Field Type | Component Type | +| ---------------------------------------------------------------------------------------------------- | ---------- | -------------- | | Text | text | [`TextWidgetComponent`](../../../lib/core/form/components/widgets/text/text.widget.ts) | | Multi-line text | multi-line-text | [`MultilineTextWidgetComponentComponent`](../../../lib/core/form/components/widgets/multiline-text/multiline-text.widget.ts) | | Number | integer | [`NumberWidgetComponent`](../../../lib/core/form/components/widgets/number/number.widget.ts) | diff --git a/docs/core/components/json-cell.component.md b/docs/core/components/json-cell.component.md index 803685a6c7..b1874f0ef0 100644 --- a/docs/core/components/json-cell.component.md +++ b/docs/core/components/json-cell.component.md @@ -44,6 +44,7 @@ You can specify the cell inside the `app.config.json` file: | column | [`DataColumn`](../../../lib/core/datatable/data/data-column.model.ts) | | Data that defines the column. | | copyContent | `boolean` | | Enables/disables a [Clipboard directive](../../core/directives/clipboard.directive.md) to allow copying of the cell's content. | | data | [`DataTableAdapter`](../../../lib/core/datatable/data/datatable-adapter.ts) | | Data table adapter instance. | +| editable | `boolean` | false | Editable JSON. | | row | [`DataRow`](../../../lib/core/datatable/data/data-row.model.ts) | | Data that defines the row. | | tooltip | `string` | | Text for the cell's tooltip. | diff --git a/docs/core/components/login.component.md b/docs/core/components/login.component.md index bdfb5f3847..bfd1a1d209 100644 --- a/docs/core/components/login.component.md +++ b/docs/core/components/login.component.md @@ -334,6 +334,18 @@ must contain the full URI value: > In the default ADF application configurations the `silent-refresh.html` file > gets automatically copied to the application output when building for production. +#### Public urls + +To enable public accessible urls, that don't need authentication, these must be defined using `publicUrls` property. The list supports absolute urls or partial urls that are valid [minimatch](https://github.com/isaacs/minimatch#readme) patterns + +```json +{ + ... + "publicUrls": ["http://
/my-app/some/path", "**/my-app/*/path"] + ... +} +``` + ### Kerberos Setting the `withCredentials` property to true in the `auth` section of diff --git a/docs/core/components/start-form.component.md b/docs/core/components/start-form.component.md index 7d89c07f0d..817a8dec94 100644 --- a/docs/core/components/start-form.component.md +++ b/docs/core/components/start-form.component.md @@ -5,9 +5,9 @@ Status: Active Last reviewed: 2018-06-08 --- -# [Start Form component](../../../lib/process-services/form/start-form.component.ts "Defined in start-form.component.ts") +# [Start Form component](../../../lib/process-services/src/lib/form/start-form.component.ts "Defined in start-form.component.ts") -Displays the Start [`Form`](../../../lib/process-services/task-list/models/form.model.ts) for a process. +Displays the Start [`Form`](../../../lib/process-services/src/lib/task-list/models/form.model.ts) for a process. ![Start Form screenshot](../../docassets/images/ProcessStartForm.png) @@ -66,7 +66,7 @@ Displays the Start [`Form`](../../../lib/process-services/task-list/models/form. ## Details -The [Start Process component](../../process-services/components/start-process.component.md) uses the Start [`Form`](../../../lib/process-services/task-list/models/form.model.ts) component +The [Start Process component](../../process-services/components/start-process.component.md) uses the Start [`Form`](../../../lib/process-services/src/lib/task-list/models/form.model.ts) component to display the [start form](http://docs.alfresco.com/process-services1.6/topics/none_start_event.html) for the process. diff --git a/docs/core/components/viewer.component.md b/docs/core/components/viewer.component.md index 3d917e4c7c..5c43d2e5b3 100644 --- a/docs/core/components/viewer.component.md +++ b/docs/core/components/viewer.component.md @@ -89,7 +89,7 @@ See the [Custom layout](#custom-layout) section for full details of all availabl | canNavigateNext | `boolean` | true | Toggles the next (">") button. Requires `allowNavigate` to be enabled. | | displayName | `string` | | Specifies the name of the file when it is not available from the URL. | | fileName | `string` | | Content filename. | -| maxRetries | `number` | 10 | Number of times the Viewer will retry fetching content Rendition. There is a delay of at least one second between attempts. | +| maxRetries | `number` | 30 | Number of times the Viewer will retry fetching content Rendition. There is a delay of at least one second between attempts. | | mimeType | `string` | | MIME type of the file content (when not determined by the filename extension). | | nodeId | `string` | null | [Node](https://github.com/Alfresco/alfresco-js-api/blob/development/src/api/content-rest-api/docs/Node.md) Id of the file to load. | | overlayMode | `boolean` | false | If `true` then show the Viewer as a full page over the current content. Otherwise fit inside the parent div. | @@ -110,9 +110,9 @@ See the [Custom layout](#custom-layout) section for full details of all availabl | ---- | ---- | ----------- | | extensionChange | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`` | Emitted when the filename extension changes. | | goBack | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`<`[`BaseEvent`](../../../lib/core/events/base.event.ts)`>` | Emitted when user clicks the 'Back' button. | -| invalidSharedLink | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`` | Emitted when the shared link used is not valid. | -| navigateBefore | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`` | Emitted when user clicks 'Navigate Before' ("<") button. | -| navigateNext | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`` | Emitted when user clicks 'Navigate Next' (">") button. | +| invalidSharedLink | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`<>` | Emitted when the shared link used is not valid. | +| navigateBefore | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`<>` | Emitted when user clicks 'Navigate Before' ("<") button. | +| navigateNext | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`<>` | Emitted when user clicks 'Navigate Next' (">") button. | | print | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`<`[`BaseEvent`](../../../lib/core/events/base.event.ts)`>` | Emitted when user clicks the 'Print' button. | | showViewerChange | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`` | Emitted when the viewer is shown or hidden. | diff --git a/docs/core/dialogs/edit-json.dialog.md b/docs/core/dialogs/edit-json.dialog.md new file mode 100644 index 0000000000..f4d61ca234 --- /dev/null +++ b/docs/core/dialogs/edit-json.dialog.md @@ -0,0 +1,32 @@ +--- +Title: Edit JSON Dialog +Added: v3.5.0 +Status: Active +Last reviewed: 2019-09-17 +--- + +# [Edit JSON Dialog](../../../ "Defined in ") + +Allows a user to preview or edit a JSON content in a dialog. + +## Basic usage + +```ts +import { EditJsonDialogSettings, EditJsonDialogComponent } from '@alfresco/adf-core'; + +const settings: EditJsonDialogSettings = { + title: 'Edit Json', + editable: true, + value: `{ "hello": "world" }` +}; + +this.dialog.open(EditJsonDialogComponent, { + data: settings, + minWidth: '50%', + minHeight: '50%' +}) +.afterClosed() +.subscribe((value: string) => { + // do something with the updated value +}); +``` diff --git a/docs/core/interfaces/form-field-validator.interface.md b/docs/core/interfaces/form-field-validator.interface.md index 5c56f29c36..57f14d59ed 100644 --- a/docs/core/interfaces/form-field-validator.interface.md +++ b/docs/core/interfaces/form-field-validator.interface.md @@ -6,7 +6,7 @@ Status: Active # [FormFieldValidator interface](../../../lib/core/form/components/widgets/core/form-field-validator.ts "Defined in form-field-validator.ts") -Defines how the input fields of [`Form`](../../../lib/process-services/task-list/models/form.model.ts) and Task Details components are validated. +Defines how the input fields of [`Form`](../../../lib/process-services/src/lib/task-list/models/form.model.ts) and Task Details components are validated. ## Basic Usage @@ -73,7 +73,7 @@ Several validator classes are predefined for you to use: | [`MinDateFieldValidator`](../../../lib/core/form/components/widgets/core/form-field-validator.ts) | Date within a field occurs after a certain starting point | | [`MaxDateFieldValidator`](../../../lib/core/form/components/widgets/core/form-field-validator.ts) | Date within a field occurs before a certain end point | -The `FORM_FIELD_VALIDATORS` array contains an instance of each of these classes. You can assign this to the `fieldValidators` property of a [`Form`](../../../lib/process-services/task-list/models/form.model.ts) or [Task Details component](../../process-services/components/task-details.component.md) to enable standard validation. +The `FORM_FIELD_VALIDATORS` array contains an instance of each of these classes. You can assign this to the `fieldValidators` property of a [`Form`](../../../lib/process-services/src/lib/task-list/models/form.model.ts) or [Task Details component](../../process-services/components/task-details.component.md) to enable standard validation. ### Custom validators @@ -128,7 +128,7 @@ export class AppComponent { } ``` -You can now use the 'fieldValidators' property of the [`Form`](../../../lib/process-services/task-list/models/form.model.ts) or Task Details components to assign your +You can now use the 'fieldValidators' property of the [`Form`](../../../lib/process-services/src/lib/task-list/models/form.model.ts) or Task Details components to assign your custom validator set: ```html diff --git a/docs/core/models/form-field.model.md b/docs/core/models/form-field.model.md index d116215d0c..7ce0df421f 100644 --- a/docs/core/models/form-field.model.md +++ b/docs/core/models/form-field.model.md @@ -7,7 +7,7 @@ Last reviewed: 2018-03-20 # [Form Field model](../../../lib/core/form/components/widgets/core/form-field.model.ts "Defined in form-field.model.ts") -Contains the value and metadata for a field of a [`Form`](../../../lib/process-services/task-list/models/form.model.ts) component. +Contains the value and metadata for a field of a [`Form`](../../../lib/process-services/src/lib/task-list/models/form.model.ts) component. ## Properties @@ -67,7 +67,7 @@ example, the `currency` property holds the currency symbol to be displayed next ### Validation -A [`Form`](../../../lib/process-services/task-list/models/form.model.ts) or [Task Details](../../process-services/components/task-details.component.md) component can +A [`Form`](../../../lib/process-services/src/lib/task-list/models/form.model.ts) or [Task Details](../../process-services/components/task-details.component.md) component can be supplied with a set of validator objects. Each validator applies a particular kind of check to a field. A number of [`FormFieldModel`](../../core/models/form-field.model.md) properties are used by validators. For example, `minValue` and `maxValue` are used to check that a numeric value falls within an diff --git a/docs/core/services/card-item-types.service.md b/docs/core/services/card-item-types.service.md index 8da233dd35..4673745340 100644 --- a/docs/core/services/card-item-types.service.md +++ b/docs/core/services/card-item-types.service.md @@ -20,7 +20,7 @@ Maps type names to field component types for the [Card View component](../compon - **Returns** [`DynamicComponentResolveFunction`](../../../lib/core/services/dynamic-component-mapper.service.ts) - Resolver function - **resolveComponentType**(model: [`DynamicComponentModel`](../../../lib/core/services/dynamic-component-mapper.service.ts), defaultValue: `Type<__type>` = `this.defaultValue`): `Type<__type>`
Finds the component type that is needed to render a form field. - - _model:_ [`DynamicComponentModel`](../../../lib/core/services/dynamic-component-mapper.service.ts) - [Form](../../../lib/process-services/task-list/models/form.model.ts) field model for the field to render + - _model:_ [`DynamicComponentModel`](../../../lib/core/services/dynamic-component-mapper.service.ts) - [Form](../../../lib/process-services/src/lib/task-list/models/form.model.ts) field model for the field to render - _defaultValue:_ `Type<__type>` - Default type returned for field types that are not yet mapped. - **Returns** `Type<__type>` - Component type - **setComponentTypeResolver**(type: `string`, resolver: [`DynamicComponentResolveFunction`](../../../lib/core/services/dynamic-component-mapper.service.ts), override: `boolean` = `true`)
diff --git a/docs/core/services/form-rendering.service.md b/docs/core/services/form-rendering.service.md index 011b850746..28bad282c7 100644 --- a/docs/core/services/form-rendering.service.md +++ b/docs/core/services/form-rendering.service.md @@ -20,7 +20,7 @@ Maps a form field type string onto the corresponding form [widget component](../ - **Returns** [`DynamicComponentResolveFunction`](../../../lib/core/services/dynamic-component-mapper.service.ts) - Resolver function - **resolveComponentType**(model: [`DynamicComponentModel`](../../../lib/core/services/dynamic-component-mapper.service.ts), defaultValue: `Type<__type>` = `this.defaultValue`): `Type<__type>`
Finds the component type that is needed to render a form field. - - _model:_ [`DynamicComponentModel`](../../../lib/core/services/dynamic-component-mapper.service.ts) - [Form](../../../lib/process-services/task-list/models/form.model.ts) field model for the field to render + - _model:_ [`DynamicComponentModel`](../../../lib/core/services/dynamic-component-mapper.service.ts) - [Form](../../../lib/process-services/src/lib/task-list/models/form.model.ts) field model for the field to render - _defaultValue:_ `Type<__type>` - Default type returned for field types that are not yet mapped. - **Returns** `Type<__type>` - Component type - **setComponentTypeResolver**(type: `string`, resolver: [`DynamicComponentResolveFunction`](../../../lib/core/services/dynamic-component-mapper.service.ts), override: `boolean` = `true`)
@@ -31,9 +31,9 @@ Maps a form field type string onto the corresponding form [widget component](../ ## Details -The [`Form`](../../../lib/process-services/task-list/models/form.model.ts) Field component uses this service to choose which widget to use to render an instance of a -form field. The [`Form`](../../../lib/process-services/task-list/models/form.model.ts) Field model stores the field type name as a string (see the table below). -The [`Form`](../../../lib/process-services/task-list/models/form.model.ts) Rendering service maintains a mapping between each type name and +The [`Form`](../../../lib/process-services/src/lib/task-list/models/form.model.ts) Field component uses this service to choose which widget to use to render an instance of a +form field. The [`Form`](../../../lib/process-services/src/lib/task-list/models/form.model.ts) Field model stores the field type name as a string (see the table below). +The [`Form`](../../../lib/process-services/src/lib/task-list/models/form.model.ts) Rendering service maintains a mapping between each type name and a corresponding [`DynamicComponentResolveFunction`](../../../lib/core/services/dynamic-component-mapper.service.ts). The function takes a [`FormFieldModel`](../../core/models/form-field.model.md) object as its argument and uses the data from the object to determine which widget should be used to render the field. @@ -60,7 +60,7 @@ formRenderingService.setComponentTypeResolver('text', customResolver, true); ### Default type mapping -The [`Form`](../../../lib/process-services/task-list/models/form.model.ts) Rendering service is initialized with the mapping shown in the table below: +The [`Form`](../../../lib/process-services/src/lib/task-list/models/form.model.ts) Rendering service is initialized with the mapping shown in the table below: | Stencil name | Field type string | Component type | | ------------ | ----------------- | -------------- | diff --git a/docs/core/services/form.service.md b/docs/core/services/form.service.md index 4bf16d9da4..ba93f4859e 100644 --- a/docs/core/services/form.service.md +++ b/docs/core/services/form.service.md @@ -53,15 +53,15 @@ class MyComponent { ### Methods - `parseForm(json: any, data?:`[`FormValues,`](../../../lib/core/form/components/widgets/core/form-values.ts)`readOnly: boolean = false):`[`FormModel`](../../../lib/core/form/components/widgets/core/form.model.ts) - Parses JSON data to create a corresponding [`Form`](../../../lib/process-services/task-list/models/form.model.ts) model. + Parses JSON data to create a corresponding [`Form`](../../../lib/process-services/src/lib/task-list/models/form.model.ts) model. - `json` - JSON to create the form - `data` - (Optional) Values for the form fields - `readOnly` - Should the form fields be read-only? - `createFormFromANode(formName: string):`[`Observable`](http://reactivex.io/documentation/observable.html)`` - Create a [`Form`](../../../lib/process-services/task-list/models/form.model.ts) with a field for each metadata property. + Create a [`Form`](../../../lib/process-services/src/lib/task-list/models/form.model.ts) with a field for each metadata property. - `formName` - Name of the new form - `createForm(formName: string):`[`Observable`](http://reactivex.io/documentation/observable.html)`` - Create a [`Form`](../../../lib/process-services/task-list/models/form.model.ts). + Create a [`Form`](../../../lib/process-services/src/lib/task-list/models/form.model.ts). - `formName` - Name of the new form - `saveForm(formId: string, formModel: FormDefinitionModel):`[`Observable`](http://reactivex.io/documentation/observable.html)`` Saves a form. @@ -86,20 +86,20 @@ class MyComponent { Gets a task. - `taskId` - Task Id - `saveTaskForm(taskId: string, formValues: FormValues):`[`Observable`](http://reactivex.io/documentation/observable.html)`` - Save Task [`Form`](../../../lib/process-services/task-list/models/form.model.ts). + Save Task [`Form`](../../../lib/process-services/src/lib/task-list/models/form.model.ts). - `taskId` - Task Id - - `formValues` - [`Form`](../../../lib/process-services/task-list/models/form.model.ts) Values + - `formValues` - [`Form`](../../../lib/process-services/src/lib/task-list/models/form.model.ts) Values - `completeTaskForm(taskId: string, formValues:`[`FormValues,`](../../../lib/core/form/components/widgets/core/form-values.ts)`outcome?: string):`[`Observable`](http://reactivex.io/documentation/observable.html)`` - Complete Task [`Form`](../../../lib/process-services/task-list/models/form.model.ts) + Complete Task [`Form`](../../../lib/process-services/src/lib/task-list/models/form.model.ts) - `taskId` - Task Id - - `formValues` - [`Form`](../../../lib/process-services/task-list/models/form.model.ts) Values - - `outcome` - (Optional) [`Form`](../../../lib/process-services/task-list/models/form.model.ts) Outcome + - `formValues` - [`Form`](../../../lib/process-services/src/lib/task-list/models/form.model.ts) Values + - `outcome` - (Optional) [`Form`](../../../lib/process-services/src/lib/task-list/models/form.model.ts) Outcome - `getTaskForm(taskId: string):`[`Observable`](http://reactivex.io/documentation/observable.html)`` - Get [`Form`](../../../lib/process-services/task-list/models/form.model.ts) related to a taskId + Get [`Form`](../../../lib/process-services/src/lib/task-list/models/form.model.ts) related to a taskId - `taskId` - Task Id - `getFormDefinitionById(formId: string):`[`Observable`](http://reactivex.io/documentation/observable.html)`` - Get [`Form`](../../../lib/process-services/task-list/models/form.model.ts) Definition - - `formId` - [`Form`](../../../lib/process-services/task-list/models/form.model.ts) Id + Get [`Form`](../../../lib/process-services/src/lib/task-list/models/form.model.ts) Definition + - `formId` - [`Form`](../../../lib/process-services/src/lib/task-list/models/form.model.ts) Id - `getFormDefinitionByName(name: string):`[`Observable`](http://reactivex.io/documentation/observable.html)`` Returns form definition with a given name. - `name` - The form name @@ -137,7 +137,7 @@ class MyComponent { Gets a list of workflow users. - `filter` - Filter to select specific users - `groupId` - (Optional) Group ID for the search -- [`getWorkflowGroups(filter: string, groupId?: string): Observable`](../../../lib/process-services-cloud/src/lib/group/models/group.model.ts) +- [`getWorkflowGroups(filter: string, groupId?: string): Observable`](../../../lib/core/form/components/widgets/core/group.model.ts) Gets a list of groups in a workflow. - `filter` - Filter to select specific groups - `groupId` - (Optional) Group ID for the search diff --git a/docs/core/services/identity-group.service.md b/docs/core/services/identity-group.service.md new file mode 100644 index 0000000000..2c13202652 --- /dev/null +++ b/docs/core/services/identity-group.service.md @@ -0,0 +1,75 @@ +--- +Title: Identity Group service +Added: v3.4.0 +Status: Active +Last reviewed: 2019-07-13 +--- + +# [Identity Group service](../../../lib/core/userinfo/services/identity-group.service.ts "Defined in identity-group.service.ts") + +Performs CRUD operations on identity groups. + +## Class members + +### Methods + +- **checkGroupHasAnyClientAppRole**(groupId: `string`, clientId: `string`, roleNames: `string[]`): [`Observable`](http://reactivex.io/documentation/observable.html)``
+ Check if a group has any of the client app roles in the supplied list. + - _groupId:_ `string` - Id of the target group + - _clientId:_ `string` - Id of the client + - _roleNames:_ `string[]` - Array of role names to check + - **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`` - True if the group has one or more of the roles, false otherwise +- **checkGroupHasClientApp**(groupId: `string`, clientId: `string`): [`Observable`](http://reactivex.io/documentation/observable.html)``
+ Checks if a group has a client app. + - _groupId:_ `string` - Id of the target group + - _clientId:_ `string` - Id of the client + - **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`` - True if the group has the client app, false otherwise +- **checkGroupHasRole**(groupId: `string`, roleNames: `string[]`): [`Observable`](http://reactivex.io/documentation/observable.html)``
+ Check that a group has one or more roles from the supplied list. + - _groupId:_ `string` - Id of the target group + - _roleNames:_ `string[]` - Array of role names + - **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`` - True if the group has one or more of the roles, false otherwise +- **createGroup**(newGroup: [`IdentityGroupModel`](../../../lib/core/userinfo/models/identity-group.model.ts)): [`Observable`](http://reactivex.io/documentation/observable.html)``
+ Creates new group. + - _newGroup:_ [`IdentityGroupModel`](../../../lib/core/userinfo/models/identity-group.model.ts) - Object of containing the new group details. + - **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`` - Empty response when the group created. +- **deleteGroup**(groupId: `string`): [`Observable`](http://reactivex.io/documentation/observable.html)``
+ Deletes Group. + - _groupId:_ `string` - Id of the group. + - **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`` - Empty response when the group deleted. +- **findGroupsByName**(searchParams: [`IdentityGroupSearchParam`](../../../lib/core/userinfo/models/identity-group.model.ts)): [`Observable`](http://reactivex.io/documentation/observable.html)``
+ Finds groups filtered by name. + - _searchParams:_ [`IdentityGroupSearchParam`](../../../lib/core/userinfo/models/identity-group.model.ts) - Object containing the name filter string + - **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`` - List of group information +- **getClientIdByApplicationName**(applicationName: `string`): [`Observable`](http://reactivex.io/documentation/observable.html)``
+ Gets the client Id using the app name. + - _applicationName:_ `string` - Name of the app + - **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`` - client Id string +- **getClientRoles**(groupId: `string`, clientId: `string`): [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`IdentityRoleModel`](../../../lib/core/userinfo/models/identity-role.model.ts)`[]>`
+ Gets client roles. + - _groupId:_ `string` - Id of the target group + - _clientId:_ `string` - Id of the client + - **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`IdentityRoleModel`](../../../lib/core/userinfo/models/identity-role.model.ts)`[]>` - List of roles +- **getGroupRoles**(groupId: `string`): [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`IdentityRoleModel`](../../../lib/core/userinfo/models/identity-role.model.ts)`[]>`
+ Gets details for a specified group. + - _groupId:_ `string` - Id of the target group + - **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`IdentityRoleModel`](../../../lib/core/userinfo/models/identity-role.model.ts)`[]>` - Group details +- **getGroups**(): [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`IdentityGroupModel`](../../../lib/core/userinfo/models/identity-group.model.ts)`[]>`
+ Gets all groups. + - **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`IdentityGroupModel`](../../../lib/core/userinfo/models/identity-group.model.ts)`[]>` - Array of group information objects +- **getTotalGroupsCount**(): [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`IdentityGroupCountModel`](../../../lib/core/userinfo/models/identity-group.model.ts)`>`
+ Gets groups total count. + - **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`IdentityGroupCountModel`](../../../lib/core/userinfo/models/identity-group.model.ts)`>` - Number of groups count. +- **queryGroups**(requestQuery: [`IdentityGroupQueryCloudRequestModel`](../../../lib/core/userinfo/models/identity-group.model.ts)): [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`IdentityGroupQueryResponse`](../../../lib/core/userinfo/models/identity-group.model.ts)`>`
+ Queries groups. + - _requestQuery:_ [`IdentityGroupQueryCloudRequestModel`](../../../lib/core/userinfo/models/identity-group.model.ts) - + - **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`IdentityGroupQueryResponse`](../../../lib/core/userinfo/models/identity-group.model.ts)`>` - Array of user information objects +- **updateGroup**(groupId: `string`, updatedGroup: [`IdentityGroupModel`](../../../lib/core/userinfo/models/identity-group.model.ts)): [`Observable`](http://reactivex.io/documentation/observable.html)``
+ Updates group details. + - _groupId:_ `string` - Id of the targeted group. + - _updatedGroup:_ [`IdentityGroupModel`](../../../lib/core/userinfo/models/identity-group.model.ts) - Object of containing the group details + - **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`` - Empty response when the group updated. + +## See also + +- [Identity user service](../../core/userInfo/services/identity-user.service.md) diff --git a/docs/core/services/notification.service.md b/docs/core/services/notification.service.md index 5fc8204a19..c8f90ec853 100644 --- a/docs/core/services/notification.service.md +++ b/docs/core/services/notification.service.md @@ -17,10 +17,11 @@ Shows a notification message with optional feedback. - **dismissSnackMessageAction**()
dismiss the notification snackbar -- **openSnackMessage**(message: `string`, config?: `number|MatSnackBarConfig`): [`MatSnackBarRef`](https://material.angular.io/components/snack-bar/overview)``
+- **openSnackMessage**(message: `string`, config?: `number|MatSnackBarConfig`, translationArgs?: `any`): [`MatSnackBarRef`](https://material.angular.io/components/snack-bar/overview)``
Opens a SnackBar notification to show a message. - _message:_ `string` - The message (or resource key) to show. - _config:_ `number|MatSnackBarConfig` - (Optional) Time before notification disappears after being shown or MatSnackBarConfig object + - _translationArgs:_ `any` - (Optional) The interpolation parameters to add for the translation - **Returns** [`MatSnackBarRef`](https://material.angular.io/components/snack-bar/overview)`` - Information/control object for the SnackBar - **openSnackMessageAction**(message: `string`, action: `string`, config?: `number|MatSnackBarConfig`): [`MatSnackBarRef`](https://material.angular.io/components/snack-bar/overview)``
Opens a SnackBar notification with a message and a response button. @@ -33,10 +34,11 @@ Shows a notification message with optional feedback. - _message:_ `string` - Text message or translation key for the message. - _action:_ `string` - (Optional) Action name - **Returns** [`MatSnackBarRef`](https://material.angular.io/components/snack-bar/overview)`` - -- **showInfo**(message: `string`, action?: `string`): [`MatSnackBarRef`](https://material.angular.io/components/snack-bar/overview)``
+- **showInfo**(message: `string`, action?: `string`, interpolateArgs?: `any`): [`MatSnackBarRef`](https://material.angular.io/components/snack-bar/overview)``
Rase info message - _message:_ `string` - Text message or translation key for the message. - _action:_ `string` - (Optional) Action name + - _interpolateArgs:_ `any` - (Optional) - **Returns** [`MatSnackBarRef`](https://material.angular.io/components/snack-bar/overview)`` - - **showWarning**(message: `string`, action?: `string`): [`MatSnackBarRef`](https://material.angular.io/components/snack-bar/overview)``
Rase warning message diff --git a/docs/core/widgets/content.widget.md b/docs/core/widgets/content.widget.md index b437d00252..142a634450 100644 --- a/docs/core/widgets/content.widget.md +++ b/docs/core/widgets/content.widget.md @@ -29,7 +29,7 @@ Shows the content preview. | Name | Type | Description | | ---- | ---- | ----------- | -| contentClick | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`` | Emitted when the content is clicked. | +| contentClick | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`<>` | Emitted when the content is clicked. | | contentLoaded | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`` | Emitted when the content has loaded. | | error | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`` | Emitted when an error occurs. | | thumbnailLoaded | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`` | Emitted when the thumbnail has loaded. | diff --git a/docs/docassets/images/action-menu-on-process-list.png b/docs/docassets/images/action-menu-on-process-list.png new file mode 100644 index 0000000000..bf16ea6b6a Binary files /dev/null and b/docs/docassets/images/action-menu-on-process-list.png differ diff --git a/docs/docassets/images/context-menu-on-process-list.png b/docs/docassets/images/context-menu-on-process-list.png new file mode 100644 index 0000000000..2ea60e48a3 Binary files /dev/null and b/docs/docassets/images/context-menu-on-process-list.png differ diff --git a/docs/docassets/images/task-list-cloud-action-menu.png b/docs/docassets/images/task-list-cloud-action-menu.png new file mode 100644 index 0000000000..e8d02fdbf0 Binary files /dev/null and b/docs/docassets/images/task-list-cloud-action-menu.png differ diff --git a/docs/docassets/images/task-list-cloud-context-menu.png b/docs/docassets/images/task-list-cloud-context-menu.png new file mode 100644 index 0000000000..e07f08505a Binary files /dev/null and b/docs/docassets/images/task-list-cloud-context-menu.png differ diff --git a/docs/insights/components/analytics-generator.component.md b/docs/insights/components/analytics-generator.component.md index eb2beda143..7b05b473ba 100644 --- a/docs/insights/components/analytics-generator.component.md +++ b/docs/insights/components/analytics-generator.component.md @@ -30,5 +30,5 @@ Generates and shows charts | Name | Type | Description | | ---- | ---- | ----------- | -| error | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`` | | -| success | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`` | | +| error | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`<>` | | +| success | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`<>` | | diff --git a/docs/insights/components/analytics-report-list.component.md b/docs/insights/components/analytics-report-list.component.md index af90001246..6c8104b726 100644 --- a/docs/insights/components/analytics-report-list.component.md +++ b/docs/insights/components/analytics-report-list.component.md @@ -30,6 +30,6 @@ Shows a list of all available reports | Name | Type | Description | | ---- | ---- | ----------- | -| error | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`` | | +| error | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`<>` | | | reportClick | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`<`[`ReportParametersModel`](../../../lib/insights/diagram/models/report/reportParameters.model.ts)`>` | | -| success | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`` | | +| success | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`<>` | | diff --git a/docs/insights/components/analytics.component.md b/docs/insights/components/analytics.component.md index ceb22b8625..2914fc6536 100644 --- a/docs/insights/components/analytics.component.md +++ b/docs/insights/components/analytics.component.md @@ -33,6 +33,6 @@ Shows the charts related to the reportId passed as input | Name | Type | Description | | ---- | ---- | ----------- | -| editReport | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`` | | -| reportDeleted | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`` | | -| reportSaved | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`` | | +| editReport | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`<>` | | +| reportDeleted | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`<>` | | +| reportSaved | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`<>` | | diff --git a/docs/insights/components/diagram.component.md b/docs/insights/components/diagram.component.md index cd6f0990cb..495e4f8463 100644 --- a/docs/insights/components/diagram.component.md +++ b/docs/insights/components/diagram.component.md @@ -44,5 +44,5 @@ The below component shows the diagram of a running process instance with the act | Name | Type | Description | | ---- | ---- | ----------- | -| error | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`` | | -| success | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`` | | +| error | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`<>` | | +| success | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`<>` | | diff --git a/docs/license-info/README.md b/docs/license-info/README.md index cb4cde9a2b..30c1c3f942 100644 --- a/docs/license-info/README.md +++ b/docs/license-info/README.md @@ -7,6 +7,7 @@ Github only: true The pages linked below contain the licenses for all third party dependencies of ADF. +- [ADF v3.4](license-info-v3.5.0.md) - [ADF v3.4](license-info-v3.4.0.md) - [ADF v3.3](license-info-v3.3.0.md) - [ADF v3.2](license-info-v3.2.0.md) diff --git a/docs/license-info/license-info-v3.5.0.md b/docs/license-info/license-info-v3.5.0.md new file mode 100644 index 0000000000..10a3451a7b --- /dev/null +++ b/docs/license-info/license-info-v3.5.0.md @@ -0,0 +1,485 @@ +--- +Title: License info, Alfresco Angular components 3.5.0 +--- + +# License information for Alfresco Angular components 3.5.0 + +This page lists all third party libraries that ADF 3.5.0 depends on. + +## Libraries + +| Name | Version | License | +| --- | --- | --- | +| [@alfresco/adf-content-services](https://github.com/Alfresco/alfresco-ng2-components) | 3.4.0 | [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0) | +| [@alfresco/adf-core](https://github.com/Alfresco/alfresco-ng2-components) | 3.4.0 | [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0) | +| [@alfresco/adf-extensions](https://github.com/Alfresco/alfresco-ng2-components) | 3.4.0 | [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0) | +| [@alfresco/adf-insights](https://github.com/Alfresco/alfresco-ng2-components) | 3.4.0 | [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0) | +| [@alfresco/adf-process-services-cloud](https://github.com/Alfresco/alfresco-ng2-components) | 3.4.0 | [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0) | +| [@alfresco/adf-process-services](https://github.com/Alfresco/alfresco-ng2-components) | 3.4.0 | [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0) | +| [@alfresco/adf-testing](https://github.com/Alfresco/alfresco-ng2-components) | 3.4.0 | [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0) | +| [@alfresco/js-api](https://github.com/Alfresco/alfresco-js-api) | 3.5.0-beta2 | [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0) | +| [@angular/animations](https://github.com/angular/angular) | 7.2.15 | [MIT](http://www.opensource.org/licenses/MIT) | +| [@angular/cdk](https://github.com/angular/material2) | 7.3.7 | [MIT](http://www.opensource.org/licenses/MIT) | +| [@angular/common](https://github.com/angular/angular) | 7.2.15 | [MIT](http://www.opensource.org/licenses/MIT) | +| [@angular/compiler](https://github.com/angular/angular) | 7.2.15 | [MIT](http://www.opensource.org/licenses/MIT) | +| [@angular/core](https://github.com/angular/angular) | 7.2.15 | [MIT](http://www.opensource.org/licenses/MIT) | +| [@angular/flex-layout](https://github.com/angular/flex-layout) | 7.0.0-beta.24 | [MIT](http://www.opensource.org/licenses/MIT) | +| [@angular/forms](https://github.com/angular/angular) | 7.2.15 | [MIT](http://www.opensource.org/licenses/MIT) | +| [@angular/http](https://github.com/angular/angular) | 7.2.15 | [MIT](http://www.opensource.org/licenses/MIT) | +| [@angular/material-moment-adapter](https://github.com/angular/material2) | 7.3.7 | [MIT](http://www.opensource.org/licenses/MIT) | +| [@angular/material](https://github.com/angular/material2) | 7.3.7 | [MIT](http://www.opensource.org/licenses/MIT) | +| [@angular/platform-browser-dynamic](https://github.com/angular/angular) | 7.2.15 | [MIT](http://www.opensource.org/licenses/MIT) | +| [@angular/platform-browser](https://github.com/angular/angular) | 7.2.15 | [MIT](http://www.opensource.org/licenses/MIT) | +| [@angular/router](https://github.com/angular/angular) | 7.2.15 | [MIT](http://www.opensource.org/licenses/MIT) | +| [@mat-datetimepicker/core](https://github.com/kuhnroyal/mat-datetimepicker) | 2.0.1 | [MIT](http://www.opensource.org/licenses/MIT) | +| [@mat-datetimepicker/moment](https://github.com/kuhnroyal/mat-datetimepicker) | 2.0.1 | [MIT](http://www.opensource.org/licenses/MIT) | +| [@ngx-translate/core](https://github.com/ngx-translate/core) | 11.0.1 | [MIT](http://www.opensource.org/licenses/MIT) | +| [@webassemblyjs/ast](https://github.com/xtuc/webassemblyjs) | 1.7.11 | [MIT](http://www.opensource.org/licenses/MIT) | +| [@webassemblyjs/floating-point-hex-parser](https://github.com/xtuc/webassemblyjs) | 1.7.11 | [MIT](http://www.opensource.org/licenses/MIT) | +| [@webassemblyjs/helper-api-error](https://github.com/xtuc/webassemblyjs) | 1.7.11 | [MIT](http://www.opensource.org/licenses/MIT) | +| [@webassemblyjs/helper-buffer](https://github.com/xtuc/webassemblyjs) | 1.7.11 | [MIT](http://www.opensource.org/licenses/MIT) | +| [@webassemblyjs/helper-code-frame](https://github.com/xtuc/webassemblyjs) | 1.7.11 | [MIT](http://www.opensource.org/licenses/MIT) | +| [@webassemblyjs/helper-fsm](https://github.com/xtuc/webassemblyjs) | 1.7.11 | [ISC](https://www.isc.org/downloads/software-support-policy/isc-license/) | +| [@webassemblyjs/helper-module-context](https://github.com/xtuc/webassemblyjs) | 1.7.11 | [MIT](http://www.opensource.org/licenses/MIT) | +| [@webassemblyjs/helper-wasm-bytecode](https://github.com/xtuc/webassemblyjs) | 1.7.11 | [MIT](http://www.opensource.org/licenses/MIT) | +| [@webassemblyjs/helper-wasm-section](https://github.com/xtuc/webassemblyjs) | 1.7.11 | [MIT](http://www.opensource.org/licenses/MIT) | +| [@webassemblyjs/ieee754](https://github.com/xtuc/webassemblyjs) | 1.7.11 | [MIT](http://www.opensource.org/licenses/MIT) | +| [@webassemblyjs/leb128](https://github.com/xtuc/webassemblyjs) | 1.7.11 | [MIT](http://www.opensource.org/licenses/MIT) | +| [@webassemblyjs/utf8](https://github.com/xtuc/webassemblyjs) | 1.7.11 | [MIT](http://www.opensource.org/licenses/MIT) | +| [@webassemblyjs/wasm-edit](https://github.com/xtuc/webassemblyjs) | 1.7.11 | [MIT](http://www.opensource.org/licenses/MIT) | +| [@webassemblyjs/wasm-gen](https://github.com/xtuc/webassemblyjs) | 1.7.11 | [MIT](http://www.opensource.org/licenses/MIT) | +| [@webassemblyjs/wasm-opt](https://github.com/xtuc/webassemblyjs) | 1.7.11 | [MIT](http://www.opensource.org/licenses/MIT) | +| [@webassemblyjs/wasm-parser](https://github.com/xtuc/webassemblyjs) | 1.7.11 | [MIT](http://www.opensource.org/licenses/MIT) | +| [@webassemblyjs/wast-parser](https://github.com/xtuc/webassemblyjs) | 1.7.11 | [MIT](http://www.opensource.org/licenses/MIT) | +| [@webassemblyjs/wast-printer](https://github.com/xtuc/webassemblyjs) | 1.7.11 | [MIT](http://www.opensource.org/licenses/MIT) | +| [@xtuc/ieee754](https://github.com/feross/ieee754) | 1.2.0 | [BSD-3-Clause](http://www.opensource.org/licenses/BSD-3-Clause) | +| [@xtuc/long](https://github.com/dcodeIO/long.js) | 4.2.1 | [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0) | +| [abbrev](https://github.com/isaacs/abbrev-js) | 1.1.1 | [ISC](https://www.isc.org/downloads/software-support-policy/isc-license/) | +| [acorn-dynamic-import](https://github.com/kesne/acorn-dynamic-import) | 4.0.0 | [MIT](http://www.opensource.org/licenses/MIT) | +| [acorn](https://github.com/acornjs/acorn) | 6.2.0 | [MIT](http://www.opensource.org/licenses/MIT) | +| [adf-monaco-extension](https://github.com/eromano/aca-monaco-extension) | 0.0.8 | UNKNOWN | +| [adf-tslint-rules](https://github.com/Alfresco/alfresco-ng2-components) | 0.0.6 | [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0) | +| [ajv-errors](https://github.com/epoberezkin/ajv-errors) | 1.0.1 | [MIT](http://www.opensource.org/licenses/MIT) | +| [ajv-keywords](https://github.com/epoberezkin/ajv-keywords) | 3.4.1 | [MIT](http://www.opensource.org/licenses/MIT) | +| [ajv](https://github.com/epoberezkin/ajv) | 6.10.1 | [MIT](http://www.opensource.org/licenses/MIT) | +| [alfresco-ng2-components](https://github.com/Alfresco/alfresco-ng2-components) | 3.5.0 | [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0) | +| [ansi-regex](https://github.com/chalk/ansi-regex) | 2.1.1 | [MIT](http://www.opensource.org/licenses/MIT) | +| [ansi-styles](https://github.com/chalk/ansi-styles) | 2.2.1 | [MIT](http://www.opensource.org/licenses/MIT) | +| [ansi-styles](https://github.com/chalk/ansi-styles) | 3.2.1 | [MIT](http://www.opensource.org/licenses/MIT) | +| [anymatch](https://github.com/micromatch/anymatch) | 2.0.0 | [ISC](https://www.isc.org/downloads/software-support-policy/isc-license/) | +| [app-root-path](https://github.com/inxilpro/node-app-root-path) | 2.0.1 | [MIT](http://www.opensource.org/licenses/MIT) | +| [app-root-path](https://github.com/inxilpro/node-app-root-path) | 2.2.1 | [MIT](http://www.opensource.org/licenses/MIT) | +| [aproba](https://github.com/iarna/aproba) | 1.2.0 | [ISC](https://www.isc.org/downloads/software-support-policy/isc-license/) | +| [are-we-there-yet](https://github.com/iarna/are-we-there-yet) | 1.1.5 | [ISC](https://www.isc.org/downloads/software-support-policy/isc-license/) | +| [argparse](https://github.com/nodeca/argparse) | 1.0.10 | [MIT](http://www.opensource.org/licenses/MIT) | +| [aria-query](https://github.com/A11yance/aria-query) | 3.0.0 | [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0) | +| [arr-diff](https://github.com/jonschlinkert/arr-diff) | 4.0.0 | [MIT](http://www.opensource.org/licenses/MIT) | +| [arr-flatten](https://github.com/jonschlinkert/arr-flatten) | 1.1.0 | [MIT](http://www.opensource.org/licenses/MIT) | +| [arr-union](https://github.com/jonschlinkert/arr-union) | 3.1.0 | [MIT](http://www.opensource.org/licenses/MIT) | +| [array-unique](https://github.com/jonschlinkert/array-unique) | 0.3.2 | [MIT](http://www.opensource.org/licenses/MIT) | +| [asn1.js](https://github.com/indutny/asn1.js) | 4.10.1 | [MIT](http://www.opensource.org/licenses/MIT) | +| [assert](https://github.com/browserify/commonjs-assert) | 1.5.0 | [MIT](http://www.opensource.org/licenses/MIT) | +| [assign-symbols](https://github.com/jonschlinkert/assign-symbols) | 1.0.0 | [MIT](http://www.opensource.org/licenses/MIT) | +| [ast-types-flow](https://github.com/kyldvs/ast-types-flow) | 0.0.7 | [ISC](https://www.isc.org/downloads/software-support-policy/isc-license/) | +| [async-each](https://github.com/paulmillr/async-each) | 1.0.3 | [MIT](http://www.opensource.org/licenses/MIT) | +| [asynckit](https://github.com/alexindigo/asynckit) | 0.4.0 | [MIT](http://www.opensource.org/licenses/MIT) | +| [atob](git://git.coolaj86.com/coolaj86/atob.js) | 2.1.2 | ([MIT](http://www.opensource.org/licenses/MIT) OR [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0)) | +| [axobject-query](https://github.com/A11yance/axobject-query) | 2.0.2 | [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0) | +| [babel-code-frame](https://github.com/babel/babel/tree/master/packages/babel-code-frame) | 6.26.0 | [MIT](http://www.opensource.org/licenses/MIT) | +| [balanced-match](https://github.com/juliangruber/balanced-match) | 1.0.0 | [MIT](http://www.opensource.org/licenses/MIT) | +| [base64-js](https://github.com/beatgammit/base64-js) | 1.3.0 | [MIT](http://www.opensource.org/licenses/MIT) | +| [base](https://github.com/node-base/base) | 0.11.2 | [MIT](http://www.opensource.org/licenses/MIT) | +| [big.js](https://github.com/MikeMcl/big.js) | 5.2.2 | [MIT](http://www.opensource.org/licenses/MIT) | +| [binary-extensions](https://github.com/sindresorhus/binary-extensions) | 1.13.1 | [MIT](http://www.opensource.org/licenses/MIT) | +| [bluebird](https://github.com/petkaantonov/bluebird) | 3.5.5 | [MIT](http://www.opensource.org/licenses/MIT) | +| [bn.js](https://github.com/indutny/bn.js) | 4.11.8 | [MIT](http://www.opensource.org/licenses/MIT) | +| [brace-expansion](https://github.com/juliangruber/brace-expansion) | 1.1.11 | [MIT](http://www.opensource.org/licenses/MIT) | +| [braces](https://github.com/micromatch/braces) | 2.3.2 | [MIT](http://www.opensource.org/licenses/MIT) | +| [brorand](https://github.com/indutny/brorand) | 1.1.0 | [MIT](http://www.opensource.org/licenses/MIT) | +| [browserify-aes](https://github.com/crypto-browserify/browserify-aes) | 1.2.0 | [MIT](http://www.opensource.org/licenses/MIT) | +| [browserify-cipher](https://github.com/crypto-browserify/browserify-cipher) | 1.0.1 | [MIT](http://www.opensource.org/licenses/MIT) | +| [browserify-des](https://github.com/crypto-browserify/browserify-des) | 1.0.2 | [MIT](http://www.opensource.org/licenses/MIT) | +| [browserify-rsa](https://github.com/crypto-browserify/browserify-rsa) | 4.0.1 | [MIT](http://www.opensource.org/licenses/MIT) | +| [browserify-sign](https://github.com/crypto-browserify/browserify-sign) | 4.0.4 | [ISC](https://www.isc.org/downloads/software-support-policy/isc-license/) | +| [browserify-zlib](https://github.com/devongovett/browserify-zlib) | 0.2.0 | [MIT](http://www.opensource.org/licenses/MIT) | +| [buffer-from](https://github.com/LinusU/buffer-from) | 1.1.1 | [MIT](http://www.opensource.org/licenses/MIT) | +| [buffer-xor](https://github.com/crypto-browserify/buffer-xor) | 1.0.3 | [MIT](http://www.opensource.org/licenses/MIT) | +| [buffer](https://github.com/feross/buffer) | 4.9.1 | [MIT](http://www.opensource.org/licenses/MIT) | +| [builtin-modules](https://github.com/sindresorhus/builtin-modules) | 1.1.1 | [MIT](http://www.opensource.org/licenses/MIT) | +| [builtin-status-codes](https://github.com/bendrucker/builtin-status-codes) | 3.0.0 | [MIT](http://www.opensource.org/licenses/MIT) | +| [cacache](https://github.com/zkat/cacache) | 11.3.3 | [ISC](https://www.isc.org/downloads/software-support-policy/isc-license/) | +| [cache-base](https://github.com/jonschlinkert/cache-base) | 1.0.1 | [MIT](http://www.opensource.org/licenses/MIT) | +| [chalk](https://github.com/chalk/chalk) | 1.1.3 | [MIT](http://www.opensource.org/licenses/MIT) | +| [chalk](https://github.com/chalk/chalk) | 2.4.2 | [MIT](http://www.opensource.org/licenses/MIT) | +| [chart.js](https://github.com/chartjs/Chart.js) | 2.5.0 | [MIT](http://www.opensource.org/licenses/MIT) | +| [chart.js](https://github.com/chartjs/Chart.js) | 2.8.0 | [MIT](http://www.opensource.org/licenses/MIT) | +| [chartjs-color-string](https://github.com/chartjs/chartjs-color-string) | 0.6.0 | [MIT](http://www.opensource.org/licenses/MIT) | +| [chartjs-color](https://github.com/chartjs/chartjs-color) | 2.3.0 | [MIT](http://www.opensource.org/licenses/MIT) | +| [chokidar](https://github.com/paulmillr/chokidar) | 2.0.4 | [MIT](http://www.opensource.org/licenses/MIT) | +| [chownr](https://github.com/isaacs/chownr) | 1.1.1 | [ISC](https://www.isc.org/downloads/software-support-policy/isc-license/) | +| [chownr](https://github.com/isaacs/chownr) | 1.1.2 | [ISC](https://www.isc.org/downloads/software-support-policy/isc-license/) | +| [chrome-trace-event](github.com:samccone/chrome-trace-event) | 1.0.2 | [MIT](http://www.opensource.org/licenses/MIT) | +| [cipher-base](https://github.com/crypto-browserify/cipher-base) | 1.0.4 | [MIT](http://www.opensource.org/licenses/MIT) | +| [class-utils](https://github.com/jonschlinkert/class-utils) | 0.3.6 | [MIT](http://www.opensource.org/licenses/MIT) | +| [classlist.js](https://github.com/eligrey/classList.js) | 1.1.20150312 | Public Domain | +| [code-point-at](https://github.com/sindresorhus/code-point-at) | 1.1.0 | [MIT](http://www.opensource.org/licenses/MIT) | +| [codelyzer](https://github.com/mgechev/codelyzer) | 5.0.0 | [MIT](http://www.opensource.org/licenses/MIT) | +| [collection-visit](https://github.com/jonschlinkert/collection-visit) | 1.0.0 | [MIT](http://www.opensource.org/licenses/MIT) | +| [color-convert](https://github.com/harthur/color-convert) | 0.5.3 | [MIT](http://www.opensource.org/licenses/MIT) | +| [color-convert](https://github.com/Qix-/color-convert) | 1.9.3 | [MIT](http://www.opensource.org/licenses/MIT) | +| [color-name](https://github.com/dfcreative/color-name) | 1.1.3 | [MIT](http://www.opensource.org/licenses/MIT) | +| [color-name](https://github.com/colorjs/color-name) | 1.1.4 | [MIT](http://www.opensource.org/licenses/MIT) | +| [combined-stream](https://github.com/felixge/node-combined-stream) | 1.0.8 | [MIT](http://www.opensource.org/licenses/MIT) | +| [commander](https://github.com/tj/commander.js) | 2.20.0 | [MIT](http://www.opensource.org/licenses/MIT) | +| [commondir](https://github.com/substack/node-commondir) | 1.0.1 | [MIT](http://www.opensource.org/licenses/MIT) | +| [component-emitter](https://github.com/component/emitter) | 1.3.0 | [MIT](http://www.opensource.org/licenses/MIT) | +| [concat-map](https://github.com/substack/node-concat-map) | 0.0.1 | [MIT](http://www.opensource.org/licenses/MIT) | +| [concat-stream](https://github.com/maxogden/concat-stream) | 1.6.2 | [MIT](http://www.opensource.org/licenses/MIT) | +| [console-browserify](https://github.com/Raynos/console-browserify) | 1.1.0 | [MIT](http://www.opensource.org/licenses/MIT) | +| [console-control-strings](https://github.com/iarna/console-control-strings) | 1.1.0 | [ISC](https://www.isc.org/downloads/software-support-policy/isc-license/) | +| [constants-browserify](https://github.com/juliangruber/constants-browserify) | 1.0.0 | [MIT](http://www.opensource.org/licenses/MIT) | +| [cookiejar](https://github.com/bmeck/node-cookiejar) | 2.1.2 | [MIT](http://www.opensource.org/licenses/MIT) | +| [copy-concurrently](https://github.com/npm/copy-concurrently) | 1.0.5 | [ISC](https://www.isc.org/downloads/software-support-policy/isc-license/) | +| [copy-descriptor](https://github.com/jonschlinkert/copy-descriptor) | 0.1.1 | [MIT](http://www.opensource.org/licenses/MIT) | +| [core-js](https://github.com/zloirock/core-js) | 2.6.9 | [MIT](http://www.opensource.org/licenses/MIT) | +| [core-util-is](https://github.com/isaacs/core-util-is) | 1.0.2 | [MIT](http://www.opensource.org/licenses/MIT) | +| [create-ecdh](https://github.com/crypto-browserify/createECDH) | 4.0.3 | [MIT](http://www.opensource.org/licenses/MIT) | +| [create-hash](https://github.com/crypto-browserify/createHash) | 1.2.0 | [MIT](http://www.opensource.org/licenses/MIT) | +| [create-hmac](https://github.com/crypto-browserify/createHmac) | 1.1.7 | [MIT](http://www.opensource.org/licenses/MIT) | +| [crypto-browserify](https://github.com/crypto-browserify/crypto-browserify) | 3.12.0 | [MIT](http://www.opensource.org/licenses/MIT) | +| [css-selector-tokenizer](https://github.com/css-modules/css-selector-tokenizer) | 0.7.0 | [MIT](http://www.opensource.org/licenses/MIT) | +| [css-selector-tokenizer](https://github.com/css-modules/css-selector-tokenizer) | 0.7.1 | [MIT](http://www.opensource.org/licenses/MIT) | +| [cssauron](https://github.com/chrisdickinson/cssauron) | 1.4.0 | [MIT](http://www.opensource.org/licenses/MIT) | +| [cssesc](https://github.com/mathiasbynens/cssesc) | 0.1.0 | [MIT](http://www.opensource.org/licenses/MIT) | +| [custom-event-polyfill](https://github.com/krambuhl/custom-event-polyfill) | 0.3.0 | [MIT](http://www.opensource.org/licenses/MIT) | +| [cyclist](https://github.com/mafintosh/cyclist) | 0.2.2 | [MIT](http://www.opensource.org/licenses/MIT) | +| [d](https://github.com/medikoo/d) | 0.1.1 | [MIT](http://www.opensource.org/licenses/MIT) | +| [d](https://github.com/medikoo/d) | 1.0.1 | [ISC](https://www.isc.org/downloads/software-support-policy/isc-license/) | +| [damerau-levenshtein](https://github.com/tad-lispy/node-damerau-levenshtein) | 1.0.5 | [BSD-2-Clause](http://www.opensource.org/licenses/BSD-2-Clause) | +| [date-now](https://github.com/Colingo/date-now) | 0.1.4 | [MIT](http://www.opensource.org/licenses/MIT) | +| [debug](https://github.com/visionmedia/debug) | 2.6.9 | [MIT](http://www.opensource.org/licenses/MIT) | +| [debug](https://github.com/visionmedia/debug) | 3.2.6 | [MIT](http://www.opensource.org/licenses/MIT) | +| [debug](https://github.com/visionmedia/debug) | 4.1.1 | [MIT](http://www.opensource.org/licenses/MIT) | +| [decode-uri-component](https://github.com/SamVerschueren/decode-uri-component) | 0.2.0 | [MIT](http://www.opensource.org/licenses/MIT) | +| [deep-extend](https://github.com/unclechu/node-deep-extend) | 0.6.0 | [MIT](http://www.opensource.org/licenses/MIT) | +| [define-property](https://github.com/jonschlinkert/define-property) | 0.2.5 | [MIT](http://www.opensource.org/licenses/MIT) | +| [define-property](https://github.com/jonschlinkert/define-property) | 1.0.0 | [MIT](http://www.opensource.org/licenses/MIT) | +| [define-property](https://github.com/jonschlinkert/define-property) | 2.0.2 | [MIT](http://www.opensource.org/licenses/MIT) | +| [delayed-stream](https://github.com/felixge/node-delayed-stream) | 1.0.0 | [MIT](http://www.opensource.org/licenses/MIT) | +| [delegates](https://github.com/visionmedia/node-delegates) | 1.0.0 | [MIT](http://www.opensource.org/licenses/MIT) | +| [des.js](https://github.com/indutny/des.js) | 1.0.0 | [MIT](http://www.opensource.org/licenses/MIT) | +| [detect-libc](https://github.com/lovell/detect-libc) | 1.0.3 | [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0) | +| [diff](https://github.com/kpdecker/jsdiff) | 3.5.0 | [BSD-3-Clause](http://www.opensource.org/licenses/BSD-3-Clause) | +| [diffie-hellman](https://github.com/crypto-browserify/diffie-hellman) | 5.0.3 | [MIT](http://www.opensource.org/licenses/MIT) | +| [domain-browser](https://github.com/bevry/domain-browser) | 1.2.0 | [MIT](http://www.opensource.org/licenses/MIT) | +| [duplexify](https://github.com/mafintosh/duplexify) | 3.7.1 | [MIT](http://www.opensource.org/licenses/MIT) | +| [elliptic](https://github.com/indutny/elliptic) | 6.5.0 | [MIT](http://www.opensource.org/licenses/MIT) | +| [emoji-regex](https://github.com/mathiasbynens/emoji-regex) | 6.1.1 | [MIT](http://www.opensource.org/licenses/MIT) | +| [emojis-list](https://github.com/kikobeats/emojis-list) | 2.1.0 | [MIT](http://www.opensource.org/licenses/MIT) | +| [end-of-stream](https://github.com/mafintosh/end-of-stream) | 1.4.1 | [MIT](http://www.opensource.org/licenses/MIT) | +| [enhanced-resolve](https://github.com/webpack/enhanced-resolve) | 4.1.0 | [MIT](http://www.opensource.org/licenses/MIT) | +| [errno](https://github.com/rvagg/node-errno) | 0.1.7 | [MIT](http://www.opensource.org/licenses/MIT) | +| [es5-ext](https://github.com/medikoo/es5-ext) | 0.10.50 | [ISC](https://www.isc.org/downloads/software-support-policy/isc-license/) | +| [es6-iterator](https://github.com/medikoo/es6-iterator) | 2.0.3 | [MIT](http://www.opensource.org/licenses/MIT) | +| [es6-symbol](https://github.com/medikoo/es6-symbol) | 3.1.1 | [MIT](http://www.opensource.org/licenses/MIT) | +| [escape-string-regexp](https://github.com/sindresorhus/escape-string-regexp) | 1.0.5 | [MIT](http://www.opensource.org/licenses/MIT) | +| [eslint-scope](https://github.com/eslint/eslint-scope) | 4.0.3 | [BSD-2-Clause](http://www.opensource.org/licenses/BSD-2-Clause) | +| [esprima](https://github.com/jquery/esprima) | 4.0.1 | [BSD-2-Clause](http://www.opensource.org/licenses/BSD-2-Clause) | +| [esrecurse](https://github.com/estools/esrecurse) | 4.2.1 | [BSD-2-Clause](http://www.opensource.org/licenses/BSD-2-Clause) | +| [estraverse](https://github.com/estools/estraverse) | 4.2.0 | [BSD-2-Clause](http://www.opensource.org/licenses/BSD-2-Clause) | +| [esutils](https://github.com/estools/esutils) | 2.0.2 | [BSD](http://www.opensource.org/licenses/BSD-2-Clause) | +| [eve-raphael](https://github.com/tomasAlabes/eve) | 0.5.0 | [Apache](http://www.apache.org/licenses/LICENSE-2.0) | +| [event-emitter](https://github.com/medikoo/event-emitter) | 0.3.4 | [MIT](http://www.opensource.org/licenses/MIT) | +| [events](https://github.com/Gozala/events) | 3.0.0 | [MIT](http://www.opensource.org/licenses/MIT) | +| [evp_bytestokey](https://github.com/crypto-browserify/EVP_BytesToKey) | 1.0.3 | [MIT](http://www.opensource.org/licenses/MIT) | +| [expand-brackets](https://github.com/jonschlinkert/expand-brackets) | 2.1.4 | [MIT](http://www.opensource.org/licenses/MIT) | +| [extend-shallow](https://github.com/jonschlinkert/extend-shallow) | 2.0.1 | [MIT](http://www.opensource.org/licenses/MIT) | +| [extend-shallow](https://github.com/jonschlinkert/extend-shallow) | 3.0.2 | [MIT](http://www.opensource.org/licenses/MIT) | +| [extend](https://github.com/justmoon/node-extend) | 2.0.2 | [MIT](http://www.opensource.org/licenses/MIT) | +| [extend](https://github.com/justmoon/node-extend) | 3.0.2 | [MIT](http://www.opensource.org/licenses/MIT) | +| [extglob](https://github.com/micromatch/extglob) | 2.0.4 | [MIT](http://www.opensource.org/licenses/MIT) | +| [fast-deep-equal](https://github.com/epoberezkin/fast-deep-equal) | 2.0.1 | [MIT](http://www.opensource.org/licenses/MIT) | +| [fast-json-stable-stringify](https://github.com/epoberezkin/fast-json-stable-stringify) | 2.0.0 | [MIT](http://www.opensource.org/licenses/MIT) | +| [fastparse](https://github.com/webpack/fastparse) | 1.1.2 | [MIT](http://www.opensource.org/licenses/MIT) | +| [figgy-pudding](https://github.com/zkat/figgy-pudding) | 3.5.1 | [ISC](https://www.isc.org/downloads/software-support-policy/isc-license/) | +| [fill-range](https://github.com/jonschlinkert/fill-range) | 4.0.0 | [MIT](http://www.opensource.org/licenses/MIT) | +| [find-cache-dir](https://github.com/avajs/find-cache-dir) | 2.1.0 | [MIT](http://www.opensource.org/licenses/MIT) | +| [find-up](https://github.com/sindresorhus/find-up) | 3.0.0 | [MIT](http://www.opensource.org/licenses/MIT) | +| [flush-write-stream](https://github.com/mafintosh/flush-write-stream) | 1.1.1 | [MIT](http://www.opensource.org/licenses/MIT) | +| [for-in](https://github.com/jonschlinkert/for-in) | 1.0.2 | [MIT](http://www.opensource.org/licenses/MIT) | +| [form-data](https://github.com/form-data/form-data) | 2.5.0 | [MIT](http://www.opensource.org/licenses/MIT) | +| [formidable](https://github.com/felixge/node-formidable) | 1.2.1 | [MIT](http://www.opensource.org/licenses/MIT) | +| [fragment-cache](https://github.com/jonschlinkert/fragment-cache) | 0.2.1 | [MIT](http://www.opensource.org/licenses/MIT) | +| [from2](https://github.com/hughsk/from2) | 2.3.0 | [MIT](http://www.opensource.org/licenses/MIT) | +| [fs-minipass](https://github.com/npm/fs-minipass) | 1.2.5 | [ISC](https://www.isc.org/downloads/software-support-policy/isc-license/) | +| [fs-write-stream-atomic](https://github.com/npm/fs-write-stream-atomic) | 1.0.10 | [ISC](https://www.isc.org/downloads/software-support-policy/isc-license/) | +| [fs.realpath](https://github.com/isaacs/fs.realpath) | 1.0.0 | [ISC](https://www.isc.org/downloads/software-support-policy/isc-license/) | +| [fsevents](https://github.com/strongloop/fsevents) | 1.2.9 | [MIT](http://www.opensource.org/licenses/MIT) | +| [gauge](https://github.com/iarna/gauge) | 2.7.4 | [ISC](https://www.isc.org/downloads/software-support-policy/isc-license/) | +| [get-value](https://github.com/jonschlinkert/get-value) | 2.0.6 | [MIT](http://www.opensource.org/licenses/MIT) | +| [github-slugger](https://github.com/Flet/github-slugger) | 1.2.1 | [ISC](https://www.isc.org/downloads/software-support-policy/isc-license/) | +| [glob-parent](https://github.com/es128/glob-parent) | 3.1.0 | [ISC](https://www.isc.org/downloads/software-support-policy/isc-license/) | +| [glob](https://github.com/isaacs/node-glob) | 7.1.3 | [ISC](https://www.isc.org/downloads/software-support-policy/isc-license/) | +| [glob](https://github.com/isaacs/node-glob) | 7.1.4 | [ISC](https://www.isc.org/downloads/software-support-policy/isc-license/) | +| [graceful-fs](https://github.com/isaacs/node-graceful-fs) | 4.2.0 | [ISC](https://www.isc.org/downloads/software-support-policy/isc-license/) | +| [hammerjs](https://github.com/hammerjs/hammer.js) | 2.0.8 | [MIT](http://www.opensource.org/licenses/MIT) | +| [has-ansi](https://github.com/sindresorhus/has-ansi) | 2.0.0 | [MIT](http://www.opensource.org/licenses/MIT) | +| [has-flag](https://github.com/sindresorhus/has-flag) | 3.0.0 | [MIT](http://www.opensource.org/licenses/MIT) | +| [has-unicode](https://github.com/iarna/has-unicode) | 2.0.1 | [ISC](https://www.isc.org/downloads/software-support-policy/isc-license/) | +| [has-value](https://github.com/jonschlinkert/has-value) | 0.3.1 | [MIT](http://www.opensource.org/licenses/MIT) | +| [has-value](https://github.com/jonschlinkert/has-value) | 1.0.0 | [MIT](http://www.opensource.org/licenses/MIT) | +| [has-values](https://github.com/jonschlinkert/has-values) | 0.1.4 | [MIT](http://www.opensource.org/licenses/MIT) | +| [has-values](https://github.com/jonschlinkert/has-values) | 1.0.0 | [MIT](http://www.opensource.org/licenses/MIT) | +| [hash-base](https://github.com/crypto-browserify/hash-base) | 3.0.4 | [MIT](http://www.opensource.org/licenses/MIT) | +| [hash.js](https://github.com/indutny/hash.js) | 1.1.7 | [MIT](http://www.opensource.org/licenses/MIT) | +| [hmac-drbg](https://github.com/indutny/hmac-drbg) | 1.0.1 | [MIT](http://www.opensource.org/licenses/MIT) | +| [hosted-git-info](https://github.com/npm/hosted-git-info) | 2.7.1 | [ISC](https://www.isc.org/downloads/software-support-policy/isc-license/) | +| [https-browserify](https://github.com/substack/https-browserify) | 1.0.0 | [MIT](http://www.opensource.org/licenses/MIT) | +| [iconv-lite](https://github.com/ashtuchkin/iconv-lite) | 0.4.24 | [MIT](http://www.opensource.org/licenses/MIT) | +| [ieee754](https://github.com/feross/ieee754) | 1.1.13 | [BSD-3-Clause](http://www.opensource.org/licenses/BSD-3-Clause) | +| [iferr](https://github.com/shesek/iferr) | 0.1.5 | [MIT](http://www.opensource.org/licenses/MIT) | +| [ignore-walk](https://github.com/isaacs/ignore-walk) | 3.0.1 | [ISC](https://www.isc.org/downloads/software-support-policy/isc-license/) | +| [imurmurhash](https://github.com/jensyt/imurmurhash-js) | 0.1.4 | [MIT](http://www.opensource.org/licenses/MIT) | +| [inflight](https://github.com/npm/inflight) | 1.0.6 | [ISC](https://www.isc.org/downloads/software-support-policy/isc-license/) | +| [inherits](https://github.com/isaacs/inherits) | 2.0.1 | [ISC](https://www.isc.org/downloads/software-support-policy/isc-license/) | +| [inherits](https://github.com/isaacs/inherits) | 2.0.3 | [ISC](https://www.isc.org/downloads/software-support-policy/isc-license/) | +| [inherits](https://github.com/isaacs/inherits) | 2.0.4 | [ISC](https://www.isc.org/downloads/software-support-policy/isc-license/) | +| [ini](https://github.com/isaacs/ini) | 1.3.5 | [ISC](https://www.isc.org/downloads/software-support-policy/isc-license/) | +| [is-accessor-descriptor](https://github.com/jonschlinkert/is-accessor-descriptor) | 0.1.6 | [MIT](http://www.opensource.org/licenses/MIT) | +| [is-accessor-descriptor](https://github.com/jonschlinkert/is-accessor-descriptor) | 1.0.0 | [MIT](http://www.opensource.org/licenses/MIT) | +| [is-binary-path](https://github.com/sindresorhus/is-binary-path) | 1.0.1 | [MIT](http://www.opensource.org/licenses/MIT) | +| [is-buffer](https://github.com/feross/is-buffer) | 1.1.6 | [MIT](http://www.opensource.org/licenses/MIT) | +| [is-data-descriptor](https://github.com/jonschlinkert/is-data-descriptor) | 0.1.4 | [MIT](http://www.opensource.org/licenses/MIT) | +| [is-data-descriptor](https://github.com/jonschlinkert/is-data-descriptor) | 1.0.0 | [MIT](http://www.opensource.org/licenses/MIT) | +| [is-descriptor](https://github.com/jonschlinkert/is-descriptor) | 0.1.6 | [MIT](http://www.opensource.org/licenses/MIT) | +| [is-descriptor](https://github.com/jonschlinkert/is-descriptor) | 1.0.2 | [MIT](http://www.opensource.org/licenses/MIT) | +| [is-extendable](https://github.com/jonschlinkert/is-extendable) | 0.1.1 | [MIT](http://www.opensource.org/licenses/MIT) | +| [is-extendable](https://github.com/jonschlinkert/is-extendable) | 1.0.1 | [MIT](http://www.opensource.org/licenses/MIT) | +| [is-extglob](https://github.com/jonschlinkert/is-extglob) | 2.1.1 | [MIT](http://www.opensource.org/licenses/MIT) | +| [is-fullwidth-code-point](https://github.com/sindresorhus/is-fullwidth-code-point) | 1.0.0 | [MIT](http://www.opensource.org/licenses/MIT) | +| [is-glob](https://github.com/jonschlinkert/is-glob) | 3.1.0 | [MIT](http://www.opensource.org/licenses/MIT) | +| [is-glob](https://github.com/micromatch/is-glob) | 4.0.1 | [MIT](http://www.opensource.org/licenses/MIT) | +| [is-number](https://github.com/jonschlinkert/is-number) | 3.0.0 | [MIT](http://www.opensource.org/licenses/MIT) | +| [is-plain-object](https://github.com/jonschlinkert/is-plain-object) | 2.0.4 | [MIT](http://www.opensource.org/licenses/MIT) | +| [is-windows](https://github.com/jonschlinkert/is-windows) | 1.0.2 | [MIT](http://www.opensource.org/licenses/MIT) | +| [isarray](https://github.com/juliangruber/isarray) | 1.0.0 | [MIT](http://www.opensource.org/licenses/MIT) | +| [isobject](https://github.com/jonschlinkert/isobject) | 2.1.0 | [MIT](http://www.opensource.org/licenses/MIT) | +| [isobject](https://github.com/jonschlinkert/isobject) | 3.0.1 | [MIT](http://www.opensource.org/licenses/MIT) | +| [js-tokens](https://github.com/lydell/js-tokens) | 3.0.2 | [MIT](http://www.opensource.org/licenses/MIT) | +| [js-yaml](https://github.com/nodeca/js-yaml) | 3.13.1 | [MIT](http://www.opensource.org/licenses/MIT) | +| [jsesc](https://github.com/mathiasbynens/jsesc) | 0.5.0 | [MIT](http://www.opensource.org/licenses/MIT) | +| [json-parse-better-errors](https://github.com/zkat/json-parse-better-errors) | 1.0.2 | [MIT](http://www.opensource.org/licenses/MIT) | +| [json-schema-traverse](https://github.com/epoberezkin/json-schema-traverse) | 0.4.1 | [MIT](http://www.opensource.org/licenses/MIT) | +| [json5](https://github.com/json5/json5) | 1.0.1 | [MIT](http://www.opensource.org/licenses/MIT) | +| [kind-of](https://github.com/jonschlinkert/kind-of) | 3.2.2 | [MIT](http://www.opensource.org/licenses/MIT) | +| [kind-of](https://github.com/jonschlinkert/kind-of) | 4.0.0 | [MIT](http://www.opensource.org/licenses/MIT) | +| [kind-of](https://github.com/jonschlinkert/kind-of) | 5.1.0 | [MIT](http://www.opensource.org/licenses/MIT) | +| [kind-of](https://github.com/jonschlinkert/kind-of) | 6.0.2 | [MIT](http://www.opensource.org/licenses/MIT) | +| [levenshtein-edit-distance](https://github.com/wooorm/levenshtein-edit-distance) | 1.0.0 | [MIT](http://www.opensource.org/licenses/MIT) | +| [loader-runner](https://github.com/webpack/loader-runner) | 2.4.0 | [MIT](http://www.opensource.org/licenses/MIT) | +| [loader-utils](https://github.com/webpack/loader-utils) | 1.2.3 | [MIT](http://www.opensource.org/licenses/MIT) | +| [locate-path](https://github.com/sindresorhus/locate-path) | 3.0.0 | [MIT](http://www.opensource.org/licenses/MIT) | +| [lodash.debounce](https://github.com/lodash/lodash) | 4.0.8 | [MIT](http://www.opensource.org/licenses/MIT) | +| [lru-cache](https://github.com/isaacs/node-lru-cache) | 5.1.1 | [ISC](https://www.isc.org/downloads/software-support-policy/isc-license/) | +| [make-dir](https://github.com/sindresorhus/make-dir) | 2.1.0 | [MIT](http://www.opensource.org/licenses/MIT) | +| [map-cache](https://github.com/jonschlinkert/map-cache) | 0.2.2 | [MIT](http://www.opensource.org/licenses/MIT) | +| [map-visit](https://github.com/jonschlinkert/map-visit) | 1.0.0 | [MIT](http://www.opensource.org/licenses/MIT) | +| [md5.js](https://github.com/crypto-browserify/md5.js) | 1.3.5 | [MIT](http://www.opensource.org/licenses/MIT) | +| [mdast-util-definitions](https://github.com/syntax-tree/mdast-util-definitions) | 1.2.4 | [MIT](http://www.opensource.org/licenses/MIT) | +| [mdast-util-to-string](https://github.com/syntax-tree/mdast-util-to-string) | 1.0.6 | [MIT](http://www.opensource.org/licenses/MIT) | +| [memory-fs](https://github.com/webpack/memory-fs) | 0.4.1 | [MIT](http://www.opensource.org/licenses/MIT) | +| [methods](https://github.com/jshttp/methods) | 1.1.2 | [MIT](http://www.opensource.org/licenses/MIT) | +| [micromatch](https://github.com/micromatch/micromatch) | 3.1.10 | [MIT](http://www.opensource.org/licenses/MIT) | +| [miller-rabin](https://github.com/indutny/miller-rabin) | 4.0.1 | [MIT](http://www.opensource.org/licenses/MIT) | +| [mime-db](https://github.com/jshttp/mime-db) | 1.40.0 | [MIT](http://www.opensource.org/licenses/MIT) | +| [mime-types](https://github.com/jshttp/mime-types) | 2.1.24 | [MIT](http://www.opensource.org/licenses/MIT) | +| [mime](https://github.com/broofa/node-mime) | 1.6.0 | [MIT](http://www.opensource.org/licenses/MIT) | +| [minimalistic-assert](https://github.com/calvinmetcalf/minimalistic-assert) | 1.0.1 | [ISC](https://www.isc.org/downloads/software-support-policy/isc-license/) | +| [minimalistic-crypto-utils](https://github.com/indutny/minimalistic-crypto-utils) | 1.0.1 | [MIT](http://www.opensource.org/licenses/MIT) | +| [minimatch-browser](https://github.com/isaacs/minimatch) | 1.0.0 | [ISC](https://www.isc.org/downloads/software-support-policy/isc-license/) | +| [minimatch](https://github.com/isaacs/minimatch) | 3.0.4 | [ISC](https://www.isc.org/downloads/software-support-policy/isc-license/) | +| [minimist](https://github.com/substack/minimist) | 0.0.8 | [MIT](http://www.opensource.org/licenses/MIT) | +| [minimist](https://github.com/substack/minimist) | 1.2.0 | [MIT](http://www.opensource.org/licenses/MIT) | +| [minipass](https://github.com/isaacs/minipass) | 2.3.5 | [ISC](https://www.isc.org/downloads/software-support-policy/isc-license/) | +| [minizlib](https://github.com/isaacs/minizlib) | 1.2.1 | [MIT](http://www.opensource.org/licenses/MIT) | +| [mississippi](https://github.com/maxogden/mississippi) | 3.0.0 | [BSD-2-Clause](http://www.opensource.org/licenses/BSD-2-Clause) | +| [mixin-deep](https://github.com/jonschlinkert/mixin-deep) | 1.3.2 | [MIT](http://www.opensource.org/licenses/MIT) | +| [mkdirp](https://github.com/substack/node-mkdirp) | 0.5.1 | [MIT](http://www.opensource.org/licenses/MIT) | +| [moment-es6](https://github.com/Agamnentzar/moment-es6) | 1.0.0 | [MIT](http://www.opensource.org/licenses/MIT) | +| [moment](https://github.com/moment/moment) | 2.22.2 | [MIT](http://www.opensource.org/licenses/MIT) | +| [move-concurrently](https://github.com/npm/move-concurrently) | 1.0.1 | [ISC](https://www.isc.org/downloads/software-support-policy/isc-license/) | +| [ms](https://github.com/zeit/ms) | 2.0.0 | [MIT](http://www.opensource.org/licenses/MIT) | +| [ms](https://github.com/zeit/ms) | 2.1.1 | [MIT](http://www.opensource.org/licenses/MIT) | +| [ms](https://github.com/zeit/ms) | 2.1.2 | [MIT](http://www.opensource.org/licenses/MIT) | +| [nan](https://github.com/nodejs/nan) | 2.14.0 | [MIT](http://www.opensource.org/licenses/MIT) | +| [nanomatch](https://github.com/micromatch/nanomatch) | 1.2.13 | [MIT](http://www.opensource.org/licenses/MIT) | +| [needle](https://github.com/tomas/needle) | 2.3.0 | [MIT](http://www.opensource.org/licenses/MIT) | +| [neo-async](https://github.com/suguru03/neo-async) | 2.6.1 | [MIT](http://www.opensource.org/licenses/MIT) | +| [next-tick](https://github.com/medikoo/next-tick) | 1.0.0 | [MIT](http://www.opensource.org/licenses/MIT) | +| [ng2-charts](https://github.com/valor-software/ng2-charts) | 1.6.0 | [MIT](http://www.opensource.org/licenses/MIT) | +| [ngx-monaco-editor](https://github.com/atularen/ngx-monaco-editor) | 7.0.0 | [MIT](http://www.opensource.org/licenses/MIT) | +| [node-ensure](https://github.com/bauerca/node-ensure) | 0.0.0 | [MIT](http://www.opensource.org/licenses/MIT) | +| [node-libs-browser](https://github.com/webpack/node-libs-browser) | 2.2.1 | [MIT](http://www.opensource.org/licenses/MIT) | +| [node-pre-gyp](https://github.com/mapbox/node-pre-gyp) | 0.12.0 | [BSD-3-Clause](http://www.opensource.org/licenses/BSD-3-Clause) | +| [nopt](https://github.com/npm/nopt) | 4.0.1 | [ISC](https://www.isc.org/downloads/software-support-policy/isc-license/) | +| [normalize-path](https://github.com/jonschlinkert/normalize-path) | 2.1.1 | [MIT](http://www.opensource.org/licenses/MIT) | +| [npm-bundled](https://github.com/npm/npm-bundled) | 1.0.6 | [ISC](https://www.isc.org/downloads/software-support-policy/isc-license/) | +| [npm-packlist](https://github.com/npm/npm-packlist) | 1.4.1 | [ISC](https://www.isc.org/downloads/software-support-policy/isc-license/) | +| [npmlog](https://github.com/npm/npmlog) | 4.1.2 | [ISC](https://www.isc.org/downloads/software-support-policy/isc-license/) | +| [number-is-nan](https://github.com/sindresorhus/number-is-nan) | 1.0.1 | [MIT](http://www.opensource.org/licenses/MIT) | +| [object-assign](https://github.com/sindresorhus/object-assign) | 4.1.1 | [MIT](http://www.opensource.org/licenses/MIT) | +| [object-copy](https://github.com/jonschlinkert/object-copy) | 0.1.0 | [MIT](http://www.opensource.org/licenses/MIT) | +| [object-visit](https://github.com/jonschlinkert/object-visit) | 1.0.1 | [MIT](http://www.opensource.org/licenses/MIT) | +| [object.pick](https://github.com/jonschlinkert/object.pick) | 1.3.0 | [MIT](http://www.opensource.org/licenses/MIT) | +| [once](https://github.com/isaacs/once) | 1.4.0 | [ISC](https://www.isc.org/downloads/software-support-policy/isc-license/) | +| [os-browserify](https://github.com/CoderPuppy/os-browserify) | 0.3.0 | [MIT](http://www.opensource.org/licenses/MIT) | +| [os-homedir](https://github.com/sindresorhus/os-homedir) | 1.0.2 | [MIT](http://www.opensource.org/licenses/MIT) | +| [os-tmpdir](https://github.com/sindresorhus/os-tmpdir) | 1.0.2 | [MIT](http://www.opensource.org/licenses/MIT) | +| [osenv](https://github.com/npm/osenv) | 0.1.5 | [ISC](https://www.isc.org/downloads/software-support-policy/isc-license/) | +| [p-limit](https://github.com/sindresorhus/p-limit) | 2.2.0 | [MIT](http://www.opensource.org/licenses/MIT) | +| [p-locate](https://github.com/sindresorhus/p-locate) | 3.0.0 | [MIT](http://www.opensource.org/licenses/MIT) | +| [p-try](https://github.com/sindresorhus/p-try) | 2.2.0 | [MIT](http://www.opensource.org/licenses/MIT) | +| [pako](https://github.com/nodeca/pako) | 1.0.10 | ([MIT](http://www.opensource.org/licenses/MIT) AND [Zlib](http://www.zlib.net/zlib_license.html)) | +| [parallel-transform](https://github.com/mafintosh/parallel-transform) | 1.1.0 | [MIT](http://www.opensource.org/licenses/MIT) | +| [parse-asn1](https://github.com/crypto-browserify/parse-asn1) | 5.1.4 | [ISC](https://www.isc.org/downloads/software-support-policy/isc-license/) | +| [parse5](https://github.com/inikulin/parse5) | 5.1.0 | [MIT](http://www.opensource.org/licenses/MIT) | +| [pascalcase](https://github.com/jonschlinkert/pascalcase) | 0.1.1 | [MIT](http://www.opensource.org/licenses/MIT) | +| [path-browserify](https://github.com/substack/path-browserify) | 0.0.1 | [MIT](http://www.opensource.org/licenses/MIT) | +| [path-dirname](https://github.com/es128/path-dirname) | 1.0.2 | [MIT](http://www.opensource.org/licenses/MIT) | +| [path-exists](https://github.com/sindresorhus/path-exists) | 3.0.0 | [MIT](http://www.opensource.org/licenses/MIT) | +| [path-is-absolute](https://github.com/sindresorhus/path-is-absolute) | 1.0.1 | [MIT](http://www.opensource.org/licenses/MIT) | +| [path-parse](https://github.com/jbgutierrez/path-parse) | 1.0.6 | [MIT](http://www.opensource.org/licenses/MIT) | +| [pbkdf2](https://github.com/crypto-browserify/pbkdf2) | 3.0.17 | [MIT](http://www.opensource.org/licenses/MIT) | +| [pdfjs-dist](https://github.com/mozilla/pdfjs-dist) | 2.0.489 | [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0) | +| [pify](https://github.com/sindresorhus/pify) | 4.0.1 | [MIT](http://www.opensource.org/licenses/MIT) | +| [pkg-dir](https://github.com/sindresorhus/pkg-dir) | 3.0.0 | [MIT](http://www.opensource.org/licenses/MIT) | +| [posix-character-classes](https://github.com/jonschlinkert/posix-character-classes) | 0.1.1 | [MIT](http://www.opensource.org/licenses/MIT) | +| [process-nextick-args](https://github.com/calvinmetcalf/process-nextick-args) | 2.0.0 | [MIT](http://www.opensource.org/licenses/MIT) | +| [process-nextick-args](https://github.com/calvinmetcalf/process-nextick-args) | 2.0.1 | [MIT](http://www.opensource.org/licenses/MIT) | +| [process](https://github.com/shtylman/node-process) | 0.11.10 | [MIT](http://www.opensource.org/licenses/MIT) | +| [promise-inflight](https://github.com/iarna/promise-inflight) | 1.0.1 | [ISC](https://www.isc.org/downloads/software-support-policy/isc-license/) | +| [propose](https://github.com/liushuping/propose) | 0.0.5 | [MIT](http://www.opensource.org/licenses/MIT) | +| [prr](https://github.com/rvagg/prr) | 1.0.1 | [MIT](http://www.opensource.org/licenses/MIT) | +| [public-encrypt](https://github.com/crypto-browserify/publicEncrypt) | 4.0.3 | [MIT](http://www.opensource.org/licenses/MIT) | +| [pump](https://github.com/mafintosh/pump) | 2.0.1 | [MIT](http://www.opensource.org/licenses/MIT) | +| [pump](https://github.com/mafintosh/pump) | 3.0.0 | [MIT](http://www.opensource.org/licenses/MIT) | +| [pumpify](https://github.com/mafintosh/pumpify) | 1.5.1 | [MIT](http://www.opensource.org/licenses/MIT) | +| [punycode](https://github.com/bestiejs/punycode.js) | 1.3.2 | [MIT](http://www.opensource.org/licenses/MIT) | +| [punycode](https://github.com/bestiejs/punycode.js) | 1.4.1 | [MIT](http://www.opensource.org/licenses/MIT) | +| [punycode](https://github.com/bestiejs/punycode.js) | 2.1.1 | [MIT](http://www.opensource.org/licenses/MIT) | +| [qs](https://github.com/ljharb/qs) | 6.7.0 | [BSD-3-Clause](http://www.opensource.org/licenses/BSD-3-Clause) | +| [querystring-es3](https://github.com/mike-spainhower/querystring) | 0.2.1 | [MIT](http://www.opensource.org/licenses/MIT) | +| [querystring](https://github.com/Gozala/querystring) | 0.2.0 | [MIT](http://www.opensource.org/licenses/MIT) | +| [randombytes](https://github.com/crypto-browserify/randombytes) | 2.1.0 | [MIT](http://www.opensource.org/licenses/MIT) | +| [randomfill](https://github.com/crypto-browserify/randomfill) | 1.0.4 | [MIT](http://www.opensource.org/licenses/MIT) | +| [raphael](https://github.com/DmitryBaranovskiy/raphael) | 2.2.7 | [MIT](http://www.opensource.org/licenses/MIT) | +| [rc](https://github.com/dominictarr/rc) | 1.2.8 | ([BSD-2-Clause](http://www.opensource.org/licenses/BSD-2-Clause) OR [MIT](http://www.opensource.org/licenses/MIT) OR [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0)) | +| [readable-stream](https://github.com/nodejs/readable-stream) | 2.3.6 | [MIT](http://www.opensource.org/licenses/MIT) | +| [readdirp](https://github.com/paulmillr/readdirp) | 2.2.1 | [MIT](http://www.opensource.org/licenses/MIT) | +| [reflect-metadata](https://github.com/rbuckton/reflect-metadata) | 0.1.13 | [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0) | +| [regenerate](https://github.com/mathiasbynens/regenerate) | 1.4.0 | [MIT](http://www.opensource.org/licenses/MIT) | +| [regex-not](https://github.com/jonschlinkert/regex-not) | 1.0.2 | [MIT](http://www.opensource.org/licenses/MIT) | +| [regexpu-core](https://github.com/mathiasbynens/regexpu-core) | 1.0.0 | [MIT](http://www.opensource.org/licenses/MIT) | +| [regjsgen](https://github.com/d10/regjsgen) | 0.2.0 | [MIT](http://www.opensource.org/licenses/MIT) | +| [regjsparser](https://github.com/jviereck/regjsparser) | 0.1.5 | [BSD](http://www.opensource.org/licenses/BSD-2-Clause) | +| [remark-validate-links](https://github.com/remarkjs/remark-validate-links) | 8.0.3 | [MIT](http://www.opensource.org/licenses/MIT) | +| [remove-trailing-separator](https://github.com/darsain/remove-trailing-separator) | 1.1.0 | [ISC](https://www.isc.org/downloads/software-support-policy/isc-license/) | +| [repeat-element](https://github.com/jonschlinkert/repeat-element) | 1.1.3 | [MIT](http://www.opensource.org/licenses/MIT) | +| [repeat-string](https://github.com/jonschlinkert/repeat-string) | 1.6.1 | [MIT](http://www.opensource.org/licenses/MIT) | +| [resolve-url](https://github.com/lydell/resolve-url) | 0.2.1 | [MIT](http://www.opensource.org/licenses/MIT) | +| [resolve](https://github.com/browserify/resolve) | 1.11.1 | [MIT](http://www.opensource.org/licenses/MIT) | +| [ret](https://github.com/fent/ret.js) | 0.1.15 | [MIT](http://www.opensource.org/licenses/MIT) | +| [rimraf](https://github.com/isaacs/rimraf) | 2.6.3 | [ISC](https://www.isc.org/downloads/software-support-policy/isc-license/) | +| [ripemd160](https://github.com/crypto-browserify/ripemd160) | 2.0.2 | [MIT](http://www.opensource.org/licenses/MIT) | +| [run-queue](https://github.com/iarna/run-queue) | 1.0.3 | [ISC](https://www.isc.org/downloads/software-support-policy/isc-license/) | +| [rxjs](https://github.com/reactivex/rxjs) | 6.5.2 | [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0) | +| [safe-buffer](https://github.com/feross/safe-buffer) | 5.1.2 | [MIT](http://www.opensource.org/licenses/MIT) | +| [safe-regex](https://github.com/substack/safe-regex) | 1.1.0 | [MIT](http://www.opensource.org/licenses/MIT) | +| [safer-buffer](https://github.com/ChALkeR/safer-buffer) | 2.1.2 | [MIT](http://www.opensource.org/licenses/MIT) | +| [sax](https://github.com/isaacs/sax-js) | 1.2.4 | [ISC](https://www.isc.org/downloads/software-support-policy/isc-license/) | +| [schema-utils](https://github.com/webpack-contrib/schema-utils) | 0.4.7 | [MIT](http://www.opensource.org/licenses/MIT) | +| [schema-utils](https://github.com/webpack-contrib/schema-utils) | 1.0.0 | [MIT](http://www.opensource.org/licenses/MIT) | +| [semver-dsl](https://github.com/mgechev/semver-dsl) | 1.0.1 | [MIT](http://www.opensource.org/licenses/MIT) | +| [semver](https://github.com/npm/node-semver) | 5.7.0 | [ISC](https://www.isc.org/downloads/software-support-policy/isc-license/) | +| [serialize-javascript](https://github.com/yahoo/serialize-javascript) | 1.7.0 | [BSD-3-Clause](http://www.opensource.org/licenses/BSD-3-Clause) | +| [set-blocking](https://github.com/yargs/set-blocking) | 2.0.0 | [ISC](https://www.isc.org/downloads/software-support-policy/isc-license/) | +| [set-value](https://github.com/jonschlinkert/set-value) | 2.0.1 | [MIT](http://www.opensource.org/licenses/MIT) | +| [setimmediate](https://github.com/YuzuJS/setImmediate) | 1.0.5 | [MIT](http://www.opensource.org/licenses/MIT) | +| [sha.js](https://github.com/crypto-browserify/sha.js) | 2.4.11 | ([MIT](http://www.opensource.org/licenses/MIT) AND [BSD-3-Clause](http://www.opensource.org/licenses/BSD-3-Clause)) | +| [signal-exit](https://github.com/tapjs/signal-exit) | 3.0.2 | [ISC](https://www.isc.org/downloads/software-support-policy/isc-license/) | +| [snapdragon-node](https://github.com/jonschlinkert/snapdragon-node) | 2.1.1 | [MIT](http://www.opensource.org/licenses/MIT) | +| [snapdragon-util](https://github.com/jonschlinkert/snapdragon-util) | 3.0.1 | [MIT](http://www.opensource.org/licenses/MIT) | +| [snapdragon](https://github.com/jonschlinkert/snapdragon) | 0.8.2 | [MIT](http://www.opensource.org/licenses/MIT) | +| [source-list-map](https://github.com/webpack/source-list-map) | 2.0.1 | [MIT](http://www.opensource.org/licenses/MIT) | +| [source-map-resolve](https://github.com/lydell/source-map-resolve) | 0.5.2 | [MIT](http://www.opensource.org/licenses/MIT) | +| [source-map-support](https://github.com/evanw/node-source-map-support) | 0.5.10 | [MIT](http://www.opensource.org/licenses/MIT) | +| [source-map-url](https://github.com/lydell/source-map-url) | 0.4.0 | [MIT](http://www.opensource.org/licenses/MIT) | +| [source-map](https://github.com/mozilla/source-map) | 0.5.6 | [BSD-3-Clause](http://www.opensource.org/licenses/BSD-3-Clause) | +| [source-map](https://github.com/mozilla/source-map) | 0.5.7 | [BSD-3-Clause](http://www.opensource.org/licenses/BSD-3-Clause) | +| [source-map](https://github.com/mozilla/source-map) | 0.6.1 | [BSD-3-Clause](http://www.opensource.org/licenses/BSD-3-Clause) | +| [split-string](https://github.com/jonschlinkert/split-string) | 3.1.0 | [MIT](http://www.opensource.org/licenses/MIT) | +| [sprintf-js](https://github.com/alexei/sprintf.js) | 1.0.3 | [BSD-3-Clause](http://www.opensource.org/licenses/BSD-3-Clause) | +| [sprintf-js](https://github.com/alexei/sprintf.js) | 1.1.2 | [BSD-3-Clause](http://www.opensource.org/licenses/BSD-3-Clause) | +| [ssri](https://github.com/zkat/ssri) | 6.0.1 | [ISC](https://www.isc.org/downloads/software-support-policy/isc-license/) | +| [static-extend](https://github.com/jonschlinkert/static-extend) | 0.1.2 | [MIT](http://www.opensource.org/licenses/MIT) | +| [stream-browserify](https://github.com/browserify/stream-browserify) | 2.0.2 | [MIT](http://www.opensource.org/licenses/MIT) | +| [stream-each](https://github.com/mafintosh/stream-each) | 1.2.3 | [MIT](http://www.opensource.org/licenses/MIT) | +| [stream-http](https://github.com/jhiesey/stream-http) | 2.8.3 | [MIT](http://www.opensource.org/licenses/MIT) | +| [stream-shift](https://github.com/mafintosh/stream-shift) | 1.0.0 | [MIT](http://www.opensource.org/licenses/MIT) | +| [string-width](https://github.com/sindresorhus/string-width) | 1.0.2 | [MIT](http://www.opensource.org/licenses/MIT) | +| [string_decoder](https://github.com/nodejs/string_decoder) | 1.1.1 | [MIT](http://www.opensource.org/licenses/MIT) | +| [strip-ansi](https://github.com/chalk/strip-ansi) | 3.0.1 | [MIT](http://www.opensource.org/licenses/MIT) | +| [strip-json-comments](https://github.com/sindresorhus/strip-json-comments) | 2.0.1 | [MIT](http://www.opensource.org/licenses/MIT) | +| [superagent](https://github.com/visionmedia/superagent) | 3.8.2 | [MIT](http://www.opensource.org/licenses/MIT) | +| [supports-color](https://github.com/chalk/supports-color) | 2.0.0 | [MIT](http://www.opensource.org/licenses/MIT) | +| [supports-color](https://github.com/chalk/supports-color) | 5.5.0 | [MIT](http://www.opensource.org/licenses/MIT) | +| [systemjs](https://github.com/systemjs/systemjs) | 0.19.27 | [MIT](http://www.opensource.org/licenses/MIT) | +| [tapable](https://github.com/webpack/tapable) | 1.1.3 | [MIT](http://www.opensource.org/licenses/MIT) | +| [tar](https://github.com/npm/node-tar) | 4.4.8 | [ISC](https://www.isc.org/downloads/software-support-policy/isc-license/) | +| [terser-webpack-plugin](https://github.com/webpack-contrib/terser-webpack-plugin) | 1.2.2 | [MIT](http://www.opensource.org/licenses/MIT) | +| [terser](https://github.com/fabiosantoscode/terser) | 3.17.0 | [BSD-2-Clause](http://www.opensource.org/licenses/BSD-2-Clause) | +| [through2](https://github.com/rvagg/through2) | 2.0.5 | [MIT](http://www.opensource.org/licenses/MIT) | +| [through](https://github.com/dominictarr/through) | 2.3.8 | [MIT](http://www.opensource.org/licenses/MIT) | +| [timers-browserify](https://github.com/jryans/timers-browserify) | 2.0.10 | [MIT](http://www.opensource.org/licenses/MIT) | +| [to-arraybuffer](https://github.com/jhiesey/to-arraybuffer) | 1.0.1 | [MIT](http://www.opensource.org/licenses/MIT) | +| [to-object-path](https://github.com/jonschlinkert/to-object-path) | 0.3.0 | [MIT](http://www.opensource.org/licenses/MIT) | +| [to-regex-range](https://github.com/micromatch/to-regex-range) | 2.1.1 | [MIT](http://www.opensource.org/licenses/MIT) | +| [to-regex](https://github.com/jonschlinkert/to-regex) | 3.0.2 | [MIT](http://www.opensource.org/licenses/MIT) | +| [tslib](https://github.com/Microsoft/tslib) | 1.10.0 | [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0) | +| [tslint](https://github.com/palantir/tslint) | 5.9.1 | [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0) | +| [tsutils](https://github.com/ajafff/tsutils) | 2.29.0 | [MIT](http://www.opensource.org/licenses/MIT) | +| [tty-browserify](https://github.com/substack/tty-browserify) | 0.0.0 | [MIT](http://www.opensource.org/licenses/MIT) | +| [type](https://github.com/medikoo/type) | 1.0.3 | [ISC](https://www.isc.org/downloads/software-support-policy/isc-license/) | +| [typedarray](https://github.com/substack/typedarray) | 0.0.6 | [MIT](http://www.opensource.org/licenses/MIT) | +| [typescript](https://github.com/Microsoft/TypeScript) | 3.1.6 | [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0) | +| [union-value](https://github.com/jonschlinkert/union-value) | 1.0.1 | [MIT](http://www.opensource.org/licenses/MIT) | +| [unique-filename](https://github.com/iarna/unique-filename) | 1.1.1 | [ISC](https://www.isc.org/downloads/software-support-policy/isc-license/) | +| [unique-slug](https://github.com/iarna/unique-slug) | 2.0.2 | [ISC](https://www.isc.org/downloads/software-support-policy/isc-license/) | +| [unist-util-is](https://github.com/syntax-tree/unist-util-is) | 3.0.0 | [MIT](http://www.opensource.org/licenses/MIT) | +| [unist-util-visit-parents](https://github.com/syntax-tree/unist-util-visit-parents) | 2.1.2 | [MIT](http://www.opensource.org/licenses/MIT) | +| [unist-util-visit](https://github.com/syntax-tree/unist-util-visit) | 1.4.1 | [MIT](http://www.opensource.org/licenses/MIT) | +| [unset-value](https://github.com/jonschlinkert/unset-value) | 1.0.0 | [MIT](http://www.opensource.org/licenses/MIT) | +| [upath](https://github.com/anodynos/upath) | 1.1.2 | [MIT](http://www.opensource.org/licenses/MIT) | +| [uri-js](https://github.com/garycourt/uri-js) | 4.2.2 | [BSD-2-Clause](http://www.opensource.org/licenses/BSD-2-Clause) | +| [urix](https://github.com/lydell/urix) | 0.1.0 | [MIT](http://www.opensource.org/licenses/MIT) | +| [url](https://github.com/defunctzombie/node-url) | 0.11.0 | [MIT](http://www.opensource.org/licenses/MIT) | +| [urljoin](https://github.com/yanni4night/urljoin) | 0.1.5 | [MIT](http://www.opensource.org/licenses/MIT) | +| [use](https://github.com/jonschlinkert/use) | 3.1.1 | [MIT](http://www.opensource.org/licenses/MIT) | +| [util-deprecate](https://github.com/TooTallNate/util-deprecate) | 1.0.2 | [MIT](http://www.opensource.org/licenses/MIT) | +| [util](https://github.com/defunctzombie/node-util) | 0.10.3 | [MIT](http://www.opensource.org/licenses/MIT) | +| [util](https://github.com/defunctzombie/node-util) | 0.11.1 | [MIT](http://www.opensource.org/licenses/MIT) | +| [vm-browserify](https://github.com/substack/vm-browserify) | 1.1.0 | [MIT](http://www.opensource.org/licenses/MIT) | +| [watchpack](https://github.com/webpack/watchpack) | 1.6.0 | [MIT](http://www.opensource.org/licenses/MIT) | +| [web-animations-js](https://github.com/web-animations/web-animations-js) | 2.3.1 | [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0) | +| [webpack-sources](https://github.com/webpack/webpack-sources) | 1.3.0 | [MIT](http://www.opensource.org/licenses/MIT) | +| [webpack](https://github.com/webpack/webpack) | 4.29.0 | [MIT](http://www.opensource.org/licenses/MIT) | +| [when](https://github.com/cujojs/when) | 3.7.8 | [MIT](http://www.opensource.org/licenses/MIT) | +| [wide-align](https://github.com/iarna/wide-align) | 1.1.3 | [ISC](https://www.isc.org/downloads/software-support-policy/isc-license/) | +| [worker-farm](https://github.com/rvagg/node-worker-farm) | 1.7.0 | [MIT](http://www.opensource.org/licenses/MIT) | +| [worker-loader](https://github.com/webpack-contrib/worker-loader) | 1.1.1 | [MIT](http://www.opensource.org/licenses/MIT) | +| [wrappy](https://github.com/npm/wrappy) | 1.0.2 | [ISC](https://www.isc.org/downloads/software-support-policy/isc-license/) | +| [xtend](https://github.com/Raynos/xtend) | 4.0.2 | [MIT](http://www.opensource.org/licenses/MIT) | +| [y18n](https://github.com/yargs/y18n) | 4.0.0 | [ISC](https://www.isc.org/downloads/software-support-policy/isc-license/) | +| [yallist](https://github.com/isaacs/yallist) | 3.0.3 | [ISC](https://www.isc.org/downloads/software-support-policy/isc-license/) | +| [zone.js](https://github.com/angular/zone.js) | 0.8.29 | [MIT](http://www.opensource.org/licenses/MIT) | + diff --git a/docs/process-services-cloud/components/edit-process-filter-cloud.component.md b/docs/process-services-cloud/components/edit-process-filter-cloud.component.md index cfb5f121f9..c2366fc328 100644 --- a/docs/process-services-cloud/components/edit-process-filter-cloud.component.md +++ b/docs/process-services-cloud/components/edit-process-filter-cloud.component.md @@ -215,4 +215,3 @@ Users can save a filter if they make any changes to it in an application using t - [Process Filter Cloud Service](../services/process-filter-cloud.service.md) - [Local preference Cloud Service](../services/local-preference-cloud.service.md) - [User preference Cloud Service](../services/user-preference-cloud.service.md) - diff --git a/docs/process-services-cloud/components/edit-task-filter-cloud.component.md b/docs/process-services-cloud/components/edit-task-filter-cloud.component.md index 5ae00fe8bd..c596e2ea48 100644 --- a/docs/process-services-cloud/components/edit-task-filter-cloud.component.md +++ b/docs/process-services-cloud/components/edit-task-filter-cloud.component.md @@ -215,4 +215,3 @@ Users can save a filter if they make any changes to it in an application using t - [Task filters Cloud Service](../services/task-filter-cloud.service.md) - [Local preference Cloud Service](../services/local-preference-cloud.service.md) - [User preference Cloud Service](../services/user-preference-cloud.service.md) - diff --git a/docs/process-services-cloud/components/form-cloud.component.md b/docs/process-services-cloud/components/form-cloud.component.md index ad78e9f96f..017d5c59d4 100644 --- a/docs/process-services-cloud/components/form-cloud.component.md +++ b/docs/process-services-cloud/components/form-cloud.component.md @@ -81,8 +81,8 @@ The template defined inside `empty-form` will be shown when no form definition i | disableCompleteButton | `boolean` | false | If true then the `Complete` outcome button is shown but it will be disabled. | | disableSaveButton | `boolean` | false | If true then the `Save` outcome button is shown but will be disabled. | | disableStartProcessButton | `boolean` | false | If true then the `Start Process` outcome button is shown but it will be disabled. | -| fieldValidators | [`FormFieldValidator`](../../../lib/core/form/components/widgets/core/form-field-validator.ts)`[]` | | Contains a list of form field validator instances. | -| form | [`FormCloud`](../../../lib/process-services-cloud/src/lib/form/models/form-cloud.model.ts) | | Underlying [form model](../../../lib/core/form/components/widgets/core/form.model.ts) instance. | +| fieldValidators | [`FormFieldValidator`](../../../lib/core/form/components/widgets/core/form-field-validator.ts)`[]` | | [FormFieldValidator](../../../lib/core/form/components/widgets/core/form-field-validator.ts) allow to override the form field validators provided. | +| form | [`FormModel`](../../../lib/core/form/components/widgets/core/form.model.ts) | | Underlying [form model](../../../lib/core/form/components/widgets/core/form.model.ts) instance. | | formId | `string` | | Task id to fetch corresponding form and values. | | nameNode | `string` | | Name to assign to the new node where the metadata are stored. | | path | `string` | | Path of the folder where the metadata will be stored. | @@ -101,12 +101,12 @@ The template defined inside `empty-form` will be shown when no form definition i | ---- | ---- | ----------- | | error | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`` | Emitted when any error occurs. | | executeOutcome | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`<`[`FormOutcomeEvent`](../../../lib/core/form/components/widgets/core/form-outcome-event.model.ts)`>` | Emitted when any outcome is executed. Default behaviour can be prevented via `event.preventDefault()`. | -| formCompleted | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`<`[`FormCloud`](../../../lib/process-services-cloud/src/lib/form/models/form-cloud.model.ts)`>` | Emitted when the form is submitted with the `Complete` outcome. | -| formContentClicked | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`` | | -| formDataRefreshed | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`<`[`FormCloud`](../../../lib/process-services-cloud/src/lib/form/models/form-cloud.model.ts)`>` | Emitted when form values are refreshed due to a data property change. | +| formCompleted | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`<`[`FormModel`](../../../lib/core/form/components/widgets/core/form.model.ts)`>` | Emitted when the form is submitted with the `Complete` outcome. | +| formContentClicked | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`` | Emitted when form content is clicked. | +| formDataRefreshed | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`<`[`FormModel`](../../../lib/core/form/components/widgets/core/form.model.ts)`>` | Emitted when form values are refreshed due to a data property change. | | formError | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`<`[`FormFieldModel`](../../core/models/form-field.model.md)`[]>` | Emitted when the supplied form values have a validation error. | -| formLoaded | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`<`[`FormCloud`](../../../lib/process-services-cloud/src/lib/form/models/form-cloud.model.ts)`>` | Emitted when the form is loaded or reloaded. | -| formSaved | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`<`[`FormCloud`](../../../lib/process-services-cloud/src/lib/form/models/form-cloud.model.ts)`>` | Emitted when the form is submitted with the `Save` or custom outcomes. | +| formLoaded | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`<`[`FormModel`](../../../lib/core/form/components/widgets/core/form.model.ts)`>` | Emitted when the form is loaded or reloaded. | +| formSaved | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`<`[`FormModel`](../../../lib/core/form/components/widgets/core/form.model.ts)`>` | Emitted when the form is submitted with the `Save` or custom outcomes. | ## Details diff --git a/docs/process-services-cloud/components/group-cloud.component.md b/docs/process-services-cloud/components/group-cloud.component.md index 8a8ec1b2e1..5c960c09fb 100644 --- a/docs/process-services-cloud/components/group-cloud.component.md +++ b/docs/process-services-cloud/components/group-cloud.component.md @@ -28,7 +28,7 @@ Searches Groups. | ---- | ---- | ------------- | ----------- | | appName | `string` | | Name of the application. If specified this shows the users who have access to the app. | | mode | `string` | | User selection mode (single/multiple). | -| preSelectGroups | [`GroupModel`](../../../lib/process-services-cloud/src/lib/group/models/group.model.ts)`[]` | \[] | Array of users to be pre-selected. This pre-selects all users in multi selection mode and only the first user of the array in single selection mode. | +| preSelectGroups | [`IdentityGroupModel`](../../../lib/core/userinfo/models/identity-group.model.ts)`[]` | \[] | Array of users to be pre-selected. This pre-selects all users in multi selection mode and only the first user of the array in single selection mode. | | roles | `string[]` | \[] | Role names of the groups to be listed. | | searchGroupsControl | `FormControl` | new FormControl() | FormControl to search the group | | title | `string` | | Title of the field | @@ -37,8 +37,8 @@ Searches Groups. | Name | Type | Description | | ---- | ---- | ----------- | -| removeGroup | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`<`[`GroupModel`](../../../lib/process-services-cloud/src/lib/group/models/group.model.ts)`>` | Emitted when a group is removed. | -| selectGroup | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`<`[`GroupModel`](../../../lib/process-services-cloud/src/lib/group/models/group.model.ts)`>` | Emitted when a group is selected. | +| removeGroup | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`<`[`IdentityGroupModel`](../../../lib/core/userinfo/models/identity-group.model.ts)`>` | Emitted when a group is removed. | +| selectGroup | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`<`[`IdentityGroupModel`](../../../lib/core/userinfo/models/identity-group.model.ts)`>` | Emitted when a group is selected. | ## Details diff --git a/docs/process-services-cloud/components/process-filters-cloud.component.md b/docs/process-services-cloud/components/process-filters-cloud.component.md index 39baa07bda..ff6b166263 100644 --- a/docs/process-services-cloud/components/process-filters-cloud.component.md +++ b/docs/process-services-cloud/components/process-filters-cloud.component.md @@ -25,7 +25,7 @@ Lists all available process filters and allows to select a filter. | Name | Type | Default value | Description | | ---- | ---- | ------------- | ----------- | | appName | `string` | | (required) The application name | -| filterParam | [`FilterParamsModel`](../../../lib/process-services/task-list/models/filter.model.ts) | | (optional) The filter to be selected by default | +| filterParam | [`FilterParamsModel`](../../../lib/process-services/src/lib/task-list/models/filter.model.ts) | | (optional) The filter to be selected by default | | showIcons | `boolean` | false | (optional) Toggles showing an icon by the side of each filter | ### Events diff --git a/docs/process-services-cloud/components/process-list-cloud.component.md b/docs/process-services-cloud/components/process-list-cloud.component.md index 5b12220bed..137da3c671 100644 --- a/docs/process-services-cloud/components/process-list-cloud.component.md +++ b/docs/process-services-cloud/components/process-list-cloud.component.md @@ -50,6 +50,7 @@ when the process list is empty: | Name | Type | Default value | Description | | ---- | ---- | ------------- | ----------- | +| actionsPosition | `string` | "right" | Position of the actions dropdown menu. Can be "left" or "right". | | appName | `string` | | The name of the application. | | businessKey | `string` | "" | Filter the processes to display only the ones with this businessKey value. | | id | `string` | "" | Filter the processes to display only the ones with this ID. | @@ -62,16 +63,22 @@ when the process list is empty: | processDefinitionId | `string` | "" | Filter the processes to display only the ones with this process definition ID. | | processDefinitionKey | `string` | "" | Filter the processes to display only the ones with this process definition key. | | selectionMode | `string` | "single" | Row selection mode. Can be "none", "single" or "multiple". For multiple mode, you can use Cmd (macOS) or Ctrl (Win) modifier key to toggle selection for multiple rows. | +| showActions | `boolean` | false | Toggles the data actions column. | +| showContextMenu | `boolean` | false | Toggles custom context menu for the component. | | sorting | [`ProcessListCloudSortingModel`](../../../lib/process-services-cloud/src/lib/process/process-list/models/process-list-sorting.model.ts)`[]` | | Array of objects specifying the sort order and direction for the list. The sort parameters are for BE sorting. | | status | `string` | "" | Filter the processes to display only the ones with this status. | +| stickyHeader | `boolean` | false | Toggles the sticky header mode. | ### Events | Name | Type | Description | | ---- | ---- | ----------- | | error | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`` | Emitted when an error occurs while loading the list of process instances from the server. | +| executeRowAction | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`<`[`DataRowActionEvent`](../../../lib/core/datatable/components/datatable/data-row-action.event.ts)`>` | Emitted when the user executes a row action. | | rowClick | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`` | Emitted when a row in the process list is clicked. | | rowsSelected | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`` | Emitted when rows are selected/unselected. | +| showRowActionsMenu | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`<`[`DataCellEvent`](../../../lib/core/datatable/components/datatable/data-cell.event.ts)`>` | Emitted before the actions menu is displayed for a row. | +| showRowContextMenu | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`<`[`DataCellEvent`](../../../lib/core/datatable/components/datatable/data-cell.event.ts)`>` | Emitted before the context menu is displayed for a row. | | success | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`` | Emitted when the list of process instances has been loaded successfully from the server. | ## Details @@ -192,6 +199,117 @@ The configuration related to the pagination can be changed from the `app.config. }, ``` +#### showRowContextMenu event + +Emitted before the context menu is displayed for a row. + +Note that the ProcessListCloud itself does not populate the context menu with items. +You can provide all necessary content via the handler. + +```html + + +``` + +Event properties: + +```ts +value: { + row: DataRow, + col: DataColumn, + actions: [] +} +``` + +Handler example: + +```ts +onShowRowContextMenu(event: DataCellEvent) { + event.value.actions = [ + { title: 'Hello Context Action' }, + { ... } + ] +} +``` + +![](../../docassets/images/context-menu-on-process-list.png) + +This event is cancellable. You can use `event.preventDefault()` to prevent the default behavior. + +The ProcessListCloud will automatically render the supplied menu items. + +See the [ContextMenu](https://www.npmjs.com/package/ng2-alfresco-core) +documentation for more details on the format and behavior of context actions. + +#### showRowActionsMenu event + +Emitted before the actions menu is displayed for a row. +Requires the `actions` property to be set to `true`. + +Event properties: + +```ts +value: { + row: DataRow, + action: any +} +``` + +Note that the ProcessListCloud itself does not populate the action menu with items. +You can provide all necessary content via the handler. + +This event is cancellable. You can use `event.preventDefault()` to prevent the default behavior. + +#### executeRowAction event + +Emitted when the user executes a row action. + +This usually accompanies a `showRowActionsMenu` event. +The ProcessListCloud itself does not execute actions but provides support for external +integration. If actions are provided using the `showRowActionsMenu` event +then `executeRowAction` will be automatically executed when the user clicks a +corresponding menu item. + +```html + + +``` + +```ts +import { DataCellEvent, DataRowActionEvent } from '@alfresco/adf-core'; + +onShowRowActionsMenu(event: DataCellEvent) { + let myAction = { + title: 'Hello Action' + // your custom metadata needed for onExecuteRowAction + }; + event.value.actions = [ + myAction + ]; +} + +onExecuteRowAction(event: DataRowActionEvent) { + let args = event.value; + console.log(args.row); + console.log(args.action); + window.alert(`My custom action: ${args.action.title}`); +} +``` + +![](../../docassets/images/action-menu-on-process-list.png) + +You can use any payloads for row actions. The only requirement for the objects is that they +must have a `title` property. + +When an action is selected in the dropdown menu, the ProcessListCloud invokes the `executeRowAction` event. +Use this to handle the response, inspect the action payload (and all custom properties defined +earlier), and perform the corresponding actions. + ## See also - [Data column component](../../core/components/data-column.component.md) diff --git a/docs/process-services-cloud/components/task-filters-cloud.component.md b/docs/process-services-cloud/components/task-filters-cloud.component.md index 81fb84ef55..942fe26d88 100644 --- a/docs/process-services-cloud/components/task-filters-cloud.component.md +++ b/docs/process-services-cloud/components/task-filters-cloud.component.md @@ -22,7 +22,7 @@ Shows all available filters. | Name | Type | Default value | Description | | ---- | ---- | ------------- | ----------- | | appName | `string` | | Display filters available to the current user for the application with the specified name. | -| filterParam | [`FilterParamsModel`](../../../lib/process-services/task-list/models/filter.model.ts) | | Parameters to use for the task filter cloud. If there is no match then the default filter (the first one in the list) is selected. | +| filterParam | [`FilterParamsModel`](../../../lib/process-services/src/lib/task-list/models/filter.model.ts) | | Parameters to use for the task filter cloud. If there is no match then the default filter (the first one in the list) is selected. | | showIcons | `boolean` | false | Toggles display of the filter's icons. | ### Events @@ -45,7 +45,7 @@ Use the `filterParam` property to restrict the range of filters that are shown: ``` -You can use properties from [`FilterParamsModel`](../../../lib/process-services/task-list/models/filter.model.ts) +You can use properties from [`FilterParamsModel`](../../../lib/process-services/src/lib/task-list/models/filter.model.ts) as the value of `filterParam` as shown in the table below: | Name | Type | Description | diff --git a/docs/process-services-cloud/components/task-form-cloud.component.md b/docs/process-services-cloud/components/task-form-cloud.component.md index 84c720406a..4535b089c3 100644 --- a/docs/process-services-cloud/components/task-form-cloud.component.md +++ b/docs/process-services-cloud/components/task-form-cloud.component.md @@ -49,8 +49,9 @@ Save and Complete buttons get disabled when at least one of the form's inputs ar | ---- | ---- | ----------- | | cancelClick | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`` | Emitted when the cancel button is clicked. | | error | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`` | Emitted when any error occurs. | -| formCompleted | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`<`[`FormCloud`](../../../lib/process-services-cloud/src/lib/form/models/form-cloud.model.ts)`>` | Emitted when the form is submitted with the `Complete` outcome. | -| formSaved | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`<`[`FormCloud`](../../../lib/process-services-cloud/src/lib/form/models/form-cloud.model.ts)`>` | Emitted when the form is saved. | +| formCompleted | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`<`[`FormModel`](../../../lib/core/form/components/widgets/core/form.model.ts)`>` | Emitted when the form is submitted with the `Complete` outcome. | +| formContentClicked | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`<`[`ContentLinkModel`](../../../lib/core/form/components/widgets/core/content-link.model.ts)`>` | Emitted when form content is clicked. | +| formSaved | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`<`[`FormModel`](../../../lib/core/form/components/widgets/core/form.model.ts)`>` | Emitted when the form is saved. | | taskClaimed | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`` | Emitted when the task is claimed. | | taskCompleted | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`` | Emitted when the task is completed. | | taskUnclaimed | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`` | Emitted when the task is unclaimed. | diff --git a/docs/process-services-cloud/components/task-list-cloud.component.md b/docs/process-services-cloud/components/task-list-cloud.component.md index b4e716855e..37c9e790af 100644 --- a/docs/process-services-cloud/components/task-list-cloud.component.md +++ b/docs/process-services-cloud/components/task-list-cloud.component.md @@ -51,6 +51,7 @@ when the task list is empty: | Name | Type | Default value | Description | | ---- | ---- | ------------- | ----------- | +| actionsPosition | `string` | "right" | Position of the actions dropdown menu. Can be "left" or "right". | | appName | `string` | "" | The name of the application. | | assignee | `string` | "" | The assignee of the process. Possible values are: "assignee" (the current user is the assignee), "candidate" (the current user is a task candidate", "group_x" (the task is assigned to a group where the current user is a member, no value (the current user is involved). | | createdDate | `string` | "" | Filter the tasks. Display only tasks created on the supplied date. | @@ -67,17 +68,23 @@ when the task list is empty: | processDefinitionId | `string` | "" | Filter the tasks. Display only tasks with processDefinitionId equal to the supplied value. | | processInstanceId | `string` | "" | Filter the tasks. Display only tasks with processInstanceId equal to the supplied value. | | selectionMode | `string` | "single" | Row selection mode. Can be none, `single` or `multiple`. For `multiple` mode, you can use the Cmd (macOS) or Ctrl (Win) modifier key to toggle selection for multiple rows. | +| showActions | `boolean` | false | Toggles the data actions column. | +| showContextMenu | `boolean` | false | Toggles custom context menu for the component. | | sorting | [`TaskListCloudSortingModel`](../../../lib/process-services-cloud/src/lib/task/task-list/models/task-list-sorting.model.ts)`[]` | | Specifies how the table should be sorted. The parameters are for BE sorting. | | standAlone | `boolean` | false | Filter the tasks. Display only the tasks that belong to a process in case is false or tasks that doesn't belong to a process in case of true. | | status | `string` | "" | Filter the tasks. Display only tasks with status equal to the supplied value. | +| stickyHeader | `boolean` | false | Toggles the sticky header mode. | ### Events | Name | Type | Description | | ---- | ---- | ----------- | | error | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`` | Emitted when an error occurs. | +| executeRowAction | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`<`[`DataRowActionEvent`](../../../lib/core/datatable/components/datatable/data-row-action.event.ts)`>` | Emitted when the user executes a row action. | | rowClick | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`` | Emitted when a task in the list is clicked | | rowsSelected | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`` | Emitted when rows are selected/unselected | +| showRowActionsMenu | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`<`[`DataCellEvent`](../../../lib/core/datatable/components/datatable/data-cell.event.ts)`>` | Emitted before the actions menu is displayed for a row. | +| showRowContextMenu | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`<`[`DataCellEvent`](../../../lib/core/datatable/components/datatable/data-cell.event.ts)`>` | Emitted before the context menu is displayed for a row. | | success | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`` | Emitted when the task list is loaded | ## Details @@ -214,6 +221,117 @@ typical tasklist. You can customize the styling of a column and also add features like tooltips and automatic translation of column titles. See the [`DataColumn`](../../../lib/core/datatable/data/data-column.model.ts) page for more information about these features. +#### showRowContextMenu event + +Emitted before the context menu is displayed for a row. + +Note that the [`TaskListCloudComponent`](../../process-services-cloud/components/task-list-cloud.component.md) itself does not populate the context menu with items. +You can provide all necessary content via the handler. + +```html + + +``` + +Event properties: + +```ts +value: { + row: DataRow, + col: DataColumn, + actions: [] +} +``` + +Handler example: + +```ts +onShowRowContextMenu(event: DataCellEvent) { + event.value.actions = [ + { title: 'Hello Context Action' }, + { ... } + ] +} +``` + +![](../../docassets/images/task-list-cloud-context-menu.png) + +This event is cancellable. You can use `event.preventDefault()` to prevent the default behavior. + +The [`TaskListCloudComponent`](../../process-services-cloud/components/task-list-cloud.component.md) will automatically render the supplied menu items. + +See the [ContextMenu](https://www.npmjs.com/package/ng2-alfresco-core) +documentation for more details on the format and behavior of context actions. + +#### showRowActionsMenu event + +Emitted before the actions menu is displayed for a row. +Requires the `actions` property to be set to `true`. + +Event properties: + +```ts +value: { + row: DataRow, + action: any +} +``` + +Note that the [`TaskListCloudComponent`](../../process-services-cloud/components/task-list-cloud.component.md) itself does not populate the action menu with items. +You can provide all necessary content via the handler. + +This event is cancellable. You can use `event.preventDefault()` to prevent the default behavior. + +#### executeRowAction event + +Emitted when the user executes a row action. + +This usually accompanies a `showRowActionsMenu` event. +The [`TaskListCloudComponent`](../../process-services-cloud/components/task-list-cloud.component.md) itself does not execute actions but provides support for external +integration. If actions are provided using the `showRowActionsMenu` event +then `executeRowAction` will be automatically executed when the user clicks a +corresponding menu item. + +```html + + +``` + +```ts +import { DataCellEvent, DataRowActionEvent } from '@alfresco/adf-core'; + +onShowRowActionsMenu(event: DataCellEvent) { + let myAction = { + title: 'Hello Action' + // your custom metadata needed for onExecuteRowAction + }; + event.value.actions = [ + myAction + ]; +} + +onExecuteRowAction(event: DataRowActionEvent) { + let args = event.value; + console.log(args.row); + console.log(args.action); + window.alert(`My custom action: ${args.action.title}`); +} +``` + +![](../../docassets/images/task-list-cloud-action-menu.png) + +You can use any payloads for row actions. The only requirement for the objects is that they +must have a `title` property. + +When an action is selected in the dropdown menu, the [`TaskListCloudComponent`](../../process-services-cloud/components/task-list-cloud.component.md) invokes the `executeRowAction` event. +Use this to handle the response, inspect the action payload (and all custom properties defined +earlier), and perform the corresponding actions. + ## See also - [Data column component](../../core/components/data-column.component.md) diff --git a/docs/process-services-cloud/pipes/group-initial.pipe.md b/docs/process-services-cloud/pipes/group-initial.pipe.md index 253196f0b3..e8772ea872 100644 --- a/docs/process-services-cloud/pipes/group-initial.pipe.md +++ b/docs/process-services-cloud/pipes/group-initial.pipe.md @@ -23,7 +23,7 @@ Extracts the initial character from a group name. ## Details -This pipe takes a [`GroupModel`](../../../lib/process-services-cloud/src/lib/group/models/group.model.ts) +This pipe takes a [`IdentityGroupModel`](../../../lib/core/userinfo/models/identity-group.model.ts) object as its parameter and extracts the initial character from the `name` property. The initial is a handy way to identify the group in lists and other situations where there is limited screen space available. diff --git a/docs/process-services-cloud/services/form-cloud.service.md b/docs/process-services-cloud/services/form-cloud.service.md index 95df4c0f10..e159536788 100644 --- a/docs/process-services-cloud/services/form-cloud.service.md +++ b/docs/process-services-cloud/services/form-cloud.service.md @@ -32,8 +32,8 @@ class MyComponent { - _taskId:_ `string` - ID of the target task - _processInstanceId:_ `string` - - _formId:_ `string` - ID of the form to complete - - _formValues:_ [`FormValues`](../../../lib/core/form/components/widgets/core/form-values.ts) - [Form](../../../lib/process-services/task-list/models/form.model.ts) values object - - _outcome:_ `string` - [Form](../../../lib/process-services/task-list/models/form.model.ts) outcome + - _formValues:_ [`FormValues`](../../../lib/core/form/components/widgets/core/form-values.ts) - [Form](../../../lib/process-services/src/lib/task-list/models/form.model.ts) values object + - _outcome:_ `string` - [Form](../../../lib/process-services/src/lib/task-list/models/form.model.ts) outcome - **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`TaskDetailsCloudModel`](../../../lib/process-services-cloud/src/lib/task/start-task/models/task-details-cloud.model.ts)`>` - Updated task details - **createTemporaryRawRelatedContent**(file: `any`, nodeId: `string`, contentHost: `string`): [`Observable`](http://reactivex.io/documentation/observable.html)``
@@ -78,19 +78,19 @@ class MyComponent { - _appName:_ `string` - Name of the app - _taskId:_ `string` - ID of the target task - **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`TaskVariableCloud`](../../../lib/process-services-cloud/src/lib/form/models/task-variable-cloud.model.ts)`[]>` - Task variables -- **parseForm**(json: `any`, data?: [`TaskVariableCloud`](../../../lib/process-services-cloud/src/lib/form/models/task-variable-cloud.model.ts)`[]`, readOnly: `boolean` = `false`): [`FormCloud`](../../../lib/process-services-cloud/src/lib/form/models/form-cloud.model.ts)
+- **parseForm**(json: `any`, data?: [`TaskVariableCloud`](../../../lib/process-services-cloud/src/lib/form/models/task-variable-cloud.model.ts)`[]`, readOnly: `boolean` = `false`): [`FormModel`](../../../lib/core/form/components/widgets/core/form.model.ts)
Parses JSON data to create a corresponding form. - _json:_ `any` - JSON data to create the form - _data:_ [`TaskVariableCloud`](../../../lib/process-services-cloud/src/lib/form/models/task-variable-cloud.model.ts)`[]` - (Optional) Values for the form's fields - _readOnly:_ `boolean` - Toggles whether or not the form should be read-only - - **Returns** [`FormCloud`](../../../lib/process-services-cloud/src/lib/form/models/form-cloud.model.ts) - [Form](../../../lib/process-services/task-list/models/form.model.ts) created from the JSON specification + - **Returns** [`FormModel`](../../../lib/core/form/components/widgets/core/form.model.ts) - [Form](../../../lib/process-services/src/lib/task-list/models/form.model.ts) created from the JSON specification - **saveTaskForm**(appName: `string`, taskId: `string`, processInstanceId: `string`, formId: `string`, formValues: [`FormValues`](../../../lib/core/form/components/widgets/core/form-values.ts)): [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`TaskDetailsCloudModel`](../../../lib/process-services-cloud/src/lib/task/start-task/models/task-details-cloud.model.ts)`>`
Saves a task form. - _appName:_ `string` - Name of the app - _taskId:_ `string` - ID of the target task - _processInstanceId:_ `string` - - _formId:_ `string` - ID of the form to save - - _formValues:_ [`FormValues`](../../../lib/core/form/components/widgets/core/form-values.ts) - [Form](../../../lib/process-services/task-list/models/form.model.ts) values object + - _formValues:_ [`FormValues`](../../../lib/core/form/components/widgets/core/form-values.ts) - [Form](../../../lib/process-services/src/lib/task-list/models/form.model.ts) values object - **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`TaskDetailsCloudModel`](../../../lib/process-services-cloud/src/lib/task/start-task/models/task-details-cloud.model.ts)`>` - Updated task details ## See also diff --git a/docs/process-services-cloud/services/local-preference-cloud.service.md b/docs/process-services-cloud/services/local-preference-cloud.service.md index 1ca461d0c0..8ee1eb190f 100644 --- a/docs/process-services-cloud/services/local-preference-cloud.service.md +++ b/docs/process-services-cloud/services/local-preference-cloud.service.md @@ -13,35 +13,26 @@ Manages Local Storage preferences. ### Methods -- **createPreference**(appName: `string`, key: `string`, newPreference: `any`): [`Observable`](http://reactivex.io/documentation/observable.html)``
+- **createPreference**(key: `string`, newPreference: `any`): [`Observable`](http://reactivex.io/documentation/observable.html)``
Creates local preference. - - _appName:_ `string` - Name of the target app - _key:_ `string` - Key of the target preference - - _newPreference:_ `any` - + - _newPreference:_ `any` - Details of new local preference - **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`` - Observable of created local preferences - **deletePreference**(key: `string`, preferences: `any`): [`Observable`](http://reactivex.io/documentation/observable.html)``
Deletes local preference by given preference key. - _key:_ `string` - Key of the target preference - _preferences:_ `any` - Details of updated preferences - **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`` - Observable of preferences without deleted preference -- **getPreferenceByKey**(appName: `string`, key: `string`): [`Observable`](http://reactivex.io/documentation/observable.html)``
+- **getPreferenceByKey**(key: `string`): [`Observable`](http://reactivex.io/documentation/observable.html)``
Gets local preference. - - _appName:_ `string` - Name of the target app - _key:_ `string` - Key of the target preference - **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`` - Observable of local preference -- **getPreferences**(appName: `string`, key: `string`): [`Observable`](http://reactivex.io/documentation/observable.html)``
+- **getPreferences**(key: `string`): [`Observable`](http://reactivex.io/documentation/observable.html)``
Gets local preferences - - _appName:_ `string` - Name of the target app - - _key:_ `string` - (Optional) (Optional) (Optional) (Optional) + - _key:_ `string` - (Optional) - **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`` - List of local preferences -- **prepareLocalPreferenceResponse**(key: `string`): `any`
- - - _key:_ `string` - - - **Returns** `any` - - -- **updatePreference**(appName: `string`, key: `string`, updatedPreference: `any`): [`Observable`](http://reactivex.io/documentation/observable.html)``
+- **updatePreference**(key: `string`, updatedPreference: `any`): [`Observable`](http://reactivex.io/documentation/observable.html)``
Updates local preference. - - _appName:_ `string` - Name of the target app - _key:_ `string` - Key of the target preference - _updatedPreference:_ `any` - Details of updated preference - **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`` - Observable of updated local preferences diff --git a/docs/process-services-cloud/services/process-filter-cloud.service.md b/docs/process-services-cloud/services/process-filter-cloud.service.md index b9c38e2c3f..99f4e3bfe7 100644 --- a/docs/process-services-cloud/services/process-filter-cloud.service.md +++ b/docs/process-services-cloud/services/process-filter-cloud.service.md @@ -56,7 +56,6 @@ import { LocalPreferenceCloudService, PROCESS_FILTERS_SERVICE_TOKEN } from '@alf ] }) export class ExampleModule {} - ``` If you would like to inject the [User Preference Cloud Service](../../process-services-cloud/services/user-preference-cloud.service.md), you can inject the service like below shown @@ -74,7 +73,6 @@ import { UserPreferenceCloudService, PROCESS_FILTERS_SERVICE_TOKEN } from '@alfr ] }) export class ExampleModule {} - ``` ## See also diff --git a/docs/process-services-cloud/services/task-filter-cloud.service.md b/docs/process-services-cloud/services/task-filter-cloud.service.md index 2ae43bc229..a26b5ca35e 100644 --- a/docs/process-services-cloud/services/task-filter-cloud.service.md +++ b/docs/process-services-cloud/services/task-filter-cloud.service.md @@ -21,11 +21,11 @@ Manages task filters. Deletes a task filter - _deletedFilter:_ [`TaskFilterCloudModel`](../../../lib/process-services-cloud/src/lib/task/task-filters/models/filter-cloud.model.ts) - - **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`TaskFilterCloudModel`](../../../lib/process-services-cloud/src/lib/task/task-filters/models/filter-cloud.model.ts)`[]>` - Observable of task instance filters without deleted filter -- **getTaskFilterById**(appName: `string`, id: `string`): `any`
+- **getTaskFilterById**(appName: `string`, id: `string`): [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`TaskFilterCloudModel`](../../../lib/process-services-cloud/src/lib/task/task-filters/models/filter-cloud.model.ts)`>`
Gets a task filter. - _appName:_ `string` - Name of the target app - _id:_ `string` - ID of the task - - **Returns** `any` - Details of the task filter + - **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`TaskFilterCloudModel`](../../../lib/process-services-cloud/src/lib/task/task-filters/models/filter-cloud.model.ts)`>` - Details of the task filter - **getTaskListFilters**(appName?: `string`): [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`TaskFilterCloudModel`](../../../lib/process-services-cloud/src/lib/task/task-filters/models/filter-cloud.model.ts)`[]>`
Gets all task filters for a task app. - _appName:_ `string` - (Optional) Name of the target app @@ -74,10 +74,9 @@ import { LocalPreferenceCloudService, TASK_FILTERS_SERVICE_TOKEN } from '@alfres ] }) export class ExampleModule {} - ``` -If you would like to inject the [UserPreferenceCloudService](../../process-services-cloud/services/user-preference-cloud.service.md), you can inject the service like below shown +If you would like to inject the [`UserPreferenceCloudService`](../../process-services-cloud/services/user-preference-cloud.service.md), you can inject the service like below shown ```ts import { NgModule } from '@angular/core'; @@ -92,7 +91,6 @@ import { UserPreferenceCloudService, TASK_FILTERS_SERVICE_TOKEN } from '@alfresc ] }) export class ExampleModule {} - ``` ## See also diff --git a/docs/process-services-cloud/services/user-preference-cloud.service.md b/docs/process-services-cloud/services/user-preference-cloud.service.md index 8f9ae4c8a8..fe379975e3 100644 --- a/docs/process-services-cloud/services/user-preference-cloud.service.md +++ b/docs/process-services-cloud/services/user-preference-cloud.service.md @@ -47,4 +47,4 @@ Manages user preferences. ## See also -- [Local preference Cloud Service](local-preference-cloud.service.md) \ No newline at end of file +- [Local preference Cloud Service](local-preference-cloud.service.md) diff --git a/docs/process-services/components/apps-list.component.md b/docs/process-services/components/apps-list.component.md index 56d1cb9945..3412cd629e 100644 --- a/docs/process-services/components/apps-list.component.md +++ b/docs/process-services/components/apps-list.component.md @@ -5,7 +5,7 @@ Status: Active Last reviewed: 2019-01-14 --- -# [Apps List Component](../../../lib/process-services/app-list/apps-list.component.ts "Defined in apps-list.component.ts") +# [Apps List Component](../../../lib/process-services/src/lib/app-list/apps-list.component.ts "Defined in apps-list.component.ts") Shows all available apps. @@ -46,7 +46,7 @@ You can show custom content when there are no apps available by supplying an | Name | Type | Description | | ---- | ---- | ----------- | -| appClick | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`<`[`AppDefinitionRepresentationModel`](../../../lib/process-services/task-list/models/filter.model.ts)`>` | Emitted when an app entry is clicked. | +| appClick | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`<`[`AppDefinitionRepresentationModel`](../../../lib/process-services/src/lib/task-list/models/filter.model.ts)`>` | Emitted when an app entry is clicked. | | error | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`` | Emitted when an error occurs. | ## Details diff --git a/docs/process-services/components/attach-form.component.md b/docs/process-services/components/attach-form.component.md index fbf5bc7ddf..b78b686065 100644 --- a/docs/process-services/components/attach-form.component.md +++ b/docs/process-services/components/attach-form.component.md @@ -5,7 +5,7 @@ Status: Active Last reviewed: 2018-11-20 --- -# [Attach Form component](../../../lib/process-services/task-list/components/attach-form.component.ts "Defined in attach-form.component.ts") +# [Attach Form component](../../../lib/process-services/src/lib/task-list/components/attach-form.component.ts "Defined in attach-form.component.ts") This component can be used when there is no form attached to a task and you want to add one. diff --git a/docs/process-services/components/checklist.component.md b/docs/process-services/components/checklist.component.md index 8a4b341e12..a40e3249d3 100644 --- a/docs/process-services/components/checklist.component.md +++ b/docs/process-services/components/checklist.component.md @@ -5,7 +5,7 @@ Status: Active Last reviewed: 2018-11-19 --- -# [Checklist Component](../../../lib/process-services/task-list/components/checklist.component.ts "Defined in checklist.component.ts") +# [Checklist Component](../../../lib/process-services/src/lib/task-list/components/checklist.component.ts "Defined in checklist.component.ts") Shows the checklist task functionality. @@ -33,6 +33,6 @@ Shows the checklist task functionality. | Name | Type | Description | | ---- | ---- | ----------- | -| checklistTaskCreated | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`<`[`TaskDetailsModel`](../../../lib/process-services/task-list/models/task-details.model.ts)`>` | Emitted when a new checklist task is created. | +| checklistTaskCreated | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`<`[`TaskDetailsModel`](../../../lib/process-services/src/lib/task-list/models/task-details.model.ts)`>` | Emitted when a new checklist task is created. | | checklistTaskDeleted | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`` | Emitted when a checklist task is deleted. | | error | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`` | Emitted when an error occurs. | diff --git a/docs/process-services/components/create-process-attachment.component.md b/docs/process-services/components/create-process-attachment.component.md index 9d423a195b..9524cedfbc 100644 --- a/docs/process-services/components/create-process-attachment.component.md +++ b/docs/process-services/components/create-process-attachment.component.md @@ -5,7 +5,7 @@ Status: Active Last reviewed: 2019-01-14 --- -# [Create Process Attachment component](../../../lib/process-services/attachment/create-process-attachment.component.ts "Defined in create-process-attachment.component.ts") +# [Create Process Attachment component](../../../lib/process-services/src/lib/attachment/create-process-attachment.component.ts "Defined in create-process-attachment.component.ts") Displays an Upload Component (Drag and Click) to upload the attachment to a specified process instance. diff --git a/docs/process-services/components/create-task-attachment.component.md b/docs/process-services/components/create-task-attachment.component.md index 80b52e8b6d..4ca054a808 100644 --- a/docs/process-services/components/create-task-attachment.component.md +++ b/docs/process-services/components/create-task-attachment.component.md @@ -5,7 +5,7 @@ Status: Active Last reviewed: 2019-01-14 --- -# [Create Task Attachment Component](../../../lib/process-services/attachment/create-task-attachment.component.ts "Defined in create-task-attachment.component.ts") +# [Create Task Attachment Component](../../../lib/process-services/src/lib/attachment/create-task-attachment.component.ts "Defined in create-task-attachment.component.ts") Displays an Upload Component (Drag and Click) to upload the attachment to a specified task. diff --git a/docs/process-services/components/form.component.md b/docs/process-services/components/form.component.md index 8b71a62b42..3c5a73cef6 100644 --- a/docs/process-services/components/form.component.md +++ b/docs/process-services/components/form.component.md @@ -5,9 +5,9 @@ Status: Active Last reviewed: 2019-01-16 --- -# [Form component](../../../lib/process-services/form/form.component.ts "Defined in form.component.ts") +# [Form component](../../../lib/process-services/src/lib/form/form.component.ts "Defined in form.component.ts") -Shows a [`Form`](../../../lib/process-services/task-list/models/form.model.ts) from APS +Shows a [`Form`](../../../lib/process-services/src/lib/task-list/models/form.model.ts) from APS (See it live: [Form Quickstart](https://embed.plnkr.co/YSLXTqb3DtMhVJSqXKkE/)) @@ -178,7 +178,7 @@ The `nameNode` parameter is optional. ``` -Here, the node metadata is shown in an APS [`Form`](../../../lib/process-services/task-list/models/form.model.ts) +Here, the node metadata is shown in an APS [`Form`](../../../lib/process-services/src/lib/task-list/models/form.model.ts) with the form fields themselves saved as metadata. The `nameNode` parameter is optional. ### Controlling outcome execution behaviour @@ -349,7 +349,7 @@ In the CSS, you can target any outcome ID and change the style as in this exampl APS allows you to configure where to store files and folders in your on-site Alfresco repositories. If you have your repositories configured like this, you can use the attach file/folder -form widget to get a file from those repositories and attach it to the [`Form`](../../../lib/process-services/task-list/models/form.model.ts). +form widget to get a file from those repositories and attach it to the [`Form`](../../../lib/process-services/src/lib/task-list/models/form.model.ts). **Note:** your repositories could be configured to be on different servers from the one where your front-end is deployed. Make sure you are using the right Proxy or configuration, diff --git a/docs/process-services/components/people-list.component.md b/docs/process-services/components/people-list.component.md index 6b43c76534..f0ad4ef0ba 100644 --- a/docs/process-services/components/people-list.component.md +++ b/docs/process-services/components/people-list.component.md @@ -5,7 +5,7 @@ Status: Active Last reviewed: 2019-01-14 --- -# [People list component](../../../lib/process-services/people/components/people-list/people-list.component.ts "Defined in people-list.component.ts") +# [People list component](../../../lib/process-services/src/lib/people/components/people-list/people-list.component.ts "Defined in people-list.component.ts") Shows a list of users (people). @@ -85,5 +85,5 @@ You can use column templates with the [people list component](people-list.compon | Name | Type | Description | | ---- | ---- | ----------- | -| clickAction | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`<`[`UserEventModel`](../../../lib/process-services/task-list/models/user-event.model.ts)`>` | Emitted when the user clicks in the 'Three Dots' drop down menu for a row. | +| clickAction | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`<`[`UserEventModel`](../../../lib/process-services/src/lib/task-list/models/user-event.model.ts)`>` | Emitted when the user clicks in the 'Three Dots' drop down menu for a row. | | clickRow | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`<`[`UserProcessModel`](../../core/models/user-process.model.md)`>` | Emitted when the user clicks a row in the people list. | diff --git a/docs/process-services/components/people-search.component.md b/docs/process-services/components/people-search.component.md index 4389ed0dd0..70aa49d70d 100644 --- a/docs/process-services/components/people-search.component.md +++ b/docs/process-services/components/people-search.component.md @@ -5,7 +5,7 @@ Status: Active Last reviewed: 2018-11-14 --- -# [People Search component](../../../lib/process-services/people/components/people-search/people-search.component.ts "Defined in people-search.component.ts") +# [People Search component](../../../lib/process-services/src/lib/people/components/people-search/people-search.component.ts "Defined in people-search.component.ts") Searches users/people. @@ -39,7 +39,7 @@ special sub-components in the body of the `` element: | Name | Type | Description | | ---- | ---- | ----------- | -| closeSearch | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`` | Emitted when the "close" button is clicked. | +| closeSearch | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`<>` | Emitted when the "close" button is clicked. | | searchPeople | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`` | Emitted when a search is performed with a new keyword. | | success | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`<`[`UserProcessModel`](../../core/models/user-process.model.md)`>` | Emitted when a user is selected and the action button is clicked. | diff --git a/docs/process-services/components/people.component.md b/docs/process-services/components/people.component.md index 7f20a65315..dd61cfc886 100644 --- a/docs/process-services/components/people.component.md +++ b/docs/process-services/components/people.component.md @@ -5,7 +5,7 @@ Status: Active Last reviewed: 2018-11-19 --- -# [People Component](../../../lib/process-services/people/components/people/people.component.ts "Defined in people.component.ts") +# [People Component](../../../lib/process-services/src/lib/people/components/people/people.component.ts "Defined in people.component.ts") Displays users involved with a specified task diff --git a/docs/process-services/components/process-attachment-list.component.md b/docs/process-services/components/process-attachment-list.component.md index 3208457218..be0192907e 100644 --- a/docs/process-services/components/process-attachment-list.component.md +++ b/docs/process-services/components/process-attachment-list.component.md @@ -5,7 +5,7 @@ Status: Active Last reviewed: 2019-01-14 --- -# [Process Attachment List component](../../../lib/process-services/attachment/process-attachment-list.component.ts "Defined in process-attachment-list.component.ts") +# [Process Attachment List component](../../../lib/process-services/src/lib/attachment/process-attachment-list.component.ts "Defined in process-attachment-list.component.ts") Displays documents attached to a specified process instance. @@ -20,7 +20,7 @@ Displays documents attached to a specified process instance. ``` -Make sure to override the [`UploadService`](../../core/services/upload.service.md) with the [`ProcessUploadService`](../../../lib/process-services/task-list/services/process-upload.service.ts) +Make sure to override the [`UploadService`](../../core/services/upload.service.md) with the [`ProcessUploadService`](../../../lib/process-services/src/lib/task-list/services/process-upload.service.ts) ```ts import { UploadService } from '@alfresco/adf-core'; @@ -67,9 +67,9 @@ A default template will be used if you don't supply a custom one to override it: | Name | Type | Description | | ---- | ---- | ----------- | -| attachmentClick | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`` | Emitted when the attachment is double-clicked or the view option is selected from the context menu by the user from within the component. Returns a [Blob](https://developer.mozilla.org/en-US/docs/Web/API/Blob) representing the object that was clicked. | +| attachmentClick | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`<>` | Emitted when the attachment is double-clicked or the view option is selected from the context menu by the user from within the component. Returns a [Blob](https://developer.mozilla.org/en-US/docs/Web/API/Blob) representing the object that was clicked. | | error | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`` | Emitted when the attachment list is not able to fetch the attachments (eg, following a network error). | -| success | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`` | Emitted when the attachment list has fetched all the attachments. Returns a list of attachments. | +| success | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`<>` | Emitted when the attachment list has fetched all the attachments. Returns a list of attachments. | ## Details diff --git a/docs/process-services/components/process-comments.component.md b/docs/process-services/components/process-comments.component.md index 7977890652..7bb82fdb60 100644 --- a/docs/process-services/components/process-comments.component.md +++ b/docs/process-services/components/process-comments.component.md @@ -4,7 +4,7 @@ Added: v2.0.0 Status: Active --- -# [Process Instance Comments component](../../../lib/process-services/process-comments/process-comments.component.ts "Defined in process-comments.component.ts") +# [Process Instance Comments component](../../../lib/process-services/src/lib/process-comments/process-comments.component.ts "Defined in process-comments.component.ts") Displays comments associated with a particular process instance and allows the user to add new comments. diff --git a/docs/process-services/components/process-filters.component.md b/docs/process-services/components/process-filters.component.md index 6f35ad45b1..47f740d932 100644 --- a/docs/process-services/components/process-filters.component.md +++ b/docs/process-services/components/process-filters.component.md @@ -5,7 +5,7 @@ Status: Active Last reviewed: 2018-09-14 --- -# [Process Filters Component](../../../lib/process-services/process-list/components/process-filters.component.ts "Defined in process-filters.component.ts") +# [Process Filters Component](../../../lib/process-services/src/lib/process-list/components/process-filters.component.ts "Defined in process-filters.component.ts") Collection of criteria used to filter process instances, which may be customized by users. @@ -36,7 +36,7 @@ Collection of criteria used to filter process instances, which may be customized | ---- | ---- | ------------- | ----------- | | appId | `number` | | Display filters available to the current user for the application with the specified ID. | | appName | `string` | | Display filters available to the current user for the application with the specified name. | -| filterParam | [`FilterProcessRepresentationModel`](../../../lib/process-services/process-list/models/filter-process.model.ts) | | The parameters to filter the task filter. If there is no match then the default one (ie, the first filter in the list) is selected. | +| filterParam | [`FilterProcessRepresentationModel`](../../../lib/process-services/src/lib/process-list/models/filter-process.model.ts) | | The parameters to filter the task filter. If there is no match then the default one (ie, the first filter in the list) is selected. | | showIcon | `boolean` | true | Toggle to show or hide the filter's icon. | ### Events @@ -66,7 +66,7 @@ If both `appId` and `appName` are specified then `appName` will take precedence ``` -You can use inside the filterParam one of the properties defined by [`FilterParamsModel`](../../../lib/process-services/task-list/models/filter.model.ts) (see below). +You can use inside the filterParam one of the properties defined by [`FilterParamsModel`](../../../lib/process-services/src/lib/task-list/models/filter.model.ts) (see below). ### FilterParamsModel diff --git a/docs/process-services/components/process-instance-details.component.md b/docs/process-services/components/process-instance-details.component.md index f34fafd3e7..cd8a1a9955 100644 --- a/docs/process-services/components/process-instance-details.component.md +++ b/docs/process-services/components/process-instance-details.component.md @@ -5,7 +5,7 @@ Status: Active Last reviewed: 2018-11-19 --- -# [Process Details component](../../../lib/process-services/process-list/components/process-instance-details.component.ts "Defined in process-instance-details.component.ts") +# [Process Details component](../../../lib/process-services/src/lib/process-list/components/process-instance-details.component.ts "Defined in process-instance-details.component.ts") Displays detailed information about a specified process instance @@ -34,4 +34,4 @@ Displays detailed information about a specified process instance | error | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`` | Emitted when an error occurs. | | processCancelled | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`` | Emitted when the current process is cancelled by the user from within the component. | | showProcessDiagram | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`` | Emitted when the "show diagram" button is clicked. | -| taskClick | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`<`[`TaskDetailsEvent`](../../../lib/process-services/task-list/models/task-details.event.ts)`>` | Emitted when a task is clicked. | +| taskClick | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`<`[`TaskDetailsEvent`](../../../lib/process-services/src/lib/task-list/models/task-details.event.ts)`>` | Emitted when a task is clicked. | diff --git a/docs/process-services/components/process-instance-header.component.md b/docs/process-services/components/process-instance-header.component.md index d36238d702..ec6b60cd0c 100644 --- a/docs/process-services/components/process-instance-header.component.md +++ b/docs/process-services/components/process-instance-header.component.md @@ -5,7 +5,7 @@ Status: Active Last reviewed: 2019-01-14 --- -# [Process Instance Details Header component](../../../lib/process-services/process-list/components/process-instance-header.component.ts "Defined in process-instance-header.component.ts") +# [Process Instance Details Header component](../../../lib/process-services/src/lib/process-list/components/process-instance-header.component.ts "Defined in process-instance-header.component.ts") Sub-component of the process details component, which renders some general information about the selected process. @@ -25,7 +25,7 @@ Sub-component of the process details component, which renders some general infor | Name | Type | Default value | Description | | ---- | ---- | ------------- | ----------- | -| processInstance | [`ProcessInstance`](../../../lib/process-services/process-list/models/process-instance.model.ts) | | (**required**) Full details of the process instance to display information about. | +| processInstance | [`ProcessInstance`](../../../lib/process-services/src/lib/process-list/models/process-instance.model.ts) | | (**required**) Full details of the process instance to display information about. | ## Details diff --git a/docs/process-services/components/process-instance-tasks.component.md b/docs/process-services/components/process-instance-tasks.component.md index 3872d59229..80b30122f3 100644 --- a/docs/process-services/components/process-instance-tasks.component.md +++ b/docs/process-services/components/process-instance-tasks.component.md @@ -5,7 +5,7 @@ Status: Active Last reviewed: 2018-11-19 --- -# [Process Instance Tasks component](../../../lib/process-services/process-list/components/process-instance-tasks.component.ts "Defined in process-instance-tasks.component.ts") +# [Process Instance Tasks component](../../../lib/process-services/src/lib/process-list/components/process-instance-tasks.component.ts "Defined in process-instance-tasks.component.ts") Lists both the active and completed tasks associated with a particular process instance @@ -24,7 +24,7 @@ Lists both the active and completed tasks associated with a particular process i | Name | Type | Default value | Description | | ---- | ---- | ------------- | ----------- | -| processInstanceDetails | [`ProcessInstance`](../../../lib/process-services/process-list/models/process-instance.model.ts) | | (**required**) The ID of the process instance to display tasks for. | +| processInstanceDetails | [`ProcessInstance`](../../../lib/process-services/src/lib/process-list/models/process-instance.model.ts) | | (**required**) The ID of the process instance to display tasks for. | | showRefreshButton | `boolean` | true | Toggles whether to show a refresh button next to the list of tasks to allow it to be updated from the server. | ### Events @@ -32,4 +32,4 @@ Lists both the active and completed tasks associated with a particular process i | Name | Type | Description | | ---- | ---- | ----------- | | error | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`` | Emitted when an error occurs. | -| taskClick | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`<`[`TaskDetailsEvent`](../../../lib/process-services/task-list/models/task-details.event.ts)`>` | Emitted when a task is clicked. | +| taskClick | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`<`[`TaskDetailsEvent`](../../../lib/process-services/src/lib/task-list/models/task-details.event.ts)`>` | Emitted when a task is clicked. | diff --git a/docs/process-services/components/process-list.component.md b/docs/process-services/components/process-list.component.md index 1176a44cc5..dd75296209 100644 --- a/docs/process-services/components/process-list.component.md +++ b/docs/process-services/components/process-list.component.md @@ -5,7 +5,7 @@ Status: Active Last reviewed: 2019-01-16 --- -# [Process Instance List](../../../lib/process-services/process-list/components/process-list.component.ts "Defined in process-list.component.ts") +# [Process Instance List](../../../lib/process-services/src/lib/process-list/components/process-list.component.ts "Defined in process-list.component.ts") Renders a list containing all the process instances matched by the parameters specified. @@ -70,12 +70,12 @@ when the process list is empty: | ---- | ---- | ----------- | | error | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`` | Emitted when an error occurs while loading the list of process instances from the server. | | rowClick | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`` | Emitted when a row in the process list is clicked. | -| success | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`<`[`ProcessListModel`](../../../lib/process-services/process-list/models/process-list.model.ts)`>` | Emitted when the list of process instances has been loaded successfully from the server. | +| success | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`<`[`ProcessListModel`](../../../lib/process-services/src/lib/process-list/models/process-list.model.ts)`>` | Emitted when the list of process instances has been loaded successfully from the server. | ## Details The list can show any of the properties of the -[`ProcessInstance`](../../../lib/process-services/process-list/models/process-instance.model.ts) +[`ProcessInstance`](../../../lib/process-services/src/lib/process-list/models/process-instance.model.ts) class. The example below shows how to define a custom schema for the list in the `app.config.json` file and access it with the `presetColumn` property: ```json diff --git a/docs/process-services/components/select-apps-dialog.component.md b/docs/process-services/components/select-apps-dialog.component.md index 383207998d..6c59c463a8 100644 --- a/docs/process-services/components/select-apps-dialog.component.md +++ b/docs/process-services/components/select-apps-dialog.component.md @@ -5,7 +5,7 @@ Status: Active Last reviewed: 2019-01-14 --- -# [Select App Component](../../../lib/process-services/app-list/select-apps-dialog-component.ts "Defined in select-apps-dialog-component.ts") +# [Select App Component](../../../lib/process-services/src/lib/app-list/select-apps-dialog-component.ts "Defined in select-apps-dialog-component.ts") Shows all available apps and returns the selected app. diff --git a/docs/process-services/components/start-process.component.md b/docs/process-services/components/start-process.component.md index 7b3eed1271..f5f247d7b3 100644 --- a/docs/process-services/components/start-process.component.md +++ b/docs/process-services/components/start-process.component.md @@ -5,7 +5,7 @@ Status: Active Last reviewed: 2019-01-14 --- -# [Start Process component](../../../lib/process-services/process-list/components/start-process.component.ts "Defined in start-process.component.ts") +# [Start Process component](../../../lib/process-services/src/lib/process-list/components/start-process.component.ts "Defined in start-process.component.ts") Starts a process. @@ -44,15 +44,15 @@ Starts a process. | processFilterSelector | `boolean` | true | (optional) Parameter to enable selection of process when filtering. | | showSelectProcessDropdown | `boolean` | true | Hide or show the process selection dropdown. | | values | [`FormValues`](../../../lib/core/form/components/widgets/core/form-values.ts) | | Parameter to pass form field values in the start form if one is associated. | -| variables | [`ProcessInstanceVariable`](../../../lib/process-services/process-list/models/process-instance-variable.model.ts)`[]` | | Variables in the input to the process [`RestVariable`](https://github.com/Alfresco/alfresco-js-api/blob/development/src/api/activiti-rest-api/docs/RestVariable.md). | +| variables | [`ProcessInstanceVariable`](../../../lib/process-services/src/lib/process-list/models/process-instance-variable.model.ts)`[]` | | Variables in the input to the process [`RestVariable`](https://github.com/Alfresco/alfresco-js-api/blob/development/src/api/activiti-rest-api/docs/RestVariable.md). | ### Events | Name | Type | Description | | ---- | ---- | ----------- | -| cancel | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`<`[`ProcessInstance`](../../../lib/process-services/process-list/models/process-instance.model.ts)`>` | Emitted when the process is canceled. | -| error | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`<`[`ProcessInstance`](../../../lib/process-services/process-list/models/process-instance.model.ts)`>` | Emitted when an error occurs. | -| start | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`<`[`ProcessInstance`](../../../lib/process-services/process-list/models/process-instance.model.ts)`>` | Emitted when the process starts. | +| cancel | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`<`[`ProcessInstance`](../../../lib/process-services/src/lib/process-list/models/process-instance.model.ts)`>` | Emitted when the process is canceled. | +| error | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`<`[`ProcessInstance`](../../../lib/process-services/src/lib/process-list/models/process-instance.model.ts)`>` | Emitted when an error occurs. | +| start | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`<`[`ProcessInstance`](../../../lib/process-services/src/lib/process-list/models/process-instance.model.ts)`>` | Emitted when the process starts. | ## Details diff --git a/docs/process-services/components/start-task.component.md b/docs/process-services/components/start-task.component.md index eb757644d2..faad37c266 100644 --- a/docs/process-services/components/start-task.component.md +++ b/docs/process-services/components/start-task.component.md @@ -5,7 +5,7 @@ Status: Active Last reviewed: 2019-01-14 --- -# [Start Task Component](../../../lib/process-services/task-list/components/start-task.component.ts "Defined in start-task.component.ts") +# [Start Task Component](../../../lib/process-services/src/lib/task-list/components/start-task.component.ts "Defined in start-task.component.ts") Creates/Starts a new task for the specified app. diff --git a/docs/process-services/components/task-attachment-list.component.md b/docs/process-services/components/task-attachment-list.component.md index f32168645b..3f013db872 100644 --- a/docs/process-services/components/task-attachment-list.component.md +++ b/docs/process-services/components/task-attachment-list.component.md @@ -5,7 +5,7 @@ Status: Active Last reviewed: 2019-01-14 --- -# [Task Attachment List Component](../../../lib/process-services/attachment/task-attachment-list.component.ts "Defined in task-attachment-list.component.ts") +# [Task Attachment List Component](../../../lib/process-services/src/lib/attachment/task-attachment-list.component.ts "Defined in task-attachment-list.component.ts") Displays documents attached to a specified task. @@ -61,9 +61,9 @@ A default "no content" template is displayed if you don't supply one to override | Name | Type | Description | | ---- | ---- | ----------- | -| attachmentClick | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`` | Emitted when the attachment is double-clicked or a view option is selected from the context menu by the user from within the component. Returns a [Blob](https://developer.mozilla.org/en-US/docs/Web/API/Blob) representing the clicked object. | +| attachmentClick | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`<>` | Emitted when the attachment is double-clicked or a view option is selected from the context menu by the user from within the component. Returns a [Blob](https://developer.mozilla.org/en-US/docs/Web/API/Blob) representing the clicked object. | | error | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`` | Emitted when an error occurs while fetching the attachments. | -| success | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`` | Emitted when the attachment list has fetched all the attachments. Returns a list of attachments. | +| success | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`<>` | Emitted when the attachment list has fetched all the attachments. Returns a list of attachments. | ## Details @@ -100,7 +100,7 @@ import { UploadService } from '@alfresco/adf-core'; import { TaskUploadService } from '@alfresco/adf-process-services'; ``` -Make sure you override the [`UploadService`](../../core/services/upload.service.md) with the [`TaskUploadService`](../../../lib/process-services/task-list/services/task-upload.service.ts) +Make sure you override the [`UploadService`](../../core/services/upload.service.md) with the [`TaskUploadService`](../../../lib/process-services/src/lib/task-list/services/task-upload.service.ts) ```ts @Component({ diff --git a/docs/process-services/components/task-details.component.md b/docs/process-services/components/task-details.component.md index 46e4fb37fd..81ba9d5134 100644 --- a/docs/process-services/components/task-details.component.md +++ b/docs/process-services/components/task-details.component.md @@ -5,7 +5,7 @@ Status: Active Last reviewed: 2018-11-13 --- -# [Task Details component](../../../lib/process-services/task-list/components/task-details.component.ts "Defined in task-details.component.ts") +# [Task Details component](../../../lib/process-services/src/lib/task-list/components/task-details.component.ts "Defined in task-details.component.ts") Shows the details of the task ID passed in as input. @@ -50,7 +50,7 @@ Shows the details of the task ID passed in as input. | formContentClicked | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`<`[`ContentLinkModel`](../../../lib/core/form/components/widgets/core/content-link.model.ts)`>` | Emitted when the form field content is clicked. | | formLoaded | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`<`[`FormModel`](../../../lib/core/form/components/widgets/core/form.model.ts)`>` | Emitted when the form is loaded or reloaded. | | formSaved | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`<`[`FormModel`](../../../lib/core/form/components/widgets/core/form.model.ts)`>` | Emitted when the form is submitted with the `Save` or custom outcomes. | -| taskCreated | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`<`[`TaskDetailsModel`](../../../lib/process-services/task-list/models/task-details.model.ts)`>` | Emitted when a checklist task is created. | +| taskCreated | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`<`[`TaskDetailsModel`](../../../lib/process-services/src/lib/task-list/models/task-details.model.ts)`>` | Emitted when a checklist task is created. | | taskDeleted | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`` | Emitted when a checklist task is deleted. | | unClaimedTask | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`` | Emitted when a task is unclaimed. | diff --git a/docs/process-services/components/task-filters.component.md b/docs/process-services/components/task-filters.component.md index 985caada3d..cbd04e7998 100644 --- a/docs/process-services/components/task-filters.component.md +++ b/docs/process-services/components/task-filters.component.md @@ -5,7 +5,7 @@ Status: Active Last reviewed: 2018-11-16 --- -# [Task Filters component](../../../lib/process-services/task-list/components/task-filters.component.ts "Defined in task-filters.component.ts") +# [Task Filters component](../../../lib/process-services/src/lib/task-list/components/task-filters.component.ts "Defined in task-filters.component.ts") Shows all available filters. @@ -23,7 +23,7 @@ Shows all available filters. | ---- | ---- | ------------- | ----------- | | appId | `number` | | Display filters available to the current user for the application with the specified ID. | | appName | `string` | | Display filters available to the current user for the application with the specified name. | -| filterParam | [`FilterParamsModel`](../../../lib/process-services/task-list/models/filter.model.ts) | | Parameters to use for the task filter. If there is no match then the default filter (the first one the list) is selected. | +| filterParam | [`FilterParamsModel`](../../../lib/process-services/src/lib/task-list/models/filter.model.ts) | | Parameters to use for the task filter. If there is no match then the default filter (the first one the list) is selected. | | showIcon | `boolean` | | Toggles display of the filter's icon. | ### Events @@ -31,7 +31,7 @@ Shows all available filters. | Name | Type | Description | | ---- | ---- | ----------- | | error | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`` | Emitted when an error occurs during loading. | -| filterClick | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`<`[`FilterRepresentationModel`](../../../lib/process-services/task-list/models/filter.model.ts)`>` | Emitted when a filter in the list is clicked. | +| filterClick | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`<`[`FilterRepresentationModel`](../../../lib/process-services/src/lib/task-list/models/filter.model.ts)`>` | Emitted when a filter in the list is clicked. | | success | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`` | Emitted when the list is loaded. | ## Details @@ -46,7 +46,7 @@ Use the `filterParam` property to restrict the range of filters that are shown: ``` -You can use properties from [`FilterParamsModel`](../../../lib/process-services/task-list/models/filter.model.ts) +You can use properties from [`FilterParamsModel`](../../../lib/process-services/src/lib/task-list/models/filter.model.ts) as the value of `filterParam` as shown in the table below: | Name | Type | Description | diff --git a/docs/process-services/components/task-header.component.md b/docs/process-services/components/task-header.component.md index 8d0bdf0de7..59fcdb44f6 100644 --- a/docs/process-services/components/task-header.component.md +++ b/docs/process-services/components/task-header.component.md @@ -5,7 +5,7 @@ Status: Active Last reviewed: 2019-01-14 --- -# [Task Header component](../../../lib/process-services/task-list/components/task-header.component.ts "Defined in task-header.component.ts") +# [Task Header component](../../../lib/process-services/src/lib/task-list/components/task-header.component.ts "Defined in task-header.component.ts") Shows all the information related to a task. @@ -26,7 +26,7 @@ Shows all the information related to a task. | Name | Type | Default value | Description | | ---- | ---- | ------------- | ----------- | | formName | `string` | null | The name of the form. | -| taskDetails | [`TaskDetailsModel`](../../../lib/process-services/task-list/models/task-details.model.ts) | | (required) Details related to the task. | +| taskDetails | [`TaskDetailsModel`](../../../lib/process-services/src/lib/task-list/models/task-details.model.ts) | | (required) Details related to the task. | ### Events diff --git a/docs/process-services/components/task-list.component.md b/docs/process-services/components/task-list.component.md index af8c51b303..adaa840e61 100644 --- a/docs/process-services/components/task-list.component.md +++ b/docs/process-services/components/task-list.component.md @@ -5,7 +5,7 @@ Status: Active Last reviewed: 2019-02-08 --- -# [Task List component](../../../lib/process-services/task-list/components/task-list.component.ts "Defined in task-list.component.ts") +# [Task List component](../../../lib/process-services/src/lib/task-list/components/task-list.component.ts "Defined in task-list.component.ts") Renders a list containing all the tasks matched by the parameters specified. @@ -91,7 +91,7 @@ renders details of any chosen instance. ### Setting the column schema You can configure the list to show any of the properties of the -[`TaskDetailsModel`](../../../lib/process-services/task-list/models/task-details.model.ts) +[`TaskDetailsModel`](../../../lib/process-services/src/lib/task-list/models/task-details.model.ts) class. The example below shows how to set up the column schema from HTML: ```html diff --git a/docs/process-services/components/task-standalone.component.md b/docs/process-services/components/task-standalone.component.md index e86381dd45..1e120792a5 100644 --- a/docs/process-services/components/task-standalone.component.md +++ b/docs/process-services/components/task-standalone.component.md @@ -5,7 +5,7 @@ Status: Active Last reviewed: 2018-11-19 --- -# [Task Standalone component](../../../lib/process-services/task-list/components/task-standalone.component.ts "Defined in task-standalone.component.ts") +# [Task Standalone component](../../../lib/process-services/src/lib/task-list/components/task-standalone.component.ts "Defined in task-standalone.component.ts") This component can be used when the task doesn't belong to any processes. diff --git a/docs/process-services/directives/process-audit.directive.md b/docs/process-services/directives/process-audit.directive.md index 2500f6ab42..c22115efec 100644 --- a/docs/process-services/directives/process-audit.directive.md +++ b/docs/process-services/directives/process-audit.directive.md @@ -5,7 +5,7 @@ Status: Active Last reviewed: 2019-01-14 --- -# [Process Audit Directive](../../../lib/process-services/process-list/components/process-audit.directive.ts "Defined in process-audit.directive.ts") +# [Process Audit Directive](../../../lib/process-services/src/lib/process-list/components/process-audit.directive.ts "Defined in process-audit.directive.ts") Fetches the Process Audit information in PDF or JSON format. diff --git a/docs/process-services/directives/task-audit.directive.md b/docs/process-services/directives/task-audit.directive.md index 688e00d89d..0bca1eedac 100644 --- a/docs/process-services/directives/task-audit.directive.md +++ b/docs/process-services/directives/task-audit.directive.md @@ -5,7 +5,7 @@ Status: Active Last reviewed: 2019-01-14 --- -# [Task Audit Directive](../../../lib/process-services/task-list/components/task-audit.directive.ts "Defined in task-audit.directive.ts") +# [Task Audit Directive](../../../lib/process-services/src/lib/task-list/components/task-audit.directive.ts "Defined in task-audit.directive.ts") Fetches the Task Audit information in PDF or JSON format. diff --git a/docs/process-services/services/process-filter.service.md b/docs/process-services/services/process-filter.service.md index 6cb6c30fa5..323a200793 100644 --- a/docs/process-services/services/process-filter.service.md +++ b/docs/process-services/services/process-filter.service.md @@ -5,7 +5,7 @@ Status: Active Last reviewed: 2018-11-13 --- -# [Process Filter Service](../../../lib/process-services/process-list/services/process-filter.service.ts "Defined in process-filter.service.ts") +# [Process Filter Service](../../../lib/process-services/src/lib/process-list/services/process-filter.service.ts "Defined in process-filter.service.ts") Manage Process Filters, which are pre-configured Process Instance queries. @@ -13,41 +13,41 @@ Manage Process Filters, which are pre-configured Process Instance queries. ### Methods -- **addProcessFilter**(filter: [`FilterProcessRepresentationModel`](../../../lib/process-services/process-list/models/filter-process.model.ts)): [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`FilterProcessRepresentationModel`](../../../lib/process-services/process-list/models/filter-process.model.ts)`>`
+- **addProcessFilter**(filter: [`FilterProcessRepresentationModel`](../../../lib/process-services/src/lib/process-list/models/filter-process.model.ts)): [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`FilterProcessRepresentationModel`](../../../lib/process-services/src/lib/process-list/models/filter-process.model.ts)`>`
Adds a filter. - - _filter:_ [`FilterProcessRepresentationModel`](../../../lib/process-services/process-list/models/filter-process.model.ts) - The filter to add - - **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`FilterProcessRepresentationModel`](../../../lib/process-services/process-list/models/filter-process.model.ts)`>` - The filter just added + - _filter:_ [`FilterProcessRepresentationModel`](../../../lib/process-services/src/lib/process-list/models/filter-process.model.ts) - The filter to add + - **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`FilterProcessRepresentationModel`](../../../lib/process-services/src/lib/process-list/models/filter-process.model.ts)`>` - The filter just added - **callApiProcessFilters**(appId?: `number`): [`Promise`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Using_promises)`<`[`ResultListDataRepresentationUserProcessInstanceFilterRepresentation`](https://github.com/Alfresco/alfresco-js-api/blob/development/src/api/activiti-rest-api/docs/ResultListDataRepresentation%C2%ABUserProcessInstanceFilterRepresentation%C2%BB.md)`>`
Calls `getUserProcessInstanceFilters` from the Alfresco JS API. - _appId:_ `number` - (Optional) ID of the target app - **Returns** [`Promise`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Using_promises)`<`[`ResultListDataRepresentationUserProcessInstanceFilterRepresentation`](https://github.com/Alfresco/alfresco-js-api/blob/development/src/api/activiti-rest-api/docs/ResultListDataRepresentation%C2%ABUserProcessInstanceFilterRepresentation%C2%BB.md)`>` - List of filter details -- **createDefaultFilters**(appId: `number`): [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`FilterProcessRepresentationModel`](../../../lib/process-services/process-list/models/filter-process.model.ts)`[]>`
+- **createDefaultFilters**(appId: `number`): [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`FilterProcessRepresentationModel`](../../../lib/process-services/src/lib/process-list/models/filter-process.model.ts)`[]>`
Creates and returns the default filters for an app. - _appId:_ `number` - ID of the target app - - **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`FilterProcessRepresentationModel`](../../../lib/process-services/process-list/models/filter-process.model.ts)`[]>` - Default filters just created -- **getProcessFilterById**(filterId: `number`, appId?: `number`): [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`FilterProcessRepresentationModel`](../../../lib/process-services/process-list/models/filter-process.model.ts)`>`
+ - **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`FilterProcessRepresentationModel`](../../../lib/process-services/src/lib/process-list/models/filter-process.model.ts)`[]>` - Default filters just created +- **getProcessFilterById**(filterId: `number`, appId?: `number`): [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`FilterProcessRepresentationModel`](../../../lib/process-services/src/lib/process-list/models/filter-process.model.ts)`>`
Retrieves the process filter by ID. - _filterId:_ `number` - ID of the filter - _appId:_ `number` - (Optional) ID of the target app - - **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`FilterProcessRepresentationModel`](../../../lib/process-services/process-list/models/filter-process.model.ts)`>` - Details of the filter -- **getProcessFilterByName**(filterName: `string`, appId?: `number`): [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`FilterProcessRepresentationModel`](../../../lib/process-services/process-list/models/filter-process.model.ts)`>`
+ - **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`FilterProcessRepresentationModel`](../../../lib/process-services/src/lib/process-list/models/filter-process.model.ts)`>` - Details of the filter +- **getProcessFilterByName**(filterName: `string`, appId?: `number`): [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`FilterProcessRepresentationModel`](../../../lib/process-services/src/lib/process-list/models/filter-process.model.ts)`>`
Retrieves the process filter by name. - _filterName:_ `string` - Name of the filter - _appId:_ `number` - (Optional) ID of the target app - - **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`FilterProcessRepresentationModel`](../../../lib/process-services/process-list/models/filter-process.model.ts)`>` - Details of the filter -- **getProcessFilters**(appId: `number`): [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`FilterProcessRepresentationModel`](../../../lib/process-services/process-list/models/filter-process.model.ts)`[]>`
+ - **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`FilterProcessRepresentationModel`](../../../lib/process-services/src/lib/process-list/models/filter-process.model.ts)`>` - Details of the filter +- **getProcessFilters**(appId: `number`): [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`FilterProcessRepresentationModel`](../../../lib/process-services/src/lib/process-list/models/filter-process.model.ts)`[]>`
Gets all filters defined for a Process App. - _appId:_ `number` - ID of the target app - - **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`FilterProcessRepresentationModel`](../../../lib/process-services/process-list/models/filter-process.model.ts)`[]>` - Array of filter details -- **getRunningFilterInstance**(appId: `number`): [`FilterProcessRepresentationModel`](../../../lib/process-services/process-list/models/filter-process.model.ts)
+ - **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`FilterProcessRepresentationModel`](../../../lib/process-services/src/lib/process-list/models/filter-process.model.ts)`[]>` - Array of filter details +- **getRunningFilterInstance**(appId: `number`): [`FilterProcessRepresentationModel`](../../../lib/process-services/src/lib/process-list/models/filter-process.model.ts)
Creates and returns a filter that matches "running" process instances. - _appId:_ `number` - ID of the target app - - **Returns** [`FilterProcessRepresentationModel`](../../../lib/process-services/process-list/models/filter-process.model.ts) - Filter just created + - **Returns** [`FilterProcessRepresentationModel`](../../../lib/process-services/src/lib/process-list/models/filter-process.model.ts) - Filter just created ## Details The methods of this service generally return an instance of -[`FilterProcessRepresentationModel`](../../../lib/process-services/process-list/models/filter-process.model.ts) or an array of instances. For example, you +[`FilterProcessRepresentationModel`](../../../lib/process-services/src/lib/process-list/models/filter-process.model.ts) or an array of instances. For example, you could use `getProcessFilters` as follows: ```ts @@ -60,7 +60,7 @@ this.processFilterService.getProcessFilters(processAppId) }); ``` -The response is an array of [`FilterProcessRepresentationModel`](../../../lib/process-services/process-list/models/filter-process.model.ts) objects: +The response is an array of [`FilterProcessRepresentationModel`](../../../lib/process-services/src/lib/process-list/models/filter-process.model.ts) objects: filters: 0: {id: 15, appId: 2, name: "Running", recent: true, icon: "glyphicon-random", …} diff --git a/docs/process-services/services/process.service.md b/docs/process-services/services/process.service.md index d95a63c6d1..4f6297cb06 100644 --- a/docs/process-services/services/process.service.md +++ b/docs/process-services/services/process.service.md @@ -5,7 +5,7 @@ Status: Active Last reviewed: 2019-03-20 --- -# [Process Service](../../../lib/process-services/process-list/services/process.service.ts "Defined in process.service.ts") +# [Process Service](../../../lib/process-services/src/lib/process-list/services/process.service.ts "Defined in process.service.ts") Manages process instances, process variables, and process audit Log. @@ -17,11 +17,11 @@ Manages process instances, process variables, and process audit Log. Cancels a process instance. - _processInstanceId:_ `string` - ID of process to cancel - **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`` - Null response notifying when the operation is complete -- **createOrUpdateProcessInstanceVariables**(processInstanceId: `string`, variables: [`RestVariable`](https://github.com/Alfresco/alfresco-js-api/blob/development/src/api/activiti-rest-api/docs/RestVariable.md)`[]`): [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`ProcessInstanceVariable`](../../../lib/process-services/process-list/models/process-instance-variable.model.ts)`[]>`
+- **createOrUpdateProcessInstanceVariables**(processInstanceId: `string`, variables: [`RestVariable`](https://github.com/Alfresco/alfresco-js-api/blob/development/src/api/activiti-rest-api/docs/RestVariable.md)`[]`): [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`ProcessInstanceVariable`](../../../lib/process-services/src/lib/process-list/models/process-instance-variable.model.ts)`[]>`
Creates or updates variables for a process instance. - _processInstanceId:_ `string` - ID of the target process - _variables:_ [`RestVariable`](https://github.com/Alfresco/alfresco-js-api/blob/development/src/api/activiti-rest-api/docs/RestVariable.md)`[]` - Variables to update - - **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`ProcessInstanceVariable`](../../../lib/process-services/process-list/models/process-instance-variable.model.ts)`[]>` - Array of instance variable info + - **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`ProcessInstanceVariable`](../../../lib/process-services/src/lib/process-list/models/process-instance-variable.model.ts)`[]>` - Array of instance variable info - **deleteProcessInstanceVariable**(processInstanceId: `string`, variableName: `string`): [`Observable`](http://reactivex.io/documentation/observable.html)``
Deletes a variable for a process instance. - _processInstanceId:_ `string` - ID of the target process @@ -35,41 +35,41 @@ Manages process instances, process variables, and process audit Log. Fetches the Process Audit information as a PDF. - _processId:_ `string` - ID of the target process - **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`Blob`](https://developer.mozilla.org/en-US/docs/Web/API/Blob)`>` - Binary PDF data -- **getProcess**(processInstanceId: `string`): [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`ProcessInstance`](../../../lib/process-services/process-list/models/process-instance.model.ts)`>`
+- **getProcess**(processInstanceId: `string`): [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`ProcessInstance`](../../../lib/process-services/src/lib/process-list/models/process-instance.model.ts)`>`
Gets Process Instance metadata. - _processInstanceId:_ `string` - ID of the target process - - **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`ProcessInstance`](../../../lib/process-services/process-list/models/process-instance.model.ts)`>` - Metadata for the instance + - **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`ProcessInstance`](../../../lib/process-services/src/lib/process-list/models/process-instance.model.ts)`>` - Metadata for the instance - **getProcessDefinitions**(appId?: `number`): [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`ProcessDefinitionRepresentation`](https://github.com/Alfresco/alfresco-js-api/blob/development/src/api/activiti-rest-api/docs/ProcessDefinitionRepresentation.md)`[]>`
Gets process definitions associated with an app. - _appId:_ `number` - (Optional) ID of a target app - **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`ProcessDefinitionRepresentation`](https://github.com/Alfresco/alfresco-js-api/blob/development/src/api/activiti-rest-api/docs/ProcessDefinitionRepresentation.md)`[]>` - Array of process definitions -- **getProcessInstanceVariables**(processInstanceId: `string`): [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`ProcessInstanceVariable`](../../../lib/process-services/process-list/models/process-instance-variable.model.ts)`[]>`
+- **getProcessInstanceVariables**(processInstanceId: `string`): [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`ProcessInstanceVariable`](../../../lib/process-services/src/lib/process-list/models/process-instance-variable.model.ts)`[]>`
Gets the variables for a process instance. - _processInstanceId:_ `string` - ID of the target process - - **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`ProcessInstanceVariable`](../../../lib/process-services/process-list/models/process-instance-variable.model.ts)`[]>` - Array of instance variable info -- **getProcessInstances**(requestNode: [`ProcessFilterParamRepresentationModel`](../../../lib/process-services/process-list/models/filter-process.model.ts), processDefinitionKey?: `string`): [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`ProcessListModel`](../../../lib/process-services/process-list/models/process-list.model.ts)`>`
+ - **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`ProcessInstanceVariable`](../../../lib/process-services/src/lib/process-list/models/process-instance-variable.model.ts)`[]>` - Array of instance variable info +- **getProcessInstances**(requestNode: [`ProcessFilterParamRepresentationModel`](../../../lib/process-services/src/lib/process-list/models/filter-process.model.ts), processDefinitionKey?: `string`): [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`ProcessListModel`](../../../lib/process-services/src/lib/process-list/models/process-list.model.ts)`>`
Gets process instances for a filter and optionally a process definition. - - _requestNode:_ [`ProcessFilterParamRepresentationModel`](../../../lib/process-services/process-list/models/filter-process.model.ts) - Filter for instances + - _requestNode:_ [`ProcessFilterParamRepresentationModel`](../../../lib/process-services/src/lib/process-list/models/filter-process.model.ts) - Filter for instances - _processDefinitionKey:_ `string` - (Optional) Limits returned instances to a process definition - - **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`ProcessListModel`](../../../lib/process-services/process-list/models/process-list.model.ts)`>` - List of process instances -- **getProcessTasks**(processInstanceId: `string`, state?: `string`): [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`TaskDetailsModel`](../../../lib/process-services/task-list/models/task-details.model.ts)`[]>`
+ - **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`ProcessListModel`](../../../lib/process-services/src/lib/process-list/models/process-list.model.ts)`>` - List of process instances +- **getProcessTasks**(processInstanceId: `string`, state?: `string`): [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`TaskDetailsModel`](../../../lib/process-services/src/lib/task-list/models/task-details.model.ts)`[]>`
Gets task instances for a process instance. - _processInstanceId:_ `string` - ID of the process instance - _state:_ `string` - (Optional) Task state filter (can be "active" or "completed") - - **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`TaskDetailsModel`](../../../lib/process-services/task-list/models/task-details.model.ts)`[]>` - Array of task instance details -- **getProcesses**(requestNode: [`ProcessFilterParamRepresentationModel`](../../../lib/process-services/process-list/models/filter-process.model.ts), processDefinitionKey?: `string`): [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`ProcessListModel`](../../../lib/process-services/process-list/models/process-list.model.ts)`>`
+ - **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`TaskDetailsModel`](../../../lib/process-services/src/lib/task-list/models/task-details.model.ts)`[]>` - Array of task instance details +- **getProcesses**(requestNode: [`ProcessFilterParamRepresentationModel`](../../../lib/process-services/src/lib/process-list/models/filter-process.model.ts), processDefinitionKey?: `string`): [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`ProcessListModel`](../../../lib/process-services/src/lib/process-list/models/process-list.model.ts)`>`
Gets processes for a filter and optionally a process definition. - - _requestNode:_ [`ProcessFilterParamRepresentationModel`](../../../lib/process-services/process-list/models/filter-process.model.ts) - Filter for instances + - _requestNode:_ [`ProcessFilterParamRepresentationModel`](../../../lib/process-services/src/lib/process-list/models/filter-process.model.ts) - Filter for instances - _processDefinitionKey:_ `string` - (Optional) Limits returned instances to a process definition - - **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`ProcessListModel`](../../../lib/process-services/process-list/models/process-list.model.ts)`>` - List of processes -- **startProcess**(processDefinitionId: `string`, name: `string`, outcome?: `string`, startFormValues?: [`FormValues`](../../../lib/core/form/components/widgets/core/form-values.ts), variables?: [`ProcessInstanceVariable`](../../../lib/process-services/process-list/models/process-instance-variable.model.ts)`[]`): [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`ProcessInstance`](../../../lib/process-services/process-list/models/process-instance.model.ts)`>`
+ - **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`ProcessListModel`](../../../lib/process-services/src/lib/process-list/models/process-list.model.ts)`>` - List of processes +- **startProcess**(processDefinitionId: `string`, name: `string`, outcome?: `string`, startFormValues?: [`FormValues`](../../../lib/core/form/components/widgets/core/form-values.ts), variables?: [`ProcessInstanceVariable`](../../../lib/process-services/src/lib/process-list/models/process-instance-variable.model.ts)`[]`): [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`ProcessInstance`](../../../lib/process-services/src/lib/process-list/models/process-instance.model.ts)`>`
Starts a process based on a process definition, name, form values or variables. - _processDefinitionId:_ `string` - Process definition ID - _name:_ `string` - Process name - _outcome:_ `string` - (Optional) Process outcome - _startFormValues:_ [`FormValues`](../../../lib/core/form/components/widgets/core/form-values.ts) - (Optional) Values for the start form - - _variables:_ [`ProcessInstanceVariable`](../../../lib/process-services/process-list/models/process-instance-variable.model.ts)`[]` - (Optional) Array of process instance variables - - **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`ProcessInstance`](../../../lib/process-services/process-list/models/process-instance.model.ts)`>` - Details of the process instance just started + - _variables:_ [`ProcessInstanceVariable`](../../../lib/process-services/src/lib/process-list/models/process-instance-variable.model.ts)`[]` - (Optional) Array of process instance variables + - **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`ProcessInstance`](../../../lib/process-services/src/lib/process-list/models/process-instance.model.ts)`>` - Details of the process instance just started ## Details @@ -113,7 +113,7 @@ this.processService.startProcess(processDefinitionId, name, outcome, startFormVa }); ``` -A [`ProcessInstance`](../../../lib/process-services/process-list/models/process-instance.model.ts) object is returned for a successfully started process. This implements the +A [`ProcessInstance`](../../../lib/process-services/src/lib/process-list/models/process-instance.model.ts) object is returned for a successfully started process. This implements the [ProcessInstanceRepresentation interface](https://github.com/Alfresco/alfresco-js-api/blob/master/src/alfresco-activiti-rest-api/docs/ProcessInstanceRepresentation.md). You can start the process with process variables instead of form field values using diff --git a/docs/process-services/services/task-filter.service.md b/docs/process-services/services/task-filter.service.md index 1523340683..235881ab7c 100644 --- a/docs/process-services/services/task-filter.service.md +++ b/docs/process-services/services/task-filter.service.md @@ -5,7 +5,7 @@ Status: Active Last reviewed: 2018-06-07 --- -# [Task Filter Service](../../../lib/process-services/task-list/services/task-filter.service.ts "Defined in task-filter.service.ts") +# [Task Filter Service](../../../lib/process-services/src/lib/task-list/services/task-filter.service.ts "Defined in task-filter.service.ts") Manage Task Filters, which are pre-configured Task Instance queries. @@ -13,52 +13,52 @@ Manage Task Filters, which are pre-configured Task Instance queries. ### Methods -- **addFilter**(filter: [`FilterRepresentationModel`](../../../lib/process-services/task-list/models/filter.model.ts)): [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`FilterRepresentationModel`](../../../lib/process-services/task-list/models/filter.model.ts)`>`
+- **addFilter**(filter: [`FilterRepresentationModel`](../../../lib/process-services/src/lib/task-list/models/filter.model.ts)): [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`FilterRepresentationModel`](../../../lib/process-services/src/lib/task-list/models/filter.model.ts)`>`
Adds a new task filter - - _filter:_ [`FilterRepresentationModel`](../../../lib/process-services/task-list/models/filter.model.ts) - The new filter to add - - **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`FilterRepresentationModel`](../../../lib/process-services/task-list/models/filter.model.ts)`>` - Details of task filter just added + - _filter:_ [`FilterRepresentationModel`](../../../lib/process-services/src/lib/task-list/models/filter.model.ts) - The new filter to add + - **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`FilterRepresentationModel`](../../../lib/process-services/src/lib/task-list/models/filter.model.ts)`>` - Details of task filter just added - **callApiTaskFilters**(appId?: `number`): [`Promise`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Using_promises)``
Calls `getUserTaskFilters` from the Alfresco JS API. - _appId:_ `number` - (Optional) ID of the target app - **Returns** [`Promise`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Using_promises)`` - List of task filters -- **createDefaultFilters**(appId: `number`): [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`FilterRepresentationModel`](../../../lib/process-services/task-list/models/filter.model.ts)`[]>`
+- **createDefaultFilters**(appId: `number`): [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`FilterRepresentationModel`](../../../lib/process-services/src/lib/task-list/models/filter.model.ts)`[]>`
Creates and returns the default filters for a process app. - _appId:_ `number` - ID of the target app - - **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`FilterRepresentationModel`](../../../lib/process-services/task-list/models/filter.model.ts)`[]>` - Array of default filters just created -- **getCompletedTasksFilterInstance**(appId: `number`): [`FilterRepresentationModel`](../../../lib/process-services/task-list/models/filter.model.ts)
+ - **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`FilterRepresentationModel`](../../../lib/process-services/src/lib/task-list/models/filter.model.ts)`[]>` - Array of default filters just created +- **getCompletedTasksFilterInstance**(appId: `number`): [`FilterRepresentationModel`](../../../lib/process-services/src/lib/task-list/models/filter.model.ts)
Creates and returns a filter for "Completed" task instances. - _appId:_ `number` - ID of the target app - - **Returns** [`FilterRepresentationModel`](../../../lib/process-services/task-list/models/filter.model.ts) - The newly created filter -- **getInvolvedTasksFilterInstance**(appId: `number`): [`FilterRepresentationModel`](../../../lib/process-services/task-list/models/filter.model.ts)
+ - **Returns** [`FilterRepresentationModel`](../../../lib/process-services/src/lib/task-list/models/filter.model.ts) - The newly created filter +- **getInvolvedTasksFilterInstance**(appId: `number`): [`FilterRepresentationModel`](../../../lib/process-services/src/lib/task-list/models/filter.model.ts)
Creates and returns a filter for "Involved" task instances. - _appId:_ `number` - ID of the target app - - **Returns** [`FilterRepresentationModel`](../../../lib/process-services/task-list/models/filter.model.ts) - The newly created filter -- **getMyTasksFilterInstance**(appId: `number`): [`FilterRepresentationModel`](../../../lib/process-services/task-list/models/filter.model.ts)
+ - **Returns** [`FilterRepresentationModel`](../../../lib/process-services/src/lib/task-list/models/filter.model.ts) - The newly created filter +- **getMyTasksFilterInstance**(appId: `number`): [`FilterRepresentationModel`](../../../lib/process-services/src/lib/task-list/models/filter.model.ts)
Creates and returns a filter for "My Tasks" task instances. - _appId:_ `number` - ID of the target app - - **Returns** [`FilterRepresentationModel`](../../../lib/process-services/task-list/models/filter.model.ts) - The newly created filter -- **getQueuedTasksFilterInstance**(appId: `number`): [`FilterRepresentationModel`](../../../lib/process-services/task-list/models/filter.model.ts)
+ - **Returns** [`FilterRepresentationModel`](../../../lib/process-services/src/lib/task-list/models/filter.model.ts) - The newly created filter +- **getQueuedTasksFilterInstance**(appId: `number`): [`FilterRepresentationModel`](../../../lib/process-services/src/lib/task-list/models/filter.model.ts)
Creates and returns a filter for "Queued Tasks" task instances. - _appId:_ `number` - ID of the target app - - **Returns** [`FilterRepresentationModel`](../../../lib/process-services/task-list/models/filter.model.ts) - The newly created filter -- **getTaskFilterById**(filterId: `number`, appId?: `number`): [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`FilterRepresentationModel`](../../../lib/process-services/task-list/models/filter.model.ts)`>`
+ - **Returns** [`FilterRepresentationModel`](../../../lib/process-services/src/lib/task-list/models/filter.model.ts) - The newly created filter +- **getTaskFilterById**(filterId: `number`, appId?: `number`): [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`FilterRepresentationModel`](../../../lib/process-services/src/lib/task-list/models/filter.model.ts)`>`
Gets a task filter by ID. - _filterId:_ `number` - ID of the filter - _appId:_ `number` - (Optional) ID of the app for the filter - - **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`FilterRepresentationModel`](../../../lib/process-services/task-list/models/filter.model.ts)`>` - Details of task filter -- **getTaskFilterByName**(taskName: `string`, appId?: `number`): [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`FilterRepresentationModel`](../../../lib/process-services/task-list/models/filter.model.ts)`>`
+ - **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`FilterRepresentationModel`](../../../lib/process-services/src/lib/task-list/models/filter.model.ts)`>` - Details of task filter +- **getTaskFilterByName**(taskName: `string`, appId?: `number`): [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`FilterRepresentationModel`](../../../lib/process-services/src/lib/task-list/models/filter.model.ts)`>`
Gets a task filter by name. - _taskName:_ `string` - Name of the filter - _appId:_ `number` - (Optional) ID of the app for the filter - - **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`FilterRepresentationModel`](../../../lib/process-services/task-list/models/filter.model.ts)`>` - Details of task filter -- **getTaskListFilters**(appId?: `number`): [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`FilterRepresentationModel`](../../../lib/process-services/task-list/models/filter.model.ts)`[]>`
+ - **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`FilterRepresentationModel`](../../../lib/process-services/src/lib/task-list/models/filter.model.ts)`>` - Details of task filter +- **getTaskListFilters**(appId?: `number`): [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`FilterRepresentationModel`](../../../lib/process-services/src/lib/task-list/models/filter.model.ts)`[]>`
Gets all task filters for a process app. - _appId:_ `number` - (Optional) Optional ID for a specific app - - **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`FilterRepresentationModel`](../../../lib/process-services/task-list/models/filter.model.ts)`[]>` - Array of task filter details + - **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`FilterRepresentationModel`](../../../lib/process-services/src/lib/task-list/models/filter.model.ts)`[]>` - Array of task filter details ## Details -The methods of this service generally return an instance of [`FilterRepresentationModel`](../../../lib/process-services/task-list/models/filter.model.ts) or +The methods of this service generally return an instance of [`FilterRepresentationModel`](../../../lib/process-services/src/lib/task-list/models/filter.model.ts) or an array of instances. For example, you could use `getTaskListFilters` as follows: ```ts @@ -70,7 +70,7 @@ this.taskFilterService.getTaskListFilters(processAppId).subscribe( (filters: Fil }); ``` -The response is an array of [`FilterRepresentationModel`](../../../lib/process-services/task-list/models/filter.model.ts) objects: +The response is an array of [`FilterRepresentationModel`](../../../lib/process-services/src/lib/task-list/models/filter.model.ts) objects: filters: 0: {id: 10, appId: 2, name: "Involved Tasks", recent: true, icon: "glyphicon-align-left", …} diff --git a/docs/process-services/services/tasklist.service.md b/docs/process-services/services/tasklist.service.md index fe3b84a713..d1e021269d 100644 --- a/docs/process-services/services/tasklist.service.md +++ b/docs/process-services/services/tasklist.service.md @@ -5,7 +5,7 @@ Status: Active Last reviewed: 2018-11-14 --- -# [Tasklist Service](../../../lib/process-services/task-list/services/tasklist.service.ts "Defined in tasklist.service.ts") +# [Tasklist Service](../../../lib/process-services/src/lib/task-list/services/tasklist.service.ts "Defined in tasklist.service.ts") Manages Task Instances. @@ -13,45 +13,45 @@ Manages Task Instances. ### Methods -- **addTask**(task: [`TaskDetailsModel`](../../../lib/process-services/task-list/models/task-details.model.ts)): [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`TaskDetailsModel`](../../../lib/process-services/task-list/models/task-details.model.ts)`>`
+- **addTask**(task: [`TaskDetailsModel`](../../../lib/process-services/src/lib/task-list/models/task-details.model.ts)): [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`TaskDetailsModel`](../../../lib/process-services/src/lib/task-list/models/task-details.model.ts)`>`
Adds a subtask (ie, a checklist task) to a parent task. - - _task:_ [`TaskDetailsModel`](../../../lib/process-services/task-list/models/task-details.model.ts) - The task to add - - **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`TaskDetailsModel`](../../../lib/process-services/task-list/models/task-details.model.ts)`>` - The subtask that was added -- **assignTask**(taskId: `string`, requestNode: `any`): [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`TaskDetailsModel`](../../../lib/process-services/task-list/models/task-details.model.ts)`>`
+ - _task:_ [`TaskDetailsModel`](../../../lib/process-services/src/lib/task-list/models/task-details.model.ts) - The task to add + - **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`TaskDetailsModel`](../../../lib/process-services/src/lib/task-list/models/task-details.model.ts)`>` - The subtask that was added +- **assignTask**(taskId: `string`, requestNode: `any`): [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`TaskDetailsModel`](../../../lib/process-services/src/lib/task-list/models/task-details.model.ts)`>`
Assigns a task to a user or group. - _taskId:_ `string` - The task to assign - _requestNode:_ `any` - User or group to assign the task to - - **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`TaskDetailsModel`](../../../lib/process-services/task-list/models/task-details.model.ts)`>` - Details of the assigned task -- **assignTaskByUserId**(taskId: `string`, userId: `string`): [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`TaskDetailsModel`](../../../lib/process-services/task-list/models/task-details.model.ts)`>`
+ - **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`TaskDetailsModel`](../../../lib/process-services/src/lib/task-list/models/task-details.model.ts)`>` - Details of the assigned task +- **assignTaskByUserId**(taskId: `string`, userId: `string`): [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`TaskDetailsModel`](../../../lib/process-services/src/lib/task-list/models/task-details.model.ts)`>`
Assigns a task to a user. - _taskId:_ `string` - ID of the task to assign - _userId:_ `string` - ID of the user to assign the task to - - **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`TaskDetailsModel`](../../../lib/process-services/task-list/models/task-details.model.ts)`>` - Details of the assigned task + - **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`TaskDetailsModel`](../../../lib/process-services/src/lib/task-list/models/task-details.model.ts)`>` - Details of the assigned task - **attachFormToATask**(taskId: `string`, formId: `number`): [`Observable`](http://reactivex.io/documentation/observable.html)``
Attaches a form to a task. - _taskId:_ `string` - ID of the target task - _formId:_ `number` - ID of the form to add - **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`` - Null response notifying when the operation is complete -- **claimTask**(taskId: `string`): [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`TaskDetailsModel`](../../../lib/process-services/task-list/models/task-details.model.ts)`>`
+- **claimTask**(taskId: `string`): [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`TaskDetailsModel`](../../../lib/process-services/src/lib/task-list/models/task-details.model.ts)`>`
Claims a task for the current user. - _taskId:_ `string` - ID of the task to claim - - **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`TaskDetailsModel`](../../../lib/process-services/task-list/models/task-details.model.ts)`>` - Details of the claimed task + - **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`TaskDetailsModel`](../../../lib/process-services/src/lib/task-list/models/task-details.model.ts)`>` - Details of the claimed task - **completeTask**(taskId: `string`): [`Observable`](http://reactivex.io/documentation/observable.html)``
Gives completed status to a task. - _taskId:_ `string` - ID of the target task - **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`` - Null response notifying when the operation is complete -- **createNewTask**(task: [`TaskDetailsModel`](../../../lib/process-services/task-list/models/task-details.model.ts)): [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`TaskDetailsModel`](../../../lib/process-services/task-list/models/task-details.model.ts)`>`
+- **createNewTask**(task: [`TaskDetailsModel`](../../../lib/process-services/src/lib/task-list/models/task-details.model.ts)): [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`TaskDetailsModel`](../../../lib/process-services/src/lib/task-list/models/task-details.model.ts)`>`
Creates a new standalone task. - - _task:_ [`TaskDetailsModel`](../../../lib/process-services/task-list/models/task-details.model.ts) - Details of the new task - - **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`TaskDetailsModel`](../../../lib/process-services/task-list/models/task-details.model.ts)`>` - Details of the newly created task -- **deleteForm**(taskId: `string`): [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`TaskDetailsModel`](../../../lib/process-services/task-list/models/task-details.model.ts)`>`
+ - _task:_ [`TaskDetailsModel`](../../../lib/process-services/src/lib/task-list/models/task-details.model.ts) - Details of the new task + - **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`TaskDetailsModel`](../../../lib/process-services/src/lib/task-list/models/task-details.model.ts)`>` - Details of the newly created task +- **deleteForm**(taskId: `string`): [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`TaskDetailsModel`](../../../lib/process-services/src/lib/task-list/models/task-details.model.ts)`>`
Deletes a form from a task. - _taskId:_ `string` - Task id related to form - - **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`TaskDetailsModel`](../../../lib/process-services/task-list/models/task-details.model.ts)`>` - Null response notifying when the operation is complete -- **deleteTask**(taskId: `string`): [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`TaskDetailsModel`](../../../lib/process-services/task-list/models/task-details.model.ts)`>`
+ - **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`TaskDetailsModel`](../../../lib/process-services/src/lib/task-list/models/task-details.model.ts)`>` - Null response notifying when the operation is complete +- **deleteTask**(taskId: `string`): [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`TaskDetailsModel`](../../../lib/process-services/src/lib/task-list/models/task-details.model.ts)`>`
Deletes a subtask (ie, a checklist task) from a parent task. - _taskId:_ `string` - The task to delete - - **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`TaskDetailsModel`](../../../lib/process-services/task-list/models/task-details.model.ts)`>` - Null response notifying when the operation is complete + - **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`TaskDetailsModel`](../../../lib/process-services/src/lib/task-list/models/task-details.model.ts)`>` - Null response notifying when the operation is complete - **fetchTaskAuditJsonById**(taskId: `string`): [`Observable`](http://reactivex.io/documentation/observable.html)``
Fetch the Task Audit information in JSON format - _taskId:_ `string` - ID of the target task @@ -60,64 +60,64 @@ Manages Task Instances. Fetches the Task Audit information in PDF format. - _taskId:_ `string` - ID of the target task - **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`Blob`](https://developer.mozilla.org/en-US/docs/Web/API/Blob)`>` - Binary PDF data -- **findAllTaskByState**(requestNode: [`TaskQueryRequestRepresentationModel`](../../../lib/process-services/task-list/models/filter.model.ts), state?: `string`): [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`TaskListModel`](../../../lib/process-services/task-list/models/task-list.model.ts)`>`
+- **findAllTaskByState**(requestNode: [`TaskQueryRequestRepresentationModel`](../../../lib/process-services/src/lib/task-list/models/filter.model.ts), state?: `string`): [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`TaskListModel`](../../../lib/process-services/src/lib/task-list/models/task-list.model.ts)`>`
Gets all tasks matching a query and state value. - - _requestNode:_ [`TaskQueryRequestRepresentationModel`](../../../lib/process-services/task-list/models/filter.model.ts) - Query to search for tasks. + - _requestNode:_ [`TaskQueryRequestRepresentationModel`](../../../lib/process-services/src/lib/task-list/models/filter.model.ts) - Query to search for tasks. - _state:_ `string` - (Optional) Task state. Can be "open" or "completed". - - **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`TaskListModel`](../../../lib/process-services/task-list/models/task-list.model.ts)`>` - List of tasks -- **findAllTasksWithoutState**(requestNode: [`TaskQueryRequestRepresentationModel`](../../../lib/process-services/task-list/models/filter.model.ts)): [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`TaskListModel`](../../../lib/process-services/task-list/models/task-list.model.ts)`>`
+ - **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`TaskListModel`](../../../lib/process-services/src/lib/task-list/models/task-list.model.ts)`>` - List of tasks +- **findAllTasksWithoutState**(requestNode: [`TaskQueryRequestRepresentationModel`](../../../lib/process-services/src/lib/task-list/models/filter.model.ts)): [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`TaskListModel`](../../../lib/process-services/src/lib/task-list/models/task-list.model.ts)`>`
Gets all tasks matching the supplied query but ignoring the task state. - - _requestNode:_ [`TaskQueryRequestRepresentationModel`](../../../lib/process-services/task-list/models/filter.model.ts) - Query to search for tasks - - **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`TaskListModel`](../../../lib/process-services/task-list/models/task-list.model.ts)`>` - List of tasks -- **findTasksByState**(requestNode: [`TaskQueryRequestRepresentationModel`](../../../lib/process-services/task-list/models/filter.model.ts), state?: `string`): [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`TaskListModel`](../../../lib/process-services/task-list/models/task-list.model.ts)`>`
+ - _requestNode:_ [`TaskQueryRequestRepresentationModel`](../../../lib/process-services/src/lib/task-list/models/filter.model.ts) - Query to search for tasks + - **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`TaskListModel`](../../../lib/process-services/src/lib/task-list/models/task-list.model.ts)`>` - List of tasks +- **findTasksByState**(requestNode: [`TaskQueryRequestRepresentationModel`](../../../lib/process-services/src/lib/task-list/models/filter.model.ts), state?: `string`): [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`TaskListModel`](../../../lib/process-services/src/lib/task-list/models/task-list.model.ts)`>`
Gets tasks matching a query and state value. - - _requestNode:_ [`TaskQueryRequestRepresentationModel`](../../../lib/process-services/task-list/models/filter.model.ts) - Query to search for tasks + - _requestNode:_ [`TaskQueryRequestRepresentationModel`](../../../lib/process-services/src/lib/task-list/models/filter.model.ts) - Query to search for tasks - _state:_ `string` - (Optional) Task state. Can be "open" or "completed". - - **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`TaskListModel`](../../../lib/process-services/task-list/models/task-list.model.ts)`>` - List of tasks -- **getFilterForTaskById**(taskId: `string`, filterList: [`FilterRepresentationModel`](../../../lib/process-services/task-list/models/filter.model.ts)`[]`): [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`FilterRepresentationModel`](../../../lib/process-services/task-list/models/filter.model.ts)`>`
+ - **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`TaskListModel`](../../../lib/process-services/src/lib/task-list/models/task-list.model.ts)`>` - List of tasks +- **getFilterForTaskById**(taskId: `string`, filterList: [`FilterRepresentationModel`](../../../lib/process-services/src/lib/task-list/models/filter.model.ts)`[]`): [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`FilterRepresentationModel`](../../../lib/process-services/src/lib/task-list/models/filter.model.ts)`>`
Gets all the filters in the list that belong to a task. - _taskId:_ `string` - ID of the target task - - _filterList:_ [`FilterRepresentationModel`](../../../lib/process-services/task-list/models/filter.model.ts)`[]` - List of filters to search through - - **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`FilterRepresentationModel`](../../../lib/process-services/task-list/models/filter.model.ts)`>` - Filters belonging to the task -- **getFormList**(): [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`Form`](../../../lib/process-services/task-list/models/form.model.ts)`[]>`
+ - _filterList:_ [`FilterRepresentationModel`](../../../lib/process-services/src/lib/task-list/models/filter.model.ts)`[]` - List of filters to search through + - **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`FilterRepresentationModel`](../../../lib/process-services/src/lib/task-list/models/filter.model.ts)`>` - Filters belonging to the task +- **getFormList**(): [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`Form`](../../../lib/process-services/src/lib/task-list/models/form.model.ts)`[]>`
Gets all available reusable forms. - - **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`Form`](../../../lib/process-services/task-list/models/form.model.ts)`[]>` - Array of form details -- **getTaskChecklist**(id: `string`): [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`TaskDetailsModel`](../../../lib/process-services/task-list/models/task-details.model.ts)`[]>`
+ - **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`Form`](../../../lib/process-services/src/lib/task-list/models/form.model.ts)`[]>` - Array of form details +- **getTaskChecklist**(id: `string`): [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`TaskDetailsModel`](../../../lib/process-services/src/lib/task-list/models/task-details.model.ts)`[]>`
Gets the checklist for a task. - _id:_ `string` - ID of the target task - - **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`TaskDetailsModel`](../../../lib/process-services/task-list/models/task-details.model.ts)`[]>` - Array of checklist task details -- **getTaskDetails**(taskId: `string`): [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`TaskDetailsModel`](../../../lib/process-services/task-list/models/task-details.model.ts)`>`
+ - **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`TaskDetailsModel`](../../../lib/process-services/src/lib/task-list/models/task-details.model.ts)`[]>` - Array of checklist task details +- **getTaskDetails**(taskId: `string`): [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`TaskDetailsModel`](../../../lib/process-services/src/lib/task-list/models/task-details.model.ts)`>`
Gets details for a task. - _taskId:_ `string` - ID of the target task. - - **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`TaskDetailsModel`](../../../lib/process-services/task-list/models/task-details.model.ts)`>` - Task details -- **getTasks**(requestNode: [`TaskQueryRequestRepresentationModel`](../../../lib/process-services/task-list/models/filter.model.ts)): [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`TaskListModel`](../../../lib/process-services/task-list/models/task-list.model.ts)`>`
+ - **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`TaskDetailsModel`](../../../lib/process-services/src/lib/task-list/models/task-details.model.ts)`>` - Task details +- **getTasks**(requestNode: [`TaskQueryRequestRepresentationModel`](../../../lib/process-services/src/lib/task-list/models/filter.model.ts)): [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`TaskListModel`](../../../lib/process-services/src/lib/task-list/models/task-list.model.ts)`>`
Gets all the tasks matching the supplied query. - - _requestNode:_ [`TaskQueryRequestRepresentationModel`](../../../lib/process-services/task-list/models/filter.model.ts) - Query to search for tasks - - **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`TaskListModel`](../../../lib/process-services/task-list/models/task-list.model.ts)`>` - List of tasks -- **getTotalTasks**(requestNode: [`TaskQueryRequestRepresentationModel`](../../../lib/process-services/task-list/models/filter.model.ts)): [`Observable`](http://reactivex.io/documentation/observable.html)``
+ - _requestNode:_ [`TaskQueryRequestRepresentationModel`](../../../lib/process-services/src/lib/task-list/models/filter.model.ts) - Query to search for tasks + - **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`TaskListModel`](../../../lib/process-services/src/lib/task-list/models/task-list.model.ts)`>` - List of tasks +- **getTotalTasks**(requestNode: [`TaskQueryRequestRepresentationModel`](../../../lib/process-services/src/lib/task-list/models/filter.model.ts)): [`Observable`](http://reactivex.io/documentation/observable.html)``
Gets the total number of the tasks found by a query. - - _requestNode:_ [`TaskQueryRequestRepresentationModel`](../../../lib/process-services/task-list/models/filter.model.ts) - Query to search for tasks + - _requestNode:_ [`TaskQueryRequestRepresentationModel`](../../../lib/process-services/src/lib/task-list/models/filter.model.ts) - Query to search for tasks - **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`` - Number of tasks -- **isTaskRelatedToFilter**(taskId: `string`, filterModel: [`FilterRepresentationModel`](../../../lib/process-services/task-list/models/filter.model.ts)): [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`FilterRepresentationModel`](../../../lib/process-services/task-list/models/filter.model.ts)`>`
+- **isTaskRelatedToFilter**(taskId: `string`, filterModel: [`FilterRepresentationModel`](../../../lib/process-services/src/lib/task-list/models/filter.model.ts)): [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`FilterRepresentationModel`](../../../lib/process-services/src/lib/task-list/models/filter.model.ts)`>`
Checks if a taskId is filtered with the given filter. - _taskId:_ `string` - ID of the target task - - _filterModel:_ [`FilterRepresentationModel`](../../../lib/process-services/task-list/models/filter.model.ts) - The filter you want to check - - **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`FilterRepresentationModel`](../../../lib/process-services/task-list/models/filter.model.ts)`>` - The filter if it is related or null otherwise -- **unclaimTask**(taskId: `string`): [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`TaskDetailsModel`](../../../lib/process-services/task-list/models/task-details.model.ts)`>`
+ - _filterModel:_ [`FilterRepresentationModel`](../../../lib/process-services/src/lib/task-list/models/filter.model.ts) - The filter you want to check + - **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`FilterRepresentationModel`](../../../lib/process-services/src/lib/task-list/models/filter.model.ts)`>` - The filter if it is related or null otherwise +- **unclaimTask**(taskId: `string`): [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`TaskDetailsModel`](../../../lib/process-services/src/lib/task-list/models/task-details.model.ts)`>`
Un-claims a task for the current user. - _taskId:_ `string` - ID of the task to unclaim - - **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`TaskDetailsModel`](../../../lib/process-services/task-list/models/task-details.model.ts)`>` - Null response notifying when the operation is complete -- **updateTask**(taskId: `any`, updated: `any`): [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`TaskDetailsModel`](../../../lib/process-services/task-list/models/task-details.model.ts)`>`
+ - **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`TaskDetailsModel`](../../../lib/process-services/src/lib/task-list/models/task-details.model.ts)`>` - Null response notifying when the operation is complete +- **updateTask**(taskId: `any`, updated: `any`): [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`TaskDetailsModel`](../../../lib/process-services/src/lib/task-list/models/task-details.model.ts)`>`
Updates the details (name, description, due date) for a task. - _taskId:_ `any` - ID of the task to update - _updated:_ `any` - Data to update the task (as a [`TaskUpdateRepresentation`](https://github.com/Alfresco/alfresco-js-api/blob/development/src/api/activiti-rest-api/docs/TaskUpdateRepresentation.md) instance). - - **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`TaskDetailsModel`](../../../lib/process-services/task-list/models/task-details.model.ts)`>` - Updated task details + - **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`TaskDetailsModel`](../../../lib/process-services/src/lib/task-list/models/task-details.model.ts)`>` - Updated task details ## Details ### Task details -Several of the methods return one or more [`TaskDetailsModel`](../../../lib/process-services/task-list/models/task-details.model.ts) instances corresponding +Several of the methods return one or more [`TaskDetailsModel`](../../../lib/process-services/src/lib/task-list/models/task-details.model.ts) instances corresponding to tasks or subtasks matched by a query of some kind. For example, `getTaskDetails` could be used as shown below: @@ -130,7 +130,7 @@ this.tasklistService.getTaskDetails(taskInstanceId).subscribe( (taskInstance: Ta }); ``` -The resulting [`TaskDetailsModel`](../../../lib/process-services/task-list/models/task-details.model.ts) object contains information like the following: +The resulting [`TaskDetailsModel`](../../../lib/process-services/src/lib/task-list/models/task-details.model.ts) object contains information like the following: adhocTaskCanBeReassigned: false assignee: UserProcessModel {pictureId: null, id: 1, email: "admin@app.activiti.com", firstName: null, lastName: "Administrator"} @@ -166,7 +166,7 @@ The resulting [`TaskDetailsModel`](../../../lib/process-services/task-list/model ### Queries -Some of the methods run a search query contained in a [`TaskQueryRequestRepresentationModel`](../../../lib/process-services/task-list/models/filter.model.ts) and +Some of the methods run a search query contained in a [`TaskQueryRequestRepresentationModel`](../../../lib/process-services/src/lib/task-list/models/filter.model.ts) and return the matched tasks. Below is an example of how you might run a query using `getTasks`: ```ts @@ -205,8 +205,8 @@ The `assignment` property filters tasks based on how they are assigned (or not a Use `assignee` if you are interested in tasks that are assigned to a user. If you want to see pooled tasks (i.e. tasks that needs to be claimed by a user), then use `candidate`. -A successful query returns a [`TaskListModel`](../../../lib/process-services/task-list/models/task-list.model.ts) with the `data` property set to an array of -[`TaskDetailsModel`](../../../lib/process-services/task-list/models/task-details.model.ts): +A successful query returns a [`TaskListModel`](../../../lib/process-services/src/lib/task-list/models/task-list.model.ts) with the `data` property set to an array of +[`TaskDetailsModel`](../../../lib/process-services/src/lib/task-list/models/task-details.model.ts): data: 0: {id: "75010", name: "Approve Invoice - Invoice-10202.pdf", description: null, category: null, assignee: {…}, …} diff --git a/docs/release-notes/README.md b/docs/release-notes/README.md index 3e96ea337f..067241f060 100644 --- a/docs/release-notes/README.md +++ b/docs/release-notes/README.md @@ -9,6 +9,7 @@ The first **General available** release was v2.0.0. ## General available +- [3.5.0](RelNote350.md) - [3.4.0](RelNote340.md) - [3.3.0](RelNote330.md) - [3.2.1](RelNote321.md) diff --git a/docs/release-notes/RelNote161.md b/docs/release-notes/RelNote161.md index 495e8d9944..dd673bef5b 100644 --- a/docs/release-notes/RelNote161.md +++ b/docs/release-notes/RelNote161.md @@ -57,8 +57,8 @@ Below the most relevant features of this release. - Process and [Task attachment list component](../process-services/components/task-attachment-list.component.md) - Add [people Component](../process-services/components/people.component.md) - Breadcrumb root path personalisation -- [`Form`](../../lib/process-services/task-list/models/form.model.ts) events bus -- [`Form`](../../lib/process-services/task-list/models/form.model.ts) render independent from APS +- [`Form`](../../lib/process-services/src/lib/task-list/models/form.model.ts) events bus +- [`Form`](../../lib/process-services/src/lib/task-list/models/form.model.ts) render independent from APS - Application settings (server-side) - Proxy settings and CORS - Login restyling @@ -255,7 +255,7 @@ for further details. ### 11. Form render independent from APS -The 1.6.1 release lays a foundation for making a [`Form`](../../lib/process-services/task-list/models/form.model.ts) renderer independent from the backend and APS services to allow more granular control of how it works and where takes/stores its data. +The 1.6.1 release lays a foundation for making a [`Form`](../../lib/process-services/src/lib/task-list/models/form.model.ts) renderer independent from the backend and APS services to allow more granular control of how it works and where takes/stores its data. #### Binding "form" definition @@ -279,7 +279,7 @@ And the underlying component controller code can be as follows: #### Parsing form definitions -The [`FormService`](../core/services/form.service.md) got a new API to parse form definitions from JSON into the [`FormModel`](../../lib/core/form/components/widgets/core/form.model.ts) instances without using [`Form`](../../lib/process-services/task-list/models/form.model.ts) Component like it was previously. +The [`FormService`](../core/services/form.service.md) got a new API to parse form definitions from JSON into the [`FormModel`](../../lib/core/form/components/widgets/core/form.model.ts) instances without using [`Form`](../../lib/process-services/src/lib/task-list/models/form.model.ts) Component like it was previously. formService.parseForm(formDefinitionJSON) @@ -374,7 +374,7 @@ Below you can find a detailed list of tickets addressed in the new release. For - \[[ADF-713](https://issues.alfresco.com/jira/browse/ADF-713)] - Process Attachment - Provide a way to attach a new content - \[[ADF-793](https://issues.alfresco.com/jira/browse/ADF-793)] - Convert to PDF the document that the [renditions service](../core/services/renditions.service.md) provide - \[[ADF-804](https://issues.alfresco.com/jira/browse/ADF-804)] - Add proxy configuration in demo shell -- \[[ADF-843](https://issues.alfresco.com/jira/browse/ADF-843)] - [`Form`](../../lib/process-services/task-list/models/form.model.ts) events bus +- \[[ADF-843](https://issues.alfresco.com/jira/browse/ADF-843)] - [`Form`](../../lib/process-services/src/lib/task-list/models/form.model.ts) events bus - \[[ADF-845](https://issues.alfresco.com/jira/browse/ADF-845)] - Breadcrumb path personalisation - \[[ADF-847](https://issues.alfresco.com/jira/browse/ADF-847)] - Use application settings file instead of local storage for server URLs diff --git a/docs/release-notes/RelNote170.md b/docs/release-notes/RelNote170.md index 6047536e20..e6f1969f74 100644 --- a/docs/release-notes/RelNote170.md +++ b/docs/release-notes/RelNote170.md @@ -317,7 +317,7 @@ Release Notes - Apps Development Framework - Version 1.7. ### Feature -- \[[ADF-914](https://issues.alfresco.com/jira/browse/ADF-914)] - [`Form`](../../lib/process-services/task-list/models/form.model.ts) section in the demo shell +- \[[ADF-914](https://issues.alfresco.com/jira/browse/ADF-914)] - [`Form`](../../lib/process-services/src/lib/task-list/models/form.model.ts) section in the demo shell - \[[ADF-918](https://issues.alfresco.com/jira/browse/ADF-918)] - Activiti Start Task - Refactoring - \[[ADF-920](https://issues.alfresco.com/jira/browse/ADF-920)] - Process Header Component - Use the CardView component - \[[ADF-970](https://issues.alfresco.com/jira/browse/ADF-970)] - Attachment Task/process list - add template for empty list @@ -345,7 +345,7 @@ Release Notes - Apps Development Framework - Version 1.7. - \[[ADF-939](https://issues.alfresco.com/jira/browse/ADF-939)] - [Login] Sign in button does not stay at the bottom - \[[ADF-943](https://issues.alfresco.com/jira/browse/ADF-943)] - APS [`ContentApi`](https://github.com/Alfresco/alfresco-js-api/blob/development/src/api/content-rest-api/api/content.api.ts) is not present on index.d.ts and [`SitesApi`](https://github.com/Alfresco/alfresco-js-api/blob/development/src/api/content-rest-api/api/sites.api.ts) is not complete - \[[ADF-945](https://issues.alfresco.com/jira/browse/ADF-945)] - 'Undefined' is displayed in 'attach file' widget after restore. -- \[[ADF-950](https://issues.alfresco.com/jira/browse/ADF-950)] - when the [`Form`](../../lib/process-services/task-list/models/form.model.ts) in readonly mode you can edit the date +- \[[ADF-950](https://issues.alfresco.com/jira/browse/ADF-950)] - when the [`Form`](../../lib/process-services/src/lib/task-list/models/form.model.ts) in readonly mode you can edit the date - \[[ADF-957](https://issues.alfresco.com/jira/browse/ADF-957)] - Duplicate Rest calls are made for fields where Rest end points are given - \[[ADF-966](https://issues.alfresco.com/jira/browse/ADF-966)] - Data table doesn't update on async loading - \[[ADF-978](https://issues.alfresco.com/jira/browse/ADF-978)] - No warning message is displayed to the user when minor changes are made on Settings. @@ -356,7 +356,7 @@ Release Notes - Apps Development Framework - Version 1.7. - \[[ADF-1026](https://issues.alfresco.com/jira/browse/ADF-1026)] - Default "empty" document list view should be translatable. - \[[ADF-1047](https://issues.alfresco.com/jira/browse/ADF-1047)] - AlfrescoSettingsService defaults to 'ALL' on page reload - \[[ADF-1048](https://issues.alfresco.com/jira/browse/ADF-1048)] - Multiple files attached to a task within a form are not displayed -- \[[ADF-1056](https://issues.alfresco.com/jira/browse/ADF-1056)] - [`Form`](../../lib/process-services/task-list/models/form.model.ts) List Component does not display the forms of the user +- \[[ADF-1056](https://issues.alfresco.com/jira/browse/ADF-1056)] - [`Form`](../../lib/process-services/src/lib/task-list/models/form.model.ts) List Component does not display the forms of the user - \[[ADF-1068](https://issues.alfresco.com/jira/browse/ADF-1068)] - Files can be uploaded using drag and drop when 'enable file' is unchecked - \[[ADF-1070](https://issues.alfresco.com/jira/browse/ADF-1070)] - [User preferences service](../core/services/user-preferences.service.md) does not restore prefix on page reload. - \[[ADF-1072](https://issues.alfresco.com/jira/browse/ADF-1072)] - Unsupported type of file attached to a task or process can not be converted to pdf @@ -365,16 +365,16 @@ Release Notes - Apps Development Framework - Version 1.7. - \[[ADF-1081](https://issues.alfresco.com/jira/browse/ADF-1081)] - Scroll bar is missing in [comments component](../core/components/comments.component.md) - \[[ADF-1097](https://issues.alfresco.com/jira/browse/ADF-1097)] - File with unaccepted extension is uploaded when 'Format' is set to 'All files' - \[[ADF-1134](https://issues.alfresco.com/jira/browse/ADF-1134)] - [Document List] Selection events not raised for certain scenarios -- \[[ADF-1138](https://issues.alfresco.com/jira/browse/ADF-1138)] - Start Task [`Form`](../../lib/process-services/task-list/models/form.model.ts) Assignee dropdown show null value inside +- \[[ADF-1138](https://issues.alfresco.com/jira/browse/ADF-1138)] - Start Task [`Form`](../../lib/process-services/src/lib/task-list/models/form.model.ts) Assignee dropdown show null value inside - \[[ADF-1140](https://issues.alfresco.com/jira/browse/ADF-1140)] - Task header - Wrong parent name key - \[[ADF-1142](https://issues.alfresco.com/jira/browse/ADF-1142)] - Cannot add comment into a process. - \[[ADF-1143](https://issues.alfresco.com/jira/browse/ADF-1143)] - [TaskList] - Not able to start a task when changing the assignee from the 'Start Task' form. -- \[[ADF-1147](https://issues.alfresco.com/jira/browse/ADF-1147)] - [Processes] - [`Form`](../../lib/process-services/task-list/models/form.model.ts) is not rendered properly when starting a new process. +- \[[ADF-1147](https://issues.alfresco.com/jira/browse/ADF-1147)] - [Processes] - [`Form`](../../lib/process-services/src/lib/task-list/models/form.model.ts) is not rendered properly when starting a new process. - \[[ADF-1148](https://issues.alfresco.com/jira/browse/ADF-1148)] - [TaskList] - 'Description' is not rendered. - \[[ADF-1149](https://issues.alfresco.com/jira/browse/ADF-1149)] - 'Remove' involved people of a task button is displayed behind the dialog - \[[ADF-1151](https://issues.alfresco.com/jira/browse/ADF-1151)] - [Processes] - 'Show Diagram' option is not displayed. - \[[ADF-1155](https://issues.alfresco.com/jira/browse/ADF-1155)] - The Process and Task filters are not displayed properly in ADF for applications created in APS -- \[[ADF-1162](https://issues.alfresco.com/jira/browse/ADF-1162)] - List with forms is not displayed inside [`Form`](../../lib/process-services/task-list/models/form.model.ts) List. +- \[[ADF-1162](https://issues.alfresco.com/jira/browse/ADF-1162)] - List with forms is not displayed inside [`Form`](../../lib/process-services/src/lib/task-list/models/form.model.ts) List. - \[[ADF-1168](https://issues.alfresco.com/jira/browse/ADF-1168)] - Tasks header component and Processes header component have different margins - \[[ADF-1169](https://issues.alfresco.com/jira/browse/ADF-1169)] - [Start Task] - Missing date validation - \[[ADF-1175](https://issues.alfresco.com/jira/browse/ADF-1175)] - Start Process and Start Task Forms don't close when Cancel button is clicked diff --git a/docs/release-notes/RelNote180.md b/docs/release-notes/RelNote180.md index 7c84949697..9776601e0c 100644 --- a/docs/release-notes/RelNote180.md +++ b/docs/release-notes/RelNote180.md @@ -52,10 +52,10 @@ Below the most relevant features of this release: - Theming ADF component - [Info Drawer component](../core/components/info-drawer.component.md) -- [`Form`](../../lib/process-services/task-list/models/form.model.ts) style component enhancements +- [`Form`](../../lib/process-services/src/lib/task-list/models/form.model.ts) style component enhancements - Empty form template - Additional data sources input for Document List -- [`Form`](../../lib/process-services/task-list/models/form.model.ts) validation enhancements +- [`Form`](../../lib/process-services/src/lib/task-list/models/form.model.ts) validation enhancements - FormFieldModel/FormModelimprovements - DataTable\*\* \*\*Accessibility Improvements - Copy and move component enhancements @@ -100,12 +100,12 @@ You can now add an empty template that will be shown if no form definition are p ### 5. Form Validation Enhancements -New events that allow taking control over the [`Form`](../../lib/process-services/task-list/models/form.model.ts) and Field validation: +New events that allow taking control over the [`Form`](../../lib/process-services/src/lib/task-list/models/form.model.ts) and Field validation: validateForm: Subject validateFormField: Subject() -The [validateForm](../core/services/form.service.md) event is raised every time the entire [`Form`](../../lib/process-services/task-list/models/form.model.ts) is re-validated. This happens also every time a field value or some of the properties is changed (for example the "required" property). The [validateFormField](../core/services/form.service.md) event is raised every time a single [`Form`](../../lib/process-services/task-list/models/form.model.ts) Field is re-validated. +The [validateForm](../core/services/form.service.md) event is raised every time the entire [`Form`](../../lib/process-services/src/lib/task-list/models/form.model.ts) is re-validated. This happens also every time a field value or some of the properties is changed (for example the "required" property). The [validateFormField](../core/services/form.service.md) event is raised every time a single [`Form`](../../lib/process-services/src/lib/task-list/models/form.model.ts) Field is re-validated. Both events are "cancellable", that means you can apply your own validation rules, change corresponding field validation state, or even prevent the default behaviour if needed. @@ -127,7 +127,7 @@ Example: #### FormFieldModel -The "required" property now re-validates the corresponding Field and entire [`Form`](../../lib/process-services/task-list/models/form.model.ts) upon every change. That enables scenarios when the "required" constraint is changed dynamically for a field based on some external factors. +The "required" property now re-validates the corresponding Field and entire [`Form`](../../lib/process-services/src/lib/task-list/models/form.model.ts) upon every change. That enables scenarios when the "required" constraint is changed dynamically for a field based on some external factors. #### FormModel @@ -135,9 +135,9 @@ New "getFieldById" method to simplify certain scenarios when accessing multiple getFieldById(fieldId: string): FormFieldModel -The [`Form`](../../lib/process-services/task-list/models/form.model.ts) now controls all Field validators. It becomes possible managing existing validator instances, replacing them, or extending form validation with custom rules and error messages. The "adf-form" component now also supports binding custom validator sets to the underlying [FormModel,](../../lib/core/form/components/widgets/core/form.model.ts) that allows defining validation sets in your code and binding via HTML. +The [`Form`](../../lib/process-services/src/lib/task-list/models/form.model.ts) now controls all Field validators. It becomes possible managing existing validator instances, replacing them, or extending form validation with custom rules and error messages. The "adf-form" component now also supports binding custom validator sets to the underlying [FormModel,](../../lib/core/form/components/widgets/core/form.model.ts) that allows defining validation sets in your code and binding via HTML. -You can read more details on the new Validation layer in the [`Form`](../../lib/process-services/task-list/models/form.model.ts) readme: [Form Field Validators](../core/interfaces/form-field-validator.interface.md). The "demo shell" application has been also extended to demonstrate custom validators in action. You can check the code here: [Demo Field Validator](../core/interfaces/form-field-validator.interface.md). +You can read more details on the new Validation layer in the [`Form`](../../lib/process-services/src/lib/task-list/models/form.model.ts) readme: [Form Field Validators](../core/interfaces/form-field-validator.interface.md). The "demo shell" application has been also extended to demonstrate custom validators in action. You can check the code here: [Demo Field Validator](../core/interfaces/form-field-validator.interface.md). ### 7. DataTable Accessibility Improvements @@ -470,7 +470,7 @@ Release Notes - Apps Development Framework - Version 1.8. - \[[ADF-1360](https://issues.alfresco.com/jira/browse/ADF-1360)] - An error appears in console when clicking on Content Services in Demo Shell - \[[ADF-1368](https://issues.alfresco.com/jira/browse/ADF-1368)] - A file deleted from Document List is still displayed as uploaded in Uploader - \[[ADF-1370](https://issues.alfresco.com/jira/browse/ADF-1370)] - PDF viewer not using web worker -- \[[ADF-1384](https://issues.alfresco.com/jira/browse/ADF-1384)] - ADF [`Form`](../../lib/process-services/task-list/models/form.model.ts) - The placeholder is overlapping the label +- \[[ADF-1384](https://issues.alfresco.com/jira/browse/ADF-1384)] - ADF [`Form`](../../lib/process-services/src/lib/task-list/models/form.model.ts) - The placeholder is overlapping the label - \[[ADF-1386](https://issues.alfresco.com/jira/browse/ADF-1386)] - if pagination attribute is undefined shows inconsistent range - \[[ADF-1394](https://issues.alfresco.com/jira/browse/ADF-1394)] - Favorites Api not passing the "include" settings to server - \[[ADF-1395](https://issues.alfresco.com/jira/browse/ADF-1395)] - The title of the reports is not aligned. @@ -508,8 +508,8 @@ Release Notes - Apps Development Framework - Version 1.8. - \[[ADF-1502](https://issues.alfresco.com/jira/browse/ADF-1502)] - AoT problems when using ADF with Angular CLI - \[[ADF-1509](https://issues.alfresco.com/jira/browse/ADF-1509)] - ['Form](../../lib/process-services/task-list/models/form.model.ts) Name' displays 'No form' after editing 'Due Date' or 'Description'. - \[[ADF-1510](https://issues.alfresco.com/jira/browse/ADF-1510)] - Report button tooltips are missing translation. -- \[[ADF-1512](https://issues.alfresco.com/jira/browse/ADF-1512)] - [`Form`](../../lib/process-services/task-list/models/form.model.ts) is expanding when required label is displayed. -- \[[ADF-1513](https://issues.alfresco.com/jira/browse/ADF-1513)] - [`Form`](../../lib/process-services/task-list/models/form.model.ts) List doesn't display form Tabs. +- \[[ADF-1512](https://issues.alfresco.com/jira/browse/ADF-1512)] - [`Form`](../../lib/process-services/src/lib/task-list/models/form.model.ts) is expanding when required label is displayed. +- \[[ADF-1513](https://issues.alfresco.com/jira/browse/ADF-1513)] - [`Form`](../../lib/process-services/src/lib/task-list/models/form.model.ts) List doesn't display form Tabs. ## New Feature @@ -544,7 +544,7 @@ Release Notes - Apps Development Framework - Version 1.8. - \[[ADF-714](https://issues.alfresco.com/jira/browse/ADF-714)] - Unify pagination across all components - \[[ADF-1116](https://issues.alfresco.com/jira/browse/ADF-1116)] - Task list without any status filter - \[[ADF-1139](https://issues.alfresco.com/jira/browse/ADF-1139)] - People Search - Provide a way to reset the search field when a user is selected -- \[[ADF-852](https://issues.alfresco.com/jira/browse/ADF-852)] - [Form] Update [`Form`](../../lib/process-services/task-list/models/form.model.ts) widget to Material library +- \[[ADF-852](https://issues.alfresco.com/jira/browse/ADF-852)] - [Form] Update [`Form`](../../lib/process-services/src/lib/task-list/models/form.model.ts) widget to Material library - \[[ADF-520](https://issues.alfresco.com/jira/browse/ADF-520)] - remove the debug button from [Analytics Component](../insights/components/analytics.component.md) - \[[ADF-157](https://issues.alfresco.com/jira/browse/ADF-157)] - upload dialog Wrong number on File Upload Count - 1511 Github - \[[ADF-569](https://issues.alfresco.com/jira/browse/ADF-569)] - Provide support to Undo uploaded files in the Upload component diff --git a/docs/release-notes/RelNote190.md b/docs/release-notes/RelNote190.md index 7daf7ca80b..e9c7358fc9 100644 --- a/docs/release-notes/RelNote190.md +++ b/docs/release-notes/RelNote190.md @@ -262,7 +262,7 @@ Release Notes - Apps Development Framework - Version 1.9. - \[[ADF-1523](https://issues.alfresco.com/jira/browse/ADF-1523)] - APS task form remains disabled when no custom outcome is provided in ADF 1.8. - \[[ADF-1525](https://issues.alfresco.com/jira/browse/ADF-1525)] - In APS forms, hyperlink fields are not rendered when configured with process variables - \[[ADF-1526](https://issues.alfresco.com/jira/browse/ADF-1526)] - The [form component](../core/components/form.component.md) is not responsive in ADF 1.8. -- \[[ADF-1528](https://issues.alfresco.com/jira/browse/ADF-1528)] - [`Form`](../../lib/process-services/task-list/models/form.model.ts) renderer does not display generated documents - github 2303 +- \[[ADF-1528](https://issues.alfresco.com/jira/browse/ADF-1528)] - [`Form`](../../lib/process-services/src/lib/task-list/models/form.model.ts) renderer does not display generated documents - github 2303 - \[[ADF-1529](https://issues.alfresco.com/jira/browse/ADF-1529)] - Broken styles for toolbar buttons. - \[[ADF-1530](https://issues.alfresco.com/jira/browse/ADF-1530)] - [Viewer] Extension viewer doens't work anymore - \[[ADF-1533](https://issues.alfresco.com/jira/browse/ADF-1533)] - Multi-line form field contains a bug where red required warnings are shown incorrectly @@ -323,7 +323,7 @@ Release Notes - Apps Development Framework - Version 1.9. - \[[ADF-1662](https://issues.alfresco.com/jira/browse/ADF-1662)] - [User info] name is not centered - \[[ADF-1664](https://issues.alfresco.com/jira/browse/ADF-1664)] - [Login component] icon show password dark theme - \[[ADF-1666](https://issues.alfresco.com/jira/browse/ADF-1666)] - Comments can not be added to completed tasks and processes -- \[[ADF-1667](https://issues.alfresco.com/jira/browse/ADF-1667)] - [`Form`](../../lib/process-services/task-list/models/form.model.ts) component displays 'Nameless Task' +- \[[ADF-1667](https://issues.alfresco.com/jira/browse/ADF-1667)] - [`Form`](../../lib/process-services/src/lib/task-list/models/form.model.ts) component displays 'Nameless Task' - \[[ADF-1668](https://issues.alfresco.com/jira/browse/ADF-1668)] - The task or process details are not loaded when double clicked - \[[ADF-1669](https://issues.alfresco.com/jira/browse/ADF-1669)] - Attach File widget doesn't display file after complete. - \[[ADF-1671](https://issues.alfresco.com/jira/browse/ADF-1671)] - Widgets don't display value if they have visibility conditions related to multiline text widget. @@ -360,7 +360,7 @@ Release Notes - Apps Development Framework - Version 1.9. - \[[ADF-1543](https://issues.alfresco.com/jira/browse/ADF-1543)] - Use Muli font embedded in the "index.html" page - \[[ADF-1548](https://issues.alfresco.com/jira/browse/ADF-1548)] - Remove "forRoot" functions from all the component modules - \[[ADF-1584](https://issues.alfresco.com/jira/browse/ADF-1584)] - Userinfo component change text color -- \[[ADF-1608](https://issues.alfresco.com/jira/browse/ADF-1608)] - Start [`Form`](../../lib/process-services/task-list/models/form.model.ts) - Improve the unit test cases +- \[[ADF-1608](https://issues.alfresco.com/jira/browse/ADF-1608)] - Start [`Form`](../../lib/process-services/src/lib/task-list/models/form.model.ts) - Improve the unit test cases - \[[ADF-1634](https://issues.alfresco.com/jira/browse/ADF-1634)] - Action toolbar for PDF viewer - \[[ADF-1676](https://issues.alfresco.com/jira/browse/ADF-1676)] - Switch off all fake buttons in the Viewer diff --git a/docs/release-notes/RelNote200.md b/docs/release-notes/RelNote200.md index f8187f3dc1..bbea70c097 100644 --- a/docs/release-notes/RelNote200.md +++ b/docs/release-notes/RelNote200.md @@ -736,7 +736,7 @@ Release Notes - Apps Development Framework - Version 2.0. - \[[ADF-1815](https://issues.alfresco.com/jira/browse/ADF-1815)] - Sorting content by name is not working properly - \[[ADF-1818](https://issues.alfresco.com/jira/browse/ADF-1818)] - Add Missing Create person API in JS-API - \[[ADF-1824](https://issues.alfresco.com/jira/browse/ADF-1824)] - Moment js security issue -- \[[ADF-1825](https://issues.alfresco.com/jira/browse/ADF-1825)] - [`Form`](../../lib/process-services/task-list/models/form.model.ts) field in start task no aligned +- \[[ADF-1825](https://issues.alfresco.com/jira/browse/ADF-1825)] - [`Form`](../../lib/process-services/src/lib/task-list/models/form.model.ts) field in start task no aligned - \[[ADF-1827](https://issues.alfresco.com/jira/browse/ADF-1827)] - 'Object Object' displayed on search results page - \[[ADF-1829](https://issues.alfresco.com/jira/browse/ADF-1829)] - [`PeopleApi`](https://github.com/Alfresco/alfresco-js-api/blob/development/src/api/content-rest-api/api/people.api.ts) - getSiteMembership wrong returned type - \[[ADF-1830](https://issues.alfresco.com/jira/browse/ADF-1830)] - Cannot access processes or reports @@ -753,7 +753,7 @@ Release Notes - Apps Development Framework - Version 2.0. - \[[ADF-1866](https://issues.alfresco.com/jira/browse/ADF-1866)] - Accordion Component - Doesn't allow to close the menu - \[[ADF-1871](https://issues.alfresco.com/jira/browse/ADF-1871)] - Tasklist IE 11 crash - \[[ADF-1872](https://issues.alfresco.com/jira/browse/ADF-1872)] - TaskList Component - Doesn't show the currentTaskId highlited -- \[[ADF-1875](https://issues.alfresco.com/jira/browse/ADF-1875)] - [`ProcessList`](../../lib/process-services/mock/process/process.model.mock.ts) Component - Doesn't show the currentProcessId highlighted +- \[[ADF-1875](https://issues.alfresco.com/jira/browse/ADF-1875)] - [`ProcessList`](../../lib/process-services/src/lib/mock/process/process.model.mock.ts) Component - Doesn't show the currentProcessId highlighted - \[[ADF-1877](https://issues.alfresco.com/jira/browse/ADF-1877)] - Layout demo shell not localized - \[[ADF-1878](https://issues.alfresco.com/jira/browse/ADF-1878)] - [Translation service](../core/services/translation.service.md) not using fallback language for unsupported locale - \[[ADF-1879](https://issues.alfresco.com/jira/browse/ADF-1879)] - ADF Process Services is not working properly @@ -766,7 +766,7 @@ Release Notes - Apps Development Framework - Version 2.0. - \[[ADF-1902](https://issues.alfresco.com/jira/browse/ADF-1902)] - Buttons of the Create / Edit folder dialog do not match design - \[[ADF-1907](https://issues.alfresco.com/jira/browse/ADF-1907)] - [`UploadService`](../core/services/upload.service.md) is not exported from [`UploadModule`](../../lib/content-services/upload/upload.module.ts) - \[[ADF-1908](https://issues.alfresco.com/jira/browse/ADF-1908)] - Not able to select a form on Start Task -- \[[ADF-1909](https://issues.alfresco.com/jira/browse/ADF-1909)] - [`TaskListModel`](../../lib/process-services/task-list/models/task-list.model.ts) is not exported from ActivitiTaskListModule +- \[[ADF-1909](https://issues.alfresco.com/jira/browse/ADF-1909)] - [`TaskListModel`](../../lib/process-services/src/lib/task-list/models/task-list.model.ts) is not exported from ActivitiTaskListModule - \[[ADF-1911](https://issues.alfresco.com/jira/browse/ADF-1911)] - Content can be uploaded on Search Result Page when no results are found - \[[ADF-1912](https://issues.alfresco.com/jira/browse/ADF-1912)] - Not able to re-login with a valid user after login out. - \[[ADF-1914](https://issues.alfresco.com/jira/browse/ADF-1914)] - Custom toolbar is displayed on Search Results page when no results are found @@ -774,7 +774,7 @@ Release Notes - Apps Development Framework - Version 2.0. - \[[ADF-1916](https://issues.alfresco.com/jira/browse/ADF-1916)] - Not able to add a file to the Attachment List. - \[[ADF-1920](https://issues.alfresco.com/jira/browse/ADF-1920)] - Diagram is not displayed after clicking 'Show Diagram' option. - \[[ADF-1921](https://issues.alfresco.com/jira/browse/ADF-1921)] - Dynamic Table widget is being duplicated after editing. -- \[[ADF-1922](https://issues.alfresco.com/jira/browse/ADF-1922)] - [`Form`](../../lib/process-services/task-list/models/form.model.ts) page is not displayed. +- \[[ADF-1922](https://issues.alfresco.com/jira/browse/ADF-1922)] - [`Form`](../../lib/process-services/src/lib/task-list/models/form.model.ts) page is not displayed. - \[[ADF-1924](https://issues.alfresco.com/jira/browse/ADF-1924)] - Some issues related to search bar - \[[ADF-1945](https://issues.alfresco.com/jira/browse/ADF-1945)] - Profile image has Initials displayed behind it - \[[ADF-1948](https://issues.alfresco.com/jira/browse/ADF-1948)] - Not able to involve people into a task. @@ -818,7 +818,7 @@ Release Notes - Apps Development Framework - Version 2.0. - \[[ADF-2014](https://issues.alfresco.com/jira/browse/ADF-2014)] - Document List file cannot be deleted - \[[ADF-2016](https://issues.alfresco.com/jira/browse/ADF-2016)] - Paginator integration with other components - \[[ADF-2017](https://issues.alfresco.com/jira/browse/ADF-2017)] - Continous loading of process details if process list is empty -- \[[ADF-2019](https://issues.alfresco.com/jira/browse/ADF-2019)] - [Demo Shell] When clicking refresh for button on [`Form`](../../lib/process-services/task-list/models/form.model.ts) component the whole page reloads +- \[[ADF-2019](https://issues.alfresco.com/jira/browse/ADF-2019)] - [Demo Shell] When clicking refresh for button on [`Form`](../../lib/process-services/src/lib/task-list/models/form.model.ts) component the whole page reloads - \[[ADF-2020](https://issues.alfresco.com/jira/browse/ADF-2020)] - The upload button is not disabled when the 'enable upload' checkbox is not checked - \[[ADF-2022](https://issues.alfresco.com/jira/browse/ADF-2022)] - Excluded files can be uploaded - \[[ADF-2023](https://issues.alfresco.com/jira/browse/ADF-2023)] - Files can be drag and drop when allowDropFiles property is set to false diff --git a/docs/release-notes/RelNote210.md b/docs/release-notes/RelNote210.md index 8637ec4336..ad8bfdb246 100644 --- a/docs/release-notes/RelNote210.md +++ b/docs/release-notes/RelNote210.md @@ -338,7 +338,7 @@ Release Notes - Apps Development Framework - Version 2.1. - \[[ADF-1734](https://issues.alfresco.com/jira/browse/ADF-1734)] - Article on how to use Forms with ACS - \[[ADF-2058](https://issues.alfresco.com/jira/browse/ADF-2058)] - Search example new functionality article - \[[ADF-2060](https://issues.alfresco.com/jira/browse/ADF-2060)] - sidebarTemplate missing documentation -- \[[ADF-2122](https://issues.alfresco.com/jira/browse/ADF-2122)] - Incorrect product naming reference on [`Form`](../../lib/process-services/task-list/models/form.model.ts) Extensibility and Customisation page +- \[[ADF-2122](https://issues.alfresco.com/jira/browse/ADF-2122)] - Incorrect product naming reference on [`Form`](../../lib/process-services/src/lib/task-list/models/form.model.ts) Extensibility and Customisation page - \[[ADF-2125](https://issues.alfresco.com/jira/browse/ADF-2125)] - App generator has wrong documentation - \[[ADF-2160](https://issues.alfresco.com/jira/browse/ADF-2160)] - combined handler missing in [Content Action component](../content-services/components/content-action.component.md) documentation - \[[ADF-2162](https://issues.alfresco.com/jira/browse/ADF-2162)] - [Notification service](../core/services/notification.service.md) missing screenshot @@ -367,7 +367,7 @@ Release Notes - Apps Development Framework - Version 2.1. - \[[ADF-1882](https://issues.alfresco.com/jira/browse/ADF-1882)] - Preview uploaded content in APS fails in form - \[[ADF-1888](https://issues.alfresco.com/jira/browse/ADF-1888)] - [`ExternalContent`](../../lib/core/form/components/widgets/core/external-content.ts) is not exported in ActivitiFormModule - \[[ADF-1889](https://issues.alfresco.com/jira/browse/ADF-1889)] - Viewer does not render PDF renditions unless urlFile ends with .pdf -- \[[ADF-1926](https://issues.alfresco.com/jira/browse/ADF-1926)] - [`Form`](../../lib/process-services/task-list/models/form.model.ts) is not exported from ActivitiTaskListModule +- \[[ADF-1926](https://issues.alfresco.com/jira/browse/ADF-1926)] - [`Form`](../../lib/process-services/src/lib/task-list/models/form.model.ts) is not exported from ActivitiTaskListModule - \[[ADF-1959](https://issues.alfresco.com/jira/browse/ADF-1959)] - Apps with description appear with larger size on the Processes Services page - \[[ADF-1999](https://issues.alfresco.com/jira/browse/ADF-1999)] - Size values are not translated - \[[ADF-2025](https://issues.alfresco.com/jira/browse/ADF-2025)] - Task List - The pagination should be fetched from the UserPreference @@ -436,7 +436,7 @@ Release Notes - Apps Development Framework - Version 2.1. - \[[ADF-2074](https://issues.alfresco.com/jira/browse/ADF-2074)] - [Test Automation] implement uploader component - main suite. - \[[ADF-2084](https://issues.alfresco.com/jira/browse/ADF-2084)] - [Test Automation] create test for datatable - \[[ADF-2090](https://issues.alfresco.com/jira/browse/ADF-2090)] - [Test Automation] Review [search component](../content-services/components/search.component.md) tests -- \[[ADF-2094](https://issues.alfresco.com/jira/browse/ADF-2094)] - Task [`Form`](../../lib/process-services/task-list/models/form.model.ts) - Doesn't follow the specification +- \[[ADF-2094](https://issues.alfresco.com/jira/browse/ADF-2094)] - Task [`Form`](../../lib/process-services/src/lib/task-list/models/form.model.ts) - Doesn't follow the specification - \[[ADF-2095](https://issues.alfresco.com/jira/browse/ADF-2095)] - Start Task - The start button should have the primary colour - \[[ADF-2096](https://issues.alfresco.com/jira/browse/ADF-2096)] - Info Drawer - Should use the Flex Css - \[[ADF-2104](https://issues.alfresco.com/jira/browse/ADF-2104)] - Update Flex Layout to v2.0.0-beta.12 diff --git a/docs/release-notes/RelNote220.md b/docs/release-notes/RelNote220.md index e90c03281d..7f4c01b6ee 100644 --- a/docs/release-notes/RelNote220.md +++ b/docs/release-notes/RelNote220.md @@ -74,7 +74,7 @@ Below are the most important new features of this release: - Task Header - Make it customizable from the config file - Process List - Provide a way to support custom html template and static columns at same time - Date Time Widget -- [`Form`](../../lib/process-services/task-list/models/form.model.ts) Upload Widget Actions menu +- [`Form`](../../lib/process-services/src/lib/task-list/models/form.model.ts) Upload Widget Actions menu - Search custom empty template ### Data table/Document list gallery view @@ -353,7 +353,7 @@ Release Notes - Apps Development Framework - Version 2.2. - \[[ADF-2242](https://issues.alfresco.com/jira/browse/ADF-2242)] - Search on custom sources is not working. - \[[ADF-2243](https://issues.alfresco.com/jira/browse/ADF-2243)] - Translation is missing for the 'Extended Search'. - \[[ADF-2246](https://issues.alfresco.com/jira/browse/ADF-2246)] - [Destination Picker] The selection from the dropdown is ignored after 'Clear' action -- \[[ADF-2251](https://issues.alfresco.com/jira/browse/ADF-2251)] - [`ContentWidgetModule`](../../lib/process-services/content-widget/content-widget.module.ts) is not exposed from ADF +- \[[ADF-2251](https://issues.alfresco.com/jira/browse/ADF-2251)] - [`ContentWidgetModule`](../../lib/process-services/src/lib/content-widget/content-widget.module.ts) is not exposed from ADF - \[[ADF-2254](https://issues.alfresco.com/jira/browse/ADF-2254)] - Viewer does not update top menu on "fileNodeId" changes - \[[ADF-2255](https://issues.alfresco.com/jira/browse/ADF-2255)] - SelectBox field does not render the data in ADF form - \[[ADF-2260](https://issues.alfresco.com/jira/browse/ADF-2260)] - Action menu translation is missing when right clicking on a file/folder diff --git a/docs/release-notes/RelNote230.md b/docs/release-notes/RelNote230.md index 17d148762a..e4fd122adc 100644 --- a/docs/release-notes/RelNote230.md +++ b/docs/release-notes/RelNote230.md @@ -347,7 +347,7 @@ Release Notes - Apps Development Framework - Version 2.3.0 - \[[ADF-2591](https://issues.alfresco.com/jira/browse/ADF-2591)] - [Document list] Selection icon is cut - \[[ADF-2592](https://issues.alfresco.com/jira/browse/ADF-2592)] - Different types of tooltips appear in the viewer - \[[ADF-2604](https://issues.alfresco.com/jira/browse/ADF-2604)] - Incorrect definitions for Enums -- \[[ADF-2607](https://issues.alfresco.com/jira/browse/ADF-2607)] - Task [`Form`](../../lib/process-services/task-list/models/form.model.ts) - Number Widget placeholder no longer displayed +- \[[ADF-2607](https://issues.alfresco.com/jira/browse/ADF-2607)] - Task [`Form`](../../lib/process-services/src/lib/task-list/models/form.model.ts) - Number Widget placeholder no longer displayed - \[[ADF-2624](https://issues.alfresco.com/jira/browse/ADF-2624)] - All metadata card component children display parent info drawer tooltip - \[[ADF-2625](https://issues.alfresco.com/jira/browse/ADF-2625)] - [`Node`](https://github.com/Alfresco/alfresco-js-api/blob/development/src/api/content-rest-api/docs/Node.md) name not updated when changing its value in metadata component - \[[ADF-2628](https://issues.alfresco.com/jira/browse/ADF-2628)] - Metadata editors miss tooltips @@ -363,7 +363,7 @@ Release Notes - Apps Development Framework - Version 2.3.0 - \[[ADF-2682](https://issues.alfresco.com/jira/browse/ADF-2682)] - Number of page doesn't change when navigating to another folder - \[[ADF-2684](https://issues.alfresco.com/jira/browse/ADF-2684)] - [Task Pagination][pagination](../../lib/content-services/document-list/models/document-library.model.ts) isn't displayed properly when 'Items per page' is 25 - \[[ADF-2687](https://issues.alfresco.com/jira/browse/ADF-2687)] - [Demo shell] No message is displayed when deleting a file/folder from content action -- \[[ADF-2689](https://issues.alfresco.com/jira/browse/ADF-2689)] - Task [`Form`](../../lib/process-services/task-list/models/form.model.ts) - Text Widget placeholder no longer displayed +- \[[ADF-2689](https://issues.alfresco.com/jira/browse/ADF-2689)] - Task [`Form`](../../lib/process-services/src/lib/task-list/models/form.model.ts) - Text Widget placeholder no longer displayed - \[[ADF-2690](https://issues.alfresco.com/jira/browse/ADF-2690)] - Title is not properly displayed in Metadata component - 'Properties' tab - \[[ADF-2711](https://issues.alfresco.com/jira/browse/ADF-2711)] - [Involve People Widget] When scrolling down the result box scrolls with the page - \[[ADF-2714](https://issues.alfresco.com/jira/browse/ADF-2714)] - [Demo shell]Not able to download a version of a file diff --git a/docs/release-notes/RelNote240.md b/docs/release-notes/RelNote240.md index e8f053acbe..5a0e51aaee 100644 --- a/docs/release-notes/RelNote240.md +++ b/docs/release-notes/RelNote240.md @@ -59,7 +59,7 @@ Below are the most important new features of this release: - File Versioning enhancements - Empty Page Component - TaskList Empty Page -- [`ProcessList`](../../lib/process-services/mock/process/process.model.mock.ts) Empty Page +- [`ProcessList`](../../lib/process-services/src/lib/mock/process/process.model.mock.ts) Empty Page - Error Page Component - Search Improvements - [App config pipe](../core/pipes/app-config.pipe.md) @@ -123,7 +123,7 @@ You can still override it from the parent component using ``. ### ProcessList Empty Page -In the version 2.4, the [`ProcessList`](../../lib/process-services/mock/process/process.model.mock.ts) uses the empty state component if there are no available processes. +In the version 2.4, the [`ProcessList`](../../lib/process-services/src/lib/mock/process/process.model.mock.ts) uses the empty state component if there are no available processes. You can still override it from the parent component using ``. ![Process list Empty Page](images/Screen+Shot+2018-06-25+at+11.16.57.png) @@ -238,7 +238,7 @@ Release Notes - Apps Development Framework - Version 2.4.0 - \[[ADF-2789](https://issues.alfresco.com/jira/browse/ADF-2789)] - alfresco-js-api downlaodapi - \[[ADF-2847](https://issues.alfresco.com/jira/browse/ADF-2847)] - Update all doc file structures to match script requirements - \[[ADF-2969](https://issues.alfresco.com/jira/browse/ADF-2969)] - Move doc tools into the new tools folder -- \[[ADF-2989](https://issues.alfresco.com/jira/browse/ADF-2989)] - Pre-populating Start Process [`Form`](../../lib/process-services/task-list/models/form.model.ts) with multiple files from ACS doesn't work +- \[[ADF-2989](https://issues.alfresco.com/jira/browse/ADF-2989)] - Pre-populating Start Process [`Form`](../../lib/process-services/src/lib/task-list/models/form.model.ts) with multiple files from ACS doesn't work - \[[ADF-3049](https://issues.alfresco.com/jira/browse/ADF-3049)] - Release Note 2.4.0 - \[[ADF-3087](https://issues.alfresco.com/jira/browse/ADF-3087)] - Better explanation of replacing i18n keys in the user guide - \[[ADF-3142](https://issues.alfresco.com/jira/browse/ADF-3142)] - [Login component](../core/components/login.component.md) should explain what "remember me" is for @@ -267,7 +267,7 @@ Release Notes - Apps Development Framework - Version 2.4.0 - \[[ADF-2984](https://issues.alfresco.com/jira/browse/ADF-2984)] - Show date invalid message on search date range picker - \[[ADF-3028](https://issues.alfresco.com/jira/browse/ADF-3028)] - [Page Title Service](../core/services/page-title.service.md) should support i18n - \[[ADF-3041](https://issues.alfresco.com/jira/browse/ADF-3041)] - TaskList Component - Empty State issue. -- \[[ADF-3066](https://issues.alfresco.com/jira/browse/ADF-3066)] - [`ProcessList`](../../lib/process-services/mock/process/process.model.mock.ts) Component - Empty State issue. +- \[[ADF-3066](https://issues.alfresco.com/jira/browse/ADF-3066)] - [`ProcessList`](../../lib/process-services/src/lib/mock/process/process.model.mock.ts) Component - Empty State issue. - \[[ADF-3095](https://issues.alfresco.com/jira/browse/ADF-3095)] - Upload and DragArea component events to intercept uploads - \[[ADF-3118](https://issues.alfresco.com/jira/browse/ADF-3118)] - [Notification Service](../core/services/notification.service.md) should support i18n resource keys @@ -307,7 +307,7 @@ Release Notes - Apps Development Framework - Version 2.4.0 - \[[ADF-2685](https://issues.alfresco.com/jira/browse/ADF-2685)] - [Demo shell] The Gallery view is changed after navigating to another folder - \[[ADF-2692](https://issues.alfresco.com/jira/browse/ADF-2692)] - Process Filters doesn't update immediately after completing the last task of the process. - \[[ADF-2699](https://issues.alfresco.com/jira/browse/ADF-2699)] - dataTimeAgo Pipe is not localized -- \[[ADF-2702](https://issues.alfresco.com/jira/browse/ADF-2702)] - Try to open an unknown type with the viewer returns an error +- \[[ADF-2702](https://issues.alfresco.com/jira/browse/ADF-2702)] - Try to open an type with the viewer returns an error - \[[ADF-2703](https://issues.alfresco.com/jira/browse/ADF-2703)] - Info Drawer - Header does not navigate to name of default tab - \[[ADF-2710](https://issues.alfresco.com/jira/browse/ADF-2710)] - Share toggle gets enabled when clicking on Share icon - \[[ADF-2717](https://issues.alfresco.com/jira/browse/ADF-2717)] - [Lock file] Long file name overflow diff --git a/docs/release-notes/RelNote250.md b/docs/release-notes/RelNote250.md index 87d811996e..5eb6d48fa1 100644 --- a/docs/release-notes/RelNote250.md +++ b/docs/release-notes/RelNote250.md @@ -272,7 +272,7 @@ Release Notes - Apps Development Framework - Version 2.5.0 ] - Upgrade Angular Material Design - \[ [ADF-3308](https://issues.alfresco.com/jira/browse/ADF-3308) - ] - [`ProcessList`](../../lib/process-services/mock/process/process.model.mock.ts) Component - Provide a way to filter the list by fields + ] - [`ProcessList`](../../lib/process-services/src/lib/mock/process/process.model.mock.ts) Component - Provide a way to filter the list by fields - \[ [ADF-3366](https://issues.alfresco.com/jira/browse/ADF-3366) ] - Update Site details @@ -314,7 +314,7 @@ Release Notes - Apps Development Framework - Version 2.5.0 ] - [Demo shell] User is not redirected to active process when completing the first task as initiator - \[ [ADF-2876](https://issues.alfresco.com/jira/browse/ADF-2876) - ] - Activiti [`Form`](../../lib/process-services/task-list/models/form.model.ts) - Complete button does not get enabled when logged in as Active Directory users. + ] - Activiti [`Form`](../../lib/process-services/src/lib/task-list/models/form.model.ts) - Complete button does not get enabled when logged in as Active Directory users. - \[ [ADF-2962](https://issues.alfresco.com/jira/browse/ADF-2962) ] - Can't reach the Hide/Show password icon using tab key @@ -533,7 +533,7 @@ Release Notes - Apps Development Framework - Version 2.5.0 ] - Required fields on a form are not displayed on a read-only mode. - \[ [ADF-3413](https://issues.alfresco.com/jira/browse/ADF-3413) - ] - [`Form`](../../lib/process-services/task-list/models/form.model.ts) name still displayed after removing form + ] - [`Form`](../../lib/process-services/src/lib/task-list/models/form.model.ts) name still displayed after removing form ### Feature (Task) diff --git a/docs/release-notes/RelNote260.md b/docs/release-notes/RelNote260.md index 0d9f671497..c38f660e32 100644 --- a/docs/release-notes/RelNote260.md +++ b/docs/release-notes/RelNote260.md @@ -107,7 +107,7 @@ A configurable delete button has been added to the **Tag [`Node`](https://github ### Validation summary support for form component -The **[`Form`](../../lib/process-services/task-list/models/form.model.ts) Component** will now use the **formError** event to send a validation summary for all the fields with errors. This will be useful particularly with big forms for showing which fields are in error without scrolling the whole form by creating a summary. +The **[`Form`](../../lib/process-services/src/lib/task-list/models/form.model.ts) Component** will now use the **formError** event to send a validation summary for all the fields with errors. This will be useful particularly with big forms for showing which fields are in error without scrolling the whole form by creating a summary.
- - ``` +```html + + +``` It is also possible to start a process with a form and pass in the form values at the same time: - ```html - - - ``` +```html + + +``` ### Multilingual support for forms @@ -106,17 +106,18 @@ and in your `it.json`: "LASTNAME": "Cognome" } } -``` +``` + Your app will now change the label of the form using the translations files. ### Form validation -Form validation will now display whether a form is valid or invalid. +[`Form`](../../lib/process-services/src/lib/task-list/models/form.model.ts) validation will now display whether a form is valid or invalid. ### Form variables -Form variables can now assigned to forms. When creating an application that contains a form, variables can be assigned and will correctly display as the appropriate values when the form is launched. - +[`Form`](../../lib/process-services/src/lib/task-list/models/form.model.ts) variables can now assigned to forms. When creating an application that contains a form, variables can be assigned and will correctly display as the appropriate values when the form is launched. + ### REST source for dropdown menu on forms It is now possible to create a form that contains a dropdown widget that is configured to use a REST Service to populate its values. @@ -149,7 +150,6 @@ Please refer to the [official documentation](http://docs.alfresco.com/) for furt The following is the list of JIRA issues that were closed for this release: -
  • [ADF-4618] - Update the tutorial on RTL languages support
  • @@ -460,7 +460,6 @@ The following is the list of JIRA issues that were closed for this release:
- Please refer to the [Alfresco issue tracker](https://issues.alfresco.com/jira/projects/ADF/issues/ADF-581?filter=allopenissues) for other known issues in this release. If you have any questions about the release, please contact us using [Gitter](https://gitter.im/Alfresco/alfresco-ng2-components). Thanks to the whole application team and the amazing Alfresco community for the hard work. diff --git a/docs/release-notes/RelNote340.md b/docs/release-notes/RelNote340.md index 9510a45255..69512540f3 100644 --- a/docs/release-notes/RelNote340.md +++ b/docs/release-notes/RelNote340.md @@ -17,10 +17,10 @@ versions of ADF. - [New package versions](#new-package-versions) - [Goals for this release](#goals-for-this-release) - - [Form visibility](#form-field-visibility) + - [Form field visibility](#form-field-visibility) - [Preference service](#preference-service) - [Forms in standalone tasks](#forms-in-standalone-tasks) - - [Angular Material upgrade](#angular-material-upgrade) + - [Angular and Material upgrade](#angular-and-material-upgrade) - [Localisation](#localisation) - [References](#references) - [Issues addressed](#issues-addressed) @@ -78,7 +78,7 @@ The following is an example JSON of a form definition with the new boolean prope "standAlone": true, "formDefinition": { ... -``` +``` ### Angular and Material upgrade @@ -285,7 +285,6 @@ The following is the list of JIRA issues that were closed for this release: - Please refer to the [Alfresco issue tracker](https://issues.alfresco.com/jira/projects/ADF/issues/ADF-581?filter=allopenissues) for other known issues in this release. If you have any questions about the release, please contact us using [Gitter](https://gitter.im/Alfresco/alfresco-ng2-components). Thanks to the whole application team and the amazing Alfresco community for the hard work. diff --git a/docs/release-notes/RelNote350.md b/docs/release-notes/RelNote350.md new file mode 100644 index 0000000000..aadc00e3b1 --- /dev/null +++ b/docs/release-notes/RelNote350.md @@ -0,0 +1,229 @@ +--- +Title: Release notes v3.5.0 +--- + +# Alfresco Application Development Framework (ADF) version 3.5.0 Release Note + +These release notes provide information about the **3.5.0 release** of the Alfresco Application Development Framework. + +This is the latest **General Available** release of the Application Development Framework, which contains the Angular components to build a Web Application on top of the Alfresco Platform. + +The release can be found on GitHub at [this location](https://github.com/Alfresco/alfresco-ng2-components/releases/tag/3.5.0). + +See the [ADF roadmap](../roadmap.md) for details of features planned for future +versions of ADF. + +## Contents + +- [New package versions](#new-package-versions) +- [Goals for this release](#goals-for-this-release) + - [Improved accessibility](#improved-accessibility) + - [Authentication](#authentication) +- [Localisation](#localisation) +- [References](#references) +- [Issues addressed](#issues-addressed) + +## New package versions + + "@alfresco/adf-content-services" : "3.5.0" + "@alfresco/adf-process-services" : "3.5.0" + "@alfresco/adf-core" : "3.5.0" + "@alfresco/adf-insights" : "3.5.0", + "@alfresco/adf-extensions": "3.5.0" + +## Goals for this release + +This is the fifth minor release of ADF since February 2019 when version 3.0.0 was released. + +The highlights of this release include additional support for [Activiti 7](https://www.activiti.org/) and improved accessibility. + +Please report issues with this release in the [issue tracker](https://github.com/Alfresco/alfresco-ng2-components/issues/new). You can collaborate on this release or share feedback by using the discussion tools on [Gitter](http://gitter.im/Alfresco/alfresco-ng2-components). + +### Improved accessibility + +This release provides fixes for some accessibility issues and improves the overall accessibility of ADF based applications. Refer to the [list of issues](#issues-addressed) for details of the enhancements and fixes. + +### Authentication + +The SSO experience has been enhanced by providing whitelist access to public routes and support for logout requests via the Alfresco Identity Management Service. + +## Localisation + +This release includes: Arabic, Brazilian Portuguese, Czech, Danish, Dutch, Finnish, French, German, Italian, Japanese, Norwegian (Bokmål), Polish, Russian, Simplified Chinese, Spanish and Swedish versions. + +## References + +The following is a brief list of references to help you get started with the new release: + +- [Getting started guides with Alfresco Application Development Framework](https://community.alfresco.com/community/application-development-framework/pages/get-started) +- [Alfresco ADF Documentation on the Builder Network](../README.md) +- [Gitter chat supporting Alfresco ADF](https://gitter.im/Alfresco/alfresco-ng2-components) +- [ADF examples on GitHub](https://github.com/Alfresco/adf-examples) +- [Official GitHub Project - alfresco-ng2-components](https://github.com/Alfresco/alfresco-ng2-components) +- [Official GitHub Project - alfresco-js-api](https://github.com/Alfresco/alfresco-js-api) +- [Official GitHub Project - generator-ng2-alfresco-app](https://github.com/Alfresco/generator-ng2-alfresco-app) + +Please refer to the [official documentation](http://docs.alfresco.com/) for further details and suggestions. + +## Issues addressed + +The following is the list of JIRA issues that were closed for this release: + + Release Notes - Apps Development Framework - Version 3.5.0 + +

Documentation +

+
    +
  • [ADF-4919] - Reviewing the ADF documentation +
  • +
+ +

Feature +

+
    +
  • [ADF-4738] - [Process -Cloud] Move GroupCloudService to adf-core lib +
  • +
  • [ADF-4828] - [ADF] [ProcessListCloudComponent] Add action and context menu. +
  • +
  • [ADF-4829] - [ADF] [TaskListCloudComponent] Add action and context menu. +
  • +
  • [ADF-4854] - Cloud Task List should expose "stickyHeader" attribute +
  • +
  • [ADF-4878] - About Component refactor +
  • +
  • [ADF-4894] - Json datatable column and edit/view dialog +
  • +
+ +

Epic +

+
    +
  • [ADF-4822] - ADF with Identity Service +
  • +
+ +

Story +

+
    +
  • [ADF-4814] - Improve About component to display current version running +
  • +
  • [ADF-4820] - CI/CD - Automatic github Tag on the release process. +
  • +
+ +

Bug +

+
    +
  • [ADF-4764] - The amount field placeholder is misleading after completing a task +
  • +
  • [ADF-4794] - Not able to attach a second file to a form after one has already been attached +
  • +
  • [ADF-4798] - [ADF] [adf-content-node-selector] File icons are not showing properly +
  • +
  • [ADF-4810] - Cannot access public routes, when authentication is OAUTH & silent login enabled +
  • +
  • [ADF-4824] - ADF should logout user when token request fails +
  • +
  • [ADF-4826] - [ADF] Process/Task list first displays "No Process/Task Found" and then loads the Process/Tasks +
  • +
  • [ADF-4830] - DocumentList - sort state is not being announced +
  • +
  • [ADF-4831] - DocumentList - filetype alternative text is not meaningful +
  • +
  • [ADF-4845] - Uploader - Expanded/collapsed state not exposed +
  • +
  • [ADF-4847] - Not able to find any user in Assignee field when creating a task +
  • +
  • [ADF-4848] - Visibility conditions on forms on ADF on APS1 is not working +
  • +
  • [ADF-4862] - Upload dialog - reading order +
  • +
  • [ADF-4865] - Upload Dialog - row actions not accessible by keyboard alone +
  • +
  • [ADF-4868] - [APS-1] adf-content-node-selector seems broken when we upload from External Alfresco content service +
  • +
  • [ADF-4887] - Value of invisible number field is not sent in the payload +
  • +
  • [ADF-4899] - Fix Community Edition Templates in Generator +
  • +
  • [ADF-4905] - ADF starts different process instance than process selected in the dropdown +
  • +
  • [ADF-4906] - [ADF] Not able upload file from ACS when start process with form +
  • +
  • [ADF-4909] - Hide the plugins section of About page when it's empty +
  • +
  • [ADF-4913] - [Regression] Text ellipsis in Gallery View +
  • +
  • [ADF-4914] - Fix update version script for Modeler and Generator +
  • +
  • [ADF-4922] - Fix update project script for Generator and Modeler +
  • +
  • [ADF-4926] - Cloud form attachments are not downloaded correctly +
  • +
+ +

Task +

+
    +
  • [ADF-4799] - [E2E] Automate CardView clear date button +
  • +
  • [ADF-4801] - [E2E] Create automation for CardView dropdown None option +
  • +
  • [ADF-4807] - Automate Form date fields - Incorrect validation for date fields - Only YYYY-MM-DD date display format is working +
  • +
  • [ADF-4809] - [E2E] Automate test for non-editable form in completed task +
  • +
  • [ADF-4811] - Enhance notification service to handle translation params +
  • +
  • [ADF-4813] - Disable control flow in ADF e2e +
  • +
  • [ADF-4821] - CI/CD - automatic release generate GITHUB_TOKEN +
  • +
  • [ADF-4833] - Adf-cli - Expose an npm-publish command +
  • +
  • [ADF-4834] - CI/CD - Publish the alpha from travis instead of bamboo +
  • +
  • [ADF-4839] - DocList - Link does not have a role +
  • +
  • [ADF-4846] - CLONE - Move to ADF the styles from the adf-style-fixes.theme.scss file +
  • +
  • [ADF-4850] - CI/CD Add check bundle on Travis +
  • +
  • [ADF-4858] - adf-process-services is not angular cli compatible +
  • +
  • [ADF-4860] - CI/CD Add a travis cron job to release the beta +
  • +
  • [ADF-4863] - Introduce the npx to simplify the pipeline +
  • +
  • [ADF-4866] - Update Generator i18n script +
  • +
  • [ADF-4867] - Refactor the adf-error-component to allow transclusion on actions +
  • +
  • [ADF-4871] - Translation keys for the ADF 3.5.0 release +
  • +
  • [ADF-4873] - Release note for ADF 3.5.0 +
  • +
  • [ADF-4875] - Vulnerabilities report for ADF 3.5.0 +
  • +
  • [ADF-4877] - Third party libraries licenses for ADF 3.5.0 +
  • +
  • [ADF-4885] - Ready to release for ADF 3.5.0 +
  • +
  • [ADF-4892] - DocumentList - set appropriate sort state for active and inactive column sort +
  • +
  • [ADF-4896] - Unifying NotificationModel and Service between applications +
  • +
+ +

Feature (Task) +

+
    +
  • [ADF-4816] - Refactor and improve About component to display current version in use +
  • +
  • [ADF-4852] - Implement adf-cli update-commit-sha in pipeline +
  • +
+ +Please refer to the [Alfresco issue tracker](https://issues.alfresco.com/jira/projects/ADF/issues/ADF-581?filter=allopenissues) for other known issues in this release. If you have any questions about the release, please contact us using [Gitter](https://gitter.im/Alfresco/alfresco-ng2-components). + +Thanks to the whole application team and the amazing Alfresco community for the hard work. diff --git a/docs/tutorials/creating-the-app-using-yeoman.md b/docs/tutorials/creating-the-app-using-yeoman.md index 7cfa7493ba..03f57c6c96 100644 --- a/docs/tutorials/creating-the-app-using-yeoman.md +++ b/docs/tutorials/creating-the-app-using-yeoman.md @@ -27,7 +27,7 @@ You can select one of the three following blueprints. **Process Services** -This will generate an application for Alfresco Process Services. It mainly contains the following components: Login, App List, Task List, [`Form`](../../lib/process-services/task-list/models/form.model.ts) and Start Process. +This will generate an application for Alfresco Process Services. It mainly contains the following components: Login, App List, Task List, [`Form`](../../lib/process-services/src/lib/task-list/models/form.model.ts) and Start Process. **Content Services** diff --git a/docs/upgrade-guide/upgrade26-30.md b/docs/upgrade-guide/upgrade26-30.md index 1530e99408..8002f70bb8 100644 --- a/docs/upgrade-guide/upgrade26-30.md +++ b/docs/upgrade-guide/upgrade26-30.md @@ -252,7 +252,7 @@ The following classes have been moved from their original libraries to the Core library. You should modify your code to import these classes from `@alfresco/adf-core`. -- [`DownloadZipDialogComponent`](../../lib/core/dialogs/download-zip.dialog.ts) (formerly Content Services) +- [`DownloadZipDialogComponent`](../../lib/core/dialogs/download-zip/download-zip.dialog.ts) (formerly Content Services) - [`NodeDownloadDirective`](../core/directives/node-download.directive.md) (formerly Content Services) - [`CommentsModule`](../../lib/core/comments/comments.module.ts) (formerly Process Services) - [`CommentListComponent`](../core/components/comment-list.component.md) (formerly Process Services) diff --git a/docs/user-guide/extensibility.md b/docs/user-guide/extensibility.md index b7fee1ba74..e55cb5c658 100644 --- a/docs/user-guide/extensibility.md +++ b/docs/user-guide/extensibility.md @@ -9,7 +9,7 @@ This page describes how you can customize ADF forms to your own specification. _Note: it is assumed you are familiar with Alfresco Process Services (powered by Activiti) form definition structure._ -- How components and widgets are rendered on a [`Form`](../../lib/process-services/task-list/models/form.model.ts) +- How components and widgets are rendered on a [`Form`](../../lib/process-services/src/lib/task-list/models/form.model.ts) - Replacing default form widgets with custom components - Replacing custom stencils with custom components @@ -26,7 +26,7 @@ _Note: it is assumed you are familiar with Alfresco Process Services (powered by ## How components and widgets are rendered on a Form -All form field editors (aka widgets) on a [`Form`](../../lib/process-services/task-list/models/form.model.ts) are rendered by means of [`FormFieldComponent`](../core/components/form-field.component.md) +All form field editors (aka widgets) on a [`Form`](../../lib/process-services/src/lib/task-list/models/form.model.ts) are rendered by means of [`FormFieldComponent`](../core/components/form-field.component.md) that takes an instance of a [`FormFieldModel`](../core/models/form-field.model.md): ```html @@ -47,7 +47,7 @@ export interface ComponentTypeResolver { ``` Typically a `ComponentTypeResolver` is a function that takes [`FormFieldModel`](../core/models/form-field.model.md) and returns corresponding component type. -It can be either a predefined component type or a dynamically evaluated based on field properties and metadata. +This can either be a predefined component type or dynamically evaluated based on the field properties and metadata. #### Static component mapping @@ -190,7 +190,7 @@ First let's create a basic stencil and call it `Custom Stencil 01`: _Note the `internal identifier` value as it will become a `field type` value when corresponding form is rendered._ -Next put some simple html layout for [`Form`](../../lib/process-services/task-list/models/form.model.ts)`runtime template` and [`Form`](../../lib/process-services/task-list/models/form.model.ts)`editor template` fields: +Next put some simple html layout for [`Form`](../../lib/process-services/src/lib/task-list/models/form.model.ts)`runtime template` and [`Form`](../../lib/process-services/src/lib/task-list/models/form.model.ts)`editor template` fields: ```html
Custom activiti stencil
diff --git a/docs/user-guide/localization.md b/docs/user-guide/localization.md index 31e1c44aa1..a5ecb1391b 100644 --- a/docs/user-guide/localization.md +++ b/docs/user-guide/localization.md @@ -4,17 +4,9 @@ Localization is the process of making something local in character or restrictin Dates are not written the same around the world. That is where localizing a date comes in handy. ADF lets you dynamically change the way dates are written in your app so that they can adapt to to a specific region. -## Contents - -- [Setting up the configuration in your app](#setting-up-the-configuration-in-your-app) -- [Adding language support](#adding-language-support) -- [Using the localized date pipe](#using-the-localized-date-pipe) -- [Using the time ago pipe](#using-the-time-ago-pipe) -- [Using the decimal number pipe](#using-the-decimal-number-pipe) - ## Setting up the configuration in your app -You can overwrite the default values of this pipe by adding these properties to your ```app.config.json```: +You can overwrite the default values of this pipe by adding these properties to your `app.config.json`: ```json "dateValues": { @@ -30,8 +22,7 @@ You can overwrite the default values of this pipe by adding these properties to | defaultDateTimeFormat | string | The format to apply to date-time values | | defaultLocale | string | The locale id to apply | - -This configuration overwrites the values in the localized date pipe as well as other components to have more consistency across your app. However, you can still overwrite these values any time by using the pipe in your code. +This configuration overwrites the values in the [localized date pipe](../core/pipes/localized-date.pipe.md) as well as other components to have more consistency across your app. However, you can still overwrite these values any time by using the pipe in your code. ## Adding language support @@ -81,6 +72,7 @@ Localizes the punctuation marks of a given number. {{ number | adfDecimalNumber }} + `Input:` 1999.12 `Output (english locale):` 1,999.12 `Output (italian locale):` 1.999,12 diff --git a/docs/user-guide/stencils.md b/docs/user-guide/stencils.md index 8574df7608..9cf2198a37 100644 --- a/docs/user-guide/stencils.md +++ b/docs/user-guide/stencils.md @@ -1,6 +1,6 @@ # Form Stencils -[`Form`](../../lib/process-services/task-list/models/form.model.ts) component provides basic support for custom stencils created with Activiti stencil editor. +[`Form`](../../lib/process-services/src/lib/task-list/models/form.model.ts) component provides basic support for custom stencils created with Activiti stencil editor. ## Contents @@ -67,7 +67,7 @@ This should be a valid Angular component template that you want to render in ` @@ -159,4 +159,4 @@ Angular Component Created by: Denys ``` -ADF [`Form`](../../lib/process-services/task-list/models/form.model.ts) component will automatically assemble and compile a valid Angular component on the fly. +ADF [`Form`](../../lib/process-services/src/lib/task-list/models/form.model.ts) component will automatically assemble and compile a valid Angular component on the fly. diff --git a/docs/versionIndex.md b/docs/versionIndex.md index ff41e6b474..3f7d1ec42e 100644 --- a/docs/versionIndex.md +++ b/docs/versionIndex.md @@ -12,6 +12,7 @@ backend services have been tested with each released version of ADF. ## Versions +- [v3.5.0](#v350) - [v3.4.0](#v340) - [v3.3.0](#v330) - [v3.2.1](#v321) @@ -26,6 +27,19 @@ backend services have been tested with each released version of ADF. - [v2.1.0](#v210) - [v2.0.0](#v200) +## v3.5.0 + +**Release:** 2019-30-09
+ + + +- [About application component](core/components/about-application.component.md) +- [About github link component](core/components/about-github-link.component.md) +- [About product version component](core/components/about-product-version.component.md) +- [Edit json dialog](core/dialogs/edit-json.dialog.md) + + + ## v3.4.0 **Release:** 2019-08-09
@@ -33,6 +47,9 @@ backend services have been tested with each released version of ADF. - [Decimal number pipe](core/pipes/decimal-number.pipe.md) +- [Identity group service](core/services/identity-group.service.md) +- [Local preference cloud service](process-services-cloud/services/local-preference-cloud.service.md) +- [User preference cloud service](process-services-cloud/services/user-preference-cloud.service.md) @@ -103,6 +120,7 @@ backend services have been tested with each released version of ADF. - [Icon component](core/components/icon.component.md) - [Identity user service](core/services/identity-user.service.md) - [Jwt helper service](core/services/jwt-helper.service.md) +- [Library dialog](content-services/dialogs/library.dialog.md) - [People cloud component](process-services-cloud/components/people-cloud.component.md) - [Process filter cloud service](process-services-cloud/services/process-filter-cloud.service.md) - [Process filters cloud component](process-services-cloud/components/process-filters-cloud.component.md) @@ -176,7 +194,6 @@ backend services have been tested with each released version of ADF. -- [About component](core/components/about.component.md) - [Add permission dialog component](content-services/components/add-permission-dialog.component.md) - [Add permission panel component](content-services/components/add-permission-panel.component.md) - [Add permission component](content-services/components/add-permission.component.md) @@ -210,6 +227,7 @@ backend services have been tested with each released version of ADF. - [Comment content service](core/services/comment-content.service.md) +- [Confirm dialog](content-services/dialogs/confirm.dialog.md) - [Content node share directive](content-services/directives/content-node-share.directive.md) - [Custom resources service](content-services/services/custom-resources.service.md) - [Inherited button directive](content-services/directives/inherited-button.directive.md) @@ -403,6 +421,7 @@ backend services have been tested with each released version of ADF. - [Text mask component](core/components/text-mask.component.md) - [Thumbnail service](core/services/thumbnail.service.md) - [Time ago pipe](core/pipes/time-ago.pipe.md) +- [Toggle icon directive](content-services/directives/toggle-icon.directive.md) - [Toolbar divider component](core/components/toolbar-divider.component.md) - [Toolbar title component](core/components/toolbar-title.component.md) - [Toolbar component](core/components/toolbar.component.md) diff --git a/docs/vulnerability/README.md b/docs/vulnerability/README.md index 8d7a4c70af..e331b0ed28 100644 --- a/docs/vulnerability/README.md +++ b/docs/vulnerability/README.md @@ -7,5 +7,6 @@ Github only: true The pages linked below contain the audit for all third party dependencies of ADF. +- [ADF v3.5.0](audit-info-3.5.0.md) - [ADF v3.4.0](audit-info-3.4.0.md) - [ADF v3.3.0](audit-info-3.3.0.md) diff --git a/docs/vulnerability/audit-info-3.5.0.md b/docs/vulnerability/audit-info-3.5.0.md new file mode 100644 index 0000000000..695caa3131 --- /dev/null +++ b/docs/vulnerability/audit-info-3.5.0.md @@ -0,0 +1,23 @@ +--- +Title: Audit info, Alfresco Angular components 3.5.0 +--- + +# Audit information for Alfresco Angular components 3.5.0 + +This page lists the npm audit of the project in the version 3.5.0 + +## Risks + +- Critical risk dependencies 0 +- High risk dependencies 0 +- Moderate risk dependencies 0 +- Low risk dependencies 0 + +Dependencies analyzed 62221 + +## Libraries + + +| Severity | Vulnerable versions | Module | +| --- | --- | --- | + diff --git a/e2e/actions/ACS/node.actions.ts b/e2e/actions/ACS/node.actions.ts index 37291abc24..cf6d22ea4a 100644 --- a/e2e/actions/ACS/node.actions.ts +++ b/e2e/actions/ACS/node.actions.ts @@ -20,8 +20,8 @@ export class NodeActions { lockNode(alfrescoJsApi, nodeId: string, allowOwner?: string) { return alfrescoJsApi.nodes.lockNode(nodeId, { - 'type': allowOwner ? 'ALLOW_OWNER_CHANGES' : 'FULL', - 'lifetime': 'PERSISTENT' + type: allowOwner ? 'ALLOW_OWNER_CHANGES' : 'FULL', + lifetime: 'PERSISTENT' }); } diff --git a/lib/process-services/public-api.ts b/e2e/actions/APS/formModel.actions.ts similarity index 60% rename from lib/process-services/public-api.ts rename to e2e/actions/APS/formModel.actions.ts index afcc926ddc..f5fea2f2d7 100644 --- a/lib/process-services/public-api.ts +++ b/e2e/actions/APS/formModel.actions.ts @@ -15,4 +15,19 @@ * limitations under the License. */ -export * from './index'; +import { FormRepresentation } from '@alfresco/js-api'; + +export class FormModelActions { + + async getFormByName(alfrescoJsApi: any, name: String): Promise { + + const forms = await alfrescoJsApi.activiti.editorApi.getForms(); + + const form = forms.data.find((currentForm) => { + return currentForm.name === name; + }); + + return form; + } + +} diff --git a/e2e/actions/drop.actions.ts b/e2e/actions/drop.actions.ts index ceb0a43f2f..94958ada1a 100644 --- a/e2e/actions/drop.actions.ts +++ b/e2e/actions/drop.actions.ts @@ -20,11 +20,11 @@ import path = require('path'); import { browser } from 'protractor'; import remote = require('selenium-webdriver/remote'); -const JS_BIND_INPUT = function (target) { +const JS_BIND_INPUT = function(target) { const input = document.createElement('input'); input.type = 'file'; input.style.display = 'none'; - input.addEventListener('change', function (event) { + input.addEventListener('change', function() { target.scrollIntoView(true); const rect = target.getBoundingClientRect(); @@ -32,7 +32,7 @@ const JS_BIND_INPUT = function (target) { const y = rect.top + (rect.height >> 1); const data = { files: input.files }; - ['dragenter', 'dragover', 'drop'].forEach(function (name) { + ['dragenter', 'dragover', 'drop'].forEach(function(name) { const mouseEvent: any = document.createEvent('MouseEvent'); mouseEvent.initMouseEvent(name, !0, !0, window, 0, 0, 0, x, y, !1, !1, !1, !1, 0, null); mouseEvent.dataTransfer = data; @@ -46,13 +46,13 @@ const JS_BIND_INPUT = function (target) { return input; }; -const JS_BIND_INPUT_FOLDER = function (target) { +const JS_BIND_INPUT_FOLDER = function(target) { const input: any = document.createElement('input'); input.type = 'file'; input.style.display = 'none'; input.multiple = true; input.webkitdirectory = true; - input.addEventListener('change', function (event) { + input.addEventListener('change', function() { target.scrollIntoView(true); const rect = target.getBoundingClientRect(); @@ -60,7 +60,7 @@ const JS_BIND_INPUT_FOLDER = function (target) { const y = rect.top + (rect.height >> 1); const data = { files: input.files }; - ['dragenter', 'dragover', 'drop'].forEach(function (name) { + ['dragenter', 'dragover', 'drop'].forEach(function(name) { const mouseEvent: any = document.createEvent('MouseEvent'); mouseEvent.initMouseEvent(name, !0, !0, window, 0, 0, 0, x, y, !1, !1, !1, !1, 0, null); mouseEvent.dataTransfer = data; @@ -76,31 +76,25 @@ const JS_BIND_INPUT_FOLDER = function (target) { export class DropActions { - dropFile(dropArea, filePath) { + async dropFile(dropArea, filePath) { browser.setFileDetector(new remote.FileDetector()); const absolutePath = path.resolve(path.join(browser.params.testConfig.main.rootPath, filePath)); fs.accessSync(absolutePath, fs.constants.F_OK); - return dropArea.getWebElement().then((element) => { - browser.executeScript(JS_BIND_INPUT, element).then((input: any) => { - input.sendKeys(absolutePath); - - }); - }); + const elem = await dropArea.getWebElement(); + const input: any = await browser.executeScript(JS_BIND_INPUT, elem); + return await input.sendKeys(absolutePath); } - dropFolder(dropArea, folderPath) { + async dropFolder(dropArea, folderPath) { browser.setFileDetector(new remote.FileDetector()); const absolutePath = path.resolve(path.join(browser.params.testConfig.main.rootPath, folderPath)); fs.accessSync(absolutePath, fs.constants.F_OK); - return dropArea.getWebElement().then((element) => { - browser.executeScript(JS_BIND_INPUT_FOLDER, element).then((input: any) => { - input.sendKeys(absolutePath); - - }); - }); + const elem = await dropArea.getWebElement(); + const input: any = await browser.executeScript(JS_BIND_INPUT_FOLDER, elem); + return await input.sendKeys(absolutePath); } } diff --git a/e2e/actions/users.actions.ts b/e2e/actions/users.actions.ts index 85cd0052f8..b53a257638 100644 --- a/e2e/actions/users.actions.ts +++ b/e2e/actions/users.actions.ts @@ -35,7 +35,7 @@ export class UsersActions { } async createApsUser(alfrescoJsApi, tenantId) { - const user = new User({ tenantId: tenantId }); + const user = new User({ tenantId }); await alfrescoJsApi.activiti.adminUsersApi.createNewUser(user); @@ -54,7 +54,7 @@ export class UsersActions { } async createApsUserWithName(alfrescoJsApi, tenantId, email, firstName, lastName) { - const user = new User({ tenantId: tenantId , email: email, firstName: firstName, lastName: lastName}); + const user = new User({ tenantId , email, firstName, lastName}); await alfrescoJsApi.activiti.adminUsersApi.createNewUser(user); diff --git a/e2e/content-services/comments/comment-component.e2e.ts b/e2e/content-services/comments/comment-component.e2e.ts index fa281e77da..a39b3b8b24 100644 --- a/e2e/content-services/comments/comment-component.e2e.ts +++ b/e2e/content-services/comments/comment-component.e2e.ts @@ -29,18 +29,18 @@ import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; describe('Comment Component', () => { - const loginPage = new LoginPage(); - const contentServicesPage = new ContentServicesPage(); - const viewerPage = new ViewerPage(); - const commentsPage = new CommentsPage(); + const loginPage: LoginPage = new LoginPage(); + const contentServicesPage: ContentServicesPage = new ContentServicesPage(); + const viewerPage: ViewerPage = new ViewerPage(); + const commentsPage: CommentsPage = new CommentsPage(); const navigationBarPage = new NavigationBarPage(); - const acsUser = new AcsUserModel(); + const acsUser: AcsUserModel = new AcsUserModel(); let userFullName, nodeId; const pngFileModel = new FileModel({ - 'name': resources.Files.ADF_DOCUMENTS.PNG.file_name, - 'location': resources.Files.ADF_DOCUMENTS.PNG.file_location + name: resources.Files.ADF_DOCUMENTS.PNG.file_name, + location: resources.Files.ADF_DOCUMENTS.PNG.file_location }); this.alfrescoJsApi = new AlfrescoApi({ provider: 'ECM', @@ -60,18 +60,17 @@ describe('Comment Component', () => { test: 'Test' }; - beforeAll(async (done) => { + beforeAll(async () => { await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); await this.alfrescoJsApi.core.peopleApi.addPerson(acsUser); - done(); }); afterAll(async () => { await navigationBarPage.clickLogoutButton(); }); - beforeEach(async (done) => { + beforeEach(async () => { await this.alfrescoJsApi.login(acsUser.id, acsUser.password); const pngUploadedFile = await uploadActions.uploadFile(pngFileModel.location, pngFileModel.name, '-my-'); @@ -82,96 +81,95 @@ describe('Comment Component', () => { await loginPage.loginToContentServicesUsingUserModel(acsUser); - navigationBarPage.clickContentServicesButton(); - contentServicesPage.waitForTableBody(); + await navigationBarPage.clickContentServicesButton(); + await contentServicesPage.waitForTableBody(); - done(); }); - afterEach(async (done) => { + afterEach(async () => { await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); await uploadActions.deleteFileOrFolder(nodeId); - done(); + }); it('[C276947] Should be able to add a comment on ACS and view on ADF', async () => { await this.alfrescoJsApi.core.commentsApi.addComment(nodeId, { content: comments.test }); - viewerPage.viewFile(pngFileModel.name); - viewerPage.checkImgViewerIsDisplayed(); - viewerPage.clickInfoButton(); - viewerPage.checkInfoSideBarIsDisplayed(); + await viewerPage.viewFile(pngFileModel.name); + await viewerPage.checkImgViewerIsDisplayed(); + await viewerPage.clickInfoButton(); + await viewerPage.checkInfoSideBarIsDisplayed(); - commentsPage.checkCommentsTabIsSelected(); - commentsPage.checkCommentInputIsDisplayed(); + await commentsPage.checkCommentsTabIsSelected(); + await commentsPage.checkCommentInputIsDisplayed(); - expect(commentsPage.getTotalNumberOfComments()).toEqual('Comments (1)'); - expect(commentsPage.getMessage(0)).toEqual(comments.test); - expect(commentsPage.getUserName(0)).toEqual(userFullName); - expect(commentsPage.getTime(0)).toMatch(/(ago|few)/); + await expect(await commentsPage.getTotalNumberOfComments()).toEqual('Comments (1)'); + await expect(await commentsPage.getMessage(0)).toEqual(comments.test); + await expect(await commentsPage.getUserName(0)).toEqual(userFullName); + await expect(await commentsPage.getTime(0)).toMatch(/(ago|few)/); }); - it('[C276948] Should be able to add a comment on a file', () => { - viewerPage.viewFile(pngFileModel.name); - viewerPage.checkImgViewerIsDisplayed(); - viewerPage.clickInfoButton(); - viewerPage.checkInfoSideBarIsDisplayed(); - viewerPage.clickOnCommentsTab(); + it('[C276948] Should be able to add a comment on a file', async () => { + await viewerPage.viewFile(pngFileModel.name); + await viewerPage.checkImgViewerIsDisplayed(); + await viewerPage.clickInfoButton(); + await viewerPage.checkInfoSideBarIsDisplayed(); + await viewerPage.clickOnCommentsTab(); - commentsPage.addComment(comments.first); - commentsPage.checkUserIconIsDisplayed(0); + await commentsPage.addComment(comments.first); + await commentsPage.checkUserIconIsDisplayed(); - expect(commentsPage.getTotalNumberOfComments()).toEqual('Comments (1)'); - expect(commentsPage.getMessage(0)).toEqual(comments.first); - expect(commentsPage.getUserName(0)).toEqual(userFullName); - expect(commentsPage.getTime(0)).toMatch(/(ago|few)/); + await expect(await commentsPage.getTotalNumberOfComments()).toEqual('Comments (1)'); + await expect(await commentsPage.getMessage(0)).toEqual(comments.first); + await expect(await commentsPage.getUserName(0)).toEqual(userFullName); + await expect(await commentsPage.getTime(0)).toMatch(/(ago|few)/); }); - it('[C280021] Should be able to add a multiline comment on a file', () => { - viewerPage.viewFile(pngFileModel.name); - viewerPage.checkImgViewerIsDisplayed(); - viewerPage.clickInfoButton(); - viewerPage.checkInfoSideBarIsDisplayed(); - viewerPage.clickOnCommentsTab(); + it('[C280021] Should be able to add a multiline comment on a file', async () => { + await viewerPage.viewFile(pngFileModel.name); + await viewerPage.checkImgViewerIsDisplayed(); + await viewerPage.clickInfoButton(); + await viewerPage.checkInfoSideBarIsDisplayed(); + await viewerPage.clickOnCommentsTab(); - commentsPage.addComment(comments.multiline); - commentsPage.checkUserIconIsDisplayed(0); + await commentsPage.addComment(comments.multiline); + await commentsPage.checkUserIconIsDisplayed(); - expect(commentsPage.getTotalNumberOfComments()).toEqual('Comments (1)'); - expect(commentsPage.getMessage(0)).toEqual(comments.multiline); - expect(commentsPage.getUserName(0)).toEqual(userFullName); - expect(commentsPage.getTime(0)).toMatch(/(ago|few)/); + await expect(await commentsPage.getTotalNumberOfComments()).toEqual('Comments (1)'); + await expect(await commentsPage.getMessage(0)).toEqual(comments.multiline); + await expect(await commentsPage.getUserName(0)).toEqual(userFullName); + await expect(await commentsPage.getTime(0)).toMatch(/(ago|few)/); - commentsPage.addComment(comments.second); - commentsPage.checkUserIconIsDisplayed(0); + await commentsPage.addComment(comments.second); + await commentsPage.checkUserIconIsDisplayed(); - expect(commentsPage.getTotalNumberOfComments()).toEqual('Comments (2)'); - expect(commentsPage.getMessage(0)).toEqual(comments.second); - expect(commentsPage.getUserName(0)).toEqual(userFullName); - expect(commentsPage.getTime(0)).toMatch(/(ago|few)/); + await expect(await commentsPage.getTotalNumberOfComments()).toEqual('Comments (2)'); + await expect(await commentsPage.getMessage(0)).toEqual(comments.second); + await expect(await commentsPage.getUserName(0)).toEqual(userFullName); + await expect(await commentsPage.getTime(0)).toMatch(/(ago|few)/); }); - it('[C280022] Should not be able to add an HTML or other code input into the comment input filed', () => { - viewerPage.viewFile(pngFileModel.name); - viewerPage.checkImgViewerIsDisplayed(); - viewerPage.clickInfoButton(); - viewerPage.checkInfoSideBarIsDisplayed(); - viewerPage.clickOnCommentsTab(); + it('[C280022] Should not be able to add an HTML or other code input into the comment input filed', async () => { + await viewerPage.viewFile(pngFileModel.name); + await viewerPage.checkImgViewerIsDisplayed(); + await viewerPage.clickInfoButton(); + await viewerPage.checkInfoSideBarIsDisplayed(); + await viewerPage.clickOnCommentsTab(); - commentsPage.addComment(comments.codeType); - commentsPage.checkUserIconIsDisplayed(0); + await commentsPage.addComment(comments.codeType); + await commentsPage.checkUserIconIsDisplayed(); - expect(commentsPage.getTotalNumberOfComments()).toEqual('Comments (1)'); - expect(commentsPage.getMessage(0)).toEqual('First name: Last name:'); - expect(commentsPage.getUserName(0)).toEqual(userFullName); - expect(commentsPage.getTime(0)).toMatch(/(ago|few)/); + await expect(await commentsPage.getTotalNumberOfComments()).toEqual('Comments (1)'); + await expect(await commentsPage.getMessage(0)).toEqual('First name: Last name:'); + await expect(await commentsPage.getUserName(0)).toEqual(userFullName); + await expect(await commentsPage.getTime(0)).toMatch(/(ago|few)/); }); describe('Consumer Permissions', () => { let site, pngUploadedFile; - beforeAll(async (done) => { + beforeAll(async () => { await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); site = await this.alfrescoJsApi.core.sitesApi.createSite({ @@ -186,31 +184,29 @@ describe('Comment Component', () => { pngUploadedFile = await uploadActions.uploadFile(pngFileModel.location, pngFileModel.name, site.entry.guid); - loginPage.loginToContentServicesUsingUserModel(acsUser); + await loginPage.loginToContentServicesUsingUserModel(acsUser); - navigationBarPage.clickContentServicesButton(); + await navigationBarPage.clickContentServicesButton(); - done(); }); - afterAll((done) => { - uploadActions.deleteFileOrFolder(pngUploadedFile.entry.id); + afterAll(async () => { + await uploadActions.deleteFileOrFolder(pngUploadedFile.entry.id); - done(); }); - it('[C290147] Should NOT be able to add comments to a site file with Consumer permissions', () => { - navigationBarPage.goToSite(site); - contentServicesPage.checkAcsContainer(); + it('[C290147] Should NOT be able to add comments to a site file with Consumer permissions', async () => { + await navigationBarPage.goToSite(site); + await contentServicesPage.checkAcsContainer(); - viewerPage.viewFile(pngUploadedFile.entry.name); - viewerPage.checkImgViewerIsDisplayed(); - viewerPage.checkInfoButtonIsDisplayed(); - viewerPage.clickInfoButton(); - viewerPage.checkInfoSideBarIsDisplayed(); + await viewerPage.viewFile(pngUploadedFile.entry.name); + await viewerPage.checkImgViewerIsDisplayed(); + await viewerPage.checkInfoButtonIsDisplayed(); + await viewerPage.clickInfoButton(); + await viewerPage.checkInfoSideBarIsDisplayed(); - commentsPage.checkCommentsTabIsSelected(); - commentsPage.checkCommentInputIsNotDisplayed(); + await commentsPage.checkCommentsTabIsSelected(); + await commentsPage.checkCommentInputIsNotDisplayed(); }); }); }); diff --git a/e2e/content-services/directives/create-folder-directive.e2e.ts b/e2e/content-services/directives/create-folder-directive.e2e.ts index ad0b249651..6871af3eb9 100644 --- a/e2e/content-services/directives/create-folder-directive.e2e.ts +++ b/e2e/content-services/directives/create-folder-directive.e2e.ts @@ -24,7 +24,7 @@ import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; import { browser, Key } from 'protractor'; import { NavigationBarPage } from '../../pages/adf/navigationBarPage'; -describe('Create folder directive', function () { +describe('Create folder directive', () => { const loginPage = new LoginPage(); const contentServicesPage = new ContentServicesPage(); @@ -34,7 +34,7 @@ describe('Create folder directive', function () { const acsUser = new AcsUserModel(); const navigationBarPage = new NavigationBarPage(); - beforeAll(async (done) => { + beforeAll(async () => { this.alfrescoJsApi = new AlfrescoApi({ provider: 'ECM', hostEcm: browser.params.testConfig.adf_acs.host @@ -46,106 +46,105 @@ describe('Create folder directive', function () { await loginPage.loginToContentServicesUsingUserModel(acsUser); - contentServicesPage.goToDocumentList(); + await contentServicesPage.goToDocumentList(); - done(); }); afterAll(async () => { await navigationBarPage.clickLogoutButton(); }); - beforeEach(async (done) => { + beforeEach(async () => { await browser.actions().sendKeys(Key.ESCAPE).perform(); - done(); + }); - afterEach(async (done) => { + afterEach(async () => { await browser.actions().sendKeys(Key.ESCAPE).perform(); - done(); + }); - it('[C260154] Should not create the folder if cancel button is clicked', () => { + it('[C260154] Should not create the folder if cancel button is clicked', async () => { const folderName = 'cancelFolder'; - contentServicesPage.clickOnCreateNewFolder(); + await contentServicesPage.clickOnCreateNewFolder(); - createFolderDialog.addFolderName(folderName); - createFolderDialog.clickOnCancelButton(); + await createFolderDialog.addFolderName(folderName); + await createFolderDialog.clickOnCancelButton(); - contentServicesPage.checkContentIsNotDisplayed(folderName); + await contentServicesPage.checkContentIsNotDisplayed(folderName); }); - it('[C260155] Should enable the Create button only when a folder name is present', () => { + it('[C260155] Should enable the Create button only when a folder name is present', async () => { const folderName = 'NotEnableFolder'; - contentServicesPage.clickOnCreateNewFolder(); + await contentServicesPage.clickOnCreateNewFolder(); - createFolderDialog.checkCreateUpdateBtnIsDisabled(); + await createFolderDialog.checkCreateUpdateBtnIsDisabled(); - createFolderDialog.addFolderName(folderName); + await createFolderDialog.addFolderName(folderName); - createFolderDialog.checkCreateUpdateBtnIsEnabled(); + await createFolderDialog.checkCreateUpdateBtnIsEnabled(); }); - it('[C260156] Should not be possible create two folder with the same name', () => { + it('[C260156] Should not be possible create two folder with the same name', async () => { const folderName = 'duplicate'; - contentServicesPage.createNewFolder(folderName); + await contentServicesPage.createNewFolder(folderName); - contentServicesPage.checkContentIsDisplayed(folderName); + await contentServicesPage.checkContentIsDisplayed(folderName); - contentServicesPage.createNewFolder(folderName); + await contentServicesPage.createNewFolder(folderName); - notificationHistoryPage.checkNotifyContains('There\'s already a folder with this name. Try a different name.'); + await notificationHistoryPage.checkNotifyContains('There\'s already a folder with this name. Try a different name.'); }); - it('[C260157] Should be possible create a folder under a folder with the same name', () => { + it('[C260157] Should be possible create a folder under a folder with the same name', async () => { const folderName = 'sameSubFolder'; - contentServicesPage.createNewFolder(folderName); - contentServicesPage.checkContentIsDisplayed(folderName); + await contentServicesPage.createNewFolder(folderName); + await contentServicesPage.checkContentIsDisplayed(folderName); - contentServicesPage.doubleClickRow(folderName); + await contentServicesPage.doubleClickRow(folderName); - contentServicesPage.createNewFolder(folderName); - contentServicesPage.checkContentIsDisplayed(folderName); + await contentServicesPage.createNewFolder(folderName); + await contentServicesPage.checkContentIsDisplayed(folderName); }); - it('[C260158] Should be possible add a folder description when create a new folder', () => { + it('[C260158] Should be possible add a folder description when create a new folder', async () => { const folderName = 'folderDescription'; const description = 'this is the description'; - contentServicesPage.clickOnCreateNewFolder(); + await contentServicesPage.clickOnCreateNewFolder(); - createFolderDialog.addFolderName(folderName); - createFolderDialog.addFolderDescription(description); + await createFolderDialog.addFolderName(folderName); + await createFolderDialog.addFolderDescription(description); - createFolderDialog.clickOnCreateUpdateButton(); + await createFolderDialog.clickOnCreateUpdateButton(); - contentServicesPage.checkContentIsDisplayed(folderName); + await contentServicesPage.checkContentIsDisplayed(folderName); - contentServicesPage.metadataContent(folderName); + await contentServicesPage.metadataContent(folderName); - expect(metadataViewPage.getPropertyText('properties.cm:description')).toEqual('this is the description'); + await expect(await metadataViewPage.getPropertyText('properties.cm:description')).toEqual('this is the description'); }); - it('[C260159] Should not be possible create a folder with banned character', () => { - browser.refresh(); - contentServicesPage.clickOnCreateNewFolder(); + it('[C260159] Should not be possible create a folder with banned character', async () => { + await browser.refresh(); + await contentServicesPage.clickOnCreateNewFolder(); - createFolderDialog.addFolderName('*'); - createFolderDialog.checkCreateUpdateBtnIsDisabled(); - createFolderDialog.addFolderName('<'); - createFolderDialog.checkCreateUpdateBtnIsDisabled(); - createFolderDialog.addFolderName('>'); - createFolderDialog.checkCreateUpdateBtnIsDisabled(); - createFolderDialog.addFolderName('\\'); - createFolderDialog.checkCreateUpdateBtnIsDisabled(); - createFolderDialog.addFolderName('/'); - createFolderDialog.checkCreateUpdateBtnIsDisabled(); - createFolderDialog.addFolderName('?'); - createFolderDialog.checkCreateUpdateBtnIsDisabled(); - createFolderDialog.addFolderName(':'); - createFolderDialog.checkCreateUpdateBtnIsDisabled(); - createFolderDialog.addFolderName('|'); - createFolderDialog.checkCreateUpdateBtnIsDisabled(); + await createFolderDialog.addFolderName('*'); + await createFolderDialog.checkCreateUpdateBtnIsDisabled(); + await createFolderDialog.addFolderName('<'); + await createFolderDialog.checkCreateUpdateBtnIsDisabled(); + await createFolderDialog.addFolderName('>'); + await createFolderDialog.checkCreateUpdateBtnIsDisabled(); + await createFolderDialog.addFolderName('\\'); + await createFolderDialog.checkCreateUpdateBtnIsDisabled(); + await createFolderDialog.addFolderName('/'); + await createFolderDialog.checkCreateUpdateBtnIsDisabled(); + await createFolderDialog.addFolderName('?'); + await createFolderDialog.checkCreateUpdateBtnIsDisabled(); + await createFolderDialog.addFolderName(':'); + await createFolderDialog.checkCreateUpdateBtnIsDisabled(); + await createFolderDialog.addFolderName('|'); + await createFolderDialog.checkCreateUpdateBtnIsDisabled(); }); }); diff --git a/e2e/content-services/directives/create-library-directive.e2e.ts b/e2e/content-services/directives/create-library-directive.e2e.ts index 200e892bb1..de174e3153 100644 --- a/e2e/content-services/directives/create-library-directive.e2e.ts +++ b/e2e/content-services/directives/create-library-directive.e2e.ts @@ -26,7 +26,7 @@ import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; import { StringUtil } from '@alfresco/adf-testing'; import { NavigationBarPage } from '../../pages/adf/navigationBarPage'; -describe('Create library directive', function () { +describe('Create library directive', () => { const loginPage = new LoginPage(); const contentServicesPage = new ContentServicesPage(); @@ -44,7 +44,7 @@ describe('Create library directive', function () { const acsUser = new AcsUserModel(); - beforeAll(async (done) => { + beforeAll(async () => { this.alfrescoJsApi = new AlfrescoApi({ provider: 'ECM', hostEcm: browser.params.testConfig.adf_acs.host @@ -57,222 +57,221 @@ describe('Create library directive', function () { await loginPage.loginToContentServicesUsingUserModel(acsUser); createSite = await this.alfrescoJsApi.core.sitesApi.createSite({ - 'title': StringUtil.generateRandomString(20).toLowerCase(), - 'visibility': 'PUBLIC' + title: StringUtil.generateRandomString(20).toLowerCase(), + visibility: 'PUBLIC' }); - done(); }); afterAll(async () => { await navigationBarPage.clickLogoutButton(); }); - beforeEach((done) => { - contentServicesPage.goToDocumentList(); - contentServicesPage.openCreateLibraryDialog(); - done(); + beforeEach(async () => { + await contentServicesPage.goToDocumentList(); + await contentServicesPage.openCreateLibraryDialog(); + }); - afterEach(() => { - BrowserActions.closeMenuAndDialogs(); + afterEach(async () => { + await BrowserActions.closeMenuAndDialogs(); }); - it('[C290158] Should display the Create Library defaults', () => { - expect(createLibraryDialog.getTitle()).toMatch('Create Library'); - expect(createLibraryDialog.isNameDisplayed()).toBe(true, 'Name input field is not displayed'); - expect(createLibraryDialog.isLibraryIdDisplayed()).toBe(true, 'Library ID field is not displayed'); - expect(createLibraryDialog.isDescriptionDisplayed()).toBe(true, 'Library description is not displayed'); - expect(createLibraryDialog.isPublicDisplayed()).toBe(true, 'Public radio button is not displayed'); - expect(createLibraryDialog.isPrivateDisplayed()).toBe(true, 'Private radio button is not displayed'); - expect(createLibraryDialog.isModeratedDisplayed()).toBe(true, 'Moderated radio button is not displayed'); - expect(createLibraryDialog.isCreateEnabled()).toBe(false, 'Create button is not disabled'); - expect(createLibraryDialog.isCancelEnabled()).toBe(true, 'Cancel button is disabled'); - expect(createLibraryDialog.getSelectedRadio()).toMatch(visibility.public, 'The default visibility is not public'); + it('[C290158] Should display the Create Library defaults', async () => { + await expect(await createLibraryDialog.getTitle()).toMatch('Create Library'); + await expect(await createLibraryDialog.isNameDisplayed()).toBe(true, 'Name input field is not displayed'); + await expect(await createLibraryDialog.isLibraryIdDisplayed()).toBe(true, 'Library ID field is not displayed'); + await expect(await createLibraryDialog.isDescriptionDisplayed()).toBe(true, 'Library description is not displayed'); + await expect(await createLibraryDialog.isPublicDisplayed()).toBe(true, 'Public radio button is not displayed'); + await expect(await createLibraryDialog.isPrivateDisplayed()).toBe(true, 'Private radio button is not displayed'); + await expect(await createLibraryDialog.isModeratedDisplayed()).toBe(true, 'Moderated radio button is not displayed'); + await expect(await createLibraryDialog.isCreateEnabled()).toBe(false, 'Create button is not disabled'); + await expect(await createLibraryDialog.isCancelEnabled()).toBe(true, 'Cancel button is disabled'); + await expect(await createLibraryDialog.getSelectedRadio()).toMatch(visibility.public, 'The default visibility is not public'); }); - it('[C290159] Should close the dialog when clicking Cancel button', () => { + it('[C290159] Should close the dialog when clicking Cancel button', async () => { const libraryName = 'cancelLibrary'; - createLibraryDialog.typeLibraryName(libraryName); + await createLibraryDialog.typeLibraryName(libraryName); - createLibraryDialog.clickCancel(); + await createLibraryDialog.clickCancel(); - createLibraryDialog.waitForDialogToClose(); + await createLibraryDialog.waitForDialogToClose(); }); - it('[C290160] Should create a public library', () => { + it('[C290160] Should create a public library', async () => { const libraryName = StringUtil.generateRandomString(); const libraryDescription = StringUtil.generateRandomString(); - createLibraryDialog.typeLibraryName(libraryName); - createLibraryDialog.typeLibraryDescription(libraryDescription); - createLibraryDialog.selectPublic(); + await createLibraryDialog.typeLibraryName(libraryName); + await createLibraryDialog.typeLibraryDescription(libraryDescription); + await createLibraryDialog.selectPublic(); - expect(createLibraryDialog.getSelectedRadio()).toMatch(visibility.public, 'The visibility is not public'); + await expect(await createLibraryDialog.getSelectedRadio()).toMatch(visibility.public, 'The visibility is not public'); - createLibraryDialog.clickCreate(); - createLibraryDialog.waitForDialogToClose(); + await createLibraryDialog.clickCreate(); + await createLibraryDialog.waitForDialogToClose(); - expect(createLibraryDialog.isDialogOpen()).not.toBe(true, 'The Create Library dialog is not closed'); + await expect(await createLibraryDialog.isDialogOpen()).not.toBe(true, 'The Create Library dialog is not closed'); - customSourcesPage.navigateToCustomSources(); - customSourcesPage.selectMySitesSourceType(); - customSourcesPage.checkRowIsDisplayed(libraryName); + await customSourcesPage.navigateToCustomSources(); + await customSourcesPage.selectMySitesSourceType(); + await customSourcesPage.checkRowIsDisplayed(libraryName); - expect(customSourcesPage.getStatusCell(libraryName)).toMatch('PUBLIC', 'Wrong library status.'); + await expect(await customSourcesPage.getStatusCell(libraryName)).toMatch('PUBLIC', 'Wrong library status.'); }); - it('[C290173] Should create a private library', () => { + it('[C290173] Should create a private library', async () => { const libraryName = StringUtil.generateRandomString(); const libraryDescription = StringUtil.generateRandomString(); - createLibraryDialog.typeLibraryName(libraryName); - createLibraryDialog.typeLibraryDescription(libraryDescription); - createLibraryDialog.selectPrivate(); + await createLibraryDialog.typeLibraryName(libraryName); + await createLibraryDialog.typeLibraryDescription(libraryDescription); + await createLibraryDialog.selectPrivate(); - expect(createLibraryDialog.getSelectedRadio()).toMatch(visibility.private, 'The visibility is not private'); + await expect(await createLibraryDialog.getSelectedRadio()).toMatch(visibility.private, 'The visibility is not private'); - createLibraryDialog.clickCreate(); - createLibraryDialog.waitForDialogToClose(); + await createLibraryDialog.clickCreate(); + await createLibraryDialog.waitForDialogToClose(); - expect(createLibraryDialog.isDialogOpen()).not.toBe(true, 'The Create Library dialog is not closed'); + await expect(await createLibraryDialog.isDialogOpen()).not.toBe(true, 'The Create Library dialog is not closed'); - customSourcesPage.navigateToCustomSources(); - customSourcesPage.selectMySitesSourceType(); - customSourcesPage.checkRowIsDisplayed(libraryName); + await customSourcesPage.navigateToCustomSources(); + await customSourcesPage.selectMySitesSourceType(); + await customSourcesPage.checkRowIsDisplayed(libraryName); - expect(customSourcesPage.getStatusCell(libraryName)).toMatch('PRIVATE', 'Wrong library status.'); + await expect(await customSourcesPage.getStatusCell(libraryName)).toMatch('PRIVATE', 'Wrong library status.'); }); - it('[C290174, C290175] Should create a moderated library with a given Library ID', () => { + it('[C290174, C290175] Should create a moderated library with a given Library ID', async () => { const libraryName = StringUtil.generateRandomString(); const libraryId = StringUtil.generateRandomString(); const libraryDescription = StringUtil.generateRandomString(); - createLibraryDialog.typeLibraryName(libraryName); - createLibraryDialog.typeLibraryId(libraryId); - createLibraryDialog.typeLibraryDescription(libraryDescription); - createLibraryDialog.selectModerated(); + await createLibraryDialog.typeLibraryName(libraryName); + await createLibraryDialog.typeLibraryId(libraryId); + await createLibraryDialog.typeLibraryDescription(libraryDescription); + await createLibraryDialog.selectModerated(); - expect(createLibraryDialog.getSelectedRadio()).toMatch(visibility.moderated, 'The visibility is not moderated'); + await expect(await createLibraryDialog.getSelectedRadio()).toMatch(visibility.moderated, 'The visibility is not moderated'); - createLibraryDialog.clickCreate(); - createLibraryDialog.waitForDialogToClose(); + await createLibraryDialog.clickCreate(); + await createLibraryDialog.waitForDialogToClose(); - expect(createLibraryDialog.isDialogOpen()).not.toBe(true, 'The Create Library dialog is not closed'); + await expect(await createLibraryDialog.isDialogOpen()).not.toBe(true, 'The Create Library dialog is not closed'); - customSourcesPage.navigateToCustomSources(); - customSourcesPage.selectMySitesSourceType(); - customSourcesPage.checkRowIsDisplayed(libraryName); + await customSourcesPage.navigateToCustomSources(); + await customSourcesPage.selectMySitesSourceType(); + await customSourcesPage.checkRowIsDisplayed(libraryName); - expect(customSourcesPage.getStatusCell(libraryName)).toMatch('MODERATED', 'Wrong library status.'); + await expect(await customSourcesPage.getStatusCell(libraryName)).toMatch('MODERATED', 'Wrong library status.'); }); - it('[C290163] Should disable Create button when a mandatory field is not filled in', () => { + it('[C290163] Should disable Create button when a mandatory field is not filled in', async () => { const inputValue = StringUtil.generateRandomString(); - createLibraryDialog.typeLibraryName(inputValue); - createLibraryDialog.clearLibraryId(); - expect(createLibraryDialog.isCreateEnabled()).not.toBe(true, 'The Create button is enabled'); - createLibraryDialog.clearLibraryName(); + await createLibraryDialog.typeLibraryName(inputValue); + await createLibraryDialog.clearLibraryId(); + await expect(await createLibraryDialog.isCreateEnabled()).not.toBe(true, 'The Create button is enabled'); + await createLibraryDialog.clearLibraryName(); - createLibraryDialog.typeLibraryId(inputValue); - expect(createLibraryDialog.isCreateEnabled()).not.toBe(true, 'The Create button is enabled'); - createLibraryDialog.clearLibraryId(); + await createLibraryDialog.typeLibraryId(inputValue); + await expect(await createLibraryDialog.isCreateEnabled()).not.toBe(true, 'The Create button is enabled'); + await createLibraryDialog.clearLibraryId(); - createLibraryDialog.typeLibraryDescription(inputValue); - expect(createLibraryDialog.isCreateEnabled()).not.toBe(true, 'The Create button is enabled'); + await createLibraryDialog.typeLibraryDescription(inputValue); + await expect(await createLibraryDialog.isCreateEnabled()).not.toBe(true, 'The Create button is enabled'); }); - it('[C290164] Should auto-fill in the Library Id built from library name', () => { + it('[C290164] Should auto-fill in the Library Id built from library name', async () => { const name: string[] = ['abcd1234', 'ab cd 12 34', 'ab cd&12+34_@link/*']; const libraryId: string[] = ['abcd1234', 'ab-cd-12-34', 'ab-cd1234link']; - for (let _i = 0; _i < 3; _i++) { - createLibraryDialog.typeLibraryName(name[_i]); - expect(createLibraryDialog.getLibraryIdText()).toMatch(libraryId[_i]); - createLibraryDialog.clearLibraryName(); + for (let i = 0; i < 3; i++) { + await createLibraryDialog.typeLibraryName(name[i]); + await expect(await createLibraryDialog.getLibraryIdText()).toMatch(libraryId[i]); + await createLibraryDialog.clearLibraryName(); } }); - it('[C290176] Should not accept special characters for Library Id', () => { + it('[C290176] Should not accept special characters for Library Id', async () => { const name = 'My Library'; const libraryId: string[] = ['My New Library', 'My+New+Library123!', '<>']; - createLibraryDialog.typeLibraryName(name); + await createLibraryDialog.typeLibraryName(name); - for (let _i = 0; _i < 3; _i++) { - createLibraryDialog.typeLibraryId(libraryId[_i]); - expect(createLibraryDialog.isErrorMessageDisplayed()).toBe(true, 'Error message is not displayed'); - expect(createLibraryDialog.getErrorMessage()).toMatch('Use numbers and letters only'); + for (let i = 0; i < 3; i++) { + await createLibraryDialog.typeLibraryId(libraryId[i]); + await expect(await createLibraryDialog.isErrorMessageDisplayed()).toBe(true, 'Error message is not displayed'); + await expect(await createLibraryDialog.getErrorMessage()).toMatch('Use numbers and letters only'); } }); - it('[C291985] Should not accept less than one character name for Library name', () => { + it('[C291985] Should not accept less than 2 characters for Library name', async () => { const name = 'x'; - const libraryId = 'My New Library'; + const libraryId = 'my-library-id'; - createLibraryDialog.typeLibraryName(name); - createLibraryDialog.typeLibraryId(libraryId); - expect(createLibraryDialog.isErrorMessageDisplayed()).toBe(true, 'Error message is not displayed'); - expect(createLibraryDialog.getErrorMessage()).toMatch('Title must be at least 2 characters long'); + await createLibraryDialog.typeLibraryName(name); + await createLibraryDialog.typeLibraryId(libraryId); + await expect(await createLibraryDialog.isErrorMessageDisplayed()).toBe(true, 'Error message is not displayed'); + await expect(await createLibraryDialog.getErrorMessage()).toMatch('Title must be at least 2 characters long'); }); - it('[C291793] Should display error for Name field filled in with spaces only', () => { + it('[C291793] Should display error for Name field filled in with spaces only', async () => { const name = ' '; const libraryId = StringUtil.generateRandomString(); - createLibraryDialog.typeLibraryName(name); - createLibraryDialog.typeLibraryId(libraryId); + await createLibraryDialog.typeLibraryName(name); + await createLibraryDialog.typeLibraryId(libraryId); - expect(createLibraryDialog.isErrorMessageDisplayed()).toBe(true, 'Error message is not displayed'); - expect(createLibraryDialog.getErrorMessage()).toMatch("Library name can't contain only spaces"); + await expect(await createLibraryDialog.isErrorMessageDisplayed()).toBe(true, 'Error message is not displayed'); + await expect(await createLibraryDialog.getErrorMessage()).toMatch("Library name can't contain only spaces"); }); - it('[C290177] Should not accept a duplicate Library Id', () => { + it('[C290177] Should not accept a duplicate Library Id', async () => { const name = 'My Library'; const libraryId = StringUtil.generateRandomString(); - createLibraryDialog.typeLibraryName(name); - createLibraryDialog.typeLibraryId(libraryId); - createLibraryDialog.clickCreate(); - createLibraryDialog.waitForDialogToClose(); + await createLibraryDialog.typeLibraryName(name); + await createLibraryDialog.typeLibraryId(libraryId); + await createLibraryDialog.clickCreate(); + await createLibraryDialog.waitForDialogToClose(); - contentServicesPage.openCreateLibraryDialog(); + await contentServicesPage.openCreateLibraryDialog(); - createLibraryDialog.typeLibraryName(name); - createLibraryDialog.typeLibraryId(libraryId); - expect(createLibraryDialog.isErrorMessageDisplayed()).toBe(true, 'Error message is not displayed'); - expect(createLibraryDialog.getErrorMessage()).toMatch("This Library ID isn't available. Try a different Library ID."); + await createLibraryDialog.typeLibraryName(name); + await createLibraryDialog.typeLibraryId(libraryId); + await expect(await createLibraryDialog.isErrorMessageDisplayed()).toBe(true, 'Error message is not displayed'); + await expect(await createLibraryDialog.getErrorMessage()).toMatch("This Library ID isn't available. Try a different Library ID."); }); - it('[C290178] Should accept the same library name but different Library Ids', () => { + it('[C290178] Should accept the same library name but different Library Ids', async () => { const name = createSite.entry.title; const libraryId = StringUtil.generateRandomString(); - createLibraryDialog.typeLibraryName(name.toUpperCase()); - createLibraryDialog.typeLibraryId(libraryId); + await createLibraryDialog.typeLibraryName(name.toUpperCase()); + await createLibraryDialog.typeLibraryId(libraryId); - createLibraryDialog.waitForLibraryNameHint(); - expect(createLibraryDialog.getLibraryNameHint()).toMatch('Library name already in use', 'The library name hint is wrong'); + await createLibraryDialog.waitForLibraryNameHint(); + await expect(await createLibraryDialog.getLibraryNameHint()).toMatch('Library name already in use', 'The library name hint is wrong'); - createLibraryDialog.clickCreate(); - createLibraryDialog.waitForDialogToClose(); + await createLibraryDialog.clickCreate(); + await createLibraryDialog.waitForDialogToClose(); - expect(createLibraryDialog.isDialogOpen()).not.toBe(true, 'The Create library dialog remained open'); + await expect(await createLibraryDialog.isDialogOpen()).not.toBe(true, 'The Create library dialog remained open'); }); - it('[C290179] Should not accept more than the expected characters for input fields', () => { + it('[C290179] Should not accept more than the expected characters for input fields', async () => { const name = StringUtil.generateRandomString(257); const libraryId = StringUtil.generateRandomString(73); const libraryDescription = StringUtil.generateRandomString(513); - createLibraryDialog.typeLibraryName(name); - createLibraryDialog.typeLibraryId(libraryId); - createLibraryDialog.typeLibraryDescription(libraryDescription); + await createLibraryDialog.typeLibraryName(name); + await createLibraryDialog.typeLibraryId(libraryId); + await createLibraryDialog.typeLibraryDescription(libraryDescription); - createLibraryDialog.selectPublic(); + await createLibraryDialog.selectPublic(); - expect(createLibraryDialog.getErrorMessages(0)).toMatch('Use 256 characters or less for title'); - expect(createLibraryDialog.getErrorMessages(1)).toMatch('Use 72 characters or less for the URL name'); - expect(createLibraryDialog.getErrorMessages(2)).toMatch('Use 512 characters or less for description'); + await expect(await createLibraryDialog.getErrorMessages(0)).toMatch('Use 256 characters or less for title'); + await expect(await createLibraryDialog.getErrorMessages(1)).toMatch('Use 72 characters or less for the URL name'); + await expect(await createLibraryDialog.getErrorMessages(2)).toMatch('Use 512 characters or less for description'); }); }); diff --git a/e2e/content-services/directives/download-directive.e2e.ts b/e2e/content-services/directives/download-directive.e2e.ts index 252050ef4b..4e141763b6 100644 --- a/e2e/content-services/directives/download-directive.e2e.ts +++ b/e2e/content-services/directives/download-directive.e2e.ts @@ -35,28 +35,28 @@ describe('Version component actions', () => { const acsUser = new AcsUserModel(); const txtFileComma = new FileModel({ - 'name': 'comma,name', - 'location': resources.Files.ADF_DOCUMENTS.TXT.file_location + name: 'comma,name', + location: resources.Files.ADF_DOCUMENTS.TXT.file_location }); const txtFileModel = new FileModel({ - 'name': resources.Files.ADF_DOCUMENTS.TXT.file_name, - 'location': resources.Files.ADF_DOCUMENTS.TXT.file_location + name: resources.Files.ADF_DOCUMENTS.TXT.file_name, + location: resources.Files.ADF_DOCUMENTS.TXT.file_location }); const file0BytesModel = new FileModel({ - 'name': resources.Files.ADF_DOCUMENTS.TXT_0B.file_name, - 'location': resources.Files.ADF_DOCUMENTS.TXT_0B.file_location + name: resources.Files.ADF_DOCUMENTS.TXT_0B.file_name, + location: resources.Files.ADF_DOCUMENTS.TXT_0B.file_location }); const folderInfo = new FolderModel({ - 'name': 'myFolder', - 'location': resources.Files.ADF_DOCUMENTS.TEXT_FOLDER.folder_location + name: 'myFolder', + location: resources.Files.ADF_DOCUMENTS.TEXT_FOLDER.folder_location }); const folderSecond = new FolderModel({ - 'name': 'myrSecondFolder', - 'location': resources.Files.ADF_DOCUMENTS.TEXT_FOLDER.folder_location + name: 'myrSecondFolder', + location: resources.Files.ADF_DOCUMENTS.TEXT_FOLDER.folder_location }); this.alfrescoJsApi = new AlfrescoApi({ @@ -65,7 +65,7 @@ describe('Version component actions', () => { }); const uploadActions = new UploadActions(this.alfrescoJsApi); - beforeAll(async (done) => { + beforeAll(async () => { await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); await this.alfrescoJsApi.core.peopleApi.addPerson(acsUser); @@ -82,10 +82,9 @@ describe('Version component actions', () => { await loginPage.loginToContentServicesUsingUserModel(acsUser); - navigationBarPage.clickContentServicesButton(); - contentServicesPage.waitForTableBody(); + await navigationBarPage.clickContentServicesButton(); + await contentServicesPage.waitForTableBody(); - done(); }); afterAll(async () => { @@ -93,48 +92,48 @@ describe('Version component actions', () => { }); afterEach(async () => { - BrowserVisibility.waitUntilDialogIsClose(); + await BrowserVisibility.waitUntilDialogIsClose(); }); - it('[C260083] Download files - Different size values', () => { - contentListPage.selectRow(txtFileModel.name); - contentServicesPage.clickDownloadButton(); - FileBrowserUtil.isFileDownloaded(txtFileModel.name); - BrowserVisibility.waitUntilDialogIsClose(); + it('[C260083] Download files - Different size values', async () => { + await contentListPage.selectRow(txtFileModel.name); + await contentServicesPage.clickDownloadButton(); + await FileBrowserUtil.isFileDownloaded(txtFileModel.name); + await BrowserVisibility.waitUntilDialogIsClose(); - contentListPage.selectRow(file0BytesModel.name); - contentServicesPage.clickDownloadButton(); - FileBrowserUtil.isFileDownloaded(file0BytesModel.name); + await contentListPage.selectRow(file0BytesModel.name); + await contentServicesPage.clickDownloadButton(); + await FileBrowserUtil.isFileDownloaded(file0BytesModel.name); }); - it('[C260084] Download folder', () => { - contentListPage.selectRow(folderInfo.name); - contentServicesPage.clickDownloadButton(); - FileBrowserUtil.isFileDownloaded(folderInfo.name + '.zip'); + it('[C260084] Download folder', async () => { + await contentListPage.selectRow(folderInfo.name); + await contentServicesPage.clickDownloadButton(); + await FileBrowserUtil.isFileDownloaded(folderInfo.name + '.zip'); }); - it('[C261032] File and Folder', () => { - contentServicesPage.clickMultiSelectToggle(); - contentServicesPage.checkAcsContainer(); - contentListPage.dataTablePage().checkAllRows(); - contentServicesPage.clickDownloadButton(); - FileBrowserUtil.isFileDownloaded('archive.zip'); + it('[C261032] File and Folder', async () => { + await contentServicesPage.clickMultiSelectToggle(); + await contentServicesPage.checkAcsContainer(); + await contentListPage.dataTablePage().checkAllRows(); + await contentServicesPage.clickDownloadButton(); + await FileBrowserUtil.isFileDownloaded('archive.zip'); }); - it('[C261033] Folder and Folder', () => { - contentListPage.selectRow(folderInfo.name); - contentListPage.selectRow(folderSecond.name); + it('[C261033] Folder and Folder', async () => { + await contentListPage.selectRow(folderInfo.name); + await contentListPage.selectRow(folderSecond.name); - contentServicesPage.clickDownloadButton(); + await contentServicesPage.clickDownloadButton(); - FileBrowserUtil.isFileDownloaded('archive.zip'); - BrowserVisibility.waitUntilDialogIsClose(); + await FileBrowserUtil.isFileDownloaded('archive.zip'); + await BrowserVisibility.waitUntilDialogIsClose(); }); - it('[C277757] Download file - Comma in file name', () => { - contentListPage.selectRow(txtFileComma.name); - contentServicesPage.clickDownloadButton(); - FileBrowserUtil.isFileDownloaded(txtFileComma.name); + it('[C277757] Download file - Comma in file name', async () => { + await contentListPage.selectRow(txtFileComma.name); + await contentServicesPage.clickDownloadButton(); + await FileBrowserUtil.isFileDownloaded(txtFileComma.name); }); }); diff --git a/e2e/content-services/directives/edit-folder-directive.e2e.ts b/e2e/content-services/directives/edit-folder-directive.e2e.ts index 19f3cbc81a..424c218520 100644 --- a/e2e/content-services/directives/edit-folder-directive.e2e.ts +++ b/e2e/content-services/directives/edit-folder-directive.e2e.ts @@ -25,7 +25,7 @@ import { NavigationBarPage } from '../../pages/adf/navigationBarPage'; import { FileModel } from '../../models/ACS/fileModel'; import resources = require('../../util/resources'); -describe('Edit folder directive', function () { +describe('Edit folder directive', () => { const loginPage = new LoginPage(); const contentServicesPage = new ContentServicesPage(); @@ -41,15 +41,15 @@ describe('Edit folder directive', function () { }); const pdfFile = new FileModel({ - 'name': resources.Files.ADF_DOCUMENTS.PDF.file_name, - 'location': resources.Files.ADF_DOCUMENTS.PDF.file_location + name: resources.Files.ADF_DOCUMENTS.PDF.file_name, + location: resources.Files.ADF_DOCUMENTS.PDF.file_location }); const uploadActions = new UploadActions(this.alfrescoJsApi); const updateFolderName = StringUtil.generateRandomString(5); let editFolder, anotherFolder, filePdfNode, subFolder; - beforeAll(async (done) => { + beforeAll(async () => { await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); await this.alfrescoJsApi.core.peopleApi.addPerson(acsUser); await this.alfrescoJsApi.core.peopleApi.addPerson(anotherAcsUser); @@ -74,171 +74,173 @@ describe('Edit folder directive', function () { await loginPage.loginToContentServicesUsingUserModel(acsUser); - done(); }); - afterAll(async (done) => { + afterAll(async () => { await navigationBarPage.clickLogoutButton(); await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); await uploadActions.deleteFileOrFolder(editFolder.entry.id); await uploadActions.deleteFileOrFolder(anotherFolder.entry.id); await uploadActions.deleteFileOrFolder(filePdfNode.entry.id); - done(); + }); - beforeEach(async (done) => { - navigationBarPage.clickHomeButton(); - navigationBarPage.clickContentServicesButton(); - contentServicesPage.getContentList().dataTablePage().waitTillContentLoaded(); - done(); + beforeEach(async () => { + await navigationBarPage.clickHomeButton(); + await navigationBarPage.clickContentServicesButton(); + await contentServicesPage.getDocumentList().dataTablePage().waitTillContentLoaded(); + }); + + afterEach(async () => { + await BrowserActions.closeMenuAndDialogs(); }); it('[C260161] Update folder - Cancel button', async () => { - contentServicesPage.getContentList().dataTablePage().selectRow('Display name', editFolder.entry.name); - contentServicesPage.getContentList().dataTablePage().checkRowIsSelected('Display name', editFolder.entry.name); - contentServicesPage.clickOnEditFolder(); - editFolderDialog.checkFolderDialogIsDisplayed(); - expect(editFolderDialog.getDialogTitle()).toBe('Edit folder'); - expect(editFolderDialog.getFolderName()).toBe(editFolder.entry.name); - editFolderDialog.checkCreateUpdateBtnIsEnabled(); - editFolderDialog.checkCancelBtnIsEnabled(); - editFolderDialog.clickOnCancelButton(); - editFolderDialog.checkFolderDialogIsNotDisplayed(); + await contentServicesPage.getDocumentList().dataTablePage().selectRow('Display name', editFolder.entry.name); + await contentServicesPage.getDocumentList().dataTablePage().checkRowIsSelected('Display name', editFolder.entry.name); + await contentServicesPage.clickOnEditFolder(); + await editFolderDialog.checkFolderDialogIsDisplayed(); + await expect(await editFolderDialog.getDialogTitle()).toBe('Edit folder'); + await expect(await editFolderDialog.getFolderName()).toBe(editFolder.entry.name); + await editFolderDialog.checkCreateUpdateBtnIsEnabled(); + await editFolderDialog.checkCancelBtnIsEnabled(); + await editFolderDialog.clickOnCancelButton(); + await editFolderDialog.checkFolderDialogIsNotDisplayed(); }); it('[C260162] Update folder - Introducing letters', async () => { - contentServicesPage.getContentList().dataTablePage().checkContentIsDisplayed('Display name', editFolder.entry.name); - contentServicesPage.getContentList().dataTablePage().selectRow('Display name', editFolder.entry.name); - contentServicesPage.getContentList().dataTablePage().checkRowIsSelected('Display name', editFolder.entry.name); - expect(contentServicesPage.checkEditFolderButtonIsEnabled()).toBe(true); - contentServicesPage.clickOnEditFolder(); - editFolderDialog.checkFolderDialogIsDisplayed(); - editFolderDialog.checkCreateUpdateBtnIsEnabled(); - editFolderDialog.addFolderName(editFolder.entry.name + 'a'); - editFolderDialog.checkCreateUpdateBtnIsEnabled(); - editFolderDialog.clickOnCancelButton(); - editFolderDialog.checkFolderDialogIsNotDisplayed(); - contentServicesPage.getDocumentList().dataTablePage().checkContentIsDisplayed('Display name', editFolder.entry.name); + await contentServicesPage.getDocumentList().dataTablePage().checkContentIsDisplayed('Display name', editFolder.entry.name); + await contentServicesPage.getDocumentList().dataTablePage().selectRow('Display name', editFolder.entry.name); + await contentServicesPage.getDocumentList().dataTablePage().checkRowIsSelected('Display name', editFolder.entry.name); + await expect(await contentServicesPage.isEditFolderButtonEnabled()).toBe(true); + await contentServicesPage.clickOnEditFolder(); + await editFolderDialog.checkFolderDialogIsDisplayed(); + await editFolderDialog.checkCreateUpdateBtnIsEnabled(); + await editFolderDialog.addFolderName(editFolder.entry.name + 'a'); + await editFolderDialog.checkCreateUpdateBtnIsEnabled(); + await editFolderDialog.clickOnCancelButton(); + await editFolderDialog.checkFolderDialogIsNotDisplayed(); + await contentServicesPage.getDocumentList().dataTablePage().checkContentIsDisplayed('Display name', editFolder.entry.name); }); it('[C260163] Update folder name with an existing one', async () => { - contentServicesPage.getContentList().dataTablePage().checkContentIsDisplayed('Display name', editFolder.entry.name); - contentServicesPage.getContentList().dataTablePage().selectRow('Display name', editFolder.entry.name); - contentServicesPage.getContentList().dataTablePage().checkRowIsSelected('Display name', editFolder.entry.name); - expect(contentServicesPage.checkEditFolderButtonIsEnabled()).toBe(true); - contentServicesPage.clickOnEditFolder(); - editFolderDialog.checkFolderDialogIsDisplayed(); - editFolderDialog.checkCreateUpdateBtnIsEnabled(); - editFolderDialog.addFolderName(anotherFolder.entry.name); - editFolderDialog.checkCreateUpdateBtnIsEnabled(); - editFolderDialog.clickOnCreateUpdateButton(); - editFolderDialog.checkFolderDialogIsDisplayed(); - notificationHistoryPage.checkNotifyContains('There\'s already a folder with this name. Try a different name.'); + await contentServicesPage.getDocumentList().dataTablePage().checkContentIsDisplayed('Display name', editFolder.entry.name); + await contentServicesPage.getDocumentList().dataTablePage().selectRow('Display name', editFolder.entry.name); + await contentServicesPage.getDocumentList().dataTablePage().checkRowIsSelected('Display name', editFolder.entry.name); + await expect(await contentServicesPage.isEditFolderButtonEnabled()).toBe(true); + await contentServicesPage.clickOnEditFolder(); + await editFolderDialog.checkFolderDialogIsDisplayed(); + await editFolderDialog.checkCreateUpdateBtnIsEnabled(); + await editFolderDialog.addFolderName(anotherFolder.entry.name); + await editFolderDialog.checkCreateUpdateBtnIsEnabled(); + await editFolderDialog.clickOnCreateUpdateButton(); + await editFolderDialog.checkFolderDialogIsDisplayed(); + await notificationHistoryPage.checkNotifyContains('There\'s already a folder with this name. Try a different name.'); }); it('[C260164] Edit Folder - Unsupported characters', async () => { - contentServicesPage.getContentList().dataTablePage().checkContentIsDisplayed('Display name', editFolder.entry.name); - contentServicesPage.getContentList().dataTablePage().selectRow('Display name', editFolder.entry.name); - contentServicesPage.getContentList().dataTablePage().checkRowIsSelected('Display name', editFolder.entry.name); - contentServicesPage.clickOnEditFolder(); - editFolderDialog.checkFolderDialogIsDisplayed(); + await contentServicesPage.getDocumentList().dataTablePage().checkContentIsDisplayed('Display name', editFolder.entry.name); + await contentServicesPage.getDocumentList().dataTablePage().selectRow('Display name', editFolder.entry.name); + await contentServicesPage.getDocumentList().dataTablePage().checkRowIsSelected('Display name', editFolder.entry.name); + await contentServicesPage.clickOnEditFolder(); + await editFolderDialog.checkFolderDialogIsDisplayed(); - editFolderDialog.addFolderName('a*"<>\\/?:|'); - expect(editFolderDialog.getValidationMessage()).toBe('Folder name can\'t contain these characters * " < > \\ / ? : |'); - editFolderDialog.checkCreateUpdateBtnIsDisabled(); + await editFolderDialog.addFolderName('a*"<>\\/?:|'); + await expect(await editFolderDialog.getValidationMessage()).toBe('Folder name can\'t contain these characters * " < > \\ / ? : |'); + await editFolderDialog.checkCreateUpdateBtnIsDisabled(); - editFolderDialog.addFolderName('a.a'); - editFolderDialog.checkValidationMessageIsNotDisplayed(); - editFolderDialog.checkCreateUpdateBtnIsEnabled(); + await editFolderDialog.addFolderName('a.a'); + await editFolderDialog.checkValidationMessageIsNotDisplayed(); + await editFolderDialog.checkCreateUpdateBtnIsEnabled(); - editFolderDialog.addFolderName('a.'); - expect(editFolderDialog.getValidationMessage()).toBe('Folder name can\'t end with a period .'); - editFolderDialog.checkCreateUpdateBtnIsDisabled(); + await editFolderDialog.addFolderName('a.'); + await expect(await editFolderDialog.getValidationMessage()).toBe('Folder name can\'t end with a period .'); + await editFolderDialog.checkCreateUpdateBtnIsDisabled(); - editFolderDialog.getFolderNameField().clear(); - editFolderDialog.getFolderNameField().sendKeys(protractor.Key.SPACE); - expect(editFolderDialog.getValidationMessage()).toBe('Folder name can\'t contain only spaces'); - editFolderDialog.checkCreateUpdateBtnIsDisabled(); + await BrowserActions.clearSendKeys(editFolderDialog.getFolderNameField(), protractor.Key.SPACE); + await expect(await editFolderDialog.getValidationMessage()).toBe('Folder name can\'t contain only spaces'); + await editFolderDialog.checkCreateUpdateBtnIsDisabled(); - editFolderDialog.addFolderName(editFolder.entry.name); - editFolderDialog.addFolderDescription('a*"<>\\/?:|'); - editFolderDialog.checkValidationMessageIsNotDisplayed(); - editFolderDialog.checkCreateUpdateBtnIsEnabled(); + await editFolderDialog.addFolderName(editFolder.entry.name); + await editFolderDialog.addFolderDescription('a*"<>\\/?:|'); + await editFolderDialog.checkValidationMessageIsNotDisplayed(); + await editFolderDialog.checkCreateUpdateBtnIsEnabled(); - editFolderDialog.addFolderDescription('a.'); - editFolderDialog.checkValidationMessageIsNotDisplayed(); - editFolderDialog.checkCreateUpdateBtnIsEnabled(); + await editFolderDialog.addFolderDescription('a.'); + await editFolderDialog.checkValidationMessageIsNotDisplayed(); + await editFolderDialog.checkCreateUpdateBtnIsEnabled(); - editFolderDialog.addFolderDescription('a.a'); - editFolderDialog.checkValidationMessageIsNotDisplayed(); - editFolderDialog.checkCreateUpdateBtnIsEnabled(); + await editFolderDialog.addFolderDescription('a.a'); + await editFolderDialog.checkValidationMessageIsNotDisplayed(); + await editFolderDialog.checkCreateUpdateBtnIsEnabled(); - editFolderDialog.getFolderDescriptionField().sendKeys(protractor.Key.SPACE); - editFolderDialog.checkValidationMessageIsNotDisplayed(); - editFolderDialog.checkCreateUpdateBtnIsEnabled(); - editFolderDialog.clickOnCancelButton(); - editFolderDialog.checkFolderDialogIsNotDisplayed(); + await editFolderDialog.getFolderDescriptionField().sendKeys(protractor.Key.SPACE); + await editFolderDialog.checkValidationMessageIsNotDisplayed(); + await editFolderDialog.checkCreateUpdateBtnIsEnabled(); + await editFolderDialog.clickOnCancelButton(); + await editFolderDialog.checkFolderDialogIsNotDisplayed(); }); it('[C260166] Enable/Disable edit folder icon - when file selected', async () => { - expect(contentServicesPage.getDocumentList().dataTablePage().getNumberOfSelectedRows()).toBe(0); - expect(contentServicesPage.checkEditFolderButtonIsEnabled()).toBe(false); - contentServicesPage.getContentList().dataTablePage().checkContentIsDisplayed('Display name', filePdfNode.entry.name); - contentServicesPage.getContentList().dataTablePage().selectRow('Display name', filePdfNode.entry.name); - contentServicesPage.getContentList().dataTablePage().checkRowIsSelected('Display name', filePdfNode.entry.name); - expect(contentServicesPage.checkEditFolderButtonIsEnabled()).toBe(false); + await expect(await contentServicesPage.getDocumentList().dataTablePage().getNumberOfSelectedRows()).toBe(0); + await expect(await contentServicesPage.isEditFolderButtonEnabled()).toBe(false); + await contentServicesPage.getDocumentList().dataTablePage().checkContentIsDisplayed('Display name', filePdfNode.entry.name); + await contentServicesPage.getDocumentList().dataTablePage().selectRow('Display name', filePdfNode.entry.name); + await contentServicesPage.getDocumentList().dataTablePage().checkRowIsSelected('Display name', filePdfNode.entry.name); + await expect(await contentServicesPage.isEditFolderButtonEnabled()).toBe(false); }); it('[C260166] Enable/Disable edit folder icon - when multiple folders selected', async () => { - contentServicesPage.clickMultiSelectToggle(); - contentServicesPage.getContentList().dataTablePage().waitTillContentLoaded(); - contentServicesPage.getContentList().dataTablePage().checkAllRowsButtonIsDisplayed().checkAllRows(); - contentServicesPage.getContentList().dataTablePage().waitTillContentLoaded(); - contentServicesPage.getContentList().dataTablePage().checkRowIsChecked('Display name', editFolder.entry.name); - contentServicesPage.getContentList().dataTablePage().checkRowIsChecked('Display name', anotherFolder.entry.name); - contentServicesPage.getContentList().dataTablePage().clickCheckbox('Display name', filePdfNode.entry.name); - contentServicesPage.getContentList().dataTablePage().checkRowIsNotChecked('Display name', filePdfNode.entry.name); - expect(contentServicesPage.getContentList().dataTablePage().getNumberOfSelectedRows()).toBe(2); - expect(contentServicesPage.checkEditFolderButtonIsEnabled()).toBe(false); + await contentServicesPage.clickMultiSelectToggle(); + await contentServicesPage.getDocumentList().dataTablePage().waitTillContentLoaded(); + await contentServicesPage.getDocumentList().dataTablePage().checkAllRowsButtonIsDisplayed(); + await contentServicesPage.getDocumentList().dataTablePage().checkAllRows(); + await contentServicesPage.getDocumentList().dataTablePage().waitTillContentLoaded(); + await contentServicesPage.getDocumentList().dataTablePage().checkRowIsChecked('Display name', editFolder.entry.name); + await contentServicesPage.getDocumentList().dataTablePage().checkRowIsChecked('Display name', anotherFolder.entry.name); + await contentServicesPage.getDocumentList().dataTablePage().clickCheckbox('Display name', filePdfNode.entry.name); + await contentServicesPage.getDocumentList().dataTablePage().checkRowIsNotChecked('Display name', filePdfNode.entry.name); + await expect(await contentServicesPage.getDocumentList().dataTablePage().getNumberOfSelectedRows()).toBe(2); + await expect(await contentServicesPage.isEditFolderButtonEnabled()).toBe(false); }); it('[C260166] Enable/Disable edit folder icon - when single folder selected', async () => { - expect(contentServicesPage.getDocumentList().dataTablePage().getNumberOfSelectedRows()).toBe(0); - contentServicesPage.getContentList().dataTablePage().selectRow('Display name', editFolder.entry.name); - contentServicesPage.getContentList().dataTablePage().checkRowIsSelected('Display name', editFolder.entry.name); - expect(contentServicesPage.getContentList().dataTablePage().getNumberOfSelectedRows()).toBe(1); - expect(contentServicesPage.checkEditFolderButtonIsEnabled()).toBe(true); + await expect(await contentServicesPage.getDocumentList().dataTablePage().getNumberOfSelectedRows()).toBe(0); + await contentServicesPage.getDocumentList().dataTablePage().selectRow('Display name', editFolder.entry.name); + await contentServicesPage.getDocumentList().dataTablePage().checkRowIsSelected('Display name', editFolder.entry.name); + await expect(await contentServicesPage.getDocumentList().dataTablePage().getNumberOfSelectedRows()).toBe(1); + await expect(await contentServicesPage.isEditFolderButtonEnabled()).toBe(true); }); it('[C260165] Update folder name with non-existing one', async () => { - contentServicesPage.getContentList().dataTablePage().checkContentIsDisplayed('Display name', editFolder.entry.name); - contentServicesPage.getContentList().dataTablePage().selectRow('Display name', editFolder.entry.name); - contentServicesPage.getContentList().dataTablePage().checkRowIsSelected('Display name', editFolder.entry.name); - contentServicesPage.clickOnEditFolder(); - editFolderDialog.checkFolderDialogIsDisplayed(); - editFolderDialog.addFolderName(updateFolderName); - editFolderDialog.checkCreateUpdateBtnIsEnabled(); - editFolderDialog.clickOnCreateUpdateButton(); - editFolderDialog.checkFolderDialogIsNotDisplayed(); - contentServicesPage.getDocumentList().dataTablePage().checkContentIsDisplayed('Display name', updateFolderName); + await contentServicesPage.getDocumentList().dataTablePage().checkContentIsDisplayed('Display name', editFolder.entry.name); + await contentServicesPage.getDocumentList().dataTablePage().selectRow('Display name', editFolder.entry.name); + await contentServicesPage.getDocumentList().dataTablePage().checkRowIsSelected('Display name', editFolder.entry.name); + await contentServicesPage.clickOnEditFolder(); + await editFolderDialog.checkFolderDialogIsDisplayed(); + await editFolderDialog.addFolderName(updateFolderName); + await editFolderDialog.checkCreateUpdateBtnIsEnabled(); + await editFolderDialog.clickOnCreateUpdateButton(); + await editFolderDialog.checkFolderDialogIsNotDisplayed(); + await contentServicesPage.getDocumentList().dataTablePage().checkContentIsDisplayed('Display name', updateFolderName); }); describe('Edit Folder - no permission', () => { - beforeEach(async (done) => { - loginPage.loginToContentServicesUsingUserModel(anotherAcsUser); - BrowserActions.getUrl(browser.params.testConfig.adf.url + '/files/' + editFolder.entry.id); - contentServicesPage.getContentList().dataTablePage().waitTillContentLoaded(); - done(); + beforeEach(async () => { + await loginPage.loginToContentServicesUsingUserModel(anotherAcsUser); + await BrowserActions.getUrl(browser.params.testConfig.adf.url + '/files/' + editFolder.entry.id); + await contentServicesPage.getDocumentList().dataTablePage().waitTillContentLoaded(); + }); it('[C260167] Edit folder without permission', async () => { - contentServicesPage.getContentList().dataTablePage().checkContentIsDisplayed('Display name', subFolder.entry.name); - contentServicesPage.getContentList().dataTablePage().selectRow('Display name', subFolder.entry.name); - contentServicesPage.getContentList().dataTablePage().checkRowIsSelected('Display name', subFolder.entry.name); - expect(contentServicesPage.checkEditFolderButtonIsEnabled()).toBe(false); + await contentServicesPage.getDocumentList().dataTablePage().checkContentIsDisplayed('Display name', subFolder.entry.name); + await contentServicesPage.getDocumentList().dataTablePage().selectRow('Display name', subFolder.entry.name); + await contentServicesPage.getDocumentList().dataTablePage().checkRowIsSelected('Display name', subFolder.entry.name); + await expect(await contentServicesPage.isEditFolderButtonEnabled()).toBe(false); }); }); diff --git a/e2e/content-services/directives/favorite-directive.e2e.ts b/e2e/content-services/directives/favorite-directive.e2e.ts index 5291c6ed6a..79af6d474e 100644 --- a/e2e/content-services/directives/favorite-directive.e2e.ts +++ b/e2e/content-services/directives/favorite-directive.e2e.ts @@ -27,7 +27,7 @@ import { NavigationBarPage } from '../../pages/adf/navigationBarPage'; import { CustomSources } from '../../pages/adf/demo-shell/customSourcesPage'; import { TrashcanPage } from '../../pages/adf/trashcanPage'; -describe('Favorite directive', function () { +describe('Favorite directive', () => { const loginPage = new LoginPage(); const contentServicesPage = new ContentServicesPage(); @@ -43,14 +43,14 @@ describe('Favorite directive', function () { hostEcm: browser.params.testConfig.adf_acs.host }); const pdfFile = new FileModel({ - 'name': resources.Files.ADF_DOCUMENTS.PDF.file_name, - 'location': resources.Files.ADF_DOCUMENTS.PDF.file_location + name: resources.Files.ADF_DOCUMENTS.PDF.file_name, + location: resources.Files.ADF_DOCUMENTS.PDF.file_location }); const uploadActions = new UploadActions(this.alfrescoJsApi); let testFolder1, testFolder2, testFolder3, testFolder4, testFile; - beforeAll(async (done) => { + beforeAll(async () => { await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); await this.alfrescoJsApi.core.peopleApi.addPerson(acsUser); await this.alfrescoJsApi.login(acsUser.id, acsUser.password); @@ -62,161 +62,161 @@ describe('Favorite directive', function () { testFile = await uploadActions.uploadFile(pdfFile.location, pdfFile.name, '-my-'); await loginPage.loginToContentServicesUsingUserModel(acsUser); - contentServicesPage.goToDocumentList(); - done(); + await contentServicesPage.goToDocumentList(); + }); - afterAll(async (done) => { + afterAll(async () => { await navigationBarPage.clickLogoutButton(); await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); await uploadActions.deleteFileOrFolder(testFolder1.entry.id); await uploadActions.deleteFileOrFolder(testFolder2.entry.id); await uploadActions.deleteFileOrFolder(testFolder3.entry.id); await uploadActions.deleteFileOrFolder(testFolder4.entry.id); - done(); + }); - beforeEach(async (done) => { - navigationBarPage.clickContentServicesButton(); - contentServicesPage.getContentList().dataTablePage().waitTillContentLoaded(); - done(); + beforeEach(async () => { + await navigationBarPage.clickContentServicesButton(); + await contentServicesPage.getDocumentList().dataTablePage().waitTillContentLoaded(); + }); it('[C260247] Should be able to mark a file as favorite', async () => { - contentServicesPage.getContentList().dataTablePage().checkContentIsDisplayed('Display name', testFile.entry.name); - contentServicesPage.getContentList().dataTablePage().selectRow('Display name', testFile.entry.name); - contentServicesPage.getContentList().dataTablePage().checkRowIsSelected('Display name', testFile.entry.name); - contentServicesPage.clickOnFavoriteButton(); - contentServicesPage.checkIsMarkedFavorite(); - contentServicesPage.getContentList().dataTablePage().checkRowIsSelected('Display name', testFile.entry.name); - customSourcesPage.navigateToCustomSources(); - customSourcesPage.selectFavoritesSourceType(); - customSourcesPage.checkRowIsDisplayed(testFile.entry.name); + await contentServicesPage.getDocumentList().dataTablePage().checkContentIsDisplayed('Display name', testFile.entry.name); + await contentServicesPage.getDocumentList().dataTablePage().selectRow('Display name', testFile.entry.name); + await contentServicesPage.getDocumentList().dataTablePage().checkRowIsSelected('Display name', testFile.entry.name); + await contentServicesPage.clickOnFavoriteButton(); + await contentServicesPage.checkIsMarkedFavorite(); + await contentServicesPage.getDocumentList().dataTablePage().checkRowIsSelected('Display name', testFile.entry.name); + await customSourcesPage.navigateToCustomSources(); + await customSourcesPage.selectFavoritesSourceType(); + await customSourcesPage.checkRowIsDisplayed(testFile.entry.name); - navigationBarPage.clickContentServicesButton(); - contentServicesPage.getContentList().dataTablePage().waitTillContentLoaded(); - contentServicesPage.getContentList().dataTablePage().checkContentIsDisplayed('Display name', testFile.entry.name); - contentServicesPage.getContentList().dataTablePage().selectRow('Display name', testFile.entry.name); - contentServicesPage.getContentList().dataTablePage().checkRowIsSelected('Display name', testFile.entry.name); - contentServicesPage.clickOnFavoriteButton(); - contentServicesPage.checkIsNotMarkedFavorite(); - customSourcesPage.navigateToCustomSources(); - customSourcesPage.selectFavoritesSourceType(); - customSourcesPage.checkRowIsNotDisplayed(testFile.entry.name); + await navigationBarPage.clickContentServicesButton(); + await contentServicesPage.getDocumentList().dataTablePage().waitTillContentLoaded(); + await contentServicesPage.getDocumentList().dataTablePage().checkContentIsDisplayed('Display name', testFile.entry.name); + await contentServicesPage.getDocumentList().dataTablePage().selectRow('Display name', testFile.entry.name); + await contentServicesPage.getDocumentList().dataTablePage().checkRowIsSelected('Display name', testFile.entry.name); + await contentServicesPage.clickOnFavoriteButton(); + await contentServicesPage.checkIsNotMarkedFavorite(); + await customSourcesPage.navigateToCustomSources(); + await customSourcesPage.selectFavoritesSourceType(); + await customSourcesPage.checkRowIsNotDisplayed(testFile.entry.name); }); it('[C260249] Should be able to mark a folder as favorite', async () => { - contentServicesPage.getContentList().dataTablePage().checkContentIsDisplayed('Display name', testFolder1.entry.name); - contentServicesPage.getContentList().dataTablePage().selectRow('Display name', testFolder1.entry.name); - contentServicesPage.getContentList().dataTablePage().checkRowIsSelected('Display name', testFolder1.entry.name); - contentServicesPage.clickOnFavoriteButton(); - contentServicesPage.checkIsMarkedFavorite(); - customSourcesPage.navigateToCustomSources(); - customSourcesPage.selectFavoritesSourceType(); - customSourcesPage.checkRowIsDisplayed(testFolder1.entry.name); + await contentServicesPage.getDocumentList().dataTablePage().checkContentIsDisplayed('Display name', testFolder1.entry.name); + await contentServicesPage.getDocumentList().dataTablePage().selectRow('Display name', testFolder1.entry.name); + await contentServicesPage.getDocumentList().dataTablePage().checkRowIsSelected('Display name', testFolder1.entry.name); + await contentServicesPage.clickOnFavoriteButton(); + await contentServicesPage.checkIsMarkedFavorite(); + await customSourcesPage.navigateToCustomSources(); + await customSourcesPage.selectFavoritesSourceType(); + await customSourcesPage.checkRowIsDisplayed(testFolder1.entry.name); - navigationBarPage.clickContentServicesButton(); - contentServicesPage.getContentList().dataTablePage().waitTillContentLoaded(); - contentServicesPage.getContentList().dataTablePage().checkContentIsDisplayed('Display name', testFolder1.entry.name); - contentServicesPage.getContentList().dataTablePage().selectRow('Display name', testFolder1.entry.name); - contentServicesPage.getContentList().dataTablePage().checkRowIsSelected('Display name', testFolder1.entry.name); - contentServicesPage.clickOnFavoriteButton(); - contentServicesPage.checkIsNotMarkedFavorite(); - customSourcesPage.navigateToCustomSources(); - customSourcesPage.selectFavoritesSourceType(); - customSourcesPage.checkRowIsNotDisplayed(testFolder1.entry.name); + await navigationBarPage.clickContentServicesButton(); + await contentServicesPage.getDocumentList().dataTablePage().waitTillContentLoaded(); + await contentServicesPage.getDocumentList().dataTablePage().checkContentIsDisplayed('Display name', testFolder1.entry.name); + await contentServicesPage.getDocumentList().dataTablePage().selectRow('Display name', testFolder1.entry.name); + await contentServicesPage.getDocumentList().dataTablePage().checkRowIsSelected('Display name', testFolder1.entry.name); + await contentServicesPage.clickOnFavoriteButton(); + await contentServicesPage.checkIsNotMarkedFavorite(); + await customSourcesPage.navigateToCustomSources(); + await customSourcesPage.selectFavoritesSourceType(); + await customSourcesPage.checkRowIsNotDisplayed(testFolder1.entry.name); }); it('[C260251] Should retain the restored file as favorite', async () => { - contentServicesPage.getContentList().dataTablePage().checkContentIsDisplayed('Display name', testFile.entry.name); - contentServicesPage.getContentList().dataTablePage().selectRow('Display name', testFile.entry.name); - contentServicesPage.getContentList().dataTablePage().checkRowIsSelected('Display name', testFile.entry.name); - contentServicesPage.clickOnFavoriteButton(); - contentServicesPage.checkIsMarkedFavorite(); - contentListPage.rightClickOnRow(testFile.entry.name); - contentServicesPage.pressContextMenuActionNamed('Delete'); - contentServicesPage.checkContentIsNotDisplayed(testFile.entry.name); - customSourcesPage.navigateToCustomSources(); - customSourcesPage.selectFavoritesSourceType(); - customSourcesPage.checkRowIsNotDisplayed(testFile.entry.name); + await contentServicesPage.getDocumentList().dataTablePage().checkContentIsDisplayed('Display name', testFile.entry.name); + await contentServicesPage.getDocumentList().dataTablePage().selectRow('Display name', testFile.entry.name); + await contentServicesPage.getDocumentList().dataTablePage().checkRowIsSelected('Display name', testFile.entry.name); + await contentServicesPage.clickOnFavoriteButton(); + await contentServicesPage.checkIsMarkedFavorite(); + await contentListPage.rightClickOnRow(testFile.entry.name); + await contentServicesPage.pressContextMenuActionNamed('Delete'); + await contentServicesPage.checkContentIsNotDisplayed(testFile.entry.name); + await customSourcesPage.navigateToCustomSources(); + await customSourcesPage.selectFavoritesSourceType(); + await customSourcesPage.checkRowIsNotDisplayed(testFile.entry.name); - navigationBarPage.clickTrashcanButton(); - trashcanPage.waitForTableBody(); - expect(trashcanPage.numberOfResultsDisplayed()).toBe(1); - trashcanPage.getDocumentList().dataTablePage().clickRowByContent(testFile.entry.name); - trashcanPage.getDocumentList().dataTablePage().checkRowByContentIsSelected(testFile.entry.name); - trashcanPage.clickRestore(); - trashcanPage.checkTrashcanIsEmpty(); + await navigationBarPage.clickTrashcanButton(); + await trashcanPage.waitForTableBody(); + await expect(await trashcanPage.numberOfResultsDisplayed()).toBe(1); + await trashcanPage.getDocumentList().dataTablePage().clickRowByContent(testFile.entry.name); + await trashcanPage.getDocumentList().dataTablePage().checkRowByContentIsSelected(testFile.entry.name); + await trashcanPage.clickRestore(); + await trashcanPage.checkTrashcanIsEmpty(); - navigationBarPage.clickContentServicesButton(); - contentServicesPage.getContentList().dataTablePage().waitTillContentLoaded(); - contentServicesPage.getContentList().dataTablePage().checkContentIsDisplayed('Display name', testFile.entry.name); - contentServicesPage.getContentList().dataTablePage().selectRow('Display name', testFile.entry.name); - contentServicesPage.getContentList().dataTablePage().checkRowIsSelected('Display name', testFile.entry.name); - contentServicesPage.checkIsMarkedFavorite(); - customSourcesPage.navigateToCustomSources(); - customSourcesPage.selectFavoritesSourceType(); - customSourcesPage.checkRowIsDisplayed(testFile.entry.name); + await navigationBarPage.clickContentServicesButton(); + await contentServicesPage.getDocumentList().dataTablePage().waitTillContentLoaded(); + await contentServicesPage.getDocumentList().dataTablePage().checkContentIsDisplayed('Display name', testFile.entry.name); + await contentServicesPage.getDocumentList().dataTablePage().selectRow('Display name', testFile.entry.name); + await contentServicesPage.getDocumentList().dataTablePage().checkRowIsSelected('Display name', testFile.entry.name); + await contentServicesPage.checkIsMarkedFavorite(); + await customSourcesPage.navigateToCustomSources(); + await customSourcesPage.selectFavoritesSourceType(); + await customSourcesPage.checkRowIsDisplayed(testFile.entry.name); }); it('[C260252] Should retain the moved file as favorite', async () => { - contentServicesPage.getContentList().dataTablePage().checkContentIsDisplayed('Display name', testFile.entry.name); - contentServicesPage.getContentList().dataTablePage().selectRow('Display name', testFile.entry.name); - contentServicesPage.getContentList().dataTablePage().checkRowIsSelected('Display name', testFile.entry.name); - contentServicesPage.clickOnFavoriteButton(); - contentServicesPage.checkIsMarkedFavorite(); + await contentServicesPage.getDocumentList().dataTablePage().checkContentIsDisplayed('Display name', testFile.entry.name); + await contentServicesPage.getDocumentList().dataTablePage().selectRow('Display name', testFile.entry.name); + await contentServicesPage.getDocumentList().dataTablePage().checkRowIsSelected('Display name', testFile.entry.name); + await contentServicesPage.clickOnFavoriteButton(); + await contentServicesPage.checkIsMarkedFavorite(); - contentServicesPage.getDocumentList().rightClickOnRow(testFile.entry.name); - contentServicesPage.pressContextMenuActionNamed('Move'); - contentNodeSelector.checkDialogIsDisplayed(); - contentNodeSelector.typeIntoNodeSelectorSearchField(testFolder1.entry.name); - contentNodeSelector.clickContentNodeSelectorResult(testFolder1.entry.name); - contentNodeSelector.clickMoveCopyButton(); - contentServicesPage.checkContentIsNotDisplayed(testFile.entry.name); - contentServicesPage.doubleClickRow(testFolder1.entry.name); - contentServicesPage.checkContentIsDisplayed(testFile.entry.name); + await contentServicesPage.getDocumentList().rightClickOnRow(testFile.entry.name); + await contentServicesPage.pressContextMenuActionNamed('Move'); + await contentNodeSelector.checkDialogIsDisplayed(); + await contentNodeSelector.typeIntoNodeSelectorSearchField(testFolder1.entry.name); + await contentNodeSelector.clickContentNodeSelectorResult(testFolder1.entry.name); + await contentNodeSelector.clickMoveCopyButton(); + await contentServicesPage.checkContentIsNotDisplayed(testFile.entry.name); + await contentServicesPage.doubleClickRow(testFolder1.entry.name); + await contentServicesPage.checkContentIsDisplayed(testFile.entry.name); - contentServicesPage.getContentList().dataTablePage().selectRow('Display name', testFile.entry.name); - contentServicesPage.getContentList().dataTablePage().checkRowIsSelected('Display name', testFile.entry.name); - contentServicesPage.checkIsMarkedFavorite(); + await contentServicesPage.getDocumentList().dataTablePage().selectRow('Display name', testFile.entry.name); + await contentServicesPage.getDocumentList().dataTablePage().checkRowIsSelected('Display name', testFile.entry.name); + await contentServicesPage.checkIsMarkedFavorite(); }); it('[C217216] Should be able to mark and unmark multiple folders as favorite', async () => { - contentServicesPage.clickMultiSelectToggle(); - contentServicesPage.getContentList().dataTablePage().waitTillContentLoaded(); - contentServicesPage.getContentList().dataTablePage().clickCheckbox('Display name', testFolder1.entry.name); - contentServicesPage.getContentList().dataTablePage().clickCheckbox('Display name', testFolder2.entry.name); - contentServicesPage.getContentList().dataTablePage().clickCheckbox('Display name', testFolder3.entry.name); - contentServicesPage.getContentList().dataTablePage().checkRowIsSelected('Display name', testFolder1.entry.name); - contentServicesPage.getContentList().dataTablePage().checkRowIsSelected('Display name', testFolder2.entry.name); - contentServicesPage.getContentList().dataTablePage().checkRowIsSelected('Display name', testFolder3.entry.name); - expect(contentServicesPage.getContentList().dataTablePage().getNumberOfSelectedRows()).toBe(3); - contentServicesPage.clickOnFavoriteButton(); - contentServicesPage.checkIsMarkedFavorite(); + await contentServicesPage.clickMultiSelectToggle(); + await contentServicesPage.getDocumentList().dataTablePage().waitTillContentLoaded(); + await contentServicesPage.getDocumentList().dataTablePage().clickCheckbox('Display name', testFolder1.entry.name); + await contentServicesPage.getDocumentList().dataTablePage().clickCheckbox('Display name', testFolder2.entry.name); + await contentServicesPage.getDocumentList().dataTablePage().clickCheckbox('Display name', testFolder3.entry.name); + await contentServicesPage.getDocumentList().dataTablePage().checkRowIsSelected('Display name', testFolder1.entry.name); + await contentServicesPage.getDocumentList().dataTablePage().checkRowIsSelected('Display name', testFolder2.entry.name); + await contentServicesPage.getDocumentList().dataTablePage().checkRowIsSelected('Display name', testFolder3.entry.name); + await expect(await contentServicesPage.getDocumentList().dataTablePage().getNumberOfSelectedRows()).toBe(3); + await contentServicesPage.clickOnFavoriteButton(); + await contentServicesPage.checkIsMarkedFavorite(); - contentServicesPage.getContentList().dataTablePage().clickCheckbox('Display name', testFolder3.entry.name); - contentServicesPage.getContentList().dataTablePage().checkRowIsNotSelected('Display name', testFolder3.entry.name); - expect(contentServicesPage.getContentList().dataTablePage().getNumberOfSelectedRows()).toBe(2); + await contentServicesPage.getDocumentList().dataTablePage().clickCheckbox('Display name', testFolder3.entry.name); + await contentServicesPage.getDocumentList().dataTablePage().checkRowIsNotSelected('Display name', testFolder3.entry.name); + await expect(await contentServicesPage.getDocumentList().dataTablePage().getNumberOfSelectedRows()).toBe(2); - contentServicesPage.getContentList().dataTablePage().clickCheckbox('Display name', testFolder4.entry.name); - expect(contentServicesPage.getContentList().dataTablePage().getNumberOfSelectedRows()).toBe(3); - contentServicesPage.getContentList().dataTablePage().checkRowIsSelected('Display name', testFolder1.entry.name); - contentServicesPage.getContentList().dataTablePage().checkRowIsSelected('Display name', testFolder2.entry.name); - contentServicesPage.getContentList().dataTablePage().checkRowIsSelected('Display name', testFolder4.entry.name); - contentServicesPage.clickOnFavoriteButton(); - contentServicesPage.checkIsMarkedFavorite(); + await contentServicesPage.getDocumentList().dataTablePage().clickCheckbox('Display name', testFolder4.entry.name); + await expect(await contentServicesPage.getDocumentList().dataTablePage().getNumberOfSelectedRows()).toBe(3); + await contentServicesPage.getDocumentList().dataTablePage().checkRowIsSelected('Display name', testFolder1.entry.name); + await contentServicesPage.getDocumentList().dataTablePage().checkRowIsSelected('Display name', testFolder2.entry.name); + await contentServicesPage.getDocumentList().dataTablePage().checkRowIsSelected('Display name', testFolder4.entry.name); + await contentServicesPage.clickOnFavoriteButton(); + await contentServicesPage.checkIsMarkedFavorite(); - contentServicesPage.clickOnFavoriteButton(); - contentServicesPage.checkIsNotMarkedFavorite(); - contentServicesPage.getContentList().dataTablePage().checkAllRows(); - expect(contentServicesPage.getContentList().dataTablePage().getNumberOfSelectedRows()).toBeGreaterThanOrEqual(4); - contentServicesPage.getContentList().dataTablePage().uncheckAllRows(); - expect(contentServicesPage.getContentList().dataTablePage().getNumberOfSelectedRows()).toBe(0); + await contentServicesPage.clickOnFavoriteButton(); + await contentServicesPage.checkIsNotMarkedFavorite(); + await contentServicesPage.getDocumentList().dataTablePage().checkAllRows(); + await expect(await contentServicesPage.getDocumentList().dataTablePage().getNumberOfSelectedRows()).toBeGreaterThanOrEqual(4); + await contentServicesPage.getDocumentList().dataTablePage().uncheckAllRows(); + await expect(await contentServicesPage.getDocumentList().dataTablePage().getNumberOfSelectedRows()).toBe(0); - contentServicesPage.getContentList().dataTablePage().clickCheckbox('Display name', testFolder3.entry.name); - contentServicesPage.getContentList().dataTablePage().checkRowIsSelected('Display name', testFolder3.entry.name); - expect(contentServicesPage.getContentList().dataTablePage().getNumberOfSelectedRows()).toBe(1); - contentServicesPage.checkIsMarkedFavorite(); + await contentServicesPage.getDocumentList().dataTablePage().clickCheckbox('Display name', testFolder3.entry.name); + await contentServicesPage.getDocumentList().dataTablePage().checkRowIsSelected('Display name', testFolder3.entry.name); + await expect(await contentServicesPage.getDocumentList().dataTablePage().getNumberOfSelectedRows()).toBe(1); + await contentServicesPage.checkIsMarkedFavorite(); }); }); diff --git a/e2e/content-services/directives/restore-content-directive.e2e.ts b/e2e/content-services/directives/restore-content-directive.e2e.ts index 9b9e528e07..c6cc4b91a2 100644 --- a/e2e/content-services/directives/restore-content-directive.e2e.ts +++ b/e2e/content-services/directives/restore-content-directive.e2e.ts @@ -24,10 +24,10 @@ import { FileModel } from '../../models/ACS/fileModel'; import resources = require('../../util/resources'); import { NavigationBarPage } from '../../pages/adf/navigationBarPage'; import { TrashcanPage } from '../../pages/adf/trashcanPage'; -import { LoginPage, NotificationHistoryPage, StringUtil, UploadActions } from '@alfresco/adf-testing'; +import { LoginPage, NotificationHistoryPage, StringUtil, UploadActions, BrowserActions } from '@alfresco/adf-testing'; import { BreadCrumbPage } from '../../pages/adf/content-services/breadcrumb/breadCrumbPage'; -describe('Restore content directive', function () { +describe('Restore content directive', () => { const loginPage = new LoginPage(); const contentServicesPage = new ContentServicesPage(); @@ -44,18 +44,18 @@ describe('Restore content directive', function () { }); const pdfFileModel = new FileModel({ - 'name': resources.Files.ADF_DOCUMENTS.PDF.file_name, - 'location': resources.Files.ADF_DOCUMENTS.PDF.file_location + name: resources.Files.ADF_DOCUMENTS.PDF.file_name, + location: resources.Files.ADF_DOCUMENTS.PDF.file_location }); const testFileModel = new FileModel({ - 'name': resources.Files.ADF_DOCUMENTS.TEST.file_name, - 'location': resources.Files.ADF_DOCUMENTS.TEST.file_location + name: resources.Files.ADF_DOCUMENTS.TEST.file_name, + location: resources.Files.ADF_DOCUMENTS.TEST.file_location }); const pngFileModel = new FileModel({ - 'name': resources.Files.ADF_DOCUMENTS.PNG.file_name, - 'location': resources.Files.ADF_DOCUMENTS.PNG.file_location + name: resources.Files.ADF_DOCUMENTS.PNG.file_name, + location: resources.Files.ADF_DOCUMENTS.PNG.file_location }); const folderName = StringUtil.generateRandomString(5); @@ -64,7 +64,7 @@ describe('Restore content directive', function () { let folderWithContent, folderWithFolder, subFolder, subFile, testFile, restoreFile, publicSite, siteFolder, siteFile; - beforeAll(async (done) => { + beforeAll(async () => { await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); await this.alfrescoJsApi.core.peopleApi.addPerson(acsUser); await this.alfrescoJsApi.core.peopleApi.addPerson(anotherAcsUser); @@ -79,171 +79,163 @@ describe('Restore content directive', function () { restoreFile = await uploadActions.uploadFile(pngFileModel.location, pngFileModel.name, '-my-'); await loginPage.loginToContentServicesUsingUserModel(acsUser); - done(); }); afterAll(async () => { - await navigationBarPage.clickLogoutButton(); - await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); await uploadActions.deleteFileOrFolder(folderWithContent.entry.id); await uploadActions.deleteFileOrFolder(folderWithFolder.entry.id); - await this.alfrescoJsApi.core.sitesApi.deleteSite(publicSite.entry.id); }); - beforeEach(async (done) => { - navigationBarPage.clickContentServicesButton(); - contentServicesPage.waitForTableBody(); - done(); + beforeEach(async () => { + await BrowserActions.closeMenuAndDialogs(); + await navigationBarPage.clickContentServicesButton(); + await contentServicesPage.waitForTableBody(); }); - describe('Restore same name folders', function () { + describe('Restore same name folders', () => { - beforeAll(async (done) => { - navigationBarPage.clickContentServicesButton(); - contentServicesPage.waitForTableBody(); - contentServicesPage.checkContentIsDisplayed(folderName); - contentServicesPage.deleteContent(folderName); - contentServicesPage.checkContentIsNotDisplayed(folderName); - navigationBarPage.clickTrashcanButton(); - trashcanPage.waitForTableBody(); - trashcanPage.getDocumentList().dataTablePage().checkRowContentIsDisplayed(folderName); - done(); + beforeAll(async () => { + await navigationBarPage.clickContentServicesButton(); + await contentServicesPage.waitForTableBody(); + await contentServicesPage.checkContentIsDisplayed(folderName); + await contentServicesPage.deleteContent(folderName); + await contentServicesPage.checkContentIsNotDisplayed(folderName); + await navigationBarPage.clickTrashcanButton(); + await trashcanPage.waitForTableBody(); + await trashcanPage.getDocumentList().dataTablePage().checkRowContentIsDisplayed(folderName); }); it('[C260227] Should validate when restoring Folders with same name', async () => { await uploadActions.createFolder(folderName, '-my-'); - navigationBarPage.clickContentServicesButton(); - browser.refresh(); - contentServicesPage.waitForTableBody(); - contentServicesPage.checkContentIsDisplayed(folderName); - contentServicesPage.deleteContent(folderName); - contentServicesPage.checkContentIsNotDisplayed(folderName); - navigationBarPage.clickTrashcanButton(); - trashcanPage.waitForTableBody(); - trashcanPage.getDocumentList().dataTablePage().checkRowContentIsDisplayed(folderName); + await navigationBarPage.clickContentServicesButton(); + await browser.refresh(); + await contentServicesPage.waitForTableBody(); + await contentServicesPage.checkContentIsDisplayed(folderName); + await contentServicesPage.deleteContent(folderName); + await contentServicesPage.checkContentIsNotDisplayed(folderName); + await navigationBarPage.clickTrashcanButton(); + await trashcanPage.waitForTableBody(); + await trashcanPage.getDocumentList().dataTablePage().checkRowContentIsDisplayed(folderName); - trashcanPage.getDocumentList().dataTablePage().checkAllRows(); - trashcanPage.clickRestore(); - trashcanPage.getDocumentList().dataTablePage().checkRowContentIsDisplayed(folderName); - navigationBarPage.clickContentServicesButton(); - contentServicesPage.getContentList().dataTablePage().waitTillContentLoaded(); - contentServicesPage.checkContentIsDisplayed(folderName); + await trashcanPage.getDocumentList().dataTablePage().checkAllRows(); + await trashcanPage.clickRestore(); + await trashcanPage.getDocumentList().dataTablePage().checkRowContentIsDisplayed(folderName); + await navigationBarPage.clickContentServicesButton(); + await contentServicesPage.getDocumentList().dataTablePage().waitTillContentLoaded(); + await contentServicesPage.checkContentIsDisplayed(folderName); - notificationHistoryPage.checkNotifyContains('Can\'t restore, ' + folderName + ' item already exists'); + await notificationHistoryPage.checkNotifyContains('Can\'t restore, ' + folderName + ' item already exists'); }); }); it('[C260238] Should restore a file', async () => { - contentServicesPage.checkContentIsDisplayed(testFile.entry.name); - contentServicesPage.deleteContent(testFile.entry.name); - contentServicesPage.checkContentIsNotDisplayed(testFile.entry.name); - navigationBarPage.clickTrashcanButton(); - trashcanPage.waitForTableBody(); - trashcanPage.getDocumentList().dataTablePage().clickRowByContent(testFile.entry.name); - trashcanPage.getDocumentList().dataTablePage().checkRowByContentIsSelected(testFile.entry.name); - trashcanPage.clickRestore(); - trashcanPage.getDocumentList().dataTablePage().checkRowContentIsNotDisplayed(testFile.entry.name); + await contentServicesPage.checkContentIsDisplayed(testFile.entry.name); + await contentServicesPage.deleteContent(testFile.entry.name); + await contentServicesPage.checkContentIsNotDisplayed(testFile.entry.name); + await navigationBarPage.clickTrashcanButton(); + await trashcanPage.waitForTableBody(); + await trashcanPage.getDocumentList().dataTablePage().clickRowByContent(testFile.entry.name); + await trashcanPage.getDocumentList().dataTablePage().checkRowByContentIsSelected(testFile.entry.name); + await trashcanPage.clickRestore(); + await trashcanPage.getDocumentList().dataTablePage().checkRowContentIsNotDisplayed(testFile.entry.name); - navigationBarPage.clickContentServicesButton(); - contentServicesPage.waitForTableBody(); - contentServicesPage.checkContentIsDisplayed(testFile.entry.name); - contentServicesPage.deleteContent(testFile.entry.name); - contentServicesPage.checkContentIsNotDisplayed(testFile.entry.name); - navigationBarPage.clickTrashcanButton(); - trashcanPage.waitForTableBody(); - trashcanPage.getDocumentList().dataTablePage().checkRowContentIsDisplayed(testFile.entry.name); - notificationHistoryPage.checkNotifyContains(testFile.entry.name + ' item restored'); + await navigationBarPage.clickContentServicesButton(); + await contentServicesPage.waitForTableBody(); + await contentServicesPage.checkContentIsDisplayed(testFile.entry.name); + await contentServicesPage.deleteContent(testFile.entry.name); + await contentServicesPage.checkContentIsNotDisplayed(testFile.entry.name); + await navigationBarPage.clickTrashcanButton(); + await trashcanPage.waitForTableBody(); + await trashcanPage.getDocumentList().dataTablePage().checkRowContentIsDisplayed(testFile.entry.name); + await notificationHistoryPage.checkNotifyContains(testFile.entry.name + ' item restored'); }); it('[C260239] Should restore folder with content', async () => { - contentServicesPage.checkContentIsDisplayed(folderWithContent.entry.name); - contentServicesPage.deleteContent(folderWithContent.entry.name); - contentServicesPage.checkContentIsNotDisplayed(folderWithContent.entry.name); - navigationBarPage.clickTrashcanButton(); - trashcanPage.waitForTableBody(); - trashcanPage.getDocumentList().dataTablePage().clickRowByContent(folderWithContent.entry.name); - trashcanPage.getDocumentList().dataTablePage().checkRowByContentIsSelected(folderWithContent.entry.name); - trashcanPage.clickRestore(); - trashcanPage.getDocumentList().dataTablePage().checkRowContentIsNotDisplayed(folderWithContent.entry.name); + await contentServicesPage.checkContentIsDisplayed(folderWithContent.entry.name); + await contentServicesPage.deleteContent(folderWithContent.entry.name); + await contentServicesPage.checkContentIsNotDisplayed(folderWithContent.entry.name); + await navigationBarPage.clickTrashcanButton(); + await trashcanPage.waitForTableBody(); + await trashcanPage.getDocumentList().dataTablePage().clickRowByContent(folderWithContent.entry.name); + await trashcanPage.getDocumentList().dataTablePage().checkRowByContentIsSelected(folderWithContent.entry.name); + await trashcanPage.clickRestore(); + await trashcanPage.getDocumentList().dataTablePage().checkRowContentIsNotDisplayed(folderWithContent.entry.name); - navigationBarPage.clickContentServicesButton(); - contentServicesPage.waitForTableBody(); - contentServicesPage.checkContentIsDisplayed(folderWithContent.entry.name); - contentServicesPage.getContentList().dataTablePage().doubleClickRow('Display name', folderWithContent.entry.name); - contentServicesPage.checkContentIsDisplayed(subFile.entry.name); - notificationHistoryPage.checkNotifyContains(folderWithContent.entry.name + ' item restored'); + await navigationBarPage.clickContentServicesButton(); + await contentServicesPage.waitForTableBody(); + await contentServicesPage.checkContentIsDisplayed(folderWithContent.entry.name); + await contentServicesPage.getDocumentList().dataTablePage().doubleClickRow('Display name', folderWithContent.entry.name); + await contentServicesPage.checkContentIsDisplayed(subFile.entry.name); + await notificationHistoryPage.checkNotifyContains(folderWithContent.entry.name + ' item restored'); }); it('[C260240] Should validate restore when the original location no longer exists', async () => { - contentServicesPage.checkContentIsDisplayed(folderWithFolder.entry.name); - contentServicesPage.doubleClickRow(folderWithFolder.entry.name); - contentServicesPage.checkContentIsDisplayed(subFolder.entry.name); - contentServicesPage.deleteContent(subFolder.entry.name); - contentServicesPage.checkContentIsNotDisplayed(subFolder.entry.name); - breadCrumbPage.chooseBreadCrumb(acsUser.id); - contentServicesPage.waitForTableBody(); - contentServicesPage.checkContentIsDisplayed(folderWithFolder.entry.name); - contentServicesPage.deleteContent(folderWithFolder.entry.name); - contentServicesPage.checkContentIsNotDisplayed(folderWithFolder.entry.name); + await contentServicesPage.checkContentIsDisplayed(folderWithFolder.entry.name); + await contentServicesPage.doubleClickRow(folderWithFolder.entry.name); + await contentServicesPage.checkContentIsDisplayed(subFolder.entry.name); + await contentServicesPage.deleteContent(subFolder.entry.name); + await contentServicesPage.checkContentIsNotDisplayed(subFolder.entry.name); + await breadCrumbPage.chooseBreadCrumb(acsUser.id); + await contentServicesPage.waitForTableBody(); + await contentServicesPage.checkContentIsDisplayed(folderWithFolder.entry.name); + await contentServicesPage.deleteContent(folderWithFolder.entry.name); + await contentServicesPage.checkContentIsNotDisplayed(folderWithFolder.entry.name); - navigationBarPage.clickTrashcanButton(); - trashcanPage.waitForTableBody(); - trashcanPage.getDocumentList().dataTablePage().checkRowContentIsDisplayed(subFolder.entry.name); - trashcanPage.getDocumentList().dataTablePage().checkRowContentIsDisplayed(folderWithFolder.entry.name); - trashcanPage.getDocumentList().dataTablePage().clickRowByContent(subFolder.entry.name); - trashcanPage.getDocumentList().dataTablePage().checkRowByContentIsSelected(subFolder.entry.name); - trashcanPage.clickRestore(); - trashcanPage.getDocumentList().dataTablePage().checkRowContentIsDisplayed(subFolder.entry.name); - trashcanPage.getDocumentList().dataTablePage().checkRowContentIsDisplayed(folderWithFolder.entry.name); - trashcanPage.getDocumentList().dataTablePage().clickRowByContentCheckbox(subFolder.entry.name); - trashcanPage.getDocumentList().dataTablePage().checkRowByContentIsSelected(subFolder.entry.name); - trashcanPage.getDocumentList().dataTablePage().clickRowByContentCheckbox(folderWithFolder.entry.name); - trashcanPage.getDocumentList().dataTablePage().checkRowByContentIsSelected(folderWithFolder.entry.name); - trashcanPage.clickRestore(); - - navigationBarPage.clickContentServicesButton(); - contentServicesPage.waitForTableBody(); - contentServicesPage.checkContentIsDisplayed(folderWithFolder.entry.name); - contentServicesPage.doubleClickRow(folderWithFolder.entry.name); - contentServicesPage.checkContentIsDisplayed(subFolder.entry.name); - notificationHistoryPage.clickNotificationButton(); - notificationHistoryPage.checkNotificationIsPresent('Can\'t restore ' + subFolder.entry.name + ' item, the original location no longer exists'); - notificationHistoryPage.checkNotificationIsPresent('Restore successful'); - notificationHistoryPage.clickMarkAsRead(); + await navigationBarPage.clickTrashcanButton(); + await trashcanPage.waitForTableBody(); + await trashcanPage.getDocumentList().dataTablePage().checkRowContentIsDisplayed(subFolder.entry.name); + await trashcanPage.getDocumentList().dataTablePage().checkRowContentIsDisplayed(folderWithFolder.entry.name); + await trashcanPage.getDocumentList().dataTablePage().clickRowByContent(subFolder.entry.name); + await trashcanPage.getDocumentList().dataTablePage().checkRowByContentIsSelected(subFolder.entry.name); + await trashcanPage.clickRestore(); + await notificationHistoryPage.checkNotifyContains(`Can't restore ${subFolder.entry.name} item, the original location no longer exists`); + await trashcanPage.getDocumentList().dataTablePage().checkRowContentIsDisplayed(subFolder.entry.name); + await trashcanPage.getDocumentList().dataTablePage().checkRowContentIsDisplayed(folderWithFolder.entry.name); + await trashcanPage.getDocumentList().dataTablePage().clickRowByContentCheckbox(subFolder.entry.name); + await trashcanPage.getDocumentList().dataTablePage().checkRowByContentIsSelected(subFolder.entry.name); + await trashcanPage.getDocumentList().dataTablePage().clickRowByContentCheckbox(folderWithFolder.entry.name); + await trashcanPage.getDocumentList().dataTablePage().checkRowByContentIsSelected(folderWithFolder.entry.name); + await trashcanPage.clickRestore(); + await notificationHistoryPage.checkNotifyContains('Restore successful'); + await navigationBarPage.clickContentServicesButton(); + await contentServicesPage.waitForTableBody(); + await contentServicesPage.checkContentIsDisplayed(folderWithFolder.entry.name); + await contentServicesPage.doubleClickRow(folderWithFolder.entry.name); + await contentServicesPage.checkContentIsDisplayed(subFolder.entry.name); }); it('[C260241] Should display restore icon both for file and folder', async () => { - contentServicesPage.checkContentIsDisplayed(folderName); - contentServicesPage.checkContentIsDisplayed(restoreFile.entry.name); - contentServicesPage.deleteContent(folderName); - contentServicesPage.deleteContent(restoreFile.entry.name); - contentServicesPage.checkContentIsNotDisplayed(folderName); - contentServicesPage.checkContentIsNotDisplayed(restoreFile.entry.name); + await contentServicesPage.checkContentIsDisplayed(folderName); + await contentServicesPage.checkContentIsDisplayed(restoreFile.entry.name); + await contentServicesPage.deleteContent(folderName); + await contentServicesPage.deleteContent(restoreFile.entry.name); + await contentServicesPage.checkContentIsNotDisplayed(folderName); + await contentServicesPage.checkContentIsNotDisplayed(restoreFile.entry.name); - navigationBarPage.clickTrashcanButton(); - trashcanPage.waitForTableBody(); - trashcanPage.checkRestoreButtonIsNotDisplayed(); - trashcanPage.getDocumentList().dataTablePage().clickRowByContentCheckbox(folderName); - trashcanPage.getDocumentList().dataTablePage().checkRowByContentIsSelected(folderName); - trashcanPage.checkRestoreButtonIsDisplayed(); - trashcanPage.getDocumentList().dataTablePage().clickRowByContentCheckbox(folderName); - trashcanPage.getDocumentList().dataTablePage().checkRowByContentIsNotSelected(folderName); + await navigationBarPage.clickTrashcanButton(); + await trashcanPage.waitForTableBody(); + await trashcanPage.checkRestoreButtonIsNotDisplayed(); + await trashcanPage.getDocumentList().dataTablePage().clickRowByContentCheckbox(folderName); + await trashcanPage.getDocumentList().dataTablePage().checkRowByContentIsSelected(folderName); + await trashcanPage.checkRestoreButtonIsDisplayed(); + await trashcanPage.getDocumentList().dataTablePage().clickRowByContentCheckbox(folderName); + await trashcanPage.getDocumentList().dataTablePage().checkRowByContentIsNotSelected(folderName); - trashcanPage.getDocumentList().dataTablePage().clickRowByContentCheckbox(restoreFile.entry.name); - trashcanPage.getDocumentList().dataTablePage().checkRowByContentIsSelected(restoreFile.entry.name); - trashcanPage.checkRestoreButtonIsDisplayed(); + await trashcanPage.getDocumentList().dataTablePage().clickRowByContentCheckbox(restoreFile.entry.name); + await trashcanPage.getDocumentList().dataTablePage().checkRowByContentIsSelected(restoreFile.entry.name); + await trashcanPage.checkRestoreButtonIsDisplayed(); - trashcanPage.getDocumentList().dataTablePage().clickRowByContentCheckbox(folderName); - trashcanPage.getDocumentList().dataTablePage().checkRowByContentIsSelected(folderName); - trashcanPage.getDocumentList().dataTablePage().checkRowByContentIsSelected(restoreFile.entry.name); - trashcanPage.checkRestoreButtonIsDisplayed(); + await trashcanPage.getDocumentList().dataTablePage().clickRowByContentCheckbox(folderName); + await trashcanPage.getDocumentList().dataTablePage().checkRowByContentIsSelected(folderName); + await trashcanPage.getDocumentList().dataTablePage().checkRowByContentIsSelected(restoreFile.entry.name); + await trashcanPage.checkRestoreButtonIsDisplayed(); }); describe('Restore deleted library', () => { - beforeAll(async (done) => { + beforeAll(async () => { await this.alfrescoJsApi.login(acsUser.id, acsUser.password); const publicSiteName = `00${StringUtil.generateRandomString(5)}`; const publicSiteBody = { visibility: 'PUBLIC', title: publicSiteName }; @@ -251,25 +243,31 @@ describe('Restore content directive', function () { siteFolder = await uploadActions.createFolder(StringUtil.generateRandomString(5), publicSite.entry.guid); siteFile = await uploadActions.uploadFile(pngFileModel.location, pngFileModel.name, siteFolder.entry.id); await this.alfrescoJsApi.core.sitesApi.deleteSite(publicSite.entry.id); - done(); + }); + + afterAll(async () => { + try { + await this.alfrescoJsApi.core.sitesApi.deleteSite(publicSite.entry.id); + } catch (error) { + } }); it('[C260241] Should restore the deleted library along with contents inside', async () => { - navigationBarPage.clickTrashcanButton(); - trashcanPage.waitForTableBody(); - trashcanPage.getDocumentList().dataTablePage().checkRowContentIsDisplayed(publicSite.entry.id); - trashcanPage.getDocumentList().dataTablePage().clickRowByContentCheckbox(publicSite.entry.id); - trashcanPage.getDocumentList().dataTablePage().checkRowByContentIsSelected(publicSite.entry.id); - trashcanPage.clickRestore(); + await navigationBarPage.clickTrashcanButton(); + await trashcanPage.waitForTableBody(); + await trashcanPage.getDocumentList().dataTablePage().checkRowContentIsDisplayed(publicSite.entry.id); + await trashcanPage.getDocumentList().dataTablePage().clickRowByContentCheckbox(publicSite.entry.id); + await trashcanPage.getDocumentList().dataTablePage().checkRowByContentIsSelected(publicSite.entry.id); + await trashcanPage.clickRestore(); - navigationBarPage.clickContentServicesButton(); - contentServicesPage.waitForTableBody(); - contentServicesPage.selectSite(publicSite.entry.title); - contentServicesPage.waitForTableBody(); - contentServicesPage.checkContentIsDisplayed(siteFolder.entry.name); - contentServicesPage.doubleClickRow(siteFolder.entry.name); - contentServicesPage.checkContentIsDisplayed(siteFile.entry.name); - notificationHistoryPage.checkNotifyContains(publicSite.entry.id + ' item restored'); + await navigationBarPage.clickContentServicesButton(); + await contentServicesPage.waitForTableBody(); + await contentServicesPage.selectSite(publicSite.entry.title); + await contentServicesPage.waitForTableBody(); + await contentServicesPage.checkContentIsDisplayed(siteFolder.entry.name); + await contentServicesPage.doubleClickRow(siteFolder.entry.name); + await contentServicesPage.checkContentIsDisplayed(siteFile.entry.name); + await notificationHistoryPage.checkNotifyContains(publicSite.entry.id + ' item restored'); }); }); @@ -278,7 +276,7 @@ describe('Restore content directive', function () { let parentFolder, folderWithin, pdfFile, pngFile, mainFile, mainFolder; - beforeAll(async (done) => { + beforeAll(async () => { await this.alfrescoJsApi.login(anotherAcsUser.id, anotherAcsUser.password); await uploadActions.createFolder(folderName, '-my-'); parentFolder = await uploadActions.createFolder(StringUtil.generateRandomString(5), '-my-'); @@ -289,45 +287,43 @@ describe('Restore content directive', function () { mainFolder = await uploadActions.createFolder(StringUtil.generateRandomString(5), '-my-'); await loginPage.loginToContentServicesUsingUserModel(anotherAcsUser); - contentServicesPage.goToDocumentList(); - contentServicesPage.waitForTableBody(); - done(); + await contentServicesPage.goToDocumentList(); + await contentServicesPage.waitForTableBody(); }); - afterAll(async (done) => { + afterAll(async () => { await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); await uploadActions.deleteFileOrFolder(parentFolder.entry.id); await uploadActions.deleteFileOrFolder(mainFolder.entry.id); await uploadActions.deleteFileOrFolder(mainFile.entry.id); - done(); }); it('[C216431] Should restore hierarchy of folders', async () => { - contentServicesPage.deleteContent(parentFolder.entry.name); - contentServicesPage.deleteContent(mainFolder.entry.name); - contentServicesPage.deleteContent(mainFile.entry.name); + await contentServicesPage.deleteContent(parentFolder.entry.name); + await contentServicesPage.deleteContent(mainFolder.entry.name); + await contentServicesPage.deleteContent(mainFile.entry.name); - navigationBarPage.clickTrashcanButton(); - trashcanPage.waitForTableBody(); - trashcanPage.checkRestoreButtonIsNotDisplayed(); - trashcanPage.getDocumentList().dataTablePage().clickRowByContentCheckbox(parentFolder.entry.name); - trashcanPage.getDocumentList().dataTablePage().checkRowByContentIsSelected(parentFolder.entry.name); - trashcanPage.getDocumentList().dataTablePage().clickRowByContentCheckbox(mainFolder.entry.name); - trashcanPage.getDocumentList().dataTablePage().checkRowByContentIsSelected(mainFolder.entry.name); - trashcanPage.getDocumentList().dataTablePage().clickRowByContentCheckbox(mainFile.entry.name); - trashcanPage.getDocumentList().dataTablePage().checkRowByContentIsSelected(mainFile.entry.name); - trashcanPage.clickRestore(); + await navigationBarPage.clickTrashcanButton(); + await trashcanPage.waitForTableBody(); + await trashcanPage.checkRestoreButtonIsNotDisplayed(); + await trashcanPage.getDocumentList().dataTablePage().clickRowByContentCheckbox(parentFolder.entry.name); + await trashcanPage.getDocumentList().dataTablePage().checkRowByContentIsSelected(parentFolder.entry.name); + await trashcanPage.getDocumentList().dataTablePage().clickRowByContentCheckbox(mainFolder.entry.name); + await trashcanPage.getDocumentList().dataTablePage().checkRowByContentIsSelected(mainFolder.entry.name); + await trashcanPage.getDocumentList().dataTablePage().clickRowByContentCheckbox(mainFile.entry.name); + await trashcanPage.getDocumentList().dataTablePage().checkRowByContentIsSelected(mainFile.entry.name); + await trashcanPage.clickRestore(); - navigationBarPage.clickContentServicesButton(); - contentServicesPage.waitForTableBody(); - contentServicesPage.checkContentIsDisplayed(parentFolder.entry.name); - contentServicesPage.checkContentIsDisplayed(mainFolder.entry.name); - contentServicesPage.checkContentIsDisplayed(mainFile.entry.name); - contentServicesPage.doubleClickRow(parentFolder.entry.name); - contentServicesPage.checkContentIsDisplayed(folderWithin.entry.name); - contentServicesPage.doubleClickRow(folderWithin.entry.name); - contentServicesPage.checkContentIsDisplayed(pdfFile.entry.name); - contentServicesPage.checkContentIsDisplayed(pngFile.entry.name); + await navigationBarPage.clickContentServicesButton(); + await contentServicesPage.waitForTableBody(); + await contentServicesPage.checkContentIsDisplayed(parentFolder.entry.name); + await contentServicesPage.checkContentIsDisplayed(mainFolder.entry.name); + await contentServicesPage.checkContentIsDisplayed(mainFile.entry.name); + await contentServicesPage.doubleClickRow(parentFolder.entry.name); + await contentServicesPage.checkContentIsDisplayed(folderWithin.entry.name); + await contentServicesPage.doubleClickRow(folderWithin.entry.name); + await contentServicesPage.checkContentIsDisplayed(pdfFile.entry.name); + await contentServicesPage.checkContentIsDisplayed(pngFile.entry.name); }); }); diff --git a/e2e/content-services/document-list/document-list-actions.e2e.ts b/e2e/content-services/document-list/document-list-actions.e2e.ts index e2558eac7f..7a13ff530e 100644 --- a/e2e/content-services/document-list/document-list-actions.e2e.ts +++ b/e2e/content-services/document-list/document-list-actions.e2e.ts @@ -16,7 +16,13 @@ */ import { browser, by, element } from 'protractor'; -import { LoginPage, PaginationPage, UploadActions, StringUtil, ContentNodeSelectorDialogPage } from '@alfresco/adf-testing'; +import { + LoginPage, + PaginationPage, + UploadActions, + StringUtil, + ContentNodeSelectorDialogPage +} from '@alfresco/adf-testing'; import { ContentServicesPage } from '../../pages/adf/contentServicesPage'; import { NavigationBarPage } from '../../pages/adf/navigationBarPage'; import { AcsUserModel } from '../../models/ACS/acsUserModel'; @@ -56,12 +62,12 @@ describe('Document List Component - Actions', () => { const nrOfFiles = 5; const pdfFileModel = new FileModel({ - 'name': resources.Files.ADF_DOCUMENTS.PDF.file_name, - 'location': resources.Files.ADF_DOCUMENTS.PDF.file_location + name: resources.Files.ADF_DOCUMENTS.PDF.file_name, + location: resources.Files.ADF_DOCUMENTS.PDF.file_location }); const testFileModel = new FileModel({ - 'name': resources.Files.ADF_DOCUMENTS.TEST.file_name, - 'location': resources.Files.ADF_DOCUMENTS.TEST.file_location + name: resources.Files.ADF_DOCUMENTS.TEST.file_name, + location: resources.Files.ADF_DOCUMENTS.TEST.file_location }); const files = { @@ -69,7 +75,7 @@ describe('Document List Component - Actions', () => { extension: '.txt' }; - beforeAll(async (done) => { + beforeAll(async () => { acsUser = new AcsUserModel(); folderName = `TATSUMAKY_${StringUtil.generateRandomString(5)}_SENPOUKYAKU`; await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); @@ -85,150 +91,149 @@ describe('Document List Component - Actions', () => { await loginPage.loginToContentServicesUsingUserModel(acsUser); - browser.driver.sleep(12000); - done(); + await browser.sleep(10000); + }); afterAll(async () => { await navigationBarPage.clickLogoutButton(); }); - beforeEach(async(done) => { + beforeEach(async () => { await navigationBarPage.clickContentServicesButton(); - done(); }); describe('File Actions', () => { - it('[C213257] Should be able to copy a file', () => { - contentServicesPage.checkContentIsDisplayed(pdfUploadedNode.entry.name); - contentServicesPage.getDocumentList().rightClickOnRow(pdfFileModel.name); - contentServicesPage.pressContextMenuActionNamed('Copy'); - contentNodeSelector.checkDialogIsDisplayed(); - contentNodeSelector.typeIntoNodeSelectorSearchField(folderName); - contentNodeSelector.clickContentNodeSelectorResult(folderName); - contentNodeSelector.clickMoveCopyButton(); - contentServicesPage.checkContentIsDisplayed(pdfFileModel.name); - contentServicesPage.doubleClickRow(uploadedFolder.entry.name); - contentServicesPage.checkContentIsDisplayed(pdfFileModel.name); + it('[C213257] Should be able to copy a file', async () => { + await contentServicesPage.checkContentIsDisplayed(pdfUploadedNode.entry.name); + await contentServicesPage.getDocumentList().rightClickOnRow(pdfFileModel.name); + await contentServicesPage.pressContextMenuActionNamed('Copy'); + await contentNodeSelector.checkDialogIsDisplayed(); + await contentNodeSelector.typeIntoNodeSelectorSearchField(folderName); + await contentNodeSelector.clickContentNodeSelectorResult(folderName); + await contentNodeSelector.clickMoveCopyButton(); + await contentServicesPage.checkContentIsDisplayed(pdfFileModel.name); + await contentServicesPage.doubleClickRow(uploadedFolder.entry.name); + await contentServicesPage.checkContentIsDisplayed(pdfFileModel.name); }); - it('[C260131] Copy - Destination picker search', () => { - contentServicesPage.checkContentIsDisplayed(pdfFileModel.name); - contentServicesPage.getDocumentList().rightClickOnRow(pdfFileModel.name); - contentServicesPage.pressContextMenuActionNamed('Copy'); - contentNodeSelector.checkDialogIsDisplayed(); - contentNodeSelector.typeIntoNodeSelectorSearchField(folderName); - contentNodeSelector.contentListPage().dataTablePage().checkCellByHighlightContent(folderName); - contentNodeSelector.clickCancelButton(); - contentNodeSelector.checkDialogIsNotDisplayed(); + it('[C260131] Copy - Destination picker search', async () => { + await contentServicesPage.checkContentIsDisplayed(pdfFileModel.name); + await contentServicesPage.getDocumentList().rightClickOnRow(pdfFileModel.name); + await contentServicesPage.pressContextMenuActionNamed('Copy'); + await contentNodeSelector.checkDialogIsDisplayed(); + await contentNodeSelector.typeIntoNodeSelectorSearchField(folderName); + await contentNodeSelector.contentListPage().dataTablePage().checkCellByHighlightContent(folderName); + await contentNodeSelector.clickCancelButton(); + await contentNodeSelector.checkDialogIsNotDisplayed(); }); - it('[C297491] Should be able to move a file', () => { - contentServicesPage.checkContentIsDisplayed(testFileModel.name); + it('[C297491] Should be able to move a file', async () => { + await contentServicesPage.checkContentIsDisplayed(testFileModel.name); - contentServicesPage.getDocumentList().rightClickOnRow(testFileModel.name); - contentServicesPage.pressContextMenuActionNamed('Move'); - contentNodeSelector.checkDialogIsDisplayed(); - contentNodeSelector.typeIntoNodeSelectorSearchField(folderName); - contentNodeSelector.clickContentNodeSelectorResult(folderName); - contentNodeSelector.clickMoveCopyButton(); - contentServicesPage.checkContentIsNotDisplayed(testFileModel.name); - contentServicesPage.doubleClickRow(uploadedFolder.entry.name); - contentServicesPage.checkContentIsDisplayed(testFileModel.name); + await contentServicesPage.getDocumentList().rightClickOnRow(testFileModel.name); + await contentServicesPage.pressContextMenuActionNamed('Move'); + await contentNodeSelector.checkDialogIsDisplayed(); + await contentNodeSelector.typeIntoNodeSelectorSearchField(folderName); + await contentNodeSelector.clickContentNodeSelectorResult(folderName); + await contentNodeSelector.clickMoveCopyButton(); + await contentServicesPage.checkContentIsNotDisplayed(testFileModel.name); + await contentServicesPage.doubleClickRow(uploadedFolder.entry.name); + await contentServicesPage.checkContentIsDisplayed(testFileModel.name); }); - it('[C260127] Move - Destination picker search', () => { - contentServicesPage.checkContentIsDisplayed(pdfFileModel.name); - contentServicesPage.getDocumentList().rightClickOnRow(pdfFileModel.name); - contentServicesPage.pressContextMenuActionNamed('Move'); - contentNodeSelector.checkDialogIsDisplayed(); - contentNodeSelector.typeIntoNodeSelectorSearchField(folderName); - contentNodeSelector.contentListPage().dataTablePage().checkCellByHighlightContent(folderName); - contentNodeSelector.clickCancelButton(); - contentNodeSelector.checkDialogIsNotDisplayed(); + it('[C260127] Move - Destination picker search', async () => { + await contentServicesPage.checkContentIsDisplayed(pdfFileModel.name); + await contentServicesPage.getDocumentList().rightClickOnRow(pdfFileModel.name); + await contentServicesPage.pressContextMenuActionNamed('Move'); + await contentNodeSelector.checkDialogIsDisplayed(); + await contentNodeSelector.typeIntoNodeSelectorSearchField(folderName); + await contentNodeSelector.contentListPage().dataTablePage().checkCellByHighlightContent(folderName); + await contentNodeSelector.clickCancelButton(); + await contentNodeSelector.checkDialogIsNotDisplayed(); }); - it('[C280561] Should be able to delete a file via dropdown menu', () => { - contentServicesPage.doubleClickRow(uploadedFolder.entry.name); + it('[C280561] Should be able to delete a file via dropdown menu', async () => { + await contentServicesPage.doubleClickRow(uploadedFolder.entry.name); - contentServicesPage.checkContentIsDisplayed(fileNames[0]); - contentServicesPage.deleteContent(fileNames[0]); - contentServicesPage.checkContentIsNotDisplayed(fileNames[0]); + await contentServicesPage.checkContentIsDisplayed(fileNames[0]); + await contentServicesPage.deleteContent(fileNames[0]); + await contentServicesPage.checkContentIsNotDisplayed(fileNames[0]); }); - it('[C280562] Only one file is deleted when multiple files are selected using dropdown menu', () => { - contentServicesPage.doubleClickRow(uploadedFolder.entry.name); + it('[C280562] Only one file is deleted when multiple files are selected using dropdown menu', async () => { + await contentServicesPage.doubleClickRow(uploadedFolder.entry.name); - contentListPage.selectRow(fileNames[1]); - contentListPage.selectRow(fileNames[2]); - contentServicesPage.deleteContent(fileNames[1]); - contentServicesPage.checkContentIsNotDisplayed(fileNames[1]); - contentServicesPage.checkContentIsDisplayed(fileNames[2]); + await contentServicesPage.getDocumentList().selectRow(fileNames[1]); + await contentServicesPage.getDocumentList().selectRow(fileNames[2]); + await contentServicesPage.deleteContent(fileNames[1]); + await contentServicesPage.checkContentIsNotDisplayed(fileNames[1]); + await contentServicesPage.checkContentIsDisplayed(fileNames[2]); }); - it('[C280565] Should be able to delete a file using context menu', () => { - contentServicesPage.doubleClickRow(uploadedFolder.entry.name); - - contentListPage.rightClickOnRow(fileNames[2]); - contentServicesPage.pressContextMenuActionNamed('Delete'); - contentServicesPage.checkContentIsNotDisplayed(fileNames[2]); + it('[C280565] Should be able to delete a file using context menu', async () => { + await contentServicesPage.doubleClickRow(uploadedFolder.entry.name); + await contentServicesPage.checkContentIsDisplayed(fileNames[2]); + await contentServicesPage.getDocumentList().rightClickOnRow(fileNames[2]); + await contentServicesPage.pressContextMenuActionNamed('Delete'); + await contentServicesPage.checkContentIsNotDisplayed(fileNames[2]); }); - it('[C280567] Only one file is deleted when multiple files are selected using context menu', () => { - contentServicesPage.doubleClickRow(uploadedFolder.entry.name); + it('[C280567] Only one file is deleted when multiple files are selected using context menu', async () => { + await contentServicesPage.doubleClickRow(uploadedFolder.entry.name); - contentListPage.selectRow(fileNames[3]); - contentListPage.selectRow(fileNames[4]); - contentListPage.rightClickOnRow(fileNames[3]); - contentServicesPage.pressContextMenuActionNamed('Delete'); - contentServicesPage.checkContentIsNotDisplayed(fileNames[3]); - contentServicesPage.checkContentIsDisplayed(fileNames[4]); + await contentServicesPage.getDocumentList().selectRow(fileNames[3]); + await contentServicesPage.getDocumentList().selectRow(fileNames[4]); + await contentServicesPage.getDocumentList().rightClickOnRow(fileNames[3]); + await contentServicesPage.pressContextMenuActionNamed('Delete'); + await contentServicesPage.checkContentIsNotDisplayed(fileNames[3]); + await contentServicesPage.checkContentIsDisplayed(fileNames[4]); }); - it('[C280566] Should be able to open context menu with right click', () => { - contentServicesPage.getDocumentList().rightClickOnRow(pdfFileModel.name); - contentServicesPage.checkContextActionIsVisible('Download'); - contentServicesPage.checkContextActionIsVisible('Copy'); - contentServicesPage.checkContextActionIsVisible('Move'); - contentServicesPage.checkContextActionIsVisible('Delete'); - contentServicesPage.checkContextActionIsVisible('Info'); - contentServicesPage.checkContextActionIsVisible('Manage versions'); - contentServicesPage.checkContextActionIsVisible('Permission'); - contentServicesPage.checkContextActionIsVisible('Lock'); - contentServicesPage.closeActionContext(); + it('[C280566] Should be able to open context menu with right click', async () => { + await contentServicesPage.getDocumentList().rightClickOnRow(pdfFileModel.name); + await contentServicesPage.checkContextActionIsVisible('Download'); + await contentServicesPage.checkContextActionIsVisible('Copy'); + await contentServicesPage.checkContextActionIsVisible('Move'); + await contentServicesPage.checkContextActionIsVisible('Delete'); + await contentServicesPage.checkContextActionIsVisible('Info'); + await contentServicesPage.checkContextActionIsVisible('Manage versions'); + await contentServicesPage.checkContextActionIsVisible('Permission'); + await contentServicesPage.checkContextActionIsVisible('Lock'); + await contentServicesPage.closeActionContext(); }); }); describe('Folder Actions', () => { - it('[C260138] Should be able to copy a folder', () => { - contentServicesPage.copyContent(folderName); - contentNodeSelector.checkDialogIsDisplayed(); - contentNodeSelector.typeIntoNodeSelectorSearchField(secondUploadedFolder.entry.name); - contentNodeSelector.clickContentNodeSelectorResult(secondUploadedFolder.entry.name); - contentNodeSelector.clickMoveCopyButton(); - contentServicesPage.checkContentIsDisplayed(folderName); - contentServicesPage.doubleClickRow(secondUploadedFolder.entry.name); - contentServicesPage.checkContentIsDisplayed(folderName); + it('[C260138] Should be able to copy a folder', async () => { + await contentServicesPage.copyContent(folderName); + await contentNodeSelector.checkDialogIsDisplayed(); + await contentNodeSelector.typeIntoNodeSelectorSearchField(secondUploadedFolder.entry.name); + await contentNodeSelector.clickContentNodeSelectorResult(secondUploadedFolder.entry.name); + await contentNodeSelector.clickMoveCopyButton(); + await contentServicesPage.checkContentIsDisplayed(folderName); + await contentServicesPage.doubleClickRow(secondUploadedFolder.entry.name); + await contentServicesPage.checkContentIsDisplayed(folderName); }); - it('[C260123] Should be able to delete a folder using context menu', () => { - contentServicesPage.deleteContent(folderName); - contentServicesPage.checkContentIsNotDisplayed(folderName); + it('[C260123] Should be able to delete a folder using context menu', async () => { + await contentServicesPage.deleteContent(folderName); + await contentServicesPage.checkContentIsNotDisplayed(folderName); }); - it('[C280568] Should be able to open context menu with right click', () => { - contentServicesPage.checkContentIsDisplayed(secondUploadedFolder.entry.name); + it('[C280568] Should be able to open context menu with right click', async () => { + await contentServicesPage.checkContentIsDisplayed(secondUploadedFolder.entry.name); - contentListPage.rightClickOnRow(secondUploadedFolder.entry.name); - contentServicesPage.checkContextActionIsVisible('Download'); - contentServicesPage.checkContextActionIsVisible('Copy'); - contentServicesPage.checkContextActionIsVisible('Move'); - contentServicesPage.checkContextActionIsVisible('Delete'); - contentServicesPage.checkContextActionIsVisible('Info'); - contentServicesPage.checkContextActionIsVisible('Permission'); + await contentServicesPage.getDocumentList().rightClickOnRow(secondUploadedFolder.entry.name); + await contentServicesPage.checkContextActionIsVisible('Download'); + await contentServicesPage.checkContextActionIsVisible('Copy'); + await contentServicesPage.checkContextActionIsVisible('Move'); + await contentServicesPage.checkContextActionIsVisible('Delete'); + await contentServicesPage.checkContextActionIsVisible('Info'); + await contentServicesPage.checkContextActionIsVisible('Permission'); }); }); @@ -236,19 +241,19 @@ describe('Document List Component - Actions', () => { describe('Folder Actions - Copy and Move', () => { - const folderModel1 = new FolderModel({'name': StringUtil.generateRandomString()}); - const folderModel2 = new FolderModel({'name': StringUtil.generateRandomString()}); - const folderModel3 = new FolderModel({'name': StringUtil.generateRandomString()}); - const folderModel4 = new FolderModel({'name': StringUtil.generateRandomString()}); - const folderModel5 = new FolderModel({'name': StringUtil.generateRandomString()}); - const folderModel6 = new FolderModel({'name': StringUtil.generateRandomString()}); + const folderModel1 = new FolderModel({ name: StringUtil.generateRandomString() }); + const folderModel2 = new FolderModel({ name: StringUtil.generateRandomString() }); + const folderModel3 = new FolderModel({ name: StringUtil.generateRandomString() }); + const folderModel4 = new FolderModel({ name: StringUtil.generateRandomString() }); + const folderModel5 = new FolderModel({ name: StringUtil.generateRandomString() }); + const folderModel6 = new FolderModel({ name: StringUtil.generateRandomString() }); let folder1, folder2, folder3, folder4, folder5, folder6; let folders; const contentServicesUser = new AcsUserModel(); - beforeAll(async (done) => { + beforeAll(async () => { await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); await this.alfrescoJsApi.core.peopleApi.addPerson(contentServicesUser); @@ -260,118 +265,121 @@ describe('Document List Component - Actions', () => { folder5 = await uploadActions.createFolder('E' + folderModel5.name, '-my-'); folder6 = await uploadActions.createFolder('F' + folderModel6.name, '-my-'); folders = [folder1, folder2, folder3, folder4, folder5, folder6]; - done(); + }); - beforeEach(async (done) => { - loginPage.loginToContentServicesUsingUserModel(contentServicesUser); - contentServicesPage.goToDocumentList(); - contentServicesPage.waitForTableBody(); - paginationPage.selectItemsPerPage('5'); - contentServicesPage.checkAcsContainer(); - contentListPage.waitForTableBody(); - done(); + beforeEach(async () => { + await loginPage.loginToContentServicesUsingUserModel(contentServicesUser); + await contentServicesPage.goToDocumentList(); + await contentServicesPage.waitForTableBody(); + await paginationPage.selectItemsPerPage('5'); + await contentServicesPage.checkAcsContainer(); + await contentListPage.waitForTableBody(); + }); - afterAll(async (done) => { + afterAll(async () => { await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); - await folders.forEach(function (folder) { - uploadActions.deleteFileOrFolder(folder.entry.id); - }); - done(); - }); - - it('[C260132] Move action on folder with - Load more', () => { - - expect(paginationPage.getCurrentItemsPerPage()).toEqual('5'); - expect(paginationPage.getPaginationRange()).toEqual('Showing 1-' + 5 + ' of ' + 6); - contentListPage.rightClickOnRow('A' + folderModel1.name); - contentServicesPage.checkContextActionIsVisible('Move'); - contentServicesPage.pressContextMenuActionNamed('Move'); - contentNodeSelector.checkDialogIsDisplayed(); - expect(contentNodeSelector.getDialogHeaderText()).toBe('Move \'' + 'A' + folderModel1.name + '\' to...'); - contentNodeSelector.checkSearchInputIsDisplayed(); - expect(contentNodeSelector.getSearchLabel()).toBe('Search'); - contentNodeSelector.checkSelectedSiteIsDisplayed('My files'); - contentNodeSelector.checkCancelButtonIsDisplayed(); - contentNodeSelector.checkMoveCopyButtonIsDisplayed(); - expect(contentNodeSelector.getMoveCopyButtonText()).toBe('MOVE'); - expect(contentNodeSelector.numberOfResultsDisplayed()).toBe(5); - infinitePaginationPage.clickLoadMoreButton(); - expect(contentNodeSelector.numberOfResultsDisplayed()).toBe(6); - infinitePaginationPage.checkLoadMoreButtonIsNotDisplayed(); - contentNodeSelector.contentListPage().dataTablePage().selectRowByContent('F' + folderModel6.name); - contentNodeSelector.contentListPage().dataTablePage().checkRowByContentIsSelected('F' + folderModel6.name); - contentNodeSelector.clickCancelButton(); - contentNodeSelector.checkDialogIsNotDisplayed(); - contentServicesPage.checkContentIsDisplayed('A' + folderModel1.name); - - contentListPage.rightClickOnRow('A' + folderModel1.name); - contentServicesPage.checkContextActionIsVisible('Move'); - contentServicesPage.pressContextMenuActionNamed('Move'); - contentNodeSelector.checkDialogIsDisplayed(); - infinitePaginationPage.clickLoadMoreButton(); - contentNodeSelector.contentListPage().dataTablePage().selectRowByContent('F' + folderModel6.name); - contentNodeSelector.contentListPage().dataTablePage().checkRowByContentIsSelected('F' + folderModel6.name); - contentNodeSelector.clickMoveCopyButton(); - contentServicesPage.checkContentIsNotDisplayed('A' + folderModel1.name); - contentServicesPage.doubleClickRow('F' + folderModel6.name); - contentServicesPage.checkContentIsDisplayed('A' + folderModel1.name); - - contentListPage.rightClickOnRow('A' + folderModel1.name); - contentServicesPage.checkContextActionIsVisible('Move'); - contentServicesPage.pressContextMenuActionNamed('Move'); - contentNodeSelector.checkDialogIsDisplayed(); - breadCrumbDropdownPage.clickParentFolder(); - breadCrumbDropdownPage.checkBreadCrumbDropdownIsDisplayed(); - breadCrumbDropdownPage.choosePath(contentServicesUser.id); - contentNodeSelector.clickMoveCopyButton(); - contentServicesPage.checkContentIsNotDisplayed('A' + folderModel1.name); - - breadCrumbPage.chooseBreadCrumb(contentServicesUser.id); - contentServicesPage.waitForTableBody(); - contentServicesPage.checkContentIsDisplayed('A' + folderModel1.name); + for (const folder of folders) { + await uploadActions.deleteFileOrFolder(folder.entry.id); + } }); - it('[C305051] Copy action on folder with - Load more', () => { + it('[C260132] Move action on folder with - Load more', async () => { - expect(paginationPage.getCurrentItemsPerPage()).toEqual('5'); - expect(paginationPage.getPaginationRange()).toEqual('Showing 1-' + 5 + ' of ' + 6); - contentListPage.rightClickOnRow('A' + folderModel1.name); - contentServicesPage.checkContextActionIsVisible('Copy'); - contentServicesPage.pressContextMenuActionNamed('Copy'); - contentNodeSelector.checkDialogIsDisplayed(); - expect(contentNodeSelector.getDialogHeaderText()).toBe('Copy \'' + 'A' + folderModel1.name + '\' to...'); - contentNodeSelector.checkSearchInputIsDisplayed(); - expect(contentNodeSelector.getSearchLabel()).toBe('Search'); - contentNodeSelector.checkSelectedSiteIsDisplayed('My files'); - contentNodeSelector.checkCancelButtonIsDisplayed(); - contentNodeSelector.checkMoveCopyButtonIsDisplayed(); - expect(contentNodeSelector.getMoveCopyButtonText()).toBe('COPY'); - expect(contentNodeSelector.numberOfResultsDisplayed()).toBe(5); - infinitePaginationPage.clickLoadMoreButton(); - expect(contentNodeSelector.numberOfResultsDisplayed()).toBe(6); - infinitePaginationPage.checkLoadMoreButtonIsNotDisplayed(); - contentNodeSelector.contentListPage().dataTablePage().selectRowByContent('F' + folderModel6.name); - contentNodeSelector.contentListPage().dataTablePage().checkRowByContentIsSelected('F' + folderModel6.name); - contentNodeSelector.clickCancelButton(); - contentNodeSelector.checkDialogIsNotDisplayed(); - contentServicesPage.checkContentIsDisplayed('A' + folderModel1.name); + await expect(await paginationPage.getCurrentItemsPerPage()).toEqual('5'); + await expect(await paginationPage.getPaginationRange()).toEqual('Showing 1-' + 5 + ' of ' + 6); - contentListPage.rightClickOnRow('A' + folderModel1.name); - contentServicesPage.checkContextActionIsVisible('Copy'); - contentServicesPage.pressContextMenuActionNamed('Copy'); - contentNodeSelector.checkDialogIsDisplayed(); - infinitePaginationPage.clickLoadMoreButton(); - contentNodeSelector.contentListPage().dataTablePage().selectRowByContent('F' + folderModel6.name); - contentNodeSelector.contentListPage().dataTablePage().checkRowByContentIsSelected('F' + folderModel6.name); - contentNodeSelector.clickMoveCopyButton(); - contentServicesPage.checkContentIsDisplayed('A' + folderModel1.name); - paginationPage.clickOnNextPage(); - contentListPage.waitForTableBody(); - contentServicesPage.doubleClickRow('F' + folderModel6.name); - contentServicesPage.checkContentIsDisplayed('A' + folderModel1.name); + await contentServicesPage.getDocumentList().rightClickOnRow('A' + folderModel1.name); + await contentServicesPage.checkContextActionIsVisible('Move'); + await contentServicesPage.pressContextMenuActionNamed('Move'); + await contentNodeSelector.checkDialogIsDisplayed(); + + await expect(await contentNodeSelector.getDialogHeaderText()).toBe('Move \'' + 'A' + folderModel1.name + '\' to...'); + await contentNodeSelector.checkSearchInputIsDisplayed(); + await expect(await contentNodeSelector.getSearchLabel()).toBe('Search'); + await contentNodeSelector.checkSelectedSiteIsDisplayed('My files'); + await contentNodeSelector.checkCancelButtonIsDisplayed(); + await contentNodeSelector.checkMoveCopyButtonIsDisplayed(); + + await expect(await contentNodeSelector.getMoveCopyButtonText()).toBe('MOVE'); + await expect(await contentNodeSelector.numberOfResultsDisplayed()).toBe(5); + await infinitePaginationPage.clickLoadMoreButton(); + + await expect(await contentNodeSelector.numberOfResultsDisplayed()).toBe(6); + await infinitePaginationPage.checkLoadMoreButtonIsNotDisplayed(); + await contentNodeSelector.contentListPage().dataTablePage().selectRowByContent('F' + folderModel6.name); + await contentNodeSelector.contentListPage().dataTablePage().checkRowByContentIsSelected('F' + folderModel6.name); + await contentNodeSelector.clickCancelButton(); + await contentNodeSelector.checkDialogIsNotDisplayed(); + await contentServicesPage.checkContentIsDisplayed('A' + folderModel1.name); + + await contentServicesPage.getDocumentList().rightClickOnRow('A' + folderModel1.name); + await contentServicesPage.checkContextActionIsVisible('Move'); + await contentServicesPage.pressContextMenuActionNamed('Move'); + await contentNodeSelector.checkDialogIsDisplayed(); + await infinitePaginationPage.clickLoadMoreButton(); + await contentNodeSelector.contentListPage().dataTablePage().selectRowByContent('F' + folderModel6.name); + await contentNodeSelector.contentListPage().dataTablePage().checkRowByContentIsSelected('F' + folderModel6.name); + await contentNodeSelector.clickMoveCopyButton(); + await contentServicesPage.checkContentIsNotDisplayed('A' + folderModel1.name); + await contentServicesPage.doubleClickRow('F' + folderModel6.name); + await contentServicesPage.checkContentIsDisplayed('A' + folderModel1.name); + + await contentServicesPage.getDocumentList().rightClickOnRow('A' + folderModel1.name); + await contentServicesPage.checkContextActionIsVisible('Move'); + await contentServicesPage.pressContextMenuActionNamed('Move'); + await contentNodeSelector.checkDialogIsDisplayed(); + await breadCrumbDropdownPage.clickParentFolder(); + await breadCrumbDropdownPage.checkBreadCrumbDropdownIsDisplayed(); + await breadCrumbDropdownPage.choosePath(contentServicesUser.id); + await contentNodeSelector.clickMoveCopyButton(); + await contentServicesPage.checkContentIsNotDisplayed('A' + folderModel1.name); + + await breadCrumbPage.chooseBreadCrumb(contentServicesUser.id); + await contentServicesPage.waitForTableBody(); + await contentServicesPage.checkContentIsDisplayed('A' + folderModel1.name); + }); + + it('[C305051] Copy action on folder with - Load more', async () => { + + await expect(await paginationPage.getCurrentItemsPerPage()).toEqual('5'); + await expect(await paginationPage.getPaginationRange()).toEqual('Showing 1-' + 5 + ' of ' + 6); + await contentServicesPage.getDocumentList().rightClickOnRow('A' + folderModel1.name); + await contentServicesPage.checkContextActionIsVisible('Copy'); + await contentServicesPage.pressContextMenuActionNamed('Copy'); + await contentNodeSelector.checkDialogIsDisplayed(); + await expect(await contentNodeSelector.getDialogHeaderText()).toBe('Copy \'' + 'A' + folderModel1.name + '\' to...'); + await contentNodeSelector.checkSearchInputIsDisplayed(); + await expect(await contentNodeSelector.getSearchLabel()).toBe('Search'); + await contentNodeSelector.checkSelectedSiteIsDisplayed('My files'); + await contentNodeSelector.checkCancelButtonIsDisplayed(); + await contentNodeSelector.checkMoveCopyButtonIsDisplayed(); + await expect(await contentNodeSelector.getMoveCopyButtonText()).toBe('COPY'); + await expect(await contentNodeSelector.numberOfResultsDisplayed()).toBe(5); + await infinitePaginationPage.clickLoadMoreButton(); + await expect(await contentNodeSelector.numberOfResultsDisplayed()).toBe(6); + await infinitePaginationPage.checkLoadMoreButtonIsNotDisplayed(); + await contentNodeSelector.contentListPage().dataTablePage().selectRowByContent('F' + folderModel6.name); + await contentNodeSelector.contentListPage().dataTablePage().checkRowByContentIsSelected('F' + folderModel6.name); + await contentNodeSelector.clickCancelButton(); + await contentNodeSelector.checkDialogIsNotDisplayed(); + await contentServicesPage.checkContentIsDisplayed('A' + folderModel1.name); + + await contentServicesPage.getDocumentList().rightClickOnRow('A' + folderModel1.name); + await contentServicesPage.checkContextActionIsVisible('Copy'); + await contentServicesPage.pressContextMenuActionNamed('Copy'); + await contentNodeSelector.checkDialogIsDisplayed(); + await infinitePaginationPage.clickLoadMoreButton(); + await contentNodeSelector.contentListPage().dataTablePage().selectRowByContent('F' + folderModel6.name); + await contentNodeSelector.contentListPage().dataTablePage().checkRowByContentIsSelected('F' + folderModel6.name); + await contentNodeSelector.clickMoveCopyButton(); + await contentServicesPage.checkContentIsDisplayed('A' + folderModel1.name); + await paginationPage.clickOnNextPage(); + await contentServicesPage.getDocumentList().waitForTableBody(); + await contentServicesPage.doubleClickRow('F' + folderModel6.name); + await contentServicesPage.checkContentIsDisplayed('A' + folderModel1.name); }); diff --git a/e2e/content-services/document-list/document-list-component.e2e.ts b/e2e/content-services/document-list/document-list-component.e2e.ts index adc08746e2..ac4785e191 100644 --- a/e2e/content-services/document-list/document-list-component.e2e.ts +++ b/e2e/content-services/document-list/document-list-component.e2e.ts @@ -38,7 +38,7 @@ describe('Document List Component', () => { let acsUser = null; let testFileNode, pdfBFileNode; - afterEach(async (done) => { + afterEach(async () => { await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); if (uploadedFolder) { await uploadActions.deleteFileOrFolder(uploadedFolder.entry.id); @@ -56,32 +56,32 @@ describe('Document List Component', () => { await uploadActions.deleteFileOrFolder(pdfBFileNode.entry.id); pdfBFileNode = null; } - done(); + }); describe('Custom Column', () => { let folderName; const pdfFileModel = new FileModel({ - 'name': resources.Files.ADF_DOCUMENTS.PDF.file_name, - 'location': resources.Files.ADF_DOCUMENTS.PDF.file_location + name: resources.Files.ADF_DOCUMENTS.PDF.file_name, + location: resources.Files.ADF_DOCUMENTS.PDF.file_location }); const docxFileModel = new FileModel({ - 'name': resources.Files.ADF_DOCUMENTS.DOCX.file_name, - 'location': resources.Files.ADF_DOCUMENTS.DOCX.file_location + name: resources.Files.ADF_DOCUMENTS.DOCX.file_name, + location: resources.Files.ADF_DOCUMENTS.DOCX.file_location }); const timeAgoFileModel = new FileModel({ - 'name': resources.Files.ADF_DOCUMENTS.TEST.file_name, - 'location': resources.Files.ADF_DOCUMENTS.TEST.file_location + name: resources.Files.ADF_DOCUMENTS.TEST.file_name, + location: resources.Files.ADF_DOCUMENTS.TEST.file_location }); const mediumFileModel = new FileModel({ - 'name': resources.Files.ADF_DOCUMENTS.PDF_B.file_name, - 'location': resources.Files.ADF_DOCUMENTS.PDF_B.file_location + name: resources.Files.ADF_DOCUMENTS.PDF_B.file_name, + location: resources.Files.ADF_DOCUMENTS.PDF_B.file_location }); let pdfUploadedNode, docxUploadedNode, timeAgoUploadedNode, mediumDateUploadedNode; - beforeAll(async (done) => { + beforeAll(async () => { acsUser = new AcsUserModel(); @@ -96,10 +96,10 @@ describe('Document List Component', () => { uploadedFolder = await uploadActions.createFolder(folderName, '-my-'); pdfUploadedNode = await uploadActions.uploadFile(pdfFileModel.location, pdfFileModel.name, '-my-'); docxUploadedNode = await uploadActions.uploadFile(docxFileModel.location, docxFileModel.name, '-my-'); - done(); + }); - afterAll(async (done) => { + afterAll(async () => { await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); if (pdfUploadedNode) { @@ -114,71 +114,71 @@ describe('Document List Component', () => { if (mediumDateUploadedNode) { await uploadActions.deleteFileOrFolder(mediumDateUploadedNode.entry.id); } - done(); + }); - beforeEach(async (done) => { + beforeEach(async () => { await loginPage.loginToContentServicesUsingUserModel(acsUser); - done(); + }); - it('[C279926] Should only display the user\'s files and folders', () => { - contentServicesPage.goToDocumentList(); - contentServicesPage.checkContentIsDisplayed(folderName); - contentServicesPage.checkContentIsDisplayed(pdfFileModel.name); - contentServicesPage.checkContentIsDisplayed(docxFileModel.name); - expect(contentServicesPage.getDocumentListRowNumber()).toBe(4); + it('[C279926] Should only display the user\'s files and folders', async () => { + await contentServicesPage.goToDocumentList(); + await contentServicesPage.checkContentIsDisplayed(folderName); + await contentServicesPage.checkContentIsDisplayed(pdfFileModel.name); + await contentServicesPage.checkContentIsDisplayed(docxFileModel.name); + await expect(await contentServicesPage.getDocumentListRowNumber()).toBe(4); }); - it('[C279927] Should display default columns', () => { - contentServicesPage.goToDocumentList(); - contentServicesPage.checkColumnNameHeader(); - contentServicesPage.checkColumnSizeHeader(); - contentServicesPage.checkColumnCreatedByHeader(); - contentServicesPage.checkColumnCreatedHeader(); + it('[C279927] Should display default columns', async () => { + await contentServicesPage.goToDocumentList(); + await contentServicesPage.checkColumnNameHeader(); + await contentServicesPage.checkColumnSizeHeader(); + await contentServicesPage.checkColumnCreatedByHeader(); + await contentServicesPage.checkColumnCreatedHeader(); }); - it('[C279928] Should be able to display date with timeAgo', async (done) => { + it('[C279928] Should be able to display date with timeAgo', async () => { await this.alfrescoJsApi.login(acsUser.id, acsUser.password); timeAgoUploadedNode = await uploadActions.uploadFile(timeAgoFileModel.location, timeAgoFileModel.name, '-my-'); - contentServicesPage.goToDocumentList(); - const dateValue = contentServicesPage.getColumnValueForRow(timeAgoFileModel.name, 'Created'); - expect(dateValue).toMatch(/(ago|few)/); - done(); + await contentServicesPage.goToDocumentList(); + const dateValue = await contentServicesPage.getColumnValueForRow(timeAgoFileModel.name, 'Created'); + await expect(dateValue).toMatch(/(ago|few)/); + }); - it('[C279929] Should be able to display the date with date type', async (done) => { + it('[C279929] Should be able to display the date with date type', async () => { await this.alfrescoJsApi.login(acsUser.id, acsUser.password); mediumDateUploadedNode = await uploadActions.uploadFile(mediumFileModel.location, mediumFileModel.name, '-my-'); const createdDate = moment(mediumDateUploadedNode.createdAt).format('ll'); - contentServicesPage.goToDocumentList(); - contentServicesPage.enableMediumTimeFormat(); - const dateValue = contentServicesPage.getColumnValueForRow(mediumFileModel.name, 'Created'); - expect(dateValue).toContain(createdDate); - done(); + await contentServicesPage.goToDocumentList(); + await contentServicesPage.enableMediumTimeFormat(); + const dateValue = await contentServicesPage.getColumnValueForRow(mediumFileModel.name, 'Created'); + await expect(dateValue).toContain(createdDate); + }); }); describe('Column Sorting', () => { const fakeFileA = new FileModel({ - 'name': 'A', - 'location': resources.Files.ADF_DOCUMENTS.TEST.file_location + name: 'A', + location: resources.Files.ADF_DOCUMENTS.TEST.file_location }); const fakeFileB = new FileModel({ - 'name': 'B', - 'location': resources.Files.ADF_DOCUMENTS.TEST.file_location + name: 'B', + location: resources.Files.ADF_DOCUMENTS.TEST.file_location }); const fakeFileC = new FileModel({ - 'name': 'C', - 'location': resources.Files.ADF_DOCUMENTS.TEST.file_location + name: 'C', + location: resources.Files.ADF_DOCUMENTS.TEST.file_location }); let fileANode, fileBNode, fileCNode; - beforeAll(async (done) => { + beforeAll(async () => { const user = new AcsUserModel(); @@ -192,12 +192,11 @@ describe('Document List Component', () => { fileCNode = await uploadActions.uploadFile(fakeFileC.location, fakeFileC.name, '-my-'); await loginPage.loginToContentServicesUsingUserModel(user); - contentServicesPage.goToDocumentList(); + await contentServicesPage.goToDocumentList(); - done(); }); - afterAll(async (done) => { + afterAll(async () => { await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); if (fileANode) { await uploadActions.deleteFileOrFolder(fileANode.entry.id); @@ -208,53 +207,53 @@ describe('Document List Component', () => { if (fileCNode) { await uploadActions.deleteFileOrFolder(fileCNode.entry.id); } - done(); + }); - it('[C260112] Should be able to sort by name (Ascending)', () => { - expect(contentServicesPage.sortAndCheckListIsOrderedByName('asc')).toBe(true, 'List is not sorted.'); + it('[C260112] Should be able to sort by name (Ascending)', async () => { + await expect(await contentServicesPage.sortAndCheckListIsOrderedByName('asc')).toBe(true, 'List is not sorted.'); }); - it('[C272770] Should be able to sort by name (Descending)', () => { - expect(contentServicesPage.sortAndCheckListIsOrderedByName('desc')).toBe(true, 'List is not sorted.'); + it('[C272770] Should be able to sort by name (Descending)', async () => { + await expect(await contentServicesPage.sortAndCheckListIsOrderedByName('desc')).toBe(true, 'List is not sorted.'); }); - it('[C272771] Should be able to sort by author (Ascending)', () => { - expect(contentServicesPage.sortAndCheckListIsOrderedByAuthor('asc')).toBe(true, 'List is not sorted.'); + it('[C272771] Should be able to sort by author (Ascending)', async () => { + await expect(await contentServicesPage.sortAndCheckListIsOrderedByAuthor('asc')).toBe(true, 'List is not sorted.'); }); - it('[C272772] Should be able to sort by author (Descending)', () => { - expect(contentServicesPage.sortAndCheckListIsOrderedByAuthor('desc')).toBe(true, 'List is not sorted.'); + it('[C272772] Should be able to sort by author (Descending)', async () => { + await expect(await contentServicesPage.sortAndCheckListIsOrderedByAuthor('desc')).toBe(true, 'List is not sorted.'); }); - it('[C272773] Should be able to sort by date (Ascending)', () => { - expect(contentServicesPage.sortAndCheckListIsOrderedByCreated('asc')).toBe(true, 'List is not sorted.'); + it('[C272773] Should be able to sort by date (Ascending)', async () => { + await expect(await contentServicesPage.sortAndCheckListIsOrderedByCreated('asc')).toBe(true, 'List is not sorted.'); }); - it('[C272774] Should be able to sort by date (Descending)', () => { - expect(contentServicesPage.sortAndCheckListIsOrderedByCreated('desc')).toBe(true, 'List is not sorted.'); + it('[C272774] Should be able to sort by date (Descending)', async () => { + await expect(await contentServicesPage.sortAndCheckListIsOrderedByCreated('desc')).toBe(true, 'List is not sorted.'); }); }); - it('[C279959] Should display empty folder state for new folders', async (done) => { + it('[C279959] Should display empty folder state for new folders', async () => { acsUser = new AcsUserModel(); const folderName = 'BANANA'; await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); await this.alfrescoJsApi.core.peopleApi.addPerson(acsUser); await loginPage.loginToContentServicesUsingUserModel(acsUser); - contentServicesPage.goToDocumentList(); - contentServicesPage.createNewFolder(folderName); - contentServicesPage.doubleClickRow(folderName); - contentServicesPage.checkEmptyFolderTextToBe('This folder is empty'); - contentServicesPage.checkEmptyFolderImageUrlToContain('/assets/images/empty_doc_lib.svg'); - done(); + await contentServicesPage.goToDocumentList(); + await contentServicesPage.createNewFolder(folderName); + await contentServicesPage.doubleClickRow(folderName); + await contentServicesPage.checkEmptyFolderTextToBe('This folder is empty'); + await contentServicesPage.checkEmptyFolderImageUrlToContain('/assets/images/empty_doc_lib.svg'); + }); - it('[C272775] Should be able to upload a file in new folder', async (done) => { + it('[C272775] Should be able to upload a file in new folder', async () => { const testFile = new FileModel({ - 'name': resources.Files.ADF_DOCUMENTS.TEST.file_name, - 'location': resources.Files.ADF_DOCUMENTS.TEST.file_location + name: resources.Files.ADF_DOCUMENTS.TEST.file_name, + location: resources.Files.ADF_DOCUMENTS.TEST.file_location }); acsUser = new AcsUserModel(); /* cspell:disable-next-line */ @@ -264,30 +263,30 @@ describe('Document List Component', () => { await this.alfrescoJsApi.login(acsUser.id, acsUser.password); uploadedFolder = await uploadActions.createFolder(folderName, '-my-'); await loginPage.loginToContentServicesUsingUserModel(acsUser); - contentServicesPage.goToDocumentList(); - contentServicesPage.checkContentIsDisplayed(uploadedFolder.entry.name); - contentServicesPage.doubleClickRow(uploadedFolder.entry.name); - contentServicesPage.uploadFile(testFile.location); - contentServicesPage.checkContentIsDisplayed(testFile.name); - done(); + await contentServicesPage.goToDocumentList(); + await contentServicesPage.checkContentIsDisplayed(uploadedFolder.entry.name); + await contentServicesPage.doubleClickRow(uploadedFolder.entry.name); + await contentServicesPage.uploadFile(testFile.location); + await contentServicesPage.checkContentIsDisplayed(testFile.name); + }); - it('[C261997] Should be able to clean Recent Files history', async (done) => { + it('[C261997] Should be able to clean Recent Files history', async () => { acsUser = new AcsUserModel(); await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); await this.alfrescoJsApi.core.peopleApi.addPerson(acsUser); await loginPage.loginToContentServicesUsingUserModel(acsUser); - contentServicesPage.clickOnContentServices(); - contentServicesPage.checkRecentFileToBeShowed(); + await contentServicesPage.clickOnContentServices(); + await contentServicesPage.checkRecentFileToBeShowed(); const icon = await contentServicesPage.getRecentFileIcon(); - expect(icon).toBe('history'); - contentServicesPage.expandRecentFiles(); - contentServicesPage.checkEmptyRecentFileIsDisplayed(); - contentServicesPage.closeRecentFiles(); - done(); + await expect(icon).toBe('history'); + await contentServicesPage.expandRecentFiles(); + await contentServicesPage.checkEmptyRecentFileIsDisplayed(); + await contentServicesPage.closeRecentFiles(); + }); - it('[C279970] Should display Islocked field for folders', async (done) => { + it('[C279970] Should display Islocked field for folders', async () => { acsUser = new AcsUserModel(); const folderNameA = `MEESEEKS_${StringUtil.generateRandomString(5)}_LOOK_AT_ME`; const folderNameB = `MEESEEKS_${StringUtil.generateRandomString(5)}_LOOK_AT_ME`; @@ -297,22 +296,22 @@ describe('Document List Component', () => { uploadedFolder = await uploadActions.createFolder(folderNameA, '-my-'); uploadedFolderExtra = await uploadActions.createFolder(folderNameB, '-my-'); await loginPage.loginToContentServicesUsingUserModel(acsUser); - contentServicesPage.goToDocumentList(); - contentServicesPage.checkContentIsDisplayed(folderNameA); - contentServicesPage.checkContentIsDisplayed(folderNameB); - contentServicesPage.checkLockIsDisplayedForElement(folderNameA); - contentServicesPage.checkLockIsDisplayedForElement(folderNameB); - done(); + await contentServicesPage.goToDocumentList(); + await contentServicesPage.checkContentIsDisplayed(folderNameA); + await contentServicesPage.checkContentIsDisplayed(folderNameB); + await contentServicesPage.checkLockIsDisplayedForElement(folderNameA); + await contentServicesPage.checkLockIsDisplayedForElement(folderNameB); + }); - it('[C269086] Should display Islocked field for files', async (done) => { + it('[C269086] Should display Islocked field for files', async () => { const testFileA = new FileModel({ - 'name': resources.Files.ADF_DOCUMENTS.TEST.file_name, - 'location': resources.Files.ADF_DOCUMENTS.TEST.file_location + name: resources.Files.ADF_DOCUMENTS.TEST.file_name, + location: resources.Files.ADF_DOCUMENTS.TEST.file_location }); const testFileB = new FileModel({ - 'name': resources.Files.ADF_DOCUMENTS.PDF_B.file_name, - 'location': resources.Files.ADF_DOCUMENTS.PDF_B.file_location + name: resources.Files.ADF_DOCUMENTS.PDF_B.file_name, + location: resources.Files.ADF_DOCUMENTS.PDF_B.file_location }); acsUser = new AcsUserModel(); await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); @@ -321,19 +320,19 @@ describe('Document List Component', () => { testFileNode = await uploadActions.uploadFile(testFileA.location, testFileA.name, '-my-'); pdfBFileNode = await uploadActions.uploadFile(testFileB.location, testFileB.name, '-my-'); await loginPage.loginToContentServicesUsingUserModel(acsUser); - contentServicesPage.goToDocumentList(); - contentServicesPage.checkContentIsDisplayed(testFileA.name); - contentServicesPage.checkContentIsDisplayed(testFileB.name); - contentServicesPage.checkLockIsDisplayedForElement(testFileA.name); - contentServicesPage.checkLockIsDisplayedForElement(testFileB.name); - done(); + await contentServicesPage.goToDocumentList(); + await contentServicesPage.checkContentIsDisplayed(testFileA.name); + await contentServicesPage.checkContentIsDisplayed(testFileB.name); + await contentServicesPage.checkLockIsDisplayedForElement(testFileA.name); + await contentServicesPage.checkLockIsDisplayedForElement(testFileB.name); + }); describe('Once uploaded 20 folders', () => { let folderCreated; - beforeAll(async (done) => { + beforeAll(async () => { acsUser = new AcsUserModel(); folderCreated = []; await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); @@ -346,22 +345,19 @@ describe('Document List Component', () => { folder = await uploadActions.createFolder(folderName, '-my-'); folderCreated.push(folder); } - done(); }); - afterAll(async (done) => { - Promise.all(folderCreated.map((folder) => - uploadActions.deleteFileOrFolder(folder.entry.id) - )).then(() => { - done(); - }); + afterAll(async () => { + for (let i = 0; i <= folderCreated.length; i++) { + await uploadActions.deleteFileOrFolder(folderCreated[i].entry.id); + } }); - it('[C277093] Should sort files with Items per page set to default', async (done) => { + it('[C277093] Should sort files with Items per page set to default', async () => { await loginPage.loginToContentServicesUsingUserModel(acsUser); - contentServicesPage.goToDocumentList(); - contentServicesPage.checkListIsSortedByNameColumn('asc'); - done(); + await contentServicesPage.goToDocumentList(); + await contentServicesPage.checkListIsSortedByNameColumn('asc'); + }); }); @@ -369,14 +365,14 @@ describe('Document List Component', () => { describe('Column Template', () => { const file0BytesModel = new FileModel({ - 'name': resources.Files.ADF_DOCUMENTS.TXT_0B.file_name, - 'location': resources.Files.ADF_DOCUMENTS.TXT_0B.file_location + name: resources.Files.ADF_DOCUMENTS.TXT_0B.file_name, + location: resources.Files.ADF_DOCUMENTS.TXT_0B.file_location }); let file; const viewer = new ViewerPage(); - beforeAll(async (done) => { + beforeAll(async () => { acsUser = new AcsUserModel(); await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); await this.alfrescoJsApi.core.peopleApi.addPerson(acsUser); @@ -384,16 +380,16 @@ describe('Document List Component', () => { file = await uploadActions.uploadFile(file0BytesModel.location, file0BytesModel.name, '-my-'); await loginPage.loginToContentServicesUsingUserModel(acsUser); - contentServicesPage.goToDocumentList() - .waitForTableBody(); - done(); + await contentServicesPage.goToDocumentList(); + await contentServicesPage.waitForTableBody(); + }); - it('[C291843] Should be able to navigate using nodes hyperlink when activated', () => { - contentServicesPage.clickHyperlinkNavigationToggle() - .checkFileHyperlinkIsEnabled(file.entry.name) - .clickFileHyperlink(file.entry.name); - viewer.checkFileIsLoaded(); + it('[C291843] Should be able to navigate using nodes hyperlink when activated', async () => { + await contentServicesPage.clickHyperlinkNavigationToggle(); + await contentServicesPage.checkFileHyperlinkIsEnabled(file.entry.name); + await contentServicesPage.clickFileHyperlink(file.entry.name); + await viewer.checkFileIsLoaded(); }); }); }); diff --git a/e2e/content-services/document-list/document-list-copy-move-actions.e2e.ts b/e2e/content-services/document-list/document-list-copy-move-actions.e2e.ts index 39fa4b7278..37161de136 100644 --- a/e2e/content-services/document-list/document-list-copy-move-actions.e2e.ts +++ b/e2e/content-services/document-list/document-list-copy-move-actions.e2e.ts @@ -50,16 +50,16 @@ describe('Document List Component', () => { let folderName, sameNameFolder; const pdfFileModel = new FileModel({ - 'name': resources.Files.ADF_DOCUMENTS.PDF.file_name, - 'location': resources.Files.ADF_DOCUMENTS.PDF.file_location + name: resources.Files.ADF_DOCUMENTS.PDF.file_name, + location: resources.Files.ADF_DOCUMENTS.PDF.file_location }); const testFileModel = new FileModel({ - 'name': resources.Files.ADF_DOCUMENTS.TEST.file_name, - 'location': resources.Files.ADF_DOCUMENTS.TEST.file_location + name: resources.Files.ADF_DOCUMENTS.TEST.file_name, + location: resources.Files.ADF_DOCUMENTS.TEST.file_location }); - beforeAll(async (done) => { + beforeAll(async () => { acsUser = new AcsUserModel(); anotherAcsUser = new AcsUserModel(); folderName = StringUtil.generateRandomString(5); @@ -90,131 +90,129 @@ describe('Document List Component', () => { } }); - browser.driver.sleep(12000); - done(); + await browser.driver.sleep(12000); + }); - afterAll(async (done) => { + afterAll(async () => { await navigationBarPage.clickLogoutButton(); - try { - await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); - await uploadActions.deleteFileOrFolder(uploadedFolder.entry.id); - await uploadActions.deleteFileOrFolder(uploadedFile.entry.id); - await uploadActions.deleteFileOrFolder(sourceFolder.entry.id); - await uploadActions.deleteFileOrFolder(destinationFolder.entry.id); - } catch (error) { - // tslint:disable-next-line:no-console - console.log('Error delete file or folder' + error); - } - done(); + await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); + await uploadActions.deleteFileOrFolder(uploadedFolder.entry.id); + await uploadActions.deleteFileOrFolder(uploadedFile.entry.id); + await uploadActions.deleteFileOrFolder(sourceFolder.entry.id); + await uploadActions.deleteFileOrFolder(destinationFolder.entry.id); + }); describe('Document List Component - Actions Move and Copy', () => { - beforeEach(async (done) => { + beforeAll(async () => { await loginPage.loginToContentServicesUsingUserModel(acsUser); - navigationBarPage.clickContentServicesButton(); - done(); }); - it('[C260128] Move - Same name file', () => { - contentServicesPage.checkContentIsDisplayed(pdfFileModel.name); - contentServicesPage.getDocumentList().rightClickOnRow(pdfFileModel.name); - contentServicesPage.pressContextMenuActionNamed('Move'); - contentNodeSelector.checkDialogIsDisplayed(); - contentNodeSelector.typeIntoNodeSelectorSearchField(folderName); - contentNodeSelector.clickContentNodeSelectorResult(folderName); - contentNodeSelector.clickMoveCopyButton(); - notificationHistoryPage.checkNotifyContains('This name is already in use, try a different name.'); + beforeEach(async () => { + await BrowserActions.closeMenuAndDialogs(); + await navigationBarPage.clickContentServicesButton(); + }); - it('[C260134] Move - folder with subfolder and file within it', () => { - contentServicesPage.checkContentIsDisplayed(destinationFolder.entry.name); - contentServicesPage.checkContentIsDisplayed(sourceFolder.entry.name); - contentServicesPage.getDocumentList().rightClickOnRow(sourceFolder.entry.name); - contentServicesPage.pressContextMenuActionNamed('Move'); - contentNodeSelector.checkDialogIsDisplayed(); - contentNodeSelector.typeIntoNodeSelectorSearchField(destinationFolder.entry.name); - contentNodeSelector.clickContentNodeSelectorResult(destinationFolder.entry.name); - contentNodeSelector.clickMoveCopyButton(); - contentServicesPage.checkContentIsNotDisplayed(sourceFolder.entry.name); - contentServicesPage.doubleClickRow(destinationFolder.entry.name); - contentServicesPage.checkContentIsDisplayed(sourceFolder.entry.name); - contentServicesPage.doubleClickRow(sourceFolder.entry.name); - contentServicesPage.checkContentIsDisplayed(subFolder.entry.name); - contentServicesPage.doubleClickRow(subFolder.entry.name); - contentServicesPage.checkContentIsDisplayed(subFile.entry.name); + it('[C260128] Move - Same name file', async () => { + await contentServicesPage.checkContentIsDisplayed(pdfFileModel.name); + await contentServicesPage.getDocumentList().rightClickOnRow(pdfFileModel.name); + await contentServicesPage.pressContextMenuActionNamed('Move'); + await contentNodeSelector.checkDialogIsDisplayed(); + await contentNodeSelector.typeIntoNodeSelectorSearchField(folderName); + await contentNodeSelector.clickContentNodeSelectorResult(folderName); + await contentNodeSelector.clickMoveCopyButton(); + await notificationHistoryPage.checkNotifyContains('This name is already in use, try a different name.'); }); - it('[C260135] Move - Same name folder', () => { - contentServicesPage.checkContentIsDisplayed(duplicateFolderName.entry.name); - contentServicesPage.getDocumentList().rightClickOnRow(duplicateFolderName.entry.name); - contentServicesPage.pressContextMenuActionNamed('Move'); - contentNodeSelector.checkDialogIsDisplayed(); - contentNodeSelector.typeIntoNodeSelectorSearchField(sourceFolder.entry.name); - contentNodeSelector.clickContentNodeSelectorResult(sourceFolder.entry.name); - contentNodeSelector.clickMoveCopyButton(); - notificationHistoryPage.checkNotifyContains('This name is already in use, try a different name.'); + it('[C260134] Move - folder with subfolder and file within it', async () => { + await contentServicesPage.checkContentIsDisplayed(destinationFolder.entry.name); + await contentServicesPage.checkContentIsDisplayed(sourceFolder.entry.name); + await contentServicesPage.getDocumentList().rightClickOnRow(sourceFolder.entry.name); + await contentServicesPage.pressContextMenuActionNamed('Move'); + await contentNodeSelector.checkDialogIsDisplayed(); + await contentNodeSelector.typeIntoNodeSelectorSearchField(destinationFolder.entry.name); + await contentNodeSelector.clickContentNodeSelectorResult(destinationFolder.entry.name); + await contentNodeSelector.clickMoveCopyButton(); + await contentServicesPage.checkContentIsNotDisplayed(sourceFolder.entry.name); + await contentServicesPage.doubleClickRow(destinationFolder.entry.name); + await contentServicesPage.checkContentIsDisplayed(sourceFolder.entry.name); + await contentServicesPage.doubleClickRow(sourceFolder.entry.name); + await contentServicesPage.checkContentIsDisplayed(subFolder.entry.name); + await contentServicesPage.doubleClickRow(subFolder.entry.name); + await contentServicesPage.checkContentIsDisplayed(subFile.entry.name); }); - it('[C260129] Copy - Same name file', () => { - contentServicesPage.checkContentIsDisplayed(pdfFileModel.name); - contentServicesPage.getDocumentList().rightClickOnRow(pdfFileModel.name); - contentServicesPage.pressContextMenuActionNamed('Copy'); - contentNodeSelector.checkDialogIsDisplayed(); - contentNodeSelector.typeIntoNodeSelectorSearchField(folderName); - contentNodeSelector.clickContentNodeSelectorResult(folderName); - contentNodeSelector.clickMoveCopyButton(); - notificationHistoryPage.checkNotifyContains('This name is already in use, try a different name.'); + it('[C260135] Move - Same name folder', async () => { + await contentServicesPage.checkContentIsDisplayed(duplicateFolderName.entry.name); + await contentServicesPage.getDocumentList().rightClickOnRow(duplicateFolderName.entry.name); + await contentServicesPage.pressContextMenuActionNamed('Move'); + await contentNodeSelector.checkDialogIsDisplayed(); + await contentNodeSelector.typeIntoNodeSelectorSearchField(sourceFolder.entry.name); + await contentNodeSelector.clickContentNodeSelectorResult(sourceFolder.entry.name); + await contentNodeSelector.clickMoveCopyButton(); + await notificationHistoryPage.checkNotifyContains('This name is already in use, try a different name.'); }); - it('[C260136] Copy - Same name folder', () => { - contentServicesPage.checkContentIsDisplayed(duplicateFolderName.entry.name); - contentServicesPage.getDocumentList().rightClickOnRow(duplicateFolderName.entry.name); - contentServicesPage.pressContextMenuActionNamed('Copy'); - contentNodeSelector.checkDialogIsDisplayed(); - contentNodeSelector.typeIntoNodeSelectorSearchField(sourceFolder.entry.name); - contentNodeSelector.clickContentNodeSelectorResult(sourceFolder.entry.name); - contentNodeSelector.clickMoveCopyButton(); - notificationHistoryPage.checkNotifyContains('This name is already in use, try a different name.'); + it('[C260129] Copy - Same name file', async () => { + await contentServicesPage.checkContentIsDisplayed(pdfFileModel.name); + await contentServicesPage.getDocumentList().rightClickOnRow(pdfFileModel.name); + await contentServicesPage.pressContextMenuActionNamed('Copy'); + await contentNodeSelector.checkDialogIsDisplayed(); + await contentNodeSelector.typeIntoNodeSelectorSearchField(folderName); + await contentNodeSelector.clickContentNodeSelectorResult(folderName); + await contentNodeSelector.clickMoveCopyButton(); + await notificationHistoryPage.checkNotifyContains('This name is already in use, try a different name.'); + }); + + it('[C260136] Copy - Same name folder', async () => { + await contentServicesPage.checkContentIsDisplayed(duplicateFolderName.entry.name); + await contentServicesPage.getDocumentList().rightClickOnRow(duplicateFolderName.entry.name); + await contentServicesPage.pressContextMenuActionNamed('Copy'); + await contentNodeSelector.checkDialogIsDisplayed(); + await contentNodeSelector.typeIntoNodeSelectorSearchField(sourceFolder.entry.name); + await contentNodeSelector.clickContentNodeSelectorResult(sourceFolder.entry.name); + await contentNodeSelector.clickMoveCopyButton(); + await notificationHistoryPage.checkNotifyContains('This name is already in use, try a different name.'); }); }); describe('Document List actionns - Move, Copy on no permission folder', () => { - beforeAll((done) => { - loginPage.loginToContentServicesUsingUserModel(anotherAcsUser); - BrowserActions.getUrl(browser.params.testConfig.adf.url + '/files/' + sourceFolder.entry.id); - contentServicesPage.getDocumentList().dataTablePage().waitTillContentLoaded(); - done(); + beforeAll(async () => { + await loginPage.loginToContentServicesUsingUserModel(anotherAcsUser); + await BrowserActions.getUrl(`${browser.params.testConfig.adf.url}/files/${sourceFolder.entry.id}`); + await contentServicesPage.getDocumentList().dataTablePage().waitTillContentLoaded(); }); - it('[C260133] Move - no permission folder', () => { - contentServicesPage.checkContentIsDisplayed(subFolder.entry.name); - contentServicesPage.getDocumentList().rightClickOnRow(subFolder.entry.name); - contentServicesPage.checkContextActionIsVisible('Move'); - expect(contentServicesPage.checkContentActionIsEnabled('Move')).toBe(false); - contentServicesPage.closeActionContext(); + it('[C260133] Move - no permission folder', async () => { + await contentServicesPage.checkContentIsDisplayed(subFolder.entry.name); + await contentServicesPage.getDocumentList().rightClickOnRow(subFolder.entry.name); + await contentServicesPage.checkContextActionIsVisible('Move'); + await expect(await contentServicesPage.isContextActionEnabled('Move')).toBe(false); + await contentServicesPage.closeActionContext(); }); - it('[C260140] Copy - No permission folder', () => { - contentServicesPage.checkContentIsDisplayed(subFolder.entry.name); - contentServicesPage.checkContentIsDisplayed(copyFolder.entry.name); - contentServicesPage.getDocumentList().rightClickOnRow(copyFolder.entry.name); - contentServicesPage.checkContextActionIsVisible('Copy'); - expect(contentServicesPage.checkContentActionIsEnabled('Copy')).toBe(true); - contentServicesPage.pressContextMenuActionNamed('Copy'); - contentNodeSelector.checkDialogIsDisplayed(); - contentNodeSelector.contentListPage().dataTablePage().checkRowContentIsDisplayed(subFolder.entry.name); - contentNodeSelector.contentListPage().dataTablePage().checkRowContentIsDisabled(subFolder.entry.name); - contentNodeSelector.clickContentNodeSelectorResult(subFolder.entry.name); - contentNodeSelector.contentListPage().dataTablePage().checkRowByContentIsSelected(subFolder.entry.name); - expect(contentNodeSelector.checkCopyMoveButtonIsEnabled()).toBe(false); - contentNodeSelector.contentListPage().dataTablePage().doubleClickRowByContent(subFolder.entry.name); - contentNodeSelector.contentListPage().dataTablePage().waitTillContentLoaded(); - contentNodeSelector.contentListPage().dataTablePage().checkRowContentIsDisplayed(subFolder2.entry.name); + it('[C260140] Copy - No permission folder', async () => { + await contentServicesPage.checkContentIsDisplayed(subFolder.entry.name); + await contentServicesPage.checkContentIsDisplayed(copyFolder.entry.name); + await contentServicesPage.getDocumentList().rightClickOnRow(copyFolder.entry.name); + await contentServicesPage.checkContextActionIsVisible('Copy'); + await expect(await contentServicesPage.isContextActionEnabled('Copy')).toBe(true); + await contentServicesPage.pressContextMenuActionNamed('Copy'); + await contentNodeSelector.checkDialogIsDisplayed(); + await contentNodeSelector.contentListPage().dataTablePage().checkRowContentIsDisplayed(subFolder.entry.name); + await contentNodeSelector.contentListPage().dataTablePage().checkRowContentIsDisabled(subFolder.entry.name); + await contentNodeSelector.clickContentNodeSelectorResult(subFolder.entry.name); + await contentNodeSelector.contentListPage().dataTablePage().checkRowByContentIsSelected(subFolder.entry.name); + await expect(await contentNodeSelector.checkCopyMoveButtonIsEnabled()).toBe(false); + await contentNodeSelector.contentListPage().dataTablePage().doubleClickRowByContent(subFolder.entry.name); + await contentNodeSelector.contentListPage().dataTablePage().waitTillContentLoaded(); + await contentNodeSelector.contentListPage().dataTablePage().checkRowContentIsDisplayed(subFolder2.entry.name); }); }); diff --git a/e2e/content-services/document-list/document-list-gallery.e2e.ts b/e2e/content-services/document-list/document-list-gallery.e2e.ts index ecc55f5b10..0caddcc5c2 100644 --- a/e2e/content-services/document-list/document-list-gallery.e2e.ts +++ b/e2e/content-services/document-list/document-list-gallery.e2e.ts @@ -34,7 +34,6 @@ describe('Document List Component', () => { }); const uploadActions = new UploadActions(this.alfrescoJsApi); let acsUser = null; - const navBar = new NavigationBarPage(); const navigationBarPage = new NavigationBarPage(); describe('Gallery View', () => { @@ -50,23 +49,23 @@ describe('Document List Component', () => { let funnyUser; const pdfFile = new FileModel({ - 'name': resources.Files.ADF_DOCUMENTS.PDF.file_name, - 'location': resources.Files.ADF_DOCUMENTS.PDF.file_location + name: resources.Files.ADF_DOCUMENTS.PDF.file_name, + location: resources.Files.ADF_DOCUMENTS.PDF.file_location }); const testFile = new FileModel({ - 'name': resources.Files.ADF_DOCUMENTS.TEST.file_name, - 'location': resources.Files.ADF_DOCUMENTS.TEST.file_location + name: resources.Files.ADF_DOCUMENTS.TEST.file_name, + location: resources.Files.ADF_DOCUMENTS.TEST.file_location }); const docxFile = new FileModel({ - 'name': resources.Files.ADF_DOCUMENTS.DOCX.file_name, - 'location': resources.Files.ADF_DOCUMENTS.DOCX.file_location + name: resources.Files.ADF_DOCUMENTS.DOCX.file_name, + location: resources.Files.ADF_DOCUMENTS.DOCX.file_location }); const folderName = `MEESEEKS_${StringUtil.generateRandomString(5)}_LOOK_AT_ME`; let filePdfNode, fileTestNode, fileDocxNode, folderNode, filePDFSubNode; - beforeAll(async (done) => { + beforeAll(async () => { acsUser = new AcsUserModel(); await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); funnyUser = await this.alfrescoJsApi.core.peopleApi.addPerson(acsUser); @@ -79,7 +78,6 @@ describe('Document List Component', () => { await loginPage.loginToContentServicesUsingUserModel(acsUser); - done(); }); afterAll(async () => { @@ -87,92 +85,95 @@ describe('Document List Component', () => { }); beforeEach(async () => { - navBar.clickHomeButton(); - contentServicesPage.goToDocumentList(); - contentServicesPage.clickGridViewButton(); - contentServicesPage.checkCardViewContainerIsDisplayed(); + await navigationBarPage.clickHomeButton(); + await contentServicesPage.goToDocumentList(); + await contentServicesPage.clickGridViewButton(); + await contentServicesPage.checkCardViewContainerIsDisplayed(); }); - it('[C280016] Should be able to choose Gallery View', () => { - expect(contentServicesPage.getCardElementShowedInPage()).toBe(4); + it('[C280016] Should be able to choose Gallery View', async () => { + await expect(await contentServicesPage.getCardElementShowedInPage()).toBe(4); }); - it('[C280023] Gallery Card should show details', () => { - expect(contentServicesPage.getDocumentCardIconForElement(folderName)).toContain('/assets/images/ft_ic_folder.svg'); - expect(contentServicesPage.getDocumentCardIconForElement(pdfFile.name)).toContain('/assets/images/ft_ic_pdf.svg'); - expect(contentServicesPage.getDocumentCardIconForElement(docxFile.name)).toContain('/assets/images/ft_ic_ms_word.svg'); - expect(contentServicesPage.getDocumentCardIconForElement(testFile.name)).toContain('/assets/images/ft_ic_document.svg'); - contentServicesPage.checkMenuIsShowedForElementIndex(0); - contentServicesPage.checkMenuIsShowedForElementIndex(1); - contentServicesPage.checkMenuIsShowedForElementIndex(2); - contentServicesPage.checkMenuIsShowedForElementIndex(3); + it('[C280023] Gallery Card should show details', async () => { + await expect(await contentServicesPage.getDocumentCardIconForElement(folderName)).toContain('/assets/images/ft_ic_folder.svg'); + await expect(await contentServicesPage.getDocumentCardIconForElement(pdfFile.name)).toContain('/assets/images/ft_ic_pdf.svg'); + await expect(await contentServicesPage.getDocumentCardIconForElement(docxFile.name)).toContain('/assets/images/ft_ic_ms_word.svg'); + await expect(await contentServicesPage.getDocumentCardIconForElement(testFile.name)).toContain('/assets/images/ft_ic_document.svg'); + await contentServicesPage.checkMenuIsShowedForElementIndex(0); + await contentServicesPage.checkMenuIsShowedForElementIndex(1); + await contentServicesPage.checkMenuIsShowedForElementIndex(2); + await contentServicesPage.checkMenuIsShowedForElementIndex(3); }); - it('[C280069] Gallery Card should show attributes', () => { - contentServicesPage.checkDocumentCardPropertyIsShowed(folderName, cardProperties.DISPLAY_NAME); - contentServicesPage.checkDocumentCardPropertyIsShowed(folderName, cardProperties.SIZE); - contentServicesPage.checkDocumentCardPropertyIsShowed(folderName, cardProperties.CREATED_BY); - contentServicesPage.checkDocumentCardPropertyIsShowed(folderName, cardProperties.CREATED); + it('[C280069] Gallery Card should show attributes', async () => { + await contentServicesPage.checkDocumentCardPropertyIsShowed(folderName, cardProperties.DISPLAY_NAME); + await contentServicesPage.checkDocumentCardPropertyIsShowed(folderName, cardProperties.SIZE); + await contentServicesPage.checkDocumentCardPropertyIsShowed(folderName, cardProperties.CREATED_BY); + await contentServicesPage.checkDocumentCardPropertyIsShowed(folderName, cardProperties.CREATED); - expect(contentServicesPage.getAttributeValueForElement(folderName, cardProperties.DISPLAY_NAME)).toBe(folderName); - expect(contentServicesPage.getAttributeValueForElement(folderName, cardProperties.CREATED_BY)).toBe(`${funnyUser.entry.firstName} ${funnyUser.entry.lastName}`); + await expect(await contentServicesPage.getAttributeValueForElement(folderName, cardProperties.DISPLAY_NAME)).toBe(folderName); + await expect(await contentServicesPage.getAttributeValueForElement(folderName, cardProperties.CREATED_BY)).toBe(`${funnyUser.entry.firstName} ${funnyUser.entry.lastName}`); - expect(contentServicesPage.getAttributeValueForElement(folderName, cardProperties.CREATED)).toMatch(/(ago|few)/); + await expect(await contentServicesPage.getAttributeValueForElement(folderName, cardProperties.CREATED)).toMatch(/(ago|few)/); - expect(contentServicesPage.getAttributeValueForElement(pdfFile.name, cardProperties.DISPLAY_NAME)).toBe(pdfFile.name); - expect(contentServicesPage.getAttributeValueForElement(pdfFile.name, cardProperties.SIZE)).toBe(`105.02 KB`); - expect(contentServicesPage.getAttributeValueForElement(pdfFile.name, cardProperties.CREATED_BY)).toBe(`${funnyUser.entry.firstName} ${funnyUser.entry.lastName}`); + await expect(await contentServicesPage.getAttributeValueForElement(pdfFile.name, cardProperties.DISPLAY_NAME)).toBe(pdfFile.name); + await expect(await contentServicesPage.getAttributeValueForElement(pdfFile.name, cardProperties.SIZE)).toBe(`105.02 KB`); + await expect(await contentServicesPage.getAttributeValueForElement(pdfFile.name, cardProperties.CREATED_BY)).toBe(`${funnyUser.entry.firstName} ${funnyUser.entry.lastName}`); - expect(contentServicesPage.getAttributeValueForElement(pdfFile.name, cardProperties.CREATED)).toMatch(/(ago|few)/); + await expect(await contentServicesPage.getAttributeValueForElement(pdfFile.name, cardProperties.CREATED)).toMatch(/(ago|few)/); - expect(contentServicesPage.getAttributeValueForElement(docxFile.name, cardProperties.DISPLAY_NAME)).toBe(docxFile.name); - expect(contentServicesPage.getAttributeValueForElement(docxFile.name, cardProperties.SIZE)).toBe(`81.05 KB`); - expect(contentServicesPage.getAttributeValueForElement(docxFile.name, cardProperties.CREATED_BY)).toBe(`${funnyUser.entry.firstName} ${funnyUser.entry.lastName}`); + await expect(await contentServicesPage.getAttributeValueForElement(docxFile.name, cardProperties.DISPLAY_NAME)).toBe(docxFile.name); + await expect(await contentServicesPage.getAttributeValueForElement(docxFile.name, cardProperties.SIZE)).toBe(`81.05 KB`); + await expect(await contentServicesPage.getAttributeValueForElement(docxFile.name, cardProperties.CREATED_BY)) + .toBe(`${funnyUser.entry.firstName} ${funnyUser.entry.lastName}`); - expect(contentServicesPage.getAttributeValueForElement(docxFile.name, cardProperties.CREATED)).toMatch(/(ago|few)/); + await expect(await contentServicesPage.getAttributeValueForElement(docxFile.name, cardProperties.CREATED)).toMatch(/(ago|few)/); - expect(contentServicesPage.getAttributeValueForElement(testFile.name, cardProperties.DISPLAY_NAME)).toBe(testFile.name); - expect(contentServicesPage.getAttributeValueForElement(testFile.name, cardProperties.SIZE)).toBe(`14 Bytes`); - expect(contentServicesPage.getAttributeValueForElement(testFile.name, cardProperties.CREATED_BY)).toBe(`${funnyUser.entry.firstName} ${funnyUser.entry.lastName}`); + await expect(await contentServicesPage.getAttributeValueForElement(testFile.name, cardProperties.DISPLAY_NAME)).toBe(testFile.name); + await expect(await contentServicesPage.getAttributeValueForElement(testFile.name, cardProperties.SIZE)).toBe(`14 Bytes`); + await expect(await contentServicesPage.getAttributeValueForElement(testFile.name, cardProperties.CREATED_BY)) + .toBe(`${funnyUser.entry.firstName} ${funnyUser.entry.lastName}`); - expect(contentServicesPage.getAttributeValueForElement(testFile.name, cardProperties.CREATED)).toMatch(/(ago|few)/); + await expect(await contentServicesPage.getAttributeValueForElement(testFile.name, cardProperties.CREATED)).toMatch(/(ago|few)/); }); - it('[C280129] Should keep Gallery View when accessing a folder', () => { - contentServicesPage.navigateToCardFolder(folderName); + // tslint:disable-next-line: ban + xit('[C280129] Should keep Gallery View when accessing a folder', async () => { + await contentServicesPage.navigateToCardFolder(folderName); - expect(contentServicesPage.getCardElementShowedInPage()).toBe(1); - expect(contentServicesPage.getDocumentCardIconForElement(pdfFile.name)).toContain('/assets/images/ft_ic_pdf.svg'); + await expect(await contentServicesPage.getCardElementShowedInPage()).toBe(1); + await expect(await contentServicesPage.getDocumentCardIconForElement(pdfFile.name)).toContain('/assets/images/ft_ic_pdf.svg'); }); - it('[C280130] Should be able to go back to List View', () => { - contentServicesPage.clickGridViewButton(); - contentServicesPage.checkAcsContainer(); - contentServicesPage.doubleClickRow(folderName); - contentServicesPage.checkRowIsDisplayed(pdfFile.name); + it('[C280130] Should be able to go back to List View', async () => { + await contentServicesPage.clickGridViewButton(); + await contentServicesPage.checkAcsContainer(); + await contentServicesPage.doubleClickRow(folderName); + await contentServicesPage.checkRowIsDisplayed(pdfFile.name); }); - it('[C261993] Should be able to sort Gallery Cards by display name', () => { - contentServicesPage.selectGridSortingFromDropdown(cardProperties.DISPLAY_NAME); - contentServicesPage.checkListIsSortedByNameColumn('asc'); + it('[C261993] Should be able to sort Gallery Cards by display name', async () => { + await contentServicesPage.selectGridSortingFromDropdown(cardProperties.DISPLAY_NAME); + await contentServicesPage.checkListIsSortedByNameColumn('asc'); }); - it('[C261994] Should be able to sort Gallery Cards by size', () => { - contentServicesPage.selectGridSortingFromDropdown(cardProperties.SIZE); - contentServicesPage.checkListIsSortedBySizeColumn('asc'); + it('[C261994] Should be able to sort Gallery Cards by size', async () => { + await contentServicesPage.selectGridSortingFromDropdown(cardProperties.SIZE); + await contentServicesPage.checkListIsSortedBySizeColumn('asc'); }); - it('[C261995] Should be able to sort Gallery Cards by author', () => { - contentServicesPage.selectGridSortingFromDropdown(cardProperties.CREATED_BY); - contentServicesPage.checkListIsSortedByAuthorColumn('asc'); + it('[C261995] Should be able to sort Gallery Cards by author', async () => { + await contentServicesPage.selectGridSortingFromDropdown(cardProperties.CREATED_BY); + await contentServicesPage.checkListIsSortedByAuthorColumn('asc'); }); - it('[C261996] Should be able to sort Gallery Cards by created date', () => { - contentServicesPage.selectGridSortingFromDropdown(cardProperties.CREATED); - contentServicesPage.checkListIsSortedByCreatedColumn('asc'); + it('[C261996] Should be able to sort Gallery Cards by created date', async () => { + await contentServicesPage.selectGridSortingFromDropdown(cardProperties.CREATED); + await contentServicesPage.checkListIsSortedByCreatedColumn('asc'); }); - afterAll(async (done) => { + afterAll(async () => { await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); if (filePdfNode) { await uploadActions.deleteFileOrFolder(filePdfNode.entry.id); @@ -189,7 +190,7 @@ describe('Document List Component', () => { if (folderNode) { await uploadActions.deleteFileOrFolder(folderNode.entry.id); } - done(); + }); }); diff --git a/e2e/content-services/document-list/document-list-pagination.e2e.ts b/e2e/content-services/document-list/document-list-pagination.e2e.ts index f730c0a5b7..895fbb3997 100644 --- a/e2e/content-services/document-list/document-list-pagination.e2e.ts +++ b/e2e/content-services/document-list/document-list-pagination.e2e.ts @@ -24,7 +24,7 @@ import { Util } from '../../util/util'; import { browser } from 'protractor'; import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; -describe('Document List - Pagination', function () { +describe('Document List - Pagination', () => { const pagination = { base: 'newFile', secondSetBase: 'secondSet', @@ -49,21 +49,21 @@ describe('Document List - Pagination', function () { const navigationBarPage = new NavigationBarPage(); const acsUser = new AcsUserModel(); - const newFolderModel = new FolderModel({ 'name': 'newFolder' }); + const newFolderModel = new FolderModel({ name: 'newFolder' }); let fileNames = []; const nrOfFiles = 20; let currentPage = 1; let secondSetOfFiles = []; const secondSetNumber = 25; - const folderTwoModel = new FolderModel({ 'name': 'folderTwo' }); - const folderThreeModel = new FolderModel({ 'name': 'folderThree' }); + const folderTwoModel = new FolderModel({ name: 'folderTwo' }); + const folderThreeModel = new FolderModel({ name: 'folderThree' }); this.alfrescoJsApi = new AlfrescoApi({ - provider: 'ECM', - hostEcm: browser.params.testConfig.adf_acs.host - }); + provider: 'ECM', + hostEcm: browser.params.testConfig.adf_acs.host + }); const uploadActions = new UploadActions(this.alfrescoJsApi); - beforeAll(async (done) => { + beforeAll(async () => { fileNames = Util.generateSequenceFiles(10, nrOfFiles + 9, pagination.base, pagination.extension); secondSetOfFiles = Util.generateSequenceFiles(10, secondSetNumber + 9, pagination.secondSetBase, pagination.extension); @@ -80,270 +80,256 @@ describe('Document List - Pagination', function () { await uploadActions.createEmptyFiles(secondSetOfFiles, folderThreeUploadedModel.entry.id); - loginPage.loginToContentServicesUsingUserModel(acsUser); + await loginPage.loginToContentServicesUsingUserModel(acsUser); - done(); }); afterAll(async () => { await navigationBarPage.clickLogoutButton(); }); - beforeEach((done) => { - contentServicesPage.goToDocumentList(); - contentServicesPage.checkAcsContainer(); - contentServicesPage.waitForTableBody(); - done(); + beforeEach(async () => { + await contentServicesPage.goToDocumentList(); + await contentServicesPage.checkAcsContainer(); + await contentServicesPage.waitForTableBody(); + }); - it('[C260062] Should use default pagination settings', () => { - contentServicesPage.doubleClickRow(newFolderModel.name); - contentServicesPage.checkAcsContainer(); - contentServicesPage.waitForTableBody(); - expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.twenty); - expect(paginationPage.getPaginationRange()).toEqual('Showing 1-' + nrOfFiles + ' of ' + nrOfFiles); - expect(contentServicesPage.numberOfResultsDisplayed()).toBe(nrOfFiles); - contentServicesPage.getAllRowsNameColumn().then(function (list) { - expect(Util.arrayContainsArray(list, fileNames)).toEqual(true); - }); - paginationPage.checkNextPageButtonIsDisabled(); - paginationPage.checkPreviousPageButtonIsDisabled(); + it('[C260062] Should use default pagination settings', async () => { + await contentServicesPage.doubleClickRow(newFolderModel.name); + await contentServicesPage.checkAcsContainer(); + await contentServicesPage.waitForTableBody(); + await expect(await paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.twenty); + await expect(await paginationPage.getPaginationRange()).toEqual('Showing 1-' + nrOfFiles + ' of ' + nrOfFiles); + await expect(await contentServicesPage.numberOfResultsDisplayed()).toBe(nrOfFiles); + const list = await contentServicesPage.getAllRowsNameColumn(); + await expect(Util.arrayContainsArray(list, fileNames)).toEqual(true); + await paginationPage.checkNextPageButtonIsDisabled(); + await paginationPage.checkPreviousPageButtonIsDisabled(); }); - it('[C274713] Should be able to set Items per page to 20', () => { - contentServicesPage.doubleClickRow(newFolderModel.name); - contentServicesPage.checkAcsContainer(); - contentServicesPage.waitForTableBody(); - paginationPage.selectItemsPerPage(itemsPerPage.twenty); - contentServicesPage.checkAcsContainer(); - contentServicesPage.waitForTableBody(); - expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.twenty); - expect(paginationPage.getPaginationRange()).toEqual('Showing 1-' + nrOfFiles + ' of ' + nrOfFiles); - expect(contentServicesPage.numberOfResultsDisplayed()).toBe(nrOfFiles); - contentServicesPage.getAllRowsNameColumn().then(function (list) { - expect(Util.arrayContainsArray(list, fileNames)).toEqual(true); - }); - paginationPage.checkNextPageButtonIsDisabled(); - paginationPage.checkPreviousPageButtonIsDisabled(); + it('[C274713] Should be able to set Items per page to 20', async () => { + await contentServicesPage.doubleClickRow(newFolderModel.name); + await contentServicesPage.checkAcsContainer(); + await contentServicesPage.waitForTableBody(); + await paginationPage.selectItemsPerPage(itemsPerPage.twenty); + await contentServicesPage.checkAcsContainer(); + await contentServicesPage.waitForTableBody(); + await expect(await paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.twenty); + await expect(await paginationPage.getPaginationRange()).toEqual('Showing 1-' + nrOfFiles + ' of ' + nrOfFiles); + await expect(await contentServicesPage.numberOfResultsDisplayed()).toBe(nrOfFiles); + const list = await contentServicesPage.getAllRowsNameColumn(); + await expect(Util.arrayContainsArray(list, fileNames)).toEqual(true); + await paginationPage.checkNextPageButtonIsDisabled(); + await paginationPage.checkPreviousPageButtonIsDisabled(); - navigationBarPage.clickLogoutButton(); - loginPage.loginToContentServicesUsingUserModel(acsUser); - contentServicesPage.goToDocumentList(); - contentServicesPage.checkAcsContainer(); - contentServicesPage.waitForTableBody(); - expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.twenty); - navigationBarPage.clickLogoutButton(); - loginPage.loginToContentServicesUsingUserModel(acsUser); + await navigationBarPage.clickLogoutButton(); + await loginPage.loginToContentServicesUsingUserModel(acsUser); + await contentServicesPage.goToDocumentList(); + await contentServicesPage.checkAcsContainer(); + await contentServicesPage.waitForTableBody(); + await expect(await paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.twenty); + await navigationBarPage.clickLogoutButton(); + await loginPage.loginToContentServicesUsingUserModel(acsUser); }); - it('[C260069] Should be able to set Items per page to 5', () => { - contentServicesPage.doubleClickRow(newFolderModel.name); - contentServicesPage.checkAcsContainer(); - contentServicesPage.waitForTableBody(); - paginationPage.selectItemsPerPage(itemsPerPage.five); - contentServicesPage.checkAcsContainer(); - contentServicesPage.waitForTableBody(); - expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.five); - expect(paginationPage.getPaginationRange()).toEqual('Showing 1-' + itemsPerPage.fiveValue * currentPage + ' of ' + nrOfFiles); - expect(contentServicesPage.numberOfResultsDisplayed()).toBe(itemsPerPage.fiveValue); - contentServicesPage.getAllRowsNameColumn().then(function (list) { - expect(Util.arrayContainsArray(list, fileNames.slice(0, 5))).toEqual(true); - }); - paginationPage.clickOnNextPage(); + it('[C260069] Should be able to set Items per page to 5', async () => { + await contentServicesPage.doubleClickRow(newFolderModel.name); + await contentServicesPage.checkAcsContainer(); + await contentServicesPage.waitForTableBody(); + await paginationPage.selectItemsPerPage(itemsPerPage.five); + await contentServicesPage.checkAcsContainer(); + await contentServicesPage.waitForTableBody(); + await expect(await paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.five); + await expect(await paginationPage.getPaginationRange()).toEqual('Showing 1-' + itemsPerPage.fiveValue * currentPage + ' of ' + nrOfFiles); + await expect(await contentServicesPage.numberOfResultsDisplayed()).toBe(itemsPerPage.fiveValue); + let list = await contentServicesPage.getAllRowsNameColumn(); + await expect(Util.arrayContainsArray(list, fileNames.slice(0, 5))).toEqual(true); + await paginationPage.clickOnNextPage(); currentPage++; - contentServicesPage.checkAcsContainer(); - contentServicesPage.waitForTableBody(); - expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.five); - expect(paginationPage.getPaginationRange()).toEqual('Showing 6-' + itemsPerPage.fiveValue * currentPage + ' of ' + nrOfFiles); - expect(contentServicesPage.numberOfResultsDisplayed()).toBe(itemsPerPage.fiveValue); - contentServicesPage.getAllRowsNameColumn().then(function (list) { - expect(Util.arrayContainsArray(list, fileNames.slice(5, 10))).toEqual(true); - }); - paginationPage.clickOnNextPage(); + await contentServicesPage.checkAcsContainer(); + await contentServicesPage.waitForTableBody(); + await expect(await paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.five); + await expect(await paginationPage.getPaginationRange()).toEqual('Showing 6-' + itemsPerPage.fiveValue * currentPage + ' of ' + nrOfFiles); + await expect(await contentServicesPage.numberOfResultsDisplayed()).toBe(itemsPerPage.fiveValue); + list = await contentServicesPage.getAllRowsNameColumn(); + await expect(Util.arrayContainsArray(list, fileNames.slice(5, 10))).toEqual(true); + await paginationPage.clickOnNextPage(); currentPage++; - contentServicesPage.checkAcsContainer(); - contentServicesPage.waitForTableBody(); - expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.five); - expect(paginationPage.getPaginationRange()).toEqual('Showing 11-' + itemsPerPage.fiveValue * currentPage + ' of ' + nrOfFiles); - expect(contentServicesPage.numberOfResultsDisplayed()).toBe(itemsPerPage.fiveValue); - contentServicesPage.getAllRowsNameColumn().then(function (list) { - expect(Util.arrayContainsArray(list, fileNames.slice(10, 15))).toEqual(true); - }); - paginationPage.clickOnNextPage(); + await contentServicesPage.checkAcsContainer(); + await contentServicesPage.waitForTableBody(); + await expect(await paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.five); + await expect(await paginationPage.getPaginationRange()).toEqual('Showing 11-' + itemsPerPage.fiveValue * currentPage + ' of ' + nrOfFiles); + await expect(await contentServicesPage.numberOfResultsDisplayed()).toBe(itemsPerPage.fiveValue); + list = await contentServicesPage.getAllRowsNameColumn(); + await expect(Util.arrayContainsArray(list, fileNames.slice(10, 15))).toEqual(true); + await paginationPage.clickOnNextPage(); currentPage++; - contentServicesPage.checkAcsContainer(); - contentServicesPage.waitForTableBody(); - expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.five); - expect(paginationPage.getPaginationRange()).toEqual('Showing 16-' + itemsPerPage.fiveValue * currentPage + ' of ' + nrOfFiles); - expect(contentServicesPage.numberOfResultsDisplayed()).toBe(itemsPerPage.fiveValue); - contentServicesPage.getAllRowsNameColumn().then(function (list) { - expect(Util.arrayContainsArray(list, fileNames.slice(15, 20))).toEqual(true); - }); + await contentServicesPage.checkAcsContainer(); + await contentServicesPage.waitForTableBody(); + await expect(await paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.five); + await expect(await paginationPage.getPaginationRange()).toEqual('Showing 16-' + itemsPerPage.fiveValue * currentPage + ' of ' + nrOfFiles); + await expect(await contentServicesPage.numberOfResultsDisplayed()).toBe(itemsPerPage.fiveValue); + list = await contentServicesPage.getAllRowsNameColumn(); + await expect(Util.arrayContainsArray(list, fileNames.slice(15, 20))).toEqual(true); - browser.refresh(); - contentServicesPage.checkAcsContainer(); - contentServicesPage.waitForTableBody(); - expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.five); - navigationBarPage.clickLogoutButton(); - loginPage.loginToContentServicesUsingUserModel(acsUser); + await browser.refresh(); + await contentServicesPage.checkAcsContainer(); + await contentServicesPage.waitForTableBody(); + await expect(await paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.five); + await navigationBarPage.clickLogoutButton(); + await loginPage.loginToContentServicesUsingUserModel(acsUser); }); - it('[C260067] Should be able to set Items per page to 10', () => { + it('[C260067] Should be able to set Items per page to 10', async () => { currentPage = 1; - contentServicesPage.doubleClickRow(newFolderModel.name); - contentServicesPage.checkAcsContainer(); - contentServicesPage.waitForTableBody(); - paginationPage.selectItemsPerPage(itemsPerPage.ten); - contentServicesPage.checkAcsContainer(); - contentServicesPage.waitForTableBody(); - expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.ten); - expect(paginationPage.getPaginationRange()).toEqual('Showing 1-' + itemsPerPage.tenValue * currentPage + ' of ' + nrOfFiles); - expect(contentServicesPage.numberOfResultsDisplayed()).toBe(itemsPerPage.tenValue); - contentServicesPage.getAllRowsNameColumn().then(function (list) { - expect(Util.arrayContainsArray(list, fileNames.slice(0, 10))).toEqual(true); - }); - paginationPage.clickOnNextPage(); + await contentServicesPage.doubleClickRow(newFolderModel.name); + await contentServicesPage.checkAcsContainer(); + await contentServicesPage.waitForTableBody(); + await paginationPage.selectItemsPerPage(itemsPerPage.ten); + await contentServicesPage.checkAcsContainer(); + await contentServicesPage.waitForTableBody(); + await expect(await paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.ten); + await expect(await paginationPage.getPaginationRange()).toEqual('Showing 1-' + itemsPerPage.tenValue * currentPage + ' of ' + nrOfFiles); + await expect(await contentServicesPage.numberOfResultsDisplayed()).toBe(itemsPerPage.tenValue); + let list = await contentServicesPage.getAllRowsNameColumn(); + await expect(Util.arrayContainsArray(list, fileNames.slice(0, 10))).toEqual(true); + await paginationPage.clickOnNextPage(); currentPage++; - contentServicesPage.checkAcsContainer(); - contentServicesPage.waitForTableBody(); - expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.ten); - expect(paginationPage.getPaginationRange()).toEqual('Showing 11-' + itemsPerPage.tenValue * currentPage + ' of ' + nrOfFiles); - expect(contentServicesPage.numberOfResultsDisplayed()).toBe(itemsPerPage.tenValue); - contentServicesPage.getAllRowsNameColumn().then(function (list) { - expect(Util.arrayContainsArray(list, fileNames.slice(10, 20))).toEqual(true); - }); + await contentServicesPage.checkAcsContainer(); + await contentServicesPage.waitForTableBody(); + await expect(await paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.ten); + await expect(await paginationPage.getPaginationRange()).toEqual('Showing 11-' + itemsPerPage.tenValue * currentPage + ' of ' + nrOfFiles); + await expect(await contentServicesPage.numberOfResultsDisplayed()).toBe(itemsPerPage.tenValue); + list = await contentServicesPage.getAllRowsNameColumn(); + await expect(Util.arrayContainsArray(list, fileNames.slice(10, 20))).toEqual(true); - browser.refresh(); - contentServicesPage.waitForTableBody(); - expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.ten); - navigationBarPage.clickLogoutButton(); - loginPage.loginToContentServicesUsingUserModel(acsUser); + await browser.refresh(); + await contentServicesPage.waitForTableBody(); + await expect(await paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.ten); + await navigationBarPage.clickLogoutButton(); + await loginPage.loginToContentServicesUsingUserModel(acsUser); currentPage = 1; }); - it('[C260065] Should be able to set Items per page to 15', () => { + it('[C260065] Should be able to set Items per page to 15', async () => { currentPage = 1; - contentServicesPage.doubleClickRow(newFolderModel.name); - contentServicesPage.checkAcsContainer(); - contentServicesPage.waitForTableBody(); - expect(contentServicesPage.getActiveBreadcrumb()).toEqual(newFolderModel.name); - paginationPage.selectItemsPerPage(itemsPerPage.fifteen); - contentServicesPage.checkAcsContainer(); - contentServicesPage.waitForTableBody(); - expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.fifteen); - expect(paginationPage.getPaginationRange()).toEqual('Showing 1-' + itemsPerPage.fifteenValue * currentPage + ' of ' + nrOfFiles); - expect(contentServicesPage.numberOfResultsDisplayed()).toBe(itemsPerPage.fifteenValue); - contentServicesPage.getAllRowsNameColumn().then(function (list) { - expect(Util.arrayContainsArray(list, fileNames.slice(0, 15))).toEqual(true); - }); + await contentServicesPage.doubleClickRow(newFolderModel.name); + await contentServicesPage.checkAcsContainer(); + await contentServicesPage.waitForTableBody(); + await expect(await contentServicesPage.getActiveBreadcrumb()).toEqual(newFolderModel.name); + await paginationPage.selectItemsPerPage(itemsPerPage.fifteen); + await contentServicesPage.checkAcsContainer(); + await contentServicesPage.waitForTableBody(); + await expect(await paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.fifteen); + await expect(await paginationPage.getPaginationRange()).toEqual('Showing 1-' + itemsPerPage.fifteenValue * currentPage + ' of ' + nrOfFiles); + await expect(await contentServicesPage.numberOfResultsDisplayed()).toBe(itemsPerPage.fifteenValue); + let list = await contentServicesPage.getAllRowsNameColumn(); + await expect(Util.arrayContainsArray(list, fileNames.slice(0, 15))).toEqual(true); currentPage++; - paginationPage.clickOnNextPage(); - contentServicesPage.checkAcsContainer(); - contentServicesPage.waitForTableBody(); - expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.fifteen); - expect(paginationPage.getPaginationRange()).toEqual('Showing 16-' + nrOfFiles + ' of ' + nrOfFiles); - expect(contentServicesPage.numberOfResultsDisplayed()).toBe(nrOfFiles - itemsPerPage.fifteenValue); - contentServicesPage.getAllRowsNameColumn().then(function (list) { - expect(Util.arrayContainsArray(list, fileNames.slice(15, 20))).toEqual(true); - }); + await paginationPage.clickOnNextPage(); + await contentServicesPage.checkAcsContainer(); + await contentServicesPage.waitForTableBody(); + await expect(await paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.fifteen); + await expect(await paginationPage.getPaginationRange()).toEqual('Showing 16-' + nrOfFiles + ' of ' + nrOfFiles); + await expect(await contentServicesPage.numberOfResultsDisplayed()).toBe(nrOfFiles - itemsPerPage.fifteenValue); + list = await contentServicesPage.getAllRowsNameColumn(); + await expect(Util.arrayContainsArray(list, fileNames.slice(15, 20))).toEqual(true); - browser.refresh(); - contentServicesPage.waitForTableBody(); - expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.fifteen); + await browser.refresh(); + await contentServicesPage.waitForTableBody(); + await expect(await paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.fifteen); }); - it('[C91320] Pagination should preserve sorting', () => { - contentServicesPage.doubleClickRow(newFolderModel.name); - contentServicesPage.checkAcsContainer(); - contentServicesPage.waitForTableBody(); - expect(contentServicesPage.getActiveBreadcrumb()).toEqual(newFolderModel.name); - paginationPage.selectItemsPerPage(itemsPerPage.twenty); - contentServicesPage.checkAcsContainer(); - contentServicesPage.waitForTableBody(); + it('[C91320] Pagination should preserve sorting', async () => { + await contentServicesPage.doubleClickRow(newFolderModel.name); + await contentServicesPage.checkAcsContainer(); + await contentServicesPage.waitForTableBody(); + await expect(await contentServicesPage.getActiveBreadcrumb()).toEqual(newFolderModel.name); + await paginationPage.selectItemsPerPage(itemsPerPage.twenty); + await contentServicesPage.checkAcsContainer(); + await contentServicesPage.waitForTableBody(); - expect(contentServicesPage.getContentList().dataTablePage().checkListIsSorted('ASC', 'Display name')); + await expect(await contentServicesPage.getDocumentList().dataTablePage().checkListIsSorted('ASC', 'Display name')); - contentServicesPage.sortByName('DESC'); - expect(contentServicesPage.getContentList().dataTablePage().checkListIsSorted('DESC', 'Display name')); + await contentServicesPage.sortByName('DESC'); + await expect(await contentServicesPage.getDocumentList().dataTablePage().checkListIsSorted('DESC', 'Display name')); - paginationPage.selectItemsPerPage(itemsPerPage.five); - contentServicesPage.checkAcsContainer(); - contentServicesPage.waitForTableBody(); - expect(contentServicesPage.getContentList().dataTablePage().checkListIsSorted('DESC', 'Display name')); + await paginationPage.selectItemsPerPage(itemsPerPage.five); + await contentServicesPage.checkAcsContainer(); + await contentServicesPage.waitForTableBody(); + await expect(await contentServicesPage.getDocumentList().dataTablePage().checkListIsSorted('DESC', 'Display name')); - paginationPage.clickOnNextPage(); - contentServicesPage.checkAcsContainer(); - contentServicesPage.waitForTableBody(); - expect(contentServicesPage.getContentList().dataTablePage().checkListIsSorted('DESC', 'Display name')); + await paginationPage.clickOnNextPage(); + await contentServicesPage.checkAcsContainer(); + await contentServicesPage.waitForTableBody(); + await expect(await contentServicesPage.getDocumentList().dataTablePage().checkListIsSorted('DESC', 'Display name')); - paginationPage.selectItemsPerPage(itemsPerPage.ten); - contentServicesPage.checkAcsContainer(); - contentServicesPage.waitForTableBody(); - expect(contentServicesPage.getContentList().dataTablePage().checkListIsSorted('DESC', 'Display name')); + await paginationPage.selectItemsPerPage(itemsPerPage.ten); + await contentServicesPage.checkAcsContainer(); + await contentServicesPage.waitForTableBody(); + await expect(await contentServicesPage.getDocumentList().dataTablePage().checkListIsSorted('DESC', 'Display name')); }); - it('[C260107] Should not display pagination bar when a folder is empty', () => { - paginationPage.selectItemsPerPage(itemsPerPage.five); - contentServicesPage.checkAcsContainer(); - contentServicesPage.waitForTableBody(); - expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.five); - contentServicesPage.doubleClickRow(newFolderModel.name); - contentServicesPage.checkAcsContainer(); - contentServicesPage.waitForTableBody(); - expect(contentServicesPage.getActiveBreadcrumb()).toEqual(newFolderModel.name); - expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.five); - contentServicesPage.createNewFolder(folderTwoModel.name).checkContentIsDisplayed(folderTwoModel.name); - contentServicesPage.doubleClickRow(folderTwoModel.name); - contentServicesPage.checkPaginationIsNotDisplayed(); + it('[C260107] Should not display pagination bar when a folder is empty', async () => { + await paginationPage.selectItemsPerPage(itemsPerPage.five); + await contentServicesPage.checkAcsContainer(); + await contentServicesPage.waitForTableBody(); + await expect(await paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.five); + await contentServicesPage.doubleClickRow(newFolderModel.name); + await contentServicesPage.checkAcsContainer(); + await contentServicesPage.waitForTableBody(); + await expect(await contentServicesPage.getActiveBreadcrumb()).toEqual(newFolderModel.name); + await expect(await paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.five); + await contentServicesPage.createNewFolder(folderTwoModel.name); + await contentServicesPage.checkContentIsDisplayed(folderTwoModel.name); + await contentServicesPage.doubleClickRow(folderTwoModel.name); + await contentServicesPage.checkPaginationIsNotDisplayed(); }); - it('[C260071] Should be able to change pagination when having 25 files', () => { + it('[C260071] Should be able to change pagination when having 25 files', async () => { currentPage = 1; - contentServicesPage.doubleClickRow(folderThreeModel.name); - contentServicesPage.checkAcsContainer(); - contentServicesPage.waitForTableBody(); - expect(contentServicesPage.getActiveBreadcrumb()).toEqual(folderThreeModel.name); - paginationPage.selectItemsPerPage(itemsPerPage.fifteen); - contentServicesPage.checkAcsContainer(); - contentServicesPage.waitForTableBody(); - expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.fifteen); - expect(paginationPage.getPaginationRange()).toEqual('Showing 1-' + itemsPerPage.fifteenValue * currentPage + ' of ' + secondSetNumber); - expect(contentServicesPage.numberOfResultsDisplayed()).toBe(itemsPerPage.fifteenValue); - contentServicesPage.getAllRowsNameColumn().then(function (list) { - expect(Util.arrayContainsArray(list, secondSetOfFiles.slice(0, 15))).toEqual(true); - }); + await contentServicesPage.doubleClickRow(folderThreeModel.name); + await contentServicesPage.checkAcsContainer(); + await contentServicesPage.waitForTableBody(); + await expect(await contentServicesPage.getActiveBreadcrumb()).toEqual(folderThreeModel.name); + await paginationPage.selectItemsPerPage(itemsPerPage.fifteen); + await contentServicesPage.checkAcsContainer(); + await contentServicesPage.waitForTableBody(); + await expect(await paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.fifteen); + await expect(await paginationPage.getPaginationRange()).toEqual('Showing 1-' + itemsPerPage.fifteenValue * currentPage + ' of ' + secondSetNumber); + await expect(await contentServicesPage.numberOfResultsDisplayed()).toBe(itemsPerPage.fifteenValue); + let list = await contentServicesPage.getAllRowsNameColumn(); + await expect(Util.arrayContainsArray(list, secondSetOfFiles.slice(0, 15))).toEqual(true); currentPage++; - paginationPage.clickOnNextPage(); - contentServicesPage.checkAcsContainer(); - contentServicesPage.waitForTableBody(); - expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.fifteen); - expect(paginationPage.getPaginationRange()).toEqual('Showing 16-' + secondSetNumber + ' of ' + secondSetNumber); - expect(contentServicesPage.numberOfResultsDisplayed()).toBe(secondSetNumber - itemsPerPage.fifteenValue); - contentServicesPage.getAllRowsNameColumn().then(function (list) { - expect(Util.arrayContainsArray(list, secondSetOfFiles.slice(15, 25))).toEqual(true); - }); + await paginationPage.clickOnNextPage(); + await contentServicesPage.checkAcsContainer(); + await contentServicesPage.waitForTableBody(); + await expect(await paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.fifteen); + await expect(await paginationPage.getPaginationRange()).toEqual('Showing 16-' + secondSetNumber + ' of ' + secondSetNumber); + await expect(await contentServicesPage.numberOfResultsDisplayed()).toBe(secondSetNumber - itemsPerPage.fifteenValue); + list = await contentServicesPage.getAllRowsNameColumn(); + await expect(Util.arrayContainsArray(list, secondSetOfFiles.slice(15, 25))).toEqual(true); currentPage = 1; - paginationPage.selectItemsPerPage(itemsPerPage.twenty); - contentServicesPage.checkAcsContainer(); - contentServicesPage.waitForTableBody(); - expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.twenty); - expect(paginationPage.getPaginationRange()).toEqual('Showing 1-' + itemsPerPage.twentyValue * currentPage + ' of ' + secondSetNumber); - expect(contentServicesPage.numberOfResultsDisplayed()).toBe(itemsPerPage.twentyValue); - contentServicesPage.getAllRowsNameColumn().then(function (list) { - expect(Util.arrayContainsArray(list, secondSetOfFiles.slice(0, 20))).toEqual(true); - }); + await paginationPage.selectItemsPerPage(itemsPerPage.twenty); + await contentServicesPage.checkAcsContainer(); + await contentServicesPage.waitForTableBody(); + await expect(await paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.twenty); + await expect(await paginationPage.getPaginationRange()).toEqual('Showing 1-' + itemsPerPage.twentyValue * currentPage + ' of ' + secondSetNumber); + await expect(await contentServicesPage.numberOfResultsDisplayed()).toBe(itemsPerPage.twentyValue); + list = await contentServicesPage.getAllRowsNameColumn(); + await expect(Util.arrayContainsArray(list, secondSetOfFiles.slice(0, 20))).toEqual(true); currentPage++; - paginationPage.clickOnNextPage(); - contentServicesPage.checkAcsContainer(); - contentServicesPage.waitForTableBody(); - expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.twenty); - expect(paginationPage.getPaginationRange()).toEqual('Showing 21-' + secondSetNumber + ' of ' + secondSetNumber); - expect(contentServicesPage.numberOfResultsDisplayed()).toBe(secondSetNumber - itemsPerPage.twentyValue); - contentServicesPage.getAllRowsNameColumn().then(function (list) { - expect(Util.arrayContainsArray(list, secondSetOfFiles.slice(20, 25))).toEqual(true); - }); + await paginationPage.clickOnNextPage(); + await contentServicesPage.checkAcsContainer(); + await contentServicesPage.waitForTableBody(); + await expect(await paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.twenty); + await expect(await paginationPage.getPaginationRange()).toEqual('Showing 21-' + secondSetNumber + ' of ' + secondSetNumber); + await expect(await contentServicesPage.numberOfResultsDisplayed()).toBe(secondSetNumber - itemsPerPage.twentyValue); + list = await contentServicesPage.getAllRowsNameColumn(); + await expect(Util.arrayContainsArray(list, secondSetOfFiles.slice(20, 25))).toEqual(true); }); }); diff --git a/e2e/content-services/document-list/document-list-permissions.e2e.ts b/e2e/content-services/document-list/document-list-permissions.e2e.ts index f2de5f475a..5411c0ffd2 100644 --- a/e2e/content-services/document-list/document-list-permissions.e2e.ts +++ b/e2e/content-services/document-list/document-list-permissions.e2e.ts @@ -40,9 +40,9 @@ describe('Document List Component', () => { }); }); - describe('Permission Message', async () => { + describe('Permission Message', () => { - beforeAll(async (done) => { + beforeAll(async () => { acsUser = new AcsUserModel(); const siteName = `PRIVATE_TEST_SITE_${StringUtil.generateRandomString(5)}`; const privateSiteBody = { visibility: 'PRIVATE', title: siteName }; @@ -55,36 +55,35 @@ describe('Document List Component', () => { await loginPage.loginToContentServicesUsingUserModel(acsUser); - done(); }); - afterAll(async (done) => { + afterAll(async () => { await navigationBarPage.clickLogoutButton(); await this.alfrescoJsApi.core.sitesApi.deleteSite(privateSite.entry.id); - navBar.openLanguageMenu(); - navBar.chooseLanguage('English'); - done(); + await navBar.openLanguageMenu(); + await navBar.chooseLanguage('English'); + }); - it('[C217334] Should display a message when accessing file without permissions', () => { - BrowserActions.getUrl(browser.params.testConfig.adf.url + '/files/' + privateSite.entry.guid); - expect(errorPage.getErrorCode()).toBe('403'); - expect(errorPage.getErrorDescription()).toBe('You\'re not allowed access to this resource on the server.'); + it('[C217334] Should display a message when accessing file without permissions', async () => { + await BrowserActions.getUrl(browser.params.testConfig.adf.url + '/files/' + privateSite.entry.guid); + await expect(await errorPage.getErrorCode()).toBe('403'); + await expect(await errorPage.getErrorDescription()).toBe('You\'re not allowed access to this resource on the server.'); }); - it('[C279924] Should display custom message when accessing a file without permissions', () => { - contentServicesPage.goToDocumentList(); - contentServicesPage.enableCustomPermissionMessage(); - BrowserActions.getUrl(browser.params.testConfig.adf.url + '/files/' + privateSite.entry.guid); - expect(errorPage.getErrorCode()).toBe('403'); + it('[C279924] Should display custom message when accessing a file without permissions', async () => { + await contentServicesPage.goToDocumentList(); + await contentServicesPage.enableCustomPermissionMessage(); + await BrowserActions.getUrl(browser.params.testConfig.adf.url + '/files/' + privateSite.entry.guid); + await expect(await errorPage.getErrorCode()).toBe('403'); }); - it('[C279925] Should display translated message when accessing a file without permissions if language is changed', () => { - navBar.openLanguageMenu(); - navBar.chooseLanguage('Italiano'); - browser.sleep(2000); - BrowserActions.getUrl(browser.params.testConfig.adf.url + '/files/' + privateSite.entry.guid); - expect(errorPage.getErrorDescription()).toBe('Accesso alla risorsa sul server non consentito.'); + it('[C279925] Should display translated message when accessing a file without permissions if language is changed', async () => { + await navBar.openLanguageMenu(); + await navBar.chooseLanguage('Italiano'); + await browser.sleep(2000); + await BrowserActions.getUrl(browser.params.testConfig.adf.url + '/files/' + privateSite.entry.guid); + await expect(await errorPage.getErrorDescription()).toBe('Accesso alla risorsa sul server non consentito.'); }); }); diff --git a/e2e/content-services/document-list/document-list-properties.e2e.ts b/e2e/content-services/document-list/document-list-properties.e2e.ts index 9b6d87d18d..a4bbbce8cb 100644 --- a/e2e/content-services/document-list/document-list-properties.e2e.ts +++ b/e2e/content-services/document-list/document-list-properties.e2e.ts @@ -29,7 +29,7 @@ describe('Document List Component - Properties', () => { const loginPage = new LoginPage(); const contentServicesPage = new ContentServicesPage(); - const navigationBarPage = new NavigationBarPage(); + const navigationBar = new NavigationBarPage(); let subFolder, parentFolder; this.alfrescoJsApi = new AlfrescoApi({ @@ -40,13 +40,13 @@ describe('Document List Component - Properties', () => { let acsUser = null; const pngFile = new FileModel({ - 'name': resources.Files.ADF_DOCUMENTS.PNG.file_name, - 'location': resources.Files.ADF_DOCUMENTS.PNG.file_location + name: resources.Files.ADF_DOCUMENTS.PNG.file_name, + location: resources.Files.ADF_DOCUMENTS.PNG.file_location }); - describe('Allow drop files property', async () => { + describe('Allow drop files property', () => { - beforeEach(async (done) => { + beforeEach(async () => { acsUser = new AcsUserModel(); await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); @@ -61,46 +61,44 @@ describe('Document List Component - Properties', () => { await loginPage.loginToContentServicesUsingUserModel(acsUser); - done(); }); - afterEach(async (done) => { + afterEach(async () => { await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); await uploadActions.deleteFileOrFolder(subFolder.entry.id); await uploadActions.deleteFileOrFolder(parentFolder.entry.id); - done(); + }); - it('[C299154] Should disallow upload content on a folder row if allowDropFiles is false', () => { - navigationBarPage.clickContentServicesButton(); - contentServicesPage.doubleClickRow(parentFolder.entry.name); + it('[C299154] Should disallow upload content on a folder row if allowDropFiles is false', async () => { + await navigationBar.clickContentServicesButton(); + await contentServicesPage.doubleClickRow(parentFolder.entry.name); - contentServicesPage.disableDropFilesInAFolder(); + await contentServicesPage.disableDropFilesInAFolder(); const dragAndDropArea = contentServicesPage.getRowByName(subFolder.entry.name); const dragAndDrop = new DropActions(); - dragAndDrop.dropFile(dragAndDropArea, pngFile.location); - - contentServicesPage.checkContentIsDisplayed(pngFile.name); - contentServicesPage.doubleClickRow(subFolder.entry.name); - contentServicesPage.checkEmptyFolderTextToBe('This folder is empty'); + await dragAndDrop.dropFile(dragAndDropArea, pngFile.location); + await contentServicesPage.checkContentIsDisplayed(pngFile.name); + await contentServicesPage.doubleClickRow(subFolder.entry.name); + await contentServicesPage.checkEmptyFolderTextToBe('This folder is empty'); }); - it('[C91319] Should allow upload content on a folder row if allowDropFiles is true', () => { - navigationBarPage.clickContentServicesButton(); - contentServicesPage.doubleClickRow(parentFolder.entry.name); + it('[C91319] Should allow upload content on a folder row if allowDropFiles is true', async () => { + await navigationBar.clickContentServicesButton(); + await contentServicesPage.doubleClickRow(parentFolder.entry.name); - contentServicesPage.enableDropFilesInAFolder(); + await contentServicesPage.enableDropFilesInAFolder(); const dragAndDropArea = contentServicesPage.getRowByName(subFolder.entry.name); const dragAndDrop = new DropActions(); - dragAndDrop.dropFile(dragAndDropArea, pngFile.location); + await dragAndDrop.dropFile(dragAndDropArea, pngFile.location); - contentServicesPage.checkContentIsNotDisplayed(pngFile.name); - contentServicesPage.doubleClickRow(subFolder.entry.name); - contentServicesPage.checkContentIsDisplayed(pngFile.name); + await contentServicesPage.checkContentIsNotDisplayed(pngFile.name); + await contentServicesPage.doubleClickRow(subFolder.entry.name); + await contentServicesPage.checkContentIsDisplayed(pngFile.name); }); }); }); diff --git a/e2e/content-services/document-list/document-list-thumbnails-tooltips.e2e.ts b/e2e/content-services/document-list/document-list-thumbnails-tooltips.e2e.ts index 0bcafdd9f5..19b783cefa 100644 --- a/e2e/content-services/document-list/document-list-thumbnails-tooltips.e2e.ts +++ b/e2e/content-services/document-list/document-list-thumbnails-tooltips.e2e.ts @@ -38,7 +38,7 @@ describe('Document List Component', () => { let testFileNode, pdfBFileNode; const navigationBarPage = new NavigationBarPage(); - afterEach(async (done) => { + afterEach(async () => { await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); if (uploadedFolder) { await uploadActions.deleteFileOrFolder(uploadedFolder.entry.id); @@ -56,29 +56,29 @@ describe('Document List Component', () => { await uploadActions.deleteFileOrFolder(pdfBFileNode.entry.id); pdfBFileNode = null; } - done(); + }); describe('Thumbnails and tooltips', () => { const pdfFile = new FileModel({ - 'name': resources.Files.ADF_DOCUMENTS.PDF.file_name, - 'location': resources.Files.ADF_DOCUMENTS.PDF.file_location + name: resources.Files.ADF_DOCUMENTS.PDF.file_name, + location: resources.Files.ADF_DOCUMENTS.PDF.file_location }); const testFile = new FileModel({ - 'name': resources.Files.ADF_DOCUMENTS.TEST.file_name, - 'location': resources.Files.ADF_DOCUMENTS.TEST.file_location + name: resources.Files.ADF_DOCUMENTS.TEST.file_name, + location: resources.Files.ADF_DOCUMENTS.TEST.file_location }); const docxFile = new FileModel({ - 'name': resources.Files.ADF_DOCUMENTS.DOCX.file_name, - 'location': resources.Files.ADF_DOCUMENTS.DOCX.file_location + name: resources.Files.ADF_DOCUMENTS.DOCX.file_name, + location: resources.Files.ADF_DOCUMENTS.DOCX.file_location }); const folderName = `MEESEEKS_${StringUtil.generateRandomString(5)}_LOOK_AT_ME`; let filePdfNode, fileTestNode, fileDocxNode, folderNode; - beforeAll(async (done) => { + beforeAll(async () => { acsUser = new AcsUserModel(); await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); @@ -90,10 +90,9 @@ describe('Document List Component', () => { fileDocxNode = await uploadActions.uploadFile(docxFile.location, docxFile.name, '-my-'); folderNode = await uploadActions.createFolder(folderName, '-my-'); - done(); }); - afterAll(async (done) => { + afterAll(async () => { await navigationBarPage.clickLogoutButton(); await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); @@ -109,52 +108,52 @@ describe('Document List Component', () => { if (folderNode) { await uploadActions.deleteFileOrFolder(folderNode.entry.id); } - done(); + }); beforeEach(async () => { await loginPage.loginToContentServicesUsingUserModel(acsUser); - contentServicesPage.goToDocumentList(); + await contentServicesPage.goToDocumentList(); }); - it('[C260108] Should display tooltip for file\'s name', () => { - expect(contentServicesPage.getContentList().getTooltip(pdfFile.name)).toEqual(pdfFile.name); + it('[C260108] Should display tooltip for file\'s name', async () => { + await expect(await contentServicesPage.getDocumentList().getTooltip(pdfFile.name)).toEqual(pdfFile.name); }); - it('[C260109] Should display tooltip for folder\'s name', () => { - expect(contentServicesPage.getContentList().getTooltip(folderName)).toEqual(folderName); + it('[C260109] Should display tooltip for folder\'s name', async () => { + await expect(await contentServicesPage.getDocumentList().getTooltip(folderName)).toEqual(folderName); }); - it('[C260119] Should have a specific thumbnail for folders', async (done) => { + it('[C260119] Should have a specific thumbnail for folders', async () => { const folderIconUrl = await contentServicesPage.getRowIconImageUrl(folderName); - expect(folderIconUrl).toContain('/assets/images/ft_ic_folder.svg'); - done(); + await expect(folderIconUrl).toContain('/assets/images/ft_ic_folder.svg'); + }); - it('[C280066] Should have a specific thumbnail PDF files', async (done) => { + it('[C280066] Should have a specific thumbnail PDF files', async () => { const fileIconUrl = await contentServicesPage.getRowIconImageUrl(pdfFile.name); - expect(fileIconUrl).toContain('/assets/images/ft_ic_pdf.svg'); - done(); + await expect(fileIconUrl).toContain('/assets/images/ft_ic_pdf.svg'); + }); - it('[C280067] Should have a specific thumbnail DOCX files', async (done) => { + it('[C280067] Should have a specific thumbnail DOCX files', async () => { const fileIconUrl = await contentServicesPage.getRowIconImageUrl(docxFile.name); - expect(fileIconUrl).toContain('/assets/images/ft_ic_ms_word.svg'); - done(); + await expect(fileIconUrl).toContain('/assets/images/ft_ic_ms_word.svg'); + }); - it('[C280068] Should have a specific thumbnail files', async (done) => { + it('[C280068] Should have a specific thumbnail files', async () => { const fileIconUrl = await contentServicesPage.getRowIconImageUrl(testFile.name); - expect(fileIconUrl).toContain('/assets/images/ft_ic_document.svg'); - done(); + await expect(fileIconUrl).toContain('/assets/images/ft_ic_document.svg'); + }); - it('[C274701] Should be able to enable thumbnails', async (done) => { - contentServicesPage.enableThumbnails(); - contentServicesPage.checkAcsContainer(); + it('[C274701] Should be able to enable thumbnails', async () => { + await contentServicesPage.enableThumbnails(); + await contentServicesPage.checkAcsContainer(); const fileIconUrl = await contentServicesPage.getRowIconImageUrl(pdfFile.name); - expect(fileIconUrl).toContain(`/versions/1/nodes/${filePdfNode.entry.id}/renditions`); - done(); + await expect(fileIconUrl).toContain(`/versions/1/nodes/${filePdfNode.entry.id}/renditions`); + }); }); diff --git a/e2e/content-services/lock-file.e2e.ts b/e2e/content-services/lock-file.e2e.ts index a2c7cd46aa..6b12386f17 100644 --- a/e2e/content-services/lock-file.e2e.ts +++ b/e2e/content-services/lock-file.e2e.ts @@ -41,18 +41,18 @@ describe('Lock File', () => { const uploadActions = new UploadActions(this.alfrescoJsApi); const pngFileModel = new FileModel({ - 'name': resources.Files.ADF_DOCUMENTS.PNG.file_name, - 'location': resources.Files.ADF_DOCUMENTS.PNG.file_location + name: resources.Files.ADF_DOCUMENTS.PNG.file_name, + location: resources.Files.ADF_DOCUMENTS.PNG.file_location }); const pngFileToLock = new FileModel({ - 'name': resources.Files.ADF_DOCUMENTS.PNG_B.file_name, - 'location': resources.Files.ADF_DOCUMENTS.PNG_B.file_location + name: resources.Files.ADF_DOCUMENTS.PNG_B.file_name, + location: resources.Files.ADF_DOCUMENTS.PNG_B.file_location }); let nodeId, site, documentLibrary, lockedFileNodeId; - beforeAll(async (done) => { + beforeAll(async () => { await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); await this.alfrescoJsApi.core.peopleApi.addPerson(adminUser); @@ -73,36 +73,32 @@ describe('Lock File', () => { id: managerUser.id, role: CONSTANTS.CS_USER_ROLES.MANAGER }); - - done(); - }); describe('Lock file interaction with the UI', () => { - beforeAll(async (done) => { + beforeAll(async () => { const pngLockedUploadedFile = await uploadActions.uploadFile(pngFileToLock.location, pngFileToLock.name, documentLibrary); lockedFileNodeId = pngLockedUploadedFile.entry.id; - done(); }); - beforeEach(async (done) => { + beforeEach(async () => { try { const pngUploadedFile = await uploadActions.uploadFile(pngFileModel.location, pngFileModel.name, documentLibrary); nodeId = pngUploadedFile.entry.id; await loginPage.loginToContentServicesUsingUserModel(adminUser); await navigationBarPage.openContentServicesFolder(documentLibrary); - contentServices.waitForTableBody(); + await contentServices.waitForTableBody(); } catch (error) { } - done(); + }); - afterEach(async (done) => { + afterEach(async () => { try { await this.alfrescoJsApi.login(adminUser.id, adminUser.password); @@ -111,10 +107,10 @@ describe('Lock File', () => { } catch (error) { } - done(); + }); - afterAll(async (done) => { + afterAll(async () => { try { await this.alfrescoJsApi.login(adminUser.id, adminUser.password); @@ -125,57 +121,57 @@ describe('Lock File', () => { } catch (error) { } - done(); + }); - it('[C286604] Should be able to open Lock file option by clicking the lock image', () => { - contentServices.lockContent(pngFileModel.name); + it('[C286604] Should be able to open Lock file option by clicking the lock image', async () => { + await contentServices.lockContent(pngFileModel.name); - lockFilePage.checkLockFileCheckboxIsDisplayed(); - lockFilePage.checkCancelButtonIsDisplayed(); - lockFilePage.checkSaveButtonIsDisplayed(); + await lockFilePage.checkLockFileCheckboxIsDisplayed(); + await lockFilePage.checkCancelButtonIsDisplayed(); + await lockFilePage.checkSaveButtonIsDisplayed(); }); - it('[C286625] Should be able to click Cancel to cancel lock file operation', () => { - contentServices.lockContent(pngFileModel.name); + it('[C286625] Should be able to click Cancel to cancel lock file operation', async () => { + await contentServices.lockContent(pngFileModel.name); - lockFilePage.checkLockFileCheckboxIsDisplayed(); - lockFilePage.clickCancelButton(); + await lockFilePage.checkLockFileCheckboxIsDisplayed(); + await lockFilePage.clickCancelButton(); - contentServices.checkUnlockedIcon(pngFileModel.name); + await contentServices.checkUnlockedIcon(pngFileModel.name); }); - it('[C286603] Should be able to click on Lock file checkbox and lock a file', () => { - contentServices.lockContent(pngFileToLock.name); + it('[C286603] Should be able to click on Lock file checkbox and lock a file', async () => { + await contentServices.lockContent(pngFileToLock.name); - lockFilePage.checkLockFileCheckboxIsDisplayed(); - lockFilePage.clickLockFileCheckbox(); - lockFilePage.clickSaveButton(); + await lockFilePage.checkLockFileCheckboxIsDisplayed(); + await lockFilePage.clickLockFileCheckbox(); + await lockFilePage.clickSaveButton(); - contentServices.checkLockedIcon(pngFileToLock.name); + await contentServices.checkLockedIcon(pngFileToLock.name); }); - it('[C286618] Should be able to uncheck Lock file checkbox and unlock a file', () => { - contentServices.lockContent(pngFileModel.name); + it('[C286618] Should be able to uncheck Lock file checkbox and unlock a file', async () => { + await contentServices.lockContent(pngFileModel.name); - lockFilePage.checkLockFileCheckboxIsDisplayed(); - lockFilePage.clickLockFileCheckbox(); - lockFilePage.clickSaveButton(); + await lockFilePage.checkLockFileCheckboxIsDisplayed(); + await lockFilePage.clickLockFileCheckbox(); + await lockFilePage.clickSaveButton(); - contentServices.checkLockedIcon(pngFileModel.name); - contentServices.lockContent(pngFileModel.name); + await contentServices.checkLockedIcon(pngFileModel.name); + await contentServices.lockContent(pngFileModel.name); - lockFilePage.clickLockFileCheckbox(); - lockFilePage.clickSaveButton(); + await lockFilePage.clickLockFileCheckbox(); + await lockFilePage.clickSaveButton(); - contentServices.checkUnlockedIcon(pngFileModel.name); + await contentServices.checkUnlockedIcon(pngFileModel.name); }); }); describe('Locked file without owner permissions', () => { - beforeEach(async (done) => { + beforeEach(async () => { const pngUploadedFile = await uploadActions.uploadFile(pngFileModel.location, pngFileModel.name, documentLibrary); nodeId = pngUploadedFile.entry.id; @@ -184,10 +180,9 @@ describe('Lock File', () => { await navigationBarPage.openContentServicesFolder(documentLibrary); - done(); }); - afterEach(async (done) => { + afterEach(async () => { await this.alfrescoJsApi.login(adminUser.id, adminUser.password); try { @@ -196,67 +191,66 @@ describe('Lock File', () => { } catch (error) { } - done(); }); it('[C286610] Should not be able to delete a locked file', async () => { - contentServices.lockContent(pngFileModel.name); + await contentServices.lockContent(pngFileModel.name); - lockFilePage.checkLockFileCheckboxIsDisplayed(); - lockFilePage.clickLockFileCheckbox(); - lockFilePage.clickSaveButton(); + await lockFilePage.checkLockFileCheckboxIsDisplayed(); + await lockFilePage.clickLockFileCheckbox(); + await lockFilePage.clickSaveButton(); try { await this.alfrescoJsApi.core.nodesApi.deleteNode(nodeId); } catch (error) { - expect(error.status).toEqual(409); + await expect(error.status).toEqual(409); } }); it('[C286611] Should not be able to rename a locked file', async () => { - contentServices.lockContent(pngFileModel.name); + await contentServices.lockContent(pngFileModel.name); - lockFilePage.checkLockFileCheckboxIsDisplayed(); - lockFilePage.clickLockFileCheckbox(); - lockFilePage.clickSaveButton(); + await lockFilePage.checkLockFileCheckboxIsDisplayed(); + await lockFilePage.clickLockFileCheckbox(); + await lockFilePage.clickSaveButton(); try { await this.alfrescoJsApi.core.nodesApi.updateNode(nodeId, { name: 'My new name' }); } catch (error) { - expect(error.status).toEqual(409); + await expect(error.status).toEqual(409); } }); it('[C286612] Should not be able to move a locked file', async () => { - contentServices.lockContent(pngFileModel.name); + await contentServices.lockContent(pngFileModel.name); - lockFilePage.checkLockFileCheckboxIsDisplayed(); - lockFilePage.clickLockFileCheckbox(); - lockFilePage.clickSaveButton(); + await lockFilePage.checkLockFileCheckboxIsDisplayed(); + await lockFilePage.clickLockFileCheckbox(); + await lockFilePage.clickSaveButton(); try { await this.alfrescoJsApi.core.nodesApi.moveNode(nodeId, { targetParentId: '-my-' }); } catch (error) { - expect(error.status).toEqual(409); + await expect(error.status).toEqual(409); } }); it('[C286613] Should not be able to update a new version on a locked file', async () => { - contentServices.lockContent(pngFileModel.name); + await contentServices.lockContent(pngFileModel.name); - lockFilePage.checkLockFileCheckboxIsDisplayed(); - lockFilePage.clickLockFileCheckbox(); - lockFilePage.clickSaveButton(); + await lockFilePage.checkLockFileCheckboxIsDisplayed(); + await lockFilePage.clickLockFileCheckbox(); + await lockFilePage.clickSaveButton(); try { await this.alfrescoJsApi.core.nodesApi.updateNodeContent(nodeId, 'NEW FILE CONTENT'); } catch (error) { - expect(error.status).toEqual(409); + await expect(error.status).toEqual(409); } }); @@ -266,27 +260,27 @@ describe('Lock File', () => { let pngFileToBeLocked; - beforeAll(async (done) => { + beforeAll(async () => { try { pngFileToBeLocked = await uploadActions.uploadFile(pngFileToLock.location, pngFileToLock.name, documentLibrary); lockedFileNodeId = pngFileToBeLocked.entry.id; } catch (error) { } - done(); + }); - beforeEach(async (done) => { + beforeEach(async () => { try { const pngUploadedFile = await uploadActions.uploadFile(pngFileModel.location, pngFileModel.name, documentLibrary); nodeId = pngUploadedFile.entry.id; await loginPage.loginToContentServicesUsingUserModel(adminUser); - navigationBarPage.openContentServicesFolder(documentLibrary); + await navigationBarPage.openContentServicesFolder(documentLibrary); } catch (error) { } - done(); + }); - afterEach(async (done) => { + afterEach(async () => { await this.alfrescoJsApi.login(adminUser.id, adminUser.password); try { @@ -294,71 +288,69 @@ describe('Lock File', () => { } catch (error) { } - done(); - }); it('[C286614] Owner of the locked file should be able to rename if Allow owner to modify is checked', async () => { - contentServices.lockContent(pngFileModel.name); + await contentServices.lockContent(pngFileModel.name); - lockFilePage.checkLockFileCheckboxIsDisplayed(); - lockFilePage.clickLockFileCheckbox(); - lockFilePage.clickAllowOwnerCheckbox(); - lockFilePage.clickSaveButton(); + await lockFilePage.checkLockFileCheckboxIsDisplayed(); + await lockFilePage.clickLockFileCheckbox(); + await lockFilePage.clickAllowOwnerCheckbox(); + await lockFilePage.clickSaveButton(); try { const response = await this.alfrescoJsApi.core.nodesApi.updateNode(nodeId, { name: 'My new name' }); - expect(response.entry.name).toEqual('My new name'); + await expect(response.entry.name).toEqual('My new name'); } catch (error) { } }); it('[C286615] Owner of the locked file should be able to update a new version if Allow owner to modify is checked', async () => { - contentServices.lockContent(pngFileModel.name); + await contentServices.lockContent(pngFileModel.name); - lockFilePage.checkLockFileCheckboxIsDisplayed(); - lockFilePage.clickLockFileCheckbox(); - lockFilePage.clickAllowOwnerCheckbox(); - lockFilePage.clickSaveButton(); + await lockFilePage.checkLockFileCheckboxIsDisplayed(); + await lockFilePage.clickLockFileCheckbox(); + await lockFilePage.clickAllowOwnerCheckbox(); + await lockFilePage.clickSaveButton(); try { const response = await this.alfrescoJsApi.core.nodesApi.updateNodeContent(nodeId, 'NEW FILE CONTENT'); - expect(response.entry.modifiedAt).toBeGreaterThan(response.entry.createdAt); + await expect(response.entry.modifiedAt).toBeGreaterThan(response.entry.createdAt); } catch (error) { } }); it('[C286616] Owner of the locked file should be able to move if Allow owner to modify is checked', async () => { - contentServices.lockContent(pngFileModel.name); + await contentServices.lockContent(pngFileModel.name); - lockFilePage.checkLockFileCheckboxIsDisplayed(); - lockFilePage.clickLockFileCheckbox(); - lockFilePage.clickAllowOwnerCheckbox(); - lockFilePage.clickSaveButton(); + await lockFilePage.checkLockFileCheckboxIsDisplayed(); + await lockFilePage.clickLockFileCheckbox(); + await lockFilePage.clickAllowOwnerCheckbox(); + await lockFilePage.clickSaveButton(); try { await this.alfrescoJsApi.core.nodesApi.moveNode(nodeId, { targetParentId: '-my-' }); const movedFile = await this.alfrescoJsApi.core.nodesApi.getNode(nodeId); - expect(movedFile.entry.parentId).not.toEqual(documentLibrary); + await expect(movedFile.entry.parentId).not.toEqual(documentLibrary); } catch (error) { } }); - it('[C286617] Owner of the locked file should be able to delete if Allow owner to modify is checked', () => { - contentServices.lockContent(pngFileToLock.name); + it('[C286617] Owner of the locked file should be able to delete if Allow owner to modify is checked', async () => { + await contentServices.lockContent(pngFileToLock.name); - lockFilePage.checkLockFileCheckboxIsDisplayed(); - lockFilePage.clickLockFileCheckbox(); - lockFilePage.clickAllowOwnerCheckbox(); - lockFilePage.clickSaveButton(); + await lockFilePage.checkLockFileCheckboxIsDisplayed(); + await lockFilePage.clickLockFileCheckbox(); + await lockFilePage.clickAllowOwnerCheckbox(); + await lockFilePage.clickSaveButton(); - contentServices.deleteContent(pngFileToBeLocked.entry.name); - contentServices.checkContentIsNotDisplayed(pngFileToBeLocked.entry.name); + await contentServices.deleteContent(pngFileToBeLocked.entry.name); + await contentServices.checkContentIsNotDisplayed(pngFileToBeLocked.entry.name); }); }); diff --git a/e2e/content-services/metadata/aspect-oriented-config.e2e.ts b/e2e/content-services/metadata/aspect-oriented-config.e2e.ts index 101312dc09..e6ee12e860 100644 --- a/e2e/content-services/metadata/aspect-oriented-config.e2e.ts +++ b/e2e/content-services/metadata/aspect-oriented-config.e2e.ts @@ -43,12 +43,12 @@ describe('Aspect oriented config', () => { const acsUser = new AcsUserModel(); const pngFileModel = new FileModel({ - 'name': resources.Files.ADF_DOCUMENTS.PNG.file_name, - 'location': resources.Files.ADF_DOCUMENTS.PNG.file_location + name: resources.Files.ADF_DOCUMENTS.PNG.file_name, + location: resources.Files.ADF_DOCUMENTS.PNG.file_location }); let uploadActions; - beforeAll(async (done) => { + beforeAll(async () => { this.alfrescoJsApi = new AlfrescoApi({ provider: 'ECM', hostEcm: browser.params.testConfig.adf_acs.host @@ -81,19 +81,18 @@ describe('Aspect oriented config', () => { aspects.entry.aspectNames.push(defaultModel.concat(':', defaultEmptyPropertiesAspect)); - await this.alfrescoJsApi.core.nodesApi.updateNode(uploadedFile.entry.id, {'aspectNames': aspects.entry.aspectNames}); + await this.alfrescoJsApi.core.nodesApi.updateNode(uploadedFile.entry.id, { aspectNames: aspects.entry.aspectNames }); - done(); }); afterAll(async () => { await navigationBarPage.clickLogoutButton(); }); - afterEach(async (done) => { - viewerPage.clickCloseButton(); - contentServicesPage.checkAcsContainer(); - done(); + afterEach(async () => { + await viewerPage.clickCloseButton(); + await contentServicesPage.checkAcsContainer(); + }); it('[C261117] Should be possible restrict the display properties of one an aspect', async () => { @@ -118,23 +117,23 @@ describe('Aspect oriented config', () => { } })); - navigationBarPage.clickContentServicesButton(); + await navigationBarPage.clickContentServicesButton(); - viewerPage.viewFile(pngFileModel.name); - viewerPage.clickInfoButton(); - viewerPage.checkInfoSideBarIsDisplayed(); - metadataViewPage.clickOnPropertiesTab(); - metadataViewPage.informationButtonIsDisplayed(); - metadataViewPage.clickOnInformationButton(); + await viewerPage.viewFile(pngFileModel.name); + await viewerPage.clickInfoButton(); + await viewerPage.checkInfoSideBarIsDisplayed(); + await metadataViewPage.clickOnPropertiesTab(); + await metadataViewPage.informationButtonIsDisplayed(); + await metadataViewPage.clickOnInformationButton(); - metadataViewPage.clickMetadataGroup('IMAGE'); - metadataViewPage.checkPropertyIsVisible('properties.exif:pixelXDimension', 'textitem'); - metadataViewPage.checkPropertyIsVisible('properties.exif:pixelYDimension', 'textitem'); - metadataViewPage.checkPropertyIsNotVisible('properties.exif:isoSpeedRatings', 'textitem'); + await metadataViewPage.clickMetadataGroup('IMAGE'); + await metadataViewPage.checkPropertyIsVisible('properties.exif:pixelXDimension', 'textitem'); + await metadataViewPage.checkPropertyIsVisible('properties.exif:pixelYDimension', 'textitem'); + await metadataViewPage.checkPropertyIsNotVisible('properties.exif:isoSpeedRatings', 'textitem'); - metadataViewPage.editIconClick(); + await metadataViewPage.editIconClick(); - metadataViewPage.checkPropertyIsVisible('properties.exif:isoSpeedRatings', 'textitem'); + await metadataViewPage.checkPropertyIsVisible('properties.exif:isoSpeedRatings', 'textitem'); }); it('[C260185] Should ignore not existing aspect when present in the configuration', async () => { @@ -149,37 +148,37 @@ describe('Aspect oriented config', () => { } })); - navigationBarPage.clickContentServicesButton(); + await navigationBarPage.clickContentServicesButton(); - viewerPage.viewFile(pngFileModel.name); - viewerPage.clickInfoButton(); - viewerPage.checkInfoSideBarIsDisplayed(); - metadataViewPage.clickOnPropertiesTab(); - metadataViewPage.informationButtonIsDisplayed(); - metadataViewPage.clickOnInformationButton(); + await viewerPage.viewFile(pngFileModel.name); + await viewerPage.clickInfoButton(); + await viewerPage.checkInfoSideBarIsDisplayed(); + await metadataViewPage.clickOnPropertiesTab(); + await metadataViewPage.informationButtonIsDisplayed(); + await metadataViewPage.clickOnInformationButton(); - metadataViewPage.checkMetadataGroupIsPresent('EXIF'); - metadataViewPage.checkMetadataGroupIsPresent('properties'); - metadataViewPage.checkMetadataGroupIsPresent('Versionable'); - metadataViewPage.checkMetadataGroupIsNotPresent('exists'); + await metadataViewPage.checkMetadataGroupIsPresent('EXIF'); + await metadataViewPage.checkMetadataGroupIsPresent('properties'); + await metadataViewPage.checkMetadataGroupIsPresent('Versionable'); + await metadataViewPage.checkMetadataGroupIsNotPresent('exists'); }); it('[C260183] Should show all the aspect if the content-metadata configuration is NOT provided', async () => { await LocalStorageUtil.setConfigField('content-metadata', '{}'); - navigationBarPage.clickContentServicesButton(); + await navigationBarPage.clickContentServicesButton(); - viewerPage.viewFile(pngFileModel.name); - viewerPage.clickInfoButton(); - viewerPage.checkInfoSideBarIsDisplayed(); - metadataViewPage.clickOnPropertiesTab(); - metadataViewPage.informationButtonIsDisplayed(); - metadataViewPage.clickOnInformationButton(); + await viewerPage.viewFile(pngFileModel.name); + await viewerPage.clickInfoButton(); + await viewerPage.checkInfoSideBarIsDisplayed(); + await metadataViewPage.clickOnPropertiesTab(); + await metadataViewPage.informationButtonIsDisplayed(); + await metadataViewPage.clickOnInformationButton(); - metadataViewPage.checkMetadataGroupIsPresent('EXIF'); - metadataViewPage.checkMetadataGroupIsPresent('properties'); - metadataViewPage.checkMetadataGroupIsPresent('Versionable'); + await metadataViewPage.checkMetadataGroupIsPresent('EXIF'); + await metadataViewPage.checkMetadataGroupIsPresent('properties'); + await metadataViewPage.checkMetadataGroupIsPresent('Versionable'); }); it('[C260182] Should show all the aspects if the default configuration contains the star symbol', async () => { @@ -190,19 +189,18 @@ describe('Aspect oriented config', () => { } })); - navigationBarPage.clickContentServicesButton(); + await navigationBarPage.clickContentServicesButton(); - viewerPage.viewFile(pngFileModel.name); - viewerPage.clickInfoButton(); - viewerPage.checkInfoSideBarIsDisplayed(); - metadataViewPage.clickOnPropertiesTab(); + await viewerPage.viewFile(pngFileModel.name); + await viewerPage.clickInfoButton(); + await viewerPage.checkInfoSideBarIsDisplayed(); + await metadataViewPage.clickOnPropertiesTab(); + await metadataViewPage.informationButtonIsDisplayed(); + await metadataViewPage.clickOnInformationButton(); - metadataViewPage.informationButtonIsDisplayed(); - metadataViewPage.clickOnInformationButton(); - - metadataViewPage.checkMetadataGroupIsPresent('EXIF'); - metadataViewPage.checkMetadataGroupIsPresent('properties'); - metadataViewPage.checkMetadataGroupIsPresent('Versionable'); + await metadataViewPage.checkMetadataGroupIsPresent('EXIF'); + await metadataViewPage.checkMetadataGroupIsPresent('properties'); + await metadataViewPage.checkMetadataGroupIsPresent('Versionable'); }); it('[C268899] Should be possible use a Translation key as Title of a metadata group', async () => { @@ -232,21 +230,21 @@ describe('Aspect oriented config', () => { ' }' + '}'); - navigationBarPage.clickContentServicesButton(); + await navigationBarPage.clickContentServicesButton(); - viewerPage.viewFile(pngFileModel.name); - viewerPage.clickInfoButton(); - viewerPage.checkInfoSideBarIsDisplayed(); - metadataViewPage.clickOnPropertiesTab(); + await viewerPage.viewFile(pngFileModel.name); + await viewerPage.clickInfoButton(); + await viewerPage.checkInfoSideBarIsDisplayed(); + await metadataViewPage.clickOnPropertiesTab(); - metadataViewPage.informationButtonIsDisplayed(); - metadataViewPage.clickOnInformationButton(); + await metadataViewPage.informationButtonIsDisplayed(); + await metadataViewPage.clickOnInformationButton(); - metadataViewPage.checkMetadataGroupIsPresent('GROUP-TITLE1-TRANSLATION-KEY'); - metadataViewPage.checkMetadataGroupIsPresent('GROUP-TITLE2-TRANSLATION-KEY'); + await metadataViewPage.checkMetadataGroupIsPresent('GROUP-TITLE1-TRANSLATION-KEY'); + await metadataViewPage.checkMetadataGroupIsPresent('GROUP-TITLE2-TRANSLATION-KEY'); - expect(metadataViewPage.getMetadataGroupTitle('GROUP-TITLE1-TRANSLATION-KEY')).toBe('CUSTOM TITLE TRANSLATION ONE'); - expect(metadataViewPage.getMetadataGroupTitle('GROUP-TITLE2-TRANSLATION-KEY')).toBe('CUSTOM TITLE TRANSLATION TWO'); + await expect(await metadataViewPage.getMetadataGroupTitle('GROUP-TITLE1-TRANSLATION-KEY')).toBe('CUSTOM TITLE TRANSLATION ONE'); + await expect(await metadataViewPage.getMetadataGroupTitle('GROUP-TITLE2-TRANSLATION-KEY')).toBe('CUSTOM TITLE TRANSLATION TWO'); }); @@ -261,23 +259,22 @@ describe('Aspect oriented config', () => { ' }' + '}'); - navigationBarPage.clickContentServicesButton(); + await navigationBarPage.clickContentServicesButton(); - viewerPage.viewFile(pngFileModel.name); - viewerPage.clickInfoButton(); - viewerPage.checkInfoSideBarIsDisplayed(); - metadataViewPage.clickOnPropertiesTab(); + await viewerPage.viewFile(pngFileModel.name); + await viewerPage.clickInfoButton(); + await viewerPage.checkInfoSideBarIsDisplayed(); + await metadataViewPage.clickOnPropertiesTab(); - check(metadataViewPage.presetSwitch); + await check(metadataViewPage.presetSwitch); - metadataViewPage.enterPresetText('custom-preset'); + await metadataViewPage.enterPresetText('custom-preset'); - metadataViewPage.informationButtonIsDisplayed(); - metadataViewPage.clickOnInformationButton(); + await metadataViewPage.informationButtonIsDisplayed(); + await metadataViewPage.clickOnInformationButton(); - metadataViewPage.checkMetadataGroupIsPresent('properties'); - metadataViewPage.checkMetadataGroupIsPresent('EXIF'); - metadataViewPage.checkMetadataGroupIsPresent('Versionable'); + await metadataViewPage.checkMetadataGroupIsPresent('properties'); + await metadataViewPage.checkMetadataGroupIsPresent('Versionable'); }); it('[C299186] The aspect without properties is not displayed', async () => { @@ -290,17 +287,17 @@ describe('Aspect oriented config', () => { ' }' + '}'); - navigationBarPage.clickContentServicesButton(); + await navigationBarPage.clickContentServicesButton(); - viewerPage.viewFile(pngFileModel.name); - viewerPage.clickInfoButton(); - viewerPage.checkInfoSideBarIsDisplayed(); - metadataViewPage.clickOnPropertiesTab(); + await viewerPage.viewFile(pngFileModel.name); + await viewerPage.clickInfoButton(); + await viewerPage.checkInfoSideBarIsDisplayed(); + await metadataViewPage.clickOnPropertiesTab(); - metadataViewPage.informationButtonIsDisplayed(); - metadataViewPage.clickOnInformationButton(); + await metadataViewPage.informationButtonIsDisplayed(); + await metadataViewPage.clickOnInformationButton(); - metadataViewPage.checkMetadataGroupIsNotPresent(emptyAspectName); + await metadataViewPage.checkMetadataGroupIsNotPresent(emptyAspectName); }); it('[C299187] The aspect with empty properties is displayed when edit', async () => { @@ -313,20 +310,20 @@ describe('Aspect oriented config', () => { ' }' + '}'); - navigationBarPage.clickContentServicesButton(); + await navigationBarPage.clickContentServicesButton(); - viewerPage.viewFile(pngFileModel.name); - viewerPage.clickInfoButton(); - viewerPage.checkInfoSideBarIsDisplayed(); - metadataViewPage.clickOnPropertiesTab(); + await viewerPage.viewFile(pngFileModel.name); + await viewerPage.clickInfoButton(); + await viewerPage.checkInfoSideBarIsDisplayed(); + await metadataViewPage.clickOnPropertiesTab(); - metadataViewPage.informationButtonIsDisplayed(); - metadataViewPage.clickOnInformationButton(); + await metadataViewPage.informationButtonIsDisplayed(); + await metadataViewPage.clickOnInformationButton(); - metadataViewPage.checkMetadataGroupIsNotPresent(aspectName); + await metadataViewPage.checkMetadataGroupIsNotPresent(aspectName); - metadataViewPage.editIconClick(); + await metadataViewPage.editIconClick(); - metadataViewPage.checkMetadataGroupIsPresent(aspectName); + await metadataViewPage.checkMetadataGroupIsPresent(aspectName); }); }); diff --git a/e2e/content-services/metadata/metadata-permissions.e2e.ts b/e2e/content-services/metadata/metadata-permissions.e2e.ts index 4ebf8846b8..c20281352d 100644 --- a/e2e/content-services/metadata/metadata-permissions.e2e.ts +++ b/e2e/content-services/metadata/metadata-permissions.e2e.ts @@ -52,8 +52,8 @@ describe('permissions', () => { let site; const pngFileModel = new FileModel({ - 'name': resources.Files.ADF_DOCUMENTS.PNG.file_name, - 'location': resources.Files.ADF_DOCUMENTS.PNG.file_location + name: resources.Files.ADF_DOCUMENTS.PNG.file_name, + location: resources.Files.ADF_DOCUMENTS.PNG.file_location }); this.alfrescoJsApi = new AlfrescoApi({ provider: 'ECM', @@ -61,7 +61,7 @@ describe('permissions', () => { }); const uploadActions = new UploadActions(this.alfrescoJsApi); - beforeAll(async (done) => { + beforeAll(async () => { await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); @@ -91,7 +91,6 @@ describe('permissions', () => { await uploadActions.uploadFile(pngFileModel.location, pngFileModel.name, site.entry.guid); - done(); }); afterAll(async () => { @@ -102,52 +101,52 @@ describe('permissions', () => { it('[C274692] Should not be possible edit metadata properties when the user is a consumer user', async () => { await loginPage.loginToContentServicesUsingUserModel(consumerUser); - navigationBarPage.openContentServicesFolder(site.entry.guid); + await navigationBarPage.openContentServicesFolder(site.entry.guid); - viewerPage.viewFile(pngFileModel.name); - viewerPage.clickInfoButton(); - viewerPage.checkInfoSideBarIsDisplayed(); - metadataViewPage.clickOnPropertiesTab(); - metadataViewPage.editIconIsNotDisplayed(); + await viewerPage.viewFile(pngFileModel.name); + await viewerPage.clickInfoButton(); + await viewerPage.checkInfoSideBarIsDisplayed(); + await metadataViewPage.clickOnPropertiesTab(); + await metadataViewPage.editIconIsNotDisplayed(); }); it('[C279971] Should be possible edit metadata properties when the user is a collaborator user', async () => { await loginPage.loginToContentServicesUsingUserModel(collaboratorUser); - navigationBarPage.openContentServicesFolder(site.entry.guid); + await navigationBarPage.openContentServicesFolder(site.entry.guid); - viewerPage.viewFile(pngFileModel.name); - viewerPage.clickInfoButton(); - viewerPage.checkInfoSideBarIsDisplayed(); - metadataViewPage.clickOnPropertiesTab(); - metadataViewPage.editIconIsDisplayed(); + await viewerPage.viewFile(pngFileModel.name); + await viewerPage.clickInfoButton(); + await viewerPage.checkInfoSideBarIsDisplayed(); + await metadataViewPage.clickOnPropertiesTab(); + await metadataViewPage.editIconIsDisplayed(); - expect(viewerPage.getActiveTab()).toEqual(METADATA.PROPERTY_TAB); + await expect(await viewerPage.getActiveTab()).toEqual(METADATA.PROPERTY_TAB); - metadataViewPage.clickOnInformationButton(); + await metadataViewPage.clickOnInformationButton(); - metadataViewPage.clickMetadataGroup('EXIF'); + await metadataViewPage.clickMetadataGroup('EXIF'); - metadataViewPage.editIconIsDisplayed(); + await metadataViewPage.editIconIsDisplayed(); }); it('[C279972] Should be possible edit metadata properties when the user is a contributor user', async () => { await loginPage.loginToContentServicesUsingUserModel(collaboratorUser); - navigationBarPage.openContentServicesFolder(site.entry.guid); + await navigationBarPage.openContentServicesFolder(site.entry.guid); - viewerPage.viewFile(pngFileModel.name); - viewerPage.clickInfoButton(); - viewerPage.checkInfoSideBarIsDisplayed(); - metadataViewPage.clickOnPropertiesTab(); - metadataViewPage.editIconIsDisplayed(); + await viewerPage.viewFile(pngFileModel.name); + await viewerPage.clickInfoButton(); + await viewerPage.checkInfoSideBarIsDisplayed(); + await metadataViewPage.clickOnPropertiesTab(); + await metadataViewPage.editIconIsDisplayed(); - expect(viewerPage.getActiveTab()).toEqual(METADATA.PROPERTY_TAB); + await expect(await viewerPage.getActiveTab()).toEqual(METADATA.PROPERTY_TAB); - metadataViewPage.clickOnInformationButton(); + await metadataViewPage.clickOnInformationButton(); - metadataViewPage.clickMetadataGroup('EXIF'); + await metadataViewPage.clickMetadataGroup('EXIF'); - metadataViewPage.editIconIsDisplayed(); + await metadataViewPage.editIconIsDisplayed(); }); }); diff --git a/e2e/content-services/metadata/metadata-properties.e2e.ts b/e2e/content-services/metadata/metadata-properties.e2e.ts index fa2813a62b..b582b8bc94 100644 --- a/e2e/content-services/metadata/metadata-properties.e2e.ts +++ b/e2e/content-services/metadata/metadata-properties.e2e.ts @@ -51,8 +51,8 @@ describe('CardView Component - properties', () => { const acsUser = new AcsUserModel(); const pngFileModel = new FileModel({ - 'name': resources.Files.ADF_DOCUMENTS.PNG.file_name, - 'location': resources.Files.ADF_DOCUMENTS.PNG.file_location + name: resources.Files.ADF_DOCUMENTS.PNG.file_name, + location: resources.Files.ADF_DOCUMENTS.PNG.file_location }); this.alfrescoJsApi = new AlfrescoApi({ provider: 'ECM', @@ -60,7 +60,7 @@ describe('CardView Component - properties', () => { }); const uploadActions = new UploadActions(this.alfrescoJsApi); - beforeAll(async (done) => { + beforeAll(async () => { await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); await this.alfrescoJsApi.core.peopleApi.addPerson(acsUser); @@ -74,139 +74,133 @@ describe('CardView Component - properties', () => { await loginPage.loginToContentServicesUsingUserModel(acsUser); - navigationBarPage.clickContentServicesButton(); - contentServicesPage.waitForTableBody(); - - done(); - }); - - afterAll(async () => { - await navigationBarPage.clickLogoutButton(); - }); - - afterEach(() => { - viewerPage.clickCloseButton(); - }); - - it('[C246516] Should show/hide the empty metadata when the property displayEmpty is true/false', () => { - viewerPage.viewFile(pngFileModel.name); - viewerPage.clickInfoButton(); - viewerPage.checkInfoSideBarIsDisplayed(); - metadataViewPage.clickOnPropertiesTab(); - metadataViewPage.editIconIsDisplayed(); - - expect(viewerPage.getActiveTab()).toEqual(METADATA.PROPERTY_TAB); - - metadataViewPage.clickOnInformationButton(); - - metadataViewPage.clickMetadataGroup('EXIF'); - - metadataViewPage.checkPropertyIsVisible('properties.exif:flash', 'boolean'); - metadataViewPage.checkPropertyIsNotVisible('properties.exif:model', 'textitem'); - - check(metadataViewPage.displayEmptySwitch); - - metadataViewPage.checkPropertyIsVisible('properties.exif:flash', 'boolean'); - metadataViewPage.checkPropertyIsVisible('properties.exif:model', 'textitem'); - }); - - it('[C260179] Should not be possible edit the basic property when readOnly is true', () => { - viewerPage.viewFile(pngFileModel.name); - viewerPage.clickInfoButton(); - viewerPage.checkInfoSideBarIsDisplayed(); - metadataViewPage.clickOnPropertiesTab(); - metadataViewPage.editIconIsDisplayed(); - - check(metadataViewPage.readonlySwitch); - - metadataViewPage.editIconIsNotDisplayed(); - }); - - it('[C268965] Should multi property allow expand multi accordion at the same time when set', () => { - viewerPage.viewFile(pngFileModel.name); - viewerPage.clickInfoButton(); - viewerPage.checkInfoSideBarIsDisplayed(); - metadataViewPage.clickOnPropertiesTab(); - - metadataViewPage.clickOnInformationButton(); - - metadataViewPage.checkMetadataGroupIsNotExpand('EXIF'); - metadataViewPage.checkMetadataGroupIsNotExpand('properties'); - - metadataViewPage.clickMetadataGroup('properties'); - - metadataViewPage.checkMetadataGroupIsNotExpand('EXIF'); - metadataViewPage.checkMetadataGroupIsExpand('properties'); - - metadataViewPage.clickMetadataGroup('EXIF'); - - metadataViewPage.checkMetadataGroupIsExpand('EXIF'); - metadataViewPage.checkMetadataGroupIsNotExpand('properties'); - - check(metadataViewPage.multiSwitch); - - metadataViewPage.clickMetadataGroup('properties'); - - metadataViewPage.checkMetadataGroupIsExpand('EXIF'); - metadataViewPage.checkMetadataGroupIsExpand('properties'); + await navigationBarPage.clickContentServicesButton(); + await contentServicesPage.waitForTableBody(); }); - it('[C280559] Should show/hide the default metadata properties when displayDefaultProperties is true/false', () => { - viewerPage.viewFile(pngFileModel.name); - viewerPage.clickInfoButton(); - viewerPage.checkInfoSideBarIsDisplayed(); - metadataViewPage.clickOnPropertiesTab(); - - uncheck(metadataViewPage.defaultPropertiesSwitch); - - metadataViewPage.checkMetadataGroupIsNotPresent('properties'); - metadataViewPage.checkMetadataGroupIsPresent('EXIF'); - metadataViewPage.checkMetadataGroupIsExpand('EXIF'); - - check(metadataViewPage.defaultPropertiesSwitch); - - metadataViewPage.checkMetadataGroupIsPresent('properties'); - metadataViewPage.checkMetadataGroupIsExpand('properties'); + afterEach(async () => { + await viewerPage.clickCloseButton(); }); - it('[C280560] Should show/hide the more properties button when displayDefaultProperties is true/false', () => { - viewerPage.viewFile(pngFileModel.name); - viewerPage.clickInfoButton(); - viewerPage.checkInfoSideBarIsDisplayed(); - metadataViewPage.clickOnPropertiesTab(); + it('[C246516] Should show/hide the empty metadata when the property displayEmpty is true/false', async () => { + await viewerPage.viewFile(pngFileModel.name); + await viewerPage.clickInfoButton(); + await viewerPage.checkInfoSideBarIsDisplayed(); + await metadataViewPage.clickOnPropertiesTab(); + await metadataViewPage.editIconIsDisplayed(); - metadataViewPage.informationButtonIsDisplayed(); + await expect(await viewerPage.getActiveTab()).toEqual(METADATA.PROPERTY_TAB); - uncheck(metadataViewPage.defaultPropertiesSwitch); + await metadataViewPage.clickOnInformationButton(); - metadataViewPage.informationButtonIsNotDisplayed(); + await metadataViewPage.clickMetadataGroup('EXIF'); + + await metadataViewPage.checkPropertyIsVisible('properties.exif:flash', 'boolean'); + await metadataViewPage.checkPropertyIsNotVisible('properties.exif:model', 'textitem'); + + await check(metadataViewPage.displayEmptySwitch); + + await metadataViewPage.checkPropertyIsVisible('properties.exif:flash', 'boolean'); + await metadataViewPage.checkPropertyIsVisible('properties.exif:model', 'textitem'); }); - it('[C307975] Should be able to choose which aspect to show expanded in the info-drawer', () => { - viewerPage.viewFile(pngFileModel.name); - viewerPage.clickInfoButton(); - viewerPage.checkInfoSideBarIsDisplayed(); - metadataViewPage.clickOnPropertiesTab(); + it('[C260179] Should not be possible edit the basic property when readOnly is true', async () => { + await viewerPage.viewFile(pngFileModel.name); + await viewerPage.clickInfoButton(); + await viewerPage.checkInfoSideBarIsDisplayed(); + await metadataViewPage.clickOnPropertiesTab(); + await metadataViewPage.editIconIsDisplayed(); - metadataViewPage.typeAspectName('EXIF'); - metadataViewPage.clickApplyAspect(); + await check(metadataViewPage.readonlySwitch); - metadataViewPage.checkMetadataGroupIsExpand('EXIF'); - metadataViewPage.checkMetadataGroupIsNotExpand('properties'); - check(metadataViewPage.displayEmptySwitch); + await metadataViewPage.editIconIsNotDisplayed(); + }); - metadataViewPage.checkPropertyIsVisible('properties.exif:flash', 'boolean'); - metadataViewPage.checkPropertyIsVisible('properties.exif:model', 'textitem'); + it('[C268965] Should multi property allow expand multi accordion at the same time when set', async () => { + await viewerPage.viewFile(pngFileModel.name); + await viewerPage.clickInfoButton(); + await viewerPage.checkInfoSideBarIsDisplayed(); + await metadataViewPage.clickOnPropertiesTab(); - metadataViewPage.typeAspectName('nonexistent'); - metadataViewPage.clickApplyAspect(); - metadataViewPage.checkMetadataGroupIsNotPresent('nonexistent'); + await metadataViewPage.clickOnInformationButton(); - metadataViewPage.typeAspectName('Properties'); - metadataViewPage.clickApplyAspect(); - metadataViewPage.checkMetadataGroupIsPresent('properties'); - metadataViewPage.checkMetadataGroupIsExpand('properties'); + await metadataViewPage.checkMetadataGroupIsNotExpand('EXIF'); + await metadataViewPage.checkMetadataGroupIsNotExpand('properties'); + await metadataViewPage.clickMetadataGroup('properties'); + + await metadataViewPage.checkMetadataGroupIsNotExpand('EXIF'); + await metadataViewPage.checkMetadataGroupIsExpand('properties'); + + await metadataViewPage.clickMetadataGroup('EXIF'); + + await metadataViewPage.checkMetadataGroupIsExpand('EXIF'); + await metadataViewPage.checkMetadataGroupIsNotExpand('properties'); + + await check(metadataViewPage.multiSwitch); + + await metadataViewPage.clickMetadataGroup('properties'); + + await metadataViewPage.checkMetadataGroupIsExpand('EXIF'); + await metadataViewPage.checkMetadataGroupIsExpand('properties'); + + }); + + it('[C280559] Should show/hide the default metadata properties when displayDefaultProperties is true/false', async () => { + await viewerPage.viewFile(pngFileModel.name); + await viewerPage.clickInfoButton(); + await viewerPage.checkInfoSideBarIsDisplayed(); + await metadataViewPage.clickOnPropertiesTab(); + + await uncheck(metadataViewPage.defaultPropertiesSwitch); + + await metadataViewPage.checkMetadataGroupIsNotPresent('properties'); + await metadataViewPage.checkMetadataGroupIsPresent('EXIF'); + await metadataViewPage.checkMetadataGroupIsExpand('EXIF'); + + await check(metadataViewPage.defaultPropertiesSwitch); + + await metadataViewPage.checkMetadataGroupIsPresent('properties'); + await metadataViewPage.checkMetadataGroupIsExpand('properties'); + }); + + it('[C280560] Should show/hide the more properties button when displayDefaultProperties is true/false', async () => { + await viewerPage.viewFile(pngFileModel.name); + await viewerPage.clickInfoButton(); + await viewerPage.checkInfoSideBarIsDisplayed(); + await metadataViewPage.clickOnPropertiesTab(); + + await metadataViewPage.informationButtonIsDisplayed(); + + await uncheck(metadataViewPage.defaultPropertiesSwitch); + + await metadataViewPage.informationButtonIsNotDisplayed(); + }); + + it('[C307975] Should be able to choose which aspect to show expanded in the info-drawer', async () => { + await viewerPage.viewFile(pngFileModel.name); + await viewerPage.clickInfoButton(); + await viewerPage.checkInfoSideBarIsDisplayed(); + await metadataViewPage.clickOnPropertiesTab(); + + await metadataViewPage.typeAspectName('EXIF'); + await metadataViewPage.clickApplyAspect(); + + await metadataViewPage.checkMetadataGroupIsExpand('EXIF'); + await metadataViewPage.checkMetadataGroupIsNotExpand('properties'); + await check(metadataViewPage.displayEmptySwitch); + + await metadataViewPage.checkPropertyIsVisible('properties.exif:flash', 'boolean'); + await metadataViewPage.checkPropertyIsVisible('properties.exif:model', 'textitem'); + + await metadataViewPage.typeAspectName('nonexistent'); + await metadataViewPage.clickApplyAspect(); + await metadataViewPage.checkMetadataGroupIsNotPresent('nonexistent'); + + await metadataViewPage.typeAspectName('Properties'); + await metadataViewPage.clickApplyAspect(); + await metadataViewPage.checkMetadataGroupIsPresent('properties'); + await metadataViewPage.checkMetadataGroupIsExpand('properties'); }); }); diff --git a/e2e/content-services/metadata/metadata-smoke-tests.e2e.ts b/e2e/content-services/metadata/metadata-smoke-tests.e2e.ts index 4fd859b654..1090fa4c13 100644 --- a/e2e/content-services/metadata/metadata-smoke-tests.e2e.ts +++ b/e2e/content-services/metadata/metadata-smoke-tests.e2e.ts @@ -56,8 +56,8 @@ describe('Metadata component', () => { const folderName = 'Metadata Folder'; const pngFileModel = new FileModel({ - 'name': resources.Files.ADF_DOCUMENTS.PNG.file_name, - 'location': resources.Files.ADF_DOCUMENTS.PNG.file_location + name: resources.Files.ADF_DOCUMENTS.PNG.file_name, + location: resources.Files.ADF_DOCUMENTS.PNG.file_location }); this.alfrescoJsApi = new AlfrescoApi({ @@ -67,21 +67,14 @@ describe('Metadata component', () => { const uploadActions = new UploadActions(this.alfrescoJsApi); - beforeAll(async (done) => { - + beforeAll(async () => { await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); - await this.alfrescoJsApi.core.peopleApi.addPerson(acsUser); - await this.alfrescoJsApi.login(acsUser.id, acsUser.password); - const pngUploadedFile = await uploadActions.uploadFile(pngFileModel.location, pngFileModel.name, '-my-'); - Object.assign(pngFileModel, pngUploadedFile.entry); - pngFileModel.update(pngUploadedFile.entry); - done(); }); afterAll(async () => { @@ -92,9 +85,8 @@ describe('Metadata component', () => { beforeAll(async () => { await loginPage.loginToContentServicesUsingUserModel(acsUser); - navigationBarPage.clickContentServicesButton(); - contentServicesPage.waitForTableBody(); - + await navigationBarPage.clickContentServicesButton(); + await contentServicesPage.waitForTableBody(); await LocalStorageUtil.setConfigField('content-metadata', JSON.stringify({ presets: { default: { @@ -104,194 +96,193 @@ describe('Metadata component', () => { })); }); - beforeEach(async (done) => { - viewerPage.viewFile(pngFileModel.name); - viewerPage.checkFileIsLoaded(); - done(); + beforeEach(async () => { + await viewerPage.viewFile(pngFileModel.name); + await viewerPage.checkFileIsLoaded(); }); - afterEach(() => { - viewerPage.clickCloseButton(); - contentServicesPage.waitForTableBody(); + afterEach(async () => { + await viewerPage.clickCloseButton(); + await contentServicesPage.waitForTableBody(); }); - it('[C245652] Should be possible to display a file\'s properties', () => { - viewerPage.clickInfoButton(); - viewerPage.checkInfoSideBarIsDisplayed(); - metadataViewPage.clickOnPropertiesTab(); + it('[C245652] Should be possible to display a file\'s properties', async () => { + await viewerPage.clickInfoButton(); + await viewerPage.checkInfoSideBarIsDisplayed(); + await metadataViewPage.clickOnPropertiesTab(); - expect(metadataViewPage.getTitle()).toEqual(METADATA.TITLE); - expect(viewerPage.getActiveTab()).toEqual(METADATA.PROPERTY_TAB); - expect(metadataViewPage.getExpandedAspectName()).toEqual(METADATA.DEFAULT_ASPECT); - expect(metadataViewPage.getName()).toEqual(pngFileModel.name); - expect(metadataViewPage.getCreator()).toEqual(pngFileModel.getCreatedByUser().displayName); - expect(metadataViewPage.getCreatedDate()).toEqual(dateFormat(pngFileModel.createdAt, METADATA.DATA_FORMAT)); - expect(metadataViewPage.getModifier()).toEqual(pngFileModel.getCreatedByUser().displayName); - expect(metadataViewPage.getModifiedDate()).toEqual(dateFormat(pngFileModel.createdAt, METADATA.DATA_FORMAT)); - expect(metadataViewPage.getMimetypeName()).toEqual(pngFileModel.getContent().mimeTypeName); - expect(metadataViewPage.getSize()).toEqual(pngFileModel.getContent().getSizeInBytes()); + await expect(await metadataViewPage.getTitle()).toEqual(METADATA.TITLE); + await expect(await viewerPage.getActiveTab()).toEqual(METADATA.PROPERTY_TAB); + await expect(await metadataViewPage.getExpandedAspectName()).toEqual(METADATA.DEFAULT_ASPECT); + await expect(await metadataViewPage.getName()).toEqual(pngFileModel.name); + await expect(await metadataViewPage.getCreator()).toEqual(pngFileModel.getCreatedByUser().displayName); + await expect(await metadataViewPage.getCreatedDate()).toEqual(dateFormat(pngFileModel.createdAt, METADATA.DATA_FORMAT)); + await expect(await metadataViewPage.getModifier()).toEqual(pngFileModel.getCreatedByUser().displayName); + await expect(await metadataViewPage.getModifiedDate()).toEqual(dateFormat(pngFileModel.createdAt, METADATA.DATA_FORMAT)); + await expect(await metadataViewPage.getMimetypeName()).toEqual(pngFileModel.getContent().mimeTypeName); + await expect(await metadataViewPage.getSize()).toEqual(pngFileModel.getContent().getSizeInBytes()); - metadataViewPage.editIconIsDisplayed(); - metadataViewPage.informationButtonIsDisplayed(); - expect(metadataViewPage.getInformationButtonText()).toEqual(METADATA.LESS_INFO_BUTTON); - expect(metadataViewPage.getInformationIconText()).toEqual(METADATA.ARROW_UP); + await metadataViewPage.editIconIsDisplayed(); + await metadataViewPage.informationButtonIsDisplayed(); + await expect(await metadataViewPage.getInformationButtonText()).toEqual(METADATA.LESS_INFO_BUTTON); + await expect(await metadataViewPage.getInformationIconText()).toEqual(METADATA.ARROW_UP); }); - it('[C272769] Should be possible to display more details when clicking on More Information button', () => { - viewerPage.clickInfoButton(); - viewerPage.checkInfoSideBarIsDisplayed(); - metadataViewPage.clickOnPropertiesTab(); - metadataViewPage.informationButtonIsDisplayed(); - metadataViewPage.clickOnInformationButton(); - expect(metadataViewPage.getInformationButtonText()).toEqual(METADATA.MORE_INFO_BUTTON); - expect(metadataViewPage.getInformationIconText()).toEqual(METADATA.ARROW_DOWN); + it('[C272769] Should be possible to display more details when clicking on More Information button', async () => { + await viewerPage.clickInfoButton(); + await viewerPage.checkInfoSideBarIsDisplayed(); + await metadataViewPage.clickOnPropertiesTab(); + await metadataViewPage.informationButtonIsDisplayed(); + await metadataViewPage.clickOnInformationButton(); + await expect(await metadataViewPage.getInformationButtonText()).toEqual(METADATA.MORE_INFO_BUTTON); + await expect(await metadataViewPage.getInformationIconText()).toEqual(METADATA.ARROW_DOWN); }); - it('[C270952] Should be possible to open/close properties using info icon', () => { - viewerPage.clickInfoButton(); - viewerPage.checkInfoSideBarIsDisplayed(); - metadataViewPage.clickOnPropertiesTab().informationButtonIsDisplayed(); - viewerPage.clickInfoButton(); - viewerPage.checkInfoSideBarIsNotDisplayed(); - viewerPage.clickInfoButton(); - viewerPage.checkInfoSideBarIsDisplayed(); - expect(viewerPage.getActiveTab()).toEqual(METADATA.COMMENTS_TAB); - metadataViewPage.clickOnPropertiesTab(); - expect(viewerPage.getActiveTab()).toEqual(METADATA.PROPERTY_TAB); - expect(metadataViewPage.getEditIconTooltip()).toEqual(METADATA.EDIT_BUTTON_TOOLTIP); + it('[C270952] Should be possible to open/close properties using info icon', async () => { + await viewerPage.clickInfoButton(); + await viewerPage.checkInfoSideBarIsDisplayed(); + await metadataViewPage.clickOnPropertiesTab(); + await metadataViewPage.informationButtonIsDisplayed(); + await viewerPage.clickInfoButton(); + await viewerPage.checkInfoSideBarIsNotDisplayed(); + await viewerPage.clickInfoButton(); + await viewerPage.checkInfoSideBarIsDisplayed(); + await expect(await viewerPage.getActiveTab()).toEqual(METADATA.COMMENTS_TAB); + await metadataViewPage.clickOnPropertiesTab(); + await expect(await viewerPage.getActiveTab()).toEqual(METADATA.PROPERTY_TAB); + await expect(await metadataViewPage.getEditIconTooltip()).toEqual(METADATA.EDIT_BUTTON_TOOLTIP); }); - it('[C245654] Should be possible edit the basic Metadata Info of a Document', () => { - viewerPage.clickInfoButton(); - viewerPage.checkInfoSideBarIsDisplayed(); - metadataViewPage.clickOnPropertiesTab(); - metadataViewPage.editIconIsDisplayed(); + it('[C245654] Should be possible edit the basic Metadata Info of a Document', async () => { + await viewerPage.clickInfoButton(); + await viewerPage.checkInfoSideBarIsDisplayed(); + await metadataViewPage.clickOnPropertiesTab(); + await metadataViewPage.editIconIsDisplayed(); - expect(viewerPage.getActiveTab()).toEqual(METADATA.PROPERTY_TAB); + await expect(await viewerPage.getActiveTab()).toEqual(METADATA.PROPERTY_TAB); - metadataViewPage.editIconClick(); - metadataViewPage.editPropertyIconIsDisplayed('name'); - metadataViewPage.editPropertyIconIsDisplayed('properties.cm:title'); - metadataViewPage.editPropertyIconIsDisplayed('properties.cm:description'); + await metadataViewPage.editIconClick(); + await metadataViewPage.editPropertyIconIsDisplayed('name'); + await metadataViewPage.editPropertyIconIsDisplayed('properties.cm:title'); + await metadataViewPage.editPropertyIconIsDisplayed('properties.cm:description'); - expect(metadataViewPage.getPropertyIconTooltip('name')).toEqual('Edit'); - expect(metadataViewPage.getPropertyIconTooltip('properties.cm:title')).toEqual('Edit'); - expect(metadataViewPage.getPropertyIconTooltip('properties.cm:description')).toEqual('Edit'); + await expect(await metadataViewPage.getPropertyIconTooltip('name')).toEqual('Edit'); + await expect(await metadataViewPage.getPropertyIconTooltip('properties.cm:title')).toEqual('Edit'); + await expect(await metadataViewPage.getPropertyIconTooltip('properties.cm:description')).toEqual('Edit'); - metadataViewPage.clickEditPropertyIcons('name'); - metadataViewPage.updatePropertyIconIsDisplayed('name'); - metadataViewPage.clearPropertyIconIsDisplayed('name'); + await metadataViewPage.clickEditPropertyIcons('name'); + await metadataViewPage.updatePropertyIconIsDisplayed('name'); + await metadataViewPage.clearPropertyIconIsDisplayed('name'); - metadataViewPage.enterPropertyText('name', 'exampleText'); - metadataViewPage.clickClearPropertyIcon('name'); - expect(metadataViewPage.getPropertyText('name')).toEqual(resources.Files.ADF_DOCUMENTS.PNG.file_name); + await metadataViewPage.enterPropertyText('name', 'exampleText'); + await metadataViewPage.clickClearPropertyIcon('name'); + await expect(await metadataViewPage.getPropertyText('name')).toEqual(resources.Files.ADF_DOCUMENTS.PNG.file_name); - metadataViewPage.clickEditPropertyIcons('name'); - metadataViewPage.enterPropertyText('name', 'exampleText.png'); - metadataViewPage.clickUpdatePropertyIcon('name'); - expect(metadataViewPage.getPropertyText('name')).toEqual('exampleText.png'); + await metadataViewPage.clickEditPropertyIcons('name'); + await metadataViewPage.enterPropertyText('name', 'exampleText.png'); + await metadataViewPage.clickUpdatePropertyIcon('name'); + await expect(await metadataViewPage.getPropertyText('name')).toEqual('exampleText.png'); - metadataViewPage.clickEditPropertyIcons('properties.cm:title'); - metadataViewPage.enterPropertyText('properties.cm:title', 'example title'); - metadataViewPage.clickUpdatePropertyIcon('properties.cm:title'); - expect(metadataViewPage.getPropertyText('properties.cm:title')).toEqual('example title'); + await metadataViewPage.clickEditPropertyIcons('properties.cm:title'); + await metadataViewPage.enterPropertyText('properties.cm:title', 'example title'); + await metadataViewPage.clickUpdatePropertyIcon('properties.cm:title'); + await expect(await metadataViewPage.getPropertyText('properties.cm:title')).toEqual('example title'); - metadataViewPage.clickEditPropertyIcons('properties.cm:description'); - metadataViewPage.enterDescriptionText('example description'); - metadataViewPage.clickUpdatePropertyIcon('properties.cm:description'); - expect(metadataViewPage.getPropertyText('properties.cm:description')).toEqual('example description'); + await metadataViewPage.clickEditPropertyIcons('properties.cm:description'); + await metadataViewPage.enterDescriptionText('example description'); + await metadataViewPage.clickUpdatePropertyIcon('properties.cm:description'); + await expect(await metadataViewPage.getPropertyText('properties.cm:description')).toEqual('example description'); - viewerPage.clickCloseButton(); - contentServicesPage.waitForTableBody(); + await viewerPage.clickCloseButton(); + await contentServicesPage.waitForTableBody(); - viewerPage.viewFile('exampleText.png'); - viewerPage.clickInfoButton(); - viewerPage.checkInfoSideBarIsDisplayed(); - metadataViewPage.clickOnPropertiesTab(); - metadataViewPage.editIconIsDisplayed(); + await viewerPage.viewFile('exampleText.png'); + await viewerPage.clickInfoButton(); + await viewerPage.checkInfoSideBarIsDisplayed(); + await metadataViewPage.clickOnPropertiesTab(); + await metadataViewPage.editIconIsDisplayed(); - expect(metadataViewPage.getPropertyText('name')).toEqual('exampleText.png'); - expect(metadataViewPage.getPropertyText('properties.cm:title')).toEqual('example title'); - expect(metadataViewPage.getPropertyText('properties.cm:description')).toEqual('example description'); + await expect(await metadataViewPage.getPropertyText('name')).toEqual('exampleText.png'); + await expect(await metadataViewPage.getPropertyText('properties.cm:title')).toEqual('example title'); + await expect(await metadataViewPage.getPropertyText('properties.cm:description')).toEqual('example description'); - metadataViewPage.editIconClick(); - metadataViewPage.clickEditPropertyIcons('name'); - metadataViewPage.enterPropertyText('name', resources.Files.ADF_DOCUMENTS.PNG.file_name); - metadataViewPage.clickUpdatePropertyIcon('name'); - expect(metadataViewPage.getPropertyText('name')).toEqual(resources.Files.ADF_DOCUMENTS.PNG.file_name); + await metadataViewPage.editIconClick(); + await metadataViewPage.clickEditPropertyIcons('name'); + await metadataViewPage.enterPropertyText('name', resources.Files.ADF_DOCUMENTS.PNG.file_name); + await metadataViewPage.clickUpdatePropertyIcon('name'); + await expect(await metadataViewPage.getPropertyText('name')).toEqual(resources.Files.ADF_DOCUMENTS.PNG.file_name); }); - it('[C260181] Should be possible edit all the metadata aspect', () => { - viewerPage.clickInfoButton(); - viewerPage.checkInfoSideBarIsDisplayed(); - metadataViewPage.clickOnPropertiesTab(); - metadataViewPage.editIconIsDisplayed(); + it('[C260181] Should be possible edit all the metadata aspect', async () => { + await viewerPage.clickInfoButton(); + await viewerPage.checkInfoSideBarIsDisplayed(); + await metadataViewPage.clickOnPropertiesTab(); + await metadataViewPage.editIconIsDisplayed(); - expect(viewerPage.getActiveTab()).toEqual(METADATA.PROPERTY_TAB); + await expect(await viewerPage.getActiveTab()).toEqual(METADATA.PROPERTY_TAB); - metadataViewPage.clickOnInformationButton(); + await metadataViewPage.clickOnInformationButton(); - metadataViewPage.clickMetadataGroup('EXIF'); + await metadataViewPage.clickMetadataGroup('EXIF'); - metadataViewPage.editIconClick(); + await metadataViewPage.editIconClick(); - metadataViewPage.clickEditPropertyIcons('properties.exif:software'); - metadataViewPage.enterPropertyText('properties.exif:software', 'test custom text software'); - metadataViewPage.clickUpdatePropertyIcon('properties.exif:software'); - expect(metadataViewPage.getPropertyText('properties.exif:software')).toEqual('test custom text software'); + await metadataViewPage.clickEditPropertyIcons('properties.exif:software'); + await metadataViewPage.enterPropertyText('properties.exif:software', 'test custom text software'); + await metadataViewPage.clickUpdatePropertyIcon('properties.exif:software'); + await expect(await metadataViewPage.getPropertyText('properties.exif:software')).toEqual('test custom text software'); - metadataViewPage.clickEditPropertyIcons('properties.exif:isoSpeedRatings'); - metadataViewPage.enterPropertyText('properties.exif:isoSpeedRatings', 'test custom text isoSpeedRatings'); - metadataViewPage.clickUpdatePropertyIcon('properties.exif:isoSpeedRatings'); - expect(metadataViewPage.getPropertyText('properties.exif:isoSpeedRatings')).toEqual('test custom text isoSpeedRatings'); + await metadataViewPage.clickEditPropertyIcons('properties.exif:isoSpeedRatings'); + await metadataViewPage.enterPropertyText('properties.exif:isoSpeedRatings', 'test custom text isoSpeedRatings'); + await metadataViewPage.clickUpdatePropertyIcon('properties.exif:isoSpeedRatings'); + await expect(await metadataViewPage.getPropertyText('properties.exif:isoSpeedRatings')).toEqual('test custom text isoSpeedRatings'); - metadataViewPage.clickEditPropertyIcons('properties.exif:fNumber'); - metadataViewPage.enterPropertyText('properties.exif:fNumber', 22); - metadataViewPage.clickUpdatePropertyIcon('properties.exif:fNumber'); - expect(metadataViewPage.getPropertyText('properties.exif:fNumber')).toEqual('22'); + await metadataViewPage.clickEditPropertyIcons('properties.exif:fNumber'); + await metadataViewPage.enterPropertyText('properties.exif:fNumber', 22); + await metadataViewPage.clickUpdatePropertyIcon('properties.exif:fNumber'); + await expect(await metadataViewPage.getPropertyText('properties.exif:fNumber')).toEqual('22'); }); }); describe('Folder metadata', () => { - beforeAll(async (done) => { + beforeAll(async () => { await uploadActions.createFolder(folderName, '-my-'); await loginPage.loginToContentServicesUsingUserModel(acsUser); - navigationBarPage.clickContentServicesButton(); - contentServicesPage.waitForTableBody(); + await navigationBarPage.clickContentServicesButton(); + await contentServicesPage.waitForTableBody(); - done(); }); - it('[C261157] Should be possible use the metadata component When the node is a Folder', () => { - contentServicesPage.metadataContent(folderName); + it('[C261157] Should be possible use the metadata component When the node is a Folder', async () => { + await contentServicesPage.metadataContent(folderName); - expect(metadataViewPage.getPropertyText('name')).toEqual(folderName); - expect(metadataViewPage.getPropertyText('createdByUser.displayName')).toEqual(acsUser.firstName + ' ' + acsUser.lastName); - BrowserActions.closeMenuAndDialogs(); + await expect(await metadataViewPage.getPropertyText('name')).toEqual(folderName); + await expect(await metadataViewPage.getPropertyText('createdByUser.displayName')).toEqual(acsUser.firstName + ' ' + acsUser.lastName); + await BrowserActions.closeMenuAndDialogs(); }); - it('[C261158] Should be possible edit the metadata When the node is a Folder', () => { - contentServicesPage.metadataContent(folderName); + it('[C261158] Should be possible edit the metadata When the node is a Folder', async () => { + await contentServicesPage.metadataContent(folderName); - metadataViewPage.editIconClick(); + await metadataViewPage.editIconClick(); - metadataViewPage.clickEditPropertyIcons('name'); - metadataViewPage.enterPropertyText('name', 'newnameFolder'); - metadataViewPage.clickClearPropertyIcon('name'); - expect(metadataViewPage.getPropertyText('name')).toEqual(folderName); + await metadataViewPage.clickEditPropertyIcons('name'); + await metadataViewPage.enterPropertyText('name', 'newnameFolder'); + await metadataViewPage.clickClearPropertyIcon('name'); + await expect(await metadataViewPage.getPropertyText('name')).toEqual(folderName); - metadataViewPage.clickEditPropertyIcons('name'); - metadataViewPage.enterPropertyText('name', 'newnameFolder'); - metadataViewPage.clickUpdatePropertyIcon('name'); - expect(metadataViewPage.getPropertyText('name')).toEqual('newnameFolder'); + await metadataViewPage.clickEditPropertyIcons('name'); + await metadataViewPage.enterPropertyText('name', 'newnameFolder'); + await metadataViewPage.clickUpdatePropertyIcon('name'); + await expect(await metadataViewPage.getPropertyText('name')).toEqual('newnameFolder'); - metadataViewPage.clickEditPropertyIcons('name'); - metadataViewPage.enterPropertyText('name', folderName); - metadataViewPage.clickUpdatePropertyIcon('name'); - expect(metadataViewPage.getPropertyText('name')).toEqual(folderName); + await metadataViewPage.clickEditPropertyIcons('name'); + await metadataViewPage.enterPropertyText('name', folderName); + await metadataViewPage.clickUpdatePropertyIcon('name'); + await expect(await metadataViewPage.getPropertyText('name')).toEqual(folderName); }); }); @@ -299,36 +290,36 @@ describe('Metadata component', () => { it('[C279960] Should show the last username modifier when modify a File', async () => { await loginPage.loginToContentServices(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); - BrowserActions.getUrl(browser.params.testConfig.adf.url + `/(overlay:files/${pngFileModel.id}/view)`); + await BrowserActions.getUrl(browser.params.testConfig.adf.url + `/(overlay:files/${pngFileModel.id}/view)`); - viewerPage.clickInfoButton(); - viewerPage.checkInfoSideBarIsDisplayed(); - metadataViewPage.clickOnPropertiesTab(); - metadataViewPage.editIconIsDisplayed(); + await viewerPage.clickInfoButton(); + await viewerPage.checkInfoSideBarIsDisplayed(); + await metadataViewPage.clickOnPropertiesTab(); + await metadataViewPage.editIconIsDisplayed(); - expect(viewerPage.getActiveTab()).toEqual(METADATA.PROPERTY_TAB); + await expect(await viewerPage.getActiveTab()).toEqual(METADATA.PROPERTY_TAB); - metadataViewPage.editIconClick(); + await metadataViewPage.editIconClick(); - metadataViewPage.clickEditPropertyIcons('properties.cm:description'); - metadataViewPage.enterDescriptionText('check author example description'); - metadataViewPage.clickUpdatePropertyIcon('properties.cm:description'); - expect(metadataViewPage.getPropertyText('properties.cm:description')).toEqual('check author example description'); + await metadataViewPage.clickEditPropertyIcons('properties.cm:description'); + await metadataViewPage.enterDescriptionText('check author example description'); + await metadataViewPage.clickUpdatePropertyIcon('properties.cm:description'); + await expect(await metadataViewPage.getPropertyText('properties.cm:description')).toEqual('check author example description'); - loginPage.loginToContentServicesUsingUserModel(acsUser); - navigationBarPage.clickContentServicesButton(); + await loginPage.loginToContentServicesUsingUserModel(acsUser); + await navigationBarPage.clickContentServicesButton(); - viewerPage.viewFile(pngFileModel.name); - viewerPage.checkFileIsLoaded(); + await viewerPage.viewFile(pngFileModel.name); + await viewerPage.checkFileIsLoaded(); - viewerPage.clickInfoButton(); - viewerPage.checkInfoSideBarIsDisplayed(); - metadataViewPage.clickOnPropertiesTab(); + await viewerPage.clickInfoButton(); + await viewerPage.checkInfoSideBarIsDisplayed(); + await metadataViewPage.clickOnPropertiesTab(); - expect(metadataViewPage.getPropertyText('modifiedByUser.displayName')).toEqual('Administrator'); + await expect(await metadataViewPage.getPropertyText('modifiedByUser.displayName')).toEqual('Administrator'); - viewerPage.clickCloseButton(); - contentServicesPage.waitForTableBody(); + await viewerPage.clickCloseButton(); + await contentServicesPage.waitForTableBody(); }); }); diff --git a/e2e/content-services/notifications-component.e2e.ts b/e2e/content-services/notifications-component.e2e.ts index bcd2721f04..e7dc193ebd 100644 --- a/e2e/content-services/notifications-component.e2e.ts +++ b/e2e/content-services/notifications-component.e2e.ts @@ -25,12 +25,12 @@ import { NavigationBarPage } from '../pages/adf/navigationBarPage'; describe('Notifications Component', () => { const loginPage = new LoginPage(); - const notificationHistoryPage = new NotificationPage(); + const notificationPage = new NotificationPage(); const navigationBarPage = new NavigationBarPage(); const acsUser = new AcsUserModel(); - beforeAll(async (done) => { + beforeAll(async () => { this.alfrescoJsApi = new AlfrescoApi({ provider: 'ECM', @@ -45,78 +45,76 @@ describe('Notifications Component', () => { await loginPage.loginToContentServicesUsingUserModel(acsUser); - notificationHistoryPage.goToNotificationsPage(); + await notificationPage.goToNotificationsPage(); - notificationHistoryPage.enterDurationField(3000); - - done(); + await notificationPage.enterDurationField(3000); }); afterAll(async () => { await navigationBarPage.clickLogoutButton(); }); - afterEach( () => { - browser.executeScript(`document.querySelector('button[data-automation-id="notification-custom-dismiss-button"]').click();`); - notificationHistoryPage.enterDurationField(3000); + afterEach(async () => { + await browser.executeScript(`document.querySelector('button[data-automation-id="notification-custom-dismiss-button"]').click();`); + await notificationPage.enterDurationField(3000); }); - it('[C279977] Should show notification when the message is not empty and button is clicked', () => { - notificationHistoryPage.enterMessageField('Notification test'); - notificationHistoryPage.clickNotificationButton(); - notificationHistoryPage.checkNotificationSnackBarIsDisplayedWithMessage('Notification test'); + it('[C279977] Should show notification when the message is not empty and button is clicked', async () => { + await notificationPage.enterMessageField('Notification test'); + await notificationPage.clickNotificationButton(); + await notificationPage.checkNotificationSnackBarIsDisplayedWithMessage('Notification test'); }); - it('[C279979] Should not show notification when the message is empty and button is clicked', () => { - notificationHistoryPage.clearMessage(); - notificationHistoryPage.clickNotificationButton(); - notificationHistoryPage.checkNotificationSnackBarIsNotDisplayed(); + it('[C279979] Should not show notification when the message is empty and button is clicked', async () => { + await notificationPage.clearMessage(); + await notificationPage.clickNotificationButton(); + await notificationPage.checkNotificationSnackBarIsNotDisplayed(); }); - it('[C279978] Should show notification with action when the message is not empty and button is clicked', () => { - notificationHistoryPage.enterMessageField('Notification test'); - notificationHistoryPage.clickActionToggle(); - notificationHistoryPage.clickNotificationButton(); - notificationHistoryPage.checkNotificationSnackBarIsDisplayedWithMessage('Notification test'); - notificationHistoryPage.clickActionButton(); - notificationHistoryPage.checkActionEvent(); - notificationHistoryPage.clickActionToggle(); + it('[C279978] Should show notification with action when the message is not empty and button is clicked', async () => { + await notificationPage.enterMessageField('Notification test'); + await notificationPage.clickActionToggle(); + await notificationPage.clickNotificationButton(); + await notificationPage.checkNotificationSnackBarIsDisplayedWithMessage('Notification test'); + await notificationPage.clickActionButton(); + await notificationPage.checkActionEvent(); + await notificationPage.clickActionToggle(); }); - it('[C279981] Should show notification with action when the message is not empty and custom configuration button is clicked', () => { - notificationHistoryPage.enterMessageField('Notification test'); - notificationHistoryPage.clickNotificationButton(); - notificationHistoryPage.checkNotificationSnackBarIsDisplayed(); + it('[C279981] Should show notification with action when the message is not empty and custom configuration button is clicked', async () => { + await notificationPage.enterMessageField('Notification test'); + await notificationPage.clickNotificationButton(); + await notificationPage.checkNotificationSnackBarIsDisplayed(); }); - it('[C279987] Should show custom notification during a limited time when a duration is added', () => { - notificationHistoryPage.enterMessageField('Notification test'); - notificationHistoryPage.enterDurationField(1000); - notificationHistoryPage.clickNotificationButton(); - notificationHistoryPage.checkNotificationSnackBarIsDisplayed(); - browser.sleep(1500); - notificationHistoryPage.checkNotificationSnackBarIsNotDisplayed(); + it('[C279987] Should show custom notification during a limited time when a duration is added', async () => { + await notificationPage.enterMessageField('Notification test'); + await notificationPage.enterDurationField(1000); + await notificationPage.clickNotificationButton(); + await notificationPage.checkNotificationSnackBarIsDisplayed(); + await browser.sleep(1500); + await notificationPage.checkNotificationSnackBarIsNotDisplayed(); }); - it('[C280000] Should show notification with action when the message is not empty and custom button is clicked', () => { - notificationHistoryPage.enterMessageField('Notification test'); - notificationHistoryPage.clickActionToggle(); - notificationHistoryPage.clickNotificationButton(); - notificationHistoryPage.checkNotificationSnackBarIsDisplayedWithMessage('Notification test'); - notificationHistoryPage.checkNotificationSnackBarIsNotDisplayed(); - notificationHistoryPage.clickNotificationButton(); - notificationHistoryPage.clickActionButton(); - notificationHistoryPage.checkActionEvent(); - notificationHistoryPage.clickActionToggle(); + it('[C280000] Should show notification with action when the message is not empty and custom button is clicked', async () => { + await notificationPage.enterMessageField('Notification test'); + await notificationPage.clickActionToggle(); + await notificationPage.clickNotificationButton(); + await notificationPage.checkNotificationSnackBarIsDisplayedWithMessage('Notification test'); + await notificationPage.checkNotificationSnackBarIsNotDisplayed(); + await notificationPage.clickNotificationButton(); + await notificationPage.clickActionButton(); + await notificationPage.checkActionEvent(); + await notificationPage.clickActionToggle(); }); - it('[C280001] Should meet configuration when a custom notification is set', () => { - notificationHistoryPage.enterMessageField('Notification test'); - notificationHistoryPage.enterDurationField(1000); - notificationHistoryPage.selectHorizontalPosition('Right'); - notificationHistoryPage.selectVerticalPosition('Top'); - notificationHistoryPage.selectDirection('Left to right'); - notificationHistoryPage.clickNotificationButton(); - expect(notificationHistoryPage.getConfigObject()).toBe('{"direction": "ltr", "duration": "1000", "horizontalPosition": "right", "verticalPosition": "top"}'); + it('[C280001] Should meet configuration when a custom notification is set', async () => { + await notificationPage.enterMessageField('Notification test'); + await notificationPage.enterDurationField(1000); + await notificationPage.selectHorizontalPosition('Right'); + await notificationPage.selectVerticalPosition('Top'); + await notificationPage.selectDirection('Left to right'); + await notificationPage.clickNotificationButton(); + await expect(await notificationPage.getConfigObject()).toBe('{"direction": "ltr", "duration": "1000", "horizontalPosition": "right", "verticalPosition": "top"}'); }); }); diff --git a/e2e/content-services/permissions/permissions-component.e2e.ts b/e2e/content-services/permissions/permissions-component.e2e.ts index 6832103591..f97e204a27 100644 --- a/e2e/content-services/permissions/permissions-component.e2e.ts +++ b/e2e/content-services/permissions/permissions-component.e2e.ts @@ -29,7 +29,7 @@ import { MetadataViewPage } from '../../pages/adf/metadataViewPage'; import { NavigationBarPage } from '../../pages/adf/navigationBarPage'; import { UploadDialog } from '../../pages/adf/dialog/uploadDialog'; -describe('Permissions Component', function () { +describe('Permissions Component', () => { this.alfrescoJsApi = new AlfrescoApi({ provider: 'ECM', @@ -44,22 +44,22 @@ describe('Permissions Component', function () { const contentList = contentServicesPage.getDocumentList(); const viewerPage = new ViewerPage(); const metadataViewPage = new MetadataViewPage(); - const notificationPage = new NotificationHistoryPage(); + const notificationHistoryPage = new NotificationHistoryPage(); const uploadDialog = new UploadDialog(); let fileOwnerUser, filePermissionUser, file; const fileModel = new FileModel({ - 'name': resources.Files.ADF_DOCUMENTS.TXT_0B.file_name, - 'location': resources.Files.ADF_DOCUMENTS.TXT_0B.file_location + name: resources.Files.ADF_DOCUMENTS.TXT_0B.file_name, + location: resources.Files.ADF_DOCUMENTS.TXT_0B.file_location }); const testFileModel = new FileModel({ - 'name': resources.Files.ADF_DOCUMENTS.TEST.file_name, - 'location': resources.Files.ADF_DOCUMENTS.TEST.file_location + name: resources.Files.ADF_DOCUMENTS.TEST.file_name, + location: resources.Files.ADF_DOCUMENTS.TEST.file_location }); const pngFileModel = new FileModel({ - 'name': resources.Files.ADF_DOCUMENTS.PNG.file_name, - 'location': resources.Files.ADF_DOCUMENTS.PNG.file_location + name: resources.Files.ADF_DOCUMENTS.PNG.file_name, + location: resources.Files.ADF_DOCUMENTS.PNG.file_location }); const groupBody = { @@ -67,11 +67,11 @@ describe('Permissions Component', function () { displayName: StringUtil.generateRandomString() }; - const roleConsumerFolderModel = new FolderModel({ 'name': 'roleConsumer' + StringUtil.generateRandomString() }); - const roleCoordinatorFolderModel = new FolderModel({ 'name': 'roleCoordinator' + StringUtil.generateRandomString() }); - const roleCollaboratorFolderModel = new FolderModel({ 'name': 'roleCollaborator' + StringUtil.generateRandomString() }); - const roleContributorFolderModel = new FolderModel({ 'name': 'roleContributor' + StringUtil.generateRandomString() }); - const roleEditorFolderModel = new FolderModel({ 'name': 'roleEditor' + StringUtil.generateRandomString() }); + const roleConsumerFolderModel = new FolderModel({ name: 'roleConsumer' + StringUtil.generateRandomString() }); + const roleCoordinatorFolderModel = new FolderModel({ name: 'roleCoordinator' + StringUtil.generateRandomString() }); + const roleCollaboratorFolderModel = new FolderModel({ name: 'roleCollaborator' + StringUtil.generateRandomString() }); + const roleContributorFolderModel = new FolderModel({ name: 'roleContributor' + StringUtil.generateRandomString() }); + const roleEditorFolderModel = new FolderModel({ name: 'roleEditor' + StringUtil.generateRandomString() }); let roleConsumerFolder, roleCoordinatorFolder, roleContributorFolder, roleCollaboratorFolder, roleEditorFolder; let folders; @@ -81,7 +81,7 @@ describe('Permissions Component', function () { const duplicateUserPermissionMessage = 'One or more of the permissions you have set is already present : authority -> ' + filePermissionUser.getId() + ' / role -> Contributor'; - beforeAll(async (done) => { + beforeAll(async () => { await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); await this.alfrescoJsApi.core.peopleApi.addPerson(fileOwnerUser); @@ -161,189 +161,150 @@ describe('Permissions Component', function () { await uploadActions.uploadFile(fileModel.location, 'RoleCollaborator' + fileModel.name, roleCollaboratorFolder.entry.id); await uploadActions.uploadFile(fileModel.location, 'RoleEditor' + fileModel.name, roleEditorFolder.entry.id); - done(); }); - afterAll(async (done) => { + afterAll(async () => { await navigationBarPage.clickLogoutButton(); await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); - await folders.forEach(function (folder) { - uploadActions.deleteFileOrFolder(folder.entry.id); + for (const folder of folders) { + await uploadActions.deleteFileOrFolder(folder.entry.id); + } - }); - - done(); }); describe('Inherit and assigning permissions', () => { - beforeEach(async (done) => { - + beforeEach(async () => { await this.alfrescoJsApi.login(fileOwnerUser.id, fileOwnerUser.password); - file = await uploadActions.uploadFile(fileModel.location, fileModel.name, '-my-'); - - loginPage.loginToContentServicesUsingUserModel(fileOwnerUser); - - contentServicesPage.goToDocumentList(); - contentServicesPage.checkContentIsDisplayed(fileModel.name); - contentServicesPage.checkSelectedSiteIsDisplayed('My files'); - contentList.rightClickOnRow(fileModel.name); - - contentServicesPage.pressContextMenuActionNamed('Permission'); - - permissionsPage.checkPermissionContainerIsDisplayed(); - - done(); + await loginPage.loginToContentServicesUsingUserModel(fileOwnerUser); + await contentServicesPage.goToDocumentList(); + await contentServicesPage.checkContentIsDisplayed(fileModel.name); + await contentServicesPage.checkSelectedSiteIsDisplayed('My files'); + await contentList.rightClickOnRow(fileModel.name); + await contentServicesPage.pressContextMenuActionNamed('Permission'); + await permissionsPage.checkPermissionContainerIsDisplayed(); }); - afterEach(async (done) => { - - await uploadActions.deleteFileOrFolder(file.entry.id); - - done(); - }); - - it('[C268974] Inherit Permission', () => { - permissionsPage.checkPermissionInheritedButtonIsDisplayed(); - expect(permissionsPage.getPermissionInheritedButtonText()).toBe('Permission Inherited'); - permissionsPage.checkPermissionsDatatableIsDisplayed(); - permissionsPage.clickPermissionInheritedButton(); - expect(permissionsPage.getPermissionInheritedButtonText()).toBe('Inherit Permission'); - permissionsPage.checkNoPermissionsIsDisplayed(); - permissionsPage.clickPermissionInheritedButton(); - expect(permissionsPage.getPermissionInheritedButtonText()).toBe('Permission Inherited'); - permissionsPage.checkPermissionsDatatableIsDisplayed(); + afterEach(async () => { + await BrowserActions.closeMenuAndDialogs(); + try { + await uploadActions.deleteFileOrFolder(file.entry.id); + } catch (error) { + } }); - it('[C286272] Should be able to see results when searching for a user', () => { - permissionsPage.checkAddPermissionButtonIsDisplayed(); - permissionsPage.clickAddPermissionButton(); - permissionsPage.checkAddPermissionDialogIsDisplayed(); - permissionsPage.checkSearchUserInputIsDisplayed(); - permissionsPage.searchUserOrGroup('a'); - permissionsPage.checkResultListIsDisplayed(); - + it('[C268974] Inherit Permission', async () => { + await permissionsPage.checkPermissionInheritedButtonIsDisplayed(); + await expect(await permissionsPage.getPermissionInheritedButtonText()).toBe('Permission Inherited'); + await permissionsPage.checkPermissionsDatatableIsDisplayed(); + await permissionsPage.clickPermissionInheritedButton(); + await expect(await permissionsPage.getPermissionInheritedButtonText()).toBe('Inherit Permission'); + await permissionsPage.checkNoPermissionsIsDisplayed(); + await permissionsPage.clickPermissionInheritedButton(); + await expect(await permissionsPage.getPermissionInheritedButtonText()).toBe('Permission Inherited'); + await permissionsPage.checkPermissionsDatatableIsDisplayed(); }); - it('[C276979] Should be able to give permissions to a group of people', () => { - permissionsPage.checkAddPermissionButtonIsDisplayed(); - permissionsPage.clickAddPermissionButton(); - permissionsPage.checkAddPermissionDialogIsDisplayed(); - permissionsPage.checkSearchUserInputIsDisplayed(); - permissionsPage.searchUserOrGroup('GROUP_' + groupBody.id); - permissionsPage.clickUserOrGroup('GROUP_' + groupBody.id); - permissionsPage.checkUserOrGroupIsAdded('GROUP_' + groupBody.id); - + it('[C286272] Should be able to see results when searching for a user', async () => { + await permissionsPage.checkAddPermissionButtonIsDisplayed(); + await permissionsPage.clickAddPermissionButton(); + await permissionsPage.checkAddPermissionDialogIsDisplayed(); + await permissionsPage.checkSearchUserInputIsDisplayed(); + await permissionsPage.searchUserOrGroup('a'); + await permissionsPage.checkResultListIsDisplayed(); }); - it('[C277100] Should display EVERYONE group in the search result set', () => { - permissionsPage.checkAddPermissionButtonIsDisplayed(); - permissionsPage.clickAddPermissionButton(); - permissionsPage.checkAddPermissionDialogIsDisplayed(); - permissionsPage.checkSearchUserInputIsDisplayed(); - permissionsPage.searchUserOrGroup(filePermissionUser.getId()); - permissionsPage.checkResultListIsDisplayed(); - permissionsPage.checkUserOrGroupIsDisplayed('EVERYONE'); - permissionsPage.searchUserOrGroup('somerandomtext'); - permissionsPage.checkResultListIsDisplayed(); - permissionsPage.checkUserOrGroupIsDisplayed('EVERYONE'); + it('[C276979] Should be able to give permissions to a group of people', async () => { + await permissionsPage.checkAddPermissionButtonIsDisplayed(); + await permissionsPage.clickAddPermissionButton(); + await permissionsPage.checkAddPermissionDialogIsDisplayed(); + await permissionsPage.checkSearchUserInputIsDisplayed(); + await permissionsPage.searchUserOrGroup('GROUP_' + groupBody.id); + await permissionsPage.clickUserOrGroup('GROUP_' + groupBody.id); + await permissionsPage.checkUserOrGroupIsAdded('GROUP_' + groupBody.id); + }); + it('[C277100] Should display EVERYONE group in the search result set', async () => { + await permissionsPage.checkAddPermissionButtonIsDisplayed(); + await permissionsPage.clickAddPermissionButton(); + await permissionsPage.checkAddPermissionDialogIsDisplayed(); + await permissionsPage.checkSearchUserInputIsDisplayed(); + await permissionsPage.searchUserOrGroup(filePermissionUser.getId()); + await permissionsPage.checkResultListIsDisplayed(); + await permissionsPage.checkUserOrGroupIsDisplayed('EVERYONE'); + await permissionsPage.searchUserOrGroup('somerandomtext'); + await permissionsPage.checkResultListIsDisplayed(); + await permissionsPage.checkUserOrGroupIsDisplayed('EVERYONE'); }); }); describe('Changing and duplicate Permissions', () => { - beforeEach(async (done) => { - + beforeEach(async () => { await this.alfrescoJsApi.login(fileOwnerUser.id, fileOwnerUser.password); - file = await uploadActions.uploadFile(fileModel.location, fileModel.name, '-my-'); - - loginPage.loginToContentServicesUsingUserModel(fileOwnerUser); - - contentServicesPage.goToDocumentList(); - contentServicesPage.checkContentIsDisplayed(fileModel.name); - contentServicesPage.checkSelectedSiteIsDisplayed('My files'); - - contentList.rightClickOnRow(fileModel.name); - - contentServicesPage.pressContextMenuActionNamed('Permission'); - - permissionsPage.checkAddPermissionButtonIsDisplayed(); - permissionsPage.clickAddPermissionButton(); - permissionsPage.checkAddPermissionDialogIsDisplayed(); - permissionsPage.checkSearchUserInputIsDisplayed(); - permissionsPage.searchUserOrGroup(filePermissionUser.getId()); - permissionsPage.clickUserOrGroup(filePermissionUser.getFirstName()); - permissionsPage.checkUserOrGroupIsAdded(filePermissionUser.getId()); - - done(); - + await loginPage.loginToContentServicesUsingUserModel(fileOwnerUser); + await contentServicesPage.goToDocumentList(); + await contentServicesPage.checkContentIsDisplayed(fileModel.name); + await contentServicesPage.checkSelectedSiteIsDisplayed('My files'); + await contentList.rightClickOnRow(fileModel.name); + await contentServicesPage.pressContextMenuActionNamed('Permission'); + await permissionsPage.checkAddPermissionButtonIsDisplayed(); + await permissionsPage.clickAddPermissionButton(); + await permissionsPage.checkAddPermissionDialogIsDisplayed(); + await permissionsPage.checkSearchUserInputIsDisplayed(); + await permissionsPage.searchUserOrGroup(filePermissionUser.getId()); + await permissionsPage.clickUserOrGroup(filePermissionUser.getFirstName()); + await permissionsPage.checkUserOrGroupIsAdded(filePermissionUser.getId()); }); - afterEach(async (done) => { + afterEach(async () => { await uploadActions.deleteFileOrFolder(file.entry.id); - done(); }); - it('[C274691] Should be able to add a new User with permission to the file and also change locally set permissions', () => { - - expect(permissionsPage.getRoleCellValue(filePermissionUser.getId())).toEqual('Contributor'); - - permissionsPage.clickRoleDropdownByUserOrGroupName(filePermissionUser.getId()); - - expect(permissionsPage.getRoleDropdownOptions().count()).toBe(5); - expect(permissionsPage.getRoleDropdownOptions().get(0).getText()).toBe('Contributor'); - expect(permissionsPage.getRoleDropdownOptions().get(1).getText()).toBe('Collaborator'); - expect(permissionsPage.getRoleDropdownOptions().get(2).getText()).toBe('Coordinator'); - expect(permissionsPage.getRoleDropdownOptions().get(3).getText()).toBe('Editor'); - expect(permissionsPage.getRoleDropdownOptions().get(4).getText()).toBe('Consumer'); - - permissionsPage.selectOption('Collaborator'); - - expect(permissionsPage.getRoleCellValue(filePermissionUser.getId())).toEqual('Collaborator'); - - permissionsPage.clickRoleDropdownByUserOrGroupName(filePermissionUser.getId()); - permissionsPage.selectOption('Coordinator'); - - expect(permissionsPage.getRoleCellValue(filePermissionUser.getId())).toEqual('Coordinator'); - - permissionsPage.clickRoleDropdownByUserOrGroupName(filePermissionUser.getId()); - permissionsPage.selectOption('Editor'); - - expect(permissionsPage.getRoleCellValue(filePermissionUser.getId())).toEqual('Editor'); - - permissionsPage.clickRoleDropdownByUserOrGroupName(filePermissionUser.getId()); - permissionsPage.selectOption('Consumer'); - - expect(permissionsPage.getRoleCellValue(filePermissionUser.getId())).toEqual('Consumer'); - + it('[C274691] Should be able to add a new User with permission to the file and also change locally set permissions', async () => { + await expect(await permissionsPage.getRoleCellValue(filePermissionUser.getId())).toEqual('Contributor'); + await permissionsPage.clickRoleDropdownByUserOrGroupName(filePermissionUser.getId()); + const roleDropdownOptions = permissionsPage.getRoleDropdownOptions(); + await expect(await roleDropdownOptions.count()).toBe(5); + await expect(await BrowserActions.getText(roleDropdownOptions.get(0))).toBe('Contributor'); + await expect(await BrowserActions.getText(roleDropdownOptions.get(1))).toBe('Collaborator'); + await expect(await BrowserActions.getText(roleDropdownOptions.get(2))).toBe('Coordinator'); + await expect(await BrowserActions.getText(roleDropdownOptions.get(3))).toBe('Editor'); + await expect(await BrowserActions.getText(roleDropdownOptions.get(4))).toBe('Consumer'); + await permissionsPage.selectOption('Collaborator'); + await expect(await permissionsPage.getRoleCellValue(filePermissionUser.getId())).toEqual('Collaborator'); + await permissionsPage.clickRoleDropdownByUserOrGroupName(filePermissionUser.getId()); + await permissionsPage.selectOption('Coordinator'); + await expect(await permissionsPage.getRoleCellValue(filePermissionUser.getId())).toEqual('Coordinator'); + await permissionsPage.clickRoleDropdownByUserOrGroupName(filePermissionUser.getId()); + await permissionsPage.selectOption('Editor'); + await expect(await permissionsPage.getRoleCellValue(filePermissionUser.getId())).toEqual('Editor'); + await permissionsPage.clickRoleDropdownByUserOrGroupName(filePermissionUser.getId()); + await permissionsPage.selectOption('Consumer'); + await expect(await permissionsPage.getRoleCellValue(filePermissionUser.getId())).toEqual('Consumer'); }); - it('[C276980] Should not be able to duplicate User or Group to the locally set permissions', () => { - expect(permissionsPage.getRoleCellValue(filePermissionUser.getId())).toEqual('Contributor'); - - permissionsPage.clickAddPermissionButton(); - permissionsPage.checkAddPermissionDialogIsDisplayed(); - permissionsPage.checkSearchUserInputIsDisplayed(); - permissionsPage.searchUserOrGroup(filePermissionUser.getId()); - permissionsPage.clickUserOrGroup(filePermissionUser.getFirstName()); - - expect(permissionsPage.getAssignPermissionErrorText()).toBe(duplicateUserPermissionMessage); + it('[C276980] Should not be able to duplicate User or Group to the locally set permissions', async () => { + await expect(await permissionsPage.getRoleCellValue(filePermissionUser.getId())).toEqual('Contributor'); + await permissionsPage.clickAddPermissionButton(); + await permissionsPage.checkAddPermissionDialogIsDisplayed(); + await permissionsPage.checkSearchUserInputIsDisplayed(); + await permissionsPage.searchUserOrGroup(filePermissionUser.getId()); + await permissionsPage.clickUserOrGroup(filePermissionUser.getFirstName()); + await notificationHistoryPage.checkNotifyContains(duplicateUserPermissionMessage); }); - it('[C276982] Should be able to remove User or Group from the locally set permissions', () => { - expect(permissionsPage.getRoleCellValue(filePermissionUser.getId())).toEqual('Contributor'); - - permissionsPage.clickDeletePermissionButton(); - permissionsPage.checkUserOrGroupIsDeleted(filePermissionUser.getId()); - + it('[C276982] Should be able to remove User or Group from the locally set permissions', async () => { + await expect(await permissionsPage.getRoleCellValue(filePermissionUser.getId())).toEqual('Contributor'); + await permissionsPage.clickDeletePermissionButton(); + await permissionsPage.checkUserOrGroupIsDeleted(filePermissionUser.getId()); }); }); @@ -351,231 +312,133 @@ describe('Permissions Component', function () { describe('Role: Consumer, Contributor, Coordinator, Collaborator, Editor, No Permissions', () => { it('[C276993] Role Consumer', async () => { - await loginPage.loginToContentServicesUsingUserModel(filePermissionUser); - - navigationBarPage.openContentServicesFolder(roleConsumerFolder.entry.id); - - contentServicesPage.checkContentIsDisplayed('RoleConsumer' + fileModel.name); - - contentList.doubleClickRow('RoleConsumer' + fileModel.name); - - viewerPage.checkFileIsLoaded(); - viewerPage.clickCloseButton(); - - contentList.waitForTableBody(); - - contentServicesPage.checkDeleteIsDisabled('RoleConsumer' + fileModel.name); - - BrowserActions.closeMenuAndDialogs(); - - contentList.checkActionMenuIsNotDisplayed(); - - contentServicesPage.metadataContent('RoleConsumer' + fileModel.name); - - notificationPage.checkNotifyContains('You don\'t have access to do this.'); - - contentServicesPage.uploadFile(fileModel.location); - - notificationPage.checkNotifyContains('You don\'t have the create permission to upload the content'); - + await navigationBarPage.openContentServicesFolder(roleConsumerFolder.entry.id); + await contentServicesPage.checkContentIsDisplayed('RoleConsumer' + fileModel.name); + await contentList.doubleClickRow('RoleConsumer' + fileModel.name); + await viewerPage.checkFileIsLoaded(); + await viewerPage.clickCloseButton(); + await contentList.waitForTableBody(); + await contentServicesPage.checkDeleteIsDisabled('RoleConsumer' + fileModel.name); + await BrowserActions.closeMenuAndDialogs(); + await contentList.checkActionMenuIsNotDisplayed(); + await contentServicesPage.metadataContent('RoleConsumer' + fileModel.name); + await notificationHistoryPage.checkNotifyContains('You don\'t have access to do this.'); + await contentServicesPage.uploadFile(fileModel.location); + await notificationHistoryPage.checkNotifyContains('You don\'t have the create permission to upload the content'); }); it('[C276996] Role Contributor', async () => { - await loginPage.loginToContentServicesUsingUserModel(filePermissionUser); - - navigationBarPage.openContentServicesFolder(roleContributorFolder.entry.id); - - contentServicesPage.checkContentIsDisplayed('RoleContributor' + fileModel.name); - - contentList.doubleClickRow('RoleContributor' + fileModel.name); - - viewerPage.checkFileIsLoaded(); - viewerPage.clickCloseButton(); - - contentList.waitForTableBody(); - - contentServicesPage.checkDeleteIsDisabled('RoleContributor' + fileModel.name); - - BrowserActions.closeMenuAndDialogs(); - - contentList.checkActionMenuIsNotDisplayed(); - - contentServicesPage.metadataContent('RoleContributor' + fileModel.name); - - notificationPage.checkNotifyContains('You don\'t have access to do this.'); - - contentServicesPage.uploadFile(testFileModel.location).checkContentIsDisplayed(testFileModel.name); - - uploadDialog.fileIsUploaded(testFileModel.name); - uploadDialog.clickOnCloseButton().dialogIsNotDisplayed(); - + await navigationBarPage.openContentServicesFolder(roleContributorFolder.entry.id); + await contentServicesPage.checkContentIsDisplayed('RoleContributor' + fileModel.name); + await contentList.doubleClickRow('RoleContributor' + fileModel.name); + await viewerPage.checkFileIsLoaded(); + await viewerPage.clickCloseButton(); + await contentList.waitForTableBody(); + await contentServicesPage.checkDeleteIsDisabled('RoleContributor' + fileModel.name); + await BrowserActions.closeMenuAndDialogs(); + await contentList.checkActionMenuIsNotDisplayed(); + await contentServicesPage.metadataContent('RoleContributor' + fileModel.name); + await notificationHistoryPage.checkNotifyContains('You don\'t have access to do this.'); + await contentServicesPage.uploadFile(testFileModel.location); + await contentServicesPage.checkContentIsDisplayed(testFileModel.name); + await uploadDialog.fileIsUploaded(testFileModel.name); + await uploadDialog.clickOnCloseButton(); + await uploadDialog.dialogIsNotDisplayed(); }); it('[C277000] Role Editor', async () => { - await loginPage.loginToContentServicesUsingUserModel(filePermissionUser); - - navigationBarPage.openContentServicesFolder(roleEditorFolder.entry.id); - - contentServicesPage.checkContentIsDisplayed('RoleEditor' + fileModel.name); - - contentList.doubleClickRow('RoleEditor' + fileModel.name); - - viewerPage.checkFileIsLoaded(); - viewerPage.clickCloseButton(); - - contentList.waitForTableBody(); - - contentServicesPage.checkDeleteIsDisabled('RoleEditor' + fileModel.name); - - BrowserActions.closeMenuAndDialogs(); - - browser.controlFlow().execute(async () => { - - contentList.checkActionMenuIsNotDisplayed(); - - contentServicesPage.metadataContent('RoleEditor' + fileModel.name); - - metadataViewPage.editIconIsDisplayed(); - - await metadataViewPage.editIconClick(); - - metadataViewPage.editPropertyIconIsDisplayed('properties.cm:title'); - metadataViewPage.clickEditPropertyIcons('properties.cm:title'); - metadataViewPage.enterPropertyText('properties.cm:title', 'newTitle1'); - - await metadataViewPage.clickUpdatePropertyIcon('properties.cm:title'); - - expect(metadataViewPage.getPropertyText('properties.cm:title')).toEqual('newTitle1'); - - metadataViewPage.clickCloseButton(); - - contentServicesPage.uploadFile(fileModel.location); - - notificationPage.checkNotifyContains('You don\'t have the create permission to upload the content'); - - }); - + await navigationBarPage.openContentServicesFolder(roleEditorFolder.entry.id); + await contentServicesPage.checkContentIsDisplayed('RoleEditor' + fileModel.name); + await contentList.doubleClickRow('RoleEditor' + fileModel.name); + await viewerPage.checkFileIsLoaded(); + await viewerPage.clickCloseButton(); + await contentList.waitForTableBody(); + await contentServicesPage.checkDeleteIsDisabled('RoleEditor' + fileModel.name); + await BrowserActions.closeMenuAndDialogs(); + await contentList.checkActionMenuIsNotDisplayed(); + await contentServicesPage.metadataContent('RoleEditor' + fileModel.name); + await metadataViewPage.editIconIsDisplayed(); + await metadataViewPage.editIconClick(); + await metadataViewPage.editPropertyIconIsDisplayed('properties.cm:title'); + await metadataViewPage.clickEditPropertyIcons('properties.cm:title'); + await metadataViewPage.enterPropertyText('properties.cm:title', 'newTitle1'); + await metadataViewPage.clickUpdatePropertyIcon('properties.cm:title'); + await expect(await metadataViewPage.getPropertyText('properties.cm:title')).toEqual('newTitle1'); + await metadataViewPage.clickCloseButton(); + await contentServicesPage.uploadFile(fileModel.location); + await notificationHistoryPage.checkNotifyContains('You don\'t have the create permission to upload the content'); }); it('[C277003] Role Collaborator', async () => { - await loginPage.loginToContentServicesUsingUserModel(filePermissionUser); - - navigationBarPage.openContentServicesFolder(roleCollaboratorFolder.entry.id); - - contentServicesPage.checkContentIsDisplayed('RoleCollaborator' + fileModel.name); - - contentList.doubleClickRow('RoleCollaborator' + fileModel.name); - - viewerPage.checkFileIsLoaded(); - viewerPage.clickCloseButton(); - - contentList.waitForTableBody(); - - contentServicesPage.checkDeleteIsDisabled('RoleCollaborator' + fileModel.name); - - BrowserActions.closeMenuAndDialogs(); - - browser.controlFlow().execute(async () => { - - contentList.checkActionMenuIsNotDisplayed(); - - contentServicesPage.metadataContent('RoleCollaborator' + fileModel.name); - - metadataViewPage.editIconIsDisplayed(); - - await metadataViewPage.editIconClick(); - - metadataViewPage.editPropertyIconIsDisplayed('properties.cm:title'); - metadataViewPage.clickEditPropertyIcons('properties.cm:title'); - metadataViewPage.enterPropertyText('properties.cm:title', 'newTitle2'); - - await metadataViewPage.clickUpdatePropertyIcon('properties.cm:title'); - - expect(metadataViewPage.getPropertyText('properties.cm:title')).toEqual('newTitle2'); - - metadataViewPage.clickCloseButton(); - - contentServicesPage.uploadFile(testFileModel.location).checkContentIsDisplayed(testFileModel.name); - - uploadDialog.fileIsUploaded(testFileModel.name); - uploadDialog.clickOnCloseButton().dialogIsNotDisplayed(); - - }); - + await navigationBarPage.openContentServicesFolder(roleCollaboratorFolder.entry.id); + await contentServicesPage.checkContentIsDisplayed('RoleCollaborator' + fileModel.name); + await contentList.doubleClickRow('RoleCollaborator' + fileModel.name); + await viewerPage.checkFileIsLoaded(); + await viewerPage.clickCloseButton(); + await contentList.waitForTableBody(); + await contentServicesPage.checkDeleteIsDisabled('RoleCollaborator' + fileModel.name); + await BrowserActions.closeMenuAndDialogs(); + await contentList.checkActionMenuIsNotDisplayed(); + await contentServicesPage.metadataContent('RoleCollaborator' + fileModel.name); + await metadataViewPage.editIconIsDisplayed(); + await metadataViewPage.editIconClick(); + await metadataViewPage.editPropertyIconIsDisplayed('properties.cm:title'); + await metadataViewPage.clickEditPropertyIcons('properties.cm:title'); + await metadataViewPage.enterPropertyText('properties.cm:title', 'newTitle2'); + await metadataViewPage.clickUpdatePropertyIcon('properties.cm:title'); + await expect(await metadataViewPage.getPropertyText('properties.cm:title')).toEqual('newTitle2'); + await metadataViewPage.clickCloseButton(); + await contentServicesPage.uploadFile(testFileModel.location); + await contentServicesPage.checkContentIsDisplayed(testFileModel.name); + await uploadDialog.fileIsUploaded(testFileModel.name); + await uploadDialog.clickOnCloseButton(); + await uploadDialog.dialogIsNotDisplayed(); }); it('[C277004] Role Coordinator', async () => { - await loginPage.loginToContentServicesUsingUserModel(filePermissionUser); - - navigationBarPage.openContentServicesFolder(roleCoordinatorFolder.entry.id); - - contentServicesPage.checkContentIsDisplayed('RoleCoordinator' + fileModel.name); - - contentList.doubleClickRow('RoleCoordinator' + fileModel.name); - - viewerPage.checkFileIsLoaded(); - viewerPage.clickCloseButton(); - - contentList.waitForTableBody(); - - contentServicesPage.metadataContent('RoleCoordinator' + fileModel.name); - - metadataViewPage.editIconIsDisplayed(); - - browser.controlFlow().execute(async () => { - - await metadataViewPage.editIconClick(); - - metadataViewPage.editPropertyIconIsDisplayed('properties.cm:title'); - metadataViewPage.clickEditPropertyIcons('properties.cm:title'); - metadataViewPage.enterPropertyText('properties.cm:title', 'newTitle3'); - - await metadataViewPage.clickUpdatePropertyIcon('properties.cm:title'); - - expect(metadataViewPage.getPropertyText('properties.cm:title')).toEqual('newTitle3'); - - metadataViewPage.clickCloseButton(); - contentServicesPage.uploadFile(pngFileModel.location).checkContentIsDisplayed(pngFileModel.name); - - uploadDialog.fileIsUploaded(pngFileModel.name); - uploadDialog.clickOnCloseButton().dialogIsNotDisplayed(); - - contentServicesPage.checkContentIsDisplayed('RoleCoordinator' + fileModel.name); - contentServicesPage.deleteContent('RoleCoordinator' + fileModel.name); - contentServicesPage.checkContentIsNotDisplayed('RoleCoordinator' + fileModel.name); - - }); - + await navigationBarPage.openContentServicesFolder(roleCoordinatorFolder.entry.id); + await contentServicesPage.checkContentIsDisplayed('RoleCoordinator' + fileModel.name); + await contentList.doubleClickRow('RoleCoordinator' + fileModel.name); + await viewerPage.checkFileIsLoaded(); + await viewerPage.clickCloseButton(); + await contentList.waitForTableBody(); + await contentServicesPage.metadataContent('RoleCoordinator' + fileModel.name); + await metadataViewPage.editIconIsDisplayed(); + await metadataViewPage.editIconClick(); + await metadataViewPage.editPropertyIconIsDisplayed('properties.cm:title'); + await metadataViewPage.clickEditPropertyIcons('properties.cm:title'); + await metadataViewPage.enterPropertyText('properties.cm:title', 'newTitle3'); + await metadataViewPage.clickUpdatePropertyIcon('properties.cm:title'); + await expect(await metadataViewPage.getPropertyText('properties.cm:title')).toEqual('newTitle3'); + await metadataViewPage.clickCloseButton(); + await contentServicesPage.uploadFile(pngFileModel.location); + await contentServicesPage.checkContentIsDisplayed(pngFileModel.name); + await uploadDialog.fileIsUploaded(pngFileModel.name); + await uploadDialog.clickOnCloseButton(); + await uploadDialog.dialogIsNotDisplayed(); + await contentServicesPage.checkContentIsDisplayed('RoleCoordinator' + fileModel.name); + await contentServicesPage.deleteContent('RoleCoordinator' + fileModel.name); + await contentServicesPage.checkContentIsNotDisplayed('RoleCoordinator' + fileModel.name); }); it('[C279881] No Permission User', async () => { - await loginPage.loginToContentServicesUsingUserModel(filePermissionUser); - - navigationBarPage.openContentServicesFolder(roleConsumerFolder.entry.id); - - contentServicesPage.checkContentIsDisplayed('RoleConsumer' + fileModel.name); - contentServicesPage.checkSelectedSiteIsDisplayed('My files'); - - contentList.rightClickOnRow('RoleConsumer' + fileModel.name); - - contentServicesPage.pressContextMenuActionNamed('Permission'); - - permissionsPage.checkPermissionInheritedButtonIsDisplayed(); - permissionsPage.checkAddPermissionButtonIsDisplayed(); - permissionsPage.clickPermissionInheritedButton(); - - notificationPage.checkNotifyContains('You are not allowed to change permissions'); - - permissionsPage.clickAddPermissionButton(); - - notificationPage.checkNotifyContains('You are not allowed to change permissions'); - + await navigationBarPage.openContentServicesFolder(roleConsumerFolder.entry.id); + await contentServicesPage.checkContentIsDisplayed('RoleConsumer' + fileModel.name); + await contentServicesPage.checkSelectedSiteIsDisplayed('My files'); + await contentList.rightClickOnRow('RoleConsumer' + fileModel.name); + await contentServicesPage.pressContextMenuActionNamed('Permission'); + await permissionsPage.checkPermissionInheritedButtonIsDisplayed(); + await permissionsPage.checkAddPermissionButtonIsDisplayed(); + await permissionsPage.clickPermissionInheritedButton(); + await notificationHistoryPage.checkNotifyContains('You are not allowed to change permissions'); + await permissionsPage.clickAddPermissionButton(); + await notificationHistoryPage.checkNotifyContains('You are not allowed to change permissions'); }); }); diff --git a/e2e/content-services/permissions/site-permissions.e2e.ts b/e2e/content-services/permissions/site-permissions.e2e.ts index f6608c6574..aae1fa9eab 100644 --- a/e2e/content-services/permissions/site-permissions.e2e.ts +++ b/e2e/content-services/permissions/site-permissions.e2e.ts @@ -29,7 +29,7 @@ import { MetadataViewPage } from '../../pages/adf/metadataViewPage'; import { UploadDialog } from '../../pages/adf/dialog/uploadDialog'; import { NavigationBarPage } from '../../pages/adf/navigationBarPage'; -describe('Permissions Component', function () { +describe('Permissions Component', () => { this.alfrescoJsApi = new AlfrescoApi({ provider: 'ECM', @@ -53,18 +53,18 @@ describe('Permissions Component', function () { let publicSite, privateSite, folderName; const fileModel = new FileModel({ - 'name': resources.Files.ADF_DOCUMENTS.TXT_0B.file_name, - 'location': resources.Files.ADF_DOCUMENTS.TXT_0B.file_location + name: resources.Files.ADF_DOCUMENTS.TXT_0B.file_name, + location: resources.Files.ADF_DOCUMENTS.TXT_0B.file_location }); const testFileModel = new FileModel({ - 'name': resources.Files.ADF_DOCUMENTS.TEST.file_name, - 'location': resources.Files.ADF_DOCUMENTS.TEST.file_location + name: resources.Files.ADF_DOCUMENTS.TEST.file_name, + location: resources.Files.ADF_DOCUMENTS.TEST.file_location }); const pngFileModel = new FileModel({ - 'name': resources.Files.ADF_DOCUMENTS.PNG.file_name, - 'location': resources.Files.ADF_DOCUMENTS.PNG.file_location + name: resources.Files.ADF_DOCUMENTS.PNG.file_name, + location: resources.Files.ADF_DOCUMENTS.PNG.file_location }); let siteFolder, privateSiteFile; @@ -76,7 +76,7 @@ describe('Permissions Component', function () { contributorUser = new AcsUserModel(); managerUser = new AcsUserModel(); - beforeAll(async (done) => { + beforeAll(async () => { await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); await this.alfrescoJsApi.core.peopleApi.addPerson(folderOwnerUser); @@ -87,7 +87,7 @@ describe('Permissions Component', function () { await this.alfrescoJsApi.core.peopleApi.addPerson(managerUser); await this.alfrescoJsApi.login(folderOwnerUser.id, folderOwnerUser.password); - browser.sleep(15000); + await browser.sleep(15000); const publicSiteName = `PUBLIC_TEST_SITE_${StringUtil.generateRandomString(5)}`; @@ -144,121 +144,125 @@ describe('Permissions Component', function () { await uploadActions.uploadFile(fileModel.location, 'Site' + fileModel.name, siteFolder.entry.id); - done(); - }); - afterAll(async (done) => { + afterAll(async () => { await navigationBarPage.clickLogoutButton(); await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); await this.alfrescoJsApi.core.sitesApi.deleteSite(publicSite.entry.id); await this.alfrescoJsApi.core.sitesApi.deleteSite(privateSite.entry.id); - done(); }); - describe('Role Site Dropdown', function () { + describe('Role Site Dropdown', () => { - beforeAll(async (done) => { + beforeAll(async () => { await loginPage.loginToContentServicesUsingUserModel(folderOwnerUser); await BrowserActions.getUrl(browser.params.testConfig.adf.url + '/files/' + publicSite.entry.guid); - done(); }); it('[C277002] Should display the Role Site dropdown', async () => { - contentServicesPage.checkContentIsDisplayed(folderName); + await contentServicesPage.checkContentIsDisplayed(folderName); - contentList.rightClickOnRow(folderName); + await contentList.rightClickOnRow(folderName); - contentServicesPage.pressContextMenuActionNamed('Permission'); + await contentServicesPage.pressContextMenuActionNamed('Permission'); - permissionsPage.checkPermissionInheritedButtonIsDisplayed(); - permissionsPage.checkAddPermissionButtonIsDisplayed(); - permissionsPage.clickAddPermissionButton(); - permissionsPage.checkAddPermissionDialogIsDisplayed(); - permissionsPage.checkSearchUserInputIsDisplayed(); + await permissionsPage.checkPermissionInheritedButtonIsDisplayed(); + await permissionsPage.checkAddPermissionButtonIsDisplayed(); - permissionsPage.searchUserOrGroup(consumerUser.getId()); - permissionsPage.clickUserOrGroup(consumerUser.getFirstName()); - permissionsPage.checkUserOrGroupIsAdded(consumerUser.getId()); + await browser.sleep(5000); - expect(permissionsPage.getRoleCellValue(consumerUser.getId())).toEqual('SiteCollaborator'); + await permissionsPage.clickAddPermissionButton(); + await permissionsPage.checkAddPermissionDialogIsDisplayed(); + await permissionsPage.checkSearchUserInputIsDisplayed(); - permissionsPage.clickRoleDropdownByUserOrGroupName(consumerUser.getId()); + await permissionsPage.searchUserOrGroup(consumerUser.getId()); - expect(permissionsPage.getRoleDropdownOptions().count()).toBe(4); - expect(permissionsPage.getRoleDropdownOptions().get(0).getText()).toBe(CONSTANTS.CS_USER_ROLES.COLLABORATOR); - expect(permissionsPage.getRoleDropdownOptions().get(1).getText()).toBe(CONSTANTS.CS_USER_ROLES.CONSUMER); - expect(permissionsPage.getRoleDropdownOptions().get(2).getText()).toBe(CONSTANTS.CS_USER_ROLES.CONTRIBUTOR); - expect(permissionsPage.getRoleDropdownOptions().get(3).getText()).toBe(CONSTANTS.CS_USER_ROLES.MANAGER); + await permissionsPage.clickUserOrGroup(consumerUser.getFirstName()); + await permissionsPage.checkUserOrGroupIsAdded(consumerUser.getId()); + + await expect(await permissionsPage.getRoleCellValue(consumerUser.getId())).toEqual('SiteCollaborator'); + + await permissionsPage.clickRoleDropdownByUserOrGroupName(consumerUser.getId()); + + const roleDropdownOptions = permissionsPage.getRoleDropdownOptions(); + + await expect(await roleDropdownOptions.count()).toBe(4); + await expect(await BrowserActions.getText(roleDropdownOptions.get(0))).toBe(CONSTANTS.CS_USER_ROLES.COLLABORATOR); + await expect(await BrowserActions.getText(roleDropdownOptions.get(1))).toBe(CONSTANTS.CS_USER_ROLES.CONSUMER); + await expect(await BrowserActions.getText(roleDropdownOptions.get(2))).toBe(CONSTANTS.CS_USER_ROLES.CONTRIBUTOR); + await expect(await BrowserActions.getText(roleDropdownOptions.get(3))).toBe(CONSTANTS.CS_USER_ROLES.MANAGER); }); }); - describe('Roles: SiteConsumer, SiteCollaborator, SiteContributor, SiteManager', function () { + describe('Roles: SiteConsumer, SiteCollaborator, SiteContributor, SiteManager', () => { it('[C276994] Role SiteConsumer', async () => { await loginPage.loginToContentServicesUsingUserModel(siteConsumerUser); - navigationBarPage.openContentServicesFolder(siteFolder.entry.id); + await navigationBarPage.openContentServicesFolder(siteFolder.entry.id); - contentServicesPage.checkContentIsDisplayed('Site' + fileModel.name); + await contentServicesPage.checkContentIsDisplayed('Site' + fileModel.name); - contentList.doubleClickRow('Site' + fileModel.name); + await contentList.doubleClickRow('Site' + fileModel.name); - viewerPage.checkFileIsLoaded(); - viewerPage.clickCloseButton(); + await viewerPage.checkFileIsLoaded(); + await viewerPage.clickCloseButton(); - contentList.waitForTableBody(); + await contentList.waitForTableBody(); - contentServicesPage.checkDeleteIsDisabled('Site' + fileModel.name); + await contentServicesPage.checkDeleteIsDisabled('Site' + fileModel.name); - BrowserActions.closeMenuAndDialogs(); + await BrowserActions.closeMenuAndDialogs(); - contentList.checkActionMenuIsNotDisplayed(); + await contentList.checkActionMenuIsNotDisplayed(); - contentServicesPage.metadataContent('Site' + fileModel.name); + await contentServicesPage.metadataContent('Site' + fileModel.name); - notificationHistoryPage.checkNotifyContains('You don\'t have access to do this.'); + await notificationHistoryPage.checkNotifyContains('You don\'t have access to do this.'); - contentServicesPage.uploadFile(fileModel.location); + await contentServicesPage.uploadFile(fileModel.location); - notificationHistoryPage.checkNotifyContains('You don\'t have the create permission to upload the content'); + await notificationHistoryPage.checkNotifyContains('You don\'t have the create permission to upload the content'); }); it('[C276997] Role SiteContributor', async () => { await loginPage.loginToContentServicesUsingUserModel(contributorUser); - navigationBarPage.openContentServicesFolder(siteFolder.entry.id); + await navigationBarPage.openContentServicesFolder(siteFolder.entry.id); - contentServicesPage.checkContentIsDisplayed('Site' + fileModel.name); + await contentServicesPage.checkContentIsDisplayed('Site' + fileModel.name); - contentList.doubleClickRow('Site' + fileModel.name); + await contentList.doubleClickRow('Site' + fileModel.name); - viewerPage.checkFileIsLoaded(); - viewerPage.clickCloseButton(); + await viewerPage.checkFileIsLoaded(); + await viewerPage.clickCloseButton(); - contentList.waitForTableBody(); + await contentList.waitForTableBody(); - contentServicesPage.checkDeleteIsDisabled('Site' + fileModel.name); + await contentServicesPage.checkDeleteIsDisabled('Site' + fileModel.name); - BrowserActions.closeMenuAndDialogs(); + await BrowserActions.closeMenuAndDialogs(); - contentList.checkActionMenuIsNotDisplayed(); + await contentList.checkActionMenuIsNotDisplayed(); - contentServicesPage.metadataContent('Site' + fileModel.name); + await contentServicesPage.metadataContent('Site' + fileModel.name); - notificationHistoryPage.checkNotifyContains('You don\'t have access to do this.'); + await notificationHistoryPage.checkNotifyContains('You don\'t have access to do this.'); - contentServicesPage.uploadFile(testFileModel.location).checkContentIsDisplayed(testFileModel.name); + await contentServicesPage.uploadFile(testFileModel.location); + await contentServicesPage.checkContentIsDisplayed(testFileModel.name); - uploadDialog.fileIsUploaded(testFileModel.name); - uploadDialog.clickOnCloseButton().dialogIsNotDisplayed(); + await uploadDialog.fileIsUploaded(testFileModel.name); + await uploadDialog.clickOnCloseButton(); + await uploadDialog.dialogIsNotDisplayed(); }); @@ -266,86 +270,81 @@ describe('Permissions Component', function () { await loginPage.loginToContentServicesUsingUserModel(collaboratorUser); - navigationBarPage.openContentServicesFolder(siteFolder.entry.id); + await navigationBarPage.openContentServicesFolder(siteFolder.entry.id); - contentServicesPage.checkContentIsDisplayed('Site' + fileModel.name); + await contentServicesPage.checkContentIsDisplayed('Site' + fileModel.name); - contentList.doubleClickRow('Site' + fileModel.name); + await contentList.doubleClickRow('Site' + fileModel.name); - viewerPage.checkFileIsLoaded(); - viewerPage.clickCloseButton(); + await viewerPage.checkFileIsLoaded(); + await viewerPage.clickCloseButton(); - contentList.waitForTableBody(); + await contentList.waitForTableBody(); - contentServicesPage.checkDeleteIsDisabled('Site' + fileModel.name); + await contentServicesPage.checkDeleteIsDisabled('Site' + fileModel.name); - BrowserActions.closeMenuAndDialogs(); + await BrowserActions.closeMenuAndDialogs(); - browser.controlFlow().execute(async () => { + await contentList.checkActionMenuIsNotDisplayed(); - contentList.checkActionMenuIsNotDisplayed(); + await contentServicesPage.metadataContent('Site' + fileModel.name); - contentServicesPage.metadataContent('Site' + fileModel.name); + await metadataViewPage.editIconIsDisplayed(); + await metadataViewPage.editIconClick(); - metadataViewPage.editIconIsDisplayed(); - await metadataViewPage.editIconClick(); + await metadataViewPage.editPropertyIconIsDisplayed('properties.cm:title'); + await metadataViewPage.clickEditPropertyIcons('properties.cm:title'); - metadataViewPage.editPropertyIconIsDisplayed('properties.cm:title'); - metadataViewPage.clickEditPropertyIcons('properties.cm:title'); + await metadataViewPage.enterPropertyText('properties.cm:title', 'newTitle'); + await metadataViewPage.clickUpdatePropertyIcon('properties.cm:title'); - metadataViewPage.enterPropertyText('properties.cm:title', 'newTitle'); - await metadataViewPage.clickUpdatePropertyIcon('properties.cm:title'); + await expect(await metadataViewPage.getPropertyText('properties.cm:title')).toEqual('newTitle'); + await metadataViewPage.clickCloseButton(); - expect(metadataViewPage.getPropertyText('properties.cm:title')).toEqual('newTitle'); - metadataViewPage.clickCloseButton(); - - contentServicesPage.uploadFile(pngFileModel.location).checkContentIsDisplayed(pngFileModel.name); - - uploadDialog.fileIsUploaded(pngFileModel.name); - uploadDialog.clickOnCloseButton().dialogIsNotDisplayed(); - - }); + await contentServicesPage.uploadFile(pngFileModel.location); + await contentServicesPage.checkContentIsDisplayed(pngFileModel.name); + await uploadDialog.fileIsUploaded(pngFileModel.name); + await uploadDialog.clickOnCloseButton(); + await uploadDialog.dialogIsNotDisplayed(); }); it('[C277006] Role SiteManager', async () => { await loginPage.loginToContentServicesUsingUserModel(managerUser); - navigationBarPage.openContentServicesFolder(siteFolder.entry.id); - contentServicesPage.checkContentIsDisplayed('Site' + fileModel.name); + await navigationBarPage.openContentServicesFolder(siteFolder.entry.id); + await contentServicesPage.checkContentIsDisplayed('Site' + fileModel.name); - contentList.doubleClickRow('Site' + fileModel.name); + await contentList.doubleClickRow('Site' + fileModel.name); - viewerPage.checkFileIsLoaded(); - viewerPage.clickCloseButton(); + await viewerPage.checkFileIsLoaded(); + await viewerPage.clickCloseButton(); - contentList.waitForTableBody(); - contentServicesPage.metadataContent('Site' + fileModel.name); + await contentList.waitForTableBody(); + await contentServicesPage.metadataContent('Site' + fileModel.name); - metadataViewPage.editIconIsDisplayed(); + await metadataViewPage.editIconIsDisplayed(); - browser.controlFlow().execute(async () => { + await metadataViewPage.editIconClick(); - await metadataViewPage.editIconClick(); + await metadataViewPage.editPropertyIconIsDisplayed('properties.cm:description'); + await metadataViewPage.clickEditPropertyIcons('properties.cm:description'); + await metadataViewPage.enterDescriptionText('newDescription'); - metadataViewPage.editPropertyIconIsDisplayed('properties.cm:description'); - metadataViewPage.clickEditPropertyIcons('properties.cm:description'); - metadataViewPage.enterDescriptionText('newDescription'); + await metadataViewPage.clickUpdatePropertyIcon('properties.cm:description'); - await metadataViewPage.clickUpdatePropertyIcon('properties.cm:description'); + await expect(await metadataViewPage.getPropertyText('properties.cm:description')).toEqual('newDescription'); - expect(metadataViewPage.getPropertyText('properties.cm:description')).toEqual('newDescription'); + await metadataViewPage.clickCloseButton(); + await contentServicesPage.uploadFile(testFileModel.location); + await contentServicesPage.checkContentIsDisplayed(testFileModel.name); - metadataViewPage.clickCloseButton(); - contentServicesPage.uploadFile(testFileModel.location).checkContentIsDisplayed(testFileModel.name); - - uploadDialog.fileIsUploaded(testFileModel.name); - uploadDialog.clickOnCloseButton().dialogIsNotDisplayed(); - - contentServicesPage.checkContentIsDisplayed('Site' + fileModel.name); - contentServicesPage.deleteContent('Site' + fileModel.name); - contentServicesPage.checkContentIsNotDisplayed('Site' + fileModel.name); - }); + await uploadDialog.fileIsUploaded(testFileModel.name); + await uploadDialog.clickOnCloseButton(); + await uploadDialog.dialogIsNotDisplayed(); + await contentServicesPage.checkContentIsDisplayed('Site' + fileModel.name); + await contentServicesPage.deleteContent('Site' + fileModel.name); + await contentServicesPage.checkContentIsNotDisplayed('Site' + fileModel.name); }); }); diff --git a/e2e/content-services/share-file/share-file.e2e.ts b/e2e/content-services/share-file/share-file.e2e.ts index c70dec04fa..d48c1cd795 100644 --- a/e2e/content-services/share-file/share-file.e2e.ts +++ b/e2e/content-services/share-file/share-file.e2e.ts @@ -48,13 +48,13 @@ describe('Share file', () => { const acsUser = new AcsUserModel(); const uploadActions = new UploadActions(this.alfrescoJsApi); const pngFileModel = new FileModel({ - 'name': resources.Files.ADF_DOCUMENTS.PNG.file_name, - 'location': resources.Files.ADF_DOCUMENTS.PNG.file_location + name: resources.Files.ADF_DOCUMENTS.PNG.file_name, + location: resources.Files.ADF_DOCUMENTS.PNG.file_location }); let nodeId; - beforeAll(async (done) => { + beforeAll(async () => { await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); await this.alfrescoJsApi.core.peopleApi.addPerson(acsUser); await this.alfrescoJsApi.login(acsUser.id, acsUser.password); @@ -67,147 +67,144 @@ describe('Share file', () => { await navigationBarPage.clickContentServicesButton(); - done(); }); - afterAll(async (done) => { + afterAll(async () => { await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); await uploadActions.deleteFileOrFolder(nodeId); - done(); + }); describe('Shared link dialog', () => { - beforeAll(() => { - contentListPage.selectRow(pngFileModel.name); + beforeAll(async () => { + await contentListPage.selectRow(pngFileModel.name); }); - afterEach(() => { - BrowserActions.closeMenuAndDialogs(); + afterEach(async () => { + await BrowserActions.closeMenuAndDialogs(); }); - it('[C286549] Should check automatically toggle button in Share dialog', () => { - contentServicesPage.clickShareButton(); - shareDialog.checkDialogIsDisplayed(); - shareDialog.shareToggleButtonIsChecked(); + it('[C286549] Should check automatically toggle button in Share dialog', async () => { + await contentServicesPage.clickShareButton(); + await shareDialog.checkDialogIsDisplayed(); + await shareDialog.shareToggleButtonIsChecked(); }); - it('[C286544] Should display notification when clicking URL copy button', () => { - contentServicesPage.clickShareButton(); - shareDialog.checkDialogIsDisplayed(); - shareDialog.clickShareLinkButton(); - notificationHistoryPage.checkNotifyContains('Link copied to the clipboard'); + it('[C286544] Should display notification when clicking URL copy button', async () => { + await contentServicesPage.clickShareButton(); + await shareDialog.checkDialogIsDisplayed(); + await shareDialog.clickShareLinkButton(); + await notificationHistoryPage.checkNotifyContains('Link copied to the clipboard'); }); - it('[C286543] Should be possible to close Share dialog', () => { - contentServicesPage.clickShareButton(); - shareDialog.checkDialogIsDisplayed(); - shareDialog.checkShareLinkIsDisplayed(); + it('[C286543] Should be possible to close Share dialog', async () => { + await contentServicesPage.clickShareButton(); + await shareDialog.checkDialogIsDisplayed(); + await shareDialog.checkShareLinkIsDisplayed(); }); - it('[C286578] Should disable today option in expiration day calendar', () => { - contentServicesPage.clickShareButton(); - shareDialog.checkDialogIsDisplayed(); - shareDialog.clickDateTimePickerButton(); - shareDialog.calendarTodayDayIsDisabled(); + it('[C286578] Should disable today option in expiration day calendar', async () => { + await contentServicesPage.clickShareButton(); + await shareDialog.checkDialogIsDisplayed(); + await shareDialog.clickDateTimePickerButton(); + await shareDialog.calendarTodayDayIsDisabled(); }); it('[C286548] Should be possible to set expiry date for link', async () => { - contentServicesPage.clickShareButton(); - shareDialog.checkDialogIsDisplayed(); - shareDialog.clickDateTimePickerButton(); - shareDialog.setDefaultDay(); - shareDialog.setDefaultHour(); - shareDialog.setDefaultMinutes(); - shareDialog.dateTimePickerDialogIsClosed(); + await contentServicesPage.clickShareButton(); + await shareDialog.checkDialogIsDisplayed(); + await shareDialog.clickDateTimePickerButton(); + await shareDialog.setDefaultDay(); + await shareDialog.setDefaultHour(); + await shareDialog.setDefaultMinutes(); + await shareDialog.dateTimePickerDialogIsClosed(); const value = await shareDialog.getExpirationDate(); - shareDialog.clickCloseButton(); - shareDialog.dialogIsClosed(); - contentServicesPage.clickShareButton(); - shareDialog.checkDialogIsDisplayed(); - shareDialog.expirationDateInputHasValue(value); - BrowserActions.closeMenuAndDialogs(); + await shareDialog.clickCloseButton(); + await shareDialog.dialogIsClosed(); + await contentServicesPage.clickShareButton(); + await shareDialog.checkDialogIsDisplayed(); + await shareDialog.expirationDateInputHasValue(value); + await BrowserActions.closeMenuAndDialogs(); }); - it('[C286578] Should disable today option in expiration day calendar', () => { - contentServicesPage.clickShareButton(); - shareDialog.checkDialogIsDisplayed(); - shareDialog.clickDateTimePickerButton(); - shareDialog.calendarTodayDayIsDisabled(); + it('[C286578] Should disable today option in expiration day calendar', async () => { + await contentServicesPage.clickShareButton(); + await shareDialog.checkDialogIsDisplayed(); + await shareDialog.clickDateTimePickerButton(); + await shareDialog.calendarTodayDayIsDisabled(); }); it('[C310329] Should be possible to set expiry date only for link', async () => { await LocalStorageUtil.setConfigField('sharedLinkDateTimePickerType', JSON.stringify('date')); - contentServicesPage.clickShareButton(); - shareDialog.checkDialogIsDisplayed(); - shareDialog.clickDateTimePickerButton(); - shareDialog.setDefaultDay(); - shareDialog.dateTimePickerDialogIsClosed(); + await contentServicesPage.clickShareButton(); + await shareDialog.checkDialogIsDisplayed(); + await shareDialog.clickDateTimePickerButton(); + await shareDialog.setDefaultDay(); + await shareDialog.dateTimePickerDialogIsClosed(); const value = await shareDialog.getExpirationDate(); - shareDialog.clickCloseButton(); - shareDialog.dialogIsClosed(); - contentServicesPage.clickShareButton(); - shareDialog.checkDialogIsDisplayed(); - shareDialog.expirationDateInputHasValue(value); - BrowserActions.closeMenuAndDialogs(); + await shareDialog.clickCloseButton(); + await shareDialog.dialogIsClosed(); + await contentServicesPage.clickShareButton(); + await shareDialog.checkDialogIsDisplayed(); + await shareDialog.expirationDateInputHasValue(value); + await BrowserActions.closeMenuAndDialogs(); }); }); describe('Shared link preview', () => { - afterEach((done) => { - loginPage.loginToContentServicesUsingUserModel(acsUser); - navigationBarPage.clickContentServicesButton(); - done(); + afterEach(async() => { + await loginPage.loginToContentServicesUsingUserModel(acsUser); + await navigationBarPage.clickContentServicesButton(); + }); - beforeAll(async (done) => { - loginPage.loginToContentServicesUsingUserModel(acsUser); + beforeAll(async () => { + await loginPage.loginToContentServicesUsingUserModel(acsUser); + await navigationBarPage.clickContentServicesButton(); + await contentServicesPage.waitForTableBody(); - navigationBarPage.clickContentServicesButton(); - contentServicesPage.waitForTableBody(); - - done(); }); it('[C286565] Should open file when logged user access shared link', async () => { - contentListPage.selectRow(pngFileModel.name); - contentServicesPage.clickShareButton(); - shareDialog.checkDialogIsDisplayed(); - shareDialog.clickShareLinkButton(); - notificationHistoryPage.checkNotifyContains('Link copied to the clipboard'); + await contentListPage.selectRow(pngFileModel.name); + await contentServicesPage.clickShareButton(); + await shareDialog.checkDialogIsDisplayed(); + await shareDialog.clickShareLinkButton(); const sharedLink = await shareDialog.getShareLink(); - BrowserActions.getUrl(sharedLink); - viewerPage.checkFileNameIsDisplayed(pngFileModel.name); + await notificationHistoryPage.checkNotifyContains('Link copied to the clipboard'); + await BrowserActions.getUrl(sharedLink); + await viewerPage.checkFileNameIsDisplayed(pngFileModel.name); }); it('[C287803] Should the URL be kept the same when opening the share dialog multiple times', async () => { - contentListPage.selectRow(pngFileModel.name); - contentServicesPage.clickShareButton(); - shareDialog.checkDialogIsDisplayed(); - shareDialog.clickShareLinkButton(); - notificationHistoryPage.checkNotifyContains('Link copied to the clipboard'); + await contentListPage.selectRow(pngFileModel.name); + await contentServicesPage.clickShareButton(); + await shareDialog.checkDialogIsDisplayed(); + await shareDialog.clickShareLinkButton(); const sharedLink = await shareDialog.getShareLink(); - shareDialog.clickCloseButton(); - contentServicesPage.clickShareButton(); - shareDialog.checkDialogIsDisplayed(); - shareDialog.clickShareLinkButton(); - notificationHistoryPage.checkNotifyContains('Link copied to the clipboard'); + await shareDialog.clickCloseButton(); + await notificationHistoryPage.checkNotifyContains('Link copied to the clipboard'); + await contentServicesPage.clickShareButton(); + await shareDialog.checkDialogIsDisplayed(); + await shareDialog.clickShareLinkButton(); const secondSharedLink = await shareDialog.getShareLink(); - expect(sharedLink).toEqual(secondSharedLink); - BrowserActions.getUrl(sharedLink); - viewerPage.checkFileNameIsDisplayed(pngFileModel.name); + await notificationHistoryPage.checkNotifyContains('Link copied to the clipboard'); + await expect(sharedLink).toEqual(secondSharedLink); + await BrowserActions.getUrl(sharedLink); + await viewerPage.checkFileNameIsDisplayed(pngFileModel.name); }); it('[C286539] Should open file when non-logged user access shared link', async () => { - contentListPage.selectRow(pngFileModel.name); - contentServicesPage.clickShareButton(); - shareDialog.checkDialogIsDisplayed(); - shareDialog.checkShareLinkIsDisplayed(); + await contentListPage.selectRow(pngFileModel.name); + await contentServicesPage.clickShareButton(); + await shareDialog.checkDialogIsDisplayed(); + await shareDialog.checkShareLinkIsDisplayed(); const sharedLink = await shareDialog.getShareLink(); - shareDialog.clickCloseButton(); - navigationBarPage.clickLogoutButton(); - BrowserActions.getUrl(sharedLink); - viewerPage.checkFileNameIsDisplayed(pngFileModel.name); + await shareDialog.clickCloseButton(); + await navigationBarPage.clickLogoutButton(); + await BrowserActions.getUrl(sharedLink); + await viewerPage.checkFileNameIsDisplayed(pngFileModel.name); }); }); }); diff --git a/e2e/content-services/share-file/unshare-file.e2e.ts b/e2e/content-services/share-file/unshare-file.e2e.ts index b2afee6303..3f96e2499c 100644 --- a/e2e/content-services/share-file/unshare-file.e2e.ts +++ b/e2e/content-services/share-file/unshare-file.e2e.ts @@ -16,7 +16,14 @@ */ import CONSTANTS = require('../../util/constants'); -import { StringUtil, BrowserActions, NotificationHistoryPage, LoginPage, ErrorPage, UploadActions } from '@alfresco/adf-testing'; +import { + StringUtil, + BrowserActions, + NotificationHistoryPage, + LoginPage, + ErrorPage, + UploadActions +} from '@alfresco/adf-testing'; import { NavigationBarPage } from '../../pages/adf/navigationBarPage'; import { ContentServicesPage } from '../../pages/adf/contentServicesPage'; import { ShareDialog } from '../../pages/adf/dialog/shareDialog'; @@ -48,11 +55,11 @@ describe('Unshare file', () => { let nodeId; let testSite; const pngFileModel = new FileModel({ - 'name': resources.Files.ADF_DOCUMENTS.PNG.file_name, - 'location': resources.Files.ADF_DOCUMENTS.PNG.file_location + name: resources.Files.ADF_DOCUMENTS.PNG.file_name, + location: resources.Files.ADF_DOCUMENTS.PNG.file_location }); - beforeAll(async (done) => { + beforeAll(async () => { const site = { title: siteName, visibility: 'PRIVATE', @@ -98,88 +105,88 @@ describe('Unshare file', () => { nodeId = pngUploadedFile.entry.id; await loginPage.loginToContentServicesUsingUserModel(acsUser); - navBar.clickContentServicesButton(); - contentServicesPage.waitForTableBody(); - done(); + await navBar.clickContentServicesButton(); + await contentServicesPage.waitForTableBody(); + }); - afterAll(async (done) => { + afterAll(async () => { await navigationBarPage.clickLogoutButton(); }); - afterEach(async (done) => { + afterEach(async () => { await browser.refresh(); - done(); + }); describe('with permission', () => { - afterAll(async (done) => { + afterAll(async () => { await uploadActions.deleteFileOrFolder(nodeId); - done(); + }); - it('[C286550] Should display unshare confirmation dialog', () => { - contentListPage.selectRow(pngFileModel.name); - contentServicesPage.clickShareButton(); - shareDialog.checkDialogIsDisplayed(); - shareDialog.clickUnShareFile(); - shareDialog.confirmationDialogIsDisplayed(); + it('[C286550] Should display unshare confirmation dialog', async () => { + await contentListPage.selectRow(pngFileModel.name); + await contentServicesPage.clickShareButton(); + await shareDialog.checkDialogIsDisplayed(); + await shareDialog.clickUnShareFile(); + await shareDialog.confirmationDialogIsDisplayed(); }); - it('[C286551] Should be able to cancel unshare action', () => { - contentListPage.selectRow(pngFileModel.name); - contentServicesPage.clickShareButton(); - shareDialog.checkDialogIsDisplayed(); - shareDialog.clickUnShareFile(); - shareDialog.confirmationDialogIsDisplayed(); - shareDialog.clickConfirmationDialogCancelButton(); - shareDialog.shareToggleButtonIsChecked(); + it('[C286551] Should be able to cancel unshare action', async () => { + await contentListPage.selectRow(pngFileModel.name); + await contentServicesPage.clickShareButton(); + await shareDialog.checkDialogIsDisplayed(); + await shareDialog.clickUnShareFile(); + await shareDialog.confirmationDialogIsDisplayed(); + await shareDialog.clickConfirmationDialogCancelButton(); + await shareDialog.shareToggleButtonIsChecked(); }); it('[C286552] Should be able to confirm unshare action', async () => { - contentListPage.selectRow(pngFileModel.name); - contentServicesPage.clickShareButton(); - shareDialog.checkDialogIsDisplayed(); - shareDialog.clickUnShareFile(); - shareDialog.confirmationDialogIsDisplayed(); - shareDialog.clickConfirmationDialogRemoveButton(); - shareDialog.dialogIsClosed(); + await contentListPage.selectRow(pngFileModel.name); + await contentServicesPage.clickShareButton(); + await shareDialog.checkDialogIsDisplayed(); + await shareDialog.clickUnShareFile(); + await shareDialog.confirmationDialogIsDisplayed(); + await shareDialog.clickConfirmationDialogRemoveButton(); + await shareDialog.dialogIsClosed(); }); it('[C280556] Should redirect to 404 when trying to access an unshared file', async () => { - contentListPage.selectRow(pngFileModel.name); - contentServicesPage.clickShareButton(); - shareDialog.checkDialogIsDisplayed(); + await contentListPage.selectRow(pngFileModel.name); + await contentServicesPage.clickShareButton(); + await shareDialog.checkDialogIsDisplayed(); const sharedLink = await shareDialog.getShareLink(); - shareDialog.clickUnShareFile(); - shareDialog.confirmationDialogIsDisplayed(); - shareDialog.clickConfirmationDialogRemoveButton(); - shareDialog.dialogIsClosed(); - BrowserActions.getUrl(sharedLink.replace(browser.params.testConfig.adf_acs.host, browser.params.testConfig.adf.host)); - errorPage.checkErrorCode(); + await shareDialog.clickUnShareFile(); + await shareDialog.confirmationDialogIsDisplayed(); + await shareDialog.clickConfirmationDialogRemoveButton(); + await shareDialog.dialogIsClosed(); + await BrowserActions.getUrl(sharedLink.replace(browser.params.testConfig.adf_acs.host, browser.params.testConfig.adf.host)); + await errorPage.checkErrorCode(); }); }); describe('without permission', () => { - afterAll(async (done) => { + afterAll(async () => { await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); await this.alfrescoJsApi.core.sitesApi.deleteSite(siteName, { permanent: true }); - done(); + }); - it('[C286555] Should NOT be able to unshare file without permission', () => { - navBar.goToSite(testSite); - contentListPage.doubleClickRow('documentLibrary'); - contentListPage.selectRow(nodeBody.name); - contentServicesPage.clickShareButton(); - shareDialog.checkDialogIsDisplayed(); - shareDialog.shareToggleButtonIsChecked(); - shareDialog.clickUnShareFile(); - shareDialog.confirmationDialogIsDisplayed(); - shareDialog.clickConfirmationDialogRemoveButton(); - shareDialog.checkDialogIsDisplayed(); - shareDialog.shareToggleButtonIsChecked(); - notificationHistoryPage.checkNotifyContains(`You don't have permission to unshare this file`); + it('[C286555] Should NOT be able to unshare file without permission', async () => { + await navBar.goToSite(testSite); + await contentListPage.doubleClickRow('documentLibrary'); + await contentListPage.selectRow(nodeBody.name); + await contentServicesPage.clickShareButton(); + await shareDialog.checkDialogIsDisplayed(); + await shareDialog.shareToggleButtonIsChecked(); + await shareDialog.clickUnShareFile(); + await shareDialog.confirmationDialogIsDisplayed(); + await shareDialog.clickConfirmationDialogRemoveButton(); + await shareDialog.checkDialogIsDisplayed(); + await shareDialog.shareToggleButtonIsChecked(); + await notificationHistoryPage.checkNotifyContains(`You don't have permission to unshare this file`); }); }); }); diff --git a/e2e/content-services/social/social.component.e2e.ts b/e2e/content-services/social/social.component.e2e.ts index 1ae79694de..08608e40de 100644 --- a/e2e/content-services/social/social.component.e2e.ts +++ b/e2e/content-services/social/social.component.e2e.ts @@ -52,7 +52,7 @@ describe('Social component', () => { 'location': resources.Files.ADF_DOCUMENTS.TXT_0B.file_location }); - beforeAll(async (done) => { + beforeAll(async () => { await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); await this.alfrescoJsApi.core.peopleApi.addPerson(componentOwner); @@ -81,13 +81,12 @@ describe('Social component', () => { } }); - done(); }); - afterAll(async (done) => { + afterAll(async () => { await navigationBarPage.clickLogoutButton(); await uploadActions.deleteFileOrFolder(emptyFile.entry.id); - done(); + }); describe('User interaction on their own components', () => { @@ -97,21 +96,21 @@ describe('Social component', () => { await navigationBarPage.clickSocialButton(); }); - it('[C203006] Should be able to like and unlike their components but not rate them,', () => { - socialPage.writeCustomNodeId(emptyFile.entry.id); - expect(socialPage.getNodeIdFieldValue()).toEqual(emptyFile.entry.id); - likePage.clickLike(); - expect(likePage.getLikeCounter()).toBe('1'); - likePage.removeHoverFromLikeButton(); - expect(likePage.getLikedIconColor()).toBe(blueLikeColor); - ratePage.rateComponent(4); - expect(ratePage.getRatingCounter()).toBe('0'); - expect(ratePage.isNotStarRated(4)); - expect(ratePage.getUnratedStarColor(4)).toBe(averageStarColor); - likePage.clickUnlike(); - expect(likePage.getLikeCounter()).toBe('0'); - likePage.removeHoverFromLikeButton(); - expect(likePage.getUnLikedIconColor()).toBe(greyLikeColor); + it('[C203006] Should be able to like and unlike their components but not rate them,', async () => { + await socialPage.writeCustomNodeId(emptyFile.entry.id); + await expect(await socialPage.getNodeIdFieldValue()).toEqual(emptyFile.entry.id); + await likePage.clickLike(); + await expect(await likePage.getLikeCounter()).toBe('1'); + await likePage.removeHoverFromLikeButton(); + await expect(await likePage.getLikedIconColor()).toBe(blueLikeColor); + await ratePage.rateComponent(4); + await expect(await ratePage.getRatingCounter()).toBe('0'); + await expect(await ratePage.isNotStarRated(4)); + await expect(await ratePage.getUnratedStarColor(4)).toBe(averageStarColor); + await likePage.clickUnlike(); + await expect(await likePage.getLikeCounter()).toBe('0'); + await likePage.removeHoverFromLikeButton(); + await expect(await likePage.getUnLikedIconColor()).toBe(greyLikeColor); }); }); @@ -123,32 +122,32 @@ describe('Social component', () => { await navigationBarPage.clickSocialButton(); }); - it('[C260324] Should be able to like and unlike a component', () => { - socialPage.writeCustomNodeId(emptyFile.entry.id); - expect(socialPage.getNodeIdFieldValue()).toEqual(emptyFile.entry.id); - expect(likePage.getLikeCounter()).toEqual('0'); - expect(likePage.getUnLikedIconColor()).toBe(greyLikeColor); - likePage.clickLike(); - expect(likePage.getLikeCounter()).toBe('1'); - likePage.removeHoverFromLikeButton(); - expect(likePage.getLikedIconColor()).toBe(blueLikeColor); - likePage.clickUnlike(); - expect(likePage.getLikeCounter()).toBe('0'); - likePage.removeHoverFromLikeButton(); - expect(likePage.getUnLikedIconColor()).toBe(greyLikeColor); + it('[C260324] Should be able to like and unlike a component', async () => { + await socialPage.writeCustomNodeId(emptyFile.entry.id); + await expect(await socialPage.getNodeIdFieldValue()).toEqual(emptyFile.entry.id); + await expect(await likePage.getLikeCounter()).toEqual('0'); + await expect(await likePage.getUnLikedIconColor()).toBe(greyLikeColor); + await likePage.clickLike(); + await expect(await likePage.getLikeCounter()).toBe('1'); + await likePage.removeHoverFromLikeButton(); + await expect(await likePage.getLikedIconColor()).toBe(blueLikeColor); + await likePage.clickUnlike(); + await expect(await likePage.getLikeCounter()).toBe('0'); + await likePage.removeHoverFromLikeButton(); + await expect(await likePage.getUnLikedIconColor()).toBe(greyLikeColor); }); - it('[C310198] Should be able to rate and unRate a component', () => { - socialPage.writeCustomNodeId(emptyFile.entry.id); - expect(socialPage.getNodeIdFieldValue()).toEqual(emptyFile.entry.id); - expect(ratePage.getRatingCounter()).toBe('0'); - ratePage.rateComponent(4); - expect(ratePage.getRatingCounter()).toBe('1'); - expect(ratePage.isStarRated(4)); - expect(ratePage.getRatedStarColor(4)).toBe(yellowRatedStarColor); - ratePage.removeRating(4); - expect(ratePage.getRatingCounter()).toBe('0'); - expect(ratePage.isNotStarRated(4)); + it('[C310198] Should be able to rate and unRate a component', async () => { + await socialPage.writeCustomNodeId(emptyFile.entry.id); + await expect(await socialPage.getNodeIdFieldValue()).toEqual(emptyFile.entry.id); + await expect(await ratePage.getRatingCounter()).toBe('0'); + await ratePage.rateComponent(4); + await expect(await ratePage.getRatingCounter()).toBe('1'); + await expect(await ratePage.isStarRated(4)); + await expect(await ratePage.getRatedStarColor(4)).toBe(yellowRatedStarColor); + await ratePage.removeRating(4); + await expect(await ratePage.getRatingCounter()).toBe('0'); + await expect(await ratePage.isNotStarRated(4)); }); }); @@ -161,48 +160,48 @@ describe('Social component', () => { }); it('[C310197] Should be able to like, unLike, display total likes', async () => { - socialPage.writeCustomNodeId(emptyFile.entry.id); - expect(socialPage.getNodeIdFieldValue()).toEqual(emptyFile.entry.id); - expect(likePage.getUnLikedIconColor()).toBe(greyLikeColor); - likePage.clickLike(); - expect(likePage.getLikeCounter()).toBe('1'); - likePage.removeHoverFromLikeButton(); - expect(likePage.getLikedIconColor()).toBe(blueLikeColor); + await socialPage.writeCustomNodeId(emptyFile.entry.id); + await expect(await socialPage.getNodeIdFieldValue()).toEqual(emptyFile.entry.id); + await expect(await likePage.getUnLikedIconColor()).toBe(greyLikeColor); + await likePage.clickLike(); + await expect(await likePage.getLikeCounter()).toBe('1'); + await likePage.removeHoverFromLikeButton(); + await expect(await likePage.getLikedIconColor()).toBe(blueLikeColor); await loginPage.loginToContentServicesUsingUserModel(secondComponentVisitor); - navigationBarPage.clickSocialButton(); - socialPage.writeCustomNodeId(emptyFile.entry.id); - expect(likePage.getUnLikedIconColor()).toBe(greyLikeColor); - likePage.clickLike(); - expect(likePage.getLikeCounter()).toEqual('2'); - likePage.removeHoverFromLikeButton(); - expect(likePage.getLikedIconColor()).toBe(blueLikeColor); - likePage.clickUnlike(); - expect(likePage.getLikeCounter()).toEqual('1'); - likePage.removeHoverFromLikeButton(); - expect(likePage.getUnLikedIconColor()).toBe(greyLikeColor); + await navigationBarPage.clickSocialButton(); + await socialPage.writeCustomNodeId(emptyFile.entry.id); + await expect(await likePage.getUnLikedIconColor()).toBe(greyLikeColor); + await likePage.clickLike(); + await expect(await likePage.getLikeCounter()).toEqual('2'); + await likePage.removeHoverFromLikeButton(); + await expect(await likePage.getLikedIconColor()).toBe(blueLikeColor); + await likePage.clickUnlike(); + await expect(await likePage.getLikeCounter()).toEqual('1'); + await likePage.removeHoverFromLikeButton(); + await expect(await likePage.getUnLikedIconColor()).toBe(greyLikeColor); }); it('[C260327] Should be able to rate, unRate, display total ratings, display average rating', async () => { - socialPage.writeCustomNodeId(emptyFile.entry.id); - expect(socialPage.getNodeIdFieldValue()).toEqual(emptyFile.entry.id); - ratePage.rateComponent(4); - expect(ratePage.getRatingCounter()).toEqual('1'); - expect(ratePage.isStarRated(4)); - expect(ratePage.getRatedStarColor(4)).toBe(yellowRatedStarColor); + await socialPage.writeCustomNodeId(emptyFile.entry.id); + await expect(await socialPage.getNodeIdFieldValue()).toEqual(emptyFile.entry.id); + await ratePage.rateComponent(4); + await expect(await ratePage.getRatingCounter()).toEqual('1'); + await expect(await ratePage.isStarRated(4)); + await expect(await ratePage.getRatedStarColor(4)).toBe(yellowRatedStarColor); await loginPage.loginToContentServicesUsingUserModel(secondComponentVisitor); - navigationBarPage.clickSocialButton(); - socialPage.writeCustomNodeId(emptyFile.entry.id); - expect(socialPage.getNodeIdFieldValue()).toEqual(emptyFile.entry.id); - expect(ratePage.getRatingCounter()).toEqual('1'); - expect(ratePage.getAverageStarColor(4)).toBe(averageStarColor); - ratePage.rateComponent(0); - expect(ratePage.getRatingCounter()).toEqual('2'); - expect(ratePage.isStarRated(2)); - ratePage.removeRating(0); - expect(ratePage.getRatingCounter()).toEqual('1'); - expect(ratePage.getAverageStarColor(4)).toBe(averageStarColor); + await navigationBarPage.clickSocialButton(); + await socialPage.writeCustomNodeId(emptyFile.entry.id); + await expect(await socialPage.getNodeIdFieldValue()).toEqual(emptyFile.entry.id); + await expect(await ratePage.getRatingCounter()).toEqual('1'); + await expect(await ratePage.getAverageStarColor(4)).toBe(averageStarColor); + await ratePage.rateComponent(0); + await expect(await ratePage.getRatingCounter()).toEqual('2'); + await expect(await ratePage.isStarRated(2)); + await ratePage.removeRating(0); + await expect(await ratePage.getRatingCounter()).toEqual('1'); + await expect(await ratePage.getAverageStarColor(4)).toBe(averageStarColor); }); }); }); diff --git a/e2e/content-services/sso/sso-download-directive-component.e2e.ts b/e2e/content-services/sso/sso-download-directive-component.e2e.ts index 8c5322d139..a2e2082700 100644 --- a/e2e/content-services/sso/sso-download-directive-component.e2e.ts +++ b/e2e/content-services/sso/sso-download-directive-component.e2e.ts @@ -18,13 +18,20 @@ import { ContentServicesPage } from '../../pages/adf/contentServicesPage'; import { browser } from 'protractor'; import { NavigationBarPage } from '../../pages/adf/navigationBarPage'; -import { ApiService, LoginSSOPage, UploadActions, IdentityService, SettingsPage, StringUtil, UserModel } from '@alfresco/adf-testing'; +import { + ApiService, + LoginSSOPage, + UploadActions, + IdentityService, + SettingsPage, + StringUtil, + UserModel, + FileBrowserUtil +} from '@alfresco/adf-testing'; import { FileModel } from '../../models/ACS/fileModel'; import { ViewerPage } from '../../pages/adf/viewerPage'; import resources = require('../../util/resources'); import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; -import * as path from 'path'; -import { Util } from '../../util/util'; describe('SSO in ADF using ACS and AIS, Download Directive, Viewer, DocumentList, implicitFlow true', () => { @@ -65,15 +72,13 @@ describe('SSO in ADF using ACS and AIS, Download Directive, Viewer, DocumentList } }); const uploadActions = new UploadActions(this.alfrescoJsApi); - const downloadedPngFile = path.join(__dirname, 'downloads', pngFileModel.name); - const downloadedMultipleFiles = path.join(__dirname, 'downloads', 'archive.zip'); const folderName = StringUtil.generateRandomString(5); const acsUser = new UserModel(); let identityService: IdentityService; describe('SSO in ADF using ACS and AIS, implicit flow set', () => { - beforeAll(async (done) => { + beforeAll(async () => { const apiService = new ApiService(browser.params.config.oauth2.clientId, browser.params.testConfig.adf_acs.host, browser.params.testConfig.adf.hostSso, 'ECM'); await apiService.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); @@ -100,12 +105,11 @@ describe('SSO in ADF using ACS and AIS, Download Directive, Viewer, DocumentList await navigationBarPage.clickContentServicesButton(); await contentServicesPage.checkAcsContainer(); - contentListPage.doubleClickRow(folderName); + await contentListPage.doubleClickRow(folderName); await contentListPage.waitForTableBody(); - done(); }); - afterAll(async (done) => { + afterAll(async () => { try { await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); await uploadActions.deleteFileOrFolder(folder.entry.id); @@ -113,62 +117,55 @@ describe('SSO in ADF using ACS and AIS, Download Directive, Viewer, DocumentList } catch (error) { } await this.alfrescoJsApi.logout(); - browser.executeScript('window.sessionStorage.clear();'); - browser.executeScript('window.localStorage.clear();'); - done(); + await browser.executeScript('window.sessionStorage.clear();'); + await browser.executeScript('window.localStorage.clear();'); }); - afterEach(async (done) => { - browser.refresh(); - contentListPage.waitForTableBody(); - done(); + afterEach(async () => { + await browser.refresh(); + await contentListPage.waitForTableBody(); }); - it('[C291936] Should be able to download a file', async (done) => { - contentListPage.selectRow(pngFileModel.name); - contentServicesPage.clickDownloadButton(); - expect(Util.fileExists(downloadedPngFile, 30)).toBe(true); - done(); + it('[C291936] Should be able to download a file', async () => { + await contentListPage.selectRow(pngFileModel.name); + await contentServicesPage.clickDownloadButton(); + await expect(await FileBrowserUtil.isFileDownloaded(pngFileModel.name)).toBe(true, `${pngFileModel.name} not downloaded`); }); - it('[C291938] Should be able to open a document', async (done) => { - contentServicesPage.doubleClickRow(firstPdfFileModel.name); - viewerPage.checkFileIsLoaded(); - viewerPage.checkFileNameIsDisplayed(firstPdfFileModel.name); - viewerPage.clickCloseButton(); - contentListPage.waitForTableBody(); - done(); + it('[C291938] Should be able to open a document', async () => { + await contentServicesPage.doubleClickRow(firstPdfFileModel.name); + await viewerPage.checkFileIsLoaded(); + await viewerPage.checkFileNameIsDisplayed(firstPdfFileModel.name); + await viewerPage.clickCloseButton(); + await contentListPage.waitForTableBody(); }); - it('[C291942] Should be able to open an image', async (done) => { - viewerPage.viewFile(pngFileModel.name); - viewerPage.checkImgViewerIsDisplayed(); - viewerPage.checkFileNameIsDisplayed(pngFileModel.name); - viewerPage.clickCloseButton(); - contentListPage.waitForTableBody(); - done(); + it('[C291942] Should be able to open an image', async () => { + await viewerPage.viewFile(pngFileModel.name); + await viewerPage.checkImgViewerIsDisplayed(); + await viewerPage.checkFileNameIsDisplayed(pngFileModel.name); + await viewerPage.clickCloseButton(); + await contentListPage.waitForTableBody(); }); - it('[C291941] Should be able to download multiple files', async (done) => { - contentServicesPage.clickMultiSelectToggle(); - contentServicesPage.checkAcsContainer(); - contentListPage.dataTablePage().checkAllRows(); - contentListPage.dataTablePage().checkRowIsChecked('Display name', pngFileModel.name); - contentListPage.dataTablePage().checkRowIsChecked('Display name', firstPdfFileModel.name); - contentServicesPage.clickDownloadButton(); - expect(Util.fileExists(downloadedMultipleFiles, 30)).toBe(true); - done(); + it('[C291941] Should be able to download multiple files', async () => { + await contentServicesPage.clickMultiSelectToggle(); + await contentServicesPage.checkAcsContainer(); + await contentListPage.dataTablePage().checkAllRows(); + await contentListPage.dataTablePage().checkRowIsChecked('Display name', pngFileModel.name); + await contentListPage.dataTablePage().checkRowIsChecked('Display name', firstPdfFileModel.name); + await contentServicesPage.clickDownloadButton(); + await expect(await FileBrowserUtil.isFileDownloaded('archive.zip')).toBe(true, `archive.zip not downloaded`); }); - it('[C291940] Should be able to view thumbnails when enabled', async (done) => { - contentServicesPage.enableThumbnails(); - contentServicesPage.checkAcsContainer(); - contentListPage.waitForTableBody(); + it('[C291940] Should be able to view thumbnails when enabled', async () => { + await contentServicesPage.enableThumbnails(); + await contentServicesPage.checkAcsContainer(); + await contentListPage.waitForTableBody(); const filePdfIconUrl = await contentServicesPage.getRowIconImageUrl(firstPdfFileModel.name); - expect(filePdfIconUrl).toContain(`/versions/1/nodes/${pdfUploadedFile.entry.id}/renditions`); + await expect(filePdfIconUrl).toContain(`/versions/1/nodes/${pdfUploadedFile.entry.id}/renditions`); const filePngIconUrl = await contentServicesPage.getRowIconImageUrl(pngFileModel.name); - expect(filePngIconUrl).toContain(`/versions/1/nodes/${pngUploadedFile.entry.id}/renditions`); - done(); + await expect(filePngIconUrl).toContain(`/versions/1/nodes/${pngUploadedFile.entry.id}/renditions`); }); }); }); diff --git a/e2e/content-services/tag-component.e2e.ts b/e2e/content-services/tag-component.e2e.ts index 26845fefeb..caa3436393 100644 --- a/e2e/content-services/tag-component.e2e.ts +++ b/e2e/content-services/tag-component.e2e.ts @@ -36,8 +36,8 @@ describe('Tag component', () => { hostEcm: browser.params.testConfig.adf_acs.host }); const uploadActions = new UploadActions(this.alfrescoJsApi); - const pdfFileModel = new FileModel({ 'name': resources.Files.ADF_DOCUMENTS.PDF.file_name }); - const deleteFile = new FileModel({ 'name': StringUtil.generateRandomString() }); + const pdfFileModel = new FileModel({ name: resources.Files.ADF_DOCUMENTS.PDF.file_name }); + const deleteFile = new FileModel({ name: StringUtil.generateRandomString() }); const sameTag = StringUtil.generateRandomString().toLowerCase(); const tagList = [ @@ -56,7 +56,7 @@ describe('Tag component', () => { const nonLatinTag = StringUtil.generateRandomStringNonLatin(); let pdfUploadedFile, nodeId; - beforeAll(async (done) => { + beforeAll(async () => { await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); @@ -77,122 +77,121 @@ describe('Tag component', () => { await this.alfrescoJsApi.core.tagsApi.addTag(nodeId, tags); await loginPage.loginToContentServicesUsingUserModel(acsUser); - - done(); }); - afterAll(async (done) => { + afterAll(async () => { await navigationBarPage.clickLogoutButton(); await uploadActions.deleteFileOrFolder(pdfUploadedFile.entry.id); - done(); }); - it('[C260374] Should NOT be possible to add a new tag without Node ID', () => { - navigationBarPage.clickTagButton(); + it('[C260374] Should NOT be possible to add a new tag without Node ID', async () => { + await navigationBarPage.clickTagButton(); - expect(tagPage.getNodeId()).toEqual(''); - expect(tagPage.getNewTagPlaceholder()).toEqual('New Tag'); - expect(tagPage.addTagButtonIsEnabled()).toEqual(false); - tagPage.checkTagListIsEmpty(); - tagPage.checkTagListByNodeIdIsEmpty(); - expect(tagPage.addNewTagInput('a').addTagButtonIsEnabled()).toEqual(false); - expect(tagPage.getNewTagInput()).toEqual('a'); + await expect(await tagPage.getNodeId()).toEqual(''); + await expect(await tagPage.getNewTagPlaceholder()).toEqual('New Tag'); + await expect(await tagPage.addTagButtonIsEnabled()).toEqual(false); + await tagPage.checkTagListIsEmpty(); + await tagPage.checkTagListByNodeIdIsEmpty(); + await tagPage.addNewTagInput('a'); + + await expect(await tagPage.addTagButtonIsEnabled()).toEqual(false); + await expect(await tagPage.getNewTagInput()).toEqual('a'); }); - it('[C268151] Should be possible to add a new tag to a Node', () => { - tagPage.insertNodeId(pdfFileModel.id); - tagPage.addTag(tagList[0]); + it('[C268151] Should be possible to add a new tag to a Node', async () => { + await tagPage.insertNodeId(pdfFileModel.id); + await tagPage.addTag(tagList[0]); - tagPage.checkTagIsDisplayedInTagList(tagList[0]); - tagPage.checkTagIsDisplayedInTagListByNodeId(tagList[0]); + await tagPage.checkTagIsDisplayedInTagList(tagList[0]); + await tagPage.checkTagIsDisplayedInTagListByNodeId(tagList[0]); }); - it('[C260377] Should NOT be possible to add a tag that already exists', () => { - tagPage.insertNodeId(pdfFileModel.id); - tagPage.addTag(sameTag); - tagPage.checkTagIsDisplayedInTagList(sameTag); - tagPage.addTag(sameTag); - expect(tagPage.getErrorMessage()).toEqual('Tag already exists'); + it('[C260377] Should NOT be possible to add a tag that already exists', async () => { + await tagPage.insertNodeId(pdfFileModel.id); + await tagPage.addTag(sameTag); + await tagPage.checkTagIsDisplayedInTagList(sameTag); + await tagPage.addTag(sameTag); + await expect(await tagPage.getErrorMessage()).toEqual('Tag already exists'); }); - it('[C91326] Should be possible to create a tag with different characters', () => { - tagPage.insertNodeId(pdfFileModel.id); + it('[C91326] Should be possible to create a tag with different characters', async () => { + await tagPage.insertNodeId(pdfFileModel.id); - tagPage.addTag(uppercaseTag + digitsTag + nonLatinTag); + await tagPage.addTag(uppercaseTag + digitsTag + nonLatinTag); - browser.driver.sleep(5000); // wait CS return tags + await browser.sleep(5000); // wait CS return tags - tagPage.checkTagIsDisplayedInTagList(uppercaseTag.toLowerCase() + digitsTag + nonLatinTag); - tagPage.checkTagIsDisplayedInTagListByNodeId(uppercaseTag.toLowerCase() + digitsTag + nonLatinTag); + await tagPage.checkTagIsDisplayedInTagList(uppercaseTag.toLowerCase() + digitsTag + nonLatinTag); + await tagPage.checkTagIsDisplayedInTagListByNodeId(uppercaseTag.toLowerCase() + digitsTag + nonLatinTag); - tagPage.checkTagIsNotDisplayedInTagList(uppercaseTag + digitsTag + nonLatinTag); + await tagPage.checkTagIsNotDisplayedInTagList(uppercaseTag + digitsTag + nonLatinTag); }); - it('[C260375] Should be possible to delete a tag', () => { + it('[C260375] Should be possible to delete a tag', async () => { const deleteTag = StringUtil.generateRandomString().toUpperCase(); - tagPage.insertNodeId(deleteFile.id); + await tagPage.insertNodeId(deleteFile.id); - tagPage.addTag(deleteTag); + await tagPage.addTag(deleteTag); - tagPage.checkTagIsDisplayedInTagList(deleteTag.toLowerCase()); - tagPage.checkTagIsDisplayedInTagListByNodeId(deleteTag.toLowerCase()); + await tagPage.checkTagIsDisplayedInTagList(deleteTag.toLowerCase()); + await tagPage.checkTagIsDisplayedInTagListByNodeId(deleteTag.toLowerCase()); - tagPage.deleteTagFromTagListByNodeId(deleteTag.toLowerCase()); + await tagPage.deleteTagFromTagListByNodeId(deleteTag.toLowerCase()); - tagPage.checkTagIsNotDisplayedInTagList(deleteTag.toLowerCase()); - tagPage.checkTagIsNotDisplayedInTagListByNodeId(deleteTag.toLowerCase()); + await tagPage.checkTagIsNotDisplayedInTagList(deleteTag.toLowerCase()); + await tagPage.checkTagIsNotDisplayedInTagListByNodeId(deleteTag.toLowerCase()); - tagPage.insertNodeId(deleteFile.id); + await tagPage.insertNodeId(deleteFile.id); - tagPage.addTag(deleteTag); + await tagPage.addTag(deleteTag); - tagPage.checkTagIsDisplayedInTagList(deleteTag.toLowerCase()); - tagPage.checkTagIsDisplayedInTagListByNodeId(deleteTag.toLowerCase()); + await tagPage.checkTagIsDisplayedInTagList(deleteTag.toLowerCase()); + await tagPage.checkTagIsDisplayedInTagListByNodeId(deleteTag.toLowerCase()); - tagPage.deleteTagFromTagList(deleteTag.toLowerCase()); + await tagPage.deleteTagFromTagList(deleteTag.toLowerCase()); - tagPage.checkTagIsNotDisplayedInTagList(deleteTag.toLowerCase()); - tagPage.checkTagIsNotDisplayedInTagListByNodeId(deleteTag.toLowerCase()); + await tagPage.checkTagIsNotDisplayedInTagList(deleteTag.toLowerCase()); + await tagPage.checkTagIsNotDisplayedInTagListByNodeId(deleteTag.toLowerCase()); }); - it('[C286290] Should be able to hide the delete option from a tag component', () => { - tagPage.insertNodeId(pdfFileModel.id); - tagPage.addTag(tagList[3]); + it('[C286290] Should be able to hide the delete option from a tag component', async () => { + await tagPage.insertNodeId(pdfFileModel.id); + await tagPage.addTag(tagList[3]); - tagPage.checkTagIsDisplayedInTagListByNodeId(tagList[3]); - tagPage.checkDeleteTagFromTagListByNodeIdIsDisplayed(tagList[3]); + await tagPage.checkTagIsDisplayedInTagListByNodeId(tagList[3]); + await tagPage.checkDeleteTagFromTagListByNodeIdIsDisplayed(tagList[3]); - tagPage.clickShowDeleteButtonSwitch(); + await tagPage.clickShowDeleteButtonSwitch(); - tagPage.checkDeleteTagFromTagListByNodeIdIsNotDisplayed(tagList[3]); + await tagPage.checkDeleteTagFromTagListByNodeIdIsNotDisplayed(tagList[3]); }); - it('[C286472] Should be able to click Show more/less button on List Tags Content Services', () => { - tagPage.insertNodeId(pdfFileModel.id); + it('[C286472] Should be able to click Show more/less button on List Tags Content Services', async () => { + await tagPage.insertNodeId(pdfFileModel.id); - tagPage.checkShowMoreButtonIsDisplayed(); - tagPage.checkShowLessButtonIsNotDisplayed(); + await tagPage.checkShowMoreButtonIsDisplayed(); + await tagPage.checkShowLessButtonIsNotDisplayed(); - expect(tagPage.checkTagsOnList()).toEqual(10); + await expect(await tagPage.checkTagsOnList()).toEqual(10); - tagPage.clickShowMoreButton(); - tagPage.checkShowLessButtonIsDisplayed(); + await tagPage.clickShowMoreButton(); + await tagPage.checkShowLessButtonIsDisplayed(); - tagPage.clickShowLessButton(); - tagPage.checkShowLessButtonIsNotDisplayed(); + await tagPage.clickShowLessButton(); + await tagPage.checkShowLessButtonIsNotDisplayed(); }); - it('[C260378] Should be possible to add multiple tags', () => { - tagPage.insertNodeId(pdfFileModel.id); - tagPage.addTag(tagList[2]); + it('[C260378] Should be possible to add multiple tags', async () => { + await tagPage.insertNodeId(pdfFileModel.id); + await tagPage.addTag(tagList[2]); - browser.driver.sleep(5000); // wait CS return tags + await browser.sleep(5000); // wait CS return tags - tagPage.checkTagListIsOrderedAscending(); - tagPage.checkTagListByNodeIdIsOrderedAscending(); - tagPage.checkTagListContentServicesIsOrderedAscending(); + await tagPage.checkTagListIsOrderedAscending(); + await tagPage.checkTagListByNodeIdIsOrderedAscending(); + await tagPage.checkTagListContentServicesIsOrderedAscending(); }); }); diff --git a/e2e/content-services/trashcan-pagination.e2e.ts b/e2e/content-services/trashcan-pagination.e2e.ts index 762377e2be..d368f46d5d 100644 --- a/e2e/content-services/trashcan-pagination.e2e.ts +++ b/e2e/content-services/trashcan-pagination.e2e.ts @@ -54,97 +54,84 @@ describe('Trashcan - Pagination', () => { const navigationBarPage = new NavigationBarPage(); const acsUser = new AcsUserModel(); - const newFolderModel = new FolderModel({ 'name': 'newFolder' }); - const nrOfFiles = 20; + const newFolderModel = new FolderModel({ name: 'newFolder' }); + const noOfFiles = 20; - beforeAll(async (done) => { + beforeAll(async () => { this.alfrescoJsApi = new AlfrescoApi({ provider: 'ECM', hostEcm: browser.params.testConfig.adf_acs.host }); const uploadActions = new UploadActions(this.alfrescoJsApi); - - const fileNames = Util.generateSequenceFiles(10, nrOfFiles + 9, pagination.base, pagination.extension); - + const fileNames = Util.generateSequenceFiles(10, noOfFiles + 9, pagination.base, pagination.extension); await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); - await this.alfrescoJsApi.core.peopleApi.addPerson(acsUser); - await this.alfrescoJsApi.login(acsUser.id, acsUser.password); - const folderUploadedModel = await uploadActions.createFolder(newFolderModel.name, '-my-'); - - const emptyFiles = await uploadActions.createEmptyFiles(fileNames, folderUploadedModel.entry.id); - await emptyFiles.list.entries.forEach(async (node) => { - await this.alfrescoJsApi.node.deleteNode(node.entry.id).then(() => { - }, () => { - this.alfrescoJsApi.node.deleteNode(node.entry.id); + const emptyFiles: any = await uploadActions.createEmptyFiles(fileNames, folderUploadedModel.entry.id); + for (const entry of emptyFiles.list.entries) { + await this.alfrescoJsApi.node.deleteNode(entry.entry.id).then(() => {}, () => { + this.alfrescoJsApi.node.deleteNode(entry.entry.id); }); - }); - + } await loginPage.loginToContentServicesUsingUserModel(acsUser); - navigationBarPage.clickTrashcanButton(); - trashcanPage.waitForTableBody(); - - done(); + await navigationBarPage.clickTrashcanButton(); + await trashcanPage.waitForTableBody(); }); - afterAll(async (done) => { + afterAll(async () => { await navigationBarPage.clickLogoutButton(); - done(); + }); - afterEach((done) => { - browser.refresh(); - trashcanPage.waitForTableBody(); - done(); + afterEach(async () => { + await browser.refresh(); + await trashcanPage.waitForTableBody(); + }); - it('[C272811] Should be able to set Items per page to 20', () => { - paginationPage.selectItemsPerPage(itemsPerPage.twenty); - - trashcanPage.waitForTableBody(); - trashcanPage.waitForPagination(); - - expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.twenty); - expect(paginationPage.getPaginationRange()).toEqual('Showing 1-' + nrOfFiles + ' of ' + nrOfFiles); - expect(trashcanPage.numberOfResultsDisplayed()).toBe(nrOfFiles); - - paginationPage.checkNextPageButtonIsDisabled(); - paginationPage.checkPreviousPageButtonIsDisabled(); + it('[C272811] Should be able to set Items per page to 20', async () => { + await paginationPage.selectItemsPerPage(itemsPerPage.twenty); + await trashcanPage.waitForTableBody(); + await trashcanPage.waitForPagination(); + await expect(await paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.twenty); + await expect(await paginationPage.getPaginationRange()).toEqual('Showing 1-' + noOfFiles + ' of ' + noOfFiles); + await expect(await trashcanPage.numberOfResultsDisplayed()).toBe(noOfFiles); + await paginationPage.checkNextPageButtonIsDisabled(); + await paginationPage.checkPreviousPageButtonIsDisabled(); }); - it('[C276742] Should be able to set Items per page to 15', () => { - paginationPage.selectItemsPerPage(itemsPerPage.fifteen); - trashcanPage.waitForTableBody(); - trashcanPage.waitForPagination(); - expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.fifteen); - expect(paginationPage.getPaginationRange()).toEqual('Showing 1-' + itemsPerPage.fifteenValue + ' of ' + nrOfFiles); - expect(trashcanPage.numberOfResultsDisplayed()).toBe(itemsPerPage.fifteenValue); - paginationPage.checkNextPageButtonIsEnabled(); - paginationPage.checkPreviousPageButtonIsDisabled(); + it('[C276742] Should be able to set Items per page to 15', async () => { + await paginationPage.selectItemsPerPage(itemsPerPage.fifteen); + await trashcanPage.waitForTableBody(); + await trashcanPage.waitForPagination(); + await expect(await paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.fifteen); + await expect(await paginationPage.getPaginationRange()).toEqual('Showing 1-' + itemsPerPage.fifteenValue + ' of ' + noOfFiles); + await expect(await trashcanPage.numberOfResultsDisplayed()).toBe(itemsPerPage.fifteenValue); + await paginationPage.checkNextPageButtonIsEnabled(); + await paginationPage.checkPreviousPageButtonIsDisabled(); }); - it('[C276743] Should be able to set Items per page to 10', () => { - paginationPage.selectItemsPerPage(itemsPerPage.ten); - trashcanPage.waitForTableBody(); - trashcanPage.waitForPagination(); - expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.ten); - expect(paginationPage.getPaginationRange()).toEqual('Showing 1-' + itemsPerPage.tenValue + ' of ' + nrOfFiles); - expect(trashcanPage.numberOfResultsDisplayed()).toBe(itemsPerPage.tenValue); - paginationPage.checkNextPageButtonIsEnabled(); - paginationPage.checkPreviousPageButtonIsDisabled(); + it('[C276743] Should be able to set Items per page to 10', async () => { + await paginationPage.selectItemsPerPage(itemsPerPage.ten); + await trashcanPage.waitForTableBody(); + await trashcanPage.waitForPagination(); + await expect(await paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.ten); + await expect(await paginationPage.getPaginationRange()).toEqual('Showing 1-' + itemsPerPage.tenValue + ' of ' + noOfFiles); + await expect(await trashcanPage.numberOfResultsDisplayed()).toBe(itemsPerPage.tenValue); + await paginationPage.checkNextPageButtonIsEnabled(); + await paginationPage.checkPreviousPageButtonIsDisabled(); }); - it('[C276744] Should be able to set Items per page to 5', () => { - paginationPage.selectItemsPerPage(itemsPerPage.five); - trashcanPage.waitForTableBody(); - trashcanPage.waitForPagination(); - expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.five); - expect(paginationPage.getPaginationRange()).toEqual('Showing 1-' + itemsPerPage.fiveValue + ' of ' + nrOfFiles); - expect(trashcanPage.numberOfResultsDisplayed()).toBe(itemsPerPage.fiveValue); - paginationPage.checkNextPageButtonIsEnabled(); - paginationPage.checkPreviousPageButtonIsDisabled(); + it('[C276744] Should be able to set Items per page to 5', async () => { + await paginationPage.selectItemsPerPage(itemsPerPage.five); + await trashcanPage.waitForTableBody(); + await trashcanPage.waitForPagination(); + await expect(await paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.five); + await expect(await paginationPage.getPaginationRange()).toEqual('Showing 1-' + itemsPerPage.fiveValue + ' of ' + noOfFiles); + await expect(await trashcanPage.numberOfResultsDisplayed()).toBe(itemsPerPage.fiveValue); + await paginationPage.checkNextPageButtonIsEnabled(); + await paginationPage.checkPreviousPageButtonIsDisabled(); }); }) ; diff --git a/e2e/content-services/tree-view-component.e2e.ts b/e2e/content-services/tree-view-component.e2e.ts index 7c26f87e7f..7b91d2f7b9 100644 --- a/e2e/content-services/tree-view-component.e2e.ts +++ b/e2e/content-services/tree-view-component.e2e.ts @@ -45,7 +45,7 @@ describe('Tree View Component', () => { document: 'MyFile' }; - beforeAll(async (done) => { + beforeAll(async () => { await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); await this.alfrescoJsApi.core.peopleApi.addPerson(acsUser); @@ -69,78 +69,75 @@ describe('Tree View Component', () => { nodeType: 'cm:content' }); - loginPage.loginToContentServicesUsingUserModel(acsUser); + await loginPage.loginToContentServicesUsingUserModel(acsUser); - navigationBarPage.clickTreeViewButton(); - - done(); + await navigationBarPage.clickTreeViewButton(); }); - afterAll(async (done) => { + afterAll(async () => { await navigationBarPage.clickLogoutButton(); await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); await uploadActions.deleteFileOrFolder(treeFolder.entry.id); await uploadActions.deleteFileOrFolder(secondTreeFolder.entry.id); - done(); }); - it('[C289972] Should be able to show folders and sub-folders of a node as a tree view', () => { - treeViewPage.checkTreeViewTitleIsDisplayed(); + it('[C289972] Should be able to show folders and sub-folders of a node as a tree view', async () => { + await treeViewPage.checkTreeViewTitleIsDisplayed(); - expect(treeViewPage.getNodeId()).toEqual(nodeNames.parentFolder); + await expect(await treeViewPage.getNodeId()).toEqual(nodeNames.parentFolder); - treeViewPage.checkNodeIsDisplayedAsClosed(nodeNames.folder); - treeViewPage.checkNodeIsDisplayedAsClosed(nodeNames.secondFolder); + await treeViewPage.checkNodeIsDisplayedAsClosed(nodeNames.folder); + await treeViewPage.checkNodeIsDisplayedAsClosed(nodeNames.secondFolder); - treeViewPage.clickNode(nodeNames.secondFolder); + await treeViewPage.clickNode(nodeNames.secondFolder); - treeViewPage.checkClickedNodeName(nodeNames.secondFolder); - treeViewPage.checkNodeIsDisplayedAsOpen(nodeNames.secondFolder); - treeViewPage.checkNodeIsDisplayedAsClosed(nodeNames.thirdFolder); + await treeViewPage.checkClickedNodeName(nodeNames.secondFolder); + await treeViewPage.checkNodeIsDisplayedAsOpen(nodeNames.secondFolder); + await treeViewPage.checkNodeIsDisplayedAsClosed(nodeNames.thirdFolder); - treeViewPage.clickNode(nodeNames.thirdFolder); + await treeViewPage.clickNode(nodeNames.thirdFolder); - treeViewPage.checkClickedNodeName(nodeNames.thirdFolder); - treeViewPage.checkNodeIsDisplayedAsOpen(nodeNames.thirdFolder); + await treeViewPage.checkClickedNodeName(nodeNames.thirdFolder); + await treeViewPage.checkNodeIsDisplayedAsOpen(nodeNames.thirdFolder); - treeViewPage.clickNode(nodeNames.secondFolder); + await treeViewPage.clickNode(nodeNames.secondFolder); - treeViewPage.checkClickedNodeName(nodeNames.secondFolder); - treeViewPage.checkNodeIsDisplayedAsClosed(nodeNames.secondFolder); - treeViewPage.checkNodeIsNotDisplayed(nodeNames.thirdFolder); + await treeViewPage.checkClickedNodeName(nodeNames.secondFolder); + await treeViewPage.checkNodeIsDisplayedAsClosed(nodeNames.secondFolder); + await treeViewPage.checkNodeIsNotDisplayed(nodeNames.thirdFolder); }); - it('[C289973] Should be able to change the default nodeId', () => { - treeViewPage.clearNodeIdInput(); + it('[C289973] Should be able to change the default nodeId', async () => { + await treeViewPage.clearNodeIdInput(); - treeViewPage.checkNoNodeIdMessageIsDisplayed(); - treeViewPage.addNodeId(secondTreeFolder.entry.id); + await treeViewPage.checkNoNodeIdMessageIsDisplayed(); + await treeViewPage.addNodeId(secondTreeFolder.entry.id); - treeViewPage.checkNodeIsDisplayedAsClosed(nodeNames.thirdFolder); + await treeViewPage.checkNodeIsDisplayedAsClosed(nodeNames.thirdFolder); - treeViewPage.addNodeId('ThisIdDoesNotExist'); - treeViewPage.checkErrorMessageIsDisplayed(); + await treeViewPage.addNodeId('ThisIdDoesNotExist'); + await treeViewPage.checkErrorMessageIsDisplayed(); - treeViewPage.addNodeId(nodeNames.parentFolder); + await treeViewPage.addNodeId(nodeNames.parentFolder); - treeViewPage.checkNodeIsDisplayedAsClosed(nodeNames.folder); - treeViewPage.checkNodeIsDisplayedAsClosed(nodeNames.secondFolder); + await treeViewPage.checkNodeIsDisplayedAsClosed(nodeNames.folder); + await treeViewPage.checkNodeIsDisplayedAsClosed(nodeNames.secondFolder); - treeViewPage.clickNode(nodeNames.secondFolder); + await treeViewPage.clickNode(nodeNames.secondFolder); - treeViewPage.checkNodeIsDisplayedAsClosed(nodeNames.thirdFolder); + await treeViewPage.checkNodeIsDisplayedAsClosed(nodeNames.thirdFolder); }); - it('[C290071] Should not be able to display files', () => { - treeViewPage.addNodeId(secondTreeFolder.entry.id); + it('[C290071] Should not be able to display files', async () => { + await treeViewPage.addNodeId(secondTreeFolder.entry.id); - treeViewPage.checkNodeIsDisplayedAsClosed(nodeNames.thirdFolder); + await treeViewPage.checkNodeIsDisplayedAsClosed(nodeNames.thirdFolder); - treeViewPage.clickNode(nodeNames.thirdFolder); + await treeViewPage.clickNode(nodeNames.thirdFolder); - expect(treeViewPage.getTotalNodes()).toEqual(1); + await expect(await treeViewPage.getTotalNodes()).toEqual(1); }); }); diff --git a/e2e/content-services/upload/cancel-upload.e2e.ts b/e2e/content-services/upload/cancel-upload.e2e.ts index 87a892d938..e3af97b35b 100644 --- a/e2e/content-services/upload/cancel-upload.e2e.ts +++ b/e2e/content-services/upload/cancel-upload.e2e.ts @@ -26,12 +26,12 @@ import resources = require('../../util/resources'); import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; import { NavigationBarPage } from '../../pages/adf/navigationBarPage'; -describe('Upload component', () => { +describe('Upload component', async () => { this.alfrescoJsApi = new AlfrescoApi({ - provider: 'ECM', - hostEcm: browser.params.testConfig.adf_acs.host - }); + provider: 'ECM', + hostEcm: browser.params.testConfig.adf_acs.host + }); const contentServicesPage = new ContentServicesPage(); const uploadDialog = new UploadDialog(); const uploadToggles = new UploadToggles(); @@ -53,7 +53,7 @@ describe('Upload component', () => { 'location': resources.Files.ADF_DOCUMENTS.LARGE_FILE.file_location }); - beforeAll(async (done) => { + beforeAll(async () => { await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); await this.alfrescoJsApi.core.peopleApi.addPerson(acsUser); @@ -62,55 +62,67 @@ describe('Upload component', () => { await loginPage.loginToContentServicesUsingUserModel(acsUser); - contentServicesPage.goToDocumentList(); + await contentServicesPage.goToDocumentList(); const pdfUploadedFile = await uploadActions.uploadFile(firstPdfFileModel.location, firstPdfFileModel.name, '-my-'); Object.assign(firstPdfFileModel, pdfUploadedFile.entry); - done(); }); - afterAll(async (done) => { + afterAll(async () => { await navigationBarPage.clickLogoutButton(); - done(); }); - beforeEach(() => { - contentServicesPage.goToDocumentList(); + beforeEach(async () => { + await contentServicesPage.goToDocumentList(); }); - it('[C272792] Should be possible to cancel upload of a big file using row cancel icon', () => { - browser.executeScript(' setTimeout(() => {document.querySelector(\'mat-icon[class*="adf-file-uploading-row__action"]\').click();}, 3000)'); + it('[C272792] Should be possible to cancel upload of a big file using row cancel icon', async () => { + await browser.executeScript('setTimeout(() => {document.querySelector("div[data-automation-id=\'cancel-upload-progress\']").click();}, 1000)'); - contentServicesPage.uploadFile(largeFile.location); + await contentServicesPage.uploadFile(largeFile.location); - expect(uploadDialog.getTitleText()).toEqual('Upload canceled'); - uploadDialog.clickOnCloseButton().dialogIsNotDisplayed(); - contentServicesPage.checkContentIsNotDisplayed(largeFile.name); + await expect(await uploadDialog.getTitleText()).toEqual('Upload canceled'); + await uploadDialog.clickOnCloseButton(); + await uploadDialog.dialogIsNotDisplayed(); + await contentServicesPage.checkContentIsNotDisplayed(largeFile.name); }); - it('[C287790] Should be possible to cancel upload of a big file through the cancel uploads button', () => { - browser.executeScript(' setInterval(() => {document.querySelector("#adf-upload-dialog-cancel-all").click();' + + it('[C287790] Should be possible to cancel upload of a big file through the cancel uploads button', async () => { + await browser.executeScript(' setTimeout(() => {document.querySelector("#adf-upload-dialog-cancel-all").click();' + 'document.querySelector("#adf-upload-dialog-cancel").click(); }, 500)'); - contentServicesPage.uploadFile(largeFile.location); + await contentServicesPage.uploadFile(largeFile.location); - expect(uploadDialog.getTitleText()).toEqual('Upload canceled'); - uploadDialog.clickOnCloseButton().dialogIsNotDisplayed(); - contentServicesPage.checkContentIsNotDisplayed(largeFile.name); + await expect(await uploadDialog.getTitleText()).toEqual('Upload canceled'); + await uploadDialog.clickOnCloseButton(); + await uploadDialog.dialogIsNotDisplayed(); + await contentServicesPage.checkContentIsNotDisplayed(largeFile.name); }); - it('[C272793] Should be able to cancel multiple files upload', () => { - browser.executeScript(' setInterval(() => {document.querySelector("#adf-upload-dialog-cancel-all").click();' + + // tslint:disable-next-line: ban + xit('[C272793] Should be able to cancel multiple files upload', async () => { + await browser.executeScript(' setTimeout(() => {document.querySelector("#adf-upload-dialog-cancel-all").click();' + 'document.querySelector("#adf-upload-dialog-cancel").click(); }, 500)'); - uploadToggles.enableMultipleFileUpload(); - contentServicesPage.uploadMultipleFile([pngFileModel.location, largeFile.location]); - expect(uploadDialog.getTitleText()).toEqual('Upload canceled'); - uploadDialog.clickOnCloseButton().dialogIsNotDisplayed(); - contentServicesPage.checkContentIsNotDisplayed(pngFileModel.name).checkContentIsNotDisplayed(largeFile.name); - uploadToggles.disableMultipleFileUpload(); + await uploadToggles.enableMultipleFileUpload(); + await contentServicesPage.uploadMultipleFile([pngFileModel.location, largeFile.location]); + await expect(await uploadDialog.getTitleText()).toEqual('Upload canceled'); + await uploadDialog.clickOnCloseButton(); + await uploadDialog.dialogIsNotDisplayed(); + await contentServicesPage.checkContentIsNotDisplayed(pngFileModel.name); + await contentServicesPage.checkContentIsNotDisplayed(largeFile.name); + await uploadToggles.disableMultipleFileUpload(); }); + it('[C315257] Should be able to cancel file in upload queue', async () => { + await uploadToggles.enableMultipleFileUpload(); + await browser.executeScript('setTimeout(() => {document.querySelector("button[data-automation-id=\'cancel-upload-queue\']").click();}, 500)'); + await contentServicesPage.uploadMultipleFile([largeFile.location, pngFileModel.location]); + await uploadDialog.fileIsCancelled(pngFileModel.name); + await uploadDialog.clickOnCloseButton(); + await uploadDialog.dialogIsNotDisplayed(); + await uploadToggles.disableMultipleFileUpload(); + }); }); diff --git a/e2e/content-services/upload/excluded-file.e2e.ts b/e2e/content-services/upload/excluded-file.e2e.ts index 1c6cf09486..831495ebac 100644 --- a/e2e/content-services/upload/excluded-file.e2e.ts +++ b/e2e/content-services/upload/excluded-file.e2e.ts @@ -55,7 +55,7 @@ describe('Upload component - Excluded Files', () => { 'location': resources.Files.ADF_DOCUMENTS.PNG.file_location }); - beforeAll(async (done) => { + beforeAll(async () => { this.alfrescoJsApi = new AlfrescoApi({ provider: 'ECM', hostEcm: browser.params.testConfig.adf_acs.host @@ -69,42 +69,39 @@ describe('Upload component - Excluded Files', () => { await loginPage.loginToContentServicesUsingUserModel(acsUser); - contentServicesPage.goToDocumentList(); + await contentServicesPage.goToDocumentList(); - done(); }); - afterAll(async (done) => { + afterAll(async () => { await navigationBarPage.clickLogoutButton(); - done(); + }); - afterEach(async (done) => { - contentServicesPage.goToDocumentList(); + afterEach(async () => { + await contentServicesPage.goToDocumentList(); - done(); }); - it('[C279914] Should not allow upload default excluded files using D&D', () => { - contentServicesPage.checkDragAndDropDIsDisplayed(); + it('[C279914] Should not allow upload default excluded files using D&D', async () => { + await contentServicesPage.checkDragAndDropDIsDisplayed(); const dragAndDropArea = element.all(by.css('adf-upload-drag-area div')).first(); const dragAndDrop = new DropActions(); - dragAndDrop.dropFile(dragAndDropArea, iniExcludedFile.location); + await dragAndDrop.dropFile(dragAndDropArea, iniExcludedFile.location); - browser.driver.sleep(5000); + await browser.sleep(5000); - uploadDialog.dialogIsNotDisplayed(); + await uploadDialog.dialogIsNotDisplayed(); - contentServicesPage.checkContentIsNotDisplayed(iniExcludedFile.name); + await contentServicesPage.checkContentIsNotDisplayed(iniExcludedFile.name); }); - it('[C260122] Should not allow upload default excluded files using Upload button', () => { - contentServicesPage - .uploadFile(iniExcludedFile.location) - .checkContentIsNotDisplayed(iniExcludedFile.name); + it('[C260122] Should not allow upload default excluded files using Upload button', async () => { + await contentServicesPage.uploadFile(iniExcludedFile.location); + await contentServicesPage.checkContentIsNotDisplayed(iniExcludedFile.name); }); it('[C212862] Should not allow upload file excluded in the files extension of app.config.json', async () => { @@ -113,11 +110,12 @@ describe('Upload component - Excluded Files', () => { 'match-options': { 'nocase': true } })); - contentServicesPage.goToDocumentList(); + await contentServicesPage.goToDocumentList(); - contentServicesPage - .uploadFile(txtFileModel.location) - .checkContentIsNotDisplayed(txtFileModel.name); + await contentServicesPage + .uploadFile(txtFileModel.location); + + await contentServicesPage.checkContentIsNotDisplayed(txtFileModel.name); }); it('[C274688] Should extension type added as excluded and accepted not be uploaded', async () => { @@ -126,14 +124,14 @@ describe('Upload component - Excluded Files', () => { 'match-options': { 'nocase': true } })); - contentServicesPage.goToDocumentList(); + await contentServicesPage.goToDocumentList(); - uploadToggles.enableExtensionFilter(); - browser.driver.sleep(1000); - uploadToggles.addExtension('.png'); + await uploadToggles.enableExtensionFilter(); + await browser.sleep(1000); + await uploadToggles.addExtension('.png'); - contentServicesPage.uploadFile(pngFile.location); - browser.driver.sleep(1000); - contentServicesPage.checkContentIsNotDisplayed(pngFile.name); + await contentServicesPage.uploadFile(pngFile.location); + await browser.sleep(1000); + await contentServicesPage.checkContentIsNotDisplayed(pngFile.name); }); }); diff --git a/e2e/content-services/upload/upload-dialog.e2e.ts b/e2e/content-services/upload/upload-dialog.e2e.ts new file mode 100644 index 0000000000..f452ee8406 --- /dev/null +++ b/e2e/content-services/upload/upload-dialog.e2e.ts @@ -0,0 +1,185 @@ +/*! + * @license + * Copyright 2019 Alfresco Software, Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { BrowserActions, LoginPage, UploadActions } from '@alfresco/adf-testing'; +import { ContentServicesPage } from '../../pages/adf/contentServicesPage'; +import { UploadDialog } from '../../pages/adf/dialog/uploadDialog'; +import { UploadToggles } from '../../pages/adf/dialog/uploadToggles'; +import { AcsUserModel } from '../../models/ACS/acsUserModel'; +import { FileModel } from '../../models/ACS/fileModel'; +import { browser } from 'protractor'; +import resources = require('../../util/resources'); +import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; +import { VersionManagePage } from '../../pages/adf/versionManagerPage'; + +describe('Upload component', () => { + + const contentServicesPage = new ContentServicesPage(); + const uploadDialog = new UploadDialog(); + const uploadToggles = new UploadToggles(); + const loginPage = new LoginPage(); + const acsUser = new AcsUserModel(); + const versionManagePage = new VersionManagePage(); + this.alfrescoJsApi = new AlfrescoApi({ + provider: 'ECM', + hostEcm: browser.params.testConfig.adf_acs.host + }); + const uploadActions = new UploadActions(this.alfrescoJsApi); + + const firstPdfFileModel = new FileModel({ + 'name': resources.Files.ADF_DOCUMENTS.PDF_B.file_name, + 'location': resources.Files.ADF_DOCUMENTS.PDF_B.file_location + }); + const docxFileModel = new FileModel({ + 'name': resources.Files.ADF_DOCUMENTS.DOCX.file_name, + 'location': resources.Files.ADF_DOCUMENTS.DOCX.file_location + }); + const pdfFileModel = new FileModel({ + 'name': resources.Files.ADF_DOCUMENTS.PDF.file_name, + 'location': resources.Files.ADF_DOCUMENTS.PDF.file_location + }); + const pngFileModelTwo = new FileModel({ + 'name': resources.Files.ADF_DOCUMENTS.PNG_B.file_name, + 'location': resources.Files.ADF_DOCUMENTS.PNG_B.file_location + }); + const pngFileModel = new FileModel({ + 'name': resources.Files.ADF_DOCUMENTS.PNG.file_name, + 'location': resources.Files.ADF_DOCUMENTS.PNG.file_location + }); + const filesLocation = [pdfFileModel.location, docxFileModel.location, pngFileModel.location, firstPdfFileModel.location]; + const filesName = [pdfFileModel.name, docxFileModel.name, pngFileModel.name, firstPdfFileModel.name]; + + beforeAll(async () => { + + await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); + await this.alfrescoJsApi.core.peopleApi.addPerson(acsUser); + await this.alfrescoJsApi.login(acsUser.id, acsUser.password); + await loginPage.loginToContentServicesUsingUserModel(acsUser); + await contentServicesPage.goToDocumentList(); + const pdfUploadedFile = await uploadActions.uploadFile(firstPdfFileModel.location, firstPdfFileModel.name, '-my-'); + Object.assign(firstPdfFileModel, pdfUploadedFile.entry); + + }); + + beforeEach(async () => { + await contentServicesPage.goToDocumentList(); + }); + + afterEach(async () => { + const nbResults = await contentServicesPage.numberOfResultsDisplayed(); + if (nbResults > 1) { + const nodesPromise = await contentServicesPage.getElementsDisplayedId(); + for (const node of nodesPromise) { + const nodeId = await node; + await uploadActions.deleteFileOrFolder(nodeId); + } + } + + }); + + it('[C260143] Should be possible to maximize/minimize the upload dialog', async () => { + await contentServicesPage + .uploadFile(docxFileModel.location); + await contentServicesPage.checkContentIsDisplayed(docxFileModel.name); + + await uploadDialog.fileIsUploaded(docxFileModel.name); + await uploadDialog.checkCloseButtonIsDisplayed(); + await expect(await uploadDialog.numberOfCurrentFilesUploaded()).toEqual('1'); + await expect(await uploadDialog.numberOfInitialFilesUploaded()).toEqual('1'); + await uploadDialog.minimizeUploadDialog(); + await uploadDialog.dialogIsMinimized(); + await expect(await uploadDialog.numberOfCurrentFilesUploaded()).toEqual('1'); + await expect(await uploadDialog.numberOfInitialFilesUploaded()).toEqual('1'); + await uploadDialog.maximizeUploadDialog(); + await uploadDialog.dialogIsDisplayed(); + await uploadDialog.fileIsUploaded(docxFileModel.name); + await expect(await uploadDialog.numberOfCurrentFilesUploaded()).toEqual('1'); + await expect(await uploadDialog.numberOfInitialFilesUploaded()).toEqual('1'); + await uploadDialog.checkCloseButtonIsDisplayed(); + await uploadDialog.clickOnCloseButton(); + await uploadDialog.dialogIsNotDisplayed(); + }); + + it('[C291902] Should be shown upload counter display in dialog box', async () => { + await contentServicesPage + .uploadFile(docxFileModel.location); + await contentServicesPage.checkContentIsDisplayed(docxFileModel.name); + + await uploadDialog.fileIsUploaded(docxFileModel.name); + await uploadDialog.checkCloseButtonIsDisplayed(); + await expect(await uploadDialog.getTitleText()).toEqual('Uploaded 1 / 1'); + await uploadDialog.checkCloseButtonIsDisplayed(); + await uploadDialog.clickOnCloseButton(); + await uploadDialog.dialogIsNotDisplayed(); + }); + + it('[C260168] Should be possible to cancel upload using dialog icon', async () => { + await contentServicesPage.uploadFile(pdfFileModel.location); + await contentServicesPage.checkContentIsDisplayed(pdfFileModel.name); + await uploadDialog.removeUploadedFile(pdfFileModel.name); + await uploadDialog.fileIsCancelled(pdfFileModel.name); + await expect(await uploadDialog.getTitleText()).toEqual('Upload canceled'); + await uploadDialog.clickOnCloseButton(); + await uploadDialog.dialogIsNotDisplayed(); + await contentServicesPage.checkContentIsNotDisplayed(pdfFileModel.name); + }); + + it('[C260176] Should remove files from upload dialog box when closed', async () => { + await contentServicesPage.uploadFile(pngFileModelTwo.location); + await contentServicesPage.checkContentIsDisplayed(pngFileModelTwo.name); + + await uploadDialog.fileIsUploaded(pngFileModelTwo.name); + await contentServicesPage.uploadFile(pngFileModel.location); + await contentServicesPage.checkContentIsDisplayed(pngFileModel.name); + await uploadDialog.fileIsUploaded(pngFileModel.name); + await uploadDialog.fileIsUploaded(pngFileModelTwo.name); + await uploadDialog.clickOnCloseButton(); + await uploadDialog.dialogIsNotDisplayed(); + await contentServicesPage.uploadFile(pdfFileModel.location); + await contentServicesPage .checkContentIsDisplayed(pdfFileModel.name); + await uploadDialog.fileIsUploaded(pdfFileModel.name); + await uploadDialog.fileIsNotDisplayedInDialog(pngFileModel.name); + await uploadDialog.fileIsNotDisplayedInDialog(pngFileModelTwo.name); + await uploadDialog.clickOnCloseButton(); + await uploadDialog.dialogIsNotDisplayed(); + }); + + it('[C260170] Should be possible to upload multiple files', async () => { + await contentServicesPage.checkAcsContainer(); + await uploadToggles.enableMultipleFileUpload(); + await contentServicesPage.uploadMultipleFile(filesLocation); + await contentServicesPage.checkContentsAreDisplayed(filesName); + await uploadDialog.filesAreUploaded(filesName); + await expect(await uploadDialog.getTitleText()).toEqual('Uploaded 4 / 4'); + await uploadDialog.clickOnCloseButton(); + await uploadDialog.dialogIsNotDisplayed(); + await uploadToggles.disableMultipleFileUpload(); + }); + + it('[C311305] Should NOT be able to remove uploaded version', async () => { + await contentServicesPage.uploadFile(docxFileModel.location); + await uploadDialog.fileIsUploaded(docxFileModel.name); + await contentServicesPage.checkContentIsDisplayed(docxFileModel.name); + + await contentServicesPage.versionManagerContent(docxFileModel.name); + await BrowserActions.click(versionManagePage.showNewVersionButton); + await versionManagePage.uploadNewVersionFile(pngFileModel.location); + await versionManagePage.closeVersionDialog(); + await uploadDialog.removeUploadedFile(pngFileModel.name); + await contentServicesPage.checkContentIsDisplayed(pngFileModel.name); + }); +}); diff --git a/e2e/content-services/upload/upload-dialog.ts b/e2e/content-services/upload/upload-dialog.ts index 1e8aa47f30..0abb129ed1 100644 --- a/e2e/content-services/upload/upload-dialog.ts +++ b/e2e/content-services/upload/upload-dialog.ts @@ -66,28 +66,28 @@ describe('Upload component', () => { const filesLocation = [pdfFileModel.location, docxFileModel.location, pngFileModel.location, firstPdfFileModel.location]; const filesName = [pdfFileModel.name, docxFileModel.name, pngFileModel.name, firstPdfFileModel.name]; - beforeAll(async (done) => { + beforeAll(async () => { await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); await this.alfrescoJsApi.core.peopleApi.addPerson(acsUser); await this.alfrescoJsApi.login(acsUser.id, acsUser.password); await loginPage.loginToContentServicesUsingUserModel(acsUser); - contentServicesPage.goToDocumentList(); + await contentServicesPage.goToDocumentList(); const pdfUploadedFile = await uploadActions.uploadFile(firstPdfFileModel.location, firstPdfFileModel.name, '-my-'); Object.assign(firstPdfFileModel, pdfUploadedFile.entry); - done(); + }); - afterAll(async (done) => { + afterAll(async () => { await navigationBarPage.clickLogoutButton(); - done(); + }); - beforeEach(() => { - contentServicesPage.goToDocumentList(); + beforeEach(async () => { + await contentServicesPage.goToDocumentList(); }); - afterEach(async (done) => { + afterEach(async () => { const nbResults = await contentServicesPage.numberOfResultsDisplayed(); if (nbResults > 1) { const nodesPromise = await contentServicesPage.getElementsDisplayedId(); @@ -97,80 +97,99 @@ describe('Upload component', () => { await uploadActions.deleteFileOrFolder(nodeId); }); } - - done(); }); - it('[C260143] Should be possible to maximize/minimize the upload dialog', () => { - contentServicesPage - .uploadFile(docxFileModel.location) - .checkContentIsDisplayed(docxFileModel.name); + it('[C260143] Should be possible to maximize/minimize the upload dialog', async () => { + await contentServicesPage.uploadFile(docxFileModel.location); - uploadDialog.fileIsUploaded(docxFileModel.name).checkCloseButtonIsDisplayed(); - expect(uploadDialog.numberOfCurrentFilesUploaded()).toEqual('1'); - expect(uploadDialog.numberOfInitialFilesUploaded()).toEqual('1'); - uploadDialog.minimizeUploadDialog().dialogIsMinimized(); - expect(uploadDialog.numberOfCurrentFilesUploaded()).toEqual('1'); - expect(uploadDialog.numberOfInitialFilesUploaded()).toEqual('1'); - uploadDialog.maximizeUploadDialog().dialogIsDisplayed().fileIsUploaded(docxFileModel.name); - expect(uploadDialog.numberOfCurrentFilesUploaded()).toEqual('1'); - expect(uploadDialog.numberOfInitialFilesUploaded()).toEqual('1'); - uploadDialog.checkCloseButtonIsDisplayed().clickOnCloseButton().dialogIsNotDisplayed(); + await contentServicesPage.checkContentIsDisplayed(docxFileModel.name); + + await uploadDialog.fileIsUploaded(docxFileModel.name); + await uploadDialog.checkCloseButtonIsDisplayed(); + await expect(uploadDialog.numberOfCurrentFilesUploaded()).toEqual('1'); + await expect(uploadDialog.numberOfInitialFilesUploaded()).toEqual('1'); + await uploadDialog.minimizeUploadDialog(); + await uploadDialog.dialogIsMinimized(); + await expect(uploadDialog.numberOfCurrentFilesUploaded()).toEqual('1'); + await expect(uploadDialog.numberOfInitialFilesUploaded()).toEqual('1'); + await uploadDialog.maximizeUploadDialog(); + await uploadDialog.dialogIsDisplayed(); + await uploadDialog.fileIsUploaded(docxFileModel.name); + await expect(uploadDialog.numberOfCurrentFilesUploaded()).toEqual('1'); + await expect(uploadDialog.numberOfInitialFilesUploaded()).toEqual('1'); + await uploadDialog.checkCloseButtonIsDisplayed(); + await uploadDialog.clickOnCloseButton(); + await uploadDialog.dialogIsNotDisplayed(); }); - it('[C291902] Should be shown upload counter display in dialog box', () => { - contentServicesPage - .uploadFile(docxFileModel.location) - .checkContentIsDisplayed(docxFileModel.name); + it('[C291902] Should be shown upload counter display in dialog box', async () => { + await contentServicesPage + .uploadFile(docxFileModel.location); + await contentServicesPage.checkContentIsDisplayed(docxFileModel.name); - uploadDialog.fileIsUploaded(docxFileModel.name).checkCloseButtonIsDisplayed(); - expect(uploadDialog.getTitleText()).toEqual('Uploaded 1 / 1'); - uploadDialog.checkCloseButtonIsDisplayed().clickOnCloseButton().dialogIsNotDisplayed(); + await uploadDialog.fileIsUploaded(docxFileModel.name); + await uploadDialog.checkCloseButtonIsDisplayed(); + await expect(uploadDialog.getTitleText()).toEqual('Uploaded 1 / 1'); + await uploadDialog.checkCloseButtonIsDisplayed(); + await uploadDialog.clickOnCloseButton(); + await uploadDialog.dialogIsNotDisplayed(); }); - it('[C260168] Should be possible to cancel upload using dialog icon', () => { - contentServicesPage.uploadFile(pdfFileModel.location) - .checkContentIsDisplayed(pdfFileModel.name); - uploadDialog.removeUploadedFile(pdfFileModel.name).fileIsCancelled(pdfFileModel.name); - expect(uploadDialog.getTitleText()).toEqual('Upload canceled'); - uploadDialog.clickOnCloseButton().dialogIsNotDisplayed(); - contentServicesPage.checkContentIsNotDisplayed(pdfFileModel.name); + it('[C260168] Should be possible to cancel upload using dialog icon', async () => { + await contentServicesPage.uploadFile(pdfFileModel.location); + await contentServicesPage.checkContentIsDisplayed(pdfFileModel.name); + await uploadDialog.removeUploadedFile(pdfFileModel.name); + await uploadDialog.fileIsCancelled(pdfFileModel.name); + await expect(uploadDialog.getTitleText()).toEqual('Upload canceled'); + await uploadDialog.clickOnCloseButton(); + await uploadDialog.dialogIsNotDisplayed(); + await contentServicesPage.checkContentIsNotDisplayed(pdfFileModel.name); }); - it('[C260176] Should remove files from upload dialog box when closed', () => { - contentServicesPage.uploadFile(pngFileModelTwo.location).checkContentIsDisplayed(pngFileModelTwo.name); + it('[C260176] Should remove files from upload dialog box when closed', async () => { + await contentServicesPage.uploadFile(pngFileModelTwo.location); + await contentServicesPage.checkContentIsDisplayed(pngFileModelTwo.name); - uploadDialog.fileIsUploaded(pngFileModelTwo.name); - contentServicesPage.uploadFile(pngFileModel.location).checkContentIsDisplayed(pngFileModel.name); - uploadDialog.fileIsUploaded(pngFileModel.name).fileIsUploaded(pngFileModelTwo.name); - uploadDialog.clickOnCloseButton().dialogIsNotDisplayed(); - contentServicesPage.uploadFile(pdfFileModel.location).checkContentIsDisplayed(pdfFileModel.name); - uploadDialog.fileIsUploaded(pdfFileModel.name).fileIsNotDisplayedInDialog(pngFileModel.name).fileIsNotDisplayedInDialog(pngFileModelTwo.name); - uploadDialog.clickOnCloseButton().dialogIsNotDisplayed(); + await uploadDialog.fileIsUploaded(pngFileModelTwo.name); + await contentServicesPage.uploadFile(pngFileModel.location); + await contentServicesPage.checkContentIsDisplayed(pngFileModel.name); + await uploadDialog.fileIsUploaded(pngFileModel.name); + await uploadDialog.fileIsUploaded(pngFileModelTwo.name); + await uploadDialog.clickOnCloseButton(); + await uploadDialog.dialogIsNotDisplayed(); + await contentServicesPage.uploadFile(pdfFileModel.location); + await contentServicesPage.checkContentIsDisplayed(pdfFileModel.name); + await uploadDialog.fileIsUploaded(pdfFileModel.name); + await uploadDialog.fileIsNotDisplayedInDialog(pngFileModel.name); + await uploadDialog.fileIsNotDisplayedInDialog(pngFileModelTwo.name); + await uploadDialog.clickOnCloseButton(); + await uploadDialog.dialogIsNotDisplayed(); }); - it('[C260170] Should be possible to upload multiple files', () => { - contentServicesPage.checkAcsContainer(); - uploadToggles.enableMultipleFileUpload(); - contentServicesPage.uploadMultipleFile(filesLocation).checkContentsAreDisplayed(filesName); - uploadDialog.filesAreUploaded(filesName); - expect(uploadDialog.getTitleText()).toEqual('Uploaded 4 / 4'); - uploadDialog.clickOnCloseButton().dialogIsNotDisplayed(); - uploadToggles.disableMultipleFileUpload(); + it('[C260170] Should be possible to upload multiple files', async () => { + await contentServicesPage.checkAcsContainer(); + await uploadToggles.enableMultipleFileUpload(); + await contentServicesPage.uploadMultipleFile(filesLocation); + await contentServicesPage.checkContentsAreDisplayed(filesName); + await uploadDialog.filesAreUploaded(filesName); + await expect(uploadDialog.getTitleText()).toEqual('Uploaded 4 / 4'); + await uploadDialog.clickOnCloseButton(); + await uploadDialog.dialogIsNotDisplayed(); + await uploadToggles.disableMultipleFileUpload(); }); - it('[C311305] Should NOT be able to remove uploaded version', () => { - contentServicesPage.uploadFile(docxFileModel.location); - uploadDialog.fileIsUploaded(docxFileModel.name); - contentServicesPage.checkContentIsDisplayed(docxFileModel.name); + it('[C311305] Should NOT be able to remove uploaded version', async () => { + await contentServicesPage.uploadFile(docxFileModel.location); + await uploadDialog.fileIsUploaded(docxFileModel.name); + await contentServicesPage.checkContentIsDisplayed(docxFileModel.name); - contentServicesPage.versionManagerContent(docxFileModel.name); - BrowserActions.click(versionManagePage.showNewVersionButton); - versionManagePage.uploadNewVersionFile( + await contentServicesPage.versionManagerContent(docxFileModel.name); + await BrowserActions.click(versionManagePage.showNewVersionButton); + await versionManagePage.uploadNewVersionFile( pngFileModel.location ); - versionManagePage.closeVersionDialog(); - uploadDialog.removeUploadedFile(pngFileModel.name); - contentServicesPage.checkContentIsDisplayed(pngFileModel.name); + await versionManagePage.closeVersionDialog(); + await uploadDialog.removeUploadedFile(pngFileModel.name); + await contentServicesPage.checkContentIsDisplayed(pngFileModel.name); }); }); diff --git a/e2e/content-services/upload/uploader-component.e2e.ts b/e2e/content-services/upload/uploader-component.e2e.ts index e13ff024ea..b9e32b1b65 100644 --- a/e2e/content-services/upload/uploader-component.e2e.ts +++ b/e2e/content-services/upload/uploader-component.e2e.ts @@ -36,9 +36,9 @@ describe('Upload component', () => { const loginPage = new LoginPage(); const acsUser = new AcsUserModel(); this.alfrescoJsApi = new AlfrescoApi({ - provider: 'ECM', - hostEcm: browser.params.testConfig.adf_acs.host - }); + provider: 'ECM', + hostEcm: browser.params.testConfig.adf_acs.host + }); const uploadActions = new UploadActions(this.alfrescoJsApi); const navigationBarPage = new NavigationBarPage(); @@ -67,7 +67,7 @@ describe('Upload component', () => { 'location': resources.Files.ADF_DOCUMENTS.TXT_0B.file_location }); - beforeAll(async (done) => { + beforeAll(async () => { await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); @@ -75,259 +75,255 @@ describe('Upload component', () => { await this.alfrescoJsApi.login(acsUser.id, acsUser.password); - loginPage.loginToContentServicesUsingUserModel(acsUser); - - contentServicesPage.goToDocumentList(); + await loginPage.loginToContentServicesUsingUserModel(acsUser); const pdfUploadedFile = await uploadActions.uploadFile(firstPdfFileModel.location, firstPdfFileModel.name, '-my-'); Object.assign(firstPdfFileModel, pdfUploadedFile.entry); - done(); }); - afterAll(async (done) => { + afterAll(async () => { await navigationBarPage.clickLogoutButton(); - done(); }); - beforeEach(() => { - contentServicesPage.goToDocumentList(); + beforeEach(async () => { + await contentServicesPage.goToDocumentList(); }); describe('', () => { - beforeEach(() => { - contentServicesPage.goToDocumentList(); + afterEach(async () => { + const nodeList = await contentServicesPage.getElementsDisplayedId(); + for (const node of nodeList) { + try { + await uploadActions.deleteFileOrFolder(node); + } catch (error) { + } + } }); - afterEach(async (done) => { + it('[C272788] Should display upload button', async () => { + await expect(await contentServicesPage.getSingleFileButtonTooltip()).toEqual('Custom tooltip'); - contentServicesPage.getElementsDisplayedId().then((nodeList) => { - nodeList.forEach(async (currentNode) => { - await uploadActions.deleteFileOrFolder(currentNode); - }); - }); - - done(); + await contentServicesPage.checkUploadButton(); + await contentServicesPage.checkContentIsDisplayed(firstPdfFileModel.name); }); - it('[C272788] Should display upload button', () => { - expect(contentServicesPage.getSingleFileButtonTooltip()).toEqual('Custom tooltip'); + it('[C272789] Should be able to upload PDF file', async () => { + await contentServicesPage.uploadFile(pdfFileModel.location); + await contentServicesPage.checkContentIsDisplayed(pdfFileModel.name); - contentServicesPage - .checkUploadButton() - .checkContentIsDisplayed(firstPdfFileModel.name); + await uploadDialog.fileIsUploaded(pdfFileModel.name); + + await uploadDialog.clickOnCloseButton(); + await uploadDialog.dialogIsNotDisplayed(); }); - it('[C272789] Should be able to upload PDF file', () => { - contentServicesPage - .uploadFile(pdfFileModel.location) - .checkContentIsDisplayed(pdfFileModel.name); + it('[C272790] Should be able to upload text file', async () => { + await contentServicesPage.uploadFile(docxFileModel.location); + await contentServicesPage.checkContentIsDisplayed(docxFileModel.name); - uploadDialog.fileIsUploaded(pdfFileModel.name); - - uploadDialog.clickOnCloseButton().dialogIsNotDisplayed(); + await uploadDialog.fileIsUploaded(docxFileModel.name); + await uploadDialog.clickOnCloseButton(); + await uploadDialog.dialogIsNotDisplayed(); }); - it('[C272790] Should be able to upload text file', () => { - contentServicesPage - .uploadFile(docxFileModel.location) - .checkContentIsDisplayed(docxFileModel.name); + it('[C260141] Should be possible to upload PNG file', async () => { + await contentServicesPage.uploadFile(pngFileModel.location); + await contentServicesPage.checkContentIsDisplayed(pngFileModel.name); - uploadDialog.fileIsUploaded(docxFileModel.name); - uploadDialog.clickOnCloseButton().dialogIsNotDisplayed(); + await uploadDialog.fileIsUploaded(pngFileModel.name); + await uploadDialog.clickOnCloseButton(); + await uploadDialog.dialogIsNotDisplayed(); }); - it('[C260141] Should be possible to upload PNG file', () => { - contentServicesPage - .uploadFile(pngFileModel.location) - .checkContentIsDisplayed(pngFileModel.name); + it('[C260143] Should be possible to maximize/minimize the upload dialog', async () => { + await contentServicesPage.uploadFile(docxFileModel.location); + await contentServicesPage.checkContentIsDisplayed(docxFileModel.name); - uploadDialog.fileIsUploaded(pngFileModel.name); - uploadDialog.clickOnCloseButton().dialogIsNotDisplayed(); + await uploadDialog.fileIsUploaded(docxFileModel.name); + await uploadDialog.checkCloseButtonIsDisplayed(); + await expect(await uploadDialog.numberOfCurrentFilesUploaded()).toEqual('1'); + await expect(await uploadDialog.numberOfInitialFilesUploaded()).toEqual('1'); + await uploadDialog.minimizeUploadDialog(); + await uploadDialog.dialogIsMinimized(); + await expect(await uploadDialog.numberOfCurrentFilesUploaded()).toEqual('1'); + await expect(await uploadDialog.numberOfInitialFilesUploaded()).toEqual('1'); + await uploadDialog.maximizeUploadDialog(); + await uploadDialog.dialogIsDisplayed(); + await uploadDialog.fileIsUploaded(docxFileModel.name); + await expect(await uploadDialog.numberOfCurrentFilesUploaded()).toEqual('1'); + await expect(await uploadDialog.numberOfInitialFilesUploaded()).toEqual('1'); + await uploadDialog.checkCloseButtonIsDisplayed(); + await uploadDialog.clickOnCloseButton(); + await uploadDialog.dialogIsNotDisplayed(); }); - it('[C260143] Should be possible to maximize/minimize the upload dialog', () => { - contentServicesPage - .uploadFile(docxFileModel.location) - .checkContentIsDisplayed(docxFileModel.name); - - uploadDialog.fileIsUploaded(docxFileModel.name).checkCloseButtonIsDisplayed(); - expect(uploadDialog.numberOfCurrentFilesUploaded()).toEqual('1'); - expect(uploadDialog.numberOfInitialFilesUploaded()).toEqual('1'); - uploadDialog.minimizeUploadDialog().dialogIsMinimized(); - expect(uploadDialog.numberOfCurrentFilesUploaded()).toEqual('1'); - expect(uploadDialog.numberOfInitialFilesUploaded()).toEqual('1'); - uploadDialog.maximizeUploadDialog().dialogIsDisplayed().fileIsUploaded(docxFileModel.name); - expect(uploadDialog.numberOfCurrentFilesUploaded()).toEqual('1'); - expect(uploadDialog.numberOfInitialFilesUploaded()).toEqual('1'); - uploadDialog.checkCloseButtonIsDisplayed().clickOnCloseButton().dialogIsNotDisplayed(); + it('[C272794] Should display tooltip for uploading files', async () => { + await uploadToggles.enableMultipleFileUpload(); + await uploadToggles.checkMultipleFileUploadToggleIsEnabled(); + await expect(await contentServicesPage.getMultipleFileButtonTooltip()).toEqual('Custom tooltip'); + await uploadToggles.disableMultipleFileUpload(); }); - it('[C272794] Should display tooltip for uploading files', () => { - uploadToggles.enableMultipleFileUpload(); - uploadToggles.checkMultipleFileUploadToggleIsEnabled(); - - browser.driver.sleep(1000); - expect(contentServicesPage.getMultipleFileButtonTooltip()).toEqual('Custom tooltip'); - uploadToggles.disableMultipleFileUpload(); - }); - - it('[C279920] Should rename a file uploaded twice', () => { - contentServicesPage - .uploadFile(pdfFileModel.location) - .checkContentIsDisplayed(pdfFileModel.name); + it('[C279920] Should rename a file uploaded twice', async () => { + await contentServicesPage.uploadFile(pdfFileModel.location); + await contentServicesPage.checkContentIsDisplayed(pdfFileModel.name); pdfFileModel.setVersion('1'); - contentServicesPage - .uploadFile(pdfFileModel.location) - .checkContentIsDisplayed(pdfFileModel.getVersionName()); + await contentServicesPage.uploadFile(pdfFileModel.location); + await contentServicesPage.checkContentIsDisplayed(pdfFileModel.getVersionName()); - uploadDialog - .clickOnCloseButton() - .dialogIsNotDisplayed(); + await uploadDialog.clickOnCloseButton(); + await uploadDialog.dialogIsNotDisplayed(); pdfFileModel.setVersion(''); }); - it('[C260172] Should be possible to enable versioning', () => { - uploadToggles.enableVersioning(); - uploadToggles.checkVersioningToggleIsEnabled(); + it('[C260172] Should be possible to enable versioning', async () => { + await uploadToggles.enableVersioning(); + await uploadToggles.checkVersioningToggleIsEnabled(); - contentServicesPage - .uploadFile(pdfFileModel.location) - .checkContentIsDisplayed(pdfFileModel.name); + await contentServicesPage.uploadFile(pdfFileModel.location); + await contentServicesPage.checkContentIsDisplayed(pdfFileModel.name); pdfFileModel.setVersion('1'); - contentServicesPage - .uploadFile(pdfFileModel.location) - .checkContentIsDisplayed(pdfFileModel.name); + await contentServicesPage.uploadFile(pdfFileModel.location); + await contentServicesPage.checkContentIsDisplayed(pdfFileModel.name); - uploadDialog - .fileIsUploaded(pdfFileModel.name); + await uploadDialog.fileIsUploaded(pdfFileModel.name); - uploadDialog - .clickOnCloseButton() - .dialogIsNotDisplayed(); + await uploadDialog.clickOnCloseButton(); + await uploadDialog.dialogIsNotDisplayed(); - contentServicesPage - .checkContentIsNotDisplayed(pdfFileModel.getVersionName()); + await contentServicesPage.checkContentIsNotDisplayed(pdfFileModel.getVersionName()); pdfFileModel.setVersion(''); - uploadToggles.disableVersioning(); + await uploadToggles.disableVersioning(); }); - it('[C260174] Should be possible to set a max size', () => { - contentServicesPage.goToDocumentList(); - contentServicesPage.checkAcsContainer(); - uploadToggles.enableMaxSize(); - uploadToggles.checkMaxSizeToggleIsEnabled(); - uploadToggles.addMaxSize('400'); - contentServicesPage.uploadFile(fileWithSpecificSize.location); - uploadDialog.fileIsUploaded(fileWithSpecificSize.name).clickOnCloseButton().dialogIsNotDisplayed(); - contentServicesPage.deleteContent(fileWithSpecificSize.name); - contentServicesPage.checkContentIsNotDisplayed(fileWithSpecificSize.name); - uploadToggles.addMaxSize('399'); - contentServicesPage.uploadFile(fileWithSpecificSize.location); + it('[C260174] Should be possible to set a max size', async () => { + await contentServicesPage.goToDocumentList(); + await contentServicesPage.checkAcsContainer(); + await uploadToggles.enableMaxSize(); + await uploadToggles.checkMaxSizeToggleIsEnabled(); + await uploadToggles.addMaxSize('400'); + await contentServicesPage.uploadFile(fileWithSpecificSize.location); + await uploadDialog.fileIsUploaded(fileWithSpecificSize.name); + await uploadDialog.clickOnCloseButton(); + await uploadDialog.dialogIsNotDisplayed(); + await contentServicesPage.deleteContent(fileWithSpecificSize.name); + await contentServicesPage.checkContentIsNotDisplayed(fileWithSpecificSize.name); + await uploadToggles.addMaxSize('399'); + await contentServicesPage.uploadFile(fileWithSpecificSize.location); - // expect(contentServicesPage.getErrorMessage()).toEqual('File ' + fileWithSpecificSize.name + ' is larger than the allowed file size'); + // await expect(await contentServicesPage.getErrorMessage()).toEqual('File ' + fileWithSpecificSize.name + ' is larger than the allowed file size'); - contentServicesPage.checkContentIsNotDisplayed(fileWithSpecificSize.name); - uploadDialog.fileIsNotDisplayedInDialog(fileWithSpecificSize.name); - contentServicesPage.uploadFile(emptyFile.location).checkContentIsDisplayed(emptyFile.name); - uploadDialog.fileIsUploaded(emptyFile.name).clickOnCloseButton().dialogIsNotDisplayed(); + await contentServicesPage.checkContentIsNotDisplayed(fileWithSpecificSize.name); + await uploadDialog.fileIsNotDisplayedInDialog(fileWithSpecificSize.name); + await contentServicesPage.uploadFile(emptyFile.location); + await contentServicesPage.checkContentIsDisplayed(emptyFile.name); + await uploadDialog.fileIsUploaded(emptyFile.name); + await uploadDialog.clickOnCloseButton(); + await uploadDialog.dialogIsNotDisplayed(); - uploadToggles.disableMaxSize(); + await uploadToggles.disableMaxSize(); }); - it('[C272796] Should be possible to set max size to 0', () => { - contentServicesPage.goToDocumentList(); - uploadToggles.enableMaxSize(); - uploadToggles.checkMaxSizeToggleIsEnabled(); - uploadToggles.addMaxSize('0'); - contentServicesPage.uploadFile(fileWithSpecificSize.location); - // expect(contentServicesPage.getErrorMessage()).toEqual('File ' + fileWithSpecificSize.name + ' is larger than the allowed file size'); + it('[C272796] Should be possible to set max size to 0', async () => { + await contentServicesPage.goToDocumentList(); + await uploadToggles.enableMaxSize(); + await uploadToggles.checkMaxSizeToggleIsEnabled(); + await uploadToggles.addMaxSize('0'); + await contentServicesPage.uploadFile(fileWithSpecificSize.location); + // await expect(await contentServicesPage.getErrorMessage()).toEqual('File ' + fileWithSpecificSize.name + ' is larger than the allowed file size'); - uploadDialog.fileIsNotDisplayedInDialog(fileWithSpecificSize.name); - contentServicesPage.uploadFile(emptyFile.location).checkContentIsDisplayed(emptyFile.name); - uploadDialog.fileIsUploaded(emptyFile.name).clickOnCloseButton().dialogIsNotDisplayed(); + await uploadDialog.fileIsNotDisplayedInDialog(fileWithSpecificSize.name); + await contentServicesPage.uploadFile(emptyFile.location); + await contentServicesPage.checkContentIsDisplayed(emptyFile.name); + await uploadDialog.fileIsUploaded(emptyFile.name); + await uploadDialog.clickOnCloseButton(); + await uploadDialog.dialogIsNotDisplayed(); - uploadToggles.disableMaxSize(); + await uploadToggles.disableMaxSize(); }); - it('[C272797] Should be possible to set max size to 1', () => { - uploadToggles.enableMaxSize(); - uploadToggles.checkMaxSizeToggleIsEnabled(); - browser.driver.sleep(1000); - uploadToggles.addMaxSize('1'); - uploadToggles.disableMaxSize(); - contentServicesPage.uploadFile(fileWithSpecificSize.location); - uploadDialog.fileIsUploaded(fileWithSpecificSize.name).clickOnCloseButton().dialogIsNotDisplayed(); - contentServicesPage.checkContentIsDisplayed(fileWithSpecificSize.name); + it('[C272797] Should be possible to set max size to 1', async () => { + await uploadToggles.enableMaxSize(); + await uploadToggles.checkMaxSizeToggleIsEnabled(); + await browser.sleep(1000); + await uploadToggles.addMaxSize('1'); + await uploadToggles.disableMaxSize(); + await contentServicesPage.uploadFile(fileWithSpecificSize.location); + await uploadDialog.fileIsUploaded(fileWithSpecificSize.name); + await uploadDialog.clickOnCloseButton(); + await uploadDialog.dialogIsNotDisplayed(); + await contentServicesPage.checkContentIsDisplayed(fileWithSpecificSize.name); }); - it('[C91318] Should Enable/Disable upload button when change the disable property', () => { - uploadToggles.clickCheckboxDisableUpload(); - expect(contentServicesPage.uploadButtonIsEnabled()).toBeFalsy(); + it('[C91318] Should Enable/Disable upload button when change the disable property', async () => { + await uploadToggles.clickCheckboxDisableUpload(); + await expect(await contentServicesPage.uploadButtonIsEnabled()).toBe(false, 'Upload button is enabled'); - uploadToggles.clickCheckboxDisableUpload(); - expect(contentServicesPage.uploadButtonIsEnabled()).toBeTruthy(); + await uploadToggles.clickCheckboxDisableUpload(); + await expect(await contentServicesPage.uploadButtonIsEnabled()).toBe(true, 'Upload button not enabled'); }); }); - it('[C260171] Should upload only the extension filter allowed when Enable extension filter is enabled', () => { - uploadToggles.enableExtensionFilter(); - browser.driver.sleep(1000); - uploadToggles.addExtension('.docx'); - contentServicesPage.uploadFile(docxFileModel.location).checkContentIsDisplayed(docxFileModel.name); - uploadDialog.removeUploadedFile(docxFileModel.name).fileIsCancelled(docxFileModel.name); - uploadDialog.clickOnCloseButton().dialogIsNotDisplayed(); - contentServicesPage.uploadFile(pngFileModel.location).checkContentIsNotDisplayed(pngFileModel.name); - uploadDialog.dialogIsNotDisplayed(); - uploadToggles.disableExtensionFilter(); + it('[C260171] Should upload only the extension filter allowed when Enable extension filter is enabled', async () => { + await uploadToggles.enableExtensionFilter(); + await browser.sleep(1000); + await uploadToggles.addExtension('.docx'); + await contentServicesPage.uploadFile(docxFileModel.location); + await contentServicesPage.checkContentIsDisplayed(docxFileModel.name); + await uploadDialog.removeUploadedFile(docxFileModel.name); + await uploadDialog.fileIsCancelled(docxFileModel.name); + await uploadDialog.clickOnCloseButton(); + await uploadDialog.dialogIsNotDisplayed(); + await contentServicesPage.uploadFile(pngFileModel.location); + await contentServicesPage.checkContentIsNotDisplayed(pngFileModel.name); + await uploadDialog.dialogIsNotDisplayed(); + await uploadToggles.disableExtensionFilter(); }); - it('[C274687] Should upload with drag and drop only the extension filter allowed when Enable extension filter is enabled', () => { - uploadToggles.enableExtensionFilter(); - browser.driver.sleep(1000); - uploadToggles.addExtension('.docx'); + it('[C274687] Should upload with drag and drop only the extension filter allowed when Enable extension filter is enabled', async () => { + await uploadToggles.enableExtensionFilter(); + await browser.sleep(1000); + await uploadToggles.addExtension('.docx'); const dragAndDrop = new DropActions(); const dragAndDropArea = element.all(by.css('adf-upload-drag-area div')).first(); - dragAndDrop.dropFile(dragAndDropArea, docxFileModel.location); - contentServicesPage.checkContentIsDisplayed(docxFileModel.name); + await dragAndDrop.dropFile(dragAndDropArea, docxFileModel.location); + await contentServicesPage.checkContentIsDisplayed(docxFileModel.name); - uploadDialog.removeUploadedFile(docxFileModel.name).fileIsCancelled(docxFileModel.name); - uploadDialog.clickOnCloseButton().dialogIsNotDisplayed(); + await uploadDialog.removeUploadedFile(docxFileModel.name); + await uploadDialog.fileIsCancelled(docxFileModel.name); + await uploadDialog.clickOnCloseButton(); + await uploadDialog.dialogIsNotDisplayed(); - dragAndDrop.dropFile(dragAndDropArea, pngFileModel.location); - contentServicesPage.checkContentIsNotDisplayed(pngFileModel.name); - uploadDialog.dialogIsNotDisplayed(); - uploadToggles.disableExtensionFilter(); + await dragAndDrop.dropFile(dragAndDropArea, pngFileModel.location); + await contentServicesPage.checkContentIsNotDisplayed(pngFileModel.name); + await uploadDialog.dialogIsNotDisplayed(); + await uploadToggles.disableExtensionFilter(); }); it('[C291921] Should display tooltip for uploading files on a not found location', async () => { const folderName = StringUtil.generateRandomString(8); - const folderUploadedModel = await browser.controlFlow().execute(async () => { - return await uploadActions.createFolder(folderName, '-my-'); - }); + const folderUploadedModel = await uploadActions.createFolder(folderName, '-my-'); + await navigationBarPage.openContentServicesFolder(folderUploadedModel.entry.id); + await contentServicesPage.checkUploadButton(); - navigationBarPage.openContentServicesFolder(folderUploadedModel.entry.id); - contentServicesPage.checkUploadButton(); + await uploadActions.deleteFileOrFolder(folderUploadedModel.entry.id); - browser.controlFlow().execute(async () => { - await uploadActions.deleteFileOrFolder(folderUploadedModel.entry.id); - }); + await contentServicesPage.uploadFile(pdfFileModel.location); - contentServicesPage.uploadFile(pdfFileModel.location); - - uploadDialog.displayTooltip(); - expect(uploadDialog.getTooltip()).toEqual('Upload location no longer exists [404]'); + await uploadDialog.displayTooltip(); + await expect(await uploadDialog.getTooltip()).toEqual('Upload location no longer exists [404]'); }); }); diff --git a/e2e/content-services/upload/user-permission.e2e.ts b/e2e/content-services/upload/user-permission.e2e.ts index 98722e5a68..0f6aafb34d 100644 --- a/e2e/content-services/upload/user-permission.e2e.ts +++ b/e2e/content-services/upload/user-permission.e2e.ts @@ -56,14 +56,14 @@ describe('Upload - User permission', () => { 'location': resources.Files.ADF_DOCUMENTS.PDF.file_location }); - beforeAll(() => { + beforeAll(async () => { this.alfrescoJsApi = new AlfrescoApi({ provider: 'ECM', hostEcm: browser.params.testConfig.adf_acs.host }); }); - beforeEach(async (done) => { + beforeEach(async () => { acsUser = new AcsUserModel(); acsUserTwo = new AcsUserModel(); @@ -95,106 +95,99 @@ describe('Upload - User permission', () => { role: CONSTANTS.CS_USER_ROLES.MANAGER }); - done(); - }); - - afterAll(async (done) => { - await navigationBarPage.clickLogoutButton(); - done(); }); describe('Consumer permissions', () => { - beforeEach(async (done) => { - contentServicesPage.goToDocumentList(); + beforeEach(async () => { + await contentServicesPage.goToDocumentList(); - done(); }); - it('[C291921] Should display tooltip for uploading files without permissions', () => { - navigationBarPage.openContentServicesFolder(this.consumerSite.entry.guid); + it('[C291921] Should display tooltip for uploading files without permissions', async () => { + await navigationBarPage.openContentServicesFolder(this.consumerSite.entry.guid); - contentServicesPage.checkDragAndDropDIsDisplayed(); + await contentServicesPage.checkDragAndDropDIsDisplayed(); - contentServicesPage.dragAndDropFile(emptyFile.location); + await contentServicesPage.dragAndDropFile(emptyFile.location); - uploadDialog.fileIsError(emptyFile.name); + await uploadDialog.fileIsError(emptyFile.name); - uploadDialog.displayTooltip(); + await uploadDialog.displayTooltip(); - expect(uploadDialog.getTooltip()).toEqual('Insufficient permissions to upload in this location [403]'); + await expect(await uploadDialog.getTooltip()).toEqual('Insufficient permissions to upload in this location [403]'); }); - it('[C279915] Should not be allowed to upload a file in folder with consumer permissions', () => { - contentServicesPage.uploadFile(emptyFile.location).checkContentIsDisplayed(emptyFile.name); + it('[C279915] Should not be allowed to upload a file in folder with consumer permissions', async () => { + await contentServicesPage.uploadFile(emptyFile.location); + await contentServicesPage.checkContentIsDisplayed(emptyFile.name); - uploadDialog.fileIsUploaded(emptyFile.name); + await uploadDialog.fileIsUploaded(emptyFile.name); - uploadDialog.clickOnCloseButton().dialogIsNotDisplayed(); + await uploadDialog.clickOnCloseButton(); + await uploadDialog.dialogIsNotDisplayed(); - navigationBarPage.openContentServicesFolder(this.consumerSite.entry.guid); + await navigationBarPage.openContentServicesFolder(this.consumerSite.entry.guid); - browser.sleep(3000); + await browser.sleep(3000); - contentServicesPage.uploadFile(emptyFile.location); + await contentServicesPage.uploadFile(emptyFile.location); - notificationHistoryPage.checkNotifyContains('You don\'t have the create permission to upload the content'); + await notificationHistoryPage.checkNotifyContains('You don\'t have the create permission to upload the content'); }); }); describe('full permissions', () => { - beforeEach(async (done) => { - navigationBarPage.openContentServicesFolder(this.managerSite.entry.guid); + beforeEach(async () => { + await navigationBarPage.openContentServicesFolder(this.managerSite.entry.guid); - contentServicesPage.goToDocumentList(); + await contentServicesPage.goToDocumentList(); - done(); }); - it('[C279917] Should be allowed to upload a file in a folder with manager permissions', () => { - contentServicesPage.uploadFile(emptyFile.location); + it('[C279917] Should be allowed to upload a file in a folder with manager permissions', async () => { + await contentServicesPage.uploadFile(emptyFile.location); - uploadDialog.fileIsUploaded(emptyFile.name); + await uploadDialog.fileIsUploaded(emptyFile.name); }); }); describe('multiple users', () => { - beforeEach(async (done) => { - contentServicesPage.goToDocumentList(); + beforeEach(async () => { + await contentServicesPage.goToDocumentList(); - done(); }); it('[C260175] Should two different user upload files in the proper User Home', async () => { - contentServicesPage.uploadFile(emptyFile.location); + await contentServicesPage.uploadFile(emptyFile.location); - uploadDialog.fileIsUploaded(emptyFile.name); + await uploadDialog.fileIsUploaded(emptyFile.name); - contentServicesPage.checkContentIsDisplayed(emptyFile.name); + await contentServicesPage.checkContentIsDisplayed(emptyFile.name); - navigationBarPage.clickLoginButton(); + await navigationBarPage.clickLoginButton(); await loginPage.loginToContentServicesUsingUserModel(acsUserTwo); - contentServicesPage.goToDocumentList(); + await contentServicesPage.goToDocumentList(); - contentServicesPage.checkContentIsNotDisplayed(emptyFile.name); + await contentServicesPage.checkContentIsNotDisplayed(emptyFile.name); - contentServicesPage.uploadFile(pngFile.location); + await contentServicesPage.uploadFile(pngFile.location); - contentServicesPage.checkContentIsDisplayed(pngFile.name); + await contentServicesPage.checkContentIsDisplayed(pngFile.name); - navigationBarPage.clickLoginButton(); + await navigationBarPage.clickLoginButton(); await loginPage.loginToContentServicesUsingUserModel(acsUser); - contentServicesPage.goToDocumentList(); + await contentServicesPage.goToDocumentList(); - contentServicesPage.checkContentIsNotDisplayed(pngFile.name); + await contentServicesPage.checkContentIsNotDisplayed(pngFile.name); - contentServicesPage.uploadFile(pdfFile.location); + await contentServicesPage.uploadFile(pdfFile.location); - contentServicesPage.checkContentIsDisplayed(pdfFile.name); + await contentServicesPage.checkContentIsDisplayed(pdfFile.name); }); }); diff --git a/e2e/content-services/version/version-actions.e2e.ts b/e2e/content-services/version/version-actions.e2e.ts index 5f8cb72f53..e2fe26eac6 100644 --- a/e2e/content-services/version/version-actions.e2e.ts +++ b/e2e/content-services/version/version-actions.e2e.ts @@ -28,10 +28,8 @@ import resources = require('../../util/resources'); import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; import { UploadActions } from '@alfresco/adf-testing'; -import { Util } from '../../util/util'; -import path = require('path'); import { NavigationBarPage } from '../../pages/adf/navigationBarPage'; -import { BrowserVisibility } from '@alfresco/adf-testing'; +import { BrowserVisibility, FileBrowserUtil, BrowserActions } from '@alfresco/adf-testing'; import { UploadDialog } from '../../pages/adf/dialog/uploadDialog'; describe('Version component actions', () => { @@ -40,6 +38,7 @@ describe('Version component actions', () => { const contentServicesPage = new ContentServicesPage(); const versionManagePage = new VersionManagePage(); const navigationBarPage = new NavigationBarPage(); + const uploadDialog = new UploadDialog(); const acsUser = new AcsUserModel(); @@ -49,8 +48,8 @@ describe('Version component actions', () => { }); const fileModelVersionTwo = new FileModel({ - 'name': resources.Files.ADF_DOCUMENTS.PNG.file_name, - 'location': resources.Files.ADF_DOCUMENTS.PNG.file_location + 'name': resources.Files.ADF_DOCUMENTS.TXT.file_name, + 'location': resources.Files.ADF_DOCUMENTS.TXT.file_location }); let uploadActions; @@ -59,122 +58,119 @@ describe('Version component actions', () => { 'location': resources.Files.ADF_DOCUMENTS.LARGE_FILE.file_location }); - beforeAll(async (done) => { + beforeAll(async () => { this.alfrescoJsApi = new AlfrescoApi({ provider: 'ECM', hostEcm: browser.params.testConfig.adf_acs.host }); uploadActions = new UploadActions(this.alfrescoJsApi); - await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); - await this.alfrescoJsApi.core.peopleApi.addPerson(acsUser); - await this.alfrescoJsApi.login(acsUser.id, acsUser.password); - const txtUploadedFile = await uploadActions.uploadFile(txtFileModel.location, txtFileModel.name, '-my-'); - Object.assign(txtFileModel, txtUploadedFile.entry); - txtFileModel.update(txtUploadedFile.entry); - await loginPage.loginToContentServicesUsingUserModel(acsUser); + await navigationBarPage.clickContentServicesButton(); + await contentServicesPage.waitForTableBody(); - navigationBarPage.clickContentServicesButton(); - contentServicesPage.waitForTableBody(); - contentServicesPage.versionManagerContent(txtFileModel.name); - - done(); }); - afterAll(async () => { - await navigationBarPage.clickLogoutButton(); + beforeEach(async () => { + await contentServicesPage.versionManagerContent(txtFileModel.name); }); - it('[C280003] Should not be possible delete a file version if there is only one version', () => { - versionManagePage.clickActionButton('1.0'); - expect(element(by.css(`[id="adf-version-list-action-delete-1.0"]`)).isEnabled()).toBe(false); - versionManagePage.closeActionsMenu(); - BrowserVisibility.waitUntilElementIsNotOnPage(element(by.css(`[id="adf-version-list-action-delete-1.0"]`))); + afterEach(async () => { + await BrowserActions.closeMenuAndDialogs(); }); - it('[C280004] Should not be possible restore the version if there is only one version', () => { - versionManagePage.clickActionButton('1.0'); - expect(element(by.css(`[id="adf-version-list-action-restore-1.0"]`)).isEnabled()).toBe(false); - versionManagePage.closeActionsMenu(); - BrowserVisibility.waitUntilElementIsNotOnPage(element(by.css(`[id="adf-version-list-action-restore-1.0"]`))); + it('[C280003] Should not be possible delete a file version if there is only one version', async () => { + await versionManagePage.clickActionButton('1.0'); + await expect(await element(by.css(`[id="adf-version-list-action-delete-1.0"]`)).isEnabled()).toBe(false); + await versionManagePage.closeActionsMenu(); + await BrowserVisibility.waitUntilElementIsNotVisible(element(by.css(`[id="adf-version-list-action-delete-1.0"]`))); }); - it('[C280005] Should be showed all the default action when you have more then one version', () => { - versionManagePage.showNewVersionButton.click(); - - versionManagePage.uploadNewVersionFile(fileModelVersionTwo.location); - - versionManagePage.clickActionButton('1.1').checkActionsArePresent('1.1'); - - versionManagePage.closeActionsMenu(); + it('[C280004] Should not be possible restore the version if there is only one version', async () => { + await versionManagePage.clickActionButton('1.0'); + await expect(await element(by.css(`[id="adf-version-list-action-restore-1.0"]`)).isEnabled()).toBe(false); + await versionManagePage.closeActionsMenu(); + await BrowserVisibility.waitUntilElementIsNotVisible(element(by.css(`[id="adf-version-list-action-restore-1.0"]`))); }); - it('[C269081] Should be possible download all the version of a file', () => { - versionManagePage.downloadFileVersion('1.0'); + it('[C280005] Should be showed all the default action when you have more then one version', async () => { + await BrowserActions.click(versionManagePage.showNewVersionButton); - expect(Util.fileExists(path.join(__dirname, 'downloads', txtFileModel.name), 20)).toBe(true); + await versionManagePage.uploadNewVersionFile(fileModelVersionTwo.location); - versionManagePage.downloadFileVersion('1.1'); + await versionManagePage.clickActionButton('1.1'); + await versionManagePage.checkActionsArePresent('1.1'); - expect(Util.fileExists(path.join(__dirname, 'downloads', fileModelVersionTwo.name), 20)).toBe(true); + await versionManagePage.closeActionsMenu(); + + await versionManagePage.closeVersionDialog(); + + await uploadDialog.clickOnCloseButton(); }); - it('[C272819] Should be possible delete a version when click on delete version action', () => { - versionManagePage.deleteFileVersion('1.1'); - - versionManagePage.clickAcceptConfirm(); - - versionManagePage.checkFileVersionNotExist('1.1'); - versionManagePage.checkFileVersionExist('1.0'); + it('[C269081] Should be possible download all the version of a file', async () => { + await versionManagePage.downloadFileVersion('1.0'); + await expect(await FileBrowserUtil.isFileDownloaded(txtFileModel.name)).toBe(true, `${txtFileModel.name} not downloaded`); + await versionManagePage.downloadFileVersion('1.1'); + await expect(await FileBrowserUtil.isFileDownloaded(fileModelVersionTwo.name)).toBe(true, `${fileModelVersionTwo.name} not downloaded`); }); - it('[C280006] Should be possible prevent a version to be deleted when click on No on the confirm dialog', () => { - versionManagePage.showNewVersionButton.click(); + it('[C272819] Should be possible delete a version when click on delete version action', async () => { + await versionManagePage.deleteFileVersion('1.1'); - versionManagePage.uploadNewVersionFile(fileModelVersionTwo.location); + await versionManagePage.clickAcceptConfirm(); - versionManagePage.checkFileVersionExist('1.1'); + await versionManagePage.checkFileVersionNotExist('1.1'); + await versionManagePage.checkFileVersionExist('1.0'); + }); - versionManagePage.deleteFileVersion('1.1'); + it('[C280006] Should be possible prevent a version to be deleted when click on No on the confirm dialog', async () => { + await BrowserActions.click(versionManagePage.showNewVersionButton); - versionManagePage.clickCancelConfirm(); + await versionManagePage.uploadNewVersionFile(fileModelVersionTwo.location); - versionManagePage.checkFileVersionExist('1.1'); - versionManagePage.checkFileVersionExist('1.0'); - versionManagePage.closeVersionDialog(); + await versionManagePage.checkFileVersionExist('1.1'); + + await versionManagePage.deleteFileVersion('1.1'); + + await versionManagePage.clickCancelConfirm(); + + await versionManagePage.checkFileVersionExist('1.1'); + await versionManagePage.checkFileVersionExist('1.0'); + await versionManagePage.closeVersionDialog(); }); it('[C280007] Should be possible to restore an old version of your file and the document list updated', async () => { - contentServicesPage.versionManagerContent(fileModelVersionTwo.name); - versionManagePage.restoreFileVersion('1.0'); - versionManagePage.checkFileVersionExist('2.0'); - versionManagePage.closeVersionDialog(); - contentServicesPage.waitForTableBody(); - contentServicesPage.checkContentIsDisplayed(txtFileModel.name); + await contentServicesPage.versionManagerContent(fileModelVersionTwo.name); + await versionManagePage.restoreFileVersion('1.0'); + await versionManagePage.checkFileVersionExist('2.0'); + await versionManagePage.closeVersionDialog(); + await contentServicesPage.waitForTableBody(); + await contentServicesPage.checkContentIsDisplayed(txtFileModel.name); }); it('[C307033] Should be possible to cancel the upload of a new version', async () => { await browser.refresh(); - contentServicesPage.versionManagerContent(txtFileModel.name); - browser.executeScript(' setTimeout(() => {document.querySelector(\'mat-icon[class*="adf-file-uploading-row__action"]\').click();}, 1000)'); + await contentServicesPage.versionManagerContent(txtFileModel.name); + await browser.executeScript(' setTimeout(() => {document.querySelector("div[data-automation-id=\'cancel-upload-progress\']").click();}, 1000)'); - versionManagePage.showNewVersionButton.click(); - versionManagePage.uploadNewVersionFile(bigFileToCancel.location); - versionManagePage.closeVersionDialog(); + await BrowserActions.click(versionManagePage.showNewVersionButton); - await expect(new UploadDialog().getTitleText()).toEqual('Upload canceled'); + await versionManagePage.uploadNewVersionFile(bigFileToCancel.location); + await versionManagePage.closeVersionDialog(); + + await expect(await uploadDialog.getTitleText()).toEqual('Upload canceled'); await browser.refresh(); - navigationBarPage.clickContentServicesButton(); + await navigationBarPage.clickContentServicesButton(); await contentServicesPage.waitForTableBody(); - contentServicesPage.checkContentIsDisplayed(txtFileModel.name); + await contentServicesPage.checkContentIsDisplayed(txtFileModel.name); }); }); diff --git a/e2e/content-services/version/version-permissions.e2e.ts b/e2e/content-services/version/version-permissions.e2e.ts index 2c807b432e..1869d9a9a2 100644 --- a/e2e/content-services/version/version-permissions.e2e.ts +++ b/e2e/content-services/version/version-permissions.e2e.ts @@ -69,7 +69,7 @@ describe('Version component permissions', () => { const uploadActions = new UploadActions(this.alfrescoJsApi); const nodeActions = new NodeActions(); - beforeAll(async (done) => { + beforeAll(async () => { await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); await this.alfrescoJsApi.core.peopleApi.addPerson(acsUser); @@ -117,8 +117,6 @@ describe('Version component permissions', () => { await this.alfrescoJsApi.login(fileCreatorUser.id, fileCreatorUser.password); await uploadActions.uploadFile(differentCreatorFile.location, differentCreatorFile.name, site.entry.guid); - - done(); }); describe('Manager', () => { @@ -128,7 +126,7 @@ describe('Version component permissions', () => { 'location': resources.Files.ADF_DOCUMENTS.PNG.file_location }); - beforeAll(async (done) => { + beforeAll(async () => { await this.alfrescoJsApi.login(managerUser.id, managerUser.password); const sameCreatorFileUploaded = await uploadActions.uploadFile(sameCreatorFile.location, sameCreatorFile.name, site.entry.guid); @@ -136,70 +134,63 @@ describe('Version component permissions', () => { await loginPage.loginToContentServicesUsingUserModel(managerUser); - navigationBarPage.openContentServicesFolder(site.entry.guid); - - done(); + await navigationBarPage.openContentServicesFolder(site.entry.guid); }); - afterAll(async (done) => { - await navigationBarPage.clickLogoutButton(); - + afterAll(async () => { await this.alfrescoJsApi.nodes.deleteNode(sameCreatorFile.id); - done(); + await navigationBarPage.clickLogoutButton(); }); - it('[C277200] should a user with Manager permission be able to upload a new version for a file with different creator', () => { - contentServices.versionManagerContent(differentCreatorFile.name); + it('[C277200] should a user with Manager permission be able to upload a new version for a file with different creator', async () => { + await contentServices.versionManagerContent(differentCreatorFile.name); - BrowserActions.click(versionManagePage.showNewVersionButton); + await BrowserActions.click(versionManagePage.showNewVersionButton); - versionManagePage.uploadNewVersionFile(newVersionFile.location); + await versionManagePage.uploadNewVersionFile(newVersionFile.location); - versionManagePage.checkFileVersionExist('1.1'); - expect(versionManagePage.getFileVersionName('1.1')).toEqual(newVersionFile.name); - expect(versionManagePage.getFileVersionDate('1.1')).not.toBeUndefined(); + await versionManagePage.checkFileVersionExist('1.1'); + await expect(await versionManagePage.getFileVersionName('1.1')).toEqual(newVersionFile.name); + await expect(await versionManagePage.getFileVersionDate('1.1')).not.toBeUndefined(); - versionManagePage.deleteFileVersion('1.1'); - versionManagePage.clickAcceptConfirm(); + await versionManagePage.deleteFileVersion('1.1'); + await versionManagePage.clickAcceptConfirm(); - versionManagePage.checkFileVersionNotExist('1.1'); + await versionManagePage.checkFileVersionNotExist('1.1'); - versionManagePage.closeVersionDialog(); + await versionManagePage.closeVersionDialog(); - uploadDialog.clickOnCloseButton(); + await uploadDialog.clickOnCloseButton(); }); - it('[C277204] Should be disabled the option for locked file', () => { - contentServices.getDocumentList().rightClickOnRow(lockFileModel.name); - const actionVersion = contentServices.checkContextActionIsVisible('Manage versions'); - expect(actionVersion.isEnabled()).toBeFalsy(); + it('[C277204] Should be disabled the option for locked file', async () => { + await contentServices.getDocumentList().rightClickOnRow(lockFileModel.name); + await expect(await contentServices.isContextActionEnabled('Manage versions')).toBe(false, 'Manage versions is enabled'); }); }); describe('Consumer', () => { - beforeAll(async (done) => { + beforeAll(async () => { await loginPage.loginToContentServicesUsingUserModel(consumerUser); - navigationBarPage.openContentServicesFolder(site.entry.guid); + await navigationBarPage.openContentServicesFolder(site.entry.guid); - done(); }); afterAll(async () => { await navigationBarPage.clickLogoutButton(); }); - it('[C277197] Should a user with Consumer permission not be able to upload a new version for a file with different creator', () => { - contentServices.versionManagerContent(differentCreatorFile.name); + it('[C277197] Should a user with Consumer permission not be able to upload a new version for a file with different creator', async () => { + await contentServices.versionManagerContent(differentCreatorFile.name); - notificationHistoryPage.checkNotifyContains(`You don't have access to do this`); + await notificationHistoryPage.checkNotifyContains(`You don't have access to do this`); }); - it('[C277201] Should a user with Consumer permission not be able to upload a new version for a locked file', () => { - contentServices.getDocumentList().rightClickOnRow(lockFileModel.name); - const actionVersion = contentServices.checkContextActionIsVisible('Manage versions'); - expect(actionVersion.isEnabled()).toBeFalsy(); + it('[C277201] Should a user with Consumer permission not be able to upload a new version for a locked file', async () => { + await contentServices.getDocumentList().rightClickOnRow(lockFileModel.name); + await expect(await contentServices.isContextActionEnabled('Manage versions')).toBe(false, 'Manage version is enabled'); }); }); @@ -210,7 +201,7 @@ describe('Version component permissions', () => { 'location': resources.Files.ADF_DOCUMENTS.PNG.file_location }); - beforeAll(async (done) => { + beforeAll(async () => { await this.alfrescoJsApi.login(contributorUser.id, contributorUser.password); const sameCreatorFileUploaded = await uploadActions.uploadFile(sameCreatorFile.location, sameCreatorFile.name, site.entry.guid); @@ -218,49 +209,45 @@ describe('Version component permissions', () => { await loginPage.loginToContentServicesUsingUserModel(contributorUser); - navigationBarPage.openContentServicesFolder(site.entry.guid); + await navigationBarPage.openContentServicesFolder(site.entry.guid); - done(); }); - afterAll(async (done) => { - await navigationBarPage.clickLogoutButton(); - + afterAll(async () => { await this.alfrescoJsApi.nodes.deleteNode(sameCreatorFile.id); - done(); + await navigationBarPage.clickLogoutButton(); }); - it('[C277177] Should a user with Contributor permission be able to upload a new version for the created file', () => { - contentServices.versionManagerContent(sameCreatorFile.name); + it('[C277177] Should a user with Contributor permission be able to upload a new version for the created file', async () => { + await contentServices.versionManagerContent(sameCreatorFile.name); - BrowserActions.click(versionManagePage.showNewVersionButton); + await BrowserActions.click(versionManagePage.showNewVersionButton); - versionManagePage.uploadNewVersionFile(newVersionFile.location); + await versionManagePage.uploadNewVersionFile(newVersionFile.location); - versionManagePage.checkFileVersionExist('1.1'); - expect(versionManagePage.getFileVersionName('1.1')).toEqual(newVersionFile.name); - expect(versionManagePage.getFileVersionDate('1.1')).not.toBeUndefined(); + await versionManagePage.checkFileVersionExist('1.1'); + await expect(await versionManagePage.getFileVersionName('1.1')).toEqual(newVersionFile.name); + await expect(await versionManagePage.getFileVersionDate('1.1')).not.toBeUndefined(); - versionManagePage.deleteFileVersion('1.1'); - versionManagePage.clickAcceptConfirm(); + await versionManagePage.deleteFileVersion('1.1'); + await versionManagePage.clickAcceptConfirm(); - versionManagePage.checkFileVersionNotExist('1.1'); + await versionManagePage.checkFileVersionNotExist('1.1'); - versionManagePage.closeVersionDialog(); + await versionManagePage.closeVersionDialog(); - uploadDialog.clickOnCloseButton(); + await uploadDialog.clickOnCloseButton(); }); - it('[C277198] Should a user with Contributor permission not be able to upload a new version for a file with different creator', () => { - contentServices.versionManagerContent(differentCreatorFile.name); + it('[C277198] Should a user with Contributor permission not be able to upload a new version for a file with different creator', async () => { + await contentServices.versionManagerContent(differentCreatorFile.name); - notificationHistoryPage.checkNotifyContains(`You don't have access to do this`); + await notificationHistoryPage.checkNotifyContains(`You don't have access to do this`); }); - it('[C277202] Should be disabled the option for a locked file', () => { - contentServices.getDocumentList().rightClickOnRow(lockFileModel.name); - const actionVersion = contentServices.checkContextActionIsVisible('Manage versions'); - expect(actionVersion.isEnabled()).toBeFalsy(); + it('[C277202] Should be disabled the option for a locked file', async () => { + await contentServices.getDocumentList().rightClickOnRow(lockFileModel.name); + await expect(await contentServices.isContextActionEnabled('Manage versions')).toBe(false, 'Manage versions is enabled'); }); }); @@ -270,7 +257,7 @@ describe('Version component permissions', () => { 'location': resources.Files.ADF_DOCUMENTS.PNG.file_location }); - beforeAll(async (done) => { + beforeAll(async () => { await this.alfrescoJsApi.login(collaboratorUser.id, collaboratorUser.password); const sameCreatorFileUploaded = await uploadActions.uploadFile(sameCreatorFile.location, sameCreatorFile.name, site.entry.guid); @@ -278,62 +265,59 @@ describe('Version component permissions', () => { await loginPage.loginToContentServicesUsingUserModel(collaboratorUser); - navigationBarPage.openContentServicesFolder(site.entry.guid); + await navigationBarPage.openContentServicesFolder(site.entry.guid); - done(); }); - afterAll(async (done) => { - await navigationBarPage.clickLogoutButton(); + afterAll(async () => { await this.alfrescoJsApi.nodes.deleteNode(sameCreatorFile.id); - done(); + await navigationBarPage.clickLogoutButton(); }); - it('[C277195] Should a user with Collaborator permission be able to upload a new version for the created file', () => { - contentServices.versionManagerContent(sameCreatorFile.name); + it('[C277195] Should a user with Collaborator permission be able to upload a new version for the created file', async () => { + await contentServices.versionManagerContent(sameCreatorFile.name); - BrowserActions.click(versionManagePage.showNewVersionButton); + await BrowserActions.click(versionManagePage.showNewVersionButton); - versionManagePage.uploadNewVersionFile(newVersionFile.location); + await versionManagePage.uploadNewVersionFile(newVersionFile.location); - versionManagePage.checkFileVersionExist('1.1'); - expect(versionManagePage.getFileVersionName('1.1')).toEqual(newVersionFile.name); - expect(versionManagePage.getFileVersionDate('1.1')).not.toBeUndefined(); + await versionManagePage.checkFileVersionExist('1.1'); + await expect(await versionManagePage.getFileVersionName('1.1')).toEqual(newVersionFile.name); + await expect(await versionManagePage.getFileVersionDate('1.1')).not.toBeUndefined(); - versionManagePage.deleteFileVersion('1.1'); - versionManagePage.clickAcceptConfirm(); + await versionManagePage.deleteFileVersion('1.1'); + await versionManagePage.clickAcceptConfirm(); - versionManagePage.checkFileVersionNotExist('1.1'); + await versionManagePage.checkFileVersionNotExist('1.1'); - versionManagePage.closeVersionDialog(); + await versionManagePage.closeVersionDialog(); - uploadDialog.clickOnCloseButton(); + await uploadDialog.clickOnCloseButton(); }); - it('[C277199] should a user with Collaborator permission be able to upload a new version for a file with different creator', () => { - contentServices.versionManagerContent(differentCreatorFile.name); + it('[C277199] should a user with Collaborator permission be able to upload a new version for a file with different creator', async () => { + await contentServices.versionManagerContent(differentCreatorFile.name); - BrowserActions.click(versionManagePage.showNewVersionButton); + await BrowserActions.click(versionManagePage.showNewVersionButton); - versionManagePage.uploadNewVersionFile(newVersionFile.location); + await versionManagePage.uploadNewVersionFile(newVersionFile.location); - versionManagePage.checkFileVersionExist('1.1'); - expect(versionManagePage.getFileVersionName('1.1')).toEqual(newVersionFile.name); - expect(versionManagePage.getFileVersionDate('1.1')).not.toBeUndefined(); + await versionManagePage.checkFileVersionExist('1.1'); + await expect(await versionManagePage.getFileVersionName('1.1')).toEqual(newVersionFile.name); + await expect(await versionManagePage.getFileVersionDate('1.1')).not.toBeUndefined(); - versionManagePage.clickActionButton('1.1'); + await versionManagePage.clickActionButton('1.1'); - expect(element(by.css(`[id="adf-version-list-action-delete-1.1"]`)).isEnabled()).toBe(false); + await expect(await element(by.css(`[id="adf-version-list-action-delete-1.1"]`)).isEnabled()).toBe(false); - versionManagePage.closeActionsMenu(); + await versionManagePage.closeActionsMenu(); - versionManagePage.closeVersionDialog(); + await versionManagePage.closeVersionDialog(); }); - it('[C277203] Should a user with Collaborator permission not be able to upload a new version for a locked file', () => { - contentServices.getDocumentList().rightClickOnRow(lockFileModel.name); - const actionVersion = contentServices.checkContextActionIsVisible('Manage versions'); - expect(actionVersion.isEnabled()).toBeFalsy(); + it('[C277203] Should a user with Collaborator permission not be able to upload a new version for a locked file', async () => { + await contentServices.getDocumentList().rightClickOnRow(lockFileModel.name); + await expect(await contentServices.isContextActionEnabled('Manage versions')).toBe(false, 'Manage versions is enabled'); }); }); diff --git a/e2e/content-services/version/version-properties.e2e.ts b/e2e/content-services/version/version-properties.e2e.ts index ea485c9c3b..b08e80da82 100644 --- a/e2e/content-services/version/version-properties.e2e.ts +++ b/e2e/content-services/version/version-properties.e2e.ts @@ -49,7 +49,7 @@ describe('Version Properties', () => { }); const uploadActions = new UploadActions(this.alfrescoJsApi); - beforeAll(async (done) => { + beforeAll(async () => { await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); @@ -65,73 +65,50 @@ describe('Version Properties', () => { await loginPage.loginToContentServicesUsingUserModel(acsUser); - navigationBarPage.clickContentServicesButton(); - contentServicesPage.waitForTableBody(); - contentServicesPage.versionManagerContent(txtFileModel.name); + await navigationBarPage.clickContentServicesButton(); + await contentServicesPage.waitForTableBody(); + await contentServicesPage.versionManagerContent(txtFileModel.name); - done(); }); - afterAll(async (done) => { - await navigationBarPage.clickLogoutButton(); - done(); + it('[C272817] Should NOT be present the download action when allowDownload property is false', async () => { + await versionManagePage.disableDownload(); + await versionManagePage.clickActionButton('1.0'); + await BrowserVisibility.waitUntilElementIsNotVisible(element(by.css(`[id="adf-version-list-action-download-1.0"]`))); + await versionManagePage.closeDisabledActionsMenu(); }); - it('[C272817] Should NOT be present the download action when allowDownload property is false', () => { - versionManagePage.disableDownload(); - - versionManagePage.clickActionButton('1.0'); - - BrowserVisibility.waitUntilElementIsNotVisible(element(by.css(`[id="adf-version-list-action-download-1.0"]`))); - - versionManagePage.closeDisabledActionsMenu(); + it('[C279992] Should be present the download action when allowDownload property is true', async () => { + await versionManagePage.enableDownload(); + await versionManagePage.clickActionButton('1.0'); + await BrowserVisibility.waitUntilElementIsVisible(element(by.css(`[id="adf-version-list-action-download-1.0"]`))); + await versionManagePage.closeActionsMenu(); }); - it('[C279992] Should be present the download action when allowDownload property is true', () => { - versionManagePage.enableDownload(); - - versionManagePage.clickActionButton('1.0'); - - BrowserVisibility.waitUntilElementIsVisible(element(by.css(`[id="adf-version-list-action-download-1.0"]`))); - - versionManagePage.closeActionsMenu(); + it('[C269085] Should show/hide comments when showComments true/false', async () => { + await versionManagePage.enableComments(); + await BrowserActions.click(versionManagePage.showNewVersionButton); + await versionManagePage.enterCommentText('Example comment text'); + await versionManagePage.uploadNewVersionFile(fileModelVersionTwo.location); + await versionManagePage.checkFileVersionExist('1.1'); + await expect(await versionManagePage.getFileVersionComment('1.1')).toEqual('Example comment text'); + await versionManagePage.disableComments(); + await BrowserVisibility.waitUntilElementIsNotVisible(element(by.css(`[id="adf-version-list-item-comment-1.1"]`))); }); - it('[C269085] Should show/hide comments when showComments true/false', () => { - versionManagePage.enableComments(); - - BrowserActions.click(versionManagePage.showNewVersionButton); - - versionManagePage.enterCommentText('Example comment text'); - versionManagePage.uploadNewVersionFile(fileModelVersionTwo.location); - - versionManagePage.checkFileVersionExist('1.1'); - expect(versionManagePage.getFileVersionComment('1.1')).toEqual('Example comment text'); - - versionManagePage.disableComments(); - - BrowserVisibility.waitUntilElementIsNotVisible(element(by.css(`[id="adf-version-list-item-comment-1.1"]`))); + it('[C277277] Should show/hide actions menu when readOnly is true/false', async () => { + await versionManagePage.disableReadOnly(); + await BrowserVisibility.waitUntilElementIsVisible(element(by.css(`[id="adf-version-list-action-menu-button-1.0"]`))); + await versionManagePage.enableReadOnly(); + await BrowserVisibility.waitUntilElementIsNotVisible(element(by.css(`[id="adf-version-list-action-menu-button-1.0"]`))); }); - it('[C277277] Should show/hide actions menu when readOnly is true/false', () => { - versionManagePage.disableReadOnly(); - - BrowserVisibility.waitUntilElementIsVisible(element(by.css(`[id="adf-version-list-action-menu-button-1.0"]`))); - - versionManagePage.enableReadOnly(); - - BrowserVisibility.waitUntilElementIsNotVisible(element(by.css(`[id="adf-version-list-action-menu-button-1.0"]`))); - }); - - it('[C279994] Should show/hide upload new version button when readOnly is true/false', () => { - versionManagePage.disableReadOnly(); - - BrowserVisibility.waitUntilElementIsVisible(versionManagePage.showNewVersionButton); - - versionManagePage.enableReadOnly(); - - BrowserVisibility.waitUntilElementIsNotVisible(versionManagePage.showNewVersionButton); - BrowserVisibility.waitUntilElementIsNotVisible(versionManagePage.uploadNewVersionButton); + it('[C279994] Should show/hide upload new version button when readOnly is true/false', async () => { + await versionManagePage.disableReadOnly(); + await BrowserVisibility.waitUntilElementIsVisible(versionManagePage.showNewVersionButton); + await versionManagePage.enableReadOnly(); + await BrowserVisibility.waitUntilElementIsNotVisible(versionManagePage.showNewVersionButton); + await BrowserVisibility.waitUntilElementIsNotVisible(versionManagePage.uploadNewVersionButton); }); }); diff --git a/e2e/content-services/version/version-smoke-tests.e2e.ts b/e2e/content-services/version/version-smoke-tests.e2e.ts index bfff41c072..bbf856fa67 100644 --- a/e2e/content-services/version/version-smoke-tests.e2e.ts +++ b/e2e/content-services/version/version-smoke-tests.e2e.ts @@ -17,7 +17,7 @@ import { browser } from 'protractor'; -import { LoginPage, UploadActions, BrowserVisibility } from '@alfresco/adf-testing'; +import { LoginPage, UploadActions, BrowserVisibility, BrowserActions } from '@alfresco/adf-testing'; import { ContentServicesPage } from '../../pages/adf/contentServicesPage'; import { VersionManagePage } from '../../pages/adf/versionManagerPage'; import { AcsUserModel } from '../../models/ACS/acsUserModel'; @@ -67,7 +67,7 @@ describe('Version component', () => { const uploadActions = new UploadActions(this.alfrescoJsApi); - beforeAll(async (done) => { + beforeAll(async () => { await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); await this.alfrescoJsApi.core.peopleApi.addPerson(acsUser); @@ -81,92 +81,82 @@ describe('Version component', () => { await loginPage.loginToContentServicesUsingUserModel(acsUser); - navigationBarPage.clickContentServicesButton(); - contentServicesPage.waitForTableBody(); - contentServicesPage.versionManagerContent(txtFileModel.name); + await navigationBarPage.clickContentServicesButton(); + await contentServicesPage.waitForTableBody(); + await contentServicesPage.versionManagerContent(txtFileModel.name); - done(); }); - afterAll(async (done) => { - await navigationBarPage.clickLogoutButton(); - done(); + it('[C272768] Should be visible the first file version when you upload a file', async () => { + await versionManagePage.checkUploadNewVersionsButtonIsDisplayed(); + + await versionManagePage.checkFileVersionExist('1.0'); + await expect(await versionManagePage.getFileVersionName('1.0')).toEqual(txtFileModel.name); + await expect(await versionManagePage.getFileVersionDate('1.0')).not.toBeUndefined(); }); - it('[C272768] Should be visible the first file version when you upload a file', () => { - versionManagePage.checkUploadNewVersionsButtonIsDisplayed(); + it('[C279995] Should show/hide the new upload file options when click on add New version/cancel button', async () => { + await BrowserActions.click(versionManagePage.showNewVersionButton); - versionManagePage.checkFileVersionExist('1.0'); - expect(versionManagePage.getFileVersionName('1.0')).toEqual(txtFileModel.name); - expect(versionManagePage.getFileVersionDate('1.0')).not.toBeUndefined(); + await BrowserVisibility.waitUntilElementIsVisible(versionManagePage.cancelButton); + await BrowserVisibility.waitUntilElementIsVisible(versionManagePage.majorRadio); + await BrowserVisibility.waitUntilElementIsVisible(versionManagePage.minorRadio); + await BrowserVisibility.waitUntilElementIsVisible(versionManagePage.cancelButton); + await BrowserVisibility.waitUntilElementIsVisible(versionManagePage.commentText); + await BrowserVisibility.waitUntilElementIsVisible(versionManagePage.uploadNewVersionButton); + + await BrowserActions.click(versionManagePage.cancelButton); + + await BrowserVisibility.waitUntilElementIsNotVisible(versionManagePage.cancelButton); + await BrowserVisibility.waitUntilElementIsNotVisible(versionManagePage.majorRadio); + await BrowserVisibility.waitUntilElementIsNotVisible(versionManagePage.minorRadio); + await BrowserVisibility.waitUntilElementIsNotVisible(versionManagePage.cancelButton); + await BrowserVisibility.waitUntilElementIsNotVisible(versionManagePage.commentText); + await BrowserVisibility.waitUntilElementIsNotVisible(versionManagePage.uploadNewVersionButton); + + await BrowserVisibility.waitUntilElementIsVisible(versionManagePage.showNewVersionButton); }); - it('[C279995] Should show/hide the new upload file options when click on add New version/cancel button', () => { - versionManagePage.showNewVersionButton.click(); + it('[C260244] Should show the version history when select a file with multiple version', async () => { + await BrowserActions.click(versionManagePage.showNewVersionButton); + await versionManagePage.uploadNewVersionFile(fileModelVersionTwo.location); - browser.driver.sleep(300); + await versionManagePage.checkFileVersionExist('1.0'); + await expect(await versionManagePage.getFileVersionName('1.0')).toEqual(txtFileModel.name); + await expect(await versionManagePage.getFileVersionDate('1.0')).not.toBeUndefined(); - BrowserVisibility.waitUntilElementIsVisible(versionManagePage.cancelButton); - BrowserVisibility.waitUntilElementIsVisible(versionManagePage.majorRadio); - BrowserVisibility.waitUntilElementIsVisible(versionManagePage.minorRadio); - BrowserVisibility.waitUntilElementIsVisible(versionManagePage.cancelButton); - BrowserVisibility.waitUntilElementIsVisible(versionManagePage.commentText); - BrowserVisibility.waitUntilElementIsVisible(versionManagePage.uploadNewVersionButton); - - versionManagePage.cancelButton.click(); - - browser.driver.sleep(300); - - BrowserVisibility.waitUntilElementIsNotVisible(versionManagePage.cancelButton); - BrowserVisibility.waitUntilElementIsNotVisible(versionManagePage.majorRadio); - BrowserVisibility.waitUntilElementIsNotVisible(versionManagePage.minorRadio); - BrowserVisibility.waitUntilElementIsNotVisible(versionManagePage.cancelButton); - BrowserVisibility.waitUntilElementIsNotVisible(versionManagePage.commentText); - BrowserVisibility.waitUntilElementIsNotVisible(versionManagePage.uploadNewVersionButton); - - BrowserVisibility.waitUntilElementIsVisible(versionManagePage.showNewVersionButton); + await versionManagePage.checkFileVersionExist('1.1'); + await expect(await versionManagePage.getFileVersionName('1.1')).toEqual(fileModelVersionTwo.name); + await expect(await versionManagePage.getFileVersionDate('1.1')).not.toBeUndefined(); }); - it('[C260244] Should show the version history when select a file with multiple version', () => { - versionManagePage.showNewVersionButton.click(); - versionManagePage.uploadNewVersionFile(fileModelVersionTwo.location); + it('[C269084] Should be possible add a comment when add a new version', async () => { + await BrowserActions.click(versionManagePage.showNewVersionButton); + await versionManagePage.enterCommentText('Example comment text'); + await versionManagePage.uploadNewVersionFile(fileModelVersionThree.location); - versionManagePage.checkFileVersionExist('1.0'); - expect(versionManagePage.getFileVersionName('1.0')).toEqual(txtFileModel.name); - expect(versionManagePage.getFileVersionDate('1.0')).not.toBeUndefined(); - - versionManagePage.checkFileVersionExist('1.1'); - expect(versionManagePage.getFileVersionName('1.1')).toEqual(fileModelVersionTwo.name); - expect(versionManagePage.getFileVersionDate('1.1')).not.toBeUndefined(); + await versionManagePage.checkFileVersionExist('1.2'); + await expect(await versionManagePage.getFileVersionName('1.2')).toEqual(fileModelVersionThree.name); + await expect(await versionManagePage.getFileVersionDate('1.2')).not.toBeUndefined(); + await expect(await versionManagePage.getFileVersionComment('1.2')).toEqual('Example comment text'); }); - it('[C269084] Should be possible add a comment when add a new version', () => { - versionManagePage.showNewVersionButton.click(); - versionManagePage.enterCommentText('Example comment text'); - versionManagePage.uploadNewVersionFile(fileModelVersionThree.location); + it('[C275719] Should be possible preview the file when you add a new version', async () => { + await BrowserActions.click(versionManagePage.showNewVersionButton); + await versionManagePage.clickMajorChange(); - versionManagePage.checkFileVersionExist('1.2'); - expect(versionManagePage.getFileVersionName('1.2')).toEqual(fileModelVersionThree.name); - expect(versionManagePage.getFileVersionDate('1.2')).not.toBeUndefined(); - expect(versionManagePage.getFileVersionComment('1.2')).toEqual('Example comment text'); - }); + await versionManagePage.uploadNewVersionFile(fileModelVersionFor.location); - it('[C275719] Should be possible preview the file when you add a new version', () => { - versionManagePage.showNewVersionButton.click(); - versionManagePage.clickMajorChange(); + await versionManagePage.checkFileVersionExist('2.0'); + await expect(await versionManagePage.getFileVersionName('2.0')).toEqual(fileModelVersionFor.name); - versionManagePage.uploadNewVersionFile(fileModelVersionFor.location); + await BrowserActions.click(versionManagePage.showNewVersionButton); + await versionManagePage.clickMinorChange(); - versionManagePage.checkFileVersionExist('2.0'); - expect(versionManagePage.getFileVersionName('2.0')).toEqual(fileModelVersionFor.name); + await versionManagePage.uploadNewVersionFile(fileModelVersionFive.location); - versionManagePage.showNewVersionButton.click(); - versionManagePage.clickMinorChange(); - - versionManagePage.uploadNewVersionFile(fileModelVersionFive.location); - - versionManagePage.checkFileVersionExist('2.1'); - expect(versionManagePage.getFileVersionName('2.1')).toEqual(fileModelVersionFive.name); + await versionManagePage.checkFileVersionExist('2.1'); + await expect(await versionManagePage.getFileVersionName('2.1')).toEqual(fileModelVersionFive.name); }); }); diff --git a/e2e/core/auth-guard/auth-guard-sso.e2e.ts b/e2e/core/auth-guard/auth-guard-sso.e2e.ts index 63555a91bd..d127109ac1 100644 --- a/e2e/core/auth-guard/auth-guard-sso.e2e.ts +++ b/e2e/core/auth-guard/auth-guard-sso.e2e.ts @@ -25,19 +25,16 @@ describe('Auth Guard SSO', () => { const errorPage = new ErrorPage(); it('[C307058] Should be redirected to 403 when user doesn\'t have permissions', async () => { - settingsPage.setProviderEcmSso(browser.params.testConfig.adf_acs.host, + await settingsPage.setProviderEcmSso(browser.params.testConfig.adf.url, browser.params.testConfig.adf.hostSso, browser.params.testConfig.adf.hostIdentity, false, true, browser.params.config.oauth2.clientId); - - browser.driver.sleep(5000); - - loginSSOPage.clickOnSSOButton(); - + await loginSSOPage.clickOnSSOButton(); await loginSSOPage.loginSSOIdentityService(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); - BrowserActions.getUrl(browser.params.testConfig.adf.url + '/cloud/simple-app'); - browser.driver.sleep(2000); - expect(errorPage.getErrorCode()).toBe('403'); + await BrowserActions.getUrl(browser.params.testConfig.adf.url + '/cloud/simple-app'); + await browser.sleep(1000); + const error = await errorPage.getErrorCode(); + await expect(error).toBe('403'); }); }); diff --git a/e2e/core/card-view/card-view-component.e2e.ts b/e2e/core/card-view/card-view-component.e2e.ts index c65b941d2f..c26ffaaa25 100644 --- a/e2e/core/card-view/card-view-component.e2e.ts +++ b/e2e/core/card-view/card-view-component.e2e.ts @@ -30,255 +30,262 @@ describe('CardView Component', () => { const cardViewPageComponent = new CardViewComponentPage(); const metadataViewPage = new MetadataViewPage(); - beforeAll(async (done) => { - loginPage.loginToContentServices(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); - navigationBarPage.clickCardViewButton(); + beforeAll(async () => { + await loginPage.loginToContentServices(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); + await navigationBarPage.clickCardViewButton(); - done(); }); afterAll(async () => { await navigationBarPage.clickLogoutButton(); }); - afterEach(() => { - cardViewPageComponent.clickOnResetButton(); + afterEach(async () => { + await cardViewPageComponent.clickOnResetButton(); }); describe('key-value pair ', () => { - it('[C279938] Should the label be present', () => { + it('[C279938] Should the label be present', async () => { const label = element(by.css('div[data-automation-id="card-key-value-pairs-label-key-value-pairs"]')); - BrowserVisibility.waitUntilElementIsPresent(label); + await BrowserVisibility.waitUntilElementIsPresent(label); }); - it('[C279898] Should be possible edit key-value pair properties', () => { - cardViewPageComponent.clickOnAddButton(); - cardViewPageComponent.setName('testName'); - cardViewPageComponent.setValue('testValue'); - cardViewPageComponent.clickOnAddButton(); - cardViewPageComponent.waitForOutput(); - expect(cardViewPageComponent.getOutputText(0)).toBe('[CardView Key-Value Pairs Item] - [{"name":"testName","value":"testValue"}]'); + it('[C279898] Should be possible edit key-value pair properties', async () => { + await cardViewPageComponent.clickOnAddButton(); + await cardViewPageComponent.setName('testName'); + await cardViewPageComponent.setValue('testValue'); + await cardViewPageComponent.clickOnAddButton(); + await cardViewPageComponent.waitForOutput(); + await expect(await cardViewPageComponent.getOutputText(0)).toBe('[CardView Key-Value Pairs Item] - [{"name":"testName","value":"testValue"}]'); - cardViewPageComponent.deletePairsValues(); + await cardViewPageComponent.deletePairsValues(); - expect(cardViewPageComponent.getOutputText(1)).toBe('[CardView Key-Value Pairs Item] - []'); + await expect(await cardViewPageComponent.getOutputText(1)).toBe('[CardView Key-Value Pairs Item] - []'); }); }); describe('SelectBox', () => { - it('[C279939] Should the label be present', () => { + it('[C279939] Should the label be present', async () => { const label = element(by.css('div[data-automation-id="card-select-label-select"]')); - BrowserVisibility.waitUntilElementIsPresent(label); + await BrowserVisibility.waitUntilElementIsPresent(label); }); - it('[C279899] Should be possible edit selectBox item', () => { - cardViewPageComponent.clickSelectBox(); - cardViewPageComponent.selectValueFromComboBox(1); + it('[C279899] Should be possible edit selectBox item', async () => { + await cardViewPageComponent.clickSelectBox(); + await cardViewPageComponent.selectValueFromComboBox(1); - expect(cardViewPageComponent.getOutputText(0)) + await expect(await cardViewPageComponent.getOutputText(0)) .toBe('[CardView Select Item] - two'); }); + + it('[C312448] Should be able to enable None option', async () => { + await cardViewPageComponent.enableNoneOption(); + await cardViewPageComponent.clickSelectBox(); + await cardViewPageComponent.selectValueFromComboBox(0); + + await expect(cardViewPageComponent.getOutputText(0)) + .toBe('[CardView Select Item] - null'); + }); }); describe('Text', () => { - it('[C279937] Should the label be present', () => { + it('[C279937] Should the label be present', async () => { const label = element(by.css('div[data-automation-id="card-textitem-label-name"]')); - BrowserVisibility.waitUntilElementIsPresent(label); + await BrowserVisibility.waitUntilElementIsPresent(label); }); - it('[C279943] Should be present a default value', () => { - expect(cardViewPageComponent.getTextFieldText()).toBe('Spock'); + it('[C279943] Should be present a default value', async () => { + await expect(await cardViewPageComponent.getTextFieldText()).toBe('Spock'); }); - it('[C279934] Should be possible edit text item', () => { - cardViewPageComponent - .clickOnTextField() - .enterTextField('example') - .clickOnTextSaveIcon(); + it('[C279934] Should be possible edit text item', async () => { + await cardViewPageComponent.clickOnTextField(); + await cardViewPageComponent.enterTextField('example'); + await cardViewPageComponent.clickOnTextSaveIcon(); - expect(cardViewPageComponent.getOutputText(0)).toBe('[CardView Text Item] - example'); + await expect(await cardViewPageComponent.getOutputText(0)).toBe('[CardView Text Item] - example'); }); - it('[C279944] Should be possible undo text item modify when click on the clear button', () => { - cardViewPageComponent - .clickOnTextField() - .enterTextField('example') - .clickOnTextClearIcon(); + it('[C279944] Should be possible undo text item modify when click on the clear button', async () => { + await cardViewPageComponent.clickOnTextField(); + await cardViewPageComponent.enterTextField('example'); + await cardViewPageComponent.clickOnTextClearIcon(); - expect(cardViewPageComponent.getTextFieldText()).toBe('Spock'); + await expect(await cardViewPageComponent.getTextFieldText()).toBe('Spock'); }); }); describe('Int', () => { - it('[C279940] Should the label be present', () => { + it('[C279940] Should the label be present', async () => { const label = element(by.css('div[data-automation-id="card-textitem-label-int"]')); - BrowserVisibility.waitUntilElementIsPresent(label); + await BrowserVisibility.waitUntilElementIsPresent(label); }); - it('[C279945] Should be present a default value', () => { - expect(cardViewPageComponent.getIntFieldText()).toBe('213'); + it('[C279945] Should be present a default value', async () => { + await expect(await cardViewPageComponent.getIntFieldText()).toBe('213'); }); - it('[C279946] Should be possible edit int item', () => { - cardViewPageComponent - .clickOnIntField() - .enterIntField('99999') - .clickOnIntSaveIcon(); + it('[C279946] Should be possible edit int item', async () => { + await cardViewPageComponent.clickOnIntField(); + await cardViewPageComponent.enterIntField('99999'); + await cardViewPageComponent.clickOnIntSaveIcon(); - expect(cardViewPageComponent.getOutputText(0)).toBe('[CardView Int Item] - 99999'); + await expect(await cardViewPageComponent.getOutputText(0)).toBe('[CardView Int Item] - 99999'); }); - it('[C279947] Should not be possible add string value to the int item', () => { - cardViewPageComponent - .clickOnIntField() - .enterIntField('string value') - .clickOnIntSaveIcon(); + it('[C279947] Should not be possible add string value to the int item', async () => { + await cardViewPageComponent.clickOnIntField(); + await cardViewPageComponent.enterIntField('string value'); + await cardViewPageComponent.clickOnIntSaveIcon(); - expect(cardViewPageComponent.getErrorInt()).toBe('Use an integer format'); + await expect(await cardViewPageComponent.getErrorInt()).toBe('Use an integer format'); }); - it('[C279948] Should not be possible add float value to the int item', () => { - cardViewPageComponent - .clickOnIntField() - .enterIntField('0.22') - .clickOnIntSaveIcon(); + it('[C279948] Should not be possible add float value to the int item', async () => { + await cardViewPageComponent.clickOnIntField(); + await cardViewPageComponent.enterIntField('0.22'); + await cardViewPageComponent.clickOnIntSaveIcon(); - expect(cardViewPageComponent.getErrorInt()).toBe('Use an integer format'); + await expect(await cardViewPageComponent.getErrorInt()).toBe('Use an integer format'); }); - it('[C279949] Should not be possible have an empty value', () => { - cardViewPageComponent - .clickOnIntField() - .enterIntField(' ') - .clickOnIntSaveIcon(); + it('[C279949] Should not be possible have an empty value', async () => { + await cardViewPageComponent.clickOnIntField(); + await cardViewPageComponent.enterIntField(' '); + await cardViewPageComponent.clickOnIntSaveIcon(); - expect(cardViewPageComponent.getErrorInt()).toBe('Use an integer format'); + await expect(await cardViewPageComponent.getErrorInt()).toBe('Use an integer format'); }); - it('[C279950] Should return an error when the value is > 2147483647', () => { - cardViewPageComponent - .clickOnIntField() - .enterIntField('214748367') - .clickOnIntSaveIcon(); + it('[C279950] Should return an error when the value is > 2147483647', async () => { + await cardViewPageComponent.clickOnIntField(); + await cardViewPageComponent.enterIntField('214748367'); + await cardViewPageComponent.clickOnIntSaveIcon(); - expect(cardViewPageComponent.getOutputText(0)).toBe('[CardView Int Item] - 214748367'); + await expect(await cardViewPageComponent.getOutputText(0)).toBe('[CardView Int Item] - 214748367'); - cardViewPageComponent - .clickOnIntField() - .enterIntField('2147483648') - .clickOnIntSaveIcon(); + await cardViewPageComponent.clickOnIntField(); + await cardViewPageComponent.enterIntField('2147483648'); + await cardViewPageComponent.clickOnIntSaveIcon(); - expect(cardViewPageComponent.getErrorInt()).toBe('Use an integer format'); + await expect(await cardViewPageComponent.getErrorInt()).toBe('Use an integer format'); }); - it('[C279951] Should be possible undo item modify when click on the clear button', () => { - cardViewPageComponent - .clickOnIntField() - .enterIntField('999') - .clickOnIntClearIcon(); + it('[C279951] Should be possible undo item modify when click on the clear button', async () => { + await cardViewPageComponent.clickOnIntField(); + await cardViewPageComponent.enterIntField('999'); + await cardViewPageComponent.clickOnIntClearIcon(); - expect(cardViewPageComponent.getIntFieldText()).toBe('213'); + await expect(await cardViewPageComponent.getIntFieldText()).toBe('213'); }); }); describe('Float', () => { - it('[C279941] Should the label be present', () => { + it('[C279941] Should the label be present', async () => { const label = element(by.css('div[data-automation-id="card-textitem-label-float"]')); - BrowserVisibility.waitUntilElementIsPresent(label); + await BrowserVisibility.waitUntilElementIsPresent(label); }); - it('[C279952] Should be present a default value', () => { - expect(cardViewPageComponent.getFloatFieldText()).toBe('9.9'); + it('[C279952] Should be present a default value', async () => { + await expect(await cardViewPageComponent.getFloatFieldText()).toBe('9.9'); }); - it('[C279953] Should be possible edit float item', () => { - cardViewPageComponent - .clickOnFloatField() - .enterFloatField('77.33') - .clickOnFloatSaveIcon(); + it('[C279953] Should be possible edit float item', async () => { + await cardViewPageComponent.clickOnFloatField(); + await cardViewPageComponent.enterFloatField('77.33'); + await cardViewPageComponent.clickOnFloatSaveIcon(); - expect(cardViewPageComponent.getOutputText(0)).toBe('[CardView Float Item] - 77.33'); + await expect(await cardViewPageComponent.getOutputText(0)).toBe('[CardView Float Item] - 77.33'); }); - it('[C279954] Should not be possible add string value to the float item', () => { - cardViewPageComponent - .clickOnFloatField() - .enterFloatField('string value') - .clickOnFloatSaveIcon(); + it('[C279954] Should not be possible add string value to the float item', async () => { + await cardViewPageComponent.clickOnFloatField(); + await cardViewPageComponent.enterFloatField('string value'); + await cardViewPageComponent.clickOnFloatSaveIcon(); - expect(cardViewPageComponent.getErrorFloat()).toBe('Use a number format'); + await expect(await cardViewPageComponent.getErrorFloat()).toBe('Use a number format'); }); - it('[C279955] Should be possible undo item item modify when click on the clear button', () => { - cardViewPageComponent - .clickOnFloatField() - .enterFloatField('77.33') - .clickOnFloatClearIcon(); + it('[C279955] Should be possible undo item item modify when click on the clear button', async () => { + await cardViewPageComponent.clickOnFloatField(); + await cardViewPageComponent.enterFloatField('77.33'); + await cardViewPageComponent.clickOnFloatClearIcon(); - expect(cardViewPageComponent.getFloatFieldText()).toBe('9.9'); + await expect(await cardViewPageComponent.getFloatFieldText()).toBe('9.9'); }); - it('[C279956] Should not be possible have an empty value', () => { - cardViewPageComponent - .clickOnFloatField() - .enterFloatField(' ') - .clickOnFloatSaveIcon(); + it('[C279956] Should not be possible have an empty value', async () => { + await cardViewPageComponent.clickOnFloatField(); + await cardViewPageComponent.enterFloatField(' '); + await cardViewPageComponent.clickOnFloatSaveIcon(); - expect(cardViewPageComponent.getErrorFloat()).toBe('Use a number format'); + await expect(await cardViewPageComponent.getErrorFloat()).toBe('Use a number format'); }); }); describe('Boolean', () => { - it('[C279942] Should the label be present', () => { + it('[C279942] Should the label be present', async () => { const label = element(by.css('div[data-automation-id="card-boolean-label-boolean"]')); - BrowserVisibility.waitUntilElementIsPresent(label); + await BrowserVisibility.waitUntilElementIsPresent(label); }); - it('[C279957] Should be possible edit the checkbox value when click on it', () => { - cardViewPageComponent.checkboxClick(); + it('[C279957] Should be possible edit the checkbox value when click on it', async () => { + await cardViewPageComponent.checkboxClick(); - expect(cardViewPageComponent.getOutputText(0)).toBe('[CardView Boolean Item] - false'); + await expect(await cardViewPageComponent.getOutputText(0)).toBe('[CardView Boolean Item] - false'); - cardViewPageComponent.checkboxClick(); + await cardViewPageComponent.checkboxClick(); - expect(cardViewPageComponent.getOutputText(1)).toBe('[CardView Boolean Item] - true'); + await expect(await cardViewPageComponent.getOutputText(1)).toBe('[CardView Boolean Item] - true'); }); }); describe('Date and DateTime', () => { - it('[C279961] Should the label be present', () => { + it('[C279961] Should the label be present', async () => { const labelDate = element(by.css('div[data-automation-id="card-dateitem-label-date"]')); - BrowserVisibility.waitUntilElementIsPresent(labelDate); + await BrowserVisibility.waitUntilElementIsPresent(labelDate); const labelDatetime = element(by.css('div[data-automation-id="card-dateitem-label-datetime"]')); - BrowserVisibility.waitUntilElementIsPresent(labelDatetime); + await BrowserVisibility.waitUntilElementIsPresent(labelDatetime); }); - it('[C279962] Should be present a default value', () => { - expect(metadataViewPage.getPropertyText('date', 'date')).toEqual('12/24/83'); - expect(metadataViewPage.getPropertyText('datetime', 'datetime')).toEqual('Dec 24, 1983, 10:00'); + it('[C279962] Should be present a default value', async () => { + await expect(await metadataViewPage.getPropertyText('date', 'date')).toEqual('12/24/83'); + await expect(await metadataViewPage.getPropertyText('datetime', 'datetime')).toEqual('Dec 24, 1983, 10:00'); + }); + + it('[C312447] Should be able to clear the date field', async () => { + await cardViewPageComponent.enableClearDate(); + await cardViewPageComponent.clearDateField(); + await expect(await cardViewPageComponent.getDateValue()).toBe('', 'Date field should be cleared'); + await expect(cardViewPageComponent.getOutputText(0)) + .toBe('[CardView Date Item] - null'); + await cardViewPageComponent.clearDateTimeField(); + await expect(await cardViewPageComponent.getDateTimeValue()).toBe('', 'DateTime field should be cleared'); + await expect(cardViewPageComponent.getOutputText(1)) + .toBe('[CardView Datetime Item] - null'); }); }); - it('[C279936] Should not be possible edit any parameter when editable property is false', () => { - cardViewPageComponent.disableEdit(); + it('[C279936] Should not be possible edit any parameter when editable property is false', async () => { + await cardViewPageComponent.disableEdit(); const editIconText = element(by.css('mat-icon[data-automation-id="card-textitem-edit-icon-name"]')); const editIconInt = element(by.css('mat-icon[data-automation-id="card-textitem-edit-icon-int"]')); @@ -286,10 +293,10 @@ describe('CardView Component', () => { const editIconKey = element(by.css('mat-icon[data-automation-id="card-key-value-pairs-button-key-value-pairs"]')); const editIconData = element(by.css('mat-datetimepicker-toggle')); - BrowserVisibility.waitUntilElementIsNotVisible(editIconText); - BrowserVisibility.waitUntilElementIsNotVisible(editIconInt); - BrowserVisibility.waitUntilElementIsNotVisible(editIconFloat); - BrowserVisibility.waitUntilElementIsNotVisible(editIconKey); - BrowserVisibility.waitUntilElementIsNotVisible(editIconData); + await BrowserVisibility.waitUntilElementIsNotVisible(editIconText); + await BrowserVisibility.waitUntilElementIsNotVisible(editIconInt); + await BrowserVisibility.waitUntilElementIsNotVisible(editIconFloat); + await BrowserVisibility.waitUntilElementIsNotVisible(editIconKey); + await BrowserVisibility.waitUntilElementIsNotVisible(editIconData); }); }); diff --git a/e2e/core/datatable/data-table-component-selection.e2e.ts b/e2e/core/datatable/data-table-component-selection.e2e.ts index 74c32aa723..4076a90575 100644 --- a/e2e/core/datatable/data-table-component-selection.e2e.ts +++ b/e2e/core/datatable/data-table-component-selection.e2e.ts @@ -32,7 +32,7 @@ describe('Datatable component - selection', () => { const navigationBarPage = new NavigationBarPage(); const dataTableComponent = new DataTableComponentPage(); - beforeAll(async (done) => { + beforeAll(async () => { this.alfrescoJsApi = new AlfrescoApi({ provider: 'ECM', hostEcm: browser.params.testConfig.adf_acs.host @@ -46,60 +46,59 @@ describe('Datatable component - selection', () => { await navigationBarPage.navigateToDatatable(); - done(); }); afterAll(async () => { await navigationBarPage.clickLogoutButton(); }); - it('[C213258] Should be possible change the selection modes when change the selectionMode property', () => { - dataTablePage.selectRow('2'); - dataTableComponent.checkRowIsSelected('Id', '2'); - expect(dataTablePage.getNumberOfSelectedRows()).toEqual(1); - dataTablePage.selectRow('3'); - dataTableComponent.checkRowIsSelected('Id', '3'); - expect(dataTablePage.getNumberOfSelectedRows()).toEqual(1); - dataTablePage.selectSelectionMode('Multiple'); - dataTablePage.selectRow('1'); - dataTableComponent.checkRowIsSelected('Id', '1'); - dataTablePage.selectRowWithKeyboard('3'); - dataTableComponent.checkRowIsSelected('Id', '1'); - dataTableComponent.checkRowIsSelected('Id', '3'); - dataTablePage.checkRowIsNotSelected('2'); - dataTablePage.checkRowIsNotSelected('4'); - dataTablePage.selectSelectionMode('None'); - dataTablePage.selectRow('1'); - dataTablePage.checkNoRowIsSelected(); + it('[C213258] Should be possible change the selection modes when change the selectionMode property', async () => { + await dataTablePage.selectRow('2'); + await dataTableComponent.checkRowIsSelected('Id', '2'); + await expect(await dataTablePage.getNumberOfSelectedRows()).toEqual(1); + await dataTablePage.selectRow('3'); + await dataTableComponent.checkRowIsSelected('Id', '3'); + await expect(await dataTablePage.getNumberOfSelectedRows()).toEqual(1); + await dataTablePage.selectSelectionMode('Multiple'); + await dataTablePage.selectRow('1'); + await dataTableComponent.checkRowIsSelected('Id', '1'); + await dataTablePage.selectRowWithKeyboard('3'); + await dataTableComponent.checkRowIsSelected('Id', '1'); + await dataTableComponent.checkRowIsSelected('Id', '3'); + await dataTablePage.checkRowIsNotSelected('2'); + await dataTablePage.checkRowIsNotSelected('4'); + await dataTablePage.selectSelectionMode('None'); + await dataTablePage.selectRow('1'); + await dataTablePage.checkNoRowIsSelected(); }); - it('[C260059] Should be possible select multiple row when multiselect is true', () => { - dataTablePage.clickMultiSelect(); - dataTablePage.clickCheckbox('1'); - dataTablePage.checkRowIsChecked('1'); - dataTablePage.clickCheckbox('3'); - dataTablePage.checkRowIsChecked('3'); - dataTablePage.checkRowIsNotChecked('2'); - dataTablePage.checkRowIsNotChecked('4'); - dataTablePage.clickCheckbox('3'); - dataTablePage.checkRowIsNotChecked('3'); - dataTablePage.checkRowIsChecked('1'); + it('[C260059] Should be possible select multiple row when multiselect is true', async () => { + await dataTablePage.clickMultiSelect(); + await dataTablePage.clickCheckbox('1'); + await dataTablePage.checkRowIsChecked('1'); + await dataTablePage.clickCheckbox('3'); + await dataTablePage.checkRowIsChecked('3'); + await dataTablePage.checkRowIsNotChecked('2'); + await dataTablePage.checkRowIsNotChecked('4'); + await dataTablePage.clickCheckbox('3'); + await dataTablePage.checkRowIsNotChecked('3'); + await dataTablePage.checkRowIsChecked('1'); }); - it('[C260058] Should be possible select all the rows when multiselect is true', () => { - dataTablePage.checkAllRows(); - dataTablePage.checkRowIsChecked('1'); - dataTablePage.checkRowIsChecked('2'); - dataTablePage.checkRowIsChecked('3'); - dataTablePage.checkRowIsChecked('4'); + it('[C260058] Should be possible select all the rows when multiselect is true', async () => { + await dataTablePage.checkAllRows(); + await dataTablePage.checkRowIsChecked('1'); + await dataTablePage.checkRowIsChecked('2'); + await dataTablePage.checkRowIsChecked('3'); + await dataTablePage.checkRowIsChecked('4'); }); - it('[C277262] Should be possible reset the selected row when click on the reset button', () => { - dataTablePage.checkRowIsChecked('1'); - dataTablePage.checkRowIsChecked('2'); - dataTablePage.checkRowIsChecked('3'); - dataTablePage.checkRowIsChecked('4'); - dataTablePage.clickReset(); - dataTablePage.checkNoRowIsSelected(); + it('[C277262] Should be possible reset the selected row when click on the reset button', async () => { + await dataTablePage.checkRowIsChecked('1'); + await dataTablePage.checkRowIsChecked('2'); + await dataTablePage.checkRowIsChecked('3'); + await dataTablePage.checkRowIsChecked('4'); + await dataTablePage.clickReset(); + await dataTablePage.checkNoRowIsSelected(); }); }); diff --git a/e2e/core/datatable/data-table-component.e2e.ts b/e2e/core/datatable/data-table-component.e2e.ts index 1aeff582d0..aa99ab8e45 100644 --- a/e2e/core/datatable/data-table-component.e2e.ts +++ b/e2e/core/datatable/data-table-component.e2e.ts @@ -43,7 +43,7 @@ describe('Datatable component', () => { 'location': resources.Files.ADF_DOCUMENTS.PNG.file_location }); - beforeAll(async (done) => { + beforeAll(async () => { this.alfrescoJsApi = new AlfrescoApi({ provider: 'ECM', hostEcm: browser.params.testConfig.adf_acs.host @@ -55,7 +55,6 @@ describe('Datatable component', () => { await loginPage.loginToContentServicesUsingUserModel(acsUser); - done(); }); afterAll(async () => { @@ -64,151 +63,143 @@ describe('Datatable component', () => { describe('Datatable component', () => { - beforeAll(async (done) => { - navigationBarPage.navigateToDatatable(); - - done(); + beforeAll(async () => { + await navigationBarPage.navigateToDatatable(); + await dataTablePage.dataTable.waitForTableBody(); }); - beforeEach(async (done) => { - dataTablePage.clickReset(); - done(); + beforeEach(async () => { + await dataTablePage.clickReset(); }); - it('[C91314] Should be possible add new row to the table', () => { - dataTableComponent.numberOfRows().then((result) => { - dataTablePage.addRow(); - expect(dataTableComponent.numberOfRows()).toEqual(result + 1); - dataTablePage.addRow(); - expect(dataTableComponent.numberOfRows()).toEqual(result + 2); - }); + it('[C91314] Should be possible add new row to the table', async () => { + const result = await dataTableComponent.numberOfRows(); + await dataTablePage.addRow(); + await expect(await dataTableComponent.numberOfRows()).toEqual(result + 1); + await dataTablePage.addRow(); + await expect(await dataTableComponent.numberOfRows()).toEqual(result + 2); }); - it('[C260039] Should be possible replace rows', () => { - dataTablePage.replaceRows(1); + it('[C260039] Should be possible replace rows', async () => { + await dataTablePage.replaceRows(1); }); - it('[C260041] Should be possible replace columns', () => { - dataTablePage.replaceColumns(); + it('[C260041] Should be possible replace columns', async () => { + await dataTablePage.replaceColumns(); }); - it('[C277314] Should filter the table rows when the input filter is passed', () => { - dataTablePage.replaceRows(1); - dataTablePage.replaceColumns(); - expect(dataTableComponent.numberOfRows()).toEqual(4); - dataTablePage.insertFilter('Name'); - expect(dataTableComponent.numberOfRows()).toEqual(3); - dataTablePage.insertFilter('I'); - expect(dataTableComponent.numberOfRows()).toEqual(1); + it('[C277314] Should filter the table rows when the input filter is passed', async () => { + await dataTablePage.replaceRows(1); + await dataTablePage.replaceColumns(); + await expect(await dataTableComponent.numberOfRows()).toEqual(4); + await dataTablePage.insertFilter('Name'); + await expect(await dataTableComponent.numberOfRows()).toEqual(3); + await dataTablePage.insertFilter('I'); + await expect(await dataTableComponent.numberOfRows()).toEqual(1); }); }); describe('Datatable component - copyContent', () => { - beforeAll(async (done) => { - navigationBarPage.navigateToCopyContentDatatable(); - done(); + beforeAll(async () => { + await navigationBarPage.navigateToCopyContentDatatable(); + await dataTablePage.dataTable.waitForTableBody(); + }); - it('[C307037] A tooltip is displayed when mouseOver a column with copyContent set to true', () => { - dataTablePage.mouseOverIdColumn('1'); - expect(dataTablePage.getCopyContentTooltip()).toEqual('Click to copy'); - dataTablePage.mouseOverNameColumn('Name 2'); - dataTablePage.dataTable.copyContentTooltipIsNotDisplayed(); + it('[C307037] A tooltip is displayed when mouseOver a column with copyContent set to true', async () => { + await dataTablePage.mouseOverIdColumn('1'); + await expect(await dataTablePage.getCopyContentTooltip()).toEqual('Click to copy'); + await dataTablePage.mouseOverNameColumn('Name 2'); + await dataTablePage.dataTable.copyContentTooltipIsNotDisplayed(); }); - it('[C307045] No tooltip is displayed when hover over a column with copyContent set to false', () => { - dataTablePage.mouseOverNameColumn('Name 2'); - dataTablePage.dataTable.copyContentTooltipIsNotDisplayed(); - dataTablePage.clickOnNameColumn('Name 2'); - notificationHistoryPage.checkNotifyNotContains('Name 2'); + it('[C307045] No tooltip is displayed when hover over a column with copyContent set to false', async () => { + await dataTablePage.mouseOverNameColumn('Name 2'); + await dataTablePage.dataTable.copyContentTooltipIsNotDisplayed(); + await dataTablePage.clickOnNameColumn('Name 2'); + await notificationHistoryPage.checkNotifyNotContains('Name 2'); }); - it('[C307046] No tooltip is displayed when hover over a column that has default value for copyContent property', () => { - dataTablePage.mouseOverCreatedByColumn('Created One'); - dataTablePage.dataTable.copyContentTooltipIsNotDisplayed(); - dataTablePage.clickOnCreatedByColumn('Created One'); - notificationHistoryPage.checkNotifyNotContains('Created One'); + it('[C307046] No tooltip is displayed when hover over a column that has default value for copyContent property', async () => { + await dataTablePage.mouseOverCreatedByColumn('Created One'); + await dataTablePage.dataTable.copyContentTooltipIsNotDisplayed(); + await dataTablePage.clickOnCreatedByColumn('Created One'); + await notificationHistoryPage.checkNotifyNotContains('Created One'); }); - it('[C307040] A column value with copyContent set to true is copied when clicking on it', () => { - dataTablePage.mouseOverIdColumn('1'); - expect(dataTablePage.getCopyContentTooltip()).toEqual('Click to copy'); - dataTablePage.clickOnIdColumn('1'); - notificationHistoryPage.checkNotifyContains('Text copied to clipboard'); - dataTablePage.clickOnIdColumn('2'); - notificationHistoryPage.checkNotifyContains('Text copied to clipboard'); - dataTablePage.pasteClipboard(); - expect(dataTablePage.getClipboardInputText()).toEqual('2'); + it('[C307040] A column value with copyContent set to true is copied when clicking on it', async () => { + await dataTablePage.mouseOverIdColumn('1'); + await expect(await dataTablePage.getCopyContentTooltip()).toEqual('Click to copy'); + await dataTablePage.clickOnIdColumn('1'); + await notificationHistoryPage.checkNotifyContains('Text copied to clipboard'); + await dataTablePage.clickOnIdColumn('2'); + await notificationHistoryPage.checkNotifyContains('Text copied to clipboard'); + await dataTablePage.pasteClipboard(); + await expect(await dataTablePage.getClipboardInputText()).toEqual('2'); }); - it('[C307072] A tooltip is displayed when mouseOver a column with copyContent set to true', () => { - copyContentDataTablePage.mouseOverIdColumn('1'); - expect(copyContentDataTablePage.getCopyContentTooltip()).toEqual('Click to copy'); - copyContentDataTablePage.mouseOverNameColumn('First'); - copyContentDataTablePage.dataTable.copyContentTooltipIsNotDisplayed(); + it('[C307072] A tooltip is displayed when mouseOver a column with copyContent set to true', async () => { + await copyContentDataTablePage.mouseOverIdColumn('1'); + await expect(await copyContentDataTablePage.getCopyContentTooltip()).toEqual('Click to copy'); + await copyContentDataTablePage.mouseOverNameColumn('First'); + await copyContentDataTablePage.dataTable.copyContentTooltipIsNotDisplayed(); }); - it('[C307074] No tooltip is displayed when hover over a column with copyContent set to false', () => { - copyContentDataTablePage.mouseOverNameColumn('Second'); - copyContentDataTablePage.dataTable.copyContentTooltipIsNotDisplayed(); - copyContentDataTablePage.clickOnNameColumn('Second'); - notificationHistoryPage.checkNotifyNotContains('Second'); + it('[C307074] No tooltip is displayed when hover over a column with copyContent set to false', async () => { + await copyContentDataTablePage.mouseOverNameColumn('Second'); + await copyContentDataTablePage.dataTable.copyContentTooltipIsNotDisplayed(); + await copyContentDataTablePage.clickOnNameColumn('Second'); + await notificationHistoryPage.checkNotifyNotContains('Second'); }); - it('[C307075] No tooltip is displayed when hover over a column that has default value for copyContent property', () => { - copyContentDataTablePage.mouseOverCreatedByColumn('Created one'); - copyContentDataTablePage.dataTable.copyContentTooltipIsNotDisplayed(); - copyContentDataTablePage.clickOnCreatedByColumn('Created one'); - notificationHistoryPage.checkNotifyNotContains('Created One'); + it('[C307075] No tooltip is displayed when hover over a column that has default value for copyContent property', async () => { + await copyContentDataTablePage.mouseOverCreatedByColumn('Created one'); + await copyContentDataTablePage.dataTable.copyContentTooltipIsNotDisplayed(); + await copyContentDataTablePage.clickOnCreatedByColumn('Created one'); + await notificationHistoryPage.checkNotifyNotContains('Created One'); }); - it('[C307073] A column value with copyContent set to true is copied when clicking on it', () => { - copyContentDataTablePage.mouseOverIdColumn('1'); - expect(copyContentDataTablePage.getCopyContentTooltip()).toEqual('Click to copy'); - copyContentDataTablePage.clickOnIdColumn('1'); - notificationHistoryPage.checkNotifyContains('Text copied to clipboard'); - copyContentDataTablePage.clickOnIdColumn('2'); - notificationHistoryPage.checkNotifyContains('Text copied to clipboard'); - copyContentDataTablePage.pasteClipboard(); - expect(copyContentDataTablePage.getClipboardInputText()).toEqual('2'); + it('[C307073] A column value with copyContent set to true is copied when clicking on it', async () => { + await copyContentDataTablePage.mouseOverIdColumn('1'); + await expect(await copyContentDataTablePage.getCopyContentTooltip()).toEqual('Click to copy'); + await copyContentDataTablePage.clickOnIdColumn('1'); + await notificationHistoryPage.checkNotifyContains('Text copied to clipboard'); + await copyContentDataTablePage.clickOnIdColumn('2'); + await notificationHistoryPage.checkNotifyContains('Text copied to clipboard'); + await copyContentDataTablePage.pasteClipboard(); + await expect(await copyContentDataTablePage.getClipboardInputText()).toEqual('2'); }); - it('[C307100] A column value of type text and with copyContent set to true is copied when clicking on it', () => { - dataTablePage.mouseOverIdColumn('1'); - expect(dataTablePage.getCopyContentTooltip()).toEqual('Click to copy'); - dataTablePage.clickOnIdColumn('1'); - notificationHistoryPage.checkNotifyContains('Text copied to clipboard'); - dataTablePage.pasteClipboard(); - expect(dataTablePage.getClipboardInputText()).toEqual('1'); + it('[C307100] A column value of type text and with copyContent set to true is copied when clicking on it', async () => { + await dataTablePage.mouseOverIdColumn('1'); + await expect(await dataTablePage.getCopyContentTooltip()).toEqual('Click to copy'); + await dataTablePage.clickOnIdColumn('1'); + await notificationHistoryPage.checkNotifyContains('Text copied to clipboard'); + await dataTablePage.pasteClipboard(); + await expect(await dataTablePage.getClipboardInputText()).toEqual('1'); }); - it('[C307101] A column value of type json and with copyContent set to true is copied when clicking on it', () => { - const jsonValue = `{ "id": 4 }`; - copyContentDataTablePage.mouseOverJsonColumn(2); - expect(copyContentDataTablePage.getCopyContentTooltip()).toEqual('Click to copy'); - copyContentDataTablePage.clickOnJsonColumn(2); - notificationHistoryPage.checkNotifyContains('Text copied to clipboard'); - copyContentDataTablePage.pasteClipboard(); - expect(copyContentDataTablePage.getClipboardInputText()).toContain(jsonValue); + afterAll(async () => { + await navigationBarPage.clickHomeButton(); }); }); describe('Datatable component - Drag and Drop', () => { - beforeAll(async (done) => { - navigationBarPage.navigateToDragAndDropDatatable(); - done(); + beforeAll(async () => { + await navigationBarPage.navigateToDragAndDropDatatable(); + await dragAndDropDataTablePage.dataTable.waitForTableBody(); }); - it('[C307984] Should trigger the event handling header-drop and cell-drop', () => { + it('[C307984] Should trigger the event handling header-drop and cell-drop', async () => { const dragAndDropHeader = dragAndDropDataTablePage.getDropTargetIdColumnHeader(); - dragAndDrop.dropFile(dragAndDropHeader, pngFile.location); - notificationHistoryPage.checkNotifyContains('Dropped data on [ id ] header'); + await dragAndDrop.dropFile(dragAndDropHeader, pngFile.location); + await notificationHistoryPage.checkNotifyContains('Dropped data on [ id ] header'); const dragAndDropCell = dragAndDropDataTablePage.getDropTargetIdColumnCell(1); - dragAndDrop.dropFile(dragAndDropCell, pngFile.location); - notificationHistoryPage.checkNotifyContains('Dropped data on [ id ] cell'); + await dragAndDrop.dropFile(dragAndDropCell, pngFile.location); + await notificationHistoryPage.checkNotifyContains('Dropped data on [ id ] cell'); }); }); }); diff --git a/e2e/core/error-component.e2e.ts b/e2e/core/error-component.e2e.ts index ba696c1485..9748ff413c 100644 --- a/e2e/core/error-component.e2e.ts +++ b/e2e/core/error-component.e2e.ts @@ -28,7 +28,7 @@ describe('Error Component', () => { const errorPage = new ErrorPage(); const navigationBarPage = new NavigationBarPage(); - beforeAll(async (done) => { + beforeAll(async () => { this.alfrescoJsApi = new AlfrescoApi({ provider: 'ECM', hostEcm: browser.params.testConfig.adf_acs.host @@ -38,49 +38,31 @@ describe('Error Component', () => { await this.alfrescoJsApi.core.peopleApi.addPerson(acsUser); await loginPage.loginToContentServicesUsingUserModel(acsUser); - done(); - }); afterAll(async () => { await navigationBarPage.clickLogoutButton(); }); - it('[C277302] Should display the error 403 when access to unauthorized page - My Change', () => { - BrowserActions.getUrl(browser.params.testConfig.adf.url + '/error/403'); - expect(errorPage.getErrorCode()).toBe('403'); - expect(errorPage.getErrorTitle()).toBe('You don\'t have permission to access this server.'); - expect(errorPage.getErrorDescription()).toBe('You\'re not allowed access to this resource on the server.'); + it('[C277302] Should display the error 403 when access to unauthorized page - My Change', async () => { + await BrowserActions.getUrl(browser.params.testConfig.adf.url + '/error/403'); + await expect(await errorPage.getErrorCode()).toBe('403'); + await expect(await errorPage.getErrorTitle()).toBe('You don\'t have permission to access this server.'); + await expect(await errorPage.getErrorDescription()).toBe('You\'re not allowed access to this resource on the server.'); }); - it('[C280563] Should back home button navigate to the home page', () => { - BrowserActions.getUrl(browser.params.testConfig.adf.url + '/error/404'); - - errorPage.clickBackButton(); - - expect(browser.getCurrentUrl()).toBe(browser.params.testConfig.adf.url + '/'); + it('[C277304] Should display the error 404 when access to not found page', async () => { + await BrowserActions.getUrl(browser.params.testConfig.adf.url + '/error/404'); + await expect(await errorPage.getErrorCode()).toBe('404'); + await expect(await errorPage.getErrorTitle()).toBe('An error occurred.'); + await expect(await errorPage.getErrorDescription()).toBe('We couldn’t find the page you were looking for.'); }); - it('[C280564] Should secondary button by default redirect to report-issue URL', () => { - BrowserActions.getUrl(browser.params.testConfig.adf.url + '/error/403'); - - errorPage.clickSecondButton(); - - expect(browser.getCurrentUrl()).toBe(browser.params.testConfig.adf.url + '/report-issue'); - }); - - it('[C277304] Should display the error 404 when access to not found page', () => { - BrowserActions.getUrl(browser.params.testConfig.adf.url + '/error/404'); - expect(errorPage.getErrorCode()).toBe('404'); - expect(errorPage.getErrorTitle()).toBe('An error occurred.'); - expect(errorPage.getErrorDescription()).toBe('We couldn’t find the page you were looking for.'); - }); - - it('[C307029] Should display Unknown message when error is undefined', () => { - BrowserActions.getUrl(browser.params.testConfig.adf.url + '/error/501'); - expect(errorPage.getErrorCode()).toBe('UNKNOWN'); - expect(errorPage.getErrorTitle()).toBe('We hit a problem.'); - expect(errorPage.getErrorDescription()).toBe('Looks like something went wrong.'); + it('[C307029] Should display Unknown message when error is undefined', async () => { + await BrowserActions.getUrl(browser.params.testConfig.adf.url + '/error/501'); + await expect(await errorPage.getErrorCode()).toBe('UNKNOWN'); + await expect(await errorPage.getErrorTitle()).toBe('We hit a problem.'); + await expect(await errorPage.getErrorDescription()).toBe('Looks like something went wrong.'); }); }); diff --git a/e2e/core/header-component.e2e.ts b/e2e/core/header-component.e2e.ts index 96892a2bd7..3b579646ab 100644 --- a/e2e/core/header-component.e2e.ts +++ b/e2e/core/header-component.e2e.ts @@ -46,7 +46,7 @@ describe('Header Component', () => { logo_tooltip: 'test_tooltip' }; - beforeAll(async(done) => { + beforeAll(async() => { this.alfrescoJsApi = new AlfrescoApi({ provider: 'BPM', hostBpm: browser.params.testConfig.adf_aps.host @@ -64,85 +64,83 @@ describe('Header Component', () => { await loginPage.loginToProcessServicesUsingUserModel(user); - done(); }); - beforeEach(async(done) => { - navigationBarPage.clickHeaderDataButton(); - done(); + beforeEach(async() => { + await navigationBarPage.clickHeaderDataButton(); }); - afterAll(async(done) => { + afterAll(async() => { await navigationBarPage.clickLogoutButton(); await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); await this.alfrescoJsApi.activiti.adminTenantsApi.deleteTenant(tenantId); - done(); + }); - it('[C280002] Should be able to view Header component', () => { - headerPage.checkShowMenuCheckBoxIsDisplayed(); - headerPage.checkChooseHeaderColourIsDisplayed(); - headerPage.checkHexColorInputIsDisplayed(); - headerPage.checkChangeTitleIsDisplayed(); - headerPage.checkChangeUrlPathIsDisplayed(); - headerPage.checkLogoHyperlinkInputIsDisplayed(); - headerPage.checkLogoTooltipInputIsDisplayed(); + it('[C280002] Should be able to view Header component', async () => { + await headerPage.checkShowMenuCheckBoxIsDisplayed(); + await headerPage.checkChooseHeaderColourIsDisplayed(); + await headerPage.checkHexColorInputIsDisplayed(); + await headerPage.checkChangeTitleIsDisplayed(); + await headerPage.checkChangeUrlPathIsDisplayed(); + await headerPage.checkLogoHyperlinkInputIsDisplayed(); + await headerPage.checkLogoTooltipInputIsDisplayed(); }); - it('[C279996] Should be able to show/hide menu button', () => { - headerPage.clickShowMenuButton(); - navigationBarPage.checkMenuButtonIsNotDisplayed(); - headerPage.clickShowMenuButton(); - navigationBarPage.checkMenuButtonIsDisplayed(); + it('[C279996] Should be able to show/hide menu button', async () => { + await headerPage.clickShowMenuButton(); + await navigationBarPage.checkMenuButtonIsNotDisplayed(); + await headerPage.clickShowMenuButton(); + await navigationBarPage.checkMenuButtonIsDisplayed(); }); - it('[C279999] Should be able to change the colour between primary, accent and warn', () => { - headerPage.changeHeaderColor(names.color_accent); - navigationBarPage.checkToolbarColor(names.color_accent); - headerPage.changeHeaderColor(names.color_primary); - navigationBarPage.checkToolbarColor(names.color_primary); - headerPage.changeHeaderColor(names.color_warn); - navigationBarPage.checkToolbarColor(names.color_warn); + it('[C279999] Should be able to change the colour between primary, accent and warn', async () => { + await headerPage.changeHeaderColor(names.color_accent); + await navigationBarPage.checkToolbarColor(names.color_accent); + await headerPage.changeHeaderColor(names.color_primary); + await navigationBarPage.checkToolbarColor(names.color_primary); + await headerPage.changeHeaderColor(names.color_warn); + await navigationBarPage.checkToolbarColor(names.color_warn); }); - it('[C280552] Should be able to change the colour of the header by typing a hex code', () => { - headerPage.addHexCodeColor(names.color_custom); - navigationBarPage.checkToolbarColor(names.color_custom); + it('[C280552] Should be able to change the colour of the header by typing a hex code', async () => { + await headerPage.addHexCodeColor(names.color_custom); + await navigationBarPage.checkToolbarColor(names.color_custom); }); - it('[C279997] Should be able to change the title of the app', () => { - headerPage.checkAppTitle(names.app_title_default); - headerPage.addTitle(names.app_title_custom); - headerPage.checkAppTitle(names.app_title_custom); + it('[C279997] Should be able to change the title of the app', async () => { + await headerPage.checkAppTitle(names.app_title_default); + await headerPage.addTitle(names.app_title_custom); + await headerPage.checkAppTitle(names.app_title_custom); }); - it('[C279998] Should be able to change the default logo of the app', () => { - headerPage.checkIconIsDisplayed(names.urlPath_default); - headerPage.addIcon(names.urlPath_custom); - headerPage.checkIconIsDisplayed(names.urlPath_custom); + it('[C279998] Should be able to change the default logo of the app', async () => { + await headerPage.checkIconIsDisplayed(names.urlPath_default); + await headerPage.addIcon(names.urlPath_custom); + await headerPage.checkIconIsDisplayed(names.urlPath_custom); }); - it('[C280553] Should be able to set a hyperlink to the logo', () => { - headerPage.addLogoHyperlink(names.urlPath_logo_link); - navigationBarPage.clickAppLogo(names.logo_title); - settingsPage.checkProviderDropdownIsDisplayed(); + it('[C280553] Should be able to set a hyperlink to the logo', async () => { + await headerPage.addLogoHyperlink(names.urlPath_logo_link); + await navigationBarPage.clickAppLogo(names.logo_title); + await settingsPage.checkProviderDropdownIsDisplayed(); }); - it('[C286517] Should be able to set a hyperlink to the logo text', () => { - headerPage.addLogoHyperlink(names.urlPath_logo_link); - navigationBarPage.clickAppLogoText(); - settingsPage.checkProviderDropdownIsDisplayed(); + it('[C286517] Should be able to set a hyperlink to the logo text', async () => { + await headerPage.addLogoHyperlink(names.urlPath_logo_link); + await navigationBarPage.clickAppLogoText(); + await settingsPage.checkProviderDropdownIsDisplayed(); }); - it('[C280554] Should be able to customise the tooltip-text of the logo', () => { - headerPage.addLogoTooltip(names.logo_tooltip); - navigationBarPage.checkLogoTooltip(names.logo_tooltip); + it('[C280554] Should be able to customise the tooltip-text of the logo', async () => { + await headerPage.addLogoTooltip(names.logo_tooltip); + await navigationBarPage.checkLogoTooltip(names.logo_tooltip); }); - it('[C286297] Should be able to change the position of the sidebar menu', () => { - headerPage.sideBarPositionEnd(); - headerPage.checkSidebarPositionEnd(); - headerPage.sideBarPositionStart(); - headerPage.checkSidebarPositionStart(); + it('[C286297] Should be able to change the position of the sidebar menu', async () => { + await headerPage.sideBarPositionEnd(); + await headerPage.checkSidebarPositionEnd(); + await headerPage.sideBarPositionStart(); + await headerPage.checkSidebarPositionStart(); }); }); diff --git a/e2e/core/icons-component.e2e.ts b/e2e/core/icons-component.e2e.ts index 11c2647a2c..2cff2144fc 100644 --- a/e2e/core/icons-component.e2e.ts +++ b/e2e/core/icons-component.e2e.ts @@ -23,14 +23,14 @@ import { AcsUserModel } from '../models/ACS/acsUserModel'; import { browser } from 'protractor'; import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; -describe('Universal Icon component', function () { +describe('Universal Icon component', () => { const loginPage = new LoginPage(); const acsUser = new AcsUserModel(); const navigationBarPage = new NavigationBarPage(); const iconsPage = new IconsPage(); - beforeAll(async (done) => { + beforeAll(async () => { this.alfrescoJsApi = new AlfrescoApi({ provider: 'ECM', hostEcm: browser.params.testConfig.adf_acs.host @@ -40,25 +40,21 @@ describe('Universal Icon component', function () { await this.alfrescoJsApi.core.peopleApi.addPerson(acsUser); await loginPage.loginToContentServicesUsingUserModel(acsUser); - done(); }); afterAll(async () => { await navigationBarPage.clickLogoutButton(); }); - beforeEach(async (done) => { - navigationBarPage.navigateToIconsPage(); - done(); + beforeEach(async () => { + await navigationBarPage.clickIconsButton(); + }); - it('[C291872] Should display the icons on the page', () => { - - expect(iconsPage.locateLigatureIcon('folder').isDisplayed()).toBe(true, 'Ligature icon is not displayed'); - - expect(iconsPage.locateCustomIcon('adf:move_file').isDisplayed()).toBe(true, 'Named icon is not displayed'); - - expect(iconsPage.locateCustomIcon('adf:folder').isDisplayed()).toBe(true, 'Thumbnail service icon is not displayed'); + it('[C291872] Should display the icons on the page', async () => { + await expect(await iconsPage.isLigatureIconDisplayed('folder')).toBe(true, 'Ligature icon is not displayed'); + await expect(await iconsPage.isCustomIconDisplayed('adf:move_file')).toBe(true, 'Named icon is not displayed'); + await expect(await iconsPage.isCustomIconDisplayed('adf:folder')).toBe(true, 'Thumbnail service icon is not displayed'); }); }); diff --git a/e2e/core/infinite-scrolling.e2e.ts b/e2e/core/infinite-scrolling.e2e.ts index d5c35cce79..86e90277b2 100644 --- a/e2e/core/infinite-scrolling.e2e.ts +++ b/e2e/core/infinite-scrolling.e2e.ts @@ -52,7 +52,7 @@ describe('Enable infinite scrolling', () => { extension: '.txt' }; - beforeAll(async (done) => { + beforeAll(async () => { this.alfrescoJsApi = new AlfrescoApi({ provider: 'ECM', hostEcm: browser.params.testConfig.adf_acs.host @@ -79,81 +79,80 @@ describe('Enable infinite scrolling', () => { await uploadActions.createEmptyFiles(deleteFileNames, deleteUploaded.entry.id); - done(); }); afterAll(async () => { await navigationBarPage.clickLogoutButton(); }); - beforeEach(async (done) => { - navigationBarPage.clickContentServicesButton(); - contentServicesPage.checkAcsContainer(); - done(); + beforeEach(async () => { + await navigationBarPage.clickContentServicesButton(); + await contentServicesPage.checkAcsContainer(); + }); - it('[C260484] Should be possible to enable infinite scrolling', () => { - contentServicesPage.doubleClickRow(folderModel.name); - contentServicesPage.enableInfiniteScrolling(); - infinitePaginationPage.clickLoadMoreButton(); + it('[C260484] Should be possible to enable infinite scrolling', async () => { + await contentServicesPage.doubleClickRow(folderModel.name); + await contentServicesPage.enableInfiniteScrolling(); + await infinitePaginationPage.clickLoadMoreButton(); for (let i = 0; i < nrOfFiles; i++) { - contentServicesPage.checkContentIsDisplayed(fileNames[i]); + await contentServicesPage.checkContentIsDisplayed(fileNames[i]); } }); - it('[C268165] Delete folder when infinite scrolling is enabled', () => { - contentServicesPage.doubleClickRow(deleteUploaded.entry.name); - contentServicesPage.checkAcsContainer(); - contentServicesPage.waitForTableBody(); - contentServicesPage.enableInfiniteScrolling(); - infinitePaginationPage.clickLoadMoreButton(); + it('[C268165] Delete folder when infinite scrolling is enabled', async () => { + await contentServicesPage.doubleClickRow(deleteUploaded.entry.name); + await contentServicesPage.checkAcsContainer(); + await contentServicesPage.waitForTableBody(); + await contentServicesPage.enableInfiniteScrolling(); + await infinitePaginationPage.clickLoadMoreButton(); for (let i = 0; i < nrOfDeletedFiles; i++) { - contentServicesPage.checkContentIsDisplayed(deleteFileNames[i]); + await contentServicesPage.checkContentIsDisplayed(deleteFileNames[i]); } - expect(contentServicesPage.getContentList().dataTablePage().numberOfRows()).toEqual(nrOfDeletedFiles); + await expect(await contentServicesPage.getDocumentList().dataTablePage().numberOfRows()).toEqual(nrOfDeletedFiles); - contentServicesPage.deleteContent(deleteFileNames[nrOfDeletedFiles - 1]); - contentServicesPage.checkContentIsNotDisplayed(deleteFileNames[nrOfDeletedFiles - 1]); + await contentServicesPage.deleteContent(deleteFileNames[nrOfDeletedFiles - 1]); + await contentServicesPage.checkContentIsNotDisplayed(deleteFileNames[nrOfDeletedFiles - 1]); for (let i = 0; i < nrOfDeletedFiles - 1; i++) { - contentServicesPage.checkContentIsDisplayed(deleteFileNames[i]); + await contentServicesPage.checkContentIsDisplayed(deleteFileNames[i]); } }); - it('[C299201] Should use default pagination settings for infinite pagination', () => { - navigationBarPage.clickContentServicesButton(); - contentServicesPage.checkAcsContainer(); - contentServicesPage.doubleClickRow(folderModel.name); + it('[C299201] Should use default pagination settings for infinite pagination', async () => { + await navigationBarPage.clickContentServicesButton(); + await contentServicesPage.checkAcsContainer(); + await contentServicesPage.doubleClickRow(folderModel.name); - contentServicesPage.enableInfiniteScrolling(); - expect(contentServicesPage.numberOfResultsDisplayed()).toBe(pageSize); - infinitePaginationPage.clickLoadMoreButton(); - expect(contentServicesPage.numberOfResultsDisplayed()).toBe(nrOfFiles); + await contentServicesPage.enableInfiniteScrolling(); + await expect(await contentServicesPage.numberOfResultsDisplayed()).toBe(pageSize); + await infinitePaginationPage.clickLoadMoreButton(); + await expect(await contentServicesPage.numberOfResultsDisplayed()).toBe(nrOfFiles); - infinitePaginationPage.checkLoadMoreButtonIsNotDisplayed(); + await infinitePaginationPage.checkLoadMoreButtonIsNotDisplayed(); }); - it('[C299202] Should not display load more button when all the files are already displayed', () => { - LocalStorageUtil.setUserPreference('paginationSize', '30'); + it('[C299202] Should not display load more button when all the files are already displayed', async () => { + await LocalStorageUtil.setUserPreference('paginationSize', '30'); - navigationBarPage.clickContentServicesButton(); - contentServicesPage.checkAcsContainer(); + await navigationBarPage.clickContentServicesButton(); + await contentServicesPage.checkAcsContainer(); - contentServicesPage.doubleClickRow(folderModel.name); + await contentServicesPage.doubleClickRow(folderModel.name); - contentServicesPage.enableInfiniteScrolling(); - expect(contentServicesPage.numberOfResultsDisplayed()).toBe(nrOfFiles); + await contentServicesPage.enableInfiniteScrolling(); + await expect(await contentServicesPage.numberOfResultsDisplayed()).toBe(nrOfFiles); - infinitePaginationPage.checkLoadMoreButtonIsNotDisplayed(); + await infinitePaginationPage.checkLoadMoreButtonIsNotDisplayed(); }); - it('[C299203] Should not display load more button when a folder is empty', () => { - navigationBarPage.clickContentServicesButton(); - contentServicesPage.checkAcsContainer(); + it('[C299203] Should not display load more button when a folder is empty', async () => { + await navigationBarPage.clickContentServicesButton(); + await contentServicesPage.checkAcsContainer(); - contentServicesPage.doubleClickRow(emptyFolderModel.entry.name); + await contentServicesPage.doubleClickRow(emptyFolderModel.entry.name); - infinitePaginationPage.checkLoadMoreButtonIsNotDisplayed(); + await infinitePaginationPage.checkLoadMoreButtonIsNotDisplayed(); }); }); diff --git a/e2e/core/login/login-component.e2e.ts b/e2e/core/login/login-component.e2e.ts index 8839665335..a41cf0a167 100644 --- a/e2e/core/login/login-component.e2e.ts +++ b/e2e/core/login/login-component.e2e.ts @@ -56,7 +56,7 @@ describe('Login component', () => { const invalidUsername = 'invaliduser'; const invalidPassword = 'invalidpassword'; - beforeAll(async (done) => { + beforeAll(async () => { this.alfrescoJsApi = new AlfrescoApi({ provider: 'ALL', hostEcm: browser.params.testConfig.adf_acs.host, @@ -68,218 +68,213 @@ describe('Login component', () => { await this.alfrescoJsApi.core.peopleApi.addPerson(userA); await this.alfrescoJsApi.core.peopleApi.addPerson(userB); - done(); }); it('[C276746] Should display the right information in user-info when a different users logs in', async () => { await loginPage.loginToContentServicesUsingUserModel(userA); - userInfoPage.clickUserProfile(); - expect(userInfoPage.getContentHeaderTitle()).toEqual(userA.firstName + ' ' + userA.lastName); - expect(userInfoPage.getContentEmail()).toEqual(userA.email); + await userInfoPage.clickUserProfile(); + await expect(await userInfoPage.getContentHeaderTitle()).toEqual(userA.firstName + ' ' + userA.lastName); + await expect(await userInfoPage.getContentEmail()).toEqual(userA.email); await loginPage.loginToContentServicesUsingUserModel(userB); - userInfoPage.clickUserProfile(); - expect(userInfoPage.getContentHeaderTitle()).toEqual(userB.firstName + ' ' + userB.lastName); - expect(userInfoPage.getContentEmail()).toEqual(userB.email); + await userInfoPage.clickUserProfile(); + await expect(await userInfoPage.getContentHeaderTitle()).toEqual(userB.firstName + ' ' + userB.lastName); + await expect(await userInfoPage.getContentEmail()).toEqual(userB.email); }); it('[C299206] Should redirect the user without the right access role on a forbidden page', async () => { await loginPage.loginToContentServicesUsingUserModel(userA); - navigationBarPage.navigateToProcessServicesCloudPage(); - expect(errorPage.getErrorCode()).toBe('403'); - expect(errorPage.getErrorTitle()).toBe('You don\'t have permission to access this server.'); - expect(errorPage.getErrorDescription()).toBe('You\'re not allowed access to this resource on the server.'); + await navigationBarPage.navigateToProcessServicesCloudPage(); + await expect(await errorPage.getErrorCode()).toBe('403'); + await expect(await errorPage.getErrorTitle()).toBe('You don\'t have permission to access this server.'); + await expect(await errorPage.getErrorDescription()).toBe('You\'re not allowed access to this resource on the server.'); }); - it('[C260036] Should require username', () => { - loginPage.goToLoginPage(); - loginPage.checkUsernameInactive(); - expect(loginPage.getSignInButtonIsEnabled()).toBe(false); - loginPage.enterUsername('A'); - expect(loginPage.getUsernameTooltip()).toEqual(errorMessages.username); - loginPage.clearUsername(); - expect(loginPage.getUsernameTooltip()).toEqual(errorMessages.required); - loginPage.checkUsernameHighlighted(); - expect(loginPage.getSignInButtonIsEnabled()).toBe(false); + it('[C260036] Should require username', async () => { + await loginPage.goToLoginPage(); + await loginPage.checkUsernameInactive(); + await expect(await loginPage.getSignInButtonIsEnabled()).toBe(false); + await loginPage.enterUsername('A'); + await expect(await loginPage.getUsernameTooltip()).toEqual(errorMessages.username); + await loginPage.clearUsername(); + await expect(await loginPage.getUsernameTooltip()).toEqual(errorMessages.required); + await loginPage.checkUsernameHighlighted(); + await expect(await loginPage.getSignInButtonIsEnabled()).toBe(false); }); - it('[C260043] Should require password', () => { - loginPage.goToLoginPage(); - loginPage.checkPasswordInactive(); - loginPage.checkUsernameInactive(); - loginPage.enterPassword('A'); - loginPage.checkPasswordTooltipIsNotVisible(); - loginPage.clearPassword(); - expect(loginPage.getPasswordTooltip()).toEqual(errorMessages.password); - loginPage.checkPasswordHighlighted(); - expect(loginPage.getSignInButtonIsEnabled()).toBe(false); + it('[C260043] Should require password', async () => { + await loginPage.goToLoginPage(); + await loginPage.checkPasswordInactive(); + await loginPage.checkUsernameInactive(); + await loginPage.enterPassword('A'); + await loginPage.checkPasswordTooltipIsNotVisible(); + await loginPage.clearPassword(); + await expect(await loginPage.getPasswordTooltip()).toEqual(errorMessages.password); + await loginPage.checkPasswordHighlighted(); + await expect(await loginPage.getSignInButtonIsEnabled()).toBe(false); }); - it('[C260044] Username should be at least 2 characters long', () => { - loginPage.goToLoginPage(); - expect(loginPage.getSignInButtonIsEnabled()).toBe(false); - loginPage.enterUsername('A'); - expect(loginPage.getUsernameTooltip()).toEqual(errorMessages.username); - loginPage.enterUsername('AB'); - loginPage.checkUsernameTooltipIsNotVisible(); - expect(loginPage.getSignInButtonIsEnabled()).toBe(false); - loginPage.clearUsername(); + it('[C260044] Username should be at least 2 characters long', async () => { + await loginPage.goToLoginPage(); + await expect(await loginPage.getSignInButtonIsEnabled()).toBe(false); + await loginPage.enterUsername('A'); + await expect(await loginPage.getUsernameTooltip()).toEqual(errorMessages.username); + await loginPage.enterUsername('AB'); + await loginPage.checkUsernameTooltipIsNotVisible(); + await expect(await loginPage.getSignInButtonIsEnabled()).toBe(false); + await loginPage.clearUsername(); }); - it('[C260045] Should enable login button after entering a valid username and a password', () => { - loginPage.goToLoginPage(); - loginPage.enterUsername(adminUserModel.id); - expect(loginPage.getSignInButtonIsEnabled()).toBe(false); - loginPage.enterPassword('a'); - expect(loginPage.getSignInButtonIsEnabled()).toBe(true); - loginPage.clearUsername(); - loginPage.clearPassword(); + it('[C260045] Should enable login button after entering a valid username and a password', async () => { + await loginPage.goToLoginPage(); + await loginPage.enterUsername(adminUserModel.id); + await expect(await loginPage.getSignInButtonIsEnabled()).toBe(false); + await loginPage.enterPassword('a'); + await expect(await loginPage.getSignInButtonIsEnabled()).toBe(true); + await loginPage.clearUsername(); + await loginPage.clearPassword(); }); - it('[C260046] Should NOT be possible to login with an invalid username/password', () => { - loginPage.goToLoginPage(); - expect(loginPage.getSignInButtonIsEnabled()).toBe(false); - loginPage.enterUsername('test'); - loginPage.enterPassword('test'); - expect(loginPage.getSignInButtonIsEnabled()).toBe(true); - loginPage.clickSignInButton(); - expect(loginPage.getLoginError()).toEqual(errorMessages.invalid_credentials); - loginPage.clearUsername(); - loginPage.clearPassword(); + it('[C260046] Should NOT be possible to login with an invalid username/password', async () => { + await loginPage.goToLoginPage(); + await expect(await loginPage.getSignInButtonIsEnabled()).toBe(false); + await loginPage.enterUsername('test'); + await loginPage.enterPassword('test'); + await expect(await loginPage.getSignInButtonIsEnabled()).toBe(true); + await loginPage.clickSignInButton(); + await expect(await loginPage.getLoginError()).toEqual(errorMessages.invalid_credentials); + await loginPage.clearUsername(); + await loginPage.clearPassword(); }); - it('[C260047] Password should be crypted', () => { - loginPage.goToLoginPage(); - expect(loginPage.getSignInButtonIsEnabled()).toBe(false); - loginPage.enterPassword('test'); - loginPage.showPassword(); - loginPage.getShownPassword().then(async (tooltip) => { - await expect(tooltip).toEqual('test'); - }); - loginPage.hidePassword(); - loginPage.checkPasswordIsHidden(); - loginPage.clearPassword(); + it('[C260047] Password should be crypted', async () => { + await loginPage.goToLoginPage(); + await expect(await loginPage.getSignInButtonIsEnabled()).toBe(false); + await loginPage.enterPassword('test'); + await loginPage.showPassword(); + const tooltip = await loginPage.getShownPassword(); + await expect(tooltip).toEqual('test'); + await loginPage.hidePassword(); + await loginPage.checkPasswordIsHidden(); + await loginPage.clearPassword(); }); - it('[C260048] Should be possible to enable/disable login footer', () => { - loginPage.goToLoginPage(); - loginPage.enableFooter(); - loginPage.checkRememberIsDisplayed(); - loginPage.checkNeedHelpIsDisplayed(); - loginPage.checkRegisterDisplayed(); - loginPage.disableFooter(); - loginPage.checkRememberIsNotDisplayed(); - loginPage.checkNeedHelpIsNotDisplayed(); - loginPage.checkRegisterIsNotDisplayed(); + it('[C260048] Should be possible to enable/disable login footer', async () => { + await loginPage.goToLoginPage(); + await loginPage.enableFooter(); + await loginPage.checkRememberIsDisplayed(); + await loginPage.checkNeedHelpIsDisplayed(); + await loginPage.checkRegisterDisplayed(); + await loginPage.disableFooter(); + await loginPage.checkRememberIsNotDisplayed(); + await loginPage.checkNeedHelpIsNotDisplayed(); + await loginPage.checkRegisterIsNotDisplayed(); }); - it('[C260049] Should be possible to login to Process Services with Content Services disabled', () => { - loginPage.goToLoginPage(); - expect(loginPage.getSignInButtonIsEnabled()).toBe(false); - loginPage.clickSettingsIcon(); - settingsPage.setProviderBpm(); - loginPage.login(adminUserModel.id, adminUserModel.password); - navigationBarPage.navigateToProcessServicesPage(); - processServicesPage.checkApsContainer(); - navigationBarPage.clickContentServicesButton(); - loginPage.waitForElements(); + it('[C260049] Should be possible to login to Process Services with Content Services disabled', async () => { + await loginPage.goToLoginPage(); + await expect(await loginPage.getSignInButtonIsEnabled()).toBe(false); + await loginPage.clickSettingsIcon(); + await settingsPage.setProviderBpm(); + await loginPage.login(adminUserModel.id, adminUserModel.password); + await navigationBarPage.navigateToProcessServicesPage(); + await processServicesPage.checkApsContainer(); + await navigationBarPage.clickContentServicesButton(); + await loginPage.waitForElements(); }); - it('[C260050] Should be possible to login to Content Services with Process Services disabled', () => { - loginPage.goToLoginPage(); - expect(loginPage.getSignInButtonIsEnabled()).toBe(false); - loginPage.clickSettingsIcon(); - settingsPage.setProviderEcm(); - loginPage.login(browser.params.testConfig.adf.adminUser, browser.params.testConfig.adf.adminPassword); - navigationBarPage.clickContentServicesButton(); - contentServicesPage.checkAcsContainer(); + it('[C260050] Should be possible to login to Content Services with Process Services disabled', async () => { + await loginPage.goToLoginPage(); + await expect(await loginPage.getSignInButtonIsEnabled()).toBe(false); + await loginPage.clickSettingsIcon(); + await settingsPage.setProviderEcm(); + await loginPage.login(browser.params.testConfig.adf.adminUser, browser.params.testConfig.adf.adminPassword); + await navigationBarPage.clickContentServicesButton(); + await contentServicesPage.checkAcsContainer(); }); - it('[C260051] Should be able to login to both Content Services and Process Services', () => { - loginPage.goToLoginPage(); - loginPage.clickSettingsIcon(); - settingsPage.setProviderEcmBpm(); - expect(loginPage.getSignInButtonIsEnabled()).toBe(false); - loginPage.clickSettingsIcon(); - settingsPage.setProviderEcmBpm(); - loginPage.login(adminUserModel.id, adminUserModel.password); - navigationBarPage.navigateToProcessServicesPage(); - processServicesPage.checkApsContainer(); - navigationBarPage.clickContentServicesButton(); - contentServicesPage.checkAcsContainer(); - navigationBarPage.clickLoginButton(); - loginPage.waitForElements(); + it('[C260051] Should be able to login to both Content Services and Process Services', async () => { + await loginPage.goToLoginPage(); + await loginPage.clickSettingsIcon(); + await settingsPage.setProviderEcmBpm(); + await expect(await loginPage.getSignInButtonIsEnabled()).toBe(false); + await loginPage.clickSettingsIcon(); + await settingsPage.setProviderEcmBpm(); + await loginPage.login(adminUserModel.id, adminUserModel.password); + await navigationBarPage.navigateToProcessServicesPage(); + await processServicesPage.checkApsContainer(); + await navigationBarPage.clickContentServicesButton(); + await contentServicesPage.checkAcsContainer(); + await navigationBarPage.clickLoginButton(); + await loginPage.waitForElements(); }); - it('[C277754] Should the user be redirect to the login page when the Content Service session expire', () => { - loginPage.goToLoginPage(); - loginPage.clickSettingsIcon(); - settingsPage.setProviderEcmBpm(); - loginPage.login(adminUserModel.id, adminUserModel.password); - browser.executeScript('window.localStorage.removeItem("ticket-ECM");'); - BrowserActions.getUrl(browser.params.testConfig.adf.url + '/files'); - loginPage.waitForElements(); + it('[C277754] Should the user be redirect to the login page when the Content Service session expire', async () => { + await loginPage.goToLoginPage(); + await loginPage.clickSettingsIcon(); + await settingsPage.setProviderEcmBpm(); + await loginPage.login(adminUserModel.id, adminUserModel.password); + await browser.executeScript('window.localStorage.removeItem("ticket-ECM");'); + await BrowserActions.getUrl(browser.params.testConfig.adf.url + '/files'); + await loginPage.waitForElements(); }); - it('[C279932] Should successRoute property change the landing page when the user Login', () => { - loginPage.goToLoginPage(); - loginPage.clickSettingsIcon(); - settingsPage.setProviderEcmBpm(); - loginPage.enableSuccessRouteSwitch(); - loginPage.enterSuccessRoute('activiti'); - loginPage.login(adminUserModel.id, adminUserModel.password); - processServicesPage.checkApsContainer(); + it('[C279932] Should successRoute property change the landing page when the user Login', async () => { + await loginPage.goToLoginPage(); + await loginPage.clickSettingsIcon(); + await settingsPage.setProviderEcmBpm(); + await loginPage.enableSuccessRouteSwitch(); + await loginPage.enterSuccessRoute('activiti'); + await loginPage.login(adminUserModel.id, adminUserModel.password); + await processServicesPage.checkApsContainer(); }); - it('[C279931] Should the user be redirect to the login page when the Process Service session expire', () => { - loginPage.goToLoginPage(); - loginPage.clickSettingsIcon(); - settingsPage.setProviderEcmBpm(); - loginPage.login(adminUserModel.id, adminUserModel.password); - browser.executeScript('window.localStorage.removeItem("ticket-BPM");'); - BrowserActions.getUrl(browser.params.testConfig.adf.url + '/activiti'); - loginPage.waitForElements(); + it('[C279931] Should the user be redirect to the login page when the Process Service session expire', async () => { + await loginPage.goToLoginPage(); + await loginPage.clickSettingsIcon(); + await settingsPage.setProviderEcmBpm(); + await loginPage.login(adminUserModel.id, adminUserModel.password); + await browser.executeScript('window.localStorage.removeItem("ticket-BPM");'); + await BrowserActions.getUrl(browser.params.testConfig.adf.url + '/activiti'); + await loginPage.waitForElements(); }); - it('[C279930] Should a user still be logged-in when open a new tab', () => { - loginPage.goToLoginPage(); - loginPage.clickSettingsIcon(); - settingsPage.setProviderEcmBpm(); - loginPage.login(adminUserModel.id, adminUserModel.password); + it('[C279930] Should a user still be logged-in when open a new tab', async () => { + await loginPage.goToLoginPage(); + await loginPage.clickSettingsIcon(); + await settingsPage.setProviderEcmBpm(); + await loginPage.login(adminUserModel.id, adminUserModel.password); - Util.openNewTabInBrowser(); + await Util.openNewTabInBrowser(); - browser.getAllWindowHandles().then((handles) => { - - browser.switchTo().window(handles[1]).then(() => { - BrowserActions.getUrl(browser.params.testConfig.adf.url + '/activiti'); - processServicesPage.checkApsContainer(); - BrowserActions.getUrl(browser.params.testConfig.adf.url + '/files'); - contentServicesPage.checkAcsContainer(); - }); - }); + const handles = await browser.getAllWindowHandles(); + await browser.switchTo().window(handles[1]); + await BrowserActions.getUrl(browser.params.testConfig.adf.url + '/activiti'); + await processServicesPage.checkApsContainer(); + await BrowserActions.getUrl(browser.params.testConfig.adf.url + '/files'); + await contentServicesPage.checkAcsContainer(); }); - it('[C279933] Should be possible change the login component logo when logoImageUrl is changed', () => { - loginPage.goToLoginPage(); - loginPage.clickSettingsIcon(); - settingsPage.setProviderEcmBpm(); - loginPage.enableLogoSwitch(); - loginPage.enterLogo('https://rawgit.com/Alfresco/alfresco-ng2-components/master/assets/angular2.png'); - loginPage.checkLoginImgURL(); + it('[C279933] Should be possible change the login component logo when logoImageUrl is changed', async () => { + await loginPage.goToLoginPage(); + await loginPage.clickSettingsIcon(); + await settingsPage.setProviderEcmBpm(); + await loginPage.enableLogoSwitch(); + await loginPage.enterLogo('https://rawgit.com/Alfresco/alfresco-ng2-components/master/assets/angular2.png'); + await loginPage.checkLoginImgURL(); }); - it('[C291854] Should be possible login in valid credentials', () => { - BrowserActions.getUrl(browser.params.testConfig.adf.url); - loginPage.waitForElements(); - expect(loginPage.getSignInButtonIsEnabled()).toBe(false); - loginPage.enterUsername(invalidUsername); - expect(loginPage.getSignInButtonIsEnabled()).toBe(false); - loginPage.enterPassword(invalidPassword); - expect(loginPage.getSignInButtonIsEnabled()).toBe(true); - loginPage.clickSignInButton(); - expect(loginPage.getLoginError()).toEqual(errorMessages.invalid_credentials); - loginPage.login(adminUserModel.id, adminUserModel.password); + it('[C291854] Should be possible login in valid credentials', async () => { + await BrowserActions.getUrl(browser.params.testConfig.adf.url); + await loginPage.waitForElements(); + await expect(await loginPage.getSignInButtonIsEnabled()).toBe(false); + await loginPage.enterUsername(invalidUsername); + await expect(await loginPage.getSignInButtonIsEnabled()).toBe(false); + await loginPage.enterPassword(invalidPassword); + await expect(await loginPage.getSignInButtonIsEnabled()).toBe(true); + await loginPage.clickSignInButton(); + await expect(await loginPage.getLoginError()).toEqual(errorMessages.invalid_credentials); + await loginPage.login(adminUserModel.id, adminUserModel.password); }); }); diff --git a/e2e/core/login/login-sso/login-sso-error.e2e.ts b/e2e/core/login/login-sso/login-sso-error.e2e.ts index c9b668c746..7db8469589 100644 --- a/e2e/core/login/login-sso/login-sso-error.e2e.ts +++ b/e2e/core/login/login-sso/login-sso-error.e2e.ts @@ -36,7 +36,7 @@ describe('Login component - SSO', () => { browser.params.testConfig.adf.hostIdentity, false, true, browser.params.config.oauth2.clientId); await loginSSOPage.clickOnSSOButton(); await loginSSOPage.checkLoginErrorIsDisplayed(); - expect(loginSSOPage.getLoginErrorMessage()).toContain('SSO Authentication server unreachable'); + await expect(loginSSOPage.getLoginErrorMessage()).toContain('SSO Authentication server unreachable'); }); }); diff --git a/e2e/core/login/login-sso/login-sso.e2e.ts b/e2e/core/login/login-sso/login-sso.e2e.ts index c17c891641..0ec2ef55a7 100644 --- a/e2e/core/login/login-sso/login-sso.e2e.ts +++ b/e2e/core/login/login-sso/login-sso.e2e.ts @@ -15,7 +15,7 @@ * limitations under the License. */ -import { LoginSSOPage, SettingsPage, LoginPage } from '@alfresco/adf-testing'; +import { LoginSSOPage, SettingsPage, LoginPage, BrowserVisibility } from '@alfresco/adf-testing'; import { browser } from 'protractor'; import { NavigationBarPage } from '../../../pages/adf/navigationBarPage'; @@ -29,19 +29,30 @@ describe('Login component - SSO', () => { const silentLogin = false; let implicitFlow; - it('[C280665] Should be possible change the logout redirect URL', async () => { - await settingsPage.setProviderEcmSso(browser.params.testConfig.adf.url, - browser.params.testConfig.adf.hostSso, - browser.params.testConfig.adf.hostIdentity, false, true, browser.params.config.oauth2.clientId, '/login'); - await loginSSOPage.clickOnSSOButton(); - await loginSSOPage.loginSSOIdentityService(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); - await navigationBarPage.clickLogoutButton(); + describe('Login component - SSO implicit Flow', () => { - browser.sleep(2000); - - browser.getCurrentUrl().then((actualUrl) => { - expect(actualUrl).toEqual(browser.params.testConfig.adf.url + '/login'); + afterEach(async () => { + await navigationBarPage.clickLogoutButton(); + await browser.executeScript('window.sessionStorage.clear();'); + await browser.executeScript('window.localStorage.clear();'); + await browser.refresh(); }); + + it('[C261050] Should be possible login with SSO', async () => { + await settingsPage.setProviderEcmSso(browser.params.testConfig.adf_acs.host, + browser.params.testConfig.adf.hostSso, + browser.params.testConfig.adf.hostIdentity, false, true, browser.params.config.oauth2.clientId); + await loginSSOPage.clickOnSSOButton(); + await loginSSOPage.loginSSOIdentityService(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); + }); + + it('[C280667] Should be redirect directly to keycloak without show the login page with silent login', async () => { + await settingsPage.setProviderEcmSso(browser.params.testConfig.adf_acs.host, + browser.params.testConfig.adf.hostSso, + browser.params.testConfig.adf.hostIdentity, true, true, browser.params.config.oauth2.clientId); + await loginSSOPage.loginSSOIdentityService(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); + }); + }); describe('Login component - SSO Grant type password (implicit flow false)', () => { @@ -54,54 +65,12 @@ describe('Login component - SSO', () => { await loginPage.waitForElements(); - await settingsPage.setProviderEcmSso(browser.params.testConfig.adf_acs.host, - browser.params.testConfig.adf.hostSso, - browser.params.testConfig.adf.hostIdentity, silentLogin, implicitFlow, browser.params.config.oauth2.clientId); - browser.ignoreSynchronization = true; - await loginPage.enterUsername(browser.params.testConfig.adf.adminEmail); await loginPage.enterPassword(browser.params.testConfig.adf.adminPassword); await loginPage.clickSignInButton(); - let isDisplayed = false; + await BrowserVisibility.waitUntilElementIsVisible(loginPage.sidenavLayout); - browser.wait(() => { - loginPage.header.isDisplayed().then( - () => { - isDisplayed = true; - }, - () => { - isDisplayed = false; - } - ); - return isDisplayed; - }, browser.params.testConfig.main.timeout, 'Element is not visible ' + loginPage.header.locator()); }); }); - - describe('Login component - SSO implicit Flow', () => { - - afterEach(() => { - navigationBarPage.clickLogoutButton(); - browser.executeScript('window.sessionStorage.clear();'); - browser.executeScript('window.localStorage.clear();'); - }); - - it('[C261050] Should be possible login with SSO', async () => { - await settingsPage.setProviderEcmSso(browser.params.testConfig.adf_acs.host, - browser.params.testConfig.adf.hostSso, - browser.params.testConfig.adf.hostIdentity, false, true, browser.params.config.oauth2.clientId); - await loginSSOPage.clickOnSSOButton(); - await loginSSOPage.loginSSOIdentityService(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); - }); - - it('[C280667] Should be redirect directly to keycloak without show the login page with silent login', async () => { - await settingsPage.setProviderEcmSso(browser.params.testConfig.adf_acs.host, - browser.params.testConfig.adf.hostSso, - browser.params.testConfig.adf.hostIdentity, true, true, browser.params.config.oauth2.clientId); - await loginSSOPage.loginSSOIdentityService(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); - }); - - }); - }); diff --git a/e2e/core/login/login-sso/logout-sso.e2e.ts b/e2e/core/login/login-sso/logout-sso.e2e.ts new file mode 100644 index 0000000000..5cddbe0ddf --- /dev/null +++ b/e2e/core/login/login-sso/logout-sso.e2e.ts @@ -0,0 +1,42 @@ +/*! + * @license + * Copyright 2019 Alfresco Software, Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { LoginSSOPage, SettingsPage } from '@alfresco/adf-testing'; +import { browser } from 'protractor'; +import { NavigationBarPage } from '../../../pages/adf/navigationBarPage'; + +describe('Logout component - SSO', () => { + + const settingsPage = new SettingsPage(); + const loginSSOPage = new LoginSSOPage(); + const navigationBarPage = new NavigationBarPage(); + + it('[C280665] Should be possible change the logout redirect URL', async () => { + await settingsPage.setProviderEcmSso(browser.params.testConfig.adf.url, + browser.params.testConfig.adf.hostSso, + browser.params.testConfig.adf.hostIdentity, false, true, browser.params.config.oauth2.clientId, '/login'); + await loginSSOPage.clickOnSSOButton(); + await loginSSOPage.loginSSOIdentityService(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); + await navigationBarPage.clickLogoutButton(); + + await browser.sleep(2000); + + const actualUrl = await browser.getCurrentUrl(); + await expect(actualUrl).toEqual(browser.params.testConfig.adf.url + '/login'); + }); + +}); diff --git a/e2e/core/login/redirection.e2e.ts b/e2e/core/login/redirection.e2e.ts index 4e8cdff225..1e00ff1ece 100644 --- a/e2e/core/login/redirection.e2e.ts +++ b/e2e/core/login/redirection.e2e.ts @@ -48,7 +48,7 @@ describe('Login component - Redirect', () => { const uploadActions = new UploadActions(this.alfrescoJsApi); const logoutPage = new LogoutPage(); - beforeAll(async (done) => { + beforeAll(async () => { await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); @@ -59,118 +59,111 @@ describe('Login component - Redirect', () => { uploadedFolder = await uploadActions.createFolder('protecteFolder' + StringUtil.generateRandomString(), '-my-'); - done(); }); - it('[C213838] Should after login in CS be redirect to Login page when try to access to PS', () => { - loginPage.goToLoginPage(); - loginPage.clickSettingsIcon(); - settingsPage.setProviderEcm(); - loginPage.login(user.id, user.password); + it('[C213838] Should after login in CS be redirect to Login page when try to access to PS', async () => { + await loginPage.goToLoginPage(); + await loginPage.clickSettingsIcon(); + await settingsPage.setProviderEcm(); + await loginPage.login(user.id, user.password); - navigationBarPage.clickContentServicesButton(); - contentServicesPage.checkAcsContainer(); + await navigationBarPage.clickContentServicesButton(); + await contentServicesPage.checkAcsContainer(); - navigationBarPage.navigateToProcessServicesPage(); + await navigationBarPage.navigateToProcessServicesPage(); - loginPage.waitForElements(); + await loginPage.waitForElements(); }); - it('[C260085] Should after login in PS be redirect to Login page when try to access to CS', () => { - loginPage.goToLoginPage(); - loginPage.clickSettingsIcon(); - settingsPage.setProviderBpm(); + it('[C260085] Should after login in PS be redirect to Login page when try to access to CS', async () => { + await loginPage.goToLoginPage(); + await loginPage.clickSettingsIcon(); + await settingsPage.setProviderBpm(); - loginPage.enableSuccessRouteSwitch(); - loginPage.enterSuccessRoute('activiti'); + await loginPage.enableSuccessRouteSwitch(); + await loginPage.enterSuccessRoute('activiti'); - loginPage.login(adminUserModel.id, adminUserModel.password); + await loginPage.login(adminUserModel.id, adminUserModel.password); - navigationBarPage.navigateToProcessServicesPage(); - processServicesPage.checkApsContainer(); + await navigationBarPage.navigateToProcessServicesPage(); + await processServicesPage.checkApsContainer(); - navigationBarPage.clickContentServicesButton(); + await navigationBarPage.clickContentServicesButton(); - loginPage.waitForElements(); + await loginPage.waitForElements(); }); - it('[C260081] Should after login in BOTH not be redirect to Login page when try to access to CS or PS', () => { - loginPage.goToLoginPage(); - loginPage.clickSettingsIcon(); + it('[C260081] Should after login in BOTH not be redirect to Login page when try to access to CS or PS', async () => { + await loginPage.goToLoginPage(); + await loginPage.clickSettingsIcon(); - settingsPage.setProviderEcmBpm(); + await settingsPage.setProviderEcmBpm(); - loginPage.login(adminUserModel.id, adminUserModel.password); + await loginPage.login(adminUserModel.id, adminUserModel.password); - navigationBarPage.navigateToProcessServicesPage(); - processServicesPage.checkApsContainer(); + await navigationBarPage.navigateToProcessServicesPage(); + await processServicesPage.checkApsContainer(); - navigationBarPage.clickContentServicesButton(); - contentServicesPage.checkAcsContainer(); + await navigationBarPage.clickContentServicesButton(); + await contentServicesPage.checkAcsContainer(); }); - it('[C260088] Should be re-redirect to the request URL after login when try to access to a protect URL ', () => { - loginPage.goToLoginPage(); - loginPage.clickSettingsIcon(); - settingsPage.setProviderEcm(); - loginPage.login(user.id, user.password); + it('[C260088] Should be re-redirect to the request URL after login when try to access to a protect URL ', async () => { + await loginPage.goToLoginPage(); + await loginPage.clickSettingsIcon(); + await settingsPage.setProviderEcm(); + await loginPage.login(user.id, user.password); - navigationBarPage.openContentServicesFolder(uploadedFolder.entry.id); + await navigationBarPage.openContentServicesFolder(uploadedFolder.entry.id); - browser.getCurrentUrl().then((actualUrl) => { - expect(actualUrl).toEqual(browser.params.testConfig.adf.url + '/files/' + uploadedFolder.entry.id); - }); + let actualUrl = await browser.getCurrentUrl(); + await expect(actualUrl).toEqual(browser.params.testConfig.adf.url + '/files/' + uploadedFolder.entry.id); - contentServicesPage.waitForTableBody(); + await contentServicesPage.waitForTableBody(); - navigationBarPage.clickLogoutButton(); + await navigationBarPage.clickLogoutButton(); - logoutPage.checkLogoutSectionIsDisplayed(); + await logoutPage.checkLogoutSectionIsDisplayed(); - navigationBarPage.openContentServicesFolder(uploadedFolder.entry.id); + await navigationBarPage.openContentServicesFolder(uploadedFolder.entry.id); - loginPage.waitForElements(); + await loginPage.waitForElements(); - loginPage.login(user.id, user.password); - - browser.getCurrentUrl().then((actualUrl) => { - expect(actualUrl).toEqual(browser.params.testConfig.adf.url + '/files/' + uploadedFolder.entry.id); - }); + await loginPage.login(user.id, user.password); + actualUrl = await browser.getCurrentUrl(); + await expect(actualUrl).toEqual(browser.params.testConfig.adf.url + '/files/' + uploadedFolder.entry.id); }); - it('[C299161] Should redirect user to requested URL after reloading login page', () => { - loginPage.goToLoginPage(); - loginPage.clickSettingsIcon(); - settingsPage.setProviderEcm(); - loginPage.login(user.id, user.password); + it('[C299161] Should redirect user to requested URL after reloading login page', async () => { + await loginPage.goToLoginPage(); + await loginPage.clickSettingsIcon(); + await settingsPage.setProviderEcm(); + await loginPage.login(user.id, user.password); - navigationBarPage.openContentServicesFolder(uploadedFolder.entry.id); + await navigationBarPage.openContentServicesFolder(uploadedFolder.entry.id); - browser.getCurrentUrl().then((actualUrl) => { - expect(actualUrl).toEqual(browser.params.testConfig.adf.url + '/files/' + uploadedFolder.entry.id); - }); + const currentUrl = await browser.getCurrentUrl(); + await expect(currentUrl).toEqual(browser.params.testConfig.adf.url + '/files/' + uploadedFolder.entry.id); - contentServicesPage.waitForTableBody(); + await contentServicesPage.waitForTableBody(); - navigationBarPage.clickLogoutButton(); + await navigationBarPage.clickLogoutButton(); - logoutPage.checkLogoutSectionIsDisplayed(); + await logoutPage.checkLogoutSectionIsDisplayed(); - navigationBarPage.openContentServicesFolder(uploadedFolder.entry.id); - loginPage.waitForElements(); - browser.refresh(); - loginPage.waitForElements(); + await navigationBarPage.openContentServicesFolder(uploadedFolder.entry.id); + await loginPage.waitForElements(); + await browser.refresh(); + await loginPage.waitForElements(); - loginPage.enterUsername(user.id); - loginPage.enterPassword(user.password); - loginPage.clickSignInButton(); + await loginPage.enterUsername(user.id); + await loginPage.enterPassword(user.password); + await loginPage.clickSignInButton(); - navigationBarPage.checkMenuButtonIsDisplayed(); - - browser.getCurrentUrl().then((actualUrl) => { - expect(actualUrl).toEqual(browser.params.testConfig.adf.url + '/files/' + uploadedFolder.entry.id); - }); + await navigationBarPage.checkMenuButtonIsDisplayed(); + const actualUrl = await browser.getCurrentUrl(); + await expect(actualUrl).toEqual(browser.params.testConfig.adf.url + '/files/' + uploadedFolder.entry.id); }); }); diff --git a/e2e/core/login/remember-me.e2e.ts b/e2e/core/login/remember-me.e2e.ts index 24213ac962..53bb57fdb1 100644 --- a/e2e/core/login/remember-me.e2e.ts +++ b/e2e/core/login/remember-me.e2e.ts @@ -22,16 +22,15 @@ describe('Login component - Remember Me', () => { const settingsPage = new SettingsPage(); const loginPage = new LoginPage(); - beforeAll((done) => { - loginPage.goToLoginPage(); - loginPage.clickSettingsIcon(); - settingsPage.setProviderEcmBpm(); - done(); + beforeAll(async () => { + await loginPage.goToLoginPage(); + await loginPage.clickSettingsIcon(); + await settingsPage.setProviderEcmBpm(); }); - it('[C260501] Should Remember me checkbox not be present in the login if the property showRememberMe is false', () => { - loginPage.checkRememberIsDisplayed(); - loginPage.disableRememberMe(); - loginPage.checkRememberIsNotDisplayed(); + it('[C260501] Should Remember me checkbox not be present in the login if the property showRememberMe is false', async () => { + await loginPage.checkRememberIsDisplayed(); + await loginPage.disableRememberMe(); + await loginPage.checkRememberIsNotDisplayed(); }); }); diff --git a/e2e/core/pagination-empty-current-page.e2e.ts b/e2e/core/pagination-empty-current-page.e2e.ts index 7ff27bbeb3..22b926f2dd 100644 --- a/e2e/core/pagination-empty-current-page.e2e.ts +++ b/e2e/core/pagination-empty-current-page.e2e.ts @@ -30,7 +30,6 @@ import { UploadActions } from '@alfresco/adf-testing'; import { Util } from '../util/util'; import resources = require('../util/resources'); import { browser } from 'protractor'; -import { NavigationBarPage } from '../pages/adf/navigationBarPage'; describe('Pagination - returns to previous page when current is empty', () => { @@ -38,7 +37,6 @@ describe('Pagination - returns to previous page when current is empty', () => { const contentServicesPage = new ContentServicesPage(); const paginationPage = new PaginationPage(); const viewerPage = new ViewerPage(); - const navigationBarPage = new NavigationBarPage(); const acsUser = new AcsUserModel(); const folderModel = new FolderModel({ 'name': 'folderOne' }); @@ -67,7 +65,7 @@ describe('Pagination - returns to previous page when current is empty', () => { 'location': resources.Files.ADF_DOCUMENTS.PNG.file_location }); - beforeAll(async (done) => { + beforeAll(async () => { this.alfrescoJsApi = new AlfrescoApi({ provider: 'ECM', hostEcm: browser.params.testConfig.adf_acs.host @@ -98,79 +96,71 @@ describe('Pagination - returns to previous page when current is empty', () => { await loginPage.loginToContentServicesUsingUserModel(acsUser); - contentServicesPage.goToDocumentList(); - - done(); - }); - - afterAll(async () => { - await navigationBarPage.clickLogoutButton(); - }); - - it('[C274710] Should redirect to previous page when current is emptied', () => { - contentServicesPage.doubleClickRow(folderModel.name); - contentServicesPage.checkAcsContainer(); - contentServicesPage.waitForTableBody(); - - paginationPage.selectItemsPerPage(itemsPerPage.five); - - contentServicesPage.checkAcsContainer(); - contentServicesPage.waitForTableBody(); - - expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.five); - expect(contentServicesPage.numberOfResultsDisplayed()).toBe(itemsPerPage.fiveValue); - - contentServicesPage.getAllRowsNameColumn().then((list) => { - expect(Util.arrayContainsArray(list, fileNames.slice(0, 5))).toEqual(true); - }); - - paginationPage.clickOnNextPage(); - - contentServicesPage.checkAcsContainer(); - contentServicesPage.waitForTableBody(); - - expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.five); - - contentServicesPage.getAllRowsNameColumn().then((list) => { - expect(Util.arrayContainsArray(list, fileNames.slice(5, 6))).toEqual(true); - }); - - contentServicesPage.deleteContent(lastFile); - contentServicesPage.checkContentIsNotDisplayed(lastFile); - - expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.five); - expect(contentServicesPage.numberOfResultsDisplayed()).toBe(itemsPerPage.fiveValue); - - contentServicesPage.getAllRowsNameColumn().then((list) => { - expect(Util.arrayContainsArray(list, fileNames.slice(0, 5))).toEqual(true); - }); + await contentServicesPage.goToDocumentList(); }); - it('[C297494] Should display content when navigating to a non-empty folder not in the first page', () => { - contentServicesPage.goToDocumentList(); - contentServicesPage.doubleClickRow(parentFolderModel.name); - contentServicesPage.checkAcsContainer(); - contentServicesPage.waitForTableBody(); + it('[C274710] Should redirect to previous page when current is emptied', async () => { + await contentServicesPage.doubleClickRow(folderModel.name); + await contentServicesPage.checkAcsContainer(); + await contentServicesPage.waitForTableBody(); - paginationPage.selectItemsPerPage(itemsPerPage.five); + await paginationPage.selectItemsPerPage(itemsPerPage.five); - contentServicesPage.checkAcsContainer(); - contentServicesPage.waitForTableBody(); + await contentServicesPage.checkAcsContainer(); + await contentServicesPage.waitForTableBody(); - expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.five); - expect(contentServicesPage.numberOfResultsDisplayed()).toBe(itemsPerPage.fiveValue); + await expect(await paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.five); + await expect(await contentServicesPage.numberOfResultsDisplayed()).toBe(itemsPerPage.fiveValue); - paginationPage.clickOnNextPage(); + let list = await contentServicesPage.getAllRowsNameColumn(); + await expect(Util.arrayContainsArray(list, fileNames.slice(0, 5))).toEqual(true); - contentServicesPage.checkAcsContainer(); - contentServicesPage.waitForTableBody(); + await paginationPage.clickOnNextPage(); - contentServicesPage.doubleClickRow(lastFolderResponse.entry.name); - contentServicesPage.checkContentIsDisplayed(pngFileInfo.name); + await contentServicesPage.checkAcsContainer(); + await contentServicesPage.waitForTableBody(); - viewerPage.viewFile(pngFileUploaded.entry.name); - viewerPage.checkImgViewerIsDisplayed(); - viewerPage.clickCloseButton(); + await expect(await paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.five); + + list = await contentServicesPage.getAllRowsNameColumn(); + await expect(Util.arrayContainsArray(list, fileNames.slice(5, 6))).toEqual(true); + + await contentServicesPage.deleteContent(lastFile); + await contentServicesPage.checkContentIsNotDisplayed(lastFile); + + await expect(await paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.five); + await expect(await contentServicesPage.numberOfResultsDisplayed()).toBe(itemsPerPage.fiveValue); + + list = await contentServicesPage.getAllRowsNameColumn(); + await expect(Util.arrayContainsArray(list, fileNames.slice(0, 5))).toEqual(true); + + }); + + it('[C297494] Should display content when navigating to a non-empty folder not in the first page', async () => { + await contentServicesPage.goToDocumentList(); + await contentServicesPage.doubleClickRow(parentFolderModel.name); + await contentServicesPage.checkAcsContainer(); + await contentServicesPage.waitForTableBody(); + + await paginationPage.selectItemsPerPage(itemsPerPage.five); + + await contentServicesPage.checkAcsContainer(); + await contentServicesPage.waitForTableBody(); + + await expect(await paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.five); + await expect(await contentServicesPage.numberOfResultsDisplayed()).toBe(itemsPerPage.fiveValue); + + await paginationPage.clickOnNextPage(); + + await contentServicesPage.checkAcsContainer(); + await contentServicesPage.waitForTableBody(); + + await contentServicesPage.doubleClickRow(lastFolderResponse.entry.name); + await contentServicesPage.checkContentIsDisplayed(pngFileInfo.name); + + await viewerPage.viewFile(pngFileUploaded.entry.name); + await viewerPage.checkImgViewerIsDisplayed(); + await viewerPage.clickCloseButton(); }); }); diff --git a/e2e/core/settings-component.e2e.ts b/e2e/core/settings-component.e2e.ts index 4900537f27..bc6fd7f4b9 100644 --- a/e2e/core/settings-component.e2e.ts +++ b/e2e/core/settings-component.e2e.ts @@ -39,179 +39,182 @@ describe('Settings component', () => { }); describe('Should be able to change Urls in the Settings', () => { - beforeEach( (done) => { - settingsPage.goToSettingsPage(); - done(); - }); - - it('[C245641] Should navigate User from Settings page to Login screen', () => { - settingsPage.clickBackButton(); - loginPage.waitForElements(); - }); - - it('[C291948] Should save ALL Settings changes when User clicks Apply button', () => { - loginPage.goToLoginPage(); - loginPage.clickSettingsIcon(); - settingsPage.setProviderEcmBpm(); - loginPage.waitForElements(); - settingsPage.goToSettingsPage(); - expect(settingsPage.getSelectedOptionText()).toEqual('ALL', 'The Settings changes are not saved'); - expect(settingsPage.getBpmHostUrl()).toEqual(browser.params.testConfig.adf_aps.host, 'The BPM Settings changes are not saved'); - expect(settingsPage.getEcmHostUrl()).toEqual(browser.params.testConfig.adf_acs.host, 'The ECM Settings changes are not saved'); + beforeEach(async () => { + await settingsPage.goToSettingsPage(); }); - it('[C291949] Should have field validation for Content Services Url', () => { - settingsPage.setProvider(settingsPage.getEcmAndBpmOption(), 'ALL'); - settingsPage.clearContentServicesURL(); - settingsPage.ecmText.sendKeys(protractor.Key.TAB); - settingsPage.checkValidationMessageIsDisplayed(); - settingsPage.checkApplyButtonIsDisabled(); + it('[C245641] Should navigate User from Settings page to Login screen', async () => { + await settingsPage.clickBackButton(); + await loginPage.waitForElements(); }); - it('[C291950] Should have field validation for Process Services Url', () => { - settingsPage.setProvider(settingsPage.getEcmAndBpmOption(), 'ALL'); - settingsPage.clearProcessServicesURL(); - settingsPage.bpmText.sendKeys(protractor.Key.TAB); - settingsPage.checkValidationMessageIsDisplayed(); - settingsPage.checkApplyButtonIsDisabled(); + it('[C291948] Should save ALL Settings changes when User clicks Apply button', async () => { + await loginPage.goToLoginPage(); + await loginPage.clickSettingsIcon(); + await settingsPage.setProviderEcmBpm(); + await loginPage.waitForElements(); + await settingsPage.goToSettingsPage(); + await expect(await settingsPage.getSelectedOptionText()).toEqual('ALL', 'The Settings changes are not saved'); + await expect(await settingsPage.getBpmHostUrl()).toEqual(browser.params.testConfig.adf_aps.host, 'The BPM Settings changes are not saved'); + await expect(await settingsPage.getEcmHostUrl()).toEqual(browser.params.testConfig.adf_acs.host, 'The ECM Settings changes are not saved'); + }); - it('[C291951] Should not be able to sign in with invalid Content Services Url', () => { - settingsPage.setProvider(settingsPage.getEcmOption(), 'ECM'); - settingsPage.setContentServicesURL('http://localhost:7070'); - settingsPage.clickApply(); - loginPage.waitForElements(); - loginPage.enterUsername(adminUserModel.id); - loginPage.enterPassword(adminUserModel.password); - loginPage.clickSignInButton(); - expect(loginPage.getLoginError()).toMatch(loginError); + it('[C291949] Should have field validation for Content Services Url', async () => { + await settingsPage.setProvider(settingsPage.getEcmAndBpmOption(), 'ALL'); + await settingsPage.clearContentServicesURL(); + await settingsPage.ecmText.sendKeys(protractor.Key.TAB); + await settingsPage.checkValidationMessageIsDisplayed(); + await settingsPage.checkApplyButtonIsDisabled(); }); - it('[C291952] Should not be able to sign in with invalid Process Services Url', () => { - settingsPage.setProvider(settingsPage.getBpmOption(), 'BPM'); - settingsPage.setProcessServicesURL('http://localhost:7070'); - settingsPage.clickApply(); - loginPage.waitForElements(); - loginPage.enterUsername(adminUserModel.id); - loginPage.enterPassword(adminUserModel.password); - loginPage.clickSignInButton(); - expect(loginPage.getLoginError()).toMatch(loginError); + it('[C291950] Should have field validation for Process Services Url', async () => { + await settingsPage.setProvider(settingsPage.getEcmAndBpmOption(), 'ALL'); + await settingsPage.clearProcessServicesURL(); + await settingsPage.bpmText.sendKeys(protractor.Key.TAB); + await settingsPage.checkValidationMessageIsDisplayed(); + await settingsPage.checkApplyButtonIsDisabled(); + }); + + it('[C291951] Should not be able to sign in with invalid Content Services Url', async () => { + await settingsPage.setProvider(settingsPage.getEcmOption(), 'ECM'); + await settingsPage.setContentServicesURL('http://localhost:7070'); + await settingsPage.clickApply(); + await loginPage.waitForElements(); + await loginPage.enterUsername(adminUserModel.id); + await loginPage.enterPassword(adminUserModel.password); + await loginPage.clickSignInButton(); + await expect(await loginPage.getLoginError()).toMatch(loginError); + }); + + it('[C291952] Should not be able to sign in with invalid Process Services Url', async () => { + await settingsPage.setProvider(settingsPage.getBpmOption(), 'BPM'); + await settingsPage.setProcessServicesURL('http://localhost:7070'); + await settingsPage.clickApply(); + await loginPage.waitForElements(); + await loginPage.enterUsername(adminUserModel.id); + await loginPage.enterPassword(adminUserModel.password); + await loginPage.clickSignInButton(); + await expect(await loginPage.getLoginError()).toMatch(loginError); }); }); describe('Settings Component - Basic Authentication', () => { - beforeAll( (done) => { - settingsPage.goToSettingsPage(); - settingsPage.setProvider(settingsPage.getEcmAndBpmOption(), 'ALL'); - settingsPage.setContentServicesURL(browser.params.testConfig.adf_acs.host); - settingsPage.setProcessServicesURL(browser.params.testConfig.adf_aps.host); - settingsPage.clickApply(); - done(); + beforeAll(async () => { + await settingsPage.goToSettingsPage(); + await settingsPage.setProvider(settingsPage.getEcmAndBpmOption(), 'ALL'); + await settingsPage.setContentServicesURL(browser.params.testConfig.adf_acs.host); + await settingsPage.setProcessServicesURL(browser.params.testConfig.adf_aps.host); + await settingsPage.clickApply(); }); - beforeEach( (done) => { - loginPage.goToLoginPage(); - loginPage.clickSettingsIcon(); - settingsPage.checkProviderDropdownIsDisplayed(); - done(); + beforeEach(async () => { + await loginPage.goToLoginPage(); + await loginPage.clickSettingsIcon(); + await settingsPage.checkProviderDropdownIsDisplayed(); }); - it('[C277751] Should allow the User to login to Process Services using the BPM selection on Settings page', () => { - settingsPage.checkProviderOptions(); - settingsPage.checkBasicAuthRadioIsSelected(); - settingsPage.checkSsoRadioIsNotSelected(); - expect(settingsPage.getEcmHostUrl()).toBe(browser.params.testConfig.adf_acs.host); - expect(settingsPage.getBpmHostUrl()).toBe(browser.params.testConfig.adf_aps.host); - expect(settingsPage.getBackButton().isEnabled()).toBe(true); - expect(settingsPage.getApplyButton().isEnabled()).toBe(true); - loginPage.goToLoginPage(); - loginPage.clickSettingsIcon(); - settingsPage.checkProviderDropdownIsDisplayed(); - settingsPage.setProvider(settingsPage.getBpmOption(), 'BPM'); - settingsPage.clickBackButton(); - loginPage.waitForElements(); - loginPage.clickSettingsIcon(); - settingsPage.checkProviderDropdownIsDisplayed(); - settingsPage.setProviderBpm(); - loginPage.waitForElements(); - loginPage.enterUsername(adminUserModel.id); - loginPage.enterPassword(adminUserModel.password); - loginPage.clickSignInButton(); - navigationBarPage.navigateToProcessServicesPage(); - processServicesPage.checkApsContainer(); - processServicesPage.checkAppIsDisplayed('Task App'); - navigationBarPage.navigateToSettingsPage(); - expect(settingsPage.getSelectedOptionText()).toBe('BPM'); - settingsPage.checkBasicAuthRadioIsSelected(); - settingsPage.checkSsoRadioIsNotSelected(); - expect(settingsPage.getBpmHostUrl()).toBe(browser.params.testConfig.adf_aps.host); - expect(settingsPage.getBackButton().isEnabled()).toBe(true); - expect(settingsPage.getApplyButton().isEnabled()).toBe(true); - settingsPage.clickBackButton(); - loginPage.waitForElements(); - BrowserActions.getUrl(browser.params.testConfig.adf.url + '/activiti'); - processServicesPage.checkApsContainer(); - processServicesPage.checkAppIsDisplayed('Task App'); + it('[C277751] Should allow the User to login to Process Services using the BPM selection on Settings page', async () => { + await settingsPage.checkProviderOptions(); + await settingsPage.checkBasicAuthRadioIsSelected(); + await settingsPage.checkSsoRadioIsNotSelected(); + await expect(await settingsPage.getEcmHostUrl()).toBe(browser.params.testConfig.adf_acs.host); + await expect(await settingsPage.getBpmHostUrl()).toBe(browser.params.testConfig.adf_aps.host); + + await expect(await settingsPage.getBackButton().isEnabled()).toBe(true); + await expect(await settingsPage.getApplyButton().isEnabled()).toBe(true); + await loginPage.goToLoginPage(); + await loginPage.clickSettingsIcon(); + await settingsPage.checkProviderDropdownIsDisplayed(); + await settingsPage.setProvider(settingsPage.getBpmOption(), 'BPM'); + await settingsPage.clickBackButton(); + await loginPage.waitForElements(); + await loginPage.clickSettingsIcon(); + await settingsPage.checkProviderDropdownIsDisplayed(); + await settingsPage.setProviderBpm(); + await loginPage.waitForElements(); + await loginPage.enterUsername(adminUserModel.id); + await loginPage.enterPassword(adminUserModel.password); + await loginPage.clickSignInButton(); + await navigationBarPage.navigateToProcessServicesPage(); + await processServicesPage.checkApsContainer(); + await processServicesPage.checkAppIsDisplayed('Task App'); + await navigationBarPage.clickSettingsButton(); + await expect(await settingsPage.getSelectedOptionText()).toBe('BPM'); + + await settingsPage.checkBasicAuthRadioIsSelected(); + await settingsPage.checkSsoRadioIsNotSelected(); + await expect(await settingsPage.getBpmHostUrl()).toBe(browser.params.testConfig.adf_aps.host); + + await expect(await settingsPage.getBackButton().isEnabled()).toBe(true); + await expect(await settingsPage.getApplyButton().isEnabled()).toBe(true); + await settingsPage.clickBackButton(); + await loginPage.waitForElements(); + await BrowserActions.getUrl(browser.params.testConfig.adf.url + '/activiti'); + await processServicesPage.checkApsContainer(); + await processServicesPage.checkAppIsDisplayed('Task App'); }); - it('[C277752] Should allow the User to login to Content Services using the ECM selection on Settings page', () => { - settingsPage.setProvider(settingsPage.getEcmOption(), 'ECM'); - settingsPage.clickBackButton(); - loginPage.waitForElements(); - loginPage.clickSettingsIcon(); - settingsPage.checkProviderDropdownIsDisplayed(); - settingsPage.setProviderEcm(); - loginPage.waitForElements(); - loginPage.enterUsername(adminUserModel.id); - loginPage.enterPassword(adminUserModel.password); - loginPage.clickSignInButton(); - navigationBarPage.clickContentServicesButton(); - contentServicesPage.checkAcsContainer(); - navigationBarPage.navigateToSettingsPage(); - expect(settingsPage.getSelectedOptionText()).toBe('ECM'); - settingsPage.checkBasicAuthRadioIsSelected(); - settingsPage.checkSsoRadioIsNotSelected(); - expect(settingsPage.getEcmHostUrl()).toBe(browser.params.testConfig.adf_acs.host); - expect(settingsPage.getBackButton().isEnabled()).toBe(true); - expect(settingsPage.getApplyButton().isEnabled()).toBe(true); - settingsPage.clickBackButton(); - loginPage.waitForElements(); - BrowserActions.getUrl(browser.params.testConfig.adf.url + '/files'); - contentServicesPage.checkAcsContainer(); + it('[C277752] Should allow the User to login to Content Services using the ECM selection on Settings page', async () => { + await settingsPage.setProvider(settingsPage.getEcmOption(), 'ECM'); + await settingsPage.clickBackButton(); + await loginPage.waitForElements(); + await loginPage.clickSettingsIcon(); + await settingsPage.checkProviderDropdownIsDisplayed(); + await settingsPage.setProviderEcm(); + await loginPage.waitForElements(); + await loginPage.enterUsername(adminUserModel.id); + await loginPage.enterPassword(adminUserModel.password); + await loginPage.clickSignInButton(); + await navigationBarPage.clickContentServicesButton(); + await contentServicesPage.checkAcsContainer(); + await navigationBarPage.clickSettingsButton(); + await expect(await settingsPage.getSelectedOptionText()).toBe('ECM'); + await settingsPage.checkBasicAuthRadioIsSelected(); + await settingsPage.checkSsoRadioIsNotSelected(); + + await expect(await settingsPage.getEcmHostUrl()).toBe(browser.params.testConfig.adf_acs.host); + await expect(await settingsPage.getBackButton().isEnabled()).toBe(true); + await expect(await settingsPage.getApplyButton().isEnabled()).toBe(true); + await settingsPage.clickBackButton(); + await loginPage.waitForElements(); + await BrowserActions.getUrl(browser.params.testConfig.adf.url + '/files'); + await contentServicesPage.checkAcsContainer(); }); - it('[C277753] Should allow the User to login to both Process Services and Content Services using the ALL selection on Settings Page', () => { - settingsPage.setProvider(settingsPage.getEcmAndBpmOption(), 'ALL'); - settingsPage.clickBackButton(); - loginPage.waitForElements(); - loginPage.clickSettingsIcon(); - settingsPage.checkProviderDropdownIsDisplayed(); - settingsPage.setProviderEcmBpm(); - loginPage.waitForElements(); - loginPage.enterUsername(adminUserModel.id); - loginPage.enterPassword(adminUserModel.password); - loginPage.clickSignInButton(); - navigationBarPage.clickContentServicesButton(); - contentServicesPage.checkAcsContainer(); - navigationBarPage.navigateToProcessServicesPage(); - processServicesPage.checkApsContainer(); - processServicesPage.checkAppIsDisplayed('Task App'); - navigationBarPage.navigateToSettingsPage(); - expect(settingsPage.getSelectedOptionText()).toBe('ALL'); - settingsPage.checkBasicAuthRadioIsSelected(); - settingsPage.checkSsoRadioIsNotSelected(); - expect(settingsPage.getEcmHostUrl()).toBe(browser.params.testConfig.adf_acs.host); - expect(settingsPage.getBpmHostUrl()).toBe(browser.params.testConfig.adf_aps.host); - expect(settingsPage.getBackButton().isEnabled()).toBe(true); - expect(settingsPage.getApplyButton().isEnabled()).toBe(true); - settingsPage.clickBackButton(); - loginPage.waitForElements(); - BrowserActions.getUrl(browser.params.testConfig.adf.url + '/files'); - contentServicesPage.checkAcsContainer(); - BrowserActions.getUrl(browser.params.testConfig.adf.url + '/activiti'); - processServicesPage.checkApsContainer(); - processServicesPage.checkAppIsDisplayed('Task App'); + it('[C277753] Should allow the User to login to both Process Services and Content Services using the ALL selection on Settings Page', async () => { + await settingsPage.setProvider(settingsPage.getEcmAndBpmOption(), 'ALL'); + await settingsPage.clickBackButton(); + await loginPage.waitForElements(); + await loginPage.clickSettingsIcon(); + await settingsPage.checkProviderDropdownIsDisplayed(); + await settingsPage.setProviderEcmBpm(); + await loginPage.waitForElements(); + await loginPage.enterUsername(adminUserModel.id); + await loginPage.enterPassword(adminUserModel.password); + await loginPage.clickSignInButton(); + await navigationBarPage.clickContentServicesButton(); + await contentServicesPage.checkAcsContainer(); + await navigationBarPage.navigateToProcessServicesPage(); + await processServicesPage.checkApsContainer(); + await processServicesPage.checkAppIsDisplayed('Task App'); + await navigationBarPage.clickSettingsButton(); + await expect(await settingsPage.getSelectedOptionText()).toBe('ALL'); + await settingsPage.checkBasicAuthRadioIsSelected(); + await settingsPage.checkSsoRadioIsNotSelected(); + await expect(await settingsPage.getEcmHostUrl()).toBe(browser.params.testConfig.adf_acs.host); + await expect(await settingsPage.getBpmHostUrl()).toBe(browser.params.testConfig.adf_aps.host); + + await expect(await settingsPage.getBackButton().isEnabled()).toBe(true); + await expect(await settingsPage.getApplyButton().isEnabled()).toBe(true); + await settingsPage.clickBackButton(); + await loginPage.waitForElements(); + await BrowserActions.getUrl(browser.params.testConfig.adf.url + '/files'); + await contentServicesPage.checkAcsContainer(); + await BrowserActions.getUrl(browser.params.testConfig.adf.url + '/activiti'); + await processServicesPage.checkApsContainer(); + await processServicesPage.checkAppIsDisplayed('Task App'); }); }); }); diff --git a/e2e/core/user-info-component-cloud.e2e.ts b/e2e/core/user-info-component-cloud.e2e.ts index 27c9559f73..8a144a10d6 100644 --- a/e2e/core/user-info-component-cloud.e2e.ts +++ b/e2e/core/user-info-component-cloud.e2e.ts @@ -28,7 +28,7 @@ describe('User Info - SSO', () => { let silentLogin, identityUser; let identityService: IdentityService; - beforeAll(async (done) => { + beforeAll(async () => { const apiService = new ApiService(browser.params.config.oauth2.clientId, browser.params.testConfig.adf.url, browser.params.testConfig.adf.hostSso, 'ECM'); await apiService.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); @@ -36,15 +36,14 @@ describe('User Info - SSO', () => { identityUser = await identityService.createIdentityUser(); silentLogin = false; - settingsPage.setProviderEcmSso(browser.params.testConfig.adf.url, + await settingsPage.setProviderEcmSso(browser.params.testConfig.adf.url, browser.params.testConfig.adf.hostSso, browser.params.testConfig.adf.hostIdentity, silentLogin, true, browser.params.config.oauth2.clientId); - loginSSOPage.clickOnSSOButton(); + await loginSSOPage.clickOnSSOButton(); - loginSSOPage.loginSSOIdentityService(identityUser.email, identityUser.password); + await loginSSOPage.loginSSOIdentityService(identityUser.email, identityUser.password); - done(); }); afterAll(async () => { @@ -53,13 +52,13 @@ describe('User Info - SSO', () => { } }); - it('[C290066] Should display UserInfo when login using SSO', () => { - userInfoPage.clickUserProfile(); - expect(userInfoPage.getSsoHeaderTitle()).toEqual(identityUser.firstName + ' ' + identityUser.lastName); - expect(userInfoPage.getSsoTitle()).toEqual(identityUser.firstName + ' ' + identityUser.lastName); - expect(userInfoPage.getSsoEmail()).toEqual(identityUser.email); - userInfoPage.closeUserProfile(); - userInfoPage.dialogIsNotDisplayed(); + it('[C290066] Should display UserInfo when login using SSO', async () => { + await userInfoPage.clickUserProfile(); + await expect(await userInfoPage.getSsoHeaderTitle()).toEqual(identityUser.firstName + ' ' + identityUser.lastName); + await expect(await userInfoPage.getSsoTitle()).toEqual(identityUser.firstName + ' ' + identityUser.lastName); + await expect(await userInfoPage.getSsoEmail()).toEqual(identityUser.email); + await userInfoPage.closeUserProfile(); + await userInfoPage.dialogIsNotDisplayed(); }); }); diff --git a/e2e/core/user-info-component.e2e.ts b/e2e/core/user-info-component.e2e.ts index 0cb7f5e5d8..e65bb4a5c2 100644 --- a/e2e/core/user-info-component.e2e.ts +++ b/e2e/core/user-info-component.e2e.ts @@ -46,7 +46,7 @@ describe('User Info component', () => { 'location': resources.Files.PROFILE_IMAGES.BPM.file_location }); - beforeAll(async (done) => { + beforeAll(async () => { const users = new UsersActions(); this.alfrescoJsApi = new AlfrescoApi({ @@ -69,7 +69,6 @@ describe('User Info component', () => { await this.alfrescoJsApi.core.peopleApi.addPerson(contentUserModel); - done(); }); afterAll(async () => { @@ -79,86 +78,86 @@ describe('User Info component', () => { it('[C260111] Should display UserInfo when Process Services and Content Services are enabled', async () => { await loginPage.loginToAllUsingUserModel(contentUserModel); - userInfoPage.clickUserProfile(); + await userInfoPage.clickUserProfile(); - expect(userInfoPage.getContentHeaderTitle()).toEqual(contentUserModel.firstName + ' ' + contentUserModel.lastName); - expect(userInfoPage.getContentTitle()).toEqual(contentUserModel.firstName + ' ' + contentUserModel.lastName); - expect(userInfoPage.getContentEmail()).toEqual(contentUserModel.email); - expect(userInfoPage.getContentJobTitle()).toEqual('N/A'); + await expect(await userInfoPage.getContentHeaderTitle()).toEqual(contentUserModel.firstName + ' ' + contentUserModel.lastName); + await expect(await userInfoPage.getContentTitle()).toEqual(contentUserModel.firstName + ' ' + contentUserModel.lastName); + await expect(await userInfoPage.getContentEmail()).toEqual(contentUserModel.email); + await expect(await userInfoPage.getContentJobTitle()).toEqual('N/A'); - userInfoPage.checkInitialImage(); - userInfoPage.APSProfileImageNotDisplayed(); - userInfoPage.ACSProfileImageNotDisplayed(); - userInfoPage.clickOnContentServicesTab(); + await userInfoPage.checkInitialImage(); + await userInfoPage.APSProfileImageNotDisplayed(); + await userInfoPage.ACSProfileImageNotDisplayed(); + await userInfoPage.clickOnContentServicesTab(); - expect(userInfoPage.getContentHeaderTitle()).toEqual(contentUserModel.firstName + ' ' + contentUserModel.lastName); - expect(userInfoPage.getContentTitle()).toEqual(contentUserModel.firstName + ' ' + contentUserModel.lastName); - expect(userInfoPage.getContentEmail()).toEqual(contentUserModel.email); - expect(userInfoPage.getContentJobTitle()).toEqual('N/A'); + await expect(await userInfoPage.getContentHeaderTitle()).toEqual(contentUserModel.firstName + ' ' + contentUserModel.lastName); + await expect(await userInfoPage.getContentTitle()).toEqual(contentUserModel.firstName + ' ' + contentUserModel.lastName); + await expect(await userInfoPage.getContentEmail()).toEqual(contentUserModel.email); + await expect(await userInfoPage.getContentJobTitle()).toEqual('N/A'); - userInfoPage.checkInitialImage(); - userInfoPage.APSProfileImageNotDisplayed(); - userInfoPage.ACSProfileImageNotDisplayed(); - userInfoPage.clickOnProcessServicesTab(); - userInfoPage.checkProcessServicesTabIsSelected(); + await userInfoPage.checkInitialImage(); + await userInfoPage.APSProfileImageNotDisplayed(); + await userInfoPage.ACSProfileImageNotDisplayed(); + await userInfoPage.clickOnProcessServicesTab(); + await userInfoPage.checkProcessServicesTabIsSelected(); - expect(userInfoPage.getProcessHeaderTitle()).toEqual(contentUserModel.firstName + ' ' + contentUserModel.lastName); - expect(userInfoPage.getProcessTitle()).toEqual(contentUserModel.firstName + ' ' + processUserModel.lastName); - expect(userInfoPage.getProcessEmail()).toEqual(contentUserModel.email); + await expect(await userInfoPage.getProcessHeaderTitle()).toEqual(contentUserModel.firstName + ' ' + contentUserModel.lastName); + await expect(await userInfoPage.getProcessTitle()).toEqual(contentUserModel.firstName + ' ' + processUserModel.lastName); + await expect(await userInfoPage.getProcessEmail()).toEqual(contentUserModel.email); - userInfoPage.checkInitialImage(); - userInfoPage.APSProfileImageNotDisplayed(); - userInfoPage.ACSProfileImageNotDisplayed(); - userInfoPage.closeUserProfile(); + await userInfoPage.checkInitialImage(); + await userInfoPage.APSProfileImageNotDisplayed(); + await userInfoPage.ACSProfileImageNotDisplayed(); + await userInfoPage.closeUserProfile(); }); it('[C260113] Should display UserInfo when Content Services is enabled and Process Services is disabled', async () => { await loginPage.loginToContentServicesUsingUserModel(contentUserModel); - userInfoPage.clickUserProfile(); - userInfoPage.dialogIsDisplayed(); + await userInfoPage.clickUserProfile(); + await userInfoPage.dialogIsDisplayed(); - expect(userInfoPage.getContentHeaderTitle()).toEqual(contentUserModel.firstName + ' ' + contentUserModel.lastName); - expect(userInfoPage.getContentTitle()).toEqual(contentUserModel.firstName + ' ' + contentUserModel.lastName); - expect(userInfoPage.getContentEmail()).toEqual(contentUserModel.email); - expect(userInfoPage.getContentJobTitle()).toEqual('N/A'); + await expect(await userInfoPage.getContentHeaderTitle()).toEqual(contentUserModel.firstName + ' ' + contentUserModel.lastName); + await expect(await userInfoPage.getContentTitle()).toEqual(contentUserModel.firstName + ' ' + contentUserModel.lastName); + await expect(await userInfoPage.getContentEmail()).toEqual(contentUserModel.email); + await expect(await userInfoPage.getContentJobTitle()).toEqual('N/A'); - userInfoPage.checkInitialImage(); - userInfoPage.APSProfileImageNotDisplayed(); - userInfoPage.ACSProfileImageNotDisplayed(); - userInfoPage.closeUserProfile(); - userInfoPage.dialogIsNotDisplayed(); + await userInfoPage.checkInitialImage(); + await userInfoPage.APSProfileImageNotDisplayed(); + await userInfoPage.ACSProfileImageNotDisplayed(); + await userInfoPage.closeUserProfile(); + await userInfoPage.dialogIsNotDisplayed(); }); it('[C260115] Should display UserInfo when Process Services is enabled and Content Services is disabled', async () => { await loginPage.loginToProcessServicesUsingUserModel(contentUserModel); - userInfoPage.clickUserProfile(); + await userInfoPage.clickUserProfile(); - userInfoPage.dialogIsDisplayed(); + await userInfoPage.dialogIsDisplayed(); - expect(userInfoPage.getProcessHeaderTitle()).toEqual(processUserModel.firstName + ' ' + processUserModel.lastName); - expect(userInfoPage.getProcessTitle()).toEqual(processUserModel.firstName + ' ' + processUserModel.lastName); - expect(userInfoPage.getProcessEmail()).toEqual(processUserModel.email); + await expect(await userInfoPage.getProcessHeaderTitle()).toEqual(processUserModel.firstName + ' ' + processUserModel.lastName); + await expect(await userInfoPage.getProcessTitle()).toEqual(processUserModel.firstName + ' ' + processUserModel.lastName); + await expect(await userInfoPage.getProcessEmail()).toEqual(processUserModel.email); - userInfoPage.checkInitialImage(); - userInfoPage.APSProfileImageNotDisplayed(); - userInfoPage.ACSProfileImageNotDisplayed(); - userInfoPage.closeUserProfile(); + await userInfoPage.checkInitialImage(); + await userInfoPage.APSProfileImageNotDisplayed(); + await userInfoPage.ACSProfileImageNotDisplayed(); + await userInfoPage.closeUserProfile(); }); it('[C260117] Should display UserInfo with profile image uploaded in ACS', async () => { await PeopleAPI.updateAvatarViaAPI(contentUserModel, acsAvatarFileModel, '-me-'); - await PeopleAPI.getAvatarViaAPI(4, contentUserModel, '-me-', function () { + await PeopleAPI.getAvatarViaAPI(4, contentUserModel, '-me-', async() => { }); await loginPage.loginToContentServicesUsingUserModel(contentUserModel); - userInfoPage.clickUserProfile(); + await userInfoPage.clickUserProfile(); - userInfoPage.checkACSProfileImage(); - userInfoPage.APSProfileImageNotDisplayed(); - userInfoPage.closeUserProfile(); + await userInfoPage.checkACSProfileImage(); + await userInfoPage.APSProfileImageNotDisplayed(); + await userInfoPage.closeUserProfile(); }); it('[C260118] Should display UserInfo with profile image uploaded in APS', async () => { @@ -168,12 +167,12 @@ describe('User Info component', () => { await loginPage.loginToProcessServicesUsingUserModel(contentUserModel); - userInfoPage.clickUserProfile(); + await userInfoPage.clickUserProfile(); - userInfoPage.checkAPSProfileImage(); - userInfoPage.ACSProfileImageNotDisplayed(); - userInfoPage.initialImageNotDisplayed(); - userInfoPage.closeUserProfile(); + await userInfoPage.checkAPSProfileImage(); + await userInfoPage.ACSProfileImageNotDisplayed(); + await userInfoPage.initialImageNotDisplayed(); + await userInfoPage.closeUserProfile(); }); it('[C260120] Should not display profile image in UserInfo when deleted in ACS', async () => { @@ -181,11 +180,11 @@ describe('User Info component', () => { await loginPage.loginToContentServicesUsingUserModel(contentUserModel); - userInfoPage.clickUserProfile(); + await userInfoPage.clickUserProfile(); - userInfoPage.checkInitialImage(); - userInfoPage.APSProfileImageNotDisplayed(); - userInfoPage.ACSProfileImageNotDisplayed(); - userInfoPage.closeUserProfile(); + await userInfoPage.checkInitialImage(); + await userInfoPage.APSProfileImageNotDisplayed(); + await userInfoPage.ACSProfileImageNotDisplayed(); + await userInfoPage.closeUserProfile(); }); }); diff --git a/e2e/core/viewer/file-extensions/viewer-arcive.component.e2e.ts b/e2e/core/viewer/file-extensions/viewer-archive.component.e2e.ts similarity index 84% rename from e2e/core/viewer/file-extensions/viewer-arcive.component.e2e.ts rename to e2e/core/viewer/file-extensions/viewer-archive.component.e2e.ts index 1cfd2d7943..5632a07662 100644 --- a/e2e/core/viewer/file-extensions/viewer-arcive.component.e2e.ts +++ b/e2e/core/viewer/file-extensions/viewer-archive.component.e2e.ts @@ -47,24 +47,19 @@ describe('Viewer', () => { 'location': resources.Files.ADF_DOCUMENTS.ARCHIVE_FOLDER.folder_location }); - beforeAll(async (done) => { - + beforeAll(async () => { await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); await this.alfrescoJsApi.core.peopleApi.addPerson(acsUser); - site = await this.alfrescoJsApi.core.sitesApi.createSite({ title: StringUtil.generateRandomString(8), visibility: 'PUBLIC' }); - await this.alfrescoJsApi.core.sitesApi.addSiteMember(site.entry.id, { id: acsUser.id, role: CONSTANTS.CS_USER_ROLES.MANAGER }); - await this.alfrescoJsApi.login(acsUser.id, acsUser.password); - done(); }); afterAll(async () => { @@ -75,32 +70,28 @@ describe('Viewer', () => { let uploadedArchives; let archiveFolderUploaded; - beforeAll(async (done) => { + beforeAll(async () => { archiveFolderUploaded = await uploadActions.createFolder(archiveFolderInfo.name, '-my-'); - uploadedArchives = await uploadActions.uploadFolder(archiveFolderInfo.location, archiveFolderUploaded.entry.id); - await loginPage.loginToContentServicesUsingUserModel(acsUser); - contentServicesPage.goToDocumentList(); + await contentServicesPage.goToDocumentList(); - done(); }); - afterAll(async (done) => { + afterAll(async () => { await uploadActions.deleteFileOrFolder(archiveFolderUploaded.entry.id); - done(); + }); - it('[C260517] Should be possible to open any Archive file', () => { - contentServicesPage.doubleClickRow('archive'); - - uploadedArchives.forEach((currentFile) => { - if (currentFile.entry.name !== '.DS_Store') { - contentServicesPage.doubleClickRow(currentFile.entry.name); - viewerPage.checkFileIsLoaded(); - viewerPage.clickCloseButton(); + it('[C260517] Should be possible to open any Archive file', async () => { + await contentServicesPage.doubleClickRow('archive'); + for (const file of uploadedArchives) { + if (file.entry.name !== '.DS_Store') { + await contentServicesPage.doubleClickRow(file.entry.name); + await viewerPage.checkFileIsLoaded(); + await viewerPage.clickCloseButton(); } - }); + } }); }); diff --git a/e2e/core/viewer/file-extensions/viewer-component.e2e.ts b/e2e/core/viewer/file-extensions/viewer-component.e2e.ts index af51099397..87ed1e3d00 100644 --- a/e2e/core/viewer/file-extensions/viewer-component.e2e.ts +++ b/e2e/core/viewer/file-extensions/viewer-component.e2e.ts @@ -53,7 +53,7 @@ describe('Viewer', () => { 'location': resources.Files.ADF_DOCUMENTS.OTHER_FOLDER.folder_location }); - beforeAll(async (done) => { + beforeAll(async () => { await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); await this.alfrescoJsApi.core.peopleApi.addPerson(acsUser); @@ -70,7 +70,7 @@ describe('Viewer', () => { await this.alfrescoJsApi.login(acsUser.id, acsUser.password); pngFileUploaded = await uploadActions.uploadFile(pngFileInfo.location, pngFileInfo.name, site.entry.guid); - done(); + }); afterAll(async () => { @@ -80,14 +80,14 @@ describe('Viewer', () => { it('[C272813] Should be redirected to site when opening and closing a file in a site', async () => { await loginPage.loginToContentServicesUsingUserModel(acsUser); - navigationBarPage.goToSite(site); - contentServicesPage.checkAcsContainer(); + await navigationBarPage.goToSite(site); + await contentServicesPage.checkAcsContainer(); - viewerPage.viewFile(pngFileUploaded.entry.name); + await viewerPage.viewFile(pngFileUploaded.entry.name); - viewerPage.checkImgViewerIsDisplayed(); + await viewerPage.checkImgViewerIsDisplayed(); - viewerPage.clickCloseButton(); + await viewerPage.clickCloseButton(); }); describe('Other Folder Uploaded', () => { @@ -95,32 +95,30 @@ describe('Viewer', () => { let uploadedOthers; let otherFolderUploaded; - beforeAll(async (done) => { + beforeAll(async () => { otherFolderUploaded = await uploadActions.createFolder(otherFolderInfo.name, '-my-'); uploadedOthers = await uploadActions.uploadFolder(otherFolderInfo.location, otherFolderUploaded.entry.id); await loginPage.loginToContentServicesUsingUserModel(acsUser); - contentServicesPage.goToDocumentList(); + await contentServicesPage.goToDocumentList(); - done(); }); - afterAll(async (done) => { + afterAll(async () => { await uploadActions.deleteFileOrFolder(otherFolderUploaded.entry.id); - done(); + }); - it('[C280012] Should be possible to open any other Document supported extension', () => { - contentServicesPage.doubleClickRow('other'); - - uploadedOthers.forEach((currentFile) => { - if (currentFile.entry.name !== '.DS_Store') { - contentServicesPage.doubleClickRow(currentFile.entry.name); - viewerPage.checkFileIsLoaded(); - viewerPage.clickCloseButton(); + it('[C280012] Should be possible to open any other Document supported extension', async () => { + await contentServicesPage.doubleClickRow('other'); + for (const file of uploadedOthers) { + if (file.entry.name !== '.DS_Store') { + await contentServicesPage.doubleClickRow(file.entry.name); + await viewerPage.checkFileIsLoaded(); + await viewerPage.clickCloseButton(); } - }); + } }); }); diff --git a/e2e/core/viewer/file-extensions/viewer-excel.component.e2e.ts b/e2e/core/viewer/file-extensions/viewer-excel.component.e2e.ts index d760b79953..75da6998a8 100644 --- a/e2e/core/viewer/file-extensions/viewer-excel.component.e2e.ts +++ b/e2e/core/viewer/file-extensions/viewer-excel.component.e2e.ts @@ -24,15 +24,12 @@ import resources = require('../../../util/resources'); import { FolderModel } from '../../../models/ACS/folderModel'; import { AcsUserModel } from '../../../models/ACS/acsUserModel'; import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; -import { NavigationBarPage } from '../../../pages/adf/navigationBarPage'; describe('Viewer', () => { const viewerPage = new ViewerPage(); const loginPage = new LoginPage(); const contentServicesPage = new ContentServicesPage(); - const navigationBarPage = new NavigationBarPage(); - let site; const acsUser = new AcsUserModel(); @@ -46,7 +43,7 @@ describe('Viewer', () => { }); const uploadActions = new UploadActions(this.alfrescoJsApi); - beforeAll(async (done) => { + beforeAll(async () => { await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); await this.alfrescoJsApi.core.peopleApi.addPerson(acsUser); @@ -62,45 +59,37 @@ describe('Viewer', () => { await this.alfrescoJsApi.login(acsUser.id, acsUser.password); - done(); }); - - afterAll(async () => { - await navigationBarPage.clickLogoutButton(); - }); - describe('Excel Folder Uploaded', () => { let uploadedExcels; let excelFolderUploaded; - beforeAll(async (done) => { + beforeAll(async () => { excelFolderUploaded = await uploadActions.createFolder(excelFolderInfo.name, '-my-'); uploadedExcels = await uploadActions.uploadFolder(excelFolderInfo.location, excelFolderUploaded.entry.id); await loginPage.loginToContentServicesUsingUserModel(acsUser); - contentServicesPage.goToDocumentList(); + await contentServicesPage.goToDocumentList(); - done(); }); - afterAll(async (done) => { + afterAll(async () => { await uploadActions.deleteFileOrFolder(excelFolderUploaded.entry.id); - done(); + }); - it('[C280008] Should be possible to open any Excel file', () => { - contentServicesPage.doubleClickRow('excel'); - - uploadedExcels.forEach((currentFile) => { + it('[C280008] Should be possible to open any Excel file', async () => { + await contentServicesPage.doubleClickRow('excel'); + for (const currentFile of uploadedExcels) { if (currentFile.entry.name !== '.DS_Store') { - contentServicesPage.doubleClickRow(currentFile.entry.name); - viewerPage.checkFileIsLoaded(currentFile.entry.name); - viewerPage.clickCloseButton(); + await contentServicesPage.doubleClickRow(currentFile.entry.name); + await viewerPage.checkFileIsLoaded(currentFile.entry.name); + await viewerPage.clickCloseButton(); } - }); - }, 5 * 60 * 1000); + } + }); }); diff --git a/e2e/core/viewer/file-extensions/viewer-image.component.e2e.ts b/e2e/core/viewer/file-extensions/viewer-image.component.e2e.ts index f6b1a15a87..872fc215e3 100644 --- a/e2e/core/viewer/file-extensions/viewer-image.component.e2e.ts +++ b/e2e/core/viewer/file-extensions/viewer-image.component.e2e.ts @@ -24,15 +24,12 @@ import resources = require('../../../util/resources'); import { FolderModel } from '../../../models/ACS/folderModel'; import { AcsUserModel } from '../../../models/ACS/acsUserModel'; import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; -import { NavigationBarPage } from '../../../pages/adf/navigationBarPage'; describe('Viewer', () => { const viewerPage = new ViewerPage(); const loginPage = new LoginPage(); const contentServicesPage = new ContentServicesPage(); - const navigationBarPage = new NavigationBarPage(); - this.alfrescoJsApi = new AlfrescoApi({ provider: 'ECM', hostEcm: browser.params.testConfig.adf_acs.host @@ -51,7 +48,7 @@ describe('Viewer', () => { 'location': resources.Files.ADF_DOCUMENTS.IMG_RENDITION_FOLDER.folder_location }); - beforeAll(async (done) => { + beforeAll(async () => { await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); await this.alfrescoJsApi.core.peopleApi.addPerson(acsUser); @@ -67,11 +64,6 @@ describe('Viewer', () => { await this.alfrescoJsApi.login(acsUser.id, acsUser.password); - done(); - }); - - afterAll(async () => { - await navigationBarPage.clickLogoutButton(); }); describe('Image Folder Uploaded', () => { @@ -79,7 +71,7 @@ describe('Viewer', () => { let uploadedImages, uploadedImgRenditionFolderInfo; let imgFolderUploaded, imgFolderRenditionUploaded; - beforeAll(async (done) => { + beforeAll(async () => { imgFolderUploaded = await uploadActions.createFolder(imgFolderInfo.name, '-my-'); uploadedImages = await uploadActions.uploadFolder(imgFolderInfo.location, imgFolderUploaded.entry.id); @@ -89,37 +81,33 @@ describe('Viewer', () => { uploadedImgRenditionFolderInfo = await uploadActions.uploadFolder(imgRenditionFolderInfo.location, imgFolderRenditionUploaded.entry.id); await loginPage.loginToContentServicesUsingUserModel(acsUser); - contentServicesPage.goToDocumentList(); + await contentServicesPage.goToDocumentList(); - done(); }); - afterAll(async (done) => { + afterAll(async () => { await uploadActions.deleteFileOrFolder(imgFolderUploaded.entry.id); - done(); + }); - it('[C279966] Should be possible to open any Image supported extension', () => { - contentServicesPage.doubleClickRow('images'); - - uploadedImages.forEach((currentFile) => { - if (currentFile.entry.name !== '.DS_Store') { - contentServicesPage.doubleClickRow(currentFile.entry.name); - viewerPage.checkImgViewerIsDisplayed(); - viewerPage.clickCloseButton(); + it('[C279966] Should be possible to open any Image supported extension', async () => { + await contentServicesPage.doubleClickRow('images'); + for (const image of uploadedImages) { + if (image.entry.name !== '.DS_Store') { + await contentServicesPage.doubleClickRow(image.entry.name); + await viewerPage.checkImgViewerIsDisplayed(); + await viewerPage.clickCloseButton(); } - }); - - contentServicesPage.doubleClickRow('images-rendition'); - - uploadedImgRenditionFolderInfo.forEach((currentFile) => { - if (currentFile.entry.name !== '.DS_Store') { - contentServicesPage.doubleClickRow(currentFile.entry.name); - viewerPage.checkFileIsLoaded(); - viewerPage.clickCloseButton(); + } + await contentServicesPage.doubleClickRow('images-rendition'); + for (const item of uploadedImgRenditionFolderInfo) { + if (item.entry.name !== '.DS_Store') { + await contentServicesPage.doubleClickRow(item.entry.name); + await viewerPage.checkFileIsLoaded(); + await viewerPage.clickCloseButton(); } - }); - }, 5 * 60 * 1000); + } + }); }); diff --git a/e2e/core/viewer/file-extensions/viewer-powerpoint.component.e2e.ts b/e2e/core/viewer/file-extensions/viewer-powerpoint.component.e2e.ts index db9995caf0..1b8b307d78 100644 --- a/e2e/core/viewer/file-extensions/viewer-powerpoint.component.e2e.ts +++ b/e2e/core/viewer/file-extensions/viewer-powerpoint.component.e2e.ts @@ -24,19 +24,16 @@ import { FolderModel } from '../../../models/ACS/folderModel'; import { AcsUserModel } from '../../../models/ACS/acsUserModel'; import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; import { browser } from 'protractor'; -import { NavigationBarPage } from '../../../pages/adf/navigationBarPage'; describe('Viewer', () => { const viewerPage = new ViewerPage(); const loginPage = new LoginPage(); const contentServicesPage = new ContentServicesPage(); - const navigationBarPage = new NavigationBarPage(); - this.alfrescoJsApi = new AlfrescoApi({ - provider: 'ECM', - hostEcm: browser.params.testConfig.adf_acs.host - }); + provider: 'ECM', + hostEcm: browser.params.testConfig.adf_acs.host + }); const uploadActions = new UploadActions(this.alfrescoJsApi); let site; @@ -47,7 +44,7 @@ describe('Viewer', () => { 'location': resources.Files.ADF_DOCUMENTS.PPT_FOLDER.folder_location }); - beforeAll(async (done) => { + beforeAll(async () => { await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); await this.alfrescoJsApi.core.peopleApi.addPerson(acsUser); @@ -63,11 +60,6 @@ describe('Viewer', () => { await this.alfrescoJsApi.login(acsUser.id, acsUser.password); - done(); - }); - - afterAll(async () => { - await navigationBarPage.clickLogoutButton(); }); describe('PowerPoint Folder Uploaded', () => { @@ -75,33 +67,32 @@ describe('Viewer', () => { let uploadedPpt; let pptFolderUploaded; - beforeAll(async (done) => { + beforeAll(async () => { pptFolderUploaded = await uploadActions.createFolder(pptFolderInfo.name, '-my-'); uploadedPpt = await uploadActions.uploadFolder(pptFolderInfo.location, pptFolderUploaded.entry.id); - loginPage.loginToContentServicesUsingUserModel(acsUser); - contentServicesPage.goToDocumentList(); + await loginPage.loginToContentServicesUsingUserModel(acsUser); + await contentServicesPage.goToDocumentList(); - done(); }); - afterAll(async (done) => { + afterAll(async () => { await uploadActions.deleteFileOrFolder(pptFolderUploaded.entry.id); - done(); + }); - it('[C280009] Should be possible to open any PowerPoint file', () => { - contentServicesPage.doubleClickRow('ppt'); + it('[C280009] Should be possible to open any PowerPoint file', async () => { + await contentServicesPage.doubleClickRow('ppt'); - uploadedPpt.forEach((currentFile) => { + for (const currentFile of uploadedPpt) { if (currentFile.entry.name !== '.DS_Store') { - contentServicesPage.doubleClickRow(currentFile.entry.name); - viewerPage.checkFileIsLoaded(); - viewerPage.clickCloseButton(); + await contentServicesPage.doubleClickRow(currentFile.entry.name); + await viewerPage.checkFileIsLoaded(); + await viewerPage.clickCloseButton(); } - }); - }, 5 * 60 * 1000); + } + }); }); diff --git a/e2e/core/viewer/file-extensions/viewer-text.component.e2e.ts b/e2e/core/viewer/file-extensions/viewer-text.component.e2e.ts index bfa2b7f34e..eb4dd464c8 100644 --- a/e2e/core/viewer/file-extensions/viewer-text.component.e2e.ts +++ b/e2e/core/viewer/file-extensions/viewer-text.component.e2e.ts @@ -24,19 +24,16 @@ import resources = require('../../../util/resources'); import { FolderModel } from '../../../models/ACS/folderModel'; import { AcsUserModel } from '../../../models/ACS/acsUserModel'; import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; -import { NavigationBarPage } from '../../../pages/adf/navigationBarPage'; describe('Viewer', () => { const viewerPage = new ViewerPage(); const loginPage = new LoginPage(); const contentServicesPage = new ContentServicesPage(); - const navigationBarPage = new NavigationBarPage(); - this.alfrescoJsApi = new AlfrescoApi({ - provider: 'ECM', - hostEcm: browser.params.testConfig.adf_acs.host - }); + provider: 'ECM', + hostEcm: browser.params.testConfig.adf_acs.host + }); const uploadActions = new UploadActions(this.alfrescoJsApi); let site; const acsUser = new AcsUserModel(); @@ -46,7 +43,7 @@ describe('Viewer', () => { 'location': resources.Files.ADF_DOCUMENTS.TEXT_FOLDER.folder_location }); - beforeAll(async (done) => { + beforeAll(async () => { await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); await this.alfrescoJsApi.core.peopleApi.addPerson(acsUser); @@ -62,11 +59,6 @@ describe('Viewer', () => { await this.alfrescoJsApi.login(acsUser.id, acsUser.password); - done(); - }); - - afterAll(async () => { - await navigationBarPage.clickLogoutButton(); }); describe('Text Folder Uploaded', () => { @@ -74,32 +66,30 @@ describe('Viewer', () => { let uploadedTexts; let textFolderUploaded; - beforeAll(async (done) => { + beforeAll(async () => { textFolderUploaded = await uploadActions.createFolder(textFolderInfo.name, '-my-'); uploadedTexts = await uploadActions.uploadFolder(textFolderInfo.location, textFolderUploaded.entry.id); await loginPage.loginToContentServicesUsingUserModel(acsUser); - contentServicesPage.goToDocumentList(); + await contentServicesPage.goToDocumentList(); - done(); }); - afterAll(async (done) => { + afterAll(async () => { await uploadActions.deleteFileOrFolder(textFolderUploaded.entry.id); - done(); + }); - it('[C280010] Should be possible to open any Text file', () => { - contentServicesPage.doubleClickRow('text'); - - uploadedTexts.forEach((currentFile) => { + it('[C280010] Should be possible to open any Text file', async () => { + await contentServicesPage.doubleClickRow('text'); + for (const currentFile of uploadedTexts) { if (currentFile.entry.name !== '.DS_Store') { - contentServicesPage.doubleClickRow(currentFile.entry.name); - viewerPage.checkFileIsLoaded(); - viewerPage.clickCloseButton(); + await contentServicesPage.doubleClickRow(currentFile.entry.name); + await viewerPage.checkFileIsLoaded(); + await viewerPage.clickCloseButton(); } - }); + } }); }); diff --git a/e2e/core/viewer/file-extensions/viewer-word.component.e2e.ts b/e2e/core/viewer/file-extensions/viewer-word.component.e2e.ts index e07443245c..721283e7f5 100644 --- a/e2e/core/viewer/file-extensions/viewer-word.component.e2e.ts +++ b/e2e/core/viewer/file-extensions/viewer-word.component.e2e.ts @@ -46,7 +46,7 @@ describe('Viewer', () => { 'location': resources.Files.ADF_DOCUMENTS.WORD_FOLDER.folder_location }); - beforeAll(async (done) => { + beforeAll(async () => { await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); await this.alfrescoJsApi.core.peopleApi.addPerson(acsUser); @@ -62,7 +62,6 @@ describe('Viewer', () => { await this.alfrescoJsApi.login(acsUser.id, acsUser.password); - done(); }); afterAll(async () => { @@ -74,32 +73,30 @@ describe('Viewer', () => { let uploadedWords; let wordFolderUploaded; - beforeAll(async (done) => { + beforeAll(async () => { wordFolderUploaded = await uploadActions.createFolder(wordFolderInfo.name, '-my-'); uploadedWords = await uploadActions.uploadFolder(wordFolderInfo.location, wordFolderUploaded.entry.id); await loginPage.loginToContentServicesUsingUserModel(acsUser); - contentServicesPage.goToDocumentList(); + await contentServicesPage.goToDocumentList(); - done(); }); - afterAll(async (done) => { + afterAll(async () => { await uploadActions.deleteFileOrFolder(wordFolderUploaded.entry.id); - done(); + }); - it('[C280011] Should be possible to open any Word file', () => { - contentServicesPage.doubleClickRow('word'); - - uploadedWords.forEach((currentFile) => { + it('[C280011] Should be possible to open any Word file', async () => { + await contentServicesPage.doubleClickRow('word'); + for (const currentFile of uploadedWords) { if (currentFile.entry.name !== '.DS_Store') { - contentServicesPage.doubleClickRow(currentFile.entry.name); - viewerPage.checkFileIsLoaded(); - viewerPage.clickCloseButton(); + await contentServicesPage.doubleClickRow(currentFile.entry.name); + await viewerPage.checkFileIsLoaded(); + await viewerPage.clickCloseButton(); } - }); + } }); }); diff --git a/e2e/core/viewer/info-drawer.component.e2e.ts b/e2e/core/viewer/info-drawer.component.e2e.ts index 5e4596c347..a1c7258651 100644 --- a/e2e/core/viewer/info-drawer.component.e2e.ts +++ b/e2e/core/viewer/info-drawer.component.e2e.ts @@ -46,7 +46,7 @@ describe('Info Drawer', () => { 'location': resources.Files.ADF_DOCUMENTS.PNG.file_location }); - beforeAll(async (done) => { + beforeAll(async () => { await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); await this.alfrescoJsApi.core.peopleApi.addPerson(acsUser); @@ -63,43 +63,39 @@ describe('Info Drawer', () => { await this.alfrescoJsApi.login(acsUser.id, acsUser.password); pngFileUploaded = await uploadActions.uploadFile(pngFileInfo.location, pngFileInfo.name, site.entry.guid); - done(); + }); - afterAll(async (done) => { + afterAll(async () => { await this.alfrescoJsApi.login(acsUser.id, acsUser.password); await uploadActions.deleteFileOrFolder(pngFileUploaded.entry.id); - done(); + }); beforeEach(async() => { await loginPage.loginToContentServicesUsingUserModel(acsUser); - navigationBarPage.goToSite(site); - contentServicesPage.checkAcsContainer(); + await navigationBarPage.goToSite(site); + await contentServicesPage.checkAcsContainer(); }); - afterEach(async () => { - await navigationBarPage.clickLogoutButton(); + it('[C277251] Should display the icon when the icon property is defined', async () => { + await viewerPage.viewFile(pngFileUploaded.entry.name); + await viewerPage.clickLeftSidebarButton(); + await viewerPage.enableShowTabWithIcon(); + await viewerPage.enableShowTabWithIconAndLabel(); + await viewerPage.checkTabHasNoIcon(0); + await expect(await viewerPage.getTabIconById(1)).toBe('face'); + await expect(await viewerPage.getTabIconById(2)).toBe('comment'); }); - it('[C277251] Should display the icon when the icon property is defined', () => { - viewerPage.viewFile(pngFileUploaded.entry.name); - viewerPage.clickLeftSidebarButton(); - viewerPage.enableShowTabWithIcon(); - viewerPage.enableShowTabWithIconAndLabel(); - viewerPage.checkTabHasNoIcon(0); - expect(viewerPage.getTabIconById(1)).toBe('face'); - expect(viewerPage.getTabIconById(2)).toBe('comment'); - }); - - it('[C277252] Should display the label when the label property is defined', () => { - viewerPage.viewFile(pngFileUploaded.entry.name); - viewerPage.clickLeftSidebarButton(); - viewerPage.enableShowTabWithIcon(); - viewerPage.enableShowTabWithIconAndLabel(); - expect(viewerPage.getTabLabelById(0)).toBe('SETTINGS'); - viewerPage.checkTabHasNoLabel(1); - expect(viewerPage.getTabLabelById(2)).toBe('COMMENTS'); + it('[C277252] Should display the label when the label property is defined', async () => { + await viewerPage.viewFile(pngFileUploaded.entry.name); + await viewerPage.clickLeftSidebarButton(); + await viewerPage.enableShowTabWithIcon(); + await viewerPage.enableShowTabWithIconAndLabel(); + await expect(await viewerPage.getTabLabelById(0)).toBe('SETTINGS'); + await viewerPage.checkTabHasNoLabel(1); + await expect(await viewerPage.getTabLabelById(2)).toBe('COMMENTS'); }); }); diff --git a/e2e/core/viewer/viewer-content-services-component.e2e.ts b/e2e/core/viewer/viewer-content-services-component.e2e.ts index 48183c1728..e28dfced3f 100644 --- a/e2e/core/viewer/viewer-content-services-component.e2e.ts +++ b/e2e/core/viewer/viewer-content-services-component.e2e.ts @@ -77,7 +77,7 @@ describe('Content Services Viewer', () => { }); const uploadActions = new UploadActions(this.alfrescoJsApi); - beforeAll(async (done) => { + beforeAll(async () => { await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); @@ -108,12 +108,11 @@ describe('Content Services Viewer', () => { await loginPage.loginToContentServicesUsingUserModel(acsUser); - contentServicesPage.goToDocumentList(); + await contentServicesPage.goToDocumentList(); - done(); }); - afterAll(async (done) => { + afterAll(async () => { await uploadActions.deleteFileOrFolder(pdfFile.getId()); await uploadActions.deleteFileOrFolder(protectedFile.getId()); await uploadActions.deleteFileOrFolder(docxFile.getId()); @@ -123,294 +122,293 @@ describe('Content Services Viewer', () => { await uploadActions.deleteFileOrFolder(unsupportedFile.getId()); await navigationBarPage.clickLogoutButton(); - done(); }); - it('[C260038] Should display first page, toolbar and pagination when opening a .pdf file', () => { - contentServicesPage.checkAcsContainer(); + it('[C260038] Should display first page, toolbar and pagination when opening a .pdf file', async () => { + await contentServicesPage.checkAcsContainer(); - viewerPage.viewFile(pdfFile.name); - viewerPage.checkZoomInButtonIsDisplayed(); + await viewerPage.viewFile(pdfFile.name); + await viewerPage.checkZoomInButtonIsDisplayed(); - viewerPage.checkFileContent('1', pdfFile.firstPageText); - viewerPage.checkCloseButtonIsDisplayed(); - viewerPage.checkFileNameIsDisplayed(pdfFile.name); - viewerPage.checkFileThumbnailIsDisplayed(); - viewerPage.checkDownloadButtonIsDisplayed(); - viewerPage.checkFullScreenButtonIsDisplayed(); - viewerPage.checkInfoButtonIsDisplayed(); - viewerPage.checkPreviousPageButtonIsDisplayed(); - viewerPage.checkNextPageButtonIsDisplayed(); - viewerPage.checkPageSelectorInputIsDisplayed('1'); - viewerPage.checkPercentageIsDisplayed(); - viewerPage.checkZoomInButtonIsDisplayed(); - viewerPage.checkZoomOutButtonIsDisplayed(); - viewerPage.checkScalePageButtonIsDisplayed(); + await viewerPage.checkFileContent('1', pdfFile.firstPageText); + await viewerPage.checkCloseButtonIsDisplayed(); + await viewerPage.checkFileNameIsDisplayed(pdfFile.name); + await viewerPage.checkFileThumbnailIsDisplayed(); + await viewerPage.checkDownloadButtonIsDisplayed(); + await viewerPage.checkFullScreenButtonIsDisplayed(); + await viewerPage.checkInfoButtonIsDisplayed(); + await viewerPage.checkPreviousPageButtonIsDisplayed(); + await viewerPage.checkNextPageButtonIsDisplayed(); + await viewerPage.checkPageSelectorInputIsDisplayed('1'); + await viewerPage.checkPercentageIsDisplayed(); + await viewerPage.checkZoomInButtonIsDisplayed(); + await viewerPage.checkZoomOutButtonIsDisplayed(); + await viewerPage.checkScalePageButtonIsDisplayed(); - viewerPage.clickCloseButton(); + await viewerPage.clickCloseButton(); }); it('[C260040] Should be able to change pages and zoom when .pdf file is open', async () => { - viewerPage.viewFile(pdfFile.name); - viewerPage.checkZoomInButtonIsDisplayed(); + await viewerPage.viewFile(pdfFile.name); + await viewerPage.checkZoomInButtonIsDisplayed(); - viewerPage.checkFileContent('1', pdfFile.firstPageText); - viewerPage.clickNextPageButton(); - viewerPage.checkFileContent('2', pdfFile.secondPageText); - viewerPage.checkPageSelectorInputIsDisplayed('2'); + await viewerPage.checkFileContent('1', pdfFile.firstPageText); + await viewerPage.clickNextPageButton(); + await viewerPage.checkFileContent('2', pdfFile.secondPageText); + await viewerPage.checkPageSelectorInputIsDisplayed('2'); - viewerPage.clickPreviousPageButton(); - viewerPage.checkFileContent('1', pdfFile.firstPageText); - viewerPage.checkPageSelectorInputIsDisplayed('1'); + await viewerPage.clickPreviousPageButton(); + await viewerPage.checkFileContent('1', pdfFile.firstPageText); + await viewerPage.checkPageSelectorInputIsDisplayed('1'); - viewerPage.clearPageNumber(); - viewerPage.checkPageSelectorInputIsDisplayed(''); + await viewerPage.clearPageNumber(); + await viewerPage.checkPageSelectorInputIsDisplayed(''); const initialWidth = await viewerPage.getCanvasWidth(); const initialHeight = await viewerPage.getCanvasHeight(); - viewerPage.clickZoomInButton(); - expect(+(await viewerPage.getCanvasWidth())).toBeGreaterThan(+initialWidth); - expect(+(await viewerPage.getCanvasHeight())).toBeGreaterThan(+initialHeight); + await viewerPage.clickZoomInButton(); + await expect(+(await viewerPage.getCanvasWidth())).toBeGreaterThan(+initialWidth); + await expect(+(await viewerPage.getCanvasHeight())).toBeGreaterThan(+initialHeight); - viewerPage.clickActualSize(); - expect(+(await viewerPage.getCanvasWidth())).toEqual(+initialWidth); - expect(+(await viewerPage.getCanvasHeight())).toEqual(+initialHeight); + await viewerPage.clickActualSize(); + await expect(+(await viewerPage.getCanvasWidth())).toEqual(+initialWidth); + await expect(+(await viewerPage.getCanvasHeight())).toEqual(+initialHeight); - viewerPage.clickZoomOutButton(); - expect(+(await viewerPage.getCanvasWidth())).toBeLessThan(+initialWidth); - expect(+(await viewerPage.getCanvasHeight())).toBeLessThan(+initialHeight); + await viewerPage.clickZoomOutButton(); + await expect(+(await viewerPage.getCanvasWidth())).toBeLessThan(+initialWidth); + await expect(+(await viewerPage.getCanvasHeight())).toBeLessThan(+initialHeight); - viewerPage.clickCloseButton(); + await viewerPage.clickCloseButton(); }); - it('[C260042] Should be able to download, open full-screen and Info container from the Viewer', () => { - viewerPage.viewFile(jpgFile.name); - viewerPage.checkZoomInButtonIsDisplayed(); + it('[C260042] Should be able to download, open full-screen and Info container from the Viewer', async () => { + await viewerPage.viewFile(jpgFile.name); + await viewerPage.checkZoomInButtonIsDisplayed(); - viewerPage.checkImgContainerIsDisplayed(); + await viewerPage.checkImgContainerIsDisplayed(); - viewerPage.checkFullScreenButtonIsDisplayed(); - viewerPage.clickFullScreenButton(); + await viewerPage.checkFullScreenButtonIsDisplayed(); + await viewerPage.clickFullScreenButton(); - viewerPage.exitFullScreen(); + await viewerPage.exitFullScreen(); - viewerPage.checkDownloadButtonIsDisplayed(); - viewerPage.clickDownloadButton(); + await viewerPage.checkDownloadButtonIsDisplayed(); + await viewerPage.clickDownloadButton(); - viewerPage.clickCloseButton(); + await viewerPage.clickCloseButton(); }); - it('[C260052] Should display image, toolbar and pagination when opening a .jpg file', () => { - viewerPage.viewFile(jpgFile.name); - viewerPage.checkZoomInButtonIsDisplayed(); + it('[C260052] Should display image, toolbar and pagination when opening a .jpg file', async () => { + await viewerPage.viewFile(jpgFile.name); + await viewerPage.checkZoomInButtonIsDisplayed(); - viewerPage.checkImgContainerIsDisplayed(); + await viewerPage.checkImgContainerIsDisplayed(); - viewerPage.checkCloseButtonIsDisplayed(); - viewerPage.checkFileNameIsDisplayed(jpgFile.name); - viewerPage.checkFileThumbnailIsDisplayed(); - viewerPage.checkDownloadButtonIsDisplayed(); - viewerPage.checkFullScreenButtonIsDisplayed(); - viewerPage.checkInfoButtonIsDisplayed(); - viewerPage.checkZoomInButtonIsDisplayed(); - viewerPage.checkZoomOutButtonIsDisplayed(); - viewerPage.checkPercentageIsDisplayed(); - viewerPage.checkRotateLeftButtonIsDisplayed(); - viewerPage.checkRotateRightButtonIsDisplayed(); - viewerPage.checkScaleImgButtonIsDisplayed(); + await viewerPage.checkCloseButtonIsDisplayed(); + await viewerPage.checkFileNameIsDisplayed(jpgFile.name); + await viewerPage.checkFileThumbnailIsDisplayed(); + await viewerPage.checkDownloadButtonIsDisplayed(); + await viewerPage.checkFullScreenButtonIsDisplayed(); + await viewerPage.checkInfoButtonIsDisplayed(); + await viewerPage.checkZoomInButtonIsDisplayed(); + await viewerPage.checkZoomOutButtonIsDisplayed(); + await viewerPage.checkPercentageIsDisplayed(); + await viewerPage.checkRotateLeftButtonIsDisplayed(); + await viewerPage.checkRotateRightButtonIsDisplayed(); + await viewerPage.checkScaleImgButtonIsDisplayed(); - viewerPage.clickCloseButton(); + await viewerPage.clickCloseButton(); }); - it('[C260483] Should be able to zoom and rotate image when .jpg file is open', () => { - viewerPage.viewFile(jpgFile.name); - viewerPage.checkZoomInButtonIsDisplayed(); + it('[C260483] Should be able to zoom and rotate image when .jpg file is open', async () => { + await viewerPage.viewFile(jpgFile.name); + await viewerPage.checkZoomInButtonIsDisplayed(); - viewerPage.checkPercentageIsDisplayed(); + await viewerPage.checkPercentageIsDisplayed(); - zoom = viewerPage.getZoom(); - viewerPage.clickZoomInButton(); - viewerPage.checkZoomedIn(zoom); + zoom = await viewerPage.getZoom(); + await viewerPage.clickZoomInButton(); + await viewerPage.checkZoomedIn(zoom); - zoom = viewerPage.getZoom(); - viewerPage.clickZoomOutButton(); - viewerPage.checkZoomedOut(zoom); + zoom = await viewerPage.getZoom(); + await viewerPage.clickZoomOutButton(); + await viewerPage.checkZoomedOut(zoom); - viewerPage.clickRotateLeftButton(); - viewerPage.checkRotation('transform: scale(1, 1) rotate(-90deg) translate(0px, 0px);'); + await viewerPage.clickRotateLeftButton(); + await viewerPage.checkRotation('transform: scale(1, 1) rotate(-90deg) translate(0px, 0px);'); - viewerPage.clickScaleImgButton(); - viewerPage.checkRotation('transform: scale(1, 1) rotate(0deg) translate(0px, 0px);'); + await viewerPage.clickScaleImgButton(); + await viewerPage.checkRotation('transform: scale(1, 1) rotate(0deg) translate(0px, 0px);'); - viewerPage.clickRotateRightButton(); - viewerPage.checkRotation('transform: scale(1, 1) rotate(90deg) translate(0px, 0px);'); + await viewerPage.clickRotateRightButton(); + await viewerPage.checkRotation('transform: scale(1, 1) rotate(90deg) translate(0px, 0px);'); - viewerPage.clickCloseButton(); + await viewerPage.clickCloseButton(); }); - it('[C279922] Should display first page, toolbar and pagination when opening a .ppt file', () => { - viewerPage.viewFile(pptFile.name); - viewerPage.checkZoomInButtonIsDisplayed(); + it('[C279922] Should display first page, toolbar and pagination when opening a .ppt file', async () => { + await viewerPage.viewFile(pptFile.name); + await viewerPage.checkZoomInButtonIsDisplayed(); - viewerPage.checkFileContent('1', pptFile.firstPageText); - viewerPage.checkCloseButtonIsDisplayed(); - viewerPage.checkFileThumbnailIsDisplayed(); - viewerPage.checkFileNameIsDisplayed(pptFile.name); - viewerPage.checkDownloadButtonIsDisplayed(); - viewerPage.checkInfoButtonIsDisplayed(); - viewerPage.checkPreviousPageButtonIsDisplayed(); - viewerPage.checkNextPageButtonIsDisplayed(); - viewerPage.checkPageSelectorInputIsDisplayed('1'); - viewerPage.checkZoomInButtonIsDisplayed(); - viewerPage.checkZoomOutButtonIsDisplayed(); - viewerPage.checkScalePageButtonIsDisplayed(); + await viewerPage.checkFileContent('1', pptFile.firstPageText); + await viewerPage.checkCloseButtonIsDisplayed(); + await viewerPage.checkFileThumbnailIsDisplayed(); + await viewerPage.checkFileNameIsDisplayed(pptFile.name); + await viewerPage.checkDownloadButtonIsDisplayed(); + await viewerPage.checkInfoButtonIsDisplayed(); + await viewerPage.checkPreviousPageButtonIsDisplayed(); + await viewerPage.checkNextPageButtonIsDisplayed(); + await viewerPage.checkPageSelectorInputIsDisplayed('1'); + await viewerPage.checkZoomInButtonIsDisplayed(); + await viewerPage.checkZoomOutButtonIsDisplayed(); + await viewerPage.checkScalePageButtonIsDisplayed(); - viewerPage.clickCloseButton(); + await viewerPage.clickCloseButton(); }); - it('[C291903] Should display the buttons in order in the adf viewer toolbar', () => { - viewerPage.viewFile(pdfFile.name); - viewerPage.checkLeftSideBarIsNotDisplayed(); - viewerPage.clickLeftSidebarButton(); - viewerPage.checkLeftSideBarIsDisplayed(); - viewerPage.enableMoreActionsMenu(); - viewerPage.checkToolbarIsDisplayed(); - expect(viewerPage.getLastButtonTitle()).toEqual(viewerPage.getMoreActionsMenuTitle()); - viewerPage.clickCloseButton(); + it('[C291903] Should display the buttons in order in the adf viewer toolbar', async () => { + await viewerPage.viewFile(pdfFile.name); + await viewerPage.checkLeftSideBarIsNotDisplayed(); + await viewerPage.clickLeftSidebarButton(); + await viewerPage.checkLeftSideBarIsDisplayed(); + await viewerPage.enableMoreActionsMenu(); + await viewerPage.checkToolbarIsDisplayed(); + await expect(await viewerPage.getLastButtonTitle()).toEqual(await viewerPage.getMoreActionsMenuTitle()); + await viewerPage.clickCloseButton(); }); - it('[C260053] Should display first page, toolbar and pagination when opening a .docx file', () => { - viewerPage.viewFile(docxFile.name); - viewerPage.checkZoomInButtonIsDisplayed(); + it('[C260053] Should display first page, toolbar and pagination when opening a .docx file', async () => { + await viewerPage.viewFile(docxFile.name); + await viewerPage.checkZoomInButtonIsDisplayed(); - viewerPage.checkFileContent('1', docxFile.firstPageText); - viewerPage.checkCloseButtonIsDisplayed(); - viewerPage.checkFileThumbnailIsDisplayed(); - viewerPage.checkFileNameIsDisplayed(docxFile.name); - viewerPage.checkDownloadButtonIsDisplayed(); - viewerPage.checkInfoButtonIsDisplayed(); - viewerPage.checkPreviousPageButtonIsDisplayed(); - viewerPage.checkNextPageButtonIsDisplayed(); - viewerPage.checkPageSelectorInputIsDisplayed('1'); - viewerPage.checkZoomInButtonIsDisplayed(); - viewerPage.checkZoomOutButtonIsDisplayed(); - viewerPage.checkScalePageButtonIsDisplayed(); + await viewerPage.checkFileContent('1', docxFile.firstPageText); + await viewerPage.checkCloseButtonIsDisplayed(); + await viewerPage.checkFileThumbnailIsDisplayed(); + await viewerPage.checkFileNameIsDisplayed(docxFile.name); + await viewerPage.checkDownloadButtonIsDisplayed(); + await viewerPage.checkInfoButtonIsDisplayed(); + await viewerPage.checkPreviousPageButtonIsDisplayed(); + await viewerPage.checkNextPageButtonIsDisplayed(); + await viewerPage.checkPageSelectorInputIsDisplayed('1'); + await viewerPage.checkZoomInButtonIsDisplayed(); + await viewerPage.checkZoomOutButtonIsDisplayed(); + await viewerPage.checkScalePageButtonIsDisplayed(); - viewerPage.clickCloseButton(); + await viewerPage.clickCloseButton(); }); - it('[C260054] Should display Preview could not be loaded and viewer toolbar when opening an unsupported file', () => { - viewerPage.viewFile(unsupportedFile.name); + it('[C260054] Should display Preview could not be loaded and viewer toolbar when opening an unsupported file', async () => { + await viewerPage.viewFile(unsupportedFile.name); - viewerPage.checkCloseButtonIsDisplayed(); - viewerPage.checkFileNameIsDisplayed(unsupportedFile.name); - viewerPage.checkFileThumbnailIsDisplayed(); - viewerPage.checkDownloadButtonIsDisplayed(); - viewerPage.checkInfoButtonIsDisplayed(); + await viewerPage.checkCloseButtonIsDisplayed(); + await viewerPage.checkFileNameIsDisplayed(unsupportedFile.name); + await viewerPage.checkFileThumbnailIsDisplayed(); + await viewerPage.checkDownloadButtonIsDisplayed(); + await viewerPage.checkInfoButtonIsDisplayed(); - viewerPage.checkZoomInButtonIsNotDisplayed(); - viewerPage.checkUnknownFormatIsDisplayed(); - expect(viewerPage.getUnknownFormatMessage()).toBe('Couldn\'t load preview. Unknown format.'); + await viewerPage.checkZoomInButtonIsNotDisplayed(); + await viewerPage.checkUnknownFormatIsDisplayed(); + await expect(await viewerPage.getUnknownFormatMessage()).toBe('Couldn\'t load preview. Unknown format.'); - viewerPage.clickCloseButton(); + await viewerPage.clickCloseButton(); }); - it('[C260056] Should display video and viewer toolbar when opening a media file', () => { - viewerPage.viewFile(mp4File.name); + it('[C260056] Should display video and viewer toolbar when opening a media file', async () => { + await viewerPage.viewFile(mp4File.name); - viewerPage.checkMediaPlayerContainerIsDisplayed(); - viewerPage.checkCloseButtonIsDisplayed(); - viewerPage.checkFileThumbnailIsDisplayed(); - viewerPage.checkFileNameIsDisplayed(mp4File.name); - viewerPage.checkDownloadButtonIsDisplayed(); - viewerPage.checkInfoButtonIsDisplayed(); - viewerPage.checkFullScreenButtonIsNotDisplayed(); + await viewerPage.checkMediaPlayerContainerIsDisplayed(); + await viewerPage.checkCloseButtonIsDisplayed(); + await viewerPage.checkFileThumbnailIsDisplayed(); + await viewerPage.checkFileNameIsDisplayed(mp4File.name); + await viewerPage.checkDownloadButtonIsDisplayed(); + await viewerPage.checkInfoButtonIsDisplayed(); + await viewerPage.checkFullScreenButtonIsNotDisplayed(); - viewerPage.checkZoomInButtonIsNotDisplayed(); + await viewerPage.checkZoomInButtonIsNotDisplayed(); - viewerPage.clickCloseButton(); + await viewerPage.clickCloseButton(); }); - it('[C261123] Should be able to preview all pages and navigate to a page when using thumbnails', () => { - viewerPage.viewFile(pdfFile.name); + it('[C261123] Should be able to preview all pages and navigate to a page when using thumbnails', async () => { + await viewerPage.viewFile(pdfFile.name); - viewerPage.checkZoomInButtonIsDisplayed(); - viewerPage.checkFileContent('1', pdfFile.firstPageText); - viewerPage.checkThumbnailsBtnIsDisplayed(); - viewerPage.clickThumbnailsBtn(); + await viewerPage.checkZoomInButtonIsDisplayed(); + await viewerPage.checkFileContent('1', pdfFile.firstPageText); + await viewerPage.checkThumbnailsBtnIsDisplayed(); + await viewerPage.clickThumbnailsBtn(); - viewerPage.checkThumbnailsContentIsDisplayed(); - viewerPage.checkThumbnailsCloseIsDisplayed(); - viewerPage.checkAllThumbnailsDisplayed(pdfFile.lastPageNumber); + await viewerPage.checkThumbnailsContentIsDisplayed(); + await viewerPage.checkThumbnailsCloseIsDisplayed(); + await viewerPage.checkAllThumbnailsDisplayed(pdfFile.lastPageNumber); - viewerPage.clickSecondThumbnail(); - viewerPage.checkFileContent('2', pdfFile.secondPageText); - viewerPage.checkCurrentThumbnailIsSelected(); + await viewerPage.clickSecondThumbnail(); + await viewerPage.checkFileContent('2', pdfFile.secondPageText); + await viewerPage.checkCurrentThumbnailIsSelected(); - viewerPage.checkPreviousPageButtonIsDisplayed(); - viewerPage.clickPreviousPageButton(); - viewerPage.checkFileContent('1', pdfFile.firstPageText); - viewerPage.checkCurrentThumbnailIsSelected(); + await viewerPage.checkPreviousPageButtonIsDisplayed(); + await viewerPage.clickPreviousPageButton(); + await viewerPage.checkFileContent('1', pdfFile.firstPageText); + await viewerPage.checkCurrentThumbnailIsSelected(); - viewerPage.clickThumbnailsBtn(); - viewerPage.checkThumbnailsContentIsNotDisplayed(); - viewerPage.clickThumbnailsBtn(); - viewerPage.checkThumbnailsCloseIsDisplayed(); - viewerPage.clickThumbnailsClose(); + await viewerPage.clickThumbnailsBtn(); + await viewerPage.checkThumbnailsContentIsNotDisplayed(); + await viewerPage.clickThumbnailsBtn(); + await viewerPage.checkThumbnailsCloseIsDisplayed(); + await viewerPage.clickThumbnailsClose(); - viewerPage.clickCloseButton(); + await viewerPage.clickCloseButton(); }); - it('[C268105] Should display current thumbnail when getting to the page following the last visible thumbnail', () => { - viewerPage.viewFile(pdfFile.name); - viewerPage.checkZoomInButtonIsDisplayed(); + it('[C268105] Should display current thumbnail when getting to the page following the last visible thumbnail', async () => { + await viewerPage.viewFile(pdfFile.name); + await viewerPage.checkZoomInButtonIsDisplayed(); - viewerPage.checkFileContent('1', pdfFile.firstPageText); - viewerPage.checkThumbnailsBtnIsDisplayed(); - viewerPage.clickThumbnailsBtn(); - viewerPage.clickLastThumbnailDisplayed(); - viewerPage.checkCurrentThumbnailIsSelected(); + await viewerPage.checkFileContent('1', pdfFile.firstPageText); + await viewerPage.checkThumbnailsBtnIsDisplayed(); + await viewerPage.clickThumbnailsBtn(); + await viewerPage.clickLastThumbnailDisplayed(); + await viewerPage.checkCurrentThumbnailIsSelected(); - viewerPage.checkNextPageButtonIsDisplayed(); - viewerPage.clickNextPageButton(); - viewerPage.checkCurrentThumbnailIsSelected(); + await viewerPage.checkNextPageButtonIsDisplayed(); + await viewerPage.clickNextPageButton(); + await viewerPage.checkCurrentThumbnailIsSelected(); - viewerPage.clickCloseButton(); + await viewerPage.clickCloseButton(); }); - it('[C269109] Should not be able to open thumbnail panel before the pdf is loaded', () => { - viewerPage.viewFile(pdfFile.name); + it('[C269109] Should not be able to open thumbnail panel before the pdf is loaded', async () => { + await viewerPage.viewFile(pdfFile.name); - viewerPage.checkThumbnailsBtnIsDisabled(); + await viewerPage.checkThumbnailsBtnIsDisabled(); - viewerPage.checkCloseButtonIsDisplayed(); - viewerPage.clickCloseButton(); + await viewerPage.checkCloseButtonIsDisplayed(); + await viewerPage.clickCloseButton(); }); - it('[C268901] Should need a password when opening a protected file', () => { - viewerPage.viewFile(protectedFile.name); + it('[C268901] Should need a password when opening a protected file', async () => { + await viewerPage.viewFile(protectedFile.name); - viewerPage.checkZoomInButtonIsDisplayed(); - viewerPage.checkPasswordDialogIsDisplayed(); - viewerPage.checkPasswordSubmitDisabledIsDisplayed(); + await viewerPage.checkZoomInButtonIsDisplayed(); + await viewerPage.checkPasswordDialogIsDisplayed(); + await viewerPage.checkPasswordSubmitDisabledIsDisplayed(); - viewerPage.enterPassword('random password'); - viewerPage.clickPasswordSubmit(); - viewerPage.checkPasswordErrorIsDisplayed(); - viewerPage.checkPasswordInputIsDisplayed(); + await viewerPage.enterPassword('random password'); + await viewerPage.clickPasswordSubmit(); + await viewerPage.checkPasswordErrorIsDisplayed(); + await viewerPage.checkPasswordInputIsDisplayed(); - viewerPage.enterPassword(protectedFile.password); - viewerPage.clickPasswordSubmit(); - viewerPage.checkFileContent('1', protectedFile.firstPageText); + await viewerPage.enterPassword(protectedFile.password); + await viewerPage.clickPasswordSubmit(); + await viewerPage.checkFileContent('1', protectedFile.firstPageText); - viewerPage.clickCloseButton(); + await viewerPage.clickCloseButton(); }); - it('[C307985] Should close the viewer when password dialog is cancelled', () => { - viewerPage.viewFile(protectedFile.name); - viewerPage.checkPasswordDialogIsDisplayed(); - viewerPage.clickClosePasswordDialog(); - contentServicesPage.checkContentIsDisplayed(protectedFile.name); + it('[C307985] Should close the viewer when password dialog is cancelled', async () => { + await viewerPage.viewFile(protectedFile.name); + await viewerPage.checkPasswordDialogIsDisplayed(); + await viewerPage.clickClosePasswordDialog(); + await contentServicesPage.checkContentIsDisplayed(protectedFile.name); }); }); diff --git a/e2e/core/viewer/viewer-custom-toolbar-info-drawer.e2e.ts b/e2e/core/viewer/viewer-custom-toolbar-info-drawer.e2e.ts index 777b6fd7ef..70a64c44e5 100644 --- a/e2e/core/viewer/viewer-custom-toolbar-info-drawer.e2e.ts +++ b/e2e/core/viewer/viewer-custom-toolbar-info-drawer.e2e.ts @@ -44,7 +44,7 @@ describe('Viewer', () => { 'location': resources.Files.ADF_DOCUMENTS.TXT.file_location }); - beforeAll(async (done) => { + beforeAll(async () => { await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); await this.alfrescoJsApi.core.peopleApi.addPerson(acsUser); @@ -54,41 +54,40 @@ describe('Viewer', () => { await loginPage.loginToContentServicesUsingUserModel(acsUser); - done(); }); - afterAll(async (done) => { + afterAll(async () => { await uploadActions.deleteFileOrFolder(txtFileUploaded.entry.id); await navigationBarPage.clickLogoutButton(); - done(); + }); - beforeEach(() => { - contentServicesPage.goToDocumentList(); - contentServicesPage.doubleClickRow(txtFileUploaded.entry.name); + beforeEach(async () => { + await contentServicesPage.goToDocumentList(); + await contentServicesPage.doubleClickRow(txtFileUploaded.entry.name); }); - afterEach(() => { - viewerPage.clickCloseButton(); + afterEach(async () => { + await viewerPage.clickCloseButton(); }); - it('[C260096] Should the Viewer able to accept a customToolbar', () => { - viewerPage.clickLeftSidebarButton(); - viewerPage.checkLeftSideBarIsDisplayed(); - viewerPage.checkToolbarIsDisplayed(); - viewerPage.enableCustomToolbar(); - viewerPage.checkCustomToolbarIsDisplayed(); - viewerPage.disableCustomToolbar(); + it('[C260096] Should the Viewer able to accept a customToolbar', async () => { + await viewerPage.clickLeftSidebarButton(); + await viewerPage.checkLeftSideBarIsDisplayed(); + await viewerPage.checkToolbarIsDisplayed(); + await viewerPage.enableCustomToolbar(); + await viewerPage.checkCustomToolbarIsDisplayed(); + await viewerPage.disableCustomToolbar(); }); - it('[C260097] Should the viewer able to show a custom info-drawer when the sidebarTemplate is set', () => { - viewerPage.clickInfoButton(); - viewerPage.checkInfoSideBarIsDisplayed(); - viewerPage.clickOnTab('Comments'); - viewerPage.checkTabIsActive('Comments'); - viewerPage.clickOnTab('Properties'); - viewerPage.checkTabIsActive('Properties'); - viewerPage.clickOnTab('Versions'); - viewerPage.checkTabIsActive('Versions'); + it('[C260097] Should the viewer able to show a custom info-drawer when the sidebarTemplate is set', async () => { + await viewerPage.clickInfoButton(); + await viewerPage.checkInfoSideBarIsDisplayed(); + await viewerPage.clickOnTab('Comments'); + await viewerPage.checkTabIsActive('Comments'); + await viewerPage.clickOnTab('Properties'); + await viewerPage.checkTabIsActive('Properties'); + await viewerPage.clickOnTab('Versions'); + await viewerPage.checkTabIsActive('Versions'); }); }); diff --git a/e2e/core/viewer/viewer-extension.e2e.ts b/e2e/core/viewer/viewer-extension.e2e.ts index 349987dd4f..679c27c9c9 100644 --- a/e2e/core/viewer/viewer-extension.e2e.ts +++ b/e2e/core/viewer/viewer-extension.e2e.ts @@ -34,9 +34,9 @@ describe('Viewer', () => { const loginPage = new LoginPage(); const contentServicesPage = new ContentServicesPage(); this.alfrescoJsApi = new AlfrescoApi({ - provider: 'ECM', - hostEcm: browser.params.testConfig.adf_acs.host - }); + provider: 'ECM', + hostEcm: browser.params.testConfig.adf_acs.host + }); const uploadActions = new UploadActions(this.alfrescoJsApi); let site; const acsUser = new AcsUserModel(); @@ -48,7 +48,7 @@ describe('Viewer', () => { 'location': resources.Files.ADF_DOCUMENTS.JS.file_location }); - beforeAll(async (done) => { + beforeAll(async () => { await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); await this.alfrescoJsApi.core.peopleApi.addPerson(acsUser); @@ -69,30 +69,27 @@ describe('Viewer', () => { await loginPage.loginToContentServicesUsingUserModel(acsUser); - done(); }); - afterAll(async (done) => { + afterAll(async () => { await this.alfrescoJsApi.login(acsUser.id, acsUser.password); await uploadActions.deleteFileOrFolder(jsFileUploaded.entry.id); - await navigationBarPage.clickLogoutButton(); - done(); }); describe('Viewer extension', () => { - it('[C297698] Should be able to add an extension for code editor viewer', () => { - navigationBarPage.clickAboutButton(); + it('[C297698] Should be able to add an extension for code editor viewer', async () => { + await navigationBarPage.clickAboutButton(); - monacoExtensionPage.checkMonacoPluginIsDisplayed(); + await monacoExtensionPage.checkMonacoPluginIsDisplayed(); - navigationBarPage.clickContentServicesButton(); + await navigationBarPage.clickContentServicesButton(); - contentServicesPage.waitForTableBody(); - contentServicesPage.checkContentIsDisplayed(jsFileInfo.name); - contentServicesPage.doubleClickRow(jsFileInfo.name); + await contentServicesPage.waitForTableBody(); + await contentServicesPage.checkContentIsDisplayed(jsFileInfo.name); + await contentServicesPage.doubleClickRow(jsFileInfo.name); - viewerPage.checkCodeViewerIsDisplayed(); + await viewerPage.checkCodeViewerIsDisplayed(); }); }); }); diff --git a/e2e/core/viewer/viewer-properties.e2e.ts b/e2e/core/viewer/viewer-properties.e2e.ts index 97829f30b4..ab0f3af141 100644 --- a/e2e/core/viewer/viewer-properties.e2e.ts +++ b/e2e/core/viewer/viewer-properties.e2e.ts @@ -49,7 +49,7 @@ describe('Viewer - properties', () => { }); const uploadActions = new UploadActions(this.alfrescoJsApi); - beforeAll(async (done) => { + beforeAll(async () => { await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); await this.alfrescoJsApi.core.peopleApi.addPerson(acsUser); @@ -64,136 +64,133 @@ describe('Viewer - properties', () => { await loginPage.loginToContentServicesUsingUserModel(acsUser); - contentServicesPage.goToDocumentList(); + await contentServicesPage.goToDocumentList(); - contentServicesPage.checkAcsContainer(); + await contentServicesPage.checkAcsContainer(); - viewerPage.viewFile(pngFile.name); + await viewerPage.viewFile(pngFile.name); - viewerPage.clickLeftSidebarButton(); - viewerPage.checkLeftSideBarIsDisplayed(); + await viewerPage.clickLeftSidebarButton(); + await viewerPage.checkLeftSideBarIsDisplayed(); - done(); }); - afterAll(async (done) => { + afterAll(async () => { await uploadActions.deleteFileOrFolder(pngFile.getId()); await navigationBarPage.clickLogoutButton(); - done(); }); - it('[C260066] Should Show/Hide viewer toolbar when showToolbar is true/false', () => { - viewerPage.checkToolbarIsDisplayed(); - viewerPage.disableToolbar(); - viewerPage.checkToolbarIsNotDisplayed(); - viewerPage.enableToolbar(); + it('[C260066] Should Show/Hide viewer toolbar when showToolbar is true/false', async () => { + await viewerPage.checkToolbarIsDisplayed(); + await viewerPage.disableToolbar(); + await viewerPage.checkToolbarIsNotDisplayed(); + await viewerPage.enableToolbar(); }); - it('[C260076] Should Show/Hide back button when allowGoBack is true/false', () => { - viewerPage.checkGoBackIsDisplayed(); - viewerPage.disableGoBack(); - viewerPage.checkGoBackIsNotDisplayed(); - viewerPage.enableGoBack(); + it('[C260076] Should Show/Hide back button when allowGoBack is true/false', async () => { + await viewerPage.checkGoBackIsDisplayed(); + await viewerPage.disableGoBack(); + await viewerPage.checkGoBackIsNotDisplayed(); + await viewerPage.enableGoBack(); }); - it('[C260077] Should Show toolbar options dropdown when adf-viewer-open-with directive is used', () => { - viewerPage.checkToolbarOptionsIsNotDisplayed(); - viewerPage.enableToolbarOptions(); - viewerPage.checkToolbarOptionsIsDisplayed(); - viewerPage.disableToolbarOptions(); + it('[C260077] Should Show toolbar options dropdown when adf-viewer-open-with directive is used', async () => { + await viewerPage.checkToolbarOptionsIsNotDisplayed(); + await viewerPage.enableToolbarOptions(); + await viewerPage.checkToolbarOptionsIsDisplayed(); + await viewerPage.disableToolbarOptions(); }); - it('[C260079] Should Show/Hide download button when allowDownload is true/false', () => { - viewerPage.checkDownloadButtonDisplayed(); - viewerPage.disableDownload(); - viewerPage.checkDownloadButtonIsNotDisplayed(); - viewerPage.enableDownload(); + it('[C260079] Should Show/Hide download button when allowDownload is true/false', async () => { + await viewerPage.checkDownloadButtonDisplayed(); + await viewerPage.disableDownload(); + await viewerPage.checkDownloadButtonIsNotDisplayed(); + await viewerPage.enableDownload(); }); - it('[C260082] Should Show/Hide print button when allowPrint is true/false', () => { - viewerPage.checkPrintButtonIsDisplayed(); - viewerPage.disablePrint(); - viewerPage.checkPrintButtonIsNotDisplayed(); - viewerPage.enablePrint(); + it('[C260082] Should Show/Hide print button when allowPrint is true/false', async () => { + await viewerPage.checkPrintButtonIsDisplayed(); + await viewerPage.disablePrint(); + await viewerPage.checkPrintButtonIsNotDisplayed(); + await viewerPage.enablePrint(); }); - it('[C260092] Should show adf-viewer-toolbar-actions directive buttons when adf-viewer-toolbar-actions is used', () => { - viewerPage.checkMoreActionsDisplayed(); + it('[C260092] Should show adf-viewer-toolbar-actions directive buttons when adf-viewer-toolbar-actions is used', async () => { + await viewerPage.checkMoreActionsDisplayed(); - viewerPage.disableMoreActions(); + await viewerPage.disableMoreActions(); - viewerPage.checkMoreActionsIsNotDisplayed(); + await viewerPage.checkMoreActionsIsNotDisplayed(); - viewerPage.enableMoreActions(); + await viewerPage.enableMoreActions(); }); - it('[C260074] Should show a custom file name when displayName property is used', () => { - viewerPage.checkFileNameIsDisplayed(pngFile.name); + it('[C260074] Should show a custom file name when displayName property is used', async () => { + await viewerPage.checkFileNameIsDisplayed(pngFile.name); - viewerPage.enableCustomName(); + await viewerPage.enableCustomName(); - viewerPage.enterCustomName('test custom title'); - viewerPage.checkFileNameIsDisplayed('test custom title'); + await viewerPage.enterCustomName('test custom title'); + await viewerPage.checkFileNameIsDisplayed('test custom title'); - viewerPage.disableCustomName(); + await viewerPage.disableCustomName(); }); - it('[C260090] Should showSidebar allow right info-drawer to be shown', () => { - viewerPage.clickToggleRightSidebar(); - viewerPage.checkInfoSideBarIsDisplayed(); + it('[C260090] Should showSidebar allow right info-drawer to be shown', async () => { + await viewerPage.clickToggleRightSidebar(); + await viewerPage.checkInfoSideBarIsDisplayed(); - viewerPage.clickToggleRightSidebar(); - viewerPage.checkInfoSideBarIsNotDisplayed(); + await viewerPage.clickToggleRightSidebar(); + await viewerPage.checkInfoSideBarIsNotDisplayed(); }); - it('[C286442] Should showLeftSidebar allow left info-drawer to be shown', () => { - viewerPage.clickToggleLeftSidebar(); - viewerPage.checkLeftSideBarIsNotDisplayed(); - viewerPage.clickLeftSidebarButton(); - viewerPage.checkLeftSideBarIsDisplayed(); + it('[C286442] Should showLeftSidebar allow left info-drawer to be shown', async () => { + await viewerPage.clickToggleLeftSidebar(); + await viewerPage.checkLeftSideBarIsNotDisplayed(); + await viewerPage.clickLeftSidebarButton(); + await viewerPage.checkLeftSideBarIsDisplayed(); }); - it('[C260089] Should Show/Hide info-drawer if allowSidebar true/false', () => { - viewerPage.clickInfoButton(); + it('[C260089] Should Show/Hide info-drawer if allowSidebar true/false', async () => { + await viewerPage.clickInfoButton(); - viewerPage.checkInfoSideBarIsDisplayed(); - viewerPage.checkInfoButtonIsDisplayed(); + await viewerPage.checkInfoSideBarIsDisplayed(); + await viewerPage.checkInfoButtonIsDisplayed(); - viewerPage.disableAllowSidebar(); + await viewerPage.disableAllowSidebar(); - viewerPage.checkInfoButtonIsNotDisplayed(); - viewerPage.checkInfoSideBarIsNotDisplayed(); + await viewerPage.checkInfoButtonIsNotDisplayed(); + await viewerPage.checkInfoSideBarIsNotDisplayed(); }); - it('[C286596] Should Show/Hide left info-drawer if allowLeftSidebar true/false', () => { - viewerPage.checkLeftSideBarIsDisplayed(); - viewerPage.checkLeftSideBarButtonIsDisplayed(); + it('[C286596] Should Show/Hide left info-drawer if allowLeftSidebar true/false', async () => { + await viewerPage.checkLeftSideBarIsDisplayed(); + await viewerPage.checkLeftSideBarButtonIsDisplayed(); - viewerPage.disableAllowLeftSidebar(); + await viewerPage.disableAllowLeftSidebar(); - viewerPage.checkLeftSideBarButtonIsNotDisplayed(); - viewerPage.checkLeftSideBarIsNotDisplayed(); + await viewerPage.checkLeftSideBarButtonIsNotDisplayed(); + await viewerPage.checkLeftSideBarIsNotDisplayed(); }); - it('[C260100] Should be possible to disable Overlay viewer', () => { - viewerPage.clickCloseButton(); - navigationBarPage.scrollTo(navigationBarPage.overlayViewerButton); - navigationBarPage.clickOverlayViewerButton(); + it('[C260100] Should be possible to disable Overlay viewer', async () => { + await viewerPage.clickCloseButton(); + await navigationBarPage.clickOverlayViewerButton(); - dataTable.doubleClickRow('Name', fileForOverlay.name); - viewerPage.checkOverlayViewerIsDisplayed(); - viewerPage.clickCloseButton(); - dataTable.doubleClickRow('Name', pngFile.name); - viewerPage.checkOverlayViewerIsDisplayed(); - viewerPage.clickCloseButton(); + await dataTable.doubleClickRow('Name', fileForOverlay.name); + await viewerPage.checkOverlayViewerIsDisplayed(); + await viewerPage.clickCloseButton(); + await dataTable.doubleClickRow('Name', pngFile.name); + await viewerPage.checkOverlayViewerIsDisplayed(); + await viewerPage.clickCloseButton(); - viewerPage.disableOverlay(); - dataTable.doubleClickRow('Name', fileForOverlay.name); - viewerPage.checkImgContainerIsDisplayed(); - viewerPage.checkInlineViewerIsDisplayed(); - dataTable.doubleClickRow('Name', pngFile.name); - viewerPage.checkImgContainerIsDisplayed(); - viewerPage.checkInlineViewerIsDisplayed(); + await viewerPage.disableOverlay(); + await dataTable.doubleClickRow('Name', fileForOverlay.name); + await viewerPage.checkImgContainerIsDisplayed(); + await viewerPage.checkInlineViewerIsDisplayed(); + await dataTable.doubleClickRow('Name', pngFile.name); + await viewerPage.checkImgContainerIsDisplayed(); + await viewerPage.checkInlineViewerIsDisplayed(); }); }); diff --git a/e2e/core/viewer/viewer-share-content.ts b/e2e/core/viewer/viewer-share-content.ts index 5d9554040e..947b4cf13a 100644 --- a/e2e/core/viewer/viewer-share-content.ts +++ b/e2e/core/viewer/viewer-share-content.ts @@ -34,9 +34,9 @@ describe('Viewer', () => { const loginPage = new LoginPage(); const contentServicesPage = new ContentServicesPage(); this.alfrescoJsApi = new AlfrescoApi({ - provider: 'ECM', - hostEcm: browser.params.testConfig.adf_acs.host - }); + provider: 'ECM', + hostEcm: browser.params.testConfig.adf_acs.host + }); const uploadActions = new UploadActions(this.alfrescoJsApi); let site; const acsUser = new AcsUserModel(); @@ -56,7 +56,7 @@ describe('Viewer', () => { let pngFileShared, wordFileUploaded; - beforeAll(async (done) => { + beforeAll(async () => { await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); await this.alfrescoJsApi.core.peopleApi.addPerson(acsUser); @@ -80,49 +80,44 @@ describe('Viewer', () => { pngFileShared = await this.alfrescoJsApi.core.sharedlinksApi.addSharedLink({ 'nodeId': pngFileUploaded.entry.id }); - done(); }); - afterAll(async (done) => { + afterAll(async () => { await this.alfrescoJsApi.login(acsUser.id, acsUser.password); await uploadActions.deleteFileOrFolder(wordFileUploaded.entry.id); - await navigationBarPage.clickLogoutButton(); - done(); }); beforeEach(async () => { await loginPage.loginToContentServicesUsingUserModel(acsUser); }); - it('[C260105] Should be able to open an image file shared via API', () => { - BrowserActions.getUrl(browser.params.testConfig.adf.url + '/preview/s/' + pngFileShared.entry.id); - viewerPage.checkImgContainerIsDisplayed(); - BrowserActions.getUrl(browser.params.testConfig.adf.url); - navigationBarPage.clickLogoutButton(); - BrowserActions.getUrl(browser.params.testConfig.adf.url + '/preview/s/' + pngFileShared.entry.id); - viewerPage.checkImgContainerIsDisplayed(); + it('[C260105] Should be able to open an image file shared via API', async () => { + await BrowserActions.getUrl(browser.params.testConfig.adf.url + '/preview/s/' + pngFileShared.entry.id); + await viewerPage.checkImgContainerIsDisplayed(); + await BrowserActions.getUrl(browser.params.testConfig.adf.url); + await navigationBarPage.clickLogoutButton(); + await BrowserActions.getUrl(browser.params.testConfig.adf.url + '/preview/s/' + pngFileShared.entry.id); + await viewerPage.checkImgContainerIsDisplayed(); }); - it('[C260106] Should be able to open a Word file shared via API', () => { - navigationBarPage.clickContentServicesButton(); - contentServicesPage.waitForTableBody(); + it('[C260106] Should be able to open a Word file shared via API', async () => { + await navigationBarPage.clickContentServicesButton(); + await contentServicesPage.waitForTableBody(); - contentList.selectRow(wordFileInfo.name); - contentServicesPage.clickShareButton(); - shareDialog.checkDialogIsDisplayed(); - shareDialog.clickShareLinkButton(); - browser.controlFlow().execute(async () => { - const sharedLink = await shareDialog.getShareLink(); + await contentList.selectRow(wordFileInfo.name); + await contentServicesPage.clickShareButton(); + await shareDialog.checkDialogIsDisplayed(); + await shareDialog.clickShareLinkButton(); + const sharedLink = await shareDialog.getShareLink(); - await BrowserActions.getUrl(sharedLink); - viewerPage.checkFileIsLoaded(); - viewerPage.checkFileNameIsDisplayed(wordFileInfo.name); + await BrowserActions.getUrl(sharedLink); + await viewerPage.checkFileIsLoaded(); + await viewerPage.checkFileNameIsDisplayed(wordFileInfo.name); - await BrowserActions.getUrl(browser.params.testConfig.adf.url); - navigationBarPage.clickLogoutButton(); - await BrowserActions.getUrl(sharedLink); - viewerPage.checkFileIsLoaded(); - viewerPage.checkFileNameIsDisplayed(wordFileInfo.name); - }); + await BrowserActions.getUrl(browser.params.testConfig.adf.url); + await navigationBarPage.clickLogoutButton(); + await BrowserActions.getUrl(sharedLink); + await viewerPage.checkFileIsLoaded(); + await viewerPage.checkFileNameIsDisplayed(wordFileInfo.name); }); }); diff --git a/e2e/insights/analytics-component.e2e.ts b/e2e/insights/analytics-component.e2e.ts index 346f954515..6abbd4160a 100644 --- a/e2e/insights/analytics-component.e2e.ts +++ b/e2e/insights/analytics-component.e2e.ts @@ -36,7 +36,7 @@ describe('Analytics Smoke Test', () => { let tenantId; const reportTitle = 'New Title'; - beforeAll(async (done) => { + beforeAll(async () => { this.alfrescoJsApi = new AlfrescoApi({ provider: 'BPM', hostBpm: browser.params.testConfig.adf_aps.host @@ -53,22 +53,21 @@ describe('Analytics Smoke Test', () => { await loginPage.loginToProcessServicesUsingUserModel(procUserModel); - done(); }); - afterAll(async (done) => { + afterAll(async () => { await this.alfrescoJsApi.activiti.adminTenantsApi.deleteTenant(tenantId); - done(); + }); - it('[C260346] Should be able to change title of a report', () => { - navigationBarPage.navigateToProcessServicesPage(); - processServicesPage.checkApsContainer(); - processServicesPage.goToApp('Task App'); - processServiceTabBarPage.clickReportsButton(); - analyticsPage.checkNoReportMessage(); - analyticsPage.getReport('Process definition heat map'); - analyticsPage.changeReportTitle(reportTitle); - expect(analyticsPage.getReportTitle()).toEqual(reportTitle); + it('[C260346] Should be able to change title of a report', async () => { + await navigationBarPage.navigateToProcessServicesPage(); + await processServicesPage.checkApsContainer(); + await processServicesPage.goToApp('Task App'); + await processServiceTabBarPage.clickReportsButton(); + await analyticsPage.checkNoReportMessage(); + await analyticsPage.getReport('Process definition heat map'); + await analyticsPage.changeReportTitle(reportTitle); + await expect(await analyticsPage.getReportTitle()).toEqual(reportTitle); }); }); diff --git a/e2e/pages/adf/cardViewComponentPage.ts b/e2e/pages/adf/cardViewComponentPage.ts index 0a420099cd..8b0f3750da 100644 --- a/e2e/pages/adf/cardViewComponentPage.ts +++ b/e2e/pages/adf/cardViewComponentPage.ts @@ -15,182 +15,207 @@ * limitations under the License. */ -import { by, element } from 'protractor'; +import { by, element, ElementFinder } from 'protractor'; import { BrowserVisibility, BrowserActions } from '@alfresco/adf-testing'; -import { ElementFinder } from 'protractor/built/element'; export class CardViewComponentPage { - addButton = element(by.className('adf-card-view__key-value-pairs__add-btn')); - keyValueRow = 'card-view__key-value-pairs__row'; + addButton: ElementFinder = element(by.className('adf-card-view__key-value-pairs__add-btn')); selectValue = 'mat-option'; - textField = element(by.css(`input[data-automation-id='card-textitem-editinput-name']`)); - intField = element(by.css(`input[data-automation-id='card-textitem-editinput-int']`)); - floatField = element(by.css(`input[data-automation-id='card-textitem-editinput-float']`)); - valueInputField = element(by.xpath(`//*[contains(@id,'input') and @placeholder='Value']`)); - nameInputField = element(by.xpath(`//*[contains(@id,'input') and @placeholder='Name']`)); - consoleLog = element(by.className('adf-console')); - deleteButton = element.all(by.className('adf-card-view__key-value-pairs__remove-btn')).first(); - select = element(by.css('mat-select[data-automation-class="select-box"]')); - checkbox = element(by.css(`mat-checkbox[data-automation-id='card-boolean-boolean']`)); - resetButton = element(by.css(`#adf-reset-card-log`)); - listContent = element(by.css('.mat-select-panel')); - editableSwitch = element(by.id('adf-toggle-editable')); + textField: ElementFinder = element(by.css(`input[data-automation-id='card-textitem-editinput-name']`)); + intField: ElementFinder = element(by.css(`input[data-automation-id='card-textitem-editinput-int']`)); + floatField: ElementFinder = element(by.css(`input[data-automation-id='card-textitem-editinput-float']`)); + valueInputField: ElementFinder = element(by.xpath(`//*[contains(@id,'input') and @placeholder='Value']`)); + nameInputField: ElementFinder = element(by.xpath(`//*[contains(@id,'input') and @placeholder='Name']`)); + consoleLog: ElementFinder = element(by.className('adf-console')); + deleteButton: ElementFinder = element.all(by.className('adf-card-view__key-value-pairs__remove-btn')).first(); + select: ElementFinder = element(by.css('mat-select[data-automation-class="select-box"]')); + checkbox: ElementFinder = element(by.css(`mat-checkbox[data-automation-id='card-boolean-boolean']`)); + resetButton: ElementFinder = element(by.css(`#adf-reset-card-log`)); + listContent: ElementFinder = element(by.css('.mat-select-panel')); + editableSwitch: ElementFinder = element(by.id('adf-toggle-editable')); + clearDateSwitch: ElementFinder = element(by.id('adf-toggle-clear-date')); + noneOptionSwitch: ElementFinder = element(by.id('adf-toggle-none-option')); - clickOnAddButton() { - BrowserActions.click(this.addButton); - return this; + async clickOnAddButton(): Promise { + await BrowserActions.click(this.addButton); } - clickOnResetButton() { - BrowserActions.click(this.resetButton); - return this; + async clickOnResetButton(): Promise { + await BrowserActions.click(this.resetButton); } - clickOnTextField() { - const toggleText = element(by.css(`div[data-automation-id='card-textitem-edit-toggle-name']`)); - BrowserActions.click(toggleText); - BrowserVisibility.waitUntilElementIsVisible(this.textField); - return this; + async clickOnTextField(): Promise { + const toggleText: ElementFinder = element(by.css(`div[data-automation-id='card-textitem-edit-toggle-name']`)); + await BrowserActions.click(toggleText); + await BrowserVisibility.waitUntilElementIsVisible(this.textField); } - clickOnTextClearIcon() { - const clearIcon = element(by.css(`mat-icon[data-automation-id="card-textitem-reset-name"]`)); - BrowserActions.click(clearIcon); + async clickOnTextClearIcon(): Promise { + const clearIcon: ElementFinder = element(by.css(`mat-icon[data-automation-id="card-textitem-reset-name"]`)); + await BrowserActions.click(clearIcon); } - clickOnTextSaveIcon() { - const saveIcon = element(by.css(`mat-icon[data-automation-id="card-textitem-update-name"]`)); - BrowserActions.click(saveIcon); + async clickOnTextSaveIcon(): Promise { + const saveIcon: ElementFinder = element(by.css(`mat-icon[data-automation-id="card-textitem-update-name"]`)); + await BrowserActions.click(saveIcon); } - getTextFieldText() { - const textField = element(by.css(`span[data-automation-id="card-textitem-value-name"]`)); + getTextFieldText(): Promise { + const textField: ElementFinder = element(by.css(`span[data-automation-id="card-textitem-value-name"]`)); return BrowserActions.getText(textField); } - enterTextField(text) { - BrowserVisibility.waitUntilElementIsVisible(this.textField); - BrowserActions.clearSendKeys(this.textField, text); - return this; + async enterTextField(text: string): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.textField); + await BrowserActions.clearSendKeys(this.textField, text); } - clickOnIntField() { - const toggleText = element(by.css('div[data-automation-id="card-textitem-edit-toggle-int"]')); - BrowserActions.click(toggleText); - BrowserVisibility.waitUntilElementIsVisible(this.intField); - return this; + async clickOnIntField(): Promise { + const toggleText: ElementFinder = element(by.css('div[data-automation-id="card-textitem-edit-toggle-int"]')); + await BrowserActions.click(toggleText); + await BrowserVisibility.waitUntilElementIsVisible(this.intField); } - clickOnIntClearIcon() { - const clearIcon = element(by.css('mat-icon[data-automation-id="card-textitem-reset-int"]')); - BrowserActions.click(clearIcon); + async clickOnIntClearIcon(): Promise { + const clearIcon: ElementFinder = element(by.css('mat-icon[data-automation-id="card-textitem-reset-int"]')); + await BrowserActions.click(clearIcon); } - clickOnIntSaveIcon() { - const saveIcon = element(by.css('mat-icon[data-automation-id="card-textitem-update-int"]')); - BrowserActions.click(saveIcon); + async clickOnIntSaveIcon(): Promise { + const saveIcon: ElementFinder = element(by.css('mat-icon[data-automation-id="card-textitem-update-int"]')); + await BrowserActions.click(saveIcon); } - enterIntField(text) { - BrowserVisibility.waitUntilElementIsVisible(this.intField); - BrowserActions.clearSendKeys(this.intField, text); - return this; + async enterIntField(text): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.intField); + await BrowserActions.clearSendKeys(this.intField, text); } - getIntFieldText() { - const textField = element(by.css('span[data-automation-id="card-textitem-value-int"]')); + getIntFieldText(): Promise { + const textField: ElementFinder = element(by.css('span[data-automation-id="card-textitem-value-int"]')); return BrowserActions.getText(textField); } - getErrorInt() { - const errorElement = element(by.css('mat-error[data-automation-id="card-textitem-error-int"]')); + getErrorInt(): Promise { + const errorElement: ElementFinder = element(by.css('mat-error[data-automation-id="card-textitem-error-int"]')); return BrowserActions.getText(errorElement); } - clickOnFloatField() { - const toggleText = element(by.css('div[data-automation-id="card-textitem-edit-toggle-float"]')); - BrowserActions.click(toggleText); - BrowserVisibility.waitUntilElementIsVisible(this.floatField); - return this; + async clickOnFloatField(): Promise { + const toggleText: ElementFinder = element(by.css('div[data-automation-id="card-textitem-edit-toggle-float"]')); + await BrowserActions.click(toggleText); + await BrowserVisibility.waitUntilElementIsVisible(this.floatField); } - clickOnFloatClearIcon() { - const clearIcon = element(by.css(`mat-icon[data-automation-id="card-textitem-reset-float"]`)); - BrowserActions.click(clearIcon); + async clickOnFloatClearIcon(): Promise { + const clearIcon: ElementFinder = element(by.css(`mat-icon[data-automation-id="card-textitem-reset-float"]`)); + await BrowserActions.click(clearIcon); } - clickOnFloatSaveIcon() { - const saveIcon = element(by.css(`mat-icon[data-automation-id="card-textitem-update-float"]`)); - BrowserActions.click(saveIcon); + async clickOnFloatSaveIcon(): Promise { + const saveIcon: ElementFinder = element(by.css(`mat-icon[data-automation-id="card-textitem-update-float"]`)); + await BrowserActions.click(saveIcon); } - enterFloatField(text) { - BrowserVisibility.waitUntilElementIsVisible(this.floatField); - BrowserActions.clearSendKeys(this.floatField, text); - return this; + async enterFloatField(text): Promise { + await BrowserActions.clearSendKeys(this.floatField, text); } - getFloatFieldText() { - const textField = element(by.css('span[data-automation-id="card-textitem-value-float"]')); + getFloatFieldText(): Promise { + const textField: ElementFinder = element(by.css('span[data-automation-id="card-textitem-value-float"]')); return BrowserActions.getText(textField); } - getErrorFloat() { - const errorElement = element(by.css('mat-error[data-automation-id="card-textitem-error-float"]')); + getErrorFloat(): Promise { + const errorElement: ElementFinder = element(by.css('mat-error[data-automation-id="card-textitem-error-float"]')); return BrowserActions.getText(errorElement); } - setName(name) { - BrowserVisibility.waitUntilElementIsVisible(this.nameInputField); - this.nameInputField.sendKeys(name); - return this; + async setName(name: string): Promise { + await BrowserActions.clearSendKeys(this.nameInputField, name); } - setValue(value) { - BrowserVisibility.waitUntilElementIsVisible(this.valueInputField); - this.valueInputField.sendKeys(value); - return this; + async setValue(value): Promise { + await BrowserActions.clearSendKeys(this.valueInputField, value); } - waitForOutput() { - BrowserVisibility.waitUntilElementIsVisible(this.consoleLog); - return this; + async waitForOutput(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.consoleLog); } - getOutputText(index) { + getOutputText(index: number): Promise { return BrowserActions.getText(this.consoleLog.all(by.css('p')).get(index)); } - deletePairsValues() { - BrowserActions.click(this.deleteButton); - return this; + async deletePairsValues(): Promise { + await BrowserActions.click(this.deleteButton); } - clickSelectBox() { - BrowserActions.click(this.select); - BrowserVisibility.waitUntilElementIsVisible(this.listContent); + async clickSelectBox(): Promise { + await BrowserActions.click(this.select); + await BrowserVisibility.waitUntilElementIsVisible(this.listContent); } - checkboxClick() { - BrowserActions.click(this.checkbox); + async checkboxClick(): Promise { + await BrowserActions.click(this.checkbox); } - selectValueFromComboBox(index) { + async selectValueFromComboBox(index): Promise { const value: ElementFinder = element.all(by.className(this.selectValue)).get(index); - BrowserActions.click(value); - return this; + await BrowserActions.click(value); } - disableEdit() { - BrowserVisibility.waitUntilElementIsVisible(this.editableSwitch); + async disableEdit(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.editableSwitch); - this.editableSwitch.getAttribute('class').then((check) => { - if (check.indexOf('mat-checked') > -1) { - this.editableSwitch.click(); - expect(this.editableSwitch.getAttribute('class')).not.toContain('mat-checked'); - } - }); + const check = await this.editableSwitch.getAttribute('class'); + if (check.indexOf('mat-checked') > -1) { + await BrowserActions.click(this.editableSwitch); + await expect(await this.editableSwitch.getAttribute('class')).not.toContain('mat-checked'); + } + } + + async getDateValue(): Promise { + const dateValue = element(by.css('span[data-automation-id="card-date-value-date"]')); + return dateValue.getText(); + } + + async getDateTimeValue(): Promise { + const dateTimeValue = element(by.css('span[data-automation-id="card-datetime-value-datetime"]')); + return dateTimeValue.getText(); + } + + async clearDateField(): Promise { + const clearDateButton = element(by.css('mat-icon[data-automation-id="datepicker-date-clear-date"]')); + await BrowserActions.click(clearDateButton); + } + + async clearDateTimeField(): Promise { + const clearDateButton = element(by.css('mat-icon[data-automation-id="datepicker-date-clear-datetime"]')); + await BrowserActions.click(clearDateButton); + } + + async enableClearDate(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.clearDateSwitch); + + const switchClass = await this.clearDateSwitch.getAttribute('class'); + if (switchClass.indexOf('mat-checked') === -1) { + await this.clearDateSwitch.click(); + const clearDateChecked = element(by.css('mat-slide-toggle[id="adf-toggle-clear-date"][class*="mat-checked"]')); + await BrowserVisibility.waitUntilElementIsVisible(clearDateChecked); + } + } + + async enableNoneOption(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.noneOptionSwitch); + + const switchClass = await this.noneOptionSwitch.getAttribute('class'); + if (switchClass.indexOf('mat-checked') === -1) { + await this.noneOptionSwitch.click(); + const noneOptionChecked = element(by.css('mat-slide-toggle[id="adf-toggle-none-option"][class*="mat-checked"]')); + await BrowserVisibility.waitUntilElementIsVisible(noneOptionChecked); + } } } diff --git a/e2e/pages/adf/commentsPage.ts b/e2e/pages/adf/commentsPage.ts index 395620a51d..d1ab8950a9 100644 --- a/e2e/pages/adf/commentsPage.ts +++ b/e2e/pages/adf/commentsPage.ts @@ -15,59 +15,57 @@ * limitations under the License. */ -import { element, by } from 'protractor'; +import { element, by, ElementFinder, ElementArrayFinder } from 'protractor'; import { TabsPage } from '@alfresco/adf-testing'; import { BrowserVisibility, BrowserActions } from '@alfresco/adf-testing'; export class CommentsPage { - tabsPage = new TabsPage(); - numberOfComments = element(by.id('comment-header')); - commentUserIcon = element.all(by.id('comment-user-icon')); - commentUserName = element.all(by.id('comment-user')); - commentMessage = element.all(by.id('comment-message')); - commentTime = element.all(by.id('comment-time')); - commentInput = element(by.id('comment-input')); - addCommentButton = element(by.css("[data-automation-id='comments-input-add']")); + tabsPage: TabsPage = new TabsPage(); + numberOfComments: ElementFinder = element(by.id('comment-header')); + commentUserIcon: ElementArrayFinder = element.all(by.id('comment-user-icon')); + commentUserName: ElementArrayFinder = element.all(by.id('comment-user')); + commentMessage: ElementArrayFinder = element.all(by.id('comment-message')); + commentTime: ElementArrayFinder = element.all(by.id('comment-time')); + commentInput: ElementFinder = element(by.id('comment-input')); + addCommentButton: ElementFinder = element(by.css("[data-automation-id='comments-input-add']")); - getTotalNumberOfComments() { + async getTotalNumberOfComments(): Promise { return BrowserActions.getText(this.numberOfComments); } - checkUserIconIsDisplayed(position) { - BrowserVisibility.waitUntilElementIsVisible(this.commentUserIcon.first()); - return this.commentUserIcon.get(position); + async checkUserIconIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.commentUserIcon.first()); } - getUserName(position) { + getUserName(position): Promise { return BrowserActions.getText(this.commentUserName.get(position)); } - getMessage(position) { + getMessage(position): Promise { return BrowserActions.getText(this.commentMessage.get(position)); } - getTime(position) { + getTime(position): Promise { return BrowserActions.getText(this.commentTime.get(position)); } - checkCommentInputIsNotDisplayed() { - BrowserVisibility.waitUntilElementIsNotVisible(this.commentInput); + async checkCommentInputIsNotDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsNotVisible(this.commentInput); } - addComment(comment) { - BrowserVisibility.waitUntilElementIsVisible(this.commentInput); - this.commentInput.sendKeys(comment); - BrowserActions.click(this.addCommentButton); + async addComment(comment): Promise { + await BrowserActions.clearSendKeys(this.commentInput, comment); + await BrowserActions.click(this.addCommentButton); } - checkCommentsTabIsSelected() { - this.tabsPage.checkTabIsSelectedByTitle('Comments'); + async checkCommentsTabIsSelected(): Promise { + await this.tabsPage.checkTabIsSelectedByTitle('Comments'); } - checkCommentInputIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.commentInput); + async checkCommentInputIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.commentInput); } } diff --git a/e2e/pages/adf/configEditorPage.ts b/e2e/pages/adf/configEditorPage.ts index f6738fd142..e2144ac042 100644 --- a/e2e/pages/adf/configEditorPage.ts +++ b/e2e/pages/adf/configEditorPage.ts @@ -15,35 +15,32 @@ * limitations under the License. */ -import { element, by, browser } from 'protractor'; +import { element, by, browser, ElementFinder } from 'protractor'; import { BrowserVisibility, BrowserActions } from '@alfresco/adf-testing'; export class ConfigEditorPage { - textField = element(by.css('#adf-form-config-editor div.overflow-guard > textarea')); + textField: ElementFinder = element(by.css('#adf-form-config-editor div.overflow-guard > textarea')); - enterConfiguration(text) { - - BrowserVisibility.waitUntilElementIsVisible(this.textField); - this.textField.sendKeys(text); - return this; + async enterConfiguration(text): Promise { + await BrowserActions.clearSendKeys(this.textField, text); } - clickSaveButton() { - const saveButton = element(by.id('adf-form-config-save')); - BrowserActions.click(saveButton); + async clickSaveButton(): Promise { + const saveButton: ElementFinder = element(by.id('adf-form-config-save')); + await BrowserActions.click(saveButton); } - clickClearButton() { - BrowserVisibility.waitUntilElementIsVisible(this.textField); - const clearButton = element(by.id('adf-form-config-clear')); - BrowserActions.click(clearButton); + async clickClearButton(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.textField); + const clearButton: ElementFinder = element(by.id('adf-form-config-clear')); + await BrowserActions.click(clearButton); } - enterBulkConfiguration(text) { - this.clickClearButton(); - BrowserVisibility.waitUntilElementIsVisible(this.textField); - browser.executeScript('this.monaco.editor.getModels()[0].setValue(`' + JSON.stringify(text) + '`)'); - this.clickSaveButton(); + async enterBulkConfiguration(text): Promise { + await this.clickClearButton(); + await BrowserVisibility.waitUntilElementIsVisible(this.textField); + await browser.executeScript('this.monaco.editor.getModels()[0].setValue(`' + JSON.stringify(text) + '`)'); + await this.clickSaveButton(); } } diff --git a/e2e/pages/adf/content-services/breadcrumb/breadCrumbDropdownPage.ts b/e2e/pages/adf/content-services/breadcrumb/breadCrumbDropdownPage.ts index caa2995796..0f8b70d6c9 100644 --- a/e2e/pages/adf/content-services/breadcrumb/breadCrumbDropdownPage.ts +++ b/e2e/pages/adf/content-services/breadcrumb/breadCrumbDropdownPage.ts @@ -15,32 +15,31 @@ * limitations under the License. */ -import { element, by } from 'protractor'; +import { element, by, ElementFinder } from 'protractor'; import { BrowserVisibility, BrowserActions } from '@alfresco/adf-testing'; export class BreadCrumbDropdownPage { - breadCrumb = element(by.css(`adf-dropdown-breadcrumb[data-automation-id='content-node-selector-content-breadcrumb']`)); + breadCrumb: ElementFinder = element(by.css(`adf-dropdown-breadcrumb[data-automation-id='content-node-selector-content-breadcrumb']`)); parentFolder = this.breadCrumb.element(by.css(`button[data-automation-id='dropdown-breadcrumb-trigger']`)); - breadCrumbDropdown = element(by.css(`div[class*='mat-select-panel']`)); + breadCrumbDropdown: ElementFinder = element.all(by.css(`div[class*='mat-select-panel']`)).first(); currentFolder = this.breadCrumb.element(by.css(`div span[data-automation-id="current-folder"]`)); - choosePath(pathName) { + async choosePath(pathName): Promise { const path = this.breadCrumbDropdown.element(by.cssContainingText(`mat-option[data-automation-class='dropdown-breadcrumb-path-option'] span[class='mat-option-text']`, pathName)); - BrowserActions.click(path); - + await BrowserActions.click(path); } - clickParentFolder() { - BrowserActions.click(this.parentFolder); + async clickParentFolder(): Promise { + await BrowserActions.click(this.parentFolder); } - checkBreadCrumbDropdownIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.breadCrumbDropdown); + async checkBreadCrumbDropdownIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.breadCrumbDropdown); } - getTextOfCurrentFolder() { + async getTextOfCurrentFolder(): Promise { return BrowserActions.getText(this.currentFolder); } } diff --git a/e2e/pages/adf/content-services/breadcrumb/breadCrumbPage.ts b/e2e/pages/adf/content-services/breadcrumb/breadCrumbPage.ts index 6a299ae746..ba863e82ef 100644 --- a/e2e/pages/adf/content-services/breadcrumb/breadCrumbPage.ts +++ b/e2e/pages/adf/content-services/breadcrumb/breadCrumbPage.ts @@ -15,16 +15,16 @@ * limitations under the License. */ -import { element, by } from 'protractor'; +import { element, by, ElementFinder } from 'protractor'; import { BrowserActions } from '@alfresco/adf-testing'; export class BreadCrumbPage { - breadCrumb = element(by.css(`adf-breadcrumb nav[data-automation-id='breadcrumb']`)); + breadCrumb: ElementFinder = element(by.css(`adf-breadcrumb nav[data-automation-id='breadcrumb']`)); - chooseBreadCrumb(breadCrumbItem) { + async chooseBreadCrumb(breadCrumbItem): Promise { const path = this.breadCrumb.element(by.css(`a[data-automation-id='breadcrumb_${breadCrumbItem}']`)); - BrowserActions.click(path); + await BrowserActions.click(path); } } diff --git a/e2e/pages/adf/content-services/treeViewPage.ts b/e2e/pages/adf/content-services/treeViewPage.ts index 3497e9fc95..228df5a2e5 100644 --- a/e2e/pages/adf/content-services/treeViewPage.ts +++ b/e2e/pages/adf/content-services/treeViewPage.ts @@ -15,76 +15,72 @@ * limitations under the License. */ -import { element, by, protractor } from 'protractor'; +import { element, by, ElementFinder, ElementArrayFinder, protractor } from 'protractor'; import { BrowserVisibility, BrowserActions } from '@alfresco/adf-testing'; export class TreeViewPage { - treeViewTitle = element(by.cssContainingText('app-tree-view div', 'TREE VIEW TEST')); - nodeIdInput = element(by.css('input[placeholder="Node Id"]')); - noNodeMessage = element(by.id('adf-tree-view-missing-node')); - nodesOnPage = element.all(by.css('mat-tree-node')); + treeViewTitle: ElementFinder = element(by.cssContainingText('app-tree-view div', 'TREE VIEW TEST')); + nodeIdInput: ElementFinder = element(by.css('input[placeholder="Node Id"]')); + noNodeMessage: ElementFinder = element(by.id('adf-tree-view-missing-node')); + nodesOnPage: ElementArrayFinder = element.all(by.css('mat-tree-node')); - checkTreeViewTitleIsDisplayed() { - return BrowserVisibility.waitUntilElementIsVisible(this.treeViewTitle); + async checkTreeViewTitleIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.treeViewTitle); } - getNodeId() { - BrowserVisibility.waitUntilElementIsVisible(this.nodeIdInput); - return this.nodeIdInput.getAttribute('value'); + async getNodeId(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.nodeIdInput); + return await this.nodeIdInput.getAttribute('value'); } - clickNode(nodeName) { - const node = element(by.css('mat-tree-node[id="' + nodeName + '-tree-child-node"] button')); - return BrowserActions.click(node); + async clickNode(nodeName): Promise { + const node: ElementFinder = element(by.css('mat-tree-node[id="' + nodeName + '-tree-child-node"] button')); + await BrowserActions.click(node); } - checkNodeIsDisplayedAsClosed(nodeName) { - const node = element(by.css('mat-tree-node[id="' + nodeName + '-tree-child-node"][aria-expanded="false"]')); - return BrowserVisibility.waitUntilElementIsVisible(node); + async checkNodeIsDisplayedAsClosed(nodeName): Promise { + const node: ElementFinder = element(by.css('mat-tree-node[id="' + nodeName + '-tree-child-node"][aria-expanded="false"]')); + await BrowserVisibility.waitUntilElementIsVisible(node); } - checkNodeIsDisplayedAsOpen(nodeName) { - const node = element(by.css('mat-tree-node[id="' + nodeName + '-tree-child-node"][aria-expanded="true"]')); - return BrowserVisibility.waitUntilElementIsVisible(node); + async checkNodeIsDisplayedAsOpen(nodeName): Promise { + const node: ElementFinder = element(by.css('mat-tree-node[id="' + nodeName + '-tree-child-node"][aria-expanded="true"]')); + await BrowserVisibility.waitUntilElementIsVisible(node); } - checkClickedNodeName(nodeName) { - const clickedNode = element(by.cssContainingText('span', ' CLICKED NODE: ' + nodeName + '')); - return BrowserVisibility.waitUntilElementIsVisible(clickedNode); + async checkClickedNodeName(nodeName): Promise { + const clickedNode: ElementFinder = element(by.cssContainingText('span', ' CLICKED NODE: ' + nodeName + '')); + await BrowserVisibility.waitUntilElementIsVisible(clickedNode); } - checkNodeIsNotDisplayed(nodeName) { - const node = element(by.id('' + nodeName + '-tree-child-node')); - return BrowserVisibility.waitUntilElementIsNotVisible(node); + async checkNodeIsNotDisplayed(nodeName): Promise { + const node: ElementFinder = element(by.id('' + nodeName + '-tree-child-node')); + await BrowserVisibility.waitUntilElementIsNotVisible(node); } - clearNodeIdInput() { - BrowserVisibility.waitUntilElementIsVisible(this.nodeIdInput); - this.nodeIdInput.getAttribute('value').then((value) => { - for (let i = value.length; i >= 0; i--) { - this.nodeIdInput.sendKeys(protractor.Key.BACK_SPACE); - } - }); + async clearNodeIdInput(): Promise { + await BrowserActions.click(this.nodeIdInput); + await BrowserActions.clearWithBackSpace(this.nodeIdInput); } - checkNoNodeIdMessageIsDisplayed() { - return BrowserVisibility.waitUntilElementIsVisible(this.noNodeMessage); + async checkNoNodeIdMessageIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.noNodeMessage); } - addNodeId(nodeId) { - BrowserActions.click(this.nodeIdInput); - this.nodeIdInput.clear(); - this.nodeIdInput.sendKeys(nodeId + ' '); - this.nodeIdInput.sendKeys(protractor.Key.BACK_SPACE); + async addNodeId(nodeId): Promise { + await BrowserActions.click(this.nodeIdInput); + await BrowserActions.clearSendKeys(this.nodeIdInput, nodeId); + await this.nodeIdInput.sendKeys('a'); + await this.nodeIdInput.sendKeys(protractor.Key.BACK_SPACE); } - checkErrorMessageIsDisplayed() { - const clickedNode = element(by.cssContainingText('span', 'An Error Occurred ')); - return BrowserVisibility.waitUntilElementIsVisible(clickedNode); + async checkErrorMessageIsDisplayed(): Promise { + const clickedNode: ElementFinder = element(by.cssContainingText('span', 'An Error Occurred ')); + await BrowserVisibility.waitUntilElementIsVisible(clickedNode); } - getTotalNodes() { - return this.nodesOnPage.count(); + async getTotalNodes() { + return await this.nodesOnPage.count(); } } diff --git a/e2e/pages/adf/contentServicesPage.ts b/e2e/pages/adf/contentServicesPage.ts index ad4856c55e..44797c087b 100644 --- a/e2e/pages/adf/contentServicesPage.ts +++ b/e2e/pages/adf/contentServicesPage.ts @@ -19,7 +19,7 @@ import { FolderDialog } from './dialog/folderDialog'; import { CreateLibraryDialog } from './dialog/createLibraryDialog'; import { FormControllersPage } from '@alfresco/adf-testing'; import { DropActions } from '../../actions/drop.actions'; -import { by, element, protractor, $$, browser } from 'protractor'; +import { by, element, protractor, $$, browser, ElementFinder } from 'protractor'; import path = require('path'); import { BrowserVisibility, DocumentListPage, BrowserActions, DateUtil } from '@alfresco/adf-testing'; @@ -35,166 +35,158 @@ export class ContentServicesPage { created: 'Created' }; - contentList = new DocumentListPage(element.all(by.css('adf-upload-drag-area adf-document-list')).first()); - formControllersPage = new FormControllersPage(); - multipleFileUploadToggle = element(by.id('adf-document-list-enable-drop-files')); - createFolderDialog = new FolderDialog(); - createLibraryDialog = new CreateLibraryDialog(); - dragAndDropAction = new DropActions(); - uploadBorder = element(by.id('document-list-container')); - contentServices = element(by.css('.adf-sidenav-link[data-automation-id="Content Services"]')); - currentFolder = element(by.css('div[class*="adf-breadcrumb-item adf-active"] div')); - createFolderButton = element(by.css('button[data-automation-id="create-new-folder"]')); - editFolderButton = element(by.css('button[data-automation-id="edit-folder"]')); - createLibraryButton = element(by.css('button[data-automation-id="create-new-library"]')); - activeBreadcrumb = element(by.css('div[class*="active"]')); + contentList: DocumentListPage = new DocumentListPage(element.all(by.css('adf-upload-drag-area adf-document-list')).first()); + formControllersPage: FormControllersPage = new FormControllersPage(); + createFolderDialog: FolderDialog = new FolderDialog(); + createLibraryDialog: CreateLibraryDialog = new CreateLibraryDialog(); + dragAndDropAction: DropActions = new DropActions(); + + multipleFileUploadToggle: ElementFinder = element(by.id('adf-document-list-enable-drop-files')); + uploadBorder: ElementFinder = element(by.id('document-list-container')); + contentServices: ElementFinder = element(by.css('.adf-sidenav-link[data-automation-id="Content Services"]')); + currentFolder: ElementFinder = element(by.css('div[class*="adf-breadcrumb-item adf-active"] div')); + createFolderButton: ElementFinder = element(by.css('button[data-automation-id="create-new-folder"]')); + editFolderButton: ElementFinder = element(by.css('button[data-automation-id="edit-folder"]')); + createLibraryButton: ElementFinder = element(by.css('button[data-automation-id="create-new-library"]')); + activeBreadcrumb: ElementFinder = element(by.css('div[class*="active"]')); tooltip = by.css('div[class*="--text adf-full-width"] span'); - uploadFileButton = element(by.css('.adf-upload-button-file-container button')); - uploadFileButtonInput = element(by.css('input[data-automation-id="upload-single-file"]')); - uploadMultipleFileButton = element(by.css('input[data-automation-id="upload-multiple-files"]')); - uploadFolderButton = element(by.css('input[data-automation-id="uploadFolder"]')); - errorSnackBar = element(by.css('simple-snack-bar[class*="mat-simple-snackbar"]')); - emptyPagination = element(by.css('adf-pagination[class*="adf-pagination__empty"]')); - dragAndDrop = element.all(by.css('adf-upload-drag-area div')).first(); - nameHeader = element(by.css('div[data-automation-id="auto_id_name"] > span')); - sizeHeader = element(by.css('div[data-automation-id="auto_id_content.sizeInBytes"] > span')); - createdByHeader = element(by.css('div[data-automation-id="auto_id_createdByUser.displayName"] > span')); - createdHeader = element(by.css('div[data-automation-id="auto_id_createdAt"] > span')); - recentFiles = element(by.css('.adf-container-recent')); - recentFilesExpanded = element(by.css('.adf-container-recent mat-expansion-panel-header.mat-expanded')); - recentFilesClosed = element(by.css('.adf-container-recent mat-expansion-panel-header')); - recentFileIcon = element(by.css('.adf-container-recent mat-expansion-panel-header mat-icon')); - documentListSpinner = element(by.css('mat-progress-spinner')); - emptyFolder = element(by.css('.adf-empty-folder-this-space-is-empty')); - emptyFolderImage = element(by.css('.adf-empty-folder-image')); - emptyRecent = element(by.css('.adf-container-recent .adf-empty-list__title')); - gridViewButton = element(by.css('button[data-automation-id="document-list-grid-view"]')); - cardViewContainer = element(by.css('div.adf-document-list-container div.adf-datatable-card')); - shareNodeButton = element(by.cssContainingText('mat-icon', ' share ')); + uploadFileButton: ElementFinder = element(by.css('.adf-upload-button-file-container button')); + uploadFileButtonInput: ElementFinder = element(by.css('input[data-automation-id="upload-single-file"]')); + uploadMultipleFileButton: ElementFinder = element(by.css('input[data-automation-id="upload-multiple-files"]')); + uploadFolderButton: ElementFinder = element(by.css('input[data-automation-id="uploadFolder"]')); + errorSnackBar: ElementFinder = element(by.css('simple-snack-bar[class*="mat-simple-snackbar"]')); + emptyPagination: ElementFinder = element(by.css('adf-pagination[class*="adf-pagination__empty"]')); + dragAndDrop: ElementFinder = element.all(by.css('adf-upload-drag-area div')).first(); + nameHeader: ElementFinder = element(by.css('div[data-automation-id="auto_id_name"] > span')); + sizeHeader: ElementFinder = element(by.css('div[data-automation-id="auto_id_content.sizeInBytes"] > span')); + createdByHeader: ElementFinder = element(by.css('div[data-automation-id="auto_id_createdByUser.displayName"] > span')); + createdHeader: ElementFinder = element(by.css('div[data-automation-id="auto_id_createdAt"] > span')); + recentFiles: ElementFinder = element(by.css('.adf-container-recent')); + recentFilesExpanded: ElementFinder = element(by.css('.adf-container-recent mat-expansion-panel-header.mat-expanded')); + recentFilesClosed: ElementFinder = element(by.css('.adf-container-recent mat-expansion-panel-header')); + recentFileIcon: ElementFinder = element(by.css('.adf-container-recent mat-expansion-panel-header mat-icon')); + emptyFolder: ElementFinder = element(by.css('.adf-empty-folder-this-space-is-empty')); + emptyFolderImage: ElementFinder = element(by.css('.adf-empty-folder-image')); + emptyRecent: ElementFinder = element(by.css('.adf-container-recent .adf-empty-list__title')); + gridViewButton: ElementFinder = element(by.css('button[data-automation-id="document-list-grid-view"]')); + cardViewContainer: ElementFinder = element(by.css('div.adf-document-list-container div.adf-datatable-card')); + shareNodeButton: ElementFinder = element(by.cssContainingText('mat-icon', ' share ')); nameColumnHeader = 'name'; createdByColumnHeader = 'createdByUser.displayName'; createdColumnHeader = 'createdAt'; - deleteContentElement = element(by.css('button[data-automation-id*="DELETE"]')); - metadataAction = element(by.css('button[data-automation-id*="METADATA"]')); - versionManagerAction = element(by.css('button[data-automation-id*="VERSIONS"]')); - moveContentElement = element(by.css('button[data-automation-id*="MOVE"]')); - copyContentElement = element(by.css('button[data-automation-id*="COPY"]')); - lockContentElement = element(by.css('button[data-automation-id="DOCUMENT_LIST.ACTIONS.LOCK"]')); - downloadContent = element(by.css('button[data-automation-id*="DOWNLOAD"]')); - siteListDropdown = element(by.css(`mat-select[data-automation-id='site-my-files-option']`)); - downloadButton = element(by.css('button[title="Download"]')); - favoriteButton = element(by.css('button[data-automation-id="favorite"]')); - markedFavorite = element(by.cssContainingText( 'button[data-automation-id="favorite"] mat-icon', 'star')); - notMarkedFavorite = element(by.cssContainingText( 'button[data-automation-id="favorite"] mat-icon', 'star_border')); - multiSelectToggle = element(by.cssContainingText('span.mat-slide-toggle-content', ' Multiselect (with checkboxes) ')); + deleteContentElement: ElementFinder = element(by.css('button[data-automation-id*="DELETE"]')); + metadataAction: ElementFinder = element(by.css('button[data-automation-id*="METADATA"]')); + versionManagerAction: ElementFinder = element(by.css('button[data-automation-id*="VERSIONS"]')); + moveContentElement: ElementFinder = element(by.css('button[data-automation-id*="MOVE"]')); + copyContentElement: ElementFinder = element(by.css('button[data-automation-id*="COPY"]')); + lockContentElement: ElementFinder = element(by.css('button[data-automation-id="DOCUMENT_LIST.ACTIONS.LOCK"]')); + downloadContent: ElementFinder = element(by.css('button[data-automation-id*="DOWNLOAD"]')); + siteListDropdown: ElementFinder = element(by.css(`mat-select[data-automation-id='site-my-files-option']`)); + downloadButton: ElementFinder = element(by.css('button[title="Download"]')); + favoriteButton: ElementFinder = element(by.css('button[data-automation-id="favorite"]')); + markedFavorite: ElementFinder = element(by.cssContainingText('button[data-automation-id="favorite"] mat-icon', 'star')); + notMarkedFavorite: ElementFinder = element(by.cssContainingText('button[data-automation-id="favorite"] mat-icon', 'star_border')); + multiSelectToggle: ElementFinder = element(by.cssContainingText('span.mat-slide-toggle-content', ' Multiselect (with checkboxes) ')); - pressContextMenuActionNamed(actionName) { - BrowserActions.clickExecuteScript(`button[data-automation-id="context-${actionName}"]`); + async pressContextMenuActionNamed(actionName): Promise { + await BrowserActions.clickExecuteScript(`button[data-automation-id="context-${actionName}"]`); } - checkContextActionIsVisible(actionName) { - const actionButton = element(by.css(`button[data-automation-id="context-${actionName}"`)); - BrowserVisibility.waitUntilElementIsVisible(actionButton); - return actionButton; + async checkContextActionIsVisible(actionName) { + const actionButton: ElementFinder = element(by.css(`button[data-automation-id="context-${actionName}"`)); + await BrowserVisibility.waitUntilElementIsVisible(actionButton); } - checkContentActionIsEnabled(actionName) { - const actionButton = element(by.css(`button[data-automation-id="context-${actionName}"`)); - BrowserVisibility.waitUntilElementIsVisible(actionButton); + async isContextActionEnabled(actionName): Promise { + const actionButton: ElementFinder = element(by.css(`button[data-automation-id="context-${actionName}"`)); + await BrowserVisibility.waitUntilElementIsVisible(actionButton); return actionButton.isEnabled(); } - getDocumentList() { + getDocumentList(): DocumentListPage { return this.contentList; } - closeActionContext() { - BrowserActions.closeMenuAndDialogs(); - return this; + async closeActionContext(): Promise { + await BrowserActions.closeMenuAndDialogs(); } - checkLockedIcon(content) { - return this.contentList.checkLockedIcon(content); + async checkLockedIcon(content): Promise { + return await this.contentList.checkLockedIcon(content); } - checkUnlockedIcon(content) { - return this.contentList.checkUnlockedIcon(content); + async checkUnlockedIcon(content): Promise { + return await this.contentList.checkUnlockedIcon(content); } - checkDeleteIsDisabled(content) { - this.contentList.clickOnActionMenu(content); - this.waitForContentOptions(); - const disabledDelete = element(by.css(`button[data-automation-id*='DELETE'][disabled='true']`)); - BrowserVisibility.waitUntilElementIsVisible(disabledDelete); + async checkDeleteIsDisabled(content): Promise { + await this.contentList.clickOnActionMenu(content); + await this.waitForContentOptions(); + const disabledDelete: ElementFinder = element(by.css(`button[data-automation-id*='DELETE'][disabled='true']`)); + await BrowserVisibility.waitUntilElementIsVisible(disabledDelete); } - deleteContent(content) { - this.contentList.clickOnActionMenu(content); - this.waitForContentOptions(); - BrowserActions.click(this.deleteContentElement); + async deleteContent(content): Promise { + await this.contentList.clickOnActionMenu(content); + await this.waitForContentOptions(); + await BrowserActions.click(this.deleteContentElement); } - metadataContent(content) { - this.contentList.clickOnActionMenu(content); - this.waitForContentOptions(); - BrowserActions.click(this.metadataAction); + async metadataContent(content): Promise { + await this.contentList.clickOnActionMenu(content); + await this.waitForContentOptions(); + await BrowserActions.click(this.metadataAction); } - versionManagerContent(content) { - this.contentList.clickOnActionMenu(content); - this.waitForContentOptions(); - BrowserActions.click(this.versionManagerAction); + async versionManagerContent(content): Promise { + await this.contentList.clickOnActionMenu(content); + await this.waitForContentOptions(); + await BrowserActions.click(this.versionManagerAction); } - copyContent(content) { - this.contentList.clickOnActionMenu(content); - BrowserActions.click(this.copyContentElement); + async copyContent(content): Promise { + await this.contentList.clickOnActionMenu(content); + await BrowserActions.click(this.copyContentElement); } - lockContent(content) { - this.contentList.clickOnActionMenu(content); - BrowserActions.click(this.lockContentElement); + async lockContent(content): Promise { + await this.contentList.clickOnActionMenu(content); + await BrowserActions.click(this.lockContentElement); } - waitForContentOptions() { - BrowserVisibility.waitUntilElementIsVisible(this.copyContentElement); - BrowserVisibility.waitUntilElementIsVisible(this.moveContentElement); - BrowserVisibility.waitUntilElementIsVisible(this.deleteContentElement); - BrowserVisibility.waitUntilElementIsVisible(this.downloadContent); + async waitForContentOptions(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.copyContentElement); + await BrowserVisibility.waitUntilElementIsVisible(this.moveContentElement); + await BrowserVisibility.waitUntilElementIsVisible(this.deleteContentElement); + await BrowserVisibility.waitUntilElementIsVisible(this.downloadContent); } - clickFileHyperlink(fileName) { + async clickFileHyperlink(fileName): Promise { const hyperlink = this.contentList.dataTablePage().getFileHyperlink(fileName); - - BrowserActions.click(hyperlink); - return this; + await BrowserActions.click(hyperlink); } - checkFileHyperlinkIsEnabled(fileName) { + async checkFileHyperlinkIsEnabled(fileName): Promise { const hyperlink = this.contentList.dataTablePage().getFileHyperlink(fileName); - BrowserVisibility.waitUntilElementIsVisible(hyperlink); - return this; + await BrowserVisibility.waitUntilElementIsVisible(hyperlink); } - clickHyperlinkNavigationToggle() { - const hyperlinkToggle = element(by.cssContainingText('.mat-slide-toggle-content', 'Hyperlink navigation')); - BrowserActions.click(hyperlinkToggle); - return this; + async clickHyperlinkNavigationToggle(): Promise { + const hyperlinkToggle: ElementFinder = element(by.cssContainingText('.mat-slide-toggle-content', 'Hyperlink navigation')); + await BrowserActions.click(hyperlinkToggle); } - enableDropFilesInAFolder() { - this.formControllersPage.enableToggle(this.multipleFileUploadToggle); - return this; + async enableDropFilesInAFolder(): Promise { + await this.formControllersPage.enableToggle(this.multipleFileUploadToggle); } - disableDropFilesInAFolder() { - browser.executeScript('arguments[0].scrollIntoView()', this.multipleFileUploadToggle); - this.formControllersPage.disableToggle(this.multipleFileUploadToggle); - return this; + async disableDropFilesInAFolder(): Promise { + await browser.executeScript('arguments[0].scrollIntoView()', this.multipleFileUploadToggle); + await this.formControllersPage.disableToggle(this.multipleFileUploadToggle); } - getElementsDisplayedId() { - return this.contentList.dataTablePage().getAllRowsColumnValues(this.columns.nodeId); + async getElementsDisplayedId() { + return await this.contentList.dataTablePage().getAllRowsColumnValues(this.columns.nodeId); } checkElementsDateSortedAsc(elements) { @@ -229,459 +221,393 @@ export class ContentServicesPage { return sorted; } - getContentList() { - return this.contentList; + async checkRecentFileToBeShowed() { + await BrowserVisibility.waitUntilElementIsVisible(this.recentFiles); } - checkRecentFileToBeShowed() { - BrowserVisibility.waitUntilElementIsVisible(this.recentFiles); + async expandRecentFiles(): Promise { + await this.checkRecentFileToBeShowed(); + await this.checkRecentFileToBeClosed(); + await BrowserActions.click(this.recentFilesClosed); + await this.checkRecentFileToBeOpened(); } - expandRecentFiles() { - this.checkRecentFileToBeShowed(); - this.checkRecentFileToBeClosed(); - BrowserActions.click(this.recentFilesClosed); - this.checkRecentFileToBeOpened(); + async closeRecentFiles(): Promise { + await this.checkRecentFileToBeShowed(); + await this.checkRecentFileToBeOpened(); + await BrowserActions.click(this.recentFilesExpanded); + await this.checkRecentFileToBeClosed(); } - closeRecentFiles() { - this.checkRecentFileToBeShowed(); - this.checkRecentFileToBeOpened(); - BrowserActions.click(this.recentFilesExpanded); - this.checkRecentFileToBeClosed(); + async checkRecentFileToBeClosed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.recentFilesClosed); } - checkRecentFileToBeClosed() { - BrowserVisibility.waitUntilElementIsVisible(this.recentFilesClosed); + async checkRecentFileToBeOpened(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.recentFilesExpanded); } - checkRecentFileToBeOpened() { - BrowserVisibility.waitUntilElementIsVisible(this.recentFilesExpanded); + async getRecentFileIcon(): Promise { + return await BrowserActions.getText(this.recentFileIcon); } - async getRecentFileIcon() { - return BrowserActions.getText(this.recentFileIcon); + async checkAcsContainer(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.uploadBorder); } - checkAcsContainer() { - return BrowserVisibility.waitUntilElementIsVisible(this.uploadBorder); - } - - async waitForTableBody() { + async waitForTableBody(): Promise { await this.contentList.waitForTableBody(); } - goToDocumentList() { + async goToDocumentList(): Promise { const navigationBarPage = new NavigationBarPage(); - navigationBarPage.clickContentServicesButton(); - return this; + await navigationBarPage.clickContentServicesButton(); } - clickOnContentServices() { - BrowserActions.click(this.contentServices); + async clickOnContentServices(): Promise { + await BrowserActions.click(this.contentServices); } - numberOfResultsDisplayed() { - return this.contentList.dataTablePage().numberOfRows(); + async numberOfResultsDisplayed(): Promise { + return await this.contentList.dataTablePage().numberOfRows(); } - currentFolderName() { - const deferred = protractor.promise.defer(); - BrowserVisibility.waitUntilElementIsVisible(this.currentFolder); - this.currentFolder.getText().then(function (result) { - deferred.fulfill(result); - }); - return deferred.promise; + async currentFolderName(): Promise { + return await BrowserActions.getText(this.currentFolder); } - getAllRowsNameColumn() { - return this.contentList.getAllRowsColumnValues(this.columns.name); + async getAllRowsNameColumn(): Promise { + return await this.contentList.getAllRowsColumnValues(this.columns.name); } - sortByName(sortOrder: string) { - return this.contentList.dataTable.sortByColumn(sortOrder, this.nameColumnHeader); + async sortByName(sortOrder: string): Promise { + await this.contentList.dataTable.sortByColumn(sortOrder, this.nameColumnHeader); } - sortByAuthor(sortOrder: string) { - return this.contentList.dataTable.sortByColumn(sortOrder, this.createdByColumnHeader); + async sortByAuthor(sortOrder: string): Promise { + await this.contentList.dataTable.sortByColumn(sortOrder, this.createdByColumnHeader); } - sortByCreated(sortOrder: string) { - return this.contentList.dataTable.sortByColumn(sortOrder, this.createdColumnHeader); + async sortByCreated(sortOrder: string): Promise { + await this.contentList.dataTable.sortByColumn(sortOrder, this.createdColumnHeader); } - sortAndCheckListIsOrderedByName(sortOrder: string) { - this.sortByName(sortOrder); - const deferred = protractor.promise.defer(); - this.checkListIsSortedByNameColumn(sortOrder).then((result) => { - deferred.fulfill(result); - }); - return deferred.promise; + async sortAndCheckListIsOrderedByName(sortOrder: string): Promise { + await this.sortByName(sortOrder); + return await this.checkListIsSortedByNameColumn(sortOrder); } - async checkListIsSortedByNameColumn(sortOrder: string) { + async checkListIsSortedByNameColumn(sortOrder: string): Promise { return await this.contentList.dataTablePage().checkListIsSorted(sortOrder, this.columns.name); } - async checkListIsSortedByCreatedColumn(sortOrder: string) { + async checkListIsSortedByCreatedColumn(sortOrder: string): Promise { return await this.contentList.dataTablePage().checkListIsSorted(sortOrder, this.columns.created); } - async checkListIsSortedByAuthorColumn(sortOrder: string) { + async checkListIsSortedByAuthorColumn(sortOrder: string): Promise { return await this.contentList.dataTablePage().checkListIsSorted(sortOrder, this.columns.createdBy); } - async checkListIsSortedBySizeColumn(sortOrder: string) { + async checkListIsSortedBySizeColumn(sortOrder: string): Promise { return await this.contentList.dataTablePage().checkListIsSorted(sortOrder, this.columns.size); } - sortAndCheckListIsOrderedByAuthor(sortOrder: string) { - this.sortByAuthor(sortOrder); - const deferred = protractor.promise.defer(); - this.checkListIsSortedByAuthorColumn(sortOrder).then((result) => { - deferred.fulfill(result); - }); - return deferred.promise; + async sortAndCheckListIsOrderedByAuthor(sortOrder: string): Promise { + await this.sortByAuthor(sortOrder); + return await this.checkListIsSortedByAuthorColumn(sortOrder); } - sortAndCheckListIsOrderedByCreated(sortOrder: string) { - this.sortByCreated(sortOrder); - const deferred = protractor.promise.defer(); - this.checkListIsSortedByCreatedColumn(sortOrder).then((result) => { - deferred.fulfill(result); - }); - return deferred.promise; + async sortAndCheckListIsOrderedByCreated(sortOrder: string): Promise { + await this.sortByCreated(sortOrder); + return await this.checkListIsSortedByCreatedColumn(sortOrder); } - doubleClickRow(nodeName) { - this.contentList.doubleClickRow(nodeName); - return this; + async doubleClickRow(nodeName): Promise { + await this.contentList.doubleClickRow(nodeName); } - clickOnCreateNewFolder() { - BrowserActions.click(this.createFolderButton); - return this; + async clickOnCreateNewFolder(): Promise { + await BrowserActions.click(this.createFolderButton); } - clickOnFavoriteButton() { - BrowserActions.click(this.favoriteButton); - return this; + async clickOnFavoriteButton(): Promise { + await BrowserActions.click(this.favoriteButton); } - checkIsMarkedFavorite() { - BrowserVisibility.waitUntilElementIsVisible(this.markedFavorite); - return this; + async checkIsMarkedFavorite(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.markedFavorite); } - checkIsNotMarkedFavorite() { - BrowserVisibility.waitUntilElementIsVisible(this.notMarkedFavorite); - return this; + async checkIsNotMarkedFavorite(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.notMarkedFavorite); } - clickOnEditFolder() { - BrowserActions.click(this.editFolderButton); - return this; + async clickOnEditFolder(): Promise { + await BrowserActions.click(this.editFolderButton); } - checkEditFolderButtonIsEnabled() { + async isEditFolderButtonEnabled(): Promise { return this.editFolderButton.isEnabled(); } - openCreateLibraryDialog() { - BrowserActions.click(this.createLibraryButton); - this.createLibraryDialog.waitForDialogToOpen(); - return this.createLibraryDialog; + async openCreateLibraryDialog(): Promise { + await BrowserActions.click(this.createLibraryButton); + await this.createLibraryDialog.waitForDialogToOpen(); } - createNewFolder(folder) { - this.clickOnCreateNewFolder(); - this.createFolderDialog.addFolderName(folder); - browser.sleep(200); - this.createFolderDialog.clickOnCreateUpdateButton(); - return this; + async createNewFolder(folder): Promise { + await this.clickOnCreateNewFolder(); + await this.createFolderDialog.addFolderName(folder); + await this.createFolderDialog.clickOnCreateUpdateButton(); } - checkContentIsDisplayed(content) { - this.contentList.dataTablePage().checkContentIsDisplayed(this.columns.name, content); - return this; + async checkContentIsDisplayed(content): Promise { + await this.contentList.dataTablePage().checkContentIsDisplayed(this.columns.name, content); } - checkContentsAreDisplayed(content) { + async checkContentsAreDisplayed(content): Promise { for (let i = 0; i < content.length; i++) { - this.checkContentIsDisplayed(content[i]); + await this.checkContentIsDisplayed(content[i]); } - return this; } - checkContentIsNotDisplayed(content) { - this.contentList.dataTablePage().checkContentIsNotDisplayed(this.columns.name, content); - return this; + async checkContentIsNotDisplayed(content): Promise { + await this.contentList.dataTablePage().checkContentIsNotDisplayed(this.columns.name, content); } - getActiveBreadcrumb() { - BrowserVisibility.waitUntilElementIsVisible(this.activeBreadcrumb); - return this.activeBreadcrumb.getAttribute('title'); + async getActiveBreadcrumb(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.activeBreadcrumb); + return await this.activeBreadcrumb.getAttribute('title'); } - uploadFile(fileLocation) { - this.checkUploadButton(); - this.uploadFileButtonInput.sendKeys(path.resolve(path.join(browser.params.testConfig.main.rootPath, fileLocation))); - this.checkUploadButton(); - return this; + async uploadFile(fileLocation): Promise { + await this.checkUploadButton(); + await this.uploadFileButtonInput.sendKeys(path.resolve(path.join(browser.params.testConfig.main.rootPath, fileLocation))); + await this.checkUploadButton(); } - uploadMultipleFile(files) { - BrowserVisibility.waitUntilElementIsVisible(this.uploadMultipleFileButton); + async uploadMultipleFile(files): Promise { + await BrowserVisibility.waitUntilElementIsPresent(this.uploadMultipleFileButton); let allFiles = path.resolve(path.join(browser.params.testConfig.main.rootPath, files[0])); for (let i = 1; i < files.length; i++) { allFiles = allFiles + '\n' + path.resolve(path.join(browser.params.testConfig.main.rootPath, files[i])); } - this.uploadMultipleFileButton.sendKeys(allFiles); - BrowserVisibility.waitUntilElementIsVisible(this.uploadMultipleFileButton); - return this; + await this.uploadMultipleFileButton.sendKeys(allFiles); + await BrowserVisibility.waitUntilElementIsPresent(this.uploadMultipleFileButton); } - uploadFolder(folder) { - BrowserVisibility.waitUntilElementIsVisible(this.uploadFolderButton); - this.uploadFolderButton.sendKeys(path.resolve(path.join(browser.params.testConfig.main.rootPath, folder))); - BrowserVisibility.waitUntilElementIsVisible(this.uploadFolderButton); - return this; + async uploadFolder(folder): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.uploadFolderButton); + await this.uploadFolderButton.sendKeys(path.resolve(path.join(browser.params.testConfig.main.rootPath, folder))); + await BrowserVisibility.waitUntilElementIsVisible(this.uploadFolderButton); } - getSingleFileButtonTooltip() { - BrowserVisibility.waitUntilElementIsVisible(this.uploadFileButton); - return this.uploadFileButtonInput.getAttribute('title'); + async getSingleFileButtonTooltip(): Promise { + await BrowserVisibility.waitUntilElementIsPresent(this.uploadFileButton); + return await this.uploadFileButtonInput.getAttribute('title'); } - getMultipleFileButtonTooltip() { - BrowserVisibility.waitUntilElementIsVisible(this.uploadMultipleFileButton); - return this.uploadMultipleFileButton.getAttribute('title'); + async getMultipleFileButtonTooltip(): Promise { + await BrowserVisibility.waitUntilElementIsPresent(this.uploadMultipleFileButton); + return await this.uploadMultipleFileButton.getAttribute('title'); } - getFolderButtonTooltip() { - BrowserVisibility.waitUntilElementIsVisible(this.uploadFolderButton); - return this.uploadFolderButton.getAttribute('title'); + async getFolderButtonTooltip(): Promise { + await BrowserVisibility.waitUntilElementIsPresent(this.uploadFolderButton); + return await this.uploadFolderButton.getAttribute('title'); } - checkUploadButton() { - BrowserVisibility.waitUntilElementIsVisible(this.uploadFileButton); - BrowserVisibility.waitUntilElementIsClickable(this.uploadFileButton); - return this; + async checkUploadButton(): Promise { + await BrowserVisibility.waitUntilElementIsClickable(this.uploadFileButton); } - uploadButtonIsEnabled() { - return this.uploadFileButton.isEnabled(); + async uploadButtonIsEnabled(): Promise { + return await this.uploadFileButton.isEnabled(); } - getErrorMessage() { - BrowserVisibility.waitUntilElementIsVisible(this.errorSnackBar); - const deferred = protractor.promise.defer(); - this.errorSnackBar.getText().then(function (text) { - deferred.fulfill(text); - }); - return deferred.promise; + async getErrorMessage(): Promise { + return BrowserActions.getText(this.errorSnackBar); } - enableInfiniteScrolling() { - const infiniteScrollButton = element(by.cssContainingText('.mat-slide-toggle-content', 'Enable Infinite Scrolling')); - BrowserActions.click(infiniteScrollButton); - return this; + async enableInfiniteScrolling(): Promise { + const infiniteScrollButton: ElementFinder = element(by.cssContainingText('.mat-slide-toggle-content', 'Enable Infinite Scrolling')); + await BrowserActions.click(infiniteScrollButton); } - enableCustomPermissionMessage() { - const customPermissionMessage = element(by.cssContainingText('.mat-slide-toggle-content', 'Enable custom permission message')); - BrowserActions.click(customPermissionMessage); - return this; + async enableCustomPermissionMessage(): Promise { + const customPermissionMessage: ElementFinder = element(by.cssContainingText('.mat-slide-toggle-content', 'Enable custom permission message')); + await BrowserActions.click(customPermissionMessage); } - enableMediumTimeFormat() { - const mediumTimeFormat = element(by.css('#enableMediumTimeFormat')); - BrowserActions.click(mediumTimeFormat); - return this; + async enableMediumTimeFormat(): Promise { + const mediumTimeFormat: ElementFinder = element(by.css('#enableMediumTimeFormat')); + await BrowserActions.click(mediumTimeFormat); } - enableThumbnails() { - const thumbnailSlide = element(by.id('adf-thumbnails-upload-switch')); - BrowserActions.click(thumbnailSlide); - return this; + async enableThumbnails(): Promise { + const thumbnailSlide: ElementFinder = element(by.id('adf-thumbnails-upload-switch')); + await BrowserActions.click(thumbnailSlide); } - checkPaginationIsNotDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.emptyPagination); + async checkPaginationIsNotDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.emptyPagination); } - getDocumentListRowNumber() { - const documentList = element(by.css('adf-upload-drag-area adf-document-list')); - BrowserVisibility.waitUntilElementIsVisible(documentList); - return $$('adf-upload-drag-area adf-document-list .adf-datatable-row').count(); + async getDocumentListRowNumber(): Promise { + const documentList: ElementFinder = element(by.css('adf-upload-drag-area adf-document-list')); + await BrowserVisibility.waitUntilElementIsVisible(documentList); + return await $$('adf-upload-drag-area adf-document-list .adf-datatable-row').count(); } - checkColumnNameHeader() { - BrowserVisibility.waitUntilElementIsVisible(this.nameHeader); + async checkColumnNameHeader(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.nameHeader); } - checkColumnSizeHeader() { - BrowserVisibility.waitUntilElementIsVisible(this.sizeHeader); + async checkColumnSizeHeader(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.sizeHeader); } - checkColumnCreatedByHeader() { - BrowserVisibility.waitUntilElementIsVisible(this.createdByHeader); + async checkColumnCreatedByHeader(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.createdByHeader); } - checkColumnCreatedHeader() { - BrowserVisibility.waitUntilElementIsVisible(this.createdHeader); + async checkColumnCreatedHeader(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.createdHeader); } - checkDragAndDropDIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.dragAndDrop); + async checkDragAndDropDIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.dragAndDrop); } - dragAndDropFile(file) { - this.checkDragAndDropDIsDisplayed(); - this.dragAndDropAction.dropFile(this.dragAndDrop, file); + async dragAndDropFile(file): Promise { + await this.checkDragAndDropDIsDisplayed(); + await this.dragAndDropAction.dropFile(this.dragAndDrop, file); } - dragAndDropFolder(folder) { - this.checkDragAndDropDIsDisplayed(); - this.dragAndDropAction.dropFolder(this.dragAndDrop, folder); + async dragAndDropFolder(folder): Promise { + await this.checkDragAndDropDIsDisplayed(); + await this.dragAndDropAction.dropFolder(this.dragAndDrop, folder); } - checkLockIsDisplayedForElement(name) { - const lockButton = element(by.css(`div.adf-datatable-cell[data-automation-id="${name}"] button`)); - BrowserVisibility.waitUntilElementIsVisible(lockButton); + async checkLockIsDisplayedForElement(name): Promise { + const lockButton: ElementFinder = element(by.css(`div.adf-datatable-cell[data-automation-id="${name}"] button`)); + await BrowserVisibility.waitUntilElementIsVisible(lockButton); } - getColumnValueForRow(file, columnName) { - return this.contentList.dataTablePage().getColumnValueForRow(this.columns.name, file, columnName); + async getColumnValueForRow(file, columnName): Promise { + return await this.contentList.dataTablePage().getColumnValueForRow(this.columns.name, file, columnName); } - async getStyleValueForRowText(rowName, styleName) { - const row = element(by.css(`div.adf-datatable-cell[data-automation-id="${rowName}"] span.adf-datatable-cell-value[title="${rowName}"]`)); - BrowserVisibility.waitUntilElementIsVisible(row); - return row.getCssValue(styleName); + async getStyleValueForRowText(rowName, styleName): Promise { + const row: ElementFinder = element(by.css(`div.adf-datatable-cell[data-automation-id="${rowName}"] span.adf-datatable-cell-value[title="${rowName}"]`)); + await BrowserVisibility.waitUntilElementIsVisible(row); + return await row.getCssValue(styleName); } - checkSpinnerIsShowed() { - BrowserVisibility.waitUntilElementIsPresent(this.documentListSpinner); + async checkEmptyFolderTextToBe(text): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.emptyFolder); + await expect(await this.emptyFolder.getText()).toContain(text); } - checkEmptyFolderTextToBe(text) { - BrowserVisibility.waitUntilElementIsVisible(this.emptyFolder); - expect(this.emptyFolder.getText()).toContain(text); + async checkEmptyFolderImageUrlToContain(url): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.emptyFolderImage); + await expect(await this.emptyFolderImage.getAttribute('src')).toContain(url); } - checkEmptyFolderImageUrlToContain(url) { - BrowserVisibility.waitUntilElementIsVisible(this.emptyFolderImage); - expect(this.emptyFolderImage.getAttribute('src')).toContain(url); + async checkEmptyRecentFileIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.emptyRecent); } - checkEmptyRecentFileIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.emptyRecent); + async getRowIconImageUrl(fileName): Promise { + const iconRow: ElementFinder = element(by.css(`.adf-document-list-container div.adf-datatable-cell[data-automation-id="${fileName}"] img`)); + await BrowserVisibility.waitUntilElementIsVisible(iconRow); + return await iconRow.getAttribute('src'); } - checkIconForRowIsDisplayed(fileName) { - const iconRow = element(by.css(`.adf-document-list-container div.adf-datatable-cell[data-automation-id="${fileName}"] img`)); - BrowserVisibility.waitUntilElementIsVisible(iconRow); - return iconRow; + async checkGridViewButtonIsVisible(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.gridViewButton); } - async getRowIconImageUrl(fileName) { - const iconRow = this.checkIconForRowIsDisplayed(fileName); - return iconRow.getAttribute('src'); + async clickGridViewButton(): Promise { + await this.checkGridViewButtonIsVisible(); + await BrowserActions.click(this.gridViewButton); } - checkGridViewButtonIsVisible() { - BrowserVisibility.waitUntilElementIsVisible(this.gridViewButton); + async checkCardViewContainerIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.cardViewContainer); } - clickGridViewButton() { - this.checkGridViewButtonIsVisible(); - BrowserActions.click(this.gridViewButton); + async getCardElementShowedInPage(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.cardViewContainer); + return $$('div.adf-document-list-container div.adf-datatable-card div.adf-cell-value img').count(); } - checkCardViewContainerIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.cardViewContainer); + async getDocumentCardIconForElement(elementName): Promise { + const elementIcon: ElementFinder = element(by.css(`.adf-document-list-container div.adf-datatable-cell[data-automation-id="${elementName}"] img`)); + return await elementIcon.getAttribute('src'); } - getCardElementShowedInPage() { - this.checkCardViewContainerIsDisplayed(); - const actualCards = $$('div.adf-document-list-container div.adf-datatable-card div.adf-cell-value img').count(); - return actualCards; + async checkDocumentCardPropertyIsShowed(elementName, propertyName): Promise { + const elementProperty: ElementFinder = element(by.css(`.adf-document-list-container div.adf-datatable-cell[data-automation-id="${elementName}"][title="${propertyName}"]`)); + await BrowserVisibility.waitUntilElementIsVisible(elementProperty); } - getDocumentCardIconForElement(elementName) { - const elementIcon = element(by.css(`.adf-document-list-container div.adf-datatable-cell[data-automation-id="${elementName}"] img`)); - return elementIcon.getAttribute('src'); - } - - checkDocumentCardPropertyIsShowed(elementName, propertyName) { - const elementProperty = element(by.css(`.adf-document-list-container div.adf-datatable-cell[data-automation-id="${elementName}"][title="${propertyName}"]`)); - BrowserVisibility.waitUntilElementIsVisible(elementProperty); - } - - getAttributeValueForElement(elementName, propertyName) { + async getAttributeValueForElement(elementName, propertyName): Promise { const elementSize = element(by.css(`.adf-document-list-container div.adf-datatable-cell[data-automation-id="${elementName}"][title="${propertyName}"] span`)); - return BrowserActions.getText(elementSize); + return await BrowserActions.getText(elementSize); } - checkMenuIsShowedForElementIndex(elementIndex) { - const elementMenu = element(by.css(`button[data-automation-id="action_menu_${elementIndex}"]`)); - BrowserVisibility.waitUntilElementIsVisible(elementMenu); + async checkMenuIsShowedForElementIndex(elementIndex): Promise { + const elementMenu: ElementFinder = element(by.css(`button[data-automation-id="action_menu_${elementIndex}"]`)); + await BrowserVisibility.waitUntilElementIsVisible(elementMenu); } - navigateToCardFolder(folderName) { - BrowserActions.closeMenuAndDialogs(); - const folderCard = element(by.css(`.adf-document-list-container div.adf-image-table-cell.adf-datatable-cell[data-automation-id="${folderName}"]`)); - folderCard.click(); - const folderSelected = element(by.css(`.adf-datatable-row.adf-is-selected div[data-automation-id="${folderName}"].adf-datatable-cell--image`)); - BrowserVisibility.waitUntilElementIsVisible(folderSelected); - browser.actions().sendKeys(protractor.Key.ENTER).perform(); + async navigateToCardFolder(folderName): Promise { + await BrowserActions.closeMenuAndDialogs(); + const folderCard: ElementFinder = element(by.css(`.adf-document-list-container div.adf-image-table-cell.adf-datatable-cell[data-automation-id="${folderName}"]`)); + await BrowserActions.click(folderCard); + const folderSelected: ElementFinder = element(by.css(`.adf-datatable-row.adf-is-selected div[data-automation-id="${folderName}"].adf-datatable-cell--image`)); + await BrowserVisibility.waitUntilElementIsVisible(folderSelected); + await browser.actions().sendKeys(protractor.Key.ENTER).perform(); } - getGridViewSortingDropdown() { - const sortingDropdown = element(by.css('mat-select[data-automation-id="grid-view-sorting"]')); - BrowserVisibility.waitUntilElementIsVisible(sortingDropdown); - return sortingDropdown; + async selectGridSortingFromDropdown(sortingChosen): Promise { + const sortingDropdown: ElementFinder = element(by.css('mat-select[data-automation-id="grid-view-sorting"]')); + await BrowserActions.click(sortingDropdown); + const optionToClick: ElementFinder = element(by.css(`mat-option[data-automation-id="grid-view-sorting-${sortingChosen}"]`)); + await BrowserActions.click(optionToClick); } - selectGridSortingFromDropdown(sortingChosen) { - BrowserActions.closeMenuAndDialogs(); - const dropdownSorting = this.getGridViewSortingDropdown(); - BrowserActions.click(dropdownSorting); - const optionToClick = element(by.css(`mat-option[data-automation-id="grid-view-sorting-${sortingChosen}"]`)); - BrowserActions.click(optionToClick); - } - - checkRowIsDisplayed(rowName) { + async checkRowIsDisplayed(rowName): Promise { const row = this.contentList.dataTablePage().getCellElementByValue(this.columns.name, rowName); - BrowserVisibility.waitUntilElementIsVisible(row); + await BrowserVisibility.waitUntilElementIsVisible(row); } - clickShareButton() { - BrowserActions.closeMenuAndDialogs(); - BrowserActions.click(this.shareNodeButton); + async clickShareButton(): Promise { + await BrowserActions.closeMenuAndDialogs(); + await BrowserActions.click(this.shareNodeButton); } - checkSelectedSiteIsDisplayed(siteName) { - BrowserVisibility.waitUntilElementIsVisible(this.siteListDropdown.element(by.cssContainingText('.mat-select-value-text span', siteName))); + async checkSelectedSiteIsDisplayed(siteName): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.siteListDropdown.element(by.cssContainingText('.mat-select-value-text span', siteName))); } - selectSite(siteName: string) { - BrowserActions.clickOnSelectDropdownOption(siteName, this.siteListDropdown); - return this; + async selectSite(siteName: string): Promise { + await BrowserActions.clickOnSelectDropdownOption(siteName, this.siteListDropdown); } - clickDownloadButton() { - BrowserActions.closeMenuAndDialogs(); - BrowserActions.click(this.downloadButton); + async clickDownloadButton(): Promise { + await BrowserActions.closeMenuAndDialogs(); + await BrowserActions.click(this.downloadButton); } - clickMultiSelectToggle() { - BrowserActions.closeMenuAndDialogs(); - BrowserActions.click(this.multiSelectToggle); + async clickMultiSelectToggle() { + await BrowserActions.closeMenuAndDialogs(); + await BrowserActions.click(this.multiSelectToggle); } - getRowByName(rowName) { + getRowByName(rowName): ElementFinder { return this.contentList.dataTable.getRow(this.columns.name, rowName); } diff --git a/e2e/pages/adf/core/headerPage.ts b/e2e/pages/adf/core/headerPage.ts index 0a9c8ea8b9..d51314cf88 100644 --- a/e2e/pages/adf/core/headerPage.ts +++ b/e2e/pages/adf/core/headerPage.ts @@ -15,117 +15,116 @@ * limitations under the License. */ -import { element, by, protractor } from 'protractor'; +import { element, by, protractor, ElementFinder } from 'protractor'; import { BrowserVisibility, BrowserActions } from '@alfresco/adf-testing'; export class HeaderPage { - checkBox = element(by.cssContainingText('.mat-checkbox-label', 'Show menu button')); - headerColor = element(by.css('option[value="primary"]')); - titleInput = element(by.css('input[name="title"]')); - iconInput = element(by.css('input[placeholder="URL path"]')); - hexColorInput = element(by.css('input[placeholder="hex color code"]')); - logoHyperlinkInput = element(by.css('input[placeholder="Redirect URL"]')); - logoTooltipInput = element(by.css('input[placeholder="Tooltip text"]')); - positionStart = element.all(by.css('mat-radio-button[value="start"]')).first(); - positionEnd = element.all(by.css('mat-radio-button[value="end"]')).first(); - sideBarPositionRight = element(by.css('mat-sidenav.mat-drawer.mat-sidenav.mat-drawer-end')); - sideBarPositionLeft = element(by.css('mat-sidenav.mat-drawer.mat-sidenav')); + checkBox: ElementFinder = element(by.cssContainingText('.mat-checkbox-label', 'Show menu button')); + headerColor: ElementFinder = element(by.css('option[value="primary"]')); + titleInput: ElementFinder = element(by.css('input[name="title"]')); + iconInput: ElementFinder = element(by.css('input[placeholder="URL path"]')); + hexColorInput: ElementFinder = element(by.css('input[placeholder="hex color code"]')); + logoHyperlinkInput: ElementFinder = element(by.css('input[placeholder="Redirect URL"]')); + logoTooltipInput: ElementFinder = element(by.css('input[placeholder="Tooltip text"]')); + positionStart: ElementFinder = element.all(by.css('mat-radio-button[value="start"]')).first(); + positionEnd: ElementFinder = element.all(by.css('mat-radio-button[value="end"]')).first(); + sideBarPositionRight: ElementFinder = element(by.css('mat-sidenav.mat-drawer.mat-sidenav.mat-drawer-end')); + sideBarPositionLeft: ElementFinder = element(by.css('mat-sidenav.mat-drawer.mat-sidenav')); - checkShowMenuCheckBoxIsDisplayed() { - return BrowserVisibility.waitUntilElementIsVisible(this.checkBox); + async checkShowMenuCheckBoxIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.checkBox); } - checkChooseHeaderColourIsDisplayed() { - return BrowserVisibility.waitUntilElementIsVisible(this.headerColor); + async checkChooseHeaderColourIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.headerColor); } - checkChangeTitleIsDisplayed() { - return BrowserVisibility.waitUntilElementIsVisible(this.titleInput); + async checkChangeTitleIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.titleInput); } - checkChangeUrlPathIsDisplayed() { - return BrowserVisibility.waitUntilElementIsVisible(this.iconInput); + async checkChangeUrlPathIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.iconInput); } - clickShowMenuButton() { - const checkBox = element(by.css('mat-checkbox')); - BrowserVisibility.waitUntilElementIsVisible(checkBox); - return checkBox.get(0).click(); + async clickShowMenuButton(): Promise { + const checkBox: ElementFinder = element(by.css('mat-checkbox')); + await BrowserActions.click(checkBox.get(0)); } - changeHeaderColor(color) { - const headerColor = element(by.css('option[value="' + color + '"]')); - BrowserActions.click(headerColor); + async changeHeaderColor(color): Promise { + const headerColor: ElementFinder = element(by.css('option[value="' + color + '"]')); + await BrowserActions.click(headerColor); } - checkAppTitle(name) { - const title = element(by.cssContainingText('.adf-app-title', name)); - return BrowserVisibility.waitUntilElementIsVisible(title); + async checkAppTitle(name): Promise { + const title: ElementFinder = element(by.cssContainingText('.adf-app-title', name)); + await BrowserVisibility.waitUntilElementIsVisible(title); } - addTitle(title) { - BrowserActions.click(this.titleInput); - this.titleInput.sendKeys(title); - this.titleInput.sendKeys(protractor.Key.ENTER); + async addTitle(title): Promise { + await BrowserActions.click(this.titleInput); + await BrowserActions.clearSendKeys(this.titleInput, title); + await this.titleInput.sendKeys(protractor.Key.ENTER); } - checkIconIsDisplayed(url) { - const icon = element(by.css('img[src="' + url + '"]')); - BrowserVisibility.waitUntilElementIsVisible(icon); + async checkIconIsDisplayed(url): Promise { + const icon: ElementFinder = element(by.css('img[src="' + url + '"]')); + await BrowserVisibility.waitUntilElementIsVisible(icon); } - addIcon(url) { - BrowserActions.click(this.iconInput); - this.iconInput.sendKeys(url); - this.iconInput.sendKeys(protractor.Key.ENTER); + async addIcon(url): Promise { + await BrowserActions.click(this.iconInput); + await BrowserActions.clearSendKeys(this.iconInput, url); + await this.iconInput.sendKeys(protractor.Key.ENTER); } - checkHexColorInputIsDisplayed() { - return BrowserVisibility.waitUntilElementIsVisible(this.hexColorInput); + async checkHexColorInputIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.hexColorInput); } - checkLogoHyperlinkInputIsDisplayed() { - return BrowserVisibility.waitUntilElementIsVisible(this.logoHyperlinkInput); + async checkLogoHyperlinkInputIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.logoHyperlinkInput); } - checkLogoTooltipInputIsDisplayed() { - return BrowserVisibility.waitUntilElementIsVisible(this.logoTooltipInput); + async checkLogoTooltipInputIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.logoTooltipInput); } - addHexCodeColor(hexCode) { - BrowserActions.click(this.hexColorInput); - this.hexColorInput.sendKeys(hexCode); - return this.hexColorInput.sendKeys(protractor.Key.ENTER); + async addHexCodeColor(hexCode): Promise { + await BrowserActions.click(this.hexColorInput); + await this.hexColorInput.sendKeys(hexCode); + await this.hexColorInput.sendKeys(protractor.Key.ENTER); } - addLogoHyperlink(hyperlink) { - BrowserActions.click(this.logoHyperlinkInput); - this.logoHyperlinkInput.sendKeys(hyperlink); - return this.logoHyperlinkInput.sendKeys(protractor.Key.ENTER); + async addLogoHyperlink(hyperlink): Promise { + await BrowserActions.click(this.logoHyperlinkInput); + await this.logoHyperlinkInput.sendKeys(hyperlink); + await this.logoHyperlinkInput.sendKeys(protractor.Key.ENTER); } - addLogoTooltip(tooltip) { - BrowserActions.click(this.logoTooltipInput); - this.logoTooltipInput.sendKeys(tooltip); - return this.logoTooltipInput.sendKeys(protractor.Key.ENTER); + async addLogoTooltip(tooltip): Promise { + await BrowserActions.click(this.logoTooltipInput); + await this.logoTooltipInput.sendKeys(tooltip); + await this.logoTooltipInput.sendKeys(protractor.Key.ENTER); } - sideBarPositionStart() { - BrowserActions.click(this.positionStart); + async sideBarPositionStart(): Promise { + await BrowserActions.click(this.positionStart); } - sideBarPositionEnd() { - BrowserActions.click(this.positionEnd); + async sideBarPositionEnd(): Promise { + await BrowserActions.click(this.positionEnd); } - checkSidebarPositionStart() { - return BrowserVisibility.waitUntilElementIsVisible(this.sideBarPositionLeft); + async checkSidebarPositionStart(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.sideBarPositionLeft); } - checkSidebarPositionEnd() { - return BrowserVisibility.waitUntilElementIsVisible(this.sideBarPositionRight); + async checkSidebarPositionEnd(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.sideBarPositionRight); } } diff --git a/e2e/pages/adf/core/infinitePaginationPage.ts b/e2e/pages/adf/core/infinitePaginationPage.ts index 3494f649e1..0549aeeef2 100644 --- a/e2e/pages/adf/core/infinitePaginationPage.ts +++ b/e2e/pages/adf/core/infinitePaginationPage.ts @@ -15,9 +15,7 @@ * limitations under the License. */ -import { element, by } from 'protractor'; -import { ElementFinder } from 'protractor/built/element'; - +import { element, by, ElementFinder } from 'protractor'; import { BrowserVisibility, BrowserActions } from '@alfresco/adf-testing'; export class InfinitePaginationPage { @@ -30,13 +28,12 @@ export class InfinitePaginationPage { this.loadMoreButton = this.rootElement.element(by.css('button[data-automation-id="adf-infinite-pagination-button"]')); } - clickLoadMoreButton() { - BrowserActions.click(this.loadMoreButton); - return this; + async clickLoadMoreButton(): Promise { + await BrowserActions.click(this.loadMoreButton); } - checkLoadMoreButtonIsNotDisplayed() { - return BrowserVisibility.waitUntilElementIsNotOnPage(this.loadMoreButton); + async checkLoadMoreButtonIsNotDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsNotVisible(this.loadMoreButton); } } diff --git a/e2e/pages/adf/demo-shell/customSourcesPage.ts b/e2e/pages/adf/demo-shell/customSourcesPage.ts index 0e61299ead..8e0706ca5c 100644 --- a/e2e/pages/adf/demo-shell/customSourcesPage.ts +++ b/e2e/pages/adf/demo-shell/customSourcesPage.ts @@ -16,7 +16,7 @@ */ import { BrowserVisibility } from '@alfresco/adf-testing'; -import { element, by } from 'protractor'; +import { element, by, ElementFinder } from 'protractor'; import { DataTableComponentPage, BrowserActions } from '@alfresco/adf-testing'; import { NavigationBarPage } from '../navigationBarPage'; @@ -38,49 +38,48 @@ const column = { export class CustomSources { - dataTable = new DataTableComponentPage(); - navigationBarPage = new NavigationBarPage(); + dataTable: DataTableComponentPage = new DataTableComponentPage(); + navigationBarPage: NavigationBarPage = new NavigationBarPage(); - toolbar = element(by.css('app-custom-sources .adf-toolbar-title')); - sourceTypeDropdown = element(by.css('div[class*="select-arrow"]>div')); + toolbar: ElementFinder = element(by.css('app-custom-sources .adf-toolbar-title')); + sourceTypeDropdown: ElementFinder = element(by.css('div[class*="select-arrow"]>div')); - getSourceType(option) { + getSourceType(option): ElementFinder { return element(by.cssContainingText('.cdk-overlay-pane span', `${option}`)); } - waitForToolbarToBeVisible() { - BrowserVisibility.waitUntilElementIsVisible(this.toolbar); - return this; + async waitForToolbarToBeVisible(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.toolbar); } - navigateToCustomSources() { - this.navigationBarPage.navigateToCustomSources(); - this.waitForToolbarToBeVisible(); + async navigateToCustomSources(): Promise { + await this.navigationBarPage.clickCustomSources(); + await this.waitForToolbarToBeVisible(); } - clickOnSourceType() { - BrowserActions.click(this.sourceTypeDropdown); + async clickOnSourceType(): Promise { + await BrowserActions.click(this.sourceTypeDropdown); } - selectMySitesSourceType() { - this.clickOnSourceType(); - BrowserActions.click(this.getSourceType(source.mySites)); + async selectMySitesSourceType(): Promise { + await this.clickOnSourceType(); + await BrowserActions.click(this.getSourceType(source.mySites)); } - selectFavoritesSourceType() { - this.clickOnSourceType(); - BrowserActions.click(this.getSourceType(source.favorites)); + async selectFavoritesSourceType(): Promise { + await this.clickOnSourceType(); + await BrowserActions.click(this.getSourceType(source.favorites)); } - checkRowIsDisplayed(rowName) { + checkRowIsDisplayed(rowName): Promise { return this.dataTable.checkContentIsDisplayed('Name', rowName); } - checkRowIsNotDisplayed(rowName) { + checkRowIsNotDisplayed(rowName): Promise { return this.dataTable.checkContentIsNotDisplayed('Name', rowName); } - getStatusCell(rowName) { + async getStatusCell(rowName): Promise { const cell = this.dataTable.getCellByRowContentAndColumn('Name', rowName, column.status); return BrowserActions.getText(cell); } diff --git a/e2e/pages/adf/demo-shell/dataTablePage.ts b/e2e/pages/adf/demo-shell/dataTablePage.ts index 582918725e..4ca5b454ba 100644 --- a/e2e/pages/adf/demo-shell/dataTablePage.ts +++ b/e2e/pages/adf/demo-shell/dataTablePage.ts @@ -15,7 +15,7 @@ * limitations under the License. */ -import { browser, by, element, protractor } from 'protractor'; +import { browser, by, element, ElementArrayFinder, ElementFinder, protractor } from 'protractor'; import { DataTableComponentPage } from '@alfresco/adf-testing'; import { BrowserVisibility, BrowserActions } from '@alfresco/adf-testing'; @@ -33,20 +33,18 @@ export class DataTablePage { defaultTable: 'datatable' }; - dataTable; - multiSelect = element(by.css(`div[data-automation-id='multiselect'] label > div[class='mat-checkbox-inner-container']`)); - reset = element(by.xpath(`//span[contains(text(),'Reset to default')]/..`)); - selectionButton = element(by.css(`div[class='mat-select-arrow']`)); - selectionDropDown = element(by.css(`div[class*='ng-trigger-transformPanel']`)); - allSelectedRows = element.all(by.css(`div[class*='is-selected']`)); - selectedRowNumber = element(by.css(`div[class*='is-selected'] div[data-automation-id*='text_']`)); - selectAll = element(by.css(`div[class*='header'] label`)); - addRowElement = element(by.xpath(`//span[contains(text(),'Add row')]/..`)); - replaceRowsElement = element(by.xpath(`//span[contains(text(),'Replace rows')]/..`)); - replaceColumnsElement = element(by.xpath(`//span[contains(text(),'Replace columns')]/..`)); - createdOnColumn = element(by.css(`div[data-automation-id='auto_id_createdOn']`)); - idColumnHeader = element(by.css(`div[data-automation-id='auto_id_id']`)); - pasteClipboardInput = element(by.css(`input[data-automation-id='paste clipboard input']`)); + dataTable: DataTableComponentPage; + multiSelect: ElementFinder = element(by.css(`div[data-automation-id='multiselect'] label > div[class='mat-checkbox-inner-container']`)); + reset: ElementFinder = element(by.xpath(`//span[contains(text(),'Reset to default')]/..`)); + allSelectedRows: ElementArrayFinder = element.all(by.css(`div[class*='is-selected']`)); + selectedRowNumber: ElementFinder = element(by.css(`div[class*='is-selected'] div[data-automation-id*='text_']`)); + selectAll: ElementFinder = element(by.css(`div[class*='header'] label`)); + addRowElement: ElementFinder = element(by.xpath(`//span[contains(text(),'Add row')]/..`)); + replaceRowsElement: ElementFinder = element(by.xpath(`//span[contains(text(),'Replace rows')]/..`)); + replaceColumnsElement: ElementFinder = element(by.xpath(`//span[contains(text(),'Replace columns')]/..`)); + createdOnColumn: ElementFinder = element(by.css(`div[data-automation-id='auto_id_createdOn']`)); + idColumnHeader: ElementFinder = element(by.css(`div[data-automation-id='auto_id_id']`)); + pasteClipboardInput: ElementFinder = element(by.css(`input[data-automation-id='paste clipboard input']`)); constructor(data?) { if (this.data[data]) { @@ -56,142 +54,143 @@ export class DataTablePage { } } - insertFilter(filterText) { - const inputFilter = element(by.css(`#adf-datatable-filter-input`)); - inputFilter.clear(); - return inputFilter.sendKeys(filterText); + async insertFilter(filterText): Promise { + const inputFilter: ElementFinder = element(by.css(`#adf-datatable-filter-input`)); + await BrowserActions.clearSendKeys(inputFilter, filterText); } - addRow() { - BrowserActions.click(this.addRowElement); + async addRow(): Promise { + await BrowserActions.click(this.addRowElement); } - replaceRows(id) { + async replaceRows(id): Promise { const rowID = this.dataTable.getCellElementByValue(this.columns.id, id); - BrowserVisibility.waitUntilElementIsVisible(rowID); - BrowserActions.click(this.replaceRowsElement); - BrowserVisibility.waitUntilElementIsNotVisible(rowID); + await BrowserVisibility.waitUntilElementIsVisible(rowID); + await BrowserActions.click(this.replaceRowsElement); + await BrowserVisibility.waitUntilElementIsNotVisible(rowID); } - replaceColumns() { - BrowserActions.click(this.replaceColumnsElement); - BrowserVisibility.waitUntilElementIsNotOnPage(this.createdOnColumn); + async replaceColumns(): Promise { + await BrowserActions.click(this.replaceColumnsElement); + await BrowserVisibility.waitUntilElementIsNotVisible(this.createdOnColumn); } - clickMultiSelect() { - BrowserActions.click(this.multiSelect); + async clickMultiSelect(): Promise { + await BrowserActions.click(this.multiSelect); } - clickReset() { - BrowserActions.click(this.reset); + async clickReset(): Promise { + await BrowserActions.click(this.reset); } - checkRowIsNotSelected(rowNumber) { + async checkRowIsNotSelected(rowNumber: string): Promise { const isRowSelected = this.dataTable.getCellElementByValue(this.columns.id, rowNumber) .element(by.xpath(`ancestor::div[contains(@class, 'adf-datatable-row custom-row-style ng-star-inserted is-selected')]`)); - BrowserVisibility.waitUntilElementIsNotOnPage(isRowSelected); + await BrowserVisibility.waitUntilElementIsNotVisible(isRowSelected); } - checkNoRowIsSelected() { - BrowserVisibility.waitUntilElementIsNotOnPage(this.selectedRowNumber); + async checkNoRowIsSelected(): Promise { + await BrowserVisibility.waitUntilElementIsNotVisible(this.selectedRowNumber); } - checkAllRows() { - BrowserActions.click(this.selectAll); + async checkAllRows(): Promise { + await BrowserActions.click(this.selectAll); } - checkRowIsChecked(rowNumber) { - BrowserVisibility.waitUntilElementIsVisible(this.getRowCheckbox(rowNumber)); + async checkRowIsChecked(rowNumber: string): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.getRowCheckbox(rowNumber)); } - checkRowIsNotChecked(rowNumber) { - BrowserVisibility.waitUntilElementIsNotOnPage(this.getRowCheckbox(rowNumber)); + async checkRowIsNotChecked(rowNumber: string): Promise { + await BrowserVisibility.waitUntilElementIsNotVisible(this.getRowCheckbox(rowNumber)); } - getNumberOfSelectedRows() { + async getNumberOfSelectedRows(): Promise { return this.allSelectedRows.count(); } - clickCheckbox(rowNumber) { - BrowserActions.closeMenuAndDialogs(); + async clickCheckbox(rowNumber: string): Promise { + await BrowserActions.closeMenuAndDialogs(); const checkbox = this.dataTable.getCellElementByValue(this.columns.id, rowNumber) .element(by.xpath(`ancestor::div[contains(@class, 'adf-datatable-row')]//mat-checkbox/label`)); - BrowserActions.click(checkbox); + await BrowserActions.click(checkbox); } - async selectRow(rowNumber) { - BrowserActions.clickExecuteScript(`div[title="${this.columns.id}"] div[data-automation-id="text_${rowNumber}"] span`); - return this; - } - - selectRowWithKeyboard(rowNumber) { + async selectRow(rowNumber: string): Promise { const row = this.dataTable.getCellElementByValue(this.columns.id, rowNumber); - browser.actions().sendKeys(protractor.Key.COMMAND).click(row).perform(); + await BrowserActions.click(row); } - selectSelectionMode(selectionMode) { - const selectMode = element(by.cssContainingText(`span[class='mat-option-text']`, selectionMode)); - BrowserActions.clickExecuteScript('div[class="mat-select-arrow"]'); - BrowserActions.click(selectMode); + async selectRowWithKeyboard(rowNumber: string): Promise { + await browser.actions().sendKeys(protractor.Key.COMMAND).perform(); + await this.selectRow(rowNumber); + await browser.actions().sendKeys(protractor.Key.NULL).perform(); } - getRowCheckbox(rowNumber) { + async selectSelectionMode(selectionMode): Promise { + const selectMode: ElementFinder = element(by.cssContainingText(`span[class='mat-option-text']`, selectionMode)); + await BrowserActions.clickExecuteScript('div[class="mat-select-arrow"]'); + await BrowserActions.click(selectMode); + } + + getRowCheckbox(rowNumber: string): ElementFinder { return this.dataTable.getCellElementByValue(this.columns.id, rowNumber).element(by.xpath(`ancestor::div/div/mat-checkbox[contains(@class, 'mat-checkbox-checked')]`)); } - getCopyContentTooltip() { - return this.dataTable.getCopyContentTooltip(); + async getCopyContentTooltip(): Promise { + return await this.dataTable.getCopyContentTooltip(); } - mouseOverNameColumn(name) { - return this.dataTable.mouseOverColumn(this.columns.name, name); + async mouseOverNameColumn(name: string): Promise { + await this.dataTable.mouseOverColumn(this.columns.name, name); } - mouseOverCreatedByColumn(name) { - return this.dataTable.mouseOverColumn(this.columns.createdBy, name); + async mouseOverCreatedByColumn(name: string): Promise { + await this.dataTable.mouseOverColumn(this.columns.createdBy, name); } - mouseOverIdColumn(name) { - return this.dataTable.mouseOverColumn(this.columns.id, name); + async mouseOverIdColumn(name: string): Promise { + await this.dataTable.mouseOverColumn(this.columns.id, name); } - mouseOverJsonColumn(rowNumber) { - return this.dataTable.mouseOverElement(this.dataTable.getCellByRowNumberAndColumnName(rowNumber - 1, this.columns.json)); + async mouseOverJsonColumn(rowNumber: number): Promise { + const cell = this.dataTable.getCellByRowNumberAndColumnName(rowNumber - 1, this.columns.json); + await BrowserVisibility.waitUntilElementIsVisible(cell); + await browser.actions().mouseMove(cell).perform(); } - getDropTargetIdColumnCell(rowNumber) { + getDropTargetIdColumnCell(rowNumber: number): ElementFinder { return this.dataTable.getCellByRowNumberAndColumnName(rowNumber - 1, this.columns.id); } - getDropTargetIdColumnHeader() { + getDropTargetIdColumnHeader(): ElementFinder { return this.idColumnHeader; } - clickOnIdColumn(name) { - return this.dataTable.clickColumn(this.columns.id, name); + async clickOnIdColumn(name: string): Promise { + await this.dataTable.clickColumn(this.columns.id, name); } - clickOnJsonColumn(rowNumber) { - return BrowserActions.click(this.dataTable.getCellByRowNumberAndColumnName(rowNumber - 1, this.columns.json)); + async clickOnJsonColumn(rowNumber: number): Promise { + await BrowserActions.click(this.dataTable.getCellByRowNumberAndColumnName(rowNumber - 1, this.columns.json)); } - clickOnNameColumn(name) { - return this.dataTable.clickColumn(this.columns.name, name); + async clickOnNameColumn(name): Promise { + await this.dataTable.clickColumn(this.columns.name, name); } - clickOnCreatedByColumn(name) { - return this.dataTable.clickColumn(this.columns.createdBy, name); + async clickOnCreatedByColumn(name): Promise { + await this.dataTable.clickColumn(this.columns.createdBy, name); } - pasteClipboard() { - this.pasteClipboardInput.clear(); - BrowserActions.click(this.pasteClipboardInput); - this.pasteClipboardInput.sendKeys(protractor.Key.chord(protractor.Key.SHIFT, protractor.Key.INSERT)); - return this; + async pasteClipboard(): Promise { + await this.pasteClipboardInput.clear(); + await BrowserActions.click(this.pasteClipboardInput); + await this.pasteClipboardInput.sendKeys(protractor.Key.chord(protractor.Key.SHIFT, protractor.Key.INSERT)); } - getClipboardInputText() { - BrowserVisibility.waitUntilElementIsVisible(this.pasteClipboardInput); - return this.pasteClipboardInput.getAttribute('value'); + async getClipboardInputText(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.pasteClipboardInput); + return await this.pasteClipboardInput.getAttribute('value'); } } diff --git a/e2e/pages/adf/demo-shell/logoutPage.ts b/e2e/pages/adf/demo-shell/logoutPage.ts index c1bc5664b1..cbb60de956 100644 --- a/e2e/pages/adf/demo-shell/logoutPage.ts +++ b/e2e/pages/adf/demo-shell/logoutPage.ts @@ -15,14 +15,14 @@ * limitations under the License. */ -import { by, element } from 'protractor'; +import { by, element, ElementFinder } from 'protractor'; import { BrowserVisibility } from '@alfresco/adf-testing'; export class LogoutPage { - logoutSection = element(by.css('div[data-automation-id="adf-logout-section"]')); + logoutSection: ElementFinder = element(by.css('div[data-automation-id="adf-logout-section"]')); - checkLogoutSectionIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.logoutSection); + async checkLogoutSectionIsDisplayed() { + await BrowserVisibility.waitUntilElementIsVisible(this.logoutSection); } } diff --git a/e2e/pages/adf/demo-shell/monacoExtensionPage.ts b/e2e/pages/adf/demo-shell/monacoExtensionPage.ts index 7c4270bc1e..d1a54c87ac 100644 --- a/e2e/pages/adf/demo-shell/monacoExtensionPage.ts +++ b/e2e/pages/adf/demo-shell/monacoExtensionPage.ts @@ -15,14 +15,14 @@ * limitations under the License. */ -import { by, element } from 'protractor'; +import { by, element, ElementFinder } from 'protractor'; import { BrowserVisibility } from '@alfresco/adf-testing'; export class MonacoExtensionPage { - monacoPlugin = element(by.cssContainingText('mat-row > mat-cell', 'monaco plugin')); + monacoPlugin: ElementFinder = element(by.cssContainingText('mat-row > mat-cell', 'monaco plugin')); - checkMonacoPluginIsDisplayed() { - return BrowserVisibility.waitUntilElementIsVisible(this.monacoPlugin); + async checkMonacoPluginIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.monacoPlugin); } } diff --git a/e2e/pages/adf/demo-shell/process-services-cloud/cloudFormDemoPage.ts b/e2e/pages/adf/demo-shell/process-services-cloud/cloudFormDemoPage.ts index deef6a5818..c41feebcfd 100644 --- a/e2e/pages/adf/demo-shell/process-services-cloud/cloudFormDemoPage.ts +++ b/e2e/pages/adf/demo-shell/process-services-cloud/cloudFormDemoPage.ts @@ -16,29 +16,31 @@ */ import { ConfigEditorPage } from '../../configEditorPage'; -import { BrowserActions } from '@alfresco/adf-testing'; -import { by, element, browser } from 'protractor'; +import { BrowserActions, BrowserVisibility } from '@alfresco/adf-testing'; +import { by, element, ElementFinder } from 'protractor'; export class FormCloudDemoPage { - formCloudEditor = element.all(by.css('.mat-tab-list .mat-tab-label')).get(1); - formCloudRender = element.all(by.css('.mat-tab-list .mat-tab-label')).get(0); + formCloudEditor: ElementFinder = element.all(by.css('.mat-tab-list .mat-tab-label')).get(1); + formCloudRender: ElementFinder = element.all(by.css('.mat-tab-list .mat-tab-label')).get(0); configEditorPage = new ConfigEditorPage(); - goToEditor() { - BrowserActions.click(this.formCloudEditor); + async goToEditor(): Promise { + await BrowserActions.click(this.formCloudEditor); } - goToRenderedForm() { - BrowserActions.click(this.formCloudRender); + async goToRenderedForm(): Promise { + await BrowserActions.click(this.formCloudRender); } - setConfigToEditor(text) { - this.goToEditor(); - browser.sleep(2000); - this.configEditorPage.enterBulkConfiguration(text); - this.goToRenderedForm(); - browser.sleep(2000); + async setConfigToEditor(text): Promise { + const configEditor = element(by.id('adf-form-config-editor')); + const form = element(by.css('adf-cloud-form')); + await this.goToEditor(); + await BrowserVisibility.waitUntilElementIsVisible(configEditor); + await this.configEditorPage.enterBulkConfiguration(text); + await this.goToRenderedForm(); + await BrowserVisibility.waitUntilElementIsVisible(form); } } diff --git a/e2e/pages/adf/demo-shell/process-services-cloud/processDetailsCloudDemoPage.ts b/e2e/pages/adf/demo-shell/process-services-cloud/processDetailsCloudDemoPage.ts index f97570fcad..421e2de00f 100644 --- a/e2e/pages/adf/demo-shell/process-services-cloud/processDetailsCloudDemoPage.ts +++ b/e2e/pages/adf/demo-shell/process-services-cloud/processDetailsCloudDemoPage.ts @@ -19,15 +19,13 @@ import { DataTableComponentPage } from '@alfresco/adf-testing'; export class ProcessDetailsCloudDemoPage { - dataTable = new DataTableComponentPage(); + dataTable: DataTableComponentPage = new DataTableComponentPage(); - checkTaskIsDisplayed(taskName: string) { - this.dataTable.checkContentIsDisplayed('Name', taskName); - return this; + async checkTaskIsDisplayed(taskName: string): Promise { + await this.dataTable.checkContentIsDisplayed('Name', taskName); } - selectProcessTaskByName(taskName: string) { - this.dataTable.selectRow('Name', taskName); - return this; + async selectProcessTaskByName(taskName: string): Promise { + await this.dataTable.selectRow('Name', taskName); } } diff --git a/e2e/pages/adf/demo-shell/process-services/formDemoPage.ts b/e2e/pages/adf/demo-shell/process-services/formDemoPage.ts new file mode 100644 index 0000000000..634355e3d5 --- /dev/null +++ b/e2e/pages/adf/demo-shell/process-services/formDemoPage.ts @@ -0,0 +1,46 @@ +/*! + * @license + * Copyright 2019 Alfresco Software, Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { ConfigEditorPage } from '../../configEditorPage'; +import { BrowserActions, BrowserVisibility } from '@alfresco/adf-testing'; +import { by, element, ElementFinder } from 'protractor'; + +export class FormDemoPage { + + formCloudEditor: ElementFinder = element.all(by.css('.mat-tab-list .mat-tab-label')).get(1); + formCloudRender: ElementFinder = element.all(by.css('.mat-tab-list .mat-tab-label')).get(0); + + configEditorPage = new ConfigEditorPage(); + + async goToEditor(): Promise { + await BrowserActions.click(this.formCloudEditor); + } + + async goToRenderedForm(): Promise { + await BrowserActions.click(this.formCloudRender); + } + + async setConfigToEditor(text): Promise { + const configEditor = element(by.id('adf-form-config-editor')); + const form = element(by.css('adf-form')); + await this.goToEditor(); + await BrowserVisibility.waitUntilElementIsVisible(configEditor); + await this.configEditorPage.enterBulkConfiguration(text); + await this.goToRenderedForm(); + await BrowserVisibility.waitUntilElementIsVisible(form); + } +} diff --git a/e2e/pages/adf/demo-shell/process-services/peopleGroupCloudComponentPage.ts b/e2e/pages/adf/demo-shell/process-services/peopleGroupCloudComponentPage.ts index 17209c10bb..aaf17adaaa 100644 --- a/e2e/pages/adf/demo-shell/process-services/peopleGroupCloudComponentPage.ts +++ b/e2e/pages/adf/demo-shell/process-services/peopleGroupCloudComponentPage.ts @@ -15,136 +15,120 @@ * limitations under the License. */ -import { by, element, protractor } from 'protractor'; +import { by, element, ElementFinder } from 'protractor'; import { BrowserVisibility, BrowserActions } from '@alfresco/adf-testing'; export class PeopleGroupCloudComponentPage { - peopleCloudSingleSelectionChecked = element(by.css('mat-radio-button[data-automation-id="adf-people-single-mode"][class*="mat-radio-checked"]')); - peopleCloudMultipleSelectionChecked = element(by.css('mat-radio-button[data-automation-id="adf-people-multiple-mode"][class*="mat-radio-checked"]')); - peopleCloudSingleSelection = element(by.css('mat-radio-button[data-automation-id="adf-people-single-mode"]')); - peopleCloudMultipleSelection = element(by.css('mat-radio-button[data-automation-id="adf-people-multiple-mode"]')); - peopleCloudFilterRole = element(by.css('mat-radio-button[data-automation-id="adf-people-filter-role"]')); - groupCloudSingleSelection = element(by.css('mat-radio-button[data-automation-id="adf-group-single-mode"]')); - groupCloudMultipleSelection = element(by.css('mat-radio-button[data-automation-id="adf-group-multiple-mode"]')); - groupCloudFilterRole = element(by.css('mat-radio-button[data-automation-id="adf-group-filter-role"]')); - peopleRoleInput = element(by.css('input[data-automation-id="adf-people-roles-input"]')); - peopleAppInput = element(by.css('input[data-automation-id="adf-people-app-input"]')); - peoplePreselect = element(by.css('input[data-automation-id="adf-people-preselect-input"]')); - groupRoleInput = element(by.css('input[data-automation-id="adf-group-roles-input"]')); - groupAppInput = element(by.css('input[data-automation-id="adf-group-app-input"]')); - peopleCloudComponentTitle = element(by.cssContainingText('mat-card-title', 'People Cloud Component')); - groupCloudComponentTitle = element(by.cssContainingText('mat-card-title', 'Groups Cloud Component')); - preselectValidation = element(by.css('mat-checkbox.adf-preselect-value')); - preselectValidationStatus = element(by.css('mat-checkbox.adf-preselect-value label input')); - peopleFilterByAppName = element(by.css('.people-control-options mat-radio-button[value="appName"]')); - groupFilterByAppName = element(by.css('.groups-control-options mat-radio-button[value="appName"]')); + peopleCloudSingleSelectionChecked: ElementFinder = element(by.css('mat-radio-button[data-automation-id="adf-people-single-mode"][class*="mat-radio-checked"]')); + peopleCloudMultipleSelectionChecked: ElementFinder = element(by.css('mat-radio-button[data-automation-id="adf-people-multiple-mode"][class*="mat-radio-checked"]')); + peopleCloudSingleSelection: ElementFinder = element(by.css('mat-radio-button[data-automation-id="adf-people-single-mode"]')); + peopleCloudMultipleSelection: ElementFinder = element(by.css('mat-radio-button[data-automation-id="adf-people-multiple-mode"]')); + peopleCloudFilterRole: ElementFinder = element(by.css('mat-radio-button[data-automation-id="adf-people-filter-role"]')); + groupCloudSingleSelection: ElementFinder = element(by.css('mat-radio-button[data-automation-id="adf-group-single-mode"]')); + groupCloudMultipleSelection: ElementFinder = element(by.css('mat-radio-button[data-automation-id="adf-group-multiple-mode"]')); + groupCloudFilterRole: ElementFinder = element(by.css('mat-radio-button[data-automation-id="adf-group-filter-role"]')); + peopleRoleInput: ElementFinder = element(by.css('input[data-automation-id="adf-people-roles-input"]')); + peopleAppInput: ElementFinder = element(by.css('input[data-automation-id="adf-people-app-input"]')); + peoplePreselect: ElementFinder = element(by.css('input[data-automation-id="adf-people-preselect-input"]')); + groupRoleInput: ElementFinder = element(by.css('input[data-automation-id="adf-group-roles-input"]')); + groupAppInput: ElementFinder = element(by.css('input[data-automation-id="adf-group-app-input"]')); + peopleCloudComponentTitle: ElementFinder = element(by.cssContainingText('mat-card-title', 'People Cloud Component')); + groupCloudComponentTitle: ElementFinder = element(by.cssContainingText('mat-card-title', 'Groups Cloud Component')); + preselectValidation: ElementFinder = element(by.css('mat-checkbox.adf-preselect-value')); + preselectValidationStatus: ElementFinder = element(by.css('mat-checkbox.adf-preselect-value label input')); + peopleFilterByAppName: ElementFinder = element(by.css('.people-control-options mat-radio-button[value="appName"]')); + groupFilterByAppName: ElementFinder = element(by.css('.groups-control-options mat-radio-button[value="appName"]')); - checkPeopleCloudComponentTitleIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.peopleCloudComponentTitle); - return this; + async checkPeopleCloudComponentTitleIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.peopleCloudComponentTitle); } - checkGroupsCloudComponentTitleIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.groupCloudComponentTitle); - return this; + async checkGroupsCloudComponentTitleIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.groupCloudComponentTitle); } - clickPeopleCloudSingleSelection() { - BrowserActions.click(this.peopleCloudSingleSelection); + async clickPeopleCloudSingleSelection(): Promise { + await BrowserActions.click(this.peopleCloudSingleSelection); } - clickPeopleCloudMultipleSelection() { - BrowserActions.click(this.peopleCloudMultipleSelection); + async clickPeopleCloudMultipleSelection(): Promise { + await BrowserActions.click(this.peopleCloudMultipleSelection); } - checkPeopleCloudSingleSelectionIsSelected() { - BrowserVisibility.waitUntilElementIsVisible(this.peopleCloudSingleSelectionChecked); + async checkPeopleCloudSingleSelectionIsSelected(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.peopleCloudSingleSelectionChecked); } - checkPeopleCloudMultipleSelectionIsSelected() { - BrowserVisibility.waitUntilElementIsVisible(this.peopleCloudMultipleSelectionChecked); + async checkPeopleCloudMultipleSelectionIsSelected(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.peopleCloudMultipleSelectionChecked); } - checkPeopleCloudFilterRole() { - BrowserVisibility.waitUntilElementIsVisible(this.peopleCloudFilterRole); + async checkPeopleCloudFilterRole(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.peopleCloudFilterRole); } - clickPeopleCloudFilterRole() { - BrowserActions.click(this.peopleCloudFilterRole); + async clickPeopleCloudFilterRole(): Promise { + await BrowserActions.click(this.peopleCloudFilterRole); } - clickGroupCloudFilterRole() { - BrowserActions.click(this.groupCloudFilterRole); + async clickGroupCloudFilterRole(): Promise { + await BrowserActions.click(this.groupCloudFilterRole); } - enterPeopleRoles(roles) { - BrowserVisibility.waitUntilElementIsVisible(this.peopleRoleInput); - this.peopleRoleInput.clear(); - this.peopleRoleInput.sendKeys(roles); - return this; + async enterPeopleRoles(roles): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.peopleRoleInput); + await BrowserActions.clearSendKeys(this.peopleRoleInput, roles); } - enterPeoplePreselect(preselect) { - BrowserVisibility.waitUntilElementIsVisible(this.peoplePreselect); - this.peoplePreselect.clear(); - this.peoplePreselect.sendKeys(preselect); - return this; + async enterPeoplePreselect(preselect): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.peoplePreselect); + await BrowserActions.clearSendKeys(this.peoplePreselect, preselect); } - clearField(locator) { - BrowserVisibility.waitUntilElementIsVisible(locator); - locator.getAttribute('value').then((result) => { - for (let i = result.length; i >= 0; i--) { - locator.sendKeys(protractor.Key.BACK_SPACE); - } - }); + async clearField(locator): Promise { + await BrowserVisibility.waitUntilElementIsVisible(locator); + await BrowserActions.clearSendKeys(locator, ''); } - clickGroupCloudSingleSelection() { - BrowserActions.click(this.groupCloudSingleSelection); + async clickGroupCloudSingleSelection(): Promise { + await BrowserActions.click(this.groupCloudSingleSelection); } - clickGroupCloudMultipleSelection() { - BrowserActions.click(this.groupCloudMultipleSelection); + async clickGroupCloudMultipleSelection(): Promise { + await BrowserActions.click(this.groupCloudMultipleSelection); } - enterGroupRoles(roles) { - BrowserVisibility.waitUntilElementIsVisible(this.groupRoleInput); - this.groupRoleInput.clear(); - this.groupRoleInput.sendKeys(roles); - return this; + async enterGroupRoles(roles): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.groupRoleInput); + await BrowserActions.clearSendKeys(this.groupRoleInput, roles); } - clickPreselectValidation() { - BrowserActions.click(this.preselectValidation); + async clickPreselectValidation(): Promise { + await BrowserActions.click(this.preselectValidation); } - getPreselectValidationStatus() { - BrowserVisibility.waitUntilElementIsVisible(this.preselectValidationStatus); + async getPreselectValidationStatus(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.preselectValidationStatus); return this.preselectValidationStatus.getAttribute('aria-checked'); } - clickPeopleFilerByApp() { - return BrowserActions.click(this.peopleFilterByAppName); + async clickPeopleFilerByApp(): Promise { + await BrowserActions.click(this.peopleFilterByAppName); } - clickGroupFilerByApp() { - return BrowserActions.click(this.groupFilterByAppName); + async clickGroupFilerByApp(): Promise { + await BrowserActions.click(this.groupFilterByAppName); } - enterPeopleAppName(appName) { - BrowserVisibility.waitUntilElementIsVisible(this.peopleAppInput); - this.peopleAppInput.clear(); - this.peopleAppInput.sendKeys(appName); - return this; + async enterPeopleAppName(appName): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.peopleAppInput); + await BrowserActions.clearSendKeys(this.peopleAppInput, appName); } - enterGroupAppName(appName) { - BrowserVisibility.waitUntilElementIsVisible(this.groupAppInput); - this.groupAppInput.clear(); - this.groupAppInput.sendKeys(appName); - return this; + async enterGroupAppName(appName): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.groupAppInput); + await BrowserActions.clearSendKeys(this.groupAppInput, appName); } } diff --git a/e2e/pages/adf/demo-shell/process-services/processCloudDemoPage.ts b/e2e/pages/adf/demo-shell/process-services/processCloudDemoPage.ts index 22ebeba01c..ee905ada6e 100644 --- a/e2e/pages/adf/demo-shell/process-services/processCloudDemoPage.ts +++ b/e2e/pages/adf/demo-shell/process-services/processCloudDemoPage.ts @@ -15,7 +15,7 @@ * limitations under the License. */ -import { element, by } from 'protractor'; +import { element, by, ElementFinder } from 'protractor'; import { BrowserVisibility } from '@alfresco/adf-testing'; import { ProcessFiltersCloudComponentPage, @@ -26,74 +26,78 @@ import { export class ProcessCloudDemoPage { - allProcesses = element(by.css('span[data-automation-id="all-processes_filter"]')); - runningProcesses = element(by.css('span[data-automation-id="running-processes_filter"]')); - completedProcesses = element(by.css('span[data-automation-id="completed-processes_filter"]')); - activeFilter = element(by.css("mat-list-item[class*='active'] span")); - processFilters = element(by.css("mat-expansion-panel[data-automation-id='Process Filters']")); - processFiltersList = element(by.css('adf-cloud-process-filters')); + allProcesses: ElementFinder = element(by.css('span[data-automation-id="all-processes_filter"]')); + runningProcesses: ElementFinder = element(by.css('span[data-automation-id="running-processes_filter"]')); + completedProcesses: ElementFinder = element(by.css('span[data-automation-id="completed-processes_filter"]')); + activeFilter: ElementFinder = element(by.css("mat-list-item[class*='active'] span")); + processFilters: ElementFinder = element(by.css("mat-expansion-panel[data-automation-id='Process Filters']")); + processFiltersList: ElementFinder = element(by.css('adf-cloud-process-filters')); - createButton = element(by.css('button[data-automation-id="create-button"')); - newProcessButton = element(by.css('button[data-automation-id="btn-start-process"]')); + createButton: ElementFinder = element(by.css('button[data-automation-id="create-button"')); + newProcessButton: ElementFinder = element(by.css('button[data-automation-id="btn-start-process"]')); processListCloud = new ProcessListCloudComponentPage(); editProcessFilterCloud = new EditProcessFilterCloudComponentPage(); - editProcessFilterCloudComponent() { + editProcessFilterCloudComponent(): EditProcessFilterCloudComponentPage { return this.editProcessFilterCloud; } - processListCloudComponent() { + processListCloudComponent(): ProcessListCloudComponentPage { return this.processListCloud; } - getAllRowsByIdColumn() { + getAllRowsByIdColumn(): Promise { return this.processListCloud.getAllRowsByColumn('Id'); } - allProcessesFilter() { + allProcessesFilter(): ProcessFiltersCloudComponentPage { return new ProcessFiltersCloudComponentPage(this.allProcesses); } - runningProcessesFilter() { + runningProcessesFilter(): ProcessFiltersCloudComponentPage { return new ProcessFiltersCloudComponentPage(this.runningProcesses); } - completedProcessesFilter() { + completedProcessesFilter(): ProcessFiltersCloudComponentPage { return new ProcessFiltersCloudComponentPage(this.completedProcesses); } - customProcessFilter(filterName) { + customProcessFilter(filterName): ProcessFiltersCloudComponentPage { return new ProcessFiltersCloudComponentPage(element(by.css(`span[data-automation-id="${filterName}_filter"]`))); } - getActiveFilterName() { + async getActiveFilterName(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.activeFilter); return BrowserActions.getText(this.activeFilter); } - clickOnProcessFilters() { - return BrowserActions.click(this.processFilters); + async clickOnProcessFilters(): Promise { + await BrowserActions.click(this.processFilters); } - openNewProcessForm() { - this.clickOnCreateButton(); - this.newProcessButtonIsDisplayed(); - BrowserActions.click(this.newProcessButton); - return this; + async openNewProcessForm(): Promise { + await this.clickOnCreateButton(); + await this.newProcessButtonIsDisplayed(); + await BrowserActions.click(this.newProcessButton); } - newProcessButtonIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.newProcessButton); - return this; + async newProcessButtonIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.newProcessButton); } - isProcessFiltersListVisible() { - BrowserVisibility.waitUntilElementIsVisible(this.processFiltersList); - return this; + async isProcessFiltersListVisible(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.processFiltersList); } - clickOnCreateButton() { - BrowserActions.click(this.createButton); - return this; + async clickOnCreateButton(): Promise { + await BrowserActions.click(this.createButton); + } + + async checkActionExecuted(processInstanceId: string, action: string): Promise { + await BrowserVisibility.waitUntilElementIsVisible(element(by.cssContainingText(`span`, 'Action Menu:'))); + await BrowserVisibility.waitUntilElementIsVisible(element(by.cssContainingText(`span`, 'Context Menu:'))); + await BrowserVisibility.waitUntilElementIsVisible(element(by.cssContainingText(`span`, 'ProcessInstanceId: ' + processInstanceId))); + await BrowserVisibility.waitUntilElementIsVisible(element(by.cssContainingText(`span`, 'Action Type: ' + action))); } } diff --git a/e2e/pages/adf/demo-shell/process-services/processListDemoPage.ts b/e2e/pages/adf/demo-shell/process-services/processListDemoPage.ts index 3cf5f0b1f2..a10e73b6e5 100644 --- a/e2e/pages/adf/demo-shell/process-services/processListDemoPage.ts +++ b/e2e/pages/adf/demo-shell/process-services/processListDemoPage.ts @@ -17,96 +17,88 @@ import { BrowserVisibility } from '@alfresco/adf-testing'; import { DataTableComponentPage, BrowserActions } from '@alfresco/adf-testing'; -import { element, by, protractor } from 'protractor'; +import { element, by, protractor, ElementFinder } from 'protractor'; export class ProcessListDemoPage { - appIdInput = element(by.css('input[data-automation-id="app-id"]')); - resetButton = element(by.cssContainingText('button span', 'Reset')); - emptyProcessContent = element(by.css('div[class="adf-empty-content"]')); - processDefinitionInput = element(by.css('input[data-automation-id="process-definition-id"]')); - processInstanceInput = element(by.css('input[data-automation-id="process-instance-id"]')); - stateSelector = element(by.css('mat-select[data-automation-id="state"')); - sortSelector = element(by.css('mat-select[data-automation-id="sort"')); + appIdInput: ElementFinder = element(by.css('input[data-automation-id="app-id"]')); + resetButton: ElementFinder = element(by.cssContainingText('button span', 'Reset')); + emptyProcessContent: ElementFinder = element(by.css('div[class="adf-empty-content"]')); + processDefinitionInput: ElementFinder = element(by.css('input[data-automation-id="process-definition-id"]')); + processInstanceInput: ElementFinder = element(by.css('input[data-automation-id="process-instance-id"]')); + stateSelector: ElementFinder = element(by.css('mat-select[data-automation-id="state"')); + sortSelector: ElementFinder = element(by.css('mat-select[data-automation-id="sort"')); - dataTable = new DataTableComponentPage(); + dataTable: DataTableComponentPage = new DataTableComponentPage(); - getDisplayedProcessesNames() { + getDisplayedProcessesNames(): Promise { return this.dataTable.getAllRowsColumnValues('Name'); } - selectSorting(sort) { - BrowserActions.click(this.sortSelector); - const sortLocator = element(by.cssContainingText('mat-option span', sort)); - BrowserActions.click(sortLocator); - return this; + async selectSorting(sort): Promise { + await BrowserActions.click(this.sortSelector); + const sortLocator: ElementFinder = element(by.cssContainingText('mat-option span', sort)); + await BrowserActions.click(sortLocator); } - selectStateFilter(state) { - BrowserActions.click(this.stateSelector); - const stateLocator = element(by.cssContainingText('mat-option span', state)); - BrowserActions.click(stateLocator); - return this; + async selectStateFilter(state): Promise { + await BrowserActions.click(this.stateSelector); + const stateLocator: ElementFinder = element(by.cssContainingText('mat-option span', state)); + await BrowserActions.click(stateLocator); } - addAppId(appId) { - BrowserActions.click(this.appIdInput); - this.appIdInput.sendKeys(protractor.Key.ENTER); - this.appIdInput.clear(); - return this.appIdInput.sendKeys(appId); + async addAppId(appId): Promise { + await BrowserActions.click(this.appIdInput); + await this.appIdInput.sendKeys(protractor.Key.ENTER); + await this.appIdInput.clear(); + await this.appIdInput.sendKeys(appId); } - clickResetButton() { - return BrowserActions.click(this.resetButton); + async clickResetButton(): Promise { + await BrowserActions.click(this.resetButton); } - checkErrorMessageIsDisplayed(error) { - const errorMessage = element(by.cssContainingText('mat-error', error)); - BrowserVisibility.waitUntilElementIsVisible(errorMessage); + async checkErrorMessageIsDisplayed(error): Promise { + const errorMessage: ElementFinder = element(by.cssContainingText('mat-error', error)); + await BrowserVisibility.waitUntilElementIsVisible(errorMessage); } - checkNoProcessFoundIsDisplayed() { - return BrowserVisibility.waitUntilElementIsVisible(this.emptyProcessContent); + async checkNoProcessFoundIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.emptyProcessContent); } - checkProcessIsNotDisplayed(processName) { - return this.dataTable.checkContentIsNotDisplayed('Name', processName); + async checkProcessIsNotDisplayed(processName): Promise { + await this.dataTable.checkContentIsNotDisplayed('Name', processName); } - checkProcessIsDisplayed(processName) { - return this.dataTable.checkContentIsDisplayed('Name', processName); + async checkProcessIsDisplayed(processName): Promise { + await this.dataTable.checkContentIsDisplayed('Name', processName); } - checkAppIdFieldIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.appIdInput); - return this; + async checkAppIdFieldIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.appIdInput); } - checkProcessInstanceIdFieldIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.processInstanceInput); - return this; + async checkProcessInstanceIdFieldIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.processInstanceInput); } - checkStateFieldIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.stateSelector); - return this; + async checkStateFieldIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.stateSelector); } - checkSortFieldIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.sortSelector); - return this; + async checkSortFieldIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.sortSelector); } - addProcessDefinitionId(procDefinitionId) { - BrowserActions.click(this.processDefinitionInput); - this.processDefinitionInput.clear(); - return this.processDefinitionInput.sendKeys(procDefinitionId); + async addProcessDefinitionId(procDefinitionId): Promise { + await BrowserActions.click(this.processDefinitionInput); + await BrowserActions.clearSendKeys(this.processDefinitionInput, procDefinitionId); } - addProcessInstanceId(procInstanceId) { - BrowserActions.click(this.processInstanceInput); - this.processInstanceInput.clear(); - return this.processInstanceInput.sendKeys(procInstanceId); + async addProcessInstanceId(procInstanceId): Promise { + await BrowserActions.click(this.processInstanceInput); + await BrowserActions.clearSendKeys(this.processInstanceInput, procInstanceId); } } diff --git a/e2e/pages/adf/demo-shell/process-services/taskFiltersDemoPage.ts b/e2e/pages/adf/demo-shell/process-services/taskFiltersDemoPage.ts index a0c750ad4e..0ee1386090 100644 --- a/e2e/pages/adf/demo-shell/process-services/taskFiltersDemoPage.ts +++ b/e2e/pages/adf/demo-shell/process-services/taskFiltersDemoPage.ts @@ -16,22 +16,22 @@ */ import { BrowserActions } from '@alfresco/adf-testing'; -import { element, by } from 'protractor'; +import { element, by, ElementFinder } from 'protractor'; import { TaskFiltersPage } from '../../process-services/taskFiltersPage'; export class TaskFiltersDemoPage { - myTasks = element(by.css('span[data-automation-id="My Tasks_filter"]')); - queuedTask = element(by.css('span[data-automation-id="Queued Tasks_filter"]')); - completedTask = element(by.css('span[data-automation-id="Completed Tasks_filter"]')); - involvedTask = element(by.css('span[data-automation-id="Involved Tasks_filter"]')); - activeFilter = element(by.css("mat-list-item[class*='active']")); + myTasks: ElementFinder = element(by.css('span[data-automation-id="My Tasks_filter"]')); + queuedTask: ElementFinder = element(by.css('span[data-automation-id="Queued Tasks_filter"]')); + completedTask: ElementFinder = element(by.css('span[data-automation-id="Completed Tasks_filter"]')); + involvedTask: ElementFinder = element(by.css('span[data-automation-id="Involved Tasks_filter"]')); + activeFilter: ElementFinder = element(by.css("mat-list-item[class*='active']")); - myTasksFilter() { + myTasksFilter(): TaskFiltersPage { return new TaskFiltersPage(this.myTasks); } - queuedTasksFilter() { + queuedTasksFilter(): TaskFiltersPage { return new TaskFiltersPage(this.queuedTask); } @@ -39,15 +39,15 @@ export class TaskFiltersDemoPage { return new TaskFiltersPage(this.completedTask); } - involvedTasksFilter() { + involvedTasksFilter(): TaskFiltersPage { return new TaskFiltersPage(this.involvedTask); } - customTaskFilter(filterName) { + customTaskFilter(filterName): TaskFiltersPage { return new TaskFiltersPage(element(by.css(`span[data-automation-id="${filterName}_filter"]`))); } - checkActiveFilterActive () { + async checkActiveFilterActive(): Promise { return BrowserActions.getText(this.activeFilter); } diff --git a/e2e/pages/adf/demo-shell/process-services/taskListDemoPage.ts b/e2e/pages/adf/demo-shell/process-services/taskListDemoPage.ts index 43bc96a5d1..b8f57ccdb4 100644 --- a/e2e/pages/adf/demo-shell/process-services/taskListDemoPage.ts +++ b/e2e/pages/adf/demo-shell/process-services/taskListDemoPage.ts @@ -17,188 +17,153 @@ import { TasksListPage } from '../../process-services/tasksListPage'; import { PaginationPage } from '@alfresco/adf-testing'; -import { element, by } from 'protractor'; +import { element, by, ElementFinder } from 'protractor'; import { BrowserVisibility, BrowserActions } from '@alfresco/adf-testing'; export class TaskListDemoPage { taskListPage: TasksListPage = new TasksListPage(); - appId = element(by.css("input[data-automation-id='appId input']")); - itemsPerPage = element(by.css("input[data-automation-id='items per page']")); - itemsPerPageForm = element(by.css("mat-form-field[data-automation-id='items per page']")); - processDefinitionId = element(by.css("input[data-automation-id='process definition id']")); - processInstanceId = element(by.css("input[data-automation-id='process instance id']")); - page = element(by.css("input[data-automation-id='page']")); - pageForm = element(by.css("mat-form-field[data-automation-id='page']")); - taskName = element(by.css("input[data-automation-id='task name']")); - resetButton = element(by.css("div[class='adf-reset-button'] button")); - dueBefore = element(by.css("input[data-automation-id='due before']")); - dueAfter = element(by.css("input[data-automation-id='due after']")); - taskId = element(by.css("input[data-automation-id='task id']")); - stateDropDownArrow = element(by.css("mat-form-field[data-automation-id='state'] div[class*='arrow']")); - stateSelector = element(by.css("div[class*='mat-select-panel']")); - sortDropDownArrow = element(by.css("mat-form-field[data-automation-id='sort'] div[class*='arrow']")); - sortSelector = element(by.css("div[class*='mat-select-panel']")); + appId: ElementFinder = element(by.css("input[data-automation-id='appId input']")); + itemsPerPage: ElementFinder = element(by.css("input[data-automation-id='items per page']")); + itemsPerPageForm: ElementFinder = element(by.css("mat-form-field[data-automation-id='items per page']")); + processDefinitionId: ElementFinder = element(by.css("input[data-automation-id='process definition id']")); + processInstanceId: ElementFinder = element(by.css("input[data-automation-id='process instance id']")); + page: ElementFinder = element(by.css("input[data-automation-id='page']")); + pageForm: ElementFinder = element(by.css("mat-form-field[data-automation-id='page']")); + taskName: ElementFinder = element(by.css("input[data-automation-id='task name']")); + resetButton: ElementFinder = element(by.css("div[class='adf-reset-button'] button")); + dueBefore: ElementFinder = element(by.css("input[data-automation-id='due before']")); + dueAfter: ElementFinder = element(by.css("input[data-automation-id='due after']")); + taskId: ElementFinder = element(by.css("input[data-automation-id='task id']")); + stateDropDownArrow: ElementFinder = element(by.css("mat-form-field[data-automation-id='state'] div[class*='arrow']")); + stateSelector: ElementFinder = element(by.css("div[class*='mat-select-panel']")); taskList(): TasksListPage { return this.taskListPage; } - paginationPage() { + paginationPage(): PaginationPage { return new PaginationPage(); } - typeAppId(input) { - BrowserVisibility.waitUntilElementIsVisible(this.appId); - this.clearText(this.appId); - this.appId.sendKeys(input); - return this; + async typeAppId(input): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.appId); + await BrowserActions.clearSendKeys(this.appId, input); } - clickAppId() { - BrowserActions.click(this.appId); - return this; + async clickAppId(): Promise { + await BrowserActions.click(this.appId); } - getAppId() { - BrowserVisibility.waitUntilElementIsVisible(this.appId); + async getAppId(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.appId); return this.appId.getAttribute('value'); } - typeTaskId(input) { - BrowserVisibility.waitUntilElementIsVisible(this.taskId); - this.clearText(this.taskId); - this.taskId.sendKeys(input); - return this; + async typeTaskId(input): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.taskId); + await BrowserActions.clearSendKeys(this.taskId, input); } - getTaskId() { - BrowserVisibility.waitUntilElementIsVisible(this.taskId); + async getTaskId(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.taskId); return this.taskId.getAttribute('value'); } - typeTaskName(input) { - BrowserVisibility.waitUntilElementIsVisible(this.taskName); - this.clearText(this.taskName); - this.taskName.sendKeys(input); - return this; + async typeTaskName(input): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.taskName); + await BrowserActions.clearSendKeys(this.taskName, input); } - getTaskName() { - BrowserVisibility.waitUntilElementIsVisible(this.taskName); + async getTaskName(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.taskName); return this.taskName.getAttribute('value'); } - typeItemsPerPage(input) { - BrowserVisibility.waitUntilElementIsVisible(this.itemsPerPage); - this.clearText(this.itemsPerPage); - this.itemsPerPage.sendKeys(input); - return this; + async typeItemsPerPage(input): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.itemsPerPage); + await BrowserActions.clearSendKeys(this.itemsPerPage, input); } - typeProcessDefinitionId(input) { - BrowserVisibility.waitUntilElementIsVisible(this.processDefinitionId); - this.clearText(this.processDefinitionId); - this.processDefinitionId.sendKeys(input); - return this; + async typeProcessDefinitionId(input): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.processDefinitionId); + await BrowserActions.clearSendKeys(this.processDefinitionId, input); } - getProcessDefinitionId() { - BrowserVisibility.waitUntilElementIsVisible(this.processInstanceId); + async getProcessDefinitionId(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.processInstanceId); return this.processInstanceId.getAttribute('value'); } - typeProcessInstanceId(input) { - BrowserVisibility.waitUntilElementIsVisible(this.processInstanceId); - this.clearText(this.processInstanceId); - this.processInstanceId.sendKeys(input); - return this; + async typeProcessInstanceId(input): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.processInstanceId); + await BrowserActions.clearSendKeys(this.processInstanceId, input); } - getProcessInstanceId() { - BrowserVisibility.waitUntilElementIsVisible(this.processInstanceId); + async getProcessInstanceId(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.processInstanceId); return this.processInstanceId.getAttribute('value'); } - getItemsPerPageFieldErrorMessage() { - BrowserVisibility.waitUntilElementIsVisible(this.itemsPerPageForm); + async getItemsPerPageFieldErrorMessage(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.itemsPerPageForm); const errorMessage = this.itemsPerPageForm.element(by.css('mat-error')); return BrowserActions.getText(errorMessage); } - typePage(input) { - BrowserVisibility.waitUntilElementIsVisible(this.page); - this.clearText(this.page); - this.page.sendKeys(input); - return this; + async typePage(input): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.page); + await BrowserActions.clearSendKeys(this.page, input); } - getPage() { - BrowserVisibility.waitUntilElementIsVisible(this.page); + async getPage(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.page); return this.page.getAttribute('value'); } - getPageFieldErrorMessage() { - BrowserVisibility.waitUntilElementIsVisible(this.pageForm); + async getPageFieldErrorMessage(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.pageForm); const errorMessage = this.pageForm.element(by.css('mat-error')); return BrowserActions.getText(errorMessage); } - typeDueAfter(input) { - BrowserVisibility.waitUntilElementIsVisible(this.dueAfter); - this.clearText(this.dueAfter); - this.dueAfter.sendKeys(input); - return this; + async typeDueAfter(input): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.dueAfter); + await BrowserActions.clearSendKeys(this.dueAfter, input); } - typeDueBefore(input) { - BrowserVisibility.waitUntilElementIsVisible(this.dueBefore); - this.clearText(this.dueBefore); - this.dueBefore.sendKeys(input); - return this; + async typeDueBefore(input): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.dueBefore); + await BrowserActions.clearSendKeys(this.dueBefore, input); } - clearText(input) { - BrowserVisibility.waitUntilElementIsVisible(input); - return input.clear(); + async clearText(input): Promise { + await BrowserVisibility.waitUntilElementIsVisible(input); + await input.clear(); } - clickResetButton() { - BrowserActions.closeMenuAndDialogs(); - BrowserActions.click(this.resetButton); + async clickResetButton(): Promise { + await BrowserActions.closeMenuAndDialogs(); + await BrowserActions.click(this.resetButton); } - selectSort(sort) { - this.clickOnSortDropDownArrow(); + async selectState(state): Promise { + await this.clickOnStateDropDownArrow(); - const sortElement = element.all(by.cssContainingText('mat-option span', sort)).first(); - BrowserActions.click(sortElement); - return this; + const stateElement: ElementFinder = element.all(by.cssContainingText('mat-option span', state)).first(); + await BrowserActions.click(stateElement); } - clickOnSortDropDownArrow() { - BrowserActions.click(this.sortDropDownArrow); - BrowserVisibility.waitUntilElementIsVisible(this.sortSelector); + async clickOnStateDropDownArrow(): Promise { + await BrowserActions.click(this.stateDropDownArrow); + await BrowserVisibility.waitUntilElementIsVisible(this.stateSelector); } - selectState(state) { - this.clickOnStateDropDownArrow(); - - const stateElement = element.all(by.cssContainingText('mat-option span', state)).first(); - BrowserActions.click(stateElement); - return this; - } - - clickOnStateDropDownArrow() { - BrowserActions.click(this.stateDropDownArrow); - BrowserVisibility.waitUntilElementIsVisible(this.stateSelector); - } - - getAllProcessDefinitionIds() { + getAllProcessDefinitionIds(): Promise { return this.taskList().getDataTable().getAllRowsColumnValues('Process Definition Id'); } - getAllProcessInstanceIds() { + getAllProcessInstanceIds(): Promise { return this.taskList().getDataTable().getAllRowsColumnValues('Process Instance Id'); } diff --git a/e2e/pages/adf/demo-shell/process-services/tasksCloudDemoPage.ts b/e2e/pages/adf/demo-shell/process-services/tasksCloudDemoPage.ts index f4ed0a4afa..e3dd36c012 100644 --- a/e2e/pages/adf/demo-shell/process-services/tasksCloudDemoPage.ts +++ b/e2e/pages/adf/demo-shell/process-services/tasksCloudDemoPage.ts @@ -15,7 +15,7 @@ * limitations under the License. */ -import { element, by, browser } from 'protractor'; +import { element, by, browser, ElementFinder, ElementArrayFinder } from 'protractor'; import { FormControllersPage, TaskFiltersCloudComponentPage, @@ -27,132 +27,161 @@ import { export class TasksCloudDemoPage { - myTasks = element(by.css('span[data-automation-id="my-tasks-filter"]')); - completedTasks = element(by.css('span[data-automation-id="completed-tasks-filter"]')); - activeFilter = element(by.css("mat-list-item[class*='active'] span")); + myTasks: ElementFinder = element(by.css('span[data-automation-id="my-tasks-filter"]')); + completedTasks: ElementFinder = element(by.css('span[data-automation-id="completed-tasks-filter"]')); + activeFilter: ElementFinder = element(by.css("mat-list-item[class*='active'] span")); - defaultActiveFilter = element.all(by.css('.adf-filters__entry')).first(); + defaultActiveFilter: ElementFinder = element.all(by.css('.adf-filters__entry')).first(); - createButton = element(by.css('button[data-automation-id="create-button"')); - newTaskButton = element(by.css('button[data-automation-id="btn-start-task"]')); - settingsButton = element.all(by.cssContainingText('div[class*="mat-tab-label"] .mat-tab-labels div', 'Settings')).first(); - appButton = element.all(by.cssContainingText('div[class*="mat-tab-label"] .mat-tab-labels div', 'App')).first(); - modeDropDownArrow = element(by.css('mat-form-field[data-automation-id="selectionMode"] div[class*="arrow-wrapper"]')); - modeSelector = element(by.css("div[class*='mat-select-panel']")); - displayTaskDetailsToggle = element(by.css('mat-slide-toggle[data-automation-id="taskDetailsRedirection"]')); - displayProcessDetailsToggle = element(by.css('mat-slide-toggle[data-automation-id="processDetailsRedirection"]')); - multiSelectionToggle = element(by.css('mat-slide-toggle[data-automation-id="multiSelection"]')); - testingModeToggle = element(by.css('mat-slide-toggle[data-automation-id="testingMode"]')); - selectedRows = element(by.xpath("//div[text()=' Selected rows: ']")); - noOfSelectedRows = element.all(by.xpath("//div[text()=' Selected rows: ']//li")); + createButton: ElementFinder = element(by.css('button[data-automation-id="create-button"')); + newTaskButton: ElementFinder = element(by.css('button[data-automation-id="btn-start-task"]')); + settingsButton: ElementFinder = element.all(by.cssContainingText('div[class*="mat-tab-label"] .mat-tab-labels div', 'Settings')).first(); + appButton: ElementFinder = element.all(by.cssContainingText('div[class*="mat-tab-label"] .mat-tab-labels div', 'App')).first(); + modeDropDownArrow: ElementFinder = element(by.css('mat-form-field[data-automation-id="selectionMode"] div[class*="arrow-wrapper"]')); + modeSelector: ElementFinder = element(by.css("div[class*='mat-select-panel']")); + displayTaskDetailsToggle: ElementFinder = element(by.css('mat-slide-toggle[data-automation-id="taskDetailsRedirection"]')); + displayProcessDetailsToggle: ElementFinder = element(by.css('mat-slide-toggle[data-automation-id="processDetailsRedirection"]')); + actionMenuToggle: ElementFinder = element(by.css('mat-slide-toggle[data-automation-id="actionmenu"]')); + contextMenuToggle: ElementFinder = element(by.css('mat-slide-toggle[data-automation-id="contextmenu"]')); + multiSelectionToggle: ElementFinder = element(by.css('mat-slide-toggle[data-automation-id="multiSelection"]')); + testingModeToggle: ElementFinder = element(by.css('mat-slide-toggle[data-automation-id="testingMode"]')); + selectedRows: ElementFinder = element(by.xpath("//div[text()=' Selected rows: ']")); + noOfSelectedRows: ElementArrayFinder = element.all(by.xpath("//div[text()=' Selected rows: ']//li")); + addActionTitle: ElementFinder = element(by.cssContainingText('.mat-card-title', 'Add Action')); + keyInputField: ElementFinder = element(by.css('input[placeholder="Key"]')); + titleInputField: ElementFinder = element(by.css('input[placeholder="Title"]')); + iconInputField: ElementFinder = element(by.css('input[placeholder="Icon"]')); + addActionButton: ElementFinder = element(by.cssContainingText('button span', 'Add')); + disableCheckbox: ElementFinder = element(by.css(`mat-checkbox[formcontrolname='disabled']`)); - formControllersPage = new FormControllersPage(); + formControllersPage: FormControllersPage = new FormControllersPage(); - editTaskFilterCloud = new EditTaskFilterCloudComponentPage(); + editTaskFilterCloud: EditTaskFilterCloudComponentPage = new EditTaskFilterCloudComponentPage(); - disableDisplayTaskDetails() { - this.formControllersPage.disableToggle(this.displayTaskDetailsToggle); - return this; + async disableDisplayTaskDetails(): Promise { + await this.formControllersPage.disableToggle(this.displayTaskDetailsToggle); } - disableDisplayProcessDetails() { - this.formControllersPage.disableToggle(this.displayProcessDetailsToggle); - return this; + async disableDisplayProcessDetails(): Promise { + await this.formControllersPage.disableToggle(this.displayProcessDetailsToggle); } - enableMultiSelection() { - this.formControllersPage.enableToggle(this.multiSelectionToggle); - return this; + async enableMultiSelection(): Promise { + await this.formControllersPage.enableToggle(this.multiSelectionToggle); } - enableTestingMode() { - this.formControllersPage.enableToggle(this.testingModeToggle); - return this; + async enableActionMenu(): Promise { + await this.formControllersPage.enableToggle(this.actionMenuToggle); } - taskFiltersCloudComponent(filter) { - return new TaskFiltersCloudComponentPage(filter); + async enableContextMenu(): Promise { + await this.formControllersPage.enableToggle(this.contextMenuToggle); } - taskListCloudComponent() { + async enableTestingMode(): Promise { + await this.formControllersPage.enableToggle(this.testingModeToggle); + } + + taskListCloudComponent(): TaskListCloudComponentPage { return new TaskListCloudComponentPage(); } - editTaskFilterCloudComponent() { + editTaskFilterCloudComponent(): EditTaskFilterCloudComponentPage { return this.editTaskFilterCloud; } - myTasksFilter() { + myTasksFilter(): TaskFiltersCloudComponentPage { return new TaskFiltersCloudComponentPage(this.myTasks); } - completedTasksFilter() { + completedTasksFilter(): TaskFiltersCloudComponentPage { return new TaskFiltersCloudComponentPage(this.completedTasks); } - getActiveFilterName() { - return BrowserActions.getText(this.activeFilter); + async getActiveFilterName(): Promise { + return await BrowserActions.getText(this.activeFilter); } - customTaskFilter(filterName) { + customTaskFilter(filterName): TaskFiltersCloudComponentPage { return new TaskFiltersCloudComponentPage(element(by.css(`span[data-automation-id="${filterName}-filter"]`))); } - openNewTaskForm() { - BrowserActions.click(this.createButton); - BrowserActions.clickExecuteScript('button[data-automation-id="btn-start-task"]'); - return this; + async openNewTaskForm(): Promise { + await BrowserActions.click(this.createButton); + await BrowserActions.clickExecuteScript('button[data-automation-id="btn-start-task"]'); } - clickOnCreateButton() { - BrowserActions.click(this.createButton); - return this; + async firstFilterIsActive(): Promise { + const value = await this.defaultActiveFilter.getAttribute('class'); + return value.includes('adf-active'); } - firstFilterIsActive() { - return this.defaultActiveFilter.getAttribute('class').then((value) => value.includes('adf-active')); + async clickSettingsButton(): Promise { + await BrowserActions.click(this.settingsButton); + await browser.sleep(400); + await BrowserVisibility.waitUntilElementIsVisible(this.multiSelectionToggle); + await BrowserVisibility.waitUntilElementIsClickable(this.modeDropDownArrow); } - clickSettingsButton() { - BrowserActions.click(this.settingsButton); - browser.driver.sleep(400); - BrowserVisibility.waitUntilElementIsVisible(this.multiSelectionToggle); - BrowserVisibility.waitUntilElementIsVisible(this.modeDropDownArrow); - BrowserVisibility.waitUntilElementIsClickable(this.modeDropDownArrow); - return this; + async clickAppButton(): Promise { + await BrowserActions.click(this.appButton); } - clickAppButton() { - BrowserActions.click(this.appButton); - return this; + async selectSelectionMode(mode): Promise { + await this.clickOnSelectionModeDropDownArrow(); + + const modeElement: ElementFinder = element.all(by.cssContainingText('mat-option span', mode)).first(); + await BrowserActions.click(modeElement); } - selectSelectionMode(mode) { - this.clickOnSelectionModeDropDownArrow(); - - const modeElement = element.all(by.cssContainingText('mat-option span', mode)).first(); - BrowserActions.click(modeElement); - return this; + async clickOnSelectionModeDropDownArrow(): Promise { + await BrowserActions.click(this.modeDropDownArrow); + await BrowserVisibility.waitUntilElementIsVisible(this.modeSelector); } - clickOnSelectionModeDropDownArrow() { - BrowserActions.click(this.modeDropDownArrow); - BrowserVisibility.waitUntilElementIsVisible(this.modeSelector); + async checkSelectedRowsIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.selectedRows); } - checkSelectedRowsIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.selectedRows); - return this; + async getNoOfSelectedRows(): Promise { + await this.checkSelectedRowsIsDisplayed(); + return await this.noOfSelectedRows.count(); } - getNoOfSelectedRows() { - this.checkSelectedRowsIsDisplayed(); - return this.noOfSelectedRows.count(); + async getSelectedTaskRowText(rowNo: string): Promise { + await this.checkSelectedRowsIsDisplayed(); + const row: ElementFinder = element(by.xpath(`//div[text()=' Selected rows: ']//li[${rowNo}]`)); + return await BrowserActions.getText(row); } - getSelectedTaskRowText(rowNo: string) { - this.checkSelectedRowsIsDisplayed(); - const row = element(by.xpath(`//div[text()=' Selected rows: ']//li[${rowNo}]`)); - return row.getText(); + async addActionIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.addActionTitle); } + + async addAction(text: string): Promise { + await BrowserActions.clearSendKeys(this.keyInputField, text); + await BrowserActions.clearSendKeys(this.titleInputField, text); + await BrowserActions.clearSendKeys(this.iconInputField, text); + await BrowserActions.click(this.addActionButton); + } + + async addDisabledAction(text: string): Promise { + await BrowserActions.clearSendKeys(this.keyInputField, text); + await BrowserActions.clearSendKeys(this.titleInputField, text); + await BrowserActions.clearSendKeys(this.iconInputField, text); + await BrowserActions.click(this.disableCheckbox); + await BrowserActions.click(this.addActionButton); + } + + async actionAdded(action: string): Promise { + await BrowserVisibility.waitUntilElementIsVisible(element(by.cssContainingText(`mat-chip`, action))); + } + + async checkActionExecuted(taskId: string, action: string): Promise { + await BrowserVisibility.waitUntilElementIsVisible(element(by.cssContainingText(`span`, 'Action Menu:'))); + await BrowserVisibility.waitUntilElementIsVisible(element(by.cssContainingText(`span`, 'Context Menu:'))); + await BrowserVisibility.waitUntilElementIsVisible(element(by.cssContainingText(`span`, 'Task Id: ' + taskId))); + await BrowserVisibility.waitUntilElementIsVisible(element(by.cssContainingText(`span`, 'Action Type: ' + action))); + } + } diff --git a/e2e/pages/adf/demo-shell/socialPage.ts b/e2e/pages/adf/demo-shell/socialPage.ts index 3c2f2b4625..35f1065601 100644 --- a/e2e/pages/adf/demo-shell/socialPage.ts +++ b/e2e/pages/adf/demo-shell/socialPage.ts @@ -15,20 +15,20 @@ * limitations under the License. */ -import { by, element } from 'protractor'; +import { by, element, ElementFinder } from 'protractor'; import { BrowserActions, BrowserVisibility } from '@alfresco/adf-testing'; export class SocialPage { - nodeIdField = element(by.css(`input[id="nodeId"]`)); + nodeIdField: ElementFinder = element(by.css(`input[id="nodeId"]`)); - getNodeIdFieldValue() { - BrowserVisibility.waitUntilElementIsVisible(this.nodeIdField); + async getNodeIdFieldValue(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.nodeIdField); return this.nodeIdField.getAttribute('value'); } - writeCustomNodeId(nodeId: string) { - return BrowserActions.clearSendKeys(this.nodeIdField, nodeId); + async writeCustomNodeId(nodeId: string): Promise { + await BrowserActions.clearSendKeys(this.nodeIdField, nodeId); } } diff --git a/e2e/pages/adf/dialog/createLibraryDialog.ts b/e2e/pages/adf/dialog/createLibraryDialog.ts index fb5032f666..3425a2fc22 100644 --- a/e2e/pages/adf/dialog/createLibraryDialog.ts +++ b/e2e/pages/adf/dialog/createLibraryDialog.ts @@ -15,143 +15,140 @@ * limitations under the License. */ -import { by, element, browser, protractor } from 'protractor'; +import { by, element, browser, protractor, ElementFinder, ElementArrayFinder } from 'protractor'; import { BrowserVisibility, BrowserActions } from '@alfresco/adf-testing'; export class CreateLibraryDialog { - libraryDialog = element(by.css('[role="dialog"]')); - libraryTitle = element(by.css('.adf-library-dialog>h2')); - libraryNameField = element(by.css('input[formcontrolname="title"]')); - libraryIdField = element(by.css('input[formcontrolname="id"]')); - libraryDescriptionField = element(by.css('textarea[formcontrolname="description"]')); - publicRadioButton = element(by.css('[data-automation-id="PUBLIC"]>label')); - privateRadioButton = element(by.css('[data-automation-id="PRIVATE"]>label')); - moderatedRadioButton = element(by.css('[data-automation-id="MODERATED"]>label')); - cancelButton = element(by.css('button[data-automation-id="cancel-library-id"]')); - createButton = element(by.css('button[data-automation-id="create-library-id"]')); - errorMessage = element(by.css('.mat-dialog-content .mat-error')); - errorMessages = element.all(by.css('.mat-dialog-content .mat-error')); - libraryNameHint = element(by.css('adf-library-dialog .mat-hint')); + libraryDialog: ElementFinder = element(by.css('[role="dialog"]')); + libraryTitle: ElementFinder = element(by.css('.adf-library-dialog>h2')); + libraryNameField: ElementFinder = element(by.css('input[formcontrolname="title"]')); + libraryIdField: ElementFinder = element(by.css('input[formcontrolname="id"]')); + libraryDescriptionField: ElementFinder = element(by.css('textarea[formcontrolname="description"]')); + publicRadioButton: ElementFinder = element(by.css('[data-automation-id="PUBLIC"]>label')); + privateRadioButton: ElementFinder = element(by.css('[data-automation-id="PRIVATE"]>label')); + moderatedRadioButton: ElementFinder = element(by.css('[data-automation-id="MODERATED"]>label')); + cancelButton: ElementFinder = element(by.css('button[data-automation-id="cancel-library-id"]')); + createButton: ElementFinder = element(by.css('button[data-automation-id="create-library-id"]')); + errorMessage: ElementFinder = element(by.css('.mat-dialog-content .mat-error')); + errorMessages: ElementArrayFinder = element.all(by.css('.mat-dialog-content .mat-error')); + libraryNameHint: ElementFinder = element(by.css('adf-library-dialog .mat-hint')); - getSelectedRadio() { - const radio = element(by.css('.mat-radio-button[class*="checked"]')); - return BrowserActions.getText(radio); + async getSelectedRadio(): Promise { + const radio: ElementFinder = element(by.css('.mat-radio-button[class*="checked"]')); + return await BrowserActions.getText(radio); } - waitForDialogToOpen() { - BrowserVisibility.waitUntilElementIsPresent(this.libraryDialog); - return this; + async waitForDialogToOpen(): Promise { + await BrowserVisibility.waitUntilElementIsPresent(this.libraryDialog); } - waitForDialogToClose() { - BrowserVisibility.waitUntilElementIsNotOnPage(this.libraryDialog); - return this; + async waitForDialogToClose(): Promise { + await BrowserVisibility.waitUntilElementIsNotPresent(this.libraryDialog); } - isDialogOpen() { - return browser.isElementPresent(this.libraryDialog); + async isDialogOpen(): Promise { + return await browser.isElementPresent(this.libraryDialog); } - getTitle() { - return BrowserActions.getText(this.libraryTitle); + async getTitle(): Promise { + return await BrowserActions.getText(this.libraryTitle); } - getLibraryIdText() { - return this.libraryIdField.getAttribute('value'); + async getLibraryIdText(): Promise { + return await this.libraryIdField.getAttribute('value'); } - isErrorMessageDisplayed() { - return this.errorMessage.isDisplayed(); + async isErrorMessageDisplayed(): Promise { + return await this.errorMessage.isDisplayed(); } - getErrorMessage() { - return BrowserActions.getText(this.errorMessage); + async getErrorMessage(): Promise { + return await BrowserActions.getText(this.errorMessage); } - getErrorMessages(position) { - return BrowserActions.getText(this.errorMessages.get(position)); + async getErrorMessages(position): Promise { + return await BrowserActions.getText(this.errorMessages.get(position)); } - waitForLibraryNameHint() { - BrowserVisibility.waitUntilElementIsVisible(this.libraryNameHint); - return this; + async waitForLibraryNameHint(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.libraryNameHint); } - getLibraryNameHint() { - return BrowserActions.getText(this.libraryNameHint); + async getLibraryNameHint(): Promise { + return await BrowserActions.getText(this.libraryNameHint); } - isNameDisplayed() { - return this.libraryNameField.isDisplayed(); + async isNameDisplayed(): Promise { + return await this.libraryNameField.isDisplayed(); } - isLibraryIdDisplayed() { - return this.libraryIdField.isDisplayed(); + async isLibraryIdDisplayed(): Promise { + return await this.libraryIdField.isDisplayed(); } - isDescriptionDisplayed() { - return this.libraryDescriptionField.isDisplayed(); + async isDescriptionDisplayed(): Promise { + return await this.libraryDescriptionField.isDisplayed(); } - isPublicDisplayed() { - return this.publicRadioButton.isDisplayed(); + async isPublicDisplayed(): Promise { + return await this.publicRadioButton.isDisplayed(); } - isModeratedDisplayed() { - return this.moderatedRadioButton.isDisplayed(); + async isModeratedDisplayed(): Promise { + return await this.moderatedRadioButton.isDisplayed(); } - isPrivateDisplayed() { - return this.privateRadioButton.isDisplayed(); + async isPrivateDisplayed(): Promise { + return await this.privateRadioButton.isDisplayed(); } - isCreateEnabled() { - return this.createButton.isEnabled(); + async isCreateEnabled(): Promise { + return await this.createButton.isEnabled(); } - isCancelEnabled() { - return this.cancelButton.isEnabled(); + async isCancelEnabled(): Promise { + return await this.cancelButton.isEnabled(); } - clickCreate() { - BrowserActions.click(this.createButton); + async clickCreate(): Promise { + await BrowserActions.click(this.createButton); } - clickCancel() { - BrowserActions.click(this.cancelButton); + async clickCancel(): Promise { + await BrowserActions.click(this.cancelButton); } - typeLibraryName(libraryName: string) { - BrowserActions.clearSendKeys(this.libraryNameField, libraryName); + async typeLibraryName(libraryName: string): Promise { + await BrowserActions.clearSendKeys(this.libraryNameField, libraryName); } - typeLibraryId(libraryId) { - BrowserActions.clearSendKeys(this.libraryIdField, libraryId); + async typeLibraryId(libraryId): Promise { + await BrowserActions.clearSendKeys(this.libraryIdField, libraryId); } - typeLibraryDescription(libraryDescription) { - BrowserActions.clearSendKeys(this.libraryDescriptionField, libraryDescription); + async typeLibraryDescription(libraryDescription): Promise { + await BrowserActions.clearSendKeys(this.libraryDescriptionField, libraryDescription); } - clearLibraryName() { - this.libraryNameField.clear(); - this.libraryNameField.sendKeys(' ', protractor.Key.CONTROL, 'a', protractor.Key.NULL, protractor.Key.BACK_SPACE); + async clearLibraryName(): Promise { + await this.libraryNameField.clear(); + await this.libraryNameField.sendKeys(' ', protractor.Key.CONTROL, 'a', protractor.Key.NULL, protractor.Key.BACK_SPACE); } - clearLibraryId() { - this.libraryIdField.clear(); - this.libraryIdField.sendKeys(' ', protractor.Key.CONTROL, 'a', protractor.Key.NULL, protractor.Key.BACK_SPACE); + async clearLibraryId(): Promise { + await this.libraryIdField.clear(); + await this.libraryIdField.sendKeys(' ', protractor.Key.CONTROL, 'a', protractor.Key.NULL, protractor.Key.BACK_SPACE); } - selectPublic() { - BrowserActions.click(this.publicRadioButton); + async selectPublic(): Promise { + await BrowserActions.click(this.publicRadioButton); } - selectPrivate() { - BrowserActions.click(this.privateRadioButton); + async selectPrivate(): Promise { + await BrowserActions.click(this.privateRadioButton); } - selectModerated() { - BrowserActions.click(this.moderatedRadioButton); + async selectModerated(): Promise { + await BrowserActions.click(this.moderatedRadioButton); } } diff --git a/e2e/pages/adf/dialog/folderDialog.ts b/e2e/pages/adf/dialog/folderDialog.ts index c4b31ddf53..fef5cb7ae5 100644 --- a/e2e/pages/adf/dialog/folderDialog.ts +++ b/e2e/pages/adf/dialog/folderDialog.ts @@ -15,87 +15,78 @@ * limitations under the License. */ -import { browser, by, element } from 'protractor'; +import { by, element, ElementFinder } from 'protractor'; import { BrowserVisibility, BrowserActions } from '@alfresco/adf-testing'; export class FolderDialog { - folderDialog = element(by.css('adf-folder-dialog')); - folderNameField = this.folderDialog.element(by.id('adf-folder-name-input')); - folderDescriptionField = this.folderDialog.element(by.id('adf-folder-description-input')); - createUpdateButton = this.folderDialog.element(by.id('adf-folder-create-button')); - cancelButton = this.folderDialog.element(by.id('adf-folder-cancel-button')); - folderTitle = this.folderDialog.element((by.css('h2.mat-dialog-title'))); - validationMessage = this.folderDialog.element(by.css('div.mat-form-field-subscript-wrapper mat-hint span')); + folderDialog: ElementFinder = element(by.css('adf-folder-dialog')); + folderNameField: ElementFinder = this.folderDialog.element(by.id('adf-folder-name-input')); + folderDescriptionField: ElementFinder = this.folderDialog.element(by.id('adf-folder-description-input')); + createUpdateButton: ElementFinder = this.folderDialog.element(by.id('adf-folder-create-button')); + cancelButton: ElementFinder = this.folderDialog.element(by.id('adf-folder-cancel-button')); + folderTitle: ElementFinder = this.folderDialog.element((by.css('h2.mat-dialog-title'))); + validationMessage: ElementFinder = this.folderDialog.element(by.css('div.mat-form-field-subscript-wrapper mat-hint span')); - getDialogTitle() { - return BrowserActions.getText(this.folderTitle); + async getDialogTitle(): Promise { + return await BrowserActions.getText(this.folderTitle); } - checkFolderDialogIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.folderDialog); - return this; + async checkFolderDialogIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.folderDialog); } - checkFolderDialogIsNotDisplayed() { - BrowserVisibility.waitUntilElementIsNotVisible(this.folderDialog); - return this; + async checkFolderDialogIsNotDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsNotVisible(this.folderDialog); } - clickOnCreateUpdateButton() { - BrowserActions.click(this.createUpdateButton); + async clickOnCreateUpdateButton(): Promise { + await BrowserActions.click(this.createUpdateButton); } - checkCreateUpdateBtnIsDisabled() { - BrowserActions.checkIsDisabled(this.createUpdateButton); - return this; + async checkCreateUpdateBtnIsDisabled(): Promise { + await BrowserActions.checkIsDisabled(this.createUpdateButton); } - checkCreateUpdateBtnIsEnabled() { - this.createUpdateButton.isEnabled(); - return this; + async clickOnCancelButton(): Promise { + await BrowserActions.click(this.cancelButton); } - checkCancelBtnIsEnabled() { - this.cancelButton.isEnabled(); - return this; + async addFolderName(folderName): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.folderNameField); + await BrowserActions.clearSendKeys(this.folderNameField, folderName); } - clickOnCancelButton() { - BrowserActions.click(this.cancelButton); + async addFolderDescription(folderDescription): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.folderDescriptionField); + await BrowserActions.clearSendKeys(this.folderDescriptionField, folderDescription); } - addFolderName(folderName) { - BrowserVisibility.waitUntilElementIsVisible(this.folderNameField); - BrowserActions.clearSendKeys(this.folderNameField, folderName); - browser.driver.sleep(500); - return this; + async getFolderName(): Promise { + return await this.folderNameField.getAttribute('value'); } - addFolderDescription(folderDescription) { - BrowserVisibility.waitUntilElementIsVisible(this.folderDescriptionField); - BrowserActions.clearSendKeys(this.folderDescriptionField, folderDescription); - return this; + async getValidationMessage(): Promise { + return await BrowserActions.getText(this.validationMessage); } - getFolderName() { - return this.folderNameField.getAttribute('value'); + async checkValidationMessageIsNotDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsNotVisible(this.validationMessage); } - getValidationMessage() { - return BrowserActions.getText(this.validationMessage); - } - - checkValidationMessageIsNotDisplayed() { - BrowserVisibility.waitUntilElementIsNotVisible(this.validationMessage); - return this; - } - - getFolderNameField() { + getFolderNameField(): ElementFinder { return this.folderNameField; } - getFolderDescriptionField() { + getFolderDescriptionField(): ElementFinder { return this.folderDescriptionField; } + async checkCreateUpdateBtnIsEnabled(): Promise { + await this.createUpdateButton.isEnabled(); + } + + async checkCancelBtnIsEnabled(): Promise { + await this.cancelButton.isEnabled(); + } + } diff --git a/e2e/pages/adf/dialog/searchDialog.ts b/e2e/pages/adf/dialog/searchDialog.ts index bed8893c82..4bd61d643d 100644 --- a/e2e/pages/adf/dialog/searchDialog.ts +++ b/e2e/pages/adf/dialog/searchDialog.ts @@ -15,102 +15,88 @@ * limitations under the License. */ -import { browser, by, element, protractor } from 'protractor'; +import { browser, by, element, ElementFinder, Locator, protractor } from 'protractor'; import { BrowserVisibility, BrowserActions } from '@alfresco/adf-testing'; export class SearchDialog { - searchIcon = element(by.css(`button[class*='adf-search-button']`)); - searchBar = element(by.css(`adf-search-control input`)); - searchBarExpanded = element(by.css(`adf-search-control mat-form-field[class*="mat-focused"] input`)); - noResultMessage = element(by.css(`p[class*='adf-search-fixed-text']`)); - rowsAuthor = by.css(`div[class='mat-list-text'] p[class*='adf-search-fixed-text']`); - completeName = by.css(`h4[class*='adf-search-fixed-text']`); - highlightName = by.css(`.adf-highlight`); - searchDialog = element(by.css(`mat-list[id='autocomplete-search-result-list']`)); + searchIcon: ElementFinder = element(by.css(`button[class*='adf-search-button']`)); + searchBar: ElementFinder = element(by.css(`adf-search-control input`)); + searchBarExpanded: ElementFinder = element(by.css(`adf-search-control mat-form-field[class*="mat-focused"] input`)); + noResultMessage: ElementFinder = element(by.css(`p[class*='adf-search-fixed-text']`)); + rowsAuthor: Locator = by.css(`div[class='mat-list-text'] p[class*='adf-search-fixed-text']`); + completeName: Locator = by.css(`h4[class*='adf-search-fixed-text']`); + highlightName: Locator = by.css(`.adf-highlight`); + searchDialog: ElementFinder = element(by.css(`mat-list[id='autocomplete-search-result-list']`)); - pressDownArrowAndEnter() { - element(by.css(`adf-search-control div input`)).sendKeys(protractor.Key.ARROW_DOWN); - return browser.actions().sendKeys(protractor.Key.ENTER).perform(); + async pressDownArrowAndEnter(): Promise { + await element(by.css(`adf-search-control div input`)).sendKeys(protractor.Key.ARROW_DOWN); + await browser.actions().sendKeys(protractor.Key.ENTER).perform(); } - clickOnSearchIcon() { - BrowserActions.click(this.searchIcon); - return this; + async clickOnSearchIcon(): Promise { + await BrowserActions.click(this.searchIcon); } - checkSearchIconIsVisible() { - BrowserVisibility.waitUntilElementIsVisible(this.searchIcon); - return this; + async checkSearchIconIsVisible(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.searchIcon); } - checkSearchBarIsVisible() { - BrowserVisibility.waitUntilElementIsVisible(this.searchBar); - return this; + async checkSearchBarIsVisible(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.searchBar); } - checkSearchBarIsNotVisible() { - BrowserVisibility.waitUntilElementIsVisible(this.searchBar); - BrowserVisibility.waitUntilElementIsNotVisible(this.searchBarExpanded); - return this; + async checkSearchBarIsNotVisible(): Promise { + await BrowserVisibility.waitUntilElementIsNotVisible(this.searchBarExpanded); } - checkNoResultMessageIsDisplayed() { - browser.driver.sleep(500); - BrowserVisibility.waitUntilElementIsVisible(this.noResultMessage); - return this; + async checkNoResultMessageIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.noResultMessage); } - checkNoResultMessageIsNotDisplayed() { - BrowserVisibility.waitUntilElementIsNotOnPage(this.noResultMessage); - return this; + async checkNoResultMessageIsNotDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsNotVisible(this.noResultMessage); } - enterText(text) { - BrowserVisibility.waitUntilElementIsVisible(this.searchBar); - BrowserActions.clickExecuteScript('adf-search-control input'); - this.searchBar.sendKeys(text); - return this; + async enterText(text): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.searchBar); + await this.searchBar.sendKeys(text); } - enterTextAndPressEnter(text) { - BrowserVisibility.waitUntilElementIsVisible(this.searchBar); - BrowserActions.clickExecuteScript('adf-search-control input'); - this.searchBar.sendKeys(text); - this.searchBar.sendKeys(protractor.Key.ENTER); - return this; + async enterTextAndPressEnter(text): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.searchBar); + await this.searchBar.sendKeys(text); + await this.searchBar.sendKeys(protractor.Key.ENTER); } - resultTableContainsRow(name) { - BrowserVisibility.waitUntilElementIsVisible(this.searchDialog); - BrowserVisibility.waitUntilElementIsVisible(this.getRowByRowName(name)); - return this; + async resultTableContainsRow(name): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.searchDialog); + await BrowserVisibility.waitUntilElementIsVisible(this.getRowByRowName(name)); } - clickOnSpecificRow(name) { - this.resultTableContainsRow(name); - this.getRowByRowName(name).click(); - return this; + async clickOnSpecificRow(name): Promise { + await this.resultTableContainsRow(name); + await BrowserActions.click(this.getRowByRowName(name)); } - getRowByRowName(name) { + getRowByRowName(name): ElementFinder { return element(by.css(`mat-list-item[data-automation-id='autocomplete_for_${name}']`)); } - getSpecificRowsHighlightName(name) { - return BrowserActions.getText(this.getRowByRowName(name).element(this.highlightName)); + async getSpecificRowsHighlightName(name): Promise { + return await BrowserActions.getText(this.getRowByRowName(name).element(this.highlightName)); } - getSpecificRowsCompleteName(name) { - return BrowserActions.getText(this.getRowByRowName(name).element(this.completeName)); + async getSpecificRowsCompleteName(name): Promise { + return await BrowserActions.getText(this.getRowByRowName(name).element(this.completeName)); } - getSpecificRowsAuthor(name) { - return BrowserActions.getText(this.getRowByRowName(name).element(this.rowsAuthor)); + async getSpecificRowsAuthor(name): Promise { + return await BrowserActions.getText(this.getRowByRowName(name).element(this.rowsAuthor)); } - clearText() { - BrowserVisibility.waitUntilElementIsVisible(this.searchBar); - return this.searchBar.clear(); + async clearText(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.searchBar); + await this.searchBar.clear(); } } diff --git a/e2e/pages/adf/dialog/shareDialog.ts b/e2e/pages/adf/dialog/shareDialog.ts index 154a792d52..f484e5290a 100644 --- a/e2e/pages/adf/dialog/shareDialog.ts +++ b/e2e/pages/adf/dialog/shareDialog.ts @@ -15,129 +15,119 @@ * limitations under the License. */ -import { element, by } from 'protractor'; +import { element, by, ElementFinder } from 'protractor'; import { BrowserVisibility, FormControllersPage, BrowserActions } from '@alfresco/adf-testing'; import moment = require('moment'); export class ShareDialog { formControllersPage = new FormControllersPage(); - shareDialog = element(by.css('adf-share-dialog')); - dialogTitle = element(by.css('[data-automation-id="adf-share-dialog-title"]')); - shareToggle = element(by.css('[data-automation-id="adf-share-toggle"] label')); - shareToggleChecked = element(by.css('mat-dialog-container mat-slide-toggle.mat-checked')); - shareToggleDisabled = element(by.css('mat-dialog-container mat-slide-toggle.mat-disabled')); - shareLink = element(by.css('[data-automation-id="adf-share-link"]')); - closeButton = element(by.css('button[data-automation-id="adf-share-dialog-close"]')); - snackBar = element(by.css('simple-snack-bar')); - copySharedLinkButton = element(by.css('.adf-input-action')); - timeDatePickerButton = element(by.css('mat-datetimepicker-toggle button')); - dayPicker = element(by.css('mat-datetimepicker-month-view')); - clockPicker = element(by.css('mat-datetimepicker-clock')); - hoursPicker = element(by.css('.mat-datetimepicker-clock-hours')); - minutePicker = element(by.css('.mat-datetimepicker-clock-minutes')); - expirationDateInput = element(by.css('input[formcontrolname="time"]')); - confirmationDialog = element(by.css('adf-confirm-dialog')); - confirmationCancelButton = element(by.id('adf-confirm-cancel')); - confirmationRemoveButton = element(by.id('adf-confirm-accept')); + shareDialog: ElementFinder = element(by.css('adf-share-dialog')); + dialogTitle: ElementFinder = element(by.css('[data-automation-id="adf-share-dialog-title"]')); + shareToggle: ElementFinder = element(by.css('[data-automation-id="adf-share-toggle"] label')); + shareToggleChecked: ElementFinder = element(by.css('mat-dialog-container mat-slide-toggle.mat-checked')); + shareLink: ElementFinder = element(by.css('[data-automation-id="adf-share-link"]')); + closeButton: ElementFinder = element(by.css('button[data-automation-id="adf-share-dialog-close"]')); + copySharedLinkButton: ElementFinder = element(by.css('.adf-input-action')); + timeDatePickerButton: ElementFinder = element(by.css('mat-datetimepicker-toggle button')); + dayPicker: ElementFinder = element(by.css('mat-datetimepicker-month-view')); + clockPicker: ElementFinder = element(by.css('mat-datetimepicker-clock')); + hoursPicker: ElementFinder = element(by.css('.mat-datetimepicker-clock-hours')); + minutePicker: ElementFinder = element(by.css('.mat-datetimepicker-clock-minutes')); + expirationDateInput: ElementFinder = element(by.css('input[formcontrolname="time"]')); + confirmationDialog: ElementFinder = element(by.css('adf-confirm-dialog')); + confirmationCancelButton: ElementFinder = element(by.id('adf-confirm-cancel')); + confirmationRemoveButton: ElementFinder = element(by.id('adf-confirm-accept')); - checkDialogIsDisplayed() { - return BrowserVisibility.waitUntilElementIsVisible(this.dialogTitle); + async checkDialogIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.dialogTitle); } - clickUnShareFile() { - this.formControllersPage.enableToggle(this.shareToggle); + async clickUnShareFile() { + await this.formControllersPage.enableToggle(this.shareToggle); } - clickConfirmationDialogCancelButton() { - BrowserActions.click(this.confirmationCancelButton); + async clickConfirmationDialogCancelButton(): Promise { + await BrowserActions.click(this.confirmationCancelButton); } - clickConfirmationDialogRemoveButton() { - BrowserActions.click(this.confirmationRemoveButton); + async clickConfirmationDialogRemoveButton(): Promise { + await BrowserActions.click(this.confirmationRemoveButton); } - checkShareLinkIsDisplayed() { - return BrowserVisibility.waitUntilElementIsVisible(this.shareLink); + async checkShareLinkIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.shareLink); } - getShareLink() { - BrowserVisibility.waitUntilElementIsVisible(this.shareLink); - return this.shareLink.getAttribute('value'); + async getShareLink(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.shareLink); + return await this.shareLink.getAttribute('value'); } - clickCloseButton() { - return BrowserActions.click(this.closeButton); - + async clickCloseButton(): Promise { + await BrowserActions.click(this.closeButton); } - clickShareLinkButton() { - return BrowserActions.click(this.copySharedLinkButton); + async clickShareLinkButton(): Promise { + await BrowserActions.click(this.copySharedLinkButton); } - shareToggleButtonIsChecked() { - BrowserVisibility.waitUntilElementIsPresent(this.shareToggleChecked); + async shareToggleButtonIsChecked(): Promise { + await BrowserVisibility.waitUntilElementIsPresent(this.shareToggleChecked); } - shareToggleButtonIsDisabled() { - BrowserVisibility.waitUntilElementIsPresent(this.shareToggleDisabled); + async dialogIsClosed(): Promise { + await BrowserVisibility.waitUntilElementIsStale(this.shareDialog); } - dialogIsClosed() { - BrowserVisibility.waitUntilElementIsStale(this.shareDialog); + async clickDateTimePickerButton(): Promise { + await BrowserActions.click(this.timeDatePickerButton); } - clickDateTimePickerButton() { - BrowserActions.click(this.timeDatePickerButton); - } - - calendarTodayDayIsDisabled() { + async calendarTodayDayIsDisabled(): Promise { const tomorrow = moment().add(1, 'days').format('D'); if (tomorrow !== '1') { - const today: any = this.dayPicker.element(by.css('.mat-datetimepicker-calendar-body-today')).getText(); - BrowserVisibility.waitUntilElementIsPresent(element(by.cssContainingText('.mat-datetimepicker-calendar-body-disabled', today))); + const today = await BrowserActions.getText(this.dayPicker.element(by.css('.mat-datetimepicker-calendar-body-today'))); + await BrowserVisibility.waitUntilElementIsPresent(element(by.cssContainingText('.mat-datetimepicker-calendar-body-disabled', today))); } } - setDefaultDay() { - BrowserVisibility.waitUntilElementIsVisible(this.dayPicker); + async setDefaultDay(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.dayPicker); const tomorrow = moment().add(1, 'days').format('LL'); - BrowserVisibility.waitUntilElementIsClickable(this.dayPicker.element(by.css(`td[aria-label="${tomorrow}"]`))); - this.dayPicker.element(by.css(`td[aria-label="${tomorrow}"]`)).click(); + await BrowserVisibility.waitUntilElementIsClickable(this.dayPicker.element(by.css(`td[aria-label="${tomorrow}"]`))); + await BrowserActions.click(this.dayPicker.element(by.css(`td[aria-label="${tomorrow}"]`))); + } - setDefaultHour() { + async setDefaultHour(): Promise { const selector = '.mat-datetimepicker-clock-cell:not(.mat-datetimepicker-clock-cell-disabled)'; - BrowserVisibility.waitUntilElementIsVisible(this.clockPicker); - BrowserVisibility.waitUntilElementIsVisible(this.hoursPicker); - this.hoursPicker.all(by.css(selector)).first().click(); + await BrowserVisibility.waitUntilElementIsVisible(this.clockPicker); + await BrowserVisibility.waitUntilElementIsVisible(this.hoursPicker); + await BrowserActions.click(this.hoursPicker.all(by.css(selector)).first()); } - setDefaultMinutes() { + async setDefaultMinutes() { const selector = '.mat-datetimepicker-clock-cell:not(.mat-datetimepicker-clock-cell-disabled)'; - BrowserVisibility.waitUntilElementIsVisible(this.minutePicker); - this.minutePicker.all(by.css(selector)).first().click(); + await BrowserVisibility.waitUntilElementIsVisible(this.minutePicker); + await BrowserActions.click(this.minutePicker.all(by.css(selector)).first()); } - dateTimePickerDialogIsClosed() { - BrowserVisibility.waitUntilElementIsStale(element(by.css('mat-datetimepicker-content'))); + async dateTimePickerDialogIsClosed(): Promise { + await BrowserVisibility.waitUntilElementIsStale(element(by.css('mat-datetimepicker-content'))); } - getExpirationDate() { - return this.expirationDateInput.getAttribute('value'); + async getExpirationDate(): Promise { + return await this.expirationDateInput.getAttribute('value'); } - expirationDateInputHasValue(value) { - BrowserVisibility.waitUntilElementHasValue(this.expirationDateInput, value); + async expirationDateInputHasValue(value): Promise { + await BrowserVisibility.waitUntilElementHasValue(this.expirationDateInput, value); } - confirmationDialogIsDisplayed() { - return BrowserVisibility.waitUntilElementIsVisible(this.confirmationDialog); - } - - confirmationDialogIsNotDisplayed() { - return BrowserVisibility.waitUntilElementIsNotVisible(this.confirmationDialog); + async confirmationDialogIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.confirmationDialog); } } diff --git a/e2e/pages/adf/dialog/uploadDialog.ts b/e2e/pages/adf/dialog/uploadDialog.ts index 230c3fd46e..9492568231 100644 --- a/e2e/pages/adf/dialog/uploadDialog.ts +++ b/e2e/pages/adf/dialog/uploadDialog.ts @@ -15,176 +15,144 @@ * limitations under the License. */ -import { element, by, protractor, browser } from 'protractor'; +import { element, by, browser, ElementFinder, Locator } from 'protractor'; import { BrowserVisibility, BrowserActions } from '@alfresco/adf-testing'; export class UploadDialog { - closeButton = element((by.css('footer[class*="upload-dialog__actions"] button[id="adf-upload-dialog-close"]'))); - dialog = element(by.css('div[id="upload-dialog"]')); - minimizedDialog = element(by.css('div[class*="upload-dialog--minimized"]')); - uploadedStatusIcon = by.css('mat-icon[class*="status--done"]'); - cancelledStatusIcon = by.css('div[class*="status--cancelled"]'); + closeButton: ElementFinder = element((by.css('footer[class*="upload-dialog__actions"] button[id="adf-upload-dialog-close"]'))); + dialog: ElementFinder = element(by.css('div[id="upload-dialog"]')); + minimizedDialog: ElementFinder = element(by.css('div[class*="upload-dialog--minimized"]')); + uploadedStatusIcon: Locator = by.css('mat-icon[class*="status--done"]'); + cancelledStatusIcon: Locator = by.css('div[class*="status--cancelled"]'); errorStatusIcon = by.css('div[class*="status--error"] mat-icon'); - errorTooltip = element(by.css('div.mat-tooltip')); + errorTooltip: ElementFinder = element(by.css('div.mat-tooltip')); rowByRowName = by.xpath('ancestor::adf-file-uploading-list-row'); - title = element(by.css('span[class*="upload-dialog__title"]')); - minimizeButton = element(by.css('mat-icon[title="Minimize"]')); - maximizeButton = element(by.css('mat-icon[title="Maximize"]')); - canUploadConfirmationTitle = element(by.css('p[class="upload-dialog__confirmation--title"]')); - canUploadConfirmationDescription = element(by.css('p[class="upload-dialog__confirmation--text"]')); - confirmationDialogNoButton = element(by.partialButtonText('No')); - confirmationDialogYesButton = element(by.partialButtonText('Yes')); - cancelUploadsElement = element((by.css('footer[class*="upload-dialog__actions"] button[id="adf-upload-dialog-cancel-all"]'))); + title: ElementFinder = element(by.css('span[class*="upload-dialog__title"]')); + minimizeButton: ElementFinder = element(by.css('mat-icon[title="Minimize"]')); + maximizeButton: ElementFinder = element(by.css('mat-icon[title="Maximize"]')); + canUploadConfirmationTitle: ElementFinder = element(by.css('p[class="upload-dialog__confirmation--title"]')); + canUploadConfirmationDescription: ElementFinder = element(by.css('p[class="upload-dialog__confirmation--text"]')); + confirmationDialogNoButton: ElementFinder = element(by.partialButtonText('No')); + confirmationDialogYesButton: ElementFinder = element(by.partialButtonText('Yes')); + cancelUploadsElement: ElementFinder = element((by.css('footer[class*="upload-dialog__actions"] button[id="adf-upload-dialog-cancel-all"]'))); - clickOnCloseButton() { - this.checkCloseButtonIsDisplayed(); - BrowserActions.click(this.closeButton); - return this; + async clickOnCloseButton(): Promise { + await this.checkCloseButtonIsDisplayed(); + await BrowserActions.clickExecuteScript('footer[class*="upload-dialog__actions"] button[id="adf-upload-dialog-close"]'); } - checkCloseButtonIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.closeButton); - return this; + async checkCloseButtonIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.closeButton); } - dialogIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.dialog); - return this; + async dialogIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.dialog); } - dialogIsMinimized() { - BrowserVisibility.waitUntilElementIsVisible(this.minimizedDialog); - return this; + async dialogIsMinimized(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.minimizedDialog); } - dialogIsNotDisplayed() { - BrowserVisibility.waitUntilElementIsNotOnPage(this.dialog); - return this; + async dialogIsNotDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsNotVisible(this.dialog); } getRowsName(content) { - const row = element.all(by.css(`div[class*='uploading-row'] span[title="${content}"]`)).first(); - BrowserVisibility.waitUntilElementIsVisible(row); + const row: ElementFinder = element.all(by.css(`div[class*='uploading-row'] span[title="${content}"]`)).first(); return row; } getRowByRowName(content) { - return this.getRowsName(content).element(this.rowByRowName); + const rows = this.getRowsName(content); + return rows.element(this.rowByRowName); } - fileIsUploaded(content) { - BrowserVisibility.waitUntilElementIsVisible(this.getRowByRowName(content).element(this.uploadedStatusIcon)); - return this; + async fileIsUploaded(content): Promise { + const row = await this.getRowByRowName(content); + await BrowserVisibility.waitUntilElementIsVisible(row.element(this.uploadedStatusIcon)); } - fileIsError(content) { - BrowserVisibility.waitUntilElementIsVisible(this.getRowByRowName(content).element(this.errorStatusIcon)); - return this; + async fileIsError(content) { + const row = await this.getRowByRowName(content); + await BrowserVisibility.waitUntilElementIsVisible(row.element(this.errorStatusIcon)); } - filesAreUploaded(content) { + async filesAreUploaded(content): Promise { for (let i = 0; i < content.length; i++) { - this.fileIsUploaded(content[i]); + await this.fileIsUploaded(content[i]); } - return this; } - fileIsNotDisplayedInDialog(content) { - BrowserVisibility.waitUntilElementIsNotVisible(element(by.css(`div[class*='uploading-row'] span[title="${content}"]`))); - return this; + async fileIsNotDisplayedInDialog(content): Promise { + await BrowserVisibility.waitUntilElementIsNotVisible(element(by.css(`div[class*='uploading-row'] span[title="${content}"]`))); } - cancelUploads() { - BrowserActions.click(this.cancelUploadsElement); - return this; + async cancelUploads(): Promise { + await BrowserActions.click(this.cancelUploadsElement); } - fileIsCancelled(content) { - BrowserVisibility.waitUntilElementIsVisible(this.getRowByRowName(content).element(this.cancelledStatusIcon)); - return this; + async fileIsCancelled(content): Promise { + const row = await this.getRowByRowName(content); + await BrowserVisibility.waitUntilElementIsVisible(row.element(this.cancelledStatusIcon)); } - removeUploadedFile(content) { - BrowserVisibility.waitUntilElementIsVisible(this.getRowByRowName(content).element(this.uploadedStatusIcon)); - this.getRowByRowName(content).element(this.uploadedStatusIcon).click(); - return this; + async removeUploadedFile(content): Promise { + const row = await this.getRowByRowName(content); + await BrowserVisibility.waitUntilElementIsVisible(row.element(this.uploadedStatusIcon)); + const elementRow = await this.getRowByRowName(content); + await BrowserActions.click(elementRow.element(this.uploadedStatusIcon)); + } - getTitleText() { - BrowserVisibility.waitUntilElementIsVisible(this.title); - const deferred = protractor.promise.defer(); - this.title.getText().then((text) => { - deferred.fulfill(text); - }); - return deferred.promise; + async getTitleText(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.title); + return await this.title.getText(); } - getConfirmationDialogTitleText() { - BrowserVisibility.waitUntilElementIsVisible(this.canUploadConfirmationTitle); - const deferred = protractor.promise.defer(); - this.canUploadConfirmationTitle.getText().then((text) => { - deferred.fulfill(text); - }); - return deferred.promise; + async getConfirmationDialogTitleText(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.canUploadConfirmationTitle); + return this.canUploadConfirmationTitle.getText(); } - getConfirmationDialogDescriptionText() { - BrowserVisibility.waitUntilElementIsVisible(this.canUploadConfirmationDescription); - const deferred = protractor.promise.defer(); - this.canUploadConfirmationDescription.getText().then((text) => { - deferred.fulfill(text); - }); - return deferred.promise; + async getConfirmationDialogDescriptionText(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.canUploadConfirmationDescription); + return this.canUploadConfirmationDescription.getText(); } - clickOnConfirmationDialogYesButton() { - BrowserActions.click(this.confirmationDialogYesButton); - return this; + async clickOnConfirmationDialogYesButton(): Promise { + await BrowserActions.click(this.confirmationDialogYesButton); } - clickOnConfirmationDialogNoButton() { - BrowserActions.click(this.confirmationDialogNoButton); - return this; + async clickOnConfirmationDialogNoButton(): Promise { + await BrowserActions.click(this.confirmationDialogNoButton); } - async checkUploadCompleted() { - return (await this.numberOfCurrentFilesUploaded()) === (await this.numberOfInitialFilesUploaded()); + async numberOfCurrentFilesUploaded(): Promise { + const text = await this.getTitleText(); + return text.split('Uploaded ')[1].split(' / ')[0]; } - numberOfCurrentFilesUploaded() { - const deferred = protractor.promise.defer(); - this.getTitleText().then((text: any) => { - deferred.fulfill(text.split('Uploaded ')[1].split(' / ')[0]); - }); - return deferred.promise; + async numberOfInitialFilesUploaded(): Promise { + const text = await this.getTitleText(); + return text.split('Uploaded ')[1].split(' / ')[1]; } - numberOfInitialFilesUploaded() { - const deferred = protractor.promise.defer(); - this.getTitleText().then((text: any) => { - deferred.fulfill(text.split('Uploaded ')[1].split(' / ')[1]); - }); - return deferred.promise; + async minimizeUploadDialog(): Promise { + await BrowserActions.click(this.minimizeButton); } - minimizeUploadDialog() { - BrowserActions.click(this.minimizeButton); - return this; + async maximizeUploadDialog(): Promise { + await BrowserActions.click(this.maximizeButton); } - maximizeUploadDialog() { - BrowserActions.click(this.maximizeButton); - return this; + async displayTooltip(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(element(this.errorStatusIcon)); + await browser.actions().mouseMove(element(this.errorStatusIcon)).perform(); } - displayTooltip() { - BrowserVisibility.waitUntilElementIsVisible(element(this.errorStatusIcon)); - browser.actions().mouseMove(element(this.errorStatusIcon)).perform(); - } - - getTooltip() { - return BrowserActions.getText(this.errorTooltip); + async getTooltip(): Promise { + return await BrowserActions.getText(this.errorTooltip); } } diff --git a/e2e/pages/adf/dialog/uploadToggles.ts b/e2e/pages/adf/dialog/uploadToggles.ts index 7b01598a3b..060eb09feb 100644 --- a/e2e/pages/adf/dialog/uploadToggles.ts +++ b/e2e/pages/adf/dialog/uploadToggles.ts @@ -15,119 +15,97 @@ * limitations under the License. */ -import { browser, by, element, protractor } from 'protractor'; -import { BrowserVisibility, FormControllersPage } from '@alfresco/adf-testing'; +import { browser, by, element, ElementFinder } from 'protractor'; +import { BrowserActions, BrowserVisibility, FormControllersPage } from '@alfresco/adf-testing'; export class UploadToggles { - formControllersPage = new FormControllersPage(); - multipleFileUploadToggle = element(by.id('adf-multiple-upload-switch')); - uploadFolderToggle = element(by.id('adf-folder-upload-switch')); - extensionFilterToggle = element(by.id('adf-extension-filter-upload-switch')); - maxSizeToggle = element(by.id('adf-max-size-filter-upload-switch')); - versioningToggle = element(by.id('adf-version-upload-switch')); - extensionAcceptedField = element(by.css('input[data-automation-id="accepted-files-type"]')); - maxSizeField = element(by.css('input[data-automation-id="max-files-size"]')); - disableUploadCheckbox = element(by.css('[id="adf-disable-upload"]')); + formControllersPage: FormControllersPage = new FormControllersPage(); + multipleFileUploadToggle: ElementFinder = element(by.id('adf-multiple-upload-switch')); + uploadFolderToggle: ElementFinder = element(by.id('adf-folder-upload-switch')); + extensionFilterToggle: ElementFinder = element(by.id('adf-extension-filter-upload-switch')); + maxSizeToggle: ElementFinder = element(by.id('adf-max-size-filter-upload-switch')); + versioningToggle: ElementFinder = element(by.id('adf-version-upload-switch')); + extensionAcceptedField: ElementFinder = element(by.css('input[data-automation-id="accepted-files-type"]')); + maxSizeField: ElementFinder = element(by.css('input[data-automation-id="max-files-size"]')); + disableUploadCheckbox: ElementFinder = element(by.css('[id="adf-disable-upload"]')); - enableMultipleFileUpload() { - browser.executeScript('arguments[0].scrollIntoView()', this.multipleFileUploadToggle); - this.formControllersPage.enableToggle(this.multipleFileUploadToggle); - return this; + async enableMultipleFileUpload(): Promise { + await browser.executeScript('arguments[0].scrollIntoView()', this.multipleFileUploadToggle); + await this.formControllersPage.enableToggle(this.multipleFileUploadToggle); } - disableMultipleFileUpload() { - this.formControllersPage.disableToggle(this.multipleFileUploadToggle); - return this; + async disableMultipleFileUpload(): Promise { + await browser.executeScript('arguments[0].scrollIntoView()', this.multipleFileUploadToggle); + await this.formControllersPage.disableToggle(this.multipleFileUploadToggle); } - enableFolderUpload() { - this.formControllersPage.enableToggle(this.uploadFolderToggle); - return this; + async enableFolderUpload(): Promise { + await this.formControllersPage.enableToggle(this.uploadFolderToggle); } - checkFolderUploadToggleIsEnabled() { - const enabledToggle = element(by.css('mat-slide-toggle[id="adf-folder-upload-switch"][class*="mat-checked"]')); - BrowserVisibility.waitUntilElementIsVisible(enabledToggle); - return this; + async checkMultipleFileUploadToggleIsEnabled(): Promise { + const enabledToggle: ElementFinder = element(by.css('mat-slide-toggle[id="adf-multiple-upload-switch"][class*="mat-checked"]')); + await BrowserVisibility.waitUntilElementIsVisible(enabledToggle); } - checkMultipleFileUploadToggleIsEnabled() { - const enabledToggle = element(by.css('mat-slide-toggle[id="adf-multiple-upload-switch"][class*="mat-checked"]')); - BrowserVisibility.waitUntilElementIsVisible(enabledToggle); - return this; + async checkMaxSizeToggleIsEnabled(): Promise { + const enabledToggle: ElementFinder = element(by.css('mat-slide-toggle[id="adf-max-size-filter-upload-switch"][class*="mat-checked"]')); + await BrowserVisibility.waitUntilElementIsVisible(enabledToggle); } - checkMaxSizeToggleIsEnabled() { - const enabledToggle = element(by.css('mat-slide-toggle[id="adf-max-size-filter-upload-switch"][class*="mat-checked"]')); - BrowserVisibility.waitUntilElementIsVisible(enabledToggle); - return this; + async checkVersioningToggleIsEnabled(): Promise { + const enabledToggle: ElementFinder = element(by.css('mat-slide-toggle[id="adf-version-upload-switch"][class*="mat-checked"]')); + await BrowserVisibility.waitUntilElementIsVisible(enabledToggle); } - checkVersioningToggleIsEnabled() { - const enabledToggle = element(by.css('mat-slide-toggle[id="adf-version-upload-switch"][class*="mat-checked"]')); - BrowserVisibility.waitUntilElementIsVisible(enabledToggle); - return this; + async disableFolderUpload(): Promise { + await this.formControllersPage.disableToggle(this.uploadFolderToggle); } - disableFolderUpload() { - this.formControllersPage.disableToggle(this.uploadFolderToggle); - return this; + async enableExtensionFilter(): Promise { + await browser.executeScript('arguments[0].scrollIntoView()', this.extensionFilterToggle); + await this.formControllersPage.enableToggle(this.extensionFilterToggle); } - enableExtensionFilter() { - browser.executeScript('arguments[0].scrollIntoView()', this.extensionFilterToggle); - this.formControllersPage.enableToggle(this.extensionFilterToggle); - return this; + async disableExtensionFilter(): Promise { + await browser.executeScript('arguments[0].scrollIntoView()', this.extensionFilterToggle); + await this.formControllersPage.disableToggle(this.extensionFilterToggle); } - disableExtensionFilter() { - browser.executeScript('arguments[0].scrollIntoView()', this.extensionFilterToggle); - this.formControllersPage.disableToggle(this.extensionFilterToggle); - return this; + async enableMaxSize(): Promise { + await this.formControllersPage.enableToggle(this.maxSizeToggle); } - enableMaxSize() { - this.formControllersPage.enableToggle(this.maxSizeToggle); - return this; + async disableMaxSize(): Promise { + await this.formControllersPage.disableToggle(this.maxSizeToggle); } - disableMaxSize() { - this.formControllersPage.disableToggle(this.maxSizeToggle); - return this; + async enableVersioning(): Promise { + await this.formControllersPage.enableToggle(this.versioningToggle); } - enableVersioning() { - this.formControllersPage.enableToggle(this.versioningToggle); - return this; + async disableVersioning(): Promise { + await this.formControllersPage.disableToggle(this.versioningToggle); } - disableVersioning() { - this.formControllersPage.disableToggle(this.versioningToggle); - return this; + async clickCheckboxDisableUpload(): Promise { + await BrowserActions.click(this.disableUploadCheckbox); } - clickCheckboxDisableUpload() { - return this.disableUploadCheckbox.click(); + async addExtension(extension): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.extensionAcceptedField); + await this.extensionAcceptedField.sendKeys(',' + extension); } - addExtension(extension) { - BrowserVisibility.waitUntilElementIsVisible(this.extensionAcceptedField); - this.extensionAcceptedField.sendKeys(',' + extension); + async addMaxSize(size): Promise { + await this.clearText(); + await this.maxSizeField.sendKeys(size); } - addMaxSize(size) { - this.clearText(); - this.maxSizeField.sendKeys(size); - } - - clearText() { - BrowserVisibility.waitUntilElementIsVisible(this.maxSizeField); - const deferred = protractor.promise.defer(); - this.maxSizeField.clear().then(() => { - this.maxSizeField.sendKeys(protractor.Key.ESCAPE); - }); - return deferred.promise; + async clearText(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.maxSizeField); + await BrowserActions.clearSendKeys(this.maxSizeField, ''); } } diff --git a/e2e/pages/adf/iconsPage.ts b/e2e/pages/adf/iconsPage.ts index 8e085d1f5c..517a2dd182 100644 --- a/e2e/pages/adf/iconsPage.ts +++ b/e2e/pages/adf/iconsPage.ts @@ -15,15 +15,33 @@ * limitations under the License. */ -import { by, element } from 'protractor'; +import { browser, by, element, ElementFinder } from 'protractor'; export class IconsPage { - locateCustomIcon(name) { + locateCustomIcon(name): ElementFinder { return element(by.css(`adf-icon[value='${name}'] svg`)); } - locateLigatureIcon(name) { + locateLigatureIcon(name): ElementFinder { return element(by.css(`adf-icon[value='${name}'] .material-icons`)); } + + async isCustomIconDisplayed(name) { + const present = await browser.isElementPresent(this.locateCustomIcon(name)); + if (present) { + return await this.locateCustomIcon(name).isDisplayed(); + } else { + return false; + } + } + + async isLigatureIconDisplayed(name) { + const present = await browser.isElementPresent(this.locateLigatureIcon(name)); + if (present) { + return await this.locateLigatureIcon(name).isDisplayed(); + } else { + return false; + } + } } diff --git a/e2e/pages/adf/lockFilePage.ts b/e2e/pages/adf/lockFilePage.ts index 4f2e80e44c..743a697c10 100644 --- a/e2e/pages/adf/lockFilePage.ts +++ b/e2e/pages/adf/lockFilePage.ts @@ -15,42 +15,42 @@ * limitations under the License. */ -import { element, by } from 'protractor'; +import { element, by, ElementFinder } from 'protractor'; import { BrowserVisibility, BrowserActions } from '@alfresco/adf-testing'; export class LockFilePage { - cancelButton = element(by.css('button[data-automation-id="lock-dialog-btn-cancel"]')); - saveButton = element(by.cssContainingText('button span', 'Save')); - lockFileCheckboxText = element(by.cssContainingText('mat-checkbox label span', ' Lock file ')); - lockFileCheckbox = element(by.css('mat-checkbox[data-automation-id="adf-lock-node-checkbox"]')); - allowOwnerCheckbox = element(by.cssContainingText('mat-checkbox[class*="adf-lock-file-name"] span', ' Allow the owner to modify this file ')); + cancelButton: ElementFinder = element(by.css('button[data-automation-id="lock-dialog-btn-cancel"]')); + saveButton: ElementFinder = element(by.cssContainingText('button span', 'Save')); + lockFileCheckboxText: ElementFinder = element(by.cssContainingText('mat-checkbox label span', ' Lock file ')); + lockFileCheckbox: ElementFinder = element(by.css('mat-checkbox[data-automation-id="adf-lock-node-checkbox"]')); + allowOwnerCheckbox: ElementFinder = element(by.cssContainingText('mat-checkbox[class*="adf-lock-file-name"] span', ' Allow the owner to modify this file ')); - checkLockFileCheckboxIsDisplayed() { - return BrowserVisibility.waitUntilElementIsVisible(this.lockFileCheckboxText); + async checkLockFileCheckboxIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.lockFileCheckboxText); } - checkCancelButtonIsDisplayed() { - return BrowserVisibility.waitUntilElementIsVisible(this.cancelButton); + async checkCancelButtonIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.cancelButton); } - checkSaveButtonIsDisplayed() { - return BrowserVisibility.waitUntilElementIsVisible(this.saveButton); + async checkSaveButtonIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.saveButton); } - clickCancelButton() { - BrowserActions.click(this.cancelButton); + async clickCancelButton(): Promise { + await BrowserActions.click(this.cancelButton); } - clickLockFileCheckbox() { - BrowserActions.click(this.lockFileCheckbox); + async clickLockFileCheckbox(): Promise { + await BrowserActions.click(this.lockFileCheckbox); } - clickSaveButton() { - BrowserActions.click(this.saveButton); + async clickSaveButton(): Promise { + await BrowserActions.click(this.saveButton); } - clickAllowOwnerCheckbox() { - BrowserActions.click(this.allowOwnerCheckbox); + async clickAllowOwnerCheckbox(): Promise { + await BrowserActions.click(this.allowOwnerCheckbox); } } diff --git a/e2e/pages/adf/metadataViewPage.ts b/e2e/pages/adf/metadataViewPage.ts index bcd881cefe..a1aed59ebf 100644 --- a/e2e/pages/adf/metadataViewPage.ts +++ b/e2e/pages/adf/metadataViewPage.ts @@ -15,256 +15,240 @@ * limitations under the License. */ -import { browser, by, element, promise } from 'protractor'; +import { by, element, ElementFinder } from 'protractor'; import { BrowserVisibility, BrowserActions } from '@alfresco/adf-testing'; export class MetadataViewPage { - title = element(by.css(`div[info-drawer-title]`)); - expandedAspect = element(by.css(`mat-expansion-panel-header[aria-expanded='true']`)); + title: ElementFinder = element(by.css(`div[info-drawer-title]`)); + expandedAspect: ElementFinder = element(by.css(`mat-expansion-panel-header[aria-expanded='true']`)); aspectTitle = by.css(`mat-panel-title`); - name = element(by.css(`span[data-automation-id='card-textitem-value-name'] span`)); - creator = element(by.css(`span[data-automation-id='card-textitem-value-createdByUser.displayName'] span`)); - createdDate = element(by.css(`span[data-automation-id='card-dateitem-createdAt'] span`)); - modifier = element(by.css(`span[data-automation-id='card-textitem-value-modifiedByUser.displayName'] span`)); - modifiedDate = element(by.css(`span[data-automation-id='card-dateitem-modifiedAt'] span`)); - mimetypeName = element(by.css(`span[data-automation-id='card-textitem-value-content.mimeTypeName']`)); - size = element(by.css(`span[data-automation-id='card-textitem-value-content.sizeInBytes']`)); - description = element(by.css(`span[data-automation-id='card-textitem-value-properties.cm:description'] span`)); - author = element(by.css(`span[data-automation-id='card-textitem-value-properties.cm:author'] span`)); - titleProperty = element(by.css(`span[data-automation-id='card-textitem-value-properties.cm:title'] span`)); - editIcon = element(by.css(`button[data-automation-id='meta-data-card-toggle-edit']`)); - informationButton = element(by.css(`button[data-automation-id='meta-data-card-toggle-expand']`)); - informationSpan = element(by.css(`span[data-automation-id='meta-data-card-toggle-expand-label']`)); - informationIcon = element(by.css(`span[data-automation-id='meta-data-card-toggle-expand-label'] ~ mat-icon`)); - displayEmptySwitch = element(by.id(`adf-metadata-empty`)); - readonlySwitch = element(by.id(`adf-metadata-readonly`)); - multiSwitch = element(by.id(`adf-metadata-multi`)); - presetSwitch = element(by.id('adf-toggle-custom-preset')); - defaultPropertiesSwitch = element(by.id('adf-metadata-default-properties')); - closeButton = element(by.cssContainingText('button.mat-button span', 'Close')); - displayAspect = element(by.css(`input[placeholder='Display Aspect']`)); - applyAspect = element(by.cssContainingText(`button span.mat-button-wrapper`, 'Apply Aspect')); + name: ElementFinder = element(by.css(`span[data-automation-id='card-textitem-value-name'] span`)); + creator: ElementFinder = element(by.css(`span[data-automation-id='card-textitem-value-createdByUser.displayName'] span`)); + createdDate: ElementFinder = element(by.css(`span[data-automation-id='card-dateitem-createdAt'] span`)); + modifier: ElementFinder = element(by.css(`span[data-automation-id='card-textitem-value-modifiedByUser.displayName'] span`)); + modifiedDate: ElementFinder = element(by.css(`span[data-automation-id='card-dateitem-modifiedAt'] span`)); + mimetypeName: ElementFinder = element(by.css(`span[data-automation-id='card-textitem-value-content.mimeTypeName']`)); + size: ElementFinder = element(by.css(`span[data-automation-id='card-textitem-value-content.sizeInBytes']`)); + description: ElementFinder = element(by.css(`span[data-automation-id='card-textitem-value-properties.cm:description'] span`)); + author: ElementFinder = element(by.css(`span[data-automation-id='card-textitem-value-properties.cm:author'] span`)); + titleProperty: ElementFinder = element(by.css(`span[data-automation-id='card-textitem-value-properties.cm:title'] span`)); + editIcon: ElementFinder = element(by.css(`button[data-automation-id='meta-data-card-toggle-edit']`)); + informationButton: ElementFinder = element(by.css(`button[data-automation-id='meta-data-card-toggle-expand']`)); + informationSpan: ElementFinder = element(by.css(`span[data-automation-id='meta-data-card-toggle-expand-label']`)); + informationIcon: ElementFinder = element(by.css(`span[data-automation-id='meta-data-card-toggle-expand-label'] ~ mat-icon`)); + displayEmptySwitch: ElementFinder = element(by.id(`adf-metadata-empty`)); + readonlySwitch: ElementFinder = element(by.id(`adf-metadata-readonly`)); + multiSwitch: ElementFinder = element(by.id(`adf-metadata-multi`)); + presetSwitch: ElementFinder = element(by.id('adf-toggle-custom-preset')); + defaultPropertiesSwitch: ElementFinder = element(by.id('adf-metadata-default-properties')); + closeButton: ElementFinder = element(by.cssContainingText('button.mat-button span', 'Close')); + displayAspect: ElementFinder = element(by.css(`input[placeholder='Display Aspect']`)); + applyAspect: ElementFinder = element(by.cssContainingText(`button span.mat-button-wrapper`, 'Apply Aspect')); - getTitle(): promise.Promise { - return BrowserActions.getText(this.title); + async getTitle(): Promise { + return await BrowserActions.getText(this.title); } - getExpandedAspectName(): promise.Promise { - return BrowserActions.getText(this.expandedAspect.element(this.aspectTitle)); + async getExpandedAspectName(): Promise { + return await BrowserActions.getText(this.expandedAspect.element(this.aspectTitle)); } - getName(): promise.Promise { - return BrowserActions.getText(this.name); + async getName(): Promise { + return await BrowserActions.getText(this.name); } - getCreator(): promise.Promise { - return BrowserActions.getText(this.creator); + async getCreator(): Promise { + return await BrowserActions.getText(this.creator); } - getCreatedDate(): promise.Promise { - return BrowserActions.getText(this.createdDate); + async getCreatedDate(): Promise { + return await BrowserActions.getText(this.createdDate); } - getModifier(): promise.Promise { - return BrowserActions.getText(this.modifier); + async getModifier(): Promise { + return await BrowserActions.getText(this.modifier); } - getModifiedDate(): promise.Promise { - return BrowserActions.getText(this.modifiedDate); + async getModifiedDate(): Promise { + return await BrowserActions.getText(this.modifiedDate); } - getMimetypeName(): promise.Promise { - return BrowserActions.getText(this.mimetypeName); + async getMimetypeName(): Promise { + return await BrowserActions.getText(this.mimetypeName); } - getSize(): promise.Promise { - return BrowserActions.getText(this.size); + async getSize(): Promise { + return await BrowserActions.getText(this.size); } - getDescription(): promise.Promise { - return BrowserActions.getText(this.description); + async getDescription(): Promise { + return await BrowserActions.getText(this.description); } - getAuthor(): promise.Promise { - return BrowserActions.getText(this.author); + async getAuthor(): Promise { + return await BrowserActions.getText(this.author); } - getTitleProperty() { - BrowserActions.getText(this.titleProperty); + async getTitleProperty(): Promise { + return await BrowserActions.getText(this.titleProperty); } - editIconIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.editIcon); + async editIconIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.editIcon); } - editIconIsNotDisplayed() { - BrowserVisibility.waitUntilElementIsNotVisible(this.editIcon); + async editIconIsNotDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsNotVisible(this.editIcon); } - editIconClick() { - BrowserActions.clickExecuteScript('button[data-automation-id="meta-data-card-toggle-edit"]'); + async editIconClick(): Promise { + await BrowserActions.clickExecuteScript('button[data-automation-id="meta-data-card-toggle-edit"]'); } - informationButtonIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.informationButton); - BrowserVisibility.waitUntilElementIsClickable(this.informationButton); + async informationButtonIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsClickable(this.informationButton); } - informationButtonIsNotDisplayed() { - BrowserVisibility.waitUntilElementIsNotVisible(this.informationButton); + async informationButtonIsNotDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsNotVisible(this.informationButton); } - clickOnInformationButton(): MetadataViewPage { - this.informationButtonIsDisplayed(); - browser.sleep(600); - BrowserActions.click(this.informationButton); - return this; + async clickOnInformationButton(): Promise { + await BrowserActions.click(this.informationButton); } - getInformationButtonText(): promise.Promise { - return BrowserActions.getText(this.informationSpan); + async getInformationButtonText(): Promise { + return await BrowserActions.getText(this.informationSpan); } - getInformationIconText(): promise.Promise { - return BrowserActions.getText(this.informationIcon); + async getInformationIconText(): Promise { + return await BrowserActions.getText(this.informationIcon); } - clickOnPropertiesTab(): MetadataViewPage { - BrowserActions.closeMenuAndDialogs(); - const propertiesTab = element(by.cssContainingText(`.adf-info-drawer-layout-content div.mat-tab-labels div .mat-tab-label-content`, `Properties`)); - BrowserActions.click(propertiesTab); - return this; + async clickOnPropertiesTab(): Promise { + const propertiesTab: ElementFinder = element(by.cssContainingText(`.adf-info-drawer-layout-content div.mat-tab-labels div .mat-tab-label-content`, `Properties`)); + await BrowserActions.click(propertiesTab); } - getEditIconTooltip(): promise.Promise { - return this.editIcon.getAttribute('title'); + async getEditIconTooltip(): Promise { + return await this.editIcon.getAttribute('title'); } - editPropertyIconIsDisplayed(propertyName: string) { - const editPropertyIcon = element(by.css('mat-icon[data-automation-id="card-textitem-edit-icon-' + propertyName + '"]')); - BrowserVisibility.waitUntilElementIsPresent(editPropertyIcon); + async editPropertyIconIsDisplayed(propertyName: string) { + const editPropertyIcon: ElementFinder = element(by.css('mat-icon[data-automation-id="card-textitem-edit-icon-' + propertyName + '"]')); + await BrowserVisibility.waitUntilElementIsPresent(editPropertyIcon); } - updatePropertyIconIsDisplayed(propertyName: string) { - const updatePropertyIcon = element(by.css('mat-icon[data-automation-id="card-textitem-update-' + propertyName + '"]')); - BrowserVisibility.waitUntilElementIsVisible(updatePropertyIcon); + async updatePropertyIconIsDisplayed(propertyName: string) { + const updatePropertyIcon: ElementFinder = element(by.css('mat-icon[data-automation-id="card-textitem-update-' + propertyName + '"]')); + await BrowserVisibility.waitUntilElementIsVisible(updatePropertyIcon); } - clickUpdatePropertyIcon(propertyName: string): promise.Promise { - const updatePropertyIcon = element(by.css('mat-icon[data-automation-id="card-textitem-update-' + propertyName + '"]')); - return BrowserActions.click(updatePropertyIcon); + async clickUpdatePropertyIcon(propertyName: string): Promise { + const updatePropertyIcon: ElementFinder = element(by.css('mat-icon[data-automation-id="card-textitem-update-' + propertyName + '"]')); + await BrowserActions.click(updatePropertyIcon); } - clickClearPropertyIcon(propertyName: string): promise.Promise { - const clearPropertyIcon = element(by.css('mat-icon[data-automation-id="card-textitem-reset-' + propertyName + '"]')); - return BrowserActions.click(clearPropertyIcon); + async clickClearPropertyIcon(propertyName: string): Promise { + const clearPropertyIcon: ElementFinder = element(by.css('mat-icon[data-automation-id="card-textitem-reset-' + propertyName + '"]')); + await BrowserActions.click(clearPropertyIcon); } - enterPropertyText(propertyName: string, text: string | number): MetadataViewPage { - const textField = element(by.css('input[data-automation-id="card-textitem-editinput-' + propertyName + '"]')); - BrowserVisibility.waitUntilElementIsVisible(textField); - textField.sendKeys(''); - textField.clear(); - textField.sendKeys(text); - return this; + async enterPropertyText(propertyName: string, text: string | number): Promise { + const textField: ElementFinder = element(by.css('input[data-automation-id="card-textitem-editinput-' + propertyName + '"]')); + await BrowserVisibility.waitUntilElementIsClickable(textField); + await BrowserActions.clearSendKeys(textField, text.toString()); } - enterPresetText(text: string): MetadataViewPage { - const presetField = element(by.css('input[data-automation-id="adf-text-custom-preset"]')); - BrowserVisibility.waitUntilElementIsVisible(presetField); - presetField.sendKeys(''); - presetField.clear(); - presetField.sendKeys(text); - const applyButton = element(by.css('button[id="adf-metadata-aplly"]')); - BrowserActions.click(applyButton); - return this; + async enterPresetText(text: string): Promise { + const presetField: ElementFinder = element(by.css('input[data-automation-id="adf-text-custom-preset"]')); + await BrowserVisibility.waitUntilElementIsVisible(presetField); + await BrowserActions.clearSendKeys(presetField, text); + const applyButton: ElementFinder = element(by.css('button[id="adf-metadata-aplly"]')); + await BrowserActions.click(applyButton); } - enterDescriptionText(text: string): MetadataViewPage { - const textField = element(by.css('textarea[data-automation-id="card-textitem-edittextarea-properties.cm:description"]')); - BrowserVisibility.waitUntilElementIsVisible(textField); - textField.sendKeys(''); - textField.clear(); - textField.sendKeys(text); - return this; + async enterDescriptionText(text: string): Promise { + const textField: ElementFinder = element(by.css('textarea[data-automation-id="card-textitem-edittextarea-properties.cm:description"]')); + await BrowserVisibility.waitUntilElementIsVisible(textField); + await BrowserActions.clearSendKeys(textField, text); } - getPropertyText(propertyName: string, type?: string): promise.Promise { + async getPropertyText(propertyName: string, type?: string): Promise { const propertyType = type || 'textitem'; - const textField = element(by.css('span[data-automation-id="card-' + propertyType + '-value-' + propertyName + '"]')); + const textField: ElementFinder = element(by.css('span[data-automation-id="card-' + propertyType + '-value-' + propertyName + '"]')); - return BrowserActions.getText(textField); + return await BrowserActions.getText(textField); } - clearPropertyIconIsDisplayed(propertyName: string) { - const clearPropertyIcon = element(by.css('mat-icon[data-automation-id="card-textitem-reset-' + propertyName + '"]')); - BrowserVisibility.waitUntilElementIsVisible(clearPropertyIcon); + async clearPropertyIconIsDisplayed(propertyName: string): Promise { + const clearPropertyIcon: ElementFinder = element(by.css('mat-icon[data-automation-id="card-textitem-reset-' + propertyName + '"]')); + await BrowserVisibility.waitUntilElementIsVisible(clearPropertyIcon); } - clickEditPropertyIcons(propertyName: string) { - const editPropertyIcon = element(by.css('mat-icon[data-automation-id="card-textitem-edit-icon-' + propertyName + '"]')); - BrowserActions.click(editPropertyIcon); + async clickEditPropertyIcons(propertyName: string): Promise { + const editPropertyIcon: ElementFinder = element(by.css('mat-icon[data-automation-id="card-textitem-edit-icon-' + propertyName + '"]')); + await BrowserActions.click(editPropertyIcon); } - getPropertyIconTooltip(propertyName: string): promise.Promise { - const editPropertyIcon = element(by.css('mat-icon[data-automation-id="card-textitem-edit-icon-' + propertyName + '"]')); - return editPropertyIcon.getAttribute('title'); + async getPropertyIconTooltip(propertyName: string): Promise { + const editPropertyIcon: ElementFinder = element(by.css('mat-icon[data-automation-id="card-textitem-edit-icon-' + propertyName + '"]')); + return await editPropertyIcon.getAttribute('title'); } - clickMetadataGroup(groupName: string) { - const group = element(by.css('mat-expansion-panel[data-automation-id="adf-metadata-group-' + groupName + '"]')); - BrowserActions.click(group); + async clickMetadataGroup(groupName: string): Promise { + const group: ElementFinder = element(by.css('mat-expansion-panel[data-automation-id="adf-metadata-group-' + groupName + '"]')); + await BrowserActions.click(group); } - checkMetadataGroupIsPresent(groupName: string): promise.Promise { - const group = element(by.css('mat-expansion-panel[data-automation-id="adf-metadata-group-' + groupName + '"]')); - return BrowserVisibility.waitUntilElementIsVisible(group); + async checkMetadataGroupIsPresent(groupName: string): Promise { + const group: ElementFinder = element(by.css('mat-expansion-panel[data-automation-id="adf-metadata-group-' + groupName + '"]')); + await BrowserVisibility.waitUntilElementIsVisible(group); } - checkMetadataGroupIsNotPresent(groupName: string): promise.Promise { - const group = element(by.css('mat-expansion-panel[data-automation-id="adf-metadata-group-' + groupName + '"]')); - return BrowserVisibility.waitUntilElementIsNotVisible(group); + async checkMetadataGroupIsNotPresent(groupName: string): Promise { + const group: ElementFinder = element(by.css('mat-expansion-panel[data-automation-id="adf-metadata-group-' + groupName + '"]')); + await BrowserVisibility.waitUntilElementIsNotVisible(group); } - checkMetadataGroupIsExpand(groupName: string) { - const group = element(by.css('mat-expansion-panel[data-automation-id="adf-metadata-group-' + groupName + '"] > mat-expansion-panel-header')); - BrowserVisibility.waitUntilElementIsVisible(group); - expect(group.getAttribute('class')).toContain('mat-expanded'); + async checkMetadataGroupIsExpand(groupName: string): Promise { + const group: ElementFinder = element(by.css('mat-expansion-panel[data-automation-id="adf-metadata-group-' + groupName + '"] > mat-expansion-panel-header')); + await BrowserVisibility.waitUntilElementIsVisible(group); + await expect(await group.getAttribute('class')).toContain('mat-expanded'); } - checkMetadataGroupIsNotExpand(groupName: string) { - const group = element(by.css('mat-expansion-panel[data-automation-id="adf-metadata-group-' + groupName + '"] > mat-expansion-panel-header')); - BrowserVisibility.waitUntilElementIsPresent(group); - expect(group.getAttribute('class')).not.toContain('mat-expanded'); + async checkMetadataGroupIsNotExpand(groupName: string): Promise { + const group: ElementFinder = element(by.css('mat-expansion-panel[data-automation-id="adf-metadata-group-' + groupName + '"] > mat-expansion-panel-header')); + await BrowserVisibility.waitUntilElementIsPresent(group); + await expect(await group.getAttribute('class')).not.toContain('mat-expanded'); } - getMetadataGroupTitle(groupName: string): promise.Promise { + async getMetadataGroupTitle(groupName: string): Promise { const group = element(by.css('mat-expansion-panel[data-automation-id="adf-metadata-group-' + groupName + '"] > mat-expansion-panel-header > span > mat-panel-title')); - return BrowserActions.getText(group); + return await BrowserActions.getText(group); } - checkPropertyIsVisible(propertyName: string, type: string) { - const property = element(by.css('div[data-automation-id="card-' + type + '-label-' + propertyName + '"]')); - BrowserVisibility.waitUntilElementIsVisible(property); + async checkPropertyIsVisible(propertyName: string, type: string): Promise { + const property: ElementFinder = element(by.css('div[data-automation-id="card-' + type + '-label-' + propertyName + '"]')); + await BrowserVisibility.waitUntilElementIsVisible(property); } - checkPropertyIsNotVisible(propertyName: string, type: string) { - const property = element(by.css('div[data-automation-id="card-' + type + '-label-' + propertyName + '"]')); - BrowserVisibility.waitUntilElementIsNotVisible(property); + async checkPropertyIsNotVisible(propertyName: string, type: string): Promise { + const property: ElementFinder = element(by.css('div[data-automation-id="card-' + type + '-label-' + propertyName + '"]')); + await BrowserVisibility.waitUntilElementIsNotVisible(property); } - clickCloseButton() { - BrowserActions.click(this.closeButton); + async clickCloseButton(): Promise { + await BrowserActions.click(this.closeButton); } - typeAspectName(aspectName) { - BrowserVisibility.waitUntilElementIsVisible(this.displayAspect); - this.displayAspect.clear(); - this.displayAspect.sendKeys(aspectName); + async typeAspectName(aspectName): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.displayAspect); + await BrowserActions.clearSendKeys(this.displayAspect, aspectName); } - clickApplyAspect() { - BrowserActions.click(this.applyAspect); + async clickApplyAspect(): Promise { + await BrowserActions.click(this.applyAspect); } } diff --git a/e2e/pages/adf/navigationBarPage.ts b/e2e/pages/adf/navigationBarPage.ts index 7cec24967e..afbf289292 100644 --- a/e2e/pages/adf/navigationBarPage.ts +++ b/e2e/pages/adf/navigationBarPage.ts @@ -23,209 +23,226 @@ import { BrowserVisibility, BrowserActions } from '@alfresco/adf-testing'; export class NavigationBarPage { - linkListContainer = element(by.css('.adf-sidenav-linklist')); - linkMenuChildrenContainer = element(by.css('.nestedMenu')); + linkListContainer: ElementFinder = element(by.css('.adf-sidenav-linklist')); + linkMenuChildrenContainer: ElementFinder = element(by.css('.nestedMenu')); dataTableNestedButton = this.linkMenuChildrenContainer.element(by.css('.adf-sidenav-link[data-automation-id="Datatable"]')); dataTableCopyContentButton = this.linkMenuChildrenContainer.element(by.css('.adf-sidenav-link[data-automation-id="Copy Content"]')); dataTableDragAndDropButton = this.linkMenuChildrenContainer.element(by.css('.adf-sidenav-link[data-automation-id="Drag and Drop"]')); - processServicesButton = element(by.css('.adf-sidenav-link[data-automation-id="Process Services"]')); processServicesNestedButton = this.linkMenuChildrenContainer.element(by.css('.adf-sidenav-link[data-automation-id="App"]')); processServicesCloudHomeButton = this.linkMenuChildrenContainer.element(by.css('.adf-sidenav-link[data-automation-id="Home"]')); - loginButton = element(by.css('.adf-sidenav-link[data-automation-id="Login"]')); - overlayViewerButton = element(by.css('.adf-sidenav-link[data-automation-id="Overlay Viewer"]')); - themeButton = element(by.css('button[data-automation-id="theme menu"]')); - themeMenuContent = element(by.css('div[class*="mat-menu-panel"]')); - logoutButton = element(by.css('.adf-sidenav-link[adf-logout]')); - cardViewButton = element(by.css('.adf-sidenav-link[data-automation-id="CardView"]')); - languageMenuButton = element(by.css('button[data-automation-id="language-menu-button"]')); - appTitle = element(by.css('.adf-app-title')); - menuButton = element(by.css('button[data-automation-id="adf-menu-icon"]')); + themeButton: ElementFinder = element(by.css('button[data-automation-id="theme menu"]')); + themeMenuContent: ElementFinder = element(by.css('div[class*="mat-menu-panel"]')); + languageMenuButton: ElementFinder = element(by.css('button[data-automation-id="language-menu-button"]')); + appTitle: ElementFinder = element(by.css('.adf-app-title')); + menuButton: ElementFinder = element(by.css('button[data-automation-id="adf-menu-icon"]')); formButton = this.linkMenuChildrenContainer.element(by.css('.adf-sidenav-link[data-automation-id="Form"]')); peopleGroupCloudButton = this.linkMenuChildrenContainer.element(by.css('.adf-sidenav-link[data-automation-id="People/Group Cloud"]')); - clickMenuButton(title) { - BrowserActions.clickExecuteScript(`.adf-sidenav-link[data-automation-id="${title}"]`); + async clickNavigationBarItem(title): Promise { + const menu = element(by.css(`.adf-sidenav-link[data-automation-id="${title}"]`)); + await BrowserActions.closeMenuAndDialogs(); + await BrowserActions.click(menu); } - async clickSocialButton() { - this.clickMenuButton('Social'); + async clickHomeButton(): Promise { + await this.clickNavigationBarItem('Home'); } - async clickTagButton() { - this.clickMenuButton('Tag'); + async clickContentServicesButton(): Promise { + await this.clickNavigationBarItem('Content Services'); } - async navigateToDatatable() { - this.clickMenuButton('Datatable'); - BrowserActions.click(this.dataTableNestedButton); + async clickCardViewButton(): Promise { + await this.clickNavigationBarItem('CardView'); } - async navigateToCopyContentDatatable() { - this.clickMenuButton('Datatable'); - BrowserActions.click(this.dataTableCopyContentButton); + async clickHeaderDataButton(): Promise { + await this.clickNavigationBarItem('Header Data'); } - async navigateToDragAndDropDatatable() { - this.clickMenuButton('Datatable'); - BrowserActions.click(this.dataTableDragAndDropButton); + async clickTaskListButton(): Promise { + await this.clickNavigationBarItem('Task List'); } - async clickContentServicesButton() { - this.clickMenuButton('Content Services'); + async clickProcessCloudButton() { + await this.clickNavigationBarItem('Process Cloud'); + await BrowserVisibility.waitUntilElementIsVisible(this.linkMenuChildrenContainer); } - async clickTaskListButton() { - this.clickMenuButton('Task List'); - } - - async clickHomeButton() { - this.clickMenuButton('Home'); - } - - async clickConfigEditorButton() { - this.clickMenuButton('Configuration Editor'); - } - - navigateToProcessServicesPage() { - this.clickMenuButton('Process Services'); - BrowserActions.click(this.processServicesNestedButton); - return new ProcessServicesPage(); - } - - navigateToProcessServicesCloudPage() { - this.clickMenuButton('Process Cloud'); - BrowserActions.click(this.processServicesCloudHomeButton); + async navigateToProcessServicesCloudPage(): Promise { + await this.clickProcessCloudButton(); + await BrowserActions.click(this.processServicesCloudHomeButton); + await BrowserVisibility.waitUntilElementIsNotPresent(this.linkMenuChildrenContainer); return new AppListCloudPage(); } - navigateToPeopleGroupCloudPage() { - this.clickMenuButton('Process Cloud'); - BrowserActions.click(this.peopleGroupCloudButton); + async navigateToFormCloudPage(): Promise { + await this.clickProcessCloudButton(); + await BrowserActions.click(this.formButton); + await BrowserVisibility.waitUntilElementIsNotPresent(this.linkMenuChildrenContainer); + } + + async navigateToPeopleGroupCloudPage(): Promise { + await this.clickProcessCloudButton(); + await BrowserActions.click(this.peopleGroupCloudButton); + await BrowserVisibility.waitUntilElementIsNotPresent(this.linkMenuChildrenContainer); return new PeopleGroupCloudComponentPage(); } - async navigateToSettingsPage() { - this.clickMenuButton('Settings'); - return new AppListCloudPage(); + async clickProcessServicesButton() { + await this.clickNavigationBarItem('Process Services'); + await BrowserVisibility.waitUntilElementIsVisible(this.linkMenuChildrenContainer); } - async clickLoginButton() { - this.clickMenuButton('Login'); + async navigateToProcessServicesPage(): Promise { + await this.clickProcessServicesButton(); + await BrowserActions.click(this.processServicesNestedButton); + await BrowserVisibility.waitUntilElementIsNotPresent(this.linkMenuChildrenContainer); + return new ProcessServicesPage(); } - async clickTrashcanButton() { - this.clickMenuButton('Trashcan'); + async navigateToProcessServicesFormPage(): Promise { + await this.clickProcessServicesButton(); + await BrowserActions.click(this.formButton); + await BrowserVisibility.waitUntilElementIsNotPresent(this.linkMenuChildrenContainer); } - async clickOverlayViewerButton() { - this.clickMenuButton('Overlay Viewer'); - return this; + async clickLoginButton(): Promise { + await this.clickNavigationBarItem('Login'); } - async clickThemeButton() { - BrowserActions.closeMenuAndDialogs(); - BrowserActions.click(this.themeButton); - BrowserVisibility.waitUntilElementIsVisible(this.themeMenuContent); + async clickTrashcanButton(): Promise { + await this.clickNavigationBarItem('Trashcan'); } - async clickOnSpecificThemeButton(themeName) { - const themeElement = element(by.css(`button[data-automation-id="${themeName}"]`)); - BrowserActions.click(themeElement); + async clickCustomSources(): Promise { + await this.clickNavigationBarItem('Custom Sources'); } - async clickLogoutButton() { - BrowserActions.closeMenuAndDialogs(); - BrowserActions.clickExecuteScript('.adf-sidenav-link[adf-logout]'); + async clickDataTable(): Promise { + await this.clickNavigationBarItem('Datatable'); + await BrowserVisibility.waitUntilElementIsVisible(this.linkMenuChildrenContainer); } - async clickCardViewButton() { - BrowserActions.closeMenuAndDialogs(); - BrowserActions.click(this.cardViewButton); + async navigateToDatatable(): Promise { + await this.clickDataTable(); + await BrowserActions.click(this.dataTableNestedButton); + await BrowserVisibility.waitUntilElementIsNotPresent(this.linkMenuChildrenContainer); } - openContentServicesFolder(folderId) { - return BrowserActions.getUrl(browser.params.testConfig.adf.url + '/files/' + folderId); + async navigateToDragAndDropDatatable(): Promise { + await this.clickDataTable(); + await BrowserActions.click(this.dataTableDragAndDropButton); + await BrowserVisibility.waitUntilElementIsNotPresent(this.linkMenuChildrenContainer); } - chooseLanguage(language) { - const buttonLanguage = element(by.xpath(`//adf-language-menu//button[contains(text(), '${language}')]`)); - BrowserActions.click(buttonLanguage); + async navigateToCopyContentDatatable(): Promise { + await this.clickDataTable(); + await BrowserActions.click(this.dataTableCopyContentButton); + await BrowserVisibility.waitUntilElementIsNotPresent(this.linkMenuChildrenContainer); } - openLanguageMenu() { - BrowserActions.click(this.languageMenuButton); - BrowserVisibility.waitUntilElementIsVisible(this.appTitle); + async clickTagButton(): Promise { + await this.clickNavigationBarItem('Tag'); } - async clickHeaderDataButton() { - this.clickMenuButton('Header Data'); + async clickSocialButton(): Promise { + await this.clickNavigationBarItem('Social'); } - async clickAboutButton() { - this.clickMenuButton('About'); + async clickSettingsButton(): Promise { + await this.clickNavigationBarItem('Settings'); } - async clickTreeViewButton() { - this.clickMenuButton('Tree View'); + async clickConfigEditorButton(): Promise { + await this.clickNavigationBarItem('Configuration Editor'); } - async navigateToIconsPage() { - this.clickMenuButton('Icons'); + async clickOverlayViewerButton(): Promise { + await this.clickNavigationBarItem('Overlay Viewer'); } - async navigateToCustomSources() { - this.clickMenuButton('Custom Sources'); + async clickTreeViewButton(): Promise { + await this.clickNavigationBarItem('Tree View'); } - checkMenuButtonIsDisplayed() { - return BrowserVisibility.waitUntilElementIsVisible(this.menuButton); + async clickIconsButton(): Promise { + await this.clickNavigationBarItem('Icons'); } - checkMenuButtonIsNotDisplayed() { - return BrowserVisibility.waitUntilElementIsNotVisible(this.menuButton); + async clickAboutButton(): Promise { + await this.clickNavigationBarItem('About'); } - checkToolbarColor(color) { - const toolbarColor = element(by.css(`mat-toolbar[class*="mat-${color}"]`)); - return BrowserVisibility.waitUntilElementIsVisible(toolbarColor); + async clickLogoutButton(): Promise { + await BrowserActions.closeMenuAndDialogs(); + await BrowserActions.clickExecuteScript('.adf-sidenav-link[adf-logout]'); } - clickAppLogo(logoTitle) { - const appLogo = element(by.css('a[title="' + logoTitle + '"]')); - BrowserActions.click(appLogo); + async clickThemeButton(): Promise { + await BrowserActions.closeMenuAndDialogs(); + await BrowserActions.click(this.themeButton); + await BrowserVisibility.waitUntilElementIsVisible(this.themeMenuContent); } - clickAppLogoText() { - BrowserActions.click(this.appTitle); + async clickOnSpecificThemeButton(themeName): Promise { + const themeElement: ElementFinder = element(by.css(`button[data-automation-id="${themeName}"]`)); + await BrowserActions.click(themeElement); + await BrowserVisibility.waitUntilElementIsNotPresent(this.linkMenuChildrenContainer); } - clickFormButton() { - BrowserActions.closeMenuAndDialogs(); - BrowserActions.click(this.processServicesButton); - BrowserActions.click(this.formButton); + async openContentServicesFolder(folderId): Promise { + await BrowserActions.getUrl(`${browser.params.testConfig.adf.url}/files/${folderId}`); } - clickFormCloudButton() { - this.clickMenuButton('Process Cloud'); - BrowserActions.click(this.formButton); + async openLanguageMenu(): Promise { + await BrowserActions.closeMenuAndDialogs(); + await BrowserActions.click(this.languageMenuButton); + await BrowserVisibility.waitUntilElementIsVisible(this.appTitle); } - checkLogoTooltip(logoTooltipTitle) { - const logoTooltip = element(by.css('a[title="' + logoTooltipTitle + '"]')); - BrowserVisibility.waitUntilElementIsVisible(logoTooltip); + async chooseLanguage(language): Promise { + const buttonLanguage: ElementFinder = element(by.xpath(`//adf-language-menu//button[contains(text(), '${language}')]`)); + await BrowserActions.click(buttonLanguage); + await BrowserVisibility.waitUntilElementIsNotPresent(this.linkMenuChildrenContainer); } - async openViewer(nodeId) { - await BrowserActions.getUrl(browser.params.testConfig.adf.url + `/files(overlay:files/${nodeId}/view`); - return this; + async checkMenuButtonIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.menuButton); } - async goToSite(site) { + async checkMenuButtonIsNotDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsNotVisible(this.menuButton); + } + + async checkToolbarColor(color): Promise { + const toolbarColor: ElementFinder = element(by.css(`mat-toolbar[class*="mat-${color}"]`)); + await BrowserVisibility.waitUntilElementIsVisible(toolbarColor); + } + + async clickAppLogo(logoTitle): Promise { + const appLogo: ElementFinder = element(by.css('a[title="' + logoTitle + '"]')); + await BrowserActions.click(appLogo); + } + + async clickAppLogoText(): Promise { + await BrowserActions.click(this.appTitle); + } + + async checkLogoTooltip(logoTooltipTitle): Promise { + const logoTooltip: ElementFinder = element(by.css('a[title="' + logoTooltipTitle + '"]')); + await BrowserVisibility.waitUntilElementIsVisible(logoTooltip); + } + + async openViewer(nodeId): Promise { + await BrowserActions.getUrl(browser.params.testConfig.adf.url + `/files(overlay:files/${nodeId}/view`); + } + + async goToSite(site): Promise { await BrowserActions.getUrl(browser.params.testConfig.adf.url + `/files/${site.entry.guid}/display/list`); } - async scrollTo(el: ElementFinder) { + async scrollTo(el: ElementFinder): Promise { await browser.executeScript(`return arguments[0].scrollTop = arguments[1].offsetTop`, this.linkListContainer.getWebElement(), el.getWebElement()); - return this; } } diff --git a/e2e/pages/adf/notificationPage.ts b/e2e/pages/adf/notificationPage.ts index 4b86cf3299..88437dc938 100644 --- a/e2e/pages/adf/notificationPage.ts +++ b/e2e/pages/adf/notificationPage.ts @@ -15,107 +15,98 @@ * limitations under the License. */ -import { element, by, protractor, browser } from 'protractor'; +import { element, by, browser, ElementFinder } from 'protractor'; import { BrowserVisibility, BrowserActions } from '@alfresco/adf-testing'; export class NotificationPage { - messageField = element(by.css('input[data-automation-id="notification-message"]')); - horizontalPosition = element(by.css('mat-select[data-automation-id="notification-horizontal-position"]')); - verticalPosition = element(by.css('mat-select[data-automation-id="notification-vertical-position"]')); - durationField = element(by.css('input[data-automation-id="notification-duration"]')); - direction = element(by.css('mat-select[data-automation-id="notification-direction"]')); - actionToggle = element(by.css('mat-slide-toggle[data-automation-id="notification-action-toggle"]')); - notificationSnackBar = element.all(by.css('simple-snack-bar')).first(); - actionOutput = element(by.css('div[data-automation-id="notification-action-output"]')); - selectionDropDown = element.all(by.css('.mat-select-panel')).first(); - notificationsPage = element(by.css('.adf-sidenav-link[data-automation-id="Notifications"]')); - notificationConfig = element(by.css('p[data-automation-id="notification-custom-object"]')); + messageField: ElementFinder = element(by.css('input[data-automation-id="notification-message"]')); + horizontalPosition: ElementFinder = element(by.css('mat-select[data-automation-id="notification-horizontal-position"]')); + verticalPosition: ElementFinder = element(by.css('mat-select[data-automation-id="notification-vertical-position"]')); + durationField: ElementFinder = element(by.css('input[data-automation-id="notification-duration"]')); + direction: ElementFinder = element(by.css('mat-select[data-automation-id="notification-direction"]')); + actionToggle: ElementFinder = element(by.css('mat-slide-toggle[data-automation-id="notification-action-toggle"]')); + notificationSnackBar: ElementFinder = element.all(by.css('simple-snack-bar')).first(); + actionOutput: ElementFinder = element(by.css('div[data-automation-id="notification-action-output"]')); + selectionDropDown: ElementFinder = element.all(by.css('.mat-select-panel')).first(); + notificationsPage: ElementFinder = element(by.css('.adf-sidenav-link[data-automation-id="Notifications"]')); + notificationConfig: ElementFinder = element(by.css('p[data-automation-id="notification-custom-object"]')); - checkNotifyContains(message) { - BrowserVisibility.waitUntilElementIsVisible(element.all(by.cssContainingText('simple-snack-bar', message)).first()); - return this; + async checkNotifyContains(message): Promise { + await BrowserVisibility.waitUntilElementIsVisible(element.all(by.cssContainingText('simple-snack-bar', message)).first()); } - goToNotificationsPage() { - BrowserActions.click(this.notificationsPage); + async goToNotificationsPage(): Promise { + await BrowserActions.click(this.notificationsPage); } - getConfigObject() { + getConfigObject(): Promise { return BrowserActions.getText(this.notificationConfig); } - checkNotificationSnackBarIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.notificationSnackBar); - return this; + async checkNotificationSnackBarIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.notificationSnackBar); } - checkNotificationSnackBarIsDisplayedWithMessage(message) { - const notificationSnackBarMessage = element(by.cssContainingText('simple-snack-bar', message)); - BrowserVisibility.waitUntilElementIsVisible(notificationSnackBarMessage); - return this; + async checkNotificationSnackBarIsDisplayedWithMessage(message): Promise { + const notificationSnackBarMessage: ElementFinder = element(by.cssContainingText('simple-snack-bar', message)); + await BrowserVisibility.waitUntilElementIsVisible(notificationSnackBarMessage); } - checkNotificationSnackBarIsNotDisplayed() { - BrowserVisibility.waitUntilElementIsNotVisible(this.notificationSnackBar); - return this; + async checkNotificationSnackBarIsNotDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsNotVisible(this.notificationSnackBar); } - enterMessageField(text) { - BrowserVisibility.waitUntilElementIsVisible(this.messageField); - this.messageField.clear(); - this.messageField.sendKeys(text); + async enterMessageField(text): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.messageField); + await BrowserActions.clearSendKeys(this.messageField, text); } - enterDurationField(time) { - BrowserVisibility.waitUntilElementIsVisible(this.durationField); - this.durationField.clear(); - this.durationField.sendKeys(time); + async enterDurationField(time): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.durationField); + await BrowserActions.clearSendKeys(this.durationField, time); } - selectHorizontalPosition(selectedItem) { - const selectItem = element(by.cssContainingText('span[class="mat-option-text"]', selectedItem)); - BrowserActions.click(this.horizontalPosition); - BrowserVisibility.waitUntilElementIsVisible(this.selectionDropDown); - BrowserActions.click(selectItem); + async selectHorizontalPosition(selectedItem): Promise { + const selectItem: ElementFinder = element(by.cssContainingText('span[class="mat-option-text"]', selectedItem)); + await BrowserActions.click(this.horizontalPosition); + await BrowserVisibility.waitUntilElementIsVisible(this.selectionDropDown); + await BrowserActions.click(selectItem); } - selectVerticalPosition(selectedItem) { - const selectItem = element(by.cssContainingText('span[class="mat-option-text"]', selectedItem)); - BrowserActions.click(this.verticalPosition); - BrowserVisibility.waitUntilElementIsVisible(this.selectionDropDown); - BrowserActions.click(selectItem); + async selectVerticalPosition(selectedItem): Promise { + const selectItem: ElementFinder = element(by.cssContainingText('span[class="mat-option-text"]', selectedItem)); + await BrowserActions.click(this.verticalPosition); + await BrowserVisibility.waitUntilElementIsVisible(this.selectionDropDown); + await BrowserActions.click(selectItem); } - selectDirection(selectedItem) { - const selectItem = element(by.cssContainingText('span[class="mat-option-text"]', selectedItem)); - BrowserActions.click(this.direction); - BrowserVisibility.waitUntilElementIsVisible(this.selectionDropDown); - BrowserActions.click(selectItem); + async selectDirection(selectedItem): Promise { + const selectItem: ElementFinder = element(by.cssContainingText('span[class="mat-option-text"]', selectedItem)); + await BrowserActions.click(this.direction); + await BrowserVisibility.waitUntilElementIsVisible(this.selectionDropDown); + await BrowserActions.click(selectItem); } - clickNotificationButton() { - const button = element(by.css('button[data-automation-id="notification-custom-config-button"]')); - BrowserActions.click(button); + async clickNotificationButton(): Promise { + const button: ElementFinder = element(by.css('button[data-automation-id="notification-custom-config-button"]')); + await BrowserActions.click(button); } - checkActionEvent() { - BrowserVisibility.waitUntilElementIsVisible(this.actionOutput); - return this; + async checkActionEvent(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.actionOutput); } - clickActionToggle() { - BrowserActions.click(this.actionToggle); + async clickActionToggle(): Promise { + await BrowserActions.click(this.actionToggle); } - clickActionButton() { - browser.executeScript(`document.querySelector("simple-snack-bar > div > button").click();`); + async clickActionButton(): Promise { + await browser.executeScript(`document.querySelector("simple-snack-bar > div > button").click();`); } - clearMessage() { - BrowserVisibility.waitUntilElementIsVisible(this.messageField); - this.messageField.clear(); - this.messageField.sendKeys('a'); - this.messageField.sendKeys(protractor.Key.BACK_SPACE); + async clearMessage(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.messageField); + await BrowserActions.clearSendKeys(this.messageField, ''); } } diff --git a/e2e/pages/adf/permissionsPage.ts b/e2e/pages/adf/permissionsPage.ts index 23019591ed..55bfa0d07f 100644 --- a/e2e/pages/adf/permissionsPage.ts +++ b/e2e/pages/adf/permissionsPage.ts @@ -15,7 +15,7 @@ * limitations under the License. */ -import { element, by } from 'protractor'; +import { element, by, ElementFinder } from 'protractor'; import { DataTableComponentPage } from '@alfresco/adf-testing'; import { BrowserVisibility, BrowserActions } from '@alfresco/adf-testing'; @@ -28,121 +28,110 @@ export class PermissionsPage { dataTableComponentPage: DataTableComponentPage = new DataTableComponentPage(); - addPermissionButton = element(by.css("button[data-automation-id='adf-add-permission-button']")); - addPermissionDialog = element(by.css('adf-add-permission-dialog')); - searchUserInput = element(by.id('searchInput')); - searchResults = element.all(by.id('adf-search-results-content')).first(); - addButton = element(by.id('add-permission-dialog-confirm-button')); - permissionInheritedButton = element.all(by.css("div[class='adf-inherit_permission_button'] button")).first(); - permissionInheritedButtonText = this.permissionInheritedButton.element(by.css('span')); - noPermissions = element(by.css('div[id="adf-no-permissions-template"]')); - roleDropdown = element(by.id('adf-select-role-permission')); - roleDropdownOptions = element.all(by.css('.mat-option-text')); - assignPermissionError = element(by.css('simple-snack-bar')); - deletePermissionButton = element(by.css(`button[data-automation-id='adf-delete-permission-button']`)); - permissionDisplayContainer = element(by.css(`div[id='adf-permission-display-container']`)); - closeButton = element(by.id('add-permission-dialog-close-button')); + addPermissionButton: ElementFinder = element(by.css("button[data-automation-id='adf-add-permission-button']")); + addPermissionDialog: ElementFinder = element(by.css('adf-add-permission-dialog')); + searchUserInput: ElementFinder = element(by.id('searchInput')); + searchResults: ElementFinder = element(by.css('#adf-add-permission-authority-results #adf-search-results-content')); + addButton: ElementFinder = element(by.id('add-permission-dialog-confirm-button')); + permissionInheritedButton: ElementFinder = element.all(by.css("div[class='adf-inherit_permission_button'] button")).first(); + noPermissions: ElementFinder = element(by.css('div[id="adf-no-permissions-template"]')); + deletePermissionButton: ElementFinder = element(by.css(`button[data-automation-id='adf-delete-permission-button']`)); + permissionDisplayContainer: ElementFinder = element(by.css(`div[id='adf-permission-display-container']`)); + closeButton: ElementFinder = element(by.id('add-permission-dialog-close-button')); - clickCloseButton() { - BrowserActions.click(this.closeButton); + async clickCloseButton(): Promise { + await BrowserActions.click(this.closeButton); } - checkAddPermissionButtonIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.addPermissionButton); + async checkAddPermissionButtonIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.addPermissionButton); } - clickAddPermissionButton() { - BrowserActions.clickExecuteScript('button[data-automation-id="adf-add-permission-button"]'); + async clickAddPermissionButton(): Promise { + await BrowserActions.clickExecuteScript('button[data-automation-id="adf-add-permission-button"]'); } - checkAddPermissionDialogIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.addPermissionDialog); + async checkAddPermissionDialogIsDisplayed() { + await BrowserVisibility.waitUntilElementIsVisible(this.addPermissionDialog); } - checkSearchUserInputIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.searchUserInput); + async checkSearchUserInputIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.searchUserInput); } - searchUserOrGroup(name) { - BrowserActions.clearSendKeys(this.searchUserInput, name); + async searchUserOrGroup(name): Promise { + await BrowserActions.clearSendKeys(this.searchUserInput, name); } - checkResultListIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.searchResults); + async checkResultListIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.searchResults); } - clickUserOrGroup(name) { - const userOrGroupName = element(by.cssContainingText('mat-list-option .mat-list-text', name)); - BrowserActions.click(userOrGroupName); - return BrowserActions.click(this.addButton); + async clickUserOrGroup(name): Promise { + const userOrGroupName: ElementFinder = element(by.cssContainingText('mat-list-option .mat-list-text', name)); + await BrowserActions.click(userOrGroupName); + await BrowserActions.click(this.addButton); } - checkUserOrGroupIsAdded(name) { - const userOrGroupName = element(by.css('div[data-automation-id="text_' + name + '"]')); - BrowserVisibility.waitUntilElementIsVisible(userOrGroupName); + async checkUserOrGroupIsAdded(name): Promise { + const userOrGroupName: ElementFinder = element(by.css('div[data-automation-id="text_' + name + '"]')); + await BrowserVisibility.waitUntilElementIsVisible(userOrGroupName); } - checkUserOrGroupIsDeleted(name) { - const userOrGroupName = element(by.css('div[data-automation-id="text_' + name + '"]')); - BrowserVisibility.waitUntilElementIsNotVisible(userOrGroupName); + async checkUserOrGroupIsDeleted(name): Promise { + const userOrGroupName: ElementFinder = element(by.css('div[data-automation-id="text_' + name + '"]')); + await BrowserVisibility.waitUntilElementIsNotVisible(userOrGroupName); } - checkPermissionInheritedButtonIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.permissionInheritedButton); + async checkPermissionInheritedButtonIsDisplayed() { + await BrowserVisibility.waitUntilElementIsVisible(this.permissionInheritedButton); } - clickPermissionInheritedButton() { - return BrowserActions.click(this.permissionInheritedButton); - + async clickPermissionInheritedButton(): Promise { + await BrowserActions.click(this.permissionInheritedButton); } - clickDeletePermissionButton() { - return BrowserActions.click(this.deletePermissionButton); + async clickDeletePermissionButton(): Promise { + await BrowserActions.click(this.deletePermissionButton); } - checkNoPermissionsIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.noPermissions); + async checkNoPermissionsIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.noPermissions); } - getPermissionInheritedButtonText() { - return BrowserActions.getText(this.permissionInheritedButton); + async getPermissionInheritedButtonText(): Promise { + return await BrowserActions.getText(this.permissionInheritedButton); } - checkPermissionsDatatableIsDisplayed() { - return new DataTableComponentPage(element(by.css('[class*="adf-datatable-permission"]'))); + async checkPermissionsDatatableIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(element(by.css('[class*="adf-datatable-permission"]'))); } - getRoleCellValue(rowName) { - const locator = new DataTableComponentPage().getCellByRowContentAndColumn('Authority ID', rowName, column.role); - return BrowserActions.getText(locator); + async getRoleCellValue(rowName): Promise { + const locator = this.dataTableComponentPage.getCellByRowContentAndColumn('Authority ID', rowName, column.role); + return await BrowserActions.getText(locator); } - clickRoleDropdownByUserOrGroupName(name) { + async clickRoleDropdownByUserOrGroupName(name): Promise { const row = this.dataTableComponentPage.getRow('Authority ID', name); - return BrowserActions.click(row.element(by.id('adf-select-role-permission'))); + await BrowserActions.click(row.element(by.id('adf-select-role-permission'))); } getRoleDropdownOptions() { - BrowserVisibility.waitUntilElementIsVisible(this.roleDropdownOptions.first()); - return this.roleDropdownOptions; + return element.all(by.css('.mat-option-text')); } - selectOption(name) { + async selectOption(name): Promise { const selectProcessDropdown = element(by.cssContainingText('.mat-option-text', name)); - BrowserActions.click(selectProcessDropdown); - return this; + await BrowserActions.click(selectProcessDropdown); } - getAssignPermissionErrorText() { - return BrowserActions.getText(this.assignPermissionError); + async checkPermissionContainerIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.permissionDisplayContainer); } - checkPermissionContainerIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.permissionDisplayContainer); - } - - checkUserOrGroupIsDisplayed(name) { - const userOrGroupName = element(by.cssContainingText('mat-list-option .mat-list-text', name)); - BrowserVisibility.waitUntilElementIsVisible(userOrGroupName); + async checkUserOrGroupIsDisplayed(name): Promise { + const userOrGroupName: ElementFinder = element(by.cssContainingText('mat-list-option .mat-list-text', name)); + await BrowserVisibility.waitUntilElementIsVisible(userOrGroupName); } } diff --git a/e2e/pages/adf/process-services/analyticsPage.ts b/e2e/pages/adf/process-services/analyticsPage.ts index e5802735db..560f3c1266 100644 --- a/e2e/pages/adf/process-services/analyticsPage.ts +++ b/e2e/pages/adf/process-services/analyticsPage.ts @@ -15,46 +15,41 @@ * limitations under the License. */ -import { element, by, protractor } from 'protractor'; +import { element, by, protractor, ElementFinder } from 'protractor'; import { BrowserVisibility, BrowserActions } from '@alfresco/adf-testing'; export class AnalyticsPage { - toolbarTitleInput = element(by.css('input[data-automation-id="reportName"]')); - toolbarTitleContainer = element(by.css('adf-toolbar-title')); - toolbarTitle = element(by.xpath('//mat-toolbar/adf-toolbar-title/div/h4')); - reportMessage = element(by.css('div[class="ng-star-inserted"] span')); + toolbarTitleInput: ElementFinder = element(by.css('input[data-automation-id="reportName"]')); + toolbarTitleContainer: ElementFinder = element(by.css('adf-toolbar-title')); + toolbarTitle: ElementFinder = element(by.xpath('//mat-toolbar/adf-toolbar-title/div/h4')); + reportMessage: ElementFinder = element(by.css('div[class="ng-star-inserted"] span')); - getReport(title) { - const reportTitle = element(by.css(`mat-icon[data-automation-id="${title}_filter"]`)); - BrowserActions.click(reportTitle); + async getReport(title): Promise { + const reportTitle: ElementFinder = element(by.css(`mat-icon[data-automation-id="${title}_filter"]`)); + await BrowserActions.click(reportTitle); } - changeReportTitle(title) { - BrowserActions.click(this.toolbarTitleContainer); - BrowserActions.click(this.toolbarTitleInput); - this.clearReportTitle(); - this.toolbarTitleInput.sendKeys(title); - this.toolbarTitleInput.sendKeys(protractor.Key.ENTER); + async changeReportTitle(title): Promise { + await BrowserActions.click(this.toolbarTitleContainer); + await BrowserActions.click(this.toolbarTitleInput); + await this.clearReportTitle(); + await this.toolbarTitleInput.sendKeys(title); + await this.toolbarTitleInput.sendKeys(protractor.Key.ENTER); } - clearReportTitle() { - BrowserVisibility.waitUntilElementIsVisible(this.toolbarTitleInput); - this.toolbarTitleInput.getAttribute('value').then((value) => { - let i; - for (i = value.length; i >= 0; i--) { - this.toolbarTitleInput.sendKeys(protractor.Key.BACK_SPACE); - } - }); - BrowserVisibility.waitUntilElementIsVisible(this.toolbarTitleInput); + async clearReportTitle(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.toolbarTitleInput); + await BrowserActions.clearSendKeys(this.toolbarTitleInput, ''); + await BrowserVisibility.waitUntilElementIsVisible(this.toolbarTitleInput); } - getReportTitle() { + async getReportTitle(): Promise { return BrowserActions.getText(this.toolbarTitle); } - checkNoReportMessage() { - BrowserVisibility.waitUntilElementIsVisible(this.reportMessage); + async checkNoReportMessage(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.reportMessage); } } diff --git a/e2e/pages/adf/process-services/attachFormPage.ts b/e2e/pages/adf/process-services/attachFormPage.ts index b7d20078d4..66ba62fcba 100644 --- a/e2e/pages/adf/process-services/attachFormPage.ts +++ b/e2e/pages/adf/process-services/attachFormPage.ts @@ -15,63 +15,62 @@ * limitations under the License. */ -import { element, by } from 'protractor'; +import { element, by, ElementFinder } from 'protractor'; import { BrowserVisibility, BrowserActions } from '@alfresco/adf-testing'; export class AttachFormPage { - noFormMessage = element(by.id('adf-no-form-message')); - attachFormButton = element(by.id('adf-no-form-attach-form-button')); - completeButton = element(by.id('adf-no-form-complete-button')); - formDropdown = element(by.id('form_id')); - cancelButton = element(by.id('adf-no-form-cancel-button')); - defaultTitle = element(by.css('mat-card-title[class="mat-card-title mat-card-title"]')); - attachFormDropdown = element(by.css("div[class='adf-attach-form-row']")); + noFormMessage: ElementFinder = element(by.id('adf-no-form-message')); + attachFormButton: ElementFinder = element(by.id('adf-no-form-attach-form-button')); + completeButton: ElementFinder = element(by.id('adf-no-form-complete-button')); + formDropdown: ElementFinder = element(by.id('form_id')); + cancelButton: ElementFinder = element(by.id('adf-no-form-cancel-button')); + defaultTitle: ElementFinder = element(by.css('mat-card-title[class="mat-card-title mat-card-title"]')); + attachFormDropdown: ElementFinder = element(by.css("div[class='adf-attach-form-row']")); - checkNoFormMessageIsDisplayed() { - return BrowserVisibility.waitUntilElementIsVisible(this.noFormMessage); + async checkNoFormMessageIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.noFormMessage); } - checkAttachFormButtonIsDisplayed() { - return BrowserVisibility.waitUntilElementIsVisible(this.attachFormButton); + async checkAttachFormButtonIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.attachFormButton); } - checkCompleteButtonIsDisplayed() { - return BrowserVisibility.waitUntilElementIsVisible(this.completeButton); + async checkCompleteButtonIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.completeButton); } - clickAttachFormButton() { - BrowserActions.click(this.attachFormButton); + async clickAttachFormButton(): Promise { + await BrowserActions.click(this.attachFormButton); } - checkDefaultFormTitleIsDisplayed(formTitle) { - this.defaultTitle.getText().then((result) => { - expect(result).toEqual(formTitle); - }); + async checkDefaultFormTitleIsDisplayed(formTitle): Promise { + const result = await BrowserActions.getText(this.defaultTitle); + await expect(result).toEqual(formTitle); } - checkFormDropdownIsDisplayed() { - return BrowserVisibility.waitUntilElementIsVisible(this.formDropdown); + async checkFormDropdownIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.formDropdown); } - checkCancelButtonIsDisplayed() { - return BrowserVisibility.waitUntilElementIsVisible(this.cancelButton); + async checkCancelButtonIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.cancelButton); } - clickAttachFormDropdown() { - BrowserActions.click(this.attachFormDropdown); + async clickAttachFormDropdown(): Promise { + await BrowserActions.click(this.attachFormDropdown); } - selectAttachFormOption(option) { - BrowserVisibility.waitUntilElementIsClickable(element(by.cssContainingText("mat-option[role='option']", option))); - return element(by.cssContainingText("mat-option[role='option']", option)).click(); + async selectAttachFormOption(option): Promise { + await BrowserVisibility.waitUntilElementIsClickable(element(by.cssContainingText("mat-option[role='option']", option))); + await BrowserActions.click(element(by.cssContainingText("mat-option[role='option']", option))); } - clickCancelButton() { - BrowserActions.click(this.cancelButton); + async clickCancelButton(): Promise { + await BrowserActions.click(this.cancelButton); } - checkAttachFormButtonIsDisabled() { - return BrowserVisibility.waitUntilElementIsVisible(element(by.css('button[id="adf-no-form-attach-form-button"][disabled]'))); + async checkAttachFormButtonIsDisabled(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(element(by.css('button[id="adf-no-form-attach-form-button"][disabled]'))); } } diff --git a/e2e/pages/adf/process-services/attachmentListPage.ts b/e2e/pages/adf/process-services/attachmentListPage.ts index 765ad371de..1dec00c999 100644 --- a/e2e/pages/adf/process-services/attachmentListPage.ts +++ b/e2e/pages/adf/process-services/attachmentListPage.ts @@ -15,7 +15,7 @@ * limitations under the License. */ -import { element, by, protractor, browser } from 'protractor'; +import { element, by, protractor, browser, ElementFinder } from 'protractor'; import path = require('path'); import remote = require('selenium-webdriver/remote'); @@ -23,77 +23,70 @@ import { BrowserVisibility, BrowserActions } from '@alfresco/adf-testing'; export class AttachmentListPage { - attachFileButton = element(by.css("input[type='file']")); - buttonMenu = element(by.css("button[data-automation-id='action_menu_0']")); - viewButton = element(by.css("button[data-automation-id*='MENU_ACTIONS.VIEW_CONTENT']")); - removeButton = element(by.css("button[data-automation-id*='MENU_ACTIONS.REMOVE_CONTENT']")); - downloadButton = element(by.css("button[data-automation-id*='MENU_ACTIONS.DOWNLOAD_CONTENT']")); - noContentContainer = element(by.css("div[class*='adf-no-content-container']")); + attachFileButton: ElementFinder = element(by.css("input[type='file']")); + buttonMenu: ElementFinder = element(by.css("button[data-automation-id='action_menu_0']")); + viewButton: ElementFinder = element(by.css("button[data-automation-id*='MENU_ACTIONS.VIEW_CONTENT']")); + removeButton: ElementFinder = element(by.css("button[data-automation-id*='MENU_ACTIONS.REMOVE_CONTENT']")); + downloadButton: ElementFinder = element(by.css("button[data-automation-id*='MENU_ACTIONS.DOWNLOAD_CONTENT']")); + noContentContainer: ElementFinder = element(by.css("div[class*='adf-no-content-container']")); - checkEmptyAttachmentList() { - BrowserVisibility.waitUntilElementIsVisible(this.noContentContainer); + async checkEmptyAttachmentList(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.noContentContainer); } - clickAttachFileButton(fileLocation) { + async clickAttachFileButton(fileLocation): Promise { browser.setFileDetector(new remote.FileDetector()); - BrowserVisibility.waitUntilElementIsVisible(this.attachFileButton); - return this.attachFileButton.sendKeys(path.resolve(path.join(browser.params.testConfig.main.rootPath, fileLocation))); + await BrowserVisibility.waitUntilElementIsPresent(this.attachFileButton); + await this.attachFileButton.sendKeys(path.resolve(path.join(browser.params.testConfig.main.rootPath, fileLocation))); } - checkFileIsAttached(name) { - const fileAttached = element.all(by.css('div[data-automation-id="' + name + '"]')).first(); - BrowserVisibility.waitUntilElementIsVisible(fileAttached); + async checkFileIsAttached(name): Promise { + const fileAttached: ElementFinder = element.all(by.css('div[data-automation-id="' + name + '"]')).first(); + await BrowserVisibility.waitUntilElementIsVisible(fileAttached); } - checkAttachFileButtonIsNotDisplayed() { - BrowserVisibility.waitUntilElementIsNotVisible(this.attachFileButton); + async checkAttachFileButtonIsNotDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsNotVisible(this.attachFileButton); } - viewFile(name) { - BrowserActions.closeMenuAndDialogs(); - BrowserVisibility.waitUntilElementIsVisible(element.all(by.css('div[data-automation-id="' + name + '"]')).first()); - element.all(by.css('div[data-automation-id="' + name + '"]')).first().click(); - BrowserActions.click(this.buttonMenu); - browser.driver.sleep(500); - BrowserActions.click(this.viewButton); - browser.driver.sleep(500); - return this; + async viewFile(name): Promise { + await BrowserActions.closeMenuAndDialogs(); + await BrowserActions.click(element.all(by.css('div[data-automation-id="' + name + '"]')).first()); + await BrowserActions.click(this.buttonMenu); + await browser.sleep(500); + await BrowserActions.click(this.viewButton); + await browser.sleep(500); } - removeFile(name) { - BrowserActions.closeMenuAndDialogs(); - BrowserVisibility.waitUntilElementIsVisible(element.all(by.css('div[data-automation-id="' + name + '"]')).first()); - element.all(by.css('div[data-automation-id="' + name + '"]')).first().click(); - BrowserActions.click(this.buttonMenu); - browser.driver.sleep(500); - BrowserActions.click(this.removeButton); - browser.driver.sleep(500); - return this; + async removeFile(name): Promise { + await BrowserActions.closeMenuAndDialogs(); + await BrowserActions.click(element.all(by.css('div[data-automation-id="' + name + '"]')).first()); + await BrowserActions.click(this.buttonMenu); + await browser.sleep(500); + await BrowserActions.click(this.removeButton); + await browser.sleep(500); } - downloadFile(name) { - BrowserActions.closeMenuAndDialogs(); - BrowserVisibility.waitUntilElementIsVisible(element.all(by.css('div[data-automation-id="' + name + '"]')).first()); - element.all(by.css('div[data-automation-id="' + name + '"]')).first().click(); - BrowserActions.click(this.buttonMenu); - browser.driver.sleep(500); - BrowserActions.click(this.downloadButton); - return this; + async downloadFile(name): Promise { + await BrowserActions.closeMenuAndDialogs(); + await BrowserActions.click(element.all(by.css('div[data-automation-id="' + name + '"]')).first()); + await BrowserActions.click(this.buttonMenu); + await browser.sleep(500); + await BrowserActions.click(this.downloadButton); } - doubleClickFile(name) { - BrowserActions.closeMenuAndDialogs(); - BrowserVisibility.waitUntilElementIsVisible(element.all(by.css('div[data-automation-id="' + name + '"]')).first()); - const fileAttached = element.all(by.css('div[data-automation-id="' + name + '"]')).first(); - BrowserActions.click(fileAttached); - browser.actions().sendKeys(protractor.Key.ENTER).perform(); + async doubleClickFile(name): Promise { + await BrowserActions.closeMenuAndDialogs(); + await BrowserVisibility.waitUntilElementIsVisible(element.all(by.css('div[data-automation-id="' + name + '"]')).first()); + const fileAttached: ElementFinder = element.all(by.css('div[data-automation-id="' + name + '"]')).first(); + await BrowserActions.click(fileAttached); + await browser.actions().sendKeys(protractor.Key.ENTER).perform(); } - checkFileIsRemoved(name) { - const fileAttached = element.all(by.css('div[data-automation-id="' + name + '"]')).first(); - BrowserVisibility.waitUntilElementIsNotVisible(fileAttached); - return this; + async checkFileIsRemoved(name): Promise { + const fileAttached: ElementFinder = element.all(by.css('div[data-automation-id="' + name + '"]')).first(); + await BrowserVisibility.waitUntilElementIsNotVisible(fileAttached); } } diff --git a/e2e/pages/adf/process-services/dialog/appSettingsToggles.ts b/e2e/pages/adf/process-services/dialog/appSettingsToggles.ts index bc02c004ce..69ec4d1aad 100644 --- a/e2e/pages/adf/process-services/dialog/appSettingsToggles.ts +++ b/e2e/pages/adf/process-services/dialog/appSettingsToggles.ts @@ -16,34 +16,30 @@ */ import { FormControllersPage } from '@alfresco/adf-testing'; -import { element, by } from 'protractor'; +import { element, by, ElementFinder } from 'protractor'; export class AppSettingsToggles { - formControllersPage = new FormControllersPage(); + formControllersPage: FormControllersPage = new FormControllersPage(); - showDetailsHeaderToggle = element(by.id('adf-show-header')); - showTaskFilterIconsToggle = element(by.id('adf-show-task-filter-icon')); - showProcessFilterIconsToggle = element(by.id('adf-show-process-filter-icon')); + showDetailsHeaderToggle: ElementFinder = element(by.id('adf-show-header')); + showTaskFilterIconsToggle: ElementFinder = element(by.id('adf-show-task-filter-icon')); + showProcessFilterIconsToggle: ElementFinder = element(by.id('adf-show-process-filter-icon')); - enableShowHeader() { - this.formControllersPage.enableToggle(this.showDetailsHeaderToggle); - return this; + async enableShowHeader(): Promise { + await this.formControllersPage.enableToggle(this.showDetailsHeaderToggle); } - disableShowHeader() { - this.formControllersPage.disableToggle(this.showDetailsHeaderToggle); - return this; + async disableShowHeader(): Promise { + await this.formControllersPage.disableToggle(this.showDetailsHeaderToggle); } - enableTaskFiltersIcon() { - this.formControllersPage.enableToggle(this.showTaskFilterIconsToggle); - return this; + async enableTaskFiltersIcon(): Promise { + await this.formControllersPage.enableToggle(this.showTaskFilterIconsToggle); } - enableProcessFiltersIcon() { - this.formControllersPage.enableToggle(this.showProcessFilterIconsToggle); - return this; + async enableProcessFiltersIcon(): Promise { + await this.formControllersPage.enableToggle(this.showProcessFilterIconsToggle); } } diff --git a/e2e/pages/adf/process-services/dialog/createChecklistDialog.ts b/e2e/pages/adf/process-services/dialog/createChecklistDialog.ts index 3597d56fd8..e387549f05 100644 --- a/e2e/pages/adf/process-services/dialog/createChecklistDialog.ts +++ b/e2e/pages/adf/process-services/dialog/createChecklistDialog.ts @@ -15,49 +15,46 @@ * limitations under the License. */ -import { element, by } from 'protractor'; +import { element, by, ElementFinder } from 'protractor'; import { BrowserVisibility, BrowserActions } from '@alfresco/adf-testing'; export class ChecklistDialog { - nameField = element(by.css('input[data-automation-id="checklist-name"]')); - addChecklistButton = element(by.css('button[id="add-check"] span')); - closeButton = element(by.css('button[id="close-check-dialog"] span')); - dialogTitle = element(by.id('add-checklist-title')); + nameField: ElementFinder = element(by.css('input[data-automation-id="checklist-name"]')); + addChecklistButton: ElementFinder = element(by.css('button[id="add-check"] span')); + closeButton: ElementFinder = element(by.css('button[id="close-check-dialog"] span')); + dialogTitle: ElementFinder = element(by.id('add-checklist-title')); - addName(name) { - BrowserVisibility.waitUntilElementIsClickable(this.nameField); - BrowserActions.clearSendKeys(this.nameField, name); - return this; + async addName(name): Promise { + await BrowserVisibility.waitUntilElementIsClickable(this.nameField); + await BrowserActions.clearSendKeys(this.nameField, name); } - clickCreateChecklistButton() { - BrowserActions.click(this.addChecklistButton); + async clickCreateChecklistButton(): Promise { + await BrowserActions.click(this.addChecklistButton); } - clickCancelButton() { - BrowserActions.click(this.closeButton); + async clickCancelButton(): Promise { + await BrowserActions.click(this.closeButton); } - getDialogTitle() { + getDialogTitle(): Promise { return BrowserActions.getText(this.dialogTitle); } - getNameFieldPlaceholder() { - BrowserVisibility.waitUntilElementIsVisible(this.nameField); + async getNameFieldPlaceholder(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.nameField); return this.nameField.getAttribute('placeholder'); } - checkCancelButtonIsEnabled() { - BrowserVisibility.waitUntilElementIsVisible(this.closeButton); - BrowserVisibility.waitUntilElementIsClickable(this.closeButton); - return this; + async checkCancelButtonIsEnabled(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.closeButton); + await BrowserVisibility.waitUntilElementIsClickable(this.closeButton); } - checkAddChecklistButtonIsEnabled() { - BrowserVisibility.waitUntilElementIsVisible(this.addChecklistButton); - BrowserVisibility.waitUntilElementIsClickable(this.addChecklistButton); - return this; + async checkAddChecklistButtonIsEnabled(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.addChecklistButton); + await BrowserVisibility.waitUntilElementIsClickable(this.addChecklistButton); } } diff --git a/e2e/pages/adf/process-services/dialog/startTaskDialog.ts b/e2e/pages/adf/process-services/dialog/startTaskDialog.ts index ed020b88c8..732ab15150 100644 --- a/e2e/pages/adf/process-services/dialog/startTaskDialog.ts +++ b/e2e/pages/adf/process-services/dialog/startTaskDialog.ts @@ -15,96 +15,86 @@ * limitations under the License. */ -import { element, by, Key } from 'protractor'; +import { element, by, Key, ElementFinder } from 'protractor'; import { BrowserVisibility, BrowserActions } from '@alfresco/adf-testing'; export class StartTaskDialog { - name = element(by.css('input[id="name_id"]')); - dueDate = element(by.css('input[id="date_id"]')); - description = element(by.css('textarea[id="description_id"]')); - assignee = element(by.css('div#people-widget-content input')); - startButton = element(by.css('button[id="button-start"]')); - startButtonEnabled = element(by.css('button[id="button-start"]:not(disabled)')); - cancelButton = element(by.css('button[id="button-cancel"]')); - formDropDown = element(by.css('mat-select[id="form_id"]')); + name: ElementFinder = element(by.css('input[id="name_id"]')); + dueDate: ElementFinder = element(by.css('input[id="date_id"]')); + description: ElementFinder = element(by.css('textarea[id="description_id"]')); + assignee: ElementFinder = element(by.css('div#people-widget-content input')); + startButton: ElementFinder = element(by.css('button[id="button-start"]')); + startButtonEnabled: ElementFinder = element(by.css('button[id="button-start"]:not(disabled)')); + cancelButton: ElementFinder = element(by.css('button[id="button-cancel"]')); + formDropDown: ElementFinder = element(by.css('mat-select[id="form_id"]')); - addName(userName) { - BrowserVisibility.waitUntilElementIsVisible(this.name); - this.name.clear(); - this.name.sendKeys(userName); - return this; + async addName(userName): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.name); + await this.name.clear(); + await this.name.sendKeys(userName); } - addDescription(userDescription) { - BrowserVisibility.waitUntilElementIsVisible(this.description); - this.description.sendKeys(userDescription); - return this; + async addDescription(userDescription): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.description); + await this.description.sendKeys(userDescription); } - addDueDate(date) { - BrowserVisibility.waitUntilElementIsVisible(this.dueDate); - this.dueDate.sendKeys(date); - return this; + async addDueDate(date): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.dueDate); + await this.dueDate.sendKeys(date); } - addAssignee(name) { - BrowserVisibility.waitUntilElementIsVisible(this.assignee); - this.assignee.sendKeys(name); - this.selectAssigneeFromList(name); - return this; + async addAssignee(name): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.assignee); + await this.assignee.sendKeys(name); + await this.selectAssigneeFromList(name); } - selectAssigneeFromList(name) { - const assigneeRow = element(by.cssContainingText('mat-option span.adf-people-label-name', name)); - BrowserActions.click(assigneeRow); - BrowserVisibility.waitUntilElementIsNotVisible(assigneeRow); - return this; + async selectAssigneeFromList(name): Promise { + const assigneeRow: ElementFinder = element(by.cssContainingText('mat-option span.adf-people-label-name', name)); + await BrowserActions.click(assigneeRow); + await BrowserVisibility.waitUntilElementIsNotVisible(assigneeRow); } - getAssignee() { - BrowserVisibility.waitUntilElementIsVisible(this.assignee); + async getAssignee(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.assignee); return this.assignee.getAttribute('placeholder'); } - addForm(form) { - BrowserActions.click(this.formDropDown); + async addForm(form): Promise { + await BrowserActions.click(this.formDropDown); return this.selectForm(form); } - selectForm(form) { - const option = element(by.cssContainingText('span[class*="mat-option-text"]', form)); - BrowserActions.click(option); - return this; + async selectForm(form): Promise { + const option: ElementFinder = element(by.cssContainingText('span[class*="mat-option-text"]', form)); + await BrowserActions.click(option); } - clickStartButton() { + async clickStartButton(): Promise { return BrowserActions.click(this.startButton); } - checkStartButtonIsEnabled() { - BrowserVisibility.waitUntilElementIsVisible(this.startButtonEnabled); - return this; + async checkStartButtonIsEnabled(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.startButtonEnabled); } - checkStartButtonIsDisabled() { - BrowserVisibility.waitUntilElementIsVisible(element(by.css('button[id="button-start"]:disabled'))); - return this; + async checkStartButtonIsDisabled(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(element(by.css('button[id="button-start"]:disabled'))); } - clickCancelButton() { - return BrowserActions.click(this.cancelButton); + async clickCancelButton(): Promise { + await BrowserActions.click(this.cancelButton); } - blur(locator) { - BrowserActions.click(locator); - locator.sendKeys(Key.TAB); - return this; + async blur(locator): Promise { + await BrowserActions.click(locator); + await locator.sendKeys(Key.TAB); } - checkValidationErrorIsDisplayed(error, elementRef = 'mat-error') { - const errorElement = element(by.cssContainingText(elementRef, error)); - BrowserVisibility.waitUntilElementIsVisible(errorElement); - return this; + async checkValidationErrorIsDisplayed(error, elementRef = 'mat-error'): Promise { + const errorElement: ElementFinder = element(by.cssContainingText(elementRef, error)); + await BrowserVisibility.waitUntilElementIsVisible(errorElement); } } diff --git a/e2e/pages/adf/process-services/filtersPage.ts b/e2e/pages/adf/process-services/filtersPage.ts index 5940bfe673..48be289bf9 100644 --- a/e2e/pages/adf/process-services/filtersPage.ts +++ b/e2e/pages/adf/process-services/filtersPage.ts @@ -15,31 +15,30 @@ * limitations under the License. */ -import { by, element } from 'protractor'; +import { by, element, ElementFinder } from 'protractor'; import { DataTableComponentPage } from '@alfresco/adf-testing'; import { BrowserActions } from '@alfresco/adf-testing'; export class FiltersPage { - activeFilter = element(by.css('mat-list-item[class*="active"]')); - dataTable = new DataTableComponentPage(); + activeFilter: ElementFinder = element(by.css('mat-list-item[class*="active"]')); + dataTable: DataTableComponentPage = new DataTableComponentPage(); - getActiveFilter() { + async getActiveFilter(): Promise { return BrowserActions.getText(this.activeFilter); } - goToFilter(filterName) { - BrowserActions.closeMenuAndDialogs(); - BrowserActions.clickExecuteScript(`span[data-automation-id="${filterName}_filter"]`); - return this; + async goToFilter(filterName): Promise { + await BrowserActions.closeMenuAndDialogs(); + await BrowserActions.clickExecuteScript(`span[data-automation-id="${filterName}_filter"]`); } - sortByName(sortOrder: string) { - this.dataTable.sortByColumn(sortOrder, 'name'); + async sortByName(sortOrder: string): Promise { + await this.dataTable.sortByColumn(sortOrder, 'name'); } - getAllRowsNameColumn() { - return this.dataTable.getAllRowsColumnValues('Name'); + async getAllRowsNameColumn() { + return await this.dataTable.getAllRowsColumnValues('Name'); } } diff --git a/e2e/pages/adf/process-services/processDetailsPage.ts b/e2e/pages/adf/process-services/processDetailsPage.ts index 44328eb13a..e847cd0d4c 100644 --- a/e2e/pages/adf/process-services/processDetailsPage.ts +++ b/e2e/pages/adf/process-services/processDetailsPage.ts @@ -15,146 +15,143 @@ * limitations under the License. */ -import { by, element, protractor } from 'protractor'; +import { by, element, ElementFinder, protractor } from 'protractor'; import { BrowserVisibility, BrowserActions } from '@alfresco/adf-testing'; export class ProcessDetailsPage { // Process Details - processTitle = element(by.css('mat-card-title[class="mat-card-title"]')); - processDetailsMessage = element(by.css('adf-process-instance-details div[class="ng-star-inserted"]')); - processStatusField = element(by.css('span[data-automation-id="card-textitem-value-status"]')); - processEndDateField = element(by.css('span[data-automation-id="card-dateitem-ended"]')); - processCategoryField = element(by.css('span[data-automation-id="card-textitem-value-category"]')); - processBusinessKeyField = element(by.css('span[data-automation-id="card-textitem-value-businessKey"]')); - processCreatedByField = element(by.css('span[data-automation-id="card-textitem-value-assignee"]')); - processCreatedField = element(by.css('span[data-automation-id="card-dateitem-created"]')); - processIdField = element(by.css('span[data-automation-id="card-textitem-value-id"]')); - processDescription = element(by.css('span[data-automation-id="card-textitem-value-description"]')); - showDiagramButtonDisabled = element(by.css('button[id="show-diagram-button"][disabled]')); - propertiesList = element(by.css('div[class="adf-property-list"]')); + processTitle: ElementFinder = element(by.css('mat-card-title[class="mat-card-title"]')); + processDetailsMessage: ElementFinder = element(by.css('adf-process-instance-details div[class="ng-star-inserted"]')); + processStatusField: ElementFinder = element(by.css('span[data-automation-id="card-textitem-value-status"]')); + processEndDateField: ElementFinder = element(by.css('span[data-automation-id="card-dateitem-ended"]')); + processCategoryField: ElementFinder = element(by.css('span[data-automation-id="card-textitem-value-category"]')); + processBusinessKeyField: ElementFinder = element(by.css('span[data-automation-id="card-textitem-value-businessKey"]')); + processCreatedByField: ElementFinder = element(by.css('span[data-automation-id="card-textitem-value-assignee"]')); + processCreatedField: ElementFinder = element(by.css('span[data-automation-id="card-dateitem-created"]')); + processIdField: ElementFinder = element(by.css('span[data-automation-id="card-textitem-value-id"]')); + processDescription: ElementFinder = element(by.css('span[data-automation-id="card-textitem-value-description"]')); + showDiagramButtonDisabled: ElementFinder = element(by.css('button[id="show-diagram-button"][disabled]')); + propertiesList: ElementFinder = element(by.css('div[class="adf-property-list"]')); // Show Diagram - showDiagramButton = element(by.id('show-diagram-button')); - diagramCanvas = element(by.css('svg[xmlns="http://www.w3.org/2000/svg"]')); - backButton = element(by.css('app-show-diagram button[class="mat-mini-fab mat-accent"]')); + showDiagramButton: ElementFinder = element(by.id('show-diagram-button')); + diagramCanvas: ElementFinder = element(by.css('svg[xmlns="http://www.w3.org/2000/svg"]')); + backButton: ElementFinder = element(by.css('app-show-diagram button[class="mat-mini-fab mat-accent"]')); // Comments - commentInput = element(by.id('comment-input')); + commentInput: ElementFinder = element(by.id('comment-input')); // Audit Log - auditLogButton = element(by.css('button[adf-process-audit]')); + auditLogButton: ElementFinder = element(by.css('button[adf-process-audit]')); // Cancel Process button - cancelProcessButton = element(by.css('div[data-automation-id="header-status"] > button')); + cancelProcessButton: ElementFinder = element(by.css('div[data-automation-id="header-status"] > button')); // Tasks - activeTask = element(by.css('div[data-automation-id="active-tasks"]')); - startForm = element(by.css('div[data-automation-id="start-form"]')); - completedTask = element(by.css('div[data-automation-id="completed-tasks"]')); - taskTitle = element(by.css('h2[class="adf-activiti-task-details__header"]')); + activeTask: ElementFinder = element(by.css('div[data-automation-id="active-tasks"]')); + startForm: ElementFinder = element(by.css('div[data-automation-id="start-form"]')); + completedTask: ElementFinder = element(by.css('div[data-automation-id="completed-tasks"]')); + taskTitle: ElementFinder = element(by.css('h2[class="adf-activiti-task-details__header"]')); - checkDetailsAreDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.processStatusField); - BrowserVisibility.waitUntilElementIsVisible(this.processEndDateField); - BrowserVisibility.waitUntilElementIsVisible(this.processCategoryField); - BrowserVisibility.waitUntilElementIsVisible(this.processBusinessKeyField); - BrowserVisibility.waitUntilElementIsVisible(this.processCreatedByField); - BrowserVisibility.waitUntilElementIsVisible(this.processCreatedField); - BrowserVisibility.waitUntilElementIsVisible(this.processIdField); - BrowserVisibility.waitUntilElementIsVisible(this.processDescription); - BrowserVisibility.waitUntilElementIsVisible(this.showDiagramButton); - BrowserVisibility.waitUntilElementIsVisible(this.activeTask); - BrowserVisibility.waitUntilElementIsVisible(this.cancelProcessButton); - BrowserVisibility.waitUntilElementIsVisible(this.commentInput); - BrowserVisibility.waitUntilElementIsVisible(this.auditLogButton); - return this; + async checkDetailsAreDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.processStatusField); + await BrowserVisibility.waitUntilElementIsVisible(this.processEndDateField); + await BrowserVisibility.waitUntilElementIsVisible(this.processCategoryField); + await BrowserVisibility.waitUntilElementIsVisible(this.processBusinessKeyField); + await BrowserVisibility.waitUntilElementIsVisible(this.processCreatedByField); + await BrowserVisibility.waitUntilElementIsVisible(this.processCreatedField); + await BrowserVisibility.waitUntilElementIsVisible(this.processIdField); + await BrowserVisibility.waitUntilElementIsVisible(this.processDescription); + await BrowserVisibility.waitUntilElementIsVisible(this.showDiagramButton); + await BrowserVisibility.waitUntilElementIsVisible(this.activeTask); + await BrowserVisibility.waitUntilElementIsVisible(this.cancelProcessButton); + await BrowserVisibility.waitUntilElementIsVisible(this.commentInput); + await BrowserVisibility.waitUntilElementIsVisible(this.auditLogButton); } - checkProcessTitleIsDisplayed() { + checkProcessTitleIsDisplayed(): Promise { return BrowserActions.getText(this.processTitle); } - checkProcessDetailsMessage() { + checkProcessDetailsMessage(): Promise { return BrowserActions.getText(this.processDetailsMessage); } - getProcessStatus() { + getProcessStatus(): Promise { return BrowserActions.getText(this.processStatusField); } - getEndDate() { + getEndDate(): Promise { return BrowserActions.getText(this.processEndDateField); } - getProcessCategory() { + getProcessCategory(): Promise { return BrowserActions.getText(this.processCategoryField); } - getBusinessKey() { + getBusinessKey(): Promise { return BrowserActions.getText(this.processBusinessKeyField); } - getCreatedBy() { + getCreatedBy(): Promise { return BrowserActions.getText(this.processCreatedByField); } - getCreated() { + getCreated(): Promise { return BrowserActions.getText(this.processCreatedField); } - getId() { + getId(): Promise { return BrowserActions.getText(this.processIdField); } - getProcessDescription() { + getProcessDescription(): Promise { return BrowserActions.getText(this.processDescription); } - clickShowDiagram() { - BrowserActions.click(this.showDiagramButton); - BrowserVisibility.waitUntilElementIsVisible(this.diagramCanvas); - BrowserActions.click(this.backButton); + async clickShowDiagram(): Promise { + await BrowserActions.click(this.showDiagramButton); + await BrowserVisibility.waitUntilElementIsVisible(this.diagramCanvas); + await BrowserActions.click(this.backButton); } - checkShowDiagramIsDisabled() { - BrowserVisibility.waitUntilElementIsVisible(this.showDiagramButtonDisabled); + async checkShowDiagramIsDisabled(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.showDiagramButtonDisabled); } - addComment(comment) { - BrowserVisibility.waitUntilElementIsVisible(this.commentInput); - this.commentInput.sendKeys(comment); - this.commentInput.sendKeys(protractor.Key.ENTER); - return this; + async addComment(comment): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.commentInput); + await this.commentInput.sendKeys(comment); + await this.commentInput.sendKeys(protractor.Key.ENTER); } - checkCommentIsDisplayed(comment) { - const commentInserted = element(by.cssContainingText('div[id="comment-message"]', comment)); - BrowserVisibility.waitUntilElementIsVisible(commentInserted); - return this; + async checkCommentIsDisplayed(comment): Promise { + const commentInserted: ElementFinder = element(by.cssContainingText('div[id="comment-message"]', comment)); + await BrowserVisibility.waitUntilElementIsVisible(commentInserted); } - clickAuditLogButton() { - BrowserActions.click(this.auditLogButton); + async clickAuditLogButton(): Promise { + await BrowserActions.click(this.auditLogButton); } - clickCancelProcessButton() { - BrowserActions.click(this.cancelProcessButton); + async clickCancelProcessButton(): Promise { + await BrowserActions.click(this.cancelProcessButton); } - clickOnActiveTask() { - return BrowserActions.click(this.activeTask); + async clickOnActiveTask(): Promise { + await BrowserActions.click(this.activeTask); } - clickOnStartForm() { - return BrowserActions.click(this.startForm); + async clickOnStartForm(): Promise { + await BrowserActions.click(this.startForm); } - clickOnCompletedTask() { - return BrowserActions.click(this.completedTask); + async clickOnCompletedTask(): Promise { + await BrowserActions.click(this.completedTask); } - checkActiveTaskTitleIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.taskTitle); + async checkActiveTaskTitleIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.taskTitle); } - checkProcessDetailsCard() { - BrowserVisibility.waitUntilElementIsVisible(this.propertiesList); + async checkProcessDetailsCard(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.propertiesList); } } diff --git a/e2e/pages/adf/process-services/processFiltersPage.ts b/e2e/pages/adf/process-services/processFiltersPage.ts index b712ccd263..01d45e0494 100644 --- a/e2e/pages/adf/process-services/processFiltersPage.ts +++ b/e2e/pages/adf/process-services/processFiltersPage.ts @@ -15,7 +15,7 @@ * limitations under the License. */ -import { element, by } from 'protractor'; +import { element, by, ElementFinder, Locator } from 'protractor'; import { StartProcessPage } from './startProcessPage'; import { DataTableComponentPage } from '@alfresco/adf-testing'; import { BrowserVisibility, BrowserActions } from '@alfresco/adf-testing'; @@ -23,74 +23,73 @@ import { BrowserVisibility, BrowserActions } from '@alfresco/adf-testing'; export class ProcessFiltersPage { dataTable = new DataTableComponentPage(); - runningFilter = element(by.css('span[data-automation-id="Running_filter"]')); - completedFilter = element(by.css('div[class="mat-list-text"] > span[data-automation-id="Completed_filter"]')); - allFilter = element(by.css('span[data-automation-id="All_filter"]')); - createProcessButton = element(by.css('.adf-processes-menu button[data-automation-id="create-button"] > span')); - newProcessButton = element(by.css('div > button[data-automation-id="btn-start-process"]')); - processesPage = element(by.css('div[class="adf-grid"] > div[class="adf-grid-item adf-processes-menu"]')); - accordionMenu = element(by.css('.adf-processes-menu mat-accordion')); - buttonWindow = element(by.css('div > button[data-automation-id="btn-start-process"] > div')); - noContentMessage = element.all(by.css('div[class="adf-empty-content__title"]')).first(); - rows = by.css('adf-process-instance-list div[class="adf-datatable-body"] div[class*="adf-datatable-row"]'); - tableBody = element.all(by.css('adf-datatable div[class="adf-datatable-body"]')).first(); - nameColumn = by.css('div[class*="adf-datatable-body"] div[class*="adf-datatable-row"] div[title="Name"] span'); - processIcon = by.xpath('ancestor::div[@class="mat-list-item-content"]/mat-icon'); + runningFilter: ElementFinder = element(by.css('span[data-automation-id="Running_filter"]')); + completedFilter: ElementFinder = element(by.css('div[class="mat-list-text"] > span[data-automation-id="Completed_filter"]')); + allFilter: ElementFinder = element(by.css('span[data-automation-id="All_filter"]')); + createProcessButton: ElementFinder = element(by.css('.adf-processes-menu button[data-automation-id="create-button"] > span')); + newProcessButton: ElementFinder = element(by.css('div > button[data-automation-id="btn-start-process"]')); + processesPage: ElementFinder = element(by.css('div[class="adf-grid"] > div[class="adf-grid-item adf-processes-menu"]')); + accordionMenu: ElementFinder = element(by.css('.adf-processes-menu mat-accordion')); + buttonWindow: ElementFinder = element(by.css('div > button[data-automation-id="btn-start-process"] > div')); + noContentMessage: ElementFinder = element.all(by.css('div[class="adf-empty-content__title"]')).first(); + rows: Locator = by.css('adf-process-instance-list div[class="adf-datatable-body"] div[class*="adf-datatable-row"]'); + tableBody: ElementFinder = element.all(by.css('adf-datatable div[class="adf-datatable-body"]')).first(); + nameColumn: Locator = by.css('div[class*="adf-datatable-body"] div[class*="adf-datatable-row"] div[title="Name"] span'); + processIcon: Locator = by.xpath('ancestor::div[@class="mat-list-item-content"]/mat-icon'); - startProcess() { - this.clickCreateProcessButton(); - this.clickNewProcessDropdown(); + async startProcess(): Promise { + await this.clickCreateProcessButton(); + await this.clickNewProcessDropdown(); return new StartProcessPage(); } - clickRunningFilterButton() { - return BrowserActions.click(this.runningFilter); - + async clickRunningFilterButton(): Promise { + await BrowserActions.click(this.runningFilter); } - clickCompletedFilterButton() { - BrowserActions.click(this.completedFilter); - expect(this.completedFilter.isEnabled()).toBe(true); + async clickCompletedFilterButton(): Promise { + await BrowserActions.click(this.completedFilter); + await expect(await this.completedFilter.isEnabled()).toBe(true); } - clickAllFilterButton() { - BrowserActions.click(this.allFilter); - expect(this.allFilter.isEnabled()).toBe(true); + async clickAllFilterButton(): Promise { + await BrowserActions.click(this.allFilter); + await expect(await this.allFilter.isEnabled()).toBe(true); } - clickCreateProcessButton() { - BrowserActions.closeMenuAndDialogs(); - BrowserVisibility.waitUntilElementIsOnPage(this.accordionMenu); - BrowserVisibility.waitUntilElementIsVisible(this.processesPage); - BrowserActions.click(this.createProcessButton); + async clickCreateProcessButton(): Promise { + await BrowserActions.closeMenuAndDialogs(); + await BrowserVisibility.waitUntilElementIsVisible(this.accordionMenu); + await BrowserVisibility.waitUntilElementIsVisible(this.processesPage); + await BrowserActions.click(this.createProcessButton); } - clickNewProcessDropdown() { - BrowserVisibility.waitUntilElementIsOnPage(this.buttonWindow); - BrowserActions.click(this.newProcessButton); + async clickNewProcessDropdown(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.buttonWindow); + await BrowserActions.click(this.newProcessButton); } - checkNoContentMessage() { - return BrowserVisibility.waitUntilElementIsVisible(this.noContentMessage); + async checkNoContentMessage(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.noContentMessage); } - selectFromProcessList(title) { - BrowserActions.closeMenuAndDialogs(); - const processName = element.all(by.css(`div[data-automation-id="text_${title}"]`)).first(); - BrowserActions.click(processName); + async selectFromProcessList(title): Promise { + await BrowserActions.closeMenuAndDialogs(); + const processName: ElementFinder = element.all(by.css(`div[data-automation-id="text_${title}"]`)).first(); + await BrowserActions.click(processName); } - checkFilterIsHighlighted(filterName) { - const processNameHighlighted = element(by.css(`mat-list-item.adf-active span[data-automation-id='${filterName}_filter']`)); - BrowserVisibility.waitUntilElementIsVisible(processNameHighlighted); + async checkFilterIsHighlighted(filterName): Promise { + const processNameHighlighted: ElementFinder = element(by.css(`mat-list-item.adf-active span[data-automation-id='${filterName}_filter']`)); + await BrowserVisibility.waitUntilElementIsVisible(processNameHighlighted); } - numberOfProcessRows() { - return element.all(this.rows).count(); + async numberOfProcessRows(): Promise { + return await element.all(this.rows).count(); } - waitForTableBody() { - BrowserVisibility.waitUntilElementIsVisible(this.tableBody); + async waitForTableBody(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.tableBody); } /** @@ -98,50 +97,48 @@ export class ProcessFiltersPage { * * @param sortOrder : 'ASC' to sort the list ascendant and 'DESC' for descendant */ - sortByName(sortOrder: string) { - this.dataTable.sortByColumn(sortOrder, 'name'); + async sortByName(sortOrder: string) { + await this.dataTable.sortByColumn(sortOrder, 'name'); } - getAllRowsNameColumn() { - return this.dataTable.getAllRowsColumnValues('Name'); + async getAllRowsNameColumn() { + return await this.dataTable.getAllRowsColumnValues('Name'); } - checkFilterIsDisplayed(name) { - const filterName = element(by.css(`span[data-automation-id='${name}_filter']`)); - return BrowserVisibility.waitUntilElementIsVisible(filterName); + async checkFilterIsDisplayed(name): Promise { + const filterName: ElementFinder = element(by.css(`span[data-automation-id='${name}_filter']`)); + await BrowserVisibility.waitUntilElementIsVisible(filterName); } - checkFilterHasNoIcon(name) { - const filterName = element(by.css(`span[data-automation-id='${name}_filter']`)); - BrowserVisibility.waitUntilElementIsVisible(filterName); - return BrowserVisibility.waitUntilElementIsNotOnPage(filterName.element(this.processIcon)); + async checkFilterHasNoIcon(name): Promise { + const filterName: ElementFinder = element(by.css(`span[data-automation-id='${name}_filter']`)); + await BrowserVisibility.waitUntilElementIsVisible(filterName); + await BrowserVisibility.waitUntilElementIsNotVisible(filterName.element(this.processIcon)); } - getFilterIcon(name) { - const filterName = element(by.css(`span[data-automation-id='${name}_filter']`)); - BrowserVisibility.waitUntilElementIsVisible(filterName); + async getFilterIcon(name): Promise { + const filterName: ElementFinder = element(by.css(`span[data-automation-id='${name}_filter']`)); + await BrowserVisibility.waitUntilElementIsVisible(filterName); const icon = filterName.element(this.processIcon); - return BrowserActions.getText(icon); + return await BrowserActions.getText(icon); } - checkFilterIsNotDisplayed(name) { - const filterName = element(by.css(`span[data-automation-id='${name}_filter']`)); - return BrowserVisibility.waitUntilElementIsNotVisible(filterName); + async checkFilterIsNotDisplayed(name): Promise { + const filterName: ElementFinder = element(by.css(`span[data-automation-id='${name}_filter']`)); + await BrowserVisibility.waitUntilElementIsNotVisible(filterName); } - checkProcessesSortedByNameAsc() { - this.getAllRowsNameColumn().then((list) => { - for (let i = 1; i < list.length; i++) { - expect(JSON.stringify(list[i]) > JSON.stringify(list[i - 1])).toEqual(true); - } - }); + async checkProcessesSortedByNameAsc(): Promise { + const list = await this.getAllRowsNameColumn(); + for (let i = 1; i < list.length; i++) { + await expect(JSON.stringify(list[i]) > JSON.stringify(list[i - 1])).toEqual(true); + } } - checkProcessesSortedByNameDesc() { - this.getAllRowsNameColumn().then((list) => { - for (let i = 1; i < list.length; i++) { - expect(JSON.stringify(list[i]) < JSON.stringify(list[i - 1])).toEqual(true); - } - }); + async checkProcessesSortedByNameDesc(): Promise { + const list = await this.getAllRowsNameColumn(); + for (let i = 1; i < list.length; i++) { + await expect(JSON.stringify(list[i]) < JSON.stringify(list[i - 1])).toEqual(true); + } } } diff --git a/e2e/pages/adf/process-services/processListPage.ts b/e2e/pages/adf/process-services/processListPage.ts index b875b1b4b4..200447e308 100644 --- a/e2e/pages/adf/process-services/processListPage.ts +++ b/e2e/pages/adf/process-services/processListPage.ts @@ -16,19 +16,19 @@ */ import { BrowserVisibility, BrowserActions } from '@alfresco/adf-testing'; -import { element, by } from 'protractor'; +import { element, by, ElementFinder } from 'protractor'; export class ProcessListPage { - processListTitle = element.all(by.css("div[class='adf-empty-content__title']")).first(); - processInstanceList = element(by.css('adf-process-instance-list')); + processListTitle: ElementFinder = element.all(by.css("div[class='adf-empty-content__title']")).first(); + processInstanceList: ElementFinder = element(by.css('adf-process-instance-list')); - checkProcessListTitleIsDisplayed() { + getDisplayedProcessListTitle(): Promise { return BrowserActions.getText(this.processListTitle); } - checkProcessListIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.processInstanceList); + async checkProcessListIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.processInstanceList); } } diff --git a/e2e/pages/adf/process-services/processServiceTabBarPage.ts b/e2e/pages/adf/process-services/processServiceTabBarPage.ts index c84d79f460..cd45010484 100644 --- a/e2e/pages/adf/process-services/processServiceTabBarPage.ts +++ b/e2e/pages/adf/process-services/processServiceTabBarPage.ts @@ -16,33 +16,33 @@ */ import { BrowserVisibility, BrowserActions } from '@alfresco/adf-testing'; -import { element, by, browser } from 'protractor'; +import { element, by, browser, ElementFinder } from 'protractor'; export class ProcessServiceTabBarPage { - tasksButton = element.all(by.cssContainingText('div[class*="mat-tab-label"] .mat-tab-labels div', 'Tasks')).first(); - processButton = element.all(by.cssContainingText('div[class*="mat-tab-label"] .mat-tab-labels div', 'Process')).first(); - reportsButton = element.all(by.cssContainingText('div[class*="mat-tab-label"] .mat-tab-labels div', 'Reports')).first(); - settingsButton = element.all(by.cssContainingText('div[class*="mat-tab-label"] .mat-tab-labels div', 'Settings')).first(); - reportsButtonSelected = element.all(by.cssContainingText('div[class*="mat-tab-label"] .mat-tab-labels div[aria-selected="true"]', 'Reports')).first(); + tasksButton: ElementFinder = element.all(by.cssContainingText('div[class*="mat-tab-label"] .mat-tab-labels div', 'Tasks')).first(); + processButton: ElementFinder = element.all(by.cssContainingText('div[class*="mat-tab-label"] .mat-tab-labels div', 'Process')).first(); + reportsButton: ElementFinder = element.all(by.cssContainingText('div[class*="mat-tab-label"] .mat-tab-labels div', 'Reports')).first(); + settingsButton: ElementFinder = element.all(by.cssContainingText('div[class*="mat-tab-label"] .mat-tab-labels div', 'Settings')).first(); + reportsButtonSelected: ElementFinder = element.all(by.cssContainingText('div[class*="mat-tab-label"] .mat-tab-labels div[aria-selected="true"]', 'Reports')).first(); - clickTasksButton() { - BrowserActions.click(this.tasksButton); - browser.sleep(700); + async clickTasksButton(): Promise { + await BrowserActions.click(this.tasksButton); + await browser.sleep(300); } - clickProcessButton() { - BrowserActions.click(this.processButton); - browser.sleep(700); + async clickProcessButton(): Promise { + await BrowserActions.click(this.processButton); + await browser.sleep(300); } - clickSettingsButton() { - BrowserActions.click(this.settingsButton); - browser.sleep(700); + async clickSettingsButton(): Promise { + await BrowserActions.click(this.settingsButton); + await browser.sleep(300); } - clickReportsButton() { - BrowserActions.click(this.reportsButton); - return BrowserVisibility.waitUntilElementIsVisible(this.reportsButtonSelected); + async clickReportsButton(): Promise { + await BrowserActions.click(this.reportsButton); + await BrowserVisibility.waitUntilElementIsVisible(this.reportsButtonSelected); } } diff --git a/e2e/pages/adf/process-services/processServicesPage.ts b/e2e/pages/adf/process-services/processServicesPage.ts index 31461ec50e..cf90798767 100644 --- a/e2e/pages/adf/process-services/processServicesPage.ts +++ b/e2e/pages/adf/process-services/processServicesPage.ts @@ -17,59 +17,60 @@ import { ProcessServiceTabBarPage } from './processServiceTabBarPage'; -import { element, by } from 'protractor'; +import { element, by, ElementFinder } from 'protractor'; import { BrowserVisibility, BrowserActions } from '@alfresco/adf-testing'; +import { __await } from 'tslib'; export class ProcessServicesPage { - apsAppsContainer = element(by.css('div[class="adf-app-listgrid ng-star-inserted"]')); - taskApp = element(by.css('mat-card[title="Task App"]')); + apsAppsContainer: ElementFinder = element(by.css('div[class="adf-app-listgrid ng-star-inserted"]')); + taskApp: ElementFinder = element(by.css('mat-card[title="Task App"]')); iconTypeLocator = by.css('mat-icon[class*="card-logo-icon"]'); descriptionLocator = by.css('mat-card-subtitle[class*="subtitle"]'); - checkApsContainer() { - BrowserVisibility.waitUntilElementIsVisible(this.apsAppsContainer); + async checkApsContainer(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.apsAppsContainer); } - goToApp(applicationName) { - const app = element(by.css('mat-card[title="' + applicationName + '"]')); - BrowserActions.click(app); + async goToApp(applicationName): Promise { + const app: ElementFinder = element(by.css('mat-card[title="' + applicationName + '"]')); + await BrowserActions.click(app); return new ProcessServiceTabBarPage(); } - goToTaskApp() { - BrowserActions.click(this.taskApp); + async goToTaskApp(): Promise { + await BrowserActions.click(this.taskApp); return new ProcessServiceTabBarPage(); } - getAppIconType(applicationName) { - const app = element(by.css('mat-card[title="' + applicationName + '"]')); - BrowserVisibility.waitUntilElementIsVisible(app); + async getAppIconType(applicationName): Promise { + const app: ElementFinder = element(by.css('mat-card[title="' + applicationName + '"]')); + await BrowserVisibility.waitUntilElementIsVisible(app); const iconType = app.element(this.iconTypeLocator); return BrowserActions.getText(iconType); } - getBackgroundColor(applicationName) { - const app = element(by.css('mat-card[title="' + applicationName + '"]')); - BrowserVisibility.waitUntilElementIsVisible(app); + async getBackgroundColor(applicationName): Promise { + const app: ElementFinder = element(by.css('mat-card[title="' + applicationName + '"]')); + await BrowserVisibility.waitUntilElementIsVisible(app); return app.getCssValue('background-color'); } - getDescription(applicationName) { - const app = element(by.css('mat-card[title="' + applicationName + '"]')); - BrowserVisibility.waitUntilElementIsVisible(app); + async getDescription(applicationName): Promise { + const app: ElementFinder = element(by.css('mat-card[title="' + applicationName + '"]')); + await BrowserVisibility.waitUntilElementIsVisible(app); const description = app.element(this.descriptionLocator); return BrowserActions.getText(description); } - checkAppIsNotDisplayed(applicationName) { - const app = element(by.css('mat-card[title="' + applicationName + '"]')); - return BrowserVisibility.waitUntilElementIsNotOnPage(app); + async checkAppIsNotDisplayed(applicationName): Promise { + const app: ElementFinder = element(by.css('mat-card[title="' + applicationName + '"]')); + await BrowserVisibility.waitUntilElementIsNotVisible(app); } - checkAppIsDisplayed(applicationName) { - const app = element(by.css('mat-card[title="' + applicationName + '"]')); - return BrowserVisibility.waitUntilElementIsVisible(app); + async checkAppIsDisplayed(applicationName): Promise { + const app: ElementFinder = element(by.css('mat-card[title="' + applicationName + '"]')); + await BrowserVisibility.waitUntilElementIsVisible(app); } } diff --git a/e2e/pages/adf/process-services/startProcessPage.ts b/e2e/pages/adf/process-services/startProcessPage.ts index cbbfc06915..ee79ac7adb 100644 --- a/e2e/pages/adf/process-services/startProcessPage.ts +++ b/e2e/pages/adf/process-services/startProcessPage.ts @@ -15,157 +15,130 @@ * limitations under the License. */ -import { by, element, Key, protractor, browser } from 'protractor'; +import { by, element, Key, protractor, browser, ElementFinder } from 'protractor'; import { BrowserVisibility, BrowserActions, FormFields } from '@alfresco/adf-testing'; export class StartProcessPage { - defaultProcessName = element(by.css('input[id="processName"]')); - processNameInput = element(by.id('processName')); - selectProcessDropdownArrow = element(by.css('button[id="adf-select-process-dropdown"]')); - cancelProcessButton = element(by.id('cancel_process')); - formStartProcessButton = element(by.css('button[data-automation-id="adf-form-start process"]')); - startProcessButton = element(by.css('button[data-automation-id="btn-start"]')); - noProcess = element(by.id('no-process-message')); - processDefinition = element(by.css('input[id="processDefinitionName"]')); - processDefinitionOptionsPanel = element(by.css('div[class*="processDefinitionOptions"]')); + defaultProcessName: ElementFinder = element(by.css('input[id="processName"]')); + processNameInput: ElementFinder = element(by.id('processName')); + selectProcessDropdownArrow: ElementFinder = element(by.css('button[id="adf-select-process-dropdown"]')); + cancelProcessButton: ElementFinder = element(by.id('cancel_process')); + formStartProcessButton: ElementFinder = element(by.css('button[data-automation-id="adf-form-start process"]')); + startProcessButton: ElementFinder = element(by.css('button[data-automation-id="btn-start"]')); + noProcess: ElementFinder = element(by.id('no-process-message')); + processDefinition: ElementFinder = element(by.css('input[id="processDefinitionName"]')); + processDefinitionOptionsPanel: ElementFinder = element(by.css('div[class*="processDefinitionOptions"]')); - checkNoProcessMessage() { - BrowserVisibility.waitUntilElementIsVisible(this.noProcess); + async checkNoProcessMessage(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.noProcess); } - pressDownArrowAndEnter() { - this.processDefinition.sendKeys(protractor.Key.ARROW_DOWN); - return browser.actions().sendKeys(protractor.Key.ENTER).perform(); + async pressDownArrowAndEnter(): Promise { + await this.processDefinition.sendKeys(protractor.Key.ARROW_DOWN); + await browser.actions().sendKeys(protractor.Key.ENTER).perform(); } - checkNoProcessDefinitionOptionIsDisplayed() { - BrowserVisibility.waitUntilElementIsNotOnPage(this.processDefinitionOptionsPanel); + async checkNoProcessDefinitionOptionIsDisplayed() { + await BrowserVisibility.waitUntilElementIsNotVisible(this.processDefinitionOptionsPanel); } - getDefaultName() { - BrowserVisibility.waitUntilElementIsVisible(this.defaultProcessName); + async getDefaultName(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.defaultProcessName); return this.defaultProcessName.getAttribute('value'); } - deleteDefaultName(name) { - BrowserVisibility.waitUntilElementIsVisible(this.processNameInput); - this.processNameInput.getAttribute('value').then((currentValue) => { - for (let i = currentValue.length; i >= 0; i--) { - if (currentValue === name) { - this.processNameInput.sendKeys(protractor.Key.BACK_SPACE); - } - } - }); + async deleteDefaultName() { + await BrowserVisibility.waitUntilElementIsVisible(this.processNameInput); + await BrowserActions.clearWithBackSpace(this.processNameInput); } - enterProcessName(name) { - BrowserVisibility.waitUntilElementIsVisible(this.processNameInput); - this.clearProcessName(); - this.processNameInput.sendKeys(name); + async enterProcessName(name): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.processNameInput); + await BrowserActions.clearSendKeys(this.processNameInput, name); } - clearProcessName() { - BrowserVisibility.waitUntilElementIsVisible(this.processNameInput); - this.processNameInput.clear(); + async selectFromProcessDropdown(name): Promise { + await this.clickProcessDropdownArrow(); + await this.selectOption(name); } - selectFromProcessDropdown(name) { - this.clickProcessDropdownArrow(); - return this.selectOption(name); + async clickProcessDropdownArrow(): Promise { + await BrowserActions.click(this.selectProcessDropdownArrow); } - clickProcessDropdownArrow() { - BrowserActions.click(this.selectProcessDropdownArrow); + async checkOptionIsDisplayed(name): Promise { + const selectProcessDropdown: ElementFinder = element(by.cssContainingText('.mat-option-text', name)); + await BrowserVisibility.waitUntilElementIsVisible(selectProcessDropdown); + await BrowserVisibility.waitUntilElementIsClickable(selectProcessDropdown); } - checkOptionIsDisplayed(name) { - const selectProcessDropdown = element(by.cssContainingText('.mat-option-text', name)); - BrowserVisibility.waitUntilElementIsVisible(selectProcessDropdown); - BrowserVisibility.waitUntilElementIsClickable(selectProcessDropdown); - return this; + async checkOptionIsNotDisplayed(name): Promise { + const selectProcessDropdown: ElementFinder = element(by.cssContainingText('.mat-option-text', name)); + await BrowserVisibility.waitUntilElementIsNotVisible(selectProcessDropdown); } - checkOptionIsNotDisplayed(name) { - const selectProcessDropdown = element(by.cssContainingText('.mat-option-text', name)); - BrowserVisibility.waitUntilElementIsNotOnPage(selectProcessDropdown); - return this; + async selectOption(name): Promise { + const selectProcessDropdown: ElementFinder = element(by.cssContainingText('.mat-option-text', name)); + await BrowserActions.click(selectProcessDropdown); } - selectOption(name) { - const selectProcessDropdown = element(by.cssContainingText('.mat-option-text', name)); - BrowserActions.click(selectProcessDropdown); - return this; + async typeProcessDefinition(name): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.processDefinition); + await BrowserVisibility.waitUntilElementIsClickable(this.processDefinition); + await BrowserActions.clearSendKeys(this.processDefinition, name); } - typeProcessDefinition(name) { - BrowserVisibility.waitUntilElementIsVisible(this.processDefinition); - BrowserVisibility.waitUntilElementIsClickable(this.processDefinition); - this.processDefinition.clear(); - this.processDefinition.sendKeys(name); - return this; - } - - getProcessDefinitionValue() { - BrowserVisibility.waitUntilElementIsVisible(this.processDefinition); + async getProcessDefinitionValue(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.processDefinition); return this.processDefinition.getAttribute('value'); } - clickCancelProcessButton() { - BrowserActions.click(this.cancelProcessButton); + async clickCancelProcessButton(): Promise { + await BrowserActions.click(this.cancelProcessButton); } - clickFormStartProcessButton() { - return BrowserActions.click(this.formStartProcessButton); - + async clickFormStartProcessButton(): Promise { + await BrowserActions.click(this.formStartProcessButton); } - checkStartFormProcessButtonIsEnabled() { - expect(this.formStartProcessButton.isEnabled()).toBe(true); + async checkStartFormProcessButtonIsEnabled() { + await expect(await this.formStartProcessButton.isEnabled()).toBe(true); } - checkStartProcessButtonIsEnabled() { - expect(this.startProcessButton.isEnabled()).toBe(true); + async checkStartProcessButtonIsEnabled() { + await expect(await this.startProcessButton.isEnabled()).toBe(true); } - checkStartProcessButtonIsDisabled() { - expect(this.startProcessButton.isEnabled()).toBe(false); + async checkStartProcessButtonIsDisabled() { + await expect(await this.startProcessButton.isEnabled()).toBe(false); } - clickStartProcessButton() { - return BrowserActions.click(this.startProcessButton); + async clickStartProcessButton(): Promise { + await BrowserActions.click(this.startProcessButton); } - checkSelectProcessPlaceholderIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.processDefinition); - const processPlaceholder = this.processDefinition.getAttribute('value').then(((result) => { - return result; - })); + async checkSelectProcessPlaceholderIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.processDefinition); + const processPlaceholder = await this.processDefinition.getAttribute('value'); return processPlaceholder; } - checkValidationErrorIsDisplayed(error, elementRef = 'mat-error') { - const errorElement = element(by.cssContainingText(elementRef, error)); - BrowserVisibility.waitUntilElementIsVisible(errorElement); - return this; + async checkValidationErrorIsDisplayed(error, elementRef = 'mat-error'): Promise { + const errorElement: ElementFinder = element(by.cssContainingText(elementRef, error)); + await BrowserVisibility.waitUntilElementIsVisible(errorElement); } - blur(locator) { - BrowserActions.click(locator); - locator.sendKeys(Key.TAB); - return this; + async blur(locator): Promise { + await BrowserActions.click(locator); + await locator.sendKeys(Key.TAB); } - clearField(locator) { - BrowserVisibility.waitUntilElementIsVisible(locator); - locator.getAttribute('value').then((result) => { - for (let i = result.length; i >= 0; i--) { - locator.sendKeys(protractor.Key.BACK_SPACE); - } - }); + async clearField(locator): Promise { + await BrowserActions.clearWithBackSpace(locator); } - formFields() { + formFields(): FormFields { return new FormFields(); } } diff --git a/e2e/pages/adf/process-services/taskDetailsPage.ts b/e2e/pages/adf/process-services/taskDetailsPage.ts index 0654b83023..3bf7db2f6a 100644 --- a/e2e/pages/adf/process-services/taskDetailsPage.ts +++ b/e2e/pages/adf/process-services/taskDetailsPage.ts @@ -16,7 +16,7 @@ */ import { AppSettingsToggles } from './dialog/appSettingsToggles'; -import { element, by, browser } from 'protractor'; +import { element, by, browser, ElementFinder } from 'protractor'; import { TabsPage } from '@alfresco/adf-testing'; import { BrowserVisibility, BrowserActions } from '@alfresco/adf-testing'; @@ -24,349 +24,355 @@ export class TaskDetailsPage { appSettingsTogglesClass = new AppSettingsToggles(); - formContent = element(by.css('adf-form')); - formNameField = element(by.css('span[data-automation-id*="formName"] span')); - assigneeField = element(by.css('span[data-automation-id*="assignee"] span')); - statusField = element(by.css('span[data-automation-id*="status"] span')); - categoryField = element(by.css('span[data-automation-id*="category"] span')); - parentNameField = element(by.css('span[data-automation-id*="parentName"] span')); - parentTaskIdField = element(by.css('span[data-automation-id*="parentTaskId"] span')); - durationField = element(by.css('span[data-automation-id*="duration"] span')); - endDateField = element.all(by.css('span[data-automation-id*="endDate"] span')).first(); - createdField = element(by.css('span[data-automation-id="card-dateitem-created"] span')); - idField = element.all(by.css('span[data-automation-id*="id"] span')).first(); - descriptionField = element(by.css('span[data-automation-id*="description"] span')); - dueDateField = element(by.css('span[data-automation-id*="dueDate"] span')); - activitiesTitle = element(by.css('div[class*="adf-info-drawer-layout-header-title"] div')); - commentField = element(by.id('comment-input')); - addCommentButton = element(by.css('[data-automation-id="comments-input-add"]')); - involvePeopleButton = element(by.css('div[class*="add-people"]')); - addPeopleField = element(by.css('input[data-automation-id="adf-people-search-input"]')); - addInvolvedUserButton = element(by.css('button[id="add-people"] span')); + formContent: ElementFinder = element(by.css('adf-form')); + formNameField: ElementFinder = element(by.css('span[data-automation-id*="formName"] span')); + assigneeField: ElementFinder = element(by.css('span[data-automation-id*="assignee"] span')); + statusField: ElementFinder = element(by.css('span[data-automation-id*="status"] span')); + categoryField: ElementFinder = element(by.css('span[data-automation-id*="category"] span')); + parentNameField: ElementFinder = element(by.css('span[data-automation-id*="parentName"] span')); + parentTaskIdField: ElementFinder = element(by.css('span[data-automation-id*="parentTaskId"] span')); + durationField: ElementFinder = element(by.css('span[data-automation-id*="duration"] span')); + endDateField: ElementFinder = element.all(by.css('span[data-automation-id*="endDate"] span')).first(); + createdField: ElementFinder = element(by.css('span[data-automation-id="card-dateitem-created"] span')); + idField: ElementFinder = element.all(by.css('span[data-automation-id*="id"] span')).first(); + descriptionField: ElementFinder = element(by.css('span[data-automation-id*="description"] span')); + dueDateField: ElementFinder = element(by.css('span[data-automation-id*="dueDate"] span')); + activitiesTitle: ElementFinder = element(by.css('div[class*="adf-info-drawer-layout-header-title"] div')); + commentField: ElementFinder = element(by.id('comment-input')); + addCommentButton: ElementFinder = element(by.css('[data-automation-id="comments-input-add"]')); + involvePeopleButton: ElementFinder = element(by.css('div[class*="add-people"]')); + addPeopleField: ElementFinder = element(by.css('input[data-automation-id="adf-people-search-input"]')); + addInvolvedUserButton: ElementFinder = element(by.css('button[id="add-people"] span')); emailInvolvedUser = by.xpath('following-sibling::div[@class="adf-people-email"]'); - taskDetailsInfoDrawer = element(by.tagName('adf-info-drawer')); - taskDetailsSection = element(by.css('div[data-automation-id="adf-tasks-details"]')); - taskDetailsEmptySection = element(by.css('div[data-automation-id="adf-tasks-details--empty"]')); - completeTask = element(by.css('button[id="adf-no-form-complete-button"]')); - completeFormTask = element(by.css('button[id="adf-form-complete"]')); - taskDetailsTitle = element(by.css('h2[class="adf-activiti-task-details__header"] span')); - auditLogButton = element(by.css('button[adf-task-audit]')); - noPeopleInvolved = element(by.id('no-people-label')); - cancelInvolvePeopleButton = element(by.id('close-people-search')); - involvePeopleHeader = element(by.css('div[class="adf-search-text-header"]')); - removeInvolvedPeople = element(by.css('button[data-automation-id="Remove"]')); - peopleTitle = element(by.id('people-title')); - attachFormDropdown = element(by.css('div[class="adf-attach-form-row"]')); - cancelAttachForm = element(by.id('adf-no-form-cancel-button')); - attachFormButton = element(by.id('adf-no-form-attach-form-button')); - disabledAttachFormButton = element(by.css('button[id="adf-no-form-attach-form-button"][disabled]')); - removeAttachForm = element(by.id('adf-no-form-remove-button')); - attachFormName = element(by.css('span[class="adf-form-title ng-star-inserted"]')); - emptyTaskDetails = element(by.css('adf-task-details > div > div')); + taskDetailsInfoDrawer: ElementFinder = element(by.tagName('adf-info-drawer')); + taskDetailsSection: ElementFinder = element(by.css('div[data-automation-id="adf-tasks-details"]')); + taskDetailsEmptySection: ElementFinder = element(by.css('div[data-automation-id="adf-tasks-details--empty"]')); + completeTask: ElementFinder = element(by.css('button[id="adf-no-form-complete-button"]')); + completeFormTask: ElementFinder = element(by.css('button[id="adf-form-complete"]')); + taskDetailsTitle: ElementFinder = element(by.css('h2[class="adf-activiti-task-details__header"] span')); + auditLogButton: ElementFinder = element(by.css('button[adf-task-audit]')); + noPeopleInvolved: ElementFinder = element(by.id('no-people-label')); + cancelInvolvePeopleButton: ElementFinder = element(by.id('close-people-search')); + involvePeopleHeader: ElementFinder = element(by.css('div[class="adf-search-text-header"]')); + removeInvolvedPeople: ElementFinder = element(by.css('button[data-automation-id="Remove"]')); + peopleTitle: ElementFinder = element(by.id('people-title')); + attachFormDropdown: ElementFinder = element(by.css('div[class="adf-attach-form-row"]')); + cancelAttachForm: ElementFinder = element(by.id('adf-no-form-cancel-button')); + attachFormButton: ElementFinder = element(by.id('adf-no-form-attach-form-button')); + disabledAttachFormButton: ElementFinder = element(by.css('button[id="adf-no-form-attach-form-button"][disabled]')); + removeAttachForm: ElementFinder = element(by.id('adf-no-form-remove-button')); + attachFormName: ElementFinder = element(by.css('span[class="adf-form-title ng-star-inserted"]')); + emptyTaskDetails: ElementFinder = element(by.css('adf-task-details > div > div')); - getTaskDetailsTitle() { + async checkEditableAssigneeIsNotDisplayed(): Promise { + const editableAssignee = element(by.css('span[data-automation-id="card-textitem-value-assignee"][class*="clickable"]')); + await BrowserVisibility.waitUntilElementIsNotVisible(editableAssignee); + } + + async checkEditableFormIsNotDisplayed(): Promise { + const editableForm = element(by.css('span[data-automation-id="card-textitem-value-formName"][class*="clickable"]')); + await BrowserVisibility.waitUntilElementIsNotVisible(editableForm); + } + + async checkEditDescriptionButtonIsNotDisplayed(): Promise { + const editDescriptionButton = element(by.css('mat-icon[data-automation-id="card-textitem-edit-icon-description"]')); + await BrowserVisibility.waitUntilElementIsNotVisible(editDescriptionButton); + } + + async checkEditPriorityButtonIsNotDisplayed(): Promise { + const editPriorityButton = element(by.css('mat-icon[data-automation-id="card-textitem-edit-icon-priority"]')); + await BrowserVisibility.waitUntilElementIsNotVisible(editPriorityButton); + } + + async checkDueDatePickerButtonIsNotDisplayed(): Promise { + const dueDatePickerButton = element(by.css('mat-datetimepicker-toggle[data-automation-id="datepickertoggle-dueDate"]')); + await BrowserVisibility.waitUntilElementIsNotVisible(dueDatePickerButton); + } + + getTaskDetailsTitle(): Promise { return BrowserActions.getText(this.taskDetailsTitle); } - checkSelectedForm(formName) { - BrowserVisibility.waitUntilElementIsVisible(this.attachFormName); - expect(formName).toEqual(this.attachFormName.getText()); + async checkSelectedForm(formName): Promise { + const text = await BrowserActions.getText(this.attachFormName); + await expect(formName).toEqual(text); } - checkAttachFormButtonIsDisabled() { - BrowserVisibility.waitUntilElementIsVisible(this.disabledAttachFormButton); + async checkAttachFormButtonIsDisabled(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.disabledAttachFormButton); } - checkAttachFormButtonIsEnabled() { - BrowserVisibility.waitUntilElementIsClickable(this.attachFormButton); + async checkAttachFormButtonIsEnabled(): Promise { + await BrowserVisibility.waitUntilElementIsClickable(this.attachFormButton); } - checkAttachFormDropdownIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.attachFormDropdown); + async checkAttachFormDropdownIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.attachFormDropdown); } - clickAttachFormDropdown() { - return BrowserActions.click(this.attachFormDropdown); + async clickAttachFormDropdown(): Promise { + await BrowserActions.click(this.attachFormDropdown); } - selectAttachFormOption(option) { - const selectedOption = element(by.cssContainingText('mat-option[role="option"]', option)); - return BrowserActions.click(selectedOption); + async selectAttachFormOption(option): Promise { + const selectedOption: ElementFinder = element(by.cssContainingText('mat-option[role="option"]', option)); + await BrowserActions.click(selectedOption); } - checkCancelAttachFormIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.cancelAttachForm); + async checkCancelAttachFormIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.cancelAttachForm); } - noFormIsDisplayed() { - BrowserVisibility.waitUntilElementIsNotOnPage(this.formContent); - return this; + async noFormIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsNotVisible(this.formContent); } - clickCancelAttachForm() { - return BrowserActions.click(this.cancelAttachForm); + async clickCancelAttachForm(): Promise { + await BrowserActions.click(this.cancelAttachForm); } - checkRemoveAttachFormIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.removeAttachForm); + async checkRemoveAttachFormIsDisplayed() { + await BrowserVisibility.waitUntilElementIsVisible(this.removeAttachForm); } - clickRemoveAttachForm() { - return BrowserActions.click(this.removeAttachForm); + async clickRemoveAttachForm(): Promise { + await BrowserActions.click(this.removeAttachForm); } - checkAttachFormButtonIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.attachFormButton); + async checkAttachFormButtonIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.attachFormButton); } - checkAttachFormButtonIsNotDisplayed() { - BrowserVisibility.waitUntilElementIsNotOnPage(this.attachFormButton); + async checkAttachFormButtonIsNotDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsNotVisible(this.attachFormButton); } - clickAttachFormButton() { + async clickAttachFormButton(): Promise { return BrowserActions.click(this.attachFormButton); } - checkFormIsAttached(formName) { - BrowserVisibility.waitUntilElementIsVisible(this.formNameField); - this.formNameField.getText().then((attachedFormName) => { - expect(attachedFormName).toEqual(formName); - }); + async checkFormIsAttached(formName): Promise { + const attachedFormName = await BrowserActions.getText(this.formNameField); + await expect(attachedFormName).toEqual(formName); } - getFormName() { + getFormName(): Promise { return BrowserActions.getText(this.formNameField); } - clickForm() { - BrowserActions.closeMenuAndDialogs(); - BrowserActions.click(this.formNameField); + async clickForm(): Promise { + await BrowserActions.closeMenuAndDialogs(); + await BrowserActions.click(this.formNameField); } - getAssignee() { + getAssignee(): Promise { return BrowserActions.getText(this.assigneeField); } - getStatus() { + getStatus(): Promise { return BrowserActions.getText(this.statusField); } - getCategory() { + getCategory(): Promise { return BrowserActions.getText(this.categoryField); } - getParentName() { + getParentName(): Promise { return BrowserActions.getText(this.parentNameField); } - getParentTaskId() { + getParentTaskId(): Promise { return BrowserActions.getText(this.parentTaskIdField); } - getDuration() { + getDuration(): Promise { return BrowserActions.getText(this.durationField); } - getEndDate() { + getEndDate(): Promise { return BrowserActions.getText(this.endDateField); } - getCreated() { + getCreated(): Promise { return BrowserActions.getText(this.createdField); } - getId() { + getId(): Promise { return BrowserActions.getText(this.idField); } - getDescription() { + getDescription(): Promise { return BrowserActions.getText(this.descriptionField); } - getDueDate() { + getDueDate(): Promise { return BrowserActions.getText(this.dueDateField); } - getTitle() { + getTitle(): Promise { return BrowserActions.getText(this.activitiesTitle); } - selectActivityTab() { - const tabsPage = new TabsPage; - tabsPage.clickTabByTitle('Activity'); - return this; + async selectActivityTab(): Promise { + const tabsPage: TabsPage = new TabsPage; + await tabsPage.clickTabByTitle('Activity'); } - selectDetailsTab() { - const tabsPage = new TabsPage; - tabsPage.clickTabByTitle('Details'); - return this; + async selectDetailsTab(): Promise { + const tabsPage: TabsPage = new TabsPage; + await tabsPage.clickTabByTitle('Details'); } - addComment(comment) { - BrowserVisibility.waitUntilElementIsVisible(this.commentField); - this.commentField.sendKeys(comment); - BrowserActions.click(this.addCommentButton); - return this; + async addComment(comment): Promise { + await BrowserActions.clearSendKeys(this.commentField, comment); + await BrowserActions.click(this.addCommentButton); } - checkCommentIsDisplayed(comment) { - const row = element(by.cssContainingText('div[id="comment-message"]', comment)); - BrowserVisibility.waitUntilElementIsVisible(row); - return this; + async checkCommentIsDisplayed(comment): Promise { + const row: ElementFinder = element(by.cssContainingText('div[id="comment-message"]', comment)); + await BrowserVisibility.waitUntilElementIsVisible(row); } - clickInvolvePeopleButton() { - BrowserVisibility.waitUntilElementIsVisible(this.involvePeopleButton); - BrowserVisibility.waitUntilElementIsClickable(this.involvePeopleButton); - browser.actions().mouseMove(this.involvePeopleButton).perform(); - BrowserActions.click(this.involvePeopleButton); - return this; + async clickInvolvePeopleButton(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.involvePeopleButton); + await BrowserVisibility.waitUntilElementIsClickable(this.involvePeopleButton); + await browser.actions().mouseMove(this.involvePeopleButton).perform(); + await BrowserActions.click(this.involvePeopleButton); } - typeUser(user) { - BrowserVisibility.waitUntilElementIsVisible(this.addPeopleField); - this.addPeopleField.sendKeys(user); - return this; + async typeUser(user): Promise { + await BrowserActions.clearSendKeys(this.addPeopleField, user); } - selectUserToInvolve(user) { - this.getRowsUser(user).click(); - return this; + async selectUserToInvolve(user): Promise { + const row = this.getRowsUser(user); + await BrowserActions.click(row); } - checkUserIsSelected(user) { - const row = element(by.cssContainingText('div[class*="search-list-container"] div[class*="people-full-name"]', user)); - BrowserVisibility.waitUntilElementIsVisible(row); - return this; + async checkUserIsSelected(user): Promise { + const row: ElementFinder = element(by.cssContainingText('div[class*="search-list-container"] div[class*="people-full-name"]', user)); + await BrowserVisibility.waitUntilElementIsVisible(row); } - clickAddInvolvedUserButton() { - BrowserActions.click(this.addInvolvedUserButton); - return this; + async clickAddInvolvedUserButton(): Promise { + await BrowserActions.click(this.addInvolvedUserButton); } getRowsUser(user) { - const row = element(by.cssContainingText('div[class*="people-full-name"]', user)); - BrowserVisibility.waitUntilElementIsVisible(row); - return row; + return element(by.cssContainingText('div[class*="people-full-name"]', user)); } - removeInvolvedUser(user) { + async removeInvolvedUser(user): Promise { const row = this.getRowsUser(user).element(by.xpath('ancestor::div[contains(@class, "adf-datatable-row")]')); - BrowserVisibility.waitUntilElementIsVisible(row); - row.element(by.css('button[data-automation-id="action_menu_0"]')).click(); - BrowserVisibility.waitUntilElementIsVisible(this.removeInvolvedPeople); - return BrowserActions.click(this.removeInvolvedPeople); + await BrowserActions.click(row.element(by.css('button[data-automation-id="action_menu_0"]'))); + await BrowserVisibility.waitUntilElementIsVisible(this.removeInvolvedPeople); + await BrowserActions.click(this.removeInvolvedPeople); } - getInvolvedUserEmail(user) { - const email = this.getRowsUser(user).element(this.emailInvolvedUser); + async getInvolvedUserEmail(user): Promise { + const row = this.getRowsUser(user); + const email = row.element(this.emailInvolvedUser); return BrowserActions.getText(email); } - clickAuditLogButton() { - BrowserActions.click(this.auditLogButton); + async clickAuditLogButton(): Promise { + await BrowserActions.click(this.auditLogButton); } - appSettingsToggles() { + appSettingsToggles(): AppSettingsToggles { return this.appSettingsTogglesClass; } - taskInfoDrawerIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.taskDetailsInfoDrawer); + async taskInfoDrawerIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.taskDetailsInfoDrawer); } - taskInfoDrawerIsNotDisplayed() { - BrowserVisibility.waitUntilElementIsNotOnPage(this.taskDetailsInfoDrawer); + async taskInfoDrawerIsNotDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsNotVisible(this.taskDetailsInfoDrawer); } - checkNoPeopleIsInvolved() { - BrowserVisibility.waitUntilElementIsVisible(this.noPeopleInvolved); - return this; + async checkNoPeopleIsInvolved(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.noPeopleInvolved); } - clickCancelInvolvePeopleButton() { - BrowserActions.click(this.cancelInvolvePeopleButton); - return this; + async clickCancelInvolvePeopleButton(): Promise { + await BrowserActions.click(this.cancelInvolvePeopleButton); } - getInvolvePeopleHeader() { + getInvolvePeopleHeader(): Promise { return BrowserActions.getText(this.involvePeopleHeader); } - getInvolvePeoplePlaceholder() { - BrowserVisibility.waitUntilElementIsVisible(this.addPeopleField); + async getInvolvePeoplePlaceholder(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.addPeopleField); return this.addPeopleField.getAttribute('placeholder'); } - checkCancelButtonIsEnabled() { - BrowserVisibility.waitUntilElementIsVisible(this.cancelInvolvePeopleButton); - BrowserVisibility.waitUntilElementIsClickable(this.cancelInvolvePeopleButton); - return this; + async checkCancelButtonIsEnabled(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.cancelInvolvePeopleButton); + await BrowserVisibility.waitUntilElementIsClickable(this.cancelInvolvePeopleButton); } - checkAddPeopleButtonIsEnabled() { - BrowserVisibility.waitUntilElementIsVisible(this.addInvolvedUserButton); - BrowserVisibility.waitUntilElementIsClickable(this.addInvolvedUserButton); - return this; + async checkAddPeopleButtonIsEnabled(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.addInvolvedUserButton); + await BrowserVisibility.waitUntilElementIsClickable(this.addInvolvedUserButton); } - noUserIsDisplayedInSearchInvolvePeople(user) { - BrowserVisibility.waitUntilElementIsNotOnPage(element(by.cssContainingText('div[class*="people-full-name"]', user))); - return this; + async noUserIsDisplayedInSearchInvolvePeople(user): Promise { + await BrowserVisibility.waitUntilElementIsNotVisible(element(by.cssContainingText('div[class*="people-full-name"]', user))); } - getInvolvedPeopleTitle() { + getInvolvedPeopleTitle(): Promise { return BrowserActions.getText(this.peopleTitle); } - checkTaskDetailsEmpty() { + checkTaskDetailsEmpty(): Promise { return BrowserActions.getText(this.taskDetailsEmptySection); } - checkTaskDetailsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.taskDetailsSection); - BrowserVisibility.waitUntilElementIsVisible(this.formNameField); - BrowserVisibility.waitUntilElementIsVisible(this.assigneeField); - BrowserVisibility.waitUntilElementIsVisible(this.statusField); - BrowserVisibility.waitUntilElementIsVisible(this.categoryField); - BrowserVisibility.waitUntilElementIsVisible(this.parentNameField); - BrowserVisibility.waitUntilElementIsVisible(this.createdField); - BrowserVisibility.waitUntilElementIsVisible(this.idField); - BrowserVisibility.waitUntilElementIsVisible(this.descriptionField); - BrowserVisibility.waitUntilElementIsVisible(this.dueDateField); - BrowserVisibility.waitUntilElementIsVisible(this.activitiesTitle); + async checkTaskDetailsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.taskDetailsSection); + await BrowserVisibility.waitUntilElementIsVisible(this.formNameField); + await BrowserVisibility.waitUntilElementIsVisible(this.assigneeField); + await BrowserVisibility.waitUntilElementIsVisible(this.statusField); + await BrowserVisibility.waitUntilElementIsVisible(this.categoryField); + await BrowserVisibility.waitUntilElementIsVisible(this.parentNameField); + await BrowserVisibility.waitUntilElementIsVisible(this.createdField); + await BrowserVisibility.waitUntilElementIsVisible(this.idField); + await BrowserVisibility.waitUntilElementIsVisible(this.descriptionField); + await BrowserVisibility.waitUntilElementIsVisible(this.dueDateField); + await BrowserVisibility.waitUntilElementIsVisible(this.activitiesTitle); return BrowserActions.getText(this.taskDetailsSection); } - clickCompleteTask() { - return BrowserActions.click(this.completeTask); + async clickCompleteTask(): Promise { + await BrowserActions.click(this.completeTask); } - checkCompleteFormButtonIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.completeFormTask); - return this.completeFormTask; + async checkCompleteFormButtonIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.completeFormTask); } - checkCompleteTaskButtonIsEnabled() { - BrowserVisibility.waitUntilElementIsClickable(this.completeTask); - return this; + async checkCompleteTaskButtonIsEnabled(): Promise { + await BrowserVisibility.waitUntilElementIsClickable(this.completeTask); } - checkCompleteTaskButtonIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.completeTask); - return this; + async checkCompleteTaskButtonIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.completeTask); } - clickCompleteFormTask() { - return BrowserActions.click(this.completeFormTask); + async clickCompleteFormTask(): Promise { + await BrowserActions.click(this.completeFormTask); } - getEmptyTaskDetailsMessage() { + async getEmptyTaskDetailsMessage(): Promise { return BrowserActions.getText(this.emptyTaskDetails); } + async isCompleteButtonWithFormEnabled(): Promise { + return await this.completeFormTask.isEnabled(); + } + } diff --git a/e2e/pages/adf/process-services/taskFiltersPage.ts b/e2e/pages/adf/process-services/taskFiltersPage.ts index 78fd76c412..4dade52c98 100644 --- a/e2e/pages/adf/process-services/taskFiltersPage.ts +++ b/e2e/pages/adf/process-services/taskFiltersPage.ts @@ -15,41 +15,39 @@ * limitations under the License. */ -import { by } from 'protractor'; +import { by, ElementFinder, Locator } from 'protractor'; import { BrowserVisibility, BrowserActions } from '@alfresco/adf-testing'; export class TaskFiltersPage { filter; - taskIcon = by.xpath("ancestor::div[@class='mat-list-item-content']/mat-icon"); + taskIcon: Locator = by.xpath("ancestor::div[@class='mat-list-item-content']/mat-icon"); - constructor(filter) { + constructor(filter: ElementFinder) { this.filter = filter; } - checkTaskFilterIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.filter); - return this; + async checkTaskFilterIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.filter); } - getTaskFilterIcon() { - BrowserVisibility.waitUntilElementIsVisible(this.filter); + async getTaskFilterIcon(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.filter); const icon = this.filter.element(this.taskIcon); return BrowserActions.getText(icon); } - checkTaskFilterHasNoIcon() { - BrowserVisibility.waitUntilElementIsVisible(this.filter); - BrowserVisibility.waitUntilElementIsNotOnPage(this.filter.element(this.taskIcon)); + async checkTaskFilterHasNoIcon(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.filter); + await BrowserVisibility.waitUntilElementIsNotVisible(this.filter.element(this.taskIcon)); } - clickTaskFilter() { + async clickTaskFilter(): Promise { return BrowserActions.click(this.filter); } - checkTaskFilterNotDisplayed() { - BrowserVisibility.waitUntilElementIsNotVisible(this.filter); - return this.filter; + async checkTaskFilterNotDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsNotVisible(this.filter); } } diff --git a/e2e/pages/adf/process-services/tasksListPage.ts b/e2e/pages/adf/process-services/tasksListPage.ts index 9b9ee6bf13..6e4ec379e2 100644 --- a/e2e/pages/adf/process-services/tasksListPage.ts +++ b/e2e/pages/adf/process-services/tasksListPage.ts @@ -17,48 +17,47 @@ import { BrowserVisibility, BrowserActions } from '@alfresco/adf-testing'; import { DataTableComponentPage } from '@alfresco/adf-testing'; -import { by, element } from 'protractor'; +import { by, element, ElementFinder } from 'protractor'; export class TasksListPage { - taskList = element(by.css('adf-tasklist')); - noTasksFound = element.all(by.css("div[class='adf-empty-content__title']")).first(); - dataTable = new DataTableComponentPage(this.taskList); + taskList: ElementFinder = element(by.css('adf-tasklist')); + noTasksFound: ElementFinder = element.all(by.css("div[class='adf-empty-content__title']")).first(); + dataTable: DataTableComponentPage = new DataTableComponentPage(this.taskList); getDataTable() { return this.dataTable; } - getRowsDisplayedWithSameName(taskName) { + getRowsDisplayedWithSameName(taskName): Promise { return this.dataTable.getRowsWithSameColumnValues('Name', taskName); } - checkContentIsDisplayed(taskName) { + checkContentIsDisplayed(taskName): Promise { return this.dataTable.checkContentIsDisplayed('Name', taskName); } - checkContentIsNotDisplayed(taskName) { + checkContentIsNotDisplayed(taskName): Promise { return this.dataTable.checkContentIsNotDisplayed('Name', taskName); } - checkRowIsSelected(taskName) { + checkRowIsSelected(taskName): Promise { return this.dataTable.checkRowIsSelected('Name', taskName); } - selectRow(taskName) { + selectRow(taskName): Promise { return this.dataTable.selectRow('Name', taskName); } - getAllRowsNameColumn() { + getAllRowsNameColumn(): Promise { return this.dataTable.getAllRowsColumnValues('Name'); } - checkTaskListIsLoaded() { - BrowserVisibility.waitUntilElementIsVisible(this.taskList); - return this; + async checkTaskListIsLoaded(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.taskList); } - getNoTasksFoundMessage() { + getNoTasksFoundMessage(): Promise { return BrowserActions.getText(this.noTasksFound); } diff --git a/e2e/pages/adf/process-services/tasksPage.ts b/e2e/pages/adf/process-services/tasksPage.ts index d2be62ee67..9d2aae0e0d 100644 --- a/e2e/pages/adf/process-services/tasksPage.ts +++ b/e2e/pages/adf/process-services/tasksPage.ts @@ -21,141 +21,131 @@ import { TaskDetailsPage } from './taskDetailsPage'; import { FiltersPage } from './filtersPage'; import { ChecklistDialog } from './dialog/createChecklistDialog'; import { TasksListPage } from './tasksListPage'; -import { element, by } from 'protractor'; +import { element, by, ElementFinder } from 'protractor'; import { BrowserVisibility, BrowserActions, FormFields } from '@alfresco/adf-testing'; export class TasksPage { - createButton = element(by.css('button[data-automation-id="create-button"')); - newTaskButton = element(by.css('button[data-automation-id="btn-start-task"]')); - addChecklistButton = element(by.css('button[class*="adf-add-to-checklist-button"]')); + createButton: ElementFinder = element(by.css('button[data-automation-id="create-button"')); + newTaskButton: ElementFinder = element(by.css('button[data-automation-id="btn-start-task"]')); + addChecklistButton: ElementFinder = element(by.css('button[class*="adf-add-to-checklist-button"]')); rowByRowName = by.xpath('ancestor::mat-chip'); checklistContainer = by.css('div[class*="checklist-menu"]'); taskTitle = 'h2[class="adf-activiti-task-details__header"] span'; rows = by.css('div[class*="adf-datatable-body"] div[class*="adf-datatable-row"] div[class*="adf-datatable-cell"]'); - completeButtonNoForm = element(by.id('adf-no-form-complete-button')); - checklistDialog = element(by.id('checklist-dialog')); - checklistNoMessage = element(by.id('checklist-none-message')); - numberOfChecklists = element(by.css('[data-automation-id="checklist-label"] mat-chip')); + completeButtonNoForm: ElementFinder = element(by.id('adf-no-form-complete-button')); + checklistDialog: ElementFinder = element(by.id('checklist-dialog')); + checklistNoMessage: ElementFinder = element(by.id('checklist-none-message')); + numberOfChecklists: ElementFinder = element(by.css('[data-automation-id="checklist-label"] mat-chip')); sortByName = by.css('div[data-automation-id="auto_id_name"]'); - createNewTask() { - this.clickOnCreateButton(); - BrowserActions.click(this.newTaskButton); + async createNewTask(): Promise { + await this.clickOnCreateButton(); + await BrowserActions.clickExecuteScript('button[data-automation-id="btn-start-task"]'); return new StartTaskDialog(); } - newTaskButtonIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.newTaskButton); - return this; + async newTaskButtonIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.newTaskButton); } - clickOnCreateButton() { - BrowserActions.click(this.createButton); - return this; + async clickOnCreateButton(): Promise { + await BrowserActions.click(this.createButton); } - formFields() { + formFields(): FormFields { return new FormFields(); } - taskDetails() { + taskDetails(): TaskDetailsPage { return new TaskDetailsPage(); } - filtersPage() { + filtersPage(): FiltersPage { return new FiltersPage(); } - tasksListPage() { + tasksListPage(): TasksListPage { return new TasksListPage(); } - usingCheckListDialog() { + usingCheckListDialog(): ChecklistDialog { return new ChecklistDialog(); } - clickOnAddChecklistButton() { - BrowserActions.click(this.addChecklistButton); + async clickOnAddChecklistButton(): Promise { + await BrowserActions.click(this.addChecklistButton); return new ChecklistDialog(); } getRowsName(name) { - const row = element(this.checklistContainer).element(by.cssContainingText('span', name)); - BrowserVisibility.waitUntilElementIsVisible(row); + const row: ElementFinder = element(this.checklistContainer).element(by.cssContainingText('span', name)); return row; } getChecklistByName(checklist) { - const row = this.getRowsName(checklist).element(this.rowByRowName); - BrowserVisibility.waitUntilElementIsVisible(row); + const elem = this.getRowsName(checklist); + const row = elem.element(this.rowByRowName); return row; } - checkChecklistIsDisplayed(checklist) { - BrowserVisibility.waitUntilElementIsVisible(this.getChecklistByName(checklist)); - return this; + async checkChecklistIsDisplayed(checklist): Promise { + const checklistEle = this.getChecklistByName(checklist); + await BrowserVisibility.waitUntilElementIsVisible(checklistEle); } - checkChecklistIsNotDisplayed(checklist) { - BrowserVisibility.waitUntilElementIsNotOnPage(element(this.checklistContainer).element(by.cssContainingText('span', checklist))); - return this; + async checkChecklistIsNotDisplayed(checklist): Promise { + await BrowserVisibility.waitUntilElementIsNotVisible(element(this.checklistContainer).element(by.cssContainingText('span', checklist))); } - checkTaskTitle(taskName) { - BrowserVisibility.waitUntilElementIsVisible(element(by.css(this.taskTitle))); - const title = element(by.cssContainingText(this.taskTitle, taskName)); - BrowserVisibility.waitUntilElementIsVisible(title); - return this; + async checkTaskTitle(taskName): Promise { + await BrowserVisibility.waitUntilElementIsVisible(element(by.css(this.taskTitle))); + const title: ElementFinder = element(by.cssContainingText(this.taskTitle, taskName)); + await BrowserVisibility.waitUntilElementIsVisible(title); } - completeTaskNoForm() { - BrowserActions.click(this.completeButtonNoForm); + async completeTaskNoForm(): Promise { + await BrowserActions.click(this.completeButtonNoForm); } - completeTaskNoFormNotDisplayed() { - BrowserVisibility.waitUntilElementIsNotOnPage(this.completeButtonNoForm); - return this; + async completeTaskNoFormNotDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsNotVisible(this.completeButtonNoForm); } - checkChecklistDialogIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.checklistDialog); - return this; + async checkChecklistDialogIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.checklistDialog); } - checkChecklistDialogIsNotDisplayed() { - BrowserVisibility.waitUntilElementIsNotOnPage(this.checklistDialog); - return this; + async checkChecklistDialogIsNotDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsNotVisible(this.checklistDialog); } - checkNoChecklistIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.checklistNoMessage); - return this; + async checkNoChecklistIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.checklistNoMessage); } - getNumberOfChecklists() { + getNumberOfChecklists(): Promise { return BrowserActions.getText(this.numberOfChecklists); } - removeChecklists(checklist) { - const row = this.getRowsName(checklist).element(this.rowByRowName); - BrowserVisibility.waitUntilElementIsVisible(row.element(by.css('mat-icon'))); - row.element(by.css('mat-icon')).click(); - return this; + async removeChecklists(checklist): Promise { + const elem = this.getRowsName(checklist); + const row = elem.element(this.rowByRowName); + await BrowserActions.click(row.element(by.css('mat-icon'))); } - checkChecklistsRemoveButtonIsNotDisplayed(checklist) { - const row = this.getRowsName(checklist).element(this.rowByRowName); - BrowserVisibility.waitUntilElementIsNotOnPage(row.element(by.css('mat-icon'))); - return this; + async checkChecklistsRemoveButtonIsNotDisplayed(checklist): Promise { + const elem = this.getRowsName(checklist); + const row = elem.element(this.rowByRowName); + await BrowserVisibility.waitUntilElementIsNotVisible(row.element(by.css('mat-icon'))); } - clickSortByNameAsc() { - return this.tasksListPage().getDataTable().sortByColumn('ASC', 'name'); + async clickSortByNameAsc(): Promise { + return await this.tasksListPage().getDataTable().sortByColumn('ASC', 'name'); } - clickSortByNameDesc() { - return this.tasksListPage().getDataTable().sortByColumn('DESC', 'name'); + async clickSortByNameDesc(): Promise { + return await this.tasksListPage().getDataTable().sortByColumn('DESC', 'name'); } } diff --git a/e2e/pages/adf/searchFiltersPage.ts b/e2e/pages/adf/searchFiltersPage.ts index a2cef05b6d..1c06415920 100644 --- a/e2e/pages/adf/searchFiltersPage.ts +++ b/e2e/pages/adf/searchFiltersPage.ts @@ -15,280 +15,232 @@ * limitations under the License. */ -import { element, by } from 'protractor'; +import { element, by, ElementFinder } from 'protractor'; import { BrowserVisibility, SearchCategoriesPage } from '@alfresco/adf-testing'; +import { + SearchCheckListPage, + SearchTextPage, + NumberRangeFilterPage, + DateRangeFilterPage, + SearchSliderPage, + SearchRadioPage +} from '@alfresco/adf-testing'; export class SearchFiltersPage { - searchCategoriesPage = new SearchCategoriesPage(); + searchCategoriesPage: SearchCategoriesPage = new SearchCategoriesPage(); - searchFilters = element(by.css('adf-search-filter')); - fileTypeFilter = element(by.css('mat-expansion-panel[data-automation-id="expansion-panel-SEARCH.FACET_FIELDS.TYPE"]')); - creatorFilter = element(by.css('mat-expansion-panel[data-automation-id="expansion-panel-SEARCH.FACET_FIELDS.CREATOR"]')); - fileSizeFilter = element(by.css('mat-expansion-panel[data-automation-id="expansion-panel-SEARCH.FACET_FIELDS.SIZE"]')); - nameFilter = element(by.css('mat-expansion-panel[data-automation-id="expansion-panel-Name"]')); - checkListFilter = element(by.css('mat-expansion-panel[data-automation-id="expansion-panel-Check List"]')); - createdDateRangeFilter = element(by.css('mat-expansion-panel[data-automation-id="expansion-panel-Created Date (range)"]')); - typeFilter = element(by.css('mat-expansion-panel[data-automation-id="expansion-panel-Type"]')); - sizeRangeFilter = element(by.css('mat-expansion-panel[data-automation-id="expansion-panel-Content Size (range)"]')); - sizeSliderFilter = element(by.css('mat-expansion-panel[data-automation-id="expansion-panel-Content Size"]')); - facetQueriesDefaultGroup = element(by.css('mat-expansion-panel[data-automation-id="expansion-panel-SEARCH.FACET_QUERIES.MY_FACET_QUERIES"],' + + searchFilters: ElementFinder = element(by.css('adf-search-filter')); + fileTypeFilter: ElementFinder = element(by.css('mat-expansion-panel[data-automation-id="expansion-panel-SEARCH.FACET_FIELDS.TYPE"]')); + creatorFilter: ElementFinder = element(by.css('mat-expansion-panel[data-automation-id="expansion-panel-SEARCH.FACET_FIELDS.CREATOR"]')); + fileSizeFilter: ElementFinder = element(by.css('mat-expansion-panel[data-automation-id="expansion-panel-SEARCH.FACET_FIELDS.SIZE"]')); + nameFilter: ElementFinder = element(by.css('mat-expansion-panel[data-automation-id="expansion-panel-Name"]')); + checkListFilter: ElementFinder = element(by.css('mat-expansion-panel[data-automation-id="expansion-panel-Check List"]')); + createdDateRangeFilter: ElementFinder = element(by.css('mat-expansion-panel[data-automation-id="expansion-panel-Created Date (range)"]')); + typeFilter: ElementFinder = element(by.css('mat-expansion-panel[data-automation-id="expansion-panel-Type"]')); + sizeRangeFilter: ElementFinder = element(by.css('mat-expansion-panel[data-automation-id="expansion-panel-Content Size (range)"]')); + sizeSliderFilter: ElementFinder = element(by.css('mat-expansion-panel[data-automation-id="expansion-panel-Content Size"]')); + facetQueriesDefaultGroup: ElementFinder = element(by.css('mat-expansion-panel[data-automation-id="expansion-panel-SEARCH.FACET_QUERIES.MY_FACET_QUERIES"],' + 'mat-expansion-panel[data-automation-id="expansion-panel-My facet queries"]')); - facetQueriesTypeGroup = element(by.css('mat-expansion-panel[data-automation-id="expansion-panel-Type facet queries"]')); - facetQueriesSizeGroup = element(by.css('mat-expansion-panel[data-automation-id="expansion-panel-Size facet queries"]')); - facetIntervalsByCreated = element(by.css('mat-expansion-panel[data-automation-id="expansion-panel-The Created"]')); - facetIntervalsByModified = element(by.css('mat-expansion-panel[data-automation-id="expansion-panel-TheModified"]')); + facetQueriesTypeGroup: ElementFinder = element(by.css('mat-expansion-panel[data-automation-id="expansion-panel-Type facet queries"]')); + facetQueriesSizeGroup: ElementFinder = element(by.css('mat-expansion-panel[data-automation-id="expansion-panel-Size facet queries"]')); + facetIntervalsByCreated: ElementFinder = element(by.css('mat-expansion-panel[data-automation-id="expansion-panel-The Created"]')); + facetIntervalsByModified: ElementFinder = element(by.css('mat-expansion-panel[data-automation-id="expansion-panel-TheModified"]')); - checkSearchFiltersIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.searchFilters); + async checkSearchFiltersIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.searchFilters); } - sizeRangeFilterPage() { - return this.searchCategoriesPage.numberRangeFilter(this.sizeRangeFilter); + sizeRangeFilterPage(): NumberRangeFilterPage { + return SearchCategoriesPage.numberRangeFilter(this.sizeRangeFilter); } - createdDateRangeFilterPage() { - return this.searchCategoriesPage.dateRangeFilter(this.createdDateRangeFilter); + createdDateRangeFilterPage(): DateRangeFilterPage { + return SearchCategoriesPage.dateRangeFilter(this.createdDateRangeFilter); } - textFiltersPage() { - return this.searchCategoriesPage.textFiltersPage(this.nameFilter); + textFiltersPage(): SearchTextPage { + return SearchCategoriesPage.textFiltersPage(this.nameFilter); } - checkListFiltersPage() { - return this.searchCategoriesPage.checkListFiltersPage(this.checkListFilter); + checkListFiltersPage(): SearchCheckListPage { + return SearchCategoriesPage.checkListFiltersPage(this.checkListFilter); } - creatorCheckListFiltersPage() { - return this.searchCategoriesPage.checkListFiltersPage(this.creatorFilter); + creatorCheckListFiltersPage(): SearchCheckListPage { + return SearchCategoriesPage.checkListFiltersPage(this.creatorFilter); } - fileTypeCheckListFiltersPage() { - return this.searchCategoriesPage.checkListFiltersPage(this.fileTypeFilter); + fileTypeCheckListFiltersPage(): SearchCheckListPage { + return SearchCategoriesPage.checkListFiltersPage(this.fileTypeFilter); } - checkCustomFacetFieldLabelIsDisplayed(fieldLabel) { - BrowserVisibility.waitUntilElementIsVisible(element(by.css(`mat-expansion-panel[data-automation-id="expansion-panel-${fieldLabel}"]`))); + typeFiltersPage(): SearchRadioPage { + return SearchCategoriesPage.radioFiltersPage(this.typeFilter); } - sizeSliderFilterPage() { - return this.searchCategoriesPage.sliderFilter(this.sizeSliderFilter); + async checkCustomFacetFieldLabelIsDisplayed(fieldLabel): Promise { + await BrowserVisibility.waitUntilElementIsVisible(element(by.css(`mat-expansion-panel[data-automation-id="expansion-panel-${fieldLabel}"]`))); } - checkFileTypeFilterIsDisplayed() { - this.searchCategoriesPage.checkFilterIsDisplayed(this.fileTypeFilter); - return this; + sizeSliderFilterPage(): SearchSliderPage { + return SearchCategoriesPage.sliderFilter(this.sizeSliderFilter); } - checkCreatorFilterIsDisplayed() { - this.searchCategoriesPage.checkFilterIsDisplayed(this.creatorFilter); - return this; + async checkCheckListFilterIsDisplayed(): Promise { + await this.searchCategoriesPage.checkFilterIsDisplayed(this.checkListFilter); } - checkCheckListFilterIsDisplayed() { - this.searchCategoriesPage.checkFilterIsDisplayed(this.checkListFilter); - return this; + async checkNameFilterIsExpanded(): Promise { + await this.searchCategoriesPage.checkFilterIsExpanded(this.nameFilter); } - checkNameFilterIsExpanded() { - this.searchCategoriesPage.checkFilterIsExpanded(this.nameFilter); - return this; + async checkNameFilterIsDisplayed(): Promise { + await this.searchCategoriesPage.checkFilterIsDisplayed(this.nameFilter); } - checkNameFilterIsDisplayed() { - this.searchCategoriesPage.checkFilterIsDisplayed(this.nameFilter); - return this; + async checkDefaultFacetQueryGroupIsDisplayed(): Promise { + await this.searchCategoriesPage.checkFilterIsDisplayed(this.facetQueriesDefaultGroup); } - checkDefaultFacetQueryGroupIsDisplayed() { - this.searchCategoriesPage.checkFilterIsDisplayed(this.facetQueriesDefaultGroup); - return this; + async checkTypeFacetQueryGroupIsDisplayed(): Promise { + await this.searchCategoriesPage.checkFilterIsDisplayed(this.facetQueriesTypeGroup); } - checkTypeFacetQueryGroupIsDisplayed() { - this.searchCategoriesPage.checkFilterIsDisplayed(this.facetQueriesTypeGroup); - return this; + async checkSizeFacetQueryGroupIsDisplayed(): Promise { + await this.searchCategoriesPage.checkFilterIsDisplayed(this.facetQueriesSizeGroup); } - checkSizeFacetQueryGroupIsDisplayed() { - this.searchCategoriesPage.checkFilterIsDisplayed(this.facetQueriesSizeGroup); - return this; + async checkFacetIntervalsByCreatedIsDisplayed(): Promise { + await this.searchCategoriesPage.checkFilterIsDisplayed(this.facetIntervalsByCreated); } - checkFacetIntervalsByCreatedIsDisplayed() { - this.searchCategoriesPage.checkFilterIsDisplayed(this.facetIntervalsByCreated); - return this; + async checkFacetIntervalsByModifiedIsDisplayed(): Promise { + await this.searchCategoriesPage.checkFilterIsDisplayed(this.facetIntervalsByModified); } - checkFacetIntervalsByModifiedIsDisplayed() { - this.searchCategoriesPage.checkFilterIsDisplayed(this.facetIntervalsByModified); - return this; + async isTypeFacetQueryGroupPresent(): Promise { + return await this.facetQueriesTypeGroup.isPresent(); } - isTypeFacetQueryGroupPresent() { - return this.facetQueriesTypeGroup.isPresent(); + async isSizeFacetQueryGroupPresent(): Promise { + return await this.facetQueriesSizeGroup.isPresent(); } - isSizeFacetQueryGroupPresent() { - return this.facetQueriesSizeGroup.isPresent(); + async clickCheckListFilter(): Promise { + await this.searchCategoriesPage.clickFilter(this.checkListFilter); } - clickCheckListFilter() { - this.searchCategoriesPage.clickFilter(this.checkListFilter); - return this; + async clickFileTypeListFilter(): Promise { + await this.searchCategoriesPage.clickFilter(this.fileTypeFilter); } - clickFileTypeListFilter() { - this.searchCategoriesPage.clickFilter(this.fileTypeFilter); - return this; + async clickFileSizeFilterHeader(): Promise { + await this.searchCategoriesPage.clickFilterHeader(this.fileSizeFilter); } - clickFileSizeFilterHeader() { - this.searchCategoriesPage.clickFilterHeader(this.fileSizeFilter); - return this; + async checkFileSizeFilterIsCollapsed(): Promise { + await this.searchCategoriesPage.checkFilterIsCollapsed(this.fileSizeFilter); } - checkFileSizeFilterIsCollapsed() { - this.searchCategoriesPage.checkFilterIsCollapsed(this.fileSizeFilter); - return this; + async checkFileTypeFilterIsCollapsed(): Promise { + await this.searchCategoriesPage.checkFilterIsCollapsed(this.fileTypeFilter); } - clickFileTypeFilterHeader() { - this.searchCategoriesPage.clickFilterHeader(this.fileTypeFilter); - return this; + async checkCheckListFilterIsCollapsed(): Promise { + await this.searchCategoriesPage.checkFilterIsCollapsed(this.checkListFilter); } - checkFileTypeFilterIsCollapsed() { - this.searchCategoriesPage.checkFilterIsCollapsed(this.fileTypeFilter); - return this; + async checkCheckListFilterIsExpanded(): Promise { + await this.searchCategoriesPage.checkFilterIsExpanded(this.checkListFilter); } - checkCheckListFilterIsCollapsed() { - this.searchCategoriesPage.checkFilterIsCollapsed(this.checkListFilter); + async checkCreatedRangeFilterIsDisplayed(): Promise { + await this.searchCategoriesPage.checkFilterIsDisplayed(this.createdDateRangeFilter); } - checkCheckListFilterIsExpanded() { - this.searchCategoriesPage.checkFilterIsExpanded(this.checkListFilter); - return this; + async clickCreatedRangeFilterHeader(): Promise { + await this.searchCategoriesPage.clickFilterHeader(this.createdDateRangeFilter); } - checkCreatedRangeFilterIsDisplayed() { - this.searchCategoriesPage.checkFilterIsDisplayed(this.createdDateRangeFilter); - return this; + async checkCreatedRangeFilterIsExpanded(): Promise { + await this.searchCategoriesPage.checkFilterIsExpanded(this.createdDateRangeFilter); } - clickCreatedRangeFilterHeader() { - this.searchCategoriesPage.clickFilterHeader(this.createdDateRangeFilter); - return this; + async checkTypeFilterIsDisplayed(): Promise { + await this.searchCategoriesPage.checkFilterIsDisplayed(this.typeFilter); } - checkCreatedRangeFilterIsExpanded() { - this.searchCategoriesPage.checkFilterIsExpanded(this.createdDateRangeFilter); - return this; + async checkTypeFilterIsCollapsed(): Promise { + await this.searchCategoriesPage.checkFilterIsCollapsed(this.typeFilter); } - typeFiltersPage() { - return this.searchCategoriesPage.radioFiltersPage(this.typeFilter); + async clickTypeFilterHeader(): Promise { + await this.searchCategoriesPage.clickFilterHeader(this.typeFilter); } - checkTypeFilterIsDisplayed() { - this.searchCategoriesPage.checkFilterIsDisplayed(this.typeFilter); - return this; + async checkSizeRangeFilterIsDisplayed(): Promise { + await this.searchCategoriesPage.checkFilterIsDisplayed(this.createdDateRangeFilter); } - clickTypeFilter() { - this.searchCategoriesPage.clickFilter(this.typeFilter); - return this; + async clickSizeRangeFilterHeader(): Promise { + await this.searchCategoriesPage.clickFilterHeader(this.sizeRangeFilter); } - checkTypeFilterIsCollapsed() { - this.searchCategoriesPage.checkFilterIsCollapsed(this.typeFilter); - return this; + async checkSizeRangeFilterIsExpanded(): Promise { + await this.searchCategoriesPage.checkFilterIsExpanded(this.sizeRangeFilter); } - clickTypeFilterHeader() { - this.searchCategoriesPage.clickFilterHeader(this.typeFilter); - return this; + async checkSizeRangeFilterIsCollapsed(): Promise { + await this.searchCategoriesPage.checkFilterIsCollapsed(this.sizeRangeFilter); } - checkSizeRangeFilterIsDisplayed() { - this.searchCategoriesPage.checkFilterIsDisplayed(this.createdDateRangeFilter); - return this; + async checkSizeSliderFilterIsDisplayed(): Promise { + await this.searchCategoriesPage.checkFilterIsDisplayed(this.sizeSliderFilter); } - clickSizeRangeFilterHeader() { - this.searchCategoriesPage.clickFilterHeader(this.sizeRangeFilter); - return this; + async clickSizeSliderFilterHeader(): Promise { + await this.searchCategoriesPage.clickFilterHeader(this.sizeSliderFilter); } - checkSizeRangeFilterIsExpanded() { - this.searchCategoriesPage.checkFilterIsExpanded(this.sizeRangeFilter); - return this; + async checkSizeSliderFilterIsExpanded(): Promise { + await this.searchCategoriesPage.checkFilterIsExpanded(this.sizeSliderFilter); } - checkSizeRangeFilterIsCollapsed() { - this.searchCategoriesPage.checkFilterIsCollapsed(this.sizeRangeFilter); - return this; + async checkSizeSliderFilterIsCollapsed(): Promise { + await this.searchCategoriesPage.checkFilterIsCollapsed(this.sizeSliderFilter); } - checkSizeSliderFilterIsDisplayed() { - this.searchCategoriesPage.checkFilterIsDisplayed(this.sizeSliderFilter); - return this; + async checkFacetIntervalsByCreatedIsExpanded(): Promise { + await this.searchCategoriesPage.checkFilterIsExpanded(this.facetIntervalsByCreated); } - clickSizeSliderFilterHeader() { - this.searchCategoriesPage.clickFilterHeader(this.sizeSliderFilter); - return this; + async checkFacetIntervalsByCreatedIsCollapsed(): Promise { + await this.searchCategoriesPage.checkFilterIsCollapsed(this.facetIntervalsByCreated); } - checkSizeSliderFilterIsExpanded() { - this.searchCategoriesPage.checkFilterIsExpanded(this.sizeSliderFilter); - return this; + async clickFacetIntervalsByCreatedFilterHeader(): Promise { + await this.searchCategoriesPage.clickFilterHeader(this.facetIntervalsByCreated); } - checkSizeSliderFilterIsCollapsed() { - this.searchCategoriesPage.checkFilterIsCollapsed(this.sizeSliderFilter); - return this; + async checkFacetIntervalsByModifiedIsExpanded(): Promise { + await this.searchCategoriesPage.checkFilterIsExpanded(this.facetIntervalsByModified); } - checkFacetIntervalsByCreatedIsExpanded() { - this.searchCategoriesPage.checkFilterIsExpanded(this.facetIntervalsByCreated); - return this; + async checkFacetIntervalsByModifiedIsCollapsed(): Promise { + await this.searchCategoriesPage.checkFilterIsCollapsed(this.facetIntervalsByModified); } - checkFacetIntervalsByCreatedIsCollapsed() { - this.searchCategoriesPage.checkFilterIsCollapsed(this.facetIntervalsByCreated); - return this; + async clickFacetIntervalsByModifiedFilterHeader(): Promise { + await this.searchCategoriesPage.clickFilterHeader(this.facetIntervalsByModified); } - clickFacetIntervalsByCreatedFilterHeader() { - this.searchCategoriesPage.clickFilterHeader(this.facetIntervalsByCreated); - return this; + async checkFileTypeFacetLabelIsDisplayed(fileType: string | RegExp): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.fileTypeFilter.element(by.cssContainingText('.adf-facet-label', fileType))); } - checkFacetIntervalsByModifiedIsExpanded() { - this.searchCategoriesPage.checkFilterIsExpanded(this.facetIntervalsByModified); - return this; - } - - checkFacetIntervalsByModifiedIsCollapsed() { - this.searchCategoriesPage.checkFilterIsCollapsed(this.facetIntervalsByModified); - return this; - } - - clickFacetIntervalsByModifiedFilterHeader() { - this.searchCategoriesPage.clickFilterHeader(this.facetIntervalsByModified); - return this; - } - - checkFileTypeFacetLabelIsDisplayed(fileType: string | RegExp) { - BrowserVisibility.waitUntilElementIsVisible(this.fileTypeFilter.element(by.cssContainingText('.adf-facet-label', fileType))); - return this; - } - - checkFileTypeFacetLabelIsNotDisplayed(fileType: string | RegExp) { - BrowserVisibility.waitUntilElementIsNotVisible(this.fileTypeFilter.element(by.cssContainingText('.adf-facet-label', fileType))); - return this; + async checkFileTypeFacetLabelIsNotDisplayed(fileType: string | RegExp): Promise { + await BrowserVisibility.waitUntilElementIsNotVisible(this.fileTypeFilter.element(by.cssContainingText('.adf-facet-label', fileType))); } } diff --git a/e2e/pages/adf/searchResultsPage.ts b/e2e/pages/adf/searchResultsPage.ts index a29f76831f..671ac58a53 100644 --- a/e2e/pages/adf/searchResultsPage.ts +++ b/e2e/pages/adf/searchResultsPage.ts @@ -16,85 +16,75 @@ */ import { DataTableComponentPage } from '@alfresco/adf-testing'; -import { element, by } from 'protractor'; +import { element, by, ElementFinder } from 'protractor'; import { ContentServicesPage } from './contentServicesPage'; import { BrowserVisibility, SearchSortingPickerPage } from '@alfresco/adf-testing'; export class SearchResultsPage { - noResultsMessage = element(by.css('div[class="adf-no-result-message"]')); - dataTable = new DataTableComponentPage(); - searchSortingPicker = new SearchSortingPickerPage(); - contentServices = new ContentServicesPage(); + noResultsMessage: ElementFinder = element(by.css('div[class="adf-no-result-message"]')); + dataTable: DataTableComponentPage = new DataTableComponentPage(); + searchSortingPicker: SearchSortingPickerPage = new SearchSortingPickerPage(); + contentServices: ContentServicesPage = new ContentServicesPage(); getNodeHighlight(content) { return this.dataTable.getCellByRowContentAndColumn('Display name', content, 'Search'); } - tableIsLoaded() { - this.dataTable.tableIsLoaded(); + async tableIsLoaded(): Promise { + await this.dataTable.tableIsLoaded(); } - checkContentIsDisplayed(content) { - this.dataTable.checkContentIsDisplayed('Display name', content); - return this; + async checkContentIsDisplayed(content): Promise { + await this.dataTable.checkContentIsDisplayed('Display name', content); } - numberOfResultsDisplayed() { - return this.dataTable.numberOfRows(); + async numberOfResultsDisplayed(): Promise { + return await this.dataTable.numberOfRows(); } - checkContentIsNotDisplayed(content) { - this.dataTable.checkContentIsNotDisplayed('Display name', content); - return this; + async checkContentIsNotDisplayed(content): Promise { + await this.dataTable.checkContentIsNotDisplayed('Display name', content); } - checkNoResultMessageIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.noResultsMessage); - return this; + async checkNoResultMessageIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.noResultsMessage); } - checkNoResultMessageIsNotDisplayed() { - BrowserVisibility.waitUntilElementIsNotOnPage(this.noResultsMessage); - return this; + async checkNoResultMessageIsNotDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsNotVisible(this.noResultsMessage); } - navigateToFolder(content) { - this.dataTable.doubleClickRow('Display name', content); - return this; + async navigateToFolder(content): Promise { + await this.dataTable.doubleClickRow('Display name', content); } - deleteContent(content) { - this.contentServices.deleteContent(content); + async deleteContent(content): Promise { + await this.contentServices.deleteContent(content); } - sortByName(sortOrder: string) { - this.searchSortingPicker.sortBy(sortOrder, 'Name'); + async sortByName(sortOrder: string): Promise { + await this.searchSortingPicker.sortBy(sortOrder, 'Name'); } - sortByAuthor(sortOrder: string) { - this.searchSortingPicker.sortBy(sortOrder, 'Author'); + async sortByAuthor(sortOrder: string): Promise { + await this.searchSortingPicker.sortBy(sortOrder, 'Author'); } - sortByCreated(sortOrder: string) { - this.searchSortingPicker.sortBy(sortOrder, 'Created'); + async sortByCreated(sortOrder: string): Promise { + await this.searchSortingPicker.sortBy(sortOrder, 'Created'); } - sortBySize(sortOrder: string) { - this.searchSortingPicker.sortBy(sortOrder, 'Size'); - return this; + async sortBySize(sortOrder: string): Promise { + await this.searchSortingPicker.sortBy(sortOrder, 'Size'); } - async checkListIsOrderedByNameAsc() { + async checkListIsOrderedByNameAsc(): Promise { return this.contentServices.contentList.dataTablePage().checkListIsSorted('ASC', 'Display name'); } - async checkListIsOrderedByNameDesc() { + async checkListIsOrderedByNameDesc(): Promise { return this.contentServices.contentList.dataTablePage().checkListIsSorted('DESC', 'Display name'); } - async checkListIsOrderedByAuthorAsc() { - return this.contentServices.contentList.dataTablePage().checkListIsSorted('ASC', 'Created by'); - } - } diff --git a/e2e/pages/adf/tagPage.ts b/e2e/pages/adf/tagPage.ts index 439c8c0528..7e3e39f56e 100644 --- a/e2e/pages/adf/tagPage.ts +++ b/e2e/pages/adf/tagPage.ts @@ -15,220 +15,196 @@ * limitations under the License. */ -import { element, by, protractor, browser } from 'protractor'; +import { element, by, protractor, browser, ElementFinder, ElementArrayFinder } from 'protractor'; import { BrowserVisibility, BrowserActions } from '@alfresco/adf-testing'; export class TagPage { - addTagButton = element(by.css('button[id="add-tag"]')); - insertNodeIdElement = element(by.css('input[id="nodeId"]')); - newTagInput = element(by.css('input[id="new-tag-text"]')); - tagListRow = element(by.css('adf-tag-node-actions-list mat-list-item')); - tagListByNodeIdRow = element(by.css('adf-tag-node-list mat-chip')); - errorMessage = element(by.css('mat-hint[data-automation-id="errorMessage"]')); + addTagButton: ElementFinder = element(by.css('button[id="add-tag"]')); + insertNodeIdElement: ElementFinder = element(by.css('input[id="nodeId"]')); + newTagInput: ElementFinder = element(by.css('input[id="new-tag-text"]')); + tagListRow: ElementFinder = element(by.css('adf-tag-node-actions-list mat-list-item')); + tagListByNodeIdRow: ElementFinder = element(by.css('adf-tag-node-list mat-chip')); + errorMessage: ElementFinder = element(by.css('mat-hint[data-automation-id="errorMessage"]')); tagListRowLocator = by.css('adf-tag-node-actions-list mat-list-item div'); tagListByNodeIdRowLocator = by.css('adf-tag-node-list mat-chip span'); tagListContentServicesRowLocator = by.css('div[class*="adf-list-tag"]'); - showDeleteButton = element(by.id('adf-remove-button-tag')); - showMoreButton = element(by.css('button[data-automation-id="show-more-tags"]')); - showLessButton = element(by.css('button[data-automation-id="show-fewer-tags"]')); - tagsOnPage = element.all(by.css('div[class*="adf-list-tag"]')); - confirmTag = element(by.id('adf-tag-node-send')); + showDeleteButton: ElementFinder = element(by.id('adf-remove-button-tag')); + showMoreButton: ElementFinder = element(by.css('button[data-automation-id="show-more-tags"]')); + showLessButton: ElementFinder = element(by.css('button[data-automation-id="show-fewer-tags"]')); + tagsOnPage: ElementArrayFinder = element.all(by.css('div[class*="adf-list-tag"]')); + confirmTag: ElementFinder = element(by.id('adf-tag-node-send')); - getNodeId() { - BrowserVisibility.waitUntilElementIsVisible(this.insertNodeIdElement); - return this.insertNodeIdElement.getAttribute('value'); + async getNodeId(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.insertNodeIdElement); + return await this.insertNodeIdElement.getAttribute('value'); } - insertNodeId(nodeId) { - BrowserActions.clearSendKeys(this.insertNodeIdElement, nodeId); + async insertNodeId(nodeId) { + await BrowserActions.clearSendKeys(this.insertNodeIdElement, nodeId); - browser.driver.sleep(200); - this.insertNodeIdElement.sendKeys(' '); - browser.driver.sleep(200); - this.insertNodeIdElement.sendKeys(protractor.Key.BACK_SPACE); - this.clickConfirmTag(); + await browser.sleep(200); + await this.insertNodeIdElement.sendKeys(' '); + await browser.sleep(200); + await this.insertNodeIdElement.sendKeys(protractor.Key.BACK_SPACE); + await this.clickConfirmTag(); } - addNewTagInput(tag) { - BrowserVisibility.waitUntilElementIsVisible(this.newTagInput); - BrowserActions.clearSendKeys(this.newTagInput, tag); - return this; + async addNewTagInput(tag) { + await BrowserVisibility.waitUntilElementIsVisible(this.newTagInput); + await BrowserActions.clearSendKeys(this.newTagInput, tag); } - addTag(tag) { - this.addNewTagInput(tag); - BrowserActions.click(this.addTagButton); - return this; + async addTag(tag): Promise { + await this.addNewTagInput(tag); + await BrowserActions.click(this.addTagButton); } - deleteTagFromTagListByNodeId(name) { - const deleteChip = element(by.id('tag_chips_delete_' + name)); - BrowserActions.click(deleteChip); - return this; + async deleteTagFromTagListByNodeId(name): Promise { + const deleteChip: ElementFinder = element(by.id('tag_chips_delete_' + name)); + await BrowserActions.click(deleteChip); } - deleteTagFromTagList(name) { - const deleteChip = element(by.id('tag_chips_delete_' + name)); - BrowserActions.click(deleteChip); - return this; + async deleteTagFromTagList(name): Promise { + const deleteChip: ElementFinder = element(by.id('tag_chips_delete_' + name)); + await BrowserActions.click(deleteChip); } - getNewTagInput() { - BrowserVisibility.waitUntilElementIsVisible(this.newTagInput); - return this.newTagInput.getAttribute('value'); + async getNewTagInput(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.newTagInput); + return await this.newTagInput.getAttribute('value'); } - getNewTagPlaceholder() { - BrowserVisibility.waitUntilElementIsVisible(this.newTagInput); - return this.newTagInput.getAttribute('placeholder'); + async getNewTagPlaceholder(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.newTagInput); + return await this.newTagInput.getAttribute('placeholder'); } - addTagButtonIsEnabled() { - BrowserVisibility.waitUntilElementIsVisible(this.addTagButton); - return this.addTagButton.isEnabled(); + async addTagButtonIsEnabled(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.addTagButton); + return await this.addTagButton.isEnabled(); } - checkTagIsDisplayedInTagList(tagName) { - const tag = element(by.cssContainingText('div[id*="tag_name"]', tagName)); - return BrowserVisibility.waitUntilElementIsVisible(tag); + async checkTagIsDisplayedInTagList(tagName): Promise { + const tag: ElementFinder = element(by.cssContainingText('div[id*="tag_name"]', tagName)); + await BrowserVisibility.waitUntilElementIsVisible(tag); } - checkTagIsNotDisplayedInTagList(tagName) { - const tag = element(by.cssContainingText('div[id*="tag_name"]', tagName)); - return BrowserVisibility.waitUntilElementIsNotOnPage(tag); + async checkTagIsNotDisplayedInTagList(tagName): Promise { + const tag: ElementFinder = element(by.cssContainingText('div[id*="tag_name"]', tagName)); + await BrowserVisibility.waitUntilElementIsNotVisible(tag); } - checkTagIsNotDisplayedInTagListByNodeId(tagName) { - const tag = element(by.cssContainingText('span[id*="tag_name"]', tagName)); - return BrowserVisibility.waitUntilElementIsNotOnPage(tag); + async checkTagIsNotDisplayedInTagListByNodeId(tagName): Promise { + const tag: ElementFinder = element(by.cssContainingText('span[id*="tag_name"]', tagName)); + await BrowserVisibility.waitUntilElementIsNotVisible(tag); } - checkTagIsDisplayedInTagListByNodeId(tagName) { - const tag = element(by.cssContainingText('span[id*="tag_name"]', tagName)); - return BrowserVisibility.waitUntilElementIsVisible(tag); + async checkTagIsDisplayedInTagListByNodeId(tagName): Promise { + const tag: ElementFinder = element(by.cssContainingText('span[id*="tag_name"]', tagName)); + await BrowserVisibility.waitUntilElementIsVisible(tag); } - checkTagListIsEmpty() { - BrowserVisibility.waitUntilElementIsNotOnPage(this.tagListRow); + async checkTagListIsEmpty(): Promise { + await BrowserVisibility.waitUntilElementIsNotVisible(this.tagListRow); } - checkTagListByNodeIdIsEmpty() { - return BrowserVisibility.waitUntilElementIsNotOnPage(this.tagListByNodeIdRow); + async checkTagListByNodeIdIsEmpty(): Promise { + await BrowserVisibility.waitUntilElementIsNotVisible(this.tagListByNodeIdRow); } - checkTagIsDisplayedInTagListContentServices(tagName) { - const tag = element(by.cssContainingText('div[class="adf-list-tag"][id*="tag_name"]', tagName)); - return BrowserVisibility.waitUntilElementIsVisible(tag); + async checkTagIsDisplayedInTagListContentServices(tagName): Promise { + const tag: ElementFinder = element(by.cssContainingText('div[class="adf-list-tag"][id*="tag_name"]', tagName)); + await BrowserVisibility.waitUntilElementIsVisible(tag); } - getErrorMessage() { - return BrowserActions.getText(this.errorMessage); + async getErrorMessage(): Promise { + return await BrowserActions.getText(this.errorMessage); } - checkTagListIsOrderedAscending() { - const deferred = protractor.promise.defer(); - this.checkListIsSorted(false, this.tagListRowLocator).then((result) => { - deferred.fulfill(result); - }); - return deferred.promise; + async checkTagListIsOrderedAscending(): Promise { + await this.checkListIsSorted(false, this.tagListRowLocator); } - checkTagListByNodeIdIsOrderedAscending() { - const deferred = protractor.promise.defer(); - this.checkListIsSorted(false, this.tagListByNodeIdRowLocator).then((result) => { - deferred.fulfill(result); - }); - return deferred.promise; + async checkTagListByNodeIdIsOrderedAscending(): Promise { + await this.checkListIsSorted(false, this.tagListByNodeIdRowLocator); } - checkTagListContentServicesIsOrderedAscending() { - const deferred = protractor.promise.defer(); - this.checkListIsSorted(false, this.tagListContentServicesRowLocator).then((result) => { - deferred.fulfill(result); - }); - return deferred.promise; + async checkTagListContentServicesIsOrderedAscending(): Promise { + await this.checkListIsSorted(false, this.tagListContentServicesRowLocator); } - checkListIsSorted(sortOrder, locator) { - const deferred = protractor.promise.defer(); - const tagList = element.all(locator); - BrowserVisibility.waitUntilElementIsVisible(tagList.first()); + async checkListIsSorted(sortOrder, locator): Promise { + const tagList: ElementArrayFinder = element.all(locator); + await BrowserVisibility.waitUntilElementIsVisible(tagList.first()); const initialList = []; - tagList.each(function (currentElement) { - currentElement.getText().then(function (text) { - initialList.push(text); - }); - }).then(function () { - let sortedList = initialList; - sortedList = sortedList.sort(); - if (sortOrder === false) { - sortedList = sortedList.reverse(); - } - deferred.fulfill(initialList.toString() === sortedList.toString()); + await tagList.each(async (currentElement) => { + const text = await BrowserActions.getText(currentElement); + initialList.push(text); }); - return deferred.promise; + let sortedList = initialList; + sortedList = sortedList.sort(); + if (sortOrder === false) { + sortedList = sortedList.reverse(); + } + return initialList.toString() === sortedList.toString(); } - checkDeleteTagFromTagListByNodeIdIsDisplayed(name) { - const deleteChip = element(by.id('tag_chips_delete_' + name)); - return BrowserVisibility.waitUntilElementIsVisible(deleteChip); + async checkDeleteTagFromTagListByNodeIdIsDisplayed(name): Promise { + const deleteChip: ElementFinder = element(by.id('tag_chips_delete_' + name)); + await BrowserVisibility.waitUntilElementIsVisible(deleteChip); } - checkDeleteTagFromTagListByNodeIdIsNotDisplayed(name) { - const deleteChip = element(by.id('tag_chips_delete_' + name)); - return BrowserVisibility.waitUntilElementIsNotVisible(deleteChip); + async checkDeleteTagFromTagListByNodeIdIsNotDisplayed(name): Promise { + const deleteChip: ElementFinder = element(by.id('tag_chips_delete_' + name)); + await BrowserVisibility.waitUntilElementIsNotVisible(deleteChip); } - clickShowDeleteButtonSwitch() { - BrowserActions.click(this.showDeleteButton); + async clickShowDeleteButtonSwitch(): Promise { + await BrowserActions.click(this.showDeleteButton); } - checkShowMoreButtonIsDisplayed() { - return BrowserVisibility.waitUntilElementIsVisible(this.showMoreButton); + async checkShowMoreButtonIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.showMoreButton); } - clickShowMoreButton() { - return BrowserActions.click(this.showMoreButton); + async clickShowMoreButton(): Promise { + await BrowserActions.click(this.showMoreButton); } - clickShowLessButton() { - return BrowserActions.click(this.showLessButton); + async clickShowLessButton(): Promise { + await BrowserActions.click(this.showLessButton); } - clickConfirmTag() { - return BrowserActions.click(this.confirmTag); + async clickConfirmTag(): Promise { + await BrowserActions.click(this.confirmTag); } - checkTagsOnList() { - return this.tagsOnPage.count(); + async checkTagsOnList(): Promise { + return await this.tagsOnPage.count(); } - checkShowLessButtonIsDisplayed() { - return BrowserVisibility.waitUntilElementIsVisible(this.showLessButton); + async checkShowLessButtonIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.showLessButton); } - checkShowLessButtonIsNotDisplayed() { - return BrowserVisibility.waitUntilElementIsNotVisible(this.showLessButton); + async checkShowLessButtonIsNotDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsNotVisible(this.showLessButton); } - clickShowMoreButtonUntilNotDisplayed() { - this.showMoreButton.isDisplayed().then((visible) => { - if (visible) { - BrowserActions.click(this.showMoreButton); - this.clickShowMoreButtonUntilNotDisplayed(); - } - }, () => { - }); + async clickShowMoreButtonUntilNotDisplayed(): Promise { + const visible = await this.showMoreButton.isDisplayed(); + if (visible) { + await BrowserActions.click(this.showMoreButton); + await this.clickShowMoreButtonUntilNotDisplayed(); + } } - clickShowLessButtonUntilNotDisplayed() { - this.showLessButton.isDisplayed().then((visible) => { - if (visible) { - BrowserActions.click(this.showLessButton); - this.clickShowLessButtonUntilNotDisplayed(); - } - }, () => { - }); + async clickShowLessButtonUntilNotDisplayed(): Promise { + const visible = await this.showLessButton.isDisplayed(); + if (visible) { + await BrowserActions.click(this.showLessButton); + await this.clickShowLessButtonUntilNotDisplayed(); + } } } diff --git a/e2e/pages/adf/trashcanPage.ts b/e2e/pages/adf/trashcanPage.ts index f0ee5f23eb..9c1a183e26 100644 --- a/e2e/pages/adf/trashcanPage.ts +++ b/e2e/pages/adf/trashcanPage.ts @@ -17,50 +17,47 @@ import { BrowserActions, BrowserVisibility, DocumentListPage } from '@alfresco/adf-testing'; -import { element, by } from 'protractor'; +import { element, by, ElementFinder, Locator } from 'protractor'; export class TrashcanPage { - contentList = new DocumentListPage(element(by.css('adf-document-list'))); - rows = by.css('adf-document-list div[class*="adf-datatable-body"] div[class*="adf-datatable-row"]'); - tableBody = element.all(by.css('adf-document-list div[class="adf-datatable-body"]')).first(); - pagination = element(by.css('adf-pagination')); - emptyTrashcan = element(by.css('adf-empty-content')); - restoreButton = element(by.css(`button[title='Restore']`)); + contentList: DocumentListPage = new DocumentListPage(element(by.css('adf-document-list'))); + rows: Locator = by.css('adf-document-list div[class*="adf-datatable-body"] div[class*="adf-datatable-row"]'); + tableBody: ElementFinder = element.all(by.css('adf-document-list div[class="adf-datatable-body"]')).first(); + pagination: ElementFinder = element(by.css('adf-pagination')); + emptyTrashcan: ElementFinder = element(by.css('adf-empty-content')); + restoreButton: ElementFinder = element(by.css(`button[title='Restore']`)); - numberOfResultsDisplayed() { - return element.all(this.rows).count(); + async numberOfResultsDisplayed(): Promise { + return await element.all(this.rows).count(); } - waitForTableBody() { - BrowserVisibility.waitUntilElementIsVisible(this.tableBody); + async waitForTableBody(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.tableBody); } - waitForPagination() { - BrowserVisibility.waitUntilElementIsVisible(this.pagination); + async waitForPagination(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.pagination); } - checkTrashcanIsEmpty() { - BrowserVisibility.waitUntilElementIsVisible(this.emptyTrashcan); + async checkTrashcanIsEmpty(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.emptyTrashcan); } - getDocumentList() { + getDocumentList(): DocumentListPage { return this.contentList; } - clickRestore() { - BrowserActions.click(this.restoreButton); - return this; + async clickRestore(): Promise { + await BrowserActions.click(this.restoreButton); } - checkRestoreButtonIsNotDisplayed() { - BrowserVisibility.waitUntilElementIsNotVisible(this.restoreButton); - return this; + async checkRestoreButtonIsNotDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsNotVisible(this.restoreButton); } - checkRestoreButtonIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.restoreButton); - return this; + async checkRestoreButtonIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.restoreButton); } } diff --git a/e2e/pages/adf/versionManagerPage.ts b/e2e/pages/adf/versionManagerPage.ts index d71b03bace..f50b63e5f3 100644 --- a/e2e/pages/adf/versionManagerPage.ts +++ b/e2e/pages/adf/versionManagerPage.ts @@ -16,190 +16,172 @@ */ import path = require('path'); -import remote = require('selenium-webdriver/remote'); -import { browser, by, element } from 'protractor'; +import { browser, by, element, ElementFinder } from 'protractor'; import { FormControllersPage } from '@alfresco/adf-testing'; import { BrowserVisibility, BrowserActions } from '@alfresco/adf-testing'; export class VersionManagePage { - formControllersPage = new FormControllersPage(); + formControllersPage: FormControllersPage = new FormControllersPage(); - showNewVersionButton = element(by.id('adf-show-version-upload-button')); - uploadNewVersionButton = element(by.css('adf-upload-version-button input[data-automation-id="upload-single-file"]')); - uploadNewVersionContainer = element(by.id('adf-new-version-uploader-container')); - cancelButton = element(by.id('adf-new-version-cancel')); - majorRadio = element(by.id('adf-new-version-major')); - minorRadio = element(by.id('adf-new-version-minor')); - commentText = element(by.id('adf-new-version-text-area')); - readOnlySwitch = element(by.id('adf-version-manager-switch-readonly')); - downloadSwitch = element(by.id('adf-version-manager-switch-download')); - commentsSwitch = element(by.id('adf-version-manager-switch-comments')); + showNewVersionButton: ElementFinder = element(by.id('adf-show-version-upload-button')); + uploadNewVersionInput: ElementFinder = element(by.css('adf-upload-version-button input[data-automation-id="upload-single-file"]')); + uploadNewVersionButton: ElementFinder = element(by.css('adf-upload-version-button')); + uploadNewVersionContainer: ElementFinder = element(by.id('adf-new-version-uploader-container')); + cancelButton: ElementFinder = element(by.id('adf-new-version-cancel')); + majorRadio: ElementFinder = element(by.id('adf-new-version-major')); + minorRadio: ElementFinder = element(by.id('adf-new-version-minor')); + commentText: ElementFinder = element(by.id('adf-new-version-text-area')); + readOnlySwitch: ElementFinder = element(by.id('adf-version-manager-switch-readonly')); + downloadSwitch: ElementFinder = element(by.id('adf-version-manager-switch-download')); + commentsSwitch: ElementFinder = element(by.id('adf-version-manager-switch-comments')); - checkUploadNewVersionsButtonIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.showNewVersionButton); - return this; + async checkUploadNewVersionsButtonIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.showNewVersionButton); } - checkCancelButtonIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.cancelButton); - return this; + async checkCancelButtonIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.cancelButton); } - uploadNewVersionFile(fileLocation) { - browser.setFileDetector(new remote.FileDetector()); - BrowserVisibility.waitUntilElementIsVisible(this.uploadNewVersionButton); - this.uploadNewVersionButton.sendKeys(path.resolve(path.join(browser.params.testConfig.main.rootPath, fileLocation))); - BrowserVisibility.waitUntilElementIsVisible(this.showNewVersionButton); - return this; + async uploadNewVersionFile(fileLocation): Promise { + await BrowserVisibility.waitUntilElementIsPresent(this.uploadNewVersionInput); + await this.uploadNewVersionInput.sendKeys(path.resolve(path.join(browser.params.testConfig.main.rootPath, fileLocation))); + await BrowserVisibility.waitUntilElementIsVisible(this.showNewVersionButton); } - getFileVersionName(version) { - const fileElement = element(by.css(`[id="adf-version-list-item-name-${version}"]`)); - return BrowserActions.getText(fileElement); + async getFileVersionName(version): Promise { + const fileElement: ElementFinder = element(by.css(`[id="adf-version-list-item-name-${version}"]`)); + return await BrowserActions.getText(fileElement); } - checkFileVersionExist(version) { - const fileVersion = element(by.id(`adf-version-list-item-version-${version}`)); - return BrowserVisibility.waitUntilElementIsVisible(fileVersion); + async checkFileVersionExist(version): Promise { + const fileVersion: ElementFinder = element(by.id(`adf-version-list-item-version-${version}`)); + await BrowserVisibility.waitUntilElementIsVisible(fileVersion); } - checkFileVersionNotExist(version) { - const fileVersion = element(by.id(`adf-version-list-item-version-${version}`)); - return BrowserVisibility.waitUntilElementIsNotVisible(fileVersion); + async checkFileVersionNotExist(version): Promise { + const fileVersion: ElementFinder = element(by.id(`adf-version-list-item-version-${version}`)); + await BrowserVisibility.waitUntilElementIsNotVisible(fileVersion); } - getFileVersionComment(version) { - const fileComment = element(by.id(`adf-version-list-item-comment-${version}`)); - return BrowserActions.getText(fileComment); + async getFileVersionComment(version): Promise { + const fileComment: ElementFinder = element(by.id(`adf-version-list-item-comment-${version}`)); + return await BrowserActions.getText(fileComment); } - getFileVersionDate(version) { - const fileDate = element(by.id(`adf-version-list-item-date-${version}`)); - return BrowserActions.getText(fileDate); + async getFileVersionDate(version): Promise { + const fileDate: ElementFinder = element(by.id(`adf-version-list-item-date-${version}`)); + return await BrowserActions.getText(fileDate); } - enterCommentText(text) { - BrowserActions.clearSendKeys(this.commentText, text); - - return this; + async enterCommentText(text): Promise { + await BrowserActions.clearSendKeys(this.commentText, text); } - clickMajorChange() { - const radioMajor = element(by.id(`adf-new-version-major`)); - BrowserActions.click(radioMajor); + async clickMajorChange(): Promise { + const radioMajor: ElementFinder = element(by.id(`adf-new-version-major`)); + await BrowserActions.click(radioMajor); } - clickMinorChange() { - const radioMinor = element(by.id(`adf-new-version-minor`)); - BrowserActions.click(radioMinor); + async clickMinorChange(): Promise { + const radioMinor: ElementFinder = element(by.id(`adf-new-version-minor`)); + await BrowserActions.click(radioMinor); } /** * disables readOnly */ - disableReadOnly() { - this.formControllersPage.disableToggle(this.readOnlySwitch); + async disableReadOnly(): Promise { + await this.formControllersPage.disableToggle(this.readOnlySwitch); } /** * enables readOnly */ - enableReadOnly() { - this.formControllersPage.enableToggle(this.readOnlySwitch); + async enableReadOnly(): Promise { + await this.formControllersPage.enableToggle(this.readOnlySwitch); } /** * disables download */ - disableDownload() { - this.formControllersPage.disableToggle(this.downloadSwitch); + async disableDownload(): Promise { + await this.formControllersPage.disableToggle(this.downloadSwitch); } /** * enables download */ - enableDownload() { - this.formControllersPage.enableToggle(this.downloadSwitch); + async enableDownload(): Promise { + await this.formControllersPage.enableToggle(this.downloadSwitch); } /** * * disables comments */ - disableComments() { - this.formControllersPage.disableToggle(this.commentsSwitch); + async disableComments(): Promise { + await this.formControllersPage.disableToggle(this.commentsSwitch); } /** * enables comments */ - enableComments() { - this.formControllersPage.enableToggle(this.commentsSwitch); + async enableComments(): Promise { + await this.formControllersPage.enableToggle(this.commentsSwitch); } - clickActionButton(version) { - BrowserActions.click(element(by.id(`adf-version-list-action-menu-button-${version}`))); - return this; + async clickActionButton(version): Promise { + await BrowserActions.click(element(by.id(`adf-version-list-action-menu-button-${version}`))); + await BrowserVisibility.waitUntilElementIsVisible(element(by.css('.cdk-overlay-container .mat-menu-content'))); } - clickAcceptConfirm() { - BrowserActions.click(element(by.id(`adf-confirm-accept`))); - return this; + async clickAcceptConfirm(): Promise { + await BrowserActions.click(element(by.id(`adf-confirm-accept`))); } - clickCancelConfirm() { - BrowserActions.click(element(by.id(`adf-confirm-cancel`))); - return this; + async clickCancelConfirm(): Promise { + await BrowserActions.click(element(by.id(`adf-confirm-cancel`))); } - closeActionsMenu() { - const container = element(by.css('div.cdk-overlay-backdrop.cdk-overlay-transparent-backdrop.cdk-overlay-backdrop-showing')); - BrowserActions.closeMenuAndDialogs(); - BrowserVisibility.waitUntilElementIsNotVisible(container); - return this; + async closeActionsMenu(): Promise { + await BrowserActions.closeMenuAndDialogs(); } - closeDisabledActionsMenu() { - const container = element(by.css('div.cdk-overlay-backdrop.cdk-overlay-transparent-backdrop.cdk-overlay-backdrop-showing')); - BrowserActions.closeDisabledMenu(); - BrowserVisibility.waitUntilElementIsNotVisible(container); - return this; + async closeDisabledActionsMenu(): Promise { + const container: ElementFinder = element(by.css('div.cdk-overlay-backdrop.cdk-overlay-transparent-backdrop.cdk-overlay-backdrop-showing')); + await BrowserActions.closeDisabledMenu(); + await BrowserVisibility.waitUntilElementIsNotVisible(container); } - downloadFileVersion(version) { - this.clickActionButton(version); - const downloadButton = element(by.id(`adf-version-list-action-download-${version}`)); - browser.driver.sleep(500); - BrowserActions.click(downloadButton); - return this; + async downloadFileVersion(version): Promise { + await this.clickActionButton(version); + const downloadButton: ElementFinder = element(by.id(`adf-version-list-action-download-${version}`)); + await BrowserActions.click(downloadButton); + await BrowserVisibility.waitUntilElementIsNotVisible(downloadButton); } - deleteFileVersion(version) { - this.clickActionButton(version); - const deleteButton = element(by.id(`adf-version-list-action-delete-${version}`)); - browser.driver.sleep(500); - BrowserActions.click(deleteButton); - return this; + async deleteFileVersion(version): Promise { + await this.clickActionButton(version); + const deleteButton: ElementFinder = element(by.id(`adf-version-list-action-delete-${version}`)); + await BrowserActions.click(deleteButton); } - restoreFileVersion(version) { - this.clickActionButton(version); - const restoreButton = element(by.id(`adf-version-list-action-restore-${version}`)); - BrowserVisibility.waitUntilElementIsVisible(restoreButton); - browser.driver.sleep(500); - BrowserActions.click(restoreButton); - return this; + async restoreFileVersion(version): Promise { + await this.clickActionButton(version); + const restoreButton: ElementFinder = element(by.id(`adf-version-list-action-restore-${version}`)); + await BrowserActions.click(restoreButton); } - checkActionsArePresent(version) { - BrowserVisibility.waitUntilElementIsVisible(element(by.id(`adf-version-list-action-download-${version}`))); - BrowserVisibility.waitUntilElementIsVisible(element(by.id(`adf-version-list-action-delete-${version}`))); - BrowserVisibility.waitUntilElementIsVisible(element(by.id(`adf-version-list-action-restore-${version}`))); + async checkActionsArePresent(version): Promise { + await BrowserVisibility.waitUntilElementIsVisible(element(by.id(`adf-version-list-action-download-${version}`))); + await BrowserVisibility.waitUntilElementIsVisible(element(by.id(`adf-version-list-action-delete-${version}`))); + await BrowserVisibility.waitUntilElementIsVisible(element(by.id(`adf-version-list-action-restore-${version}`))); } - closeVersionDialog() { - BrowserActions.closeMenuAndDialogs(); - BrowserVisibility.waitUntilElementIsNotOnPage(this.uploadNewVersionContainer); + async closeVersionDialog(): Promise { + await BrowserActions.closeMenuAndDialogs(); + await BrowserVisibility.waitUntilElementIsNotVisible(this.uploadNewVersionContainer); } } diff --git a/e2e/pages/adf/viewerPage.ts b/e2e/pages/adf/viewerPage.ts index 233f68ec04..223613454a 100644 --- a/e2e/pages/adf/viewerPage.ts +++ b/e2e/pages/adf/viewerPage.ts @@ -15,666 +15,619 @@ * limitations under the License. */ -import { TabsPage } from '@alfresco/adf-testing'; -import { FormControllersPage } from '@alfresco/adf-testing'; -import { element, by, browser, protractor } from 'protractor'; -import { BrowserVisibility, BrowserActions } from '@alfresco/adf-testing'; +import { TabsPage, FormControllersPage, BrowserVisibility, BrowserActions } from '@alfresco/adf-testing'; +import { element, by, browser, protractor, ElementFinder } from 'protractor'; export class ViewerPage { - tabsPage = new TabsPage(); - formControllersPage = new FormControllersPage(); + tabsPage: TabsPage = new TabsPage(); + formControllersPage: FormControllersPage = new FormControllersPage(); - closeButton = element(by.css('button[data-automation-id="adf-toolbar-back"]')); - fileName = element(by.id('adf-viewer-display-name')); - infoButton = element(by.css('button[data-automation-id="adf-toolbar-sidebar"]')); - leftSideBarButton = element(by.css('button[data-automation-id="adf-toolbar-left-sidebar"]')); - previousPageButton = element(by.id('viewer-previous-page-button')); - nextPageButton = element(by.id('viewer-next-page-button')); - zoomInButton = element(by.id('viewer-zoom-in-button')); - zoomOutButton = element(by.id('viewer-zoom-out-button')); - scalePageButton = element(by.id('viewer-scale-page-button')); - fullScreenButton = element(by.css('button[data-automation-id="adf-toolbar-fullscreen"]')); - rotateLeft = element(by.css('button[id="viewer-rotate-left-button"]')); - rotateRight = element(by.css('button[id="viewer-rotate-right-button"]')); - scaleImg = element(by.css('button[id="viewer-reset-button"]')); - fileThumbnail = element(by.css('img[data-automation-id="adf-file-thumbnail"]')); - pageSelectorInput = element(by.css('input[data-automation-id="adf-page-selector"]')); - imgContainer = element(by.css('div[data-automation-id="adf-image-container"]')); - mediaContainer = element(by.css('adf-media-player[class="adf-media-player ng-star-inserted"]')); - percentage = element(by.css('div[data-automation-id="adf-page-scale"')); - thumbnailsBtn = element(by.css('button[data-automation-id="adf-thumbnails-button"]')); - thumbnailsContent = element(by.css('div[data-automation-id="adf-thumbnails-content"]')); - thumbnailsClose = element(by.css('button[data-automation-id="adf-thumbnails-close"]')); - secondThumbnail = element(by.css('adf-pdf-thumb > img[title="Page 2"')); - lastThumbnailDisplayed = element.all(by.css('adf-pdf-thumb')).last(); - passwordDialog = element(by.css('adf-pdf-viewer-password-dialog')); - passwordSubmit = element(by.css('button[data-automation-id="adf-password-dialog-submit"]')); - passwordDialogClose = element(by.css('button[data-automation-id="adf-password-dialog-close"]')); - passwordSubmitDisabled = element(by.css('button[data-automation-id="adf-password-dialog-submit"][disabled]')); - passwordInput = element(by.css('input[data-automation-id="adf-password-dialog-input"]')); - passwordError = element(by.css('mat-error[data-automation-id="adf-password-dialog-error"]')); - infoSideBar = element(by.id('adf-right-sidebar')); - leftSideBar = element(by.id('adf-left-sidebar')); - viewer = element(by.css('adf-viewer')); - pdfViewer = element(by.css('adf-pdf-viewer')); - imgViewer = element(by.css('adf-img-viewer')); - activeTab = element(by.css('div[class*="mat-tab-label-active"]')); - toolbarSwitch = element(by.id('adf-switch-toolbar')); - toolbar = element(by.id('adf-viewer-toolbar')); - lastButton = element.all(by.css('#adf-viewer-toolbar mat-toolbar > button[data-automation-id*="adf-toolbar-"]')).last(); - goBackSwitch = element(by.id('adf-switch-goback')); - canvasLayer = element.all(by.css('div[class="canvasWrapper"] > canvas')).first(); + closeButton: ElementFinder = element(by.css('button[data-automation-id="adf-toolbar-back"]')); + fileName: ElementFinder = element(by.id('adf-viewer-display-name')); + infoButton: ElementFinder = element(by.css('button[data-automation-id="adf-toolbar-sidebar"]')); + leftSideBarButton: ElementFinder = element(by.css('button[data-automation-id="adf-toolbar-left-sidebar"]')); + previousPageButton: ElementFinder = element(by.id('viewer-previous-page-button')); + nextPageButton: ElementFinder = element(by.id('viewer-next-page-button')); + zoomInButton: ElementFinder = element(by.id('viewer-zoom-in-button')); + zoomOutButton: ElementFinder = element(by.id('viewer-zoom-out-button')); + scalePageButton: ElementFinder = element(by.id('viewer-scale-page-button')); + fullScreenButton: ElementFinder = element(by.css('button[data-automation-id="adf-toolbar-fullscreen"]')); + rotateLeft: ElementFinder = element(by.css('button[id="viewer-rotate-left-button"]')); + rotateRight: ElementFinder = element(by.css('button[id="viewer-rotate-right-button"]')); + scaleImg: ElementFinder = element(by.css('button[id="viewer-reset-button"]')); + fileThumbnail: ElementFinder = element(by.css('img[data-automation-id="adf-file-thumbnail"]')); + pageSelectorInput: ElementFinder = element(by.css('input[data-automation-id="adf-page-selector"]')); + imgContainer: ElementFinder = element(by.css('div[data-automation-id="adf-image-container"]')); + mediaContainer: ElementFinder = element(by.css('adf-media-player[class="adf-media-player ng-star-inserted"]')); + percentage: ElementFinder = element(by.css('div[data-automation-id="adf-page-scale"')); + thumbnailsBtn: ElementFinder = element(by.css('button[data-automation-id="adf-thumbnails-button"]')); + thumbnailsContent: ElementFinder = element(by.css('div[data-automation-id="adf-thumbnails-content"]')); + thumbnailsClose: ElementFinder = element(by.css('button[data-automation-id="adf-thumbnails-close"]')); + secondThumbnail: ElementFinder = element(by.css('adf-pdf-thumb > img[title="Page 2"')); + lastThumbnailDisplayed: ElementFinder = element.all(by.css('adf-pdf-thumb')).last(); + passwordDialog: ElementFinder = element(by.css('adf-pdf-viewer-password-dialog')); + passwordSubmit: ElementFinder = element(by.css('button[data-automation-id="adf-password-dialog-submit"]')); + passwordDialogClose: ElementFinder = element(by.css('button[data-automation-id="adf-password-dialog-close"]')); + passwordSubmitDisabled: ElementFinder = element(by.css('button[data-automation-id="adf-password-dialog-submit"][disabled]')); + passwordInput: ElementFinder = element(by.css('input[data-automation-id="adf-password-dialog-input"]')); + passwordError: ElementFinder = element(by.css('mat-error[data-automation-id="adf-password-dialog-error"]')); + infoSideBar: ElementFinder = element(by.id('adf-right-sidebar')); + leftSideBar: ElementFinder = element(by.id('adf-left-sidebar')); + viewer: ElementFinder = element(by.css('adf-viewer')); + pdfViewer: ElementFinder = element(by.css('adf-pdf-viewer')); + imgViewer: ElementFinder = element(by.css('adf-img-viewer')); + activeTab: ElementFinder = element(by.css('div[class*="mat-tab-label-active"]')); + toolbarSwitch: ElementFinder = element(by.id('adf-switch-toolbar')); + toolbar: ElementFinder = element(by.id('adf-viewer-toolbar')); + lastButton: ElementFinder = element.all(by.css('#adf-viewer-toolbar mat-toolbar > button[data-automation-id*="adf-toolbar-"]')).last(); + goBackSwitch: ElementFinder = element(by.id('adf-switch-goback')); + canvasLayer: ElementFinder = element.all(by.css('div[class="canvasWrapper"] > canvas')).first(); - openWithSwitch = element(by.id('adf-switch-openwith')); - openWith = element(by.id('adf-viewer-openwith')); + openWithSwitch: ElementFinder = element(by.id('adf-switch-openwith')); + openWith: ElementFinder = element(by.id('adf-viewer-openwith')); - moreActionsMenuSwitch = element(by.id('adf-switch-moreactionsmenu')); - moreActionsMenu = element(by.css('button[data-automation-id="adf-toolbar-more-actions"]')); + moreActionsMenuSwitch: ElementFinder = element(by.id('adf-switch-moreactionsmenu')); + moreActionsMenu: ElementFinder = element(by.css('button[data-automation-id="adf-toolbar-more-actions"]')); - customNameSwitch = element(by.id('adf-switch-custoname')); - customToolbarToggle = element(by.id('adf-toggle-custom-toolbar')); - customToolbar = element(by.css('adf-viewer-toolbar[data-automation-id="adf-viewer-custom-toolbar"]')); + customNameSwitch: ElementFinder = element(by.id('adf-switch-custoname')); + customToolbarToggle: ElementFinder = element(by.id('adf-toggle-custom-toolbar')); + customToolbar: ElementFinder = element(by.css('adf-viewer-toolbar[data-automation-id="adf-viewer-custom-toolbar"]')); - showRightSidebarSwitch = element(by.id('adf-switch-showrightsidebar')); - showLeftSidebarSwitch = element(by.id('adf-switch-showleftsidebar')); + showRightSidebarSwitch: ElementFinder = element(by.id('adf-switch-showrightsidebar')); + showLeftSidebarSwitch: ElementFinder = element(by.id('adf-switch-showleftsidebar')); - moreActionsSwitch = element(by.id('adf-switch-moreactions')); - pdfPageLoaded = element(by.css('[data-page-number="1"][data-loaded="true"], adf-img-viewer, adf-txt-viewer')); + moreActionsSwitch: ElementFinder = element(by.id('adf-switch-moreactions')); + pdfPageLoaded: ElementFinder = element(by.css('[data-page-number="1"][data-loaded="true"], adf-img-viewer, adf-txt-viewer')); - downloadSwitch = element(by.id('adf-switch-download')); - downloadButton = element(by.id('adf-viewer-download')); + downloadSwitch: ElementFinder = element(by.id('adf-switch-download')); + downloadButton: ElementFinder = element(by.id('adf-viewer-download')); - printSwitch = element(by.id('adf-switch-print')); - printButton = element(by.id('adf-viewer-print')); + printSwitch: ElementFinder = element(by.id('adf-switch-print')); + printButton: ElementFinder = element(by.id('adf-viewer-print')); - allowSidebarSwitch = element(by.id('adf-switch-allowsidebar')); - allowLeftSidebarSwitch = element(by.id('adf-switch-allowLeftSidebar')); + allowSidebarSwitch: ElementFinder = element(by.id('adf-switch-allowsidebar')); + allowLeftSidebarSwitch: ElementFinder = element(by.id('adf-switch-allowLeftSidebar')); - uploadButton = element(by.id('adf-viewer-upload')); - timeButton = element(by.id('adf-viewer-time')); - bugButton = element(by.id('adf-viewer-bug')); + uploadButton: ElementFinder = element(by.id('adf-viewer-upload')); + timeButton: ElementFinder = element(by.id('adf-viewer-time')); + bugButton: ElementFinder = element(by.id('adf-viewer-bug')); - codeViewer = element(by.id('adf-monaco-file-editor')); - moveRightChevron = element(by.css('.mat-tab-header-pagination-after .mat-tab-header-pagination-chevron')); + codeViewer: ElementFinder = element(by.id('adf-monaco-file-editor')); - showTabWithIconSwitch = element(by.id('adf-tab-with-icon')); - showTabWithIconAndLabelSwitch = element(by.id('adf-icon-and-label-tab')); - unknownFormat = element(by.css(`adf-viewer-unknown-format .adf-viewer__unknown-format-view`)); + showTabWithIconSwitch: ElementFinder = element(by.id('adf-tab-with-icon')); + showTabWithIconAndLabelSwitch: ElementFinder = element(by.id('adf-icon-and-label-tab')); + unknownFormat: ElementFinder = element(by.css(`adf-viewer-unknown-format .adf-viewer__unknown-format-view`)); - checkCodeViewerIsDisplayed() { - return BrowserVisibility.waitUntilElementIsVisible(this.codeViewer); + async checkCodeViewerIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.codeViewer); } - viewFile(fileName) { - BrowserActions.closeMenuAndDialogs(); - const fileView = element.all(by.css(`#document-list-container div[data-automation-id="${fileName}"]`)).first(); - BrowserActions.click(fileView); - browser.actions().sendKeys(protractor.Key.ENTER).perform(); + async viewFile(fileName): Promise { + const fileView: ElementFinder = element.all(by.css(`#document-list-container div[data-automation-id="${fileName}"]`)).first(); + await BrowserActions.click(fileView); + await browser.actions().sendKeys(protractor.Key.ENTER).perform(); } - clearPageNumber() { - BrowserVisibility.waitUntilElementIsVisible(this.pageSelectorInput); - this.pageSelectorInput.clear(); - this.pageSelectorInput.sendKeys(protractor.Key.ENTER); + async clearPageNumber(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.pageSelectorInput); + await BrowserActions.clearSendKeys(this.pageSelectorInput, protractor.Key.ENTER); } - getZoom() { - return BrowserActions.getText(this.percentage); + async getZoom(): Promise { + return await BrowserActions.getText(this.percentage); } - getCanvasWidth() { - return this.canvasLayer.getAttribute(`width`); + async getCanvasWidth(): Promise { + return await this.canvasLayer.getAttribute(`width`); } - getCanvasHeight() { - return this.canvasLayer.getAttribute(`height`); + async getCanvasHeight(): Promise { + return await this.canvasLayer.getAttribute(`height`); } - getDisplayedFileName() { - BrowserVisibility.waitUntilElementIsVisible(this.fileName); - return this.fileName.getText(); + async getDisplayedFileName(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.fileName); + return await BrowserActions.getText(this.fileName); } - exitFullScreen() { + async exitFullScreen(): Promise { const jsCode = 'document.exitFullscreen?document.exitFullscreen():document.webkitExitFullscreen&&document.webkitExitFullscreen();'; - browser.executeScript(jsCode); + await browser.executeScript(jsCode); } - enterPassword(password) { - BrowserVisibility.waitUntilElementIsVisible(this.passwordInput); - this.passwordInput.clear(); - this.passwordInput.sendKeys(password); + async enterPassword(password): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.passwordInput); + await BrowserActions.clearSendKeys(this.passwordInput, password); } - checkFileIsLoaded(fileName?: string) { - BrowserVisibility.waitUntilElementIsVisible(this.pdfPageLoaded, 30000, `not loaded ${fileName}`); + async checkFileIsLoaded(fileName?: string): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.pdfPageLoaded, 30000, `${fileName} not loaded`); } - clickClosePasswordDialog() { - BrowserVisibility.waitUntilElementIsVisible(this.passwordDialogClose); - this.passwordDialogClose.click(); + async clickClosePasswordDialog(): Promise { + await BrowserActions.click(this.passwordDialogClose); } - checkImgViewerIsDisplayed() { - BrowserVisibility.waitUntilElementIsOnPage(this.imgViewer); + async checkImgViewerIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.imgViewer); } - checkPasswordErrorIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.passwordError); + async checkPasswordErrorIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.passwordError); } - checkPasswordInputIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.passwordInput); + async checkPasswordInputIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.passwordInput); } - checkPasswordSubmitDisabledIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.passwordSubmitDisabled); + async checkPasswordSubmitDisabledIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.passwordSubmitDisabled); } - checkPasswordDialogIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.passwordDialog); + async checkPasswordDialogIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.passwordDialog); } - checkAllThumbnailsDisplayed(nbPages) { + async checkAllThumbnailsDisplayed(nbPages): Promise { const defaultThumbnailHeight = 143; - expect(this.thumbnailsContent.getAttribute('style')).toEqual('height: ' + nbPages * defaultThumbnailHeight + 'px; transform: translate(-50%, 0px);'); + await expect(await this.thumbnailsContent.getAttribute('style')).toEqual('height: ' + nbPages * defaultThumbnailHeight + 'px; transform: translate(-50%, 0px);'); } - checkCurrentThumbnailIsSelected() { - const selectedThumbnail = element(by.css('adf-pdf-thumb[class="adf-pdf-thumbnails__thumb ng-star-inserted adf-pdf-thumbnails__thumb--selected"] > img')); - this.pageSelectorInput.getAttribute('value').then((pageNumber) => { - browser.controlFlow().execute(async () => { - expect('Page ' + pageNumber).toEqual(await selectedThumbnail.getAttribute('title')); - }); - }); + async checkCurrentThumbnailIsSelected(): Promise { + const selectedThumbnail: ElementFinder = element(by.css('adf-pdf-thumb[class="adf-pdf-thumbnails__thumb ng-star-inserted adf-pdf-thumbnails__thumb--selected"] > img')); + const pageNumber = await this.pageSelectorInput.getAttribute('value'); + + await expect('Page ' + pageNumber).toEqual(await selectedThumbnail.getAttribute('title')); } - checkThumbnailsCloseIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.thumbnailsClose); + async checkThumbnailsCloseIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.thumbnailsClose); } - checkThumbnailsBtnIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.thumbnailsBtn); + async checkThumbnailsBtnIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.thumbnailsBtn); } - checkThumbnailsBtnIsDisabled() { - BrowserVisibility.waitUntilElementIsVisible(element(by.css('button[data-automation-id="adf-thumbnails-button"]:disabled'))); - return this; + async checkThumbnailsBtnIsDisabled(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(element(by.css('button[data-automation-id="adf-thumbnails-button"]:disabled'))); } - checkThumbnailsContentIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.thumbnailsContent); + async checkThumbnailsContentIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.thumbnailsContent); } - checkThumbnailsContentIsNotDisplayed() { - BrowserVisibility.waitUntilElementIsNotVisible(this.thumbnailsContent); + async checkThumbnailsContentIsNotDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsNotVisible(this.thumbnailsContent); } - checkCloseButtonIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.closeButton); + async checkCloseButtonIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.closeButton); } - getLastButtonTitle() { - return this.lastButton.getAttribute('title'); + async getLastButtonTitle(): Promise { + return await this.lastButton.getAttribute('title'); } - getMoreActionsMenuTitle() { - return this.moreActionsMenu.getAttribute('title'); + async getMoreActionsMenuTitle(): Promise { + return await this.moreActionsMenu.getAttribute('title'); } - checkDownloadButtonIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.downloadButton); + async checkDownloadButtonIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.downloadButton); } - checkInfoButtonIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.infoButton); + async checkInfoButtonIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.infoButton); } - checkInfoButtonIsNotDisplayed() { - BrowserVisibility.waitUntilElementIsNotVisible(this.infoButton); + async checkInfoButtonIsNotDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsNotVisible(this.infoButton); } - checkFileThumbnailIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.fileThumbnail); + async checkFileThumbnailIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.fileThumbnail); } - checkFileNameIsDisplayed(file) { - BrowserVisibility.waitUntilElementIsVisible(this.fileName); - expect(this.fileName.getText()).toEqual(file); + async checkFileNameIsDisplayed(file): Promise { + await expect(await BrowserActions.getText(this.fileName)).toEqual(file); } - checkPreviousPageButtonIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.previousPageButton); + async checkPreviousPageButtonIsDisplayed() { + await BrowserVisibility.waitUntilElementIsVisible(this.previousPageButton); } - checkNextPageButtonIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.nextPageButton); + async checkNextPageButtonIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.nextPageButton); } - checkZoomInButtonIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.zoomInButton); + async checkZoomInButtonIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.zoomInButton); } - checkZoomInButtonIsNotDisplayed() { - BrowserVisibility.waitUntilElementIsNotVisible(this.zoomInButton); + async checkZoomInButtonIsNotDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsNotVisible(this.zoomInButton); } - checkZoomOutButtonIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.zoomOutButton); + async checkZoomOutButtonIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.zoomOutButton); } - checkScalePageButtonIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.scalePageButton); + async checkScalePageButtonIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.scalePageButton); } - checkPageSelectorInputIsDisplayed(checkNumber) { - BrowserVisibility.waitUntilElementIsVisible(this.pageSelectorInput); - this.pageSelectorInput.getAttribute('value').then((pageNumber) => { - expect(pageNumber).toEqual(checkNumber); - }); + async checkPageSelectorInputIsDisplayed(checkNumber): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.pageSelectorInput); + await expect(await this.pageSelectorInput.getAttribute('value')).toEqual(checkNumber); } - checkImgContainerIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.imgContainer); + async checkImgContainerIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.imgContainer); } - checkMediaPlayerContainerIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.mediaContainer); + async checkMediaPlayerContainerIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.mediaContainer); } - async checkFileContent(pageNumber, text) { + async checkFileContent(pageNumber: string, text: string): Promise { const allPages = this.canvasLayer; - const pageLoaded = element.all(by.css('div[data-page-number="' + pageNumber + '"][data-loaded="true"]')).first(); - const textLayerLoaded = element.all(by.css('div[data-page-number="' + pageNumber + '"] div[class="textLayer"]')).first(); - const specificText = element.all(by.cssContainingText('div[data-page-number="' + pageNumber + '"] div[class="textLayer"]', text)).first(); + const pageLoaded: ElementFinder = element.all(by.css('div[data-page-number="' + pageNumber + '"][data-loaded="true"]')).first(); + const textLayerLoaded: ElementFinder = element.all(by.css('div[data-page-number="' + pageNumber + '"] div[class="textLayer"]')).first(); + const specificText: ElementFinder = element.all(by.cssContainingText('div[data-page-number="' + pageNumber + '"] div[class="textLayer"]', text)).first(); - BrowserVisibility.waitUntilElementIsVisible(allPages); - BrowserVisibility.waitUntilElementIsVisible(pageLoaded); - BrowserVisibility.waitUntilElementIsVisible(textLayerLoaded); - BrowserVisibility.waitUntilElementIsVisible(specificText); + await BrowserVisibility.waitUntilElementIsVisible(allPages); + await BrowserVisibility.waitUntilElementIsVisible(pageLoaded); + await BrowserVisibility.waitUntilElementIsVisible(textLayerLoaded); + await BrowserVisibility.waitUntilElementIsVisible(specificText); } - checkFullScreenButtonIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.fullScreenButton); + async checkFullScreenButtonIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.fullScreenButton); } - checkFullScreenButtonIsNotDisplayed() { - BrowserVisibility.waitUntilElementIsNotVisible(this.fullScreenButton); + async checkFullScreenButtonIsNotDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsNotVisible(this.fullScreenButton); } - checkPercentageIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.percentage); + async checkPercentageIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.percentage); } - checkZoomedIn(zoom) { - expect(this.percentage.getText()).toBeGreaterThan(zoom); + async checkZoomedIn(zoom): Promise { + await expect(await BrowserActions.getText(this.percentage)).toBeGreaterThan(zoom); } - checkZoomedOut(zoom) { - expect(this.percentage.getText()).toBeLessThan(zoom); + async checkZoomedOut(zoom): Promise { + await expect(await BrowserActions.getText(this.percentage)).toBeLessThan(zoom); } - checkRotateLeftButtonIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.rotateLeft); + async checkRotateLeftButtonIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.rotateLeft); } - checkRotateRightButtonIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.rotateRight); + async checkRotateRightButtonIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.rotateRight); } - checkScaleImgButtonIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.scaleImg); + async checkScaleImgButtonIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.scaleImg); } - checkRotation(text) { - const rotation = this.imgContainer.getAttribute('style'); - expect(rotation).toEqual(text); + async checkRotation(text): Promise { + const rotation = await this.imgContainer.getAttribute('style'); + await expect(rotation).toEqual(text); } - checkInfoSideBarIsNotDisplayed() { - BrowserVisibility.waitUntilElementIsNotVisible(this.infoSideBar); + async checkInfoSideBarIsNotDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsNotVisible(this.infoSideBar); } - checkInfoSideBarIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.infoSideBar); + async checkInfoSideBarIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.infoSideBar); } - checkLeftSideBarButtonIsNotDisplayed() { - BrowserVisibility.waitUntilElementIsNotOnPage(this.leftSideBarButton); + async checkLeftSideBarButtonIsNotDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsNotVisible(this.leftSideBarButton); } - checkLeftSideBarButtonIsDisplayed() { - BrowserVisibility.waitUntilElementIsOnPage(this.leftSideBarButton); + async checkLeftSideBarButtonIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.leftSideBarButton); } - clickInfoButton() { - BrowserActions.clickExecuteScript('button[data-automation-id="adf-toolbar-sidebar"]'); + async clickInfoButton(): Promise { + await BrowserActions.clickExecuteScript('button[data-automation-id="adf-toolbar-sidebar"]'); } - clickOnTab(tabName) { - this.tabsPage.clickTabByTitle(tabName); - return this; + async clickOnTab(tabName): Promise { + await this.tabsPage.clickTabByTitle(tabName); } - checkTabIsActive(tabName) { - const tab = element(by.cssContainingText('.adf-info-drawer-layout-content div.mat-tab-labels div.mat-tab-label-active .mat-tab-label-content', tabName)); - BrowserVisibility.waitUntilElementIsVisible(tab); - return this; + async checkTabIsActive(tabName): Promise { + const tab: ElementFinder = element(by.cssContainingText('.adf-info-drawer-layout-content div.mat-tab-labels div.mat-tab-label-active .mat-tab-label-content', tabName)); + await BrowserVisibility.waitUntilElementIsVisible(tab); } - clickLeftSidebarButton() { - BrowserActions.click(this.leftSideBarButton); + async clickLeftSidebarButton(): Promise { + await BrowserActions.click(this.leftSideBarButton); } - checkLeftSideBarIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.leftSideBar); + async checkLeftSideBarIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.leftSideBar); } - checkLeftSideBarIsNotDisplayed() { - BrowserVisibility.waitUntilElementIsNotOnPage(this.leftSideBar); + async checkLeftSideBarIsNotDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsNotVisible(this.leftSideBar); } - clickPasswordSubmit() { - BrowserActions.click(this.passwordSubmit); + async clickPasswordSubmit(): Promise { + await BrowserActions.click(this.passwordSubmit); } - clickSecondThumbnail() { - BrowserActions.click(this.secondThumbnail); + async clickSecondThumbnail(): Promise { + await BrowserActions.click(this.secondThumbnail); } - clickLastThumbnailDisplayed() { - BrowserActions.click(this.lastThumbnailDisplayed); + async clickLastThumbnailDisplayed(): Promise { + await BrowserActions.click(this.lastThumbnailDisplayed); } - clickThumbnailsClose() { - BrowserActions.click(this.thumbnailsClose); + async clickThumbnailsClose(): Promise { + await BrowserActions.click(this.thumbnailsClose); } - clickThumbnailsBtn() { - BrowserActions.click(this.thumbnailsBtn); + async clickThumbnailsBtn(): Promise { + await BrowserActions.click(this.thumbnailsBtn); } - clickScaleImgButton() { - BrowserActions.click(this.scaleImg); + async clickScaleImgButton(): Promise { + await BrowserActions.click(this.scaleImg); } - clickDownloadButton() { - BrowserActions.click(this.downloadButton); + async clickDownloadButton(): Promise { + await BrowserActions.click(this.downloadButton); } - clickCloseButton() { - BrowserActions.clickExecuteScript('button[data-automation-id="adf-toolbar-back"]'); + async clickCloseButton(): Promise { + await BrowserActions.click(this.closeButton); } - clickPreviousPageButton() { - BrowserActions.click(this.previousPageButton); + async clickPreviousPageButton(): Promise { + await BrowserActions.click(this.previousPageButton); } - clickNextPageButton() { - BrowserActions.click(this.nextPageButton); + async clickNextPageButton(): Promise { + await BrowserActions.click(this.nextPageButton); } - clickZoomInButton() { - BrowserActions.click(this.zoomInButton); + async clickZoomInButton(): Promise { + await BrowserActions.click(this.zoomInButton); } - clickZoomOutButton() { - BrowserActions.click(this.zoomOutButton); + async clickZoomOutButton(): Promise { + await BrowserActions.click(this.zoomOutButton); } - clickActualSize() { - BrowserActions.click(this.scalePageButton); + async clickActualSize(): Promise { + await BrowserActions.click(this.scalePageButton); } - clickFullScreenButton() { - BrowserActions.click(this.fullScreenButton); + async clickFullScreenButton(): Promise { + await BrowserActions.click(this.fullScreenButton); } - clickRotateLeftButton() { - BrowserActions.click(this.rotateLeft); + async clickRotateLeftButton(): Promise { + await BrowserActions.click(this.rotateLeft); } - clickRotateRightButton() { - BrowserActions.click(this.rotateRight); + async clickRotateRightButton(): Promise { + await BrowserActions.click(this.rotateRight); } - getActiveTab() { - return BrowserActions.getText(this.activeTab); + async getActiveTab(): Promise { + return await BrowserActions.getText(this.activeTab); } - clickOnCommentsTab() { - this.tabsPage.clickTabByTitle('Comments'); - return this; + async clickOnCommentsTab(): Promise { + await this.tabsPage.clickTabByTitle('Comments'); } - disableToolbar() { - this.formControllersPage.disableToggle(this.toolbarSwitch); + async disableToolbar(): Promise { + await this.formControllersPage.disableToggle(this.toolbarSwitch); } - enableToolbar() { - this.formControllersPage.enableToggle(this.toolbarSwitch); + async enableToolbar(): Promise { + await this.formControllersPage.enableToggle(this.toolbarSwitch); } - checkToolbarIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.toolbar); - return this; + async checkToolbarIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.toolbar); } - checkToolbarIsNotDisplayed() { - BrowserVisibility.waitUntilElementIsNotVisible(this.toolbar); - return this; + async checkToolbarIsNotDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsNotVisible(this.toolbar); } - disableGoBack() { - this.formControllersPage.disableToggle(this.goBackSwitch); + async disableGoBack(): Promise { + await this.formControllersPage.disableToggle(this.goBackSwitch); } - enableGoBack() { - this.formControllersPage.enableToggle(this.goBackSwitch); + async enableGoBack(): Promise { + await this.formControllersPage.enableToggle(this.goBackSwitch); } - checkGoBackIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.closeButton); - return this; + async checkGoBackIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.closeButton); } - checkGoBackIsNotDisplayed() { - BrowserVisibility.waitUntilElementIsNotVisible(this.closeButton); - return this; + async checkGoBackIsNotDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsNotVisible(this.closeButton); } - disableToolbarOptions() { - this.formControllersPage.disableToggle(this.openWithSwitch); + async disableToolbarOptions(): Promise { + await this.formControllersPage.disableToggle(this.openWithSwitch); } - enableToolbarOptions() { - this.formControllersPage.enableToggle(this.openWithSwitch); + async enableToolbarOptions() { + await this.formControllersPage.enableToggle(this.openWithSwitch); } - checkToolbarOptionsIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.openWith); - return this; + async checkToolbarOptionsIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.openWith); } - checkToolbarOptionsIsNotDisplayed() { - BrowserVisibility.waitUntilElementIsNotVisible(this.openWith); - return this; + async checkToolbarOptionsIsNotDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsNotVisible(this.openWith); } - disableDownload() { - this.formControllersPage.disableToggle(this.downloadSwitch); + async disableDownload(): Promise { + await this.formControllersPage.disableToggle(this.downloadSwitch); } - enableDownload() { - this.formControllersPage.enableToggle(this.openWithSwitch); + async enableDownload(): Promise { + await this.formControllersPage.enableToggle(this.openWithSwitch); } - disableShowTabWithIcon() { - this.formControllersPage.disableToggle(this.showTabWithIconSwitch); + async enableShowTabWithIcon(): Promise { + await browser.executeScript('arguments[0].scrollIntoView()', this.showTabWithIconSwitch); + await this.formControllersPage.enableToggle(this.showTabWithIconSwitch); } - enableShowTabWithIcon() { - browser.executeScript('arguments[0].scrollIntoView()', this.showTabWithIconSwitch); - this.formControllersPage.enableToggle(this.showTabWithIconSwitch); + async enableShowTabWithIconAndLabel(): Promise { + await this.formControllersPage.enableToggle(this.showTabWithIconAndLabelSwitch); } - disableShowTabWithIconAndLabel() { - this.formControllersPage.disableToggle(this.showTabWithIconAndLabelSwitch); + async checkDownloadButtonDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.downloadButton); } - enableShowTabWithIconAndLabel() { - this.formControllersPage.enableToggle(this.showTabWithIconAndLabelSwitch); + async checkDownloadButtonIsNotDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsNotVisible(this.downloadButton); } - checkDownloadButtonDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.downloadButton); - return this; + async disablePrint(): Promise { + await this.formControllersPage.disableToggle(this.printSwitch); } - checkDownloadButtonIsNotDisplayed() { - BrowserVisibility.waitUntilElementIsNotVisible(this.downloadButton); - return this; + async enablePrint(): Promise { + await this.formControllersPage.enableToggle(this.printSwitch); } - disablePrint() { - this.formControllersPage.disableToggle(this.printSwitch); + async checkPrintButtonIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.printButton); } - enablePrint() { - this.formControllersPage.enableToggle(this.printSwitch); + async checkPrintButtonIsNotDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsNotVisible(this.printButton); } - checkPrintButtonIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.printButton); - return this; + async disableAllowSidebar(): Promise { + await this.formControllersPage.disableToggle(this.allowSidebarSwitch); } - checkPrintButtonIsNotDisplayed() { - BrowserVisibility.waitUntilElementIsNotVisible(this.printButton); - return this; + async disableAllowLeftSidebar(): Promise { + await browser.executeScript('arguments[0].scrollIntoView()', this.allowLeftSidebarSwitch); + await this.formControllersPage.disableToggle(this.allowLeftSidebarSwitch); } - disableAllowSidebar() { - this.formControllersPage.disableToggle(this.allowSidebarSwitch); + async checkMoreActionsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.bugButton); + await BrowserVisibility.waitUntilElementIsVisible(this.timeButton); + await BrowserVisibility.waitUntilElementIsVisible(this.uploadButton); } - disableAllowLeftSidebar() { - browser.executeScript('arguments[0].scrollIntoView()', this.allowLeftSidebarSwitch); - this.formControllersPage.disableToggle(this.allowLeftSidebarSwitch); + async checkMoreActionsIsNotDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsNotVisible(this.bugButton); + await BrowserVisibility.waitUntilElementIsNotVisible(this.timeButton); + await BrowserVisibility.waitUntilElementIsNotVisible(this.uploadButton); } - checkMoreActionsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.bugButton); - BrowserVisibility.waitUntilElementIsVisible(this.timeButton); - BrowserVisibility.waitUntilElementIsVisible(this.uploadButton); - return this; + async disableMoreActions(): Promise { + await this.formControllersPage.disableToggle(this.moreActionsSwitch); } - checkMoreActionsIsNotDisplayed() { - BrowserVisibility.waitUntilElementIsNotVisible(this.bugButton); - BrowserVisibility.waitUntilElementIsNotVisible(this.timeButton); - BrowserVisibility.waitUntilElementIsNotVisible(this.uploadButton); - return this; + async enableMoreActions(): Promise { + await this.formControllersPage.enableToggle(this.moreActionsSwitch); } - disableMoreActions() { - this.formControllersPage.disableToggle(this.moreActionsSwitch); + async enableMoreActionsMenu(): Promise { + await this.formControllersPage.enableToggle(this.moreActionsMenuSwitch); } - enableMoreActions() { - this.formControllersPage.enableToggle(this.moreActionsSwitch); + async disableCustomToolbar(): Promise { + await browser.executeScript('arguments[0].scrollIntoView()', this.customToolbarToggle); + await this.formControllersPage.disableToggle(this.customToolbarToggle); } - enableMoreActionsMenu() { - this.formControllersPage.enableToggle(this.moreActionsMenuSwitch); + async enableCustomToolbar(): Promise { + await browser.executeScript('arguments[0].scrollIntoView()', this.customToolbarToggle); + await this.formControllersPage.enableToggle(this.customToolbarToggle); } - disableCustomToolbar() { - browser.executeScript('arguments[0].scrollIntoView()', this.customToolbarToggle); - this.formControllersPage.disableToggle(this.customToolbarToggle); - return this; + async checkCustomToolbarIsDisplayed() { + await BrowserVisibility.waitUntilElementIsVisible(this.customToolbar); } - enableCustomToolbar() { - browser.executeScript('arguments[0].scrollIntoView()', this.customToolbarToggle); - this.formControllersPage.enableToggle(this.customToolbarToggle); - return this; + async disableCustomName(): Promise { + await this.formControllersPage.disableToggle(this.customNameSwitch); } - checkCustomToolbarIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.customToolbar); - return this; + async enableCustomName(): Promise { + await this.formControllersPage.enableToggle(this.customNameSwitch); } - disableCustomName() { - this.formControllersPage.disableToggle(this.customNameSwitch); + async clickToggleRightSidebar(): Promise { + await BrowserActions.click(this.showRightSidebarSwitch); } - enableCustomName() { - this.formControllersPage.enableToggle(this.customNameSwitch); + async clickToggleLeftSidebar(): Promise { + await BrowserActions.click(this.showLeftSidebarSwitch); } - clickToggleRightSidebar() { - BrowserActions.click(this.showRightSidebarSwitch); + async enterCustomName(text: string): Promise { + const textField: ElementFinder = element(by.css('input[data-automation-id="adf-text-custom-name"]')); + await BrowserVisibility.waitUntilElementIsVisible(textField); + await BrowserActions.clearSendKeys(textField, text); } - clickToggleLeftSidebar() { - BrowserActions.click(this.showLeftSidebarSwitch); + async disableOverlay(): Promise { + await this.formControllersPage.disableToggle(element(by.id('adf-viewer-overlay'))); } - enterCustomName(text) { - const textField = element(by.css('input[data-automation-id="adf-text-custom-name"]')); - BrowserVisibility.waitUntilElementIsVisible(textField); - textField.sendKeys(''); - textField.clear(); - textField.sendKeys(text); - return this; + async checkOverlayViewerIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.viewer.element(by.css('div[class*="adf-viewer-overlay-container"]'))); } - disableOverlay() { - this.formControllersPage.disableToggle(element(by.id('adf-viewer-overlay'))); - return this; + async checkInlineViewerIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.viewer.element(by.css('div[class*="adf-viewer-inline-container"]'))); } - checkOverlayViewerIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.viewer.element(by.css('div[class*="adf-viewer-overlay-container"]'))); - return this; + async checkTabHasNoIcon(index: number): Promise { + const tab: ElementFinder = element(by.css(`div[id="mat-tab-label-1-${index}"] div[class="mat-tab-label-content"] mat-icon`)); + await BrowserVisibility.waitUntilElementIsNotVisible(tab); } - checkInlineViewerIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.viewer.element(by.css('div[class*="adf-viewer-inline-container"]'))); - return this; + async checkTabHasNoLabel(index: number): Promise { + const tab: ElementFinder = element(by.css(`div[id="mat-tab-label-1-${index}"] div[class="mat-tab-label-content"] span`)); + await BrowserVisibility.waitUntilElementIsNotVisible(tab); } - checkTabHasNoIcon(index: number) { - const tab = element(by.css(`div[id="mat-tab-label-1-${index}"] div[class="mat-tab-label-content"] mat-icon`)); - BrowserVisibility.waitUntilElementIsNotVisible(tab); - return this; + async getTabLabelById(index: number): Promise { + const tab: ElementFinder = element(by.css(`div[id="mat-tab-label-1-${index}"] div[class="mat-tab-label-content"] span`)); + return await BrowserActions.getText(tab); } - checkTabHasNoLabel(index: number) { - const tab = element(by.css(`div[id="mat-tab-label-1-${index}"] div[class="mat-tab-label-content"] span`)); - BrowserVisibility.waitUntilElementIsNotVisible(tab); - return this; + async getTabIconById(index: number): Promise { + const tab: ElementFinder = element(by.css(`div[id="mat-tab-label-1-${index}"] div[class="mat-tab-label-content"] mat-icon`)); + return await BrowserActions.getText(tab); } - getTabLabelById(index: number) { - const tab = element(by.css(`div[id="mat-tab-label-1-${index}"] div[class="mat-tab-label-content"] span`)); - return BrowserActions.getText(tab); + async checkUnknownFormatIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.unknownFormat); } - getTabIconById(index: number) { - const tab = element(by.css(`div[id="mat-tab-label-1-${index}"] div[class="mat-tab-label-content"] mat-icon`)); - return BrowserActions.getText(tab); - } - - checkUnknownFormatIsDisplayed() { - return BrowserVisibility.waitUntilElementIsVisible(this.unknownFormat); - } - - getUnknownFormatMessage() { + async getUnknownFormatMessage(): Promise { const unknownFormatLabel = this.unknownFormat.element(by.css(`.label`)); - return BrowserActions.getText(unknownFormatLabel); + return await BrowserActions.getText(unknownFormatLabel); } } diff --git a/e2e/process-services-cloud/apps-section-cloud.e2e.ts b/e2e/process-services-cloud/apps-section-cloud.e2e.ts index 465f1e61db..8b0283ee10 100644 --- a/e2e/process-services-cloud/apps-section-cloud.e2e.ts +++ b/e2e/process-services-cloud/apps-section-cloud.e2e.ts @@ -16,7 +16,14 @@ */ import { browser } from 'protractor'; -import { ApiService, IdentityService, LoginSSOPage, SettingsPage, LocalStorageUtil, ApplicationsService } from '@alfresco/adf-testing'; +import { + ApiService, + IdentityService, + LoginSSOPage, + SettingsPage, + LocalStorageUtil, + ApplicationsService +} from '@alfresco/adf-testing'; import { AppListCloudPage } from '@alfresco/adf-testing'; import { NavigationBarPage } from '../pages/adf/navigationBarPage'; import resources = require('../util/resources'); @@ -35,7 +42,7 @@ describe('Applications list', () => { let applications; const apiService = new ApiService(browser.params.config.oauth2.clientId, browser.params.config.bpmHost, browser.params.config.oauth2.host, 'BPM'); - beforeAll(async (done) => { + beforeAll(async () => { await apiService.login(browser.params.identityAdmin.email, browser.params.identityAdmin.password); identityService = new IdentityService(apiService); testUser = await identityService.createIdentityUserWithRole(apiService, [identityService.ROLES.APS_USER, identityService.ROLES.APS_DEVOPS_USER]); @@ -48,39 +55,37 @@ describe('Applications list', () => { applicationsService = new ApplicationsService(apiService); applications = await applicationsService.getApplicationsByStatus('RUNNING'); - applications.list.entries.forEach(async (app) => { + applications.list.entries.forEach(app => { appNames.push(app.entry.name.toLowerCase()); }); await LocalStorageUtil.setConfigField('alfresco-deployed-apps', '[]'); - done(); }); - afterAll(async(done) => { + afterAll(async () => { await apiService.login(browser.params.identityAdmin.email, browser.params.identityAdmin.password); await identityService.deleteIdentityUser(testUser.idIdentityService); - done(); + }); it('[C310373] Should all the app with running state be displayed on dashboard when alfresco-deployed-apps is not used in config file', async () => { - navigationBarPage.navigateToProcessServicesCloudPage(); - appListCloudPage.checkApsContainer(); + await navigationBarPage.navigateToProcessServicesCloudPage(); + await appListCloudPage.checkApsContainer(); - appListCloudPage.getNameOfTheApplications().then((list) => { - expect(JSON.stringify(list) === JSON.stringify(appNames)).toEqual(true); - }); + const list = await appListCloudPage.getNameOfTheApplications(); + await expect(JSON.stringify(list)).toEqual(JSON.stringify(appNames)); }); - it('[C289910] Should the app be displayed on dashboard when is deployed on APS', () => { - browser.refresh(); - navigationBarPage.navigateToProcessServicesCloudPage(); - appListCloudPage.checkApsContainer(); + it('[C289910] Should the app be displayed on dashboard when is deployed on APS', async () => { + await browser.refresh(); + await navigationBarPage.navigateToProcessServicesCloudPage(); + await appListCloudPage.checkApsContainer(); - appListCloudPage.checkAppIsDisplayed(simpleApp); - appListCloudPage.checkAppIsDisplayed(resources.ACTIVITI7_APPS.CANDIDATE_BASE_APP.name); - appListCloudPage.checkAppIsDisplayed(resources.ACTIVITI7_APPS.SUB_PROCESS_APP.name); + await appListCloudPage.checkAppIsDisplayed(simpleApp); + await appListCloudPage.checkAppIsDisplayed(resources.ACTIVITI7_APPS.CANDIDATE_BASE_APP.name); + await appListCloudPage.checkAppIsDisplayed(resources.ACTIVITI7_APPS.SUB_PROCESS_APP.name); - expect(appListCloudPage.countAllApps()).toEqual(3); + await expect(await appListCloudPage.countAllApps()).toEqual(3); }); }); diff --git a/e2e/process-services-cloud/edit-process-filters-component.e2e.ts b/e2e/process-services-cloud/edit-process-filters-component.e2e.ts index 6af8babdfe..be93e914c3 100644 --- a/e2e/process-services-cloud/edit-process-filters-component.e2e.ts +++ b/e2e/process-services-cloud/edit-process-filters-component.e2e.ts @@ -39,7 +39,7 @@ describe('Edit process filters cloud', () => { let testUser, groupInfo; const apiService = new ApiService(browser.params.config.oauth2.clientId, browser.params.config.bpmHost, browser.params.config.oauth2.host, 'BPM'); - beforeAll(async (done) => { + beforeAll(async () => { await apiService.login(browser.params.identityAdmin.email, browser.params.identityAdmin.password); identityService = new IdentityService(apiService); groupIdentityService = new GroupIdentityService(apiService); @@ -52,191 +52,189 @@ describe('Edit process filters cloud', () => { browser.params.config.oauth2.host, browser.params.config.identityHost); await loginSSOPage.loginSSOIdentityService(testUser.email, testUser.password); - done(); + }); - afterAll(async(done) => { + afterAll(async () => { await apiService.login(browser.params.identityAdmin.email, browser.params.identityAdmin.password); await identityService.deleteIdentityUser(testUser.idIdentityService); - done(); + }); - beforeEach(() => { - navigationBarPage.navigateToProcessServicesCloudPage(); - appListCloudComponent.checkApsContainer(); - appListCloudComponent.goToApp(simpleApp); - tasksCloudDemoPage.taskListCloudComponent().checkTaskListIsLoaded(); - processCloudDemoPage.clickOnProcessFilters(); - processCloudDemoPage.editProcessFilterCloudComponent().clickCustomiseFilterHeader().checkCustomiseFilterHeaderIsExpanded(); + beforeEach(async () => { + await navigationBarPage.navigateToProcessServicesCloudPage(); + await appListCloudComponent.checkApsContainer(); + await appListCloudComponent.goToApp(simpleApp); + await tasksCloudDemoPage.taskListCloudComponent().checkTaskListIsLoaded(); + await processCloudDemoPage.clickOnProcessFilters(); + const editProcessFilterCloud = processCloudDemoPage.editProcessFilterCloudComponent(); + await editProcessFilterCloud.openFilter(); + await editProcessFilterCloud.checkCustomiseFilterHeaderIsExpanded(); + await processCloudDemoPage.allProcessesFilter().clickProcessFilter(); }); - afterEach(() => { - processCloudDemoPage.allProcessesFilter().clickProcessFilter(); + it('[C291804] Delete Save and Save as actions should be displayed when clicking on custom filter header', async () => { + await processCloudDemoPage.allProcessesFilter().checkProcessFilterIsDisplayed(); + await expect(await processCloudDemoPage.getActiveFilterName()).toBe('All Processes'); + await processCloudDemoPage.editProcessFilterCloudComponent().checkSaveButtonIsDisplayed(); + await processCloudDemoPage.editProcessFilterCloudComponent().checkSaveAsButtonIsDisplayed(); + await processCloudDemoPage.editProcessFilterCloudComponent().checkDeleteButtonIsDisplayed(); + await expect(await processCloudDemoPage.editProcessFilterCloudComponent().checkSaveButtonIsEnabled()).toEqual(false); + await expect(await processCloudDemoPage.editProcessFilterCloudComponent().checkSaveAsButtonIsEnabled()).toEqual(false); + await expect(await processCloudDemoPage.editProcessFilterCloudComponent().checkDeleteButtonIsEnabled()).toEqual(true); + await processCloudDemoPage.editProcessFilterCloudComponent().openFilter(); }); - it('[C291804] Delete Save and Save as actions should be displayed when clicking on custom filter header', () => { - processCloudDemoPage.allProcessesFilter().clickProcessFilter(); - processCloudDemoPage.allProcessesFilter().checkProcessFilterIsDisplayed(); - expect(processCloudDemoPage.getActiveFilterName()).toBe('All Processes'); - processCloudDemoPage.editProcessFilterCloudComponent().checkSaveButtonIsDisplayed().checkSaveAsButtonIsDisplayed() - .checkDeleteButtonIsDisplayed(); - expect(processCloudDemoPage.editProcessFilterCloudComponent().checkSaveButtonIsEnabled()).toEqual(false); - expect(processCloudDemoPage.editProcessFilterCloudComponent().checkSaveAsButtonIsEnabled()).toEqual(false); - expect(processCloudDemoPage.editProcessFilterCloudComponent().checkDeleteButtonIsEnabled()).toEqual(true); - processCloudDemoPage.editProcessFilterCloudComponent().clickCustomiseFilterHeader(); + it('[C291805] New process filter is added when clicking Save As button', async () => { + await processCloudDemoPage.editProcessFilterCloudComponent().setSortFilterDropDown('Id'); + await processCloudDemoPage.allProcessesFilter().checkProcessFilterIsDisplayed(); + + await processCloudDemoPage.editProcessFilterCloudComponent().clickSaveAsButton(); + await processCloudDemoPage.editProcessFilterCloudComponent().editProcessFilterDialog().setFilterName('New'); + await processCloudDemoPage.editProcessFilterCloudComponent().editProcessFilterDialog().clickOnSaveButton(); + + await browser.driver.sleep(1000); + + await expect(await processCloudDemoPage.getActiveFilterName()).toBe('New'); + await processCloudDemoPage.editProcessFilterCloudComponent().openFilter(); + await expect(await processCloudDemoPage.editProcessFilterCloudComponent().checkSaveButtonIsEnabled()).toEqual(false); + await expect(await processCloudDemoPage.editProcessFilterCloudComponent().getSortFilterDropDownValue()).toEqual('Id'); + await expect(await processCloudDemoPage.editProcessFilterCloudComponent().checkSaveAsButtonIsEnabled()).toEqual(false); + await expect(await processCloudDemoPage.editProcessFilterCloudComponent().checkDeleteButtonIsEnabled()).toEqual(true); + await processCloudDemoPage.allProcessesFilter().clickProcessFilter(); + await expect(await processCloudDemoPage.editProcessFilterCloudComponent().getSortFilterDropDownValue()).toEqual('StartDate'); + await processCloudDemoPage.customProcessFilter('custom-new').clickProcessFilter(); + await expect(await processCloudDemoPage.editProcessFilterCloudComponent().getSortFilterDropDownValue()).toEqual('Id'); + await processCloudDemoPage.editProcessFilterCloudComponent().clickDeleteButton(); }); - it('[C291805] New process filter is added when clicking Save As button', () => { - processCloudDemoPage.allProcessesFilter().clickProcessFilter(); + it('[C291806] Two process filters with same name can be created when clicking the Save As button', async () => { + await processCloudDemoPage.editProcessFilterCloudComponent().setSortFilterDropDown('Id'); + await processCloudDemoPage.editProcessFilterCloudComponent().clickSaveAsButton(); + await processCloudDemoPage.editProcessFilterCloudComponent().editProcessFilterDialog().setFilterName('New'); + await processCloudDemoPage.editProcessFilterCloudComponent().editProcessFilterDialog().clickOnSaveButton(); - processCloudDemoPage.editProcessFilterCloudComponent().setSortFilterDropDown('Id'); - processCloudDemoPage.allProcessesFilter().checkProcessFilterIsDisplayed(); + await browser.driver.sleep(1000); - processCloudDemoPage.editProcessFilterCloudComponent().clickSaveAsButton(); - processCloudDemoPage.editProcessFilterCloudComponent().editProcessFilterDialog().setFilterName('New').clickOnSaveButton(); + await processCloudDemoPage.editProcessFilterCloudComponent().openFilter(); + await processCloudDemoPage.editProcessFilterCloudComponent().checkCustomiseFilterHeaderIsExpanded(); + await expect(await processCloudDemoPage.getActiveFilterName()).toBe('New'); + await expect(await processCloudDemoPage.editProcessFilterCloudComponent().getSortFilterDropDownValue()).toEqual('Id'); + await processCloudDemoPage.editProcessFilterCloudComponent().setSortFilterDropDown('Name'); + await expect(await processCloudDemoPage.editProcessFilterCloudComponent().getSortFilterDropDownValue()).toEqual('Name'); + await processCloudDemoPage.editProcessFilterCloudComponent().clickSaveAsButton(); - browser.driver.sleep(1000); + await processCloudDemoPage.editProcessFilterCloudComponent().editProcessFilterDialog().setFilterName('New'); + await processCloudDemoPage.editProcessFilterCloudComponent().editProcessFilterDialog().clickOnSaveButton(); + await processCloudDemoPage.editProcessFilterCloudComponent().openFilter(); + await processCloudDemoPage.editProcessFilterCloudComponent().checkCustomiseFilterHeaderIsExpanded(); - expect(processCloudDemoPage.getActiveFilterName()).toBe('New'); - processCloudDemoPage.editProcessFilterCloudComponent().clickCustomiseFilterHeader(); - expect(processCloudDemoPage.editProcessFilterCloudComponent().checkSaveButtonIsEnabled()).toEqual(false); - expect(processCloudDemoPage.editProcessFilterCloudComponent().getSortFilterDropDownValue()).toEqual('Id'); - expect(processCloudDemoPage.editProcessFilterCloudComponent().checkSaveAsButtonIsEnabled()).toEqual(false); - expect(processCloudDemoPage.editProcessFilterCloudComponent().checkDeleteButtonIsEnabled()).toEqual(true); - processCloudDemoPage.allProcessesFilter().clickProcessFilter(); - expect(processCloudDemoPage.editProcessFilterCloudComponent().getSortFilterDropDownValue()).toEqual('StartDate'); - processCloudDemoPage.customProcessFilter('custom-new').clickProcessFilter(); - expect(processCloudDemoPage.editProcessFilterCloudComponent().getSortFilterDropDownValue()).toEqual('Id'); - processCloudDemoPage.editProcessFilterCloudComponent().clickDeleteButton(); + await browser.driver.sleep(1000); + + await expect(await processCloudDemoPage.getActiveFilterName()).toBe('New'); + await expect(await processCloudDemoPage.editProcessFilterCloudComponent().getSortFilterDropDownValue()).toEqual('Name'); + await processCloudDemoPage.editProcessFilterCloudComponent().clickDeleteButton(); + + await browser.driver.sleep(1000); + + await processCloudDemoPage.customProcessFilter('custom-new').clickProcessFilter(); + await processCloudDemoPage.editProcessFilterCloudComponent().openFilter(); + await processCloudDemoPage.editProcessFilterCloudComponent().checkCustomiseFilterHeaderIsExpanded(); + await expect(await processCloudDemoPage.editProcessFilterCloudComponent().getSortFilterDropDownValue()).toEqual('Id'); + await processCloudDemoPage.editProcessFilterCloudComponent().clickDeleteButton(); }); - it('[C291806] Two process filters with same name can be created when clicking the Save As button', () => { - processCloudDemoPage.allProcessesFilter().clickProcessFilter(); + it('[C291807] A process filter is overrided when clicking on save button', async () => { + await processCloudDemoPage.editProcessFilterCloudComponent().setSortFilterDropDown('Id'); + await processCloudDemoPage.allProcessesFilter().checkProcessFilterIsDisplayed(); + await processCloudDemoPage.editProcessFilterCloudComponent().clickSaveAsButton(); + await processCloudDemoPage.editProcessFilterCloudComponent().editProcessFilterDialog().setFilterName('New'); + await processCloudDemoPage.editProcessFilterCloudComponent().editProcessFilterDialog().clickOnSaveButton(); - processCloudDemoPage.editProcessFilterCloudComponent().setSortFilterDropDown('Id'); - processCloudDemoPage.editProcessFilterCloudComponent().clickSaveAsButton(); - processCloudDemoPage.editProcessFilterCloudComponent().editProcessFilterDialog().setFilterName('New').clickOnSaveButton(); + await browser.driver.sleep(1000); - browser.driver.sleep(1000); + await expect(await processCloudDemoPage.getActiveFilterName()).toBe('New'); + await processCloudDemoPage.editProcessFilterCloudComponent().openFilter(); + await processCloudDemoPage.editProcessFilterCloudComponent().checkCustomiseFilterHeaderIsExpanded(); + await expect(await processCloudDemoPage.editProcessFilterCloudComponent().getSortFilterDropDownValue()).toEqual('Id'); + await processCloudDemoPage.editProcessFilterCloudComponent().setSortFilterDropDown('Name'); + await expect(await processCloudDemoPage.editProcessFilterCloudComponent().getSortFilterDropDownValue()).toEqual('Name'); + await processCloudDemoPage.editProcessFilterCloudComponent().clickSaveButton(); + await processCloudDemoPage.editProcessFilterCloudComponent().openFilter(); + await processCloudDemoPage.editProcessFilterCloudComponent().checkCustomiseFilterHeaderIsExpanded(); - processCloudDemoPage.editProcessFilterCloudComponent().clickCustomiseFilterHeader().checkCustomiseFilterHeaderIsExpanded(); - expect(processCloudDemoPage.getActiveFilterName()).toBe('New'); - expect(processCloudDemoPage.editProcessFilterCloudComponent().getSortFilterDropDownValue()).toEqual('Id'); - processCloudDemoPage.editProcessFilterCloudComponent().setSortFilterDropDown('Name'); - expect(processCloudDemoPage.editProcessFilterCloudComponent().getSortFilterDropDownValue()).toEqual('Name'); - processCloudDemoPage.editProcessFilterCloudComponent().clickSaveAsButton().setFilterName('New').clickOnSaveButton(); - processCloudDemoPage.editProcessFilterCloudComponent().clickCustomiseFilterHeader().checkCustomiseFilterHeaderIsExpanded(); + await browser.driver.sleep(1000); - browser.driver.sleep(1000); - - expect(processCloudDemoPage.getActiveFilterName()).toBe('New'); - expect(processCloudDemoPage.editProcessFilterCloudComponent().getSortFilterDropDownValue()).toEqual('Name'); - processCloudDemoPage.editProcessFilterCloudComponent().clickDeleteButton(); - - browser.driver.sleep(1000); - - processCloudDemoPage.customProcessFilter('custom-new').clickProcessFilter(); - processCloudDemoPage.editProcessFilterCloudComponent().clickCustomiseFilterHeader().checkCustomiseFilterHeaderIsExpanded(); - expect(processCloudDemoPage.editProcessFilterCloudComponent().getSortFilterDropDownValue()).toEqual('Id'); - processCloudDemoPage.editProcessFilterCloudComponent().clickDeleteButton(); + await expect(await processCloudDemoPage.getActiveFilterName()).toBe('New'); + await expect(await processCloudDemoPage.editProcessFilterCloudComponent().getSortFilterDropDownValue()).toEqual('Name'); + await processCloudDemoPage.editProcessFilterCloudComponent().clickDeleteButton(); }); - it('[C291807] A process filter is overrided when clicking on save button', () => { - processCloudDemoPage.allProcessesFilter().clickProcessFilter(); + it('[C291808] A process filter is deleted when clicking on delete button', async () => { + await processCloudDemoPage.editProcessFilterCloudComponent().setSortFilterDropDown('Id'); + await processCloudDemoPage.allProcessesFilter().checkProcessFilterIsDisplayed(); + await processCloudDemoPage.editProcessFilterCloudComponent().clickSaveAsButton(); + await processCloudDemoPage.editProcessFilterCloudComponent().editProcessFilterDialog().setFilterName('New'); - processCloudDemoPage.editProcessFilterCloudComponent().setSortFilterDropDown('Id'); - processCloudDemoPage.allProcessesFilter().checkProcessFilterIsDisplayed(); - processCloudDemoPage.editProcessFilterCloudComponent().clickSaveAsButton(); - processCloudDemoPage.editProcessFilterCloudComponent().editProcessFilterDialog().setFilterName('New').clickOnSaveButton(); + await browser.driver.sleep(1000); - browser.driver.sleep(1000); + await processCloudDemoPage.editProcessFilterCloudComponent().editProcessFilterDialog().clickOnSaveButton(); + await processCloudDemoPage.editProcessFilterCloudComponent().openFilter(); + await expect(await processCloudDemoPage.getActiveFilterName()).toBe('New'); + await expect(await processCloudDemoPage.editProcessFilterCloudComponent().getSortFilterDropDownValue()).toEqual('Id'); + await processCloudDemoPage.editProcessFilterCloudComponent().clickDeleteButton(); - expect(processCloudDemoPage.getActiveFilterName()).toBe('New'); - processCloudDemoPage.editProcessFilterCloudComponent().clickCustomiseFilterHeader().checkCustomiseFilterHeaderIsExpanded(); - expect(processCloudDemoPage.editProcessFilterCloudComponent().getSortFilterDropDownValue()).toEqual('Id'); - processCloudDemoPage.editProcessFilterCloudComponent().setSortFilterDropDown('Name'); - expect(processCloudDemoPage.editProcessFilterCloudComponent().getSortFilterDropDownValue()).toEqual('Name'); - processCloudDemoPage.editProcessFilterCloudComponent().clickSaveButton(); - processCloudDemoPage.editProcessFilterCloudComponent().clickCustomiseFilterHeader().checkCustomiseFilterHeaderIsExpanded(); + await browser.driver.sleep(1000); - browser.driver.sleep(1000); - - expect(processCloudDemoPage.getActiveFilterName()).toBe('New'); - expect(processCloudDemoPage.editProcessFilterCloudComponent().getSortFilterDropDownValue()).toEqual('Name'); - processCloudDemoPage.editProcessFilterCloudComponent().clickDeleteButton(); + await expect(await processCloudDemoPage.getActiveFilterName()).toBe('All Processes'); + await processCloudDemoPage.customProcessFilter('New').checkProcessFilterNotDisplayed(); }); - it('[C291808] A process filter is deleted when clicking on delete button', () => { - processCloudDemoPage.allProcessesFilter().clickProcessFilter(); - - processCloudDemoPage.editProcessFilterCloudComponent().setSortFilterDropDown('Id'); - processCloudDemoPage.allProcessesFilter().checkProcessFilterIsDisplayed(); - processCloudDemoPage.editProcessFilterCloudComponent().clickSaveAsButton(); - processCloudDemoPage.editProcessFilterCloudComponent().editProcessFilterDialog().setFilterName('New').clickOnSaveButton(); - - browser.driver.sleep(1000); - - processCloudDemoPage.editProcessFilterCloudComponent().clickCustomiseFilterHeader(); - expect(processCloudDemoPage.getActiveFilterName()).toBe('New'); - - expect(processCloudDemoPage.editProcessFilterCloudComponent().getSortFilterDropDownValue()).toEqual('Id'); - processCloudDemoPage.editProcessFilterCloudComponent().clickDeleteButton(); - - browser.driver.sleep(1000); - - expect(processCloudDemoPage.getActiveFilterName()).toBe('All Processes'); - processCloudDemoPage.customProcessFilter('New').checkProcessFilterNotDisplayed(); + it('[C291810] Process filter should not be created when process filter dialog is closed', async () => { + await processCloudDemoPage.editProcessFilterCloudComponent().setSortFilterDropDown('Id'); + await processCloudDemoPage.allProcessesFilter().checkProcessFilterIsDisplayed(); + await processCloudDemoPage.editProcessFilterCloudComponent().clickSaveAsButton(); + await processCloudDemoPage.editProcessFilterCloudComponent().editProcessFilterDialog().setFilterName('Cancel'); + await expect(await processCloudDemoPage.editProcessFilterCloudComponent().editProcessFilterDialog().getFilterName()).toEqual('Cancel'); + await processCloudDemoPage.editProcessFilterCloudComponent().editProcessFilterDialog().clickOnCancelButton(); + await processCloudDemoPage.customProcessFilter('Cancel').checkProcessFilterNotDisplayed(); + await expect(await processCloudDemoPage.getActiveFilterName()).toEqual('All Processes'); + await processCloudDemoPage.runningProcessesFilter().clickProcessFilter(); + await expect(await processCloudDemoPage.getActiveFilterName()).toEqual('Running Processes'); + await processCloudDemoPage.editProcessFilterCloudComponent().openFilter(); + await processCloudDemoPage.allProcessesFilter().clickProcessFilter(); + await expect(await processCloudDemoPage.getActiveFilterName()).toEqual('All Processes'); + await expect(await processCloudDemoPage.editProcessFilterCloudComponent().getSortFilterDropDownValue()).toEqual('StartDate'); + await processCloudDemoPage.editProcessFilterCloudComponent().openFilter(); }); - it('[C291810] Process filter should not be created when process filter dialog is closed', () => { - processCloudDemoPage.allProcessesFilter().clickProcessFilter(); + it('[C291811] Save button of process filter dialog should be disabled when process name is empty', async () => { + await processCloudDemoPage.editProcessFilterCloudComponent().setSortFilterDropDown('Id'); + await processCloudDemoPage.allProcessesFilter().checkProcessFilterIsDisplayed(); + await processCloudDemoPage.editProcessFilterCloudComponent().clickSaveAsButton(); + await processCloudDemoPage.editProcessFilterCloudComponent().editProcessFilterDialog().clearFilterName(); - processCloudDemoPage.editProcessFilterCloudComponent().setSortFilterDropDown('Id'); - processCloudDemoPage.allProcessesFilter().checkProcessFilterIsDisplayed(); - processCloudDemoPage.editProcessFilterCloudComponent().clickSaveAsButton(); - processCloudDemoPage.editProcessFilterCloudComponent().editProcessFilterDialog().setFilterName('Cancel'); - expect(processCloudDemoPage.editProcessFilterCloudComponent().editProcessFilterDialog().getFilterName()).toEqual('Cancel'); - processCloudDemoPage.editProcessFilterCloudComponent().editProcessFilterDialog().clickOnCancelButton(); - processCloudDemoPage.customProcessFilter('Cancel').checkProcessFilterNotDisplayed(); - expect(processCloudDemoPage.getActiveFilterName()).toEqual('All Processes'); - processCloudDemoPage.runningProcessesFilter().clickProcessFilter(); - expect(processCloudDemoPage.getActiveFilterName()).toEqual('Running Processes'); - processCloudDemoPage.editProcessFilterCloudComponent().clickCustomiseFilterHeader(); - processCloudDemoPage.allProcessesFilter().clickProcessFilter(); - expect(processCloudDemoPage.getActiveFilterName()).toEqual('All Processes'); - expect(processCloudDemoPage.editProcessFilterCloudComponent().getSortFilterDropDownValue()).toEqual('StartDate'); - processCloudDemoPage.editProcessFilterCloudComponent().clickCustomiseFilterHeader(); + await expect(await processCloudDemoPage.editProcessFilterCloudComponent().editProcessFilterDialog().getFilterName()).toEqual(''); + await expect(await processCloudDemoPage.editProcessFilterCloudComponent().editProcessFilterDialog().checkSaveButtonIsEnabled()).toEqual(false); + await expect(await processCloudDemoPage.editProcessFilterCloudComponent().editProcessFilterDialog().checkCancelButtonIsEnabled()).toEqual(true); + await processCloudDemoPage.editProcessFilterCloudComponent().editProcessFilterDialog().clickOnCancelButton(); + + await processCloudDemoPage.editProcessFilterCloudComponent().openFilter(); + await processCloudDemoPage.editProcessFilterCloudComponent().checkCustomiseFilterHeaderIsExpanded(); + await processCloudDemoPage.editProcessFilterCloudComponent().setSortFilterDropDown('StartDate'); + await expect(await processCloudDemoPage.editProcessFilterCloudComponent().getSortFilterDropDownValue()).toEqual('StartDate'); + await processCloudDemoPage.editProcessFilterCloudComponent().clickSaveButton(); }); - it('[C291811] Save button of process filter dialog should be disabled when process name is empty', () => { - processCloudDemoPage.allProcessesFilter().clickProcessFilter(); - - processCloudDemoPage.editProcessFilterCloudComponent().setSortFilterDropDown('Id'); - processCloudDemoPage.allProcessesFilter().checkProcessFilterIsDisplayed(); - processCloudDemoPage.editProcessFilterCloudComponent().clickSaveAsButton(); - processCloudDemoPage.editProcessFilterCloudComponent().editProcessFilterDialog().clearFilterName(); - expect(processCloudDemoPage.editProcessFilterCloudComponent().editProcessFilterDialog().getFilterName()).toEqual(''); - expect(processCloudDemoPage.editProcessFilterCloudComponent().editProcessFilterDialog().checkSaveButtonIsEnabled()).toEqual(false); - expect(processCloudDemoPage.editProcessFilterCloudComponent().editProcessFilterDialog().checkCancelButtonIsEnabled()).toEqual(true); - processCloudDemoPage.editProcessFilterCloudComponent().editProcessFilterDialog().clickOnCancelButton(); - - processCloudDemoPage.editProcessFilterCloudComponent().clickCustomiseFilterHeader().checkCustomiseFilterHeaderIsExpanded(); - processCloudDemoPage.editProcessFilterCloudComponent().setSortFilterDropDown('StartDate'); - expect(processCloudDemoPage.editProcessFilterCloudComponent().getSortFilterDropDownValue()).toEqual('StartDate'); - processCloudDemoPage.editProcessFilterCloudComponent().clickSaveButton(); - }); - - it('[C291809] Process filter dialog is displayed when clicking on Save As button', () => { - processCloudDemoPage.allProcessesFilter().clickProcessFilter(); - - processCloudDemoPage.editProcessFilterCloudComponent().setSortFilterDropDown('Name'); - processCloudDemoPage.allProcessesFilter().checkProcessFilterIsDisplayed(); - processCloudDemoPage.editProcessFilterCloudComponent().clickSaveAsButton(); - expect(processCloudDemoPage.editProcessFilterCloudComponent().editProcessFilterDialog().checkCancelButtonIsEnabled()).toEqual(true); - expect(processCloudDemoPage.editProcessFilterCloudComponent().editProcessFilterDialog().checkSaveButtonIsEnabled()).toEqual(true); - expect(processCloudDemoPage.editProcessFilterCloudComponent().editProcessFilterDialog().getTitle()).toEqual('Save filter as'); - expect(processCloudDemoPage.editProcessFilterCloudComponent().editProcessFilterDialog().getFilterName()).toEqual('All Processes'); - processCloudDemoPage.editProcessFilterCloudComponent().editProcessFilterDialog().clickOnCancelButton(); + it('[C291809] Process filter dialog is displayed when clicking on Save As button', async () => { + await processCloudDemoPage.editProcessFilterCloudComponent().setSortFilterDropDown('Name'); + await processCloudDemoPage.allProcessesFilter().checkProcessFilterIsDisplayed(); + await processCloudDemoPage.editProcessFilterCloudComponent().clickSaveAsButton(); + await expect(await processCloudDemoPage.editProcessFilterCloudComponent().editProcessFilterDialog().checkCancelButtonIsEnabled()).toEqual(true); + await expect(await processCloudDemoPage.editProcessFilterCloudComponent().editProcessFilterDialog().checkSaveButtonIsEnabled()).toEqual(true); + await expect(await processCloudDemoPage.editProcessFilterCloudComponent().editProcessFilterDialog().getTitle()).toEqual('Save filter as'); + await expect(await processCloudDemoPage.editProcessFilterCloudComponent().editProcessFilterDialog().getFilterName()).toEqual('All Processes'); + await processCloudDemoPage.editProcessFilterCloudComponent().editProcessFilterDialog().clickOnCancelButton(); }); }); diff --git a/e2e/process-services-cloud/edit-task-filters-component.e2e.ts b/e2e/process-services-cloud/edit-task-filters-component.e2e.ts index 19c30632c2..15afb150dd 100644 --- a/e2e/process-services-cloud/edit-task-filters-component.e2e.ts +++ b/e2e/process-services-cloud/edit-task-filters-component.e2e.ts @@ -16,7 +16,16 @@ */ import { browser } from 'protractor'; -import { AppListCloudPage, StringUtil, ApiService, LoginSSOPage, TasksService, SettingsPage, IdentityService, GroupIdentityService } from '@alfresco/adf-testing'; +import { + AppListCloudPage, + StringUtil, + ApiService, + LoginSSOPage, + TasksService, + SettingsPage, + IdentityService, + GroupIdentityService +} from '@alfresco/adf-testing'; import { NavigationBarPage } from '../pages/adf/navigationBarPage'; import { TasksCloudDemoPage } from '../pages/adf/demo-shell/process-services/tasksCloudDemoPage'; @@ -37,9 +46,10 @@ describe('Edit task filters cloud', () => { const apiService = new ApiService(browser.params.config.oauth2.clientId, browser.params.config.bpmHost, browser.params.config.oauth2.host, 'BPM'); const simpleApp = resources.ACTIVITI7_APPS.SIMPLE_APP.name; - const completedTaskName = StringUtil.generateRandomString(), assignedTaskName = StringUtil.generateRandomString(); + const completedTaskName = StringUtil.generateRandomString(), + assignedTaskName = StringUtil.generateRandomString(); - beforeAll(async (done) => { + beforeAll(async () => { await apiService.login(browser.params.identityAdmin.email, browser.params.identityAdmin.password); identityService = new IdentityService(apiService); groupIdentityService = new GroupIdentityService(apiService); @@ -58,192 +68,229 @@ describe('Edit task filters cloud', () => { browser.params.config.oauth2.host, browser.params.config.identityHost); await loginSSOPage.loginSSOIdentityService(testUser.email, testUser.password); - done(); }); - afterAll(async(done) => { + afterAll(async () => { await apiService.login(browser.params.identityAdmin.email, browser.params.identityAdmin.password); await identityService.deleteIdentityUser(testUser.idIdentityService); - done(); }); - beforeEach(() => { - navigationBarPage.navigateToProcessServicesCloudPage(); - appListCloudComponent.checkApsContainer(); - appListCloudComponent.goToApp(simpleApp); + beforeEach(async () => { + await navigationBarPage.navigateToProcessServicesCloudPage(); + await appListCloudComponent.checkApsContainer(); + await appListCloudComponent.goToApp(simpleApp); }); - afterEach((done) => { - tasksCloudDemoPage.myTasksFilter().clickTaskFilter(); - done(); + afterEach(async () => { + await tasksCloudDemoPage.myTasksFilter().clickTaskFilter(); }); - it('[C291785] All the filters property should be set up accordingly with the Query Param', () => { - tasksCloudDemoPage.editTaskFilterCloudComponent().clickCustomiseFilterHeader(); - tasksCloudDemoPage.myTasksFilter().checkTaskFilterIsDisplayed(); - expect(tasksCloudDemoPage.getActiveFilterName()).toBe('My Tasks'); - expect(tasksCloudDemoPage.editTaskFilterCloudComponent().getStatusFilterDropDownValue()).toEqual('ASSIGNED'); - expect(tasksCloudDemoPage.editTaskFilterCloudComponent().getSortFilterDropDownValue()).toEqual('CreatedDate'); - expect(tasksCloudDemoPage.editTaskFilterCloudComponent().getOrderFilterDropDownValue()).toEqual('DESC'); - tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(assignedTaskName); - tasksCloudDemoPage.taskListCloudComponent().checkContentIsNotDisplayedByName(completedTaskName); + it('[C291785] All the filters property should be set up accordingly with the Query Param', async () => { + await tasksCloudDemoPage.editTaskFilterCloudComponent().openFilter(); + await tasksCloudDemoPage.myTasksFilter().checkTaskFilterIsDisplayed(); + await expect(await tasksCloudDemoPage.getActiveFilterName()).toBe('My Tasks'); + await expect(await tasksCloudDemoPage.editTaskFilterCloudComponent().getStatusFilterDropDownValue()).toEqual('ASSIGNED'); + await expect(await tasksCloudDemoPage.editTaskFilterCloudComponent().getSortFilterDropDownValue()).toEqual('CreatedDate'); + await expect(await tasksCloudDemoPage.editTaskFilterCloudComponent().getOrderFilterDropDownValue()).toEqual('DESC'); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(assignedTaskName); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsNotDisplayedByName(completedTaskName); - tasksCloudDemoPage.completedTasksFilter().clickTaskFilter(); - expect(tasksCloudDemoPage.getActiveFilterName()).toBe('Completed Tasks'); - expect(tasksCloudDemoPage.editTaskFilterCloudComponent().getStatusFilterDropDownValue()).toEqual('COMPLETED'); - expect(tasksCloudDemoPage.editTaskFilterCloudComponent().getSortFilterDropDownValue()).toEqual('CreatedDate'); - expect(tasksCloudDemoPage.editTaskFilterCloudComponent().getOrderFilterDropDownValue()).toEqual('DESC'); - tasksCloudDemoPage.taskListCloudComponent().checkContentIsNotDisplayedByName(assignedTaskName); - tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(completedTaskName); - tasksCloudDemoPage.editTaskFilterCloudComponent().clickCustomiseFilterHeader(); + await tasksCloudDemoPage.completedTasksFilter().clickTaskFilter(); + await expect(await tasksCloudDemoPage.getActiveFilterName()).toBe('Completed Tasks'); + await expect(await tasksCloudDemoPage.editTaskFilterCloudComponent().getStatusFilterDropDownValue()).toEqual('COMPLETED'); + await expect(await tasksCloudDemoPage.editTaskFilterCloudComponent().getSortFilterDropDownValue()).toEqual('CreatedDate'); + await expect(await tasksCloudDemoPage.editTaskFilterCloudComponent().getOrderFilterDropDownValue()).toEqual('DESC'); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsNotDisplayedByName(assignedTaskName); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(completedTaskName); + await tasksCloudDemoPage.editTaskFilterCloudComponent().openFilter(); }); - it('[C306896] Delete Save and Save as actions should be displayed when clicking on custom filter header', () => { - tasksCloudDemoPage.myTasksFilter().clickTaskFilter(); - tasksCloudDemoPage.editTaskFilterCloudComponent().clickCustomiseFilterHeader(); - tasksCloudDemoPage.myTasksFilter().checkTaskFilterIsDisplayed(); - expect(tasksCloudDemoPage.getActiveFilterName()).toBe('My Tasks'); - tasksCloudDemoPage.editTaskFilterCloudComponent().checkSaveButtonIsDisplayed().checkSaveAsButtonIsDisplayed() - .checkDeleteButtonIsDisplayed(); - expect(tasksCloudDemoPage.editTaskFilterCloudComponent().checkSaveButtonIsEnabled()).toEqual(false); - expect(tasksCloudDemoPage.editTaskFilterCloudComponent().checkSaveAsButtonIsEnabled()).toEqual(false); - expect(tasksCloudDemoPage.editTaskFilterCloudComponent().checkDeleteButtonIsEnabled()).toEqual(true); - tasksCloudDemoPage.editTaskFilterCloudComponent().clickCustomiseFilterHeader(); + it('[C306896] Delete Save and Save as actions should be displayed when clicking on custom filter header', async () => { + await tasksCloudDemoPage.myTasksFilter().clickTaskFilter(); + await tasksCloudDemoPage.editTaskFilterCloudComponent().openFilter(); + await tasksCloudDemoPage.myTasksFilter().checkTaskFilterIsDisplayed(); + await expect(await tasksCloudDemoPage.getActiveFilterName()).toBe('My Tasks'); + const editTaskFilterCloudComponent = tasksCloudDemoPage.editTaskFilterCloudComponent(); + + await editTaskFilterCloudComponent.checkSaveButtonIsDisplayed(); + await editTaskFilterCloudComponent.checkSaveAsButtonIsDisplayed(); + await editTaskFilterCloudComponent.checkDeleteButtonIsDisplayed(); + + await expect(await tasksCloudDemoPage.editTaskFilterCloudComponent().checkSaveButtonIsEnabled()).toEqual(false); + await expect(await tasksCloudDemoPage.editTaskFilterCloudComponent().checkSaveAsButtonIsEnabled()).toEqual(false); + await expect(await tasksCloudDemoPage.editTaskFilterCloudComponent().checkDeleteButtonIsEnabled()).toEqual(true); + await tasksCloudDemoPage.editTaskFilterCloudComponent().openFilter(); }); - it('[C291795] New filter is added when clicking Save As button', () => { - tasksCloudDemoPage.myTasksFilter().clickTaskFilter(); - tasksCloudDemoPage.editTaskFilterCloudComponent().clickCustomiseFilterHeader().setSortFilterDropDown('Id'); - tasksCloudDemoPage.myTasksFilter().checkTaskFilterIsDisplayed(); + it('[C291795] New filter is added when clicking Save As button', async () => { + await tasksCloudDemoPage.myTasksFilter().clickTaskFilter(); - tasksCloudDemoPage.editTaskFilterCloudComponent().clickSaveAsButton(); - tasksCloudDemoPage.editTaskFilterCloudComponent().editTaskFilterDialog().setFilterName('New').clickOnSaveButton(); + const editTaskFilterCloudComponent = tasksCloudDemoPage.editTaskFilterCloudComponent(); + await editTaskFilterCloudComponent.openFilter(); + await editTaskFilterCloudComponent.setSortFilterDropDown('Id'); - browser.driver.sleep(1000); - expect(tasksCloudDemoPage.getActiveFilterName()).toBe('New'); - tasksCloudDemoPage.editTaskFilterCloudComponent().clickCustomiseFilterHeader(); - expect(tasksCloudDemoPage.editTaskFilterCloudComponent().checkSaveButtonIsEnabled()).toEqual(false); - expect(tasksCloudDemoPage.editTaskFilterCloudComponent().getSortFilterDropDownValue()).toEqual('Id'); - expect(tasksCloudDemoPage.editTaskFilterCloudComponent().checkSaveAsButtonIsEnabled()).toEqual(false); - expect(tasksCloudDemoPage.editTaskFilterCloudComponent().checkDeleteButtonIsEnabled()).toEqual(true); - tasksCloudDemoPage.myTasksFilter().clickTaskFilter(); - expect(tasksCloudDemoPage.editTaskFilterCloudComponent().getSortFilterDropDownValue()).toEqual('CreatedDate'); - tasksCloudDemoPage.customTaskFilter('custom-new').clickTaskFilter(); - expect(tasksCloudDemoPage.editTaskFilterCloudComponent().getSortFilterDropDownValue()).toEqual('Id'); - tasksCloudDemoPage.editTaskFilterCloudComponent().clickDeleteButton(); + await tasksCloudDemoPage.myTasksFilter().checkTaskFilterIsDisplayed(); + + await tasksCloudDemoPage.editTaskFilterCloudComponent().clickSaveAsButton(); + + const editTaskFilterDialog = tasksCloudDemoPage.editTaskFilterCloudComponent().editTaskFilterDialog(); + await editTaskFilterDialog.setFilterName('New'); + await editTaskFilterDialog.clickOnSaveButton(); + + await expect(await tasksCloudDemoPage.getActiveFilterName()).toBe('New'); + await tasksCloudDemoPage.editTaskFilterCloudComponent().openFilter(); + await expect(await tasksCloudDemoPage.editTaskFilterCloudComponent().checkSaveButtonIsEnabled()).toEqual(false); + await expect(await tasksCloudDemoPage.editTaskFilterCloudComponent().getSortFilterDropDownValue()).toEqual('Id'); + await expect(await tasksCloudDemoPage.editTaskFilterCloudComponent().checkSaveAsButtonIsEnabled()).toEqual(false); + await expect(await tasksCloudDemoPage.editTaskFilterCloudComponent().checkDeleteButtonIsEnabled()).toEqual(true); + await tasksCloudDemoPage.myTasksFilter().clickTaskFilter(); + await expect(await tasksCloudDemoPage.editTaskFilterCloudComponent().getSortFilterDropDownValue()).toEqual('CreatedDate'); + await tasksCloudDemoPage.customTaskFilter('custom-new').clickTaskFilter(); + await expect(await tasksCloudDemoPage.editTaskFilterCloudComponent().getSortFilterDropDownValue()).toEqual('Id'); + await tasksCloudDemoPage.editTaskFilterCloudComponent().clickDeleteButton(); }); - it('[C291796] Two filters with same name can be created when clicking the Save As button', () => { - tasksCloudDemoPage.myTasksFilter().clickTaskFilter(); - tasksCloudDemoPage.editTaskFilterCloudComponent().clickCustomiseFilterHeader().setSortFilterDropDown('Id'); - tasksCloudDemoPage.myTasksFilter().checkTaskFilterIsDisplayed(); + it('[C291796] Two filters with same name can be created when clicking the Save As button', async () => { + await tasksCloudDemoPage.myTasksFilter().clickTaskFilter(); - tasksCloudDemoPage.editTaskFilterCloudComponent().clickSaveAsButton(); - tasksCloudDemoPage.editTaskFilterCloudComponent().editTaskFilterDialog().setFilterName('New').clickOnSaveButton(); + const editTaskFilterCloudComponent = tasksCloudDemoPage.editTaskFilterCloudComponent(); + await editTaskFilterCloudComponent.openFilter(); + await editTaskFilterCloudComponent.setSortFilterDropDown('Id'); - browser.driver.sleep(1000); - expect(tasksCloudDemoPage.getActiveFilterName()).toBe('New'); - tasksCloudDemoPage.editTaskFilterCloudComponent().clickCustomiseFilterHeader(); - expect(tasksCloudDemoPage.editTaskFilterCloudComponent().getSortFilterDropDownValue()).toEqual('Id'); - tasksCloudDemoPage.editTaskFilterCloudComponent().setSortFilterDropDown('Priority'); - tasksCloudDemoPage.editTaskFilterCloudComponent().clickSaveAsButton(); - tasksCloudDemoPage.editTaskFilterCloudComponent().editTaskFilterDialog().setFilterName('New').clickOnSaveButton(); + await tasksCloudDemoPage.myTasksFilter().checkTaskFilterIsDisplayed(); - browser.driver.sleep(1000); - expect(tasksCloudDemoPage.getActiveFilterName()).toBe('New'); - tasksCloudDemoPage.editTaskFilterCloudComponent().clickCustomiseFilterHeader(); - expect(tasksCloudDemoPage.editTaskFilterCloudComponent().getSortFilterDropDownValue()).toEqual('Priority'); - tasksCloudDemoPage.editTaskFilterCloudComponent().clickDeleteButton(); - tasksCloudDemoPage.customTaskFilter('custom-new').clickTaskFilter(); - browser.driver.sleep(1000); - tasksCloudDemoPage.editTaskFilterCloudComponent().clickCustomiseFilterHeader(); - expect(tasksCloudDemoPage.editTaskFilterCloudComponent().getSortFilterDropDownValue()).toEqual('Id'); - tasksCloudDemoPage.editTaskFilterCloudComponent().clickDeleteButton(); + await tasksCloudDemoPage.editTaskFilterCloudComponent().clickSaveAsButton(); + + const editTaskFilterDialog = editTaskFilterCloudComponent.editTaskFilterDialog(); + await editTaskFilterDialog.setFilterName('New'); + await editTaskFilterDialog.clickOnSaveButton(); + + await expect(await tasksCloudDemoPage.getActiveFilterName()).toBe('New'); + await tasksCloudDemoPage.editTaskFilterCloudComponent().openFilter(); + + await expect(await tasksCloudDemoPage.editTaskFilterCloudComponent().getSortFilterDropDownValue()).toEqual('Id'); + await tasksCloudDemoPage.editTaskFilterCloudComponent().setSortFilterDropDown('Priority'); + await tasksCloudDemoPage.editTaskFilterCloudComponent().clickSaveAsButton(); + await tasksCloudDemoPage.editTaskFilterCloudComponent().editTaskFilterDialog().setFilterName('New'); + await tasksCloudDemoPage.editTaskFilterCloudComponent().editTaskFilterDialog().clickOnSaveButton(); + + await expect(await tasksCloudDemoPage.getActiveFilterName()).toBe('New'); + await tasksCloudDemoPage.editTaskFilterCloudComponent().openFilter(); + await expect(await tasksCloudDemoPage.editTaskFilterCloudComponent().getSortFilterDropDownValue()).toEqual('Priority'); + await tasksCloudDemoPage.editTaskFilterCloudComponent().clickDeleteButton(); + await tasksCloudDemoPage.customTaskFilter('custom-new').clickTaskFilter(); + + await tasksCloudDemoPage.editTaskFilterCloudComponent().openFilter(); + await expect(await tasksCloudDemoPage.editTaskFilterCloudComponent().getSortFilterDropDownValue()).toEqual('Id'); + await tasksCloudDemoPage.editTaskFilterCloudComponent().clickDeleteButton(); }); - it('[C291797] A filter is overrided when clicking on save button', () => { - tasksCloudDemoPage.myTasksFilter().clickTaskFilter(); - tasksCloudDemoPage.editTaskFilterCloudComponent().clickCustomiseFilterHeader().setSortFilterDropDown('Id'); - tasksCloudDemoPage.myTasksFilter().checkTaskFilterIsDisplayed(); - tasksCloudDemoPage.editTaskFilterCloudComponent().clickSaveAsButton(); - tasksCloudDemoPage.editTaskFilterCloudComponent().editTaskFilterDialog().setFilterName('New').clickOnSaveButton(); + it('[C291797] A filter is overrided when clicking on save button', async () => { + await tasksCloudDemoPage.myTasksFilter().clickTaskFilter(); - browser.driver.sleep(1000); - expect(tasksCloudDemoPage.getActiveFilterName()).toBe('New'); - tasksCloudDemoPage.editTaskFilterCloudComponent().clickCustomiseFilterHeader(); - expect(tasksCloudDemoPage.editTaskFilterCloudComponent().getSortFilterDropDownValue()).toEqual('Id'); - tasksCloudDemoPage.editTaskFilterCloudComponent().setSortFilterDropDown('Name'); - tasksCloudDemoPage.editTaskFilterCloudComponent().clickSaveButton(); - tasksCloudDemoPage.editTaskFilterCloudComponent().clickCustomiseFilterHeader(); + const editTaskFilterCloudComponent = tasksCloudDemoPage.editTaskFilterCloudComponent(); + await editTaskFilterCloudComponent.openFilter(); + await editTaskFilterCloudComponent.setSortFilterDropDown('Id'); - browser.driver.sleep(1000); - expect(tasksCloudDemoPage.getActiveFilterName()).toBe('New'); - expect(tasksCloudDemoPage.editTaskFilterCloudComponent().getSortFilterDropDownValue()).toEqual('Name'); - tasksCloudDemoPage.editTaskFilterCloudComponent().clickDeleteButton(); + await tasksCloudDemoPage.myTasksFilter().checkTaskFilterIsDisplayed(); + await tasksCloudDemoPage.editTaskFilterCloudComponent().clickSaveAsButton(); + + const editTaskFilterDialog = await tasksCloudDemoPage.editTaskFilterCloudComponent().editTaskFilterDialog(); + await editTaskFilterDialog.setFilterName('New'); + await editTaskFilterDialog.clickOnSaveButton(); + + await expect(await tasksCloudDemoPage.getActiveFilterName()).toBe('New'); + await tasksCloudDemoPage.editTaskFilterCloudComponent().openFilter(); + await expect(await tasksCloudDemoPage.editTaskFilterCloudComponent().getSortFilterDropDownValue()).toEqual('Id'); + await tasksCloudDemoPage.editTaskFilterCloudComponent().setSortFilterDropDown('Name'); + await tasksCloudDemoPage.editTaskFilterCloudComponent().clickSaveButton(); + await tasksCloudDemoPage.editTaskFilterCloudComponent().openFilter(); + + await expect(await tasksCloudDemoPage.getActiveFilterName()).toBe('New'); + await expect(await tasksCloudDemoPage.editTaskFilterCloudComponent().getSortFilterDropDownValue()).toEqual('Name'); + await tasksCloudDemoPage.editTaskFilterCloudComponent().clickDeleteButton(); }); - it('[C291798] A filter is deleted when clicking on delete button', () => { - tasksCloudDemoPage.myTasksFilter().clickTaskFilter(); - tasksCloudDemoPage.editTaskFilterCloudComponent().clickCustomiseFilterHeader().setSortFilterDropDown('Id'); - tasksCloudDemoPage.myTasksFilter().checkTaskFilterIsDisplayed(); - tasksCloudDemoPage.editTaskFilterCloudComponent().clickSaveAsButton(); - tasksCloudDemoPage.editTaskFilterCloudComponent().editTaskFilterDialog().setFilterName('New').clickOnSaveButton(); + it('[C291798] A filter is deleted when clicking on delete button', async () => { + await tasksCloudDemoPage.myTasksFilter().clickTaskFilter(); - browser.driver.sleep(1000); + const editTaskFilterCloudComponent = tasksCloudDemoPage.editTaskFilterCloudComponent(); + await editTaskFilterCloudComponent.openFilter(); + await editTaskFilterCloudComponent.setSortFilterDropDown('Id'); - expect(tasksCloudDemoPage.getActiveFilterName()).toBe('New'); - tasksCloudDemoPage.editTaskFilterCloudComponent().clickCustomiseFilterHeader(); - expect(tasksCloudDemoPage.editTaskFilterCloudComponent().getSortFilterDropDownValue()).toEqual('Id'); - tasksCloudDemoPage.editTaskFilterCloudComponent().clickDeleteButton(); + await tasksCloudDemoPage.myTasksFilter().checkTaskFilterIsDisplayed(); + await tasksCloudDemoPage.editTaskFilterCloudComponent().clickSaveAsButton(); - browser.driver.sleep(1000); + const editTaskFilterDialog = await tasksCloudDemoPage.editTaskFilterCloudComponent().editTaskFilterDialog(); + await editTaskFilterDialog.setFilterName('New'); + await editTaskFilterDialog.clickOnSaveButton(); - expect(tasksCloudDemoPage.getActiveFilterName()).toBe('My Tasks'); - tasksCloudDemoPage.customTaskFilter('New').checkTaskFilterNotDisplayed(); + await expect(await tasksCloudDemoPage.getActiveFilterName()).toBe('New'); + await tasksCloudDemoPage.editTaskFilterCloudComponent().openFilter(); + await expect(await tasksCloudDemoPage.editTaskFilterCloudComponent().getSortFilterDropDownValue()).toEqual('Id'); + await tasksCloudDemoPage.editTaskFilterCloudComponent().clickDeleteButton(); + + await expect(await tasksCloudDemoPage.getActiveFilterName()).toBe('My Tasks'); + await tasksCloudDemoPage.customTaskFilter('New').checkTaskFilterNotDisplayed(); }); - it('[C291800] Task filter should not be created when task filter dialog is closed', () => { - tasksCloudDemoPage.myTasksFilter().clickTaskFilter(); - tasksCloudDemoPage.editTaskFilterCloudComponent().clickCustomiseFilterHeader().setSortFilterDropDown('Priority'); - expect(tasksCloudDemoPage.editTaskFilterCloudComponent().getSortFilterDropDownValue()).toEqual('Priority'); - tasksCloudDemoPage.editTaskFilterCloudComponent().clickSaveAsButton(); - expect(tasksCloudDemoPage.editTaskFilterCloudComponent().editTaskFilterDialog().getFilterName()).toEqual('My Tasks'); - tasksCloudDemoPage.editTaskFilterCloudComponent().editTaskFilterDialog().setFilterName('Cancel'); - expect(tasksCloudDemoPage.editTaskFilterCloudComponent().editTaskFilterDialog().getFilterName()).toEqual('Cancel'); - tasksCloudDemoPage.editTaskFilterCloudComponent().editTaskFilterDialog().clickOnCancelButton(); - tasksCloudDemoPage.customTaskFilter('Cancel').checkTaskFilterNotDisplayed(); - expect(tasksCloudDemoPage.getActiveFilterName()).toEqual('My Tasks'); - tasksCloudDemoPage.completedTasksFilter().clickTaskFilter(); - tasksCloudDemoPage.myTasksFilter().clickTaskFilter(); - tasksCloudDemoPage.editTaskFilterCloudComponent().clickCustomiseFilterHeader(); - expect(tasksCloudDemoPage.getActiveFilterName()).toBe('My Tasks'); - expect(tasksCloudDemoPage.editTaskFilterCloudComponent().getSortFilterDropDownValue()).toEqual('CreatedDate'); - tasksCloudDemoPage.editTaskFilterCloudComponent().clickCustomiseFilterHeader(); + it('[C291800] Task filter should not be created when task filter dialog is closed', async () => { + await tasksCloudDemoPage.myTasksFilter().clickTaskFilter(); + + const editTaskFilterCloudComponent = tasksCloudDemoPage.editTaskFilterCloudComponent(); + await editTaskFilterCloudComponent.openFilter(); + await editTaskFilterCloudComponent.setSortFilterDropDown('Priority'); + + await expect(await tasksCloudDemoPage.editTaskFilterCloudComponent().getSortFilterDropDownValue()).toEqual('Priority'); + await tasksCloudDemoPage.editTaskFilterCloudComponent().clickSaveAsButton(); + await expect(await tasksCloudDemoPage.editTaskFilterCloudComponent().editTaskFilterDialog().getFilterName()).toEqual('My Tasks'); + await tasksCloudDemoPage.editTaskFilterCloudComponent().editTaskFilterDialog().setFilterName('Cancel'); + await expect(await tasksCloudDemoPage.editTaskFilterCloudComponent().editTaskFilterDialog().getFilterName()).toEqual('Cancel'); + await tasksCloudDemoPage.editTaskFilterCloudComponent().editTaskFilterDialog().clickOnCancelButton(); + await tasksCloudDemoPage.customTaskFilter('Cancel').checkTaskFilterNotDisplayed(); + await expect(await tasksCloudDemoPage.getActiveFilterName()).toEqual('My Tasks'); + await tasksCloudDemoPage.completedTasksFilter().clickTaskFilter(); + await tasksCloudDemoPage.myTasksFilter().clickTaskFilter(); + await tasksCloudDemoPage.editTaskFilterCloudComponent().openFilter(); + await expect(await tasksCloudDemoPage.getActiveFilterName()).toBe('My Tasks'); + await expect(await tasksCloudDemoPage.editTaskFilterCloudComponent().getSortFilterDropDownValue()).toEqual('CreatedDate'); + await tasksCloudDemoPage.editTaskFilterCloudComponent().openFilter(); }); - it('[C291801] Save button of task filter dialog should be disabled when task name is empty', () => { - tasksCloudDemoPage.myTasksFilter().clickTaskFilter(); - tasksCloudDemoPage.editTaskFilterCloudComponent().clickCustomiseFilterHeader().setSortFilterDropDown('Id'); - expect(tasksCloudDemoPage.editTaskFilterCloudComponent().getSortFilterDropDownValue()).toEqual('Id'); - tasksCloudDemoPage.editTaskFilterCloudComponent().clickSaveAsButton(); - expect(tasksCloudDemoPage.editTaskFilterCloudComponent().editTaskFilterDialog().getFilterName()).toEqual('My Tasks'); - tasksCloudDemoPage.editTaskFilterCloudComponent().editTaskFilterDialog().clearFilterName(); - expect(tasksCloudDemoPage.editTaskFilterCloudComponent().editTaskFilterDialog().getFilterName()).toEqual(''); - expect(tasksCloudDemoPage.editTaskFilterCloudComponent().editTaskFilterDialog().checkSaveButtonIsEnabled()).toEqual(false); - expect(tasksCloudDemoPage.editTaskFilterCloudComponent().editTaskFilterDialog().checkCancelButtonIsEnabled()).toEqual(true); - tasksCloudDemoPage.editTaskFilterCloudComponent().editTaskFilterDialog().clickOnCancelButton(); + it('[C291801] Save button of task filter dialog should be disabled when task name is empty', async () => { + await tasksCloudDemoPage.myTasksFilter().clickTaskFilter(); + + const editTaskFilterCloudComponent = tasksCloudDemoPage.editTaskFilterCloudComponent(); + await editTaskFilterCloudComponent.openFilter(); + await editTaskFilterCloudComponent.setSortFilterDropDown('Id'); + + await expect(await tasksCloudDemoPage.editTaskFilterCloudComponent().getSortFilterDropDownValue()).toEqual('Id'); + await tasksCloudDemoPage.editTaskFilterCloudComponent().clickSaveAsButton(); + + await expect(await tasksCloudDemoPage.editTaskFilterCloudComponent().editTaskFilterDialog().getFilterName()).toEqual('My Tasks'); + + const tasksCloud = tasksCloudDemoPage.editTaskFilterCloudComponent(); + await tasksCloud.editTaskFilterDialog().clearFilterName(); + + await expect(await tasksCloudDemoPage.editTaskFilterCloudComponent().editTaskFilterDialog().getFilterName()).toEqual(''); + + await expect(await tasksCloudDemoPage.editTaskFilterCloudComponent().editTaskFilterDialog().checkSaveButtonIsEnabled()).toEqual(false); + await expect(await tasksCloudDemoPage.editTaskFilterCloudComponent().editTaskFilterDialog().checkCancelButtonIsEnabled()).toEqual(true); + await tasksCloudDemoPage.editTaskFilterCloudComponent().editTaskFilterDialog().clickOnCancelButton(); }); - it('[C291799] Task filter dialog is displayed when clicking on Save As button', () => { - tasksCloudDemoPage.myTasksFilter().clickTaskFilter(); - tasksCloudDemoPage.editTaskFilterCloudComponent().clickCustomiseFilterHeader().setSortFilterDropDown('Id'); - expect(tasksCloudDemoPage.editTaskFilterCloudComponent().getSortFilterDropDownValue()).toEqual('Id'); - tasksCloudDemoPage.editTaskFilterCloudComponent().clickSaveAsButton(); - expect(tasksCloudDemoPage.editTaskFilterCloudComponent().editTaskFilterDialog().checkSaveButtonIsEnabled()).toEqual(true); - expect(tasksCloudDemoPage.editTaskFilterCloudComponent().editTaskFilterDialog().checkCancelButtonIsEnabled()).toEqual(true); - expect(tasksCloudDemoPage.editTaskFilterCloudComponent().editTaskFilterDialog().getTitle()).toEqual('Save filter as'); - expect(tasksCloudDemoPage.editTaskFilterCloudComponent().editTaskFilterDialog().getFilterName()).toEqual('My Tasks'); - tasksCloudDemoPage.editTaskFilterCloudComponent().editTaskFilterDialog().clickOnCancelButton(); + it('[C291799] Task filter dialog is displayed when clicking on Save As button', async () => { + await tasksCloudDemoPage.myTasksFilter().clickTaskFilter(); + const tasksCloud = tasksCloudDemoPage.editTaskFilterCloudComponent(); + await tasksCloud.openFilter(); + await tasksCloud.setSortFilterDropDown('Id'); + await expect(await tasksCloudDemoPage.editTaskFilterCloudComponent().getSortFilterDropDownValue()).toEqual('Id'); + await tasksCloudDemoPage.editTaskFilterCloudComponent().clickSaveAsButton(); + await expect(await tasksCloudDemoPage.editTaskFilterCloudComponent().editTaskFilterDialog().checkSaveButtonIsEnabled()).toEqual(true); + await expect(await tasksCloudDemoPage.editTaskFilterCloudComponent().editTaskFilterDialog().checkCancelButtonIsEnabled()).toEqual(true); + await expect(await tasksCloudDemoPage.editTaskFilterCloudComponent().editTaskFilterDialog().getTitle()).toEqual('Save filter as'); + await expect(await tasksCloudDemoPage.editTaskFilterCloudComponent().editTaskFilterDialog().getFilterName()).toEqual('My Tasks'); + await tasksCloudDemoPage.editTaskFilterCloudComponent().editTaskFilterDialog().clickOnCancelButton(); }); }); diff --git a/e2e/process-services-cloud/form-field/date-widget.e2e.ts b/e2e/process-services-cloud/form-field/date-widget.e2e.ts new file mode 100644 index 0000000000..b4b47403ed --- /dev/null +++ b/e2e/process-services-cloud/form-field/date-widget.e2e.ts @@ -0,0 +1,68 @@ +/*! + * @license + * Copyright 2019 Alfresco Software, Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { + LoginSSOPage, + SettingsPage, + Widget, + BrowserActions, FormPage +} from '@alfresco/adf-testing'; +import { browser } from 'protractor'; +import { customDateFormAPS2 } from '../../resources/forms/custom-date-form'; +import { FormCloudDemoPage } from '../../pages/adf/demo-shell/process-services-cloud/cloudFormDemoPage'; + +describe('Form Field Component - Dropdown Widget', () => { + const loginSSOPage = new LoginSSOPage(); + const settingsPage = new SettingsPage(); + const widget = new Widget(); + const dateWidget = widget.dateWidget(); + + const formDemoPage = new FormCloudDemoPage(); + const formJson = JSON.parse(customDateFormAPS2); + const formPage = new FormPage(); + + beforeAll(async () => { + await settingsPage.setProviderBpmSso( + browser.params.config.bpmHost, + browser.params.config.oauth2.host, + browser.params.config.identityHost); + await loginSSOPage.loginSSOIdentityService(browser.params.identityUser.email, browser.params.identityUser.password); + }); + + beforeEach(async () => { + const urlFormDemoPage = `${browser.params.testConfig.adf.url}/form-cloud`; + await BrowserActions.getUrl(urlFormDemoPage); + }); + + it('[C313199] Should display the validation for min and max date values with custom date format', async () => { + await formDemoPage.setConfigToEditor(formJson); + await dateWidget.setDateInput('datefield', '18-7-19'); + await formPage.saveForm(); + await expect(await dateWidget.getErrorMessage('datefield')) + .toBe('Can\'t be less than 19-7-19', 'Min date validation is not working'); + await dateWidget.clearDateInput('datefield'); + await dateWidget.setDateInput('datefield', '20-7-19'); + await formPage.saveForm(); + await expect(await dateWidget.getErrorMessage('datefield')) + .toBe('Can\'t be greater than 19-8-19', 'Max date validation is not working'); + await dateWidget.clearDateInput('datefield'); + await dateWidget.setDateInput('datefield', '19-7-19'); + await formPage.saveForm(); + await dateWidget.checkErrorMessageIsNotDisplayed('datefield'); + }); + +}); diff --git a/e2e/process-services-cloud/form-field/dropdown-widget.e2e.ts b/e2e/process-services-cloud/form-field/dropdown-widget.e2e.ts index be21a04dd6..4d98e627b0 100644 --- a/e2e/process-services-cloud/form-field/dropdown-widget.e2e.ts +++ b/e2e/process-services-cloud/form-field/dropdown-widget.e2e.ts @@ -16,8 +16,19 @@ */ import { - TasksService, QueryService, ProcessDefinitionsService, ProcessInstancesService, - LoginSSOPage, ApiService, SettingsPage, IdentityService, GroupIdentityService, Widget, NotificationHistoryPage, TaskHeaderCloudPage, TaskFormCloudComponent + TasksService, + QueryService, + ProcessDefinitionsService, + ProcessInstancesService, + LoginSSOPage, + ApiService, + SettingsPage, + IdentityService, + GroupIdentityService, + Widget, + NotificationHistoryPage, + TaskHeaderCloudPage, + TaskFormCloudComponent } from '@alfresco/adf-testing'; import { NavigationBarPage } from '../../pages/adf/navigationBarPage'; import { TasksCloudDemoPage } from '../../pages/adf/demo-shell/process-services/tasksCloudDemoPage'; @@ -51,7 +62,7 @@ describe('Form Field Component - Dropdown Widget', () => { let runningProcessInstance, testUser, groupInfo, tasklist, task; const simpleApp = resources.ACTIVITI7_APPS.SIMPLE_APP.name; - beforeAll(async (done) => { + beforeAll(async () => { await apiService.login(browser.params.identityAdmin.email, browser.params.identityAdmin.password); identityService = new IdentityService(apiService); @@ -72,7 +83,7 @@ describe('Form Field Component - Dropdown Widget', () => { runningProcessInstance = await processInstancesService.createProcessInstance(processDefinition.entry.key, simpleApp); queryService = new QueryService(apiService); - await browser.driver.sleep(4000); // eventual consistency query + await browser.sleep(4000); // eventual consistency query tasklist = await queryService.getProcessInstanceTasks(runningProcessInstance.entry.id, simpleApp); task = await tasklist.list.entries[0]; tasksService = new TasksService(apiService); @@ -83,46 +94,46 @@ describe('Form Field Component - Dropdown Widget', () => { browser.params.config.oauth2.host, browser.params.config.identityHost); await loginSSOPage.loginSSOIdentityService(testUser.email, testUser.password); - done(); + }); - afterAll(async (done) => { + afterAll(async () => { await apiService.login(browser.params.identityAdmin.email, browser.params.identityAdmin.password); await identityService.deleteIdentityUser(testUser.idIdentityService); - done(); + }); - beforeEach(() => { - navigationBarPage.navigateToProcessServicesCloudPage(); - appListCloudComponent.checkApsContainer(); - appListCloudComponent.goToApp(simpleApp); - - identityService.deleteIdentityUser(testUser.idIdentityService); + beforeEach(async () => { + await navigationBarPage.navigateToProcessServicesCloudPage(); + await appListCloudComponent.checkApsContainer(); + await appListCloudComponent.goToApp(simpleApp); }); it('[C290069] Should be able to read rest service dropdown options, save and complete the task form', async () => { - tasksCloudDemoPage.myTasksFilter().clickTaskFilter(); - tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(task.entry.name); - tasksCloudDemoPage.taskListCloudComponent().selectRow(task.entry.name); - taskHeaderCloudPage.checkTaskPropertyListIsDisplayed(); - taskFormCloudComponent.formFields().checkFormIsDisplayed(); - taskFormCloudComponent.formFields().checkWidgetIsVisible('Dropdown097maj'); - dropdown.selectOption('Clementine Bauch', 'dropdown-cloud-widget mat-select'); - expect(dropdown.getSelectedOptionText('Dropdown097maj')).toBe('Clementine Bauch'); - taskFormCloudComponent.checkSaveButtonIsDisplayed().clickSaveButton(); - expect(dropdown.getSelectedOptionText('Dropdown097maj')).toBe('Clementine Bauch'); - taskFormCloudComponent.checkCompleteButtonIsDisplayed().clickCompleteButton(); - expect(tasksCloudDemoPage.getActiveFilterName()).toBe('My Tasks'); - tasksCloudDemoPage.taskListCloudComponent().checkContentIsNotDisplayedByName(task.entry.name); - notificationHistoryPage.checkNotifyContains('Task has been saved successfully'); + await tasksCloudDemoPage.myTasksFilter().clickTaskFilter(); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(task.entry.name); + await tasksCloudDemoPage.taskListCloudComponent().selectRow(task.entry.name); + await taskHeaderCloudPage.checkTaskPropertyListIsDisplayed(); + await taskFormCloudComponent.formFields().checkFormIsDisplayed(); + await taskFormCloudComponent.formFields().checkWidgetIsVisible('Dropdown097maj'); + await dropdown.selectOption('Clementine Bauch', 'dropdown-cloud-widget mat-select'); + await expect(await dropdown.getSelectedOptionText('Dropdown097maj')).toBe('Clementine Bauch'); + await taskFormCloudComponent.checkSaveButtonIsDisplayed(); + await taskFormCloudComponent.clickSaveButton(); + await expect(await dropdown.getSelectedOptionText('Dropdown097maj')).toBe('Clementine Bauch'); + await taskFormCloudComponent.checkCompleteButtonIsDisplayed(); + await taskFormCloudComponent.clickCompleteButton(); + await expect(await tasksCloudDemoPage.getActiveFilterName()).toBe('My Tasks'); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsNotDisplayedByName(task.entry.name); + await notificationHistoryPage.checkNotifyContains('Task has been saved successfully'); - tasksCloudDemoPage.completedTasksFilter().clickTaskFilter(); - tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(task.entry.name); - tasksCloudDemoPage.taskListCloudComponent().selectRow(task.entry.name); - taskFormCloudComponent.formFields().checkFormIsDisplayed(); - taskFormCloudComponent.formFields().checkWidgetIsVisible('Dropdown097maj'); - expect(dropdown.getSelectedOptionText('Dropdown097maj')).toBe('Clementine Bauch'); - taskFormCloudComponent.checkCompleteButtonIsNotDisplayed(); + await tasksCloudDemoPage.completedTasksFilter().clickTaskFilter(); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(task.entry.name); + await tasksCloudDemoPage.taskListCloudComponent().selectRow(task.entry.name); + await taskFormCloudComponent.formFields().checkFormIsDisplayed(); + await taskFormCloudComponent.formFields().checkWidgetIsVisible('Dropdown097maj'); + await expect(await dropdown.getSelectedOptionText('Dropdown097maj')).toBe('Clementine Bauch'); + await taskFormCloudComponent.checkCompleteButtonIsNotDisplayed(); }); }); diff --git a/e2e/process-services-cloud/form-field/visibility-condition-tabs.e2e.ts b/e2e/process-services-cloud/form-field/visibility-condition-tabs.e2e.ts new file mode 100644 index 0000000000..5b853ae447 --- /dev/null +++ b/e2e/process-services-cloud/form-field/visibility-condition-tabs.e2e.ts @@ -0,0 +1,215 @@ +/*! + * @license + * Copyright 2019 Alfresco Software, Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { LoginSSOPage, SettingsPage, Widget } from '@alfresco/adf-testing'; +import { browser } from 'protractor'; + +import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; +import { NavigationBarPage } from '../../pages/adf/navigationBarPage'; +import { FormCloudDemoPage } from '../../pages/adf/demo-shell/process-services-cloud/cloudFormDemoPage'; +import { tabFieldValueVisibilityJson, tabVarValueVisibilityJson, tabVarFieldVisibilityJson, + tabFieldFieldVisibilityJson, tabFieldVarVisibilityJson, tabVarVarVisibilityJson, + tabNextOperatorsVisibilityJson } from '../../resources/forms/tab-visibility-conditions'; + +describe('Visibility conditions on tabs - cloud', () => { + + const settingsPage = new SettingsPage(); + const loginSSOPage = new LoginSSOPage(); + + const navigationBarPage = new NavigationBarPage(); + const formCloudDemoPage = new FormCloudDemoPage(); + const widget = new Widget(); + + const widgets = { + textOneId: 'TextOne', + textTwoId: 'TextTwo', + textThreeId: 'TextThree' + }; + + const value = { + displayTab: 'showTab', + notDisplayTab: 'anythingElse' + }; + + const tab = { + tabWithFields: 'tabWithFields', + tabFieldValue: 'tabBasicFieldValue', + tabVarValue: 'tabBasicVarValue', + tabVarField: 'tabBasicVarField', + tabFieldField: 'tabBasicFieldField', + tabVarVar: 'tabBasicVarVar', + tabNextOperators: 'tabNextOperators' + }; + + beforeAll(async () => { + this.alfrescoJsApi = new AlfrescoApi({ + provider: 'BPM', + hostBpm: browser.params.testConfig.adf_aps.host + }); + + await settingsPage.setProviderBpmSso( + browser.params.config.bpmHost, + browser.params.config.oauth2.host, + browser.params.config.identityHost); + await loginSSOPage.loginSSOIdentityService(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); + + await navigationBarPage.navigateToFormCloudPage(); + }); + + it('[C309647] Should be able to see tab when visibility condition refers to a field with specific value', async () => { + await formCloudDemoPage.setConfigToEditor(tabFieldValueVisibilityJson); + await widget.tab().checkTabIsDisplayedByLabel(tab.tabWithFields); + await widget.tab().checkTabIsNotDisplayedByLabel(tab.tabFieldValue); + await widget.textWidget().isWidgetVisible(widgets.textOneId); + await widget.textWidget().isWidgetNotVisible(widgets.textTwoId); + await widget.textWidget().setValue(widgets.textOneId, value.displayTab); + await widget.tab().checkTabIsDisplayedByLabel(tab.tabWithFields); + await widget.tab().checkTabIsDisplayedByLabel(tab.tabFieldValue); + + await widget.tab().clickTabByLabel(tab.tabFieldValue); + await widget.textWidget().isWidgetVisible(widgets.textTwoId); + + await widget.tab().clickTabByLabel(tab.tabWithFields); + await widget.textWidget().isWidgetVisible(widgets.textOneId); + await widget.textWidget().setValue(widgets.textOneId, value.notDisplayTab); + await widget.tab().checkTabIsNotDisplayedByLabel(tab.tabFieldValue); + await widget.textWidget().isWidgetNotVisible(widgets.textTwoId); + }); + + it('[C315148] Should be able to see tab when visibility condition refers to a variable with specific value', async () => { + await formCloudDemoPage.setConfigToEditor(tabVarValueVisibilityJson); + await widget.tab().checkTabIsDisplayedByLabel(tab.tabVarValue); + await widget.textWidget().isWidgetVisible(widgets.textTwoId); + + const visibleTab = tabVarValueVisibilityJson; + visibleTab.formRepresentation.formDefinition.variables[0].value = value.notDisplayTab; + await formCloudDemoPage.setConfigToEditor(visibleTab); + + await widget.tab().checkTabIsNotDisplayedByLabel(tab.tabVarValue); + await widget.textWidget().isWidgetNotVisible(widgets.textTwoId); + }); + + it('[C315149] Should be able to see tab when visibility condition refers to a form variable and a field', async () => { + await formCloudDemoPage.setConfigToEditor(tabVarFieldVisibilityJson); + await widget.tab().checkTabIsDisplayedByLabel(tab.tabWithFields); + await widget.tab().checkTabIsNotDisplayedByLabel(tab.tabVarField); + await widget.textWidget().isWidgetVisible(widgets.textOneId); + await widget.textWidget().isWidgetNotVisible(widgets.textTwoId); + await widget.textWidget().setValue(widgets.textOneId, value.displayTab); + await widget.tab().checkTabIsDisplayedByLabel(tab.tabWithFields); + await widget.tab().checkTabIsDisplayedByLabel(tab.tabVarField); + + await widget.tab().clickTabByLabel(tab.tabVarField); + await widget.textWidget().isWidgetVisible(widgets.textTwoId); + + await widget.tab().clickTabByLabel(tab.tabWithFields); + await widget.textWidget().isWidgetVisible(widgets.textOneId); + await widget.textWidget().setValue(widgets.textOneId, value.notDisplayTab); + await widget.tab().checkTabIsNotDisplayedByLabel(tab.tabVarField); + await widget.textWidget().isWidgetNotVisible(widgets.textTwoId); + }); + + it('[C315150] Should be able to see tab when visibility condition refers to a field and another field', async () => { + await formCloudDemoPage.setConfigToEditor(tabFieldFieldVisibilityJson); + await widget.tab().checkTabIsDisplayedByLabel(tab.tabWithFields); + await widget.tab().checkTabIsDisplayedByLabel(tab.tabFieldField); + + await widget.tab().clickTabByLabel(tab.tabWithFields); + await widget.textWidget().isWidgetVisible(widgets.textOneId); + await widget.textWidget().isWidgetVisible(widgets.textThreeId); + await widget.textWidget().isWidgetNotVisible(widgets.textTwoId); + + await widget.textWidget().setValue(widgets.textOneId, value.displayTab); + await widget.tab().checkTabIsNotDisplayedByLabel(tab.tabFieldField); + + await widget.textWidget().setValue(widgets.textThreeId, value.displayTab); + await widget.tab().checkTabIsDisplayedByLabel(tab.tabFieldField); + + await widget.textWidget().setValue(widgets.textOneId, value.notDisplayTab); + await widget.tab().checkTabIsNotDisplayedByLabel(tab.tabFieldField); + }); + + it('[C315151] Should be able to see tab when visibility condition refers to a field and form variable', async () => { + await formCloudDemoPage.setConfigToEditor(tabFieldVarVisibilityJson); + await widget.tab().checkTabIsDisplayedByLabel(tab.tabWithFields); + await widget.tab().checkTabIsNotDisplayedByLabel(tab.tabVarField); + await widget.textWidget().isWidgetVisible(widgets.textOneId); + await widget.textWidget().isWidgetNotVisible(widgets.textTwoId); + await widget.textWidget().setValue(widgets.textOneId, value.displayTab); + await widget.tab().checkTabIsDisplayedByLabel(tab.tabWithFields); + await widget.tab().checkTabIsDisplayedByLabel(tab.tabVarField); + + await widget.tab().clickTabByLabel(tab.tabVarField); + await widget.textWidget().isWidgetVisible(widgets.textTwoId); + + await widget.tab().clickTabByLabel(tab.tabWithFields); + await widget.textWidget().isWidgetVisible(widgets.textOneId); + await widget.textWidget().setValue(widgets.textOneId, value.notDisplayTab); + await widget.tab().checkTabIsNotDisplayedByLabel(tab.tabVarField); + await widget.textWidget().isWidgetNotVisible(widgets.textTwoId); + }); + + it('[C315152] Should be able to see tab when visibility condition refers to form variable and another form variable', async () => { + await formCloudDemoPage.setConfigToEditor(tabVarVarVisibilityJson); + await widget.tab().checkTabIsDisplayedByLabel(tab.tabVarVar); + await widget.textWidget().isWidgetVisible(widgets.textOneId); + + const visibleTab = tabVarVarVisibilityJson; + visibleTab.formRepresentation.formDefinition.variables[0].value = value.notDisplayTab; + await formCloudDemoPage.setConfigToEditor(visibleTab); + await widget.tab().checkTabIsNotDisplayedByLabel(tab.tabVarVar); + await widget.textWidget().isWidgetNotVisible(widgets.textOneId); + + visibleTab.formRepresentation.formDefinition.variables[1].value = value.notDisplayTab; + await formCloudDemoPage.setConfigToEditor(visibleTab); + await widget.tab().checkTabIsDisplayedByLabel(tab.tabVarVar); + await widget.textWidget().isWidgetVisible(widgets.textOneId); + + visibleTab.formRepresentation.formDefinition.variables[0].value = value.displayTab; + await formCloudDemoPage.setConfigToEditor(visibleTab); + await widget.tab().checkTabIsNotDisplayedByLabel(tab.tabVarVar); + await widget.textWidget().isWidgetNotVisible(widgets.textOneId); + }); + + it('[C315153] Should be able to see tab when has multiple visibility conditions and next condition operators', async () => { + await formCloudDemoPage.setConfigToEditor(tabNextOperatorsVisibilityJson); + await widget.tab().checkTabIsDisplayedByLabel(tab.tabWithFields); + await widget.tab().checkTabIsNotDisplayedByLabel(tab.tabNextOperators); + + await widget.tab().clickTabByLabel(tab.tabWithFields); + await widget.textWidget().isWidgetVisible(widgets.textOneId); + await widget.textWidget().isWidgetVisible(widgets.textThreeId); + await widget.textWidget().isWidgetNotVisible(widgets.textTwoId); + + await widget.textWidget().setValue(widgets.textOneId, value.displayTab); + await widget.tab().checkTabIsDisplayedByLabel(tab.tabNextOperators); + + await widget.tab().clickTabByLabel(tab.tabWithFields); + await widget.textWidget().setValue(widgets.textOneId, value.notDisplayTab); + await widget.tab().checkTabIsNotDisplayedByLabel(tab.tabNextOperators); + + await widget.textWidget().setValue(widgets.textThreeId, value.displayTab); + await widget.tab().checkTabIsNotDisplayedByLabel(tab.tabNextOperators); + + await widget.textWidget().setValue(widgets.textOneId, value.displayTab); + await widget.tab().checkTabIsNotDisplayedByLabel(tab.tabNextOperators); + + await widget.textWidget().setValue(widgets.textThreeId, value.notDisplayTab); + await widget.tab().checkTabIsDisplayedByLabel(tab.tabNextOperators); + }); + +}); diff --git a/e2e/process-services-cloud/form-field/visibility-condition.e2e.ts b/e2e/process-services-cloud/form-field/visibility-condition.e2e.ts index 1073e31b0b..38850666b1 100644 --- a/e2e/process-services-cloud/form-field/visibility-condition.e2e.ts +++ b/e2e/process-services-cloud/form-field/visibility-condition.e2e.ts @@ -21,7 +21,8 @@ import { browser } from 'protractor'; import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; import { NavigationBarPage } from '../../pages/adf/navigationBarPage'; import { FormCloudDemoPage } from '../../pages/adf/demo-shell/process-services-cloud/cloudFormDemoPage'; -import { checkboxVisibilityForm } from '../../resources/forms/checkbox-visibility-condition'; +import { checkboxVisibilityFormJson, multipleCheckboxVisibilityFormJson } from '../../resources/forms/checkbox-visibility-condition'; +import { multipleVisibilityFormJson } from '../../resources/forms/multiple-visibility-conditions'; describe('Visibility conditions - cloud', () => { @@ -30,14 +31,16 @@ describe('Visibility conditions - cloud', () => { const navigationBarPage = new NavigationBarPage(); const formCloudDemoPage = new FormCloudDemoPage(); - const checkboxVisibilityFormJson = JSON.parse(checkboxVisibilityForm); const widget = new Widget(); let visibleCheckbox; const widgets = { textOneId: 'textOne', - textTwoId: 'textTwo' + textTwoId: 'textTwo', + textThreeId: 'textThree', + checkboxBasicVariable: 'CheckboxBasicVariableField', + checkboxBasicField: 'CheckboxBasicFieldValue' }; const value = { @@ -51,10 +54,11 @@ describe('Visibility conditions - cloud', () => { checkboxFieldVariable: 'CheckboxFieldVariable', checkboxFieldField: 'CheckboxFieldField', checkboxVariableValue: 'CheckboxVariableValue', - checkboxVariableVariable: 'CheckboxVariableVariable' + checkboxVariableVariable: 'CheckboxVariableVariable', + checkbox1: 'Checkbox1' }; - beforeAll(async (done) => { + beforeAll(async () => { this.alfrescoJsApi = new AlfrescoApi({ provider: 'BPM', hostBpm: browser.params.testConfig.adf_aps.host @@ -66,100 +70,181 @@ describe('Visibility conditions - cloud', () => { browser.params.config.identityHost); await loginSSOPage.loginSSOIdentityService(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); - navigationBarPage.clickFormCloudButton(); + await navigationBarPage.navigateToFormCloudPage(); - formCloudDemoPage.setConfigToEditor(checkboxVisibilityFormJson); - - done(); + await formCloudDemoPage.setConfigToEditor(checkboxVisibilityFormJson); }); - it('[C309647] Should be able to see Checkbox widget when visibility condition refers to another field with specific value', () => { + it('[C309647] Should be able to see Checkbox widget when visibility condition refers to another field with specific value', async () => { - widget.textWidget().isWidgetVisible(widgets.textOneId); - widget.checkboxWidget().isCheckboxHidden(checkbox.checkboxFieldValue); - widget.textWidget().setValue(widgets.textOneId, value.displayCheckbox); - widget.checkboxWidget().isCheckboxDisplayed(checkbox.checkboxFieldValue); + await widget.textWidget().isWidgetVisible(widgets.textOneId); + await widget.checkboxWidget().isCheckboxHidden(checkbox.checkboxFieldValue); + await widget.textWidget().setValue(widgets.textOneId, value.displayCheckbox); + await widget.checkboxWidget().isCheckboxDisplayed(checkbox.checkboxFieldValue); - widget.textWidget().setValue(widgets.textOneId, value.notDisplayCheckbox); - widget.checkboxWidget().isCheckboxHidden(checkbox.checkboxFieldValue); + await widget.textWidget().setValue(widgets.textOneId, value.notDisplayCheckbox); + await widget.checkboxWidget().isCheckboxHidden(checkbox.checkboxFieldValue); }); - it('[C309648] Should be able to see Checkbox widget when visibility condition refers to a form variable and a field', () => { + it('[C309648] Should be able to see Checkbox widget when visibility condition refers to a form variable and a field', async () => { - widget.textWidget().isWidgetVisible(widgets.textOneId); - widget.checkboxWidget().isCheckboxHidden(checkbox.checkboxVariableField); + await widget.textWidget().isWidgetVisible(widgets.textOneId); + await widget.checkboxWidget().isCheckboxHidden(checkbox.checkboxVariableField); - widget.textWidget().setValue(widgets.textOneId, value.displayCheckbox); - widget.checkboxWidget().isCheckboxDisplayed(checkbox.checkboxVariableField); + await widget.textWidget().setValue(widgets.textOneId, value.displayCheckbox); + await widget.checkboxWidget().isCheckboxDisplayed(checkbox.checkboxVariableField); - widget.textWidget().setValue(widgets.textOneId, value.notDisplayCheckbox); - widget.checkboxWidget().isCheckboxHidden(checkbox.checkboxVariableField); + await widget.textWidget().setValue(widgets.textOneId, value.notDisplayCheckbox); + await widget.checkboxWidget().isCheckboxHidden(checkbox.checkboxVariableField); }); - it('[C309649] Should be able to see Checkbox widget when visibility condition refers to a field and a form variable', () => { + it('[C309649] Should be able to see Checkbox widget when visibility condition refers to a field and a form variable', async () => { - widget.textWidget().isWidgetVisible(widgets.textOneId); - widget.checkboxWidget().isCheckboxHidden(checkbox.checkboxFieldVariable); + await widget.textWidget().isWidgetVisible(widgets.textOneId); + await widget.checkboxWidget().isCheckboxHidden(checkbox.checkboxFieldVariable); - widget.textWidget().setValue(widgets.textOneId, value.displayCheckbox); - expect(widget.checkboxWidget().isCheckboxDisplayed(checkbox.checkboxFieldVariable)).toBe(true); + await widget.textWidget().setValue(widgets.textOneId, value.displayCheckbox); + await widget.checkboxWidget().isCheckboxDisplayed(checkbox.checkboxFieldVariable); - widget.textWidget().setValue(widgets.textOneId, value.notDisplayCheckbox); - widget.checkboxWidget().isCheckboxHidden(checkbox.checkboxFieldVariable); + await widget.textWidget().setValue(widgets.textOneId, value.notDisplayCheckbox); + await widget.checkboxWidget().isCheckboxHidden(checkbox.checkboxFieldVariable); }); - it('[C311425] Should be able to see Checkbox widget when visibility condition refers to a field and another field', () => { + it('[C311425] Should be able to see Checkbox widget when visibility condition refers to a field and another field', async () => { - widget.textWidget().isWidgetVisible(widgets.textOneId); - widget.textWidget().isWidgetVisible(widgets.textTwoId); - widget.checkboxWidget().isCheckboxHidden(checkbox.checkboxFieldField); + await widget.textWidget().isWidgetVisible(widgets.textOneId); + await widget.textWidget().isWidgetVisible(widgets.textTwoId); + await widget.checkboxWidget().isCheckboxHidden(checkbox.checkboxFieldField); - widget.textWidget().setValue(widgets.textOneId, value.displayCheckbox); - widget.checkboxWidget().isCheckboxHidden(checkbox.checkboxFieldField); + await widget.textWidget().setValue(widgets.textOneId, value.displayCheckbox); + await widget.checkboxWidget().isCheckboxHidden(checkbox.checkboxFieldField); - widget.textWidget().setValue(widgets.textTwoId, value.displayCheckbox); - widget.checkboxWidget().isCheckboxDisplayed(checkbox.checkboxFieldField); + await widget.textWidget().setValue(widgets.textTwoId, value.displayCheckbox); + await widget.checkboxWidget().isCheckboxDisplayed(checkbox.checkboxFieldField); - widget.textWidget().setValue(widgets.textOneId, value.notDisplayCheckbox); - widget.checkboxWidget().isCheckboxHidden(checkbox.checkboxFieldField); + await widget.textWidget().setValue(widgets.textOneId, value.notDisplayCheckbox); + await widget.checkboxWidget().isCheckboxHidden(checkbox.checkboxFieldField); }); - it('[C311424] Should be able to see Checkbox widget when visibility condition refers to a variable with specific value', () => { - formCloudDemoPage.setConfigToEditor(checkboxVisibilityFormJson); + it('[C311424] Should be able to see Checkbox widget when visibility condition refers to a variable with specific value', async () => { + await formCloudDemoPage.setConfigToEditor(checkboxVisibilityFormJson); - widget.checkboxWidget().isCheckboxDisplayed(checkbox.checkboxVariableValue); + await widget.checkboxWidget().isCheckboxDisplayed(checkbox.checkboxVariableValue); visibleCheckbox = checkboxVisibilityFormJson; visibleCheckbox.formRepresentation.formDefinition.variables[0].value = value.notDisplayCheckbox; - formCloudDemoPage.setConfigToEditor(visibleCheckbox); + await formCloudDemoPage.setConfigToEditor(visibleCheckbox); - widget.checkboxWidget().isCheckboxHidden(checkbox.checkboxVariableValue); + await widget.checkboxWidget().isCheckboxHidden(checkbox.checkboxVariableValue); visibleCheckbox = checkboxVisibilityFormJson; visibleCheckbox.formRepresentation.formDefinition.variables[0].value = value.displayCheckbox; - formCloudDemoPage.setConfigToEditor(visibleCheckbox); + await formCloudDemoPage.setConfigToEditor(visibleCheckbox); }); - it('[C311426] Should be able to see Checkbox widget when visibility condition refers to form variable and another form variable', () => { - formCloudDemoPage.setConfigToEditor(checkboxVisibilityFormJson); + it('[C311426] Should be able to see Checkbox widget when visibility condition refers to form variable and another form variable', async () => { + await formCloudDemoPage.setConfigToEditor(checkboxVisibilityFormJson); - widget.checkboxWidget().isCheckboxDisplayed(checkbox.checkboxVariableVariable); + await widget.checkboxWidget().isCheckboxDisplayed(checkbox.checkboxVariableVariable); visibleCheckbox = checkboxVisibilityFormJson; visibleCheckbox.formRepresentation.formDefinition.variables[0].value = value.notDisplayCheckbox; - formCloudDemoPage.setConfigToEditor(visibleCheckbox); + await formCloudDemoPage.setConfigToEditor(visibleCheckbox); - widget.checkboxWidget().isCheckboxHidden(checkbox.checkboxVariableVariable); + await widget.checkboxWidget().isCheckboxHidden(checkbox.checkboxVariableVariable); visibleCheckbox = checkboxVisibilityFormJson; visibleCheckbox.formRepresentation.formDefinition.variables[1].value = value.notDisplayCheckbox; - formCloudDemoPage.setConfigToEditor(visibleCheckbox); + await formCloudDemoPage.setConfigToEditor(visibleCheckbox); - widget.checkboxWidget().isCheckboxDisplayed(checkbox.checkboxVariableVariable); + await widget.checkboxWidget().isCheckboxDisplayed(checkbox.checkboxVariableVariable); visibleCheckbox = checkboxVisibilityFormJson; visibleCheckbox.formRepresentation.formDefinition.variables[0].value = value.displayCheckbox; visibleCheckbox.formRepresentation.formDefinition.variables[1].value = value.displayCheckbox; - formCloudDemoPage.setConfigToEditor(visibleCheckbox); + await formCloudDemoPage.setConfigToEditor(visibleCheckbox); + }); + + it('[C312400] Should be able to see Checkbox widget when has visibility condition related to checkbox', async () => { + await formCloudDemoPage.setConfigToEditor(multipleCheckboxVisibilityFormJson); + + await widget.checkboxWidget().clickCheckboxInput('Checkbox2'); + await widget.checkboxWidget().clickCheckboxInput('Checkbox3'); + await widget.checkboxWidget().isCheckboxHidden(checkbox.checkbox1); + + await widget.checkboxWidget().clickCheckboxInput('Checkbox2'); + await widget.checkboxWidget().isCheckboxDisplayed(checkbox.checkbox1); + + await widget.checkboxWidget().clickCheckboxInput('Checkbox2'); + await widget.checkboxWidget().clickCheckboxInput('Checkbox3'); + await widget.checkboxWidget().isCheckboxDisplayed(checkbox.checkbox1); + + await widget.checkboxWidget().clickCheckboxInput('Checkbox2'); + await widget.checkboxWidget().isCheckboxHidden(checkbox.checkbox1); + + }); + + it('[C309650] Should be able to see Checkbox widget when has multiple visibility conditions and next condition operators', async () => { + let text1, text2; + + await formCloudDemoPage.setConfigToEditor(multipleVisibilityFormJson); + await widget.textWidget().isWidgetVisible(widgets.textOneId); + text1 = await widget.textWidget().getFieldValue(widgets.textOneId); + text2 = await widget.textWidget().getFieldValue(widgets.textTwoId); + + await expect(text1).toEqual(''); + await expect(text2).toEqual(''); + + await widget.textWidget().setValue(widgets.textOneId, 'aaa'); + text1 = await widget.textWidget().getFieldValue(widgets.textOneId); + text2 = await widget.textWidget().getFieldValue(widgets.textTwoId); + + await expect(text1).toEqual('aaa'); + await expect(text2).toEqual(''); + await widget.textWidget().isWidgetVisible(widgets.checkboxBasicVariable); + + await widget.textWidget().setValue(widgets.textOneId, 'bbb'); + text1 = await widget.textWidget().getFieldValue(widgets.textOneId); + text2 = await widget.textWidget().getFieldValue(widgets.textTwoId); + + await expect(text1).toEqual('bbb'); + await expect(text2).toEqual(''); + await widget.textWidget().isWidgetVisible(widgets.checkboxBasicField); + + await widget.textWidget().setValue(widgets.textTwoId, 'aaa'); + text1 = await widget.textWidget().getFieldValue(widgets.textOneId); + text2 = await widget.textWidget().getFieldValue(widgets.textTwoId); + + await expect(text1).toEqual('bbb'); + await expect(text2).toEqual('aaa'); + await widget.textWidget().isWidgetNotVisible(widgets.checkboxBasicField); + + await widget.textWidget().setValue(widgets.textOneId, 'aaa'); + text1 = await widget.textWidget().getFieldValue(widgets.textOneId); + text2 = await widget.textWidget().getFieldValue(widgets.textTwoId); + + await expect(text1).toEqual('aaa'); + await expect(text2).toEqual('aaa'); + await widget.textWidget().isWidgetNotVisible(widgets.checkboxBasicField); + }); + + it('[C312443] Should be able to see Checkbox widget when has multiple visibility conditions and OR NOT next condition operators', async () => { + await formCloudDemoPage.setConfigToEditor(multipleVisibilityFormJson); + + await widget.textWidget().setValue(widgets.textTwoId, 'test'); + await widget.textWidget().setValue(widgets.textThreeId, 'test'); + await widget.textWidget().isWidgetNotVisible(widgets.textOneId); + + await widget.textWidget().setValue(widgets.textTwoId, 'test'); + await widget.textWidget().setValue(widgets.textThreeId, 'something'); + await widget.textWidget().isWidgetVisible(widgets.textOneId); + + await widget.textWidget().setValue(widgets.textTwoId, 'something'); + await widget.textWidget().setValue(widgets.textThreeId, 'test'); + await widget.textWidget().isWidgetVisible(widgets.textOneId); + + await widget.textWidget().setValue(widgets.textTwoId, 'something'); + await widget.textWidget().setValue(widgets.textThreeId, 'something'); + await widget.textWidget().isWidgetVisible(widgets.textOneId); }); }); diff --git a/e2e/process-services-cloud/people-group-cloud-component.e2e.ts b/e2e/process-services-cloud/people-group-cloud-component.e2e.ts index bf69634306..719dfb0919 100644 --- a/e2e/process-services-cloud/people-group-cloud-component.e2e.ts +++ b/e2e/process-services-cloud/people-group-cloud-component.e2e.ts @@ -20,7 +20,6 @@ import { PeopleGroupCloudComponentPage } from '../pages/adf/demo-shell/process-s import { GroupCloudComponentPage, PeopleCloudComponentPage, SettingsPage } from '@alfresco/adf-testing'; import { browser } from 'protractor'; import { LoginSSOPage, IdentityService, GroupIdentityService, RolesService, ApiService } from '@alfresco/adf-testing'; -import resources = require('../util/resources'); describe('People Groups Cloud Component', () => { @@ -42,261 +41,235 @@ describe('People Groups Cloud Component', () => { let apsUser, testUser; let activitiUser; let noRoleUser; - let groupAps; - let groupActiviti; + let groupUser; + let groupAdmin; let groupNoRole; let apsUserRoleId; let apsAdminRoleId; - let activitiAdminRoleId; - let clientActivitiAdminRoleId, clientActivitiUserRoleId; let users = []; let groups = []; - let clientId; - beforeAll(async (done) => { + beforeAll(async () => { await apiService.login(browser.params.identityAdmin.email, browser.params.identityAdmin.password); identityService = new IdentityService(apiService); - rolesService = new RolesService(apiService); - groupIdentityService = new GroupIdentityService(apiService); - clientId = await groupIdentityService.getClientIdByApplicationName(resources.ACTIVITI7_APPS.SIMPLE_APP.name); - groupActiviti = await groupIdentityService.createIdentityGroup(); - clientActivitiAdminRoleId = await rolesService.getClientRoleIdByRoleName(groupActiviti.id, clientId, identityService.ROLES.ACTIVITI_ADMIN); - clientActivitiUserRoleId = await rolesService.getClientRoleIdByRoleName(groupActiviti.id, clientId, identityService.ROLES.ACTIVITI_USER); - testUser = await identityService.createIdentityUserWithRole(apiService, [identityService.ROLES.APS_USER]); apsUser = await identityService.createIdentityUserWithRole(apiService, [identityService.ROLES.APS_USER]); activitiUser = await identityService.createIdentityUserWithRole(apiService, [identityService.ROLES.ACTIVITI_USER]); - noRoleUser = await identityService.createIdentityUser(); - await identityService.deleteClientRole(noRoleUser.idIdentityService, clientId, clientActivitiAdminRoleId, identityService.ROLES.ACTIVITI_ADMIN); - await identityService.deleteClientRole(noRoleUser.idIdentityService, clientId, clientActivitiUserRoleId, identityService.ROLES.ACTIVITI_USER); - groupAps = await groupIdentityService.createIdentityGroup(); + rolesService = new RolesService(apiService); apsAdminRoleId = await rolesService.getRoleIdByRoleName(identityService.ROLES.APS_ADMIN); apsUserRoleId = await rolesService.getRoleIdByRoleName(identityService.ROLES.APS_USER); - await groupIdentityService.assignRole(groupAps.id, apsAdminRoleId, identityService.ROLES.APS_ADMIN); - await groupIdentityService.assignRole(groupAps.id, apsUserRoleId, identityService.ROLES.APS_USER); - activitiAdminRoleId = await rolesService.getRoleIdByRoleName(identityService.ROLES.ACTIVITI_ADMIN); - await groupIdentityService.assignRole(groupActiviti.id, activitiAdminRoleId, identityService.ROLES.ACTIVITI_ADMIN); + + groupIdentityService = new GroupIdentityService(apiService); + + groupUser = await groupIdentityService.createIdentityGroup(); + await groupIdentityService.assignRole(groupUser.id, apsUserRoleId, identityService.ROLES.APS_USER); + + groupAdmin = await groupIdentityService.createIdentityGroup(); + await groupIdentityService.assignRole(groupAdmin.id, apsAdminRoleId, identityService.ROLES.APS_ADMIN); + groupNoRole = await groupIdentityService.createIdentityGroup(); - await groupIdentityService.addClientRole(groupAps.id, clientId, clientActivitiAdminRoleId, identityService.ROLES.ACTIVITI_ADMIN); - await groupIdentityService.addClientRole(groupActiviti.id, clientId, clientActivitiAdminRoleId, identityService.ROLES.ACTIVITI_ADMIN); users = [`${apsUser.idIdentityService}`, `${activitiUser.idIdentityService}`, `${noRoleUser.idIdentityService}`, `${testUser.idIdentityService}`]; - groups = [`${groupAps.id}`, `${groupActiviti.id}`, `${groupNoRole.id}`]; + groups = [`${groupUser.id}`, `${groupAdmin.id}`, `${groupNoRole.id}`]; await settingsPage.setProviderBpmSso( browser.params.config.bpmHost, browser.params.config.oauth2.host, browser.params.config.identityHost); await loginSSOPage.loginSSOIdentityService(testUser.email, testUser.password); - done(); + }); - afterAll(async (done) => { + afterAll(async () => { await apiService.login(browser.params.identityAdmin.email, browser.params.identityAdmin.password); - users.forEach(async (user) => { + for (const user of users) { await identityService.deleteIdentityUser(user); - }); - - groups.forEach(async (group) => { + } + for (const group of groups) { await groupIdentityService.deleteIdentityGroup(group); - }); + } - done(); }); beforeEach(async () => { + await navigationBarPage.navigateToPeopleGroupCloudPage(); + await peopleGroupCloudComponentPage.checkGroupsCloudComponentTitleIsDisplayed(); + await peopleGroupCloudComponentPage.checkPeopleCloudComponentTitleIsDisplayed(); + }); + + afterEach(async () => { await browser.refresh(); - navigationBarPage.navigateToPeopleGroupCloudPage(); - peopleGroupCloudComponentPage.checkGroupsCloudComponentTitleIsDisplayed(); - peopleGroupCloudComponentPage.checkPeopleCloudComponentTitleIsDisplayed(); }); describe('[C297674] Should be able to add filtering to People Cloud Component', () => { - beforeEach(() => { - peopleGroupCloudComponentPage.clickPeopleCloudMultipleSelection(); - peopleGroupCloudComponentPage.checkPeopleCloudMultipleSelectionIsSelected(); - peopleGroupCloudComponentPage.clickPeopleCloudFilterRole(); - peopleGroupCloudComponentPage.checkPeopleCloudFilterRole(); + beforeEach(async () => { + await peopleGroupCloudComponentPage.clickPeopleCloudMultipleSelection(); + await peopleGroupCloudComponentPage.checkPeopleCloudMultipleSelectionIsSelected(); + await peopleGroupCloudComponentPage.clickPeopleCloudFilterRole(); + await peopleGroupCloudComponentPage.checkPeopleCloudFilterRole(); }); - it('No role filtering', () => { - peopleCloudComponent.searchAssignee(noRoleUser.lastName); - peopleCloudComponent.checkUserIsDisplayed(`${noRoleUser.firstName} ${noRoleUser.lastName}`); - peopleCloudComponent.searchAssignee(apsUser.lastName); - peopleCloudComponent.checkUserIsDisplayed(`${apsUser.firstName} ${apsUser.lastName}`); - peopleCloudComponent.searchAssignee(activitiUser.lastName); - peopleCloudComponent.checkUserIsDisplayed(`${activitiUser.firstName} ${activitiUser.lastName}`); + it('No role filtering', async () => { + await peopleCloudComponent.searchAssignee(noRoleUser.lastName); + await peopleCloudComponent.checkUserIsDisplayed(`${noRoleUser.firstName} ${noRoleUser.lastName}`); + await peopleCloudComponent.searchAssignee(apsUser.lastName); + await peopleCloudComponent.checkUserIsDisplayed(`${apsUser.firstName} ${apsUser.lastName}`); + await peopleCloudComponent.searchAssignee(testUser.lastName); + await peopleCloudComponent.checkUserIsDisplayed(`${testUser.firstName} ${testUser.lastName}`); }); - it('One role filtering', () => { - peopleGroupCloudComponentPage.enterPeopleRoles(`["${identityService.ROLES.APS_USER}"]`); - peopleCloudComponent.searchAssignee(apsUser.lastName); - peopleCloudComponent.checkUserIsDisplayed(`${apsUser.firstName} ${apsUser.lastName}`); - peopleCloudComponent.searchAssignee(activitiUser.lastName); - peopleCloudComponent.checkUserIsNotDisplayed(`${activitiUser.firstName} ${activitiUser.lastName}`); - peopleCloudComponent.searchAssignee(noRoleUser.lastName); - peopleCloudComponent.checkUserIsNotDisplayed(`${noRoleUser.firstName} ${noRoleUser.lastName}`); + it('One role filtering', async () => { + await peopleGroupCloudComponentPage.enterPeopleRoles(`["${identityService.ROLES.APS_USER}"]`); + await peopleCloudComponent.searchAssignee(apsUser.lastName); + await peopleCloudComponent.checkUserIsDisplayed(`${apsUser.firstName} ${apsUser.lastName}`); + await peopleCloudComponent.searchAssignee(testUser.lastName); + await peopleCloudComponent.checkUserIsNotDisplayed(`${apsUser.firstName} ${apsUser.lastName}`); + await peopleCloudComponent.checkUserIsNotDisplayed(`${testUser.firstName} ${testUser.lastName}`); + await peopleCloudComponent.searchAssignee(noRoleUser.lastName); + await peopleCloudComponent.checkUserIsNotDisplayed(`${noRoleUser.firstName} ${noRoleUser.lastName}`); }); - it('Multiple roles filtering', () => { - peopleGroupCloudComponentPage.enterPeopleRoles(`["${identityService.ROLES.APS_USER}", "${identityService.ROLES.ACTIVITI_USER}"]`); - peopleCloudComponent.searchAssignee(apsUser.lastName); - peopleCloudComponent.checkUserIsDisplayed(`${apsUser.firstName} ${apsUser.lastName}`); - peopleCloudComponent.searchAssignee(activitiUser.lastName); - peopleCloudComponent.checkUserIsDisplayed(`${activitiUser.firstName} ${activitiUser.lastName}`); - peopleCloudComponent.searchAssignee(noRoleUser.lastName); - peopleCloudComponent.checkUserIsNotDisplayed(`${noRoleUser.firstName} ${noRoleUser.lastName}`); + it('Multiple roles filtering', async () => { + await peopleGroupCloudComponentPage.enterPeopleRoles(`["${identityService.ROLES.APS_USER}", "${identityService.ROLES.ACTIVITI_USER}"]`); + await peopleCloudComponent.searchAssignee(apsUser.lastName); + await peopleCloudComponent.checkUserIsDisplayed(`${apsUser.firstName} ${apsUser.lastName}`); + await peopleCloudComponent.searchAssignee(testUser.lastName); + await peopleCloudComponent.checkUserIsDisplayed(`${testUser.firstName} ${testUser.lastName}`); + await peopleCloudComponent.searchAssignee(noRoleUser.lastName); + await peopleCloudComponent.checkUserIsNotDisplayed(`${testUser.firstName} ${testUser.lastName}`); + await peopleCloudComponent.checkUserIsNotDisplayed(`${noRoleUser.firstName} ${noRoleUser.lastName}`); }); }); describe('[C309674] Should be able to add filtering to Group Cloud Component', () => { - beforeEach(() => { - peopleGroupCloudComponentPage.clickGroupCloudMultipleSelection(); - peopleGroupCloudComponentPage.clickGroupCloudFilterRole(); + beforeEach(async () => { + await peopleGroupCloudComponentPage.clickGroupCloudMultipleSelection(); + await peopleGroupCloudComponentPage.clickGroupCloudFilterRole(); }); - it('No role filtering', () => { - peopleGroupCloudComponentPage.clearField(peopleGroupCloudComponentPage.groupRoleInput); - groupCloudComponentPage.searchGroups(groupNoRole.name); - groupCloudComponentPage.checkGroupIsDisplayed(groupNoRole.name); - groupCloudComponentPage.searchGroups(groupActiviti.name); - groupCloudComponentPage.checkGroupIsDisplayed(groupActiviti.name); - groupCloudComponentPage.searchGroups(groupAps.name); - groupCloudComponentPage.checkGroupIsDisplayed(groupAps.name); + it('No role filtering', async () => { + await peopleGroupCloudComponentPage.clearField(peopleGroupCloudComponentPage.groupRoleInput); + await groupCloudComponentPage.searchGroups(groupNoRole.name); + await groupCloudComponentPage.checkGroupIsDisplayed(groupNoRole.name); + await groupCloudComponentPage.searchGroups(groupAdmin.name); + await groupCloudComponentPage.checkGroupIsDisplayed(groupAdmin.name); + await groupCloudComponentPage.searchGroups(groupUser.name); + await groupCloudComponentPage.checkGroupIsDisplayed(groupUser.name); }); - it('One role filtering', () => { - peopleGroupCloudComponentPage.enterGroupRoles(`["${identityService.ROLES.APS_ADMIN}"]`); - groupCloudComponentPage.searchGroups(groupAps.name); - groupCloudComponentPage.checkGroupIsDisplayed(groupAps.name); - groupCloudComponentPage.searchGroups(groupActiviti.name); - groupCloudComponentPage.checkGroupIsNotDisplayed(groupActiviti.name); - groupCloudComponentPage.searchGroups(groupNoRole.name); - groupCloudComponentPage.checkGroupIsNotDisplayed(groupNoRole.name); + it('One role filtering', async () => { + await peopleGroupCloudComponentPage.enterGroupRoles(`["${identityService.ROLES.APS_ADMIN}"]`); + await groupCloudComponentPage.searchGroups(groupAdmin.name); + await groupCloudComponentPage.checkGroupIsDisplayed(groupAdmin.name); + await groupCloudComponentPage.searchGroups(groupUser.name); + await groupCloudComponentPage.checkGroupIsNotDisplayed(groupAdmin.name); + await groupCloudComponentPage.checkGroupIsNotDisplayed(groupUser.name); + await groupCloudComponentPage.searchGroups(groupNoRole.name); + await groupCloudComponentPage.checkGroupIsNotDisplayed(groupNoRole.name); }); - it('[C309996] Should be able to filter groups based on composite roles Activit_Admin', () => { - peopleGroupCloudComponentPage.enterGroupRoles(`["${identityService.ROLES.ACTIVITI_ADMIN}"]`); - groupCloudComponentPage.searchGroups(groupActiviti.name); - groupCloudComponentPage.checkGroupIsDisplayed(groupActiviti.name); - groupCloudComponentPage.searchGroups(groupNoRole.name); - groupCloudComponentPage.checkGroupIsNotDisplayed(groupNoRole.name); - groupCloudComponentPage.searchGroups(groupAps.name); - groupCloudComponentPage.checkGroupIsDisplayed(groupAps.name); + it('[C309996] Should be able to filter groups based on composite roles Aps_User', async () => { + await peopleGroupCloudComponentPage.enterGroupRoles(`["${identityService.ROLES.APS_USER}"]`); + await groupCloudComponentPage.searchGroups(groupAdmin.name); + await groupCloudComponentPage.checkGroupIsNotDisplayed(groupAdmin.name); + await groupCloudComponentPage.searchGroups(groupNoRole.name); + await groupCloudComponentPage.checkGroupIsNotDisplayed(groupNoRole.name); + await groupCloudComponentPage.searchGroups(groupUser.name); + await groupCloudComponentPage.checkGroupIsDisplayed(groupUser.name); }); - it('[C309996] Should be able to filter groups based on composite roles Aps_User', () => { - peopleGroupCloudComponentPage.enterGroupRoles(`["${identityService.ROLES.APS_USER}"]`); - groupCloudComponentPage.searchGroups(groupActiviti.name); - groupCloudComponentPage.checkGroupIsNotDisplayed(groupActiviti.name); - groupCloudComponentPage.searchGroups(groupNoRole.name); - groupCloudComponentPage.checkGroupIsNotDisplayed(groupNoRole.name); - groupCloudComponentPage.searchGroups(groupAps.name); - groupCloudComponentPage.checkGroupIsDisplayed(groupAps.name); - }); - - it('[C309996] Should be able to filter groups based on composite roles Activiti_User', () => { - peopleGroupCloudComponentPage.enterGroupRoles(`["${identityService.ROLES.ACTIVITI_USER}"]`); - groupCloudComponentPage.searchGroups(groupActiviti.name); - groupCloudComponentPage.checkGroupIsNotDisplayed(groupActiviti.name); - groupCloudComponentPage.searchGroups(groupNoRole.name); - groupCloudComponentPage.checkGroupIsNotDisplayed(groupNoRole.name); - groupCloudComponentPage.searchGroups(groupAps.name); - groupCloudComponentPage.checkGroupIsDisplayed(groupAps.name); - }); - - it('Multiple roles filtering', () => { - peopleGroupCloudComponentPage.enterGroupRoles(`["${identityService.ROLES.APS_ADMIN}", "${identityService.ROLES.ACTIVITI_ADMIN}"]`); - groupCloudComponentPage.searchGroups(groupActiviti.name); - groupCloudComponentPage.checkGroupIsDisplayed(groupActiviti.name); - groupCloudComponentPage.searchGroups(groupAps.name); - groupCloudComponentPage.checkGroupIsDisplayed(groupAps.name); - groupCloudComponentPage.searchGroups(groupNoRole.name); - groupCloudComponentPage.checkGroupIsNotDisplayed(groupNoRole.name); + it('Multiple roles filtering', async () => { + await peopleGroupCloudComponentPage.enterGroupRoles(`["${identityService.ROLES.APS_ADMIN}", "${identityService.ROLES.APS_USER}"]`); + await groupCloudComponentPage.searchGroups(groupAdmin.name); + await groupCloudComponentPage.checkGroupIsDisplayed(groupAdmin.name); + await groupCloudComponentPage.searchGroups(groupUser.name); + await groupCloudComponentPage.checkGroupIsDisplayed(groupUser.name); + await groupCloudComponentPage.searchGroups(groupNoRole.name); + await groupCloudComponentPage.checkGroupIsNotDisplayed(groupNoRole.name); }); }); - it('[C305033] Should fetch the preselect users based on the Validate flag set to True in Single mode selection', () => { + it('[C305033] Should fetch the preselect users based on the Validate flag set to True in Single mode selection', async () => { - peopleGroupCloudComponentPage.clickPeopleCloudSingleSelection(); - peopleGroupCloudComponentPage.checkPeopleCloudSingleSelectionIsSelected(); - peopleGroupCloudComponentPage.clickPreselectValidation(); - expect(peopleGroupCloudComponentPage.getPreselectValidationStatus()).toBe('true'); + await peopleGroupCloudComponentPage.clickPeopleCloudSingleSelection(); + await peopleGroupCloudComponentPage.checkPeopleCloudSingleSelectionIsSelected(); + await peopleGroupCloudComponentPage.clickPreselectValidation(); + await expect(await peopleGroupCloudComponentPage.getPreselectValidationStatus()).toBe('true'); - peopleGroupCloudComponentPage.enterPeoplePreselect('[{"id":"12345","username":"someUsername","email":"someEmail"}]'); - expect(peopleCloudComponent.getAssigneeFieldContent()).toBe(''); + await peopleGroupCloudComponentPage.enterPeoplePreselect('[{"id":"12345","username":"someUsername","email":"someEmail"}]'); + await expect(await peopleCloudComponent.getAssigneeFieldContent()).toBe(''); - expect(peopleGroupCloudComponentPage.getPreselectValidationStatus()).toBe('true'); - peopleGroupCloudComponentPage.enterPeoplePreselect(`[{"id":"${noRoleUser.idIdentityService}"}]`); - expect(peopleCloudComponent.getAssigneeFieldContent()).toBe(`${noRoleUser.firstName} ${noRoleUser.lastName}`); + await expect(await peopleGroupCloudComponentPage.getPreselectValidationStatus()).toBe('true'); + await peopleGroupCloudComponentPage.enterPeoplePreselect(`[{"id":"${noRoleUser.idIdentityService}"}]`); + await expect(await peopleCloudComponent.getAssigneeFieldContent()).toBe(`${noRoleUser.firstName} ${noRoleUser.lastName}`); - peopleGroupCloudComponentPage.enterPeoplePreselect(`[{"email":"${apsUser.email}"}]`); - expect(peopleCloudComponent.getAssigneeFieldContent()).toBe(`${apsUser.firstName} ${apsUser.lastName}`); + await peopleGroupCloudComponentPage.enterPeoplePreselect(`[{"email":"${apsUser.email}"}]`); + await expect(await peopleCloudComponent.getAssigneeFieldContent()).toBe(`${apsUser.firstName} ${apsUser.lastName}`); - peopleGroupCloudComponentPage.enterPeoplePreselect(`[{"username":"${activitiUser.username}"}]`); - expect(peopleCloudComponent.getAssigneeFieldContent()).toBe(`${activitiUser.firstName} ${activitiUser.lastName}`); + await peopleGroupCloudComponentPage.enterPeoplePreselect(`[{"username":"${testUser.username}"}]`); + await expect(await peopleCloudComponent.getAssigneeFieldContent()).toBe(`${testUser.firstName} ${testUser.lastName}`); }); - it('[C309676] Should fetch the preselect users based on the Validate flag set to True in Multiple mode selection', () => { + it('[C309676] Should fetch the preselect users based on the Validate flag set to True in Multiple mode selection', async () => { - peopleGroupCloudComponentPage.clickPeopleCloudMultipleSelection(); - peopleGroupCloudComponentPage.checkPeopleCloudMultipleSelectionIsSelected(); - peopleGroupCloudComponentPage.clickPreselectValidation(); - expect(peopleGroupCloudComponentPage.getPreselectValidationStatus()).toBe('true'); + await peopleGroupCloudComponentPage.clickPeopleCloudMultipleSelection(); + await peopleGroupCloudComponentPage.checkPeopleCloudMultipleSelectionIsSelected(); + await peopleGroupCloudComponentPage.clickPreselectValidation(); + await expect(await peopleGroupCloudComponentPage.getPreselectValidationStatus()).toBe('true'); - peopleGroupCloudComponentPage.enterPeoplePreselect(`[{"id":"${apsUser.idIdentityService}"},{"id":"${activitiUser.idIdentityService}"},` + + await peopleGroupCloudComponentPage.enterPeoplePreselect(`[{"id":"${apsUser.idIdentityService}"},{"id":"${testUser.idIdentityService}"},` + `{"id":"${noRoleUser.idIdentityService}"}]`); - peopleCloudComponent.checkSelectedPeople(`${apsUser.firstName} ${apsUser.lastName}`); - peopleCloudComponent.checkSelectedPeople(`${activitiUser.firstName} ${activitiUser.lastName}`); - peopleCloudComponent.checkSelectedPeople(`${noRoleUser.firstName} ${noRoleUser.lastName}`); + await peopleCloudComponent.checkSelectedPeople(`${apsUser.firstName} ${apsUser.lastName}`); + await peopleCloudComponent.checkSelectedPeople(`${testUser.firstName} ${testUser.lastName}`); + await peopleCloudComponent.checkSelectedPeople(`${noRoleUser.firstName} ${noRoleUser.lastName}`); - peopleGroupCloudComponentPage.enterPeoplePreselect(`[{"email":"${apsUser.email}"},{"email":"${activitiUser.email}"},{"email":"${noRoleUser.email}"}]`); - peopleCloudComponent.checkSelectedPeople(`${apsUser.firstName} ${apsUser.lastName}`); - peopleCloudComponent.checkSelectedPeople(`${activitiUser.firstName} ${activitiUser.lastName}`); - peopleCloudComponent.checkSelectedPeople(`${noRoleUser.firstName} ${noRoleUser.lastName}`); + await peopleGroupCloudComponentPage.enterPeoplePreselect(`[{"email":"${apsUser.email}"},{"email":"${testUser.email}"},{"email":"${noRoleUser.email}"}]`); + await peopleCloudComponent.checkSelectedPeople(`${apsUser.firstName} ${apsUser.lastName}`); + await peopleCloudComponent.checkSelectedPeople(`${testUser.firstName} ${testUser.lastName}`); + await peopleCloudComponent.checkSelectedPeople(`${noRoleUser.firstName} ${noRoleUser.lastName}`); - peopleGroupCloudComponentPage.enterPeoplePreselect(`[{"username":"${apsUser.username}"},{"username":"${activitiUser.username}"},` + + await peopleGroupCloudComponentPage.enterPeoplePreselect(`[{"username":"${apsUser.username}"},{"username":"${testUser.username}"},` + `{"username":"${noRoleUser.username}"}]`); - peopleCloudComponent.checkSelectedPeople(`${apsUser.firstName} ${apsUser.lastName}`); - peopleCloudComponent.checkSelectedPeople(`${activitiUser.firstName} ${activitiUser.lastName}`); - peopleCloudComponent.checkSelectedPeople(`${noRoleUser.firstName} ${noRoleUser.lastName}`); + await peopleCloudComponent.checkSelectedPeople(`${apsUser.firstName} ${apsUser.lastName}`); + await peopleCloudComponent.checkSelectedPeople(`${testUser.firstName} ${testUser.lastName}`); + await peopleCloudComponent.checkSelectedPeople(`${noRoleUser.firstName} ${noRoleUser.lastName}`); - peopleCloudComponent.searchAssigneeToExisting(noRoleUser.lastName); - peopleCloudComponent.checkUserIsNotDisplayed(`${noRoleUser.firstName} ${noRoleUser.lastName}`); + await peopleCloudComponent.searchAssigneeToExisting(noRoleUser.lastName); + await peopleCloudComponent.checkUserIsNotDisplayed(`${noRoleUser.firstName} ${noRoleUser.lastName}`); }); - it('[C309677] Should populate the Users without any validation when the Preselect flag is set to false', () => { - peopleGroupCloudComponentPage.clickPeopleCloudMultipleSelection(); - peopleGroupCloudComponentPage.checkPeopleCloudMultipleSelectionIsSelected(); - expect(peopleGroupCloudComponentPage.getPreselectValidationStatus()).toBe('false'); + it('[C309677] Should populate the Users without any validation when the Preselect flag is set to false', async () => { + await peopleGroupCloudComponentPage.clickPeopleCloudMultipleSelection(); + await peopleGroupCloudComponentPage.checkPeopleCloudMultipleSelectionIsSelected(); + await expect(await peopleGroupCloudComponentPage.getPreselectValidationStatus()).toBe('false'); - peopleGroupCloudComponentPage.enterPeoplePreselect( + await peopleGroupCloudComponentPage.enterPeoplePreselect( `[{"id":"TestId1","firstName":"TestFirstName1","lastName":"TestLastName1"},` + `{"id":"TestId2","firstName":"TestFirstName2","lastName":"TestLastName2"},` + `{"id":"TestId3","firstName":"TestFirstName3","lastName":"TestLastName3"}]`); - peopleCloudComponent.checkSelectedPeople('TestFirstName1 TestLastName1'); - peopleCloudComponent.checkSelectedPeople('TestFirstName2 TestLastName2'); - peopleCloudComponent.checkSelectedPeople('TestFirstName3 TestLastName3'); + await peopleCloudComponent.checkSelectedPeople('TestFirstName1 TestLastName1'); + await peopleCloudComponent.checkSelectedPeople('TestFirstName2 TestLastName2'); + await peopleCloudComponent.checkSelectedPeople('TestFirstName3 TestLastName3'); }); - it('[C309678] Should not fetch the preselect users when mandatory parameters Id, Email and username are missing', () => { - peopleGroupCloudComponentPage.clickPeopleCloudMultipleSelection(); - peopleGroupCloudComponentPage.checkPeopleCloudMultipleSelectionIsSelected(); - peopleGroupCloudComponentPage.clickPreselectValidation(); - expect(peopleGroupCloudComponentPage.getPreselectValidationStatus()).toBe('true'); + it('[C309678] Should not fetch the preselect users when mandatory parameters Id, Email and username are missing', async () => { + await peopleGroupCloudComponentPage.clickPeopleCloudMultipleSelection(); + await peopleGroupCloudComponentPage.checkPeopleCloudMultipleSelectionIsSelected(); + await peopleGroupCloudComponentPage.clickPreselectValidation(); + await expect(await peopleGroupCloudComponentPage.getPreselectValidationStatus()).toBe('true'); - peopleGroupCloudComponentPage.enterPeoplePreselect(`[{"firstName":"${apsUser.firstName}","lastName":"${apsUser.lastName},"` + - `{"firstName":"${activitiUser.firstName}","lastName":"${activitiUser.lastName}",{"firstName":"${noRoleUser.firstName}","lastName":"${noRoleUser.lastName}"]`); - browser.sleep(200); - expect(peopleCloudComponent.getAssigneeFieldContent()).toBe(''); + await peopleGroupCloudComponentPage.enterPeoplePreselect(`[{"firstName":"${apsUser.firstName}","lastName":"${apsUser.lastName},"` + + `{"firstName":"${testUser.firstName}","lastName":"${testUser.lastName}",{"firstName":"${noRoleUser.firstName}","lastName":"${noRoleUser.lastName}"]`); + await browser.sleep(200); + await expect(await peopleCloudComponent.getAssigneeFieldContent()).toBe(''); }); }); diff --git a/e2e/process-services-cloud/people-group-cloud-filter-component.e2e.ts b/e2e/process-services-cloud/people-group-cloud-filter-component.e2e.ts index ffeacbb601..57a8a7d021 100644 --- a/e2e/process-services-cloud/people-group-cloud-filter-component.e2e.ts +++ b/e2e/process-services-cloud/people-group-cloud-filter-component.e2e.ts @@ -19,7 +19,7 @@ import { NavigationBarPage } from '../pages/adf/navigationBarPage'; import { PeopleGroupCloudComponentPage } from '../pages/adf/demo-shell/process-services/peopleGroupCloudComponentPage'; import { GroupCloudComponentPage, PeopleCloudComponentPage, SettingsPage } from '@alfresco/adf-testing'; import { browser } from 'protractor'; -import { LoginSSOPage, IdentityService, GroupIdentityService, RolesService, ApiService } from '@alfresco/adf-testing'; +import { LoginSSOPage, IdentityService, GroupIdentityService, ApiService } from '@alfresco/adf-testing'; import resources = require('../util/resources'); describe('People Groups Cloud Component', () => { @@ -37,57 +37,38 @@ describe('People Groups Cloud Component', () => { ); let identityService: IdentityService; let groupIdentityService: GroupIdentityService; - let rolesService: RolesService; let apsUser, testUser; - let activitiUser; let noRoleUser; - let groupAps; - let groupActiviti; let groupNoRole; - let apsAdminRoleId; - let activitiAdminRoleId; - let clientActivitiAdminRoleId, clientActivitiUserRoleId; let users = []; - let groups = []; - let clientId; + let hrGroup; + let testGroup; - beforeAll(async (done) => { + beforeAll(async () => { await apiService.login(browser.params.identityAdmin.email, browser.params.identityAdmin.password); identityService = new IdentityService(apiService); - rolesService = new RolesService(apiService); groupIdentityService = new GroupIdentityService(apiService); - clientId = await groupIdentityService.getClientIdByApplicationName(resources.ACTIVITI7_APPS.SIMPLE_APP.name); - groupActiviti = await groupIdentityService.createIdentityGroup(); - clientActivitiAdminRoleId = await rolesService.getClientRoleIdByRoleName(groupActiviti.id, clientId, identityService.ROLES.ACTIVITI_ADMIN); - clientActivitiUserRoleId = await rolesService.getClientRoleIdByRoleName(groupActiviti.id, clientId, identityService.ROLES.ACTIVITI_USER); + hrGroup = await groupIdentityService.getGroupInfoByGroupName('hr'); + testGroup = await groupIdentityService.getGroupInfoByGroupName('testgroup'); testUser = await identityService.createIdentityUserWithRole(apiService, [identityService.ROLES.APS_USER]); apsUser = await identityService.createIdentityUserWithRole(apiService, [identityService.ROLES.APS_USER]); - activitiUser = await identityService.createIdentityUserWithRole(apiService, [identityService.ROLES.ACTIVITI_USER]); + await identityService.addUserToGroup(testUser.idIdentityService, testGroup.id); + await identityService.addUserToGroup(apsUser.idIdentityService, hrGroup.id); noRoleUser = await identityService.createIdentityUser(); - await identityService.deleteClientRole(noRoleUser.idIdentityService, clientId, clientActivitiAdminRoleId, identityService.ROLES.ACTIVITI_ADMIN); - await identityService.deleteClientRole(noRoleUser.idIdentityService, clientId, clientActivitiUserRoleId, identityService.ROLES.ACTIVITI_USER); - groupAps = await groupIdentityService.createIdentityGroup(); - apsAdminRoleId = await rolesService.getRoleIdByRoleName(identityService.ROLES.APS_ADMIN); - await groupIdentityService.assignRole(groupAps.id, apsAdminRoleId, identityService.ROLES.APS_ADMIN); - activitiAdminRoleId = await rolesService.getRoleIdByRoleName(identityService.ROLES.ACTIVITI_ADMIN); - await groupIdentityService.assignRole(groupActiviti.id, activitiAdminRoleId, identityService.ROLES.ACTIVITI_ADMIN); groupNoRole = await groupIdentityService.createIdentityGroup(); - await groupIdentityService.addClientRole(groupAps.id, clientId, clientActivitiAdminRoleId, identityService.ROLES.ACTIVITI_ADMIN); - await groupIdentityService.addClientRole(groupActiviti.id, clientId, clientActivitiAdminRoleId, identityService.ROLES.ACTIVITI_ADMIN); - users = [`${apsUser.idIdentityService}`, `${activitiUser.idIdentityService}`, `${noRoleUser.idIdentityService}`, `${testUser.idIdentityService}`]; - groups = [`${groupAps.id}`, `${groupActiviti.id}`, `${groupNoRole.id}`]; + users = [apsUser.idIdentityService, noRoleUser.idIdentityService, testUser.idIdentityService]; await settingsPage.setProviderBpmSso( browser.params.config.bpmHost, browser.params.config.oauth2.host, browser.params.config.identityHost); - await loginSSOPage.loginSSOIdentityService(testUser.email, testUser.password); - done(); + await loginSSOPage.loginSSOIdentityService(apsUser.email, apsUser.password); + }); afterAll(async () => { @@ -95,81 +76,75 @@ describe('People Groups Cloud Component', () => { for (let i = 0; i < users.length; i++) { await identityService.deleteIdentityUser(users[i]); } - for (let i = 0; i < groups.length; i++) { - await groupIdentityService.deleteIdentityGroup(groups[i]); - } - - await identityService.deleteIdentityUser(testUser.idIdentityService); - await identityService.deleteIdentityUser(apsUser.idIdentityService); - await identityService.deleteIdentityUser(activitiUser.idIdentityService); + await groupIdentityService.deleteIdentityGroup(groupNoRole.id); }); - beforeEach(() => { - navigationBarPage.navigateToPeopleGroupCloudPage(); - peopleGroupCloudComponentPage.checkGroupsCloudComponentTitleIsDisplayed(); - peopleGroupCloudComponentPage.checkPeopleCloudComponentTitleIsDisplayed(); + beforeEach(async () => { + await navigationBarPage.navigateToPeopleGroupCloudPage(); + await peopleGroupCloudComponentPage.checkGroupsCloudComponentTitleIsDisplayed(); + await peopleGroupCloudComponentPage.checkPeopleCloudComponentTitleIsDisplayed(); }); - afterEach(() => { - browser.refresh(); + afterEach(async () => { + await browser.refresh(); }); - it('[C305041] Should filter the People Single Selection with the Application name filter', () => { - peopleGroupCloudComponentPage.checkPeopleCloudSingleSelectionIsSelected(); - peopleGroupCloudComponentPage.clickPeopleFilerByApp(); - peopleGroupCloudComponentPage.enterPeopleAppName(resources.ACTIVITI7_APPS.SIMPLE_APP.name); - peopleCloudComponent.searchAssignee(`${activitiUser.firstName}`); - peopleCloudComponent.checkUserIsDisplayed(`${activitiUser.firstName}` + ' ' + `${activitiUser.lastName}`); - peopleCloudComponent.selectAssigneeFromList(`${activitiUser.firstName}` + ' ' + `${activitiUser.lastName}`); - browser.sleep(100); - expect(peopleCloudComponent.getAssigneeFieldContent()).toBe(`${activitiUser.firstName}` + ' ' + `${activitiUser.lastName}`); + it('[C305041] Should filter the People Single Selection with the Application name filter', async () => { + await peopleGroupCloudComponentPage.checkPeopleCloudSingleSelectionIsSelected(); + await peopleGroupCloudComponentPage.clickPeopleFilerByApp(); + await peopleGroupCloudComponentPage.enterPeopleAppName(resources.ACTIVITI7_APPS.SIMPLE_APP.name); + await peopleCloudComponent.searchAssignee(testUser.firstName); + await peopleCloudComponent.checkUserIsDisplayed(`${testUser.firstName} ${testUser.lastName}`); + await peopleCloudComponent.selectAssigneeFromList(`${testUser.firstName} ${testUser.lastName}`); + await browser.sleep(100); + await expect(await peopleCloudComponent.getAssigneeFieldContent()).toBe(`${testUser.firstName} ${testUser.lastName}`); }); - it('[C305041] Should filter the People Multiple Selection with the Application name filter', () => { - peopleGroupCloudComponentPage.clickPeopleCloudMultipleSelection(); - peopleGroupCloudComponentPage.clickPeopleFilerByApp(); - peopleGroupCloudComponentPage.enterPeopleAppName(resources.ACTIVITI7_APPS.SIMPLE_APP.name); - peopleCloudComponent.searchAssignee(`${apsUser.firstName}`); - peopleCloudComponent.checkUserIsDisplayed(`${apsUser.firstName}` + ' ' + `${apsUser.lastName}`); - peopleCloudComponent.selectAssigneeFromList(`${apsUser.firstName}` + ' ' + `${apsUser.lastName}`); - peopleCloudComponent.checkSelectedPeople(`${apsUser.firstName}` + ' ' + `${apsUser.lastName}`); + it('[C305041] Should filter the People Multiple Selection with the Application name filter', async () => { + await peopleGroupCloudComponentPage.clickPeopleCloudMultipleSelection(); + await peopleGroupCloudComponentPage.clickPeopleFilerByApp(); + await peopleGroupCloudComponentPage.enterPeopleAppName(resources.ACTIVITI7_APPS.SIMPLE_APP.name); + await peopleCloudComponent.searchAssignee(testUser.firstName); + await peopleCloudComponent.checkUserIsDisplayed(`${testUser.firstName} ${testUser.lastName}`); + await peopleCloudComponent.selectAssigneeFromList(`${testUser.firstName} ${testUser.lastName}`); + await peopleCloudComponent.checkSelectedPeople(`${testUser.firstName} ${testUser.lastName}`); - peopleCloudComponent.searchAssigneeToExisting(`${activitiUser.firstName}`); - peopleCloudComponent.checkUserIsDisplayed(`${activitiUser.firstName}` + ' ' + `${activitiUser.lastName}`); - peopleCloudComponent.selectAssigneeFromList(`${activitiUser.firstName}` + ' ' + `${activitiUser.lastName}`); - peopleCloudComponent.checkSelectedPeople(`${activitiUser.firstName}` + ' ' + `${activitiUser.lastName}`); + await peopleCloudComponent.searchAssigneeToExisting(apsUser.firstName); + await peopleCloudComponent.checkUserIsDisplayed(`${apsUser.firstName} ${apsUser.lastName}`); + await peopleCloudComponent.selectAssigneeFromList(`${apsUser.firstName} ${apsUser.lastName}`); + await peopleCloudComponent.checkSelectedPeople(`${apsUser.firstName} ${apsUser.lastName}`); - peopleCloudComponent.searchAssigneeToExisting(`${noRoleUser.firstName}`); - peopleCloudComponent.checkUserIsNotDisplayed(`${noRoleUser.firstName}` + ' ' + `${noRoleUser.lastName}`); + await peopleCloudComponent.searchAssigneeToExisting(noRoleUser.firstName); + await peopleCloudComponent.checkUserIsNotDisplayed(`${noRoleUser.firstName} ${noRoleUser.lastName}`); }); - it('[C305041] Should filter the Groups Single Selection with the Application name filter', () => { - peopleGroupCloudComponentPage.clickGroupCloudSingleSelection(); - peopleGroupCloudComponentPage.clickGroupFilerByApp(); - peopleGroupCloudComponentPage.enterGroupAppName(resources.ACTIVITI7_APPS.SIMPLE_APP.name); - groupCloudComponentPage.searchGroups(`${groupActiviti.name}`); - groupCloudComponentPage.checkGroupIsDisplayed(`${groupActiviti.name}`); - groupCloudComponentPage.selectGroupFromList(`${groupActiviti.name}`); - expect(groupCloudComponentPage.getGroupsFieldContent()).toBe(`${groupActiviti.name}`); + it('[C305041] Should filter the Groups Single Selection with the Application name filter', async () => { + await peopleGroupCloudComponentPage.clickGroupCloudSingleSelection(); + await peopleGroupCloudComponentPage.clickGroupFilerByApp(); + await peopleGroupCloudComponentPage.enterGroupAppName(resources.ACTIVITI7_APPS.SIMPLE_APP.name); + await groupCloudComponentPage.searchGroups(hrGroup.name); + await groupCloudComponentPage.checkGroupIsDisplayed(hrGroup.name); + await groupCloudComponentPage.selectGroupFromList(hrGroup.name); + await expect(await groupCloudComponentPage.getGroupsFieldContent()).toBe(hrGroup.name); }); - it('[C305041] Should filter the Groups Multiple Selection with the Application name filter', () => { - peopleGroupCloudComponentPage.clickGroupCloudMultipleSelection(); - peopleGroupCloudComponentPage.clickGroupFilerByApp(); - peopleGroupCloudComponentPage.enterGroupAppName(resources.ACTIVITI7_APPS.SIMPLE_APP.name); - groupCloudComponentPage.searchGroups(`${groupAps.name}`); - groupCloudComponentPage.checkGroupIsDisplayed(`${groupAps.name}`); - groupCloudComponentPage.selectGroupFromList(`${groupAps.name}`); - groupCloudComponentPage.checkSelectedGroup(`${groupAps.name}`); + it('[C305041] Should filter the Groups Multiple Selection with the Application name filter', async () => { + await peopleGroupCloudComponentPage.clickGroupCloudMultipleSelection(); + await peopleGroupCloudComponentPage.clickGroupFilerByApp(); + await peopleGroupCloudComponentPage.enterGroupAppName(resources.ACTIVITI7_APPS.SIMPLE_APP.name); + await groupCloudComponentPage.searchGroups(testGroup.name); + await groupCloudComponentPage.checkGroupIsDisplayed(testGroup.name); + await groupCloudComponentPage.selectGroupFromList(testGroup.name); + await groupCloudComponentPage.checkSelectedGroup(testGroup.name); - groupCloudComponentPage.searchGroupsToExisting(`${groupActiviti.name}`); - groupCloudComponentPage.checkGroupIsDisplayed(`${groupActiviti.name}`); - groupCloudComponentPage.selectGroupFromList(`${groupActiviti.name}`); - groupCloudComponentPage.checkSelectedGroup(`${groupActiviti.name}`); + await groupCloudComponentPage.searchGroupsToExisting(hrGroup.name); + await groupCloudComponentPage.checkGroupIsDisplayed(hrGroup.name); + await groupCloudComponentPage.selectGroupFromList(hrGroup.name); + await groupCloudComponentPage.checkSelectedGroup(hrGroup.name); - groupCloudComponentPage.searchGroupsToExisting(`${groupNoRole.name}`); - groupCloudComponentPage.checkGroupIsNotDisplayed(`${groupNoRole.name}`); + await groupCloudComponentPage.searchGroupsToExisting(groupNoRole.name); + await groupCloudComponentPage.checkGroupIsNotDisplayed(groupNoRole.name); }); }); diff --git a/e2e/process-services-cloud/process-custom-filters.e2e.ts b/e2e/process-services-cloud/process-custom-filters.e2e.ts index 04452998af..c0b0fda319 100644 --- a/e2e/process-services-cloud/process-custom-filters.e2e.ts +++ b/e2e/process-services-cloud/process-custom-filters.e2e.ts @@ -57,7 +57,7 @@ describe('Process list cloud', () => { anotherProcessInstance; const candidateBaseApp = resources.ACTIVITI7_APPS.CANDIDATE_BASE_APP.name; - beforeAll(async (done) => { + beforeAll(async () => { await apiService.login(browser.params.identityAdmin.email, browser.params.identityAdmin.password); identityService = new IdentityService(apiService); @@ -99,7 +99,7 @@ describe('Process list cloud', () => { }); queryService = new QueryService(apiService); - await browser.driver.sleep(4000); // eventual consistency query + await browser.sleep(4000); // eventual consistency query const task = await queryService.getProcessInstanceTasks(completedProcess.entry.id, candidateBaseApp); tasksService = new TasksService(apiService); const claimedTask = await tasksService.claimTask(task.list.entries[0].entry.id, candidateBaseApp); @@ -112,183 +112,227 @@ describe('Process list cloud', () => { await loginSSOPage.loginSSOIdentityService(testUser.email, testUser.password); await LocalStorageUtil.setConfigField('adf-edit-process-filter', JSON.stringify(editProcessFilterConfigFile)); await LocalStorageUtil.setConfigField('adf-cloud-process-list', JSON.stringify(processListCloudConfigFile)); - done(); + }); - afterAll(async (done) => { + afterAll(async () => { + await processInstancesService.deleteProcessInstance(anotherProcessInstance.entry.id, candidateBaseApp); + await apiService.login(browser.params.identityAdmin.email, browser.params.identityAdmin.password); await identityService.deleteIdentityUser(testUser.idIdentityService); - await processInstancesService.deleteProcessInstance(anotherProcessInstance.id, candidateBaseApp); - done(); }); - beforeEach(() => { - navigationBarPage.navigateToProcessServicesCloudPage(); - appListCloudComponent.checkApsContainer(); - appListCloudComponent.goToApp(candidateBaseApp); - tasksCloudDemoPage.taskListCloudComponent().checkTaskListIsLoaded(); - processCloudDemoPage.clickOnProcessFilters(); + beforeEach(async () => { + await navigationBarPage.navigateToProcessServicesCloudPage(); + await appListCloudComponent.checkApsContainer(); + await appListCloudComponent.goToApp(candidateBaseApp); + await tasksCloudDemoPage.taskListCloudComponent().checkTaskListIsLoaded(); + await processCloudDemoPage.clickOnProcessFilters(); }); it('[C290069] Should display processes ordered by name when Name is selected from sort dropdown', async () => { - processCloudDemoPage.editProcessFilterCloudComponent().clickCustomiseFilterHeader().setStatusFilterDropDown('RUNNING') - .setSortFilterDropDown('Name').setOrderFilterDropDown('ASC'); + const editProcessFilterCloudComponent = processCloudDemoPage.editProcessFilterCloudComponent(); + await editProcessFilterCloudComponent.openFilter(); + await editProcessFilterCloudComponent.setStatusFilterDropDown('RUNNING'); + await editProcessFilterCloudComponent.setSortFilterDropDown('Name'); + await editProcessFilterCloudComponent.setOrderFilterDropDown('ASC'); - expect(processCloudDemoPage.processListCloudComponent().getDataTable().checkListIsSorted('ASC', 'Name')).toBe(true); + await expect(await processCloudDemoPage.processListCloudComponent().getDataTable().checkListIsSorted('ASC', 'Name')).toBe(true); - processCloudDemoPage.editProcessFilterCloudComponent().setOrderFilterDropDown('DESC'); + await processCloudDemoPage.editProcessFilterCloudComponent().setOrderFilterDropDown('DESC'); - expect(processCloudDemoPage.processListCloudComponent().getDataTable().checkListIsSorted('DESC', 'Name')).toBe(true); + await expect(await processCloudDemoPage.processListCloudComponent().getDataTable().checkListIsSorted('DESC', 'Name')).toBe(true); }); it('[C291783] Should display processes ordered by id when Id is selected from sort dropdown', async () => { - processCloudDemoPage.editProcessFilterCloudComponent().clickCustomiseFilterHeader().setStatusFilterDropDown('RUNNING') - .setSortFilterDropDown('Id').setOrderFilterDropDown('ASC'); - expect(processCloudDemoPage.processListCloudComponent().getDataTable().checkListIsSorted('ASC', 'Id')).toBe(true); + const editProcessFilterCloudComponent = processCloudDemoPage.editProcessFilterCloudComponent(); + await editProcessFilterCloudComponent.openFilter(); + await editProcessFilterCloudComponent.setStatusFilterDropDown('RUNNING'); + await editProcessFilterCloudComponent.setSortFilterDropDown('Id'); + await editProcessFilterCloudComponent.setOrderFilterDropDown('ASC'); - processCloudDemoPage.editProcessFilterCloudComponent().setOrderFilterDropDown('DESC'); - expect(processCloudDemoPage.processListCloudComponent().getDataTable().checkListIsSorted('DESC', 'Id')).toBe(true); + await expect(await processCloudDemoPage.processListCloudComponent().getDataTable().checkListIsSorted('ASC', 'Id')).toBe(true); + + await processCloudDemoPage.editProcessFilterCloudComponent().setOrderFilterDropDown('DESC'); + await expect(await processCloudDemoPage.processListCloudComponent().getDataTable().checkListIsSorted('DESC', 'Id')).toBe(true); }); it('[C305054] Should display processes ordered by status when Status is selected from sort dropdown', async () => { - processCloudDemoPage.editProcessFilterCloudComponent().clickCustomiseFilterHeader().setStatusFilterDropDown('ALL') - .setSortFilterDropDown('Status').setOrderFilterDropDown('ASC'); - expect(processCloudDemoPage.processListCloudComponent().getDataTable().checkListIsSorted('ASC', 'Status')).toBe(true); + const editProcessFilterCloudComponent = processCloudDemoPage.editProcessFilterCloudComponent(); + await editProcessFilterCloudComponent.openFilter(); + await editProcessFilterCloudComponent.setStatusFilterDropDown('ALL'); + await editProcessFilterCloudComponent.setSortFilterDropDown('Status'); + await editProcessFilterCloudComponent.setOrderFilterDropDown('ASC'); - processCloudDemoPage.editProcessFilterCloudComponent().setOrderFilterDropDown('DESC'); - expect(processCloudDemoPage.processListCloudComponent().getDataTable().checkListIsSorted('DESC', 'Status')).toBe(true); + await expect(await processCloudDemoPage.processListCloudComponent().getDataTable().checkListIsSorted('ASC', 'Status')).toBe(true); + + await processCloudDemoPage.editProcessFilterCloudComponent().setOrderFilterDropDown('DESC'); + await expect(await processCloudDemoPage.processListCloudComponent().getDataTable().checkListIsSorted('DESC', 'Status')).toBe(true); }); it('[C305054] Should display processes ordered by initiator when Initiator is selected from sort dropdown', async () => { - processCloudDemoPage.editProcessFilterCloudComponent().clickCustomiseFilterHeader().setStatusFilterDropDown('ALL') - .setSortFilterDropDown('Initiator').setOrderFilterDropDown('ASC'); - expect(processCloudDemoPage.processListCloudComponent().getDataTable().checkListIsSorted('ASC', 'Initiator')).toBe(true); + const editProcessFilterCloudComponent = processCloudDemoPage.editProcessFilterCloudComponent(); + await editProcessFilterCloudComponent.openFilter(); + await editProcessFilterCloudComponent.setStatusFilterDropDown('ALL'); + await editProcessFilterCloudComponent.setSortFilterDropDown('Initiator'); + await editProcessFilterCloudComponent.setOrderFilterDropDown('ASC'); - processCloudDemoPage.editProcessFilterCloudComponent().setOrderFilterDropDown('DESC'); - expect(processCloudDemoPage.processListCloudComponent().getDataTable().checkListIsSorted('DESC', 'Initiator')).toBe(true); + await expect(await processCloudDemoPage.processListCloudComponent().getDataTable().checkListIsSorted('ASC', 'Initiator')).toBe(true); + + await processCloudDemoPage.editProcessFilterCloudComponent().setOrderFilterDropDown('DESC'); + await expect(await processCloudDemoPage.processListCloudComponent().getDataTable().checkListIsSorted('DESC', 'Initiator')).toBe(true); }); it('[C305054] Should display processes ordered by processdefinitionid date when ProcessDefinitionId is selected from sort dropdown', async () => { - processCloudDemoPage.editProcessFilterCloudComponent().clickCustomiseFilterHeader().setStatusFilterDropDown('ALL') - .setSortFilterDropDown('ProcessDefinitionId').setOrderFilterDropDown('ASC'); - expect(processCloudDemoPage.processListCloudComponent().getDataTable().checkListIsSorted('ASC', 'Process Definition Id')).toBe(true); + const editProcessFilterCloudComponent = processCloudDemoPage.editProcessFilterCloudComponent(); + await editProcessFilterCloudComponent.openFilter(); + await editProcessFilterCloudComponent.setStatusFilterDropDown('ALL'); + await editProcessFilterCloudComponent.setSortFilterDropDown('ProcessDefinitionId'); + await editProcessFilterCloudComponent.setOrderFilterDropDown('ASC'); - processCloudDemoPage.editProcessFilterCloudComponent().setOrderFilterDropDown('DESC'); - expect(processCloudDemoPage.processListCloudComponent().getDataTable().checkListIsSorted('DESC', 'Process Definition Id')).toBe(true); + await expect(await processCloudDemoPage.processListCloudComponent().getDataTable().checkListIsSorted('ASC', 'Process Definition Id')).toBe(true); + + await processCloudDemoPage.editProcessFilterCloudComponent().setOrderFilterDropDown('DESC'); + await expect(await processCloudDemoPage.processListCloudComponent().getDataTable().checkListIsSorted('DESC', 'Process Definition Id')).toBe(true); }); it('[C305054] Should display processes ordered by processdefinitionkey date when ProcessDefinitionKey is selected from sort dropdown', async () => { - processCloudDemoPage.editProcessFilterCloudComponent().clickCustomiseFilterHeader().setStatusFilterDropDown('ALL') - .setSortFilterDropDown('ProcessDefinitionKey').setOrderFilterDropDown('ASC'); - expect(processCloudDemoPage.processListCloudComponent().getDataTable().checkListIsSorted('ASC', 'Process Definition Key')).toBe(true); + const editProcessFilterCloudComponent = processCloudDemoPage.editProcessFilterCloudComponent(); + await editProcessFilterCloudComponent.openFilter(); + await editProcessFilterCloudComponent.setStatusFilterDropDown('ALL'); + await editProcessFilterCloudComponent.setSortFilterDropDown('ProcessDefinitionKey'); + await editProcessFilterCloudComponent.setOrderFilterDropDown('ASC'); - processCloudDemoPage.editProcessFilterCloudComponent().setOrderFilterDropDown('DESC'); - expect(processCloudDemoPage.processListCloudComponent().getDataTable().checkListIsSorted('DESC', 'Process Definition Key')).toBe(true); + await expect(await processCloudDemoPage.processListCloudComponent().getDataTable().checkListIsSorted('ASC', 'Process Definition Key')).toBe(true); + + await processCloudDemoPage.editProcessFilterCloudComponent().setOrderFilterDropDown('DESC'); + await expect(await processCloudDemoPage.processListCloudComponent().getDataTable().checkListIsSorted('DESC', 'Process Definition Key')).toBe(true); }); it('[C305054] Should display processes ordered by last modified date when Last Modified is selected from sort dropdown', async () => { - processCloudDemoPage.editProcessFilterCloudComponent().clickCustomiseFilterHeader().setStatusFilterDropDown('ALL') - .setSortFilterDropDown('LastModified').setOrderFilterDropDown('ASC'); - expect(processCloudDemoPage.processListCloudComponent().getDataTable().checkListIsSorted('ASC', 'Last Modified')).toBe(true); + const editProcessFilterCloudComponent = processCloudDemoPage.editProcessFilterCloudComponent(); + await editProcessFilterCloudComponent.openFilter(); + await editProcessFilterCloudComponent.setStatusFilterDropDown('ALL'); + await editProcessFilterCloudComponent.setSortFilterDropDown('LastModified'); + await editProcessFilterCloudComponent.setOrderFilterDropDown('ASC'); - processCloudDemoPage.editProcessFilterCloudComponent().setOrderFilterDropDown('DESC'); - expect(processCloudDemoPage.processListCloudComponent().getDataTable().checkListIsSorted('DESC', 'Last Modified')).toBe(true); + await expect(await processCloudDemoPage.processListCloudComponent().getDataTable().checkListIsSorted('ASC', 'Last Modified')).toBe(true); + + await processCloudDemoPage.editProcessFilterCloudComponent().setOrderFilterDropDown('DESC'); + await expect(await processCloudDemoPage.processListCloudComponent().getDataTable().checkListIsSorted('DESC', 'Last Modified')).toBe(true); }); it('[C305054] Should display processes ordered by business key date when BusinessKey is selected from sort dropdown', async () => { - processCloudDemoPage.editProcessFilterCloudComponent().clickCustomiseFilterHeader().setStatusFilterDropDown('ALL') - .setSortFilterDropDown('BusinessKey').setOrderFilterDropDown('ASC'); - expect(processCloudDemoPage.processListCloudComponent().getDataTable().checkListIsSorted('ASC', 'Business Key')).toBe(true); + const editProcessFilterCloudComponent = processCloudDemoPage.editProcessFilterCloudComponent(); + await editProcessFilterCloudComponent.openFilter(); + await editProcessFilterCloudComponent.setStatusFilterDropDown('ALL'); + await editProcessFilterCloudComponent.setSortFilterDropDown('BusinessKey'); + await editProcessFilterCloudComponent.setOrderFilterDropDown('ASC'); - processCloudDemoPage.editProcessFilterCloudComponent().setOrderFilterDropDown('DESC'); - expect(processCloudDemoPage.processListCloudComponent().getDataTable().checkListIsSorted('DESC', 'Business Key')).toBe(true); + await expect(await processCloudDemoPage.processListCloudComponent().getDataTable().checkListIsSorted('ASC', 'Business Key')).toBe(true); + + await processCloudDemoPage.editProcessFilterCloudComponent().setOrderFilterDropDown('DESC'); + await expect(await processCloudDemoPage.processListCloudComponent().getDataTable().checkListIsSorted('DESC', 'Business Key')).toBe(true); }); it('[C305054] Should display the actions filters Save, SaveAs and Delete', async () => { - processCloudDemoPage.allProcessesFilter().clickProcessFilter(); - processCloudDemoPage.allProcessesFilter().checkProcessFilterIsDisplayed(); - expect(processCloudDemoPage.getActiveFilterName()).toBe('All Processes'); - processCloudDemoPage.editProcessFilterCloudComponent().clickCustomiseFilterHeader(); - processCloudDemoPage.editProcessFilterCloudComponent().checkSaveButtonIsDisplayed().checkSaveAsButtonIsDisplayed() - .checkDeleteButtonIsDisplayed(); + await processCloudDemoPage.allProcessesFilter().clickProcessFilter(); + await processCloudDemoPage.allProcessesFilter().checkProcessFilterIsDisplayed(); + await expect(await processCloudDemoPage.getActiveFilterName()).toBe('All Processes'); + await processCloudDemoPage.editProcessFilterCloudComponent().openFilter(); + + const editProcessFilterCloudComponent = processCloudDemoPage.editProcessFilterCloudComponent(); + + await editProcessFilterCloudComponent.checkSaveButtonIsDisplayed(); + await editProcessFilterCloudComponent.checkSaveAsButtonIsDisplayed(); + await editProcessFilterCloudComponent.checkDeleteButtonIsDisplayed(); }); it('[C297697] The value of the filter should be preserved when saving it', async () => { - processCloudDemoPage.editProcessFilterCloudComponent().clickCustomiseFilterHeader() - .setProcessInstanceId(completedProcess.entry.id); + await processCloudDemoPage.editProcessFilterCloudComponent().openFilter(); + await processCloudDemoPage.editProcessFilterCloudComponent().setProcessInstanceId(completedProcess.entry.id); - processCloudDemoPage.editProcessFilterCloudComponent().clickSaveAsButton(); - processCloudDemoPage.editProcessFilterCloudComponent().editProcessFilterDialog().setFilterName('New').clickOnSaveButton(); - expect(processCloudDemoPage.getActiveFilterName()).toBe('New'); + await processCloudDemoPage.editProcessFilterCloudComponent().clickSaveAsButton(); + await processCloudDemoPage.editProcessFilterCloudComponent().editProcessFilterDialog().setFilterName('New'); + await processCloudDemoPage.editProcessFilterCloudComponent().editProcessFilterDialog().clickOnSaveButton(); - processCloudDemoPage.processListCloudComponent().checkContentIsDisplayedById(completedProcess.entry.id); - expect(processCloudDemoPage.processListCloudComponent().getDataTable().numberOfRows()).toBe(1); + await expect(await processCloudDemoPage.getActiveFilterName()).toBe('New'); - processCloudDemoPage.editProcessFilterCloudComponent().clickCustomiseFilterHeader(); - expect(processCloudDemoPage.editProcessFilterCloudComponent().getProcessInstanceId()).toEqual(completedProcess.entry.id); + await processCloudDemoPage.processListCloudComponent().checkContentIsDisplayedById(completedProcess.entry.id); + await expect(await processCloudDemoPage.processListCloudComponent().getDataTable().numberOfRows()).toBe(1); + + await processCloudDemoPage.editProcessFilterCloudComponent().openFilter(); + + await expect(await processCloudDemoPage.editProcessFilterCloudComponent().getProcessInstanceId()).toEqual(completedProcess.entry.id); }); it('[C297646] Should display the filter dropdown fine , after switching between saved filters', async () => { + await processCloudDemoPage.editProcessFilterCloudComponent().openFilter(); + noOfApps = await processCloudDemoPage.editProcessFilterCloudComponent().getNumberOfAppNameOptions(); - noOfApps = processCloudDemoPage.editProcessFilterCloudComponent().clickCustomiseFilterHeader().getNumberOfAppNameOptions(); - expect(processCloudDemoPage.editProcessFilterCloudComponent().checkAppNamesAreUnique()).toBe(true); - BrowserActions.closeMenuAndDialogs(); - processCloudDemoPage.editProcessFilterCloudComponent().setStatusFilterDropDown('RUNNING') - .setAppNameDropDown(candidateBaseApp).setProcessInstanceId(runningProcessInstance.entry.id); + await expect(await processCloudDemoPage.editProcessFilterCloudComponent().checkAppNamesAreUnique()).toBe(true); + await BrowserActions.closeMenuAndDialogs(); + await processCloudDemoPage.editProcessFilterCloudComponent().setStatusFilterDropDown('RUNNING'); + await processCloudDemoPage.editProcessFilterCloudComponent().setAppNameDropDown(candidateBaseApp); + await processCloudDemoPage.editProcessFilterCloudComponent().setProcessInstanceId(runningProcessInstance.entry.id); - processCloudDemoPage.processListCloudComponent().checkContentIsDisplayedById(runningProcessInstance.entry.id); - expect(processCloudDemoPage.editProcessFilterCloudComponent().getNumberOfAppNameOptions()).toBe(noOfApps); - expect(processCloudDemoPage.editProcessFilterCloudComponent().checkAppNamesAreUnique()).toBe(true); - BrowserActions.closeMenuAndDialogs(); + await processCloudDemoPage.processListCloudComponent().checkContentIsDisplayedById(runningProcessInstance.entry.id); + await expect(await processCloudDemoPage.editProcessFilterCloudComponent().getNumberOfAppNameOptions()).toBe(noOfApps); + await expect(await processCloudDemoPage.editProcessFilterCloudComponent().checkAppNamesAreUnique()).toBe(true); + await BrowserActions.closeMenuAndDialogs(); - processCloudDemoPage.editProcessFilterCloudComponent().clickSaveAsButton(); - processCloudDemoPage.editProcessFilterCloudComponent().editProcessFilterDialog().setFilterName('SavedFilter').clickOnSaveButton(); - expect(processCloudDemoPage.getActiveFilterName()).toBe('SavedFilter'); + await processCloudDemoPage.editProcessFilterCloudComponent().clickSaveAsButton(); + await processCloudDemoPage.editProcessFilterCloudComponent().editProcessFilterDialog().setFilterName('SavedFilter'); + await processCloudDemoPage.editProcessFilterCloudComponent().editProcessFilterDialog().clickOnSaveButton(); + await expect(await processCloudDemoPage.getActiveFilterName()).toBe('SavedFilter'); - processCloudDemoPage.editProcessFilterCloudComponent().clickCustomiseFilterHeader(); - expect(processCloudDemoPage.editProcessFilterCloudComponent().getProcessInstanceId()).toEqual(runningProcessInstance.entry.id); + await processCloudDemoPage.editProcessFilterCloudComponent().openFilter(); + await expect(await processCloudDemoPage.editProcessFilterCloudComponent().getProcessInstanceId()).toEqual(runningProcessInstance.entry.id); - processCloudDemoPage.editProcessFilterCloudComponent().setStatusFilterDropDown('RUNNING') - .setAppNameDropDown(candidateBaseApp).setProcessInstanceId(switchProcessInstance.entry.id); + await processCloudDemoPage.editProcessFilterCloudComponent().setStatusFilterDropDown('RUNNING'); + await processCloudDemoPage.editProcessFilterCloudComponent().setAppNameDropDown(candidateBaseApp); + await processCloudDemoPage.editProcessFilterCloudComponent().setProcessInstanceId(switchProcessInstance.entry.id); - processCloudDemoPage.processListCloudComponent().checkContentIsDisplayedById(switchProcessInstance.entry.id); - processCloudDemoPage.editProcessFilterCloudComponent().clickSaveAsButton(); - processCloudDemoPage.editProcessFilterCloudComponent().editProcessFilterDialog().setFilterName('SwitchFilter').clickOnSaveButton(); - expect(processCloudDemoPage.getActiveFilterName()).toBe('SwitchFilter'); + await processCloudDemoPage.processListCloudComponent().checkContentIsDisplayedById(switchProcessInstance.entry.id); + await processCloudDemoPage.editProcessFilterCloudComponent().clickSaveAsButton(); + await processCloudDemoPage.editProcessFilterCloudComponent().editProcessFilterDialog().setFilterName('SwitchFilter'); + await processCloudDemoPage.editProcessFilterCloudComponent().editProcessFilterDialog().clickOnSaveButton(); + await expect(await processCloudDemoPage.getActiveFilterName()).toBe('SwitchFilter'); - processCloudDemoPage.editProcessFilterCloudComponent().clickCustomiseFilterHeader(); - expect(processCloudDemoPage.editProcessFilterCloudComponent().getProcessInstanceId()).toEqual(switchProcessInstance.entry.id); - expect(processCloudDemoPage.editProcessFilterCloudComponent().getNumberOfAppNameOptions()).toBe(noOfApps); - expect(processCloudDemoPage.editProcessFilterCloudComponent().checkAppNamesAreUnique()).toBe(true); - BrowserActions.closeMenuAndDialogs(); + await processCloudDemoPage.editProcessFilterCloudComponent().openFilter(); + await expect(await processCloudDemoPage.editProcessFilterCloudComponent().getProcessInstanceId()).toEqual(switchProcessInstance.entry.id); + await expect(await processCloudDemoPage.editProcessFilterCloudComponent().getNumberOfAppNameOptions()).toBe(noOfApps); + await expect(await processCloudDemoPage.editProcessFilterCloudComponent().checkAppNamesAreUnique()).toBe(true); + await BrowserActions.closeMenuAndDialogs(); }); describe('Process List - Check Action Filters', () => { - beforeEach(async (done) => { + beforeEach(async () => { await LocalStorageUtil.setConfigField('adf-edit-process-filter', JSON.stringify({ 'actions': [ 'save', 'saveAs' ] })); - navigationBarPage.navigateToProcessServicesCloudPage(); - appListCloudComponent.checkApsContainer(); - appListCloudComponent.goToApp(candidateBaseApp); - tasksCloudDemoPage.taskListCloudComponent().checkTaskListIsLoaded(); - processCloudDemoPage.clickOnProcessFilters(); - done(); + await navigationBarPage.navigateToProcessServicesCloudPage(); + await appListCloudComponent.checkApsContainer(); + await appListCloudComponent.goToApp(candidateBaseApp); + await tasksCloudDemoPage.taskListCloudComponent().checkTaskListIsLoaded(); + await processCloudDemoPage.clickOnProcessFilters(); + }); it('[C305054] Should display the actions filters Save and SaveAs, Delete button is not displayed', async () => { - processCloudDemoPage.allProcessesFilter().clickProcessFilter(); - processCloudDemoPage.allProcessesFilter().checkProcessFilterIsDisplayed(); - expect(processCloudDemoPage.getActiveFilterName()).toBe('All Processes'); - processCloudDemoPage.editProcessFilterCloudComponent().clickCustomiseFilterHeader(); - processCloudDemoPage.editProcessFilterCloudComponent().checkSaveButtonIsDisplayed().checkSaveAsButtonIsDisplayed() - .checkDeleteButtonIsNotDisplayed(); + await processCloudDemoPage.allProcessesFilter().clickProcessFilter(); + await processCloudDemoPage.allProcessesFilter().checkProcessFilterIsDisplayed(); + await expect(await processCloudDemoPage.getActiveFilterName()).toBe('All Processes'); + await processCloudDemoPage.editProcessFilterCloudComponent().openFilter(); + await processCloudDemoPage.editProcessFilterCloudComponent().checkSaveButtonIsDisplayed(); + await processCloudDemoPage.editProcessFilterCloudComponent().checkSaveAsButtonIsDisplayed(); + await processCloudDemoPage.editProcessFilterCloudComponent().checkDeleteButtonIsNotDisplayed(); }); }); diff --git a/e2e/process-services-cloud/process-filter-results.e2e.ts b/e2e/process-services-cloud/process-filter-results.e2e.ts index 89fbe65a4d..83a08b11e0 100644 --- a/e2e/process-services-cloud/process-filter-results.e2e.ts +++ b/e2e/process-services-cloud/process-filter-results.e2e.ts @@ -63,7 +63,7 @@ describe('Process filters cloud', () => { const candidateBaseApp = resources.ACTIVITI7_APPS.CANDIDATE_BASE_APP.name; const simpleApp = resources.ACTIVITI7_APPS.SIMPLE_APP.name; - beforeAll(async (done) => { + beforeAll(async () => { await apiService.login(browser.params.identityAdmin.email, browser.params.identityAdmin.password); identityService = new IdentityService(apiService); @@ -116,7 +116,7 @@ describe('Process filters cloud', () => { }); queryService = new QueryService(apiService); - await browser.driver.sleep(4000); // eventual consistency query + await browser.sleep(4000); // eventual consistency query const task = await queryService.getProcessInstanceTasks(completedProcess.entry.id, candidateBaseApp); tasksService = new TasksService(apiService); const claimedTask = await tasksService.claimTask(task.list.entries[0].entry.id, candidateBaseApp); @@ -129,10 +129,10 @@ describe('Process filters cloud', () => { await loginSSOPage.loginSSOIdentityService(testUser.email, testUser.password); await LocalStorageUtil.setConfigField('adf-edit-process-filter', JSON.stringify(editProcessFilterConfigFile)); await LocalStorageUtil.setConfigField('adf-cloud-process-list', JSON.stringify(processListCloudConfigFile)); - done(); + }); - afterAll(async (done) => { + afterAll(async () => { await processInstancesService.deleteProcessInstance(runningProcessInstance.entry.id, candidateBaseApp); await processInstancesService.deleteProcessInstance(anotherProcessInstance.entry.id, candidateBaseApp); await processInstancesService.deleteProcessInstance(suspendProcessInstance.entry.id, candidateBaseApp); @@ -144,166 +144,195 @@ describe('Process filters cloud', () => { await identityService.deleteIdentityUser(testUser.idIdentityService); await identityService.deleteIdentityUser(anotherUser.idIdentityService); - done(); + }); - beforeEach(() => { - navigationBarPage.navigateToProcessServicesCloudPage(); - appListCloudComponent.checkApsContainer(); - appListCloudComponent.goToApp(candidateBaseApp); - tasksCloudDemoPage.taskListCloudComponent().checkTaskListIsLoaded(); - processCloudDemoPage.clickOnProcessFilters(); + beforeEach(async () => { + await navigationBarPage.navigateToProcessServicesCloudPage(); + await appListCloudComponent.checkApsContainer(); + await appListCloudComponent.goToApp(candidateBaseApp); + await tasksCloudDemoPage.taskListCloudComponent().checkTaskListIsLoaded(); + await processCloudDemoPage.clickOnProcessFilters(); }); it('[C306887] Should be able to filter by appName', async () => { - processCloudDemoPage.editProcessFilterCloudComponent().clickCustomiseFilterHeader().setAppNameDropDown(candidateBaseApp).setProperty('initiator', testUser.username); - processCloudDemoPage.processListCloudComponent().getDataTable().waitTillContentLoaded(); - processCloudDemoPage.processListCloudComponent().checkContentIsDisplayedByName(runningProcessInstance.entry.name); - processCloudDemoPage.processListCloudComponent().checkContentIsNotDisplayedByName(differentAppUserProcessInstance.entry.name); + await processCloudDemoPage.editProcessFilterCloudComponent().openFilter(); + await processCloudDemoPage.editProcessFilterCloudComponent().setAppNameDropDown(candidateBaseApp); + await processCloudDemoPage.editProcessFilterCloudComponent().setProperty('initiator', testUser.username); + + await processCloudDemoPage.processListCloudComponent().getDataTable().waitTillContentLoaded(); + await processCloudDemoPage.processListCloudComponent().checkContentIsDisplayedByName(runningProcessInstance.entry.name); + await processCloudDemoPage.processListCloudComponent().checkContentIsNotDisplayedByName(differentAppUserProcessInstance.entry.name); }); it('[C306889] Should be able to see "No process found" when using an app with no processes in the appName field', async () => { - processCloudDemoPage.editProcessFilterCloudComponent().clickCustomiseFilterHeader().setAppNameDropDown('subprocessapp').setProperty('initiator', testUser.username); - processCloudDemoPage.processListCloudComponent().getDataTable().waitTillContentLoaded(); - expect(processListPage.checkProcessListTitleIsDisplayed()).toEqual('No Processes Found'); + await processCloudDemoPage.editProcessFilterCloudComponent().openFilter(); + await processCloudDemoPage.editProcessFilterCloudComponent().setAppNameDropDown('subprocessapp'); + await processCloudDemoPage.editProcessFilterCloudComponent().setProperty('initiator', testUser.username); + + await processCloudDemoPage.processListCloudComponent().getDataTable().waitTillContentLoaded(); + await expect(await processListPage.getDisplayedProcessListTitle()).toEqual('No Processes Found'); }); it('[C306890] Should be able to filter by initiator', async () => { - processCloudDemoPage.editProcessFilterCloudComponent().clickCustomiseFilterHeader().setProperty('initiator', testUser.username); - processCloudDemoPage.processListCloudComponent().getDataTable().waitTillContentLoaded(); - processCloudDemoPage.processListCloudComponent().checkContentIsDisplayedByName(runningProcessInstance.entry.name); - processCloudDemoPage.processListCloudComponent().checkContentIsNotDisplayedByName(differentAppUserProcessInstance.entry.name); + await processCloudDemoPage.editProcessFilterCloudComponent().openFilter(); + await processCloudDemoPage.editProcessFilterCloudComponent().setProperty('initiator', testUser.username); + + await processCloudDemoPage.processListCloudComponent().getDataTable().waitTillContentLoaded(); + await processCloudDemoPage.processListCloudComponent().checkContentIsDisplayedByName(runningProcessInstance.entry.name); + await processCloudDemoPage.processListCloudComponent().checkContentIsNotDisplayedByName(differentAppUserProcessInstance.entry.name); }); it('[C306891] Should be able to see "No process found" when providing an initiator whitout processes', async () => { - processCloudDemoPage.editProcessFilterCloudComponent().clickCustomiseFilterHeader().setProperty('initiator', anotherUser.username); - processCloudDemoPage.processListCloudComponent().getDataTable().waitTillContentLoaded(); - expect(processListPage.checkProcessListTitleIsDisplayed()).toEqual('No Processes Found'); + await processCloudDemoPage.editProcessFilterCloudComponent().openFilter(); + await processCloudDemoPage.editProcessFilterCloudComponent().setProperty('initiator', anotherUser.username); + + await processCloudDemoPage.processListCloudComponent().getDataTable().waitTillContentLoaded(); + await expect(await processListPage.getDisplayedProcessListTitle()).toEqual('No Processes Found'); }); it('[C311315] Should be able to filter by process definition id', async () => { - processCloudDemoPage.editProcessFilterCloudComponent().clickCustomiseFilterHeader().setProperty('processDefinitionId', processDefinition.entry.id); - processCloudDemoPage.processListCloudComponent().getDataTable().waitTillContentLoaded(); - processCloudDemoPage.processListCloudComponent().checkContentIsDisplayedByName(runningProcessInstance.entry.name); + await processCloudDemoPage.editProcessFilterCloudComponent().openFilter(); + await processCloudDemoPage.editProcessFilterCloudComponent().setProperty('processDefinitionId', processDefinition.entry.id); - processCloudDemoPage.editProcessFilterCloudComponent().setProperty('processDefinitionId', anotherProcessDefinition.entry.id); - processCloudDemoPage.processListCloudComponent().getDataTable().waitTillContentLoaded(); - processCloudDemoPage.processListCloudComponent().checkContentIsDisplayedByName(anotherProcessInstance.entry.name); - processCloudDemoPage.processListCloudComponent().checkContentIsNotDisplayedByName(runningProcessInstance.entry.name); + await processCloudDemoPage.processListCloudComponent().getDataTable().waitTillContentLoaded(); + await processCloudDemoPage.processListCloudComponent().checkContentIsDisplayedByName(runningProcessInstance.entry.name); + + await processCloudDemoPage.editProcessFilterCloudComponent().setProperty('processDefinitionId', anotherProcessDefinition.entry.id); + await processCloudDemoPage.processListCloudComponent().getDataTable().waitTillContentLoaded(); + await processCloudDemoPage.processListCloudComponent().checkContentIsDisplayedByName(anotherProcessInstance.entry.name); + await processCloudDemoPage.processListCloudComponent().checkContentIsNotDisplayedByName(runningProcessInstance.entry.name); }); it('[C311316] Should be able to filter by process definition key', async () => { - processCloudDemoPage.editProcessFilterCloudComponent().clickCustomiseFilterHeader().setProperty('processDefinitionKey', processDefinition.entry.key); - processCloudDemoPage.processListCloudComponent().getDataTable().waitTillContentLoaded(); - processCloudDemoPage.processListCloudComponent().checkContentIsDisplayedByName(runningProcessInstance.entry.name); + await processCloudDemoPage.editProcessFilterCloudComponent().openFilter(); + await processCloudDemoPage.editProcessFilterCloudComponent().setProperty('processDefinitionKey', processDefinition.entry.key); + await processCloudDemoPage.processListCloudComponent().getDataTable().waitTillContentLoaded(); + await processCloudDemoPage.processListCloudComponent().checkContentIsDisplayedByName(runningProcessInstance.entry.name); - processCloudDemoPage.editProcessFilterCloudComponent().setProperty('processDefinitionKey', anotherProcessDefinition.entry.key); - processCloudDemoPage.processListCloudComponent().getDataTable().waitTillContentLoaded(); - processCloudDemoPage.processListCloudComponent().checkContentIsDisplayedByName(anotherProcessInstance.entry.name); - processCloudDemoPage.processListCloudComponent().checkContentIsNotDisplayedByName(runningProcessInstance.entry.name); + await processCloudDemoPage.editProcessFilterCloudComponent().setProperty('processDefinitionKey', anotherProcessDefinition.entry.key); + await processCloudDemoPage.processListCloudComponent().getDataTable().waitTillContentLoaded(); + await processCloudDemoPage.processListCloudComponent().checkContentIsDisplayedByName(anotherProcessInstance.entry.name); + await processCloudDemoPage.processListCloudComponent().checkContentIsNotDisplayedByName(runningProcessInstance.entry.name); }); it('[C311317] Should be able to filter by process instance id', async () => { - processCloudDemoPage.editProcessFilterCloudComponent().clickCustomiseFilterHeader().setProperty('processInstanceId', runningProcessInstance.entry.id); - processCloudDemoPage.processListCloudComponent().getDataTable().waitTillContentLoaded(); - processCloudDemoPage.processListCloudComponent().checkContentIsDisplayedByName(runningProcessInstance.entry.name); - expect(processCloudDemoPage.processListCloudComponent().getDataTable().getNumberOfRows()).toBe(1); + await processCloudDemoPage.editProcessFilterCloudComponent().openFilter(); + await processCloudDemoPage.editProcessFilterCloudComponent().setProperty('processInstanceId', runningProcessInstance.entry.id); + await processCloudDemoPage.processListCloudComponent().getDataTable().waitTillContentLoaded(); + await processCloudDemoPage.processListCloudComponent().checkContentIsDisplayedByName(runningProcessInstance.entry.name); - processCloudDemoPage.editProcessFilterCloudComponent().setProperty('processInstanceId', anotherProcessInstance.entry.id); - processCloudDemoPage.processListCloudComponent().getDataTable().waitTillContentLoaded(); - processCloudDemoPage.processListCloudComponent().checkContentIsDisplayedByName(anotherProcessInstance.entry.name); - processCloudDemoPage.processListCloudComponent().checkContentIsNotDisplayedByName(runningProcessInstance.entry.name); - expect(processCloudDemoPage.processListCloudComponent().getDataTable().getNumberOfRows()).toBe(1); + await browser.driver.sleep(1000); + await expect(await processCloudDemoPage.processListCloudComponent().getDataTable().getNumberOfRows()).toBe(1); + + await processCloudDemoPage.editProcessFilterCloudComponent().setProperty('processInstanceId', anotherProcessInstance.entry.id); + await processCloudDemoPage.processListCloudComponent().getDataTable().waitTillContentLoaded(); + await processCloudDemoPage.processListCloudComponent().checkContentIsDisplayedByName(anotherProcessInstance.entry.name); + await processCloudDemoPage.processListCloudComponent().checkContentIsNotDisplayedByName(runningProcessInstance.entry.name); + await expect(await processCloudDemoPage.processListCloudComponent().getDataTable().getNumberOfRows()).toBe(1); }); it('[C311321] Should be able to filter by process name', async () => { - processCloudDemoPage.editProcessFilterCloudComponent().clickCustomiseFilterHeader().setProperty('processName', runningProcessInstance.entry.name); - processCloudDemoPage.processListCloudComponent().getDataTable().waitTillContentLoaded(); - processCloudDemoPage.processListCloudComponent().checkContentIsDisplayedByName(runningProcessInstance.entry.name); + await processCloudDemoPage.editProcessFilterCloudComponent().openFilter(); + await processCloudDemoPage.editProcessFilterCloudComponent().setProperty('processName', runningProcessInstance.entry.name); + await processCloudDemoPage.processListCloudComponent().getDataTable().waitTillContentLoaded(); + await processCloudDemoPage.processListCloudComponent().checkContentIsDisplayedByName(runningProcessInstance.entry.name); - processCloudDemoPage.editProcessFilterCloudComponent().setProperty('processName', anotherProcessInstance.entry.name); - processCloudDemoPage.processListCloudComponent().getDataTable().waitTillContentLoaded(); - processCloudDemoPage.processListCloudComponent().checkContentIsDisplayedByName(anotherProcessInstance.entry.name); - processCloudDemoPage.processListCloudComponent().checkContentIsNotDisplayedByName(runningProcessInstance.entry.name); + await processCloudDemoPage.editProcessFilterCloudComponent().setProperty('processName', anotherProcessInstance.entry.name); + await processCloudDemoPage.processListCloudComponent().getDataTable().waitTillContentLoaded(); + await processCloudDemoPage.processListCloudComponent().checkContentIsDisplayedByName(anotherProcessInstance.entry.name); + await processCloudDemoPage.processListCloudComponent().checkContentIsNotDisplayedByName(runningProcessInstance.entry.name); }); it('[C306892] Should be able to filter by process status - Running', async () => { - processCloudDemoPage.editProcessFilterCloudComponent().clickCustomiseFilterHeader().setStatusFilterDropDown('RUNNING'); - processCloudDemoPage.processListCloudComponent().getDataTable().waitTillContentLoaded(); - processCloudDemoPage.processListCloudComponent().checkContentIsDisplayedByName(runningProcessInstance.entry.name); - processCloudDemoPage.processListCloudComponent().checkContentIsNotDisplayedByName(suspendProcessInstance.entry.name); - processCloudDemoPage.processListCloudComponent().checkContentIsDisplayedByName(anotherProcessInstance.entry.name); - processCloudDemoPage.processListCloudComponent().checkContentIsNotDisplayedByName(completedProcess.entry.name); + await processCloudDemoPage.editProcessFilterCloudComponent().openFilter(); + await processCloudDemoPage.editProcessFilterCloudComponent().setStatusFilterDropDown('RUNNING'); + await processCloudDemoPage.processListCloudComponent().getDataTable().waitTillContentLoaded(); + await processCloudDemoPage.processListCloudComponent().checkContentIsDisplayedByName(runningProcessInstance.entry.name); + await processCloudDemoPage.processListCloudComponent().checkContentIsNotDisplayedByName(suspendProcessInstance.entry.name); + await processCloudDemoPage.processListCloudComponent().checkContentIsDisplayedByName(anotherProcessInstance.entry.name); + await processCloudDemoPage.processListCloudComponent().checkContentIsNotDisplayedByName(completedProcess.entry.name); }); it('[C306892] Should be able to filter by process status - Completed', async () => { - processCloudDemoPage.editProcessFilterCloudComponent().clickCustomiseFilterHeader().setStatusFilterDropDown('COMPLETED'); - processCloudDemoPage.processListCloudComponent().getDataTable().waitTillContentLoaded(); - processCloudDemoPage.processListCloudComponent().checkContentIsDisplayedByName(completedProcess.entry.name); - processCloudDemoPage.processListCloudComponent().checkContentIsNotDisplayedByName(runningProcessInstance.entry.name); - processCloudDemoPage.processListCloudComponent().checkContentIsNotDisplayedByName(suspendProcessInstance.entry.name); - processCloudDemoPage.processListCloudComponent().checkContentIsNotDisplayedByName(anotherProcessInstance.entry.name); + await processCloudDemoPage.editProcessFilterCloudComponent().openFilter(); + await processCloudDemoPage.editProcessFilterCloudComponent().setStatusFilterDropDown('COMPLETED'); + await processCloudDemoPage.processListCloudComponent().getDataTable().waitTillContentLoaded(); + await processCloudDemoPage.processListCloudComponent().checkContentIsDisplayedByName(completedProcess.entry.name); + await processCloudDemoPage.processListCloudComponent().checkContentIsNotDisplayedByName(runningProcessInstance.entry.name); + await processCloudDemoPage.processListCloudComponent().checkContentIsNotDisplayedByName(suspendProcessInstance.entry.name); + await processCloudDemoPage.processListCloudComponent().checkContentIsNotDisplayedByName(anotherProcessInstance.entry.name); }); it('[C306892] Should be able to filter by process status - Suspended', async () => { - processCloudDemoPage.editProcessFilterCloudComponent().clickCustomiseFilterHeader().setStatusFilterDropDown('SUSPENDED'); - processCloudDemoPage.processListCloudComponent().getDataTable().waitTillContentLoaded(); - processCloudDemoPage.processListCloudComponent().checkContentIsDisplayedByName(suspendProcessInstance.entry.name); - processCloudDemoPage.processListCloudComponent().checkContentIsNotDisplayedByName(runningProcessInstance.entry.name); - processCloudDemoPage.processListCloudComponent().checkContentIsNotDisplayedByName(anotherProcessInstance.entry.name); - processCloudDemoPage.processListCloudComponent().checkContentIsNotDisplayedByName(completedProcess.entry.name); + await processCloudDemoPage.editProcessFilterCloudComponent().openFilter(); + await processCloudDemoPage.editProcessFilterCloudComponent().setStatusFilterDropDown('SUSPENDED'); + + await processCloudDemoPage.processListCloudComponent().getDataTable().waitTillContentLoaded(); + await processCloudDemoPage.processListCloudComponent().checkContentIsDisplayedByName(suspendProcessInstance.entry.name); + await processCloudDemoPage.processListCloudComponent().checkContentIsNotDisplayedByName(runningProcessInstance.entry.name); + await processCloudDemoPage.processListCloudComponent().checkContentIsNotDisplayedByName(anotherProcessInstance.entry.name); + await processCloudDemoPage.processListCloudComponent().checkContentIsNotDisplayedByName(completedProcess.entry.name); }); it('[C306892] Should be able to filter by process status - All', async () => { - processCloudDemoPage.editProcessFilterCloudComponent().clickCustomiseFilterHeader().setStatusFilterDropDown('ALL'); - processCloudDemoPage.processListCloudComponent().getDataTable().waitTillContentLoaded(); - processCloudDemoPage.processListCloudComponent().checkContentIsDisplayedByName(runningProcessInstance.entry.name); - processCloudDemoPage.processListCloudComponent().checkContentIsDisplayedByName(anotherProcessInstance.entry.name); - processCloudDemoPage.processListCloudComponent().checkContentIsDisplayedByName(suspendProcessInstance.entry.name); - processCloudDemoPage.processListCloudComponent().checkContentIsDisplayedByName(completedProcess.entry.name); + await processCloudDemoPage.editProcessFilterCloudComponent().openFilter(); + await processCloudDemoPage.editProcessFilterCloudComponent().setStatusFilterDropDown('ALL'); + await processCloudDemoPage.processListCloudComponent().getDataTable().waitTillContentLoaded(); + await processCloudDemoPage.processListCloudComponent().checkContentIsDisplayedByName(runningProcessInstance.entry.name); + await processCloudDemoPage.processListCloudComponent().checkContentIsDisplayedByName(anotherProcessInstance.entry.name); + await processCloudDemoPage.processListCloudComponent().checkContentIsDisplayedByName(suspendProcessInstance.entry.name); + await processCloudDemoPage.processListCloudComponent().checkContentIsDisplayedByName(completedProcess.entry.name); }); it('[C311318] Should be able to filter by lastModifiedFrom - displays record when date = currentDate', async () => { - processCloudDemoPage.editProcessFilterCloudComponent().clickCustomiseFilterHeader().setProperty('lastModifiedFrom', currentDate); - processCloudDemoPage.processListCloudComponent().getDataTable().waitTillContentLoaded(); - processCloudDemoPage.processListCloudComponent().checkContentIsDisplayedByName(runningProcessInstance.entry.name); + await processCloudDemoPage.editProcessFilterCloudComponent().openFilter(); + await processCloudDemoPage.editProcessFilterCloudComponent().setProperty('lastModifiedFrom', currentDate); + await processCloudDemoPage.processListCloudComponent().getDataTable().waitTillContentLoaded(); + await processCloudDemoPage.processListCloudComponent().checkContentIsDisplayedByName(runningProcessInstance.entry.name); }); it('[C311318] Should be able to filter by lastModifiedFrom - displays record when date = beforeDate', async () => { - processCloudDemoPage.editProcessFilterCloudComponent().clickCustomiseFilterHeader().setProperty('lastModifiedFrom', beforeDate); - processCloudDemoPage.processListCloudComponent().getDataTable().waitTillContentLoaded(); - processCloudDemoPage.processListCloudComponent().checkContentIsDisplayedByName(runningProcessInstance.entry.name); + await processCloudDemoPage.editProcessFilterCloudComponent().openFilter(); + await processCloudDemoPage.editProcessFilterCloudComponent().setProperty('lastModifiedFrom', beforeDate); + await processCloudDemoPage.processListCloudComponent().getDataTable().waitTillContentLoaded(); + await processCloudDemoPage.processListCloudComponent().checkContentIsDisplayedByName(runningProcessInstance.entry.name); }); it('[C311318] Should be able to filter by lastModifiedFrom - does not display record when date = afterDate', async () => { - processCloudDemoPage.editProcessFilterCloudComponent().clickCustomiseFilterHeader().setProperty('lastModifiedFrom', afterDate); - processCloudDemoPage.processListCloudComponent().getDataTable().waitTillContentLoaded(); - processCloudDemoPage.processListCloudComponent().checkContentIsNotDisplayedByName(runningProcessInstance.entry.name); + await processCloudDemoPage.editProcessFilterCloudComponent().openFilter(); + await processCloudDemoPage.editProcessFilterCloudComponent().setProperty('lastModifiedFrom', afterDate); + await processCloudDemoPage.processListCloudComponent().getDataTable().waitTillContentLoaded(); + await processCloudDemoPage.processListCloudComponent().checkContentIsNotDisplayedByName(runningProcessInstance.entry.name); }); it('[C311319] Should be able to filter by lastModifiedTo - displays record when date = currentDate', async () => { - processCloudDemoPage.editProcessFilterCloudComponent().clickCustomiseFilterHeader().setProperty('lastModifiedTo', currentDate); - processCloudDemoPage.processListCloudComponent().getDataTable().waitTillContentLoaded(); - processCloudDemoPage.processListCloudComponent().checkContentIsDisplayedByName(runningProcessInstance.entry.name); + await processCloudDemoPage.editProcessFilterCloudComponent().openFilter(); + await processCloudDemoPage.editProcessFilterCloudComponent().setProperty('lastModifiedTo', currentDate); + await processCloudDemoPage.processListCloudComponent().getDataTable().waitTillContentLoaded(); + await processCloudDemoPage.processListCloudComponent().checkContentIsDisplayedByName(runningProcessInstance.entry.name); }); it('[C311319] Should be able to filter by lastModifiedTo - does not display record when date = beforeDate', async () => { - processCloudDemoPage.editProcessFilterCloudComponent().clickCustomiseFilterHeader().setProperty('lastModifiedTo', beforeDate); - processCloudDemoPage.processListCloudComponent().getDataTable().waitTillContentLoaded(); - processCloudDemoPage.processListCloudComponent().checkContentIsNotDisplayedByName(runningProcessInstance.entry.name); + await processCloudDemoPage.editProcessFilterCloudComponent().openFilter(); + await processCloudDemoPage.editProcessFilterCloudComponent().setProperty('lastModifiedTo', beforeDate); + await processCloudDemoPage.processListCloudComponent().getDataTable().waitTillContentLoaded(); + await processCloudDemoPage.processListCloudComponent().checkContentIsNotDisplayedByName(runningProcessInstance.entry.name); }); it('[C311319] Should be able to filter by lastModifiedTo - displays record when date = afterDate', async () => { - processCloudDemoPage.editProcessFilterCloudComponent().clickCustomiseFilterHeader().setProperty('lastModifiedTo', afterDate); - processCloudDemoPage.processListCloudComponent().getDataTable().waitTillContentLoaded(); - processCloudDemoPage.processListCloudComponent().checkContentIsDisplayedByName(runningProcessInstance.entry.name); + await processCloudDemoPage.editProcessFilterCloudComponent().openFilter(); + await processCloudDemoPage.editProcessFilterCloudComponent().setProperty('lastModifiedTo', afterDate); + await processCloudDemoPage.processListCloudComponent().getDataTable().waitTillContentLoaded(); + await processCloudDemoPage.processListCloudComponent().checkContentIsDisplayedByName(runningProcessInstance.entry.name); }); - it('[C311319] Should not display any processes when the lastModifiedFrom and lastModifiedTo are set to a future date', () => { - processCloudDemoPage.editProcessFilterCloudComponent().clickCustomiseFilterHeader().setProperty('lastModifiedFrom', afterDate); - processCloudDemoPage.editProcessFilterCloudComponent().setProperty('lastModifiedTo', afterDate); - processCloudDemoPage.processListCloudComponent().getDataTable().waitTillContentLoaded(); - expect(processListPage.checkProcessListTitleIsDisplayed()).toEqual('No Processes Found'); + it('[C311319] Should not display any processes when the lastModifiedFrom and lastModifiedTo are set to a future date', async () => { + await processCloudDemoPage.editProcessFilterCloudComponent().openFilter(); + await processCloudDemoPage.editProcessFilterCloudComponent().setProperty('lastModifiedFrom', afterDate); + await processCloudDemoPage.editProcessFilterCloudComponent().setProperty('lastModifiedTo', afterDate); + await processCloudDemoPage.processListCloudComponent().getDataTable().waitTillContentLoaded(); + await expect(await processListPage.getDisplayedProcessListTitle()).toEqual('No Processes Found'); }); }); diff --git a/e2e/process-services-cloud/process-filters-cloud.e2e.ts b/e2e/process-services-cloud/process-filters-cloud.e2e.ts index ebaf31278c..b3dc44ba75 100644 --- a/e2e/process-services-cloud/process-filters-cloud.e2e.ts +++ b/e2e/process-services-cloud/process-filters-cloud.e2e.ts @@ -57,7 +57,7 @@ describe('Process filters cloud', () => { let runningProcess, completedProcess, testUser, groupInfo; const candidateBaseApp = resources.ACTIVITI7_APPS.CANDIDATE_BASE_APP.name; - beforeAll(async (done) => { + beforeAll(async () => { await apiService.login(browser.params.identityAdmin.email, browser.params.identityAdmin.password); identityService = new IdentityService(apiService); groupIdentityService = new GroupIdentityService(apiService); @@ -77,7 +77,7 @@ describe('Process filters cloud', () => { completedProcess = await processInstancesService.createProcessInstance(processDefinition.entry.key, candidateBaseApp); queryService = new QueryService(apiService); - await browser.driver.sleep(4000); // eventual consistency query + await browser.sleep(4000); // eventual consistency query const task = await queryService.getProcessInstanceTasks(completedProcess.entry.id, candidateBaseApp); tasksService = new TasksService(apiService); const claimedTask = await tasksService.claimTask(task.list.entries[0].entry.id, candidateBaseApp); @@ -88,62 +88,62 @@ describe('Process filters cloud', () => { browser.params.config.oauth2.host, browser.params.config.identityHost); await loginSSOPage.loginSSOIdentityService(testUser.email, testUser.password); - done(); + }, 5 * 60 * 1000); - afterAll(async (done) => { + afterAll(async () => { await apiService.login(browser.params.identityAdmin.email, browser.params.identityAdmin.password); await identityService.deleteIdentityUser(testUser.idIdentityService); - done(); + }); - beforeEach((done) => { - navigationBarPage.navigateToProcessServicesCloudPage(); - appListCloudComponent.checkApsContainer(); - appListCloudComponent.goToApp(candidateBaseApp); - tasksCloudDemoPage.taskListCloudComponent().checkTaskListIsLoaded(); - processCloudDemoPage.clickOnProcessFilters(); - done(); + beforeEach(async() => { + await navigationBarPage.navigateToProcessServicesCloudPage(); + await appListCloudComponent.checkApsContainer(); + await appListCloudComponent.goToApp(candidateBaseApp); + await tasksCloudDemoPage.taskListCloudComponent().checkTaskListIsLoaded(); + await processCloudDemoPage.clickOnProcessFilters(); + }); - it('[C290021] Should be able to view default filters', () => { - processCloudDemoPage.completedProcessesFilter().checkProcessFilterIsDisplayed(); - processCloudDemoPage.runningProcessesFilter().checkProcessFilterIsDisplayed(); - processCloudDemoPage.allProcessesFilter().checkProcessFilterIsDisplayed(); + it('[C290021] Should be able to view default filters', async () => { + await processCloudDemoPage.completedProcessesFilter().checkProcessFilterIsDisplayed(); + await processCloudDemoPage.runningProcessesFilter().checkProcessFilterIsDisplayed(); + await processCloudDemoPage.allProcessesFilter().checkProcessFilterIsDisplayed(); }); - it('[C290043] Should display process in Running Processes List when process is started', () => { - processCloudDemoPage.runningProcessesFilter().clickProcessFilter(); - processCloudDemoPage.runningProcessesFilter().checkProcessFilterIsDisplayed(); - expect(processCloudDemoPage.getActiveFilterName()).toBe('Running Processes'); - processCloudDemoPage.processListCloudComponent().checkContentIsDisplayedById(runningProcess.entry.id); + it('[C290043] Should display process in Running Processes List when process is started', async () => { + await processCloudDemoPage.runningProcessesFilter().clickProcessFilter(); + await processCloudDemoPage.runningProcessesFilter().checkProcessFilterIsDisplayed(); + await expect(await processCloudDemoPage.getActiveFilterName()).toBe('Running Processes'); + await processCloudDemoPage.processListCloudComponent().checkContentIsDisplayedById(runningProcess.entry.id); - processCloudDemoPage.completedProcessesFilter().clickProcessFilter(); - processCloudDemoPage.completedProcessesFilter().checkProcessFilterIsDisplayed(); - expect(processCloudDemoPage.getActiveFilterName()).toBe('Completed Processes'); - processCloudDemoPage.processListCloudComponent().checkContentIsNotDisplayedById(runningProcess.entry.id); + await processCloudDemoPage.completedProcessesFilter().clickProcessFilter(); + await processCloudDemoPage.completedProcessesFilter().checkProcessFilterIsDisplayed(); + await expect(await processCloudDemoPage.getActiveFilterName()).toBe('Completed Processes'); + await processCloudDemoPage.processListCloudComponent().checkContentIsNotDisplayedById(runningProcess.entry.id); - processCloudDemoPage.allProcessesFilter().clickProcessFilter(); - processCloudDemoPage.allProcessesFilter().checkProcessFilterIsDisplayed(); - expect(processCloudDemoPage.getActiveFilterName()).toBe('All Processes'); - processCloudDemoPage.processListCloudComponent().checkContentIsDisplayedById(runningProcess.entry.id); + await processCloudDemoPage.allProcessesFilter().clickProcessFilter(); + await processCloudDemoPage.allProcessesFilter().checkProcessFilterIsDisplayed(); + await expect(await processCloudDemoPage.getActiveFilterName()).toBe('All Processes'); + await processCloudDemoPage.processListCloudComponent().checkContentIsDisplayedById(runningProcess.entry.id); }); - it('[C290044] Should display process in Completed Processes List when process is completed', () => { - processCloudDemoPage.runningProcessesFilter().clickProcessFilter(); - processCloudDemoPage.runningProcessesFilter().checkProcessFilterIsDisplayed(); - expect(processCloudDemoPage.getActiveFilterName()).toBe('Running Processes'); - processCloudDemoPage.processListCloudComponent().checkContentIsNotDisplayedById(completedProcess.entry.id); + it('[C290044] Should display process in Completed Processes List when process is completed', async () => { + await processCloudDemoPage.runningProcessesFilter().clickProcessFilter(); + await processCloudDemoPage.runningProcessesFilter().checkProcessFilterIsDisplayed(); + await expect(await processCloudDemoPage.getActiveFilterName()).toBe('Running Processes'); + await processCloudDemoPage.processListCloudComponent().checkContentIsNotDisplayedById(completedProcess.entry.id); - processCloudDemoPage.completedProcessesFilter().clickProcessFilter(); - processCloudDemoPage.completedProcessesFilter().checkProcessFilterIsDisplayed(); - expect(processCloudDemoPage.getActiveFilterName()).toBe('Completed Processes'); - processCloudDemoPage.processListCloudComponent().checkContentIsDisplayedById(completedProcess.entry.id); + await processCloudDemoPage.completedProcessesFilter().clickProcessFilter(); + await processCloudDemoPage.completedProcessesFilter().checkProcessFilterIsDisplayed(); + await expect(await processCloudDemoPage.getActiveFilterName()).toBe('Completed Processes'); + await processCloudDemoPage.processListCloudComponent().checkContentIsDisplayedById(completedProcess.entry.id); - processCloudDemoPage.allProcessesFilter().clickProcessFilter(); - processCloudDemoPage.allProcessesFilter().checkProcessFilterIsDisplayed(); - expect(processCloudDemoPage.getActiveFilterName()).toBe('All Processes'); - processCloudDemoPage.processListCloudComponent().checkContentIsDisplayedById(completedProcess.entry.id); + await processCloudDemoPage.allProcessesFilter().clickProcessFilter(); + await processCloudDemoPage.allProcessesFilter().checkProcessFilterIsDisplayed(); + await expect(await processCloudDemoPage.getActiveFilterName()).toBe('All Processes'); + await processCloudDemoPage.processListCloudComponent().checkContentIsDisplayedById(completedProcess.entry.id); }); }); diff --git a/e2e/process-services-cloud/process-header-cloud.e2e.ts b/e2e/process-services-cloud/process-header-cloud.e2e.ts index af9ce23c23..6219227fac 100644 --- a/e2e/process-services-cloud/process-header-cloud.e2e.ts +++ b/e2e/process-services-cloud/process-header-cloud.e2e.ts @@ -68,7 +68,7 @@ describe('Process Header cloud component', () => { let runningProcess, runningCreatedDate, parentCompleteProcess, childCompleteProcess, completedCreatedDate; - beforeAll(async (done) => { + beforeAll(async () => { await apiService.login(browser.params.identityAdmin.email, browser.params.identityAdmin.password); identityService = new IdentityService(apiService); @@ -101,63 +101,63 @@ describe('Process Header cloud component', () => { browser.params.config.oauth2.host, browser.params.config.identityHost); await loginSSOPage.loginSSOIdentityService(testUser.email, testUser.password); - done(); + }); - afterAll(async(done) => { + afterAll(async() => { await apiService.login(browser.params.identityAdmin.email, browser.params.identityAdmin.password); await identityService.deleteIdentityUser(testUser.idIdentityService); - done(); + }); - beforeEach(() => { - navigationBarPage.navigateToProcessServicesCloudPage(); - appListCloudComponent.checkApsContainer(); + beforeEach(async () => { + await navigationBarPage.navigateToProcessServicesCloudPage(); + await appListCloudComponent.checkApsContainer(); }); - it('[C305010] Should display process details for running process', () => { - appListCloudComponent.goToApp(simpleApp); - tasksCloudDemoPage.taskListCloudComponent().checkTaskListIsLoaded(); - processCloudDemoPage.clickOnProcessFilters(); + it('[C305010] Should display process details for running process', async () => { + await appListCloudComponent.goToApp(simpleApp); + await tasksCloudDemoPage.taskListCloudComponent().checkTaskListIsLoaded(); + await processCloudDemoPage.clickOnProcessFilters(); - processCloudDemoPage.runningProcessesFilter().checkProcessFilterIsDisplayed(); - processCloudDemoPage.runningProcessesFilter().clickProcessFilter(); - expect(processCloudDemoPage.getActiveFilterName()).toBe('Running Processes'); - processCloudDemoPage.processListCloudComponent().checkContentIsDisplayedByName(runningProcess.entry.name); + await processCloudDemoPage.runningProcessesFilter().checkProcessFilterIsDisplayed(); + await processCloudDemoPage.runningProcessesFilter().clickProcessFilter(); + await expect(await processCloudDemoPage.getActiveFilterName()).toBe('Running Processes'); + await processCloudDemoPage.processListCloudComponent().checkContentIsDisplayedByName(runningProcess.entry.name); - processCloudDemoPage.processListCloudComponent().checkProcessListIsLoaded(); - processCloudDemoPage.processListCloudComponent().selectRow(runningProcess.entry.name); - expect(processHeaderCloudPage.getId()).toEqual(runningProcess.entry.id); - expect(processHeaderCloudPage.getName()).toEqual(runningProcess.entry.name); - expect(processHeaderCloudPage.getStatus()).toEqual(runningProcess.entry.status); - expect(processHeaderCloudPage.getInitiator()).toEqual(runningProcess.entry.initiator); - expect(processHeaderCloudPage.getStartDate()).toEqual(runningCreatedDate); - expect(processHeaderCloudPage.getParentId()).toEqual(CONSTANTS.PROCESS_DETAILS.NO_PARENT); - expect(processHeaderCloudPage.getBusinessKey()).toEqual(runningProcess.entry.businessKey); - expect(processHeaderCloudPage.getLastModified()).toEqual(runningCreatedDate); + await processCloudDemoPage.processListCloudComponent().checkProcessListIsLoaded(); + await processCloudDemoPage.processListCloudComponent().selectRow(runningProcess.entry.name); + await expect(await processHeaderCloudPage.getId()).toEqual(runningProcess.entry.id); + await expect(await processHeaderCloudPage.getName()).toEqual(runningProcess.entry.name); + await expect(await processHeaderCloudPage.getStatus()).toEqual(runningProcess.entry.status); + await expect(await processHeaderCloudPage.getInitiator()).toEqual(runningProcess.entry.initiator); + await expect(await processHeaderCloudPage.getStartDate()).toEqual(runningCreatedDate); + await expect(await processHeaderCloudPage.getParentId()).toEqual(CONSTANTS.PROCESS_DETAILS.NO_PARENT); + await expect(await processHeaderCloudPage.getBusinessKey()).toEqual(runningProcess.entry.businessKey); + await expect(await processHeaderCloudPage.getLastModified()).toEqual(runningCreatedDate); }); - it('[C305008] Should display process details for completed process', () => { - appListCloudComponent.goToApp(subProcessApp); - tasksCloudDemoPage.taskListCloudComponent().checkTaskListIsLoaded(); - processCloudDemoPage.clickOnProcessFilters(); + it('[C305008] Should display process details for completed process', async () => { + await appListCloudComponent.goToApp(subProcessApp); + await tasksCloudDemoPage.taskListCloudComponent().checkTaskListIsLoaded(); + await processCloudDemoPage.clickOnProcessFilters(); - processCloudDemoPage.completedProcessesFilter().checkProcessFilterIsDisplayed(); - processCloudDemoPage.completedProcessesFilter().clickProcessFilter(); - expect(processCloudDemoPage.getActiveFilterName()).toBe('Completed Processes'); - processCloudDemoPage.processListCloudComponent().checkContentIsDisplayedByName(childCompleteProcess.entry.name); + await processCloudDemoPage.completedProcessesFilter().checkProcessFilterIsDisplayed(); + await processCloudDemoPage.completedProcessesFilter().clickProcessFilter(); + await expect(await processCloudDemoPage.getActiveFilterName()).toBe('Completed Processes'); + await processCloudDemoPage.processListCloudComponent().checkContentIsDisplayedByName(childCompleteProcess.entry.name); - processCloudDemoPage.processListCloudComponent().checkProcessListIsLoaded(); - processCloudDemoPage.processListCloudComponent().selectRowById(childCompleteProcess.entry.id); + await processCloudDemoPage.processListCloudComponent().checkProcessListIsLoaded(); + await processCloudDemoPage.processListCloudComponent().selectRowById(childCompleteProcess.entry.id); - expect(processHeaderCloudPage.getId()).toEqual(childCompleteProcess.entry.id); - expect(processHeaderCloudPage.getName()).toEqual(CONSTANTS.PROCESS_DETAILS.NO_NAME); - expect(processHeaderCloudPage.getStatus()).toEqual(childCompleteProcess.entry.status); - expect(processHeaderCloudPage.getInitiator()).toEqual(childCompleteProcess.entry.initiator); - expect(processHeaderCloudPage.getStartDate()).toEqual(completedCreatedDate); - expect(processHeaderCloudPage.getParentId()).toEqual(childCompleteProcess.entry.parentId); - expect(processHeaderCloudPage.getBusinessKey()).toEqual(CONSTANTS.PROCESS_DETAILS.NO_BUSINESS_KEY); - expect(processHeaderCloudPage.getLastModified()).toEqual(completedCreatedDate); + await expect(await processHeaderCloudPage.getId()).toEqual(childCompleteProcess.entry.id); + await expect(await processHeaderCloudPage.getName()).toEqual(CONSTANTS.PROCESS_DETAILS.NO_NAME); + await expect(await processHeaderCloudPage.getStatus()).toEqual(childCompleteProcess.entry.status); + await expect(await processHeaderCloudPage.getInitiator()).toEqual(childCompleteProcess.entry.initiator); + await expect(await processHeaderCloudPage.getStartDate()).toEqual(completedCreatedDate); + await expect(await processHeaderCloudPage.getParentId()).toEqual(childCompleteProcess.entry.parentId); + await expect(await processHeaderCloudPage.getBusinessKey()).toEqual(CONSTANTS.PROCESS_DETAILS.NO_BUSINESS_KEY); + await expect(await processHeaderCloudPage.getLastModified()).toEqual(completedCreatedDate); }); }); diff --git a/e2e/process-services-cloud/process-list-cloud-action-menu.e2e.ts b/e2e/process-services-cloud/process-list-cloud-action-menu.e2e.ts new file mode 100644 index 0000000000..33cce8b60d --- /dev/null +++ b/e2e/process-services-cloud/process-list-cloud-action-menu.e2e.ts @@ -0,0 +1,116 @@ +/*! + * @license + * Copyright 2019 Alfresco Software, Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { browser } from 'protractor'; +import { GroupIdentityService, IdentityService, LoginSSOPage, SettingsPage } from '@alfresco/adf-testing'; +import { ProcessCloudDemoPage } from '../pages/adf/demo-shell/process-services/processCloudDemoPage'; +import { AppListCloudPage } from '@alfresco/adf-testing'; +import { NavigationBarPage } from '../pages/adf/navigationBarPage'; +import { TasksCloudDemoPage } from '../pages/adf/demo-shell/process-services/tasksCloudDemoPage'; + +import { ProcessDefinitionsService, ApiService } from '@alfresco/adf-testing'; +import { ProcessInstancesService } from '@alfresco/adf-testing'; +import resources = require('../util/resources'); + +describe('Process list cloud', () => { + + describe('Process List - Custom Action Menu', () => { + const loginSSOPage = new LoginSSOPage(); + const navigationBarPage = new NavigationBarPage(); + const appListCloudComponent = new AppListCloudPage(); + const processCloudDemoPage = new ProcessCloudDemoPage(); + const tasksCloudDemoPage = new TasksCloudDemoPage(); + const settingsPage = new SettingsPage(); + + let processDefinitionService: ProcessDefinitionsService; + let processInstancesService: ProcessInstancesService; + let identityService: IdentityService; + let groupIdentityService: GroupIdentityService; + let testUser, groupInfo, editProcess, deleteProcess; + + const simpleApp = resources.ACTIVITI7_APPS.SIMPLE_APP.name; + const apiService = new ApiService(browser.params.config.oauth2.clientId, browser.params.config.bpmHost, browser.params.config.oauth2.host, 'BPM'); + + beforeAll(async () => { + + await apiService.login(browser.params.identityAdmin.email, browser.params.identityAdmin.password); + identityService = new IdentityService(apiService); + groupIdentityService = new GroupIdentityService(apiService); + testUser = await identityService.createIdentityUserWithRole(apiService, [identityService.ROLES.APS_USER]); + groupInfo = await groupIdentityService.getGroupInfoByGroupName('hr'); + await identityService.addUserToGroup(testUser.idIdentityService, groupInfo.id); + + await apiService.login(testUser.email, testUser.password); + processDefinitionService = new ProcessDefinitionsService(apiService); + const processDefinition = await processDefinitionService + .getProcessDefinitionByName(resources.ACTIVITI7_APPS.SIMPLE_APP.processes.simpleProcess, simpleApp); + + processInstancesService = new ProcessInstancesService(apiService); + editProcess = await processInstancesService.createProcessInstance(processDefinition.entry.key, simpleApp); + deleteProcess = await processInstancesService.createProcessInstance(processDefinition.entry.key, simpleApp); + + await settingsPage.setProviderBpmSso( + browser.params.config.bpmHost, + browser.params.config.oauth2.host, + browser.params.config.identityHost); + await loginSSOPage.loginSSOIdentityService(testUser.email, testUser.password); + + }); + + afterAll(async() => { + await apiService.login(browser.params.identityAdmin.email, browser.params.identityAdmin.password); + await identityService.deleteIdentityUser(testUser.idIdentityService); + + }); + + beforeAll(async () => { + await navigationBarPage.navigateToProcessServicesCloudPage(); + await appListCloudComponent.checkApsContainer(); + await appListCloudComponent.goToApp(simpleApp); + await tasksCloudDemoPage.clickSettingsButton(); + await tasksCloudDemoPage.enableTestingMode(); + await tasksCloudDemoPage.enableActionMenu(); + await tasksCloudDemoPage.enableContextMenu(); + await tasksCloudDemoPage.addActionIsDisplayed(); + await tasksCloudDemoPage.addAction('edit'); + await tasksCloudDemoPage.actionAdded('edit'); + await tasksCloudDemoPage.addAction('delete'); + await tasksCloudDemoPage.actionAdded('delete'); + await tasksCloudDemoPage.addDisabledAction('disabledaction'); + await tasksCloudDemoPage.actionAdded('disabledaction'); + await tasksCloudDemoPage.clickAppButton(); + await processCloudDemoPage.clickOnProcessFilters(); + await processCloudDemoPage.runningProcessesFilter().clickProcessFilter(); + }); + + it('[C315236] Should be able to see and execute custom action menu', async () => { + await expect(await processCloudDemoPage.getActiveFilterName()).toBe('Running Processes'); + await processCloudDemoPage.processListCloudComponent().checkProcessListIsLoaded(); + await processCloudDemoPage.processListCloudComponent().checkContentIsDisplayedById(editProcess.entry.id); + await processCloudDemoPage.processListCloudComponent().clickOptionsButton(editProcess.entry.id); + await expect(await processCloudDemoPage.processListCloudComponent().isCustomActionEnabled('disabledaction')).toBe(false); + await processCloudDemoPage.processListCloudComponent().clickOnCustomActionMenu('edit'); + await processCloudDemoPage.checkActionExecuted(editProcess.entry.id, 'edit'); + await processCloudDemoPage.processListCloudComponent().rightClickOnRow(deleteProcess.entry.id); + await expect(await processCloudDemoPage.processListCloudComponent().isCustomActionEnabled('disabledaction')).toBe(false); + await processCloudDemoPage.processListCloudComponent().clickContextMenuActionNamed('delete'); + await processCloudDemoPage.checkActionExecuted(deleteProcess.entry.id, 'delete'); + }); + + }); + +}); diff --git a/e2e/process-services-cloud/process-list-cloud-component.e2e.ts b/e2e/process-services-cloud/process-list-cloud-component.e2e.ts index 1c082a0ae9..17263352ac 100644 --- a/e2e/process-services-cloud/process-list-cloud-component.e2e.ts +++ b/e2e/process-services-cloud/process-list-cloud-component.e2e.ts @@ -51,7 +51,7 @@ describe('Process list cloud', () => { let jsonFile; let runningProcess; - beforeAll(async (done) => { + beforeAll(async () => { await apiService.login(browser.params.identityAdmin.email, browser.params.identityAdmin.password); identityService = new IdentityService(apiService); groupIdentityService = new GroupIdentityService(apiService); @@ -73,46 +73,46 @@ describe('Process list cloud', () => { browser.params.config.oauth2.host, browser.params.config.identityHost); await loginSSOPage.loginSSOIdentityService(testUser.email, testUser.password); - done(); + }); - afterAll(async (done) => { + afterAll(async () => { await apiService.login(browser.params.identityAdmin.email, browser.params.identityAdmin.password); await identityService.deleteIdentityUser(testUser.idIdentityService); - done(); + }); - beforeEach(async (done) => { + beforeEach(async () => { const processListCloudConfiguration = new ProcessListCloudConfiguration(); jsonFile = processListCloudConfiguration.getConfiguration(); await LocalStorageUtil.setConfigField('adf-cloud-process-list', JSON.stringify(jsonFile)); - navigationBarPage.navigateToProcessServicesCloudPage(); - appListCloudComponent.checkApsContainer(); - appListCloudComponent.goToApp(candidateBaseApp); - processCloudDemoPage.clickOnProcessFilters(); - processCloudDemoPage.runningProcessesFilter().checkProcessFilterIsDisplayed(); - processCloudDemoPage.runningProcessesFilter().clickProcessFilter(); - expect(processCloudDemoPage.getActiveFilterName()).toBe('Running Processes'); - processCloudDemoPage.processListCloudComponent().checkProcessListIsLoaded(); - processCloudDemoPage.processListCloudComponent().checkContentIsDisplayedById(runningProcess.entry.id); - done(); + await navigationBarPage.navigateToProcessServicesCloudPage(); + await appListCloudComponent.checkApsContainer(); + await appListCloudComponent.goToApp(candidateBaseApp); + await processCloudDemoPage.clickOnProcessFilters(); + await processCloudDemoPage.runningProcessesFilter().checkProcessFilterIsDisplayed(); + await processCloudDemoPage.runningProcessesFilter().clickProcessFilter(); + await expect(await processCloudDemoPage.getActiveFilterName()).toBe('Running Processes'); + await processCloudDemoPage.processListCloudComponent().checkProcessListIsLoaded(); + await processCloudDemoPage.processListCloudComponent().checkContentIsDisplayedById(runningProcess.entry.id); + }); it('[C291997] Should be able to change the default columns', async () => { - expect(processCloudDemoPage.processListCloudComponent().getDataTable().getNumberOfColumns()).toBe(10); - processCloudDemoPage.processListCloudComponent().getDataTable().checkColumnIsDisplayed('id'); - processCloudDemoPage.processListCloudComponent().getDataTable().checkColumnIsDisplayed('name'); - processCloudDemoPage.processListCloudComponent().getDataTable().checkColumnIsDisplayed('status'); - processCloudDemoPage.processListCloudComponent().getDataTable().checkColumnIsDisplayed('startDate'); - processCloudDemoPage.processListCloudComponent().getDataTable().checkColumnIsDisplayed('appName'); - processCloudDemoPage.processListCloudComponent().getDataTable().checkColumnIsDisplayed('businessKey'); - processCloudDemoPage.processListCloudComponent().getDataTable().checkColumnIsDisplayed('initiator'); - processCloudDemoPage.processListCloudComponent().getDataTable().checkColumnIsDisplayed('lastModified'); - processCloudDemoPage.processListCloudComponent().getDataTable().checkColumnIsDisplayed('processDefinitionId'); - processCloudDemoPage.processListCloudComponent().getDataTable().checkColumnIsDisplayed('processDefinitionKey'); + await expect(await processCloudDemoPage.processListCloudComponent().getDataTable().getNumberOfColumns()).toBe(10); + await processCloudDemoPage.processListCloudComponent().getDataTable().checkColumnIsDisplayed('id'); + await processCloudDemoPage.processListCloudComponent().getDataTable().checkColumnIsDisplayed('name'); + await processCloudDemoPage.processListCloudComponent().getDataTable().checkColumnIsDisplayed('status'); + await processCloudDemoPage.processListCloudComponent().getDataTable().checkColumnIsDisplayed('startDate'); + await processCloudDemoPage.processListCloudComponent().getDataTable().checkColumnIsDisplayed('appName'); + await processCloudDemoPage.processListCloudComponent().getDataTable().checkColumnIsDisplayed('businessKey'); + await processCloudDemoPage.processListCloudComponent().getDataTable().checkColumnIsDisplayed('initiator'); + await processCloudDemoPage.processListCloudComponent().getDataTable().checkColumnIsDisplayed('lastModified'); + await processCloudDemoPage.processListCloudComponent().getDataTable().checkColumnIsDisplayed('processDefinitionId'); + await processCloudDemoPage.processListCloudComponent().getDataTable().checkColumnIsDisplayed('processDefinitionKey'); }); diff --git a/e2e/process-services-cloud/process-list-selection-cloud.e2e.ts b/e2e/process-services-cloud/process-list-selection-cloud.e2e.ts index 3de28281db..ae74abe637 100644 --- a/e2e/process-services-cloud/process-list-selection-cloud.e2e.ts +++ b/e2e/process-services-cloud/process-list-selection-cloud.e2e.ts @@ -47,7 +47,7 @@ describe('Process list cloud', () => { const noOfProcesses = 3; const processInstances = []; - beforeAll(async (done) => { + beforeAll(async () => { await apiService.login(browser.params.identityAdmin.email, browser.params.identityAdmin.password); identityService = new IdentityService(apiService); @@ -73,97 +73,105 @@ describe('Process list cloud', () => { browser.params.config.identityHost); await loginSSOPage.loginSSOIdentityService(testUser.email, testUser.password); - done(); }); - afterAll(async(done) => { + afterAll(async() => { await apiService.login(browser.params.identityAdmin.email, browser.params.identityAdmin.password); await identityService.deleteIdentityUser(testUser.idIdentityService); - done(); + }); - beforeEach(() => { - navigationBarPage.navigateToProcessServicesCloudPage(); - expect(processInstances.length).toEqual(noOfProcesses, 'Wrong preconditions'); - appListCloudComponent.checkApsContainer(); - appListCloudComponent.goToApp(simpleApp); - processCloudDemoPage.clickOnProcessFilters(); - processCloudDemoPage.runningProcessesFilter().clickProcessFilter(); - expect(processCloudDemoPage.getActiveFilterName()).toBe('Running Processes'); - tasksCloudDemoPage.clickSettingsButton().disableDisplayProcessDetails(); - tasksCloudDemoPage.clickAppButton(); + beforeEach(async () => { + await navigationBarPage.navigateToProcessServicesCloudPage(); + await expect(processInstances.length).toEqual(noOfProcesses, 'Wrong preconditions'); + await appListCloudComponent.checkApsContainer(); + await appListCloudComponent.goToApp(simpleApp); + await processCloudDemoPage.clickOnProcessFilters(); + await processCloudDemoPage.runningProcessesFilter().clickProcessFilter(); + await expect(await processCloudDemoPage.getActiveFilterName()).toBe('Running Processes'); + await tasksCloudDemoPage.clickSettingsButton(); + await tasksCloudDemoPage.disableDisplayProcessDetails(); + await tasksCloudDemoPage.clickAppButton(); }); - it('[C297469] Should NOT be able to select a process when settings are set to None', () => { - tasksCloudDemoPage.clickSettingsButton().selectSelectionMode('None'); - tasksCloudDemoPage.clickAppButton(); - processCloudDemoPage.isProcessFiltersListVisible(); - expect(processCloudDemoPage.getActiveFilterName()).toEqual('Running Processes'); + it('[C297469] Should NOT be able to select a process when settings are set to None', async () => { + await tasksCloudDemoPage.clickSettingsButton(); + await tasksCloudDemoPage.selectSelectionMode('None'); + await tasksCloudDemoPage.clickAppButton(); + await processCloudDemoPage.isProcessFiltersListVisible(); + await expect(await processCloudDemoPage.getActiveFilterName()).toEqual('Running Processes'); - processCloudDemoPage.processListCloudComponent().selectRowById(processInstances[0]); - processCloudDemoPage.processListCloudComponent().getDataTable().checkNoRowIsSelected(); + await processCloudDemoPage.processListCloudComponent().selectRowById(processInstances[0]); + await processCloudDemoPage.processListCloudComponent().getDataTable().checkNoRowIsSelected(); }); - it('[C297468] Should be able to select only one process when settings are set to Single', () => { - tasksCloudDemoPage.clickSettingsButton().selectSelectionMode('Single'); - tasksCloudDemoPage.clickAppButton(); - processCloudDemoPage.isProcessFiltersListVisible(); - expect(processCloudDemoPage.getActiveFilterName()).toEqual('Running Processes'); + it('[C297468] Should be able to select only one process when settings are set to Single', async () => { + await tasksCloudDemoPage.clickSettingsButton(); + await tasksCloudDemoPage.selectSelectionMode('Single'); + await tasksCloudDemoPage.clickAppButton(); + await processCloudDemoPage.isProcessFiltersListVisible(); + await expect(await processCloudDemoPage.getActiveFilterName()).toEqual('Running Processes'); - processCloudDemoPage.processListCloudComponent().selectRowById(processInstances[0]); - processCloudDemoPage.processListCloudComponent().checkRowIsSelectedById(processInstances[0]); - expect(processCloudDemoPage.processListCloudComponent().getDataTable().getNumberOfSelectedRows()).toEqual(1); - processCloudDemoPage.processListCloudComponent().selectRowById(processInstances[1]); - processCloudDemoPage.processListCloudComponent().checkRowIsSelectedById(processInstances[1]); - expect(processCloudDemoPage.processListCloudComponent().getDataTable().getNumberOfSelectedRows()).toEqual(1); + await processCloudDemoPage.processListCloudComponent().selectRowById(processInstances[0]); + await processCloudDemoPage.processListCloudComponent().checkRowIsSelectedById(processInstances[0]); + await expect(await processCloudDemoPage.processListCloudComponent().getDataTable().getNumberOfSelectedRows()).toEqual(1); + await processCloudDemoPage.processListCloudComponent().selectRowById(processInstances[1]); + await processCloudDemoPage.processListCloudComponent().checkRowIsSelectedById(processInstances[1]); + await expect(await processCloudDemoPage.processListCloudComponent().getDataTable().getNumberOfSelectedRows()).toEqual(1); }); - it('[C297470] Should be able to select multiple processes using keyboard', () => { - tasksCloudDemoPage.clickSettingsButton().selectSelectionMode('Multiple'); - tasksCloudDemoPage.clickAppButton(); - processCloudDemoPage.isProcessFiltersListVisible(); - expect(processCloudDemoPage.getActiveFilterName()).toEqual('Running Processes'); + it('[C297470] Should be able to select multiple processes using keyboard', async () => { + await tasksCloudDemoPage.clickSettingsButton(); + await tasksCloudDemoPage.selectSelectionMode('Multiple'); + await tasksCloudDemoPage.clickAppButton(); + await processCloudDemoPage.isProcessFiltersListVisible(); + await expect(await processCloudDemoPage.getActiveFilterName()).toEqual('Running Processes'); - processCloudDemoPage.processListCloudComponent().selectRowById(processInstances[0]); - processCloudDemoPage.processListCloudComponent().checkRowIsSelectedById(processInstances[0]); - processCloudDemoPage.processListCloudComponent().selectRowWithKeyboard(processInstances[1]); - processCloudDemoPage.processListCloudComponent().checkRowIsSelectedById(processInstances[0]); - processCloudDemoPage.processListCloudComponent().checkRowIsSelectedById(processInstances[1]); - processCloudDemoPage.processListCloudComponent().checkRowIsNotSelectedById(processInstances[2]); - expect(processCloudDemoPage.processListCloudComponent().getDataTable().getNumberOfSelectedRows()).toEqual(2); + await processCloudDemoPage.processListCloudComponent().selectRowById(processInstances[0]); + await processCloudDemoPage.processListCloudComponent().checkRowIsSelectedById(processInstances[0]); + await processCloudDemoPage.processListCloudComponent().selectRowWithKeyboard(processInstances[1]); + await processCloudDemoPage.processListCloudComponent().checkRowIsSelectedById(processInstances[0]); + await processCloudDemoPage.processListCloudComponent().checkRowIsSelectedById(processInstances[1]); + await processCloudDemoPage.processListCloudComponent().checkRowIsNotSelectedById(processInstances[2]); + await expect(await processCloudDemoPage.processListCloudComponent().getDataTable().getNumberOfSelectedRows()).toEqual(2); }); - it('[C297465] Should be able to select multiple processes using checkboxes', () => { - tasksCloudDemoPage.clickSettingsButton().enableMultiSelection(); - tasksCloudDemoPage.clickAppButton(); - processCloudDemoPage.isProcessFiltersListVisible(); - expect(processCloudDemoPage.getActiveFilterName()).toEqual('Running Processes'); + it('[C297465] Should be able to select multiple processes using checkboxes', async () => { + await tasksCloudDemoPage.clickSettingsButton(); + await tasksCloudDemoPage.enableMultiSelection(); + await tasksCloudDemoPage.clickAppButton(); + await processCloudDemoPage.isProcessFiltersListVisible(); + await expect(await processCloudDemoPage.getActiveFilterName()).toEqual('Running Processes'); - processCloudDemoPage.processListCloudComponent().checkCheckboxById(processInstances[0]); - processCloudDemoPage.processListCloudComponent().checkRowIsCheckedById(processInstances[0]); - processCloudDemoPage.processListCloudComponent().checkCheckboxById(processInstances[1]); - processCloudDemoPage.processListCloudComponent().checkRowIsCheckedById(processInstances[1]); - processCloudDemoPage.processListCloudComponent().checkRowIsNotCheckedById(processInstances[2]); - processCloudDemoPage.processListCloudComponent().checkCheckboxById(processInstances[1]); - processCloudDemoPage.processListCloudComponent().checkRowIsNotCheckedById(processInstances[1]); - processCloudDemoPage.processListCloudComponent().checkRowIsCheckedById(processInstances[0]); + await processCloudDemoPage.processListCloudComponent().checkCheckboxById(processInstances[0]); + await processCloudDemoPage.processListCloudComponent().checkRowIsCheckedById(processInstances[0]); + await processCloudDemoPage.processListCloudComponent().checkCheckboxById(processInstances[1]); + await processCloudDemoPage.processListCloudComponent().checkRowIsCheckedById(processInstances[1]); + await processCloudDemoPage.processListCloudComponent().checkRowIsNotCheckedById(processInstances[2]); + await processCloudDemoPage.processListCloudComponent().checkCheckboxById(processInstances[1]); + await processCloudDemoPage.processListCloudComponent().checkRowIsNotCheckedById(processInstances[1]); + await processCloudDemoPage.processListCloudComponent().checkRowIsCheckedById(processInstances[0]); }); - it('[C299125] Should be possible to select all the rows when multiselect is true', () => { - tasksCloudDemoPage.clickSettingsButton().enableMultiSelection(); - tasksCloudDemoPage.clickAppButton(); - processCloudDemoPage.isProcessFiltersListVisible(); - expect(processCloudDemoPage.getActiveFilterName()).toEqual('Running Processes'); + it('[C299125] Should be possible to select all the rows when multiselect is true', async () => { + await tasksCloudDemoPage.clickSettingsButton(); + await tasksCloudDemoPage.enableMultiSelection(); + await tasksCloudDemoPage.clickAppButton(); + await processCloudDemoPage.isProcessFiltersListVisible(); + await expect(await processCloudDemoPage.getActiveFilterName()).toEqual('Running Processes'); - processCloudDemoPage.processListCloudComponent().getDataTable().checkAllRowsButtonIsDisplayed().checkAllRows(); - processCloudDemoPage.processListCloudComponent().checkRowIsCheckedById(processInstances[0]); - processCloudDemoPage.processListCloudComponent().checkRowIsCheckedById(processInstances[1]); - processCloudDemoPage.processListCloudComponent().checkRowIsCheckedById(processInstances[2]); + await processCloudDemoPage.processListCloudComponent().getDataTable().checkAllRowsButtonIsDisplayed(); + await processCloudDemoPage.processListCloudComponent().getDataTable().checkAllRows(); + await processCloudDemoPage.processListCloudComponent().checkRowIsCheckedById(processInstances[0]); + await processCloudDemoPage.processListCloudComponent().checkRowIsCheckedById(processInstances[1]); + await processCloudDemoPage.processListCloudComponent().checkRowIsCheckedById(processInstances[2]); - processCloudDemoPage.processListCloudComponent().getDataTable().checkAllRowsButtonIsDisplayed().uncheckAllRows(); - processCloudDemoPage.processListCloudComponent().checkRowIsNotCheckedById(processInstances[0]); - processCloudDemoPage.processListCloudComponent().checkRowIsNotCheckedById(processInstances[1]); - processCloudDemoPage.processListCloudComponent().checkRowIsNotCheckedById(processInstances[2]); + await processCloudDemoPage.processListCloudComponent().getDataTable().checkAllRowsButtonIsDisplayed(); + await processCloudDemoPage.processListCloudComponent().getDataTable().uncheckAllRows(); + + await processCloudDemoPage.processListCloudComponent().checkRowIsNotCheckedById(processInstances[0]); + await processCloudDemoPage.processListCloudComponent().checkRowIsNotCheckedById(processInstances[1]); + await processCloudDemoPage.processListCloudComponent().checkRowIsNotCheckedById(processInstances[2]); }); }); diff --git a/e2e/process-services-cloud/start-process-cloud.e2e.ts b/e2e/process-services-cloud/start-process-cloud.e2e.ts index ce5a45a8cf..f083d1e15b 100644 --- a/e2e/process-services-cloud/start-process-cloud.e2e.ts +++ b/e2e/process-services-cloud/start-process-cloud.e2e.ts @@ -17,10 +17,10 @@ import { ApiService, GroupIdentityService, IdentityService, LoginSSOPage, SettingsPage } from '@alfresco/adf-testing'; import { AppListCloudPage, StartProcessCloudPage } from '@alfresco/adf-testing'; -import { browser } from 'protractor'; +import { browser, protractor } from 'protractor'; import { NavigationBarPage } from '../pages/adf/navigationBarPage'; import { ProcessCloudDemoPage } from '../pages/adf/demo-shell/process-services/processCloudDemoPage'; -import { StringUtil } from '@alfresco/adf-testing'; +import { StringUtil, BrowserActions } from '@alfresco/adf-testing'; import resources = require('../util/resources'); describe('Start Process', () => { @@ -46,7 +46,7 @@ describe('Start Process', () => { let groupIdentityService: GroupIdentityService; let testUser, groupInfo; - beforeAll(async (done) => { + beforeAll(async () => { await apiService.login(browser.params.identityAdmin.email, browser.params.identityAdmin.password); identityService = new IdentityService(apiService); groupIdentityService = new GroupIdentityService(apiService); @@ -59,59 +59,61 @@ describe('Start Process', () => { browser.params.config.identityHost); await loginSSOPage.loginSSOIdentityService(testUser.email, testUser.password); - navigationBarPage.navigateToProcessServicesCloudPage(); - appListCloudComponent.checkApsContainer(); - done(); + await navigationBarPage.navigateToProcessServicesCloudPage(); + await appListCloudComponent.checkApsContainer(); + }); - afterAll(async(done) => { + afterAll(async () => { await apiService.login(browser.params.identityAdmin.email, browser.params.identityAdmin.password); await identityService.deleteIdentityUser(testUser.idIdentityService); - done(); + }); - afterEach((done) => { - navigationBarPage.navigateToProcessServicesCloudPage(); - appListCloudComponent.checkApsContainer(); - done(); + afterEach(async () => { + await navigationBarPage.navigateToProcessServicesCloudPage(); + await appListCloudComponent.checkApsContainer(); }); - it('[C291857] Should be possible to cancel a process', () => { - appListCloudComponent.checkAppIsDisplayed(simpleApp); - appListCloudComponent.goToApp(simpleApp); - processCloudDemoPage.openNewProcessForm(); - startProcessPage.clearField(startProcessPage.processNameInput); - startProcessPage.blur(startProcessPage.processNameInput); - startProcessPage.checkValidationErrorIsDisplayed(requiredError); - expect(startProcessPage.checkStartProcessButtonIsEnabled()).toBe(false); - startProcessPage.clickCancelProcessButton(); + it('[C291857] Should be possible to cancel a process', async () => { + await appListCloudComponent.checkAppIsDisplayed(simpleApp); + await appListCloudComponent.goToApp(simpleApp); + await processCloudDemoPage.openNewProcessForm(); + await startProcessPage.clearField(startProcessPage.processNameInput); + await browser.actions().sendKeys(protractor.Key.ENTER).perform(); + + await startProcessPage.checkValidationErrorIsDisplayed(requiredError); + await expect(await startProcessPage.checkStartProcessButtonIsEnabled()).toBe(false); + + await BrowserActions.closeMenuAndDialogs(); + await startProcessPage.clickCancelProcessButton(); }); - it('[C291842] Should be displayed an error message if process name exceed 255 characters', () => { - appListCloudComponent.checkAppIsDisplayed(simpleApp); - appListCloudComponent.goToApp(simpleApp); - processCloudDemoPage.openNewProcessForm(); - startProcessPage.enterProcessName(processName255Characters); - expect(startProcessPage.checkStartProcessButtonIsEnabled()).toBe(true); + it('[C291842] Should be displayed an error message if process name exceed 255 characters', async () => { + await appListCloudComponent.checkAppIsDisplayed(simpleApp); + await appListCloudComponent.goToApp(simpleApp); + await processCloudDemoPage.openNewProcessForm(); + await startProcessPage.enterProcessName(processName255Characters); + await expect(await startProcessPage.checkStartProcessButtonIsEnabled()).toBe(true); - startProcessPage.enterProcessName(processNameBiggerThen255Characters); - startProcessPage.blur(startProcessPage.processNameInput); - startProcessPage.checkValidationErrorIsDisplayed(lengthValidationError); - expect(startProcessPage.checkStartProcessButtonIsEnabled()).toBe(false); + await startProcessPage.enterProcessName(processNameBiggerThen255Characters); + await startProcessPage.checkValidationErrorIsDisplayed(lengthValidationError); + await expect(await startProcessPage.checkStartProcessButtonIsEnabled()).toBe(false); }); - it('[C291860] Should be able to start a process', () => { - appListCloudComponent.checkAppIsDisplayed(simpleApp); - appListCloudComponent.goToApp(simpleApp); - processCloudDemoPage.openNewProcessForm(); - startProcessPage.clearField(startProcessPage.processNameInput); - startProcessPage.enterProcessName(processName); - expect(startProcessPage.checkStartProcessButtonIsEnabled()).toBe(true); - startProcessPage.clickStartProcessButton(); + it('[C291860] Should be able to start a process', async () => { + await appListCloudComponent.checkAppIsDisplayed(simpleApp); + await appListCloudComponent.goToApp(simpleApp); + await processCloudDemoPage.openNewProcessForm(); + await startProcessPage.clearField(startProcessPage.processNameInput); + await startProcessPage.enterProcessName(processName); + await expect(await startProcessPage.checkStartProcessButtonIsEnabled()).toBe(true); + await startProcessPage.clickStartProcessButton(); + await processCloudDemoPage.clickOnProcessFilters(); - processCloudDemoPage.runningProcessesFilter().clickProcessFilter(); - expect(processCloudDemoPage.getActiveFilterName()).toBe('Running Processes'); - processCloudDemoPage.processListCloudComponent().checkContentIsDisplayedByName(processName); + await processCloudDemoPage.runningProcessesFilter().clickProcessFilter(); + await expect(await processCloudDemoPage.getActiveFilterName()).toBe('Running Processes'); + await processCloudDemoPage.processListCloudComponent().checkContentIsDisplayedByName(processName); }); diff --git a/e2e/process-services-cloud/start-task-form-cloud.e2e.ts b/e2e/process-services-cloud/start-task-form-cloud.e2e.ts index bcbc5a80d3..7ba6e5d2b6 100644 --- a/e2e/process-services-cloud/start-task-form-cloud.e2e.ts +++ b/e2e/process-services-cloud/start-task-form-cloud.e2e.ts @@ -15,7 +15,7 @@ * limitations under the License. */ -import { browser } from 'protractor'; +import { browser, protractor } from 'protractor'; import { NavigationBarPage } from '../pages/adf/navigationBarPage'; import { TasksCloudDemoPage } from '../pages/adf/demo-shell/process-services/tasksCloudDemoPage'; import { @@ -101,8 +101,7 @@ describe('Start Task Form', () => { const folderName = StringUtil.generateRandomString(5); let uploadedFolder; - beforeAll(async (done) => { - + beforeAll(async () => { await apiService.login(browser.params.identityAdmin.email, browser.params.identityAdmin.password); identityService = new IdentityService(apiService); @@ -166,136 +165,140 @@ describe('Start Task Form', () => { browser.params.config.oauth2.clientId); await loginSSOPage.loginSSOIdentityService(testUser.email, testUser.password); await LocalStorageUtil.setConfigField('adf-cloud-start-process', JSON.stringify(startProcessCloudConfig)); - done(); }); - afterAll(async (done) => { - await this.alfrescoJsApi.login(browser.params.identityAdmin.email, browser.params.identityAdmin.password); + afterAll(async () => { await uploadActions.deleteFileOrFolder(uploadedFolder.entry.id); await apiService.login(testUser.email, testUser.password); const tasksService = new TasksService(apiService); const standAloneTaskId = await tasksService.getTaskId(standaloneTaskName, candidateBaseApp); await tasksService.deleteTask(standAloneTaskId, candidateBaseApp); + + await apiService.login(browser.params.identityAdmin.email, browser.params.identityAdmin.password); await identityService.deleteIdentityUser(testUser.idIdentityService); - done(); }); describe('StandaloneTask with form', () => { - beforeEach(() => { - navigationBarPage.navigateToProcessServicesCloudPage(); - appListCloudComponent.checkApsContainer(); - appListCloudComponent.checkAppIsDisplayed(candidateBaseApp); - appListCloudComponent.goToApp(candidateBaseApp); - tasksCloudDemoPage.taskListCloudComponent().getDataTable().waitForTableBody(); + beforeEach(async () => { + await navigationBarPage.navigateToProcessServicesCloudPage(); + await appListCloudComponent.checkApsContainer(); + await appListCloudComponent.checkAppIsDisplayed(candidateBaseApp); + await appListCloudComponent.goToApp(candidateBaseApp); + await tasksCloudDemoPage.taskListCloudComponent().getDataTable().waitForTableBody(); }); - it('[C307976] Should be able to start and save a task with a form', () => { - tasksCloudDemoPage.openNewTaskForm(); - startTask.checkFormIsDisplayed(); - startTask.addName(standaloneTaskName); - startTask.selectFormDefinition('StartEventForm'); - startTask.clickStartButton(); - tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(standaloneTaskName); - tasksCloudDemoPage.taskListCloudComponent().selectRow(standaloneTaskName); - taskFormCloudComponent.formFields().checkFormIsDisplayed(); - taskFormCloudComponent.formFields().checkWidgetIsVisible('FirstName'); - taskFormCloudComponent.formFields().checkWidgetIsVisible('Number07vyx9'); - widget.textWidget().setValue('FirstName', 'sample'); - widget.numberWidget().setFieldValue('Number07vyx9', 26); - taskFormCloudComponent.checkSaveButtonIsDisplayed().clickSaveButton(); - expect(widget.textWidget().getFieldValue('FirstName')).toBe('sample'); - expect(widget.numberWidget().getFieldValue('Number07vyx9')).toBe('26'); + it('[C307976] Should be able to start and save a task with a form', async () => { + await tasksCloudDemoPage.openNewTaskForm(); + await startTask.checkFormIsDisplayed(); + await startTask.addName(standaloneTaskName); + await startTask.selectFormDefinition('StartEventForm'); + await startTask.clickStartButton(); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(standaloneTaskName); + await tasksCloudDemoPage.taskListCloudComponent().selectRow(standaloneTaskName); + await taskFormCloudComponent.formFields().checkFormIsDisplayed(); + await taskFormCloudComponent.formFields().checkWidgetIsVisible('FirstName'); + await taskFormCloudComponent.formFields().checkWidgetIsVisible('Number07vyx9'); + await widget.textWidget().setValue('FirstName', 'sample'); + await widget.numberWidget().setFieldValue('Number07vyx9', 26); + await taskFormCloudComponent.checkSaveButtonIsDisplayed(); + await taskFormCloudComponent.clickSaveButton(); + await expect(await widget.textWidget().getFieldValue('FirstName')).toBe('sample'); + await expect(await widget.numberWidget().getFieldValue('Number07vyx9')).toBe('26'); - navigationBarPage.navigateToProcessServicesCloudPage(); - appListCloudComponent.checkApsContainer(); - appListCloudComponent.checkAppIsDisplayed(candidateBaseApp); - appListCloudComponent.goToApp(candidateBaseApp); - tasksCloudDemoPage.taskListCloudComponent().getDataTable().waitForTableBody(); + await navigationBarPage.navigateToProcessServicesCloudPage(); + await appListCloudComponent.checkApsContainer(); + await appListCloudComponent.checkAppIsDisplayed(candidateBaseApp); + await appListCloudComponent.goToApp(candidateBaseApp); + await tasksCloudDemoPage.taskListCloudComponent().getDataTable().waitForTableBody(); - expect(tasksCloudDemoPage.getActiveFilterName()).toBe('My Tasks'); - tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(standaloneTaskName); - tasksCloudDemoPage.taskListCloudComponent().selectRow(standaloneTaskName); - taskFormCloudComponent.formFields().checkFormIsDisplayed(); - expect(widget.textWidget().getFieldValue('FirstName')).toBe('sample'); - expect(widget.numberWidget().getFieldValue('Number07vyx9')).toBe('26'); - taskFormCloudComponent.checkCompleteButtonIsDisplayed(); + await expect(await tasksCloudDemoPage.getActiveFilterName()).toBe('My Tasks'); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(standaloneTaskName); + await tasksCloudDemoPage.taskListCloudComponent().selectRow(standaloneTaskName); + await taskFormCloudComponent.formFields().checkFormIsDisplayed(); + await expect(await widget.textWidget().getFieldValue('FirstName')).toBe('sample'); + await expect(await widget.numberWidget().getFieldValue('Number07vyx9')).toBe('26'); + await taskFormCloudComponent.checkCompleteButtonIsDisplayed(); }); - it('[C311428] Should display the Standalone forms based on the flag set', () => { - tasksCloudDemoPage.openNewTaskForm(); - startTask.checkFormIsDisplayed(); - startTask.checkFormDefinitionIsNotDisplayed('UploadFileForm'); - startTask.checkFormDefinitionIsDisplayed('StartEventForm'); - startTask.checkFormDefinitionIsDisplayed('FormToTestValidations'); + it('[C311428] Should display the Standalone forms based on the flag set', async () => { + await tasksCloudDemoPage.openNewTaskForm(); + await startTask.checkFormIsDisplayed(); + await startTask.checkFormDefinitionIsNotDisplayed('UploadFileForm'); + await startTask.checkFormDefinitionIsDisplayed('StartEventForm'); + await startTask.checkFormDefinitionIsDisplayed('FormToTestValidations'); }); }); - describe('Start a process with a start event form', () => { + describe('Start a process with a start event form', async () => { - beforeEach(() => { - navigationBarPage.navigateToProcessServicesCloudPage(); - appListCloudComponent.checkApsContainer(); - appListCloudComponent.checkAppIsDisplayed(candidateBaseApp); - appListCloudComponent.goToApp(candidateBaseApp); - processCloudDemoPage.openNewProcessForm(); - startProcessPage.clearField(startProcessPage.processNameInput); - startProcessPage.enterProcessName(startEventFormProcess); - startProcessPage.selectFromProcessDropdown('processwithstarteventform'); - startProcessPage.formFields().checkFormIsDisplayed(); + beforeEach(async () => { + await navigationBarPage.navigateToProcessServicesCloudPage(); + await appListCloudComponent.checkApsContainer(); + await appListCloudComponent.checkAppIsDisplayed(candidateBaseApp); + await appListCloudComponent.goToApp(candidateBaseApp); + await processCloudDemoPage.openNewProcessForm(); + await startProcessPage.clearField(startProcessPage.processNameInput); + await startProcessPage.enterProcessName(startEventFormProcess); + await startProcessPage.selectFromProcessDropdown('processwithstarteventform'); + await startProcessPage.formFields().checkFormIsDisplayed(); }); it('[C311277] Should be able to start a process with a start event form - default values', async () => { - - expect(widget.textWidget().getFieldValue('FirstName')).toBe('sample name'); - expect(widget.numberWidget().getFieldValue('Number07vyx9')).toBe('17'); + await expect(await widget.textWidget().getFieldValue('FirstName')).toBe('sample name'); + await expect(await widget.numberWidget().getFieldValue('Number07vyx9')).toBe('17'); }); it('[C311277] Should be able to start a process with a start event form - form validation', async () => { + await expect(await widget.textWidget().getErrorMessage('FirstName')).toContain('Enter no more than 10 characters'); + await expect(await startProcessPage.checkStartProcessButtonIsEnabled()).toBe(false); - expect(widget.textWidget().getErrorMessage('FirstName')).toBe('Enter no more than 10 characters'); - expect(startProcessPage.checkStartProcessButtonIsEnabled()).toBe(false); - - widget.textWidget().setValue('FirstName', 'Sam'); - expect(widget.textWidget().getErrorMessage('FirstName')).toBe('Enter at least 5 characters'); - expect(startProcessPage.checkStartProcessButtonIsEnabled()).toBe(false); - widget.numberWidget().setFieldValue('Number07vyx9', 9); - expect(widget.numberWidget().getErrorMessage('Number07vyx9')).toBe('Can\'t be less than 10'); - expect(startProcessPage.checkStartProcessButtonIsEnabled()).toBe(false); - widget.numberWidget().setFieldValue('Number07vyx9', 99999); - expect(widget.numberWidget().getErrorMessage('Number07vyx9')).toBe('Can\'t be greater than 1,000'); - expect(startProcessPage.checkStartProcessButtonIsEnabled()).toBe(false); + await widget.textWidget().setValue('FirstName', 'Sam'); + await expect(await widget.textWidget().getErrorMessage('FirstName')).toContain('Enter at least 5 characters'); + await expect(await startProcessPage.checkStartProcessButtonIsEnabled()).toBe(false); + await widget.numberWidget().setFieldValue('Number07vyx9', 9); + await expect(await widget.numberWidget().getErrorMessage('Number07vyx9')).toContain('Can\'t be less than 10'); + await expect(await startProcessPage.checkStartProcessButtonIsEnabled()).toBe(false); + await widget.numberWidget().setFieldValue('Number07vyx9', 99999); + await expect(await widget.numberWidget().getErrorMessage('Number07vyx9')).toContain('Can\'t be greater than 1,000'); + await expect(await startProcessPage.checkStartProcessButtonIsEnabled()).toBe(false); }); it('[C311277] Should be able to start a process with a start event form - claim and complete the process', async () => { + await widget.textWidget().setValue('FirstName', 'Sample'); + await widget.numberWidget().setFieldValue('Number07vyx9', 100); + await expect(await startProcessPage.checkStartProcessButtonIsEnabled()).toBe(true); + await startProcessPage.clickStartProcessButton(); + await processCloudDemoPage.runningProcessesFilter().clickProcessFilter(); + await expect(await processCloudDemoPage.getActiveFilterName()).toBe('Running Processes'); + await processCloudDemoPage.editProcessFilterCloudComponent().openFilter(); + await processCloudDemoPage.editProcessFilterCloudComponent().setProperty('processName', startEventFormProcess); - widget.textWidget().setValue('FirstName', 'Sample'); - widget.numberWidget().setFieldValue('Number07vyx9', 100); - expect(startProcessPage.checkStartProcessButtonIsEnabled()).toBe(true); - startProcessPage.clickStartProcessButton(); - processCloudDemoPage.clickOnProcessFilters(); - processCloudDemoPage.runningProcessesFilter().clickProcessFilter(); - expect(processCloudDemoPage.getActiveFilterName()).toBe('Running Processes'); - processCloudDemoPage.editProcessFilterCloudComponent().clickCustomiseFilterHeader().setProperty('processName', startEventFormProcess); - processCloudDemoPage.processListCloudComponent().getDataTable().waitTillContentLoaded(); - processCloudDemoPage.processListCloudComponent().checkContentIsDisplayedByName(startEventFormProcess); + await browser.sleep(1000); - processCloudDemoPage.processListCloudComponent().getDataTable().selectRow('Name', startEventFormProcess); - processDetailsCloudDemoPage.checkTaskIsDisplayed('StartEventFormTask'); + await processCloudDemoPage.processListCloudComponent().getDataTable().waitTillContentLoaded(); + await processCloudDemoPage.processListCloudComponent().checkContentIsDisplayedByName(startEventFormProcess); + + await processCloudDemoPage.processListCloudComponent().getDataTable().selectRow('Name', startEventFormProcess); + await browser.actions().sendKeys(protractor.Key.ENTER).perform(); + + await processDetailsCloudDemoPage.checkTaskIsDisplayed('StartEventFormTask'); const processId = await processHeaderCloud.getId(); - processDetailsCloudDemoPage.selectProcessTaskByName('StartEventFormTask'); - taskFormCloudComponent.clickClaimButton(); + await processDetailsCloudDemoPage.selectProcessTaskByName('StartEventFormTask'); + await taskFormCloudComponent.clickClaimButton(); const taskId = await taskHeaderCloudPage.getId(); - taskFormCloudComponent.checkCompleteButtonIsDisplayed().clickCompleteButton(); - expect(tasksCloudDemoPage.getActiveFilterName()).toBe('My Tasks'); - tasksCloudDemoPage.taskListCloudComponent().checkContentIsNotDisplayedById(taskId); + await taskFormCloudComponent.checkCompleteButtonIsDisplayed(); + await taskFormCloudComponent.clickCompleteButton(); + await expect(await tasksCloudDemoPage.getActiveFilterName()).toBe('My Tasks'); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsNotDisplayedById(taskId); - tasksCloudDemoPage.completedTasksFilter().clickTaskFilter(); - tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedById(taskId); - processCloudDemoPage.clickOnProcessFilters(); - processCloudDemoPage.completedProcessesFilter().clickProcessFilter(); - processCloudDemoPage.processListCloudComponent().checkContentIsDisplayedById(processId); + await tasksCloudDemoPage.completedTasksFilter().clickTaskFilter(); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedById(taskId); + + await processCloudDemoPage.clickOnProcessFilters(); + await processCloudDemoPage.completedProcessesFilter().clickProcessFilter(); + await processCloudDemoPage.processListCloudComponent().checkContentIsDisplayedById(processId); }); @@ -303,200 +306,200 @@ describe('Start Task Form', () => { describe('Attach content to process-cloud task form using upload widget', async () => { - beforeEach(async (done) => { - navigationBarPage.navigateToProcessServicesCloudPage(); - appListCloudComponent.checkApsContainer(); - appListCloudComponent.checkAppIsDisplayed(candidateBaseApp); - appListCloudComponent.goToApp(candidateBaseApp); - processCloudDemoPage.clickOnProcessFilters(); - processCloudDemoPage.runningProcessesFilter().clickProcessFilter(); - processCloudDemoPage.processListCloudComponent().checkProcessListIsLoaded(); - done(); + beforeEach(async () => { + await navigationBarPage.navigateToProcessServicesCloudPage(); + await appListCloudComponent.checkApsContainer(); + await appListCloudComponent.checkAppIsDisplayed(candidateBaseApp); + await appListCloudComponent.goToApp(candidateBaseApp); + await processCloudDemoPage.clickOnProcessFilters(); + await processCloudDemoPage.runningProcessesFilter().clickProcessFilter(); + await processCloudDemoPage.processListCloudComponent().checkProcessListIsLoaded(); }); it('[C310358] Should be able to attach a file to a form from local', async () => { - processCloudDemoPage.processListCloudComponent().checkContentIsDisplayedByName(uploadLocalFileProcess.entry.name); - processCloudDemoPage.processListCloudComponent().getDataTable().selectRow('Name', uploadLocalFileProcess.entry.name); - processDetailsCloudDemoPage.checkTaskIsDisplayed('UploadFileTask'); - processDetailsCloudDemoPage.selectProcessTaskByName('UploadFileTask'); - taskFormCloudComponent.clickClaimButton(); + await processCloudDemoPage.processListCloudComponent().checkContentIsDisplayedByName(uploadLocalFileProcess.entry.name); + await processCloudDemoPage.processListCloudComponent().getDataTable().selectRow('Name', uploadLocalFileProcess.entry.name); + await processDetailsCloudDemoPage.checkTaskIsDisplayed('UploadFileTask'); + await processDetailsCloudDemoPage.selectProcessTaskByName('UploadFileTask'); + await taskFormCloudComponent.clickClaimButton(); - const localFileWidget = widget.attachFileWidgetCloud('Attachlocalfile'); - browser.sleep(5000); - localFileWidget.attachLocalFile(pdfFile.location); - localFileWidget.checkFileIsAttached(pdfFile.name); - localFileWidget.removeFile(pdfFile.name); - localFileWidget.checkFileIsNotAttached(pdfFile.name); + const localFileWidget = await widget.attachFileWidgetCloud('Attachlocalfile'); + await browser.sleep(5000); + await localFileWidget.attachLocalFile(pdfFile.location); + await localFileWidget.checkFileIsAttached(pdfFile.name); + await localFileWidget.removeFile(pdfFile.name); + await localFileWidget.checkFileIsNotAttached(pdfFile.name); }); it('[C311285] Should be able to attach a file to a form from acs repository', async () => { - processCloudDemoPage.processListCloudComponent().checkContentIsDisplayedByName(uploadContentFileProcess.entry.name); - processCloudDemoPage.processListCloudComponent().getDataTable().selectRow('Name', uploadContentFileProcess.entry.name); - processDetailsCloudDemoPage.checkTaskIsDisplayed('UploadFileTask'); - processDetailsCloudDemoPage.selectProcessTaskByName('UploadFileTask'); - taskFormCloudComponent.clickClaimButton(); + await processCloudDemoPage.processListCloudComponent().checkContentIsDisplayedByName(uploadContentFileProcess.entry.name); + await processCloudDemoPage.processListCloudComponent().getDataTable().selectRow('Name', uploadContentFileProcess.entry.name); + await processDetailsCloudDemoPage.checkTaskIsDisplayed('UploadFileTask'); + await processDetailsCloudDemoPage.selectProcessTaskByName('UploadFileTask'); + await taskFormCloudComponent.clickClaimButton(); - const contentFileWidget = widget.attachFileWidgetCloud('Attachsinglecontentfile'); - contentFileWidget.clickAttachContentFile('Attachsinglecontentfile'); - contentNodeSelectorDialogPage.checkDialogIsDisplayed(); - contentNodeSelectorDialogPage.contentListPage().dataTablePage().doubleClickRowByContent(folderName); - contentNodeSelectorDialogPage.contentListPage().dataTablePage().waitTillContentLoaded(); - contentNodeSelectorDialogPage.contentListPage().dataTablePage().clickRowByContent(testFileModel.name); - contentNodeSelectorDialogPage.contentListPage().dataTablePage().checkRowByContentIsSelected(testFileModel.name); + const contentFileWidget = await widget.attachFileWidgetCloud('Attachsinglecontentfile'); + await contentFileWidget.clickAttachContentFile('Attachsinglecontentfile'); + await contentNodeSelectorDialogPage.checkDialogIsDisplayed(); + await contentNodeSelectorDialogPage.contentListPage().dataTablePage().doubleClickRowByContent(folderName); + await contentNodeSelectorDialogPage.contentListPage().dataTablePage().waitTillContentLoaded(); + await contentNodeSelectorDialogPage.contentListPage().dataTablePage().clickRowByContent(testFileModel.name); + await contentNodeSelectorDialogPage.contentListPage().dataTablePage().checkRowByContentIsSelected(testFileModel.name); - contentNodeSelectorDialogPage.clickMoveCopyButton(); - contentNodeSelectorDialogPage.checkDialogIsNotDisplayed(); + await contentNodeSelectorDialogPage.clickMoveCopyButton(); + await contentNodeSelectorDialogPage.checkDialogIsNotDisplayed(); - contentFileWidget.checkFileIsAttached(testFileModel.name); - contentFileWidget.removeFile(testFileModel.name); - contentFileWidget.checkFileIsNotAttached(testFileModel.name); - contentFileWidget.checkUploadContentButtonIsDisplayed('Attachsinglecontentfile'); + await contentFileWidget.checkFileIsAttached(testFileModel.name); + await contentFileWidget.removeFile(testFileModel.name); + await contentFileWidget.checkFileIsNotAttached(testFileModel.name); + await contentFileWidget.checkUploadContentButtonIsDisplayed('Attachsinglecontentfile'); }); it('[C311287] Content node selector default location when attaching a file to a form from acs repository', async () => { - processCloudDemoPage.processListCloudComponent().checkContentIsDisplayedByName(uploadDefaultFileProcess.entry.name); - processCloudDemoPage.processListCloudComponent().getDataTable().selectRow('Name', uploadDefaultFileProcess.entry.name); - processDetailsCloudDemoPage.checkTaskIsDisplayed('UploadFileTask'); - processDetailsCloudDemoPage.selectProcessTaskByName('UploadFileTask'); - taskFormCloudComponent.clickClaimButton(); + await processCloudDemoPage.processListCloudComponent().checkContentIsDisplayedByName(uploadDefaultFileProcess.entry.name); + await processCloudDemoPage.processListCloudComponent().getDataTable().selectRow('Name', uploadDefaultFileProcess.entry.name); + await processDetailsCloudDemoPage.checkTaskIsDisplayed('UploadFileTask'); + await processDetailsCloudDemoPage.selectProcessTaskByName('UploadFileTask'); + await taskFormCloudComponent.clickClaimButton(); - const contentFileWidget = widget.attachFileWidgetCloud('Attachsinglecontentfile'); - contentFileWidget.clickAttachContentFile('Attachsinglecontentfile'); - contentNodeSelectorDialogPage.checkDialogIsDisplayed(); - expect(breadCrumbDropdownPage.getTextOfCurrentFolder()).toBe(testUser.username); - contentNodeSelectorDialogPage.contentListPage().dataTablePage().waitTillContentLoaded(); - contentNodeSelectorDialogPage.contentListPage().dataTablePage().checkRowContentIsDisplayed(folderName); - expect(contentNodeSelectorDialogPage.checkCancelButtonIsEnabled()).toBe(true); - expect(contentNodeSelectorDialogPage.checkCopyMoveButtonIsEnabled()).toBe(false); + const contentFileWidget = await widget.attachFileWidgetCloud('Attachsinglecontentfile'); + await contentFileWidget.clickAttachContentFile('Attachsinglecontentfile'); + await contentNodeSelectorDialogPage.checkDialogIsDisplayed(); + await expect(await breadCrumbDropdownPage.getTextOfCurrentFolder()).toBe(testUser.username); + await contentNodeSelectorDialogPage.contentListPage().dataTablePage().waitTillContentLoaded(); + await contentNodeSelectorDialogPage.contentListPage().dataTablePage().checkRowContentIsDisplayed(folderName); + await expect(await contentNodeSelectorDialogPage.checkCancelButtonIsEnabled()).toBe(true); + await expect(await contentNodeSelectorDialogPage.checkCopyMoveButtonIsEnabled()).toBe(false); - contentNodeSelectorDialogPage.contentListPage().dataTablePage().clickRowByContent(folderName); - contentNodeSelectorDialogPage.contentListPage().dataTablePage().checkRowByContentIsSelected(folderName); - expect(contentNodeSelectorDialogPage.checkCancelButtonIsEnabled()).toBe(true); - expect(contentNodeSelectorDialogPage.checkCopyMoveButtonIsEnabled()).toBe(false); - contentNodeSelectorDialogPage.clickCancelButton(); - contentNodeSelectorDialogPage.checkDialogIsNotDisplayed(); + await contentNodeSelectorDialogPage.contentListPage().dataTablePage().clickRowByContent(folderName); + await contentNodeSelectorDialogPage.contentListPage().dataTablePage().checkRowByContentIsSelected(folderName); + await expect(await contentNodeSelectorDialogPage.checkCancelButtonIsEnabled()).toBe(true); + await expect(await contentNodeSelectorDialogPage.checkCopyMoveButtonIsEnabled()).toBe(false); + await contentNodeSelectorDialogPage.clickCancelButton(); + await contentNodeSelectorDialogPage.checkDialogIsNotDisplayed(); }); it('[C311288] No file should be attached when canceling the content node selector', async () => { - processCloudDemoPage.processListCloudComponent().checkContentIsDisplayedByName(cancelUploadFileProcess.entry.name); - processCloudDemoPage.processListCloudComponent().getDataTable().selectRow('Name', cancelUploadFileProcess.entry.name); - processDetailsCloudDemoPage.checkTaskIsDisplayed('UploadFileTask'); - processDetailsCloudDemoPage.selectProcessTaskByName('UploadFileTask'); - taskFormCloudComponent.clickClaimButton(); + await processCloudDemoPage.processListCloudComponent().checkContentIsDisplayedByName(cancelUploadFileProcess.entry.name); + await processCloudDemoPage.processListCloudComponent().getDataTable().selectRow('Name', cancelUploadFileProcess.entry.name); + await processDetailsCloudDemoPage.checkTaskIsDisplayed('UploadFileTask'); + await processDetailsCloudDemoPage.selectProcessTaskByName('UploadFileTask'); + await taskFormCloudComponent.clickClaimButton(); - const contentFileWidget = widget.attachFileWidgetCloud('Attachsinglecontentfile'); - contentFileWidget.clickAttachContentFile('Attachsinglecontentfile'); - contentNodeSelectorDialogPage.checkDialogIsDisplayed(); - contentNodeSelectorDialogPage.contentListPage().dataTablePage().waitTillContentLoaded(); - contentNodeSelectorDialogPage.contentListPage().dataTablePage().checkRowContentIsDisplayed(folderName); - contentNodeSelectorDialogPage.contentListPage().dataTablePage().doubleClickRowByContent(folderName); - contentNodeSelectorDialogPage.contentListPage().dataTablePage().waitTillContentLoaded(); - contentNodeSelectorDialogPage.contentListPage().dataTablePage().clickRowByContent(testFileModel.name); - contentNodeSelectorDialogPage.contentListPage().dataTablePage().checkRowByContentIsSelected(testFileModel.name); + const contentFileWidget = await widget.attachFileWidgetCloud('Attachsinglecontentfile'); + await contentFileWidget.clickAttachContentFile('Attachsinglecontentfile'); + await contentNodeSelectorDialogPage.checkDialogIsDisplayed(); + await contentNodeSelectorDialogPage.contentListPage().dataTablePage().waitTillContentLoaded(); + await contentNodeSelectorDialogPage.contentListPage().dataTablePage().checkRowContentIsDisplayed(folderName); + await contentNodeSelectorDialogPage.contentListPage().dataTablePage().doubleClickRowByContent(folderName); + await contentNodeSelectorDialogPage.contentListPage().dataTablePage().waitTillContentLoaded(); + await contentNodeSelectorDialogPage.contentListPage().dataTablePage().clickRowByContent(testFileModel.name); + await contentNodeSelectorDialogPage.contentListPage().dataTablePage().checkRowByContentIsSelected(testFileModel.name); - contentNodeSelectorDialogPage.clickCancelButton(); - contentNodeSelectorDialogPage.checkDialogIsNotDisplayed(); - contentFileWidget.checkFileIsNotAttached(testFileModel.name); + await contentNodeSelectorDialogPage.clickCancelButton(); + await contentNodeSelectorDialogPage.checkDialogIsNotDisplayed(); + await contentFileWidget.checkFileIsNotAttached(testFileModel.name); }); it('[C311289] Should be able to attach single file', async () => { - processCloudDemoPage.processListCloudComponent().checkContentIsDisplayedByName(uploadContentFileProcess.entry.name); - processCloudDemoPage.processListCloudComponent().getDataTable().selectRow('Name', uploadContentFileProcess.entry.name); - processDetailsCloudDemoPage.checkTaskIsDisplayed('UploadFileTask'); - processDetailsCloudDemoPage.selectProcessTaskByName('UploadFileTask'); + await processCloudDemoPage.processListCloudComponent().checkContentIsDisplayedByName(uploadContentFileProcess.entry.name); + await processCloudDemoPage.processListCloudComponent().getDataTable().selectRow('Name', uploadContentFileProcess.entry.name); + await processDetailsCloudDemoPage.checkTaskIsDisplayed('UploadFileTask'); + await processDetailsCloudDemoPage.selectProcessTaskByName('UploadFileTask'); - const contentFileWidget = widget.attachFileWidgetCloud('Attachsinglecontentfile'); - contentFileWidget.clickAttachContentFile('Attachsinglecontentfile'); - contentNodeSelectorDialogPage.checkDialogIsDisplayed(); - contentNodeSelectorDialogPage.contentListPage().dataTablePage().doubleClickRowByContent(folderName); - contentNodeSelectorDialogPage.contentListPage().dataTablePage().waitTillContentLoaded(); - contentNodeSelectorDialogPage.contentListPage().dataTablePage().clickRowByContent(testFileModel.name); - contentNodeSelectorDialogPage.contentListPage().dataTablePage().checkRowByContentIsSelected(testFileModel.name); + const contentFileWidget = await widget.attachFileWidgetCloud('Attachsinglecontentfile'); + await contentFileWidget.clickAttachContentFile('Attachsinglecontentfile'); + await contentNodeSelectorDialogPage.checkDialogIsDisplayed(); + await contentNodeSelectorDialogPage.contentListPage().dataTablePage().doubleClickRowByContent(folderName); + await contentNodeSelectorDialogPage.contentListPage().dataTablePage().waitTillContentLoaded(); + await contentNodeSelectorDialogPage.contentListPage().dataTablePage().clickRowByContent(testFileModel.name); + await contentNodeSelectorDialogPage.contentListPage().dataTablePage().checkRowByContentIsSelected(testFileModel.name); - contentNodeSelectorDialogPage.clickMoveCopyButton(); - contentNodeSelectorDialogPage.checkDialogIsNotDisplayed(); + await contentNodeSelectorDialogPage.clickMoveCopyButton(); + await contentNodeSelectorDialogPage.checkDialogIsNotDisplayed(); - contentFileWidget.checkFileIsAttached(testFileModel.name); - contentFileWidget.checkUploadContentButtonIsNotDisplayed('Attachsinglecontentfile'); + await contentFileWidget.checkFileIsAttached(testFileModel.name); + await contentFileWidget.checkUploadContentButtonIsNotDisplayed('Attachsinglecontentfile'); }); it('[C311292] Attached file is not displayed anymore after release if the form is not saved', async () => { - processCloudDemoPage.processListCloudComponent().checkContentIsDisplayedByName(uploadContentFileProcess.entry.name); - processCloudDemoPage.processListCloudComponent().getDataTable().selectRow('Name', uploadContentFileProcess.entry.name); - processDetailsCloudDemoPage.checkTaskIsDisplayed('UploadFileTask'); - processDetailsCloudDemoPage.selectProcessTaskByName('UploadFileTask'); + await processCloudDemoPage.processListCloudComponent().checkContentIsDisplayedByName(uploadContentFileProcess.entry.name); + await processCloudDemoPage.processListCloudComponent().getDataTable().selectRow('Name', uploadContentFileProcess.entry.name); + await processDetailsCloudDemoPage.checkTaskIsDisplayed('UploadFileTask'); + await processDetailsCloudDemoPage.selectProcessTaskByName('UploadFileTask'); - const contentFileWidget = widget.attachFileWidgetCloud('Attachsinglecontentfile'); - contentFileWidget.clickAttachContentFile('Attachsinglecontentfile'); - contentNodeSelectorDialogPage.checkDialogIsDisplayed(); - contentNodeSelectorDialogPage.contentListPage().dataTablePage().doubleClickRowByContent(folderName); - contentNodeSelectorDialogPage.contentListPage().dataTablePage().waitTillContentLoaded(); - contentNodeSelectorDialogPage.contentListPage().dataTablePage().clickRowByContent(testFileModel.name); - contentNodeSelectorDialogPage.contentListPage().dataTablePage().checkRowByContentIsSelected(testFileModel.name); + const contentFileWidget = await widget.attachFileWidgetCloud('Attachsinglecontentfile'); + await contentFileWidget.clickAttachContentFile('Attachsinglecontentfile'); + await contentNodeSelectorDialogPage.checkDialogIsDisplayed(); + await contentNodeSelectorDialogPage.contentListPage().dataTablePage().doubleClickRowByContent(folderName); + await contentNodeSelectorDialogPage.contentListPage().dataTablePage().waitTillContentLoaded(); + await contentNodeSelectorDialogPage.contentListPage().dataTablePage().clickRowByContent(testFileModel.name); + await contentNodeSelectorDialogPage.contentListPage().dataTablePage().checkRowByContentIsSelected(testFileModel.name); - contentNodeSelectorDialogPage.clickMoveCopyButton(); - contentNodeSelectorDialogPage.checkDialogIsNotDisplayed(); + await contentNodeSelectorDialogPage.clickMoveCopyButton(); + await contentNodeSelectorDialogPage.checkDialogIsNotDisplayed(); - contentFileWidget.checkFileIsAttached(testFileModel.name); - contentFileWidget.checkUploadContentButtonIsNotDisplayed('Attachsinglecontentfile'); - taskFormCloudComponent.clickReleaseButton(); - taskFormCloudComponent.clickClaimButton(); - contentFileWidget.checkFileIsNotAttached(testFileModel.name); - contentFileWidget.checkUploadContentButtonIsDisplayed('Attachsinglecontentfile'); + await contentFileWidget.checkFileIsAttached(testFileModel.name); + await contentFileWidget.checkUploadContentButtonIsNotDisplayed('Attachsinglecontentfile'); + await taskFormCloudComponent.clickReleaseButton(); + await taskFormCloudComponent.clickClaimButton(); + await contentFileWidget.checkFileIsNotAttached(testFileModel.name); + await contentFileWidget.checkUploadContentButtonIsDisplayed('Attachsinglecontentfile'); }); it('[C311293] Attached file is displayed after release if the form was saved', async () => { - processCloudDemoPage.processListCloudComponent().checkContentIsDisplayedByName(uploadContentFileProcess.entry.name); - processCloudDemoPage.processListCloudComponent().getDataTable().selectRow('Name', uploadContentFileProcess.entry.name); - processDetailsCloudDemoPage.checkTaskIsDisplayed('UploadFileTask'); - processDetailsCloudDemoPage.selectProcessTaskByName('UploadFileTask'); + await processCloudDemoPage.processListCloudComponent().checkContentIsDisplayedByName(uploadContentFileProcess.entry.name); + await processCloudDemoPage.processListCloudComponent().getDataTable().selectRow('Name', uploadContentFileProcess.entry.name); + await processDetailsCloudDemoPage.checkTaskIsDisplayed('UploadFileTask'); + await processDetailsCloudDemoPage.selectProcessTaskByName('UploadFileTask'); - const contentFileWidget = widget.attachFileWidgetCloud('Attachsinglecontentfile'); - contentFileWidget.clickAttachContentFile('Attachsinglecontentfile'); - contentNodeSelectorDialogPage.checkDialogIsDisplayed(); - contentNodeSelectorDialogPage.contentListPage().dataTablePage().doubleClickRowByContent(folderName); - contentNodeSelectorDialogPage.contentListPage().dataTablePage().waitTillContentLoaded(); - contentNodeSelectorDialogPage.contentListPage().dataTablePage().clickRowByContent(testFileModel.name); - contentNodeSelectorDialogPage.contentListPage().dataTablePage().checkRowByContentIsSelected(testFileModel.name); - contentNodeSelectorDialogPage.clickMoveCopyButton(); - contentNodeSelectorDialogPage.checkDialogIsNotDisplayed(); - contentFileWidget.checkFileIsAttached(testFileModel.name); - contentFileWidget.checkUploadContentButtonIsNotDisplayed('Attachsinglecontentfile'); - taskFormCloudComponent.clickSaveButton(); - taskFormCloudComponent.clickReleaseButton(); - taskFormCloudComponent.clickClaimButton(); - contentFileWidget.checkFileIsAttached(testFileModel.name); - contentFileWidget.checkUploadContentButtonIsNotDisplayed('Attachsinglecontentfile'); + const contentFileWidget = await widget.attachFileWidgetCloud('Attachsinglecontentfile'); + await contentFileWidget.clickAttachContentFile('Attachsinglecontentfile'); + await contentNodeSelectorDialogPage.checkDialogIsDisplayed(); + await contentNodeSelectorDialogPage.contentListPage().dataTablePage().doubleClickRowByContent(folderName); + await contentNodeSelectorDialogPage.contentListPage().dataTablePage().waitTillContentLoaded(); + await contentNodeSelectorDialogPage.contentListPage().dataTablePage().clickRowByContent(testFileModel.name); + await contentNodeSelectorDialogPage.contentListPage().dataTablePage().checkRowByContentIsSelected(testFileModel.name); + await contentNodeSelectorDialogPage.clickMoveCopyButton(); + await contentNodeSelectorDialogPage.checkDialogIsNotDisplayed(); + await contentFileWidget.checkFileIsAttached(testFileModel.name); + await contentFileWidget.checkUploadContentButtonIsNotDisplayed('Attachsinglecontentfile'); + await taskFormCloudComponent.clickSaveButton(); + await taskFormCloudComponent.clickReleaseButton(); + await taskFormCloudComponent.clickClaimButton(); + await contentFileWidget.checkFileIsAttached(testFileModel.name); + await contentFileWidget.checkUploadContentButtonIsNotDisplayed('Attachsinglecontentfile'); }); it('[C311295] Attached file is displayed after complete', async () => { - processCloudDemoPage.processListCloudComponent().checkContentIsDisplayedByName(completeUploadFileProcess.entry.name); - processCloudDemoPage.processListCloudComponent().getDataTable().selectRow('Name', completeUploadFileProcess.entry.name); - processDetailsCloudDemoPage.checkTaskIsDisplayed('UploadFileTask'); - processDetailsCloudDemoPage.selectProcessTaskByName('UploadFileTask'); - taskFormCloudComponent.clickClaimButton(); + await processCloudDemoPage.processListCloudComponent().checkContentIsDisplayedByName(completeUploadFileProcess.entry.name); + await processCloudDemoPage.processListCloudComponent().getDataTable().selectRow('Name', completeUploadFileProcess.entry.name); + await processDetailsCloudDemoPage.checkTaskIsDisplayed('UploadFileTask'); + await processDetailsCloudDemoPage.selectProcessTaskByName('UploadFileTask'); + await taskFormCloudComponent.clickClaimButton(); - const contentFileWidget = widget.attachFileWidgetCloud('Attachsinglecontentfile'); - contentFileWidget.clickAttachContentFile('Attachsinglecontentfile'); - contentNodeSelectorDialogPage.checkDialogIsDisplayed(); - contentNodeSelectorDialogPage.contentListPage().dataTablePage().doubleClickRowByContent(folderName); - contentNodeSelectorDialogPage.contentListPage().dataTablePage().waitTillContentLoaded(); - contentNodeSelectorDialogPage.contentListPage().dataTablePage().clickRowByContent(testFileModel.name); - contentNodeSelectorDialogPage.contentListPage().dataTablePage().checkRowByContentIsSelected(testFileModel.name); - contentNodeSelectorDialogPage.clickMoveCopyButton(); - contentNodeSelectorDialogPage.checkDialogIsNotDisplayed(); - contentFileWidget.checkFileIsAttached(testFileModel.name); - contentFileWidget.checkUploadContentButtonIsNotDisplayed('Attachsinglecontentfile'); + const contentFileWidget = await widget.attachFileWidgetCloud('Attachsinglecontentfile'); + await contentFileWidget.clickAttachContentFile('Attachsinglecontentfile'); + await contentNodeSelectorDialogPage.checkDialogIsDisplayed(); + await contentNodeSelectorDialogPage.contentListPage().dataTablePage().doubleClickRowByContent(folderName); + await contentNodeSelectorDialogPage.contentListPage().dataTablePage().waitTillContentLoaded(); + await contentNodeSelectorDialogPage.contentListPage().dataTablePage().clickRowByContent(testFileModel.name); + await contentNodeSelectorDialogPage.contentListPage().dataTablePage().checkRowByContentIsSelected(testFileModel.name); + await contentNodeSelectorDialogPage.clickMoveCopyButton(); + await contentNodeSelectorDialogPage.checkDialogIsNotDisplayed(); + await contentFileWidget.checkFileIsAttached(testFileModel.name); + await contentFileWidget.checkUploadContentButtonIsNotDisplayed('Attachsinglecontentfile'); const taskId = await taskHeaderCloudPage.getId(); - taskFormCloudComponent.checkCompleteButtonIsDisplayed().clickCompleteButton(); - expect(tasksCloudDemoPage.getActiveFilterName()).toBe('My Tasks'); - tasksCloudDemoPage.taskListCloudComponent().checkContentIsNotDisplayedById(taskId); + await taskFormCloudComponent.checkCompleteButtonIsDisplayed(); + await taskFormCloudComponent.clickCompleteButton(); + await expect(await tasksCloudDemoPage.getActiveFilterName()).toBe('My Tasks'); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsNotDisplayedById(taskId); - tasksCloudDemoPage.completedTasksFilter().clickTaskFilter(); - tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedById(taskId); - tasksCloudDemoPage.taskListCloudComponent().selectRowByTaskId(taskId); - contentFileWidget.checkFileIsAttached(testFileModel.name); - contentFileWidget.checkUploadContentButtonIsNotDisplayed('Attachsinglecontentfile'); + await tasksCloudDemoPage.completedTasksFilter().clickTaskFilter(); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedById(taskId); + await tasksCloudDemoPage.taskListCloudComponent().selectRowByTaskId(taskId); + await contentFileWidget.checkFileIsAttached(testFileModel.name); + await contentFileWidget.checkUploadContentButtonIsNotDisplayed('Attachsinglecontentfile'); }); }); }); diff --git a/e2e/process-services-cloud/start-task/start-task-custom-app-cloud.e2e.ts b/e2e/process-services-cloud/start-task/start-task-custom-app-cloud.e2e.ts index 5aeafc8bf0..5d7fc81060 100644 --- a/e2e/process-services-cloud/start-task/start-task-custom-app-cloud.e2e.ts +++ b/e2e/process-services-cloud/start-task/start-task-custom-app-cloud.e2e.ts @@ -62,7 +62,7 @@ describe('Start Task', () => { let identityService: IdentityService; let groupIdentityService: GroupIdentityService; - beforeAll(async (done) => { + beforeAll(async () => { await apiService.login(browser.params.identityAdmin.email, browser.params.identityAdmin.password); identityService = new IdentityService(apiService); @@ -73,6 +73,7 @@ describe('Start Task', () => { activitiUser = await identityService.createIdentityUser(); groupInfo = await groupIdentityService.getGroupInfoByGroupName('hr'); await identityService.addUserToGroup(testUser.idIdentityService, groupInfo.id); + await identityService.addUserToGroup(apsUser.idIdentityService, groupInfo.id); await apiService.login(testUser.email, testUser.password); await settingsPage.setProviderBpmSso( @@ -80,150 +81,162 @@ describe('Start Task', () => { browser.params.config.oauth2.host, browser.params.config.identityHost); await loginSSOPage.loginSSOIdentityService(testUser.email, testUser.password); - done(); + }); - afterAll(async (done) => { - await apiService.login(browser.params.identityAdmin.email, browser.params.identityAdmin.password); + afterAll(async () => { const tasksService = new TasksService(apiService); - const tasks = [standaloneTaskName, unassignedTaskName, reassignTaskName]; - for (let i = 0; i < tasks.length; i++) { - const taskId = await tasksService.getTaskId(tasks[i], simpleApp); - if (taskId) { - await tasksService.deleteTask(taskId, simpleApp); - } - } + let taskId = await tasksService.getTaskId(standaloneTaskName, simpleApp); + await tasksService.deleteTask(taskId, simpleApp); + taskId = await tasksService.getTaskId(unassignedTaskName, simpleApp); + await tasksService.deleteTask(taskId, simpleApp); + + await apiService.login(apsUser.email, apsUser.password); + taskId = await tasksService.getTaskId(reassignTaskName, simpleApp); + await tasksService.deleteTask(taskId, simpleApp); + + await apiService.login(browser.params.identityAdmin.email, browser.params.identityAdmin.password); await identityService.deleteIdentityUser(activitiUser.idIdentityService); await identityService.deleteIdentityUser(apsUser.idIdentityService); await identityService.deleteIdentityUser(testUser.idIdentityService); - done(); + }); - beforeEach(() => { - navigationBarPage.navigateToProcessServicesCloudPage(); - appListCloudComponent.checkApsContainer(); - appListCloudComponent.checkAppIsDisplayed(simpleApp); - appListCloudComponent.goToApp(simpleApp); - tasksCloudDemoPage.taskListCloudComponent().getDataTable().waitForTableBody(); + beforeEach(async () => { + await navigationBarPage.navigateToProcessServicesCloudPage(); + await appListCloudComponent.checkApsContainer(); + await appListCloudComponent.checkAppIsDisplayed(simpleApp); + await appListCloudComponent.goToApp(simpleApp); + await tasksCloudDemoPage.taskListCloudComponent().getDataTable().waitForTableBody(); }); - it('[C297675] Should create a task unassigned when assignee field is empty in Start Task form', () => { - tasksCloudDemoPage.openNewTaskForm(); - startTask.checkFormIsDisplayed(); - peopleCloudComponent.clearAssignee(); - startTask.addName(unassignedTaskName); - startTask.clickStartButton(); - tasksCloudDemoPage.editTaskFilterCloudComponent() - .clickCustomiseFilterHeader() - .clearAssignee() - .setStatusFilterDropDown('CREATED'); - tasksCloudDemoPage.taskListCloudComponent().getDataTable().waitForTableBody(); - tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(unassignedTaskName); - const taskId = tasksCloudDemoPage.taskListCloudComponent().getIdCellValue(unassignedTaskName); - tasksCloudDemoPage.taskListCloudComponent().selectRow(unassignedTaskName); - taskHeaderCloudPage.checkTaskPropertyListIsDisplayed(); - expect(taskHeaderCloudPage.getId()).toBe(taskId); - expect(taskHeaderCloudPage.getAssignee()).toBe('No assignee'); + it('[C297675] Should create a task unassigned when assignee field is empty in Start Task form', async () => { + await tasksCloudDemoPage.openNewTaskForm(); + await startTask.checkFormIsDisplayed(); + await peopleCloudComponent.clearAssignee(); + await startTask.addName(unassignedTaskName); + await startTask.clickStartButton(); + await tasksCloudDemoPage.editTaskFilterCloudComponent(); + await tasksCloudDemoPage.editTaskFilterCloudComponent().openFilter(); + await tasksCloudDemoPage.editTaskFilterCloudComponent().clearAssignee(); + await tasksCloudDemoPage.editTaskFilterCloudComponent().setStatusFilterDropDown('CREATED'); + await tasksCloudDemoPage.taskListCloudComponent().getDataTable().waitForTableBody(); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(unassignedTaskName); + const taskId = await tasksCloudDemoPage.taskListCloudComponent().getIdCellValue(unassignedTaskName); + await tasksCloudDemoPage.taskListCloudComponent().selectRow(unassignedTaskName); + await taskHeaderCloudPage.checkTaskPropertyListIsDisplayed(); + await expect(await taskHeaderCloudPage.getId()).toBe(taskId); + await expect(await taskHeaderCloudPage.getAssignee()).toBe('No assignee'); }); - it('[C291956] Should be able to create a new standalone task without assignee', () => { - tasksCloudDemoPage.openNewTaskForm(); - startTask.checkFormIsDisplayed(); - expect(peopleCloudComponent.getAssignee()).toContain(testUser.firstName, 'does not contain Admin'); - startTask.addName(unassignedTaskName); - startTask.clickStartButton(); - startTask.checkStartButtonIsEnabled(); - tasksCloudDemoPage.editTaskFilterCloudComponent() - .clickCustomiseFilterHeader() - .setStatusFilterDropDown('CREATED') - .clearAssignee(); - tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(unassignedTaskName); + it('[C291956] Should be able to create a new standalone task without assignee', async () => { + await tasksCloudDemoPage.openNewTaskForm(); + await startTask.checkFormIsDisplayed(); + await peopleCloudComponent.clearAssignee(); + await startTask.addName(unassignedTaskName); + await startTask.checkStartButtonIsEnabled(); + await startTask.clickStartButton(); + await tasksCloudDemoPage.editTaskFilterCloudComponent(); + await tasksCloudDemoPage.editTaskFilterCloudComponent().openFilter(); + await tasksCloudDemoPage.editTaskFilterCloudComponent().setStatusFilterDropDown('CREATED'); + await tasksCloudDemoPage.editTaskFilterCloudComponent().clearAssignee(); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(unassignedTaskName); }); - it('[C290166] Should be possible to cancel a task', () => { - tasksCloudDemoPage.openNewTaskForm(); - startTask.checkFormIsDisplayed(); - startTask.checkStartButtonIsDisabled() - .blur(startTask.name) - .checkValidationErrorIsDisplayed(requiredError); - startTask.addName(standaloneTaskName) - .addDescription('descriptions') - .addDueDate('12/12/2018'); - startTask.checkStartButtonIsEnabled(); - startTask.clickCancelButton(); - tasksCloudDemoPage.taskListCloudComponent().checkContentIsNotDisplayedByName(standaloneTaskName); + it('[C290166] Should be possible to cancel a task', async () => { + await tasksCloudDemoPage.openNewTaskForm(); + await startTask.checkFormIsDisplayed(); + await startTask.checkStartButtonIsDisabled(); + await startTask.blur(await startTask.name); + await startTask.checkValidationErrorIsDisplayed(requiredError); + await startTask.addName(standaloneTaskName); + await startTask.addDescription('descriptions'); + await startTask .addDueDate('12/12/2018'); + await startTask.checkStartButtonIsEnabled(); + await startTask.clickCancelButton(); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsNotDisplayedByName(standaloneTaskName); }); - it('[C290180] Should be able to create a new standalone task', () => { - tasksCloudDemoPage.openNewTaskForm(); - startTask.checkFormIsDisplayed(); - startTask.addName(standaloneTaskName) - .addDescription('descriptions') - .addDueDate('12/12/2018') - .addPriority('50') - .clickStartButton(); - tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(standaloneTaskName); + it('[C290180] Should be able to create a new standalone task', async () => { + await tasksCloudDemoPage.openNewTaskForm(); + await startTask.checkFormIsDisplayed(); + await startTask.addName(standaloneTaskName); + await startTask.addDescription('descriptions'); + await startTask.addDueDate('12/12/2018'); + await startTask.addPriority('50'); + await startTask.clickStartButton(); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(standaloneTaskName); }); - it('[C290181] Should be displayed an error message if task name exceed 255 characters', () => { - tasksCloudDemoPage.openNewTaskForm(); - startTask.checkFormIsDisplayed(); - startTask.addName(taskName255Characters) - .checkStartButtonIsEnabled(); - startTask.addName(taskNameBiggerThen255Characters) - .blur(startTask.name) - .checkValidationErrorIsDisplayed(lengthValidationError) - .checkStartButtonIsDisabled() - .clickCancelButton(); + it('[C290181] Should be displayed an error message if task name exceed 255 characters', async () => { + await tasksCloudDemoPage.openNewTaskForm(); + await startTask.checkFormIsDisplayed(); + await startTask.addName(taskName255Characters); + await startTask.checkStartButtonIsEnabled(); + await startTask.addName(taskNameBiggerThen255Characters); + await startTask.blur(await startTask.name); + await startTask.checkValidationErrorIsDisplayed(lengthValidationError); + await startTask.checkStartButtonIsDisabled(); + await startTask.clickCancelButton(); }); - it('[C291774] Should be displayed an error message if the date is invalid', () => { - tasksCloudDemoPage.openNewTaskForm(); - startTask.addDueDate('12/12/2018') - .checkStartButtonIsEnabled(); - startTask.addDueDate('invalid date') - .blur(startTask.dueDate) - .validateDate(dateValidationError) - .checkStartButtonIsDisabled() - .clickCancelButton(); + it('[C291774] Should be displayed an error message if the date is invalid', async () => { + await tasksCloudDemoPage.openNewTaskForm(); + await startTask.addDueDate('12/12/2018'); + await startTask.checkStartButtonIsEnabled(); + await startTask.addDueDate('invalid date'); + await startTask.blur(await startTask.dueDate); + await startTask.validateDate(dateValidationError); + await startTask.checkStartButtonIsDisabled(); + await startTask.clickCancelButton(); }); - it('[C290182] Should be possible to assign the task to another user', () => { - tasksCloudDemoPage.openNewTaskForm(); - startTask.checkFormIsDisplayed(); - startTask.addName(standaloneTaskName); - peopleCloudComponent.searchAssigneeAndSelect(`${activitiUser.firstName} ${activitiUser.lastName}`); - startTask.checkStartButtonIsEnabled(); - startTask.clickStartButton(); - tasksCloudDemoPage.myTasksFilter().clickTaskFilter(); - expect(tasksCloudDemoPage.getActiveFilterName()).toBe('My Tasks'); - tasksCloudDemoPage.taskListCloudComponent().checkContentIsNotDisplayedByName(standaloneTaskName); + it('[C290182] Should be possible to assign the task to another user', async () => { + await tasksCloudDemoPage.openNewTaskForm(); + await startTask.checkFormIsDisplayed(); + await startTask.addName(standaloneTaskName); + await peopleCloudComponent.searchAssigneeAndSelect(`${apsUser.firstName} ${apsUser.lastName}`); + + await startTask.checkStartButtonIsEnabled(); + await startTask.clickStartButton(); + + await browser.driver.sleep(1000); + + await tasksCloudDemoPage.myTasksFilter().clickTaskFilter(); + + await expect(await tasksCloudDemoPage.getActiveFilterName()).toBe('My Tasks'); }); - it('[C291953] Assignee field should display the logged user as default', () => { - tasksCloudDemoPage.openNewTaskForm(); - startTask.checkFormIsDisplayed(); - expect(peopleCloudComponent.getAssignee()).toContain(testUser.firstName, 'does not contain Admin'); - startTask.clickCancelButton(); + it('[C291953] Assignee field should display the logged user as default', async () => { + await tasksCloudDemoPage.openNewTaskForm(); + await startTask.checkFormIsDisplayed(); + await expect(await peopleCloudComponent.getAssignee()).toContain(testUser.firstName, 'does not contain Admin'); + await startTask.clickCancelButton(); }); - it('[C305050] Should be able to reassign the removed user when starting a new task', () => { - tasksCloudDemoPage.openNewTaskForm(); - startTask.checkFormIsDisplayed(); - startTask.addName(reassignTaskName); - expect(peopleCloudComponent.getAssignee()).toBe(`${testUser.firstName} ${testUser.lastName}`); - peopleCloudComponent.searchAssignee(apsUser.username); - peopleCloudComponent.checkUserIsDisplayed(`${apsUser.firstName} ${apsUser.lastName}`); - peopleCloudComponent.selectAssigneeFromList(`${apsUser.firstName} ${apsUser.lastName}`); - startTask.clickStartButton(); - tasksCloudDemoPage.editTaskFilterCloudComponent() - .clickCustomiseFilterHeader() - .clearAssignee() - .setStatusFilterDropDown('ALL'); - tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(reassignTaskName); - tasksCloudDemoPage.taskListCloudComponent().selectRow(reassignTaskName); - expect(taskHeaderCloudPage.getAssignee()).toBe(apsUser.username); + it('[C305050] Should be able to reassign the removed user when starting a new task', async () => { + await tasksCloudDemoPage.openNewTaskForm(); + await startTask.checkFormIsDisplayed(); + await startTask.addName(reassignTaskName); + + await expect(await peopleCloudComponent.getAssignee()).toBe(`${testUser.firstName} ${testUser.lastName}`); + await peopleCloudComponent.searchAssignee(apsUser.username); + await peopleCloudComponent.checkUserIsDisplayed(`${apsUser.firstName} ${apsUser.lastName}`); + await peopleCloudComponent.selectAssigneeFromList(`${apsUser.firstName} ${apsUser.lastName}`); + await startTask.clickStartButton(); + + await tasksCloudDemoPage.editTaskFilterCloudComponent().openFilter(); + await tasksCloudDemoPage.editTaskFilterCloudComponent().clearAssignee(); + await tasksCloudDemoPage.editTaskFilterCloudComponent().setStatusFilterDropDown('ALL'); + + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(reassignTaskName); + + await browser.driver.sleep(1000); + + await tasksCloudDemoPage.taskListCloudComponent().selectRow(reassignTaskName); + + await expect(await taskHeaderCloudPage.getAssignee()).toBe(apsUser.username); }); }); diff --git a/e2e/process-services-cloud/start-task/start-task-group-cloud.e2e.ts b/e2e/process-services-cloud/start-task/start-task-group-cloud.e2e.ts index 2ceb80de4a..f81f944834 100644 --- a/e2e/process-services-cloud/start-task/start-task-group-cloud.e2e.ts +++ b/e2e/process-services-cloud/start-task/start-task-group-cloud.e2e.ts @@ -56,7 +56,7 @@ describe('Start Task - Group Cloud Component', () => { let identityService: IdentityService; let groupIdentityService: GroupIdentityService; - beforeAll(async (done) => { + beforeAll(async () => { await apiService.login(browser.params.identityAdmin.email, browser.params.identityAdmin.password); identityService = new IdentityService(apiService); @@ -79,11 +79,10 @@ describe('Start Task - Group Cloud Component', () => { browser.params.config.oauth2.host, browser.params.config.identityHost); - done(); }); - afterAll(async (done) => { - await apiService.login(browser.params.identityAdmin.email, browser.params.identityAdmin.password); + afterAll(async () => { + await apiService.login(testUser.email, testUser.password); const tasksService = new TasksService(apiService); const bothGroupsTaskId = await tasksService.getTaskId(bothGroupsTaskName, simpleApp); @@ -92,120 +91,117 @@ describe('Start Task - Group Cloud Component', () => { const oneGroupTaskId = await tasksService.getTaskId(oneGroupTaskName, simpleApp); await tasksService.deleteTask(oneGroupTaskId, simpleApp); + await apiService.login(browser.params.identityAdmin.email, browser.params.identityAdmin.password); await identityService.deleteIdentityUser(apsUser.idIdentityService); await identityService.deleteIdentityUser(testUser.idIdentityService); - done(); }); beforeEach(async () => { await loginSSOPage.loginSSOIdentityService(testUser.email, testUser.password); - navigationBarPage.navigateToProcessServicesCloudPage(); - appListCloudComponent.checkApsContainer(); - appListCloudComponent.checkAppIsDisplayed(simpleApp); - appListCloudComponent.goToApp(simpleApp); - tasksCloudDemoPage.taskListCloudComponent().getDataTable().waitForTableBody(); - tasksCloudDemoPage.openNewTaskForm(); - startTask.checkFormIsDisplayed(); + await navigationBarPage.navigateToProcessServicesCloudPage(); + await appListCloudComponent.checkApsContainer(); + await appListCloudComponent.checkAppIsDisplayed(simpleApp); + await appListCloudComponent.goToApp(simpleApp); + await tasksCloudDemoPage.taskListCloudComponent().getDataTable().waitForTableBody(); + await tasksCloudDemoPage.openNewTaskForm(); + await startTask.checkFormIsDisplayed(); }); - afterEach(() => { - navigationBarPage.clickLogoutButton(); + afterEach(async () => { + await navigationBarPage.clickLogoutButton(); }); it('[C291954] Should be able to select/delete an group for a standalone task', async () => { - peopleCloudComponent.clearAssignee(); + await peopleCloudComponent.clearAssignee(); - groupCloud.searchGroups(testGroup.name); + await groupCloud.searchGroups(testGroup.name); + await groupCloud.checkGroupIsDisplayed(testGroup.name); + await groupCloud.selectGroupFromList(testGroup.name); + await groupCloud.checkSelectedGroup(testGroup.name); - groupCloud.checkGroupIsDisplayed(testGroup.name); - groupCloud.selectGroupFromList(testGroup.name); - groupCloud.checkSelectedGroup(testGroup.name); + await groupCloud.searchGroups(hrGroup.name); + await groupCloud.checkGroupIsDisplayed(hrGroup.name); + await groupCloud.selectGroupFromList(hrGroup.name); + await groupCloud.checkSelectedGroup(hrGroup.name); - groupCloud.searchGroups(hrGroup.name); - groupCloud.checkGroupIsDisplayed(hrGroup.name); - groupCloud.selectGroupFromList(hrGroup.name); - groupCloud.checkSelectedGroup(hrGroup.name); + await groupCloud.removeSelectedGroup(testGroup.name); + await groupCloud.checkGroupNotSelected(testGroup.name); - groupCloud.removeSelectedGroup(testGroup.name); - groupCloud.checkGroupNotSelected(testGroup.name); + await startTask.addName(oneGroupTaskName); + await startTask.clickStartButton(); - startTask.addName(oneGroupTaskName); - startTask.clickStartButton(); - - navigationBarPage.clickLogoutButton(); + await navigationBarPage.clickLogoutButton(); await loginSSOPage.loginSSOIdentityService(apsUser.email, apsUser.password); - navigationBarPage.navigateToProcessServicesCloudPage(); - appListCloudComponent.checkApsContainer(); - appListCloudComponent.checkAppIsDisplayed(simpleApp); - appListCloudComponent.goToApp(simpleApp); - tasksCloudDemoPage.taskListCloudComponent().getDataTable().waitForTableBody(); + await navigationBarPage.navigateToProcessServicesCloudPage(); + await appListCloudComponent.checkApsContainer(); + await appListCloudComponent.checkAppIsDisplayed(simpleApp); + await appListCloudComponent.goToApp(simpleApp); + await tasksCloudDemoPage.taskListCloudComponent().getDataTable().waitForTableBody(); - tasksCloudDemoPage.editTaskFilterCloudComponent() - .clickCustomiseFilterHeader() - .clearAssignee() - .setStatusFilterDropDown('CREATED'); + await tasksCloudDemoPage.editTaskFilterCloudComponent().openFilter(); + await tasksCloudDemoPage.editTaskFilterCloudComponent().clearAssignee(); + await tasksCloudDemoPage.editTaskFilterCloudComponent().setStatusFilterDropDown('CREATED'); - tasksCloudDemoPage.taskListCloudComponent().getDataTable().waitForTableBody(); - tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(oneGroupTaskName); + await tasksCloudDemoPage.taskListCloudComponent().getDataTable().waitForTableBody(); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(oneGroupTaskName); }); it('[C291955] Should be able to select multiple groups when the selection mode=multiple', async () => { - peopleCloudComponent.clearAssignee(); + await peopleCloudComponent.clearAssignee(); - groupCloud.searchGroups(testGroup.name); - groupCloud.checkGroupIsDisplayed(testGroup.name); - groupCloud.selectGroupFromList(testGroup.name); - groupCloud.checkSelectedGroup(testGroup.name); + await groupCloud.searchGroups(testGroup.name); + await groupCloud.checkGroupIsDisplayed(testGroup.name); + await groupCloud.selectGroupFromList(testGroup.name); + await groupCloud.checkSelectedGroup(testGroup.name); - groupCloud.searchGroups(hrGroup.name); - groupCloud.checkGroupIsDisplayed(hrGroup.name); - groupCloud.selectGroupFromList(hrGroup.name); - groupCloud.checkSelectedGroup(hrGroup.name); + await groupCloud.searchGroups(hrGroup.name); + await groupCloud.checkGroupIsDisplayed(hrGroup.name); + await groupCloud.selectGroupFromList(hrGroup.name); + await groupCloud.checkSelectedGroup(hrGroup.name); - startTask.addName(bothGroupsTaskName); - startTask.clickStartButton(); + await startTask.addName(bothGroupsTaskName); + await startTask.clickStartButton(); - navigationBarPage.clickLogoutButton(); + await navigationBarPage.clickLogoutButton(); await loginSSOPage.loginSSOIdentityService(apsUser.email, apsUser.password); - navigationBarPage.navigateToProcessServicesCloudPage(); - appListCloudComponent.checkApsContainer(); - appListCloudComponent.checkAppIsDisplayed(simpleApp); - appListCloudComponent.goToApp(simpleApp); - tasksCloudDemoPage.taskListCloudComponent().getDataTable().waitForTableBody(); + await navigationBarPage.navigateToProcessServicesCloudPage(); + await appListCloudComponent.checkApsContainer(); + await appListCloudComponent.checkAppIsDisplayed(simpleApp); + await appListCloudComponent.goToApp(simpleApp); + await tasksCloudDemoPage.taskListCloudComponent().getDataTable().waitForTableBody(); - tasksCloudDemoPage.editTaskFilterCloudComponent() - .clickCustomiseFilterHeader() - .clearAssignee() - .setStatusFilterDropDown('CREATED'); + await tasksCloudDemoPage.editTaskFilterCloudComponent().openFilter(); + await tasksCloudDemoPage.editTaskFilterCloudComponent().clearAssignee(); + await tasksCloudDemoPage.editTaskFilterCloudComponent().setStatusFilterDropDown('CREATED'); - tasksCloudDemoPage.taskListCloudComponent().getDataTable().waitForTableBody(); - tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(bothGroupsTaskName); + await tasksCloudDemoPage.taskListCloudComponent().getDataTable().waitForTableBody(); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(bothGroupsTaskName); }); - it('[C291993] Should NOT be able to find a group already selected', () => { - groupCloud.searchGroups(testGroup.name); - groupCloud.checkGroupIsDisplayed(testGroup.name); - groupCloud.selectGroupFromList(testGroup.name); - groupCloud.checkSelectedGroup(testGroup.name); + it('[C291993] Should NOT be able to find a group already selected', async () => { + await groupCloud.searchGroups(testGroup.name); + await groupCloud.checkGroupIsDisplayed(testGroup.name); + await groupCloud.selectGroupFromList(testGroup.name); + await groupCloud.checkSelectedGroup(testGroup.name); - groupCloud.searchGroups(testGroup.name); - groupCloud.checkGroupIsNotDisplayed(testGroup.name); + await groupCloud.searchGroups(testGroup.name); + await groupCloud.checkGroupIsNotDisplayed(testGroup.name); }); it('[C291995] Should be able to add a group previously removed', async () => { - groupCloud.searchGroups(testGroup.name); - groupCloud.checkGroupIsDisplayed(testGroup.name); - groupCloud.selectGroupFromList(testGroup.name); - groupCloud.checkSelectedGroup(testGroup.name); + await groupCloud.searchGroups(testGroup.name); + await groupCloud.checkGroupIsDisplayed(testGroup.name); + await groupCloud.selectGroupFromList(testGroup.name); + await groupCloud.checkSelectedGroup(testGroup.name); - groupCloud.removeSelectedGroup(testGroup.name); - groupCloud.checkGroupNotSelected(testGroup.name); + await groupCloud.removeSelectedGroup(testGroup.name); + await groupCloud.checkGroupNotSelected(testGroup.name); - groupCloud.searchGroups(testGroup.name); - groupCloud.checkGroupIsDisplayed(testGroup.name); - groupCloud.selectGroupFromList(testGroup.name); - groupCloud.checkSelectedGroup(testGroup.name); + await groupCloud.searchGroups(testGroup.name); + await groupCloud.checkGroupIsDisplayed(testGroup.name); + await groupCloud.selectGroupFromList(testGroup.name); + await groupCloud.checkSelectedGroup(testGroup.name); }); }); diff --git a/e2e/process-services-cloud/task-filters-cloud.e2e.ts b/e2e/process-services-cloud/task-filters-cloud.e2e.ts index 4051b67501..5989387f04 100644 --- a/e2e/process-services-cloud/task-filters-cloud.e2e.ts +++ b/e2e/process-services-cloud/task-filters-cloud.e2e.ts @@ -38,7 +38,7 @@ describe('Task filters cloud', () => { const newTask = StringUtil.generateRandomString(5), completedTask = StringUtil.generateRandomString(5); const simpleApp = resources.ACTIVITI7_APPS.SIMPLE_APP.name; - beforeAll(async(done) => { + beforeAll(async() => { await apiService.login(browser.params.identityAdmin.email, browser.params.identityAdmin.password); identityService = new IdentityService(apiService); @@ -53,24 +53,24 @@ describe('Task filters cloud', () => { browser.params.config.oauth2.host, browser.params.config.identityHost); await loginSSOPage.loginSSOIdentityService(testUser.email, testUser.password); - done(); + }); - afterAll(async(done) => { + afterAll(async() => { await apiService.login(browser.params.identityAdmin.email, browser.params.identityAdmin.password); await identityService.deleteIdentityUser(testUser.idIdentityService); - done(); + }); - beforeEach(() => { - navigationBarPage.navigateToProcessServicesCloudPage(); - appListCloudComponent.checkApsContainer(); - appListCloudComponent.goToApp(simpleApp); + beforeEach(async () => { + await navigationBarPage.navigateToProcessServicesCloudPage(); + await appListCloudComponent.checkApsContainer(); + await appListCloudComponent.goToApp(simpleApp); }); - it('[C290011] Should display default filters when an app is deployed', () => { - tasksCloudDemoPage.myTasksFilter().checkTaskFilterIsDisplayed(); - tasksCloudDemoPage.completedTasksFilter().checkTaskFilterIsDisplayed(); + it('[C290011] Should display default filters when an app is deployed', async () => { + await tasksCloudDemoPage.myTasksFilter().checkTaskFilterIsDisplayed(); + await tasksCloudDemoPage.completedTasksFilter().checkTaskFilterIsDisplayed(); }); it('[C290009] Should display default filters and created task', async () => { @@ -79,14 +79,14 @@ describe('Task filters cloud', () => { const task = await tasksService.createStandaloneTask(newTask, simpleApp); await tasksService.claimTask(task.entry.id, simpleApp); - tasksCloudDemoPage.completedTasksFilter().clickTaskFilter(); - expect(tasksCloudDemoPage.getActiveFilterName()).toBe('Completed Tasks'); - tasksCloudDemoPage.taskListCloudComponent().checkContentIsNotDisplayedByName(newTask); + await tasksCloudDemoPage.completedTasksFilter().clickTaskFilter(); + await expect(await tasksCloudDemoPage.getActiveFilterName()).toBe('Completed Tasks'); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsNotDisplayedByName(newTask); - tasksCloudDemoPage.myTasksFilter().clickTaskFilter(); - expect(tasksCloudDemoPage.getActiveFilterName()).toBe('My Tasks'); + await tasksCloudDemoPage.myTasksFilter().clickTaskFilter(); + await expect(await tasksCloudDemoPage.getActiveFilterName()).toBe('My Tasks'); - tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(newTask); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(newTask); }); it('[C289955] Should display task in Complete Tasks List when task is completed', async () => { @@ -96,19 +96,19 @@ describe('Task filters cloud', () => { await tasksService.claimTask(toBeCompletedTask.entry.id, simpleApp); await tasksService.completeTask(toBeCompletedTask.entry.id, simpleApp); - tasksCloudDemoPage.myTasksFilter().clickTaskFilter(); - expect(tasksCloudDemoPage.getActiveFilterName()).toBe('My Tasks'); - tasksCloudDemoPage.taskListCloudComponent().checkContentIsNotDisplayedByName(completedTask); + await tasksCloudDemoPage.myTasksFilter().clickTaskFilter(); + await expect(await tasksCloudDemoPage.getActiveFilterName()).toBe('My Tasks'); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsNotDisplayedByName(completedTask); - tasksCloudDemoPage.completedTasksFilter().clickTaskFilter(); - expect(tasksCloudDemoPage.getActiveFilterName()).toBe('Completed Tasks'); + await tasksCloudDemoPage.completedTasksFilter().clickTaskFilter(); + await expect(await tasksCloudDemoPage.getActiveFilterName()).toBe('Completed Tasks'); - tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(completedTask); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(completedTask); }); - it('[C291792] Should select the first task filter from the list as default', () => { + it('[C291792] Should select the first task filter from the list as default', async () => { - expect(tasksCloudDemoPage.firstFilterIsActive()).toBe(true); + await expect(await tasksCloudDemoPage.firstFilterIsActive()).toBe(true); }); }); diff --git a/e2e/process-services-cloud/task-form-cloud-component.e2e.ts b/e2e/process-services-cloud/task-form-cloud-component.e2e.ts index 0846840b5f..5279355704 100644 --- a/e2e/process-services-cloud/task-form-cloud-component.e2e.ts +++ b/e2e/process-services-cloud/task-form-cloud-component.e2e.ts @@ -27,7 +27,7 @@ import { SettingsPage, TaskHeaderCloudPage, TaskFormCloudComponent, - Widget, IdentityService + Widget, IdentityService, GroupIdentityService, QueryService } from '@alfresco/adf-testing'; import { NavigationBarPage } from '../pages/adf/navigationBarPage'; import { TasksCloudDemoPage } from '../pages/adf/demo-shell/process-services/tasksCloudDemoPage'; @@ -50,25 +50,71 @@ describe('Task form cloud component', () => { let processDefinitionService: ProcessDefinitionsService; let processInstancesService: ProcessInstancesService; let identityService: IdentityService; + let groupIdentityService: GroupIdentityService; - let completedTask, createdTask, assigneeTask, toBeCompletedTask, formValidationsTask, testUser; + let completedTask, createdTask, assigneeTask, toBeCompletedTask, formValidationsTask, testUser, formTaskId; const candidateBaseApp = resources.ACTIVITI7_APPS.CANDIDATE_BASE_APP.name; + const simpleApp = resources.ACTIVITI7_APPS.SIMPLE_APP.name; const completedTaskName = StringUtil.generateRandomString(), assignedTaskName = StringUtil.generateRandomString(); + const apiService = new ApiService(browser.params.config.oauth2.clientId, browser.params.config.bpmHost, browser.params.config.oauth2.host, browser.params.config.providers); - beforeAll(async (done) => { - const apiService = new ApiService(browser.params.config.oauth2.clientId, browser.params.config.bpmHost, browser.params.config.oauth2.host, browser.params.config.providers); + const visibilityConditionTasks = []; + + const tab = { + tabWithFields: 'tabWithFields', + tabFieldValue: 'tabBasicFieldValue', + tabVarValue: 'tabBasicVarValue', + tabVarField: 'tabBasicVarField', + tabFieldField: 'tabBasicFieldField', + tabVarVar: 'tabBasicVarVar', + tabFieldVar: 'tabBasicFieldVar', + tabNextOperators: 'tabNextOperators' + }; + + const widgets = { + textOneId: 'TextOne', + textTwoId: 'TextTwo', + textThreeId: 'TextThree', + textFourId: 'TextFour', + numberOneId: 'NumberOne' + }; + + const value = { + displayTab: 'showTab', + notDisplayTab: 'anythingElse' + }; + + beforeAll(async () => { await apiService.login(browser.params.identityAdmin.email, browser.params.identityAdmin.password); identityService = new IdentityService(apiService); + groupIdentityService = new GroupIdentityService(apiService); + testUser = await identityService.createIdentityUserWithRole(apiService, [identityService.ROLES.APS_USER]); + + const groupInfo = await groupIdentityService.getGroupInfoByGroupName('hr'); + await identityService.addUserToGroup(testUser.idIdentityService, groupInfo.id); await apiService.login(testUser.email, testUser.password); tasksService = new TasksService(apiService); + const queryService = new QueryService(apiService); createdTask = await tasksService.createStandaloneTask(StringUtil.generateRandomString(), candidateBaseApp); - assigneeTask = await tasksService.createStandaloneTask(StringUtil.generateRandomString(), candidateBaseApp); + assigneeTask = await tasksService.createStandaloneTask(StringUtil.generateRandomString(), candidateBaseApp); await tasksService.claimTask(assigneeTask.entry.id, candidateBaseApp); + for (let i = 0; i < 3; i++) { + visibilityConditionTasks[i] = await tasksService.createStandaloneTaskWithForm(StringUtil.generateRandomString(), + simpleApp, resources.ACTIVITI7_APPS.SIMPLE_APP.forms.tabVisibilityFields.id); + await tasksService.claimTask(visibilityConditionTasks[i].entry.id, simpleApp); + } + + for (let i = 3; i < 6; i++) { + visibilityConditionTasks[i] = await tasksService.createStandaloneTaskWithForm(StringUtil.generateRandomString(), + simpleApp, resources.ACTIVITI7_APPS.SIMPLE_APP.forms.tabVisibilityVars.id); + await tasksService.claimTask(visibilityConditionTasks[i].entry.id, simpleApp); + } + formValidationsTask = await tasksService.createStandaloneTaskWithForm(StringUtil.generateRandomString(), candidateBaseApp, formToTestValidationsKey); await tasksService.claimTask(formValidationsTask.entry.id, candidateBaseApp); @@ -81,169 +127,384 @@ describe('Task form cloud component', () => { processDefinitionService = new ProcessDefinitionsService(apiService); - const processDefinition = await processDefinitionService + let processDefinition = await processDefinitionService .getProcessDefinitionByName(resources.ACTIVITI7_APPS.CANDIDATE_BASE_APP.processes.candidateUserProcess, candidateBaseApp); processInstancesService = new ProcessInstancesService(apiService); await processInstancesService.createProcessInstance(processDefinition.entry.key, candidateBaseApp); + processDefinition = await processDefinitionService.getProcessDefinitionByName('dropdownrestprocess', simpleApp); + const formProcess = await processInstancesService.createProcessInstance(processDefinition.entry.key, simpleApp); + const formTasks = await queryService.getProcessInstanceTasks(formProcess.entry.id, simpleApp); + formTaskId = formTasks.list.entries[0].entry.id; + await settingsPage.setProviderBpmSso( browser.params.config.bpmHost, browser.params.config.oauth2.host, browser.params.config.identityHost); await loginSSOPage.loginSSOIdentityService(testUser.email, testUser.password); - done(); + }, 5 * 60 * 1000); - afterAll(async (done) => { + beforeEach(async () => { + await navigationBarPage.navigateToProcessServicesCloudPage(); + await appListCloudComponent.checkApsContainer(); + }); + + afterAll(async () => { try { - await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); - await identityService.deleteIdentityUser(testUser.id); + await apiService.login(browser.params.identityAdmin.email, browser.params.identityAdmin.password); + await identityService.deleteIdentityUser(testUser.idIdentityService); } catch (error) { } - await this.alfrescoJsApi.logout(); - browser.executeScript('window.sessionStorage.clear();'); - browser.executeScript('window.localStorage.clear();'); - done(); + await browser.executeScript('window.sessionStorage.clear();'); + await browser.executeScript('window.localStorage.clear();'); }); - it('[C307032] Should display the appropriate title for the unclaim option of a Task', async () => { - navigationBarPage.navigateToProcessServicesCloudPage(); - appListCloudComponent.checkApsContainer(); - appListCloudComponent.goToApp(candidateBaseApp); + it('[C310366] Should refresh buttons and form after an action is complete', async () => { + await appListCloudComponent.goToApp(simpleApp); await tasksCloudDemoPage.myTasksFilter().clickTaskFilter(); - tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(assigneeTask.entry.name); - tasksCloudDemoPage.taskListCloudComponent().selectRow(assigneeTask.entry.name); - expect(taskFormCloudComponent.getReleaseButtonText()).toBe('RELEASE'); + await expect(tasksCloudDemoPage.getActiveFilterName()).toBe('My Tasks'); + await tasksCloudDemoPage.editTaskFilterCloudComponent().openFilter(); + await tasksCloudDemoPage.editTaskFilterCloudComponent().clearAssignee(); + await tasksCloudDemoPage.editTaskFilterCloudComponent().setStatusFilterDropDown('CREATED'); + + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedById(formTaskId); + await tasksCloudDemoPage.taskListCloudComponent().selectRowByTaskId(formTaskId); + + await taskFormCloudComponent.checkFormIsReadOnly(); + await taskFormCloudComponent.checkClaimButtonIsDisplayed(); + await taskFormCloudComponent.checkCompleteButtonIsNotDisplayed(); + await taskFormCloudComponent.checkReleaseButtonIsNotDisplayed(); + + await taskFormCloudComponent.clickClaimButton(); + await taskFormCloudComponent.checkFormIsDisplayed(); + + await taskFormCloudComponent.checkFormIsNotReadOnly(); + await taskFormCloudComponent.checkClaimButtonIsNotDisplayed(); + await taskFormCloudComponent.checkCompleteButtonIsDisplayed(); + await taskFormCloudComponent.checkReleaseButtonIsDisplayed(); + + await taskFormCloudComponent.clickCompleteButton(); + await tasksCloudDemoPage.completedTasksFilter().clickTaskFilter(); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedById(formTaskId); + await tasksCloudDemoPage.taskListCloudComponent().selectRowByTaskId(formTaskId); + + await taskFormCloudComponent.checkFormIsReadOnly(); + await taskFormCloudComponent.checkClaimButtonIsNotDisplayed(); + await taskFormCloudComponent.checkCompleteButtonIsNotDisplayed(); + await taskFormCloudComponent.checkReleaseButtonIsNotDisplayed(); + await taskFormCloudComponent.checkCancelButtonIsDisplayed(); }); - it('[C310142] Empty content is displayed when having a task without form', async () => { - navigationBarPage.navigateToProcessServicesCloudPage(); - appListCloudComponent.checkApsContainer(); - appListCloudComponent.goToApp(candidateBaseApp); - await tasksCloudDemoPage.myTasksFilter().clickTaskFilter(); - tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(assigneeTask.entry.name); - tasksCloudDemoPage.taskListCloudComponent().selectRow(assigneeTask.entry.name); - taskFormCloudComponent.checkFormIsNotDisplayed(); - expect(taskFormCloudComponent.getFormTitle()).toBe(assigneeTask.entry.name); - taskFormCloudComponent.checkFormContentIsEmpty(); - expect(taskFormCloudComponent.getEmptyFormContentTitle()).toBe(`No form available`); - expect(taskFormCloudComponent.getEmptyFormContentSubtitle()).toBe(`Attach a form that can be viewed later`); - }); + describe('Candidate Base App', () => { - it('[C310199] Should not be able to complete a task when required field is empty or invalid data is added to a field', async () => { - navigationBarPage.navigateToProcessServicesCloudPage(); - appListCloudComponent.checkApsContainer(); - appListCloudComponent.goToApp(candidateBaseApp); - await tasksCloudDemoPage.myTasksFilter().clickTaskFilter(); - tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(formValidationsTask.entry.name); - tasksCloudDemoPage.taskListCloudComponent().selectRow(formValidationsTask.entry.name); - taskFormCloudComponent.checkFormIsDisplayed(); - taskFormCloudComponent.formFields().checkFormIsDisplayed(); - taskFormCloudComponent.formFields().checkWidgetIsVisible('Text0tma8h'); - taskFormCloudComponent.formFields().checkWidgetIsVisible('Date0m1moq'); - taskFormCloudComponent.formFields().checkWidgetIsVisible('Number0klykr'); - taskFormCloudComponent.formFields().checkWidgetIsVisible('Amount0mtp1h'); + beforeEach(async () => { + await appListCloudComponent.goToApp(candidateBaseApp); + }); - expect(taskFormCloudComponent.getCompleteButton().isEnabled()).toBe(false); - widget.textWidget().setValue('Text0tma8h', 'Some random text'); - expect(taskFormCloudComponent.getCompleteButton().isEnabled()).toBe(true); + it('[C307032] Should display the appropriate title for the unclaim option of a Task', async () => { + await tasksCloudDemoPage.myTasksFilter().clickTaskFilter(); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(assigneeTask.entry.name); + await tasksCloudDemoPage.taskListCloudComponent().selectRow(assigneeTask.entry.name); + await expect(await taskFormCloudComponent.getReleaseButtonText()).toBe('RELEASE'); + }); - widget.dateWidget().setDateInput('Date0m1moq', 'invalid date'); - await browser.actions().sendKeys(protractor.Key.ENTER).perform(); - expect(taskFormCloudComponent.getCompleteButton().isEnabled()).toBe(false); + it('[C310142] Empty content is displayed when having a task without form', async () => { + await tasksCloudDemoPage.myTasksFilter().clickTaskFilter(); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(assigneeTask.entry.name); + await tasksCloudDemoPage.taskListCloudComponent().selectRow(assigneeTask.entry.name); + await taskFormCloudComponent.checkFormIsNotDisplayed(); + await expect(await taskFormCloudComponent.getFormTitle()).toBe(assigneeTask.entry.name); + await taskFormCloudComponent.checkFormContentIsEmpty(); + await expect(await taskFormCloudComponent.getEmptyFormContentTitle()).toBe(`No form available`); + await expect(await taskFormCloudComponent.getEmptyFormContentSubtitle()).toBe(`Attach a form that can be viewed later`); + }); - widget.dateWidget().setDateInput('Date0m1moq', '20-10-2018'); - await browser.actions().sendKeys(protractor.Key.ENTER).perform(); - expect(taskFormCloudComponent.getCompleteButton().isEnabled()).toBe(true); + it('[C310199] Should not be able to complete a task when required field is empty or invalid data is added to a field', async () => { + await tasksCloudDemoPage.myTasksFilter().clickTaskFilter(); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(formValidationsTask.entry.name); + await tasksCloudDemoPage.taskListCloudComponent().selectRow(formValidationsTask.entry.name); + await taskFormCloudComponent.checkFormIsDisplayed(); + await taskFormCloudComponent.formFields().checkFormIsDisplayed(); + await taskFormCloudComponent.formFields().checkWidgetIsVisible('Text0tma8h'); + await taskFormCloudComponent.formFields().checkWidgetIsVisible('Date0m1moq'); + await taskFormCloudComponent.formFields().checkWidgetIsVisible('Number0klykr'); + await taskFormCloudComponent.formFields().checkWidgetIsVisible('Amount0mtp1h'); - widget.numberWidget().setFieldValue('Number0klykr', 'invalid number'); - expect(taskFormCloudComponent.getCompleteButton().isEnabled()).toBe(false); + await expect(await taskFormCloudComponent.isCompleteButtonEnabled()).toBe(false); + await widget.textWidget().setValue('Text0tma8h', 'Some random text'); + await expect(await taskFormCloudComponent.isCompleteButtonEnabled()).toBe(true); - widget.numberWidget().setFieldValue('Number0klykr', '26'); - expect(taskFormCloudComponent.getCompleteButton().isEnabled()).toBe(true); + await widget.dateWidget().setDateInput('Date0m1moq', 'invalid date'); + await browser.actions().sendKeys(protractor.Key.ENTER).perform(); + await expect(await taskFormCloudComponent.isCompleteButtonEnabled()).toBe(false); - widget.amountWidget().setFieldValue('Amount0mtp1h', 'invalid amount'); - expect(taskFormCloudComponent.getCompleteButton().isEnabled()).toBe(false); + await widget.dateWidget().setDateInput('Date0m1moq', '20-10-2018'); + await browser.actions().sendKeys(protractor.Key.ENTER).perform(); + await expect(await taskFormCloudComponent.isCompleteButtonEnabled()).toBe(true); - widget.amountWidget().setFieldValue('Amount0mtp1h', '660'); - expect(taskFormCloudComponent.getCompleteButton().isEnabled()).toBe(true); + await widget.numberWidget().setFieldValue('Number0klykr', 'invalid number'); + await expect(await taskFormCloudComponent.isCompleteButtonEnabled()).toBe(false); - }); + await widget.numberWidget().setFieldValue('Number0klykr', '26'); + await expect(await taskFormCloudComponent.isCompleteButtonEnabled()).toBe(true); - describe('Complete task - cloud directive', () => { + await widget.amountWidget().setFieldValue('Amount0mtp1h', 'invalid amount'); + await expect(await taskFormCloudComponent.isCompleteButtonEnabled()).toBe(false); - beforeEach((done) => { - navigationBarPage.navigateToProcessServicesCloudPage(); - appListCloudComponent.checkApsContainer(); - appListCloudComponent.goToApp(candidateBaseApp); - done(); + await widget.amountWidget().setFieldValue('Amount0mtp1h', '660'); + await expect(await taskFormCloudComponent.isCompleteButtonEnabled()).toBe(true); }); it('[C307093] Complete button is not displayed when the task is already completed', async () => { await tasksCloudDemoPage.completedTasksFilter().clickTaskFilter(); - expect(tasksCloudDemoPage.getActiveFilterName()).toBe('Completed Tasks'); - tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(completedTaskName); - tasksCloudDemoPage.taskListCloudComponent().selectRow(completedTaskName); - taskHeaderCloudPage.checkTaskPropertyListIsDisplayed(); - taskFormCloudComponent.checkCompleteButtonIsNotDisplayed(); + await expect(await tasksCloudDemoPage.getActiveFilterName()).toBe('Completed Tasks'); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(completedTaskName); + await tasksCloudDemoPage.taskListCloudComponent().selectRow(completedTaskName); + await taskHeaderCloudPage.checkTaskPropertyListIsDisplayed(); + await taskFormCloudComponent.checkCompleteButtonIsNotDisplayed(); }); it('[C307095] Task can not be completed by owner user', async () => { await tasksCloudDemoPage.myTasksFilter().clickTaskFilter(); - expect(tasksCloudDemoPage.getActiveFilterName()).toBe('My Tasks'); - await tasksCloudDemoPage.editTaskFilterCloudComponent().clickCustomiseFilterHeader(); - browser.driver.sleep(1000); - tasksCloudDemoPage.editTaskFilterCloudComponent().clearAssignee().setStatusFilterDropDown('CREATED'); + await expect(await tasksCloudDemoPage.getActiveFilterName()).toBe('My Tasks'); + await tasksCloudDemoPage.editTaskFilterCloudComponent().openFilter(); - tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(createdTask.entry.name); - tasksCloudDemoPage.taskListCloudComponent().selectRow(createdTask.entry.name); - taskHeaderCloudPage.checkTaskPropertyListIsDisplayed(); - taskFormCloudComponent.checkCompleteButtonIsNotDisplayed(); + await browser.driver.sleep(1000); + + await tasksCloudDemoPage.editTaskFilterCloudComponent().clearAssignee(); + await tasksCloudDemoPage.editTaskFilterCloudComponent().setStatusFilterDropDown('CREATED'); + + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(createdTask.entry.name); + await tasksCloudDemoPage.taskListCloudComponent().selectRow(createdTask.entry.name); + await taskHeaderCloudPage.checkTaskPropertyListIsDisplayed(); + await taskFormCloudComponent.checkCompleteButtonIsNotDisplayed(); }); it('[C307110] Task list is displayed after clicking on Cancel button', async () => { await tasksCloudDemoPage.myTasksFilter().clickTaskFilter(); - expect(tasksCloudDemoPage.getActiveFilterName()).toBe('My Tasks'); + await expect(await tasksCloudDemoPage.getActiveFilterName()).toBe('My Tasks'); - tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(assigneeTask.entry.name); - tasksCloudDemoPage.taskListCloudComponent().selectRow(assigneeTask.entry.name); - taskHeaderCloudPage.checkTaskPropertyListIsDisplayed(); - taskFormCloudComponent.clickCancelButton(); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(assigneeTask.entry.name); + await tasksCloudDemoPage.taskListCloudComponent().selectRow(assigneeTask.entry.name); + await taskHeaderCloudPage.checkTaskPropertyListIsDisplayed(); + await taskFormCloudComponent.clickCancelButton(); - expect(tasksCloudDemoPage.getActiveFilterName()).toBe('My Tasks'); - tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(assigneeTask.entry.name); + await expect(await tasksCloudDemoPage.getActiveFilterName()).toBe('My Tasks'); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(assigneeTask.entry.name); }); it('[C307094] Standalone Task can be completed by a user that is owner and assignee', async () => { await tasksCloudDemoPage.myTasksFilter().clickTaskFilter(); - expect(tasksCloudDemoPage.getActiveFilterName()).toBe('My Tasks'); + await expect(await tasksCloudDemoPage.getActiveFilterName()).toBe('My Tasks'); - tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(toBeCompletedTask.entry.name); - tasksCloudDemoPage.taskListCloudComponent().selectRow(toBeCompletedTask.entry.name); - taskHeaderCloudPage.checkTaskPropertyListIsDisplayed(); - taskFormCloudComponent.checkCompleteButtonIsDisplayed().clickCompleteButton(); - tasksCloudDemoPage.taskListCloudComponent().checkContentIsNotDisplayedByName(toBeCompletedTask.entry.name); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(toBeCompletedTask.entry.name); + await tasksCloudDemoPage.taskListCloudComponent().selectRow(toBeCompletedTask.entry.name); + await taskHeaderCloudPage.checkTaskPropertyListIsDisplayed(); + await taskFormCloudComponent.checkCompleteButtonIsDisplayed(); + await taskFormCloudComponent.clickCompleteButton(); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsNotDisplayedByName(toBeCompletedTask.entry.name); await tasksCloudDemoPage.completedTasksFilter().clickTaskFilter(); - tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(toBeCompletedTask.entry.name); - taskFormCloudComponent.checkCompleteButtonIsNotDisplayed(); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(toBeCompletedTask.entry.name); + await taskFormCloudComponent.checkCompleteButtonIsNotDisplayed(); }); - it('[C307111] Task of a process can be completed by a user that is owner and assignee', () => { - tasksCloudDemoPage.myTasksFilter().clickTaskFilter(); - expect(tasksCloudDemoPage.getActiveFilterName()).toBe('My Tasks'); + it('[C307111] Task of a process can be completed by a user that is owner and assignee', async () => { + await tasksCloudDemoPage.myTasksFilter().clickTaskFilter(); + await expect(await tasksCloudDemoPage.getActiveFilterName()).toBe('My Tasks'); - tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(completedTask.entry.name); - tasksCloudDemoPage.taskListCloudComponent().selectRow(completedTask.entry.name); - taskHeaderCloudPage.checkTaskPropertyListIsDisplayed(); - taskFormCloudComponent.checkCompleteButtonIsDisplayed().clickCompleteButton(); - tasksCloudDemoPage.taskListCloudComponent().checkContentIsNotDisplayedByName(completedTask.entry.name); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(completedTask.entry.name); + await tasksCloudDemoPage.taskListCloudComponent().selectRow(completedTask.entry.name); + await taskHeaderCloudPage.checkTaskPropertyListIsDisplayed(); + await taskFormCloudComponent.checkCompleteButtonIsDisplayed(); + await taskFormCloudComponent.clickCompleteButton(); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsNotDisplayedByName(completedTask.entry.name); - tasksCloudDemoPage.completedTasksFilter().clickTaskFilter(); - tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(completedTask.entry.name); - taskFormCloudComponent.checkCompleteButtonIsNotDisplayed(); + await tasksCloudDemoPage.completedTasksFilter().clickTaskFilter(); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(completedTask.entry.name); + await taskFormCloudComponent.checkCompleteButtonIsNotDisplayed(); }); }); + describe('Complete task with form - cloud directive', () => { + + beforeEach(async () => { + await navigationBarPage.navigateToProcessServicesCloudPage(); + await appListCloudComponent.checkApsContainer(); + await appListCloudComponent.goToApp(simpleApp); + }); + + it('[C315174] Should be able to complete a standalone task with visible tab with empty value for field', async () => { + await tasksCloudDemoPage.myTasksFilter().clickTaskFilter(); + await expect(await tasksCloudDemoPage.getActiveFilterName()).toBe('My Tasks'); + + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(visibilityConditionTasks[0].entry.name); + await tasksCloudDemoPage.taskListCloudComponent().selectRow(visibilityConditionTasks[0].entry.name); + await taskHeaderCloudPage.checkTaskPropertyListIsDisplayed(); + + await widget.tab().checkTabIsDisplayedByLabel(tab.tabWithFields); + await widget.tab().checkTabIsNotDisplayedByLabel(tab.tabFieldValue); + await widget.textWidget().isWidgetVisible(widgets.textOneId); + await widget.textWidget().isWidgetNotVisible(widgets.textTwoId); + + await widget.textWidget().setValue(widgets.textOneId, value.displayTab); + await widget.tab().checkTabIsDisplayedByLabel(tab.tabWithFields); + await widget.tab().checkTabIsDisplayedByLabel(tab.tabFieldValue); + + await taskFormCloudComponent.clickCompleteButton(); + await expect(await tasksCloudDemoPage.getActiveFilterName()).toBe('My Tasks'); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsNotDisplayedByName(visibilityConditionTasks[0].entry.name); + + await tasksCloudDemoPage.completedTasksFilter().clickTaskFilter(); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(visibilityConditionTasks[0].entry.name); + await tasksCloudDemoPage.taskListCloudComponent().selectRow(visibilityConditionTasks[0].entry.name); + await widget.tab().checkTabIsDisplayedByLabel(tab.tabWithFields); + await widget.tab().checkTabIsDisplayedByLabel(tab.tabFieldValue); + }); + + it('[C315177] Should be able to complete a standalone task with invisible tab with invalid value for field', async () => { + await tasksCloudDemoPage.myTasksFilter().clickTaskFilter(); + await expect(await tasksCloudDemoPage.getActiveFilterName()).toBe('My Tasks'); + + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(visibilityConditionTasks[1].entry.name); + await tasksCloudDemoPage.taskListCloudComponent().selectRow(visibilityConditionTasks[1].entry.name); + await taskHeaderCloudPage.checkTaskPropertyListIsDisplayed(); + + await widget.tab().checkTabIsDisplayedByLabel(tab.tabWithFields); + await widget.tab().checkTabIsDisplayedByLabel(tab.tabFieldField); + await widget.textWidget().isWidgetVisible(widgets.textOneId); + + await widget.textWidget().setValue(widgets.textOneId, value.displayTab); + await widget.textWidget().setValue(widgets.textThreeId, value.displayTab); + await widget.tab().checkTabIsDisplayedByLabel(tab.tabWithFields); + await widget.tab().checkTabIsDisplayedByLabel(tab.tabFieldField); + await widget.tab().clickTabByLabel(tab.tabFieldField); + await widget.textWidget().isWidgetVisible(widgets.numberOneId); + await widget.textWidget().setValue(widgets.numberOneId, value.displayTab); + + await widget.tab().clickTabByLabel(tab.tabWithFields); + await widget.textWidget().setValue(widgets.textOneId, value.notDisplayTab); + await widget.tab().checkTabIsNotDisplayedByLabel(tab.tabFieldField); + + await taskFormCloudComponent.clickCompleteButton(); + await expect(await tasksCloudDemoPage.getActiveFilterName()).toBe('My Tasks'); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsNotDisplayedByName(visibilityConditionTasks[1].entry.name); + + await tasksCloudDemoPage.completedTasksFilter().clickTaskFilter(); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(visibilityConditionTasks[1].entry.name); + await tasksCloudDemoPage.taskListCloudComponent().selectRow(visibilityConditionTasks[1].entry.name); + await widget.tab().checkTabIsDisplayedByLabel(tab.tabWithFields); + await widget.tab().checkTabIsNotDisplayedByLabel(tab.tabFieldField); + }); + + it('[C315178] Should be able to complete a standalone task with invisible tab with valid value', async () => { + await tasksCloudDemoPage.myTasksFilter().clickTaskFilter(); + await expect(await tasksCloudDemoPage.getActiveFilterName()).toBe('My Tasks'); + + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(visibilityConditionTasks[2].entry.name); + await tasksCloudDemoPage.taskListCloudComponent().selectRow(visibilityConditionTasks[2].entry.name); + await taskHeaderCloudPage.checkTaskPropertyListIsDisplayed(); + + await widget.tab().checkTabIsDisplayedByLabel(tab.tabWithFields); + await widget.tab().checkTabIsNotDisplayedByLabel(tab.tabFieldVar); + await widget.textWidget().isWidgetVisible(widgets.textOneId); + await widget.textWidget().isWidgetNotVisible(widgets.textFourId); + + await widget.textWidget().setValue(widgets.textOneId, value.displayTab); + await widget.tab().checkTabIsDisplayedByLabel(tab.tabFieldVar); + await widget.tab().clickTabByLabel(tab.tabFieldVar); + await widget.textWidget().isWidgetVisible(widgets.textFourId); + await widget.textWidget().setValue(widgets.textFourId, value.displayTab); + + await widget.tab().clickTabByLabel(tab.tabWithFields); + await widget.textWidget().setValue(widgets.textOneId, value.notDisplayTab); + await widget.tab().checkTabIsNotDisplayedByLabel(tab.tabFieldVar); + + await taskFormCloudComponent.clickCompleteButton(); + await expect(await tasksCloudDemoPage.getActiveFilterName()).toBe('My Tasks'); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsNotDisplayedByName(visibilityConditionTasks[2].entry.name); + + await tasksCloudDemoPage.completedTasksFilter().clickTaskFilter(); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(visibilityConditionTasks[2].entry.name); + await tasksCloudDemoPage.taskListCloudComponent().selectRow(visibilityConditionTasks[2].entry.name); + await widget.tab().checkTabIsDisplayedByLabel(tab.tabWithFields); + await widget.tab().checkTabIsNotDisplayedByLabel(tab.tabFieldVar); + }); + + it('[C315175] Should be able to complete a standalone task with invisible tab with empty value for field', async () => { + await tasksCloudDemoPage.myTasksFilter().clickTaskFilter(); + await expect(await tasksCloudDemoPage.getActiveFilterName()).toBe('My Tasks'); + + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(visibilityConditionTasks[3].entry.name); + await tasksCloudDemoPage.taskListCloudComponent().selectRow(visibilityConditionTasks[3].entry.name); + await taskHeaderCloudPage.checkTaskPropertyListIsDisplayed(); + + await widget.tab().checkTabIsDisplayedByLabel(tab.tabWithFields); + await widget.tab().checkTabIsNotDisplayedByLabel(tab.tabVarValue); + await widget.textWidget().isWidgetVisible(widgets.textOneId); + await widget.textWidget().isWidgetNotVisible(widgets.textTwoId); + + await taskFormCloudComponent.clickCompleteButton(); + await expect(await tasksCloudDemoPage.getActiveFilterName()).toBe('My Tasks'); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsNotDisplayedByName(visibilityConditionTasks[3].entry.name); + + await tasksCloudDemoPage.completedTasksFilter().clickTaskFilter(); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(visibilityConditionTasks[3].entry.name); + await tasksCloudDemoPage.taskListCloudComponent().selectRow(visibilityConditionTasks[3].entry.name); + await widget.tab().checkTabIsDisplayedByLabel(tab.tabWithFields); + await widget.tab().checkTabIsNotDisplayedByLabel(tab.tabVarValue); + }); + + it('[C315176] Should not be able to complete a standalone task with visible tab with invalid value for field', async () => { + await tasksCloudDemoPage.myTasksFilter().clickTaskFilter(); + await expect(await tasksCloudDemoPage.getActiveFilterName()).toBe('My Tasks'); + + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(visibilityConditionTasks[4].entry.name); + await tasksCloudDemoPage.taskListCloudComponent().selectRow(visibilityConditionTasks[4].entry.name); + await taskHeaderCloudPage.checkTaskPropertyListIsDisplayed(); + + await widget.tab().checkTabIsDisplayedByLabel(tab.tabWithFields); + await widget.tab().checkTabIsNotDisplayedByLabel(tab.tabVarField); + await widget.textWidget().isWidgetVisible(widgets.textOneId); + await widget.textWidget().isWidgetNotVisible(widgets.numberOneId); + + await widget.textWidget().setValue(widgets.textOneId, value.displayTab); + await widget.tab().checkTabIsDisplayedByLabel(tab.tabVarField); + + await widget.tab().clickTabByLabel(tab.tabVarField); + await widget.textWidget().setValue(widgets.numberOneId, value.displayTab); + + await expect(await taskFormCloudComponent.isCompleteButtonEnabled()).toEqual(false); + }); + + it('[C315179] Should be able to complete a standalone task with visible tab with valid value for field', async () => { + await tasksCloudDemoPage.myTasksFilter().clickTaskFilter(); + await expect(await tasksCloudDemoPage.getActiveFilterName()).toBe('My Tasks'); + + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(visibilityConditionTasks[5].entry.name); + await tasksCloudDemoPage.taskListCloudComponent().selectRow(visibilityConditionTasks[5].entry.name); + await taskHeaderCloudPage.checkTaskPropertyListIsDisplayed(); + + await widget.tab().checkTabIsDisplayedByLabel(tab.tabWithFields); + await widget.tab().checkTabIsDisplayedByLabel(tab.tabVarVar); + await widget.textWidget().isWidgetVisible(widgets.textOneId); + + await widget.tab().clickTabByLabel(tab.tabVarVar); + await widget.textWidget().setValue(widgets.textThreeId, value.displayTab); + + await taskFormCloudComponent.clickCompleteButton(); + await expect(await tasksCloudDemoPage.getActiveFilterName()).toBe('My Tasks'); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsNotDisplayedByName(visibilityConditionTasks[5].entry.name); + + await tasksCloudDemoPage.completedTasksFilter().clickTaskFilter(); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(visibilityConditionTasks[5].entry.name); + await tasksCloudDemoPage.taskListCloudComponent().selectRow(visibilityConditionTasks[5].entry.name); + await widget.tab().checkTabIsDisplayedByLabel(tab.tabWithFields); + await widget.tab().checkTabIsDisplayedByLabel(tab.tabVarVar); + }); + + }); + }); diff --git a/e2e/process-services-cloud/task-header-cloud.e2e.ts b/e2e/process-services-cloud/task-header-cloud.e2e.ts index 1354ed6338..dcf620d549 100644 --- a/e2e/process-services-cloud/task-header-cloud.e2e.ts +++ b/e2e/process-services-cloud/task-header-cloud.e2e.ts @@ -55,7 +55,7 @@ describe('Task Header cloud component', () => { let identityService: IdentityService; let groupIdentityService: GroupIdentityService; - beforeAll(async (done) => { + beforeAll(async () => { await apiService.login(browser.params.identityAdmin.email, browser.params.identityAdmin.password); identityService = new IdentityService(apiService); groupIdentityService = new GroupIdentityService(apiService); @@ -91,82 +91,77 @@ describe('Task Header cloud component', () => { browser.params.config.oauth2.host, browser.params.config.identityHost); await loginSSOPage.loginSSOIdentityService(testUser.email, testUser.password); - done(); + }); - afterAll(async (done) => { + afterAll(async () => { await apiService.login(browser.params.identityAdmin.email, browser.params.identityAdmin.password); await identityService.deleteIdentityUser(testUser.idIdentityService); - done(); }); - beforeEach(() => { - navigationBarPage.navigateToProcessServicesCloudPage(); - appListCloudComponent.checkApsContainer(); - appListCloudComponent.goToApp(simpleApp); + beforeEach(async () => { + await navigationBarPage.navigateToProcessServicesCloudPage(); + await appListCloudComponent.checkApsContainer(); + await appListCloudComponent.goToApp(simpleApp); }); - it('[C291943] Should display task details for assigned task', () => { - tasksCloudDemoPage.myTasksFilter().clickTaskFilter(); - tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(basicCreatedTaskName); - tasksCloudDemoPage.taskListCloudComponent().selectRow(basicCreatedTaskName); - expect(taskHeaderCloudPage.getId()).toEqual(basicCreatedTask.entry.id); - expect(taskHeaderCloudPage.getDescription()) + it('[C291943] Should display task details for assigned task', async () => { + await tasksCloudDemoPage.myTasksFilter().clickTaskFilter(); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(basicCreatedTaskName); + await tasksCloudDemoPage.taskListCloudComponent().selectRow(basicCreatedTaskName); + await expect(await taskHeaderCloudPage.getId()).toEqual(basicCreatedTask.entry.id); + await expect(await taskHeaderCloudPage.getDescription()) .toEqual(basicCreatedTask.entry.description === null ? CONSTANTS.TASK_DETAILS.NO_DESCRIPTION : basicCreatedTask.entry.description); - expect(taskHeaderCloudPage.getStatus()).toEqual(basicCreatedTask.entry.status); - expect(taskHeaderCloudPage.getPriority()).toEqual(basicCreatedTask.entry.priority === 0 ? '' : basicCreatedTask.entry.priority.toString()); - expect(taskHeaderCloudPage.getCategory()).toEqual(!basicCreatedTask.entry.category ? + await expect(await taskHeaderCloudPage.getStatus()).toEqual(basicCreatedTask.entry.status); + await expect(await taskHeaderCloudPage.getPriority()).toEqual(basicCreatedTask.entry.priority === 0 ? '' : basicCreatedTask.entry.priority.toString()); + await expect(await taskHeaderCloudPage.getCategory()).toEqual(!basicCreatedTask.entry.category ? CONSTANTS.TASK_DETAILS.NO_CATEGORY : basicCreatedTask.entry.category); - expect(taskHeaderCloudPage.getDueDate()).toEqual(basicCreatedTask.entry.dueDate === null ? + await expect(await taskHeaderCloudPage.getDueDate()).toEqual(basicCreatedTask.entry.dueDate === null ? CONSTANTS.TASK_DETAILS.NO_DATE : basicCreatedDate); - expect(taskHeaderCloudPage.getEndDate()).toEqual(''); - expect(taskHeaderCloudPage.getCreated()).toEqual(basicCreatedDate); - expect(taskHeaderCloudPage.getAssignee()).toEqual(basicCreatedTask.entry.assignee === null ? '' : basicCreatedTask.entry.assignee); - expect(taskHeaderCloudPage.getParentName()).toEqual(CONSTANTS.TASK_DETAILS.NO_PARENT); - expect(taskHeaderCloudPage.getParentTaskId()) - .toEqual(basicCreatedTask.entry.parentTaskId === null ? '' : basicCreatedTask.entry.parentTaskId); + await expect(await taskHeaderCloudPage.getEndDate()).toEqual(''); + await expect(await taskHeaderCloudPage.getCreated()).toEqual(basicCreatedDate); + await expect(await taskHeaderCloudPage.getAssignee()).toEqual(basicCreatedTask.entry.assignee === null ? '' : basicCreatedTask.entry.assignee); + await expect(await taskHeaderCloudPage.getParentName()).toEqual(CONSTANTS.TASK_DETAILS.NO_PARENT); }); - it('[C291944] Should display task details for completed task', () => { - tasksCloudDemoPage.myTasksFilter().clickTaskFilter(); - tasksCloudDemoPage.completedTasksFilter().clickTaskFilter(); - tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(completedTaskName); - tasksCloudDemoPage.taskListCloudComponent().selectRow(completedTaskName); - expect(taskHeaderCloudPage.getId()).toEqual(completedTask.entry.id); - expect(taskHeaderCloudPage.getDescription()) + it('[C291944] Should display task details for completed task', async () => { + await tasksCloudDemoPage.myTasksFilter().clickTaskFilter(); + await tasksCloudDemoPage.completedTasksFilter().clickTaskFilter(); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(completedTaskName); + await tasksCloudDemoPage.taskListCloudComponent().selectRow(completedTaskName); + await expect(await taskHeaderCloudPage.getId()).toEqual(completedTask.entry.id); + await expect(await taskHeaderCloudPage.getDescription()) .toEqual(completedTask.entry.description === null ? CONSTANTS.TASK_DETAILS.NO_DESCRIPTION : completedTask.entry.description); - expect(taskHeaderCloudPage.getStatus()).toEqual(completedTask.entry.status); - expect(taskHeaderCloudPage.getPriority()).toEqual(completedTask.entry.priority === '0' ? '' : completedTask.entry.priority.toString()); - expect(taskHeaderCloudPage.getCategory()).toEqual(!completedTask.entry.category ? + await expect(await taskHeaderCloudPage.getStatus()).toEqual(completedTask.entry.status); + await expect(await taskHeaderCloudPage.getPriority()).toEqual(completedTask.entry.priority === '0' ? '' : completedTask.entry.priority.toString()); + await expect(await taskHeaderCloudPage.getCategory()).toEqual(!completedTask.entry.category ? CONSTANTS.TASK_DETAILS.NO_CATEGORY : completedTask.entry.category); - expect(taskHeaderCloudPage.getDueDate()).toEqual(completedTask.entry.dueDate === null ? + await expect(await taskHeaderCloudPage.getDueDate()).toEqual(completedTask.entry.dueDate === null ? CONSTANTS.TASK_DETAILS.NO_DATE : completedCreatedDate); - expect(taskHeaderCloudPage.getEndDate()).toEqual(completedEndDate); - expect(taskHeaderCloudPage.getCreated()).toEqual(completedCreatedDate); - expect(taskHeaderCloudPage.getAssignee()).toEqual(completedTask.entry.assignee === null ? '' : completedTask.entry.assignee); - expect(taskHeaderCloudPage.getParentName()).toEqual(CONSTANTS.TASK_DETAILS.NO_PARENT); - expect(taskHeaderCloudPage.getParentTaskId()) - .toEqual(completedTask.entry.parentTaskId === null ? '' : completedTask.entry.parentTaskId); + await expect(await taskHeaderCloudPage.getEndDate()).toEqual(completedEndDate); + await expect(await taskHeaderCloudPage.getCreated()).toEqual(completedCreatedDate); + await expect(await taskHeaderCloudPage.getAssignee()).toEqual(completedTask.entry.assignee === null ? '' : completedTask.entry.assignee); + await expect(await taskHeaderCloudPage.getParentName()).toEqual(CONSTANTS.TASK_DETAILS.NO_PARENT); }); - it('[C291945] Should Parent Name and Parent Id not be empty in task details for sub task', () => { - tasksCloudDemoPage.myTasksFilter().clickTaskFilter(); - tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(subTask.entry.name); - tasksCloudDemoPage.taskListCloudComponent().selectRow(subTask.entry.name); - expect(taskHeaderCloudPage.getId()).toEqual(subTask.entry.id); - expect(taskHeaderCloudPage.getDescription()) + it('[C291945] Should Parent Name and Parent Id not be empty in task details for sub task', async () => { + await tasksCloudDemoPage.myTasksFilter().clickTaskFilter(); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(subTask.entry.name); + await tasksCloudDemoPage.taskListCloudComponent().selectRow(subTask.entry.name); + await expect(await taskHeaderCloudPage.getId()).toEqual(subTask.entry.id); + await expect(await taskHeaderCloudPage.getDescription()) .toEqual(subTask.entry.description === null ? CONSTANTS.TASK_DETAILS.NO_DESCRIPTION : subTask.entry.description); - expect(taskHeaderCloudPage.getStatus()).toEqual(subTask.entry.status); - expect(taskHeaderCloudPage.getPriority()).toEqual(subTask.entry.priority === 0 ? '' : subTask.entry.priority.toString()); - expect(taskHeaderCloudPage.getCategory()).toEqual(!subTask.entry.category ? + await expect(await taskHeaderCloudPage.getStatus()).toEqual(subTask.entry.status); + await expect(await taskHeaderCloudPage.getPriority()).toEqual(subTask.entry.priority === 0 ? '' : subTask.entry.priority.toString()); + await expect(await taskHeaderCloudPage.getCategory()).toEqual(!subTask.entry.category ? CONSTANTS.TASK_DETAILS.NO_CATEGORY : subTask.entry.category); - expect(taskHeaderCloudPage.getDueDate()).toEqual(subTask.entry.dueDate === null ? + await expect(await taskHeaderCloudPage.getDueDate()).toEqual(subTask.entry.dueDate === null ? CONSTANTS.TASK_DETAILS.NO_DATE : subTaskCreatedDate); - expect(taskHeaderCloudPage.getEndDate()).toEqual(''); - expect(taskHeaderCloudPage.getCreated()).toEqual(subTaskCreatedDate); - expect(taskHeaderCloudPage.getAssignee()).toEqual(subTask.entry.assignee === null ? '' : subTask.entry.assignee); - expect(taskHeaderCloudPage.getParentName()).toEqual(basicCreatedTask.entry.name); - expect(taskHeaderCloudPage.getParentTaskId()) + await expect(await taskHeaderCloudPage.getEndDate()).toEqual(''); + await expect(await taskHeaderCloudPage.getCreated()).toEqual(subTaskCreatedDate); + await expect(await taskHeaderCloudPage.getAssignee()).toEqual(subTask.entry.assignee === null ? '' : subTask.entry.assignee); + await expect(await taskHeaderCloudPage.getParentName()).toEqual(basicCreatedTask.entry.name); + await expect(await taskHeaderCloudPage.getParentTaskId()) .toEqual(subTask.entry.parentTaskId === null ? '' : subTask.entry.parentTaskId); }); @@ -177,18 +172,18 @@ describe('Task Header cloud component', () => { '"defaultDateTimeFormat": "M/d/yy, h:mm a",' + '"defaultLocale": "uk"' + '}'); - navigationBarPage.navigateToProcessServicesCloudPage(); - appListCloudComponent.checkApsContainer(); - appListCloudComponent.goToApp(simpleApp); + await navigationBarPage.navigateToProcessServicesCloudPage(); + await appListCloudComponent.checkApsContainer(); + await appListCloudComponent.goToApp(simpleApp); }); - it('[C311280] Should pick up the default date format from the app configuration', () => { - tasksCloudDemoPage.myTasksFilter().clickTaskFilter(); - tasksCloudDemoPage.completedTasksFilter().clickTaskFilter(); - tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(completedTaskName); - tasksCloudDemoPage.taskListCloudComponent().selectRow(completedTaskName); - taskHeaderCloudPage.checkTaskPropertyListIsDisplayed(); - expect(taskHeaderCloudPage.getCreated()).toEqual(defaultDate); + it('[C311280] Should pick up the default date format from the app configuration', async () => { + await tasksCloudDemoPage.myTasksFilter().clickTaskFilter(); + await tasksCloudDemoPage.completedTasksFilter().clickTaskFilter(); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(completedTaskName); + await tasksCloudDemoPage.taskListCloudComponent().selectRow(completedTaskName); + await taskHeaderCloudPage.checkTaskPropertyListIsDisplayed(); + await expect(await taskHeaderCloudPage.getCreated()).toEqual(defaultDate); }); }); }); diff --git a/e2e/process-services-cloud/task-list-cloud-action-menu.e2e.ts b/e2e/process-services-cloud/task-list-cloud-action-menu.e2e.ts new file mode 100644 index 0000000000..1a305e0c1f --- /dev/null +++ b/e2e/process-services-cloud/task-list-cloud-action-menu.e2e.ts @@ -0,0 +1,123 @@ +/*! + * @license + * Copyright 2019 Alfresco Software, Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { browser } from 'protractor'; +import { GroupIdentityService, IdentityService, LoginSSOPage, QueryService, SettingsPage, TasksService } from '@alfresco/adf-testing'; +import { AppListCloudPage } from '@alfresco/adf-testing'; +import { NavigationBarPage } from '../pages/adf/navigationBarPage'; +import { TasksCloudDemoPage } from '../pages/adf/demo-shell/process-services/tasksCloudDemoPage'; + +import { ProcessDefinitionsService, ApiService } from '@alfresco/adf-testing'; +import { ProcessInstancesService } from '@alfresco/adf-testing'; +import resources = require('../util/resources'); + +describe('Process list cloud', () => { + + describe('Process List - Custom Action Menu', () => { + const loginSSOPage = new LoginSSOPage(); + const navigationBarPage = new NavigationBarPage(); + const appListCloudComponent = new AppListCloudPage(); + const tasksCloudDemoPage = new TasksCloudDemoPage(); + const settingsPage = new SettingsPage(); + + let processDefinitionService: ProcessDefinitionsService; + let processInstancesService: ProcessInstancesService; + let identityService: IdentityService; + let groupIdentityService: GroupIdentityService; + let queryService: QueryService; + let tasksService: TasksService; + let testUser, groupInfo, editProcess, deleteProcess, editTask, deleteTask; + + const simpleApp = resources.ACTIVITI7_APPS.SIMPLE_APP.name; + const apiService = new ApiService(browser.params.config.oauth2.clientId, browser.params.config.bpmHost, browser.params.config.oauth2.host, 'BPM'); + + beforeAll(async () => { + + await apiService.login(browser.params.identityAdmin.email, browser.params.identityAdmin.password); + identityService = new IdentityService(apiService); + groupIdentityService = new GroupIdentityService(apiService); + testUser = await identityService.createIdentityUserWithRole(apiService, [identityService.ROLES.APS_USER]); + groupInfo = await groupIdentityService.getGroupInfoByGroupName('hr'); + await identityService.addUserToGroup(testUser.idIdentityService, groupInfo.id); + + await apiService.login(testUser.email, testUser.password); + processDefinitionService = new ProcessDefinitionsService(apiService); + const processDefinition = await processDefinitionService + .getProcessDefinitionByName(resources.ACTIVITI7_APPS.SIMPLE_APP.processes.dropdownrestprocess, simpleApp); + + processInstancesService = new ProcessInstancesService(apiService); + editProcess = await processInstancesService.createProcessInstance(processDefinition.entry.key, simpleApp); + deleteProcess = await processInstancesService.createProcessInstance(processDefinition.entry.key, simpleApp); + queryService = new QueryService(apiService); + + editTask = await queryService.getProcessInstanceTasks(editProcess.entry.id, simpleApp); + deleteTask = await queryService.getProcessInstanceTasks(deleteProcess.entry.id, simpleApp); + tasksService = new TasksService(apiService); + await tasksService.claimTask(editTask.list.entries[0].entry.id, simpleApp); + await tasksService.claimTask(deleteTask.list.entries[0].entry.id, simpleApp); + + await settingsPage.setProviderBpmSso( + browser.params.config.bpmHost, + browser.params.config.oauth2.host, + browser.params.config.identityHost); + await loginSSOPage.loginSSOIdentityService(testUser.email, testUser.password); + + }); + + afterAll(async() => { + await apiService.login(browser.params.identityAdmin.email, browser.params.identityAdmin.password); + await identityService.deleteIdentityUser(testUser.idIdentityService); + + }); + + beforeAll(async () => { + await navigationBarPage.navigateToProcessServicesCloudPage(); + await appListCloudComponent.checkApsContainer(); + await appListCloudComponent.goToApp(simpleApp); + await tasksCloudDemoPage.clickSettingsButton(); + await tasksCloudDemoPage.enableTestingMode(); + await tasksCloudDemoPage.enableActionMenu(); + await tasksCloudDemoPage.enableContextMenu(); + await tasksCloudDemoPage.addActionIsDisplayed(); + await tasksCloudDemoPage.addAction('edit'); + await tasksCloudDemoPage.actionAdded('edit'); + await tasksCloudDemoPage.addAction('delete'); + await tasksCloudDemoPage.actionAdded('delete'); + await tasksCloudDemoPage.addDisabledAction('disabledaction'); + await tasksCloudDemoPage.actionAdded('disabledaction'); + await tasksCloudDemoPage.clickAppButton(); + await tasksCloudDemoPage.editTaskFilterCloudComponent().openFilter(); + await tasksCloudDemoPage.myTasksFilter().checkTaskFilterIsDisplayed(); + }); + + it('[C315723] Should be able to see and execute custom action menu', async () => { + await expect(await tasksCloudDemoPage.getActiveFilterName()).toBe('My Tasks'); + await tasksCloudDemoPage.taskListCloudComponent().checkTaskListIsLoaded(); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedById(editTask.list.entries[0].entry.id); + await tasksCloudDemoPage.taskListCloudComponent().clickOptionsButton(editTask.list.entries[0].entry.id); + await expect(await tasksCloudDemoPage.taskListCloudComponent().isCustomActionEnabled('disabledaction')).toBe(false); + await tasksCloudDemoPage.taskListCloudComponent().clickOnCustomActionMenu('edit'); + await tasksCloudDemoPage.checkActionExecuted(editTask.list.entries[0].entry.id, 'edit'); + await tasksCloudDemoPage.taskListCloudComponent().rightClickOnRow(deleteTask.list.entries[0].entry.id); + await expect(await tasksCloudDemoPage.taskListCloudComponent().isCustomActionEnabled('disabledaction')).toBe(false); + await tasksCloudDemoPage.taskListCloudComponent().clickContextMenuActionNamed('delete'); + await tasksCloudDemoPage.checkActionExecuted(deleteTask.list.entries[0].entry.id, 'delete'); + }); + + }); + +}); diff --git a/e2e/process-services-cloud/task-list-properties.e2e.ts b/e2e/process-services-cloud/task-list-properties.e2e.ts index ea5545c113..663f2a4ed7 100644 --- a/e2e/process-services-cloud/task-list-properties.e2e.ts +++ b/e2e/process-services-cloud/task-list-properties.e2e.ts @@ -56,7 +56,7 @@ describe('Edit task filters and task list properties', () => { const currentDate = DateUtil.formatDate('DD/MM/YYYY'); const afterDate = moment().add(1, 'days').format('DD/MM/YYYY'); - beforeAll(async (done) => { + beforeAll(async () => { await apiService.login(browser.params.identityAdmin.email, browser.params.identityAdmin.password); identityService = new IdentityService(apiService); @@ -138,7 +138,6 @@ describe('Edit task filters and task list properties', () => { 'delete' ] })); - done(); }, 5 * 60 * 1000); afterAll(async (done) => { @@ -149,326 +148,348 @@ describe('Edit task filters and task list properties', () => { describe('Edit task filters and task list properties - filter properties', () => { - beforeEach(() => { - navigationBarPage.navigateToProcessServicesCloudPage(); - appListCloudComponent.checkApsContainer(); - appListCloudComponent.goToApp(simpleApp); - tasksCloudDemoPage.editTaskFilterCloudComponent().clickCustomiseFilterHeader(); - tasksCloudDemoPage.myTasksFilter().checkTaskFilterIsDisplayed(); + beforeEach(async () => { + await navigationBarPage.navigateToProcessServicesCloudPage(); + await appListCloudComponent.checkApsContainer(); + await appListCloudComponent.goToApp(simpleApp); + await tasksCloudDemoPage.editTaskFilterCloudComponent().openFilter(); + await tasksCloudDemoPage.myTasksFilter().checkTaskFilterIsDisplayed(); }); - it('[C292004] Filter by appName', () => { - tasksCloudDemoPage.myTasksFilter().checkTaskFilterIsDisplayed(); - expect(tasksCloudDemoPage.getActiveFilterName()).toBe('My Tasks'); + it('[C292004] Filter by appName', async () => { + await tasksCloudDemoPage.myTasksFilter().checkTaskFilterIsDisplayed(); + await expect(await tasksCloudDemoPage.getActiveFilterName()).toBe('My Tasks'); - expect(tasksCloudDemoPage.editTaskFilterCloudComponent().getAppNameDropDownValue()).toEqual(simpleApp); + await expect(await tasksCloudDemoPage.editTaskFilterCloudComponent().getAppNameDropDownValue()).toEqual(simpleApp); - tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(createdTask.entry.name); - tasksCloudDemoPage.taskListCloudComponent().checkContentIsNotDisplayedByName(notDisplayedTask.entry.name); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(createdTask.entry.name); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsNotDisplayedByName(notDisplayedTask.entry.name); - tasksCloudDemoPage.editTaskFilterCloudComponent().setAppNameDropDown(candidateBaseApp); - expect(tasksCloudDemoPage.editTaskFilterCloudComponent().getAppNameDropDownValue()).toEqual(candidateBaseApp); + await tasksCloudDemoPage.editTaskFilterCloudComponent().setAppNameDropDown(candidateBaseApp); + await expect(await tasksCloudDemoPage.editTaskFilterCloudComponent().getAppNameDropDownValue()).toEqual(candidateBaseApp); - tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(notDisplayedTask.entry.name); - tasksCloudDemoPage.taskListCloudComponent().checkContentIsNotDisplayedByName(createdTask.entry.name); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(notDisplayedTask.entry.name); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsNotDisplayedByName(createdTask.entry.name); }); - it('[C291906] Should be able to see only the task with specific taskId when typing it in the task Id field', () => { - tasksCloudDemoPage.myTasksFilter().checkTaskFilterIsDisplayed(); - expect(tasksCloudDemoPage.getActiveFilterName()).toBe('My Tasks'); + it('[C291906] Should be able to see only the task with specific taskId when typing it in the task Id field', async () => { + await tasksCloudDemoPage.myTasksFilter().checkTaskFilterIsDisplayed(); + await expect(await tasksCloudDemoPage.getActiveFilterName()).toBe('My Tasks'); - tasksCloudDemoPage.editTaskFilterCloudComponent().setId(createdTask.entry.id); - expect(tasksCloudDemoPage.editTaskFilterCloudComponent().getId()).toEqual(createdTask.entry.id); - tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedById(createdTask.entry.id); - tasksCloudDemoPage.taskListCloudComponent().getRowsWithSameId(createdTask.entry.id).then((list) => { - expect(list.length).toEqual(1); + await tasksCloudDemoPage.editTaskFilterCloudComponent().setId(createdTask.entry.id); + await expect(await tasksCloudDemoPage.editTaskFilterCloudComponent().getId()).toEqual(createdTask.entry.id); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedById(createdTask.entry.id); + await tasksCloudDemoPage.taskListCloudComponent().getRowsWithSameId(createdTask.entry.id).then(async (list) => { + await expect(list.length).toEqual(1); }); }); - it('[C291907] Should be able to see No tasks found when typing an invalid task id', () => { - tasksCloudDemoPage.myTasksFilter().checkTaskFilterIsDisplayed(); - expect(tasksCloudDemoPage.getActiveFilterName()).toBe('My Tasks'); + it('[C291907] Should be able to see No tasks found when typing an invalid task id', async () => { + await tasksCloudDemoPage.myTasksFilter().checkTaskFilterIsDisplayed(); + await expect(await tasksCloudDemoPage.getActiveFilterName()).toBe('My Tasks'); - tasksCloudDemoPage.editTaskFilterCloudComponent().setId('invalidId'); - expect(tasksCloudDemoPage.editTaskFilterCloudComponent().getId()).toEqual('invalidId'); + await tasksCloudDemoPage.editTaskFilterCloudComponent().setId('invalidId'); + await expect(await tasksCloudDemoPage.editTaskFilterCloudComponent().getId()).toEqual('invalidId'); - expect(tasksCloudDemoPage.taskListCloudComponent().getNoTasksFoundMessage()).toEqual(noTasksFoundMessage); + await expect(await tasksCloudDemoPage.taskListCloudComponent().getNoTasksFoundMessage()).toEqual(noTasksFoundMessage); }); - it('[C297476] Filter by taskName', () => { - tasksCloudDemoPage.myTasksFilter().checkTaskFilterIsDisplayed(); - expect(tasksCloudDemoPage.getActiveFilterName()).toBe('My Tasks'); + it('[C297476] Filter by taskName', async () => { + await tasksCloudDemoPage.myTasksFilter().checkTaskFilterIsDisplayed(); + await expect(await tasksCloudDemoPage.getActiveFilterName()).toBe('My Tasks'); - tasksCloudDemoPage.editTaskFilterCloudComponent().setTaskName(createdTask.entry.name); - expect(tasksCloudDemoPage.editTaskFilterCloudComponent().getTaskName()).toEqual(createdTask.entry.name); - tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(createdTask.entry.name); - tasksCloudDemoPage.taskListCloudComponent().getRowsWithSameName(createdTask.entry.name).then((list) => { - expect(list.length).toEqual(1); + await tasksCloudDemoPage.editTaskFilterCloudComponent().setTaskName(createdTask.entry.name); + await expect(await tasksCloudDemoPage.editTaskFilterCloudComponent().getTaskName()).toEqual(createdTask.entry.name); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(createdTask.entry.name); + await tasksCloudDemoPage.taskListCloudComponent().getRowsWithSameName(createdTask.entry.name).then(async (list) => { + await expect(list.length).toEqual(1); }); }); - it('[C297613] Should be able to see No tasks found when typing a task name that does not exist', () => { - tasksCloudDemoPage.myTasksFilter().checkTaskFilterIsDisplayed(); - expect(tasksCloudDemoPage.getActiveFilterName()).toBe('My Tasks'); + it('[C297613] Should be able to see No tasks found when typing a task name that does not exist', async () => { + await tasksCloudDemoPage.myTasksFilter().checkTaskFilterIsDisplayed(); + await expect(await tasksCloudDemoPage.getActiveFilterName()).toBe('My Tasks'); - tasksCloudDemoPage.editTaskFilterCloudComponent().setTaskName('invalidName'); - expect(tasksCloudDemoPage.editTaskFilterCloudComponent().getTaskName()).toEqual('invalidName'); + await tasksCloudDemoPage.editTaskFilterCloudComponent().setTaskName('invalidName'); + await expect(await tasksCloudDemoPage.editTaskFilterCloudComponent().getTaskName()).toEqual('invalidName'); - expect(tasksCloudDemoPage.taskListCloudComponent().getNoTasksFoundMessage()).toEqual(noTasksFoundMessage); + await expect(await tasksCloudDemoPage.taskListCloudComponent().getNoTasksFoundMessage()).toEqual(noTasksFoundMessage); }); - it('[C297480] Should be able to see only tasks that are part of a specific process when processInstanceId is set', () => { - tasksCloudDemoPage.myTasksFilter().checkTaskFilterIsDisplayed(); - expect(tasksCloudDemoPage.getActiveFilterName()).toBe('My Tasks'); + it('[C297480] Should be able to see only tasks that are part of a specific process when processInstanceId is set', async () => { + await tasksCloudDemoPage.myTasksFilter().checkTaskFilterIsDisplayed(); + await expect(await tasksCloudDemoPage.getActiveFilterName()).toBe('My Tasks'); - tasksCloudDemoPage.editTaskFilterCloudComponent().setProcessInstanceId(processInstance.entry.id) - .setStatusFilterDropDown('ALL').clearAssignee(); + await tasksCloudDemoPage.editTaskFilterCloudComponent().setProcessInstanceId(processInstance.entry.id); + await tasksCloudDemoPage.editTaskFilterCloudComponent().setStatusFilterDropDown('ALL'); + await tasksCloudDemoPage.editTaskFilterCloudComponent().clearAssignee(); - browser.sleep(1000); - - expect(tasksCloudDemoPage.taskListCloudComponent().getDataTable().getNumberOfRows()).toBe(1); - - tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByProcessInstanceId(processInstance.entry.id); + await expect(await tasksCloudDemoPage.taskListCloudComponent().getDataTable().getNumberOfRows()).toBe(1); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByProcessInstanceId(processInstance.entry.id); }); - it('[C297684] Should be able to see No tasks found when typing an invalid processInstanceId', () => { - tasksCloudDemoPage.myTasksFilter().checkTaskFilterIsDisplayed(); - expect(tasksCloudDemoPage.getActiveFilterName()).toBe('My Tasks'); + it('[C297684] Should be able to see No tasks found when typing an invalid processInstanceId', async () => { + await tasksCloudDemoPage.myTasksFilter().checkTaskFilterIsDisplayed(); + await expect(await tasksCloudDemoPage.getActiveFilterName()).toBe('My Tasks'); - tasksCloudDemoPage.editTaskFilterCloudComponent().setProcessInstanceId('invalidTaskId'); + await tasksCloudDemoPage.editTaskFilterCloudComponent().setProcessInstanceId('invalidTaskId'); - expect(tasksCloudDemoPage.taskListCloudComponent().getNoTasksFoundMessage()).toEqual(noTasksFoundMessage); + await expect(await tasksCloudDemoPage.taskListCloudComponent().getNoTasksFoundMessage()).toEqual(noTasksFoundMessage); }); - it('[C297478] Should be able to see only tasks that are assigned to a specific user when assignee is set', () => { - tasksCloudDemoPage.myTasksFilter().checkTaskFilterIsDisplayed(); - expect(tasksCloudDemoPage.getActiveFilterName()).toBe('My Tasks'); + it('[C297478] Should be able to see only tasks that are assigned to a specific user when assignee is set', async () => { + await tasksCloudDemoPage.myTasksFilter().checkTaskFilterIsDisplayed(); + await expect(await tasksCloudDemoPage.getActiveFilterName()).toBe('My Tasks'); - tasksCloudDemoPage.editTaskFilterCloudComponent().setAssignee('admin.adf'); + await tasksCloudDemoPage.editTaskFilterCloudComponent().setAssignee('admin.adf'); - tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(createdTask.entry.name); - tasksCloudDemoPage.taskListCloudComponent().checkContentIsNotDisplayedByName(notAssigned.entry.name); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(createdTask.entry.name); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsNotDisplayedByName(notAssigned.entry.name); }); - it('[C297686] Should be able to see No tasks found when typing an invalid user to assignee field', () => { - tasksCloudDemoPage.myTasksFilter().checkTaskFilterIsDisplayed(); - expect(tasksCloudDemoPage.getActiveFilterName()).toBe('My Tasks'); + it('[C297686] Should be able to see No tasks found when typing an invalid user to assignee field', async () => { + await tasksCloudDemoPage.myTasksFilter().checkTaskFilterIsDisplayed(); + await expect(await tasksCloudDemoPage.getActiveFilterName()).toBe('My Tasks'); - tasksCloudDemoPage.editTaskFilterCloudComponent().setAssignee('invalid'); + await tasksCloudDemoPage.editTaskFilterCloudComponent().setAssignee('invalid'); - expect(tasksCloudDemoPage.taskListCloudComponent().getNoTasksFoundMessage()).toEqual(noTasksFoundMessage); + await expect(await tasksCloudDemoPage.taskListCloudComponent().getNoTasksFoundMessage()).toEqual(noTasksFoundMessage); }); - it('[C297482] Should be able to see only tasks with specific priority when priority is set', () => { - tasksCloudDemoPage.myTasksFilter().checkTaskFilterIsDisplayed(); - expect(tasksCloudDemoPage.getActiveFilterName()).toBe('My Tasks'); + it('[C297482] Should be able to see only tasks with specific priority when priority is set', async () => { + await tasksCloudDemoPage.myTasksFilter().checkTaskFilterIsDisplayed(); + await expect(await tasksCloudDemoPage.getActiveFilterName()).toBe('My Tasks'); - tasksCloudDemoPage.editTaskFilterCloudComponent().setPriority(priority); + await tasksCloudDemoPage.editTaskFilterCloudComponent().setPriority(priority); - tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(priorityTask.entry.name); - tasksCloudDemoPage.taskListCloudComponent().checkContentIsNotDisplayedByName(createdTask.entry.name); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(priorityTask.entry.name); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsNotDisplayedByName(createdTask.entry.name); }); - it('[C297687] Should be able to see No tasks found when typing unused value for priority field', () => { - tasksCloudDemoPage.myTasksFilter().checkTaskFilterIsDisplayed(); - expect(tasksCloudDemoPage.getActiveFilterName()).toBe('My Tasks'); - tasksCloudDemoPage.editTaskFilterCloudComponent().setPriority('87650'); + it('[C297687] Should be able to see No tasks found when typing unused value for priority field', async () => { + await tasksCloudDemoPage.myTasksFilter().checkTaskFilterIsDisplayed(); + await expect(await tasksCloudDemoPage.getActiveFilterName()).toBe('My Tasks'); + await tasksCloudDemoPage.editTaskFilterCloudComponent().setPriority('87650'); - expect(tasksCloudDemoPage.taskListCloudComponent().getNoTasksFoundMessage()).toEqual(noTasksFoundMessage); + await expect(await tasksCloudDemoPage.taskListCloudComponent().getNoTasksFoundMessage()).toEqual(noTasksFoundMessage); }); - it('[C297481] Should be able to see only tasks with specific parentTaskId when parentTaskId is set', () => { - tasksCloudDemoPage.myTasksFilter().checkTaskFilterIsDisplayed(); - expect(tasksCloudDemoPage.getActiveFilterName()).toBe('My Tasks'); + it('[C297481] Should be able to see only tasks with specific parentTaskId when parentTaskId is set', async () => { + await tasksCloudDemoPage.myTasksFilter().checkTaskFilterIsDisplayed(); + await expect(await tasksCloudDemoPage.getActiveFilterName()).toBe('My Tasks'); - tasksCloudDemoPage.editTaskFilterCloudComponent().setParentTaskId(subTask.entry.parentTaskId); + await tasksCloudDemoPage.editTaskFilterCloudComponent().setParentTaskId(subTask.entry.parentTaskId); - tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(subTask.entry.name); - tasksCloudDemoPage.taskListCloudComponent().checkContentIsNotDisplayedByName(createdTask.entry.name); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(subTask.entry.name); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsNotDisplayedByName(createdTask.entry.name); }); - it('[C297486] Filter by Owner', () => { - tasksCloudDemoPage.myTasksFilter().checkTaskFilterIsDisplayed(); - expect(tasksCloudDemoPage.getActiveFilterName()).toBe('My Tasks'); + it('[C297486] Filter by Owner', async () => { + await tasksCloudDemoPage.myTasksFilter().checkTaskFilterIsDisplayed(); + await expect(await tasksCloudDemoPage.getActiveFilterName()).toBe('My Tasks'); - tasksCloudDemoPage.editTaskFilterCloudComponent().setStatusFilterDropDown('ALL').clearAssignee().setOwner(testUser.username); + await tasksCloudDemoPage.editTaskFilterCloudComponent().setStatusFilterDropDown('ALL'); + await tasksCloudDemoPage.editTaskFilterCloudComponent().clearAssignee(); + await tasksCloudDemoPage.editTaskFilterCloudComponent().setOwner(testUser.username); - tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(notAssigned.entry.name); - tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(createdTask.entry.name); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(notAssigned.entry.name); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(createdTask.entry.name); - tasksCloudDemoPage.editTaskFilterCloudComponent().setOwner('invalid'); + await tasksCloudDemoPage.editTaskFilterCloudComponent().setOwner('invalid'); - expect(tasksCloudDemoPage.taskListCloudComponent().getNoTasksFoundMessage()).toEqual(noTasksFoundMessage); + await expect(await tasksCloudDemoPage.taskListCloudComponent().getNoTasksFoundMessage()).toEqual(noTasksFoundMessage); }); - it('[C297484] Task is displayed when typing into lastModifiedFrom field a date before the task CreatedDate', () => { - tasksCloudDemoPage.myTasksFilter().checkTaskFilterIsDisplayed(); - expect(tasksCloudDemoPage.getActiveFilterName()).toBe('My Tasks'); + it('[C297484] Task is displayed when typing into lastModifiedFrom field a date before the task CreatedDate', async() => { + await tasksCloudDemoPage.myTasksFilter().checkTaskFilterIsDisplayed(); + await expect(await tasksCloudDemoPage.getActiveFilterName()).toBe('My Tasks'); - tasksCloudDemoPage.editTaskFilterCloudComponent().setLastModifiedFrom(beforeDate); - tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(createdTask.entry.name); + await tasksCloudDemoPage.editTaskFilterCloudComponent().setLastModifiedFrom(beforeDate); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(createdTask.entry.name); - tasksCloudDemoPage.editTaskFilterCloudComponent().setLastModifiedTo(afterDate); - tasksCloudDemoPage.taskListCloudComponent().checkContentIsNotDisplayedByName(createdTask.entry.name); + await tasksCloudDemoPage.editTaskFilterCloudComponent().setLastModifiedTo(afterDate); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsNotDisplayedByName(createdTask.entry.name); }); - it('[C297689] Task is not displayed when typing into lastModifiedFrom field the same date as tasks CreatedDate', () => { - tasksCloudDemoPage.myTasksFilter().checkTaskFilterIsDisplayed(); - expect(tasksCloudDemoPage.getActiveFilterName()).toBe('My Tasks'); + it('[C297689] Task is not displayed when typing into lastModifiedFrom field the same date as tasks CreatedDate', async () => { + await tasksCloudDemoPage.myTasksFilter().checkTaskFilterIsDisplayed(); + await expect(await tasksCloudDemoPage.getActiveFilterName()).toBe('My Tasks'); - tasksCloudDemoPage.editTaskFilterCloudComponent().setLastModifiedFrom(currentDate); - tasksCloudDemoPage.taskListCloudComponent().checkContentIsNotDisplayedByName(createdTask.entry.name); + await tasksCloudDemoPage.editTaskFilterCloudComponent().setLastModifiedFrom(currentDate); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsNotDisplayedByName(createdTask.entry.name); }); - it('[C297485] Task is displayed when typing into lastModifiedTo field a date after the task CreatedDate', () => { - tasksCloudDemoPage.myTasksFilter().checkTaskFilterIsDisplayed(); - expect(tasksCloudDemoPage.getActiveFilterName()).toBe('My Tasks'); + it('[C297485] Task is displayed when typing into lastModifiedTo field a date after the task CreatedDate', async () => { + await tasksCloudDemoPage.myTasksFilter().checkTaskFilterIsDisplayed(); + await expect(await tasksCloudDemoPage.getActiveFilterName()).toBe('My Tasks'); - tasksCloudDemoPage.editTaskFilterCloudComponent().setLastModifiedFrom(afterDate); - tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(createdTask.entry.name); + await tasksCloudDemoPage.editTaskFilterCloudComponent().setLastModifiedFrom(afterDate); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(createdTask.entry.name); - tasksCloudDemoPage.editTaskFilterCloudComponent().setLastModifiedTo(beforeDate); - tasksCloudDemoPage.taskListCloudComponent().checkContentIsNotDisplayedByName(createdTask.entry.name); + await tasksCloudDemoPage.editTaskFilterCloudComponent().setLastModifiedTo(beforeDate); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsNotDisplayedByName(createdTask.entry.name); }); - it('[C297690] Task is not displayed when typing into lastModifiedTo field the same date as tasks CreatedDate', () => { - tasksCloudDemoPage.myTasksFilter().checkTaskFilterIsDisplayed(); - expect(tasksCloudDemoPage.getActiveFilterName()).toBe('My Tasks'); + it('[C297690] Task is not displayed when typing into lastModifiedTo field the same date as tasks CreatedDate', async () => { + await tasksCloudDemoPage.myTasksFilter().checkTaskFilterIsDisplayed(); + await expect(await tasksCloudDemoPage.getActiveFilterName()).toBe('My Tasks'); - tasksCloudDemoPage.editTaskFilterCloudComponent().setLastModifiedTo(currentDate); - tasksCloudDemoPage.taskListCloudComponent().checkContentIsNotDisplayedByName(createdTask.entry.name); + await tasksCloudDemoPage.editTaskFilterCloudComponent().setLastModifiedTo(currentDate); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsNotDisplayedByName(createdTask.entry.name); }); it('[C297691] Task is not displayed when typing into lastModifiedFrom field a date before the task due date ' + - 'and into lastModifiedTo a date before task due date', () => { + 'and into lastModifiedTo a date before task due date', async () => { - tasksCloudDemoPage.myTasksFilter().checkTaskFilterIsDisplayed(); - expect(tasksCloudDemoPage.getActiveFilterName()).toBe('My Tasks'); + await tasksCloudDemoPage.myTasksFilter().checkTaskFilterIsDisplayed(); + await expect(await tasksCloudDemoPage.getActiveFilterName()).toBe('My Tasks'); - tasksCloudDemoPage.editTaskFilterCloudComponent().setLastModifiedFrom(beforeDate); - tasksCloudDemoPage.editTaskFilterCloudComponent().setLastModifiedTo(beforeDate); - tasksCloudDemoPage.editTaskFilterCloudComponent().setTaskName(createdTask.entry.name); - expect(tasksCloudDemoPage.taskListCloudComponent().getNoTasksFoundMessage()).toEqual(noTasksFoundMessage); + await tasksCloudDemoPage.editTaskFilterCloudComponent().setLastModifiedFrom(beforeDate); + await tasksCloudDemoPage.editTaskFilterCloudComponent().setLastModifiedTo(beforeDate); + await tasksCloudDemoPage.editTaskFilterCloudComponent().setTaskName(createdTask.entry.name); + await expect(await tasksCloudDemoPage.taskListCloudComponent().getNoTasksFoundMessage()).toEqual(noTasksFoundMessage); }); it('[C297692] Task is displayed when typing into lastModifiedFrom field a date before the tasks due date ' + - 'and into lastModifiedTo a date after', () => { + 'and into lastModifiedTo a date after', async () => { - tasksCloudDemoPage.myTasksFilter().checkTaskFilterIsDisplayed(); - expect(tasksCloudDemoPage.getActiveFilterName()).toBe('My Tasks'); + await tasksCloudDemoPage.myTasksFilter().checkTaskFilterIsDisplayed(); + await expect(await tasksCloudDemoPage.getActiveFilterName()).toBe('My Tasks'); - tasksCloudDemoPage.editTaskFilterCloudComponent().setLastModifiedFrom(beforeDate); - tasksCloudDemoPage.editTaskFilterCloudComponent().setLastModifiedTo(afterDate); - tasksCloudDemoPage.editTaskFilterCloudComponent().setTaskName(createdTask.entry.name); - tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(createdTask.entry.name); + await tasksCloudDemoPage.editTaskFilterCloudComponent().setLastModifiedFrom(beforeDate); + await tasksCloudDemoPage.editTaskFilterCloudComponent().setLastModifiedTo(afterDate); + await tasksCloudDemoPage.editTaskFilterCloudComponent().setTaskName(createdTask.entry.name); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(createdTask.entry.name); }); it('[C297693] Task is not displayed when typing into lastModifiedFrom field a date after the tasks due date ' + - 'and into lastModifiedTo a date after', () => { + 'and into lastModifiedTo a date after', async () => { - tasksCloudDemoPage.myTasksFilter().checkTaskFilterIsDisplayed(); - expect(tasksCloudDemoPage.getActiveFilterName()).toBe('My Tasks'); + await tasksCloudDemoPage.myTasksFilter().checkTaskFilterIsDisplayed(); + await expect(await tasksCloudDemoPage.getActiveFilterName()).toBe('My Tasks'); - tasksCloudDemoPage.editTaskFilterCloudComponent().setLastModifiedFrom(afterDate); - tasksCloudDemoPage.editTaskFilterCloudComponent().setLastModifiedTo(afterDate); - expect(tasksCloudDemoPage.taskListCloudComponent().getNoTasksFoundMessage()).toEqual(noTasksFoundMessage); + await tasksCloudDemoPage.editTaskFilterCloudComponent().setLastModifiedFrom(afterDate); + await tasksCloudDemoPage.editTaskFilterCloudComponent().setLastModifiedTo(afterDate); + await expect(await tasksCloudDemoPage.taskListCloudComponent().getNoTasksFoundMessage()).toEqual(noTasksFoundMessage); }); }); describe('Edit task filters and task list properties - sort properties', () => { - beforeEach((done) => { - navigationBarPage.navigateToProcessServicesCloudPage(); - appListCloudComponent.checkApsContainer(); - appListCloudComponent.goToApp(simpleApp); - tasksCloudDemoPage.editTaskFilterCloudComponent().clickCustomiseFilterHeader(); - tasksCloudDemoPage.myTasksFilter().checkTaskFilterIsDisplayed(); - done(); - }); - - it('[C306901] Should display tasks sorted by task name when taskName is selected from sort dropdown', () => { - tasksCloudDemoPage.editTaskFilterCloudComponent().setStatusFilterDropDown('ASSIGNED') - .setSortFilterDropDown('Name').setOrderFilterDropDown('ASC'); - expect(tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkListIsSorted('ASC', 'Name')).toBe(true); - - tasksCloudDemoPage.editTaskFilterCloudComponent().setOrderFilterDropDown('DESC'); - expect(tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkListIsSorted('DESC', 'Name')).toBe(true); + beforeEach(async () => { + await navigationBarPage.navigateToProcessServicesCloudPage(); + await appListCloudComponent.checkApsContainer(); + await appListCloudComponent.goToApp(simpleApp); + await tasksCloudDemoPage.editTaskFilterCloudComponent().openFilter(); + await tasksCloudDemoPage.myTasksFilter().checkTaskFilterIsDisplayed(); }); - it('[C290156] Should display tasks ordered by id when Id is selected from sort dropdown', () => { - tasksCloudDemoPage.editTaskFilterCloudComponent().setStatusFilterDropDown('ASSIGNED') - .setSortFilterDropDown('Id').setOrderFilterDropDown('ASC'); - expect(tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkListIsSorted('ASC', 'Id')).toBe(true); + it('[C306901] Should display tasks sorted by task name when taskName is selected from sort dropdown', async () => { + await tasksCloudDemoPage.editTaskFilterCloudComponent().setStatusFilterDropDown('ASSIGNED'); + await tasksCloudDemoPage.editTaskFilterCloudComponent().setSortFilterDropDown('Name'); + await tasksCloudDemoPage.editTaskFilterCloudComponent().setOrderFilterDropDown('ASC'); - tasksCloudDemoPage.editTaskFilterCloudComponent().setOrderFilterDropDown('DESC'); - expect(tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkListIsSorted('DESC', 'Id')).toBe(true); + await expect(await tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkListIsSorted('ASC', 'Name')).toBe(true); + + await tasksCloudDemoPage.editTaskFilterCloudComponent().setOrderFilterDropDown('DESC'); + await expect(await tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkListIsSorted('DESC', 'Name')).toBe(true); }); - it('[C306903] Should display tasks sorted by processDefinitionId when processDefinitionId is selected from sort dropdown', () => { - tasksCloudDemoPage.editTaskFilterCloudComponent().setStatusFilterDropDown('ASSIGNED') - .setSortFilterDropDown('ProcessDefinitionId').setOrderFilterDropDown('ASC'); - expect(tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkListIsSorted('ASC', 'ProcessDefinitionId')).toBe(true); + it('[C290156] Should display tasks ordered by id when Id is selected from sort dropdown', async () => { + await tasksCloudDemoPage.editTaskFilterCloudComponent().setStatusFilterDropDown('ASSIGNED'); + await tasksCloudDemoPage.editTaskFilterCloudComponent().setSortFilterDropDown('Id'); + await tasksCloudDemoPage.editTaskFilterCloudComponent().setOrderFilterDropDown('ASC'); - tasksCloudDemoPage.editTaskFilterCloudComponent().setOrderFilterDropDown('DESC'); - expect(tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkListIsSorted('DESC', 'ProcessDefinitionId')).toBe(true); - }); + await expect(await tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkListIsSorted('ASC', 'Id')).toBe(true); - it('[C306905] Should display tasks sorted by processInstanceId when processInstanceId is selected from sort dropdown', () => { - tasksCloudDemoPage.editTaskFilterCloudComponent().setStatusFilterDropDown('ASSIGNED') - .setSortFilterDropDown('ProcessInstanceId').setOrderFilterDropDown('ASC'); - expect(tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkListIsSorted('ASC', 'ProcessInstanceId')).toBe(true); - - tasksCloudDemoPage.editTaskFilterCloudComponent().setOrderFilterDropDown('DESC'); - expect(tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkListIsSorted('DESC', 'ProcessInstanceId')).toBe(true); - }); - - it('[C306907] Should display tasks sorted by assignee when assignee is selected from sort dropdown', () => { - tasksCloudDemoPage.editTaskFilterCloudComponent().clearAssignee().setStatusFilterDropDown('ALL') - .setSortFilterDropDown('Assignee').setOrderFilterDropDown('ASC'); - expect(tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkListIsSorted('ASC', 'Assignee')).toBe(true); - - tasksCloudDemoPage.editTaskFilterCloudComponent().setOrderFilterDropDown('DESC'); - expect(tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkListIsSorted('DESC', 'Assignee')).toBe(true); - }); - - it('[C306911] Should display tasks sorted by parentTaskId when parentTaskId is selected from sort dropdown', () => { - tasksCloudDemoPage.editTaskFilterCloudComponent().clearAssignee().setStatusFilterDropDown('ALL') - .setSortFilterDropDown('ParentTaskId').setOrderFilterDropDown('ASC'); - expect(tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkListIsSorted('ASC', 'ParentTaskId')).toBe(true); - - tasksCloudDemoPage.editTaskFilterCloudComponent().setOrderFilterDropDown('DESC'); - expect(tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkListIsSorted('DESC', 'ParentTaskId')).toBe(true); - }); - - it('[C290087] Should display tasks ordered by priority when Priority is selected from sort dropdown', () => { - tasksCloudDemoPage.editTaskFilterCloudComponent().clearAssignee().setStatusFilterDropDown('ALL') - .setSortFilterDropDown('Priority').setOrderFilterDropDown('ASC'); - expect(tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkListIsSorted('ASC', 'Priority')).toBe(true); - - tasksCloudDemoPage.editTaskFilterCloudComponent().setOrderFilterDropDown('DESC'); - expect(tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkListIsSorted('DESC', 'Priority')).toBe(true); + await tasksCloudDemoPage.editTaskFilterCloudComponent().setOrderFilterDropDown('DESC'); + await expect(await tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkListIsSorted('DESC', 'Id')).toBe(true); }); - it('[C307114] Should display tasks sorted by standAlone when standAlone is selected from sort dropdown', () => { - tasksCloudDemoPage.editTaskFilterCloudComponent().clearAssignee().setStatusFilterDropDown('ALL') - .setSortFilterDropDown('StandAlone').setOrderFilterDropDown('ASC'); - expect(tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkListIsSorted('ASC', 'StandAlone')).toBe(true); + it('[C306903] Should display tasks sorted by processDefinitionId when processDefinitionId is selected from sort dropdown', async () => { + await tasksCloudDemoPage.editTaskFilterCloudComponent().setStatusFilterDropDown('ASSIGNED'); + await tasksCloudDemoPage.editTaskFilterCloudComponent().setSortFilterDropDown('ProcessDefinitionId'); + await tasksCloudDemoPage.editTaskFilterCloudComponent().setOrderFilterDropDown('ASC'); + await expect(await tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkListIsSorted('ASC', 'ProcessDefinitionId')).toBe(true); - tasksCloudDemoPage.editTaskFilterCloudComponent().setOrderFilterDropDown('DESC'); - expect(tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkListIsSorted('DESC', 'StandAlone')).toBe(true); + await tasksCloudDemoPage.editTaskFilterCloudComponent().setOrderFilterDropDown('DESC'); + await expect(await tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkListIsSorted('DESC', 'ProcessDefinitionId')).toBe(true); }); - it('[C307115] Should display tasks sorted by owner when owner is selected from sort dropdown', () => { - tasksCloudDemoPage.editTaskFilterCloudComponent().clearAssignee().setStatusFilterDropDown('ALL') - .setSortFilterDropDown('Owner').setOrderFilterDropDown('ASC'); - expect(tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkListIsSorted('ASC', 'Owner')).toBe(true); + it('[C306905] Should display tasks sorted by processInstanceId when processInstanceId is selected from sort dropdown', async () => { + await tasksCloudDemoPage.editTaskFilterCloudComponent().setStatusFilterDropDown('ASSIGNED'); + await tasksCloudDemoPage.editTaskFilterCloudComponent().setSortFilterDropDown('ProcessInstanceId'); + await tasksCloudDemoPage.editTaskFilterCloudComponent().setOrderFilterDropDown('ASC'); - tasksCloudDemoPage.editTaskFilterCloudComponent().setOrderFilterDropDown('DESC'); - expect(tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkListIsSorted('DESC', 'Owner')).toBe(true); + await expect(await tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkListIsSorted('ASC', 'ProcessInstanceId')).toBe(true); + + await tasksCloudDemoPage.editTaskFilterCloudComponent().setOrderFilterDropDown('DESC'); + await expect(await tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkListIsSorted('DESC', 'ProcessInstanceId')).toBe(true); + }); + + it('[C306907] Should display tasks sorted by assignee when assignee is selected from sort dropdown', async () => { + await tasksCloudDemoPage.editTaskFilterCloudComponent().clearAssignee(); + await tasksCloudDemoPage.editTaskFilterCloudComponent().setStatusFilterDropDown('ALL'); + await tasksCloudDemoPage.editTaskFilterCloudComponent().setSortFilterDropDown('Assignee'); + await tasksCloudDemoPage.editTaskFilterCloudComponent().setOrderFilterDropDown('ASC'); + + await expect(await tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkListIsSorted('ASC', 'Assignee')).toBe(true); + + await tasksCloudDemoPage.editTaskFilterCloudComponent().setOrderFilterDropDown('DESC'); + await expect(await tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkListIsSorted('DESC', 'Assignee')).toBe(true); + }); + + it('[C306911] Should display tasks sorted by parentTaskId when parentTaskId is selected from sort dropdown', async () => { + await tasksCloudDemoPage.editTaskFilterCloudComponent().clearAssignee(); + await tasksCloudDemoPage.editTaskFilterCloudComponent().setStatusFilterDropDown('ALL'); + await tasksCloudDemoPage.editTaskFilterCloudComponent().setSortFilterDropDown('ParentTaskId'); + await tasksCloudDemoPage.editTaskFilterCloudComponent().setOrderFilterDropDown('ASC'); + + await expect(await tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkListIsSorted('ASC', 'ParentTaskId')).toBe(true); + + await tasksCloudDemoPage.editTaskFilterCloudComponent().setOrderFilterDropDown('DESC'); + await expect(await tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkListIsSorted('DESC', 'ParentTaskId')).toBe(true); + }); + + it('[C290087] Should display tasks ordered by priority when Priority is selected from sort dropdown', async () => { + await tasksCloudDemoPage.editTaskFilterCloudComponent().clearAssignee(); + await tasksCloudDemoPage.editTaskFilterCloudComponent().setStatusFilterDropDown('ALL'); + await tasksCloudDemoPage.editTaskFilterCloudComponent().setSortFilterDropDown('Priority'); + await tasksCloudDemoPage.editTaskFilterCloudComponent().setOrderFilterDropDown('ASC'); + + await expect(await tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkListIsSorted('ASC', 'Priority')).toBe(true); + + await tasksCloudDemoPage.editTaskFilterCloudComponent().setOrderFilterDropDown('DESC'); + await expect(await tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkListIsSorted('DESC', 'Priority')).toBe(true); + + }); + + it('[C307114] Should display tasks sorted by standAlone when standAlone is selected from sort dropdown', async () => { + await tasksCloudDemoPage.editTaskFilterCloudComponent().clearAssignee(); + await tasksCloudDemoPage.editTaskFilterCloudComponent().setStatusFilterDropDown('ALL'); + await tasksCloudDemoPage.editTaskFilterCloudComponent().setSortFilterDropDown('StandAlone'); + await tasksCloudDemoPage.editTaskFilterCloudComponent().setOrderFilterDropDown('ASC'); + + await expect(await tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkListIsSorted('ASC', 'StandAlone')).toBe(true); + + await tasksCloudDemoPage.editTaskFilterCloudComponent().setOrderFilterDropDown('DESC'); + await expect(await tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkListIsSorted('DESC', 'StandAlone')).toBe(true); + }); + + it('[C307115] Should display tasks sorted by owner when owner is selected from sort dropdown', async () => { + await tasksCloudDemoPage.editTaskFilterCloudComponent().clearAssignee(); + await tasksCloudDemoPage.editTaskFilterCloudComponent().setStatusFilterDropDown('ALL'); + await tasksCloudDemoPage.editTaskFilterCloudComponent().setSortFilterDropDown('Owner'); + await tasksCloudDemoPage.editTaskFilterCloudComponent().setOrderFilterDropDown('ASC'); + + await expect(await tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkListIsSorted('ASC', 'Owner')).toBe(true); + + await tasksCloudDemoPage.editTaskFilterCloudComponent().setOrderFilterDropDown('DESC'); + await expect(await tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkListIsSorted('DESC', 'Owner')).toBe(true); }); }); diff --git a/e2e/process-services-cloud/task-list-selection.e2e.ts b/e2e/process-services-cloud/task-list-selection.e2e.ts index 03e9d743a0..d4c99cd00e 100644 --- a/e2e/process-services-cloud/task-list-selection.e2e.ts +++ b/e2e/process-services-cloud/task-list-selection.e2e.ts @@ -46,7 +46,7 @@ describe('Task list cloud - selection', () => { let response, testUser, groupInfo; const tasks = []; - beforeAll(async (done) => { + beforeAll(async () => { await apiService.login(browser.params.identityAdmin.email, browser.params.identityAdmin.password); identityService = new IdentityService(apiService); groupIdentityService = new GroupIdentityService(apiService); @@ -69,118 +69,130 @@ describe('Task list cloud - selection', () => { browser.params.config.oauth2.host, browser.params.config.identityHost); await loginSSOPage.loginSSOIdentityService(testUser.email, testUser.password); - done(); + }); - afterAll(async(done) => { + afterAll(async() => { await apiService.login(browser.params.identityAdmin.email, browser.params.identityAdmin.password); await identityService.deleteIdentityUser(testUser.idIdentityService); - done(); + }); - beforeEach(() => { - navigationBarPage.navigateToProcessServicesCloudPage(); - appListCloudComponent.checkApsContainer(); - appListCloudComponent.goToApp(simpleApp); - tasksCloudDemoPage.myTasksFilter().checkTaskFilterIsDisplayed(); - tasksCloudDemoPage.clickSettingsButton().disableDisplayTaskDetails(); - tasksCloudDemoPage.clickAppButton(); + beforeEach(async () => { + await navigationBarPage.navigateToProcessServicesCloudPage(); + await appListCloudComponent.checkApsContainer(); + await appListCloudComponent.goToApp(simpleApp); + await tasksCloudDemoPage.myTasksFilter().checkTaskFilterIsDisplayed(); + await tasksCloudDemoPage.clickSettingsButton(); + await tasksCloudDemoPage.disableDisplayTaskDetails(); + await tasksCloudDemoPage.clickAppButton(); }); - it('[C291914] Should not be able to select any row when selection mode is set to None', () => { - tasksCloudDemoPage.clickSettingsButton().selectSelectionMode('None'); - tasksCloudDemoPage.clickSettingsButton().disableDisplayTaskDetails(); - tasksCloudDemoPage.clickAppButton(); - tasksCloudDemoPage.taskListCloudComponent().getDataTable().waitForTableBody(); + it('[C291914] Should not be able to select any row when selection mode is set to None', async () => { + await tasksCloudDemoPage.clickSettingsButton(); + await tasksCloudDemoPage.selectSelectionMode('None'); + await tasksCloudDemoPage.clickSettingsButton(); + await tasksCloudDemoPage.disableDisplayTaskDetails(); + await tasksCloudDemoPage.clickAppButton(); + await tasksCloudDemoPage.taskListCloudComponent().getDataTable().waitForTableBody(); - tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(tasks[0]); - tasksCloudDemoPage.taskListCloudComponent().selectRow(tasks[0]); - tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkNoRowIsSelected(); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(tasks[0]); + await tasksCloudDemoPage.taskListCloudComponent().selectRow(tasks[0]); + await tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkNoRowIsSelected(); }); - it('[C291918] Should be able to select only one row when selection mode is set to Single', () => { - tasksCloudDemoPage.clickSettingsButton().selectSelectionMode('Single'); - tasksCloudDemoPage.clickSettingsButton().disableDisplayTaskDetails(); - tasksCloudDemoPage.clickAppButton(); - tasksCloudDemoPage.taskListCloudComponent().getDataTable().waitForTableBody(); + it('[C291918] Should be able to select only one row when selection mode is set to Single', async () => { + await tasksCloudDemoPage.clickSettingsButton(); + await tasksCloudDemoPage.selectSelectionMode('Single'); + await tasksCloudDemoPage.clickSettingsButton(); + await tasksCloudDemoPage.disableDisplayTaskDetails(); + await tasksCloudDemoPage.clickAppButton(); + await tasksCloudDemoPage.taskListCloudComponent().getDataTable().waitForTableBody(); - tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(tasks[0]); - tasksCloudDemoPage.taskListCloudComponent().selectRow(tasks[0]); - tasksCloudDemoPage.taskListCloudComponent().checkRowIsSelected(tasks[0]); - expect(tasksCloudDemoPage.taskListCloudComponent().getDataTable().getNumberOfSelectedRows()).toEqual(1); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(tasks[0]); + await tasksCloudDemoPage.taskListCloudComponent().selectRow(tasks[0]); + await tasksCloudDemoPage.taskListCloudComponent().checkRowIsSelected(tasks[0]); + await expect(await tasksCloudDemoPage.taskListCloudComponent().getDataTable().getNumberOfSelectedRows()).toEqual(1); - tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(tasks[1]); - tasksCloudDemoPage.taskListCloudComponent().selectRow(tasks[1]); - tasksCloudDemoPage.taskListCloudComponent().checkRowIsSelected(tasks[1]); - expect(tasksCloudDemoPage.taskListCloudComponent().getDataTable().getNumberOfSelectedRows()).toEqual(1); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(tasks[1]); + await tasksCloudDemoPage.taskListCloudComponent().selectRow(tasks[1]); + await tasksCloudDemoPage.taskListCloudComponent().checkRowIsSelected(tasks[1]); + await expect(await tasksCloudDemoPage.taskListCloudComponent().getDataTable().getNumberOfSelectedRows()).toEqual(1); }); - it('[C291919] Should be able to select only one row when selection mode is set to Multiple', () => { - tasksCloudDemoPage.clickSettingsButton().selectSelectionMode('Multiple'); - tasksCloudDemoPage.clickSettingsButton().disableDisplayTaskDetails(); - tasksCloudDemoPage.clickAppButton(); - tasksCloudDemoPage.taskListCloudComponent().getDataTable().waitForTableBody(); + it('[C291919] Should be able to select only one row when selection mode is set to Multiple', async () => { + await tasksCloudDemoPage.clickSettingsButton(); + await tasksCloudDemoPage.selectSelectionMode('Multiple'); + await tasksCloudDemoPage.clickSettingsButton(); + await tasksCloudDemoPage.disableDisplayTaskDetails(); + await tasksCloudDemoPage.clickAppButton(); + await tasksCloudDemoPage.taskListCloudComponent().getDataTable().waitForTableBody(); - tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(tasks[0]); - tasksCloudDemoPage.taskListCloudComponent().selectRow(tasks[0]); - tasksCloudDemoPage.taskListCloudComponent().checkRowIsSelected(tasks[0]); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(tasks[0]); + await tasksCloudDemoPage.taskListCloudComponent().selectRow(tasks[0]); + await tasksCloudDemoPage.taskListCloudComponent().checkRowIsSelected(tasks[0]); - tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(tasks[1]); - tasksCloudDemoPage.taskListCloudComponent().selectRowWithKeyboard(tasks[1]); - tasksCloudDemoPage.taskListCloudComponent().checkRowIsSelected(tasks[0]); - tasksCloudDemoPage.taskListCloudComponent().checkRowIsSelected(tasks[1]); - tasksCloudDemoPage.taskListCloudComponent().checkRowIsNotSelected(tasks[2]); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(tasks[1]); + await tasksCloudDemoPage.taskListCloudComponent().selectRowWithKeyboard(tasks[1]); + await tasksCloudDemoPage.taskListCloudComponent().checkRowIsSelected(tasks[0]); + await tasksCloudDemoPage.taskListCloudComponent().checkRowIsSelected(tasks[1]); + await tasksCloudDemoPage.taskListCloudComponent().checkRowIsNotSelected(tasks[2]); }); - it('[C291916] Should be able to select multiple row when multiselect is true', () => { - tasksCloudDemoPage.clickSettingsButton().enableMultiSelection(); - tasksCloudDemoPage.clickSettingsButton().disableDisplayTaskDetails(); - tasksCloudDemoPage.clickAppButton(); - tasksCloudDemoPage.taskListCloudComponent().getDataTable().waitForTableBody(); + it('[C291916] Should be able to select multiple row when multiselect is true', async () => { + await tasksCloudDemoPage.clickSettingsButton(); + await tasksCloudDemoPage.enableMultiSelection(); + await tasksCloudDemoPage.clickSettingsButton(); + await tasksCloudDemoPage.disableDisplayTaskDetails(); + await tasksCloudDemoPage.clickAppButton(); + await tasksCloudDemoPage.taskListCloudComponent().getDataTable().waitForTableBody(); - tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(tasks[0]); - tasksCloudDemoPage.taskListCloudComponent().clickCheckbox(tasks[0]); - tasksCloudDemoPage.taskListCloudComponent().checkRowIsChecked(tasks[0]); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(tasks[0]); + await tasksCloudDemoPage.taskListCloudComponent().clickCheckbox(tasks[0]); + await tasksCloudDemoPage.taskListCloudComponent().checkRowIsChecked(tasks[0]); - tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(tasks[1]); - tasksCloudDemoPage.taskListCloudComponent().clickCheckbox(tasks[1]); - tasksCloudDemoPage.taskListCloudComponent().checkRowIsChecked(tasks[1]); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(tasks[1]); + await tasksCloudDemoPage.taskListCloudComponent().clickCheckbox(tasks[1]); + await tasksCloudDemoPage.taskListCloudComponent().checkRowIsChecked(tasks[1]); - tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(tasks[2]); - tasksCloudDemoPage.taskListCloudComponent().checkRowIsNotChecked(tasks[2]); - tasksCloudDemoPage.taskListCloudComponent().clickCheckbox(tasks[1]); - tasksCloudDemoPage.taskListCloudComponent().checkRowIsNotChecked(tasks[1]); - tasksCloudDemoPage.taskListCloudComponent().checkRowIsChecked(tasks[0]); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(tasks[2]); + await tasksCloudDemoPage.taskListCloudComponent().checkRowIsNotChecked(tasks[2]); + await tasksCloudDemoPage.taskListCloudComponent().clickCheckbox(tasks[1]); + await tasksCloudDemoPage.taskListCloudComponent().checkRowIsNotChecked(tasks[1]); + await tasksCloudDemoPage.taskListCloudComponent().checkRowIsChecked(tasks[0]); }); - it('[C291915] Should be possible select all the rows when multiselect is true', () => { - tasksCloudDemoPage.clickSettingsButton().enableMultiSelection(); - tasksCloudDemoPage.clickSettingsButton().disableDisplayTaskDetails(); - tasksCloudDemoPage.clickAppButton(); - tasksCloudDemoPage.taskListCloudComponent().getDataTable().waitForTableBody(); + it('[C291915] Should be possible select all the rows when multiselect is true', async () => { + await tasksCloudDemoPage.clickSettingsButton(); + await tasksCloudDemoPage.enableMultiSelection(); + await tasksCloudDemoPage.clickSettingsButton(); + await tasksCloudDemoPage.disableDisplayTaskDetails(); + await tasksCloudDemoPage.clickAppButton(); + await tasksCloudDemoPage.taskListCloudComponent().getDataTable().waitForTableBody(); - tasksCloudDemoPage.taskListCloudComponent().getDataTable() - .checkAllRowsButtonIsDisplayed() - .checkAllRows(); - tasksCloudDemoPage.taskListCloudComponent().checkRowIsChecked(tasks[0]); - tasksCloudDemoPage.taskListCloudComponent().clickCheckbox(tasks[1]); - tasksCloudDemoPage.taskListCloudComponent().checkRowIsChecked(tasks[2]); + await tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkAllRowsButtonIsDisplayed(); + await tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkAllRows(); + await tasksCloudDemoPage.taskListCloudComponent().checkRowIsChecked(tasks[0]); + await tasksCloudDemoPage.taskListCloudComponent().clickCheckbox(tasks[1]); + await tasksCloudDemoPage.taskListCloudComponent().checkRowIsChecked(tasks[2]); }); - it('[C297472] Should be able to see selected tasks with Multiselection and Testing switched on', () => { - tasksCloudDemoPage.clickSettingsButton().enableMultiSelection(); - tasksCloudDemoPage.clickSettingsButton().enableTestingMode(); - tasksCloudDemoPage.clickAppButton(); - tasksCloudDemoPage.taskListCloudComponent().getDataTable().waitForTableBody(); + it('[C297472] Should be able to see selected tasks with Multiselection and Testing switched on', async () => { + await tasksCloudDemoPage.clickSettingsButton(); + await tasksCloudDemoPage.enableMultiSelection(); + await tasksCloudDemoPage.clickSettingsButton(); + await tasksCloudDemoPage.enableTestingMode(); + await tasksCloudDemoPage.clickAppButton(); + await tasksCloudDemoPage.taskListCloudComponent().getDataTable().waitForTableBody(); - tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(tasks[0]); - tasksCloudDemoPage.taskListCloudComponent().clickCheckbox(tasks[0]); - tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(tasks[1]); - tasksCloudDemoPage.taskListCloudComponent().clickCheckbox(tasks[1]); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(tasks[0]); + await tasksCloudDemoPage.taskListCloudComponent().clickCheckbox(tasks[0]); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(tasks[1]); + await tasksCloudDemoPage.taskListCloudComponent().clickCheckbox(tasks[1]); - expect(tasksCloudDemoPage.getNoOfSelectedRows()).toBe(2); - expect(tasksCloudDemoPage.getSelectedTaskRowText('1')).toBe(tasks[0]); - expect(tasksCloudDemoPage.getSelectedTaskRowText('2')).toBe(tasks[1]); + await expect(await tasksCloudDemoPage.getNoOfSelectedRows()).toBe(2); + await expect(await tasksCloudDemoPage.getSelectedTaskRowText('1')).toBe(tasks[0]); + await expect(await tasksCloudDemoPage.getSelectedTaskRowText('2')).toBe(tasks[1]); }); }); diff --git a/e2e/process-services-cloud/tasks-custom-filters.e2e.ts b/e2e/process-services-cloud/tasks-custom-filters.e2e.ts index 019a01fb25..4546577e51 100644 --- a/e2e/process-services-cloud/tasks-custom-filters.e2e.ts +++ b/e2e/process-services-cloud/tasks-custom-filters.e2e.ts @@ -60,7 +60,7 @@ describe('Task filters cloud', () => { let priority = 30; const nrOfTasks = 3; - beforeAll(async (done) => { + beforeAll(async () => { await apiService.login(browser.params.identityAdmin.email, browser.params.identityAdmin.password); identityService = new IdentityService(apiService); groupIdentityService = new GroupIdentityService(apiService); @@ -93,7 +93,7 @@ describe('Task filters cloud', () => { queryService = new QueryService(apiService); - await browser.driver.sleep(4000); // eventual consistency query + await browser.sleep(4000); // eventual consistency query await queryService.getProcessInstanceTasks(secondProcessInstance.entry.id, simpleApp); await processInstancesService.suspendProcessInstance(processInstance.entry.id, simpleApp); await processInstancesService.deleteProcessInstance(secondProcessInstance.entry.id, simpleApp); @@ -104,67 +104,73 @@ describe('Task filters cloud', () => { browser.params.config.oauth2.host, browser.params.config.identityHost); await loginSSOPage.loginSSOIdentityService(testUser.email, testUser.password); - done(); - }, 5 * 60 * 1000 ); - afterAll(async(done) => { + }, 5 * 60 * 1000); + + afterAll(async () => { await apiService.login(browser.params.identityAdmin.email, browser.params.identityAdmin.password); await identityService.deleteIdentityUser(testUser.idIdentityService); - done(); + }, 60000); - beforeEach(async (done) => { + beforeEach(async () => { await navigationBarPage.navigateToProcessServicesCloudPage(); - appListCloudComponent.checkApsContainer(); + await appListCloudComponent.checkApsContainer(); await appListCloudComponent.goToApp(simpleApp); - tasksCloudDemoPage.taskListCloudComponent().getDataTable().waitForTableBody(); - done(); + await tasksCloudDemoPage.taskListCloudComponent().getDataTable().waitForTableBody(); + }); - it('[C290045] Should display only tasks with Assigned status when Assigned is selected from status dropdown', () => { - tasksCloudDemoPage.editTaskFilterCloudComponent().clickCustomiseFilterHeader().setStatusFilterDropDown('ASSIGNED'); + it('[C290045] Should display only tasks with Assigned status when Assigned is selected from status dropdown', async () => { + await tasksCloudDemoPage.editTaskFilterCloudComponent().openFilter(); + await tasksCloudDemoPage.editTaskFilterCloudComponent().setStatusFilterDropDown('ASSIGNED'); - tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(assignedTaskName); - tasksCloudDemoPage.taskListCloudComponent().checkContentIsNotDisplayedByName(createdTaskName); - tasksCloudDemoPage.taskListCloudComponent().checkContentIsNotDisplayedByName(completedTaskName); - tasksCloudDemoPage.taskListCloudComponent().checkContentIsNotDisplayedByName(deletedTaskName); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(assignedTaskName); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsNotDisplayedByName(createdTaskName); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsNotDisplayedByName(completedTaskName); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsNotDisplayedByName(deletedTaskName); }); - it('[C290061] Should display only tasks with Completed status when Completed is selected from status dropdown', () => { - tasksCloudDemoPage.editTaskFilterCloudComponent() - .clickCustomiseFilterHeader() - .setStatusFilterDropDown('COMPLETED'); + it('[C290061] Should display only tasks with Completed status when Completed is selected from status dropdown', async () => { + await tasksCloudDemoPage.editTaskFilterCloudComponent().openFilter(); + await tasksCloudDemoPage.editTaskFilterCloudComponent().setStatusFilterDropDown('COMPLETED'); - tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(completedTaskName); - tasksCloudDemoPage.taskListCloudComponent().checkContentIsNotDisplayedByName(assignedTaskName); - tasksCloudDemoPage.taskListCloudComponent().checkContentIsNotDisplayedByName(createdTaskName); - tasksCloudDemoPage.taskListCloudComponent().checkContentIsNotDisplayedByName(deletedTaskName); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(completedTaskName); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsNotDisplayedByName(assignedTaskName); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsNotDisplayedByName(createdTaskName); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsNotDisplayedByName(deletedTaskName); }); - it('[C290139] Should display only tasks with all statuses when All is selected from status dropdown', () => { - tasksCloudDemoPage.editTaskFilterCloudComponent().clickCustomiseFilterHeader().clearAssignee() - .setStatusFilterDropDown('ALL'); + it('[C290139] Should display only tasks with all statuses when All is selected from status dropdown', async () => { + await tasksCloudDemoPage.editTaskFilterCloudComponent().openFilter(); + await tasksCloudDemoPage.editTaskFilterCloudComponent().clearAssignee(); + await tasksCloudDemoPage.editTaskFilterCloudComponent().setStatusFilterDropDown('ALL'); - tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(deletedTaskName); - tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(assignedTaskName); - tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(createdTaskName); - tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(completedTaskName); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(deletedTaskName); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(assignedTaskName); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(createdTaskName); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(completedTaskName); }); - it('[C290060] Should display only tasks with Created status when Created is selected from status dropdown', () => { - tasksCloudDemoPage.editTaskFilterCloudComponent().clickCustomiseFilterHeader().clearAssignee().setStatusFilterDropDown('CREATED'); - tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(createdTaskName); - tasksCloudDemoPage.taskListCloudComponent().checkContentIsNotDisplayedByName(assignedTaskName); - tasksCloudDemoPage.taskListCloudComponent().checkContentIsNotDisplayedByName(completedTaskName); - tasksCloudDemoPage.taskListCloudComponent().checkContentIsNotDisplayedByName(deletedTaskName); + it('[C290060] Should display only tasks with Created status when Created is selected from status dropdown', async () => { + await tasksCloudDemoPage.editTaskFilterCloudComponent().openFilter(); + await tasksCloudDemoPage.editTaskFilterCloudComponent().clearAssignee(); + await tasksCloudDemoPage.editTaskFilterCloudComponent().setStatusFilterDropDown('CREATED'); + + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(createdTaskName); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsNotDisplayedByName(assignedTaskName); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsNotDisplayedByName(completedTaskName); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsNotDisplayedByName(deletedTaskName); }); - it('[C290155] Should display only tasks with Cancelled status when Cancelled is selected from status dropdown', () => { - tasksCloudDemoPage.editTaskFilterCloudComponent().clickCustomiseFilterHeader().clearAssignee().setStatusFilterDropDown('CANCELLED'); - tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(deletedTaskName); - tasksCloudDemoPage.taskListCloudComponent().checkContentIsNotDisplayedByName(assignedTaskName); - tasksCloudDemoPage.taskListCloudComponent().checkContentIsNotDisplayedByName(completedTaskName); - tasksCloudDemoPage.taskListCloudComponent().checkContentIsNotDisplayedByName(createdTaskName); + it('[C290155] Should display only tasks with Cancelled status when Cancelled is selected from status dropdown', async () => { + await tasksCloudDemoPage.editTaskFilterCloudComponent().openFilter(); + await tasksCloudDemoPage.editTaskFilterCloudComponent().clearAssignee(); + await tasksCloudDemoPage.editTaskFilterCloudComponent().setStatusFilterDropDown('CANCELLED'); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(deletedTaskName); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsNotDisplayedByName(assignedTaskName); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsNotDisplayedByName(completedTaskName); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsNotDisplayedByName(createdTaskName); }); }); }); diff --git a/e2e/process-services/apps-section.e2e.ts b/e2e/process-services/apps-section.e2e.ts index b95110d82a..771da22d71 100644 --- a/e2e/process-services/apps-section.e2e.ts +++ b/e2e/process-services/apps-section.e2e.ts @@ -41,7 +41,7 @@ describe('Modify applications', () => { const modelActions = new ModelsActions(); let firstApp, appVersionToBeDeleted; - beforeAll(async (done) => { + beforeAll(async () => { const users = new UsersActions(); this.alfrescoJsApi = new AlfrescoApi({ @@ -60,117 +60,111 @@ describe('Modify applications', () => { await loginPage.loginToProcessServicesUsingUserModel(user); - done(); }); - it('[C260198] Should the app be displayed on dashboard when is deployed on APS', () => { - navigationBarPage.navigateToProcessServicesPage(); + it('[C260198] Should the app be displayed on dashboard when is deployed on APS', async () => { + await navigationBarPage.navigateToProcessServicesPage(); - processServicesPage.checkApsContainer(); + await processServicesPage.checkApsContainer(); - expect(processServicesPage.getAppIconType(app.title)).toEqual(CONSTANTS.APP_ICON.UNIT); - expect(processServicesPage.getBackgroundColor(app.title)).toEqual(CONSTANTS.APP_COLOR.BLUE); - expect(processServicesPage.getDescription(app.title)).toEqual(app.description); + await expect(await processServicesPage.getAppIconType(app.title)).toEqual(CONSTANTS.APP_ICON.UNIT); + await expect(await processServicesPage.getBackgroundColor(app.title)).toEqual(CONSTANTS.APP_COLOR.BLUE); + await expect(await processServicesPage.getDescription(app.title)).toEqual(app.description); }); - it('[C260213] Should a new version of the app be displayed on dashboard when is replaced by importing another app in APS', () => { - navigationBarPage.navigateToProcessServicesPage(); + it('[C260213] Should a new version of the app be displayed on dashboard when is replaced by importing another app in APS', async () => { + await navigationBarPage.navigateToProcessServicesPage(); - processServicesPage.checkApsContainer(); + await processServicesPage.checkApsContainer(); - expect(processServicesPage.getAppIconType(app.title)).toEqual(CONSTANTS.APP_ICON.UNIT); - expect(processServicesPage.getBackgroundColor(app.title)).toEqual(CONSTANTS.APP_COLOR.BLUE); - expect(processServicesPage.getDescription(app.title)).toEqual(app.description); + await expect(await processServicesPage.getAppIconType(app.title)).toEqual(CONSTANTS.APP_ICON.UNIT); + await expect(await processServicesPage.getBackgroundColor(app.title)).toEqual(CONSTANTS.APP_COLOR.BLUE); + await expect(await processServicesPage.getDescription(app.title)).toEqual(app.description); - browser.controlFlow().execute(() => { - return apps.importNewVersionAppDefinitionPublishDeployApp(this.alfrescoJsApi, replacingApp.file_location, firstApp.id); - }); + await apps.importNewVersionAppDefinitionPublishDeployApp(this.alfrescoJsApi, replacingApp.file_location, firstApp.id); - navigationBarPage.clickHomeButton(); - navigationBarPage.navigateToProcessServicesPage(); + await navigationBarPage.clickHomeButton(); + await navigationBarPage.navigateToProcessServicesPage(); - processServicesPage.checkApsContainer(); + await processServicesPage.checkApsContainer(); - expect(processServicesPage.getAppIconType(app.title)).toEqual(CONSTANTS.APP_ICON.FAVORITE); - expect(processServicesPage.getBackgroundColor(app.title)).toEqual(CONSTANTS.APP_COLOR.GREY); - expect(processServicesPage.getDescription(app.title)).toEqual(app.description); + await expect(await processServicesPage.getAppIconType(app.title)).toEqual(CONSTANTS.APP_ICON.FAVORITE); + await expect(await processServicesPage.getBackgroundColor(app.title)).toEqual(CONSTANTS.APP_COLOR.GREY); + await expect(await processServicesPage.getDescription(app.title)).toEqual(app.description); }); it('[C260220] Should the app not be displayed on dashboard after it was deleted in APS', async () => { - navigationBarPage.navigateToProcessServicesPage(); + await navigationBarPage.navigateToProcessServicesPage(); - processServicesPage.checkApsContainer(); + await processServicesPage.checkApsContainer(); - processServicesPage.checkAppIsDisplayed(app.title); + await processServicesPage.checkAppIsDisplayed(app.title); - browser.controlFlow().execute(() => { - return modelActions.deleteEntireModel(this.alfrescoJsApi, firstApp.id); - }); + await modelActions.deleteEntireModel(this.alfrescoJsApi, firstApp.id); + await navigationBarPage.clickHomeButton(); + await navigationBarPage.navigateToProcessServicesPage(); - navigationBarPage.clickHomeButton(); - navigationBarPage.navigateToProcessServicesPage(); - - processServicesPage.checkApsContainer(); - processServicesPage.checkAppIsNotDisplayed(app.title); + await processServicesPage.checkApsContainer(); + await processServicesPage.checkAppIsNotDisplayed(app.title); }); it('[C260215] Should the penultimate version of an app be displayed on dashboard when the last version is deleted in APS', async () => { - navigationBarPage.navigateToProcessServicesPage(); + await navigationBarPage.navigateToProcessServicesPage(); - processServicesPage.checkApsContainer(); + await processServicesPage.checkApsContainer(); - processServicesPage.checkAppIsDisplayed(appToBeDeleted.title); - expect(processServicesPage.getBackgroundColor(appToBeDeleted.title)).toEqual(CONSTANTS.APP_COLOR.ORANGE); + await processServicesPage.checkAppIsDisplayed(appToBeDeleted.title); + await expect(await processServicesPage.getBackgroundColor(appToBeDeleted.title)).toEqual(CONSTANTS.APP_COLOR.ORANGE); - browser.controlFlow().execute(() => { - return apps.importNewVersionAppDefinitionPublishDeployApp(this.alfrescoJsApi, replacingApp.file_location, appVersionToBeDeleted.id); - }); + await apps.importNewVersionAppDefinitionPublishDeployApp(this.alfrescoJsApi, replacingApp.file_location, appVersionToBeDeleted.id); - navigationBarPage.clickHomeButton(); - navigationBarPage.navigateToProcessServicesPage(); + await navigationBarPage.clickHomeButton(); + await navigationBarPage.navigateToProcessServicesPage(); - processServicesPage.getBackgroundColor(appToBeDeleted.title); + await processServicesPage.getBackgroundColor(appToBeDeleted.title); - expect(processServicesPage.getBackgroundColor(appToBeDeleted.title)).toEqual(CONSTANTS.APP_COLOR.GREY); + await expect(await processServicesPage.getBackgroundColor(appToBeDeleted.title)).toEqual(CONSTANTS.APP_COLOR.GREY); - browser.controlFlow().execute(async () => { - await modelActions.deleteVersionModel(this.alfrescoJsApi, appVersionToBeDeleted.id); - await modelActions.deleteVersionModel(this.alfrescoJsApi, appVersionToBeDeleted.id); - await apps.publishDeployApp(this.alfrescoJsApi, appVersionToBeDeleted.id); - }); + await modelActions.deleteVersionModel(this.alfrescoJsApi, appVersionToBeDeleted.id); + await modelActions.deleteVersionModel(this.alfrescoJsApi, appVersionToBeDeleted.id); + await apps.publishDeployApp(this.alfrescoJsApi, appVersionToBeDeleted.id); - navigationBarPage.clickHomeButton(); - navigationBarPage.navigateToProcessServicesPage(); + await navigationBarPage.clickHomeButton(); + await navigationBarPage.navigateToProcessServicesPage(); - processServicesPage.checkApsContainer(); - processServicesPage.checkAppIsDisplayed(appToBeDeleted.title); - expect(processServicesPage.getBackgroundColor(appToBeDeleted.title)).toEqual(CONSTANTS.APP_COLOR.ORANGE); + await processServicesPage.checkApsContainer(); + await processServicesPage.checkAppIsDisplayed(appToBeDeleted.title); + await expect(await processServicesPage.getBackgroundColor(appToBeDeleted.title)).toEqual(CONSTANTS.APP_COLOR.ORANGE); }); it('[C260207] Should the app be updated when is edited in APS', async () => { const newDescription = 'new description'; - navigationBarPage.navigateToProcessServicesPage(); - processServicesPage.checkApsContainer(); + await navigationBarPage.navigateToProcessServicesPage(); + await processServicesPage.checkApsContainer(); - expect(processServicesPage.getAppIconType(appToBeDeleted.title)).toEqual(CONSTANTS.APP_ICON.USER); - expect(processServicesPage.getBackgroundColor(appToBeDeleted.title)).toEqual(CONSTANTS.APP_COLOR.ORANGE); - expect(processServicesPage.getDescription(appToBeDeleted.title)).toEqual(appToBeDeleted.description); + await expect(await processServicesPage.getAppIconType(appToBeDeleted.title)).toEqual(CONSTANTS.APP_ICON.USER); + await expect(await processServicesPage.getBackgroundColor(appToBeDeleted.title)).toEqual(CONSTANTS.APP_COLOR.ORANGE); + await expect(await processServicesPage.getDescription(appToBeDeleted.title)).toEqual(appToBeDeleted.description); - const appDefinition = {'appDefinition': {'id': appVersionToBeDeleted.id, 'name': appToBeDeleted.title, - 'description': newDescription, 'definition': {'models': [firstApp.definition.models[0]], 'theme': 'theme-4', - 'icon': 'glyphicon-user'}}, 'publish': true}; + const appDefinition = { + 'appDefinition': { + 'id': appVersionToBeDeleted.id, 'name': appToBeDeleted.title, + 'description': newDescription, 'definition': { + 'models': [firstApp.definition.models[0]], 'theme': 'theme-4', + 'icon': 'glyphicon-user' + } + }, 'publish': true + }; - browser.controlFlow().execute(async () => { - await this.alfrescoJsApi.activiti.appsApi.updateAppDefinition(appVersionToBeDeleted.id, appDefinition); - }); + await this.alfrescoJsApi.activiti.appsApi.updateAppDefinition(appVersionToBeDeleted.id, appDefinition); - navigationBarPage.clickHomeButton(); - navigationBarPage.navigateToProcessServicesPage(); + await navigationBarPage.clickHomeButton(); + await navigationBarPage.navigateToProcessServicesPage(); - expect(processServicesPage.getDescription(appToBeDeleted.title)).toEqual(newDescription); - expect(processServicesPage.getBackgroundColor(appToBeDeleted.title)).toEqual(CONSTANTS.APP_COLOR.RED); - expect(processServicesPage.getAppIconType(appToBeDeleted.title)).toEqual(CONSTANTS.APP_ICON.USER); + await expect(await processServicesPage.getDescription(appToBeDeleted.title)).toEqual(newDescription); + await expect(await processServicesPage.getBackgroundColor(appToBeDeleted.title)).toEqual(CONSTANTS.APP_COLOR.RED); + await expect(await processServicesPage.getAppIconType(appToBeDeleted.title)).toEqual(CONSTANTS.APP_ICON.USER); }); }); diff --git a/e2e/process-services/attach-file-widget.e2e.ts b/e2e/process-services/attach-file-widget.e2e.ts index 2f48b2f101..741ac4b30c 100644 --- a/e2e/process-services/attach-file-widget.e2e.ts +++ b/e2e/process-services/attach-file-widget.e2e.ts @@ -45,7 +45,7 @@ describe('Start Task - Task App', () => { const pdfFile = new FileModel({ 'name': resources.Files.ADF_DOCUMENTS.PDF.file_name }); const appFields = app.form_fields; - beforeAll(async (done) => { + beforeAll(async () => { const users = new UsersActions(); const apps = new AppsActions(); @@ -64,10 +64,9 @@ describe('Start Task - Task App', () => { await loginPage.loginToProcessServicesUsingUserModel(processUserModel); - done(); }); - afterAll(async (done) => { + afterAll(async () => { this.alfrescoJsApi = new AlfrescoApi({ provider: 'BPM', hostBpm: browser.params.testConfig.adf_aps.host @@ -77,28 +76,26 @@ describe('Start Task - Task App', () => { await this.alfrescoJsApi.activiti.adminTenantsApi.deleteTenant(processUserModel.tenantId); - done(); }); - it('[C274690] Should be able to open a file attached to a start form', () => { - navigationBarPage.navigateToProcessServicesPage().goToTaskApp().clickTasksButton(); + it('[C274690] Should be able to open a file attached to a start form', async () => { + await (await (await navigationBarPage.navigateToProcessServicesPage()).goToTaskApp()).clickTasksButton(); - taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); + await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); - taskPage - .createNewTask() - .addName('View file') - .addForm(app.formName) - .clickStartButton(); + const newTask = await taskPage.createNewTask(); + await newTask.addName('View file'); + await newTask.addForm(app.formName); + await newTask.clickStartButton(); - widget.attachFileWidget().attachFile(appFields.attachFile_id, browser.params.testConfig.main.rootPath + pdfFile.location); - widget.attachFileWidget().checkFileIsAttached(appFields.attachFile_id, pdfFile.name); + await widget.attachFileWidget().attachFile(appFields.attachFile_id, browser.params.testConfig.main.rootPath + pdfFile.location); + await widget.attachFileWidget().checkFileIsAttached(appFields.attachFile_id, pdfFile.name); - widget.attachFileWidget().viewFile(pdfFile.name); - viewerPage.checkFileContent('1', pdfFile.firstPageText); - viewerPage.checkCloseButtonIsDisplayed(); - viewerPage.clickCloseButton(); - taskPage.tasksListPage().checkContentIsDisplayed('View file'); + await widget.attachFileWidget().viewFile(pdfFile.name); + await viewerPage.checkFileContent('1', pdfFile.firstPageText); + await viewerPage.checkCloseButtonIsDisplayed(); + await viewerPage.clickCloseButton(); + await taskPage.tasksListPage().checkContentIsDisplayed('View file'); }); }); diff --git a/e2e/process-services/attach-form-component.e2e.ts b/e2e/process-services/attach-form-component.e2e.ts index b16f0bd73c..052cc67b46 100644 --- a/e2e/process-services/attach-form-component.e2e.ts +++ b/e2e/process-services/attach-form-component.e2e.ts @@ -50,7 +50,7 @@ describe('Attach Form Component', () => { formFieldValue: 'Test value' }; - beforeAll(async (done) => { + beforeAll(async () => { this.alfrescoJsApi = new AlfrescoApi({ provider: 'BPM', @@ -76,64 +76,63 @@ describe('Attach Form Component', () => { await loginPage.loginToProcessServicesUsingUserModel(user); - done(); }); - afterAll(async (done) => { + afterAll(async () => { await this.alfrescoJsApi.activiti.modelsApi.deleteModel(appId); await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); await this.alfrescoJsApi.activiti.adminTenantsApi.deleteTenant(tenantId); - done(); + }); - it('[C280047] Should be able to view the attach-form component after creating a standalone task', () => { - navigationBarPage.navigateToProcessServicesPage().goToTaskApp().clickTasksButton(); + it('[C280047] Should be able to view the attach-form component after creating a standalone task', async () => { + await (await (await navigationBarPage.navigateToProcessServicesPage()).goToTaskApp()).clickTasksButton(); - taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); - taskPage.tasksListPage().selectRow(testNames.taskName); + await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); + await taskPage.tasksListPage().selectRow(testNames.taskName); - attachFormPage.checkNoFormMessageIsDisplayed(); - attachFormPage.checkAttachFormButtonIsDisplayed(); - attachFormPage.checkCompleteButtonIsDisplayed(); + await attachFormPage.checkNoFormMessageIsDisplayed(); + await attachFormPage.checkAttachFormButtonIsDisplayed(); + await attachFormPage.checkCompleteButtonIsDisplayed(); }); - it('[C280048] Should be able to view the attach-form component after clicking cancel button', () => { - navigationBarPage.navigateToProcessServicesPage().goToTaskApp().clickTasksButton(); + it('[C280048] Should be able to view the attach-form component after clicking cancel button', async () => { + await (await (await navigationBarPage.navigateToProcessServicesPage()).goToTaskApp()).clickTasksButton(); - taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); - taskPage.tasksListPage().selectRow(testNames.taskName); + await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); + await taskPage.tasksListPage().selectRow(testNames.taskName); - attachFormPage.clickAttachFormButton(); - attachFormPage.checkDefaultFormTitleIsDisplayed(testNames.formTitle); - attachFormPage.checkFormDropdownIsDisplayed(); - attachFormPage.checkCancelButtonIsDisplayed(); - attachFormPage.checkAttachFormButtonIsDisabled(); - attachFormPage.clickAttachFormDropdown(); - attachFormPage.selectAttachFormOption(testNames.formName); + await attachFormPage.clickAttachFormButton(); + await attachFormPage.checkDefaultFormTitleIsDisplayed(testNames.formTitle); + await attachFormPage.checkFormDropdownIsDisplayed(); + await attachFormPage.checkCancelButtonIsDisplayed(); + await attachFormPage.checkAttachFormButtonIsDisabled(); + await attachFormPage.clickAttachFormDropdown(); + await attachFormPage.selectAttachFormOption(testNames.formName); - formFields.checkWidgetIsReadOnlyMode(testNames.widgetTitle); + await formFields.checkWidgetIsReadOnlyMode(testNames.widgetTitle); - attachFormPage.clickCancelButton(); - attachFormPage.checkAttachFormButtonIsDisplayed(); + await attachFormPage.clickCancelButton(); + await attachFormPage.checkAttachFormButtonIsDisplayed(); }); - it('[C280017] Should be able to attach a form on a standalone task and complete', () => { - navigationBarPage.navigateToProcessServicesPage().goToTaskApp().clickTasksButton(); + it('[C280017] Should be able to attach a form on a standalone task and complete', async () => { + await (await (await navigationBarPage.navigateToProcessServicesPage()).goToTaskApp()).clickTasksButton(); - taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); - taskPage.tasksListPage().selectRow(testNames.taskName); + await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); + await taskPage.tasksListPage().selectRow(testNames.taskName); - attachFormPage.clickAttachFormButton(); - attachFormPage.clickAttachFormDropdown(); - attachFormPage.selectAttachFormOption(testNames.formName); - attachFormPage.clickAttachFormButton(); + await attachFormPage.clickAttachFormButton(); + await attachFormPage.clickAttachFormDropdown(); + await attachFormPage.selectAttachFormOption(testNames.formName); + await attachFormPage.clickAttachFormButton(); - formFields.setFieldValue(by.id, formTextField, testNames.formFieldValue); - formFields.completeForm(); + await formFields.setFieldValue(by.id, formTextField, testNames.formFieldValue); + await formFields.completeForm(); - taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.COMPLETED_TASKS); - taskPage.tasksListPage().selectRow(testNames.taskName); + await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.COMPLETED_TASKS); + await taskPage.tasksListPage().selectRow(testNames.taskName); - expect(formFields.getFieldValue(formTextField)).toEqual(testNames.formFieldValue); + await expect(await formFields.getFieldValue(formTextField)).toEqual(testNames.formFieldValue); }); }); diff --git a/e2e/process-services/checklist-component.e2e.ts b/e2e/process-services/checklist-component.e2e.ts index a2fb2baf8f..4f3094e1a8 100644 --- a/e2e/process-services/checklist-component.e2e.ts +++ b/e2e/process-services/checklist-component.e2e.ts @@ -48,7 +48,7 @@ describe('Checklist component', () => { const removeChecklist = ['removeFirstRunningChecklist', 'removeSecondRunningChecklist', 'removeFirstCompletedChecklist', 'removeSecondCompletedChecklist']; const hierarchyChecklist = ['checklistOne', 'checklistTwo', 'checklistOneChild', 'checklistTwoChild']; - beforeAll(async (done) => { + beforeAll(async () => { const users = new UsersActions(); this.alfrescoJsApi = new AlfrescoApi({ @@ -75,124 +75,137 @@ describe('Checklist component', () => { await loginPage.loginToProcessServicesUsingUserModel(processUserModel); - done(); }); - beforeEach(async (done) => { - navigationBarPage.clickHomeButton(); - navigationBarPage.navigateToProcessServicesPage(); - processServices.goToTaskApp().clickTasksButton(); - taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); - done(); + beforeEach(async () => { + await navigationBarPage.clickHomeButton(); + await navigationBarPage.navigateToProcessServicesPage(); + await (await processServices.goToTaskApp()).clickTasksButton(); + await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); + }); - it('[C279976] Should no checklist be created when no title is typed', () => { - taskPage.tasksListPage().checkContentIsDisplayed(tasks[0]); - taskPage.tasksListPage().selectRow(tasks[0]); + it('[C279976] Should no checklist be created when no title is typed', async () => { + await taskPage.tasksListPage().checkContentIsDisplayed(tasks[0]); + await taskPage.tasksListPage().selectRow(tasks[0]); - taskPage.clickOnAddChecklistButton().clickCreateChecklistButton(); - taskPage.checkChecklistDialogIsNotDisplayed().checkNoChecklistIsDisplayed(); - expect(taskPage.getNumberOfChecklists()).toEqual('0'); + await (await taskPage.clickOnAddChecklistButton()).clickCreateChecklistButton(); + await taskPage.checkChecklistDialogIsNotDisplayed(); + await taskPage.checkNoChecklistIsDisplayed(); + await expect(await taskPage.getNumberOfChecklists()).toEqual('0'); }); - it('[C279975] Should no checklist be created when clicking on Cancel button on checklist dialog', () => { - taskPage.tasksListPage().checkContentIsDisplayed(tasks[0]); - taskPage.tasksListPage().selectRow(tasks[0]); + it('[C279975] Should no checklist be created when clicking on Cancel button on checklist dialog', async () => { + await taskPage.tasksListPage().checkContentIsDisplayed(tasks[0]); + await taskPage.tasksListPage().selectRow(tasks[0]); - taskPage.clickOnAddChecklistButton().addName(checklists[0]).clickCancelButton(); - taskPage.checkChecklistDialogIsNotDisplayed().checkNoChecklistIsDisplayed(); - expect(taskPage.getNumberOfChecklists()).toEqual('0'); + await (await taskPage.clickOnAddChecklistButton()).addName(checklists[0]); + await checklistDialog.clickCancelButton(); + await taskPage.checkChecklistDialogIsNotDisplayed(); + await taskPage.checkNoChecklistIsDisplayed(); + await expect(await taskPage.getNumberOfChecklists()).toEqual('0'); }); - it('[C261025] Should Checklist dialog be displayed when clicking on add checklist button', () => { - taskPage.tasksListPage().checkContentIsDisplayed(tasks[0]); - taskPage.tasksListPage().selectRow(tasks[0]); + it('[C261025] Should Checklist dialog be displayed when clicking on add checklist button', async () => { + await taskPage.tasksListPage().checkContentIsDisplayed(tasks[0]); + await taskPage.tasksListPage().selectRow(tasks[0]); - taskPage.clickOnAddChecklistButton(); - taskPage.checkChecklistDialogIsDisplayed(); - expect(taskPage.usingCheckListDialog().getDialogTitle()).toEqual('New Check'); - expect(taskPage.usingCheckListDialog().getNameFieldPlaceholder()).toEqual('Name'); - taskPage.usingCheckListDialog().checkAddChecklistButtonIsEnabled().checkCancelButtonIsEnabled(); - taskPage.usingCheckListDialog().clickCancelButton(); + await (await taskPage.clickOnAddChecklistButton()); + await taskPage.checkChecklistDialogIsDisplayed(); + await expect(await taskPage.usingCheckListDialog().getDialogTitle()).toEqual('New Check'); + await expect(await taskPage.usingCheckListDialog().getNameFieldPlaceholder()).toEqual('Name'); + await taskPage.usingCheckListDialog().checkAddChecklistButtonIsEnabled(); + await checklistDialog.checkCancelButtonIsEnabled(); + await taskPage.usingCheckListDialog().clickCancelButton(); }); - it('[C261026] Should Checklist number increase when a new checklist is added', () => { - taskPage.tasksListPage().checkContentIsDisplayed(tasks[1]); - taskPage.tasksListPage().selectRow(tasks[1]); + it('[C261026] Should Checklist number increase when a new checklist is added', async () => { + await taskPage.tasksListPage().checkContentIsDisplayed(tasks[1]); + await taskPage.tasksListPage().selectRow(tasks[1]); - taskPage.clickOnAddChecklistButton().addName(checklists[2]).clickCreateChecklistButton(); - taskPage.checkChecklistIsDisplayed(checklists[2]); - expect(taskPage.getNumberOfChecklists()).toEqual('1'); + await (await taskPage.clickOnAddChecklistButton()).addName(checklists[2]); + await checklistDialog.clickCreateChecklistButton(); + await taskPage.checkChecklistIsDisplayed(checklists[2]); + await expect(await taskPage.getNumberOfChecklists()).toEqual('1'); - taskPage.clickOnAddChecklistButton().addName(checklists[3]).clickCreateChecklistButton(); - taskPage.checkChecklistIsDisplayed(checklists[3]); - taskPage.checkChecklistIsDisplayed(checklists[2]); - expect(taskPage.getNumberOfChecklists()).toEqual('2'); + await (await taskPage.clickOnAddChecklistButton()).addName(checklists[3]); + await checklistDialog.clickCreateChecklistButton(); + await taskPage.checkChecklistIsDisplayed(checklists[3]); + await taskPage.checkChecklistIsDisplayed(checklists[2]); + await expect(await taskPage.getNumberOfChecklists()).toEqual('2'); }); - it('[C279980] Should checklist be removed when clicking on remove button', () => { - taskPage.tasksListPage().checkContentIsDisplayed(tasks[2]); - taskPage.tasksListPage().selectRow(tasks[2]); + it('[C279980] Should checklist be removed when clicking on remove button', async () => { + await taskPage.tasksListPage().checkContentIsDisplayed(tasks[2]); + await taskPage.tasksListPage().selectRow(tasks[2]); - taskPage.clickOnAddChecklistButton(); - taskPage.checkChecklistDialogIsDisplayed(); - checklistDialog.addName(removeChecklist[0]).clickCreateChecklistButton(); - taskPage.checkChecklistIsDisplayed(removeChecklist[0]); + await (await taskPage.clickOnAddChecklistButton()); + await taskPage.checkChecklistDialogIsDisplayed(); + await checklistDialog.addName(removeChecklist[0]); + await checklistDialog.clickCreateChecklistButton(); + await taskPage.checkChecklistIsDisplayed(removeChecklist[0]); - taskPage.clickOnAddChecklistButton().addName(removeChecklist[1]).clickCreateChecklistButton(); - taskPage.checkChecklistIsDisplayed(removeChecklist[1]); + await (await taskPage.clickOnAddChecklistButton()).addName(removeChecklist[1]); + await checklistDialog.clickCreateChecklistButton(); + await taskPage.checkChecklistIsDisplayed(removeChecklist[1]); - taskPage.removeChecklists(removeChecklist[1]); - taskPage.checkChecklistIsDisplayed(removeChecklist[0]); - taskPage.checkChecklistIsNotDisplayed(removeChecklist[1]); + await taskPage.removeChecklists(removeChecklist[1]); + await taskPage.checkChecklistIsDisplayed(removeChecklist[0]); + await taskPage.checkChecklistIsNotDisplayed(removeChecklist[1]); }); - it('[C261027] Should not be able to remove a completed Checklist when clicking on remove button', () => { - taskPage.tasksListPage().checkContentIsDisplayed(tasks[3]); - taskPage.tasksListPage().selectRow(tasks[3]); + it('[C261027] Should not be able to remove a completed Checklist when clicking on remove button', async () => { + await taskPage.tasksListPage().checkContentIsDisplayed(tasks[3]); + await taskPage.tasksListPage().selectRow(tasks[3]); - taskPage.clickOnAddChecklistButton().addName(removeChecklist[2]).clickCreateChecklistButton(); - taskPage.checkChecklistIsDisplayed(removeChecklist[2]); + await (await taskPage.clickOnAddChecklistButton()).addName(removeChecklist[2]); + await checklistDialog.clickCreateChecklistButton(); + await taskPage.checkChecklistIsDisplayed(removeChecklist[2]); - taskPage.clickOnAddChecklistButton().addName(removeChecklist[3]).clickCreateChecklistButton(); - taskPage.checkChecklistIsDisplayed(removeChecklist[3]); + await (await taskPage.clickOnAddChecklistButton()).addName(removeChecklist[3]); + await checklistDialog.clickCreateChecklistButton(); + await taskPage.checkChecklistIsDisplayed(removeChecklist[3]); - taskPage.tasksListPage().selectRow(removeChecklist[3]); - taskPage.completeTaskNoForm(); - taskPage.tasksListPage().checkContentIsNotDisplayed(removeChecklist[3]); + await taskPage.tasksListPage().selectRow(removeChecklist[3]); + await taskPage.completeTaskNoForm(); + await taskPage.tasksListPage().checkContentIsNotDisplayed(removeChecklist[3]); - taskPage.tasksListPage().selectRow(tasks[3]); - taskPage.checkChecklistIsDisplayed(removeChecklist[2]); - taskPage.checkChecklistIsDisplayed(removeChecklist[3]); - expect(taskPage.getNumberOfChecklists()).toEqual('2'); + await taskPage.tasksListPage().selectRow(tasks[3]); + await taskPage.checkChecklistIsDisplayed(removeChecklist[2]); + await taskPage.checkChecklistIsDisplayed(removeChecklist[3]); + await expect(await taskPage.getNumberOfChecklists()).toEqual('2'); - taskPage.checkChecklistsRemoveButtonIsNotDisplayed(removeChecklist[3]); + await taskPage.checkChecklistsRemoveButtonIsNotDisplayed(removeChecklist[3]); }); - it('[C261028] Should all checklists of a task be completed when the task is completed', () => { - taskPage.tasksListPage().checkContentIsDisplayed(tasks[4]); - taskPage.tasksListPage().selectRow(tasks[4]); + it('[C261028] Should all checklists of a task be completed when the task is completed', async () => { + await taskPage.tasksListPage().checkContentIsDisplayed(tasks[4]); + await taskPage.tasksListPage().selectRow(tasks[4]); - taskPage.clickOnAddChecklistButton().addName(hierarchyChecklist[0]).clickCreateChecklistButton(); - taskPage.clickOnAddChecklistButton().addName(hierarchyChecklist[1]).clickCreateChecklistButton(); + await (await taskPage.clickOnAddChecklistButton()).addName(hierarchyChecklist[0]); + await checklistDialog.clickCreateChecklistButton(); + await (await taskPage.clickOnAddChecklistButton()).addName(hierarchyChecklist[1]); + await checklistDialog.clickCreateChecklistButton(); - taskPage.tasksListPage().selectRow(hierarchyChecklist[0]); - taskPage.clickOnAddChecklistButton().addName(hierarchyChecklist[2]).clickCreateChecklistButton(); - taskPage.checkChecklistIsDisplayed(hierarchyChecklist[2]); + await taskPage.tasksListPage().selectRow(hierarchyChecklist[0]); + await (await taskPage.clickOnAddChecklistButton()).addName(hierarchyChecklist[2]); + await checklistDialog.clickCreateChecklistButton(); + await taskPage.checkChecklistIsDisplayed(hierarchyChecklist[2]); - taskPage.tasksListPage().selectRow(hierarchyChecklist[1]); - taskPage.clickOnAddChecklistButton().addName(hierarchyChecklist[3]).clickCreateChecklistButton(); - taskPage.checkChecklistIsDisplayed(hierarchyChecklist[3]); + await taskPage.tasksListPage().selectRow(hierarchyChecklist[1]); + await (await taskPage.clickOnAddChecklistButton()).addName(hierarchyChecklist[3]); + await checklistDialog.clickCreateChecklistButton(); + await taskPage.checkChecklistIsDisplayed(hierarchyChecklist[3]); - taskPage.tasksListPage().selectRow(tasks[4]); - taskPage.completeTaskNoForm(); + await taskPage.tasksListPage().selectRow(tasks[4]); + await taskPage.completeTaskNoForm(); - taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.COMPLETED_TASKS); - taskPage.tasksListPage().checkContentIsDisplayed(tasks[4]); - taskPage.tasksListPage().checkContentIsDisplayed(hierarchyChecklist[0]); - taskPage.tasksListPage().checkContentIsDisplayed(hierarchyChecklist[1]); - taskPage.tasksListPage().checkContentIsDisplayed(hierarchyChecklist[2]); - taskPage.tasksListPage().checkContentIsDisplayed(hierarchyChecklist[3]); + await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.COMPLETED_TASKS); + await taskPage.tasksListPage().checkContentIsDisplayed(tasks[4]); + await taskPage.tasksListPage().checkContentIsDisplayed(hierarchyChecklist[0]); + await taskPage.tasksListPage().checkContentIsDisplayed(hierarchyChecklist[1]); + await taskPage.tasksListPage().checkContentIsDisplayed(hierarchyChecklist[2]); + await taskPage.tasksListPage().checkContentIsDisplayed(hierarchyChecklist[3]); }); }); diff --git a/e2e/process-services/comment-component-processes.e2e.ts b/e2e/process-services/comment-component-processes.e2e.ts index e5e534262c..dc4119aa86 100644 --- a/e2e/process-services/comment-component-processes.e2e.ts +++ b/e2e/process-services/comment-component-processes.e2e.ts @@ -35,117 +35,95 @@ describe('Comment component for Processes', () => { const navigationBarPage = new NavigationBarPage(); const app = resources.Files.SIMPLE_APP_WITH_USER_FORM; - let user, tenantId, appId, processInstanceId, comment, taskComment, addedComment; + let user, tenantId, appId, processInstanceId, addedComment; - beforeAll(async(done) => { - this.alfrescoJsApi = new AlfrescoApi({ + beforeAll(async () => { + this.alfrescoJsApi = new AlfrescoApi({ provider: 'BPM', hostBpm: browser.params.testConfig.adf_aps.host }); - const apps = new AppsActions(); - const users = new UsersActions(); - - await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); - - user = await users.createTenantAndUser(this.alfrescoJsApi); - - tenantId = user.tenantId; - - await this.alfrescoJsApi.login(user.email, user.password); - - const importedApp = await apps.importPublishDeployApp(this.alfrescoJsApi, app.file_location); - appId = importedApp.id; - - const processWithComment = await apps.startProcess(this.alfrescoJsApi, 'Task App', 'Comment APS'); - processInstanceId = processWithComment.id; - - await loginPage.loginToProcessServicesUsingUserModel(user); - - done(); - }); - - afterAll(async(done) => { - await this.alfrescoJsApi.activiti.modelsApi.deleteModel(appId); + const apps = new AppsActions(); + const users = new UsersActions(); await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); + user = await users.createTenantAndUser(this.alfrescoJsApi); + + tenantId = user.tenantId; + + await this.alfrescoJsApi.login(user.email, user.password); + + const importedApp = await apps.importPublishDeployApp(this.alfrescoJsApi, app.file_location); + appId = importedApp.id; + + const processWithComment = await apps.startProcess(this.alfrescoJsApi, 'Task App', 'Comment APS'); + processInstanceId = processWithComment.id; + + await loginPage.loginToProcessServicesUsingUserModel(user); + + }); + + afterAll(async () => { + await this.alfrescoJsApi.activiti.modelsApi.deleteModel(appId); + await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); await this.alfrescoJsApi.activiti.adminTenantsApi.deleteTenant(tenantId); - done(); }); - it('[C260464] Should be able to add a comment on APS and check on ADF', () => { - browser.controlFlow().execute(async() => { - comment = {message: 'HELLO'}; + it('[C260464] Should be able to add a comment on APS and check on ADF', async () => { + await this.alfrescoJsApi.activiti.commentsApi.addProcessInstanceComment({ message: 'HELLO' }, processInstanceId); - await this.alfrescoJsApi.activiti.commentsApi.addProcessInstanceComment(comment, processInstanceId); - }); + await (await (await navigationBarPage.navigateToProcessServicesPage()).goToTaskApp()).clickProcessButton(); - navigationBarPage.navigateToProcessServicesPage().goToTaskApp().clickProcessButton(); + await processFiltersPage.clickRunningFilterButton(); + await processFiltersPage.selectFromProcessList('Comment APS'); - processFiltersPage.clickRunningFilterButton(); - processFiltersPage.selectFromProcessList('Comment APS'); + addedComment = await this.alfrescoJsApi.activiti.commentsApi.getProcessInstanceComments(processInstanceId, { 'latestFirst': true }); - browser.controlFlow().execute(async() => { - addedComment = await this.alfrescoJsApi.activiti.commentsApi.getProcessInstanceComments(processInstanceId, {'latestFirst': true}); + await commentsPage.checkUserIconIsDisplayed(); - commentsPage.checkUserIconIsDisplayed(0); - - expect(commentsPage.getTotalNumberOfComments()).toEqual('Comments (' + addedComment.total + ')'); - expect(commentsPage.getMessage(0)).toEqual(addedComment.data[0].message); - expect(commentsPage.getUserName(0)).toEqual(addedComment.data[0].createdBy.firstName + ' ' + addedComment.data[0].createdBy.lastName); - expect(commentsPage.getTime(0)).toMatch(/(ago|few)/); - }); + await expect(await commentsPage.getTotalNumberOfComments()).toEqual('Comments (' + addedComment.total + ')'); + await expect(await commentsPage.getMessage(0)).toEqual(addedComment.data[0].message); + await expect(await commentsPage.getUserName(0)).toEqual(addedComment.data[0].createdBy.firstName + ' ' + addedComment.data[0].createdBy.lastName); + await expect(await commentsPage.getTime(0)).toMatch(/(ago|few)/); }); - it('[C260465] Should not be able to view process comment on included task', () => { - browser.controlFlow().execute(async() => { - comment = {message: 'GOODBYE'}; + it('[C260465] Should not be able to view process comment on included task', async () => { + await this.alfrescoJsApi.activiti.commentsApi.addProcessInstanceComment({ message: 'GOODBYE' }, processInstanceId); - await this.alfrescoJsApi.activiti.commentsApi.addProcessInstanceComment(comment, processInstanceId); - }); + await (await (await navigationBarPage.navigateToProcessServicesPage()).goToTaskApp()).clickProcessButton(); - navigationBarPage.navigateToProcessServicesPage().goToTaskApp().clickProcessButton(); + await processFiltersPage.clickRunningFilterButton(); + await processFiltersPage.selectFromProcessList('Comment APS'); - processFiltersPage.clickRunningFilterButton(); - processFiltersPage.selectFromProcessList('Comment APS'); + const taskQuery = await this.alfrescoJsApi.activiti.taskApi.listTasks({ processInstanceId: processInstanceId }); - browser.controlFlow().execute(async() => { - const taskQuery = await this.alfrescoJsApi.activiti.taskApi.listTasks({processInstanceId: processInstanceId}); + const taskId = taskQuery.data[0].id; - const taskId = taskQuery.data[0].id; - - const taskComments = await this.alfrescoJsApi.activiti.commentsApi.getTaskComments(taskId, {'latestFirst': true}); - expect(taskComments.total).toEqual(0); - }); + const taskComments = await this.alfrescoJsApi.activiti.commentsApi.getTaskComments(taskId, { 'latestFirst': true }); + await expect(await taskComments.total).toEqual(0); }); - it('[C260466] Should be able to display comments from Task on the related Process', () => { - browser.controlFlow().execute(async() => { - const taskQuery = await this.alfrescoJsApi.activiti.taskApi.listTasks({processInstanceId: processInstanceId}); + it('[C260466] Should be able to display comments from Task on the related Process', async () => { + const taskQuery = await this.alfrescoJsApi.activiti.taskApi.listTasks({ processInstanceId: processInstanceId }); - const taskId = taskQuery.data[0].id; + const taskId = taskQuery.data[0].id; - taskComment = {message: 'Task Comment'}; + await this.alfrescoJsApi.activiti.taskApi.addTaskComment({ message: 'Task Comment' }, taskId); - await this.alfrescoJsApi.activiti.taskApi.addTaskComment(taskComment, taskId); - }); + await (await (await navigationBarPage.navigateToProcessServicesPage()).goToTaskApp()).clickProcessButton(); - navigationBarPage.navigateToProcessServicesPage().goToTaskApp().clickProcessButton(); + await processFiltersPage.clickRunningFilterButton(); + await processFiltersPage.selectFromProcessList('Comment APS'); - processFiltersPage.clickRunningFilterButton(); - processFiltersPage.selectFromProcessList('Comment APS'); + const addedTaskComment = await this.alfrescoJsApi.activiti.commentsApi.getProcessInstanceComments(processInstanceId, { 'latestFirst': true }); - browser.controlFlow().execute(async() => { - const addedTaskComment = await this.alfrescoJsApi.activiti.commentsApi.getProcessInstanceComments(processInstanceId, {'latestFirst': true}); + await commentsPage.checkUserIconIsDisplayed(); - commentsPage.checkUserIconIsDisplayed(0); - - expect(commentsPage.getTotalNumberOfComments()).toEqual('Comments (' + addedTaskComment.total + ')'); - expect(commentsPage.getMessage(0)).toEqual(addedTaskComment.data[0].message); - expect(commentsPage.getUserName(0)).toEqual(addedTaskComment.data[0].createdBy.firstName + ' ' + addedTaskComment.data[0].createdBy.lastName); - expect(commentsPage.getTime(0)).toMatch(/(ago|few)/); - }); + await expect(await commentsPage.getTotalNumberOfComments()).toEqual('Comments (' + addedTaskComment.total + ')'); + await expect(await commentsPage.getMessage(0)).toEqual(addedTaskComment.data[0].message); + await expect(await commentsPage.getUserName(0)).toEqual(addedTaskComment.data[0].createdBy.firstName + ' ' + addedTaskComment.data[0].createdBy.lastName); + await expect(await commentsPage.getTime(0)).toMatch(/(ago|few)/); }); }); diff --git a/e2e/process-services/comment-component-tasks.e2e.ts b/e2e/process-services/comment-component-tasks.e2e.ts index be312480ef..4c6e765208 100644 --- a/e2e/process-services/comment-component-tasks.e2e.ts +++ b/e2e/process-services/comment-component-tasks.e2e.ts @@ -45,7 +45,7 @@ describe('Comment component for Processes', () => { multiple_users: 'Test Comment multiple users' }; - beforeAll(async (done) => { + beforeAll(async () => { this.alfrescoJsApi = new AlfrescoApi({ provider: 'BPM', @@ -70,106 +70,97 @@ describe('Comment component for Processes', () => { await loginPage.loginToProcessServicesUsingUserModel(user); - done(); }); - afterAll(async (done) => { + afterAll(async () => { await this.alfrescoJsApi.activiti.modelsApi.deleteModel(appId); await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); await this.alfrescoJsApi.activiti.adminTenantsApi.deleteTenant(tenantId); - done(); + }); - it('[C260237] Should not be able to add a comment on a completed task', () => { - browser.controlFlow().execute(async () => { - const newTask = await this.alfrescoJsApi.activiti.taskApi.createNewTask({ name: taskName.completed_task }); + it('[C260237] Should not be able to add a comment on a completed task', async () => { + const newTask = await this.alfrescoJsApi.activiti.taskApi.createNewTask({ name: taskName.completed_task }); - const taskId = newTask.id; + const taskId = newTask.id; - this.alfrescoJsApi.activiti.taskActionsApi.completeTask(taskId); - }); + await this.alfrescoJsApi.activiti.taskActionsApi.completeTask(taskId); - navigationBarPage.navigateToProcessServicesPage().goToTaskApp().clickTasksButton(); + await (await (await navigationBarPage.navigateToProcessServicesPage()).goToTaskApp()).clickTasksButton(); - taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.COMPLETED_TASKS); - taskPage.tasksListPage().selectRow(taskName.completed_task); + await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.COMPLETED_TASKS); + await taskPage.tasksListPage().selectRow(taskName.completed_task); - commentsPage.checkCommentInputIsNotDisplayed(); + await commentsPage.checkCommentInputIsNotDisplayed(); }); - it('[C212864] Should be able to add multiple comments on a single task using different users', () => { - browser.controlFlow().execute(async () => { - const newTask = await this.alfrescoJsApi.activiti.taskApi.createNewTask({ name: taskName.multiple_users }); + it('[C212864] Should be able to add multiple comments on a single task using different users', async () => { + const newTask = await this.alfrescoJsApi.activiti.taskApi.createNewTask({ name: taskName.multiple_users }); - newTaskId = newTask.id; + newTaskId = newTask.id; - await this.alfrescoJsApi.activiti.taskApi.involveUser(newTaskId, { email: secondUser.email }); + await this.alfrescoJsApi.activiti.taskApi.involveUser(newTaskId, { email: secondUser.email }); - const taskComment = { message: 'Task Comment' }; - const secondTaskComment = { message: 'Second Task Comment' }; + const taskComment = { message: 'Task Comment' }; + const secondTaskComment = { message: 'Second Task Comment' }; - await this.alfrescoJsApi.activiti.taskApi.addTaskComment(taskComment, newTaskId); - await this.alfrescoJsApi.activiti.taskApi.addTaskComment(secondTaskComment, newTaskId); - }); + await this.alfrescoJsApi.activiti.taskApi.addTaskComment(taskComment, newTaskId); + await this.alfrescoJsApi.activiti.taskApi.addTaskComment(secondTaskComment, newTaskId); - navigationBarPage.navigateToProcessServicesPage().goToTaskApp().clickTasksButton(); + await (await (await navigationBarPage.navigateToProcessServicesPage()).goToTaskApp()).clickTasksButton(); - taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); - taskPage.tasksListPage().selectRow(taskName.multiple_users); - taskPage.taskDetails().selectActivityTab(); + await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); + await taskPage.tasksListPage().selectRow(taskName.multiple_users); + await taskPage.taskDetails().selectActivityTab(); - browser.controlFlow().execute(async () => { - const totalComments = await this.alfrescoJsApi.activiti.taskApi.getTaskComments(newTaskId, { 'latestFirst': true }); + const totalCommentsLatest = await this.alfrescoJsApi.activiti.taskApi.getTaskComments(newTaskId, { 'latestFirst': true }); - const thirdTaskComment = { message: 'Third Task Comment' }; + const thirdTaskComment = { message: 'Third Task Comment' }; - await commentsPage.checkUserIconIsDisplayed(0); - await commentsPage.checkUserIconIsDisplayed(1); + await commentsPage.checkUserIconIsDisplayed(); + await commentsPage.checkUserIconIsDisplayed(); - await expect(commentsPage.getTotalNumberOfComments()).toEqual('Comments (' + totalComments.total + ')'); + await expect(await commentsPage.getTotalNumberOfComments()).toEqual('Comments (' + totalCommentsLatest.total + ')'); - await expect(commentsPage.getMessage(0)).toEqual(totalComments.data[0].message); - await expect(commentsPage.getMessage(1)).toEqual(totalComments.data[1].message); + await expect(await commentsPage.getMessage(0)).toEqual(totalCommentsLatest.data[0].message); + await expect(await commentsPage.getMessage(1)).toEqual(totalCommentsLatest.data[1].message); - await expect(commentsPage.getUserName(0)).toEqual(totalComments.data[0].createdBy.firstName + ' ' + totalComments.data[0].createdBy.lastName); - await expect(commentsPage.getUserName(1)).toEqual(totalComments.data[1].createdBy.firstName + ' ' + totalComments.data[1].createdBy.lastName); + await expect(await commentsPage.getUserName(0)).toEqual(totalCommentsLatest.data[0].createdBy.firstName + ' ' + totalCommentsLatest.data[0].createdBy.lastName); + await expect(await commentsPage.getUserName(1)).toEqual(totalCommentsLatest.data[1].createdBy.firstName + ' ' + totalCommentsLatest.data[1].createdBy.lastName); - await expect(commentsPage.getTime(0)).toMatch(/(ago|few)/); - await expect(commentsPage.getTime(1)).toMatch(/(ago|few)/); + await expect(await commentsPage.getTime(0)).toMatch(/(ago|few)/); + await expect(await commentsPage.getTime(1)).toMatch(/(ago|few)/); - await loginPage.loginToProcessServicesUsingUserModel(secondUser); + await loginPage.loginToProcessServicesUsingUserModel(secondUser); - await this.alfrescoJsApi.activiti.taskApi.addTaskComment(thirdTaskComment, newTaskId); - }); + await this.alfrescoJsApi.activiti.taskApi.addTaskComment(thirdTaskComment, newTaskId); - navigationBarPage.navigateToProcessServicesPage().goToTaskApp().clickTasksButton(); + await (await (await navigationBarPage.navigateToProcessServicesPage()).goToTaskApp()).clickTasksButton(); - taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.INV_TASKS); - taskPage.tasksListPage().selectRow(taskName.multiple_users); - taskPage.taskDetails().selectActivityTab(); + await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.INV_TASKS); + await taskPage.tasksListPage().selectRow(taskName.multiple_users); + await taskPage.taskDetails().selectActivityTab(); - browser.controlFlow().execute(async () => { - const totalComments = await this.alfrescoJsApi.activiti.taskApi.getTaskComments(newTaskId, { 'latestFirst': true }); + const totalComments = await this.alfrescoJsApi.activiti.taskApi.getTaskComments(newTaskId, { 'latestFirst': true }); - await commentsPage.checkUserIconIsDisplayed(0); - await commentsPage.checkUserIconIsDisplayed(1); - await commentsPage.checkUserIconIsDisplayed(2); + await commentsPage.checkUserIconIsDisplayed(); + await commentsPage.checkUserIconIsDisplayed(); + await commentsPage.checkUserIconIsDisplayed(); - await expect(commentsPage.getTotalNumberOfComments()).toEqual('Comments (' + totalComments.total + ')'); + await expect(await commentsPage.getTotalNumberOfComments()).toEqual('Comments (' + totalComments.total + ')'); - await expect(commentsPage.getMessage(0)).toEqual(totalComments.data[0].message); - await expect(commentsPage.getMessage(1)).toEqual(totalComments.data[1].message); - await expect(commentsPage.getMessage(2)).toEqual(totalComments.data[2].message); + await expect(await commentsPage.getMessage(0)).toEqual(totalComments.data[0].message); + await expect(await commentsPage.getMessage(1)).toEqual(totalComments.data[1].message); + await expect(await commentsPage.getMessage(2)).toEqual(totalComments.data[2].message); - await expect(commentsPage.getUserName(0)).toEqual(totalComments.data[0].createdBy.firstName + ' ' + totalComments.data[0].createdBy.lastName); - await expect(commentsPage.getUserName(1)).toEqual(totalComments.data[1].createdBy.firstName + ' ' + totalComments.data[1].createdBy.lastName); - await expect(commentsPage.getUserName(2)).toEqual(totalComments.data[2].createdBy.firstName + ' ' + totalComments.data[2].createdBy.lastName); + await expect(await commentsPage.getUserName(0)).toEqual(totalComments.data[0].createdBy.firstName + ' ' + totalComments.data[0].createdBy.lastName); + await expect(await commentsPage.getUserName(1)).toEqual(totalComments.data[1].createdBy.firstName + ' ' + totalComments.data[1].createdBy.lastName); + await expect(await commentsPage.getUserName(2)).toEqual(totalComments.data[2].createdBy.firstName + ' ' + totalComments.data[2].createdBy.lastName); - await expect(commentsPage.getTime(0)).toMatch(/(ago|few)/); - await expect(commentsPage.getTime(1)).toMatch(/(ago|few)/); - await expect(commentsPage.getTime(2)).toMatch(/(ago|few)/); - }); + await expect(await commentsPage.getTime(0)).toMatch(/(ago|few)/); + await expect(await commentsPage.getTime(1)).toMatch(/(ago|few)/); + await expect(await commentsPage.getTime(2)).toMatch(/(ago|few)/); }); }); diff --git a/e2e/process-services/custom-process-filters-sorting.e2e.ts b/e2e/process-services/custom-process-filters-sorting.e2e.ts index 801c7b8445..1b9e908c83 100644 --- a/e2e/process-services/custom-process-filters-sorting.e2e.ts +++ b/e2e/process-services/custom-process-filters-sorting.e2e.ts @@ -51,16 +51,15 @@ describe('Sorting for process filters', () => { completed_least_recently: 'Completed - Least recently' }; - beforeAll(async (done) => { + beforeAll(async () => { this.alfrescoJsApi = new AlfrescoApi({ provider: 'BPM', hostBpm: browser.params.testConfig.adf_aps.host }); - done(); }); - beforeEach(async (done) => { + beforeEach(async () => { const users = new UsersActions(); await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); @@ -75,298 +74,240 @@ describe('Sorting for process filters', () => { await loginPage.loginToProcessServicesUsingUserModel(user); - done(); }); - afterEach(async (done) => { + afterEach(async () => { await this.alfrescoJsApi.activiti.modelsApi.deleteModel(appId); await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); await this.alfrescoJsApi.activiti.adminTenantsApi.deleteTenant(tenantId); - done(); }); it('[C260476] Should be able to create a filter on APS for running processes - Oldest first and check on ADF', async () => { - await browser.controlFlow().execute(async () => { - await this.alfrescoJsApi.activiti.userFiltersApi.createUserProcessInstanceFilter({ - 'appId': null, 'name': processFilter.running_old_first, 'icon': 'glyphicon-random', - 'filter': { 'sort': 'created-asc', 'name': '', 'state': 'running' } - }); - await apps.startProcess(this.alfrescoJsApi, 'Task App', 'Process 1'); - await apps.startProcess(this.alfrescoJsApi, 'Task App', 'Process 2'); - await apps.startProcess(this.alfrescoJsApi, 'Task App', 'Process 3'); + await this.alfrescoJsApi.activiti.userFiltersApi.createUserProcessInstanceFilter({ + 'appId': null, 'name': processFilter.running_old_first, 'icon': 'glyphicon-random', + 'filter': { 'sort': 'created-asc', 'name': '', 'state': 'running' } }); + await apps.startProcess(this.alfrescoJsApi, 'Task App', 'Process 1'); + await apps.startProcess(this.alfrescoJsApi, 'Task App', 'Process 2'); + await apps.startProcess(this.alfrescoJsApi, 'Task App', 'Process 3'); - navigationBarPage - .navigateToProcessServicesPage() - .goToTaskApp() - .clickProcessButton(); - processFiltersPage.checkFilterIsDisplayed(processFilter.running_old_first); - filtersPage.goToFilter(processFilter.running_old_first); - await browser.controlFlow().execute(async () => { - processesQuery = await this.alfrescoJsApi.activiti.processApi.getProcessInstances({ - 'processDefinitionId': null, 'appDefinitionId': null, 'state': 'running', 'sort': 'created-asc' - }); - expect(processesQuery.data[0].name).toEqual('Process 1'); - expect(processesQuery.data[1].name).toEqual('Process 2'); - expect(processesQuery.data[2].name).toEqual('Process 3'); + await (await (await navigationBarPage.navigateToProcessServicesPage()).goToTaskApp()).clickProcessButton(); + + await processFiltersPage.checkFilterIsDisplayed(processFilter.running_old_first); + await filtersPage.goToFilter(processFilter.running_old_first); + processesQuery = await this.alfrescoJsApi.activiti.processApi.getProcessInstances({ + 'processDefinitionId': null, 'appDefinitionId': null, 'state': 'running', 'sort': 'created-asc' }); + await expect(processesQuery.data[0].name).toEqual('Process 1'); + await expect(processesQuery.data[1].name).toEqual('Process 2'); + await expect(processesQuery.data[2].name).toEqual('Process 3'); }); it('[C260477] Should be able to create a filter on APS for completed processes - Oldest first and check on ADF', async () => { - await browser.controlFlow().execute(async () => { - await this.alfrescoJsApi.activiti.userFiltersApi.createUserProcessInstanceFilter({ - 'appId': null, 'name': processFilter.completed_old_first, 'icon': 'glyphicon-random', - 'filter': { 'sort': 'created-asc', 'name': '', 'state': 'completed' } - }); - - const firstProc = await apps.startProcess(this.alfrescoJsApi, 'Task App', 'Process 1'); - const secondProc = await apps.startProcess(this.alfrescoJsApi, 'Task App', 'Process 2'); - const thirdProc = await apps.startProcess(this.alfrescoJsApi, 'Task App', 'Process 3'); - - await this.alfrescoJsApi.activiti.processInstancesApi.deleteProcessInstance(firstProc.id); - await this.alfrescoJsApi.activiti.processInstancesApi.deleteProcessInstance(secondProc.id); - await this.alfrescoJsApi.activiti.processInstancesApi.deleteProcessInstance(thirdProc.id); + await this.alfrescoJsApi.activiti.userFiltersApi.createUserProcessInstanceFilter({ + 'appId': null, 'name': processFilter.completed_old_first, 'icon': 'glyphicon-random', + 'filter': { 'sort': 'created-asc', 'name': '', 'state': 'completed' } }); - navigationBarPage - .navigateToProcessServicesPage() - .goToTaskApp() - .clickProcessButton(); + const firstProc = await apps.startProcess(this.alfrescoJsApi, 'Task App', 'Process 1'); + const secondProc = await apps.startProcess(this.alfrescoJsApi, 'Task App', 'Process 2'); + const thirdProc = await apps.startProcess(this.alfrescoJsApi, 'Task App', 'Process 3'); - processFiltersPage.checkFilterIsDisplayed(processFilter.completed_old_first); + await this.alfrescoJsApi.activiti.processInstancesApi.deleteProcessInstance(firstProc.id); + await this.alfrescoJsApi.activiti.processInstancesApi.deleteProcessInstance(secondProc.id); + await this.alfrescoJsApi.activiti.processInstancesApi.deleteProcessInstance(thirdProc.id); - filtersPage.goToFilter(processFilter.completed_old_first); + await (await (await navigationBarPage.navigateToProcessServicesPage()).goToTaskApp()).clickProcessButton(); - await browser.controlFlow().execute(async () => { - processesQuery = await this.alfrescoJsApi.activiti.processApi.getProcessInstances({ - 'processDefinitionId': null, 'appDefinitionId': null, 'state': 'completed', 'sort': 'created-asc' - }); - expect(processesQuery.data[0].name).toEqual('Process 1'); - expect(processesQuery.data[1].name).toEqual('Process 2'); - expect(processesQuery.data[2].name).toEqual('Process 3'); + await processFiltersPage.checkFilterIsDisplayed(processFilter.completed_old_first); + + await filtersPage.goToFilter(processFilter.completed_old_first); + + processesQuery = await this.alfrescoJsApi.activiti.processApi.getProcessInstances({ + 'processDefinitionId': null, 'appDefinitionId': null, 'state': 'completed', 'sort': 'created-asc' }); + await expect(processesQuery.data[0].name).toEqual('Process 1'); + await expect(processesQuery.data[1].name).toEqual('Process 2'); + await expect(processesQuery.data[2].name).toEqual('Process 3'); }); it('[C260478] Should be able to create a filter on APS for all processes - Oldest first and check on ADF', async () => { - await browser.controlFlow().execute(async () => { - await this.alfrescoJsApi.activiti.userFiltersApi.createUserProcessInstanceFilter({ - 'appId': null, 'name': processFilter.all_old_first, 'icon': 'glyphicon-random', - 'filter': { 'sort': 'created-asc', 'name': '', 'state': 'all' } - }); - - await apps.startProcess(this.alfrescoJsApi, 'Task App', 'Process 1'); - await apps.startProcess(this.alfrescoJsApi, 'Task App', 'Process 2'); - await apps.startProcess(this.alfrescoJsApi, 'Task App', 'Process 3'); - - const firstProc = await apps.startProcess(this.alfrescoJsApi, 'Task App', 'Process 4'); - const secondProc = await apps.startProcess(this.alfrescoJsApi, 'Task App', 'Process 5'); - const thirdProc = await apps.startProcess(this.alfrescoJsApi, 'Task App', 'Process 6'); - - await this.alfrescoJsApi.activiti.processInstancesApi.deleteProcessInstance(firstProc.id); - await this.alfrescoJsApi.activiti.processInstancesApi.deleteProcessInstance(secondProc.id); - await this.alfrescoJsApi.activiti.processInstancesApi.deleteProcessInstance(thirdProc.id); + await this.alfrescoJsApi.activiti.userFiltersApi.createUserProcessInstanceFilter({ + 'appId': null, 'name': processFilter.all_old_first, 'icon': 'glyphicon-random', + 'filter': { 'sort': 'created-asc', 'name': '', 'state': 'all' } }); - navigationBarPage - .navigateToProcessServicesPage() - .goToTaskApp() - .clickProcessButton(); + await apps.startProcess(this.alfrescoJsApi, 'Task App', 'Process 1'); + await apps.startProcess(this.alfrescoJsApi, 'Task App', 'Process 2'); + await apps.startProcess(this.alfrescoJsApi, 'Task App', 'Process 3'); - processFiltersPage.checkFilterIsDisplayed(processFilter.all_old_first); + const firstProc = await apps.startProcess(this.alfrescoJsApi, 'Task App', 'Process 4'); + const secondProc = await apps.startProcess(this.alfrescoJsApi, 'Task App', 'Process 5'); + const thirdProc = await apps.startProcess(this.alfrescoJsApi, 'Task App', 'Process 6'); - filtersPage.goToFilter(processFilter.all_old_first); + await this.alfrescoJsApi.activiti.processInstancesApi.deleteProcessInstance(firstProc.id); + await this.alfrescoJsApi.activiti.processInstancesApi.deleteProcessInstance(secondProc.id); + await this.alfrescoJsApi.activiti.processInstancesApi.deleteProcessInstance(thirdProc.id); - await browser.controlFlow().execute(async () => { - processesQuery = await this.alfrescoJsApi.activiti.processApi.getProcessInstances({ - 'processDefinitionId': null, 'appDefinitionId': null, 'state': 'all', 'sort': 'created-asc' - }); - expect(processesQuery.data[0].name).toEqual('Process 1'); - expect(processesQuery.data[1].name).toEqual('Process 2'); - expect(processesQuery.data[2].name).toEqual('Process 3'); - expect(processesQuery.data[3].name).toEqual('Process 4'); - expect(processesQuery.data[4].name).toEqual('Process 5'); - expect(processesQuery.data[5].name).toEqual('Process 6'); + await (await (await navigationBarPage.navigateToProcessServicesPage()).goToTaskApp()).clickProcessButton(); + + await processFiltersPage.checkFilterIsDisplayed(processFilter.all_old_first); + + await filtersPage.goToFilter(processFilter.all_old_first); + + processesQuery = await this.alfrescoJsApi.activiti.processApi.getProcessInstances({ + 'processDefinitionId': null, 'appDefinitionId': null, 'state': 'all', 'sort': 'created-asc' }); + await expect(processesQuery.data[0].name).toEqual('Process 1'); + await expect(processesQuery.data[1].name).toEqual('Process 2'); + await expect(processesQuery.data[2].name).toEqual('Process 3'); + await expect(processesQuery.data[3].name).toEqual('Process 4'); + await expect(processesQuery.data[4].name).toEqual('Process 5'); + await expect(processesQuery.data[5].name).toEqual('Process 6'); }); it('[C260479] Should be able to create a filter on APS for running processes - Newest first and check on ADF', async () => { - await browser.controlFlow().execute(async () => { - await this.alfrescoJsApi.activiti.userFiltersApi.createUserProcessInstanceFilter({ - 'appId': null, 'name': processFilter.running_new_first, 'icon': 'glyphicon-random', - 'filter': { 'sort': 'created-desc', 'name': '', 'state': 'running' } - }); - - await apps.startProcess(this.alfrescoJsApi, 'Task App', 'Process 1'); - await apps.startProcess(this.alfrescoJsApi, 'Task App', 'Process 2'); - await apps.startProcess(this.alfrescoJsApi, 'Task App', 'Process 3'); + await this.alfrescoJsApi.activiti.userFiltersApi.createUserProcessInstanceFilter({ + 'appId': null, 'name': processFilter.running_new_first, 'icon': 'glyphicon-random', + 'filter': { 'sort': 'created-desc', 'name': '', 'state': 'running' } }); - navigationBarPage - .navigateToProcessServicesPage() - .goToTaskApp() - .clickProcessButton(); + await apps.startProcess(this.alfrescoJsApi, 'Task App', 'Process 1'); + await apps.startProcess(this.alfrescoJsApi, 'Task App', 'Process 2'); + await apps.startProcess(this.alfrescoJsApi, 'Task App', 'Process 3'); - processFiltersPage.checkFilterIsDisplayed(processFilter.running_new_first); + await (await (await navigationBarPage.navigateToProcessServicesPage()).goToTaskApp()).clickProcessButton(); - filtersPage.goToFilter(processFilter.running_new_first); + await processFiltersPage.checkFilterIsDisplayed(processFilter.running_new_first); - await browser.controlFlow().execute(async () => { - processesQuery = await this.alfrescoJsApi.activiti.processApi.getProcessInstances({ - 'processDefinitionId': null, 'appDefinitionId': null, 'state': 'running', 'sort': 'created-desc' - }); - expect(processesQuery.data[0].name).toEqual('Process 3'); - expect(processesQuery.data[1].name).toEqual('Process 2'); - expect(processesQuery.data[2].name).toEqual('Process 1'); + await filtersPage.goToFilter(processFilter.running_new_first); + + processesQuery = await this.alfrescoJsApi.activiti.processApi.getProcessInstances({ + 'processDefinitionId': null, 'appDefinitionId': null, 'state': 'running', 'sort': 'created-desc' }); + await expect(processesQuery.data[0].name).toEqual('Process 3'); + await expect(processesQuery.data[1].name).toEqual('Process 2'); + await expect(processesQuery.data[2].name).toEqual('Process 1'); }); it('[C260480] Should be able to create a filter on APS for completed processes - Newest first and check on ADF', async () => { - await browser.controlFlow().execute(async () => { - await this.alfrescoJsApi.activiti.userFiltersApi.createUserProcessInstanceFilter({ - 'appId': null, 'name': processFilter.completed_new_first, 'icon': 'glyphicon-random', - 'filter': { 'sort': 'created-desc', 'name': '', 'state': 'completed' } - }); - - const firstProc = await apps.startProcess(this.alfrescoJsApi, 'Task App', 'Process 1'); - const secondProc = await apps.startProcess(this.alfrescoJsApi, 'Task App', 'Process 2'); - const thirdProc = await apps.startProcess(this.alfrescoJsApi, 'Task App', 'Process 3'); - - await this.alfrescoJsApi.activiti.processInstancesApi.deleteProcessInstance(firstProc.id); - await this.alfrescoJsApi.activiti.processInstancesApi.deleteProcessInstance(secondProc.id); - await this.alfrescoJsApi.activiti.processInstancesApi.deleteProcessInstance(thirdProc.id); + await this.alfrescoJsApi.activiti.userFiltersApi.createUserProcessInstanceFilter({ + 'appId': null, 'name': processFilter.completed_new_first, 'icon': 'glyphicon-random', + 'filter': { 'sort': 'created-desc', 'name': '', 'state': 'completed' } }); - navigationBarPage - .navigateToProcessServicesPage() - .goToTaskApp() - .clickProcessButton(); + const firstProc = await apps.startProcess(this.alfrescoJsApi, 'Task App', 'Process 1'); + const secondProc = await apps.startProcess(this.alfrescoJsApi, 'Task App', 'Process 2'); + const thirdProc = await apps.startProcess(this.alfrescoJsApi, 'Task App', 'Process 3'); - processFiltersPage.checkFilterIsDisplayed(processFilter.completed_new_first); + await this.alfrescoJsApi.activiti.processInstancesApi.deleteProcessInstance(firstProc.id); + await this.alfrescoJsApi.activiti.processInstancesApi.deleteProcessInstance(secondProc.id); + await this.alfrescoJsApi.activiti.processInstancesApi.deleteProcessInstance(thirdProc.id); - filtersPage.goToFilter(processFilter.completed_new_first); + await (await (await navigationBarPage.navigateToProcessServicesPage()).goToTaskApp()).clickProcessButton(); - await browser.controlFlow().execute(async () => { - processesQuery = await this.alfrescoJsApi.activiti.processApi.getProcessInstances({ - 'processDefinitionId': null, 'appDefinitionId': null, 'state': 'completed', 'sort': 'created-desc' - }); - expect(processesQuery.data[0].name).toEqual('Process 3'); - expect(processesQuery.data[1].name).toEqual('Process 2'); - expect(processesQuery.data[2].name).toEqual('Process 1'); + await processFiltersPage.checkFilterIsDisplayed(processFilter.completed_new_first); + + await filtersPage.goToFilter(processFilter.completed_new_first); + processesQuery = await this.alfrescoJsApi.activiti.processApi.getProcessInstances({ + 'processDefinitionId': null, 'appDefinitionId': null, 'state': 'completed', 'sort': 'created-desc' }); + await expect(processesQuery.data[0].name).toEqual('Process 3'); + await expect(processesQuery.data[1].name).toEqual('Process 2'); + await expect(processesQuery.data[2].name).toEqual('Process 1'); }); it('[C260481] Should be able to create a filter on APS for all processes - Newest first and check on ADF', async () => { - await browser.controlFlow().execute(async () => { - await this.alfrescoJsApi.activiti.userFiltersApi.createUserProcessInstanceFilter({ - 'appId': null, 'name': processFilter.all_new_first, 'icon': 'glyphicon-random', - 'filter': { 'sort': 'created-desc', 'name': '', 'state': 'all' } - }); - - await apps.startProcess(this.alfrescoJsApi, 'Task App', 'Process 1'); - await apps.startProcess(this.alfrescoJsApi, 'Task App', 'Process 2'); - await apps.startProcess(this.alfrescoJsApi, 'Task App', 'Process 3'); - - const firstProc = await apps.startProcess(this.alfrescoJsApi, 'Task App', 'Process 4'); - const secondProc = await apps.startProcess(this.alfrescoJsApi, 'Task App', 'Process 5'); - const thirdProc = await apps.startProcess(this.alfrescoJsApi, 'Task App', 'Process 6'); - - await this.alfrescoJsApi.activiti.processInstancesApi.deleteProcessInstance(firstProc.id); - await this.alfrescoJsApi.activiti.processInstancesApi.deleteProcessInstance(secondProc.id); - await this.alfrescoJsApi.activiti.processInstancesApi.deleteProcessInstance(thirdProc.id); + await this.alfrescoJsApi.activiti.userFiltersApi.createUserProcessInstanceFilter({ + 'appId': null, 'name': processFilter.all_new_first, 'icon': 'glyphicon-random', + 'filter': { 'sort': 'created-desc', 'name': '', 'state': 'all' } }); - navigationBarPage - .navigateToProcessServicesPage() - .goToTaskApp() - .clickProcessButton(); + await apps.startProcess(this.alfrescoJsApi, 'Task App', 'Process 1'); + await apps.startProcess(this.alfrescoJsApi, 'Task App', 'Process 2'); + await apps.startProcess(this.alfrescoJsApi, 'Task App', 'Process 3'); - processFiltersPage.checkFilterIsDisplayed(processFilter.all_new_first); + const firstProc = await apps.startProcess(this.alfrescoJsApi, 'Task App', 'Process 4'); + const secondProc = await apps.startProcess(this.alfrescoJsApi, 'Task App', 'Process 5'); + const thirdProc = await apps.startProcess(this.alfrescoJsApi, 'Task App', 'Process 6'); - filtersPage.goToFilter(processFilter.all_new_first); + await this.alfrescoJsApi.activiti.processInstancesApi.deleteProcessInstance(firstProc.id); + await this.alfrescoJsApi.activiti.processInstancesApi.deleteProcessInstance(secondProc.id); + await this.alfrescoJsApi.activiti.processInstancesApi.deleteProcessInstance(thirdProc.id); - await browser.controlFlow().execute(async () => { - processesQuery = await this.alfrescoJsApi.activiti.processApi.getProcessInstances({ - 'processDefinitionId': null, 'appDefinitionId': null, 'state': 'all', 'sort': 'created-desc' - }); - expect(processesQuery.data[0].name).toEqual('Process 6'); - expect(processesQuery.data[1].name).toEqual('Process 5'); - expect(processesQuery.data[2].name).toEqual('Process 4'); - expect(processesQuery.data[3].name).toEqual('Process 3'); - expect(processesQuery.data[4].name).toEqual('Process 2'); - expect(processesQuery.data[5].name).toEqual('Process 1'); + await (await (await navigationBarPage.navigateToProcessServicesPage()).goToTaskApp()).clickProcessButton(); + + await processFiltersPage.checkFilterIsDisplayed(processFilter.all_new_first); + + await filtersPage.goToFilter(processFilter.all_new_first); + + processesQuery = await this.alfrescoJsApi.activiti.processApi.getProcessInstances({ + 'processDefinitionId': null, 'appDefinitionId': null, 'state': 'all', 'sort': 'created-desc' }); + await expect(processesQuery.data[0].name).toEqual('Process 6'); + await expect(processesQuery.data[1].name).toEqual('Process 5'); + await expect(processesQuery.data[2].name).toEqual('Process 4'); + await expect(processesQuery.data[3].name).toEqual('Process 3'); + await expect(processesQuery.data[4].name).toEqual('Process 2'); + await expect(processesQuery.data[5].name).toEqual('Process 1'); }); it('[C272815] Should be able to create a filter on APS for completed processes - Completed most recently and check on ADF', async () => { - await browser.controlFlow().execute(async () => { - await this.alfrescoJsApi.activiti.userFiltersApi.createUserProcessInstanceFilter({ - 'appId': null, 'name': processFilter.completed_most_recently, 'icon': 'glyphicon-random', - 'filter': { 'sort': 'ended-asc', 'name': '', 'state': 'completed' } - }); - - const firstProc = await apps.startProcess(this.alfrescoJsApi, 'Task App', 'Process 1'); - const secondProc = await apps.startProcess(this.alfrescoJsApi, 'Task App', 'Process 2'); - const thirdProc = await apps.startProcess(this.alfrescoJsApi, 'Task App', 'Process 3'); - - await this.alfrescoJsApi.activiti.processInstancesApi.deleteProcessInstance(secondProc.id); - await this.alfrescoJsApi.activiti.processInstancesApi.deleteProcessInstance(firstProc.id); - await this.alfrescoJsApi.activiti.processInstancesApi.deleteProcessInstance(thirdProc.id); + await this.alfrescoJsApi.activiti.userFiltersApi.createUserProcessInstanceFilter({ + 'appId': null, 'name': processFilter.completed_most_recently, 'icon': 'glyphicon-random', + 'filter': { 'sort': 'ended-asc', 'name': '', 'state': 'completed' } }); - navigationBarPage - .navigateToProcessServicesPage() - .goToTaskApp() - .clickProcessButton(); + const firstProc = await apps.startProcess(this.alfrescoJsApi, 'Task App', 'Process 1'); + const secondProc = await apps.startProcess(this.alfrescoJsApi, 'Task App', 'Process 2'); + const thirdProc = await apps.startProcess(this.alfrescoJsApi, 'Task App', 'Process 3'); - processFiltersPage.checkFilterIsDisplayed(processFilter.completed_most_recently); + await this.alfrescoJsApi.activiti.processInstancesApi.deleteProcessInstance(secondProc.id); + await this.alfrescoJsApi.activiti.processInstancesApi.deleteProcessInstance(firstProc.id); + await this.alfrescoJsApi.activiti.processInstancesApi.deleteProcessInstance(thirdProc.id); - filtersPage.goToFilter(processFilter.completed_most_recently); + await (await (await navigationBarPage.navigateToProcessServicesPage()).goToTaskApp()).clickProcessButton(); - await browser.controlFlow().execute(async () => { - processesQuery = await this.alfrescoJsApi.activiti.processApi.getProcessInstances({ - 'processDefinitionId': null, 'appDefinitionId': null, 'state': 'completed', 'sort': 'ended-asc' - }); - expect(processesQuery.data[0].name).toEqual('Process 2'); - expect(processesQuery.data[1].name).toEqual('Process 1'); - expect(processesQuery.data[2].name).toEqual('Process 3'); + await processFiltersPage.checkFilterIsDisplayed(processFilter.completed_most_recently); + + await filtersPage.goToFilter(processFilter.completed_most_recently); + + processesQuery = await this.alfrescoJsApi.activiti.processApi.getProcessInstances({ + 'processDefinitionId': null, 'appDefinitionId': null, 'state': 'completed', 'sort': 'ended-asc' }); + await expect(processesQuery.data[0].name).toEqual('Process 2'); + await expect(processesQuery.data[1].name).toEqual('Process 1'); + await expect(processesQuery.data[2].name).toEqual('Process 3'); }); it('[C272816] Should be able to create a filter on APS for completed processes - Completed least recently and check on ADF', async () => { - await browser.controlFlow().execute(async () => { - await this.alfrescoJsApi.activiti.userFiltersApi.createUserProcessInstanceFilter({ - 'appId': null, 'name': processFilter.completed_least_recently, 'icon': 'glyphicon-random', - 'filter': { 'sort': 'ended-desc', 'name': '', 'state': 'completed' } - }); - - const firstProc = await apps.startProcess(this.alfrescoJsApi, 'Task App', 'Process 1'); - const secondProc = await apps.startProcess(this.alfrescoJsApi, 'Task App', 'Process 2'); - const thirdProc = await apps.startProcess(this.alfrescoJsApi, 'Task App', 'Process 3'); - - await this.alfrescoJsApi.activiti.processInstancesApi.deleteProcessInstance(secondProc.id); - await this.alfrescoJsApi.activiti.processInstancesApi.deleteProcessInstance(firstProc.id); - await this.alfrescoJsApi.activiti.processInstancesApi.deleteProcessInstance(thirdProc.id); + await this.alfrescoJsApi.activiti.userFiltersApi.createUserProcessInstanceFilter({ + 'appId': null, 'name': processFilter.completed_least_recently, 'icon': 'glyphicon-random', + 'filter': { 'sort': 'ended-desc', 'name': '', 'state': 'completed' } }); - navigationBarPage - .navigateToProcessServicesPage() - .goToTaskApp() - .clickProcessButton(); + const firstProc = await apps.startProcess(this.alfrescoJsApi, 'Task App', 'Process 1'); + const secondProc = await apps.startProcess(this.alfrescoJsApi, 'Task App', 'Process 2'); + const thirdProc = await apps.startProcess(this.alfrescoJsApi, 'Task App', 'Process 3'); - processFiltersPage.checkFilterIsDisplayed(processFilter.completed_least_recently); + await this.alfrescoJsApi.activiti.processInstancesApi.deleteProcessInstance(secondProc.id); + await this.alfrescoJsApi.activiti.processInstancesApi.deleteProcessInstance(firstProc.id); + await this.alfrescoJsApi.activiti.processInstancesApi.deleteProcessInstance(thirdProc.id); - filtersPage.goToFilter(processFilter.completed_least_recently); + await (await (await navigationBarPage.navigateToProcessServicesPage()).goToTaskApp()).clickProcessButton(); - await browser.controlFlow().execute(async () => { - processesQuery = await this.alfrescoJsApi.activiti.processApi.getProcessInstances({ - 'processDefinitionId': null, 'appDefinitionId': null, 'state': 'completed', 'sort': 'ended-desc' - }); - expect(processesQuery.data[0].name).toEqual('Process 3'); - expect(processesQuery.data[1].name).toEqual('Process 1'); - expect(processesQuery.data[2].name).toEqual('Process 2'); + await processFiltersPage.checkFilterIsDisplayed(processFilter.completed_least_recently); + + await filtersPage.goToFilter(processFilter.completed_least_recently); + + processesQuery = await this.alfrescoJsApi.activiti.processApi.getProcessInstances({ + 'processDefinitionId': null, 'appDefinitionId': null, 'state': 'completed', 'sort': 'ended-desc' }); + await expect(processesQuery.data[0].name).toEqual('Process 3'); + await expect(processesQuery.data[1].name).toEqual('Process 1'); + await expect(processesQuery.data[2].name).toEqual('Process 2'); }); }); diff --git a/e2e/process-services/custom-process-filters.e2e.ts b/e2e/process-services/custom-process-filters.e2e.ts index 2cbb0a5d15..72ceeec023 100644 --- a/e2e/process-services/custom-process-filters.e2e.ts +++ b/e2e/process-services/custom-process-filters.e2e.ts @@ -47,7 +47,7 @@ describe('New Process Filters', () => { deleted: 'To delete' }; - beforeAll(async (done) => { + beforeAll(async () => { const users = new UsersActions(); this.alfrescoJsApi = new AlfrescoApi({ @@ -65,161 +65,132 @@ describe('New Process Filters', () => { await loginPage.loginToProcessServicesUsingUserModel(user); - done(); }); - afterAll(async (done) => { + afterAll(async () => { await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); await this.alfrescoJsApi.activiti.adminTenantsApi.deleteTenant(tenantId); - done(); + }); it('[C279965] Should be able to view default filters on ADF', async () => { - navigationBarPage.navigateToProcessServicesPage() - .goToTaskApp() - .clickProcessButton(); + await (await (await navigationBarPage.navigateToProcessServicesPage()).goToTaskApp()).clickProcessButton(); - processFiltersPage.checkFilterIsDisplayed(processFilter.running); - processFiltersPage.checkFilterIsDisplayed(processFilter.all); - processFiltersPage.checkFilterIsDisplayed(processFilter.completed); + await processFiltersPage.checkFilterIsDisplayed(processFilter.running); + await processFiltersPage.checkFilterIsDisplayed(processFilter.all); + await processFiltersPage.checkFilterIsDisplayed(processFilter.completed); }); it('[C260473] Should be able to create a new filter on APS and display it on ADF', async () => { - browser.controlFlow().execute(async () => { - customProcessFilter = await this.alfrescoJsApi.activiti.userFiltersApi.createUserProcessInstanceFilter({ - 'appId': null, - 'name': processFilter.new_filter, - 'icon': 'glyphicon-random', - 'filter': { 'sort': 'created-desc', 'name': '', 'state': 'running' } - }); - - filterId = customProcessFilter.id; - - return customProcessFilter; + customProcessFilter = await this.alfrescoJsApi.activiti.userFiltersApi.createUserProcessInstanceFilter({ + 'appId': null, + 'name': processFilter.new_filter, + 'icon': 'glyphicon-random', + 'filter': { 'sort': 'created-desc', 'name': '', 'state': 'running' } }); - navigationBarPage.navigateToProcessServicesPage() - .goToTaskApp() - .clickProcessButton(); + filterId = customProcessFilter.id; - processFiltersPage.checkFilterIsDisplayed(processFilter.new_filter); + await (await (await navigationBarPage.navigateToProcessServicesPage()).goToTaskApp()).clickProcessButton(); + + await processFiltersPage.checkFilterIsDisplayed(processFilter.new_filter); }); it('[C286450] Should display the process filter icon when a custom filter is added', async () => { - browser.controlFlow().execute(async () => { - customProcessFilter = await this.alfrescoJsApi.activiti.userFiltersApi.createUserProcessInstanceFilter({ - 'appId': null, - 'name': processFilter.new_icon, - 'icon': 'glyphicon-cloud', - 'filter': { 'sort': 'created-desc', 'name': '', 'state': 'running' } - }); - - filterId = customProcessFilter.id; - - return customProcessFilter; + customProcessFilter = await this.alfrescoJsApi.activiti.userFiltersApi.createUserProcessInstanceFilter({ + 'appId': null, + 'name': processFilter.new_icon, + 'icon': 'glyphicon-cloud', + 'filter': { 'sort': 'created-desc', 'name': '', 'state': 'running' } }); - navigationBarPage.navigateToProcessServicesPage().goToTaskApp().clickProcessButton(); + filterId = customProcessFilter.id; - processFiltersPage.checkFilterIsDisplayed(processFilter.new_icon); + await (await (await navigationBarPage.navigateToProcessServicesPage()).goToTaskApp()).clickProcessButton(); - processServiceTabBarPage.clickSettingsButton(); - appSettingsToggles.enableProcessFiltersIcon(); - processServiceTabBarPage.clickProcessButton(); + await processFiltersPage.checkFilterIsDisplayed(processFilter.new_icon); - processFiltersPage.checkFilterIsDisplayed(processFilter.new_icon); - expect(processFiltersPage.getFilterIcon(processFilter.new_icon)).toEqual('cloud'); + await processServiceTabBarPage.clickSettingsButton(); + await appSettingsToggles.enableProcessFiltersIcon(); + await processServiceTabBarPage.clickProcessButton(); + + await processFiltersPage.checkFilterIsDisplayed(processFilter.new_icon); + await expect(await processFiltersPage.getFilterIcon(processFilter.new_icon)).toEqual('cloud'); }); it('[C260474] Should be able to edit a filter on APS and check it on ADF', async () => { - browser.controlFlow().execute(() => { - return this.alfrescoJsApi.activiti.userFiltersApi.updateUserProcessInstanceFilter(filterId, { - 'appId': null, - 'name': processFilter.edited, - 'icon': 'glyphicon-random', - 'filter': { 'sort': 'created-desc', 'name': '', 'state': 'running' } - }); + this.alfrescoJsApi.activiti.userFiltersApi.updateUserProcessInstanceFilter(filterId, { + 'appId': null, + 'name': processFilter.edited, + 'icon': 'glyphicon-random', + 'filter': { 'sort': 'created-desc', 'name': '', 'state': 'running' } }); - navigationBarPage.navigateToProcessServicesPage() - .goToTaskApp() - .clickProcessButton(); + await (await (await navigationBarPage.navigateToProcessServicesPage()).goToTaskApp()).clickProcessButton(); - processFiltersPage.checkFilterIsDisplayed(processFilter.edited); + await processFiltersPage.checkFilterIsDisplayed(processFilter.edited); }); it('[C286451] Should display changes on a process filter when this filter icon is edited', async () => { - browser.controlFlow().execute(async () => { - customProcessFilter = await this.alfrescoJsApi.activiti.userFiltersApi.createUserProcessInstanceFilter({ - 'appId': null, - 'name': processFilter.edit_icon, - 'icon': 'glyphicon-random', - 'filter': { 'sort': 'created-desc', 'name': '', 'state': 'running' } - }); - - filterId = customProcessFilter.id; - - return customProcessFilter; + customProcessFilter = await this.alfrescoJsApi.activiti.userFiltersApi.createUserProcessInstanceFilter({ + 'appId': null, + 'name': processFilter.edit_icon, + 'icon': 'glyphicon-random', + 'filter': { 'sort': 'created-desc', 'name': '', 'state': 'running' } }); - navigationBarPage.navigateToProcessServicesPage().goToTaskApp().clickProcessButton(); + filterId = customProcessFilter.id; - processFiltersPage.checkFilterIsDisplayed(processFilter.edit_icon); + await (await (await navigationBarPage.navigateToProcessServicesPage()).goToTaskApp()).clickProcessButton(); - browser.controlFlow().execute(() => { - return this.alfrescoJsApi.activiti.userFiltersApi.updateUserProcessInstanceFilter(filterId, { - 'appId': null, - 'name': processFilter.edit_icon, - 'icon': 'glyphicon-cloud', - 'filter': { 'sort': 'created-desc', 'name': '', 'state': 'running' } - }); + await processFiltersPage.checkFilterIsDisplayed(processFilter.edit_icon); + + await this.alfrescoJsApi.activiti.userFiltersApi.updateUserProcessInstanceFilter(filterId, { + 'appId': null, + 'name': processFilter.edit_icon, + 'icon': 'glyphicon-cloud', + 'filter': { 'sort': 'created-desc', 'name': '', 'state': 'running' } }); - navigationBarPage.navigateToProcessServicesPage().goToTaskApp().clickProcessButton(); + await (await (await navigationBarPage.navigateToProcessServicesPage()).goToTaskApp()).clickProcessButton(); - processFiltersPage.checkFilterIsDisplayed(processFilter.edit_icon); + await processFiltersPage.checkFilterIsDisplayed(processFilter.edit_icon); - processServiceTabBarPage.clickSettingsButton(); - appSettingsToggles.enableProcessFiltersIcon(); - processServiceTabBarPage.clickProcessButton(); + await processServiceTabBarPage.clickSettingsButton(); + await appSettingsToggles.enableProcessFiltersIcon(); + await processServiceTabBarPage.clickProcessButton(); - processFiltersPage.checkFilterIsDisplayed(processFilter.edit_icon); - expect(processFiltersPage.getFilterIcon(processFilter.edit_icon)).toEqual('cloud'); + await processFiltersPage.checkFilterIsDisplayed(processFilter.edit_icon); + await expect(await processFiltersPage.getFilterIcon(processFilter.edit_icon)).toEqual('cloud'); }); it('[C286452] Should display process filter icons only when showIcon property is set on true', async () => { - navigationBarPage.navigateToProcessServicesPage().goToTaskApp().clickProcessButton(); - processFiltersPage.checkFilterHasNoIcon(processFilter.all); + await (await (await navigationBarPage.navigateToProcessServicesPage()).goToTaskApp()).clickProcessButton(); + await processFiltersPage.checkFilterHasNoIcon(processFilter.all); - processServiceTabBarPage.clickSettingsButton(); - appSettingsToggles.enableProcessFiltersIcon(); - processServiceTabBarPage.clickProcessButton(); + await processServiceTabBarPage.clickSettingsButton(); + await appSettingsToggles.enableProcessFiltersIcon(); + await processServiceTabBarPage.clickProcessButton(); - processFiltersPage.checkFilterIsDisplayed(processFilter.all); - expect(processFiltersPage.getFilterIcon(processFilter.all)).toEqual('dashboard'); + await processFiltersPage.checkFilterIsDisplayed(processFilter.all); + await expect(await processFiltersPage.getFilterIcon(processFilter.all)).toEqual('dashboard'); }); it('[C260475] Should be able to delete a filter on APS and check it on ADF', async () => { - browser.controlFlow().execute(async () => { - customProcessFilter = await this.alfrescoJsApi.activiti.userFiltersApi.createUserProcessInstanceFilter({ - 'appId': null, - 'name': processFilter.deleted, - 'icon': 'glyphicon-random', - 'filter': { 'sort': 'created-desc', 'name': '', 'state': 'running' } - }); - - filterId = customProcessFilter.id; - - return customProcessFilter; + customProcessFilter = await this.alfrescoJsApi.activiti.userFiltersApi.createUserProcessInstanceFilter({ + 'appId': null, + 'name': processFilter.deleted, + 'icon': 'glyphicon-random', + 'filter': { 'sort': 'created-desc', 'name': '', 'state': 'running' } }); - browser.controlFlow().execute(() => { - return this.alfrescoJsApi.activiti.userFiltersApi.deleteUserProcessInstanceFilter(filterId); - }); + filterId = customProcessFilter.id; - navigationBarPage.navigateToProcessServicesPage().goToTaskApp().clickProcessButton(); + await this.alfrescoJsApi.activiti.userFiltersApi.deleteUserProcessInstanceFilter(filterId); - processFiltersPage.checkFilterIsNotDisplayed(processFilter.deleted); + await (await (await navigationBarPage.navigateToProcessServicesPage()).goToTaskApp()).clickProcessButton(); + + await processFiltersPage.checkFilterIsNotDisplayed(processFilter.deleted); }); }); diff --git a/e2e/process-services/custom-tasks-filters.e2e.ts b/e2e/process-services/custom-tasks-filters.e2e.ts index 3b8391b93d..38b5365679 100644 --- a/e2e/process-services/custom-tasks-filters.e2e.ts +++ b/e2e/process-services/custom-tasks-filters.e2e.ts @@ -72,7 +72,7 @@ describe('Start Task - Custom App', () => { default: '25' }; - beforeAll(async (done) => { + beforeAll(async () => { const apps = new AppsActions(); const appsRuntime = new AppsRuntimeActions(); const users = new UsersActions(); @@ -122,375 +122,380 @@ describe('Start Task - Custom App', () => { await loginPage.loginToProcessServicesUsingUserModel(processUserModel); - done(); }); describe('', () => { beforeEach(async () => { - navigationBarPage.clickTaskListButton(); - taskListSinglePage.clickResetButton(); + await navigationBarPage.clickTaskListButton(); + await taskListSinglePage.clickResetButton(); }); - it('[C286362] Default pagination settings on task list', () => { - expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.twenty); - expect(paginationPage.getPaginationRange()).toEqual('Showing 1-' + nrOfTasks + ' of ' + nrOfTasks); - expect(taskListSinglePage.taskList().getDataTable().numberOfRows()).toBe(nrOfTasks); - taskListSinglePage.taskList().getAllRowsNameColumn().then(function (list) { - expect(Util.arrayContainsArray(list, allTasksName)).toEqual(true); + it('[C286362] Default pagination settings on task list', async () => { + await expect(await paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.twenty); + await expect(await paginationPage.getPaginationRange()).toEqual('Showing 1-' + nrOfTasks + ' of ' + nrOfTasks); + await expect(await taskListSinglePage.taskList().getDataTable().numberOfRows()).toBe(nrOfTasks); + + await taskListSinglePage.taskList().getAllRowsNameColumn().then(async (list) => { + await expect(Util.arrayContainsArray(list, allTasksName)).toEqual(true); }); - expect(paginationPage.getCurrentPage()).toEqual('Page 1'); - expect(paginationPage.getTotalPages()).toEqual('of 1'); - paginationPage.checkPageSelectorIsNotDisplayed(); - paginationPage.checkNextPageButtonIsDisabled(); - paginationPage.checkPreviousPageButtonIsDisabled(); + + await expect(await paginationPage.getCurrentPage()).toEqual('Page 1'); + await expect(await paginationPage.getTotalPages()).toEqual('of 1'); + await paginationPage.checkPageSelectorIsNotDisplayed(); + await paginationPage.checkNextPageButtonIsDisabled(); + await paginationPage.checkPreviousPageButtonIsDisabled(); }); - it('[C286367] 20 Items per page', function () { - taskListSinglePage.typeItemsPerPage(itemsPerPage.twentyValue); - taskListSinglePage.taskList().getDataTable().waitForTableBody(); - expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.twenty); - expect(paginationPage.getPaginationRange()).toEqual('Showing 1-' + nrOfTasks + ' of ' + nrOfTasks); - expect(taskListSinglePage.taskList().getDataTable().numberOfRows()).toBe(nrOfTasks); - taskListSinglePage.taskList().getAllRowsNameColumn().then(function (list) { - expect(Util.arrayContainsArray(list, allTasksName)).toEqual(true); + it('[C286367] 20 Items per page', async () => { + await taskListSinglePage.typeItemsPerPage(itemsPerPage.twentyValue); + await taskListSinglePage.taskList().getDataTable().waitForTableBody(); + await expect(await paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.twenty); + await expect(await paginationPage.getPaginationRange()).toEqual('Showing 1-' + nrOfTasks + ' of ' + nrOfTasks); + await expect(await taskListSinglePage.taskList().getDataTable().numberOfRows()).toBe(nrOfTasks); + + await taskListSinglePage.taskList().getAllRowsNameColumn().then(async (list) => { + await expect(Util.arrayContainsArray(list, allTasksName)).toEqual(true); }); - paginationPage.checkNextPageButtonIsDisabled(); - paginationPage.checkPreviousPageButtonIsDisabled(); + await paginationPage.checkNextPageButtonIsDisabled(); + await paginationPage.checkPreviousPageButtonIsDisabled(); }); - it('[C286365] 5 Items per page', function () { - taskListSinglePage.typeItemsPerPage(itemsPerPage.fiveValue); - taskListSinglePage.taskList().getDataTable().waitForTableBody(); - expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.five); - expect(paginationPage.getPaginationRange()).toEqual('Showing 1-' + itemsPerPage.fiveValue * currentPage + ' of ' + nrOfTasks); - expect(taskListSinglePage.taskList().getDataTable().numberOfRows()).toBe(itemsPerPage.fiveValue); - taskListSinglePage.taskList().getAllRowsNameColumn().then(function (list) { - expect(Util.arrayContainsArray(list, allTasksName.slice(0, 5))).toEqual(true); + it('[C286365] 5 Items per page', async () => { + await taskListSinglePage.typeItemsPerPage(itemsPerPage.fiveValue); + await taskListSinglePage.taskList().getDataTable().waitForTableBody(); + await expect(await paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.five); + await expect(await paginationPage.getPaginationRange()).toEqual('Showing 1-' + itemsPerPage.fiveValue * currentPage + ' of ' + nrOfTasks); + await expect(await taskListSinglePage.taskList().getDataTable().numberOfRows()).toBe(itemsPerPage.fiveValue); + + await taskListSinglePage.taskList().getAllRowsNameColumn().then(async (list) => { + await expect(Util.arrayContainsArray(list, allTasksName.slice(0, 5))).toEqual(true); }); - paginationPage.clickOnNextPage(); + await paginationPage.clickOnNextPage(); currentPage++; - taskListSinglePage.taskList().getDataTable().waitForTableBody(); - expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.five); - expect(paginationPage.getPaginationRange()).toEqual('Showing 6-' + itemsPerPage.fiveValue * currentPage + ' of ' + nrOfTasks); - expect(taskListSinglePage.taskList().getDataTable().numberOfRows()).toBe(itemsPerPage.fiveValue); - taskListSinglePage.taskList().getAllRowsNameColumn().then(function (list) { - expect(Util.arrayContainsArray(list, allTasksName.slice(5, 10))).toEqual(true); + await taskListSinglePage.taskList().getDataTable().waitForTableBody(); + await expect(await paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.five); + await expect(await paginationPage.getPaginationRange()).toEqual('Showing 6-' + itemsPerPage.fiveValue * currentPage + ' of ' + nrOfTasks); + await expect(await taskListSinglePage.taskList().getDataTable().numberOfRows()).toBe(itemsPerPage.fiveValue); + + await taskListSinglePage.taskList().getAllRowsNameColumn().then(async (list) => { + await expect(Util.arrayContainsArray(list, allTasksName.slice(5, 10))).toEqual(true); }); - paginationPage.clickOnNextPage(); + await paginationPage.clickOnNextPage(); currentPage++; - taskListSinglePage.taskList().getDataTable().waitForTableBody(); - expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.five); - expect(paginationPage.getPaginationRange()).toEqual('Showing 11-' + itemsPerPage.fiveValue * currentPage + ' of ' + nrOfTasks); - expect(taskListSinglePage.taskList().getDataTable().numberOfRows()).toBe(itemsPerPage.fiveValue); - taskListSinglePage.taskList().getAllRowsNameColumn().then(function (list) { - expect(Util.arrayContainsArray(list, allTasksName.slice(10, 15))).toEqual(true); + await taskListSinglePage.taskList().getDataTable().waitForTableBody(); + await expect(await paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.five); + await expect(await paginationPage.getPaginationRange()).toEqual('Showing 11-' + itemsPerPage.fiveValue * currentPage + ' of ' + nrOfTasks); + await expect(await taskListSinglePage.taskList().getDataTable().numberOfRows()).toBe(itemsPerPage.fiveValue); + + await taskListSinglePage.taskList().getAllRowsNameColumn().then(async (list) => { + await expect(Util.arrayContainsArray(list, allTasksName.slice(10, 15))).toEqual(true); }); - paginationPage.clickOnNextPage(); + await paginationPage.clickOnNextPage(); currentPage++; - taskListSinglePage.taskList().getDataTable().waitForTableBody(); - expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.five); - expect(paginationPage.getPaginationRange()).toEqual('Showing 16-' + itemsPerPage.fiveValue * currentPage + ' of ' + nrOfTasks); - expect(taskListSinglePage.taskList().getDataTable().numberOfRows()).toBe(itemsPerPage.fiveValue); - taskListSinglePage.taskList().getAllRowsNameColumn().then(function (list) { - expect(Util.arrayContainsArray(list, allTasksName.slice(15, 20))).toEqual(true); + await taskListSinglePage.taskList().getDataTable().waitForTableBody(); + await expect(await paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.five); + await expect(await paginationPage.getPaginationRange()).toEqual('Showing 16-' + itemsPerPage.fiveValue * currentPage + ' of ' + nrOfTasks); + await expect(await taskListSinglePage.taskList().getDataTable().numberOfRows()).toBe(itemsPerPage.fiveValue); + await taskListSinglePage.taskList().getAllRowsNameColumn().then(async (list) => { + await expect(Util.arrayContainsArray(list, allTasksName.slice(15, 20))).toEqual(true); }); }); - it('[C286364] 10 Items per page', function () { + it('[C286364] 10 Items per page', async () => { currentPage = 1; - taskListSinglePage.typeItemsPerPage(itemsPerPage.tenValue); - taskListSinglePage.taskList().getDataTable().waitForTableBody(); - expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.ten); - expect(paginationPage.getPaginationRange()).toEqual('Showing 1-' + itemsPerPage.tenValue * currentPage + ' of ' + nrOfTasks); - expect(taskListSinglePage.taskList().getDataTable().numberOfRows()).toBe(itemsPerPage.tenValue); - taskListSinglePage.taskList().getAllRowsNameColumn().then(function (list) { - expect(Util.arrayContainsArray(list, allTasksName.slice(0, 10))).toEqual(true); + await taskListSinglePage.typeItemsPerPage(itemsPerPage.tenValue); + await taskListSinglePage.taskList().getDataTable().waitForTableBody(); + await expect(await paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.ten); + await expect(await paginationPage.getPaginationRange()).toEqual('Showing 1-' + itemsPerPage.tenValue * currentPage + ' of ' + nrOfTasks); + await expect(await taskListSinglePage.taskList().getDataTable().numberOfRows()).toBe(itemsPerPage.tenValue); + await taskListSinglePage.taskList().getAllRowsNameColumn().then(async (list) => { + await expect(Util.arrayContainsArray(list, allTasksName.slice(0, 10))).toEqual(true); }); - paginationPage.clickOnNextPage(); + await paginationPage.clickOnNextPage(); currentPage++; - taskListSinglePage.taskList().getDataTable().waitForTableBody(); - expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.ten); - expect(paginationPage.getPaginationRange()).toEqual('Showing 11-' + itemsPerPage.tenValue * currentPage + ' of ' + nrOfTasks); - expect(taskListSinglePage.taskList().getDataTable().numberOfRows()).toBe(itemsPerPage.tenValue); - taskListSinglePage.taskList().getAllRowsNameColumn().then(function (list) { - expect(Util.arrayContainsArray(list, allTasksName.slice(10, 20))).toEqual(true); + await taskListSinglePage.taskList().getDataTable().waitForTableBody(); + await expect(await paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.ten); + await expect(await paginationPage.getPaginationRange()).toEqual('Showing 11-' + itemsPerPage.tenValue * currentPage + ' of ' + nrOfTasks); + await expect(await taskListSinglePage.taskList().getDataTable().numberOfRows()).toBe(itemsPerPage.tenValue); + await taskListSinglePage.taskList().getAllRowsNameColumn().then(async (list) => { + await expect(Util.arrayContainsArray(list, allTasksName.slice(10, 20))).toEqual(true); }); }); - it('[C286363] 15 Items per page', function () { + it('[C286363] 15 Items per page', async () => { currentPage = 1; - taskListSinglePage.typeItemsPerPage(itemsPerPage.fifteenValue); - taskListSinglePage.taskList().getDataTable().waitForTableBody(); - expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.fifteen); - expect(paginationPage.getPaginationRange()).toEqual('Showing 1-' + itemsPerPage.fifteenValue * currentPage + ' of ' + nrOfTasks); - expect(taskListSinglePage.taskList().getDataTable().numberOfRows()).toBe(itemsPerPage.fifteenValue); - taskListSinglePage.taskList().getAllRowsNameColumn().then(function (list) { - expect(Util.arrayContainsArray(list, allTasksName.slice(0, 15))).toEqual(true); + await taskListSinglePage.typeItemsPerPage(itemsPerPage.fifteenValue); + await taskListSinglePage.taskList().getDataTable().waitForTableBody(); + await expect(await paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.fifteen); + await expect(await paginationPage.getPaginationRange()).toEqual('Showing 1-' + itemsPerPage.fifteenValue * currentPage + ' of ' + nrOfTasks); + await expect(await taskListSinglePage.taskList().getDataTable().numberOfRows()).toBe(itemsPerPage.fifteenValue); + await taskListSinglePage.taskList().getAllRowsNameColumn().then(async (list) => { + await expect(Util.arrayContainsArray(list, allTasksName.slice(0, 15))).toEqual(true); }); currentPage++; - paginationPage.clickOnNextPage(); - taskListSinglePage.taskList().getDataTable().waitForTableBody(); - expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.fifteen); - expect(paginationPage.getPaginationRange()).toEqual('Showing 16-' + nrOfTasks + ' of ' + nrOfTasks); - expect(taskListSinglePage.taskList().getDataTable().numberOfRows()).toBe(nrOfTasks - itemsPerPage.fifteenValue); - taskListSinglePage.taskList().getAllRowsNameColumn().then(function (list) { - expect(Util.arrayContainsArray(list, allTasksName.slice(15, 20))).toEqual(true); + await paginationPage.clickOnNextPage(); + await taskListSinglePage.taskList().getDataTable().waitForTableBody(); + await expect(await paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.fifteen); + await expect(await paginationPage.getPaginationRange()).toEqual('Showing 16-' + nrOfTasks + ' of ' + nrOfTasks); + await expect(await taskListSinglePage.taskList().getDataTable().numberOfRows()).toBe(nrOfTasks - itemsPerPage.fifteenValue); + await taskListSinglePage.taskList().getAllRowsNameColumn().then(async (list) => { + await expect(Util.arrayContainsArray(list, allTasksName.slice(15, 20))).toEqual(true); }); }); - it('[C286366] Pagination is not displayed when no task is displayed', function () { - taskListSinglePage.typeAppId(secondAppRuntime.id); - expect(taskListSinglePage.getAppId()).toEqual(secondAppRuntime.id.toString()); + it('[C286366] Pagination is not displayed when no task is displayed', async () => { + await taskListSinglePage.typeAppId(secondAppRuntime.id); + await expect(await taskListSinglePage.getAppId()).toEqual(secondAppRuntime.id.toString()); - taskListSinglePage.paginationPage().checkPaginationIsNotDisplayed(); + await taskListSinglePage.paginationPage().checkPaginationIsNotDisplayed(); }); - it('[C286406] Invalid values for items per page', function () { - taskListSinglePage.typeItemsPerPage('0').clickAppId(); - expect(taskListSinglePage.getItemsPerPageFieldErrorMessage()).toEqual('Value must be greater than or equal to 1'); + it('[C286406] Invalid values for items per page', async () => { + await taskListSinglePage.typeItemsPerPage('0'); + await taskListSinglePage.clickAppId(); + await expect(await taskListSinglePage.getItemsPerPageFieldErrorMessage()).toEqual('Value must be greater than or equal to 1'); }); - it('[C286404] Navigate using page field', function () { + it('[C286404] Navigate using page field', async () => { currentPage = 1; - taskListSinglePage.typeItemsPerPage(itemsPerPage.fiveValue); - taskListSinglePage.typePage(currentPage); - taskListSinglePage.taskList().getDataTable().waitForTableBody(); - expect(paginationPage.getCurrentPage()).toEqual('Page ' + currentPage); - expect(paginationPage.getTotalPages()).toEqual(totalNrOfPages); - paginationPage.checkPageSelectorIsDisplayed(); - expect(taskListSinglePage.taskList().getDataTable().numberOfRows()).toBe(itemsPerPage.fiveValue); - taskListSinglePage.taskList().getAllRowsNameColumn().then(function (list) { - expect(Util.arrayContainsArray(list, allTasksName.slice(0, 5))).toEqual(true); + await taskListSinglePage.typeItemsPerPage(itemsPerPage.fiveValue); + await taskListSinglePage.typePage(currentPage); + await taskListSinglePage.taskList().getDataTable().waitForTableBody(); + await expect(await paginationPage.getCurrentPage()).toEqual('Page ' + currentPage); + await expect(await paginationPage.getTotalPages()).toEqual(totalNrOfPages); + await paginationPage.checkPageSelectorIsDisplayed(); + await expect(await taskListSinglePage.taskList().getDataTable().numberOfRows()).toBe(itemsPerPage.fiveValue); + await taskListSinglePage.taskList().getAllRowsNameColumn().then(async (list) => { + await expect(Util.arrayContainsArray(list, allTasksName.slice(0, 5))).toEqual(true); }); currentPage++; - taskListSinglePage.typePage(currentPage); - taskListSinglePage.taskList().getDataTable().waitForTableBody(); - expect(paginationPage.getCurrentPage()).toEqual('Page ' + currentPage); - expect(paginationPage.getTotalPages()).toEqual(totalNrOfPages); - paginationPage.checkPageSelectorIsDisplayed(); - expect(taskListSinglePage.taskList().getDataTable().numberOfRows()).toBe(itemsPerPage.fiveValue); - taskListSinglePage.taskList().getAllRowsNameColumn().then(function (list) { - expect(Util.arrayContainsArray(list, allTasksName.slice(5, 10))).toEqual(true); + await taskListSinglePage.typePage(currentPage); + await taskListSinglePage.taskList().getDataTable().waitForTableBody(); + await expect(await paginationPage.getCurrentPage()).toEqual('Page ' + currentPage); + await expect(await paginationPage.getTotalPages()).toEqual(totalNrOfPages); + await paginationPage.checkPageSelectorIsDisplayed(); + await expect(await taskListSinglePage.taskList().getDataTable().numberOfRows()).toBe(itemsPerPage.fiveValue); + await taskListSinglePage.taskList().getAllRowsNameColumn().then(async (list) => { + await expect(Util.arrayContainsArray(list, allTasksName.slice(5, 10))).toEqual(true); }); currentPage++; - taskListSinglePage.typePage(currentPage); - taskListSinglePage.taskList().getDataTable().waitForTableBody(); - expect(paginationPage.getCurrentPage()).toEqual('Page ' + currentPage); - expect(paginationPage.getTotalPages()).toEqual(totalNrOfPages); - paginationPage.checkPageSelectorIsDisplayed(); - expect(taskListSinglePage.taskList().getDataTable().numberOfRows()).toBe(itemsPerPage.fiveValue); - taskListSinglePage.taskList().getAllRowsNameColumn().then(function (list) { - expect(Util.arrayContainsArray(list, allTasksName.slice(10, 15))).toEqual(true); + await taskListSinglePage.typePage(currentPage); + await taskListSinglePage.taskList().getDataTable().waitForTableBody(); + await expect(await paginationPage.getCurrentPage()).toEqual('Page ' + currentPage); + await expect(await paginationPage.getTotalPages()).toEqual(totalNrOfPages); + await paginationPage.checkPageSelectorIsDisplayed(); + await expect(await taskListSinglePage.taskList().getDataTable().numberOfRows()).toBe(itemsPerPage.fiveValue); + await taskListSinglePage.taskList().getAllRowsNameColumn().then(async (list) => { + await expect(Util.arrayContainsArray(list, allTasksName.slice(10, 15))).toEqual(true); }); currentPage++; - taskListSinglePage.typePage(currentPage); - taskListSinglePage.taskList().getDataTable().waitForTableBody(); - expect(paginationPage.getCurrentPage()).toEqual('Page ' + currentPage); - expect(paginationPage.getTotalPages()).toEqual(totalNrOfPages); - paginationPage.checkPageSelectorIsDisplayed(); - expect(taskListSinglePage.taskList().getDataTable().numberOfRows()).toBe(itemsPerPage.fiveValue); - taskListSinglePage.taskList().getAllRowsNameColumn().then(function (list) { - expect(Util.arrayContainsArray(list, allTasksName.slice(15, 20))).toEqual(true); + await taskListSinglePage.typePage(currentPage); + await taskListSinglePage.taskList().getDataTable().waitForTableBody(); + await expect(await paginationPage.getCurrentPage()).toEqual('Page ' + currentPage); + await expect(await paginationPage.getTotalPages()).toEqual(totalNrOfPages); + await paginationPage.checkPageSelectorIsDisplayed(); + await expect(await taskListSinglePage.taskList().getDataTable().numberOfRows()).toBe(itemsPerPage.fiveValue); + await taskListSinglePage.taskList().getAllRowsNameColumn().then(async (list) => { + await expect(Util.arrayContainsArray(list, allTasksName.slice(15, 20))).toEqual(true); }); }); - it('[C286405] Type invalid values to page field', function () { - taskListSinglePage.typePage('0').clickAppId(); - expect(taskListSinglePage.getPageFieldErrorMessage()).toEqual('Value must be greater than or equal to 1'); + it('[C286405] Type invalid values to page field', async () => { + await taskListSinglePage.typePage('0'); + await taskListSinglePage.clickAppId(); + await expect(await taskListSinglePage.getPageFieldErrorMessage()).toEqual('Value must be greater than or equal to 1'); - taskListSinglePage.clickResetButton(); - taskListSinglePage.typePage('2'); - taskListSinglePage.paginationPage().checkPaginationIsNotDisplayed(); + await taskListSinglePage.clickResetButton(); + await taskListSinglePage.typePage('2'); + await taskListSinglePage.paginationPage().checkPaginationIsNotDisplayed(); }); - it('[C286413] Task is displayed when typing into dueAfter field a date before the tasks due date', function () { - taskListSinglePage.typeDueAfter(beforeDate); - taskListSinglePage.taskList().checkContentIsDisplayed(paginationTasksName[0]); - expect(taskListSinglePage.taskList().getDataTable().numberOfRows()).toBe(1); + it('[C286413] Task is displayed when typing into dueAfter field a date before the tasks due date', async () => { + await taskListSinglePage.typeDueAfter(beforeDate); + await taskListSinglePage.taskList().checkContentIsDisplayed(paginationTasksName[0]); + await expect(await taskListSinglePage.taskList().getDataTable().numberOfRows()).toBe(1); }); - it('[C286414] Task is not displayed when typing into dueAfter field a date after the task due date', function () { - taskListSinglePage.typeDueAfter(afterDate); - taskListSinglePage.paginationPage().checkPaginationIsNotDisplayed(); + it('[C286414] Task is not displayed when typing into dueAfter field a date after the task due date', async () => { + await taskListSinglePage.typeDueAfter(afterDate); + await taskListSinglePage.paginationPage().checkPaginationIsNotDisplayed(); }); - it('[C286415] Task is not displayed when typing into dueAfter field the same date as tasks due date', function () { - taskListSinglePage.typeDueAfter(currentDate); - taskListSinglePage.paginationPage().checkPaginationIsNotDisplayed(); + it('[C286415] Task is not displayed when typing into dueAfter field the same date as tasks due date', async () => { + await taskListSinglePage.typeDueAfter(currentDate); + await taskListSinglePage.paginationPage().checkPaginationIsNotDisplayed(); }); - it('[C286424] Task is not displayed when typing into dueBefore field a date before the tasks due date', function () { - taskListSinglePage.typeDueBefore(beforeDate); - taskListSinglePage.paginationPage().checkPaginationIsNotDisplayed(); + it('[C286424] Task is not displayed when typing into dueBefore field a date before the tasks due date', async () => { + await taskListSinglePage.typeDueBefore(beforeDate); + await taskListSinglePage.paginationPage().checkPaginationIsNotDisplayed(); }); - it('[C286425] Task is displayed when typing into dueBefore field a date after the task due date', function () { - taskListSinglePage.typeDueBefore(afterDate); - taskListSinglePage.taskList().checkContentIsDisplayed(paginationTasksName[0]); - expect(taskListSinglePage.taskList().getDataTable().numberOfRows()).toBe(1); + it('[C286425] Task is displayed when typing into dueBefore field a date after the task due date', async () => { + await taskListSinglePage.typeDueBefore(afterDate); + await taskListSinglePage.taskList().checkContentIsDisplayed(paginationTasksName[0]); + await expect(await taskListSinglePage.taskList().getDataTable().numberOfRows()).toBe(1); }); - it('[C286426] Task is not displayed when typing into dueBefore field the same date as tasks due date', function () { - taskListSinglePage.typeDueBefore(currentDate); - taskListSinglePage.paginationPage().checkPaginationIsNotDisplayed(); + it('[C286426] Task is not displayed when typing into dueBefore field the same date as tasks due date', async () => { + await taskListSinglePage.typeDueBefore(currentDate); + await taskListSinglePage.paginationPage().checkPaginationIsNotDisplayed(); }); - it('[C286428] Task is not displayed when typing into dueAfter field a date before the task due date and into dueBefore a date before task due date', function () { - taskListSinglePage.typeDueBefore(beforeDate); - taskListSinglePage.typeDueAfter(beforeDate); - taskListSinglePage.paginationPage().checkPaginationIsNotDisplayed(); + it('[C286428] Task is not displayed when typing into dueAfter field a date before the task due date and into dueBefore a date before task due date', async () => { + await taskListSinglePage.typeDueBefore(beforeDate); + await taskListSinglePage.typeDueAfter(beforeDate); + await taskListSinglePage.paginationPage().checkPaginationIsNotDisplayed(); }); - it('[C286427] Task is displayed when typing into dueAfter field a date before the tasks due date and into dueBefore a date after', function () { - taskListSinglePage.typeDueBefore(afterDate); - taskListSinglePage.typeDueAfter(beforeDate); - taskListSinglePage.taskList().checkContentIsDisplayed(paginationTasksName[0]); - expect(taskListSinglePage.taskList().getDataTable().numberOfRows()).toBe(1); + it('[C286427] Task is displayed when typing into dueAfter field a date before the tasks due date and into dueBefore a date after', async () => { + await taskListSinglePage.typeDueBefore(afterDate); + await taskListSinglePage.typeDueAfter(beforeDate); + await taskListSinglePage.taskList().checkContentIsDisplayed(paginationTasksName[0]); + await expect(await taskListSinglePage.taskList().getDataTable().numberOfRows()).toBe(1); }); - it('[C286429] Task is not displayed when typing into dueAfter field a date after the tasks due date and into dueBefore a date after', function () { - taskListSinglePage.typeDueBefore(afterDate); - taskListSinglePage.typeDueAfter(afterDate); - taskListSinglePage.paginationPage().checkPaginationIsNotDisplayed(); + it('[C286429] Task is not displayed when typing into dueAfter field a date after the tasks due date and into dueBefore a date after', async () => { + await taskListSinglePage.typeDueBefore(afterDate); + await taskListSinglePage.typeDueAfter(afterDate); + await taskListSinglePage.paginationPage().checkPaginationIsNotDisplayed(); }); - it('[C280515] Should be able to see only the tasks of a specific app when typing the apps id in the appId field', () => { - taskListSinglePage.typeAppId(appRuntime.id); - expect(taskListSinglePage.getAppId()).toEqual(appRuntime.id.toString()); + it('[C280515] Should be able to see only the tasks of a specific app when typing the apps id in the appId field', async () => { + await taskListSinglePage.typeAppId(appRuntime.id); + await expect(await taskListSinglePage.getAppId()).toEqual(appRuntime.id.toString()); - taskListSinglePage.taskList().checkContentIsDisplayed(app.taskName); - taskListSinglePage.taskList().checkContentIsDisplayed(app.taskName); - taskListSinglePage.taskList().checkContentIsNotDisplayed(paginationTasksName[13]); + await taskListSinglePage.taskList().checkContentIsDisplayed(app.taskName); + await taskListSinglePage.taskList().checkContentIsDisplayed(app.taskName); + await taskListSinglePage.taskList().checkContentIsNotDisplayed(paginationTasksName[13]); }); - it('[C280569] Should be able to see No tasks found when typing an invalid appId', () => { - taskListSinglePage.typeAppId(invalidAppId); - expect(taskListSinglePage.getAppId()).toEqual(invalidAppId.toString()); + it('[C280569] Should be able to see No tasks found when typing an invalid appId', async () => { + await taskListSinglePage.typeAppId(invalidAppId); + await expect(await taskListSinglePage.getAppId()).toEqual(invalidAppId.toString()); - expect(taskListSinglePage.taskList().getNoTasksFoundMessage()).toEqual(noTasksFoundMessage); + await expect(await taskListSinglePage.taskList().getNoTasksFoundMessage()).toEqual(noTasksFoundMessage); }); - it('[C280570] Should be able to see only the tasks with specific name when typing the name in the task name field', () => { - taskListSinglePage.typeTaskName(paginationTasksName[13]); - expect(taskListSinglePage.getTaskName()).toEqual(paginationTasksName[13]); + it('[C280570] Should be able to see only the tasks with specific name when typing the name in the task name field', async () => { + await taskListSinglePage.typeTaskName(paginationTasksName[13]); + await expect(await taskListSinglePage.getTaskName()).toEqual(paginationTasksName[13]); - taskListSinglePage.taskList().checkContentIsDisplayed(paginationTasksName[13]); - taskListSinglePage.taskList().getRowsDisplayedWithSameName(paginationTasksName[13]).then((list) => { - expect(list.length).toEqual(2); + await taskListSinglePage.taskList().checkContentIsDisplayed(paginationTasksName[13]); + await expect((await taskListSinglePage.taskList().getRowsDisplayedWithSameName(paginationTasksName[13])).length).toBe(2); + }); + + it('[C280571] Should be able to see No tasks found when typing a task name that does not exist', async () => { + await taskListSinglePage.typeTaskName(invalidName); + await expect(await taskListSinglePage.getTaskName()).toEqual(invalidName); + + await expect(await taskListSinglePage.taskList().getNoTasksFoundMessage()).toEqual(noTasksFoundMessage); + }); + + it('[C280629] Should be able to see only the task with specific taskId when typing it in the task Id field', async () => { + await taskListSinglePage.typeTaskId(taskWithDueDate.id); + await expect(await taskListSinglePage.getTaskId()).toEqual(taskWithDueDate.id); + + await taskListSinglePage.taskList().checkContentIsDisplayed(taskWithDueDate.name); + await expect(await taskListSinglePage.taskList().getDataTable().numberOfRows()).toBe(1); + }); + + it('[C280630] Should be able to see No tasks found when typing an invalid taskId', async () => { + await taskListSinglePage.typeTaskId(invalidTaskId); + await expect(await taskListSinglePage.getTaskId()).toEqual(invalidTaskId); + + await expect(await taskListSinglePage.taskList().getNoTasksFoundMessage()).toEqual(noTasksFoundMessage); + }); + + it('[C286589] Should be able to see only completed tasks when choosing Completed from state drop down', async () => { + await taskListSinglePage.selectState('Completed'); + + await taskListSinglePage.taskList().checkContentIsDisplayed(completedTasks[0].name); + await taskListSinglePage.taskList().checkContentIsDisplayed(completedTasks[1].name); + await taskListSinglePage.taskList().checkContentIsDisplayed(completedTasks[2].name); + await expect(await taskListSinglePage.taskList().getDataTable().numberOfRows()).toBe(3); + }); + + it('[C286597] Should be able to see only running tasks when choosing Active from state drop down', async () => { + await taskListSinglePage.selectState('Active'); + + await taskListSinglePage.taskList().checkContentIsNotDisplayed(completedTasks[0].name); + await taskListSinglePage.taskList().checkContentIsNotDisplayed(completedTasks[1].name); + await taskListSinglePage.taskList().checkContentIsNotDisplayed(completedTasks[2].name); + await taskListSinglePage.taskList().getAllRowsNameColumn().then(async (list) => { + await expect(Util.arrayContainsArray(list, allTasksName)).toEqual(true); }); + await expect(await taskListSinglePage.taskList().getDataTable().numberOfRows()).toBe(20); }); - it('[C280571] Should be able to see No tasks found when typing a task name that does not exist', () => { - taskListSinglePage.typeTaskName(invalidName); - expect(taskListSinglePage.getTaskName()).toEqual(invalidName); + it('[C286598] Should be able to see all tasks when choosing All from state drop down', async () => { + await taskListSinglePage.selectState('All'); - expect(taskListSinglePage.taskList().getNoTasksFoundMessage()).toEqual(noTasksFoundMessage); - }); - - it('[C280629] Should be able to see only the task with specific taskId when typing it in the task Id field', () => { - taskListSinglePage.typeTaskId(taskWithDueDate.id); - expect(taskListSinglePage.getTaskId()).toEqual(taskWithDueDate.id); - - taskListSinglePage.taskList().checkContentIsDisplayed(taskWithDueDate.name); - expect(taskListSinglePage.taskList().getDataTable().numberOfRows()).toBe(1); - }); - - it('[C280630] Should be able to see No tasks found when typing an invalid taskId', () => { - taskListSinglePage.typeTaskId(invalidTaskId); - expect(taskListSinglePage.getTaskId()).toEqual(invalidTaskId); - - expect(taskListSinglePage.taskList().getNoTasksFoundMessage()).toEqual(noTasksFoundMessage); - }); - - it('[C286589] Should be able to see only completed tasks when choosing Completed from state drop down', () => { - taskListSinglePage.selectState('Completed'); - - taskListSinglePage.taskList().checkContentIsDisplayed(completedTasks[0].name); - taskListSinglePage.taskList().checkContentIsDisplayed(completedTasks[1].name); - taskListSinglePage.taskList().checkContentIsDisplayed(completedTasks[2].name); - expect(taskListSinglePage.taskList().getDataTable().numberOfRows()).toBe(3); - }); - - it('[C286597] Should be able to see only running tasks when choosing Active from state drop down', () => { - taskListSinglePage.selectState('Active'); - - taskListSinglePage.taskList().checkContentIsNotDisplayed(completedTasks[0].name); - taskListSinglePage.taskList().checkContentIsNotDisplayed(completedTasks[1].name); - taskListSinglePage.taskList().checkContentIsNotDisplayed(completedTasks[2].name); - taskListSinglePage.taskList().getAllRowsNameColumn().then(function (list) { - expect(Util.arrayContainsArray(list, allTasksName)).toEqual(true); + await taskListSinglePage.taskList().checkContentIsDisplayed(completedTasks[0].name); + await taskListSinglePage.taskList().checkContentIsDisplayed(completedTasks[1].name); + await taskListSinglePage.taskList().checkContentIsDisplayed(completedTasks[2].name); + await taskListSinglePage.taskList().getAllRowsNameColumn().then(async (list) => { + await expect(Util.arrayContainsArray(list, allTasksName)).toEqual(true); }); - expect(taskListSinglePage.taskList().getDataTable().numberOfRows()).toBe(20); - }); - - it('[C286598] Should be able to see all tasks when choosing All from state drop down', () => { - taskListSinglePage.selectState('All'); - - taskListSinglePage.taskList().checkContentIsDisplayed(completedTasks[0].name); - taskListSinglePage.taskList().checkContentIsDisplayed(completedTasks[1].name); - taskListSinglePage.taskList().checkContentIsDisplayed(completedTasks[2].name); - taskListSinglePage.taskList().getAllRowsNameColumn().then(function (list) { - expect(Util.arrayContainsArray(list, allTasksName)).toEqual(true); - }); - expect(taskListSinglePage.taskList().getDataTable().numberOfRows()).toBe(23); + await expect(await taskListSinglePage.taskList().getDataTable().numberOfRows()).toBe(23); }); }); - it('[C286622] Should be able to see only tasks that are part of a specific process when processDefinitionId is set', () => { + it('[C286622] Should be able to see only tasks that are part of a specific process when processDefinitionId is set', async () => { const processDefinitionIds = [processDefinitionId.processDefinitionId, processDefinitionId.processDefinitionId, processDefinitionId.processDefinitionId, processDefinitionId.processDefinitionId]; - navigationBarPage.clickTaskListButton(); - taskListSinglePage.clickResetButton(); + await navigationBarPage.clickTaskListButton(); + await taskListSinglePage.clickResetButton(); - taskListSinglePage.typeProcessDefinitionId(processDefinitionId.processDefinitionId); + await taskListSinglePage.typeProcessDefinitionId(processDefinitionId.processDefinitionId); - expect(taskListSinglePage.taskList().getDataTable().numberOfRows()).toBe(4); - taskListSinglePage.getAllProcessDefinitionIds().then(function (list) { - expect(Util.arrayContainsArray(list, processDefinitionIds)).toEqual(true); + await expect(await taskListSinglePage.taskList().getDataTable().numberOfRows()).toBe(4); + await taskListSinglePage.getAllProcessDefinitionIds().then(async (list) => { + await expect(Util.arrayContainsArray(list, processDefinitionIds)).toEqual(true); }); }); - it('[C286623] Should be able to see No tasks found when typing an invalid processDefinitionId', () => { - navigationBarPage.clickTaskListButton(); - taskListSinglePage.clickResetButton(); + it('[C286623] Should be able to see No tasks found when typing an invalid processDefinitionId', async () => { + await navigationBarPage.clickTaskListButton(); + await taskListSinglePage.clickResetButton(); - taskListSinglePage.typeProcessDefinitionId(invalidTaskId); + await taskListSinglePage.typeProcessDefinitionId(invalidTaskId); - expect(taskListSinglePage.taskList().getNoTasksFoundMessage()).toEqual(noTasksFoundMessage); + await expect(await taskListSinglePage.taskList().getNoTasksFoundMessage()).toEqual(noTasksFoundMessage); }); - it('[C286622] Should be able to see only tasks that are part of a specific process when processInstanceId is set', () => { + it('[C286622] Should be able to see only tasks that are part of a specific process when processInstanceId is set', async () => { const processInstanceIds = [processDefinitionId.id]; - navigationBarPage.clickTaskListButton(); - taskListSinglePage.clickResetButton(); + await navigationBarPage.clickTaskListButton(); + await taskListSinglePage.clickResetButton(); - taskListSinglePage.typeProcessInstanceId(processDefinitionId.id); - expect(taskListSinglePage.getProcessInstanceId()).toEqual(processDefinitionId.id); + await taskListSinglePage.typeProcessInstanceId(processDefinitionId.id); + await expect(await taskListSinglePage.getProcessInstanceId()).toEqual(processDefinitionId.id); - expect(taskListSinglePage.taskList().getDataTable().numberOfRows()).toBe(1); - taskListSinglePage.getAllProcessInstanceIds().then(function (list) { - expect(Util.arrayContainsArray(list, processInstanceIds)).toEqual(true); + await expect(await taskListSinglePage.taskList().getDataTable().numberOfRows()).toBe(1); + await taskListSinglePage.getAllProcessInstanceIds().then(async (list) => { + await expect(Util.arrayContainsArray(list, processInstanceIds)).toEqual(true); }); }); - it('[C286623] Should be able to see No tasks found when typing an invalid processInstanceId', () => { - navigationBarPage.clickTaskListButton(); - taskListSinglePage.clickResetButton(); + it('[C286623] Should be able to see No tasks found when typing an invalid processInstanceId', async () => { + await navigationBarPage.clickTaskListButton(); + await taskListSinglePage.clickResetButton(); - taskListSinglePage.typeProcessInstanceId(invalidTaskId); - expect(taskListSinglePage.getProcessInstanceId()).toEqual(invalidTaskId); + await taskListSinglePage.typeProcessInstanceId(invalidTaskId); + await expect(await taskListSinglePage.getProcessInstanceId()).toEqual(invalidTaskId); - expect(taskListSinglePage.taskList().getNoTasksFoundMessage()).toEqual(noTasksFoundMessage); + await expect(await taskListSinglePage.taskList().getNoTasksFoundMessage()).toEqual(noTasksFoundMessage); }); }); diff --git a/e2e/process-services/dynamic-table-date-picker.e2e.ts b/e2e/process-services/dynamic-table-date-picker.e2e.ts index 40c0e711ba..1145a8a773 100644 --- a/e2e/process-services/dynamic-table-date-picker.e2e.ts +++ b/e2e/process-services/dynamic-table-date-picker.e2e.ts @@ -37,7 +37,7 @@ describe('Dynamic Table', () => { const widget = new Widget(); let user, tenantId, appId, apps, users; - beforeAll(async (done) => { + beforeAll(async () => { this.alfrescoJsApi = new AlfrescoApi({ provider: 'BPM', hostBpm: browser.params.testConfig.adf_aps.host @@ -52,15 +52,13 @@ describe('Dynamic Table', () => { tenantId = user.tenantId; - done(); }); - afterAll(async (done) => { + afterAll(async () => { await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); await this.alfrescoJsApi.activiti.adminTenantsApi.deleteTenant(tenantId); - done(); }); describe('Date Picker', () => { @@ -77,67 +75,63 @@ describe('Dynamic Table', () => { const currentDate = DateUtil.formatDate('DD-MM-YYYY'); const rowPosition = 0; - beforeAll(async (done) => { + beforeAll(async () => { await this.alfrescoJsApi.login(user.email, user.password); const importedApp = await apps.importPublishDeployApp(this.alfrescoJsApi, app.file_location); appId = importedApp.id; await loginPage.loginToProcessServicesUsingUserModel(user); - - done(); }); - afterAll(async (done) => { + afterAll(async () => { await this.alfrescoJsApi.login(user.email, user.password); await this.alfrescoJsApi.activiti.modelsApi.deleteModel(appId); - - done(); }); - beforeEach(() => { - navigationBarPage.navigateToProcessServicesPage().goToTaskApp().clickProcessButton(); + beforeEach(async () => { + await (await (await navigationBarPage.navigateToProcessServicesPage()).goToTaskApp()).clickProcessButton(); - processServiceTabBarPage.clickProcessButton(); + await processServiceTabBarPage.clickProcessButton(); - processFiltersPage.clickCreateProcessButton(); - processFiltersPage.clickNewProcessDropdown(); + await processFiltersPage.clickCreateProcessButton(); + await processFiltersPage.clickNewProcessDropdown(); }); - it('[C286277] Should have a datepicker and a mask for DateTime field', () => { - widget.dynamicTable().clickAddButton(); - widget.dynamicTable().clickColumnDateTime(); + it('[C286277] Should have a datepicker and a mask for DateTime field', async () => { + await widget.dynamicTable().clickAddButton(); + await widget.dynamicTable().clickColumnDateTime(); - expect(widget.dynamicTable().addRandomStringOnDateTime(randomText.wrongDateTime)).toBe(''); + await expect(await widget.dynamicTable().addRandomStringOnDateTime(randomText.wrongDateTime)).toBe(''); }); - it('[C286279] Should be able to save row with Date field', () => { - widget.dynamicTable().clickAddButton(); - widget.dynamicTable().addRandomStringOnDate(randomText.wrongDate); - widget.dynamicTable().clickSaveButton(); - expect(widget.dynamicTable().checkErrorMessage()).toBe(randomText.error); + it('[C286279] Should be able to save row with Date field', async () => { + await widget.dynamicTable().clickAddButton(); + await widget.dynamicTable().addRandomStringOnDate(randomText.wrongDate); + await widget.dynamicTable().clickSaveButton(); + await expect(await widget.dynamicTable().checkErrorMessage()).toBe(randomText.error); - widget.dynamicTable().clickDateWidget(); - datePicker.selectTodayDate() - .checkDatePickerIsNotDisplayed(); - widget.dynamicTable().clickSaveButton(); - widget.dynamicTable().getTableRow(rowPosition); - expect(widget.dynamicTable().getTableCellText(rowPosition, 1)).toBe(currentDate); + await widget.dynamicTable().clickDateWidget(); + await datePicker.selectTodayDate(); + await datePicker.checkDatePickerIsNotDisplayed(); + await widget.dynamicTable().clickSaveButton(); + await widget.dynamicTable().getTableRow(rowPosition); + await expect(await widget.dynamicTable().getTableCellText(rowPosition, 1)).toBe(currentDate); }); - it('[C311456] Should be able to delete date that is not mandatory and save the Dynamic Table', () => { - widget.dynamicTable().clickAddButton(); - widget.dynamicTable().clickSaveButton(); - expect(widget.dynamicTable().checkErrorMessage()).toBe(randomText.requiredError); + it('[C311456] Should be able to delete date that is not mandatory and save the Dynamic Table', async () => { + await widget.dynamicTable().clickAddButton(); + await widget.dynamicTable().clickSaveButton(); + await expect(await widget.dynamicTable().checkErrorMessage()).toBe(randomText.requiredError); - widget.dynamicTable().clickDateWidget(); - datePicker.selectTodayDate() - .checkDatePickerIsNotDisplayed(); - widget.dynamicTable().clickSaveButton(); - widget.dynamicTable().getTableRow(rowPosition); - expect(widget.dynamicTable().getTableCellText(rowPosition, 1)).toBe(currentDate); - expect(widget.dynamicTable().getTableCellText(rowPosition, 2)).toBe(''); + await widget.dynamicTable().clickDateWidget(); + await datePicker.selectTodayDate(); + await datePicker.checkDatePickerIsNotDisplayed(); + await widget.dynamicTable().clickSaveButton(); + await widget.dynamicTable().getTableRow(rowPosition); + await expect(await widget.dynamicTable().getTableCellText(rowPosition, 1)).toBe(currentDate); + await expect(await widget.dynamicTable().getTableCellText(rowPosition, 2)).toBe(''); }); }); @@ -145,7 +139,7 @@ describe('Dynamic Table', () => { const app = resources.Files.APP_DYNAMIC_TABLE_DROPDOWN; const dropdown = widget.dropdown(); - beforeAll(async (done) => { + beforeAll(async () => { await this.alfrescoJsApi.login(user.email, user.password); @@ -154,32 +148,30 @@ describe('Dynamic Table', () => { await loginPage.loginToProcessServicesUsingUserModel(user); - done(); }); - afterAll(async (done) => { + afterAll(async () => { await this.alfrescoJsApi.login(user.email, user.password); await this.alfrescoJsApi.activiti.modelsApi.deleteModel(appId); - done(); }); - beforeEach(() => { - navigationBarPage.navigateToProcessServicesPage().goToApp(app.title).clickProcessButton(); + beforeEach(async () => { + await (await (await navigationBarPage.navigateToProcessServicesPage()).goToApp(app.title)).clickProcessButton(); - processServiceTabBarPage.clickProcessButton(); + await processServiceTabBarPage.clickProcessButton(); - processFiltersPage.clickCreateProcessButton(); - processFiltersPage.clickNewProcessDropdown(); + await processFiltersPage.clickCreateProcessButton(); + await processFiltersPage.clickNewProcessDropdown(); }); - it('[C286519] Should be able to save row with required dropdown column', () => { + it('[C286519] Should be able to save row with required dropdown column', async () => { const dropdownOption = 'Option 1'; - widget.dynamicTable().clickAddButton(); - dropdown.selectOption(dropdownOption); - widget.dynamicTable().clickSaveButton(); - widget.dynamicTable().checkItemIsPresent(dropdownOption); + await widget.dynamicTable().clickAddButton(); + await dropdown.selectOption(dropdownOption); + await widget.dynamicTable().clickSaveButton(); + await widget.dynamicTable().checkItemIsPresent(dropdownOption); }); }); diff --git a/e2e/process-services/empty-process-list-component.e2e.ts b/e2e/process-services/empty-process-list-component.e2e.ts index 7c76cf703d..25423d4c8f 100644 --- a/e2e/process-services/empty-process-list-component.e2e.ts +++ b/e2e/process-services/empty-process-list-component.e2e.ts @@ -44,7 +44,7 @@ describe('Empty Process List Test', () => { let user; - beforeAll(async (done) => { + beforeAll(async () => { const apps = new AppsActions(); const users = new UsersActions(); @@ -63,35 +63,35 @@ describe('Empty Process List Test', () => { await apps.importPublishDeployApp(this.alfrescoJsApi, appB.file_location); await loginPage.loginToProcessServicesUsingUserModel(user); - done(); + }); - it('[C260494] Should add process to list when a process is created', () => { - navigationBarPage.navigateToProcessServicesPage(); - processServicesPage.checkApsContainer(); - processServicesPage.goToApp(appA.title).clickProcessButton(); - expect(processListPage.checkProcessListTitleIsDisplayed()).toEqual('No Processes Found'); - expect(processDetailsPage.checkProcessDetailsMessage()).toEqual('No process details found'); + it('[C260494] Should add process to list when a process is created', async () => { + await navigationBarPage.navigateToProcessServicesPage(); + await processServicesPage.checkApsContainer(); + await (await processServicesPage.goToApp(appA.title)).clickProcessButton(); + await expect(await processListPage.getDisplayedProcessListTitle()).toEqual('No Processes Found'); + await expect(await processDetailsPage.checkProcessDetailsMessage()).toEqual('No process details found'); - processFiltersPage.clickCreateProcessButton(); - processFiltersPage.clickNewProcessDropdown(); - startProcessPage.selectFromProcessDropdown(appA.process_wse_name); - startProcessPage.clickStartProcessButton(); - expect(processFiltersPage.numberOfProcessRows()).toEqual(1); + await processFiltersPage.clickCreateProcessButton(); + await processFiltersPage.clickNewProcessDropdown(); + await startProcessPage.selectFromProcessDropdown(appA.process_wse_name); + await startProcessPage.clickStartProcessButton(); + await expect(await processFiltersPage.numberOfProcessRows()).toEqual(1); - processDetailsPage.checkProcessDetailsCard(); - navigationBarPage.navigateToProcessServicesPage(); - processServicesPage.checkApsContainer(); - processServicesPage.goToApp(appB.title).clickProcessButton(); - expect(processListPage.checkProcessListTitleIsDisplayed()).toEqual('No Processes Found'); - expect(processDetailsPage.checkProcessDetailsMessage()).toEqual('No process details found'); + await processDetailsPage.checkProcessDetailsCard(); + await navigationBarPage.navigateToProcessServicesPage(); + await processServicesPage.checkApsContainer(); + await (await processServicesPage.goToApp(appB.title)).clickProcessButton(); + await expect(await processListPage.getDisplayedProcessListTitle()).toEqual('No Processes Found'); + await expect(await processDetailsPage.checkProcessDetailsMessage()).toEqual('No process details found'); - processFiltersPage.clickCreateProcessButton(); - processFiltersPage.clickNewProcessDropdown(); - startProcessPage.selectFromProcessDropdown(appB.processName); - startProcessPage.clickStartProcessButton(); - expect(processFiltersPage.numberOfProcessRows()).toEqual(1); - processDetailsPage.checkProcessDetailsCard(); + await processFiltersPage.clickCreateProcessButton(); + await processFiltersPage.clickNewProcessDropdown(); + await startProcessPage.selectFromProcessDropdown(appB.processName); + await startProcessPage.clickStartProcessButton(); + await expect(await processFiltersPage.numberOfProcessRows()).toEqual(1); + await processDetailsPage.checkProcessDetailsCard(); }); }); diff --git a/e2e/process-services/form-component.e2e.ts b/e2e/process-services/form-component.e2e.ts index 0c2f3dcc63..37041ead30 100644 --- a/e2e/process-services/form-component.e2e.ts +++ b/e2e/process-services/form-component.e2e.ts @@ -47,7 +47,7 @@ describe('Form Component', () => { errorLabel: 'Error Label4' }; - beforeAll(async (done) => { + beforeAll(async () => { this.alfrescoJsApi = new AlfrescoApi({ provider: 'BPM', hostBpm: browser.params.testConfig.adf_aps.host @@ -65,43 +65,41 @@ describe('Form Component', () => { await loginPage.loginToProcessServicesUsingUserModel(user); - navigationBarPage.clickFormButton(); - - done(); + await navigationBarPage.navigateToProcessServicesFormPage(); }); - afterAll(async (done) => { + afterAll(async () => { await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); await this.alfrescoJsApi.activiti.adminTenantsApi.deleteTenant(tenantId); - - done(); }); - it('[C286505] Should be able to display errors under the Error Log section', () => { - widget.numberWidget().getNumberFieldLabel(fields.numberWidgetId); - widget.numberWidget().setFieldValue(fields.numberWidgetId, message.test); - formPage.checkErrorMessageForWidgetIsDisplayed(message.warningNumberAndAmount); - formPage.checkErrorLogMessage(message.errorLogNumber); + it('[C286505] Should be able to display errors under the Error Log section', async () => { + await widget.numberWidget().getNumberFieldLabel(fields.numberWidgetId); + await widget.numberWidget().setFieldValue(fields.numberWidgetId, message.test); + await formPage.checkErrorMessageForWidgetIsDisplayed(message.warningNumberAndAmount); + await formPage.checkErrorLogMessage(message.errorLogNumber); - widget.dateWidget().checkLabelIsVisible(fields.dateWidgetId); - widget.dateWidget().setDateInput(fields.dateWidgetId, message.test); - formPage.saveForm(); - formPage.checkErrorMessageForWidgetIsDisplayed(message.warningDate); - formPage.checkErrorLogMessage(message.errorLogDate); + await widget.dateWidget().checkLabelIsVisible(fields.dateWidgetId); + await widget.dateWidget().setDateInput(fields.dateWidgetId, message.test); - widget.amountWidget().getAmountFieldLabel(fields.amountWidgetId); - widget.amountWidget().setFieldValue(fields.amountWidgetId, message.test); - formPage.checkErrorMessageForWidgetIsDisplayed(message.warningNumberAndAmount); - formPage.checkErrorLogMessage(message.errorLogAmount); + await formPage.saveForm(); + await formPage.checkErrorMessageForWidgetIsDisplayed(message.warningDate); + await formPage.checkErrorLogMessage(message.errorLogDate); - widget.amountWidget().removeFromAmountWidget(fields.amountWidgetId); - formPage.checkErrorMessageIsNotDisplayed(message.errorLogAmount); + await widget.amountWidget().getAmountFieldLabel(fields.amountWidgetId); + await widget.amountWidget().setFieldValue(fields.amountWidgetId, message.test); + await formPage.checkErrorMessageForWidgetIsDisplayed(message.warningNumberAndAmount); + await formPage.checkErrorLogMessage(message.errorLogAmount); + + await widget.amountWidget().removeFromAmountWidget(fields.amountWidgetId); + await formPage.checkErrorMessageIsNotDisplayed(message.errorLogAmount); + + await widget.dateWidget().clearDateInput(fields.dateWidgetId); + await widget.numberWidget().clearFieldValue(fields.numberWidgetId); + await formPage.checkErrorMessageForWidgetIsNotDisplayed(message.warningDate); + await formPage.checkErrorMessageIsNotDisplayed(message.errorLogDate); + await formPage.checkErrorLogMessage(message.errorLabel); - widget.dateWidget().clearDateInput(fields.dateWidgetId); - widget.numberWidget().clearFieldValue(fields.numberWidgetId); - formPage.checkErrorMessageForWidgetIsNotDisplayed(message.warningDate); - formPage.checkErrorMessageIsNotDisplayed(message.errorLogDate); - formPage.checkErrorLogMessage(message.errorLabel); }); }); diff --git a/e2e/process-services/form-people-widget.e2e.ts b/e2e/process-services/form-people-widget.e2e.ts index 9d80da1ec1..c6de170e9b 100644 --- a/e2e/process-services/form-people-widget.e2e.ts +++ b/e2e/process-services/form-people-widget.e2e.ts @@ -20,7 +20,6 @@ import { ProcessFiltersPage } from '../pages/adf/process-services/processFilters import { StartProcessPage } from '../pages/adf/process-services/startProcessPage'; import { ProcessDetailsPage } from '../pages/adf/process-services/processDetailsPage'; import { TaskDetailsPage } from '../pages/adf/process-services/taskDetailsPage'; -import { ProcessServiceTabBarPage } from '../pages/adf/process-services/processServiceTabBarPage'; import { NavigationBarPage } from '../pages/adf/navigationBarPage'; import resources = require('../util/resources'); @@ -29,6 +28,7 @@ import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; import { AppsActions } from '../actions/APS/apps.actions'; import { UsersActions } from '../actions/users.actions'; import { browser } from 'protractor'; +import { ProcessServiceTabBarPage } from '../pages/adf/process-services/processServiceTabBarPage'; describe('Form widgets - People', () => { @@ -44,7 +44,7 @@ describe('Form widgets - People', () => { const taskDetails = new TaskDetailsPage(); const processServiceTabBarPage = new ProcessServiceTabBarPage(); - beforeAll(async (done) => { + beforeAll(async () => { const users = new UsersActions(); const appsActions = new AppsActions(); @@ -63,62 +63,53 @@ describe('Form widgets - People', () => { await loginPage.loginToProcessServicesUsingUserModel(processUserModel); - done(); }); - afterAll(async (done) => { + afterAll(async () => { await alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); await alfrescoJsApi.activiti.adminTenantsApi.deleteTenant(processUserModel.tenantId); - done(); }); - beforeEach(() => { - new NavigationBarPage().navigateToProcessServicesPage().goToApp(appModel.name) - .clickProcessButton(); - processFiltersPage.clickCreateProcessButton(); - processFiltersPage.clickNewProcessDropdown(); + beforeEach(async () => { + await (await (await new NavigationBarPage().navigateToProcessServicesPage()).goToApp(appModel.name)).clickProcessButton(); + await processFiltersPage.clickCreateProcessButton(); + await processFiltersPage.clickNewProcessDropdown(); - widget.peopleWidget().checkPeopleFieldIsDisplayed(); - widget.peopleWidget().fillPeopleField(processUserModel.firstName); - widget.peopleWidget().selectUserFromDropdown(); + await widget.peopleWidget().checkPeopleFieldIsDisplayed(); + await widget.peopleWidget().fillPeopleField(processUserModel.firstName); + await widget.peopleWidget().selectUserFromDropdown(); }); it('[C286577] Should be able to start a process with people widget', async () => { + await startProcess.clickFormStartProcessButton(); + await processDetailsPage.clickOnActiveTask(); - startProcess.clickFormStartProcessButton(); - processDetailsPage.clickOnActiveTask(); - - browser.controlFlow().execute(async () => { - const taskId = await taskDetails.getId(); - const taskForm = await alfrescoJsApi.activiti.taskApi.getTaskForm(taskId); - const userEmail = taskForm['fields'][0].fields['1'][0].value.email; - expect(userEmail).toEqual(processUserModel.email); - }); + const taskId = await taskDetails.getId(); + const taskForm = await alfrescoJsApi.activiti.taskApi.getTaskForm(taskId); + const userEmail = taskForm['fields'][0].fields['1'][0].value.email; + await expect(userEmail).toEqual(processUserModel.email); }); it('[C286576] Should be able to see user in completed task', async () => { + await startProcess.enterProcessName(app.processName); + await startProcess.clickFormStartProcessButton(); - startProcess.enterProcessName(app.processName); - startProcess.clickFormStartProcessButton(); + await processDetailsPage.clickOnActiveTask(); + await taskDetails.checkCompleteFormButtonIsDisplayed(); + await taskDetails.clickCompleteFormTask(); - processDetailsPage.clickOnActiveTask(); - taskDetails.checkCompleteFormButtonIsDisplayed(); - taskDetails.clickCompleteFormTask(); + await processServiceTabBarPage.clickProcessButton(); + await processFiltersPage.clickCompletedFilterButton(); + await processFiltersPage.selectFromProcessList(app.processName); - processServiceTabBarPage.clickProcessButton(); - processFiltersPage.clickCompletedFilterButton(); - processFiltersPage.selectFromProcessList(app.processName); + await processDetailsPage.clickOnCompletedTask(); - processDetailsPage.clickOnCompletedTask(); - - browser.controlFlow().execute(async () => { - const taskId = await taskDetails.getId(); - const taskForm = await alfrescoJsApi.activiti.taskApi.getTaskForm(taskId); - const userEmail = taskForm['fields'][0].fields['1'][0].value.email; - expect(userEmail).toEqual(processUserModel.email); - }); + const taskId = await taskDetails.getId(); + const taskForm = await alfrescoJsApi.activiti.taskApi.getTaskForm(taskId); + const userEmail = taskForm['fields'][0].fields['1'][0].value.email; + await expect(userEmail).toEqual(processUserModel.email); }); }); diff --git a/e2e/process-services/form-widgets-component.e2e.ts b/e2e/process-services/form-widgets-component.e2e.ts index 684695eca5..f344006c1b 100644 --- a/e2e/process-services/form-widgets-component.e2e.ts +++ b/e2e/process-services/form-widgets-component.e2e.ts @@ -45,7 +45,7 @@ describe('Form widgets', () => { const app = resources.Files.WIDGETS_SMOKE_TEST; const appFields = app.form_fields; - beforeAll(async (done) => { + beforeAll(async () => { const users = new UsersActions(); const appsActions = new AppsActions(); @@ -64,132 +64,135 @@ describe('Form widgets', () => { await loginPage.loginToProcessServicesUsingUserModel(processUserModel); - new NavigationBarPage().navigateToProcessServicesPage().goToApp(appModel.name); + await (await new NavigationBarPage().navigateToProcessServicesPage()).goToApp(appModel.name); - taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); - taskPage.createNewTask().addName(newTask).addDescription('Description').addForm(app.formName).clickStartButton(); + await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); + const task = await taskPage.createNewTask(); + await task.addName(newTask); + await task.addDescription('Description'); + await task.addForm(app.formName); + await task.clickStartButton(); - taskPage.tasksListPage().checkContentIsDisplayed(newTask); - taskPage.formFields().checkFormIsDisplayed(); - expect(taskPage.taskDetails().getTitle()).toEqual('Activities'); + await taskPage.tasksListPage().checkContentIsDisplayed(newTask); + await taskPage.formFields().checkFormIsDisplayed(); + await expect(await taskPage.taskDetails().getTitle()).toEqual('Activities'); - const response = await taskPage.taskDetails().getId(); + const response = await taskPage.taskDetails().getId(); const formDefinition = await alfrescoJsApi.activiti.taskFormsApi.getTaskForm(response); formInstance.setFields(formDefinition.fields); formInstance.setAllWidgets(formDefinition.fields); - done(); }); - afterAll(async (done) => { + afterAll(async () => { await alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); await alfrescoJsApi.activiti.adminTenantsApi.deleteTenant(processUserModel.tenantId); - done(); }); - it('[C272778] Should display text and multi-line in form', () => { - expect(taskPage.formFields().getFieldLabel(appFields.text_id)) + it('[C272778] Should display text and multi-line in form', async () => { + await expect(await taskPage.formFields().getFieldLabel(appFields.text_id)) .toEqual(formInstance.getWidgetBy('id', appFields.text_id).name); - expect(taskPage.formFields().getFieldValue(appFields.text_id)) + await expect(await taskPage.formFields().getFieldValue(appFields.text_id)) .toEqual(formInstance.getWidgetBy('id', appFields.text_id).value || ''); - expect(widget.multilineTextWidget().getFieldValue(appFields.multiline_id)) + await expect(await widget.multilineTextWidget().getFieldValue(appFields.multiline_id)) .toEqual(formInstance.getWidgetBy('id', appFields.multiline_id).value || ''); - expect(taskPage.formFields().getFieldLabel(appFields.multiline_id)) + await expect(await taskPage.formFields().getFieldLabel(appFields.multiline_id)) .toEqual(formInstance.getWidgetBy('id', appFields.multiline_id).name); }); - it('[C272779] Should display number and amount in form', () => { - expect(taskPage.formFields().getFieldValue(appFields.number_id)) + it('[C272779] Should display number and amount in form', async () => { + await expect(await taskPage.formFields().getFieldValue(appFields.number_id)) .toEqual(formInstance.getWidgetBy('id', appFields.number_id).value || ''); - expect(taskPage.formFields().getFieldLabel(appFields.number_id)) + await expect(await taskPage.formFields().getFieldLabel(appFields.number_id)) .toEqual(formInstance.getWidgetBy('id', appFields.number_id).name); - expect(taskPage.formFields().getFieldValue(appFields.amount_id)) + await expect(await taskPage.formFields().getFieldValue(appFields.amount_id)) .toEqual(formInstance.getWidgetBy('id', appFields.amount_id).value || ''); - expect(taskPage.formFields().getFieldLabel(appFields.amount_id)) + await expect(await taskPage.formFields().getFieldLabel(appFields.amount_id)) .toEqual(formInstance.getWidgetBy('id', appFields.amount_id).name); }); - it('[C272780] Should display attach file and attach folder in form', () => { - expect(taskPage.formFields().getFieldLabel(appFields.attachFolder_id)) + it('[C272780] Should display attach file and attach folder in form', async () => { + await expect(await taskPage.formFields().getFieldLabel(appFields.attachFolder_id)) .toEqual(formInstance.getWidgetBy('id', appFields.attachFolder_id).name); - expect(taskPage.formFields().getFieldLabel(appFields.attachFile_id)) + await expect(await taskPage.formFields().getFieldLabel(appFields.attachFile_id)) .toEqual(formInstance.getWidgetBy('id', appFields.attachFile_id).name); }); - it('[C272781] Should display date and date & time in form', () => { - expect(taskPage.formFields().getFieldLabel(appFields.date_id)) + it('[C272781] Should display date and date & time in form', async () => { + await expect(await taskPage.formFields().getFieldLabel(appFields.date_id)) .toContain(formInstance.getWidgetBy('id', appFields.date_id).name); - expect(taskPage.formFields().getFieldValue(appFields.date_id)) + await expect(await taskPage.formFields().getFieldValue(appFields.date_id)) .toEqual(formInstance.getWidgetBy('id', appFields.date_id).value || ''); - expect(taskPage.formFields().getFieldLabel(appFields.dateTime_id)) + await expect(await taskPage.formFields().getFieldLabel(appFields.dateTime_id)) .toContain(formInstance.getWidgetBy('id', appFields.dateTime_id).name); - expect(taskPage.formFields().getFieldValue(appFields.dateTime_id)) + await expect(await taskPage.formFields().getFieldValue(appFields.dateTime_id)) .toEqual(formInstance.getWidgetBy('id', appFields.dateTime_id).value || ''); }); - it('[C272782] Should display people and group in form', () => { - expect(taskPage.formFields().getFieldValue(appFields.people_id)) + it('[C272782] Should display people and group in form', async () => { + await expect(await taskPage.formFields().getFieldValue(appFields.people_id)) .toEqual(formInstance.getWidgetBy('id', appFields.people_id).value || ''); - expect(taskPage.formFields().getFieldLabel(appFields.people_id)) + await expect(await taskPage.formFields().getFieldLabel(appFields.people_id)) .toEqual(formInstance.getWidgetBy('id', appFields.people_id).name); - expect(taskPage.formFields().getFieldValue(appFields.group_id)) + await expect(await taskPage.formFields().getFieldValue(appFields.group_id)) .toEqual(formInstance.getWidgetBy('id', appFields.group_id).value || ''); - expect(taskPage.formFields().getFieldLabel(appFields.group_id)) + await expect(await taskPage.formFields().getFieldLabel(appFields.group_id)) .toEqual(formInstance.getWidgetBy('id', appFields.group_id).name); }); - it('[C272783] Should display displayText and displayValue in form', () => { - expect(widget.displayTextWidget().getFieldLabel(appFields.displayText_id)) + it('[C272783] Should display displayText and displayValue in form', async () => { + + await expect(await widget.displayTextWidget().getFieldLabel(appFields.displayText_id)) .toEqual(formInstance.getWidgetBy('id', appFields.displayText_id).value); - expect(widget.displayValueWidget().getFieldLabel(appFields.displayValue_id)) + await expect(await widget.displayValueWidget().getFieldLabel(appFields.displayValue_id)) .toEqual(formInstance.getWidgetBy('id', appFields.displayValue_id).value || 'Display value' || ''); - expect(widget.displayValueWidget().getFieldValue(appFields.displayValue_id)) + await expect(await widget.displayValueWidget().getFieldValue(appFields.displayValue_id)) .toEqual(formInstance.getWidgetBy('id', appFields.displayValue_id).value || ''); }); - it('[C272784] Should display typeahead and header in form', () => { - expect(widget.headerWidget().getFieldLabel(appFields.header_id)) + it('[C272784] Should display typeahead and header in form', async () => { + await expect(await widget.headerWidget().getFieldLabel(appFields.header_id)) .toEqual(formInstance.getWidgetBy('id', appFields.header_id).name); - expect(taskPage.formFields().getFieldValue(appFields.typeAhead_id)) + await expect(await taskPage.formFields().getFieldValue(appFields.typeAhead_id)) .toEqual(formInstance.getWidgetBy('id', appFields.typeAhead_id).value || ''); - expect(taskPage.formFields().getFieldLabel(appFields.typeAhead_id)) + await expect(await taskPage.formFields().getFieldLabel(appFields.typeAhead_id)) .toEqual(formInstance.getWidgetBy('id', appFields.typeAhead_id).name); }); - it('[C272785] Should display checkbox and radio button in form', () => { + it('[C272785] Should display checkbox and radio button in form', async () => { const radioOption = 1; - expect(taskPage.formFields().getFieldLabel(appFields.checkbox_id)) + await expect(await taskPage.formFields().getFieldLabel(appFields.checkbox_id)) .toContain(formInstance.getWidgetBy('id', appFields.checkbox_id).name); - expect(taskPage.formFields().getFieldLabel(appFields.radioButtons_id)) + await expect(await taskPage.formFields().getFieldLabel(appFields.radioButtons_id)) .toContain(formInstance.getWidgetBy('id', appFields.radioButtons_id).name); - expect(widget.radioWidget().getSpecificOptionLabel(appFields.radioButtons_id, radioOption)) + await expect(await widget.radioWidget().getSpecificOptionLabel(appFields.radioButtons_id, radioOption)) .toContain(formInstance.getWidgetBy('id', appFields.radioButtons_id).options[radioOption - 1].name); }); - it('[C268149] Should display hyperlink, dropdown and dynamic table in form', () => { + it('[C268149] Should display hyperlink, dropdown and dynamic table in form', async () => { - expect(widget.hyperlink().getFieldText(appFields.hyperlink_id)) + await expect(await widget.hyperlink().getFieldText(appFields.hyperlink_id)) .toEqual(formInstance.getWidgetBy('id', appFields.hyperlink_id).hyperlinkUrl || ''); - expect(taskPage.formFields().getFieldLabel(appFields.hyperlink_id)) + await expect(await taskPage.formFields().getFieldLabel(appFields.hyperlink_id)) .toEqual(formInstance.getWidgetBy('id', appFields.hyperlink_id).name); - expect(taskPage.formFields().getFieldLabel(appFields.dropdown_id)) + await expect(await taskPage.formFields().getFieldLabel(appFields.dropdown_id)) .toContain(formInstance.getWidgetBy('id', appFields.dropdown_id).name); - expect(widget.dropdown().getSelectedOptionText(appFields.dropdown_id)) + await expect(widget.dropdown().getSelectedOptionText(appFields.dropdown_id)) .toContain(formInstance.getWidgetBy('id', appFields.dropdown_id).value); - expect(widget.dynamicTable().getFieldLabel(appFields.dynamicTable_id)) + await expect(await widget.dynamicTable().getFieldLabel(appFields.dynamicTable_id)) .toContain(formInstance.getWidgetBy('id', appFields.dynamicTable_id).name); - expect(widget.dynamicTable().getColumnName(appFields.dynamicTable_id)) + await expect(await widget.dynamicTable().getColumnName(appFields.dynamicTable_id)) .toContain(formInstance.getWidgetBy('id', appFields.dynamicTable_id).columnDefinitions[0].name); }); @@ -202,7 +205,7 @@ describe('Form widgets', () => { let deployedApp, process; const appFields = app.form_fields; - beforeAll(async (done) => { + beforeAll(async () => { const users = new UsersActions(); alfrescoJsApi = new AlfrescoApi({ @@ -223,36 +226,37 @@ describe('Form widgets', () => { }); process = await appsActions.startProcess(alfrescoJsApi, appModel, app.processName); await loginPage.loginToProcessServicesUsingUserModel(processUserModel); - done(); + }); - beforeEach(async() => { + beforeEach(async () => { const urlToNavigateTo = `${browser.params.testConfig.adf.url}/activiti/apps/${deployedApp.id}/tasks/`; await BrowserActions.getUrl(urlToNavigateTo); - taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); - taskPage.formFields().checkFormIsDisplayed(); + await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); + await taskPage.formFields().checkFormIsDisplayed(); }); - afterAll(async (done) => { + afterAll(async () => { await alfrescoJsApi.activiti.processApi.deleteProcessInstance(process.id); await alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); await alfrescoJsApi.activiti.adminTenantsApi.deleteTenant(processUserModel.tenantId); - done(); + }); - it('[C260405] Value fields configured with process variables', () => { - taskPage.formFields().checkFormIsDisplayed(); - expect(taskPage.taskDetails().getTitle()).toEqual('Activities'); + it('[C260405] Value fields configured with process variables', async () => { + await taskPage.formFields().checkFormIsDisplayed(); + await expect(await taskPage.taskDetails().getTitle()).toEqual('Activities'); - taskPage.formFields().setValueInInputById('label', 'value 1').completeForm(); + await taskPage.formFields().setValueInInputById('label', 'value 1'); + await taskPage.formFields().completeForm(); /* cspell:disable-next-line */ - taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.COMPLETED_TASKS); + await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.COMPLETED_TASKS); - expect(widget.displayTextWidget().getFieldText(appFields.displayText_id)) + await expect(await widget.displayTextWidget().getFieldText(appFields.displayText_id)) .toContain('value 1'); - expect(widget.textWidget().getFieldValue(appFields.text_id)) + await expect(await widget.textWidget().getFieldValue(appFields.text_id)) .toEqual('value 1'); - expect(widget.displayValueWidget().getFieldValue(appFields.displayValue_id)) + await expect(await widget.displayValueWidget().getFieldValue(appFields.displayValue_id)) .toEqual('value 1'); }); }); diff --git a/e2e/process-services/pagination-processlist-addingProcesses.e2e.ts b/e2e/process-services/pagination-processlist-addingProcesses.e2e.ts index 12837df662..eb559a0aa1 100644 --- a/e2e/process-services/pagination-processlist-addingProcesses.e2e.ts +++ b/e2e/process-services/pagination-processlist-addingProcesses.e2e.ts @@ -48,7 +48,7 @@ describe('Process List - Pagination when adding processes', () => { const apps = new AppsActions(); let resultApp; - beforeAll(async (done) => { + beforeAll(async () => { const users = new UsersActions(); this.alfrescoJsApi = new AlfrescoApi({ @@ -70,9 +70,8 @@ describe('Process List - Pagination when adding processes', () => { await loginPage.loginToProcessServicesUsingUserModel(processUserModel); - await new NavigationBarPage().navigateToProcessServicesPage().goToTaskApp().clickProcessButton(); + await (await (await new NavigationBarPage().navigateToProcessServicesPage()).goToTaskApp()).clickProcessButton(); - done(); }); it('[C261046] Should keep Items per page after adding processes', async () => { @@ -81,34 +80,32 @@ describe('Process List - Pagination when adding processes', () => { totalPages = 2; page = 1; - paginationPage.selectItemsPerPage(itemsPerPage.fifteen); - processDetailsPage.checkProcessTitleIsDisplayed(); - processFiltersPage.waitForTableBody(); + await paginationPage.selectItemsPerPage(itemsPerPage.fifteen); + await processDetailsPage.checkProcessTitleIsDisplayed(); + await processFiltersPage.waitForTableBody(); - expect(paginationPage.getCurrentPage()).toEqual('Page ' + page); - expect(paginationPage.getTotalPages()).toEqual('of ' + totalPages); - expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.fifteen); - expect(paginationPage.getPaginationRange()).toEqual('Showing 1-' + itemsPerPage.fifteenValue * page + ' of ' + (nrOfProcesses - 5)); - expect(processFiltersPage.numberOfProcessRows()).toBe(itemsPerPage.fifteenValue); - paginationPage.checkNextPageButtonIsEnabled(); - paginationPage.checkPreviousPageButtonIsDisabled(); + await expect(await paginationPage.getCurrentPage()).toEqual('Page ' + page); + await expect(await paginationPage.getTotalPages()).toEqual('of ' + totalPages); + await expect(await paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.fifteen); + await expect(await paginationPage.getPaginationRange()).toEqual('Showing 1-' + itemsPerPage.fifteenValue * page + ' of ' + (nrOfProcesses - 5)); + await expect(await processFiltersPage.numberOfProcessRows()).toBe(itemsPerPage.fifteenValue); + await paginationPage.checkNextPageButtonIsEnabled(); + await paginationPage.checkPreviousPageButtonIsDisabled(); - browser.controlFlow().execute(async () => { - for (i; i < nrOfProcesses; i++) { - await apps.startProcess(this.alfrescoJsApi, resultApp); - } - }); + for (i; i < nrOfProcesses; i++) { + await apps.startProcess(this.alfrescoJsApi, resultApp); + } page++; - paginationPage.clickOnNextPage(); - processDetailsPage.checkProcessTitleIsDisplayed(); - processFiltersPage.waitForTableBody(); - expect(paginationPage.getCurrentPage()).toEqual('Page ' + page); - expect(paginationPage.getTotalPages()).toEqual('of ' + totalPages); - expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.fifteen); - expect(paginationPage.getPaginationRange()).toEqual('Showing 16-' + nrOfProcesses + ' of ' + nrOfProcesses); - expect(processFiltersPage.numberOfProcessRows()).toBe(nrOfProcesses - itemsPerPage.fifteenValue); - paginationPage.checkNextPageButtonIsDisabled(); - paginationPage.checkPreviousPageButtonIsEnabled(); + await paginationPage.clickOnNextPage(); + await processDetailsPage.checkProcessTitleIsDisplayed(); + await processFiltersPage.waitForTableBody(); + await expect(await paginationPage.getCurrentPage()).toEqual('Page ' + page); + await expect(await paginationPage.getTotalPages()).toEqual('of ' + totalPages); + await expect(await paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.fifteen); + await expect(await paginationPage.getPaginationRange()).toEqual('Showing 16-' + nrOfProcesses + ' of ' + nrOfProcesses); + await expect(await processFiltersPage.numberOfProcessRows()).toBe(nrOfProcesses - itemsPerPage.fifteenValue); + await paginationPage.checkNextPageButtonIsDisabled(); + await paginationPage.checkPreviousPageButtonIsEnabled(); }); }); diff --git a/e2e/process-services/pagination-tasklist-addingTasks.e2e.ts b/e2e/process-services/pagination-tasklist-addingTasks.e2e.ts index 0d3d2f09b9..829ddbb7e8 100644 --- a/e2e/process-services/pagination-tasklist-addingTasks.e2e.ts +++ b/e2e/process-services/pagination-tasklist-addingTasks.e2e.ts @@ -50,7 +50,7 @@ describe('Items per page set to 15 and adding of tasks', () => { fifteenValue: 15 }; - beforeAll(async (done) => { + beforeAll(async () => { const users = new UsersActions(); this.alfrescoJsApi = new AlfrescoApi({ @@ -72,34 +72,32 @@ describe('Items per page set to 15 and adding of tasks', () => { await loginPage.loginToProcessServicesUsingUserModel(processUserModel); - done(); }); - it('[C260306] Items per page set to 15 and adding of tasks', () => { - new NavigationBarPage().navigateToProcessServicesPage().goToTaskApp(); - taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.INV_TASKS); - paginationPage.selectItemsPerPage(itemsPerPage.fifteen); - expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.fifteen); - expect(paginationPage.getCurrentPage()).toEqual('Page ' + currentPage); - expect(paginationPage.getTotalPages()).toEqual('of ' + totalPages); - expect(paginationPage.getPaginationRange()).toEqual('Showing 1-' + itemsPerPage.fifteenValue + ' of ' + (nrOfTasks - 5)); - expect(taskPage.tasksListPage().getDataTable().numberOfRows()).toBe(itemsPerPage.fifteenValue); + it('[C260306] Items per page set to 15 and adding of tasks', async () => { + await (await new NavigationBarPage().navigateToProcessServicesPage()).goToTaskApp(); - browser.controlFlow().execute(async () => { - for (i; i < nrOfTasks; i++) { - await apps.startProcess(this.alfrescoJsApi, resultApp); - } - }); + await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.INV_TASKS); + await paginationPage.selectItemsPerPage(itemsPerPage.fifteen); + await expect(await paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.fifteen); + await expect(await paginationPage.getCurrentPage()).toEqual('Page ' + currentPage); + await expect(await paginationPage.getTotalPages()).toEqual('of ' + totalPages); + await expect(await paginationPage.getPaginationRange()).toEqual('Showing 1-' + itemsPerPage.fifteenValue + ' of ' + (nrOfTasks - 5)); + await expect(await taskPage.tasksListPage().getDataTable().numberOfRows()).toBe(itemsPerPage.fifteenValue); + + for (i; i < nrOfTasks; i++) { + await apps.startProcess(this.alfrescoJsApi, resultApp); + } currentPage++; - paginationPage.clickOnNextPage(); - expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.fifteen); - expect(paginationPage.getCurrentPage()).toEqual('Page ' + currentPage); - expect(paginationPage.getTotalPages()).toEqual('of ' + totalPages); - expect(paginationPage.getPaginationRange()).toEqual('Showing 16-' + nrOfTasks + ' of ' + nrOfTasks); - expect(taskPage.tasksListPage().getDataTable().numberOfRows()).toBe(nrOfTasks - itemsPerPage.fifteenValue); - paginationPage.checkNextPageButtonIsDisabled(); - paginationPage.checkPreviousPageButtonIsEnabled(); + await paginationPage.clickOnNextPage(); + await expect(await paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.fifteen); + await expect(await paginationPage.getCurrentPage()).toEqual('Page ' + currentPage); + await expect(await paginationPage.getTotalPages()).toEqual('of ' + totalPages); + await expect(await paginationPage.getPaginationRange()).toEqual('Showing 16-' + nrOfTasks + ' of ' + nrOfTasks); + await expect(await taskPage.tasksListPage().getDataTable().numberOfRows()).toBe(nrOfTasks - itemsPerPage.fifteenValue); + await paginationPage.checkNextPageButtonIsDisabled(); + await paginationPage.checkPreviousPageButtonIsEnabled(); }); }); diff --git a/e2e/process-services/people-component.e2e.ts b/e2e/process-services/people-component.e2e.ts index 4bd549dc53..929a6e4e19 100644 --- a/e2e/process-services/people-component.e2e.ts +++ b/e2e/process-services/people-component.e2e.ts @@ -44,7 +44,7 @@ describe('People component', () => { const tasks = ['no people involved task', 'remove people task', 'can not complete task', 'multiple users', 'completed filter']; - beforeAll(async (done) => { + beforeAll(async () => { const users = new UsersActions(); this.alfrescoJsApi = new AlfrescoApi({ @@ -75,151 +75,166 @@ describe('People component', () => { await this.alfrescoJsApi.activiti.taskApi.createNewTask({ name: tasks[3] }); await this.alfrescoJsApi.activiti.taskApi.createNewTask({ name: tasks[4] }); - done(); }); - beforeEach(async (done) => { + beforeEach(async () => { await loginPage.loginToProcessServicesUsingUserModel(processUserModel); - navigationBarPage.navigateToProcessServicesPage(); - processServices.goToTaskApp().clickTasksButton(); - taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); - done(); + await navigationBarPage.navigateToProcessServicesPage(); + await (await processServices.goToTaskApp()).clickTasksButton(); + await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); + }); - it('[C279989] Should no people be involved when no user is typed', () => { - taskPage.tasksListPage().checkContentIsDisplayed(tasks[0]); - taskPage.tasksListPage().selectRow(tasks[0]); + it('[C279989] Should no people be involved when no user is typed', async () => { + await taskPage.tasksListPage().checkContentIsDisplayed(tasks[0]); + await taskPage.tasksListPage().selectRow(tasks[0]); - taskPage.taskDetails().clickInvolvePeopleButton(); - taskPage.taskDetails().clickAddInvolvedUserButton(); - taskPage.taskDetails().checkNoPeopleIsInvolved(); + await taskPage.taskDetails().clickInvolvePeopleButton(); + await taskPage.taskDetails().clickAddInvolvedUserButton(); + await taskPage.taskDetails().checkNoPeopleIsInvolved(); }); - it('[C279990] Should no people be involved when clicking on Cancel button', () => { - taskPage.tasksListPage().checkContentIsDisplayed(tasks[0]); - taskPage.tasksListPage().selectRow(tasks[0]); + it('[C279990] Should no people be involved when clicking on Cancel button', async () => { + await taskPage.tasksListPage().checkContentIsDisplayed(tasks[0]); + await taskPage.tasksListPage().selectRow(tasks[0]); - taskPage.taskDetails().clickInvolvePeopleButton() - .typeUser(assigneeUserModel.firstName + ' ' + assigneeUserModel.lastName) - .selectUserToInvolve(assigneeUserModel.firstName + ' ' + assigneeUserModel.lastName) - .checkUserIsSelected(assigneeUserModel.firstName + ' ' + assigneeUserModel.lastName); - taskPage.taskDetails().clickCancelInvolvePeopleButton(); - taskPage.taskDetails().checkNoPeopleIsInvolved(); + const taskDetails = await taskPage.taskDetails(); + + await taskDetails.clickInvolvePeopleButton(); + await taskDetails.typeUser(assigneeUserModel.firstName + ' ' + assigneeUserModel.lastName); + await taskDetails.selectUserToInvolve(assigneeUserModel.firstName + ' ' + assigneeUserModel.lastName); + await taskDetails.checkUserIsSelected(assigneeUserModel.firstName + ' ' + assigneeUserModel.lastName); + + await taskPage.taskDetails().clickCancelInvolvePeopleButton(); + await taskPage.taskDetails().checkNoPeopleIsInvolved(); }); - it('[C261029] Should People dialog be displayed when clicking on add people button', () => { - taskPage.tasksListPage().checkContentIsDisplayed(tasks[0]); - taskPage.tasksListPage().selectRow(tasks[0]); + it('[C261029] Should People dialog be displayed when clicking on add people button', async () => { + await taskPage.tasksListPage().checkContentIsDisplayed(tasks[0]); + await taskPage.tasksListPage().selectRow(tasks[0]); - taskPage.taskDetails().clickInvolvePeopleButton(); - expect(taskPage.taskDetails().getInvolvePeopleHeader()).toEqual('Add people and groups'); - expect(taskPage.taskDetails().getInvolvePeoplePlaceholder()).toEqual('Search user'); - taskPage.taskDetails().checkAddPeopleButtonIsEnabled().checkCancelButtonIsEnabled(); - taskPage.taskDetails().clickCancelInvolvePeopleButton(); + const taskDetails = await taskPage.taskDetails(); + + await taskDetails.clickInvolvePeopleButton(); + await expect(await taskPage.taskDetails().getInvolvePeopleHeader()).toEqual('Add people and groups'); + await expect(await taskPage.taskDetails().getInvolvePeoplePlaceholder()).toEqual('Search user'); + + await taskDetails.checkAddPeopleButtonIsEnabled(); + await taskDetails.checkCancelButtonIsEnabled(); + await taskDetails.clickCancelInvolvePeopleButton(); }); - it('[C279991] Should not be able to involve a user when is the creator of the task', () => { - taskPage.tasksListPage().checkContentIsDisplayed(tasks[0]); - taskPage.tasksListPage().selectRow(tasks[0]); + it('[C279991] Should not be able to involve a user when is the creator of the task', async () => { + await taskPage.tasksListPage().checkContentIsDisplayed(tasks[0]); + await taskPage.tasksListPage().selectRow(tasks[0]); - taskPage.taskDetails().clickInvolvePeopleButton() - .typeUser(processUserModel.firstName + ' ' + processUserModel.lastName) - .noUserIsDisplayedInSearchInvolvePeople(processUserModel.firstName + ' ' + processUserModel.lastName); - taskPage.taskDetails().clickAddInvolvedUserButton(); - taskPage.taskDetails().checkNoPeopleIsInvolved(); + const taskDetails = await taskPage.taskDetails(); + await taskDetails.clickInvolvePeopleButton(); + await taskDetails.typeUser(processUserModel.firstName + ' ' + processUserModel.lastName); + await taskDetails.noUserIsDisplayedInSearchInvolvePeople(processUserModel.firstName + ' ' + processUserModel.lastName); + await taskPage.taskDetails().clickAddInvolvedUserButton(); + await taskPage.taskDetails().checkNoPeopleIsInvolved(); }); - it('[C261030] Should involved user be removed when clicking on remove button', () => { - taskPage.tasksListPage().checkContentIsDisplayed(tasks[0]); - taskPage.tasksListPage().selectRow(tasks[0]); + it('[C261030] Should involved user be removed when clicking on remove button', async () => { + await taskPage.tasksListPage().checkContentIsDisplayed(tasks[0]); + await taskPage.tasksListPage().selectRow(tasks[0]); - taskPage.taskDetails().clickInvolvePeopleButton() - .typeUser(assigneeUserModel.firstName + ' ' + assigneeUserModel.lastName) - .selectUserToInvolve(assigneeUserModel.firstName + ' ' + assigneeUserModel.lastName) - .checkUserIsSelected(assigneeUserModel.firstName + ' ' + assigneeUserModel.lastName); - taskPage.taskDetails().clickAddInvolvedUserButton(); + const taskDetails = await taskPage.taskDetails(); + await taskDetails.clickInvolvePeopleButton(); + await taskDetails.typeUser(assigneeUserModel.firstName + ' ' + assigneeUserModel.lastName); + await taskDetails.selectUserToInvolve(assigneeUserModel.firstName + ' ' + assigneeUserModel.lastName); + await taskDetails.checkUserIsSelected(assigneeUserModel.firstName + ' ' + assigneeUserModel.lastName); - expect(taskPage.taskDetails().getInvolvedUserEmail(assigneeUserModel.firstName + ' ' + assigneeUserModel.lastName)) + await taskPage.taskDetails().clickAddInvolvedUserButton(); + + await expect(await taskPage.taskDetails().getInvolvedUserEmail(assigneeUserModel.firstName + ' ' + assigneeUserModel.lastName)) .toEqual(assigneeUserModel.email); - taskPage.taskDetails().removeInvolvedUser(assigneeUserModel.firstName + ' ' + assigneeUserModel.lastName); - taskPage.taskDetails().checkNoPeopleIsInvolved(); + await taskPage.taskDetails().removeInvolvedUser(assigneeUserModel.firstName + ' ' + assigneeUserModel.lastName); + await taskPage.taskDetails().checkNoPeopleIsInvolved(); }); it('[C280013] Should not be able to complete a task by a involved user', async () => { - taskPage.tasksListPage().checkContentIsDisplayed(tasks[1]); - taskPage.tasksListPage().selectRow(tasks[1]); + await taskPage.tasksListPage().checkContentIsDisplayed(tasks[1]); + await taskPage.tasksListPage().selectRow(tasks[1]); - taskPage.taskDetails().clickInvolvePeopleButton() - .typeUser(assigneeUserModel.firstName + ' ' + assigneeUserModel.lastName) - .selectUserToInvolve(assigneeUserModel.firstName + ' ' + assigneeUserModel.lastName) - .checkUserIsSelected(assigneeUserModel.firstName + ' ' + assigneeUserModel.lastName); - taskPage.taskDetails().clickAddInvolvedUserButton(); + const taskDetails = await taskPage.taskDetails(); + await taskDetails.clickInvolvePeopleButton(); + await taskDetails.typeUser(assigneeUserModel.firstName + ' ' + assigneeUserModel.lastName); + await taskDetails.selectUserToInvolve(assigneeUserModel.firstName + ' ' + assigneeUserModel.lastName); + await taskDetails.checkUserIsSelected(assigneeUserModel.firstName + ' ' + assigneeUserModel.lastName); + await taskPage.taskDetails().clickAddInvolvedUserButton(); - expect(taskPage.taskDetails().getInvolvedUserEmail(assigneeUserModel.firstName + ' ' + assigneeUserModel.lastName)) + await expect(await taskPage.taskDetails().getInvolvedUserEmail(assigneeUserModel.firstName + ' ' + assigneeUserModel.lastName)) .toEqual(assigneeUserModel.email); await loginPage.loginToProcessServicesUsingUserModel(assigneeUserModel); - navigationBarPage.navigateToProcessServicesPage().goToTaskApp().clickTasksButton(); - taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.INV_TASKS); - taskPage.tasksListPage().checkContentIsDisplayed(tasks[1]); - taskPage.tasksListPage().selectRow(tasks[1]); + await (await (await navigationBarPage.navigateToProcessServicesPage()).goToTaskApp()).clickTasksButton(); + await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.INV_TASKS); + await taskPage.tasksListPage().checkContentIsDisplayed(tasks[1]); + await taskPage.tasksListPage().selectRow(tasks[1]); - taskPage.completeTaskNoFormNotDisplayed(); + await taskPage.completeTaskNoFormNotDisplayed(); }); - it('[C261031] Should be able to involve multiple users to a task', () => { - taskPage.tasksListPage().checkContentIsDisplayed(tasks[2]); - taskPage.tasksListPage().selectRow(tasks[2]); + it('[C261031] Should be able to involve multiple users to a task', async () => { + await taskPage.tasksListPage().checkContentIsDisplayed(tasks[2]); + await taskPage.tasksListPage().selectRow(tasks[2]); - taskPage.taskDetails().clickInvolvePeopleButton() - .typeUser(assigneeUserModel.firstName + ' ' + assigneeUserModel.lastName) - .selectUserToInvolve(assigneeUserModel.firstName + ' ' + assigneeUserModel.lastName) - .checkUserIsSelected(assigneeUserModel.firstName + ' ' + assigneeUserModel.lastName); - taskPage.taskDetails().clickAddInvolvedUserButton(); + const taskDetails = await taskPage.taskDetails(); + await taskPage.taskDetails().clickInvolvePeopleButton(); + await taskDetails.typeUser(assigneeUserModel.firstName + ' ' + assigneeUserModel.lastName); + await taskDetails.selectUserToInvolve(assigneeUserModel.firstName + ' ' + assigneeUserModel.lastName); + await taskDetails.checkUserIsSelected(assigneeUserModel.firstName + ' ' + assigneeUserModel.lastName); + await taskPage.taskDetails().clickAddInvolvedUserButton(); - expect(taskPage.taskDetails().getInvolvedUserEmail(assigneeUserModel.firstName + ' ' + assigneeUserModel.lastName)) + await expect(await taskPage.taskDetails().getInvolvedUserEmail(assigneeUserModel.firstName + ' ' + assigneeUserModel.lastName)) .toEqual(assigneeUserModel.email); - expect(taskPage.taskDetails().getInvolvedPeopleTitle()).toEqual(peopleTitle + '(1)'); + await expect(await taskPage.taskDetails().getInvolvedPeopleTitle()).toEqual(peopleTitle + '(1)'); - taskPage.taskDetails().clickInvolvePeopleButton() - .typeUser(secondAssigneeUserModel.firstName + ' ' + secondAssigneeUserModel.lastName) - .selectUserToInvolve(secondAssigneeUserModel.firstName + ' ' + secondAssigneeUserModel.lastName) - .checkUserIsSelected(secondAssigneeUserModel.firstName + ' ' + secondAssigneeUserModel.lastName); - taskPage.taskDetails().clickAddInvolvedUserButton(); + const taskDetails2 = await taskPage.taskDetails(); + await taskDetails2.clickInvolvePeopleButton(); + await taskDetails2.typeUser(secondAssigneeUserModel.firstName + ' ' + secondAssigneeUserModel.lastName); + await taskDetails2.selectUserToInvolve(secondAssigneeUserModel.firstName + ' ' + secondAssigneeUserModel.lastName); + await taskDetails2.checkUserIsSelected(secondAssigneeUserModel.firstName + ' ' + secondAssigneeUserModel.lastName); - expect(taskPage.taskDetails().getInvolvedUserEmail(secondAssigneeUserModel.firstName + ' ' + secondAssigneeUserModel.lastName)) + await taskPage.taskDetails().clickAddInvolvedUserButton(); + + await expect(await taskPage.taskDetails().getInvolvedUserEmail(secondAssigneeUserModel.firstName + ' ' + secondAssigneeUserModel.lastName)) .toEqual(secondAssigneeUserModel.email); - expect(taskPage.taskDetails().getInvolvedPeopleTitle()).toEqual(peopleTitle + '(2)'); + await expect(await taskPage.taskDetails().getInvolvedPeopleTitle()).toEqual(peopleTitle + '(2)'); }); it('[C280014] Should involved user see the task in completed filters when the task is completed', async () => { - taskPage.tasksListPage().checkContentIsDisplayed(tasks[3]); - taskPage.tasksListPage().selectRow(tasks[3]); + await taskPage.tasksListPage().checkContentIsDisplayed(tasks[3]); + await taskPage.tasksListPage().selectRow(tasks[3]); - taskPage.taskDetails().clickInvolvePeopleButton() - .typeUser(assigneeUserModel.firstName + ' ' + assigneeUserModel.lastName) - .selectUserToInvolve(assigneeUserModel.firstName + ' ' + assigneeUserModel.lastName) - .checkUserIsSelected(assigneeUserModel.firstName + ' ' + assigneeUserModel.lastName); - taskPage.taskDetails().clickAddInvolvedUserButton(); + const taskDetails = await taskPage.taskDetails(); + await taskDetails.clickInvolvePeopleButton(); + await taskDetails.typeUser(assigneeUserModel.firstName + ' ' + assigneeUserModel.lastName); + await taskDetails.selectUserToInvolve(assigneeUserModel.firstName + ' ' + assigneeUserModel.lastName); + await taskDetails.checkUserIsSelected(assigneeUserModel.firstName + ' ' + assigneeUserModel.lastName); - expect(taskPage.taskDetails().getInvolvedUserEmail(assigneeUserModel.firstName + ' ' + assigneeUserModel.lastName)) + await taskPage.taskDetails().clickAddInvolvedUserButton(); + + await expect(await taskPage.taskDetails().getInvolvedUserEmail(assigneeUserModel.firstName + ' ' + assigneeUserModel.lastName)) .toEqual(assigneeUserModel.email); - taskPage.completeTaskNoForm(); - taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.COMPLETED_TASKS); - taskPage.tasksListPage().selectRow(tasks[3]); - expect(taskPage.taskDetails().getInvolvedUserEmail(assigneeUserModel.firstName + ' ' + assigneeUserModel.lastName)) + await taskPage.completeTaskNoForm(); + await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.COMPLETED_TASKS); + await taskPage.tasksListPage().selectRow(tasks[3]); + await expect(await taskPage.taskDetails().getInvolvedUserEmail(assigneeUserModel.firstName + ' ' + assigneeUserModel.lastName)) .toEqual(assigneeUserModel.email); await loginPage.loginToProcessServicesUsingUserModel(assigneeUserModel); - navigationBarPage.navigateToProcessServicesPage().goToTaskApp().clickTasksButton(); - taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.COMPLETED_TASKS); - taskPage.tasksListPage().checkContentIsDisplayed(tasks[3]); - taskPage.tasksListPage().selectRow(tasks[3]); + await (await (await navigationBarPage.navigateToProcessServicesPage()).goToTaskApp()).clickTasksButton(); + await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.COMPLETED_TASKS); + await taskPage.tasksListPage().checkContentIsDisplayed(tasks[3]); + await taskPage.tasksListPage().selectRow(tasks[3]); - taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.INV_TASKS); - taskPage.tasksListPage().checkContentIsNotDisplayed(tasks[3]); + await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.INV_TASKS); + await taskPage.tasksListPage().checkContentIsNotDisplayed(tasks[3]); }); }); diff --git a/e2e/process-services/process-attachmentList-actionMenu.e2e.ts b/e2e/process-services/process-attachmentList-actionMenu.e2e.ts index 9c3df57f3e..ee57e7adc8 100644 --- a/e2e/process-services/process-attachmentList-actionMenu.e2e.ts +++ b/e2e/process-services/process-attachmentList-actionMenu.e2e.ts @@ -15,7 +15,7 @@ * limitations under the License. */ -import { LoginPage } from '@alfresco/adf-testing'; +import { LoginPage, FileBrowserUtil } from '@alfresco/adf-testing'; import { ProcessFiltersPage } from '../pages/adf/process-services/processFiltersPage'; import { ProcessDetailsPage } from '../pages/adf/process-services/processDetailsPage'; import { AttachmentListPage } from '../pages/adf/process-services/attachmentListPage'; @@ -23,9 +23,6 @@ import { ViewerPage } from '../pages/adf/viewerPage'; import { NavigationBarPage } from '../pages/adf/navigationBarPage'; import resources = require('../util/resources'); -import { Util } from '../util/util'; - -import path = require('path'); import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; import { UsersActions } from '../actions/users.actions'; @@ -47,7 +44,7 @@ describe('Attachment list action menu for processes', () => { name: resources.Files.ADF_DOCUMENTS.PNG.file_name }); - const downloadedPngFile = path.join(__dirname, 'downloads', pngFile.name); + const downloadedPngFile = pngFile.name; let tenantId, appId; const processName = { active: 'Active Process', @@ -57,7 +54,7 @@ describe('Attachment list action menu for processes', () => { dragDrop: 'Drag and Drop' }; - beforeAll(async (done) => { + beforeAll(async () => { const apps = new AppsActions(); const users = new UsersActions(); @@ -85,107 +82,106 @@ describe('Attachment list action menu for processes', () => { await loginPage.loginToProcessServicesUsingUserModel(user); - done(); }); - afterAll(async (done) => { + afterAll(async () => { await this.alfrescoJsApi.activiti.modelsApi.deleteModel(appId); await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); await this.alfrescoJsApi.activiti.adminTenantsApi.deleteTenant(tenantId); - done(); + }); - it('[C260228] Should be able to access options of a file attached to an active process', () => { - navigationBarPage.navigateToProcessServicesPage().goToApp(app.title).clickProcessButton(); + it('[C260228] Should be able to access options of a file attached to an active process', async () => { + await (await (await navigationBarPage.navigateToProcessServicesPage()).goToApp(app.title)).clickProcessButton(); - processFiltersPage.selectFromProcessList(processName.active); + await processFiltersPage.selectFromProcessList(processName.active); - processDetailsPage.checkProcessTitleIsDisplayed(); + await processDetailsPage.checkProcessTitleIsDisplayed(); - attachmentListPage.clickAttachFileButton(pngFile.location); - attachmentListPage.viewFile(pngFile.name); + await attachmentListPage.clickAttachFileButton(pngFile.location); + await attachmentListPage.viewFile(pngFile.name); - viewerPage.checkFileNameIsDisplayed(pngFile.name); - viewerPage.clickCloseButton(); + await viewerPage.checkFileNameIsDisplayed(pngFile.name); + await viewerPage.clickCloseButton(); - processFiltersPage.clickRunningFilterButton(); - processFiltersPage.selectFromProcessList(processName.active); + await processFiltersPage.clickRunningFilterButton(); + await processFiltersPage.selectFromProcessList(processName.active); - attachmentListPage.doubleClickFile(pngFile.name); + await attachmentListPage.doubleClickFile(pngFile.name); - viewerPage.checkFileNameIsDisplayed(pngFile.name); - viewerPage.clickCloseButton(); + await viewerPage.checkFileNameIsDisplayed(pngFile.name); + await viewerPage.clickCloseButton(); - processFiltersPage.clickRunningFilterButton(); - processFiltersPage.selectFromProcessList(processName.active); + await processFiltersPage.clickRunningFilterButton(); + await processFiltersPage.selectFromProcessList(processName.active); - attachmentListPage.downloadFile(pngFile.name); + await attachmentListPage.downloadFile(pngFile.name); - browser.driver.sleep(1000); + await browser.sleep(1000); - expect(Util.fileExists(downloadedPngFile, 30)).toBe(true); + await expect(await FileBrowserUtil.isFileDownloaded(downloadedPngFile)).toBe(true); - attachmentListPage.removeFile(pngFile.name); - attachmentListPage.checkFileIsRemoved(pngFile.name); + await attachmentListPage.removeFile(pngFile.name); + await attachmentListPage.checkFileIsRemoved(pngFile.name); }); - it('[C279886] Should be able to access options of a file attached to a completed process', () => { - navigationBarPage.navigateToProcessServicesPage().goToApp(app.title).clickProcessButton(); + it('[C279886] Should be able to access options of a file attached to a completed process', async () => { + await (await (await navigationBarPage.navigateToProcessServicesPage()).goToApp(app.title)).clickProcessButton(); - processFiltersPage.clickRunningFilterButton(); - processFiltersPage.selectFromProcessList(processName.completed); + await processFiltersPage.clickRunningFilterButton(); + await processFiltersPage.selectFromProcessList(processName.completed); - processDetailsPage.checkProcessTitleIsDisplayed(); + await processDetailsPage.checkProcessTitleIsDisplayed(); - attachmentListPage.clickAttachFileButton(pngFile.location); + await attachmentListPage.clickAttachFileButton(pngFile.location); - processDetailsPage.clickCancelProcessButton(); - processFiltersPage.clickCompletedFilterButton(); + await processDetailsPage.clickCancelProcessButton(); + await processFiltersPage.clickCompletedFilterButton(); - processDetailsPage.checkProcessTitleIsDisplayed(); + await processDetailsPage.checkProcessTitleIsDisplayed(); - attachmentListPage.checkAttachFileButtonIsNotDisplayed(); - attachmentListPage.viewFile(pngFile.name); + await attachmentListPage.checkAttachFileButtonIsNotDisplayed(); + await attachmentListPage.viewFile(pngFile.name); - viewerPage.checkFileNameIsDisplayed(pngFile.name); - viewerPage.clickCloseButton(); + await viewerPage.checkFileNameIsDisplayed(pngFile.name); + await viewerPage.clickCloseButton(); - processFiltersPage.clickCompletedFilterButton(); + await processFiltersPage.clickCompletedFilterButton(); - attachmentListPage.downloadFile(pngFile.name); + await attachmentListPage.downloadFile(pngFile.name); - browser.driver.sleep(1000); + await browser.sleep(1000); - expect(Util.fileExists(downloadedPngFile, 30)).toBe(true); + await expect(await FileBrowserUtil.isFileDownloaded(downloadedPngFile)).toBe(true); - attachmentListPage.removeFile(pngFile.name); - attachmentListPage.checkFileIsRemoved(pngFile.name); + await attachmentListPage.removeFile(pngFile.name); + await attachmentListPage.checkFileIsRemoved(pngFile.name); }); - it('[C277296] Should allow upload file when clicking on \'add\' icon', () => { - navigationBarPage.navigateToProcessServicesPage().goToTaskApp().clickProcessButton(); + it('[C277296] Should allow upload file when clicking on \'add\' icon', async () => { + await (await (await navigationBarPage.navigateToProcessServicesPage()).goToTaskApp()).clickProcessButton(); - processFiltersPage.clickRunningFilterButton(); - processFiltersPage.selectFromProcessList(processName.taskApp); + await processFiltersPage.clickRunningFilterButton(); + await processFiltersPage.selectFromProcessList(processName.taskApp); - processDetailsPage.checkProcessTitleIsDisplayed(); + await processDetailsPage.checkProcessTitleIsDisplayed(); - attachmentListPage.clickAttachFileButton(pngFile.location); - attachmentListPage.checkFileIsAttached(pngFile.name); + await attachmentListPage.clickAttachFileButton(pngFile.location); + await attachmentListPage.checkFileIsAttached(pngFile.name); }); - it('[C260235] Should empty list component be displayed when no file is attached', () => { - navigationBarPage.navigateToProcessServicesPage().goToTaskApp().clickProcessButton(); + it('[C260235] Should empty list component be displayed when no file is attached', async () => { + await (await (await navigationBarPage.navigateToProcessServicesPage()).goToTaskApp()).clickProcessButton(); - processFiltersPage.clickRunningFilterButton(); - processFiltersPage.selectFromProcessList(processName.emptyList); + await processFiltersPage.clickRunningFilterButton(); + await processFiltersPage.selectFromProcessList(processName.emptyList); - attachmentListPage.checkEmptyAttachmentList(); - attachmentListPage.clickAttachFileButton(pngFile.location); - attachmentListPage.checkFileIsAttached(pngFile.name); - attachmentListPage.removeFile(pngFile.name); - attachmentListPage.checkFileIsRemoved(pngFile.name); - attachmentListPage.checkEmptyAttachmentList(); + await attachmentListPage.checkEmptyAttachmentList(); + await attachmentListPage.clickAttachFileButton(pngFile.location); + await attachmentListPage.checkFileIsAttached(pngFile.name); + await attachmentListPage.removeFile(pngFile.name); + await attachmentListPage.checkFileIsRemoved(pngFile.name); + await attachmentListPage.checkEmptyAttachmentList(); }); }); diff --git a/e2e/process-services/process-filters-component.e2e.ts b/e2e/process-services/process-filters-component.e2e.ts index 6916daf542..52a223caf8 100644 --- a/e2e/process-services/process-filters-component.e2e.ts +++ b/e2e/process-services/process-filters-component.e2e.ts @@ -56,7 +56,7 @@ describe('Process Filters Test', () => { completed: 'Completed' }; - beforeAll(async (done) => { + beforeAll(async () => { const apps = new AppsActions(); const users = new UsersActions(); @@ -75,67 +75,66 @@ describe('Process Filters Test', () => { await loginPage.loginToProcessServicesUsingUserModel(user); - done(); }); beforeEach(async () => { - navigationBarPage.navigateToProcessServicesPage(); - processServicesPage.checkApsContainer(); + await navigationBarPage.navigateToProcessServicesPage(); + await processServicesPage.checkApsContainer(); }); - it('[C260387] Should the running process be displayed when clicking on Running filter', () => { - processServicesPage.goToApp(app.title); - processServiceTabBarPage.clickProcessButton(); - processListPage.checkProcessListIsDisplayed(); + it('[C260387] Should the running process be displayed when clicking on Running filter', async () => { + await processServicesPage.goToApp(app.title); + await processServiceTabBarPage.clickProcessButton(); + await processListPage.checkProcessListIsDisplayed(); - processFiltersPage.clickCreateProcessButton(); - processFiltersPage.clickNewProcessDropdown(); + await processFiltersPage.clickCreateProcessButton(); + await processFiltersPage.clickNewProcessDropdown(); - startProcessPage.enterProcessName(processTitle.completed); - startProcessPage.selectFromProcessDropdown(app.process_title); - startProcessPage.clickFormStartProcessButton(); + await startProcessPage.enterProcessName(processTitle.completed); + await startProcessPage.selectFromProcessDropdown(app.process_title); + await startProcessPage.clickFormStartProcessButton(); - processDetailsPage.clickCancelProcessButton(); - navigationBarPage.navigateToProcessServicesPage(); + await processDetailsPage.clickCancelProcessButton(); + await navigationBarPage.navigateToProcessServicesPage(); - processServicesPage.goToApp(app.title); + await processServicesPage.goToApp(app.title); - processServiceTabBarPage.clickProcessButton(); + await processServiceTabBarPage.clickProcessButton(); - processFiltersPage.clickCreateProcessButton(); - processFiltersPage.clickNewProcessDropdown(); + await processFiltersPage.clickCreateProcessButton(); + await processFiltersPage.clickNewProcessDropdown(); - startProcessPage.enterProcessName(processTitle.running); - startProcessPage.selectFromProcessDropdown(app.process_title); - startProcessPage.clickFormStartProcessButton(); + await startProcessPage.enterProcessName(processTitle.running); + await startProcessPage.selectFromProcessDropdown(app.process_title); + await startProcessPage.clickFormStartProcessButton(); - processFiltersPage.checkFilterIsHighlighted(processFilter.running); - processFiltersPage.selectFromProcessList(processTitle.running); + await processFiltersPage.checkFilterIsHighlighted(processFilter.running); + await processFiltersPage.selectFromProcessList(processTitle.running); - processDetailsPage.checkProcessDetailsCard(); + await processDetailsPage.checkProcessDetailsCard(); }); - it('[C280063] Should both the new created process and a completed one to be displayed when clicking on All filter', () => { - processServicesPage.goToApp(app.title); - processServiceTabBarPage.clickProcessButton(); - processListPage.checkProcessListIsDisplayed(); + it('[C280063] Should both the new created process and a completed one to be displayed when clicking on All filter', async () => { + await processServicesPage.goToApp(app.title); + await processServiceTabBarPage.clickProcessButton(); + await processListPage.checkProcessListIsDisplayed(); - processFiltersPage.clickAllFilterButton(); - processFiltersPage.checkFilterIsHighlighted(processFilter.all); - processFiltersPage.selectFromProcessList(processTitle.running); - processFiltersPage.selectFromProcessList(processTitle.completed); - processDetailsPage.checkProcessDetailsCard(); + await processFiltersPage.clickAllFilterButton(); + await processFiltersPage.checkFilterIsHighlighted(processFilter.all); + await processFiltersPage.selectFromProcessList(processTitle.running); + await processFiltersPage.selectFromProcessList(processTitle.completed); + await processDetailsPage.checkProcessDetailsCard(); }); - it('[C280064] Should the completed process be displayed when clicking on Completed filter', () => { - processServicesPage.goToApp(app.title); - processServiceTabBarPage.clickProcessButton(); - processListPage.checkProcessListIsDisplayed(); + it('[C280064] Should the completed process be displayed when clicking on Completed filter', async () => { + await processServicesPage.goToApp(app.title); + await processServiceTabBarPage.clickProcessButton(); + await processListPage.checkProcessListIsDisplayed(); - processFiltersPage.clickCompletedFilterButton(); - processFiltersPage.checkFilterIsHighlighted(processFilter.completed); - processFiltersPage.selectFromProcessList(processTitle.completed); - processDetailsPage.checkProcessDetailsCard(); + await processFiltersPage.clickCompletedFilterButton(); + await processFiltersPage.checkFilterIsHighlighted(processFilter.completed); + await processFiltersPage.selectFromProcessList(processTitle.completed); + await processDetailsPage.checkProcessDetailsCard(); }); it('[C280407] Should be able to access the filters with URL', async () => { @@ -143,30 +142,27 @@ describe('Process Filters Test', () => { const defaultFiltersNumber = 3; let deployedApp, processFilterUrl; - const taskAppFilters = await browser.controlFlow().execute(async() => { + const appDefinitions = await this.alfrescoJsApi.activiti.appsApi.getAppDefinitions(); - const appDefinitions = await this.alfrescoJsApi.activiti.appsApi.getAppDefinitions(); + deployedApp = appDefinitions.data.find((currentApp) => { - deployedApp = appDefinitions.data.find((currentApp) => { - - return currentApp.modelId === appModel.id; - }); - - processFilterUrl = browser.params.testConfig.adf.url + '/activiti/apps/' + deployedApp.id + '/processes/'; - - return this.alfrescoJsApi.activiti.userFiltersApi.getUserProcessInstanceFilters({appId: deployedApp.id}); + return currentApp.modelId === appModel.id; }); - processServicesPage.goToApp(app.title); - processServiceTabBarPage.clickProcessButton(); - processListPage.checkProcessListIsDisplayed(); + processFilterUrl = browser.params.testConfig.adf.url + '/activiti/apps/' + deployedApp.id + '/processes/'; - expect(taskAppFilters.size).toBe(defaultFiltersNumber); + const taskAppFilters = await this.alfrescoJsApi.activiti.userFiltersApi.getUserProcessInstanceFilters({ appId: deployedApp.id }); - taskAppFilters.data.forEach((filter) => { - BrowserActions.getUrl(processFilterUrl + filter.id); - processListPage.checkProcessListIsDisplayed(); - processFiltersPage.checkFilterIsHighlighted(filter.name); - }); + await processServicesPage.goToApp(app.title); + await processServiceTabBarPage.clickProcessButton(); + await processListPage.checkProcessListIsDisplayed(); + + await expect(taskAppFilters.size).toBe(defaultFiltersNumber); + + for (const filter of taskAppFilters) { + await BrowserActions.getUrl(processFilterUrl + filter.id); + await processListPage.checkProcessListIsDisplayed(); + await processFiltersPage.checkFilterIsHighlighted(filter.name); + } }); }); diff --git a/e2e/process-services/process-instance-details.e2e.ts b/e2e/process-services/process-instance-details.e2e.ts index d8f44ec9ad..ab3ae6dc6f 100644 --- a/e2e/process-services/process-instance-details.e2e.ts +++ b/e2e/process-services/process-instance-details.e2e.ts @@ -42,7 +42,7 @@ describe('Process Instance Details', () => { const app = resources.Files.SIMPLE_APP_WITH_USER_FORM; const PROCESS_DATE_FORMAT = 'mmm d, yyyy'; - beforeAll(async (done) => { + beforeAll(async () => { const apps = new AppsActions(); const users = new UsersActions(); @@ -62,30 +62,26 @@ describe('Process Instance Details', () => { await loginPage.loginToProcessServicesUsingUserModel(user); - navigationBarPage.navigateToProcessServicesPage(); - processServicesPage.checkApsContainer(); - processServicesPage.goToApp(app.title); - processServiceTabBarPage.clickProcessButton(); - processListPage.checkProcessListIsDisplayed(); + await navigationBarPage.navigateToProcessServicesPage(); + await processServicesPage.checkApsContainer(); + await processServicesPage.goToApp(app.title); + await processServiceTabBarPage.clickProcessButton(); + await processListPage.checkProcessListIsDisplayed(); process = await this.alfrescoJsApi.activiti.processApi.getProcessInstance(processModel.id); - done(); }); - afterAll(async (done) => { + afterAll(async () => { await this.alfrescoJsApi.activiti.modelsApi.deleteModel(appModel.id); - await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); - await this.alfrescoJsApi.activiti.adminTenantsApi.deleteTenant(user.tenantId); - done(); }); - it('[C307031] Should display the created date in the default format', () => { - processDetailsPage.checkDetailsAreDisplayed(); - expect(processDetailsPage.getCreated()).toEqual(dateFormat(process.started, PROCESS_DATE_FORMAT)); + it('[C307031] Should display the created date in the default format', async () => { + await processDetailsPage.checkDetailsAreDisplayed(); + await expect(await processDetailsPage.getCreated()).toEqual(dateFormat(process.started, PROCESS_DATE_FORMAT)); }); }); diff --git a/e2e/process-services/processList-component.e2e.ts b/e2e/process-services/processList-component.e2e.ts index 62b1aee1e0..3073e2796d 100644 --- a/e2e/process-services/processList-component.e2e.ts +++ b/e2e/process-services/processList-component.e2e.ts @@ -51,7 +51,7 @@ describe('Process List Test', () => { let appWithDateFieldId; let procWithDate, completedProcWithDate, completedProcWithUserWidget; - beforeAll(async (done) => { + beforeAll(async () => { const apps = new AppsActions(); const users = new UsersActions(); @@ -81,15 +81,14 @@ describe('Process List Test', () => { const procWithDateTaskId = await apps.getProcessTaskId(this.alfrescoJsApi, completedProcWithDate.id); const procWithUserWidgetTaskId = await apps.getProcessTaskId(this.alfrescoJsApi, completedProcWithUserWidget.id); - await this.alfrescoJsApi.activiti.taskApi.completeTaskForm(procWithDateTaskId, {values: {label: null }}); - await this.alfrescoJsApi.activiti.taskFormsApi.completeTaskForm(procWithUserWidgetTaskId, {values: {label: null }}); + await this.alfrescoJsApi.activiti.taskApi.completeTaskForm(procWithDateTaskId.toString(), { values: { label: null } }); + await this.alfrescoJsApi.activiti.taskFormsApi.completeTaskForm(procWithUserWidgetTaskId.toString(), { values: { label: null } }); await loginPage.loginToProcessServicesUsingUserModel(user); - done(); }); - afterAll(async (done) => { + afterAll(async () => { await this.alfrescoJsApi.activiti.modelsApi.deleteModel(appDateModel.id); await this.alfrescoJsApi.activiti.modelsApi.deleteModel(appUserWidgetModel.id); @@ -97,97 +96,95 @@ describe('Process List Test', () => { await this.alfrescoJsApi.activiti.adminTenantsApi.deleteTenant(user.tenantId); - done(); }); - beforeEach((done) => { - BrowserActions.getUrl(browser.params.testConfig.adf.url + '/process-list'); - done(); + beforeEach(async () => { + await BrowserActions.getUrl(browser.params.testConfig.adf.url + '/process-list'); + }); - it('[C286638] Should display all process by default', () => { - processListDemoPage.checkAppIdFieldIsDisplayed() - .checkProcessInstanceIdFieldIsDisplayed() - .checkProcessInstanceIdFieldIsDisplayed() - .checkSortFieldIsDisplayed() - .checkStateFieldIsDisplayed(); + it('[C286638] Should display all process by default', async () => { + await processListDemoPage.checkAppIdFieldIsDisplayed(); + await processListDemoPage.checkProcessInstanceIdFieldIsDisplayed(); + await processListDemoPage.checkProcessInstanceIdFieldIsDisplayed(); + await processListDemoPage.checkSortFieldIsDisplayed(); + await processListDemoPage.checkStateFieldIsDisplayed(); }); - it('[C282006] Should be able to filter processes with App ID', () => { - processListDemoPage.addAppId('a'); + it('[C282006] Should be able to filter processes with App ID', async () => { + await processListDemoPage.addAppId('a'); - processListDemoPage.checkErrorMessageIsDisplayed(errorMessages.appIdNumber); - processListDemoPage.clickResetButton(); + await processListDemoPage.checkErrorMessageIsDisplayed(errorMessages.appIdNumber); + await processListDemoPage.clickResetButton(); - processListDemoPage.addAppId('12345'); + await processListDemoPage.addAppId('12345'); - processListDemoPage.checkNoProcessFoundIsDisplayed(); + await processListDemoPage.checkNoProcessFoundIsDisplayed(); - processListDemoPage.addAppId(appWithDateFieldId); + await processListDemoPage.addAppId(appWithDateFieldId); - processListDemoPage.checkProcessIsDisplayed(processName.procWithDate); - processListDemoPage.checkProcessIsDisplayed(processName.completedProcWithDate); + await processListDemoPage.checkProcessIsDisplayed(processName.procWithDate); + await processListDemoPage.checkProcessIsDisplayed(processName.completedProcWithDate); - processListDemoPage.checkProcessIsNotDisplayed(processName.procWithUserWidget); - processListDemoPage.checkProcessIsNotDisplayed(processName.completedProcWithUserWidget); + await processListDemoPage.checkProcessIsNotDisplayed(processName.procWithUserWidget); + await processListDemoPage.checkProcessIsNotDisplayed(processName.completedProcWithUserWidget); }); - it('[C282015] Should be able to filter by Process Definition ID', () => { - processListDemoPage.addProcessDefinitionId(procWithDate.processDefinitionId); + it('[C282015] Should be able to filter by Process Definition ID', async () => { + await processListDemoPage.addProcessDefinitionId(procWithDate.processDefinitionId); - processListDemoPage.checkProcessIsDisplayed(processName.procWithDate); - processListDemoPage.checkProcessIsDisplayed(processName.completedProcWithDate); + await processListDemoPage.checkProcessIsDisplayed(processName.procWithDate); + await processListDemoPage.checkProcessIsDisplayed(processName.completedProcWithDate); - processListDemoPage.checkProcessIsNotDisplayed(processName.procWithUserWidget); - processListDemoPage.checkProcessIsNotDisplayed(processName.completedProcWithUserWidget); + await processListDemoPage.checkProcessIsNotDisplayed(processName.procWithUserWidget); + await processListDemoPage.checkProcessIsNotDisplayed(processName.completedProcWithUserWidget); }); - it('[C282016] Should be able to filter by Process Instance ID', () => { - processListDemoPage.addProcessInstanceId(procWithDate.id); + it('[C282016] Should be able to filter by Process Instance ID', async () => { + await processListDemoPage.addProcessInstanceId(procWithDate.id); - processListDemoPage.checkProcessIsDisplayed(processName.procWithDate); + await processListDemoPage.checkProcessIsDisplayed(processName.procWithDate); - processListDemoPage.checkProcessIsNotDisplayed(processName.completedProcWithDate); - processListDemoPage.checkProcessIsNotDisplayed(processName.procWithUserWidget); - processListDemoPage.checkProcessIsNotDisplayed(processName.completedProcWithUserWidget); + await processListDemoPage.checkProcessIsNotDisplayed(processName.completedProcWithDate); + await processListDemoPage.checkProcessIsNotDisplayed(processName.procWithUserWidget); + await processListDemoPage.checkProcessIsNotDisplayed(processName.completedProcWithUserWidget); }); - it('[C282017] Should be able to filter by Status', () => { - processListDemoPage.selectStateFilter('Active'); + it('[C282017] Should be able to filter by Status', async () => { + await processListDemoPage.selectStateFilter('Active'); - processListDemoPage.checkProcessIsNotDisplayed(processName.completedProcWithDate); - processListDemoPage.checkProcessIsNotDisplayed(processName.completedProcWithUserWidget); + await processListDemoPage.checkProcessIsNotDisplayed(processName.completedProcWithDate); + await processListDemoPage.checkProcessIsNotDisplayed(processName.completedProcWithUserWidget); - processListDemoPage.checkProcessIsDisplayed(processName.procWithDate); - processListDemoPage.checkProcessIsDisplayed(processName.procWithUserWidget); + await processListDemoPage.checkProcessIsDisplayed(processName.procWithDate); + await processListDemoPage.checkProcessIsDisplayed(processName.procWithUserWidget); - processListDemoPage.selectStateFilter('Completed'); + await processListDemoPage.selectStateFilter('Completed'); - processListDemoPage.checkProcessIsDisplayed(processName.completedProcWithDate); - processListDemoPage.checkProcessIsDisplayed(processName.completedProcWithUserWidget); + await processListDemoPage.checkProcessIsDisplayed(processName.completedProcWithDate); + await processListDemoPage.checkProcessIsDisplayed(processName.completedProcWithUserWidget); - processListDemoPage.checkProcessIsNotDisplayed(processName.procWithDate); - processListDemoPage.checkProcessIsNotDisplayed(processName.procWithUserWidget); + await processListDemoPage.checkProcessIsNotDisplayed(processName.procWithDate); + await processListDemoPage.checkProcessIsNotDisplayed(processName.procWithUserWidget); - processListDemoPage.selectStateFilter('All'); + await processListDemoPage.selectStateFilter('All'); - processListDemoPage.checkProcessIsDisplayed(processName.completedProcWithDate); - processListDemoPage.checkProcessIsDisplayed(processName.completedProcWithUserWidget); - processListDemoPage.checkProcessIsDisplayed(processName.procWithDate); - processListDemoPage.checkProcessIsDisplayed(processName.procWithUserWidget); + await processListDemoPage.checkProcessIsDisplayed(processName.completedProcWithDate); + await processListDemoPage.checkProcessIsDisplayed(processName.completedProcWithUserWidget); + await processListDemoPage.checkProcessIsDisplayed(processName.procWithDate); + await processListDemoPage.checkProcessIsDisplayed(processName.procWithUserWidget); }); - it('[C282010] Should be able to sort by creation date', () => { - processListDemoPage.selectSorting('asc'); + it('[C282010] Should be able to sort by creation date', async () => { + await processListDemoPage.selectSorting('asc'); - processListDemoPage.getDisplayedProcessesNames().then((sortedProcessList) => { - expect(JSON.stringify(processList) === JSON.stringify(sortedProcessList)).toBe(true); - }); + const sortedProcessListNamesAsc = await processListDemoPage.getDisplayedProcessesNames(); - processListDemoPage.selectSorting('desc'); + await expect(JSON.stringify(processList) === JSON.stringify(sortedProcessListNamesAsc)).toBe(true); - processListDemoPage.getDisplayedProcessesNames().then((sortedProcessList) => { - expect(JSON.stringify(processList.reverse()) === JSON.stringify(sortedProcessList)).toBe(true); - }); + await processListDemoPage.selectSorting('desc'); + + const sortedProcessListNamesDesc = await processListDemoPage.getDisplayedProcessesNames(); + await expect(JSON.stringify(processList.reverse()) === JSON.stringify(sortedProcessListNamesDesc)).toBe(true); }); }); diff --git a/e2e/process-services/processlist-pagination.e2e.ts b/e2e/process-services/processlist-pagination.e2e.ts index 39fcd92f7e..7ffce461ca 100644 --- a/e2e/process-services/processlist-pagination.e2e.ts +++ b/e2e/process-services/processlist-pagination.e2e.ts @@ -28,7 +28,7 @@ import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; import { AppsActions } from '../actions/APS/apps.actions'; import { UsersActions } from '../actions/users.actions'; -describe('Process List - Pagination', function () { +describe('Process List - Pagination', () => { const itemsPerPage = { five: '5', @@ -57,7 +57,7 @@ describe('Process List - Pagination', function () { let totalPages; const processNameBase = 'process'; - beforeAll(async (done) => { + beforeAll(async () => { const apps = new AppsActions(); const users = new UsersActions(); @@ -76,21 +76,20 @@ describe('Process List - Pagination', function () { await loginPage.loginToProcessServicesUsingUserModel(processUserModel); - done(); }); - describe('Empty processes', function () { + describe('Empty processes', () => { - it('[C280015] Should show empty content message an no pagination when no process are present', function () { - navigationBarPage.navigateToProcessServicesPage().goToTaskApp().clickProcessButton(); - processFiltersPage.checkNoContentMessage(); - paginationPage.checkPaginationIsNotDisplayed(); + it('[C280015] Should show empty content message an no pagination when no process are present', async() => { + await (await (await navigationBarPage.navigateToProcessServicesPage()).goToTaskApp()).clickProcessButton(); + await processFiltersPage.checkNoContentMessage(); + await paginationPage.checkPaginationIsNotDisplayed(); }); }); - describe('With processes Pagination', function () { + describe('With processes Pagination', () => { - beforeAll(async (done) => { + beforeAll(async () => { const apps = new AppsActions(); this.alfrescoJsApi = new AlfrescoApi({ @@ -104,304 +103,303 @@ describe('Process List - Pagination', function () { await apps.startProcess(this.alfrescoJsApi, deployedTestApp, processNameBase + (i < 10 ? `0${i}` : i)); } - done(); }); - beforeEach(async (done) => { - await navigationBarPage.navigateToProcessServicesPage().goToTaskApp().clickProcessButton(); - done(); + beforeEach(async () => { + await (await (await navigationBarPage.navigateToProcessServicesPage()).goToTaskApp()).clickProcessButton(); + }); - it('[C261042] Should display default pagination', function () { + it('[C261042] Should display default pagination', async() => { page = 1; totalPages = 1; - processFiltersPage.clickRunningFilterButton(); - processFiltersPage.checkFilterIsHighlighted(processFilterRunning); - processDetailsPage.checkProcessTitleIsDisplayed(); - processFiltersPage.waitForTableBody(); - expect(paginationPage.getCurrentPage()).toEqual('Page ' + page); - expect(paginationPage.getTotalPages()).toEqual('of ' + totalPages); + await processFiltersPage.clickRunningFilterButton(); + await processFiltersPage.checkFilterIsHighlighted(processFilterRunning); + await processDetailsPage.checkProcessTitleIsDisplayed(); + await processFiltersPage.waitForTableBody(); + await expect(await paginationPage.getCurrentPage()).toEqual('Page ' + page); + await expect(await paginationPage.getTotalPages()).toEqual('of ' + totalPages); - expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.twenty); - expect(paginationPage.getPaginationRange()).toEqual('Showing 1-' + nrOfProcesses + ' of ' + nrOfProcesses); - expect(processFiltersPage.numberOfProcessRows()).toBe(nrOfProcesses); - paginationPage.checkNextPageButtonIsDisabled(); - paginationPage.checkPreviousPageButtonIsDisabled(); + await expect(await paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.twenty); + await expect(await paginationPage.getPaginationRange()).toEqual('Showing 1-' + nrOfProcesses + ' of ' + nrOfProcesses); + await expect(await processFiltersPage.numberOfProcessRows()).toBe(nrOfProcesses); + await paginationPage.checkNextPageButtonIsDisabled(); + await paginationPage.checkPreviousPageButtonIsDisabled(); }); - it('[C261043] Should be possible to Items per page to 15', function () { + it('[C261043] Should be possible to Items per page to 15', async() => { page = 1; totalPages = 2; - processFiltersPage.clickRunningFilterButton(); - processFiltersPage.checkFilterIsHighlighted(processFilterRunning); - processDetailsPage.checkProcessTitleIsDisplayed(); - processFiltersPage.waitForTableBody(); - paginationPage.selectItemsPerPage(itemsPerPage.fifteen); - processDetailsPage.checkProcessTitleIsDisplayed(); - processFiltersPage.waitForTableBody(); - expect(paginationPage.getCurrentPage()).toEqual('Page ' + page); - expect(paginationPage.getTotalPages()).toEqual('of ' + totalPages); - expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.fifteen); - expect(paginationPage.getPaginationRange()).toEqual('Showing 1-' + itemsPerPage.fifteenValue * page + ' of ' + nrOfProcesses); - expect(processFiltersPage.numberOfProcessRows()).toBe(itemsPerPage.fifteenValue); - paginationPage.checkNextPageButtonIsEnabled(); - paginationPage.checkPreviousPageButtonIsDisabled(); + await processFiltersPage.clickRunningFilterButton(); + await processFiltersPage.checkFilterIsHighlighted(processFilterRunning); + await processDetailsPage.checkProcessTitleIsDisplayed(); + await processFiltersPage.waitForTableBody(); + await paginationPage.selectItemsPerPage(itemsPerPage.fifteen); + await processDetailsPage.checkProcessTitleIsDisplayed(); + await processFiltersPage.waitForTableBody(); + await expect(await paginationPage.getCurrentPage()).toEqual('Page ' + page); + await expect(await paginationPage.getTotalPages()).toEqual('of ' + totalPages); + await expect(await paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.fifteen); + await expect(await paginationPage.getPaginationRange()).toEqual('Showing 1-' + itemsPerPage.fifteenValue * page + ' of ' + nrOfProcesses); + await expect(await processFiltersPage.numberOfProcessRows()).toBe(itemsPerPage.fifteenValue); + await paginationPage.checkNextPageButtonIsEnabled(); + await paginationPage.checkPreviousPageButtonIsDisabled(); page++; - paginationPage.clickOnNextPage(); - processDetailsPage.checkProcessTitleIsDisplayed(); - processFiltersPage.waitForTableBody(); - expect(paginationPage.getCurrentPage()).toEqual('Page ' + page); - expect(paginationPage.getTotalPages()).toEqual('of ' + totalPages); - expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.fifteen); - expect(paginationPage.getPaginationRange()).toEqual('Showing 16-' + nrOfProcesses + ' of ' + nrOfProcesses); - expect(processFiltersPage.numberOfProcessRows()).toBe(nrOfProcesses - itemsPerPage.fifteenValue); - paginationPage.checkNextPageButtonIsDisabled(); - paginationPage.checkPreviousPageButtonIsEnabled(); + await paginationPage.clickOnNextPage(); + await processDetailsPage.checkProcessTitleIsDisplayed(); + await processFiltersPage.waitForTableBody(); + await expect(await paginationPage.getCurrentPage()).toEqual('Page ' + page); + await expect(await paginationPage.getTotalPages()).toEqual('of ' + totalPages); + await expect(await paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.fifteen); + await expect(await paginationPage.getPaginationRange()).toEqual('Showing 16-' + nrOfProcesses + ' of ' + nrOfProcesses); + await expect(await processFiltersPage.numberOfProcessRows()).toBe(nrOfProcesses - itemsPerPage.fifteenValue); + await paginationPage.checkNextPageButtonIsDisabled(); + await paginationPage.checkPreviousPageButtonIsEnabled(); page = 1; - navigationBarPage.navigateToProcessServicesPage().goToTaskApp().clickProcessButton(); - processFiltersPage.clickRunningFilterButton(); - processFiltersPage.checkFilterIsHighlighted(processFilterRunning); - processDetailsPage.checkProcessTitleIsDisplayed(); - processFiltersPage.waitForTableBody(); - expect(paginationPage.getCurrentPage()).toEqual('Page ' + page); - expect(paginationPage.getTotalPages()).toEqual('of ' + totalPages); - expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.fifteen); + await (await (await navigationBarPage.navigateToProcessServicesPage()).goToTaskApp()).clickProcessButton(); + await processFiltersPage.clickRunningFilterButton(); + await processFiltersPage.checkFilterIsHighlighted(processFilterRunning); + await processDetailsPage.checkProcessTitleIsDisplayed(); + await processFiltersPage.waitForTableBody(); + await expect(await paginationPage.getCurrentPage()).toEqual('Page ' + page); + await expect(await paginationPage.getTotalPages()).toEqual('of ' + totalPages); + await expect(await paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.fifteen); }); - it('[C261044] Should be possible to Items per page to 10', function () { + it('[C261044] Should be possible to Items per page to 10', async() => { page = 1; totalPages = 2; - processFiltersPage.clickRunningFilterButton(); - processFiltersPage.checkFilterIsHighlighted(processFilterRunning); - processDetailsPage.checkProcessTitleIsDisplayed(); - processFiltersPage.waitForTableBody(); - paginationPage.selectItemsPerPage(itemsPerPage.ten); - processDetailsPage.checkProcessTitleIsDisplayed(); - processFiltersPage.waitForTableBody(); - expect(paginationPage.getCurrentPage()).toEqual('Page ' + page); - expect(paginationPage.getTotalPages()).toEqual('of ' + totalPages); - expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.ten); - expect(paginationPage.getPaginationRange()).toEqual('Showing 1-' + itemsPerPage.tenValue * page + ' of ' + nrOfProcesses); - expect(processFiltersPage.numberOfProcessRows()).toBe(itemsPerPage.tenValue); - paginationPage.checkNextPageButtonIsEnabled(); - paginationPage.checkPreviousPageButtonIsDisabled(); + await processFiltersPage.clickRunningFilterButton(); + await processFiltersPage.checkFilterIsHighlighted(processFilterRunning); + await processDetailsPage.checkProcessTitleIsDisplayed(); + await processFiltersPage.waitForTableBody(); + await paginationPage.selectItemsPerPage(itemsPerPage.ten); + await processDetailsPage.checkProcessTitleIsDisplayed(); + await processFiltersPage.waitForTableBody(); + await expect(await paginationPage.getCurrentPage()).toEqual('Page ' + page); + await expect(await paginationPage.getTotalPages()).toEqual('of ' + totalPages); + await expect(await paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.ten); + await expect(await paginationPage.getPaginationRange()).toEqual('Showing 1-' + itemsPerPage.tenValue * page + ' of ' + nrOfProcesses); + await expect(await processFiltersPage.numberOfProcessRows()).toBe(itemsPerPage.tenValue); + await paginationPage.checkNextPageButtonIsEnabled(); + await paginationPage.checkPreviousPageButtonIsDisabled(); page++; - paginationPage.clickOnNextPage(); - processDetailsPage.checkProcessTitleIsDisplayed(); - processFiltersPage.waitForTableBody(); - expect(paginationPage.getCurrentPage()).toEqual('Page ' + page); - expect(paginationPage.getTotalPages()).toEqual('of ' + totalPages); - expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.ten); - expect(paginationPage.getPaginationRange()).toEqual('Showing 11-' + nrOfProcesses + ' of ' + nrOfProcesses); - expect(processFiltersPage.numberOfProcessRows()).toBe(itemsPerPage.tenValue); - paginationPage.checkNextPageButtonIsDisabled(); - paginationPage.checkPreviousPageButtonIsEnabled(); + await paginationPage.clickOnNextPage(); + await processDetailsPage.checkProcessTitleIsDisplayed(); + await processFiltersPage.waitForTableBody(); + await expect(await paginationPage.getCurrentPage()).toEqual('Page ' + page); + await expect(await paginationPage.getTotalPages()).toEqual('of ' + totalPages); + await expect(await paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.ten); + await expect(await paginationPage.getPaginationRange()).toEqual('Showing 11-' + nrOfProcesses + ' of ' + nrOfProcesses); + await expect(await processFiltersPage.numberOfProcessRows()).toBe(itemsPerPage.tenValue); + await paginationPage.checkNextPageButtonIsDisabled(); + await paginationPage.checkPreviousPageButtonIsEnabled(); page = 1; - navigationBarPage.navigateToProcessServicesPage().goToTaskApp().clickProcessButton(); - processFiltersPage.clickRunningFilterButton(); - processFiltersPage.checkFilterIsHighlighted(processFilterRunning); - processDetailsPage.checkProcessTitleIsDisplayed(); - processFiltersPage.waitForTableBody(); - expect(paginationPage.getCurrentPage()).toEqual('Page ' + page); - expect(paginationPage.getTotalPages()).toEqual('of ' + totalPages); - expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.ten); + await (await (await navigationBarPage.navigateToProcessServicesPage()).goToTaskApp()).clickProcessButton(); + await processFiltersPage.clickRunningFilterButton(); + await processFiltersPage.checkFilterIsHighlighted(processFilterRunning); + await processDetailsPage.checkProcessTitleIsDisplayed(); + await processFiltersPage.waitForTableBody(); + await expect(await paginationPage.getCurrentPage()).toEqual('Page ' + page); + await expect(await paginationPage.getTotalPages()).toEqual('of ' + totalPages); + await expect(await paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.ten); }); - it('[C261047] Should be possible to Items per page to 20', function () { + it('[C261047] Should be possible to Items per page to 20', async() => { page = 1; totalPages = 1; - processFiltersPage.clickRunningFilterButton(); - processFiltersPage.checkFilterIsHighlighted(processFilterRunning); - processDetailsPage.checkProcessTitleIsDisplayed(); - processFiltersPage.waitForTableBody(); - paginationPage.selectItemsPerPage(itemsPerPage.twenty); - processDetailsPage.checkProcessTitleIsDisplayed(); - processFiltersPage.waitForTableBody(); - expect(paginationPage.getCurrentPage()).toEqual('Page ' + page); - expect(paginationPage.getTotalPages()).toEqual('of ' + totalPages); - expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.twenty); - expect(paginationPage.getPaginationRange()).toEqual('Showing 1-' + nrOfProcesses + ' of ' + nrOfProcesses); - expect(processFiltersPage.numberOfProcessRows()).toBe(nrOfProcesses); - paginationPage.checkNextPageButtonIsDisabled(); - paginationPage.checkPreviousPageButtonIsDisabled(); + await processFiltersPage.clickRunningFilterButton(); + await processFiltersPage.checkFilterIsHighlighted(processFilterRunning); + await processDetailsPage.checkProcessTitleIsDisplayed(); + await processFiltersPage.waitForTableBody(); + await paginationPage.selectItemsPerPage(itemsPerPage.twenty); + await processDetailsPage.checkProcessTitleIsDisplayed(); + await processFiltersPage.waitForTableBody(); + await expect(await paginationPage.getCurrentPage()).toEqual('Page ' + page); + await expect(await paginationPage.getTotalPages()).toEqual('of ' + totalPages); + await expect(await paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.twenty); + await expect(await paginationPage.getPaginationRange()).toEqual('Showing 1-' + nrOfProcesses + ' of ' + nrOfProcesses); + await expect(await processFiltersPage.numberOfProcessRows()).toBe(nrOfProcesses); + await paginationPage.checkNextPageButtonIsDisabled(); + await paginationPage.checkPreviousPageButtonIsDisabled(); - navigationBarPage.navigateToProcessServicesPage().goToTaskApp().clickProcessButton(); - processFiltersPage.clickRunningFilterButton(); - processFiltersPage.checkFilterIsHighlighted(processFilterRunning); - processDetailsPage.checkProcessTitleIsDisplayed(); - processFiltersPage.waitForTableBody(); - expect(paginationPage.getCurrentPage()).toEqual('Page ' + page); - expect(paginationPage.getTotalPages()).toEqual('of ' + totalPages); - expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.twenty); + await (await (await navigationBarPage.navigateToProcessServicesPage()).goToTaskApp()).clickProcessButton(); + await processFiltersPage.clickRunningFilterButton(); + await processFiltersPage.checkFilterIsHighlighted(processFilterRunning); + await processDetailsPage.checkProcessTitleIsDisplayed(); + await processFiltersPage.waitForTableBody(); + await expect(await paginationPage.getCurrentPage()).toEqual('Page ' + page); + await expect(await paginationPage.getTotalPages()).toEqual('of ' + totalPages); + await expect(await paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.twenty); }); - it('[C261045] Should be possible to Items per page to 5', function () { + it('[C261045] Should be possible to Items per page to 5', async() => { let showing; page = 1; totalPages = 4; - processFiltersPage.clickRunningFilterButton(); - processFiltersPage.checkFilterIsHighlighted(processFilterRunning); - processDetailsPage.checkProcessTitleIsDisplayed(); - processFiltersPage.waitForTableBody(); - paginationPage.selectItemsPerPage(itemsPerPage.five); - processDetailsPage.checkProcessTitleIsDisplayed(); - processFiltersPage.waitForTableBody(); - expect(paginationPage.getCurrentPage()).toEqual('Page ' + page); - expect(paginationPage.getTotalPages()).toEqual('of ' + totalPages); - expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.five); + await processFiltersPage.clickRunningFilterButton(); + await processFiltersPage.checkFilterIsHighlighted(processFilterRunning); + await processDetailsPage.checkProcessTitleIsDisplayed(); + await processFiltersPage.waitForTableBody(); + await paginationPage.selectItemsPerPage(itemsPerPage.five); + await processDetailsPage.checkProcessTitleIsDisplayed(); + await processFiltersPage.waitForTableBody(); + await expect(await paginationPage.getCurrentPage()).toEqual('Page ' + page); + await expect(await paginationPage.getTotalPages()).toEqual('of ' + totalPages); + await expect(await paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.five); showing = (itemsPerPage.fiveValue * page); - expect(paginationPage.getPaginationRange()).toEqual('Showing 1-' + showing + ' of ' + nrOfProcesses); - expect(processFiltersPage.numberOfProcessRows()).toBe(itemsPerPage.fiveValue); - paginationPage.checkNextPageButtonIsEnabled(); - paginationPage.checkPreviousPageButtonIsDisabled(); + await expect(await paginationPage.getPaginationRange()).toEqual('Showing 1-' + showing + ' of ' + nrOfProcesses); + await expect(await processFiltersPage.numberOfProcessRows()).toBe(itemsPerPage.fiveValue); + await paginationPage.checkNextPageButtonIsEnabled(); + await paginationPage.checkPreviousPageButtonIsDisabled(); page++; - paginationPage.clickOnNextPage(); - processDetailsPage.checkProcessTitleIsDisplayed(); - processFiltersPage.waitForTableBody(); - expect(paginationPage.getCurrentPage()).toEqual('Page ' + page); - expect(paginationPage.getTotalPages()).toEqual('of ' + totalPages); - expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.five); + await paginationPage.clickOnNextPage(); + await processDetailsPage.checkProcessTitleIsDisplayed(); + await processFiltersPage.waitForTableBody(); + await expect(await paginationPage.getCurrentPage()).toEqual('Page ' + page); + await expect(await paginationPage.getTotalPages()).toEqual('of ' + totalPages); + await expect(await paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.five); showing = (itemsPerPage.fiveValue * page); - expect(paginationPage.getPaginationRange()).toEqual('Showing 6-' + showing + ' of ' + nrOfProcesses); - expect(processFiltersPage.numberOfProcessRows()).toBe(itemsPerPage.fiveValue); - paginationPage.checkNextPageButtonIsEnabled(); - paginationPage.checkPreviousPageButtonIsEnabled(); + await expect(await paginationPage.getPaginationRange()).toEqual('Showing 6-' + showing + ' of ' + nrOfProcesses); + await expect(await processFiltersPage.numberOfProcessRows()).toBe(itemsPerPage.fiveValue); + await paginationPage.checkNextPageButtonIsEnabled(); + await paginationPage.checkPreviousPageButtonIsEnabled(); page++; - paginationPage.clickOnNextPage(); - processDetailsPage.checkProcessTitleIsDisplayed(); - processFiltersPage.waitForTableBody(); - expect(paginationPage.getCurrentPage()).toEqual('Page ' + page); - expect(paginationPage.getTotalPages()).toEqual('of ' + totalPages); - expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.five); + await paginationPage.clickOnNextPage(); + await processDetailsPage.checkProcessTitleIsDisplayed(); + await processFiltersPage.waitForTableBody(); + await expect(await paginationPage.getCurrentPage()).toEqual('Page ' + page); + await expect(await paginationPage.getTotalPages()).toEqual('of ' + totalPages); + await expect(await paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.five); showing = (itemsPerPage.fiveValue * page); - expect(paginationPage.getPaginationRange()).toEqual('Showing 11-' + showing + ' of ' + nrOfProcesses); - expect(processFiltersPage.numberOfProcessRows()).toBe(itemsPerPage.fiveValue); - paginationPage.checkNextPageButtonIsEnabled(); - paginationPage.checkPreviousPageButtonIsEnabled(); + await expect(await paginationPage.getPaginationRange()).toEqual('Showing 11-' + showing + ' of ' + nrOfProcesses); + await expect(await processFiltersPage.numberOfProcessRows()).toBe(itemsPerPage.fiveValue); + await paginationPage.checkNextPageButtonIsEnabled(); + await paginationPage.checkPreviousPageButtonIsEnabled(); page++; - paginationPage.clickOnNextPage(); - processDetailsPage.checkProcessTitleIsDisplayed(); - processFiltersPage.waitForTableBody(); - expect(paginationPage.getCurrentPage()).toEqual('Page ' + page); - expect(paginationPage.getTotalPages()).toEqual('of ' + totalPages); - expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.five); + await paginationPage.clickOnNextPage(); + await processDetailsPage.checkProcessTitleIsDisplayed(); + await processFiltersPage.waitForTableBody(); + await expect(await paginationPage.getCurrentPage()).toEqual('Page ' + page); + await expect(await paginationPage.getTotalPages()).toEqual('of ' + totalPages); + await expect(await paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.five); showing = (itemsPerPage.fiveValue * page); - expect(paginationPage.getPaginationRange()).toEqual('Showing 16-' + showing + ' of ' + nrOfProcesses); - expect(processFiltersPage.numberOfProcessRows()).toBe(itemsPerPage.fiveValue); - paginationPage.checkNextPageButtonIsDisabled(); - paginationPage.checkPreviousPageButtonIsEnabled(); + await expect(await paginationPage.getPaginationRange()).toEqual('Showing 16-' + showing + ' of ' + nrOfProcesses); + await expect(await processFiltersPage.numberOfProcessRows()).toBe(itemsPerPage.fiveValue); + await paginationPage.checkNextPageButtonIsDisabled(); + await paginationPage.checkPreviousPageButtonIsEnabled(); page = 1; - navigationBarPage.navigateToProcessServicesPage().goToTaskApp().clickProcessButton(); - processFiltersPage.clickRunningFilterButton(); - processFiltersPage.checkFilterIsHighlighted(processFilterRunning); - processDetailsPage.checkProcessTitleIsDisplayed(); - processFiltersPage.waitForTableBody(); - expect(paginationPage.getCurrentPage()).toEqual('Page ' + page); - expect(paginationPage.getTotalPages()).toEqual('of ' + totalPages); - expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.five); + await (await (await navigationBarPage.navigateToProcessServicesPage()).goToTaskApp()).clickProcessButton(); + await processFiltersPage.clickRunningFilterButton(); + await processFiltersPage.checkFilterIsHighlighted(processFilterRunning); + await processDetailsPage.checkProcessTitleIsDisplayed(); + await processFiltersPage.waitForTableBody(); + await expect(await paginationPage.getCurrentPage()).toEqual('Page ' + page); + await expect(await paginationPage.getTotalPages()).toEqual('of ' + totalPages); + await expect(await paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.five); }); - it('[C261049] Should be possible to open page number dropdown', function () { + it('[C261049] Should be possible to open page number dropdown', async() => { let showing; page = 1; totalPages = 2; - processFiltersPage.clickRunningFilterButton(); - processDetailsPage.checkProcessTitleIsDisplayed(); - processFiltersPage.waitForTableBody(); - paginationPage.selectItemsPerPage(itemsPerPage.ten); - processDetailsPage.checkProcessTitleIsDisplayed(); - processFiltersPage.waitForTableBody(); - expect(paginationPage.getCurrentPage()).toEqual('Page ' + page); - expect(paginationPage.getTotalPages()).toEqual('of ' + totalPages); - expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.ten); + await processFiltersPage.clickRunningFilterButton(); + await processDetailsPage.checkProcessTitleIsDisplayed(); + await processFiltersPage.waitForTableBody(); + await paginationPage.selectItemsPerPage(itemsPerPage.ten); + await processDetailsPage.checkProcessTitleIsDisplayed(); + await processFiltersPage.waitForTableBody(); + await expect(await paginationPage.getCurrentPage()).toEqual('Page ' + page); + await expect(await paginationPage.getTotalPages()).toEqual('of ' + totalPages); + await expect(await paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.ten); showing = (itemsPerPage.tenValue * page); - expect(paginationPage.getPaginationRange()).toEqual('Showing 1-' + showing + ' of ' + nrOfProcesses); - expect(processFiltersPage.numberOfProcessRows()).toBe(itemsPerPage.tenValue); - paginationPage.checkNextPageButtonIsEnabled(); - paginationPage.checkPreviousPageButtonIsDisabled(); + await expect(await paginationPage.getPaginationRange()).toEqual('Showing 1-' + showing + ' of ' + nrOfProcesses); + await expect(await processFiltersPage.numberOfProcessRows()).toBe(itemsPerPage.tenValue); + await paginationPage.checkNextPageButtonIsEnabled(); + await paginationPage.checkPreviousPageButtonIsDisabled(); - paginationPage.clickOnPageDropdown(); - expect(paginationPage.getPageDropdownOptions()).toEqual(['1', '2']); + await paginationPage.clickOnPageDropdown(); + await expect(await paginationPage.getPageDropdownOptions()).toEqual(['1', '2']); page = 2; - paginationPage.clickOnPageDropdownOption('2'); - processDetailsPage.checkProcessTitleIsDisplayed(); - processFiltersPage.waitForTableBody(); - expect(paginationPage.getCurrentPage()).toEqual('Page ' + page); - expect(paginationPage.getTotalPages()).toEqual('of ' + totalPages); - expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.ten); + await paginationPage.clickOnPageDropdownOption('2'); + await processDetailsPage.checkProcessTitleIsDisplayed(); + await processFiltersPage.waitForTableBody(); + await expect(await paginationPage.getCurrentPage()).toEqual('Page ' + page); + await expect(await paginationPage.getTotalPages()).toEqual('of ' + totalPages); + await expect(await paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.ten); showing = (itemsPerPage.tenValue * page); - expect(paginationPage.getPaginationRange()).toEqual('Showing 11-' + showing + ' of ' + nrOfProcesses); - expect(processFiltersPage.numberOfProcessRows()).toBe(itemsPerPage.tenValue); - paginationPage.checkNextPageButtonIsDisabled(); - paginationPage.checkPreviousPageButtonIsEnabled(); + await expect(await paginationPage.getPaginationRange()).toEqual('Showing 11-' + showing + ' of ' + nrOfProcesses); + await expect(await processFiltersPage.numberOfProcessRows()).toBe(itemsPerPage.tenValue); + await paginationPage.checkNextPageButtonIsDisabled(); + await paginationPage.checkPreviousPageButtonIsEnabled(); - paginationPage.clickOnPageDropdown(); - expect(paginationPage.getPageDropdownOptions()).toEqual(['1', '2']); + await paginationPage.clickOnPageDropdown(); + await expect(await paginationPage.getPageDropdownOptions()).toEqual(['1', '2']); page = 1; - paginationPage.clickOnPageDropdownOption('1'); - processDetailsPage.checkProcessTitleIsDisplayed(); - processFiltersPage.waitForTableBody(); - expect(paginationPage.getCurrentPage()).toEqual('Page ' + page); - expect(paginationPage.getTotalPages()).toEqual('of ' + totalPages); - expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.ten); + await paginationPage.clickOnPageDropdownOption('1'); + await processDetailsPage.checkProcessTitleIsDisplayed(); + await processFiltersPage.waitForTableBody(); + await expect(await paginationPage.getCurrentPage()).toEqual('Page ' + page); + await expect(await paginationPage.getTotalPages()).toEqual('of ' + totalPages); + await expect(await paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.ten); showing = (itemsPerPage.tenValue * page); - expect(paginationPage.getPaginationRange()).toEqual('Showing 1-' + showing + ' of ' + nrOfProcesses); - expect(processFiltersPage.numberOfProcessRows()).toBe(itemsPerPage.tenValue); - paginationPage.checkNextPageButtonIsEnabled(); - paginationPage.checkPreviousPageButtonIsDisabled(); + await expect(await paginationPage.getPaginationRange()).toEqual('Showing 1-' + showing + ' of ' + nrOfProcesses); + await expect(await processFiltersPage.numberOfProcessRows()).toBe(itemsPerPage.tenValue); + await paginationPage.checkNextPageButtonIsEnabled(); + await paginationPage.checkPreviousPageButtonIsDisabled(); }); - it('[C261048] Should be possible to sort processes by name', function () { - processFiltersPage.clickRunningFilterButton(); - processFiltersPage.checkFilterIsHighlighted(processFilterRunning); - processDetailsPage.checkProcessTitleIsDisplayed(); - processFiltersPage.waitForTableBody(); + it('[C261048] Should be possible to sort processes by name', async() => { + await processFiltersPage.clickRunningFilterButton(); + await processFiltersPage.checkFilterIsHighlighted(processFilterRunning); + await processDetailsPage.checkProcessTitleIsDisplayed(); + await processFiltersPage.waitForTableBody(); - paginationPage.selectItemsPerPage(itemsPerPage.twenty); - processDetailsPage.checkProcessTitleIsDisplayed(); - processFiltersPage.waitForTableBody(); + await paginationPage.selectItemsPerPage(itemsPerPage.twenty); + await processDetailsPage.checkProcessTitleIsDisplayed(); + await processFiltersPage.waitForTableBody(); - processFiltersPage.sortByName('ASC'); - processFiltersPage.waitForTableBody(); - processFiltersPage.checkProcessesSortedByNameAsc(); + await processFiltersPage.sortByName('ASC'); + await processFiltersPage.waitForTableBody(); + await processFiltersPage.checkProcessesSortedByNameAsc(); - processFiltersPage.sortByName('DESC'); - processFiltersPage.waitForTableBody(); - processFiltersPage.checkProcessesSortedByNameDesc(); + await processFiltersPage.sortByName('DESC'); + await processFiltersPage.waitForTableBody(); + await processFiltersPage.checkProcessesSortedByNameDesc(); }); - it('[C286260] Should keep sorting when changing \'Items per page\'', function () { - processFiltersPage.clickRunningFilterButton(); - processFiltersPage.checkFilterIsHighlighted(processFilterRunning); - processDetailsPage.checkProcessTitleIsDisplayed(); - processFiltersPage.waitForTableBody(); + it('[C286260] Should keep sorting when changing \'Items per page\'', async() => { + await processFiltersPage.clickRunningFilterButton(); + await processFiltersPage.checkFilterIsHighlighted(processFilterRunning); + await processDetailsPage.checkProcessTitleIsDisplayed(); + await processFiltersPage.waitForTableBody(); - paginationPage.selectItemsPerPage(itemsPerPage.twenty); - processDetailsPage.checkProcessTitleIsDisplayed(); - processFiltersPage.waitForTableBody(); + await paginationPage.selectItemsPerPage(itemsPerPage.twenty); + await processDetailsPage.checkProcessTitleIsDisplayed(); + await processFiltersPage.waitForTableBody(); - processFiltersPage.sortByName('ASC'); - processFiltersPage.waitForTableBody(); - processFiltersPage.checkProcessesSortedByNameAsc(); + await processFiltersPage.sortByName('ASC'); + await processFiltersPage.waitForTableBody(); + await processFiltersPage.checkProcessesSortedByNameAsc(); - paginationPage.selectItemsPerPage(itemsPerPage.five); - processFiltersPage.waitForTableBody(); - processFiltersPage.checkProcessesSortedByNameAsc(); + await paginationPage.selectItemsPerPage(itemsPerPage.five); + await processFiltersPage.waitForTableBody(); + await processFiltersPage.checkProcessesSortedByNameAsc(); }); }); }); diff --git a/e2e/process-services/sort-tasklist-pagination.e2e.ts b/e2e/process-services/sort-tasklist-pagination.e2e.ts index c5ce48227a..8bf4ee05f3 100644 --- a/e2e/process-services/sort-tasklist-pagination.e2e.ts +++ b/e2e/process-services/sort-tasklist-pagination.e2e.ts @@ -51,7 +51,7 @@ describe('Task List Pagination - Sorting', () => { twentyValue: 20 }; - beforeAll(async (done) => { + beforeAll(async () => { const apps = new AppsActions(); const users = new UsersActions(); @@ -69,29 +69,28 @@ describe('Task List Pagination - Sorting', () => { await apps.importPublishDeployApp(this.alfrescoJsApi, app.file_location); for (let i = 0; i < nrOfTasks; i++) { - this.alfrescoJsApi.activiti.taskApi.createNewTask({name: taskNames[i]}); + await this.alfrescoJsApi.activiti.taskApi.createNewTask({ name: taskNames[i] }); } await loginPage.loginToProcessServicesUsingUserModel(processUserModel); - done(); }); - it('[C260308] Should be possible to sort tasks by name', () => { - new NavigationBarPage().navigateToProcessServicesPage().goToTaskApp(); - taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.INV_TASKS); - taskPage.tasksListPage().getDataTable().waitForTableBody(); - paginationPage.selectItemsPerPage(itemsPerPage.twenty); - taskPage.tasksListPage().getDataTable().waitForTableBody(); - taskPage.filtersPage().sortByName('ASC'); - taskPage.tasksListPage().getDataTable().waitForTableBody(); - taskPage.filtersPage().getAllRowsNameColumn().then(function (list) { - expect(JSON.stringify(list) === JSON.stringify(taskNames)).toEqual(true); + it('[C260308] Should be possible to sort tasks by name', async () => { + await (await new NavigationBarPage().navigateToProcessServicesPage()).goToTaskApp(); + await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.INV_TASKS); + await taskPage.tasksListPage().getDataTable().waitForTableBody(); + await paginationPage.selectItemsPerPage(itemsPerPage.twenty); + await taskPage.tasksListPage().getDataTable().waitForTableBody(); + await taskPage.filtersPage().sortByName('ASC'); + await taskPage.tasksListPage().getDataTable().waitForTableBody(); + await taskPage.filtersPage().getAllRowsNameColumn().then(async (list) => { + await expect(JSON.stringify(list) === JSON.stringify(taskNames)).toEqual(true); }); - taskPage.filtersPage().sortByName('DESC'); - taskPage.filtersPage().getAllRowsNameColumn().then(function (list) { + await taskPage.filtersPage().sortByName('DESC'); + await taskPage.filtersPage().getAllRowsNameColumn().then(async (list) => { taskNames.reverse(); - expect(JSON.stringify(list) === JSON.stringify(taskNames)).toEqual(true); + await expect(JSON.stringify(list) === JSON.stringify(taskNames)).toEqual(true); }); }); diff --git a/e2e/process-services/standalone-task.e2e.ts b/e2e/process-services/standalone-task.e2e.ts index 5a54ea840e..916d84f083 100644 --- a/e2e/process-services/standalone-task.e2e.ts +++ b/e2e/process-services/standalone-task.e2e.ts @@ -43,7 +43,7 @@ describe('Start Task - Task App', () => { const tasks = ['Standalone task', 'Completed standalone task', 'Add a form', 'Remove form']; const noFormMessage = 'No forms attached'; - beforeAll(async (done) => { + beforeAll(async () => { const users = new UsersActions(); this.alfrescoJsApi = new AlfrescoApi({ @@ -66,69 +66,82 @@ describe('Start Task - Task App', () => { await loginPage.loginToProcessServicesUsingUserModel(processUserModel); - done(); }); - beforeEach(async (done) => { - navigationBarPage.navigateToProcessServicesPage().goToTaskApp().clickTasksButton(); - taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); + beforeEach(async () => { + await (await (await navigationBarPage.navigateToProcessServicesPage()).goToTaskApp()).clickTasksButton(); + await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); - done(); }); - it('[C260421] Should a standalone task be displayed when creating a new task without form', () => { + it('[C260421] Should a standalone task be displayed when creating a new task without form', async () => { - taskPage.createNewTask().addName(tasks[0]).clickStartButton(); - taskPage.tasksListPage().checkContentIsDisplayed(tasks[0]); - taskPage.taskDetails().noFormIsDisplayed(); - taskPage.taskDetails().checkCompleteTaskButtonIsDisplayed().checkCompleteTaskButtonIsEnabled(); - taskPage.taskDetails().checkAttachFormButtonIsDisplayed(); - taskPage.taskDetails().checkAttachFormButtonIsEnabled(); - expect(taskPage.taskDetails().getFormName()).toEqual(CONSTANTS.TASK_DETAILS.NO_FORM); - expect(taskPage.formFields().getNoFormMessage()).toEqual(noFormMessage); + const task = await taskPage.createNewTask(); + await task.addName(tasks[0]); + await task.clickStartButton(); + await taskPage.tasksListPage().checkContentIsDisplayed(tasks[0]); + await taskPage.taskDetails().noFormIsDisplayed(); + + const taskDetails = await taskPage.taskDetails(); + await taskDetails.checkCompleteTaskButtonIsDisplayed(); + await taskDetails.checkCompleteTaskButtonIsEnabled(); + await taskPage.taskDetails().checkAttachFormButtonIsDisplayed(); + await taskPage.taskDetails().checkAttachFormButtonIsEnabled(); + await expect(await taskPage.taskDetails().getFormName()).toEqual(CONSTANTS.TASK_DETAILS.NO_FORM); + await expect(await taskPage.formFields().getNoFormMessage()).toEqual(noFormMessage); }); - it('[C268910] Should a standalone task be displayed in completed tasks when completing it', () => { - taskPage.createNewTask().addName(tasks[1]).clickStartButton(); - taskPage.tasksListPage().checkContentIsDisplayed(tasks[1]); - taskPage.formFields().noFormIsDisplayed(); + it('[C268910] Should a standalone task be displayed in completed tasks when completing it', async () => { + const task = await taskPage.createNewTask(); + await task.addName(tasks[1]); + await task.clickStartButton(); + await taskPage.tasksListPage().checkContentIsDisplayed(tasks[1]); + await taskPage.formFields().noFormIsDisplayed(); - taskPage.completeTaskNoForm(); - taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.COMPLETED_TASKS); - taskPage.tasksListPage().selectRow(tasks[1]); - expect(taskPage.formFields().getCompletedTaskNoFormMessage()).toEqual('Task ' + tasks[1] + ' completed'); + await taskPage.completeTaskNoForm(); + await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.COMPLETED_TASKS); + await taskPage.tasksListPage().selectRow(tasks[1]); + await expect(await taskPage.formFields().getCompletedTaskNoFormMessage()).toEqual('Task ' + tasks[1] + ' completed'); - taskPage.formFields().noFormIsDisplayed(); - expect(taskPage.taskDetails().getFormName()).toEqual(CONSTANTS.TASK_DETAILS.NO_FORM); + await taskPage.formFields().noFormIsDisplayed(); + await expect(await taskPage.taskDetails().getFormName()).toEqual(CONSTANTS.TASK_DETAILS.NO_FORM); }); - it('[C268911] Should allow adding a form to a standalone task when clicking on Add form button', () => { - taskPage.createNewTask().addName(tasks[2]).clickStartButton(); - taskPage.tasksListPage().checkContentIsDisplayed(tasks[2]); - taskPage.formFields().noFormIsDisplayed(); + it('[C268911] Should allow adding a form to a standalone task when clicking on Add form button', async () => { + const task = await taskPage.createNewTask(); + await task.addName(tasks[2]); + await task.clickStartButton(); - taskPage.formFields().clickOnAttachFormButton().selectForm(app.formName).clickOnAttachFormButton(); - expect(taskPage.taskDetails().getFormName()).toEqual(app.formName); + await taskPage.tasksListPage().checkContentIsDisplayed(tasks[2]); + await taskPage.formFields().noFormIsDisplayed(); + + const formFields = await taskPage.formFields(); + await formFields.clickOnAttachFormButton(); + await formFields.selectForm(app.formName); + await formFields.clickOnAttachFormButton(); + + await expect(await taskPage.taskDetails().getFormName()).toEqual(app.formName); }); - it('[C268912] Should a standalone task be displayed when removing the form from APS', () => { - taskPage.createNewTask().addName(tasks[3]).addForm(app.formName).clickStartButton(); + it('[C268912] Should a standalone task be displayed when removing the form from APS', async () => { + const task = await taskPage.createNewTask(); + await task.addName(tasks[3]); + await task.addForm(app.formName); + await task.clickStartButton(); - taskPage.tasksListPage().checkContentIsDisplayed(tasks[3]); - expect(taskPage.taskDetails().getFormName()).toEqual(app.formName); + await taskPage.tasksListPage().checkContentIsDisplayed(tasks[3]); + await expect(await taskPage.taskDetails().getFormName()).toEqual(app.formName); - browser.controlFlow().execute(async () => { - const listOfTasks = await this.alfrescoJsApi.activiti.taskApi.listTasks(new Task({ sort: 'created-desc' })); - await this.alfrescoJsApi.activiti.taskApi.removeForm(listOfTasks.data[0].id); - }); + const listOfTasks = await this.alfrescoJsApi.activiti.taskApi.listTasks(new Task({ sort: 'created-desc' })); + await this.alfrescoJsApi.activiti.taskApi.removeForm(listOfTasks.data[0].id); - browser.refresh(); - taskPage.tasksListPage().checkContentIsDisplayed(tasks[3]); - taskPage.checkTaskTitle(tasks[3]); + await browser.refresh(); + await taskPage.tasksListPage().checkContentIsDisplayed(tasks[3]); + await taskPage.checkTaskTitle(tasks[3]); - taskPage.formFields().noFormIsDisplayed(); - expect(taskPage.taskDetails().getFormName()).toEqual(CONSTANTS.TASK_DETAILS.NO_FORM); - expect(taskPage.formFields().getNoFormMessage()).toEqual(noFormMessage); + await taskPage.formFields().noFormIsDisplayed(); + await expect(await taskPage.taskDetails().getFormName()).toEqual(CONSTANTS.TASK_DETAILS.NO_FORM); + await expect(await taskPage.formFields().getNoFormMessage()).toEqual(noFormMessage); }); }); diff --git a/e2e/process-services/start-process-component.e2e.ts b/e2e/process-services/start-process-component.e2e.ts index 7e8c8dc545..02ee517d8c 100644 --- a/e2e/process-services/start-process-component.e2e.ts +++ b/e2e/process-services/start-process-component.e2e.ts @@ -15,10 +15,9 @@ * limitations under the License. */ -import { Util } from '../util/util'; import resources = require('../util/resources'); import CONSTANTS = require('../util/constants'); -import { LoginPage, StartProcessDialog, Widget } from '@alfresco/adf-testing'; +import { LoginPage, StartProcessDialog, Widget, FileBrowserUtil } from '@alfresco/adf-testing'; import { NavigationBarPage } from '../pages/adf/navigationBarPage'; import { ProcessServicesPage } from '../pages/adf/process-services/processServicesPage'; import { StartProcessPage } from '../pages/adf/process-services/startProcessPage'; @@ -36,7 +35,6 @@ import { FileModel } from '../models/ACS/fileModel'; import dateFormat = require('dateformat'); import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; -import path = require('path'); import { StringUtil } from '@alfresco/adf-testing'; describe('Start Process Component', () => { @@ -61,14 +59,14 @@ describe('Start Process Component', () => { const processNameBiggerThen255Characters = StringUtil.generateRandomString(256); const lengthValidationError = 'Length exceeded, 255 characters max.'; - const auditLogFile = path.join('../e2e/download/', 'Audit.pdf'); + const auditLogFile = 'Audit.pdf'; const jpgFile = new FileModel({ 'location': resources.Files.ADF_DOCUMENTS.JPG.file_location, 'name': resources.Files.ADF_DOCUMENTS.JPG.file_name }); - beforeAll(async (done) => { + beforeAll(async () => { this.alfrescoJsApi = new AlfrescoApi({ provider: 'BPM', hostBpm: browser.params.testConfig.adf_aps.host @@ -99,37 +97,29 @@ describe('Start Process Component', () => { dateFormAppCreated = await apps.importPublishDeployApp(this.alfrescoJsApiUserTwo, dateFormApp.file_location); appId = appCreated.id; - - done(); - }); - afterAll(async (done) => { + afterAll(async () => { await this.alfrescoJsApiUserTwo.activiti.modelsApi.deleteModel(appId); - await this.alfrescoJsApiUserTwo.activiti.modelsApi.deleteModel(simpleAppCreated.id); - await this.alfrescoJsApiUserTwo.activiti.modelsApi.deleteModel(dateFormAppCreated.id); - await this.alfrescoJsApi.activiti.adminTenantsApi.deleteTenant(tenantId); - - done(); }); describe(' Once logged with user without apps', () => { beforeEach(async () => { await loginPage.loginToProcessServicesUsingUserModel(procUserModel); - navigationBarPage.navigateToProcessServicesPage(); - processServicesPage.checkApsContainer(); + await navigationBarPage.navigateToProcessServicesPage(); + await processServicesPage.checkApsContainer(); }); - it('[C260458] Should NOT be able to start a process without process model', () => { - processServicesPage.goToApp('Task App'); - processServiceTabBarPage.clickProcessButton(); - processFiltersPage.clickCreateProcessButton(); - processFiltersPage.clickNewProcessDropdown(); - startProcessPage.checkNoProcessMessage(); + it('[C260458] Should NOT be able to start a process without process model', async () => { + await processServicesPage.goToApp('Task App'); + await processServiceTabBarPage.clickProcessButton(); + await processFiltersPage.clickCreateProcessButton(); + await processFiltersPage.clickNewProcessDropdown(); + await startProcessPage.checkNoProcessMessage(); }); }); @@ -140,338 +130,339 @@ describe('Start Process Component', () => { }); beforeEach(async () => { - navigationBarPage.navigateToProcessServicesPage(); - processServicesPage.checkApsContainer(); + await navigationBarPage.navigateToProcessServicesPage(); + await processServicesPage.checkApsContainer(); }); - it('[C260441] Should display start process form and default name when creating a new process', () => { - processServicesPage.goToApp('Task App'); - processServiceTabBarPage.clickProcessButton(); - processFiltersPage.clickCreateProcessButton(); - processFiltersPage.clickNewProcessDropdown(); - expect(startProcessPage.getDefaultName()).toEqual('My Default Name'); + it('[C260441] Should display start process form and default name when creating a new process', async () => { + await processServicesPage.goToApp('Task App'); + await processServiceTabBarPage.clickProcessButton(); + await processFiltersPage.clickCreateProcessButton(); + await processFiltersPage.clickNewProcessDropdown(); + await expect(await startProcessPage.getDefaultName()).toEqual('My Default Name'); }); - it('[C260445] Should require process definition and be possible to click cancel button', () => { - processServicesPage.goToApp('Task App'); - processServiceTabBarPage.clickProcessButton(); - processFiltersPage.clickCreateProcessButton(); - processFiltersPage.clickNewProcessDropdown(); - startProcessPage.enterProcessName(''); - browser.actions().sendKeys('v\b\b').perform(); // clear doesn't trigger the validator - startProcessPage.checkStartProcessButtonIsDisabled(); - startProcessPage.clickCancelProcessButton(); - processFiltersPage.checkNoContentMessage(); + it('[C260445] Should require process definition and be possible to click cancel button', async () => { + await processServicesPage.goToApp('Task App'); + await processServiceTabBarPage.clickProcessButton(); + await processFiltersPage.clickCreateProcessButton(); + await processFiltersPage.clickNewProcessDropdown(); + await startProcessPage.enterProcessName(''); + await browser.actions().sendKeys('v\b\b').perform(); // clear doesn't trigger the validator + await startProcessPage.checkStartProcessButtonIsDisabled(); + await startProcessPage.clickCancelProcessButton(); + await processFiltersPage.checkNoContentMessage(); }); - it('[C260444] Should require process name', () => { - processServicesPage.goToApp(app.title); + it('[C260444] Should require process name', async () => { + await processServicesPage.goToApp(app.title); - processServiceTabBarPage.clickProcessButton(); + await processServiceTabBarPage.clickProcessButton(); - processFiltersPage.clickCreateProcessButton(); - processFiltersPage.clickNewProcessDropdown(); + await processFiltersPage.clickCreateProcessButton(); + await processFiltersPage.clickNewProcessDropdown(); - startProcessPage.selectFromProcessDropdown(processModelWithoutSe); - startProcessPage.deleteDefaultName('My Default Name'); - startProcessPage.checkStartProcessButtonIsDisabled(); - startProcessPage.clickProcessDropdownArrow(); - startProcessPage.checkOptionIsDisplayed(processModelWithSe); - startProcessPage.checkOptionIsDisplayed(processModelWithoutSe); + await startProcessPage.selectFromProcessDropdown(processModelWithoutSe); + await startProcessPage.deleteDefaultName(); + + await browser.sleep(1000); + + await startProcessPage.checkStartProcessButtonIsDisabled(); + await startProcessPage.clickProcessDropdownArrow(); + await startProcessPage.checkOptionIsDisplayed(processModelWithSe); + await startProcessPage.checkOptionIsDisplayed(processModelWithoutSe); }); - it('[C260443] Should be possible to start a process without start event', () => { - processServicesPage.goToApp(app.title); + it('[C260443] Should be possible to start a process without start event', async () => { + await processServicesPage.goToApp(app.title); - processServiceTabBarPage.clickProcessButton(); + await processServiceTabBarPage.clickProcessButton(); - processFiltersPage.clickCreateProcessButton(); - processFiltersPage.clickNewProcessDropdown(); + await processFiltersPage.clickCreateProcessButton(); + await processFiltersPage.clickNewProcessDropdown(); - expect(startProcessPage.checkSelectProcessPlaceholderIsDisplayed()).toBe(''); + await expect(await startProcessPage.checkSelectProcessPlaceholderIsDisplayed()).toBe(''); - startProcessPage.selectFromProcessDropdown(processModelWithoutSe); + await startProcessPage.selectFromProcessDropdown(processModelWithoutSe); - expect(startProcessPage.getDefaultName()).toEqual('My Default Name'); + await expect(await startProcessPage.getDefaultName()).toEqual('My Default Name'); - startProcessPage.checkStartProcessButtonIsEnabled(); + await startProcessPage.checkStartProcessButtonIsEnabled(); }); - it('[C260449] Should be possible to start a process with start event', () => { - processServicesPage.goToApp(app.title); - processServiceTabBarPage.clickProcessButton(); - processFiltersPage.clickCreateProcessButton(); - processFiltersPage.clickNewProcessDropdown(); - startProcessPage.enterProcessName('Test'); - startProcessPage.selectFromProcessDropdown(processModelWithSe); - startProcessPage.clickFormStartProcessButton(); - processDetailsPage.checkDetailsAreDisplayed(); - browser.controlFlow().execute(async () => { - const processId = await processDetailsPage.getId(); - await this.alfrescoJsApi.activiti.processApi.getProcessInstance(processId).then(function (response) { - expect(processDetailsPage.getProcessStatus()).toEqual(CONSTANTS.PROCESS_STATUS.RUNNING); - expect(processDetailsPage.getEndDate()).toEqual(CONSTANTS.PROCESS_END_DATE); - expect(processDetailsPage.getProcessCategory()).toEqual(CONSTANTS.PROCESS_CATEGORY); - expect(processDetailsPage.getBusinessKey()).toEqual(CONSTANTS.PROCESS_BUSINESS_KEY); - expect(processDetailsPage.getCreatedBy()).toEqual(`${response.startedBy.firstName} ${response.startedBy.lastName}`); - expect(processDetailsPage.getCreated()).toEqual(dateFormat(CONSTANTS.PROCESS_DATE_FORMAT)); - expect(processDetailsPage.getId()).toEqual(response.id); - expect(processDetailsPage.getProcessDescription()).toEqual(CONSTANTS.PROCESS_DESCRIPTION); - expect(processDetailsPage.checkProcessTitleIsDisplayed()).toEqual(response.name); - }); - }); + it('[C260449] Should be possible to start a process with start event', async () => { + await processServicesPage.goToApp(app.title); + await processServiceTabBarPage.clickProcessButton(); + await processFiltersPage.clickCreateProcessButton(); + await processFiltersPage.clickNewProcessDropdown(); + await startProcessPage.enterProcessName('Test'); + await startProcessPage.selectFromProcessDropdown(processModelWithSe); + await startProcessPage.clickFormStartProcessButton(); + await processDetailsPage.checkDetailsAreDisplayed(); + const processId = await processDetailsPage.getId(); + const response = await this.alfrescoJsApi.activiti.processApi.getProcessInstance(processId); + + await expect(await processDetailsPage.getProcessStatus()).toEqual(CONSTANTS.PROCESS_STATUS.RUNNING); + await expect(await processDetailsPage.getEndDate()).toEqual(CONSTANTS.PROCESS_END_DATE); + await expect(await processDetailsPage.getProcessCategory()).toEqual(CONSTANTS.PROCESS_CATEGORY); + await expect(await processDetailsPage.getBusinessKey()).toEqual(CONSTANTS.PROCESS_BUSINESS_KEY); + await expect(await processDetailsPage.getCreatedBy()).toEqual(`${response.startedBy.firstName} ${response.startedBy.lastName}`); + await expect(await processDetailsPage.getCreated()).toEqual(dateFormat(CONSTANTS.PROCESS_DATE_FORMAT)); + await expect(await processDetailsPage.getId()).toEqual(response.id); + await expect(await processDetailsPage.getProcessDescription()).toEqual(CONSTANTS.PROCESS_DESCRIPTION); + await expect(await processDetailsPage.checkProcessTitleIsDisplayed()).toEqual(response.name); }); - it('[C286503] Should NOT display any process definition when typing a non-existent one', () => { - processServicesPage.goToApp(app.title); - processServiceTabBarPage.clickProcessButton(); - processFiltersPage.clickCreateProcessButton(); - processFiltersPage.clickNewProcessDropdown(); - startProcessPage.typeProcessDefinition('nonexistent'); - startProcessPage.checkNoProcessDefinitionOptionIsDisplayed(); - startProcessPage.checkStartProcessButtonIsDisabled(); + it('[C286503] Should NOT display any process definition when typing a non-existent one', async () => { + await processServicesPage.goToApp(app.title); + await processServiceTabBarPage.clickProcessButton(); + await processFiltersPage.clickCreateProcessButton(); + await processFiltersPage.clickNewProcessDropdown(); + await startProcessPage.typeProcessDefinition('nonexistent'); + await startProcessPage.checkNoProcessDefinitionOptionIsDisplayed(); + await startProcessPage.checkStartProcessButtonIsDisabled(); }); - it('[C286504] Should display proper options when typing a part of existent process definitions', () => { - processServicesPage.goToApp(app.title); - processServiceTabBarPage.clickProcessButton(); - processFiltersPage.clickCreateProcessButton(); - processFiltersPage.clickNewProcessDropdown(); - startProcessPage.typeProcessDefinition('process'); - startProcessPage.checkOptionIsDisplayed(processModelWithoutSe); - startProcessPage.checkOptionIsDisplayed(processModelWithSe); - startProcessPage.selectOption(processModelWithoutSe); - startProcessPage.checkStartProcessButtonIsEnabled(); + it('[C286504] Should display proper options when typing a part of existent process definitions', async () => { + await processServicesPage.goToApp(app.title); + await processServiceTabBarPage.clickProcessButton(); + await processFiltersPage.clickCreateProcessButton(); + await processFiltersPage.clickNewProcessDropdown(); + await startProcessPage.typeProcessDefinition('process'); + await startProcessPage.checkOptionIsDisplayed(processModelWithoutSe); + await startProcessPage.checkOptionIsDisplayed(processModelWithSe); + await startProcessPage.selectOption(processModelWithoutSe); + await startProcessPage.checkStartProcessButtonIsEnabled(); }); - it('[C286508] Should display only one option when typing an existent process definition', () => { - processServicesPage.goToApp(app.title); - processServiceTabBarPage.clickProcessButton(); - processFiltersPage.clickCreateProcessButton(); - processFiltersPage.clickNewProcessDropdown(); - startProcessPage.typeProcessDefinition(processModelWithoutSe); - startProcessPage.checkOptionIsDisplayed(processModelWithoutSe); - startProcessPage.checkOptionIsNotDisplayed(processModelWithSe); - startProcessPage.selectOption(processModelWithoutSe); - startProcessPage.checkStartProcessButtonIsEnabled(); + it('[C286508] Should display only one option when typing an existent process definition', async () => { + await processServicesPage.goToApp(app.title); + await processServiceTabBarPage.clickProcessButton(); + await processFiltersPage.clickCreateProcessButton(); + await processFiltersPage.clickNewProcessDropdown(); + await startProcessPage.typeProcessDefinition(processModelWithoutSe); + await startProcessPage.checkOptionIsDisplayed(processModelWithoutSe); + await startProcessPage.checkOptionIsNotDisplayed(processModelWithSe); + await startProcessPage.selectOption(processModelWithoutSe); + await startProcessPage.checkStartProcessButtonIsEnabled(); }); - it('[C286509] Should select automatically the processDefinition when the app contains only one', () => { - processServicesPage.goToApp(simpleApp.title); - processServiceTabBarPage.clickProcessButton(); - processFiltersPage.clickCreateProcessButton(); - processFiltersPage.clickNewProcessDropdown(); - expect(startProcessPage.getProcessDefinitionValue()).toBe(simpleApp.title); - startProcessPage.checkStartProcessButtonIsEnabled(); + it('[C286509] Should select automatically the processDefinition when the app contains only one', async () => { + await processServicesPage.goToApp(simpleApp.title); + await processServiceTabBarPage.clickProcessButton(); + await processFiltersPage.clickCreateProcessButton(); + await processFiltersPage.clickNewProcessDropdown(); + await expect(await startProcessPage.getProcessDefinitionValue()).toBe(simpleApp.title); + await startProcessPage.checkStartProcessButtonIsEnabled(); }); - it('[C286511] Should be able to type the process definition and start a process', () => { - processServicesPage.goToApp(app.title); - processServiceTabBarPage.clickProcessButton(); - processFiltersPage.clickCreateProcessButton(); - processFiltersPage.clickNewProcessDropdown(); - startProcessPage.enterProcessName('Type'); - startProcessPage.typeProcessDefinition(processModelWithoutSe); - startProcessPage.selectOption(processModelWithoutSe); - startProcessPage.checkStartProcessButtonIsEnabled(); - expect(startProcessPage.getProcessDefinitionValue()).toBe(processModelWithoutSe); - startProcessPage.clickStartProcessButton(); - processFiltersPage.clickRunningFilterButton(); - processFiltersPage.selectFromProcessList('Type'); + it('[C286511] Should be able to type the process definition and start a process', async () => { + await processServicesPage.goToApp(app.title); + await processServiceTabBarPage.clickProcessButton(); + await processFiltersPage.clickCreateProcessButton(); + await processFiltersPage.clickNewProcessDropdown(); + await startProcessPage.enterProcessName('Type'); + await startProcessPage.typeProcessDefinition(processModelWithoutSe); + await startProcessPage.selectOption(processModelWithoutSe); + await startProcessPage.checkStartProcessButtonIsEnabled(); + await expect(await startProcessPage.getProcessDefinitionValue()).toBe(processModelWithoutSe); + await startProcessPage.clickStartProcessButton(); + await processFiltersPage.clickRunningFilterButton(); + await processFiltersPage.selectFromProcessList('Type'); }); - it('[C286513] Should be able to use down arrow key when navigating throw suggestions', () => { - processServicesPage.goToApp(app.title); - processServiceTabBarPage.clickProcessButton(); - processFiltersPage.clickCreateProcessButton(); - processFiltersPage.clickNewProcessDropdown(); - startProcessPage.typeProcessDefinition('process'); + it('[C286513] Should be able to use down arrow key when navigating throw suggestions', async () => { + await processServicesPage.goToApp(app.title); + await processServiceTabBarPage.clickProcessButton(); + await processFiltersPage.clickCreateProcessButton(); + await processFiltersPage.clickNewProcessDropdown(); + await startProcessPage.typeProcessDefinition('process'); - startProcessPage.pressDownArrowAndEnter(); - expect(startProcessPage.getProcessDefinitionValue()).toBe(processModelWithoutSe); + await startProcessPage.pressDownArrowAndEnter(); + await expect(await startProcessPage.getProcessDefinitionValue()).toBe(processModelWithoutSe); }); - it('[C286514] Should the process definition input be cleared when clicking on options drop down ', () => { - processServicesPage.goToApp(app.title); - processServiceTabBarPage.clickProcessButton(); - processFiltersPage.clickCreateProcessButton(); - processFiltersPage.clickNewProcessDropdown(); - startProcessPage.typeProcessDefinition('process'); - startProcessPage.selectOption(processModelWithoutSe); - expect(startProcessPage.getProcessDefinitionValue()).toBe(processModelWithoutSe); - startProcessPage.clickProcessDropdownArrow(); + it('[C286514] Should the process definition input be cleared when clicking on options drop down ', async () => { + await processServicesPage.goToApp(app.title); + await processServiceTabBarPage.clickProcessButton(); + await processFiltersPage.clickCreateProcessButton(); + await processFiltersPage.clickNewProcessDropdown(); + await startProcessPage.typeProcessDefinition('process'); + await startProcessPage.selectOption(processModelWithoutSe); + await expect(await startProcessPage.getProcessDefinitionValue()).toBe(processModelWithoutSe); + await startProcessPage.clickProcessDropdownArrow(); - expect(startProcessPage.getProcessDefinitionValue()).toBe(''); + await expect(await startProcessPage.getProcessDefinitionValue()).toBe(''); }); - it('[C260453] Should be possible to add a comment on an active process', () => { - processServicesPage.goToApp(app.title); - processServiceTabBarPage.clickProcessButton(); - processFiltersPage.clickCreateProcessButton(); - processFiltersPage.clickNewProcessDropdown(); - startProcessPage.enterProcessName('Comment Process'); - startProcessPage.selectFromProcessDropdown(processModelWithSe); - startProcessPage.clickFormStartProcessButton(); - processFiltersPage.clickRunningFilterButton(); - processFiltersPage.selectFromProcessList('Comment Process'); - processDetailsPage.addComment('comment1'); - processDetailsPage.checkCommentIsDisplayed('comment1'); + it('[C260453] Should be possible to add a comment on an active process', async () => { + await processServicesPage.goToApp(app.title); + await processServiceTabBarPage.clickProcessButton(); + await processFiltersPage.clickCreateProcessButton(); + await processFiltersPage.clickNewProcessDropdown(); + await startProcessPage.enterProcessName('Comment Process'); + await startProcessPage.selectFromProcessDropdown(processModelWithSe); + await startProcessPage.clickFormStartProcessButton(); + await processFiltersPage.clickRunningFilterButton(); + await processFiltersPage.selectFromProcessList('Comment Process'); + await processDetailsPage.addComment('comment1'); + await processDetailsPage.checkCommentIsDisplayed('comment1'); }); - it('[C260454] Should be possible to download audit log file', () => { - processServicesPage.goToApp(app.title); - processServiceTabBarPage.clickProcessButton(); - processFiltersPage.clickCreateProcessButton(); - processFiltersPage.clickNewProcessDropdown(); - startProcessPage.enterProcessName('Audit Log'); - startProcessPage.selectFromProcessDropdown(processModelWithSe); - startProcessPage.clickFormStartProcessButton(); - processFiltersPage.clickRunningFilterButton(); - processFiltersPage.selectFromProcessList('Audit Log'); - processDetailsPage.clickAuditLogButton(); + it('[C260454] Should be possible to download audit log file', async () => { + await processServicesPage.goToApp(app.title); + await processServiceTabBarPage.clickProcessButton(); + await processFiltersPage.clickCreateProcessButton(); + await processFiltersPage.clickNewProcessDropdown(); + await startProcessPage.enterProcessName('Audit Log'); + await startProcessPage.selectFromProcessDropdown(processModelWithSe); + await startProcessPage.clickFormStartProcessButton(); + await processFiltersPage.clickRunningFilterButton(); + await processFiltersPage.selectFromProcessList('Audit Log'); + await processDetailsPage.clickAuditLogButton(); - expect(Util.fileExists(auditLogFile, 15)).toBe(true); + await expect(await FileBrowserUtil.isFileDownloaded(auditLogFile)).toBe(true); }); - it('Should be able to attach a file using the button', () => { - processServicesPage.goToApp(app.title); + it('Should be able to attach a file using the button', async () => { + await processServicesPage.goToApp(app.title); - processServiceTabBarPage.clickProcessButton(); + await processServiceTabBarPage.clickProcessButton(); - processFiltersPage.clickCreateProcessButton(); - processFiltersPage.clickNewProcessDropdown(); + await processFiltersPage.clickCreateProcessButton(); + await processFiltersPage.clickNewProcessDropdown(); - startProcessPage.enterProcessName('Attach File'); - startProcessPage.selectFromProcessDropdown(processModelWithSe); - startProcessPage.clickFormStartProcessButton(); + await startProcessPage.enterProcessName('Attach File'); + await startProcessPage.selectFromProcessDropdown(processModelWithSe); + await startProcessPage.clickFormStartProcessButton(); - processFiltersPage.clickRunningFilterButton(); - processFiltersPage.selectFromProcessList('Attach File'); + await processFiltersPage.clickRunningFilterButton(); + await processFiltersPage.selectFromProcessList('Attach File'); - attachmentListPage.clickAttachFileButton(jpgFile.location); - attachmentListPage.checkFileIsAttached(jpgFile.name); + await attachmentListPage.clickAttachFileButton(jpgFile.location); + await attachmentListPage.checkFileIsAttached(jpgFile.name); }); - it('[C260451] Should be possible to display process diagram', () => { - processServicesPage.goToApp(app.title); + it('[C260451] Should be possible to display process diagram', async () => { + await processServicesPage.goToApp(app.title); - processServiceTabBarPage.clickProcessButton(); + await processServiceTabBarPage.clickProcessButton(); - processFiltersPage.clickCreateProcessButton(); - processFiltersPage.clickNewProcessDropdown(); + await processFiltersPage.clickCreateProcessButton(); + await processFiltersPage.clickNewProcessDropdown(); - startProcessPage.enterProcessName('Show Diagram'); - startProcessPage.selectFromProcessDropdown(processModelWithSe); - startProcessPage.clickFormStartProcessButton(); + await startProcessPage.enterProcessName('Show Diagram'); + await startProcessPage.selectFromProcessDropdown(processModelWithSe); + await startProcessPage.clickFormStartProcessButton(); - processFiltersPage.clickRunningFilterButton(); - processFiltersPage.selectFromProcessList('Show Diagram'); + await processFiltersPage.clickRunningFilterButton(); + await processFiltersPage.selectFromProcessList('Show Diagram'); - processDetailsPage.clickShowDiagram(); + await processDetailsPage.clickShowDiagram(); }); - it('[C260452] Should redirect user when clicking on active/completed task', () => { - processServicesPage.goToApp(app.title); - processServiceTabBarPage.clickProcessButton(); - processFiltersPage.clickCreateProcessButton(); - processFiltersPage.clickNewProcessDropdown(); - startProcessPage.enterProcessName('Active Task'); - startProcessPage.selectFromProcessDropdown(processModelWithSe); - startProcessPage.clickFormStartProcessButton(); - processFiltersPage.clickRunningFilterButton(); - processFiltersPage.selectFromProcessList('Active Task'); - processDetailsPage.clickOnActiveTask(); - processDetailsPage.checkActiveTaskTitleIsDisplayed(); + it('[C260452] Should redirect user when clicking on active/completed task', async () => { + await processServicesPage.goToApp(app.title); + await processServiceTabBarPage.clickProcessButton(); + await processFiltersPage.clickCreateProcessButton(); + await processFiltersPage.clickNewProcessDropdown(); + await startProcessPage.enterProcessName('Active Task'); + await startProcessPage.selectFromProcessDropdown(processModelWithSe); + await startProcessPage.clickFormStartProcessButton(); + await processFiltersPage.clickRunningFilterButton(); + await processFiltersPage.selectFromProcessList('Active Task'); + await processDetailsPage.clickOnActiveTask(); + await processDetailsPage.checkActiveTaskTitleIsDisplayed(); }); it('[C260457] Should display process in Completed when cancelled', async () => { await loginPage.loginToProcessServicesUsingUserModel(secondProcUserModel); - navigationBarPage.navigateToProcessServicesPage(); - processServicesPage.checkApsContainer(); - processServicesPage.goToApp(app.title); - processServiceTabBarPage.clickProcessButton(); - processFiltersPage.clickCreateProcessButton(); - processFiltersPage.clickNewProcessDropdown(); - startProcessPage.enterProcessName('Cancel Process'); - startProcessPage.selectFromProcessDropdown(processModelWithSe); - startProcessPage.clickFormStartProcessButton(); - processFiltersPage.clickRunningFilterButton(); - processFiltersPage.selectFromProcessList('Cancel Process'); - processDetailsPage.clickCancelProcessButton(); - processFiltersPage.clickCompletedFilterButton(); - processFiltersPage.selectFromProcessList('Cancel Process'); - processDetailsPage.checkShowDiagramIsDisabled(); + await navigationBarPage.navigateToProcessServicesPage(); + await processServicesPage.checkApsContainer(); + await processServicesPage.goToApp(app.title); + await processServiceTabBarPage.clickProcessButton(); + await processFiltersPage.clickCreateProcessButton(); + await processFiltersPage.clickNewProcessDropdown(); + await startProcessPage.enterProcessName('Cancel Process'); + await startProcessPage.selectFromProcessDropdown(processModelWithSe); + await startProcessPage.clickFormStartProcessButton(); + await processFiltersPage.clickRunningFilterButton(); + await processFiltersPage.selectFromProcessList('Cancel Process'); + await processDetailsPage.clickCancelProcessButton(); + await processFiltersPage.clickCompletedFilterButton(); + await processFiltersPage.selectFromProcessList('Cancel Process'); + await processDetailsPage.checkShowDiagramIsDisabled(); }); - it('[C260461] Should be possible to add a comment on a completed/canceled process', () => { - processServicesPage.goToApp(app.title); - processServiceTabBarPage.clickProcessButton(); - processFiltersPage.clickCreateProcessButton(); - processFiltersPage.clickNewProcessDropdown(); - startProcessPage.enterProcessName('Comment Process 2'); - startProcessPage.selectFromProcessDropdown(processModelWithSe); - startProcessPage.clickFormStartProcessButton(); - processFiltersPage.clickRunningFilterButton(); - processFiltersPage.selectFromProcessList('Comment Process 2'); - processDetailsPage.clickCancelProcessButton(); - processFiltersPage.clickCompletedFilterButton(); - processFiltersPage.selectFromProcessList('Comment Process 2'); - processDetailsPage.addComment('goodbye'); - processDetailsPage.checkCommentIsDisplayed('goodbye'); + it('[C260461] Should be possible to add a comment on a completed/canceled process', async () => { + await processServicesPage.goToApp(app.title); + await processServiceTabBarPage.clickProcessButton(); + await processFiltersPage.clickCreateProcessButton(); + await processFiltersPage.clickNewProcessDropdown(); + await startProcessPage.enterProcessName('Comment Process 2'); + await startProcessPage.selectFromProcessDropdown(processModelWithSe); + await startProcessPage.clickFormStartProcessButton(); + await processFiltersPage.clickRunningFilterButton(); + await processFiltersPage.selectFromProcessList('Comment Process 2'); + await processDetailsPage.clickCancelProcessButton(); + await processFiltersPage.clickCompletedFilterButton(); + await processFiltersPage.selectFromProcessList('Comment Process 2'); + await processDetailsPage.addComment('goodbye'); + await processDetailsPage.checkCommentIsDisplayed('goodbye'); }); - it('[C260467] Should NOT be possible to attach a file on a completed process', () => { - processServicesPage.goToApp(app.title); - processServiceTabBarPage.clickProcessButton(); - processFiltersPage.clickCreateProcessButton(); - processFiltersPage.clickNewProcessDropdown(); - startProcessPage.enterProcessName('File'); - startProcessPage.selectFromProcessDropdown(processModelWithSe); - startProcessPage.clickFormStartProcessButton(); - processFiltersPage.clickRunningFilterButton(); - processFiltersPage.selectFromProcessList('File'); - processDetailsPage.clickCancelProcessButton(); - processFiltersPage.clickCompletedFilterButton(); - processFiltersPage.selectFromProcessList('File'); - attachmentListPage.checkAttachFileButtonIsNotDisplayed(); + it('[C260467] Should NOT be possible to attach a file on a completed process', async () => { + await processServicesPage.goToApp(app.title); + await processServiceTabBarPage.clickProcessButton(); + await processFiltersPage.clickCreateProcessButton(); + await processFiltersPage.clickNewProcessDropdown(); + await startProcessPage.enterProcessName('File'); + await startProcessPage.selectFromProcessDropdown(processModelWithSe); + await startProcessPage.clickFormStartProcessButton(); + await processFiltersPage.clickRunningFilterButton(); + await processFiltersPage.selectFromProcessList('File'); + await processDetailsPage.clickCancelProcessButton(); + await processFiltersPage.clickCompletedFilterButton(); + await processFiltersPage.selectFromProcessList('File'); + await attachmentListPage.checkAttachFileButtonIsNotDisplayed(); }); - it('[C291781] Should be displayed an error message if process name exceed 255 characters', () => { - processServicesPage.goToApp(app.title); + it('[C291781] Should be displayed an error message if process name exceed 255 characters', async () => { + await processServicesPage.goToApp(app.title); - processServiceTabBarPage.clickProcessButton(); + await processServiceTabBarPage.clickProcessButton(); - processFiltersPage.clickCreateProcessButton(); - processFiltersPage.clickNewProcessDropdown(); + await processFiltersPage.clickCreateProcessButton(); + await processFiltersPage.clickNewProcessDropdown(); - startProcessPage.enterProcessName(processName255Characters); - startProcessPage.selectFromProcessDropdown(processModelWithoutSe); - startProcessPage.checkStartProcessButtonIsEnabled(); + await startProcessPage.enterProcessName(processName255Characters); + await startProcessPage.selectFromProcessDropdown(processModelWithoutSe); + await startProcessPage.checkStartProcessButtonIsEnabled(); - startProcessPage.enterProcessName(processNameBiggerThen255Characters); - startProcessPage.checkValidationErrorIsDisplayed(lengthValidationError); - startProcessPage.checkStartProcessButtonIsDisabled(); + await startProcessPage.enterProcessName(processNameBiggerThen255Characters); + await startProcessPage.checkValidationErrorIsDisplayed(lengthValidationError); + await startProcessPage.checkStartProcessButtonIsDisabled(); }); - it('[C261039] Advanced date time widget', () => { - processServicesPage.goToApp(dateFormApp.title); - processServiceTabBarPage.clickProcessButton(); - processFiltersPage.clickCreateProcessButton(); - processFiltersPage.clickNewProcessDropdown(); - startProcessPage.enterProcessName('DateFormProcess'); - startProcessPage.formFields().checkWidgetIsVisible('testdate'); - widget.dateWidget().setDateInput('testdate', '15-7-2019'); - startProcessPage.checkStartFormProcessButtonIsEnabled(); - startProcessPage.clickFormStartProcessButton(); + it('[C261039] Advanced date time widget', async () => { + await processServicesPage.goToApp(dateFormApp.title); + await processServiceTabBarPage.clickProcessButton(); + await processFiltersPage.clickCreateProcessButton(); + await processFiltersPage.clickNewProcessDropdown(); + await startProcessPage.enterProcessName('DateFormProcess'); + await startProcessPage.formFields().checkWidgetIsVisible('testdate'); + await widget.dateWidget().setDateInput('testdate', '15-7-2019'); + await startProcessPage.checkStartFormProcessButtonIsEnabled(); + await startProcessPage.clickFormStartProcessButton(); - processFiltersPage.clickRunningFilterButton(); - processFiltersPage.selectFromProcessList('DateFormProcess'); - processDetailsPage.clickOnStartForm(); - startProcessDialog.checkStartProcessDialogIsDisplayed(); - expect(startProcessDialog.getTitle()).toBe('Start Form'); - expect(widget.dateWidget().getDateInput('testdate')).toBe('15-7-2019'); - startProcessDialog.clickCloseButton(); - startProcessDialog.checkStartProcessDialogIsNotDisplayed(); + await processFiltersPage.clickRunningFilterButton(); + await processFiltersPage.selectFromProcessList('DateFormProcess'); + await processDetailsPage.clickOnStartForm(); + await startProcessDialog.checkStartProcessDialogIsDisplayed(); + await expect(await startProcessDialog.getTitle()).toBe('Start Form'); + await expect(await (await widget.dateWidget()).getDateInput('testdate')).toBe('15-7-2019'); + await startProcessDialog.clickCloseButton(); + await startProcessDialog.checkStartProcessDialogIsNotDisplayed(); }); }); }); diff --git a/e2e/process-services/start-task-custom-app.e2e.ts b/e2e/process-services/start-task-custom-app.e2e.ts index 563343e040..87817a0f23 100644 --- a/e2e/process-services/start-task-custom-app.e2e.ts +++ b/e2e/process-services/start-task-custom-app.e2e.ts @@ -57,7 +57,7 @@ describe('Start Task - Custom App', () => { 'name': resources.Files.ADF_DOCUMENTS.PNG.file_name }); - beforeAll(async (done) => { + beforeAll(async () => { const apps = new AppsActions(); const users = new UsersActions(); @@ -80,206 +80,191 @@ describe('Start Task - Custom App', () => { await loginPage.loginToProcessServicesUsingUserModel(processUserModel); - done(); }); - it('[C263942] Should be possible to modify a task', () => { - navigationBarPage.navigateToProcessServicesPage() - .goToApp(appModel.name) - .clickTasksButton(); + it('[C263942] Should be possible to modify a task', async () => { + await (await (await navigationBarPage.navigateToProcessServicesPage()).goToApp(appModel.name)).clickTasksButton(); - taskPage + await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); + + const task = await taskPage.createNewTask(); + await task.addName(tasks[0]); + await task.addForm(app.formName); + await task.clickStartButton(); + + await taskPage + .tasksListPage() + .checkContentIsDisplayed(tasks[0]); + + const taskDetails = await taskPage.taskDetails(); + + await taskDetails.clickInvolvePeopleButton(); + await taskDetails.typeUser(assigneeUserModel.firstName + ' ' + assigneeUserModel.lastName); + await taskDetails.selectUserToInvolve(assigneeUserModel.firstName + ' ' + assigneeUserModel.lastName); + await taskDetails.checkUserIsSelected(assigneeUserModel.firstName + ' ' + assigneeUserModel.lastName); + + await taskDetails.clickAddInvolvedUserButton(); + + await expect(await taskPage.taskDetails().getInvolvedUserEmail(assigneeUserModel.firstName + ' ' + assigneeUserModel.lastName) + ).toEqual(assigneeUserModel.email); + + await taskDetails.selectActivityTab(); + await taskDetails.addComment(firstComment); + await taskDetails.checkCommentIsDisplayed(firstComment); + + const checklistDialog = await taskPage.clickOnAddChecklistButton(); + await checklistDialog.addName(firstChecklist); + await checklistDialog.clickCreateChecklistButton(); + + await taskPage + .checkChecklistIsDisplayed(firstChecklist); + + await taskPage + .taskDetails() + .selectDetailsTab(); + }); + + it('[C263947] Should be able to start a task without form', async () => { + await (await (await navigationBarPage.navigateToProcessServicesPage()).goToApp(appModel.name)).clickTasksButton(); + + await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); + + await taskPage .filtersPage() .goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); - taskPage - .createNewTask() - .addName(tasks[0]) - .addForm(app.formName).clickStartButton() - .then(() => { - taskPage - .tasksListPage() - .checkContentIsDisplayed(tasks[0]); + const task = await taskPage.createNewTask(); - taskPage - .taskDetails() - .clickInvolvePeopleButton() - .typeUser(assigneeUserModel.firstName + ' ' + assigneeUserModel.lastName) - .selectUserToInvolve(assigneeUserModel.firstName + ' ' + assigneeUserModel.lastName) - .checkUserIsSelected(assigneeUserModel.firstName + ' ' + assigneeUserModel.lastName); + await task.addName(tasks[2]); + await task.clickStartButton(); - taskPage - .taskDetails() - .clickAddInvolvedUserButton(); - - expect(taskPage.taskDetails().getInvolvedUserEmail(assigneeUserModel.firstName + ' ' + assigneeUserModel.lastName)).toEqual(assigneeUserModel.email); - - taskPage - .taskDetails() - .selectActivityTab() - .addComment(firstComment) - .checkCommentIsDisplayed(firstComment); - - taskPage - .clickOnAddChecklistButton() - .addName(firstChecklist) - .clickCreateChecklistButton(); - - taskPage - .checkChecklistIsDisplayed(firstChecklist); - - taskPage - .taskDetails() - .selectDetailsTab(); - }); - }); - - it('[C263947] Should be able to start a task without form', () => { - navigationBarPage.navigateToProcessServicesPage() - .goToApp(appModel.name) - .clickTasksButton(); - - taskPage - .filtersPage() - .goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); - - taskPage - .createNewTask() - .addName(tasks[2]) - .clickStartButton(); - - taskPage + await taskPage .tasksListPage() .checkContentIsDisplayed(tasks[2]); - taskPage + await taskPage .formFields() .noFormIsDisplayed(); - expect(taskPage.taskDetails().getFormName()).toEqual(CONSTANTS.TASK_DETAILS.NO_FORM); + await expect(await taskPage.taskDetails().getFormName()).toEqual(CONSTANTS.TASK_DETAILS.NO_FORM); }); - it('[C263948] Should be possible to cancel a task', () => { - navigationBarPage.navigateToProcessServicesPage() - .goToApp(appModel.name) - .clickTasksButton(); + it('[C263948] Should be possible to cancel a task', async () => { + await (await (await navigationBarPage.navigateToProcessServicesPage()).goToApp(appModel.name)).clickTasksButton(); - taskPage - .filtersPage() - .goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); + await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); - taskPage - .createNewTask() - .addName(tasks[3]) - .checkStartButtonIsEnabled() - .clickCancelButton(); + const task = await taskPage.createNewTask(); + await task.addName(tasks[3]); + await task.checkStartButtonIsEnabled(); + await task.clickCancelButton(); - taskPage.tasksListPage() - .checkContentIsNotDisplayed(tasks[3]); + await taskPage.tasksListPage().checkContentIsNotDisplayed(tasks[3]); - expect(taskPage.filtersPage().getActiveFilter()).toEqual(CONSTANTS.TASK_FILTERS.MY_TASKS); + await expect(await taskPage.filtersPage().getActiveFilter()).toEqual(CONSTANTS.TASK_FILTERS.MY_TASKS); }); - it('[C263949] Should be possible to save filled form', () => { - navigationBarPage.navigateToProcessServicesPage().goToApp(appModel.name).clickTasksButton(); - taskPage.filtersPage() + it('[C263949] Should be possible to save filled form', async () => { + await (await (await navigationBarPage.navigateToProcessServicesPage()).goToApp(appModel.name)).clickTasksButton(); + await taskPage.filtersPage() .goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); - taskPage.createNewTask() - .addForm(app.formName) - .addName(tasks[4]) - .clickStartButton(); + const task = await taskPage.createNewTask(); - taskPage + await task.addForm(app.formName); + await task.addName(tasks[4]); + await task.clickStartButton(); + + await taskPage .tasksListPage() .checkContentIsDisplayed(tasks[4]); - expect(taskPage.formFields() - .setFieldValue(by.id, formTextField, formFieldValue) - .getFieldValue(formTextField)).toEqual(formFieldValue); + await taskPage.formFields() + .setFieldValue(by.id, formTextField, formFieldValue); - taskPage + await taskPage .formFields() - .refreshForm() - .checkFieldValue(by.id, formTextField, ''); + .refreshForm(); - taskPage + await taskPage + .formFields().checkFieldValue(by.id, formTextField, ''); + + await taskPage .tasksListPage() .checkContentIsDisplayed(tasks[4]); - taskPage + await taskPage .formFields() - .setFieldValue(by.id, formTextField, formFieldValue) - .checkFieldValue(by.id, formTextField, formFieldValue); + .setFieldValue(by.id, formTextField, formFieldValue); - taskPage + await taskPage.formFields().checkFieldValue(by.id, formTextField, formFieldValue); + + await taskPage .formFields() - .saveForm() - .checkFieldValue(by.id, formTextField, formFieldValue); + .saveForm(); + + await taskPage.formFields().checkFieldValue(by.id, formTextField, formFieldValue); }); - it('[C263951] Should be possible to assign a user', () => { - navigationBarPage.navigateToProcessServicesPage().goToApp(appModel.name).clickTasksButton(); - taskPage - .filtersPage() - .goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); + it('[C263951] Should be possible to assign a user', async () => { + await (await (await navigationBarPage.navigateToProcessServicesPage()).goToApp(appModel.name)).clickTasksButton(); + await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); - taskPage - .createNewTask() - .addName(tasks[5]) - .addAssignee(assigneeUserModel.firstName) - .clickStartButton(); + const task = await taskPage.createNewTask(); + await task.addName(tasks[5]); + await task.addAssignee(assigneeUserModel.firstName); + await task.clickStartButton(); - taskPage + await taskPage .tasksListPage() .checkTaskListIsLoaded(); - taskPage + await taskPage .tasksListPage() .getDataTable().waitForTableBody(); - taskPage - .filtersPage() + await taskPage.filtersPage() .goToFilter(CONSTANTS.TASK_FILTERS.INV_TASKS); - taskPage.tasksListPage() + await taskPage.tasksListPage() .checkContentIsDisplayed(tasks[5]); - taskPage.tasksListPage().selectRow(tasks[5]); + await taskPage.tasksListPage().selectRow(tasks[5]); - taskPage.checkTaskTitle(tasks[5]); + await taskPage.checkTaskTitle(tasks[5]); - expect(taskPage.taskDetails().getAssignee()).toEqual(assigneeUserModel.firstName + ' ' + assigneeUserModel.lastName); + await expect(await taskPage.taskDetails().getAssignee()).toEqual(assigneeUserModel.firstName + ' ' + assigneeUserModel.lastName); }); - it('Attach a file', () => { - navigationBarPage.navigateToProcessServicesPage().goToApp(appModel.name).clickTasksButton(); - taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); - taskPage - .createNewTask() - .addName(tasks[6]) - .clickStartButton(); + it('Attach a file', async () => { + await (await (await navigationBarPage.navigateToProcessServicesPage()).goToApp(appModel.name)).clickTasksButton(); + await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); + const task = await taskPage.createNewTask(); + await task.addName(tasks[6]); + await task.clickStartButton(); - attachmentListPage.clickAttachFileButton(pngFile.location); - attachmentListPage.checkFileIsAttached(pngFile.name); + await attachmentListPage.clickAttachFileButton(pngFile.location); + await attachmentListPage.checkFileIsAttached(pngFile.name); }); - it('[C263945] Should Information box be hidden when showHeaderContent property is set on false on custom app', () => { - navigationBarPage.navigateToProcessServicesPage().goToApp(appModel.name).clickTasksButton(); - taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); - taskPage.createNewTask().addName(showHeaderTask).clickStartButton(); - taskPage.tasksListPage().checkContentIsDisplayed(showHeaderTask); + it('[C263945] Should Information box be hidden when showHeaderContent property is set on false on custom app', async () => { + await (await (await navigationBarPage.navigateToProcessServicesPage()).goToApp(appModel.name)).clickTasksButton(); + await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); + const task = await taskPage.createNewTask(); + await task.addName(showHeaderTask); + await task.clickStartButton(); + await taskPage.tasksListPage().checkContentIsDisplayed(showHeaderTask); - processServiceTabBarPage.clickSettingsButton(); - taskPage.taskDetails().appSettingsToggles().disableShowHeader(); - processServiceTabBarPage.clickTasksButton(); + await processServiceTabBarPage.clickSettingsButton(); + await taskPage.taskDetails().appSettingsToggles().disableShowHeader(); + await processServiceTabBarPage.clickTasksButton(); - taskPage.taskDetails().taskInfoDrawerIsNotDisplayed(); + await taskPage.taskDetails().taskInfoDrawerIsNotDisplayed(); - processServiceTabBarPage.clickSettingsButton(); - taskPage.taskDetails().appSettingsToggles().enableShowHeader(); - processServiceTabBarPage.clickTasksButton(); + await processServiceTabBarPage.clickSettingsButton(); + await taskPage.taskDetails().appSettingsToggles().enableShowHeader(); + await processServiceTabBarPage.clickTasksButton(); - taskPage.taskDetails().taskInfoDrawerIsDisplayed(); + await taskPage.taskDetails().taskInfoDrawerIsDisplayed(); }); }); diff --git a/e2e/process-services/start-task-task-app.e2e.ts b/e2e/process-services/start-task-task-app.e2e.ts index 8aaa6288bc..4f21d9e4f5 100644 --- a/e2e/process-services/start-task-task-app.e2e.ts +++ b/e2e/process-services/start-task-task-app.e2e.ts @@ -36,6 +36,7 @@ import { UsersActions } from '../actions/users.actions'; import { StringUtil } from '@alfresco/adf-testing'; import fs = require('fs'); import path = require('path'); +import { ChecklistDialog } from '../pages/adf/process-services/dialog/createChecklistDialog'; describe('Start Task - Task App', () => { @@ -60,7 +61,7 @@ describe('Start Task - Task App', () => { 'name': resources.Files.ADF_DOCUMENTS.JPG.file_name }); - beforeAll(async (done) => { + beforeAll(async () => { const users = new UsersActions(); this.alfrescoJsApi = new AlfrescoApi({ @@ -87,97 +88,125 @@ describe('Start Task - Task App', () => { await loginPage.loginToProcessServicesUsingUserModel(processUserModel); - done(); }); - beforeEach(async (done) => { - navigationBarPage.navigateToProcessServicesPage().goToTaskApp(); - taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); + beforeEach(async () => { + await (await navigationBarPage.navigateToProcessServicesPage()).goToTaskApp(); + await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); - done(); }); - it('[C260383] Should be possible to modify a task', () => { - taskPage.createNewTask().addName(tasks[0]) - .addForm(app.formName).clickStartButton(); - taskPage.tasksListPage().checkContentIsDisplayed(tasks[0]); - taskPage.taskDetails().clickInvolvePeopleButton() - .typeUser(assigneeUserModel.firstName + ' ' + assigneeUserModel.lastName) - .selectUserToInvolve(assigneeUserModel.firstName + ' ' + assigneeUserModel.lastName) - .checkUserIsSelected(assigneeUserModel.firstName + ' ' + assigneeUserModel.lastName); - taskPage.taskDetails().clickAddInvolvedUserButton(); - expect(taskPage.taskDetails().getInvolvedUserEmail(assigneeUserModel.firstName + ' ' + assigneeUserModel.lastName)) + it('[C260383] Should be possible to modify a task', async () => { + const task = await taskPage.createNewTask(); + await task.addName(tasks[0]); + await task.addForm(app.formName); + await task.clickStartButton(); + await taskPage.tasksListPage().checkContentIsDisplayed(tasks[0]); + const taskDetails = await taskPage.taskDetails(); + await taskDetails.clickInvolvePeopleButton(); + await taskDetails.typeUser(assigneeUserModel.firstName + ' ' + assigneeUserModel.lastName); + await taskDetails.selectUserToInvolve(assigneeUserModel.firstName + ' ' + assigneeUserModel.lastName); + await taskDetails.checkUserIsSelected(assigneeUserModel.firstName + ' ' + assigneeUserModel.lastName); + + await taskPage.taskDetails().clickAddInvolvedUserButton(); + + await expect(await taskPage.taskDetails().getInvolvedUserEmail(assigneeUserModel.firstName + ' ' + assigneeUserModel.lastName)) .toEqual(assigneeUserModel.email); - taskPage.taskDetails().selectActivityTab().addComment(firstComment) - .checkCommentIsDisplayed(firstComment); - taskPage.clickOnAddChecklistButton().addName(firstChecklist).clickCreateChecklistButton(); - taskPage.checkChecklistIsDisplayed(firstChecklist); - taskPage.taskDetails().selectDetailsTab(); + + await taskDetails.selectActivityTab(); + await taskDetails.addComment(firstComment); + await taskDetails.checkCommentIsDisplayed(firstComment); + + await (await taskPage.clickOnAddChecklistButton()).addName(firstChecklist); + + const checklistDialog = new ChecklistDialog(); + await checklistDialog.clickCreateChecklistButton(); + + await taskPage.checkChecklistIsDisplayed(firstChecklist); + await taskPage.taskDetails().selectDetailsTab(); }); - it('[C260422] Should be possible to cancel a task', () => { - taskPage.createNewTask().addName(tasks[3]) - .checkStartButtonIsEnabled().clickCancelButton(); - taskPage.tasksListPage().checkContentIsNotDisplayed(tasks[3]); - expect(taskPage.filtersPage().getActiveFilter()).toEqual(CONSTANTS.TASK_FILTERS.MY_TASKS); + it('[C260422] Should be possible to cancel a task', async () => { + const task = await taskPage.createNewTask(); + + await task.addName(tasks[3]); + await task.checkStartButtonIsEnabled(); + await task.clickCancelButton(); + + await taskPage.tasksListPage().checkContentIsNotDisplayed(tasks[3]); + await expect(await taskPage.filtersPage().getActiveFilter()).toEqual(CONSTANTS.TASK_FILTERS.MY_TASKS); }); - it('[C260423] Should be possible to save filled form', () => { - taskPage.createNewTask() - .addForm(app.formName).addName(tasks[4]).clickStartButton(); - taskPage.tasksListPage().checkContentIsDisplayed(tasks[4]); - expect(taskPage.formFields().setFieldValue(by.id, formTextField, formFieldValue) - .getFieldValue(formTextField)).toEqual(formFieldValue); - taskPage.formFields().refreshForm().checkFieldValue(by.id, formTextField, ''); - taskPage.tasksListPage().checkContentIsDisplayed(tasks[4]); - taskPage.formFields().setFieldValue(by.id, formTextField, formFieldValue) - .checkFieldValue(by.id, formTextField, formFieldValue); - taskPage.formFields().saveForm().checkFieldValue(by.id, formTextField, formFieldValue); + it('[C260423] Should be possible to save filled form', async () => { + const task = await taskPage.createNewTask(); + await task.addForm(app.formName); + await task.addName(tasks[4]); + await task.clickStartButton(); + + await taskPage.tasksListPage().checkContentIsDisplayed(tasks[4]); + + const formFields = await taskPage.formFields(); + await formFields.setFieldValue(by.id, formTextField, formFieldValue); + + await formFields.refreshForm(); + await formFields.checkFieldValue(by.id, formTextField, ''); + await taskPage.tasksListPage().checkContentIsDisplayed(tasks[4]); + + await formFields.setFieldValue(by.id, formTextField, formFieldValue); + await formFields.checkFieldValue(by.id, formTextField, formFieldValue); + + await taskPage.formFields().saveForm(); + await formFields.checkFieldValue(by.id, formTextField, formFieldValue); }); - it('[C260425] Should be possible to assign a user', () => { - taskPage.createNewTask() - .addName(tasks[5]) - .addAssignee(assigneeUserModel.firstName) - .clickStartButton(); + it('[C260425] Should be possible to assign a user', async () => { + const task = await taskPage.createNewTask(); + await task.addName(tasks[5]); + await task.addAssignee(assigneeUserModel.firstName); + await task.clickStartButton(); - taskPage.tasksListPage().checkTaskListIsLoaded(); - taskPage.tasksListPage().getDataTable().waitForTableBody(); - taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.INV_TASKS); - taskPage.tasksListPage().checkContentIsDisplayed(tasks[5]); - taskPage.tasksListPage().selectRow(tasks[5]); - taskPage.checkTaskTitle(tasks[5]); - expect(taskPage.taskDetails().getAssignee()).toEqual(assigneeUserModel.firstName + ' ' + assigneeUserModel.lastName); + await taskPage.tasksListPage().checkTaskListIsLoaded(); + await taskPage.tasksListPage().getDataTable().waitForTableBody(); + await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.INV_TASKS); + await taskPage.tasksListPage().checkContentIsDisplayed(tasks[5]); + await taskPage.tasksListPage().selectRow(tasks[5]); + await taskPage.checkTaskTitle(tasks[5]); + await expect(await taskPage.taskDetails().getAssignee()).toEqual(assigneeUserModel.firstName + ' ' + assigneeUserModel.lastName); }); - it('Attach a file', () => { - taskPage.createNewTask().addName(tasks[6]).clickStartButton(); - attachmentListPage.clickAttachFileButton(jpgFile.location); - attachmentListPage.checkFileIsAttached(jpgFile.name); + it('Attach a file', async () => { + const startTaskDialog = await taskPage.createNewTask(); + await startTaskDialog.addName(tasks[6]); + await startTaskDialog.clickStartButton(); + await attachmentListPage.clickAttachFileButton(jpgFile.location); + await attachmentListPage.checkFileIsAttached(jpgFile.name); }); - it('[C260420] Should Information box be hidden when showHeaderContent property is set on false', () => { - taskPage.tasksListPage().checkContentIsDisplayed(showHeaderTask); + it('[C260420] Should Information box be hidden when showHeaderContent property is set on false', async () => { + await taskPage.tasksListPage().checkContentIsDisplayed(showHeaderTask); - processServiceTabBarPage.clickSettingsButton(); - taskPage.taskDetails().appSettingsToggles().disableShowHeader(); - processServiceTabBarPage.clickTasksButton(); + await processServiceTabBarPage.clickSettingsButton(); + await taskPage.taskDetails().appSettingsToggles().disableShowHeader(); + await processServiceTabBarPage.clickTasksButton(); - taskPage.taskDetails().taskInfoDrawerIsNotDisplayed(); + await taskPage.taskDetails().taskInfoDrawerIsNotDisplayed(); - processServiceTabBarPage.clickSettingsButton(); - taskPage.taskDetails().appSettingsToggles().enableShowHeader(); - processServiceTabBarPage.clickTasksButton(); + await processServiceTabBarPage.clickSettingsButton(); + await taskPage.taskDetails().appSettingsToggles().enableShowHeader(); + await processServiceTabBarPage.clickTasksButton(); - taskPage.taskDetails().taskInfoDrawerIsDisplayed(); + await taskPage.taskDetails().taskInfoDrawerIsDisplayed(); }); - it('[C291780] Should be displayed an error message if task name exceed 255 characters', () => { - const startDialog = taskPage.createNewTask().addName(taskName255Characters).checkStartButtonIsEnabled(); - startDialog.addName(taskNameBiggerThen255Characters) - .blur(startDialog.name) - .checkValidationErrorIsDisplayed(lengthValidationError) - .checkStartButtonIsDisabled(); + it('[C291780] Should be displayed an error message if task name exceed 255 characters', async () => { + const startDialog = await taskPage.createNewTask(); + await startDialog.addName(taskName255Characters); + + await startDialog.checkStartButtonIsEnabled(); + await startDialog.addName(taskNameBiggerThen255Characters); + await startDialog.blur(startDialog.name); + await startDialog.checkValidationErrorIsDisplayed(lengthValidationError); + await startDialog.checkStartButtonIsDisabled(); }); diff --git a/e2e/process-services/task-attachmentList-actionMenu.e2e.ts b/e2e/process-services/task-attachmentList-actionMenu.e2e.ts index 4a0d1154a9..b2f5cd1035 100644 --- a/e2e/process-services/task-attachmentList-actionMenu.e2e.ts +++ b/e2e/process-services/task-attachmentList-actionMenu.e2e.ts @@ -17,7 +17,7 @@ import { browser } from 'protractor'; -import { LoginPage } from '@alfresco/adf-testing'; +import { LoginPage, FileBrowserUtil } from '@alfresco/adf-testing'; import { NavigationBarPage } from '../pages/adf/navigationBarPage'; import { TasksPage } from '../pages/adf/process-services/tasksPage'; import { AttachmentListPage } from '../pages/adf/process-services/attachmentListPage'; @@ -26,7 +26,6 @@ import { ViewerPage } from '../pages/adf/viewerPage'; import CONSTANTS = require('../util/constants'); import resources = require('../util/resources'); -import { Util } from '../util/util'; import path = require('path'); import fs = require('fs'); @@ -48,7 +47,7 @@ describe('Attachment list action menu for tasks', () => { location: resources.Files.ADF_DOCUMENTS.PNG.file_location, name: resources.Files.ADF_DOCUMENTS.PNG.file_name }); - const downloadedPngFile = path.join(__dirname, 'downloads', pngFile.name); + const downloadedPngFile = pngFile.name; let tenantId, appId, relatedContent, relatedContentId; const taskName = { active: 'Active Task', @@ -57,7 +56,7 @@ describe('Attachment list action menu for tasks', () => { emptyList: 'Empty List' }; - beforeAll(async(done) => { + beforeAll(async () => { const apps = new AppsActions(); const users = new UsersActions(); @@ -79,126 +78,126 @@ describe('Attachment list action menu for tasks', () => { await loginPage.loginToProcessServicesUsingUserModel(user); - done(); }); - afterAll(async(done) => { + afterAll(async () => { await this.alfrescoJsApi.activiti.modelsApi.deleteModel(appId); await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); await this.alfrescoJsApi.activiti.adminTenantsApi.deleteTenant(tenantId); - done(); + }); - it('[C277311] Should be able to View /Download /Remove from Attachment List on an active task', () => { - navigationBarPage.navigateToProcessServicesPage().goToApp(app.title).clickTasksButton(); + it('[C277311] Should be able to View /Download /Remove from Attachment List on an active task', async () => { + await (await (await navigationBarPage.navigateToProcessServicesPage()).goToApp(app.title)).clickTasksButton(); - taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); - taskPage.createNewTask().addName(taskName.active).clickStartButton(); + await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); + const task = await taskPage.createNewTask(); + await task.addName(taskName.active); + await task.clickStartButton(); - attachmentListPage.clickAttachFileButton(pngFile.location); - attachmentListPage.viewFile(pngFile.name); + await attachmentListPage.clickAttachFileButton(pngFile.location); + await attachmentListPage.viewFile(pngFile.name); - viewerPage.checkFileNameIsDisplayed(pngFile.name); - viewerPage.clickCloseButton(); + await viewerPage.checkFileNameIsDisplayed(pngFile.name); + await viewerPage.clickCloseButton(); - attachmentListPage.doubleClickFile(pngFile.name); + await attachmentListPage.doubleClickFile(pngFile.name); - viewerPage.checkFileNameIsDisplayed(pngFile.name); - viewerPage.clickCloseButton(); + await viewerPage.checkFileNameIsDisplayed(pngFile.name); + await viewerPage.clickCloseButton(); - attachmentListPage.downloadFile(pngFile.name); + await attachmentListPage.downloadFile(pngFile.name); - browser.driver.sleep(1000); + await browser.sleep(1000); - expect(Util.fileExists(downloadedPngFile, 30)).toBe(true); + await expect(await FileBrowserUtil.isFileDownloaded(downloadedPngFile)).toBe(true); - attachmentListPage.removeFile(pngFile.name); - attachmentListPage.checkFileIsRemoved(pngFile.name); + await attachmentListPage.removeFile(pngFile.name); + await attachmentListPage.checkFileIsRemoved(pngFile.name); }); - it('[C260236] Should be able to View /Download /Remove from Attachment List on a completed task', () => { - navigationBarPage.navigateToProcessServicesPage().goToApp(app.title).clickTasksButton(); + it('[C260236] Should be able to View /Download /Remove from Attachment List on a completed task', async () => { + await (await (await navigationBarPage.navigateToProcessServicesPage()).goToApp(app.title)).clickTasksButton(); - taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); - taskPage.createNewTask().addName(taskName.completed).clickStartButton(); + await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); + const task = await taskPage.createNewTask(); + await task.addName(taskName.completed); + await task.clickStartButton(); - attachmentListPage.clickAttachFileButton(pngFile.location); - attachmentListPage.checkFileIsAttached(pngFile.name); + await attachmentListPage.clickAttachFileButton(pngFile.location); + await attachmentListPage.checkFileIsAttached(pngFile.name); - taskPage.completeTaskNoForm(); - taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.COMPLETED_TASKS); - taskPage.tasksListPage().selectRow(taskName.completed); + await taskPage.completeTaskNoForm(); + await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.COMPLETED_TASKS); + await taskPage.tasksListPage().selectRow(taskName.completed); - attachmentListPage.checkAttachFileButtonIsNotDisplayed(); - attachmentListPage.viewFile(pngFile.name); + await attachmentListPage.checkAttachFileButtonIsNotDisplayed(); + await attachmentListPage.viewFile(pngFile.name); - viewerPage.checkFileNameIsDisplayed(pngFile.name); - viewerPage.clickCloseButton(); + await viewerPage.checkFileNameIsDisplayed(pngFile.name); + await viewerPage.clickCloseButton(); - attachmentListPage.downloadFile(pngFile.name); + await attachmentListPage.downloadFile(pngFile.name); - browser.driver.sleep(1000); + await browser.sleep(1000); - expect(Util.fileExists(downloadedPngFile, 30)).toBe(true); + await expect(await FileBrowserUtil.isFileDownloaded(downloadedPngFile)).toBe(true); - attachmentListPage.removeFile(pngFile.name); - attachmentListPage.checkFileIsRemoved(pngFile.name); + await attachmentListPage.removeFile(pngFile.name); + await attachmentListPage.checkFileIsRemoved(pngFile.name); }); - it('[C260225] Should be able to upload a file in the Attachment list on Task App', () => { - navigationBarPage.navigateToProcessServicesPage().goToTaskApp().clickTasksButton(); + it('[C260225] Should be able to upload a file in the Attachment list on Task App', async () => { + await (await (await navigationBarPage.navigateToProcessServicesPage()).goToApp(app.title)).clickTasksButton(); - taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); - taskPage.createNewTask().addName(taskName.taskApp).clickStartButton(); + await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); + const task = await taskPage.createNewTask(); + await task.addName(taskName.taskApp); + await task.clickStartButton(); - attachmentListPage.clickAttachFileButton(pngFile.location); - attachmentListPage.checkFileIsAttached(pngFile.name); + await attachmentListPage.clickAttachFileButton(pngFile.location); + await attachmentListPage.checkFileIsAttached(pngFile.name); }); - it('[C279884] Should be able to view the empty attachment list for tasks', () => { - navigationBarPage.navigateToProcessServicesPage().goToTaskApp().clickTasksButton(); + it('[C279884] Should be able to view the empty attachment list for tasks', async () => { + await (await (await navigationBarPage.navigateToProcessServicesPage()).goToTaskApp()).clickTasksButton(); - taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); - taskPage.createNewTask().addName(taskName.emptyList).clickStartButton(); + await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); + const task = await taskPage.createNewTask(); + await task.addName(taskName.emptyList); + await task.clickStartButton(); - attachmentListPage.checkEmptyAttachmentList(); - attachmentListPage.clickAttachFileButton(pngFile.location); - attachmentListPage.checkFileIsAttached(pngFile.name); - attachmentListPage.removeFile(pngFile.name); - attachmentListPage.checkFileIsRemoved(pngFile.name); - attachmentListPage.checkEmptyAttachmentList(); + await attachmentListPage.checkEmptyAttachmentList(); + await attachmentListPage.clickAttachFileButton(pngFile.location); + await attachmentListPage.checkFileIsAttached(pngFile.name); + await attachmentListPage.removeFile(pngFile.name); + await attachmentListPage.checkFileIsRemoved(pngFile.name); + await attachmentListPage.checkEmptyAttachmentList(); }); - it('[C260234] Should be able to attache a file on a task on APS and check on ADF', () => { - browser.controlFlow().execute(async() => { - const newTask = await this.alfrescoJsApi.activiti.taskApi.createNewTask({name: 'SHARE KNOWLEDGE'}); + it('[C260234] Should be able to attache a file on a task on APS and check on ADF', async () => { + const newTask = await this.alfrescoJsApi.activiti.taskApi.createNewTask({ name: 'SHARE KNOWLEDGE' }); + const newTaskId = newTask.id; + const filePath = path.join(browser.params.testConfig.main.rootPath + pngFile.location); + const file = fs.createReadStream(filePath); - const newTaskId = newTask.id; + relatedContent = await this.alfrescoJsApi.activiti.contentApi.createRelatedContentOnTask(newTaskId, file, { 'isRelatedContent': true }); + relatedContentId = relatedContent.id; - const filePath = path.join(browser.params.testConfig.main.rootPath + pngFile.location); + await (await (await navigationBarPage.navigateToProcessServicesPage()).goToTaskApp()).clickTasksButton(); - const file = fs.createReadStream(filePath); + await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); + await taskPage.tasksListPage().selectRow('SHARE KNOWLEDGE'); - relatedContent = await this.alfrescoJsApi.activiti.contentApi.createRelatedContentOnTask(newTaskId, file, {'isRelatedContent': true}); - relatedContentId = relatedContent.id; - }); + await attachmentListPage.checkFileIsAttached(pngFile.name); - navigationBarPage.navigateToProcessServicesPage().goToTaskApp().clickTasksButton(); + await this.alfrescoJsApi.activiti.contentApi.deleteContent(relatedContentId); - taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); - taskPage.tasksListPage().selectRow('SHARE KNOWLEDGE'); + await (await (await navigationBarPage.navigateToProcessServicesPage()).goToTaskApp()).clickTasksButton(); - attachmentListPage.checkFileIsAttached(pngFile.name); + await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); + await taskPage.tasksListPage().selectRow('SHARE KNOWLEDGE'); - browser.controlFlow().execute(async() => { - await this.alfrescoJsApi.activiti.contentApi.deleteContent(relatedContentId); - }); - - navigationBarPage.navigateToProcessServicesPage().goToTaskApp().clickTasksButton(); - - taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); - taskPage.tasksListPage().selectRow('SHARE KNOWLEDGE'); - - attachmentListPage.checkEmptyAttachmentList(); + await attachmentListPage.checkEmptyAttachmentList(); }); }); diff --git a/e2e/process-services/task-audit.e2e.ts b/e2e/process-services/task-audit.e2e.ts index e953dec8fc..fa3ee81651 100644 --- a/e2e/process-services/task-audit.e2e.ts +++ b/e2e/process-services/task-audit.e2e.ts @@ -15,7 +15,7 @@ * limitations under the License. */ -import { LoginPage, BrowserActions } from '@alfresco/adf-testing'; +import { LoginPage, BrowserActions, FileBrowserUtil } from '@alfresco/adf-testing'; import { TasksPage } from '../pages/adf/process-services/tasksPage'; import { ProcessServicesPage } from '../pages/adf/process-services/processServicesPage'; @@ -30,9 +30,6 @@ import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; import { UsersActions } from '../actions/users.actions'; import { AppsActions } from '../actions/APS/apps.actions'; -import path = require('path'); -import { Util } from '../util/util'; - describe('Task Audit', () => { const loginPage = new LoginPage(); @@ -43,10 +40,9 @@ describe('Task Audit', () => { const taskTaskApp = 'Audit task task app'; const taskCustomApp = 'Audit task custom app'; const taskCompleteCustomApp = 'Audit completed task custom app'; - const auditLogFile = path.join('./e2e/download/', 'Audit.pdf'); - let appModel; + const auditLogFile = 'Audit.pdf'; - beforeAll(async (done) => { + beforeAll(async () => { const users = new UsersActions(); const apps = new AppsActions(); @@ -63,70 +59,75 @@ describe('Task Audit', () => { await this.alfrescoJsApi.login(processUserModel.email, processUserModel.password); - this.alfrescoJsApi.activiti.taskApi.createNewTask({name: taskTaskApp}); + this.alfrescoJsApi.activiti.taskApi.createNewTask({ name: taskTaskApp }); - appModel = await apps.importPublishDeployApp(this.alfrescoJsApi, app.file_location); + await apps.importPublishDeployApp(this.alfrescoJsApi, app.file_location); await loginPage.loginToProcessServicesUsingUserModel(processUserModel); - done(); }); - beforeEach(async (done) => { + beforeEach(async () => { await BrowserActions.getUrl(browser.params.testConfig.adf.url + '/activiti'); - done(); + }); - it('[C260386] Should Audit file be downloaded when clicking on Task Audit log icon on a standalone running task', () => { - processServices.goToTaskApp().clickTasksButton(); - taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); - taskPage.tasksListPage().checkContentIsDisplayed(taskTaskApp); + it('[C260386] Should Audit file be downloaded when clicking on Task Audit log icon on a standalone running task', async () => { + await (await processServices.goToTaskApp()).clickTasksButton(); - taskPage.taskDetails().clickAuditLogButton(); - expect(Util.fileExists(auditLogFile, 10)).toBe(true); + await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); + await taskPage.tasksListPage().checkContentIsDisplayed(taskTaskApp); + + await taskPage.taskDetails().clickAuditLogButton(); + await expect(await FileBrowserUtil.isFileDownloaded(auditLogFile)).toBe(true); }); - it('[C260389] Should Audit file be downloaded when clicking on Task Audit log icon on a standalone completed task', () => { - processServices.goToTaskApp().clickTasksButton(); - taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); - taskPage.tasksListPage().checkContentIsDisplayed(taskTaskApp); + it('[C260389] Should Audit file be downloaded when clicking on Task Audit log icon on a standalone completed task', async () => { + await (await processServices.goToTaskApp()).clickTasksButton(); - taskPage.completeTaskNoForm(); - taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.COMPLETED_TASKS); - taskPage.tasksListPage().selectRow(taskTaskApp); - expect(taskPage.formFields().getCompletedTaskNoFormMessage()).toEqual('Task ' + taskTaskApp + ' completed'); + await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); + await taskPage.tasksListPage().checkContentIsDisplayed(taskTaskApp); - taskPage.taskDetails().clickAuditLogButton(); - expect(Util.fileExists(auditLogFile, 20)).toBe(true); + await taskPage.completeTaskNoForm(); + await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.COMPLETED_TASKS); + await taskPage.tasksListPage().selectRow(taskTaskApp); + await expect(await taskPage.formFields().getCompletedTaskNoFormMessage()).toEqual('Task ' + taskTaskApp + ' completed'); + + await taskPage.taskDetails().clickAuditLogButton(); + await expect(await FileBrowserUtil.isFileDownloaded(auditLogFile)).toBe(true); }); - it('[C263944] Should Audit file be downloaded when clicking on Task Audit log icon on a custom app standalone completed task', () => { - processServices.goToTaskApp().clickTasksButton(); + it('[C263944] Should Audit file be downloaded when clicking on Task Audit log icon on a custom app standalone completed task', async () => { + await (await processServices.goToTaskApp()).clickTasksButton(); - taskPage.createNewTask().addName(taskCompleteCustomApp).clickStartButton(); + const task = await taskPage.createNewTask(); + await task.addName(taskCompleteCustomApp); + await task.clickStartButton(); - taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); - taskPage.tasksListPage().checkContentIsDisplayed(taskCompleteCustomApp); + await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); + await taskPage.tasksListPage().checkContentIsDisplayed(taskCompleteCustomApp); - taskPage.completeTaskNoForm(); - taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.COMPLETED_TASKS); - taskPage.tasksListPage().selectRow(taskCompleteCustomApp); - expect(taskPage.formFields().getCompletedTaskNoFormMessage()).toEqual('Task ' + taskCompleteCustomApp + ' completed'); + await taskPage.completeTaskNoForm(); + await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.COMPLETED_TASKS); + await taskPage.tasksListPage().selectRow(taskCompleteCustomApp); + await expect(await taskPage.formFields().getCompletedTaskNoFormMessage()).toEqual('Task ' + taskCompleteCustomApp + ' completed'); - taskPage.taskDetails().clickAuditLogButton(); - expect(Util.fileExists(auditLogFile, 20)).toBe(true); + await taskPage.taskDetails().clickAuditLogButton(); + await expect(await FileBrowserUtil.isFileDownloaded(auditLogFile)).toBe(true); }); - it('[C263943] Should Audit file be downloaded when clicking on Task Audit log icon on a custom app standalone running task', () => { - processServices.goToApp(appModel.name).clickTasksButton(); + it('[C263943] Should Audit file be downloaded when clicking on Task Audit log icon on a custom app standalone running task', async () => { + await (await processServices.goToTaskApp()).clickTasksButton(); - taskPage.createNewTask().addName(taskCustomApp).clickStartButton(); + const task = await taskPage.createNewTask(); + await task.addName(taskCustomApp); + await task.clickStartButton(); - taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); - taskPage.tasksListPage().checkContentIsDisplayed(taskCustomApp); + await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); + await taskPage.tasksListPage().checkContentIsDisplayed(taskCustomApp); - taskPage.taskDetails().clickAuditLogButton(); - expect(Util.fileExists(auditLogFile, 10)).toBe(true); + await taskPage.taskDetails().clickAuditLogButton(); + await expect(await FileBrowserUtil.isFileDownloaded(auditLogFile)).toBe(true); }); }); diff --git a/e2e/process-services/task-details-form.e2e.ts b/e2e/process-services/task-details-form.e2e.ts index 732c5c1a20..0db20eab82 100644 --- a/e2e/process-services/task-details-form.e2e.ts +++ b/e2e/process-services/task-details-form.e2e.ts @@ -16,7 +16,7 @@ */ import { browser } from 'protractor'; -import { StringUtil } from '@alfresco/adf-testing'; +import { StringUtil, Widget } from '@alfresco/adf-testing'; import CONSTANTS = require('../util/constants'); import { LoginPage } from '@alfresco/adf-testing'; @@ -25,20 +25,25 @@ import { NavigationBarPage } from '../pages/adf/navigationBarPage'; import { TasksListPage } from '../pages/adf/process-services/tasksListPage'; import { TaskDetailsPage } from '../pages/adf/process-services/taskDetailsPage'; import { FiltersPage } from '../pages/adf/process-services/filtersPage'; +import { AppsActions } from '../actions/APS/apps.actions'; import { StandaloneTask } from '../models/APS/standaloneTask'; import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; import { UsersActions } from '../actions/users.actions'; +import { FormModelActions } from '../actions/APS/formModel.actions'; +import resources = require('../util/resources'); describe('Task Details - Form', () => { const loginPage = new LoginPage(); const tasksListPage = new TasksListPage(); const taskDetailsPage = new TaskDetailsPage(); const filtersPage = new FiltersPage(); + const widget = new Widget(); let task, otherTask, user, newForm, attachedForm, otherAttachedForm; + let newTask; - beforeAll(async (done) => { + beforeAll(async () => { const users = new UsersActions(); const attachedFormModel = { 'name': StringUtil.generateRandomString(), @@ -53,7 +58,12 @@ describe('Task Details - Form', () => { 'modelType': 2, 'stencilSet': 0 }; - const newFormModel = { 'name': StringUtil.generateRandomString(), 'description': '', 'modelType': 2, 'stencilSet': 0 }; + const newFormModel = { + 'name': StringUtil.generateRandomString(), + 'description': '', + 'modelType': 2, + 'stencilSet': 0 + }; this.alfrescoJsApi = new AlfrescoApi({ provider: 'BPM', @@ -80,10 +90,9 @@ describe('Task Details - Form', () => { await loginPage.loginToProcessServicesUsingUserModel(user); - done(); }); - beforeEach(async (done) => { + beforeEach(async () => { const taskModel = new StandaloneTask(); const emptyTask = await this.alfrescoJsApi.activiti.taskApi.createNewTask(taskModel); @@ -92,64 +101,259 @@ describe('Task Details - Form', () => { task = await this.alfrescoJsApi.activiti.taskApi.getTask(emptyTask.id); - new NavigationBarPage().navigateToProcessServicesPage().goToTaskApp(); - tasksListPage.checkTaskListIsLoaded(); - filtersPage.goToFilter('Involved Tasks'); - tasksListPage.checkTaskListIsLoaded(); + await (await new NavigationBarPage().navigateToProcessServicesPage()).goToTaskApp(); + await tasksListPage.checkTaskListIsLoaded(); + await filtersPage.goToFilter('Involved Tasks'); + await tasksListPage.checkTaskListIsLoaded(); - done(); }); - it('[C280018] Should be able to change the form in a task', () => { - tasksListPage.selectRow(task.name); - taskDetailsPage.clickForm(); + it('[C280018] Should be able to change the form in a task', async () => { + await tasksListPage.selectRow(task.name); + await taskDetailsPage.clickForm(); - taskDetailsPage.checkAttachFormDropdownIsDisplayed(); - taskDetailsPage.checkAttachFormButtonIsDisabled(); + await taskDetailsPage.checkAttachFormDropdownIsDisplayed(); + await taskDetailsPage.checkAttachFormButtonIsDisabled(); - taskDetailsPage.clickAttachFormDropdown(); + await taskDetailsPage.clickAttachFormDropdown(); - taskDetailsPage.selectAttachFormOption(newForm.name); - taskDetailsPage.checkSelectedForm(newForm.name); - taskDetailsPage.checkAttachFormButtonIsEnabled(); + await taskDetailsPage.selectAttachFormOption(newForm.name); + await taskDetailsPage.checkSelectedForm(newForm.name); + await taskDetailsPage.checkAttachFormButtonIsEnabled(); - taskDetailsPage.checkCancelAttachFormIsDisplayed(); - taskDetailsPage.clickCancelAttachForm(); + await taskDetailsPage.checkCancelAttachFormIsDisplayed(); + await taskDetailsPage.clickCancelAttachForm(); - taskDetailsPage.checkFormIsAttached(attachedForm.name); + await taskDetailsPage.checkFormIsAttached(attachedForm.name); - taskDetailsPage.clickForm(); + await taskDetailsPage.clickForm(); - taskDetailsPage.checkAttachFormDropdownIsDisplayed(); - taskDetailsPage.clickAttachFormDropdown(); + await taskDetailsPage.checkAttachFormDropdownIsDisplayed(); + await taskDetailsPage.clickAttachFormDropdown(); - taskDetailsPage.selectAttachFormOption(newForm.name); + await taskDetailsPage.selectAttachFormOption(newForm.name); - taskDetailsPage.checkAttachFormButtonIsDisplayed(); - taskDetailsPage.clickAttachFormButton(); + await taskDetailsPage.checkAttachFormButtonIsDisplayed(); + await taskDetailsPage.clickAttachFormButton(); - taskDetailsPage.checkFormIsAttached(newForm.name); + await taskDetailsPage.checkFormIsAttached(newForm.name); }); - it('[C280019] Should be able to remove the form form a task', () => { - tasksListPage.selectRow(task.name); - taskDetailsPage.clickForm(); + it('[C280019] Should be able to remove the form form a task', async () => { + await tasksListPage.selectRow(task.name); + await taskDetailsPage.clickForm(); - taskDetailsPage.checkRemoveAttachFormIsDisplayed(); - taskDetailsPage.clickRemoveAttachForm(); + await taskDetailsPage.checkRemoveAttachFormIsDisplayed(); + await taskDetailsPage.clickRemoveAttachForm(); - taskDetailsPage.checkFormIsAttached('No form'); + await taskDetailsPage.checkFormIsAttached('No form'); - expect(taskDetailsPage.getFormName()).toEqual(CONSTANTS.TASK_DETAILS.NO_FORM); + await expect(await taskDetailsPage.getFormName()).toEqual(CONSTANTS.TASK_DETAILS.NO_FORM); }); - it('[C280557] Should display task details when selecting another task while the Attach Form dialog is displayed', () => { - tasksListPage.selectRow(task.name); - taskDetailsPage.clickForm(); + it('[C280557] Should display task details when selecting another task while the Attach Form dialog is displayed', async () => { + await tasksListPage.selectRow(task.name); + await taskDetailsPage.clickForm(); - taskDetailsPage.checkRemoveAttachFormIsDisplayed(); + await taskDetailsPage.checkRemoveAttachFormIsDisplayed(); - tasksListPage.selectRow(otherTask.name); - taskDetailsPage.checkFormIsAttached(otherAttachedForm.name); + await tasksListPage.selectRow(otherTask.name); + await taskDetailsPage.checkFormIsAttached(otherAttachedForm.name); + }); + + describe('Task Details - Complete form with visibility conditions on tabs', () => { + + const widgets = { + textOneId: 'textone', + textTwoId: 'texttwo', + textThreeId: 'textthree', + textFourId: 'textfour', + numberOneId: 'numberone' + }; + + const value = { + displayTab: 'showTab', + notDisplayTab: 'anythingElse' + }; + + const tab = { + tabWithFields: 'tabWithFields', + tabFieldValue: 'tabBasicFieldValue', + tabFieldField: 'tabBasicFieldField', + tabFieldVar: 'tabBasicFieldVar' + }; + + const formActions = new FormModelActions(); + + beforeAll(async () => { + const app = resources.Files.SIMPLE_APP_WITH_USER_FORM; + const apps = new AppsActions(); + await apps.importPublishDeployApp(this.alfrescoJsApi, app.file_location); + }); + + beforeEach(async () => { + newTask = await this.alfrescoJsApi.activiti.taskApi.createNewTask({ name: StringUtil.generateRandomString() }); + const form = await formActions.getFormByName(this.alfrescoJsApi, + resources.Files.SIMPLE_APP_WITH_USER_FORM.visibilityTabForm.formName); + await this.alfrescoJsApi.activiti.taskApi.attachForm(newTask.id, { 'formId': form.id }); + + await (await new NavigationBarPage().navigateToProcessServicesPage()).goToTaskApp(); + await tasksListPage.checkTaskListIsLoaded(); + await filtersPage.goToFilter('Involved Tasks'); + await tasksListPage.checkTaskListIsLoaded(); + }); + + it('[C315190] Should be able to complete a standalone task with visible tab with empty value for field', async () => { + await tasksListPage.selectRow(newTask.name); + await widget.tab().checkTabIsDisplayedByLabel(tab.tabWithFields); + await widget.tab().checkTabIsNotDisplayedByLabel(tab.tabFieldValue); + + await widget.textWidget().isWidgetVisible(widgets.textOneId); + await widget.textWidget().isWidgetNotVisible(widgets.textThreeId); + + await widget.textWidget().setValue(widgets.textOneId, value.displayTab); + await widget.tab().checkTabIsDisplayedByLabel(tab.tabWithFields); + await widget.tab().checkTabIsDisplayedByLabel(tab.tabFieldValue); + + await taskDetailsPage.checkCompleteFormButtonIsDisplayed(); + await taskDetailsPage.clickCompleteFormTask(); + await tasksListPage.checkContentIsNotDisplayed(newTask.name); + + await tasksListPage.checkTaskListIsLoaded(); + await filtersPage.goToFilter('Completed Tasks'); + await tasksListPage.checkTaskListIsLoaded(); + await tasksListPage.checkContentIsDisplayed(newTask.name); + await tasksListPage.selectRow(newTask.name); + await widget.tab().checkTabIsDisplayedByLabel(tab.tabWithFields); + await widget.tab().checkTabIsDisplayedByLabel(tab.tabFieldValue); + }); + + it('[C315191] Should be able to complete a standalone task with invisible tab with empty value for field', async () => { + await tasksListPage.selectRow(newTask.name); + await widget.tab().checkTabIsDisplayedByLabel(tab.tabWithFields); + await widget.tab().checkTabIsNotDisplayedByLabel(tab.tabFieldValue); + + await widget.textWidget().isWidgetVisible(widgets.textOneId); + await widget.textWidget().isWidgetNotVisible(widgets.textThreeId); + + await taskDetailsPage.checkCompleteFormButtonIsDisplayed(); + await taskDetailsPage.clickCompleteFormTask(); + await tasksListPage.checkContentIsNotDisplayed(newTask.name); + + await tasksListPage.checkTaskListIsLoaded(); + await filtersPage.goToFilter('Completed Tasks'); + await tasksListPage.checkTaskListIsLoaded(); + await tasksListPage.checkContentIsDisplayed(newTask.name); + await tasksListPage.selectRow(newTask.name); + await widget.tab().checkTabIsDisplayedByLabel(tab.tabWithFields); + await widget.tab().checkTabIsNotDisplayedByLabel(tab.tabFieldValue); + }); + + it('[C315192] Should not be able to complete a standalone task with visible tab with invalid value for field', async () => { + await tasksListPage.selectRow(newTask.name); + await widget.tab().checkTabIsDisplayedByLabel(tab.tabWithFields); + await widget.tab().checkTabIsDisplayedByLabel(tab.tabFieldField); + + await widget.textWidget().isWidgetVisible(widgets.textOneId); + await widget.textWidget().setValue(widgets.textOneId, value.displayTab); + await widget.textWidget().setValue(widgets.textTwoId, value.displayTab); + await widget.tab().checkTabIsDisplayedByLabel(tab.tabWithFields); + await widget.tab().checkTabIsDisplayedByLabel(tab.tabFieldField); + + await widget.tab().clickTabByLabel(tab.tabFieldField); + await widget.textWidget().setValue(widgets.numberOneId, value.displayTab); + + await expect(await taskDetailsPage.isCompleteButtonWithFormEnabled()).toEqual(false); + }); + + it('[C315193] Should be able to complete a standalone task with invisible tab with invalid value for field', async () => { + // ACTIVITI-3746 + await tasksListPage.selectRow(newTask.name); + await widget.tab().checkTabIsDisplayedByLabel(tab.tabWithFields); + await widget.tab().checkTabIsDisplayedByLabel(tab.tabFieldField); + + await widget.textWidget().isWidgetVisible(widgets.textOneId); + await widget.textWidget().setValue(widgets.textOneId, value.displayTab); + await widget.textWidget().setValue(widgets.textTwoId, value.displayTab); + await widget.tab().checkTabIsDisplayedByLabel(tab.tabWithFields); + await widget.tab().checkTabIsDisplayedByLabel(tab.tabFieldField); + + await widget.tab().clickTabByLabel(tab.tabFieldField); + await widget.textWidget().setValue(widgets.numberOneId, value.displayTab); + + await widget.tab().clickTabByLabel(tab.tabWithFields); + await widget.textWidget().setValue(widgets.textOneId, value.notDisplayTab); + await widget.tab().checkTabIsNotDisplayedByLabel(tab.tabFieldField); + + await taskDetailsPage.checkCompleteFormButtonIsDisplayed(); + await taskDetailsPage.clickCompleteFormTask(); + await tasksListPage.checkContentIsNotDisplayed(newTask.name); + + await tasksListPage.checkTaskListIsLoaded(); + await filtersPage.goToFilter('Completed Tasks'); + await tasksListPage.checkTaskListIsLoaded(); + await tasksListPage.checkContentIsDisplayed(newTask.name); + await tasksListPage.selectRow(newTask.name); + await widget.tab().checkTabIsDisplayedByLabel(tab.tabWithFields); + await widget.tab().checkTabIsNotDisplayedByLabel(tab.tabFieldValue); + }); + + it('[C315194] Should be able to complete a standalone task with invisible tab with valid value', async () => { + await tasksListPage.selectRow(newTask.name); + await widget.tab().checkTabIsDisplayedByLabel(tab.tabWithFields); + await widget.tab().checkTabIsDisplayedByLabel(tab.tabFieldField); + + await widget.textWidget().isWidgetVisible(widgets.textOneId); + await widget.textWidget().setValue(widgets.textOneId, value.displayTab); + await widget.textWidget().setValue(widgets.textTwoId, value.displayTab); + await widget.tab().checkTabIsDisplayedByLabel(tab.tabWithFields); + await widget.tab().checkTabIsDisplayedByLabel(tab.tabFieldField); + + await widget.tab().clickTabByLabel(tab.tabFieldField); + await widget.textWidget().setValue(widgets.numberOneId, '123'); + + await widget.tab().clickTabByLabel(tab.tabWithFields); + await widget.textWidget().setValue(widgets.textOneId, value.notDisplayTab); + await widget.tab().checkTabIsNotDisplayedByLabel(tab.tabFieldField); + + await taskDetailsPage.checkCompleteFormButtonIsDisplayed(); + await taskDetailsPage.clickCompleteFormTask(); + await tasksListPage.checkContentIsNotDisplayed(newTask.name); + + await tasksListPage.checkTaskListIsLoaded(); + await filtersPage.goToFilter('Completed Tasks'); + await tasksListPage.checkTaskListIsLoaded(); + await tasksListPage.checkContentIsDisplayed(newTask.name); + await tasksListPage.selectRow(newTask.name); + await widget.tab().checkTabIsDisplayedByLabel(tab.tabWithFields); + await widget.tab().checkTabIsNotDisplayedByLabel(tab.tabFieldValue); + }); + + it('[C315195] Should be able to complete a standalone task with visible tab with valid value for field', async () => { + await tasksListPage.selectRow(newTask.name); + await widget.tab().checkTabIsDisplayedByLabel(tab.tabWithFields); + await widget.tab().checkTabIsDisplayedByLabel(tab.tabFieldField); + + await widget.textWidget().isWidgetVisible(widgets.textOneId); + await widget.textWidget().setValue(widgets.textOneId, value.displayTab); + await widget.textWidget().setValue(widgets.textTwoId, value.displayTab); + await widget.tab().checkTabIsDisplayedByLabel(tab.tabWithFields); + await widget.tab().checkTabIsDisplayedByLabel(tab.tabFieldField); + + await widget.tab().clickTabByLabel(tab.tabFieldField); + await widget.textWidget().setValue(widgets.numberOneId, '123'); + + await taskDetailsPage.checkCompleteFormButtonIsDisplayed(); + await taskDetailsPage.clickCompleteFormTask(); + await tasksListPage.checkContentIsNotDisplayed(newTask.name); + + await tasksListPage.checkTaskListIsLoaded(); + await filtersPage.goToFilter('Completed Tasks'); + await tasksListPage.checkTaskListIsLoaded(); + await tasksListPage.checkContentIsDisplayed(newTask.name); + await tasksListPage.selectRow(newTask.name); + await widget.tab().checkTabIsDisplayedByLabel(tab.tabWithFields); + await widget.tab().checkTabIsDisplayedByLabel(tab.tabFieldValue); + }); }); }); diff --git a/e2e/process-services/task-details-no-form.e2e.ts b/e2e/process-services/task-details-no-form.e2e.ts index a87425636e..cb01c7308a 100644 --- a/e2e/process-services/task-details-no-form.e2e.ts +++ b/e2e/process-services/task-details-no-form.e2e.ts @@ -41,7 +41,7 @@ describe('Task Details - No form', () => { const apps = new AppsActions(); let importedApp; - beforeAll(async (done) => { + beforeAll(async () => { const users = new UsersActions(); this.alfrescoJsApi = new AlfrescoApi({ @@ -63,20 +63,20 @@ describe('Task Details - No form', () => { await loginPage.loginToProcessServicesUsingUserModel(processUserModel); - done(); }); - it('[C289311] Should attach form and complete buttons to be displayed when no form is attached', () => { - navigationBarPage.navigateToProcessServicesPage().goToTaskApp().clickTasksButton(); - taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); + it('[C289311] Should attach form and complete buttons to be displayed when no form is attached', async () => { + await (await (await navigationBarPage.navigateToProcessServicesPage()).goToTaskApp()).clickTasksButton(); + await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); - taskPage.tasksListPage().checkContentIsDisplayed(app.taskName); - taskPage.tasksListPage().selectRow(app.taskName); - taskPage.taskDetails().noFormIsDisplayed(); - taskPage.taskDetails().checkCompleteTaskButtonIsDisplayed().checkCompleteTaskButtonIsEnabled(); - taskPage.taskDetails().checkAttachFormButtonIsNotDisplayed(); - expect(taskPage.taskDetails().getFormName()).toEqual(CONSTANTS.TASK_DETAILS.NO_FORM); - expect(taskPage.formFields().getNoFormMessage()).toEqual(noFormMessage); + await taskPage.tasksListPage().checkContentIsDisplayed(app.taskName); + await taskPage.tasksListPage().selectRow(app.taskName); + await taskPage.taskDetails().noFormIsDisplayed(); + await taskPage.taskDetails().checkCompleteTaskButtonIsDisplayed(); + await taskPage.taskDetails().checkCompleteTaskButtonIsEnabled(); + await taskPage.taskDetails().checkAttachFormButtonIsNotDisplayed(); + await expect(await taskPage.taskDetails().getFormName()).toEqual(CONSTANTS.TASK_DETAILS.NO_FORM); + await expect(await taskPage.formFields().getNoFormMessage()).toEqual(noFormMessage); }); diff --git a/e2e/process-services/task-details.e2e.ts b/e2e/process-services/task-details.e2e.ts index 7e0b50a557..554e093efb 100644 --- a/e2e/process-services/task-details.e2e.ts +++ b/e2e/process-services/task-details.e2e.ts @@ -28,7 +28,7 @@ import resources = require('../util/resources'); import CONSTANTS = require('../util/constants'); import dateFormat = require('dateformat'); -import { LoginPage, BrowserActions } from '@alfresco/adf-testing'; +import { LoginPage, BrowserActions, StringUtil } from '@alfresco/adf-testing'; import { TasksPage } from '../pages/adf/process-services/tasksPage'; import { browser } from 'protractor'; @@ -42,10 +42,17 @@ describe('Task Details component', () => { let formModel; let apps; + const taskFormModel = { + 'name': StringUtil.generateRandomString(), + 'description': '', + 'modelType': 2, + 'stencilSet': 0 + }; + const loginPage = new LoginPage(); const taskPage = new TasksPage(); - beforeAll(async (done) => { + beforeAll(async () => { const users = new UsersActions(); apps = new AppsActions(); @@ -66,272 +73,276 @@ describe('Task Details component', () => { await loginPage.loginToProcessServicesUsingUserModel(processUserModel); - done(); }); - beforeEach(async (done) => { + beforeEach(async () => { await BrowserActions.getUrl(browser.params.testConfig.adf.url + '/activiti'); - done(); }); it('[C260506] Should display task details for standalone task - Task App', async () => { - processServices.goToTaskApp().clickTasksButton(); - taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); - taskPage.createNewTask() - .addName(tasks[1]) - .addDescription('Description') - .addForm(app.formName) - .clickStartButton(); - expect(taskPage.taskDetails().getTitle()).toEqual('Activities'); + await (await processServices.goToTaskApp()).clickTasksButton(); - const allTasks = await browser.controlFlow().execute(async () => { - return this.alfrescoJsApi.activiti.taskApi.listTasks(new Task({ sort: 'created-desc' })); - }); + await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); + const task = await taskPage.createNewTask(); + await task.addName(tasks[1]); + await task.addDescription('Description'); + await task.addForm(app.formName); + await task.clickStartButton(); + + await expect(await taskPage.taskDetails().getTitle()).toEqual('Activities'); + + const allTasks = await this.alfrescoJsApi.activiti.taskApi.listTasks(new Task({ sort: 'created-desc' })); const taskModel = new TaskModel(allTasks.data[0]); - taskPage.tasksListPage().checkContentIsDisplayed(taskModel.getName()); - expect(taskPage.taskDetails().getCreated()).toEqual(dateFormat(taskModel.getCreated(), TASK_DATE_FORMAT)); - expect(taskPage.taskDetails().getId()).toEqual(taskModel.getId()); - expect(taskPage.taskDetails().getDescription()).toEqual(taskModel.getDescription()); - expect(taskPage.taskDetails().getAssignee()).toEqual(taskModel.getAssignee().getEntireName()); - expect(taskPage.taskDetails().getCategory()).toEqual(CONSTANTS.TASK_DETAILS.NO_CATEGORY); - expect(taskPage.taskDetails().getDueDate()).toEqual(CONSTANTS.TASK_DETAILS.NO_DATE); - expect(taskPage.taskDetails().getParentName()).toEqual(CONSTANTS.TASK_DETAILS.NO_PARENT); - expect(taskPage.taskDetails().getParentTaskId()).toEqual(''); - expect(taskPage.taskDetails().getDuration()).toEqual(''); - expect(taskPage.taskDetails().getEndDate()).toEqual(''); - expect(taskPage.taskDetails().getStatus()).toEqual(CONSTANTS.TASK_STATUS.RUNNING); - - const taskForm = await browser.controlFlow().execute(async () => { - return await this.alfrescoJsApi.activiti.taskFormsApi.getTaskForm(allTasks.data[0].id); - }); + await taskPage.tasksListPage().checkContentIsDisplayed(taskModel.getName()); + await expect(await taskPage.taskDetails().getCreated()).toEqual(dateFormat(taskModel.getCreated(), TASK_DATE_FORMAT)); + await expect(await taskPage.taskDetails().getId()).toEqual(taskModel.getId()); + await expect(await taskPage.taskDetails().getDescription()).toEqual(taskModel.getDescription()); + await expect(await taskPage.taskDetails().getAssignee()).toEqual(taskModel.getAssignee().getEntireName()); + await expect(await taskPage.taskDetails().getCategory()).toEqual(CONSTANTS.TASK_DETAILS.NO_CATEGORY); + await expect(await taskPage.taskDetails().getDueDate()).toEqual(CONSTANTS.TASK_DETAILS.NO_DATE); + await expect(await taskPage.taskDetails().getParentName()).toEqual(CONSTANTS.TASK_DETAILS.NO_PARENT); + await expect(await taskPage.taskDetails().getParentTaskId()).toEqual(''); + await expect(await taskPage.taskDetails().getDuration()).toEqual(''); + await expect(await taskPage.taskDetails().getEndDate()).toEqual(''); + await expect(await taskPage.taskDetails().getStatus()).toEqual(CONSTANTS.TASK_STATUS.RUNNING); + const taskForm = await this.alfrescoJsApi.activiti.taskFormsApi.getTaskForm(allTasks.data[0].id); formModel = new FormModel(taskForm); - expect(taskPage.taskDetails().getFormName()).toEqual(formModel.getName()); + await expect(await taskPage.taskDetails().getFormName()).toEqual(formModel.getName()); }); it('[C263946] Should display task details for standalone task - Custom App', async () => { - processServices.goToApp(appModel.name).clickTasksButton(); - taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); - taskPage.createNewTask() - .addName(tasks[1]) - .addDescription('Description') - .addForm(app.formName) - .clickStartButton(); - expect(taskPage.taskDetails().getTitle()).toEqual('Activities'); + await (await processServices.goToTaskApp()).clickTasksButton(); - const allTasks = await browser.controlFlow().execute(async () => { - return this.alfrescoJsApi.activiti.taskApi.listTasks(new Task({ sort: 'created-desc' })); - }); + await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); + const task = await taskPage.createNewTask(); + await task.addName(tasks[1]); + await task.addDescription('Description'); + await task.addForm(app.formName); + await task.clickStartButton(); + + await expect(await taskPage.taskDetails().getTitle()).toEqual('Activities'); + + const allTasks = await this.alfrescoJsApi.activiti.taskApi.listTasks(new Task({ sort: 'created-desc' })); const taskModel = new TaskModel(allTasks.data[0]); - taskPage.tasksListPage().checkContentIsDisplayed(taskModel.getName()); + await taskPage.tasksListPage().checkContentIsDisplayed(taskModel.getName()); - expect(taskPage.taskDetails().getCreated()).toEqual(dateFormat(taskModel.getCreated(), TASK_DATE_FORMAT)); - expect(taskPage.taskDetails().getId()).toEqual(taskModel.getId()); - expect(taskPage.taskDetails().getDescription()).toEqual(taskModel.getDescription()); - expect(taskPage.taskDetails().getAssignee()).toEqual(taskModel.getAssignee().getEntireName()); - expect(taskPage.taskDetails().getCategory()).toEqual(taskModel.getCategory()); - expect(taskPage.taskDetails().getDueDate()).toEqual(CONSTANTS.TASK_DETAILS.NO_DATE); - expect(taskPage.taskDetails().getParentName()).toEqual(CONSTANTS.TASK_DETAILS.NO_PARENT); - expect(taskPage.taskDetails().getDuration()).toEqual('' ); - expect(taskPage.taskDetails().getEndDate()).toEqual(''); - expect(taskPage.taskDetails().getParentTaskId()).toEqual(''); - expect(taskPage.taskDetails().getStatus()).toEqual(CONSTANTS.TASK_STATUS.RUNNING); + await expect(await taskPage.taskDetails().getCreated()).toEqual(dateFormat(taskModel.getCreated(), TASK_DATE_FORMAT)); + await expect(await taskPage.taskDetails().getId()).toEqual(taskModel.getId()); + await expect(await taskPage.taskDetails().getDescription()).toEqual(taskModel.getDescription()); + await expect(await taskPage.taskDetails().getAssignee()).toEqual(taskModel.getAssignee().getEntireName()); - const taskForm = await browser.controlFlow().execute(async () => { - return await this.alfrescoJsApi.activiti.taskFormsApi.getTaskForm(allTasks.data[0].id); - }); + await expect(await taskPage.taskDetails().getCategory()).toEqual(CONSTANTS.TASK_DETAILS.NO_CATEGORY); + await expect(await taskPage.taskDetails().getDueDate()).toEqual(CONSTANTS.TASK_DETAILS.NO_DATE); + await expect(await taskPage.taskDetails().getParentName()).toEqual(CONSTANTS.TASK_DETAILS.NO_PARENT); + await expect(await taskPage.taskDetails().getDuration()).toEqual(''); + await expect(await taskPage.taskDetails().getEndDate()).toEqual(''); + await expect(await taskPage.taskDetails().getParentTaskId()).toEqual(''); + await expect(await taskPage.taskDetails().getStatus()).toEqual(CONSTANTS.TASK_STATUS.RUNNING); + + const taskForm = await this.alfrescoJsApi.activiti.taskFormsApi.getTaskForm(allTasks.data[0].id); formModel = new FormModel(taskForm); - expect(taskPage.taskDetails().getFormName()).toEqual(formModel.getName()); + await expect(await taskPage.taskDetails().getFormName()).toEqual(formModel.getName()); }); it('[C286706] Should display task details for task - Task App', async () => { - browser.controlFlow().execute(async () => { - await apps.startProcess(this.alfrescoJsApi, appModel); - }); + await apps.startProcess(this.alfrescoJsApi, appModel); - processServices.goToTaskApp().clickTasksButton(); - taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); + await (await processServices.goToTaskApp()).clickTasksButton(); - expect(taskPage.taskDetails().getTitle()).toEqual('Activities'); + await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); - const allTasks = await browser.controlFlow().execute(async () => { - return await this.alfrescoJsApi.activiti.taskApi.listTasks(new Task({sort: 'created-desc'})); - }); + await expect(await taskPage.taskDetails().getTitle()).toEqual('Activities'); + + const allTasks = await this.alfrescoJsApi.activiti.taskApi.listTasks(new Task({ sort: 'created-desc' })); const taskModel = new TaskModel(allTasks.data[0]); - taskPage.tasksListPage().checkContentIsDisplayed(taskModel.getName()); - expect(taskPage.taskDetails().getCreated()).toEqual(dateFormat(taskModel.getCreated(), TASK_DATE_FORMAT)); - expect(taskPage.taskDetails().getId()).toEqual(taskModel.getId()); - expect(taskPage.taskDetails().getDescription()).toEqual(CONSTANTS.TASK_DETAILS.NO_DESCRIPTION); - expect(taskPage.taskDetails().getAssignee()).toEqual(taskModel.getAssignee().getEntireName()); - expect(taskPage.taskDetails().getCategory()).toEqual(CONSTANTS.TASK_DETAILS.NO_CATEGORY); - expect(taskPage.taskDetails().getDueDate()).toEqual(CONSTANTS.TASK_DETAILS.NO_DATE); - expect(taskPage.taskDetails().getParentName()).toEqual(appModel.definition.models[0].name); - expect(taskPage.taskDetails().getDuration()).toEqual('' ); - expect(taskPage.taskDetails().getEndDate()).toEqual(''); - expect(taskPage.taskDetails().getParentTaskId()).toEqual(''); - expect(taskPage.taskDetails().getStatus()).toEqual(CONSTANTS.TASK_STATUS.RUNNING); + await taskPage.tasksListPage().checkContentIsDisplayed(taskModel.getName()); + await expect(await taskPage.taskDetails().getCreated()).toEqual(dateFormat(taskModel.getCreated(), TASK_DATE_FORMAT)); + await expect(await taskPage.taskDetails().getId()).toEqual(taskModel.getId()); + await expect(await taskPage.taskDetails().getDescription()).toEqual(CONSTANTS.TASK_DETAILS.NO_DESCRIPTION); + await expect(await taskPage.taskDetails().getAssignee()).toEqual(taskModel.getAssignee().getEntireName()); + await expect(await taskPage.taskDetails().getCategory()).toEqual(CONSTANTS.TASK_DETAILS.NO_CATEGORY); + await expect(await taskPage.taskDetails().getDueDate()).toEqual(CONSTANTS.TASK_DETAILS.NO_DATE); + await expect(await taskPage.taskDetails().getParentName()).toEqual(appModel.definition.models[1].name); + await expect(await taskPage.taskDetails().getDuration()).toEqual(''); + await expect(await taskPage.taskDetails().getEndDate()).toEqual(''); + await expect(await taskPage.taskDetails().getParentTaskId()).toEqual(''); + await expect(await taskPage.taskDetails().getStatus()).toEqual(CONSTANTS.TASK_STATUS.RUNNING); - const taskForm = await browser.controlFlow().execute(async () => { - return await this.alfrescoJsApi.activiti.taskFormsApi.getTaskForm(allTasks.data[0].id); - }); + const taskForm = await this.alfrescoJsApi.activiti.taskFormsApi.getTaskForm(allTasks.data[0].id); formModel = new FormModel(taskForm); - expect(taskPage.taskDetails().getFormName()) + await expect(await taskPage.taskDetails().getFormName()) .toEqual(formModel.getName() === null ? CONSTANTS.TASK_DETAILS.NO_FORM : formModel.getName()); }); it('[C286705] Should display task details for task - Custom App', async () => { - browser.controlFlow().execute(async () => { - await apps.startProcess(this.alfrescoJsApi, appModel); - }); + await apps.startProcess(this.alfrescoJsApi, appModel); - processServices.goToApp(appModel.name).clickTasksButton(); - taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); + await (await processServices.goToTaskApp()).clickTasksButton(); - expect(taskPage.taskDetails().getTitle()).toEqual('Activities'); + await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); - const allTasks = await browser.controlFlow().execute(async () => { - return await this.alfrescoJsApi.activiti.taskApi.listTasks(new Task({sort: 'created-desc'})); - }); + await expect(await taskPage.taskDetails().getTitle()).toEqual('Activities'); + + const allTasks = await this.alfrescoJsApi.activiti.taskApi.listTasks(new Task({ sort: 'created-desc' })); const taskModel = new TaskModel(allTasks.data[0]); - taskPage.tasksListPage().checkContentIsDisplayed(taskModel.getName()); - expect(taskPage.taskDetails().getCreated()).toEqual(dateFormat(taskModel.getCreated(), TASK_DATE_FORMAT)); - expect(taskPage.taskDetails().getId()).toEqual(taskModel.getId()); - expect(taskPage.taskDetails().getDescription()).toEqual(CONSTANTS.TASK_DETAILS.NO_DESCRIPTION); - expect(taskPage.taskDetails().getAssignee()).toEqual(taskModel.getAssignee().getEntireName()); - expect(taskPage.taskDetails().getCategory()).toEqual(CONSTANTS.TASK_DETAILS.NO_CATEGORY); - expect(taskPage.taskDetails().getDueDate()).toEqual(CONSTANTS.TASK_DETAILS.NO_DATE); - expect(taskPage.taskDetails().getParentName()).toEqual(appModel.definition.models[0].name); - expect(taskPage.taskDetails().getDuration()).toEqual('' ); - expect(taskPage.taskDetails().getEndDate()).toEqual(''); - expect(taskPage.taskDetails().getParentTaskId()).toEqual(''); - expect(taskPage.taskDetails().getStatus()).toEqual(CONSTANTS.TASK_STATUS.RUNNING); + await taskPage.tasksListPage().checkContentIsDisplayed(taskModel.getName()); + await expect(await taskPage.taskDetails().getCreated()).toEqual(dateFormat(taskModel.getCreated(), TASK_DATE_FORMAT)); + await expect(await taskPage.taskDetails().getId()).toEqual(taskModel.getId()); + await expect(await taskPage.taskDetails().getDescription()).toEqual(CONSTANTS.TASK_DETAILS.NO_DESCRIPTION); + await expect(await taskPage.taskDetails().getAssignee()).toEqual(taskModel.getAssignee().getEntireName()); + await expect(await taskPage.taskDetails().getCategory()).toEqual(CONSTANTS.TASK_DETAILS.NO_CATEGORY); + await expect(await taskPage.taskDetails().getDueDate()).toEqual(CONSTANTS.TASK_DETAILS.NO_DATE); + await expect(await taskPage.taskDetails().getParentName()).toEqual(appModel.definition.models[1].name); + await expect(await taskPage.taskDetails().getDuration()).toEqual(''); + await expect(await taskPage.taskDetails().getEndDate()).toEqual(''); + await expect(await taskPage.taskDetails().getParentTaskId()).toEqual(''); + await expect(await taskPage.taskDetails().getStatus()).toEqual(CONSTANTS.TASK_STATUS.RUNNING); - const taskForm = await browser.controlFlow().execute(async () => { - return await this.alfrescoJsApi.activiti.taskFormsApi.getTaskForm(allTasks.data[0].id); - }); + const taskForm = await this.alfrescoJsApi.activiti.taskFormsApi.getTaskForm(allTasks.data[0].id); formModel = new FormModel(taskForm); - expect(taskPage.taskDetails().getFormName()) + await expect(await taskPage.taskDetails().getFormName()) .toEqual(formModel.getName() === null ? CONSTANTS.TASK_DETAILS.NO_FORM : formModel.getName()); }); - it('[C286708] Should display task details for subtask - Task App', async() => { + it('[C286708] Should display task details for subtask - Task App', async () => { const taskName = 'TaskAppSubtask'; const checklistName = 'TaskAppChecklist'; - browser.controlFlow().execute(async () => { - await this.alfrescoJsApi.activiti.taskApi.createNewTask({'name': taskName}); - }); + await this.alfrescoJsApi.activiti.taskApi.createNewTask({ 'name': taskName }); - processServices.goToTaskApp().clickTasksButton(); - taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); - taskPage.tasksListPage().checkContentIsDisplayed(taskName); - taskPage.tasksListPage().selectRow(taskName); + await (await processServices.goToTaskApp()).clickTasksButton(); - taskPage.clickOnAddChecklistButton().addName(checklistName).clickCreateChecklistButton(); - taskPage.checkChecklistIsDisplayed(checklistName); + await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); + await taskPage.tasksListPage().checkContentIsDisplayed(taskName); + await taskPage.tasksListPage().selectRow(taskName); - taskPage.tasksListPage().checkContentIsDisplayed(checklistName); - taskPage.tasksListPage().selectRow(checklistName); + const dialog = await taskPage.clickOnAddChecklistButton(); + await dialog.addName(checklistName); + await dialog.clickCreateChecklistButton(); - const allTasks = await browser.controlFlow().execute(async () => { - return this.alfrescoJsApi.activiti.taskApi.listTasks(new Task({ sort: 'created-desc' })); - }); + await taskPage.checkChecklistIsDisplayed(checklistName); + + await taskPage.tasksListPage().checkContentIsDisplayed(checklistName); + await taskPage.tasksListPage().selectRow(checklistName); + + const allTasks = await this.alfrescoJsApi.activiti.taskApi.listTasks(new Task({ sort: 'created-desc' })); const taskModel = new TaskModel(allTasks.data[0]); - taskPage.tasksListPage().checkContentIsDisplayed(taskModel.getName()); - expect(taskPage.taskDetails().getCreated()).toEqual(dateFormat(taskModel.getCreated(), TASK_DATE_FORMAT)); - expect(taskPage.taskDetails().getId()).toEqual(taskModel.getId()); - expect(taskPage.taskDetails().getDescription()).toEqual(CONSTANTS.TASK_DETAILS.NO_DESCRIPTION); - expect(taskPage.taskDetails().getAssignee()).toEqual(taskModel.getAssignee().getEntireName()); - expect(taskPage.taskDetails().getCategory()).toEqual(CONSTANTS.TASK_DETAILS.NO_CATEGORY); - expect(taskPage.taskDetails().getDueDate()).toEqual(CONSTANTS.TASK_DETAILS.NO_DATE); - expect(taskPage.taskDetails().getParentName()).toEqual(CONSTANTS.TASK_DETAILS.NO_PARENT); - expect(taskPage.taskDetails().getDuration()).toEqual(''); - expect(taskPage.taskDetails().getEndDate()).toEqual(''); - expect(taskPage.taskDetails().getParentTaskId()).toEqual(taskModel.getParentTaskId()); - expect(taskPage.taskDetails().getStatus()).toEqual(CONSTANTS.TASK_STATUS.RUNNING); + await taskPage.tasksListPage().checkContentIsDisplayed(taskModel.getName()); + await expect(await taskPage.taskDetails().getCreated()).toEqual(dateFormat(taskModel.getCreated(), TASK_DATE_FORMAT)); + await expect(await taskPage.taskDetails().getId()).toEqual(taskModel.getId()); + await expect(await taskPage.taskDetails().getDescription()).toEqual(CONSTANTS.TASK_DETAILS.NO_DESCRIPTION); + await expect(await taskPage.taskDetails().getAssignee()).toEqual(taskModel.getAssignee().getEntireName()); + await expect(await taskPage.taskDetails().getCategory()).toEqual(CONSTANTS.TASK_DETAILS.NO_CATEGORY); + await expect(await taskPage.taskDetails().getDueDate()).toEqual(CONSTANTS.TASK_DETAILS.NO_DATE); + await expect(await taskPage.taskDetails().getParentName()).toEqual(CONSTANTS.TASK_DETAILS.NO_PARENT); + await expect(await taskPage.taskDetails().getDuration()).toEqual(''); + await expect(await taskPage.taskDetails().getEndDate()).toEqual(''); + await expect(await taskPage.taskDetails().getParentTaskId()).toEqual(taskModel.getParentTaskId()); + await expect(await taskPage.taskDetails().getStatus()).toEqual(CONSTANTS.TASK_STATUS.RUNNING); }); - it('[C286707] Should display task details for subtask - Custom App', async() => { + it('[C286707] Should display task details for subtask - Custom App', async () => { const checklistName = 'CustomAppChecklist'; - browser.controlFlow().execute(async () => { - await apps.startProcess(this.alfrescoJsApi, appModel); - }); + await apps.startProcess(this.alfrescoJsApi, appModel); - processServices.goToApp(appModel.name).clickTasksButton(); - taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); + await (await processServices.goToTaskApp()).clickTasksButton(); - expect(taskPage.taskDetails().getTitle()).toEqual('Activities'); + await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); - taskPage.clickOnAddChecklistButton().addName(checklistName).clickCreateChecklistButton(); - taskPage.checkChecklistIsDisplayed(checklistName); + await expect(await taskPage.taskDetails().getTitle()).toEqual('Activities'); - taskPage.tasksListPage().checkContentIsDisplayed(checklistName); - taskPage.tasksListPage().selectRow(checklistName); + const dialog = await taskPage.clickOnAddChecklistButton(); + await dialog.addName(checklistName); + await dialog.clickCreateChecklistButton(); - const allTasks = await browser.controlFlow().execute(async () => { - return this.alfrescoJsApi.activiti.taskApi.listTasks(new Task({ sort: 'created-desc' })); - }); + await taskPage.checkChecklistIsDisplayed(checklistName); + + await taskPage.tasksListPage().checkContentIsDisplayed(checklistName); + await taskPage.tasksListPage().selectRow(checklistName); + + const allTasks = await this.alfrescoJsApi.activiti.taskApi.listTasks(new Task({ sort: 'created-desc' })); const taskModel = new TaskModel(allTasks.data[0]); - taskPage.tasksListPage().checkContentIsDisplayed(taskModel.getName()); - expect(taskPage.taskDetails().getCreated()).toEqual(dateFormat(taskModel.getCreated(), TASK_DATE_FORMAT)); - expect(taskPage.taskDetails().getId()).toEqual(taskModel.getId()); - expect(taskPage.taskDetails().getDescription()).toEqual(CONSTANTS.TASK_DETAILS.NO_DESCRIPTION); - expect(taskPage.taskDetails().getAssignee()).toEqual(taskModel.getAssignee().getEntireName()); - expect(taskPage.taskDetails().getCategory()).toEqual(taskModel.getCategory()); - expect(taskPage.taskDetails().getDueDate()).toEqual(CONSTANTS.TASK_DETAILS.NO_DATE); - expect(taskPage.taskDetails().getParentName()).toEqual(CONSTANTS.TASK_DETAILS.NO_PARENT); - expect(taskPage.taskDetails().getDuration()).toEqual(''); - expect(taskPage.taskDetails().getEndDate()).toEqual(''); - expect(taskPage.taskDetails().getParentTaskId()).toEqual(taskModel.getParentTaskId()); - expect(taskPage.taskDetails().getStatus()).toEqual(CONSTANTS.TASK_STATUS.RUNNING); + await taskPage.tasksListPage().checkContentIsDisplayed(taskModel.getName()); + await expect(await taskPage.taskDetails().getCreated()).toEqual(dateFormat(taskModel.getCreated(), TASK_DATE_FORMAT)); + await expect(await taskPage.taskDetails().getId()).toEqual(taskModel.getId()); + await expect(await taskPage.taskDetails().getDescription()).toEqual(CONSTANTS.TASK_DETAILS.NO_DESCRIPTION); + await expect(await taskPage.taskDetails().getAssignee()).toEqual(taskModel.getAssignee().getEntireName()); + await expect(await taskPage.taskDetails().getCategory()).toEqual(taskModel.getCategory()); + await expect(await taskPage.taskDetails().getDueDate()).toEqual(CONSTANTS.TASK_DETAILS.NO_DATE); + await expect(await taskPage.taskDetails().getParentName()).toEqual(CONSTANTS.TASK_DETAILS.NO_PARENT); + await expect(await taskPage.taskDetails().getDuration()).toEqual(''); + await expect(await taskPage.taskDetails().getEndDate()).toEqual(''); + await expect(await taskPage.taskDetails().getParentTaskId()).toEqual(taskModel.getParentTaskId()); + await expect(await taskPage.taskDetails().getStatus()).toEqual(CONSTANTS.TASK_STATUS.RUNNING); }); - it('[C286709] Should display task details for completed task - Task App', async() => { + it('[C286709] Should display task details for completed task - Task App', async () => { const taskName = 'TaskAppCompleted'; - const taskId = await browser.controlFlow().execute(async () => { - return this.alfrescoJsApi.activiti.taskApi.createNewTask({'name': taskName}); - }); + const taskId = await this.alfrescoJsApi.activiti.taskApi.createNewTask({ 'name': taskName }); - processServices.goToTaskApp().clickTasksButton(); - taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); - taskPage.tasksListPage().checkContentIsDisplayed(taskName).selectRow('Name', taskName); + await (await processServices.goToTaskApp()).clickTasksButton(); - taskPage.completeTaskNoForm(); - taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.COMPLETED_TASKS); - taskPage.tasksListPage().selectRow(taskName); + await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); - const getTaskResponse = await browser.controlFlow().execute(async () => { - return this.alfrescoJsApi.activiti.taskApi.getTask(taskId.id); - }); + await taskPage.tasksListPage().checkContentIsDisplayed(taskName); + await taskPage.tasksListPage().selectRow(taskName); + + await taskPage.completeTaskNoForm(); + await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.COMPLETED_TASKS); + await taskPage.tasksListPage().selectRow(taskName); + + const getTaskResponse = await this.alfrescoJsApi.activiti.taskApi.getTask(taskId.id); const taskModel = new TaskModel(getTaskResponse); - taskPage.tasksListPage().checkContentIsDisplayed(taskModel.getName()); - expect(taskPage.taskDetails().getCreated()).toEqual(dateFormat(taskModel.getCreated(), TASK_DATE_FORMAT)); - expect(taskPage.taskDetails().getId()).toEqual(taskModel.getId()); - expect(taskPage.taskDetails().getDescription()).toEqual(CONSTANTS.TASK_DETAILS.NO_DESCRIPTION); - expect(taskPage.taskDetails().getAssignee()).toEqual(taskModel.getAssignee().getEntireName()); - expect(taskPage.taskDetails().getCategory()).toEqual(CONSTANTS.TASK_DETAILS.NO_CATEGORY); - expect(taskPage.taskDetails().getDueDate()).toEqual(CONSTANTS.TASK_DETAILS.NO_DATE); - expect(taskPage.taskDetails().getParentName()).toEqual(CONSTANTS.TASK_DETAILS.NO_PARENT); - expect(taskPage.taskDetails().getDuration()).toEqual(taskPage.taskDetails().getDuration()); - expect(taskPage.taskDetails().getEndDate()).toEqual(taskPage.taskDetails().getEndDate()); - expect(taskPage.taskDetails().getParentTaskId()).toEqual(''); - expect(taskPage.taskDetails().getStatus()).toEqual(CONSTANTS.TASK_STATUS.COMPLETED); + await taskPage.tasksListPage().checkContentIsDisplayed(taskModel.getName()); + await expect(await taskPage.taskDetails().getCreated()).toEqual(dateFormat(taskModel.getCreated(), TASK_DATE_FORMAT)); + await expect(await taskPage.taskDetails().getId()).toEqual(taskModel.getId()); + await expect(await taskPage.taskDetails().getDescription()).toEqual(CONSTANTS.TASK_DETAILS.NO_DESCRIPTION); + await expect(await taskPage.taskDetails().getAssignee()).toEqual(taskModel.getAssignee().getEntireName()); + await expect(await taskPage.taskDetails().getCategory()).toEqual(CONSTANTS.TASK_DETAILS.NO_CATEGORY); + await expect(await taskPage.taskDetails().getDueDate()).toEqual(CONSTANTS.TASK_DETAILS.NO_DATE); + await expect(await taskPage.taskDetails().getParentName()).toEqual(CONSTANTS.TASK_DETAILS.NO_PARENT); + await expect(await taskPage.taskDetails().getDuration()).toEqual(await taskPage.taskDetails().getDuration()); + await expect(await taskPage.taskDetails().getEndDate()).toEqual(await taskPage.taskDetails().getEndDate()); + await expect(await taskPage.taskDetails().getParentTaskId()).toEqual(''); + await expect(await taskPage.taskDetails().getStatus()).toEqual(CONSTANTS.TASK_STATUS.COMPLETED); + }); + + it('[C260321] Should not be able to edit a completed task\'s details', async () => { + const taskName = 'TaskCompleted'; + const form = await this.alfrescoJsApi.activiti.modelsApi.createModel(taskFormModel); + const task = await this.alfrescoJsApi.activiti.taskApi.createNewTask({ 'name': taskName }); + await this.alfrescoJsApi.activiti.taskApi.attachForm(task.id, { 'formId': form.id }); + await this.alfrescoJsApi.activiti.taskApi.completeTaskForm(task.id, { values: { label: null } }); + + await (await processServices.goToTaskApp()).clickTasksButton(); + + await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.COMPLETED_TASKS); + + await taskPage.tasksListPage().checkContentIsDisplayed(taskName); + await taskPage.tasksListPage().selectRow(taskName); + + await taskPage.taskDetails().checkEditableAssigneeIsNotDisplayed(); + await taskPage.taskDetails().checkEditableFormIsNotDisplayed(); + await taskPage.taskDetails().checkEditDescriptionButtonIsNotDisplayed(); + await taskPage.taskDetails().checkEditPriorityButtonIsNotDisplayed(); + await taskPage.taskDetails().checkDueDatePickerButtonIsNotDisplayed(); }); }); diff --git a/e2e/process-services/task-filters-component.e2e.ts b/e2e/process-services/task-filters-component.e2e.ts index 09facf5077..b352ed13f0 100644 --- a/e2e/process-services/task-filters-component.e2e.ts +++ b/e2e/process-services/task-filters-component.e2e.ts @@ -47,17 +47,16 @@ describe('Task', () => { const app = resources.Files.APP_WITH_DATE_FIELD_FORM; let appId, tenantId; - beforeAll(async (done) => { + beforeAll(async () => { this.alfrescoJsApi = new AlfrescoApi({ provider: 'BPM', hostBpm: browser.params.testConfig.adf_aps.host }); - done(); }); - beforeEach(async (done) => { + beforeEach(async () => { const apps = new AppsActions(); const users = new UsersActions(); @@ -76,15 +75,14 @@ describe('Task', () => { await loginPage.loginToProcessServicesUsingUserModel(user); - navigationBarPage.navigateToProcessServicesPage(); + await navigationBarPage.navigateToProcessServicesPage(); - processServicesPage.checkApsContainer(); - processServicesPage.goToApp(app.title); + await processServicesPage.checkApsContainer(); + await processServicesPage.goToApp(app.title); - done(); }); - afterEach(async (done) => { + afterEach(async () => { await this.alfrescoJsApi.activiti.modelsApi.deleteModel(appId); @@ -92,109 +90,127 @@ describe('Task', () => { await this.alfrescoJsApi.activiti.adminTenantsApi.deleteTenant(tenantId); - done(); }); - it('[C279967] Should display default filters when an app is deployed', () => { - taskFiltersDemoPage.involvedTasksFilter().checkTaskFilterIsDisplayed(); - taskFiltersDemoPage.myTasksFilter().checkTaskFilterIsDisplayed(); - taskFiltersDemoPage.queuedTasksFilter().checkTaskFilterIsDisplayed(); - taskFiltersDemoPage.completedTasksFilter().checkTaskFilterIsDisplayed(); + it('[C279967] Should display default filters when an app is deployed', async () => { + await taskFiltersDemoPage.involvedTasksFilter().checkTaskFilterIsDisplayed(); + await taskFiltersDemoPage.myTasksFilter().checkTaskFilterIsDisplayed(); + await taskFiltersDemoPage.queuedTasksFilter().checkTaskFilterIsDisplayed(); + await taskFiltersDemoPage.completedTasksFilter().checkTaskFilterIsDisplayed(); }); - it('[C260330] Should display Task Filter List when app is in Task Tab', () => { - tasksPage.createNewTask().addName('Test').clickStartButton(); - taskFiltersDemoPage.myTasksFilter().clickTaskFilter(); - tasksListPage.checkContentIsDisplayed('Test'); - expect(taskFiltersDemoPage.checkActiveFilterActive()).toBe('My Tasks'); - expect(taskDetailsPage.checkTaskDetailsDisplayed()).toBeDefined(); + it('[C260330] Should display Task Filter List when app is in Task Tab', async () => { + const task = await tasksPage.createNewTask(); + await task.addName('Test'); + await task.clickStartButton(); + await taskFiltersDemoPage.myTasksFilter().clickTaskFilter(); + await tasksListPage.checkContentIsDisplayed('Test'); + await expect(await taskFiltersDemoPage.checkActiveFilterActive()).toBe('My Tasks'); + await expect(await taskDetailsPage.checkTaskDetailsDisplayed()).toBeDefined(); - taskFiltersDemoPage.queuedTasksFilter().clickTaskFilter(); - expect(taskFiltersDemoPage.checkActiveFilterActive()).toBe('Queued Tasks'); - tasksListPage.checkContentIsNotDisplayed('Test'); - expect(taskDetailsPage.checkTaskDetailsEmpty()).toBeDefined(); + await taskFiltersDemoPage.queuedTasksFilter().clickTaskFilter(); + await expect(await taskFiltersDemoPage.checkActiveFilterActive()).toBe('Queued Tasks'); + await tasksListPage.checkContentIsNotDisplayed('Test'); + await expect(await taskDetailsPage.checkTaskDetailsEmpty()).toBeDefined(); - taskFiltersDemoPage.involvedTasksFilter().clickTaskFilter(); - expect(taskFiltersDemoPage.checkActiveFilterActive()).toBe('Involved Tasks'); - tasksListPage.checkContentIsDisplayed('Test'); - expect(taskDetailsPage.checkTaskDetailsDisplayed()).toBeDefined(); + await taskFiltersDemoPage.involvedTasksFilter().clickTaskFilter(); + await expect(await taskFiltersDemoPage.checkActiveFilterActive()).toBe('Involved Tasks'); + await tasksListPage.checkContentIsDisplayed('Test'); + await expect(await taskDetailsPage.checkTaskDetailsDisplayed()).toBeDefined(); - taskFiltersDemoPage.completedTasksFilter().clickTaskFilter(); - expect(taskFiltersDemoPage.checkActiveFilterActive()).toBe('Completed Tasks'); - tasksListPage.checkContentIsNotDisplayed('Test'); - expect(taskDetailsPage.checkTaskDetailsEmpty()).toBeDefined(); + await taskFiltersDemoPage.completedTasksFilter().clickTaskFilter(); + await expect(await taskFiltersDemoPage.checkActiveFilterActive()).toBe('Completed Tasks'); + await tasksListPage.checkContentIsNotDisplayed('Test'); + await expect(await taskDetailsPage.checkTaskDetailsEmpty()).toBeDefined(); }); - it('[C260348] Should display task in Complete Tasks List when task is completed', () => { - expect(taskFiltersDemoPage.myTasksFilter().checkTaskFilterIsDisplayed()).toBeDefined(); - expect(taskFiltersDemoPage.queuedTasksFilter().checkTaskFilterIsDisplayed()).toBeDefined(); - expect(taskFiltersDemoPage.involvedTasksFilter().checkTaskFilterIsDisplayed()).toBeDefined(); - expect(taskFiltersDemoPage.completedTasksFilter().checkTaskFilterIsDisplayed).toBeDefined(); + it('[C260348] Should display task in Complete Tasks List when task is completed', async () => { + await taskFiltersDemoPage.myTasksFilter().checkTaskFilterIsDisplayed(); + await taskFiltersDemoPage.queuedTasksFilter().checkTaskFilterIsDisplayed(); + await taskFiltersDemoPage.involvedTasksFilter().checkTaskFilterIsDisplayed(); + await taskFiltersDemoPage.completedTasksFilter().checkTaskFilterIsDisplayed(); - expect(taskFiltersDemoPage.myTasksFilter().checkTaskFilterIsDisplayed()).toBeDefined(); - expect(taskFiltersDemoPage.queuedTasksFilter().checkTaskFilterIsDisplayed()).toBeDefined(); - expect(taskFiltersDemoPage.involvedTasksFilter().checkTaskFilterIsDisplayed).toBeDefined(); - expect(taskFiltersDemoPage.completedTasksFilter().checkTaskFilterIsDisplayed).toBeDefined(); + await taskFiltersDemoPage.myTasksFilter().checkTaskFilterIsDisplayed(); + await taskFiltersDemoPage.queuedTasksFilter().checkTaskFilterIsDisplayed(); + await taskFiltersDemoPage.involvedTasksFilter().checkTaskFilterIsDisplayed(); + await taskFiltersDemoPage.completedTasksFilter().checkTaskFilterIsDisplayed(); - tasksPage.createNewTask().addName('Test').clickStartButton(); - taskFiltersDemoPage.myTasksFilter().clickTaskFilter(); - tasksListPage.checkContentIsDisplayed('Test'); - expect(taskFiltersDemoPage.checkActiveFilterActive()).toBe('My Tasks'); - expect(taskDetailsPage.checkTaskDetailsDisplayed()).toBeDefined(); + const task = await tasksPage.createNewTask(); + await task.addName('Test'); + await task.clickStartButton(); + await taskFiltersDemoPage.myTasksFilter().clickTaskFilter(); + await tasksListPage.checkContentIsDisplayed('Test'); + await expect(await taskFiltersDemoPage.checkActiveFilterActive()).toBe('My Tasks'); + await expect(await taskDetailsPage.checkTaskDetailsDisplayed()).toBeDefined(); - taskFiltersDemoPage.queuedTasksFilter().clickTaskFilter(); - expect(taskFiltersDemoPage.checkActiveFilterActive()).toBe('Queued Tasks'); - expect(tasksListPage.getNoTasksFoundMessage()).toBe('No Tasks Found'); - expect(taskDetailsPage.getEmptyTaskDetailsMessage()).toBe('No task details found'); + await taskFiltersDemoPage.queuedTasksFilter().clickTaskFilter(); + await expect(await taskFiltersDemoPage.checkActiveFilterActive()).toBe('Queued Tasks'); + await expect(await tasksListPage.getNoTasksFoundMessage()).toBe('No Tasks Found'); + await expect(await taskDetailsPage.getEmptyTaskDetailsMessage()).toBe('No task details found'); - taskFiltersDemoPage.involvedTasksFilter().clickTaskFilter(); - expect(taskFiltersDemoPage.checkActiveFilterActive()).toBe('Involved Tasks'); - tasksListPage.checkContentIsDisplayed('Test'); - expect(taskDetailsPage.checkTaskDetailsDisplayed()).toBeDefined(); + await taskFiltersDemoPage.involvedTasksFilter().clickTaskFilter(); + await expect(await taskFiltersDemoPage.checkActiveFilterActive()).toBe('Involved Tasks'); + await tasksListPage.checkContentIsDisplayed('Test'); + await expect(await taskDetailsPage.checkTaskDetailsDisplayed()).toBeDefined(); - taskFiltersDemoPage.completedTasksFilter().clickTaskFilter(); - expect(taskFiltersDemoPage.checkActiveFilterActive()).toBe('Completed Tasks'); - expect(tasksListPage.getNoTasksFoundMessage()).toBe('No Tasks Found'); - expect(taskDetailsPage.getEmptyTaskDetailsMessage()).toBe('No task details found'); + await taskFiltersDemoPage.completedTasksFilter().clickTaskFilter(); + await expect(await taskFiltersDemoPage.checkActiveFilterActive()).toBe('Completed Tasks'); + await expect(await tasksListPage.getNoTasksFoundMessage()).toBe('No Tasks Found'); + await expect(await taskDetailsPage.getEmptyTaskDetailsMessage()).toBe('No task details found'); }); - it('[C260349] Should sort task by name when Name sorting is clicked', () => { - tasksPage.createNewTask().addName('Test1').clickStartButton(); - taskDetailsPage.clickCompleteTask(); - tasksPage.createNewTask().addName('Test2').clickStartButton(); - taskDetailsPage.clickCompleteTask(); - tasksPage.createNewTask().addName('Test3').clickStartButton(); + it('[C260349] Should sort task by name when Name sorting is clicked', async () => { + const task = await tasksPage.createNewTask(); + await task.addName('Test1'); + await task.clickStartButton(); - tasksPage.createNewTask().addName('Test4').clickStartButton(); - tasksListPage.checkContentIsDisplayed('Test4'); - tasksListPage.checkRowIsSelected('Test4'); - tasksListPage.checkContentIsDisplayed('Test3'); - taskDetailsPage.checkTaskDetailsDisplayed(); + await taskDetailsPage.clickCompleteTask(); - tasksPage.clickSortByNameAsc(); - expect(tasksListPage.getDataTable().contentInPosition(1)).toBe('Test3'); - tasksPage.clickSortByNameDesc(); - expect(tasksListPage.getDataTable().contentInPosition(1)).toBe('Test4'); + const task2 = await tasksPage.createNewTask(); + await task2.addName('Test2'); + await task2.clickStartButton(); - taskFiltersDemoPage.completedTasksFilter().clickTaskFilter(); - tasksListPage.checkContentIsDisplayed('Test1'); - tasksListPage.checkContentIsDisplayed('Test2'); - expect(tasksListPage.getDataTable().contentInPosition(1)).toBe('Test2'); + await taskDetailsPage.clickCompleteTask(); - tasksPage.clickSortByNameAsc(); - expect(tasksListPage.getDataTable().contentInPosition(1)).toBe('Test1'); + const task3 = await tasksPage.createNewTask(); + await task3.addName('Test3'); + await task3.clickStartButton(); - taskFiltersDemoPage.involvedTasksFilter().clickTaskFilter(); - tasksListPage.checkContentIsDisplayed('Test3'); - tasksListPage.checkContentIsDisplayed('Test4'); + const task4 = await tasksPage.createNewTask(); + await task4.addName('Test4'); + await task4.clickStartButton(); + + await tasksListPage.checkContentIsDisplayed('Test4'); + await tasksListPage.checkRowIsSelected('Test4'); + await tasksListPage.checkContentIsDisplayed('Test3'); + await taskDetailsPage.checkTaskDetailsDisplayed(); + + await tasksPage.clickSortByNameAsc(); + await expect(await tasksListPage.getDataTable().contentInPosition(1)).toBe('Test3'); + await tasksPage.clickSortByNameDesc(); + await expect(await tasksListPage.getDataTable().contentInPosition(1)).toBe('Test4'); + + await taskFiltersDemoPage.completedTasksFilter().clickTaskFilter(); + await tasksListPage.checkContentIsDisplayed('Test1'); + await tasksListPage.checkContentIsDisplayed('Test2'); + await expect(await tasksListPage.getDataTable().contentInPosition(1)).toBe('Test2'); + + await tasksPage.clickSortByNameAsc(); + await expect(await tasksListPage.getDataTable().contentInPosition(1)).toBe('Test1'); + + await taskFiltersDemoPage.involvedTasksFilter().clickTaskFilter(); + await tasksListPage.checkContentIsDisplayed('Test3'); + await tasksListPage.checkContentIsDisplayed('Test4'); }); - it('[C277264] Should display task filter results when task filter is selected', () => { - tasksPage.createNewTask().addName('Test').clickStartButton(); + it('[C277264] Should display task filter results when task filter is selected', async () => { + const task = await tasksPage.createNewTask(); + await task.addName('Test'); + await task.clickStartButton(); - taskFiltersDemoPage.myTasksFilter().clickTaskFilter(); - tasksListPage.checkContentIsDisplayed('Test'); - expect(taskDetailsPage.getTaskDetailsTitle()).toBe('Test'); + await taskFiltersDemoPage.myTasksFilter().clickTaskFilter(); + await tasksListPage.checkContentIsDisplayed('Test'); + await expect(await taskDetailsPage.getTaskDetailsTitle()).toBe('Test'); }); }); @@ -215,7 +231,7 @@ describe('Task', () => { const app = resources.Files.APP_WITH_PROCESSES; - beforeAll(async (done) => { + beforeAll(async () => { const apps = new AppsActions(); const users = new UsersActions(); @@ -240,186 +256,64 @@ describe('Task', () => { await loginPage.loginToProcessServicesUsingUserModel(user); - done(); - }); beforeEach(async () => { - navigationBarPage.navigateToProcessServicesPage(); - processServicesPage.checkApsContainer(); - processServicesPage.goToApp(app.title); + await navigationBarPage.navigateToProcessServicesPage(); + await processServicesPage.checkApsContainer(); + await processServicesPage.goToApp(app.title); }); - it('[C260350] Should display a new filter when a filter is added', () => { - browser.controlFlow().execute(async () => { - const newFilter: any = new UserProcessInstanceFilterRepresentation(); - newFilter.name = 'New Task Filter'; - newFilter.appId = appId; - newFilter.icon = 'glyphicon-filter'; - newFilter.filter = { sort: 'created-desc', state: 'completed', assignment: 'involved' }; + it('[C260350] Should display a new filter when a filter is added', async () => { + const newFilter: any = new UserProcessInstanceFilterRepresentation(); + newFilter.name = 'New Task Filter'; + newFilter.appId = appId; + newFilter.icon = 'glyphicon-filter'; + newFilter.filter = { sort: 'created-desc', state: 'completed', assignment: 'involved' }; - const result = await this.alfrescoJsApi.activiti.userFiltersApi.createUserTaskFilter(newFilter); + const result = await this.alfrescoJsApi.activiti.userFiltersApi.createUserTaskFilter(newFilter); - taskFilterId = result.id; - return result; - }); + taskFilterId = result.id; - browser.refresh(); + await browser.refresh(); - taskFiltersDemoPage.customTaskFilter('New Task Filter').checkTaskFilterIsDisplayed(); + await taskFiltersDemoPage.customTaskFilter('New Task Filter').checkTaskFilterIsDisplayed(); - browser.controlFlow().execute(() => { - const result = this.alfrescoJsApi.activiti.userFiltersApi.deleteUserTaskFilter(taskFilterId); - return result; - }); + await this.alfrescoJsApi.activiti.userFiltersApi.deleteUserTaskFilter(taskFilterId); }); - it('[C286447] Should display the task filter icon when a custom filter is added', () => { - browser.controlFlow().execute(async () => { - const newFilter: any = new UserProcessInstanceFilterRepresentation(); - newFilter.name = 'New Task Filter with icon'; - newFilter.appId = appId; - newFilter.icon = 'glyphicon-cloud'; - newFilter.filter = { sort: 'created-desc', state: 'completed', assignment: 'involved' }; + it('[C286447] Should display the task filter icon when a custom filter is added', async () => { + const newFilter: any = new UserProcessInstanceFilterRepresentation(); + newFilter.name = 'New Task Filter with icon'; + newFilter.appId = appId; + newFilter.icon = 'glyphicon-cloud'; + newFilter.filter = { sort: 'created-desc', state: 'completed', assignment: 'involved' }; - const result = await this.alfrescoJsApi.activiti.userFiltersApi.createUserTaskFilter(newFilter); + const result = await this.alfrescoJsApi.activiti.userFiltersApi.createUserTaskFilter(newFilter); - taskFilterId = result.id; - return result; - }); + taskFilterId = result.id; - browser.refresh(); - processServiceTabBarPage.clickSettingsButton(); - browser.sleep(500); - appSettingsToggles.enableTaskFiltersIcon(); - processServiceTabBarPage.clickTasksButton(); + await browser.refresh(); + await processServiceTabBarPage.clickSettingsButton(); + await browser.sleep(500); + await appSettingsToggles.enableTaskFiltersIcon(); + await processServiceTabBarPage.clickTasksButton(); - taskFiltersDemoPage.customTaskFilter('New Task Filter with icon').checkTaskFilterIsDisplayed(); - expect(taskFiltersDemoPage.customTaskFilter('New Task Filter with icon').getTaskFilterIcon()).toEqual('cloud'); + await taskFiltersDemoPage.customTaskFilter('New Task Filter with icon').checkTaskFilterIsDisplayed(); + await expect(await taskFiltersDemoPage.customTaskFilter('New Task Filter with icon').getTaskFilterIcon()).toEqual('cloud'); - browser.controlFlow().execute(() => { - const result = this.alfrescoJsApi.activiti.userFiltersApi.deleteUserTaskFilter(taskFilterId); - return result; - }); + await this.alfrescoJsApi.activiti.userFiltersApi.deleteUserTaskFilter(taskFilterId); }); - it('[C286449] Should display task filter icons only when showIcon property is set on true', () => { - taskFiltersDemoPage.myTasksFilter().checkTaskFilterHasNoIcon(); + it('[C286449] Should display task filter icons only when showIcon property is set on true', async () => { + await taskFiltersDemoPage.myTasksFilter().checkTaskFilterHasNoIcon(); - processServiceTabBarPage.clickSettingsButton(); - appSettingsToggles.enableTaskFiltersIcon(); - processServiceTabBarPage.clickTasksButton(); + await processServiceTabBarPage.clickSettingsButton(); + await appSettingsToggles.enableTaskFiltersIcon(); + await processServiceTabBarPage.clickTasksButton(); - taskFiltersDemoPage.myTasksFilter().checkTaskFilterIsDisplayed(); - expect(taskFiltersDemoPage.myTasksFilter().getTaskFilterIcon()).toEqual('inbox'); - }); - - it('[C260353] Should display changes on a filter when this filter is edited', () => { - browser.controlFlow().execute(async () => { - const newFilter: any = new UserProcessInstanceFilterRepresentation(); - newFilter.name = 'New Task Filter'; - newFilter.appId = appId; - newFilter.icon = 'glyphicon-filter'; - newFilter.filter = { sort: 'created-desc', state: 'completed', assignment: 'involved' }; - - const result = await this.alfrescoJsApi.activiti.userFiltersApi.createUserTaskFilter(newFilter); - - taskFilterId = result.id; - return result; - }); - - browser.refresh(); - - taskFiltersDemoPage.customTaskFilter('New Task Filter').checkTaskFilterIsDisplayed(); - - browser.controlFlow().execute(() => { - const newFilter: any = new UserProcessInstanceFilterRepresentation(); - newFilter.name = 'Task Filter Edited'; - newFilter.appId = appId; - newFilter.icon = 'glyphicon-filter'; - newFilter.filter = { sort: 'created-desc', state: 'completed', assignment: 'involved' }; - - const result = this.alfrescoJsApi.activiti.userFiltersApi.updateUserTaskFilter(taskFilterId, newFilter); - return result; - }); - - browser.refresh(); - - taskFiltersDemoPage.customTaskFilter('Task Filter Edited').checkTaskFilterIsDisplayed(); - - browser.controlFlow().execute(() => { - const result = this.alfrescoJsApi.activiti.userFiltersApi.deleteUserTaskFilter(taskFilterId); - return result; - }); - }); - - it('[C286448] Should display changes on a task filter when this filter icon is edited', () => { - browser.controlFlow().execute(async () => { - const newFilter: any = new UserProcessInstanceFilterRepresentation(); - newFilter.name = 'Task Filter Edited icon'; - newFilter.appId = appId; - newFilter.icon = 'glyphicon-filter'; - newFilter.filter = { sort: 'created-desc', state: 'completed', assignment: 'involved' }; - - const result = await this.alfrescoJsApi.activiti.userFiltersApi.createUserTaskFilter(newFilter); - - taskFilterId = result.id; - return result; - }); - - browser.refresh(); - - taskFiltersDemoPage.customTaskFilter('Task Filter Edited icon').checkTaskFilterIsDisplayed(); - - browser.controlFlow().execute(() => { - const newFilter: any = new UserProcessInstanceFilterRepresentation(); - newFilter.name = 'Task Filter Edited icon'; - newFilter.appId = appId; - newFilter.icon = 'glyphicon-cloud'; - newFilter.filter = { sort: 'created-desc', state: 'completed', assignment: 'involved' }; - - const result = this.alfrescoJsApi.activiti.userFiltersApi.updateUserTaskFilter(taskFilterId, newFilter); - return result; - }); - - browser.refresh(); - processServiceTabBarPage.clickSettingsButton(); - - browser.sleep(500); - - appSettingsToggles.enableTaskFiltersIcon(); - processServiceTabBarPage.clickTasksButton(); - - taskFiltersDemoPage.customTaskFilter('Task Filter Edited icon').checkTaskFilterIsDisplayed(); - expect(taskFiltersDemoPage.customTaskFilter('Task Filter Edited icon').getTaskFilterIcon()).toEqual('cloud'); - }); - - it('[C260354] Should not display task filter when this filter is deleted', () => { - browser.controlFlow().execute(async () => { - const newFilter: any = new UserProcessInstanceFilterRepresentation(); - newFilter.name = 'New Task Filter'; - newFilter.appId = appId; - newFilter.icon = 'glyphicon-filter'; - newFilter.filter = { sort: 'created-desc', state: 'completed', assignment: 'involved' }; - - const result = await this.alfrescoJsApi.activiti.userFiltersApi.createUserTaskFilter(newFilter); - - taskFilterId = result.id; - return result; - }); - - browser.refresh(); - - taskFiltersDemoPage.customTaskFilter('New Task Filter').checkTaskFilterIsDisplayed(); - - browser.controlFlow().execute(() => { - const result = this.alfrescoJsApi.activiti.userFiltersApi.deleteUserTaskFilter(taskFilterId); - return result; - }); - - browser.refresh(); - - taskFiltersDemoPage.customTaskFilter('New Task Filter').checkTaskFilterNotDisplayed(); + await taskFiltersDemoPage.myTasksFilter().checkTaskFilterIsDisplayed(); + await expect(await taskFiltersDemoPage.myTasksFilter().getTaskFilterIcon()).toEqual('inbox'); }); }); diff --git a/e2e/process-services/task-filters-sorting.e2e.ts b/e2e/process-services/task-filters-sorting.e2e.ts index 53934db797..8c5858959f 100644 --- a/e2e/process-services/task-filters-sorting.e2e.ts +++ b/e2e/process-services/task-filters-sorting.e2e.ts @@ -53,7 +53,7 @@ describe('Task Filters Sorting', () => { { name: 'Task 5', dueDate: '02/01/2019' }, { name: 'Task 6', dueDate: '03/01/2019' }]; - beforeAll(async (done) => { + beforeAll(async () => { const apps = new AppsActions(); const users = new UsersActions(); @@ -78,202 +78,190 @@ describe('Task Filters Sorting', () => { await loginPage.loginToProcessServicesUsingUserModel(user); - navigationBarPage.navigateToProcessServicesPage(); - processServicesPage.checkApsContainer(); - processServicesPage.goToApp(app.title); + await navigationBarPage.navigateToProcessServicesPage(); + await processServicesPage.checkApsContainer(); + await processServicesPage.goToApp(app.title); - tasksPage.createNewTask().addName(tasks[0].name).addDueDate(tasks[0].dueDate).clickStartButton(); - taskDetailsPage.clickCompleteTask(); + const task = await tasksPage.createNewTask(); + await task.addName(tasks[0].name); + await task.addDueDate(tasks[0].dueDate); + await task.clickStartButton(); - tasksPage.createNewTask().addName(tasks[1].name).addDueDate(tasks[1].dueDate).clickStartButton(); - taskDetailsPage.clickCompleteTask(); + await taskDetailsPage.clickCompleteTask(); - tasksPage.createNewTask().addName(tasks[2].name).addDueDate(tasks[2].dueDate).clickStartButton(); - taskDetailsPage.clickCompleteTask(); + const task2 = await tasksPage.createNewTask(); - tasksPage.createNewTask().addName(tasks[3].name).addDueDate(tasks[3].dueDate).clickStartButton(); - tasksPage.createNewTask().addName(tasks[4].name).addDueDate(tasks[4].dueDate).clickStartButton(); - tasksPage.createNewTask().addName(tasks[5].name).addDueDate(tasks[5].dueDate).clickStartButton(); + await task2.addName(tasks[1].name); + await task2.addDueDate(tasks[1].dueDate); + await task2.clickStartButton(); + await taskDetailsPage.clickCompleteTask(); - done(); + const task3 = await tasksPage.createNewTask(); + await task3.addName(tasks[2].name); + await task3.addDueDate(tasks[2].dueDate); + await task3.clickStartButton(); + await taskDetailsPage.clickCompleteTask(); + + const task4 = await tasksPage.createNewTask(); + await task4.addName(tasks[3].name); + await task4.addDueDate(tasks[3].dueDate); + await task4.clickStartButton(); + + const task5 = await tasksPage.createNewTask(); + await task5.addName(tasks[4].name); + await task5.addDueDate(tasks[4].dueDate); + await task5.clickStartButton(); + + const task6 = await tasksPage.createNewTask(); + await task6.addName(tasks[5].name); + await task6.addDueDate(tasks[5].dueDate); + await task6.clickStartButton(); }); - it('[C277254] Should display tasks under new filter from newest to oldest when they are completed', () => { - browser.controlFlow().execute(async () => { - const newFilter: any = new UserProcessInstanceFilterRepresentation(); - newFilter.name = 'Newest first'; - newFilter.appId = appId; - newFilter.icon = 'glyphicon-filter'; - newFilter.filter = { sort: 'created-desc', state: 'completed', assignment: 'involved' }; + it('[C277254] Should display tasks under new filter from newest to oldest when they are completed', async () => { + const newFilter: any = new UserProcessInstanceFilterRepresentation(); + newFilter.name = 'Newest first'; + newFilter.appId = appId; + newFilter.icon = 'glyphicon-filter'; + newFilter.filter = { sort: 'created-desc', state: 'completed', assignment: 'involved' }; - const result = await this.alfrescoJsApi.activiti.userFiltersApi.createUserTaskFilter(newFilter); + await this.alfrescoJsApi.activiti.userFiltersApi.createUserTaskFilter(newFilter); - return result; - }); + await browser.refresh(); - browser.refresh(); + await taskFiltersDemoPage.customTaskFilter('Newest first').clickTaskFilter(); - taskFiltersDemoPage.customTaskFilter('Newest first').clickTaskFilter(); - - expect(tasksListPage.getDataTable().contentInPosition(1)).toBe(tasks[2].name); - expect(tasksListPage.getDataTable().contentInPosition(2)).toBe(tasks[1].name); - expect(tasksListPage.getDataTable().contentInPosition(3)).toBe(tasks[0].name); + await expect(await tasksListPage.getDataTable().contentInPosition(1)).toBe(tasks[2].name); + await expect(await tasksListPage.getDataTable().contentInPosition(2)).toBe(tasks[1].name); + await expect(await tasksListPage.getDataTable().contentInPosition(3)).toBe(tasks[0].name); }); - it('[C277255] Should display tasks under new filter from oldest to newest when they are completed', () => { - browser.controlFlow().execute(async () => { - const newFilter: any = new UserProcessInstanceFilterRepresentation(); - newFilter.name = 'Newest last'; - newFilter.appId = appId; - newFilter.icon = 'glyphicon-filter'; - newFilter.filter = { sort: 'created-asc', state: 'completed', assignment: 'involved' }; + it('[C277255] Should display tasks under new filter from oldest to newest when they are completed', async () => { + const newFilter: any = new UserProcessInstanceFilterRepresentation(); + newFilter.name = 'Newest last'; + newFilter.appId = appId; + newFilter.icon = 'glyphicon-filter'; + newFilter.filter = { sort: 'created-asc', state: 'completed', assignment: 'involved' }; - const result = await this.alfrescoJsApi.activiti.userFiltersApi.createUserTaskFilter(newFilter); + await this.alfrescoJsApi.activiti.userFiltersApi.createUserTaskFilter(newFilter); - return result; - }); + await browser.refresh(); - browser.refresh(); + await taskFiltersDemoPage.customTaskFilter('Newest last').clickTaskFilter(); - taskFiltersDemoPage.customTaskFilter('Newest last').clickTaskFilter(); - - expect(tasksListPage.getDataTable().contentInPosition(1)).toBe(tasks[0].name); - expect(tasksListPage.getDataTable().contentInPosition(2)).toBe(tasks[1].name); - expect(tasksListPage.getDataTable().contentInPosition(3)).toBe(tasks[2].name); + await expect(await tasksListPage.getDataTable().contentInPosition(1)).toBe(tasks[0].name); + await expect(await tasksListPage.getDataTable().contentInPosition(2)).toBe(tasks[1].name); + await expect(await tasksListPage.getDataTable().contentInPosition(3)).toBe(tasks[2].name); }); - it('[C277256] Should display tasks under new filter from closest due date to farthest when they are completed', () => { - browser.controlFlow().execute(async () => { - const newFilter: any = new UserProcessInstanceFilterRepresentation(); - newFilter.name = 'Due first'; - newFilter.appId = appId; - newFilter.icon = 'glyphicon-filter'; - newFilter.filter = { sort: 'due-desc', state: 'completed', assignment: 'involved' }; + it('[C277256] Should display tasks under new filter from closest due date to farthest when they are completed', async () => { + const newFilter: any = new UserProcessInstanceFilterRepresentation(); + newFilter.name = 'Due first'; + newFilter.appId = appId; + newFilter.icon = 'glyphicon-filter'; + newFilter.filter = { sort: 'due-desc', state: 'completed', assignment: 'involved' }; - const result = await this.alfrescoJsApi.activiti.userFiltersApi.createUserTaskFilter(newFilter); + await this.alfrescoJsApi.activiti.userFiltersApi.createUserTaskFilter(newFilter); - return result; - }); + await browser.refresh(); - browser.refresh(); + await taskFiltersDemoPage.customTaskFilter('Due first').clickTaskFilter(); - taskFiltersDemoPage.customTaskFilter('Due first').clickTaskFilter(); - - expect(tasksListPage.getDataTable().contentInPosition(1)).toBe(tasks[2].name); - expect(tasksListPage.getDataTable().contentInPosition(2)).toBe(tasks[1].name); - expect(tasksListPage.getDataTable().contentInPosition(3)).toBe(tasks[0].name); + await expect(await tasksListPage.getDataTable().contentInPosition(1)).toBe(tasks[2].name); + await expect(await tasksListPage.getDataTable().contentInPosition(2)).toBe(tasks[1].name); + await expect(await tasksListPage.getDataTable().contentInPosition(3)).toBe(tasks[0].name); }); - it('[C277257] Should display tasks under new filter from farthest due date to closest when they are completed', () => { - browser.controlFlow().execute(async () => { - const newFilter: any = new UserProcessInstanceFilterRepresentation(); - newFilter.name = 'Due last'; - newFilter.appId = appId; - newFilter.icon = 'glyphicon-filter'; - newFilter.filter = { sort: 'due-asc', state: 'completed', assignment: 'involved' }; + it('[C277257] Should display tasks under new filter from farthest due date to closest when they are completed', async () => { + const newFilter: any = new UserProcessInstanceFilterRepresentation(); + newFilter.name = 'Due last'; + newFilter.appId = appId; + newFilter.icon = 'glyphicon-filter'; + newFilter.filter = { sort: 'due-asc', state: 'completed', assignment: 'involved' }; - const result = await this.alfrescoJsApi.activiti.userFiltersApi.createUserTaskFilter(newFilter); + await this.alfrescoJsApi.activiti.userFiltersApi.createUserTaskFilter(newFilter); - return result; - }); + await browser.refresh(); - browser.refresh(); + await taskFiltersDemoPage.customTaskFilter('Due last').clickTaskFilter(); - taskFiltersDemoPage.customTaskFilter('Due last').clickTaskFilter(); - - expect(tasksListPage.getDataTable().contentInPosition(1)).toBe(tasks[0].name); - expect(tasksListPage.getDataTable().contentInPosition(2)).toBe(tasks[1].name); - expect(tasksListPage.getDataTable().contentInPosition(3)).toBe(tasks[2].name); + await expect(await tasksListPage.getDataTable().contentInPosition(1)).toBe(tasks[0].name); + await expect(await tasksListPage.getDataTable().contentInPosition(2)).toBe(tasks[1].name); + await expect(await tasksListPage.getDataTable().contentInPosition(3)).toBe(tasks[2].name); }); - it('[C277258] Should display tasks under new filter from newest to oldest when they are open ', () => { - browser.controlFlow().execute(async () => { - const newFilter: any = new UserProcessInstanceFilterRepresentation(); - newFilter.name = 'Newest first Open'; - newFilter.appId = appId; - newFilter.icon = 'glyphicon-filter'; - newFilter.filter = { sort: 'created-desc', state: 'open', assignment: 'involved' }; + it('[C277258] Should display tasks under new filter from newest to oldest when they are open ', async () => { + const newFilter: any = new UserProcessInstanceFilterRepresentation(); + newFilter.name = 'Newest first Open'; + newFilter.appId = appId; + newFilter.icon = 'glyphicon-filter'; + newFilter.filter = { sort: 'created-desc', state: 'open', assignment: 'involved' }; - const result = await this.alfrescoJsApi.activiti.userFiltersApi.createUserTaskFilter(newFilter); + await this.alfrescoJsApi.activiti.userFiltersApi.createUserTaskFilter(newFilter); - return result; - }); + await browser.refresh(); - browser.refresh(); + await taskFiltersDemoPage.customTaskFilter('Newest first Open').clickTaskFilter(); - taskFiltersDemoPage.customTaskFilter('Newest first Open').clickTaskFilter(); - - expect(tasksListPage.getDataTable().contentInPosition(1)).toBe(tasks[5].name); - expect(tasksListPage.getDataTable().contentInPosition(2)).toBe(tasks[4].name); - expect(tasksListPage.getDataTable().contentInPosition(3)).toBe(tasks[3].name); + await expect(await tasksListPage.getDataTable().contentInPosition(1)).toBe(tasks[5].name); + await expect(await tasksListPage.getDataTable().contentInPosition(2)).toBe(tasks[4].name); + await expect(await tasksListPage.getDataTable().contentInPosition(3)).toBe(tasks[3].name); }); - it('[C277259] Should display tasks under new filter from oldest to newest when they are open', () => { - browser.controlFlow().execute(async () => { - const newFilter: any = new UserProcessInstanceFilterRepresentation(); - newFilter.name = 'Newest last Open'; - newFilter.appId = appId; - newFilter.icon = 'glyphicon-filter'; - newFilter.filter = { sort: 'created-asc', state: 'open', assignment: 'involved' }; + it('[C277259] Should display tasks under new filter from oldest to newest when they are open', async () => { + const newFilter: any = new UserProcessInstanceFilterRepresentation(); + newFilter.name = 'Newest last Open'; + newFilter.appId = appId; + newFilter.icon = 'glyphicon-filter'; + newFilter.filter = { sort: 'created-asc', state: 'open', assignment: 'involved' }; - const result = await this.alfrescoJsApi.activiti.userFiltersApi.createUserTaskFilter(newFilter); + await this.alfrescoJsApi.activiti.userFiltersApi.createUserTaskFilter(newFilter); - return result; - }); + await browser.refresh(); - browser.refresh(); + await taskFiltersDemoPage.customTaskFilter('Newest last Open').clickTaskFilter(); - taskFiltersDemoPage.customTaskFilter('Newest last Open').clickTaskFilter(); - - expect(tasksListPage.getDataTable().contentInPosition(1)).toBe(tasks[3].name); - expect(tasksListPage.getDataTable().contentInPosition(2)).toBe(tasks[4].name); - expect(tasksListPage.getDataTable().contentInPosition(3)).toBe(tasks[5].name); + await expect(await tasksListPage.getDataTable().contentInPosition(1)).toBe(tasks[3].name); + await expect(await tasksListPage.getDataTable().contentInPosition(2)).toBe(tasks[4].name); + await expect(await tasksListPage.getDataTable().contentInPosition(3)).toBe(tasks[5].name); }); - it('[C277260] Should display tasks under new filter from closest due date to farthest when they are open', () => { - browser.controlFlow().execute(async () => { - const newFilter: any = new UserProcessInstanceFilterRepresentation(); - newFilter.name = 'Due first Open'; - newFilter.appId = appId; - newFilter.icon = 'glyphicon-filter'; - newFilter.filter = { sort: 'due-desc', state: 'open', assignment: 'involved' }; + it('[C277260] Should display tasks under new filter from closest due date to farthest when they are open', async () => { + const newFilter: any = new UserProcessInstanceFilterRepresentation(); + newFilter.name = 'Due first Open'; + newFilter.appId = appId; + newFilter.icon = 'glyphicon-filter'; + newFilter.filter = { sort: 'due-desc', state: 'open', assignment: 'involved' }; - const result = await this.alfrescoJsApi.activiti.userFiltersApi.createUserTaskFilter(newFilter); + await this.alfrescoJsApi.activiti.userFiltersApi.createUserTaskFilter(newFilter); - return result; - }); + await browser.refresh(); - browser.refresh(); + await taskFiltersDemoPage.customTaskFilter('Due first Open').clickTaskFilter(); - taskFiltersDemoPage.customTaskFilter('Due first Open').clickTaskFilter(); - - expect(tasksListPage.getDataTable().contentInPosition(1)).toBe(tasks[5].name); - expect(tasksListPage.getDataTable().contentInPosition(2)).toBe(tasks[4].name); - expect(tasksListPage.getDataTable().contentInPosition(3)).toBe(tasks[3].name); + await expect(await tasksListPage.getDataTable().contentInPosition(1)).toBe(tasks[5].name); + await expect(await tasksListPage.getDataTable().contentInPosition(2)).toBe(tasks[4].name); + await expect(await tasksListPage.getDataTable().contentInPosition(3)).toBe(tasks[3].name); }); - it('[C277261] Should display tasks under new filter from farthest due date to closest when they are open', () => { - browser.controlFlow().execute(async () => { - const newFilter: any = new UserProcessInstanceFilterRepresentation(); - newFilter.name = 'Due last Open'; - newFilter.appId = appId; - newFilter.icon = 'glyphicon-filter'; - newFilter.filter = { sort: 'due-asc', state: 'open', assignment: 'involved' }; + it('[C277261] Should display tasks under new filter from farthest due date to closest when they are open', async () => { + const newFilter: any = new UserProcessInstanceFilterRepresentation(); + newFilter.name = 'Due last Open'; + newFilter.appId = appId; + newFilter.icon = 'glyphicon-filter'; + newFilter.filter = { sort: 'due-asc', state: 'open', assignment: 'involved' }; - const result = await this.alfrescoJsApi.activiti.userFiltersApi.createUserTaskFilter(newFilter); + await this.alfrescoJsApi.activiti.userFiltersApi.createUserTaskFilter(newFilter); - return result; - }); + await browser.refresh(); - browser.refresh(); + await taskFiltersDemoPage.customTaskFilter('Due last Open').clickTaskFilter(); - taskFiltersDemoPage.customTaskFilter('Due last Open').clickTaskFilter(); - - expect(tasksListPage.getDataTable().contentInPosition(1)).toBe(tasks[3].name); - expect(tasksListPage.getDataTable().contentInPosition(2)).toBe(tasks[4].name); - expect(tasksListPage.getDataTable().contentInPosition(3)).toBe(tasks[5].name); + await expect(await tasksListPage.getDataTable().contentInPosition(1)).toBe(tasks[3].name); + await expect(await tasksListPage.getDataTable().contentInPosition(2)).toBe(tasks[4].name); + await expect(await tasksListPage.getDataTable().contentInPosition(3)).toBe(tasks[5].name); }); }); diff --git a/e2e/process-services/task-list-pagination.e2e.ts b/e2e/process-services/task-list-pagination.e2e.ts index 54bced062d..586378d93a 100644 --- a/e2e/process-services/task-list-pagination.e2e.ts +++ b/e2e/process-services/task-list-pagination.e2e.ts @@ -54,7 +54,7 @@ describe('Task List Pagination', () => { default: '20' }; - beforeAll(async (done) => { + beforeAll(async () => { const apps = new AppsActions(); const users = new UsersActions(); @@ -78,131 +78,130 @@ describe('Task List Pagination', () => { await loginPage.loginToProcessServicesUsingUserModel(processUserModel); - done(); }); - it('[C260301] Should display default pagination', () => { - navigationBarPage.navigateToProcessServicesPage().goToTaskApp(); - expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.default); - expect(paginationPage.getPaginationRange()).toEqual('Showing 1-' + nrOfTasks + ' of ' + nrOfTasks); - expect(taskPage.tasksListPage().getDataTable().numberOfRows()).toBe(nrOfTasks); - paginationPage.checkNextPageButtonIsDisabled(); - paginationPage.checkPreviousPageButtonIsDisabled(); - paginationPage.selectItemsPerPage(itemsPerPage.twenty); - expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.twenty); - expect(paginationPage.getPaginationRange()).toEqual('Showing 1-' + nrOfTasks + ' of ' + nrOfTasks); + it('[C260301] Should display default pagination', async () => { + await (await navigationBarPage.navigateToProcessServicesPage()).goToTaskApp(); + await expect(await paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.default); + await expect(await paginationPage.getPaginationRange()).toEqual('Showing 1-' + nrOfTasks + ' of ' + nrOfTasks); + await expect(await taskPage.tasksListPage().getDataTable().numberOfRows()).toBe(nrOfTasks); + await paginationPage.checkNextPageButtonIsDisabled(); + await paginationPage.checkPreviousPageButtonIsDisabled(); + await paginationPage.selectItemsPerPage(itemsPerPage.twenty); + await expect(await paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.twenty); + await expect(await paginationPage.getPaginationRange()).toEqual('Showing 1-' + nrOfTasks + ' of ' + nrOfTasks); }); - it('[C260304] Should be possible to set Items per page to 5', () => { - navigationBarPage.navigateToProcessServicesPage().goToTaskApp(); - taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.INV_TASKS); - paginationPage.selectItemsPerPage(itemsPerPage.five); - expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.five); - expect(paginationPage.getPaginationRange()).toEqual('Showing 1-' + itemsPerPage.fiveValue + ' of ' + nrOfTasks); - expect(taskPage.tasksListPage().getDataTable().numberOfRows()).toBe(itemsPerPage.fiveValue); - paginationPage.clickOnNextPage(); + it('[C260304] Should be possible to set Items per page to 5', async () => { + await (await navigationBarPage.navigateToProcessServicesPage()).goToTaskApp(); + await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.INV_TASKS); + await paginationPage.selectItemsPerPage(itemsPerPage.five); + await expect(await paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.five); + await expect(await paginationPage.getPaginationRange()).toEqual('Showing 1-' + itemsPerPage.fiveValue + ' of ' + nrOfTasks); + await expect(await taskPage.tasksListPage().getDataTable().numberOfRows()).toBe(itemsPerPage.fiveValue); + await paginationPage.clickOnNextPage(); currentPage++; - expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.five); - expect(paginationPage.getPaginationRange()).toEqual('Showing 6-' + itemsPerPage.fiveValue * currentPage + ' of ' + nrOfTasks); - expect(taskPage.tasksListPage().getDataTable().numberOfRows()).toBe(itemsPerPage.fiveValue); - paginationPage.clickOnNextPage(); + await expect(await paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.five); + await expect(await paginationPage.getPaginationRange()).toEqual('Showing 6-' + itemsPerPage.fiveValue * currentPage + ' of ' + nrOfTasks); + await expect(await taskPage.tasksListPage().getDataTable().numberOfRows()).toBe(itemsPerPage.fiveValue); + await paginationPage.clickOnNextPage(); currentPage++; - expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.five); - expect(paginationPage.getPaginationRange()).toEqual('Showing 11-' + itemsPerPage.fiveValue * currentPage + ' of ' + nrOfTasks); - expect(taskPage.tasksListPage().getDataTable().numberOfRows()).toBe(itemsPerPage.fiveValue); - paginationPage.clickOnNextPage(); + await expect(await paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.five); + await expect(await paginationPage.getPaginationRange()).toEqual('Showing 11-' + itemsPerPage.fiveValue * currentPage + ' of ' + nrOfTasks); + await expect(await taskPage.tasksListPage().getDataTable().numberOfRows()).toBe(itemsPerPage.fiveValue); + await paginationPage.clickOnNextPage(); currentPage++; - expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.five); - expect(paginationPage.getPaginationRange()).toEqual('Showing 16-' + itemsPerPage.fiveValue * currentPage + ' of ' + nrOfTasks); - expect(taskPage.tasksListPage().getDataTable().numberOfRows()).toBe(itemsPerPage.fiveValue); + await expect(await paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.five); + await expect(await paginationPage.getPaginationRange()).toEqual('Showing 16-' + itemsPerPage.fiveValue * currentPage + ' of ' + nrOfTasks); + await expect(await taskPage.tasksListPage().getDataTable().numberOfRows()).toBe(itemsPerPage.fiveValue); - navigationBarPage.navigateToProcessServicesPage().goToTaskApp(); - taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.INV_TASKS); - expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.five); + await (await navigationBarPage.navigateToProcessServicesPage()).goToTaskApp(); + await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.INV_TASKS); + await expect(await paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.five); }); - it('[C260303] Should be possible to set Items per page to 10', () => { - navigationBarPage.navigateToProcessServicesPage().goToTaskApp(); - taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.INV_TASKS); - paginationPage.selectItemsPerPage(itemsPerPage.ten); - expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.ten); - expect(paginationPage.getPaginationRange()).toEqual('Showing 1-' + itemsPerPage.tenValue + ' of ' + nrOfTasks); - expect(taskPage.tasksListPage().getDataTable().numberOfRows()).toBe(itemsPerPage.tenValue); - paginationPage.clickOnNextPage(); - expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.ten); - expect(paginationPage.getPaginationRange()).toEqual('Showing 11-' + itemsPerPage.twentyValue + ' of ' + nrOfTasks); - expect(taskPage.tasksListPage().getDataTable().numberOfRows()).toBe(itemsPerPage.tenValue); + it('[C260303] Should be possible to set Items per page to 10', async () => { + await (await navigationBarPage.navigateToProcessServicesPage()).goToTaskApp(); + await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.INV_TASKS); + await paginationPage.selectItemsPerPage(itemsPerPage.ten); + await expect(await paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.ten); + await expect(await paginationPage.getPaginationRange()).toEqual('Showing 1-' + itemsPerPage.tenValue + ' of ' + nrOfTasks); + await expect(await taskPage.tasksListPage().getDataTable().numberOfRows()).toBe(itemsPerPage.tenValue); + await paginationPage.clickOnNextPage(); + await expect(await paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.ten); + await expect(await paginationPage.getPaginationRange()).toEqual('Showing 11-' + itemsPerPage.twentyValue + ' of ' + nrOfTasks); + await expect(await taskPage.tasksListPage().getDataTable().numberOfRows()).toBe(itemsPerPage.tenValue); - navigationBarPage.navigateToProcessServicesPage().goToTaskApp(); - taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.INV_TASKS); - expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.ten); + await (await navigationBarPage.navigateToProcessServicesPage()).goToTaskApp(); + await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.INV_TASKS); + await expect(await paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.ten); }); - it('[C260302] Should be possible to set Items per page to 15', () => { - navigationBarPage.navigateToProcessServicesPage().goToTaskApp(); - taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.INV_TASKS); - paginationPage.selectItemsPerPage(itemsPerPage.fifteen); - expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.fifteen); - expect(paginationPage.getPaginationRange()).toEqual('Showing 1-' + itemsPerPage.fifteenValue + ' of ' + nrOfTasks); - expect(taskPage.tasksListPage().getDataTable().numberOfRows()).toBe(itemsPerPage.fifteenValue); - paginationPage.clickOnNextPage(); - expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.fifteen); - expect(paginationPage.getPaginationRange()).toEqual('Showing 16-' + itemsPerPage.twentyValue + ' of ' + nrOfTasks); - expect(taskPage.tasksListPage().getDataTable().numberOfRows()).toBe(itemsPerPage.fiveValue); + it('[C260302] Should be possible to set Items per page to 15', async () => { + await (await navigationBarPage.navigateToProcessServicesPage()).goToTaskApp(); + await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.INV_TASKS); + await paginationPage.selectItemsPerPage(itemsPerPage.fifteen); + await expect(await paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.fifteen); + await expect(await paginationPage.getPaginationRange()).toEqual('Showing 1-' + itemsPerPage.fifteenValue + ' of ' + nrOfTasks); + await expect(await taskPage.tasksListPage().getDataTable().numberOfRows()).toBe(itemsPerPage.fifteenValue); + await paginationPage.clickOnNextPage(); + await expect(await paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.fifteen); + await expect(await paginationPage.getPaginationRange()).toEqual('Showing 16-' + itemsPerPage.twentyValue + ' of ' + nrOfTasks); + await expect(await taskPage.tasksListPage().getDataTable().numberOfRows()).toBe(itemsPerPage.fiveValue); - navigationBarPage.navigateToProcessServicesPage().goToTaskApp(); - taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.INV_TASKS); - expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.fifteen); + await (await navigationBarPage.navigateToProcessServicesPage()).goToTaskApp(); + await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.INV_TASKS); + await expect(await paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.fifteen); }); - it('[C261006] Should be possible to navigate to a page with page number dropdown', () => { + it('[C261006] Should be possible to navigate to a page with page number dropdown', async () => { currentPage = 1; totalPages = 2; - navigationBarPage.navigateToProcessServicesPage().goToTaskApp(); - taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.INV_TASKS); - taskPage.tasksListPage().getDataTable().waitForTableBody(); - paginationPage.selectItemsPerPage(itemsPerPage.ten); - taskPage.tasksListPage().getDataTable().waitForTableBody(); - expect(paginationPage.getCurrentPage()).toEqual('Page ' + currentPage); - expect(paginationPage.getTotalPages()).toEqual('of ' + totalPages); - expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.ten); - expect(paginationPage.getPaginationRange()).toEqual('Showing 1-' + itemsPerPage.tenValue * currentPage + ' of ' + nrOfTasks); - expect(taskPage.tasksListPage().getDataTable().numberOfRows()).toBe(itemsPerPage.tenValue); - paginationPage.checkNextPageButtonIsEnabled(); - paginationPage.checkPreviousPageButtonIsDisabled(); + await (await navigationBarPage.navigateToProcessServicesPage()).goToTaskApp(); + await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.INV_TASKS); + await taskPage.tasksListPage().getDataTable().waitForTableBody(); + await paginationPage.selectItemsPerPage(itemsPerPage.ten); + await taskPage.tasksListPage().getDataTable().waitForTableBody(); + await expect(await paginationPage.getCurrentPage()).toEqual('Page ' + currentPage); + await expect(await paginationPage.getTotalPages()).toEqual('of ' + totalPages); + await expect(await paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.ten); + await expect(await paginationPage.getPaginationRange()).toEqual('Showing 1-' + itemsPerPage.tenValue * currentPage + ' of ' + nrOfTasks); + await expect(await taskPage.tasksListPage().getDataTable().numberOfRows()).toBe(itemsPerPage.tenValue); + await paginationPage.checkNextPageButtonIsEnabled(); + await paginationPage.checkPreviousPageButtonIsDisabled(); - paginationPage.clickOnPageDropdown(); - expect(paginationPage.getPageDropdownOptions()).toEqual(['1', '2']); + await paginationPage.clickOnPageDropdown(); + await expect(await paginationPage.getPageDropdownOptions()).toEqual(['1', '2']); currentPage = 2; - paginationPage.clickOnPageDropdownOption('2'); - taskPage.tasksListPage().getDataTable().waitForTableBody(); - expect(paginationPage.getCurrentPage()).toEqual('Page ' + currentPage); - expect(paginationPage.getTotalPages()).toEqual('of ' + totalPages); - expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.ten); - expect(paginationPage.getPaginationRange()).toEqual('Showing 11-' + itemsPerPage.tenValue * currentPage + ' of ' + nrOfTasks); - expect(taskPage.tasksListPage().getDataTable().numberOfRows()).toBe(itemsPerPage.tenValue); - paginationPage.checkNextPageButtonIsDisabled(); - paginationPage.checkPreviousPageButtonIsEnabled(); + await paginationPage.clickOnPageDropdownOption('2'); + await taskPage.tasksListPage().getDataTable().waitForTableBody(); + await expect(await paginationPage.getCurrentPage()).toEqual('Page ' + currentPage); + await expect(await paginationPage.getTotalPages()).toEqual('of ' + totalPages); + await expect(await paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.ten); + await expect(await paginationPage.getPaginationRange()).toEqual('Showing 11-' + itemsPerPage.tenValue * currentPage + ' of ' + nrOfTasks); + await expect(await taskPage.tasksListPage().getDataTable().numberOfRows()).toBe(itemsPerPage.tenValue); + await paginationPage.checkNextPageButtonIsDisabled(); + await paginationPage.checkPreviousPageButtonIsEnabled(); - paginationPage.clickOnPageDropdown(); - expect(paginationPage.getPageDropdownOptions()).toEqual(['1', '2']); + await paginationPage.clickOnPageDropdown(); + await expect(await paginationPage.getPageDropdownOptions()).toEqual(['1', '2']); currentPage = 1; - paginationPage.clickOnPageDropdownOption('1'); - taskPage.tasksListPage().getDataTable().waitForTableBody(); - expect(paginationPage.getCurrentPage()).toEqual('Page ' + currentPage); - expect(paginationPage.getTotalPages()).toEqual('of ' + totalPages); - expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.ten); - expect(paginationPage.getPaginationRange()).toEqual('Showing 1-' + itemsPerPage.tenValue * currentPage + ' of ' + nrOfTasks); - expect(taskPage.tasksListPage().getDataTable().numberOfRows()).toBe(itemsPerPage.tenValue); - paginationPage.checkNextPageButtonIsEnabled(); - paginationPage.checkPreviousPageButtonIsDisabled(); + await paginationPage.clickOnPageDropdownOption('1'); + await taskPage.tasksListPage().getDataTable().waitForTableBody(); + await expect(await paginationPage.getCurrentPage()).toEqual('Page ' + currentPage); + await expect(await paginationPage.getTotalPages()).toEqual('of ' + totalPages); + await expect(await paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.ten); + await expect(await paginationPage.getPaginationRange()).toEqual('Showing 1-' + itemsPerPage.tenValue * currentPage + ' of ' + nrOfTasks); + await expect(await taskPage.tasksListPage().getDataTable().numberOfRows()).toBe(itemsPerPage.tenValue); + await paginationPage.checkNextPageButtonIsEnabled(); + await paginationPage.checkPreviousPageButtonIsDisabled(); }); it('Pagination in an empty task list', async () => { await loginPage.loginToProcessServicesUsingUserModel(processUserModelEmpty); - navigationBarPage.navigateToProcessServicesPage().goToTaskApp(); - paginationPage.checkPaginationIsNotDisplayed(); + await (await navigationBarPage.navigateToProcessServicesPage()).goToTaskApp(); + await paginationPage.checkPaginationIsNotDisplayed(); }); }); diff --git a/e2e/process-services/widgets/amount-widget.e2e.ts b/e2e/process-services/widgets/amount-widget.e2e.ts index b1e50d5ee1..8260de9a8a 100644 --- a/e2e/process-services/widgets/amount-widget.e2e.ts +++ b/e2e/process-services/widgets/amount-widget.e2e.ts @@ -38,7 +38,7 @@ describe('Amount Widget', () => { const app = resources.Files.WIDGET_CHECK_APP.AMOUNT; let deployedApp, process; - beforeAll(async (done) => { + beforeAll(async () => { const users = new UsersActions(); alfrescoJsApi = new AlfrescoApi({ @@ -59,44 +59,44 @@ describe('Amount Widget', () => { }); process = await appsActions.startProcess(alfrescoJsApi, appModel, app.processName); await loginPage.loginToProcessServicesUsingUserModel(processUserModel); - done(); + }); - beforeEach(async () => { + beforeEach(async() => { const urlToNavigateTo = `${browser.params.testConfig.adf.url}/activiti/apps/${deployedApp.id}/tasks/`; await BrowserActions.getUrl(urlToNavigateTo); - taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); - taskPage.formFields().checkFormIsDisplayed(); + await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); + await taskPage.formFields().checkFormIsDisplayed(); }); - afterAll(async (done) => { + afterAll(async () => { await alfrescoJsApi.activiti.processApi.deleteProcessInstance(process.id); await alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); await alfrescoJsApi.activiti.adminTenantsApi.deleteTenant(processUserModel.tenantId); - done(); + }); - it('[C274703] Should be possible to set general, advance and visibility properties for Amount Widget', () => { - taskPage.formFields().checkWidgetIsHidden(app.FIELD.amount_input_id); - widget.checkboxWidget().clickCheckboxInput(app.FIELD.checkbox_id); - taskPage.formFields().checkWidgetIsVisible(app.FIELD.amount_input_id); + it('[C274703] Should be possible to set general, advance and visibility properties for Amount Widget', async () => { + await taskPage.formFields().checkWidgetIsHidden(app.FIELD.amount_input_id); + await widget.checkboxWidget().clickCheckboxInput(app.FIELD.checkbox_id); + await taskPage.formFields().checkWidgetIsVisible(app.FIELD.amount_input_id); - expect(taskPage.formFields().isCompleteFormButtonDisabled()).toBeTruthy(); - expect(widget.amountWidget().getAmountFieldLabel(app.FIELD.amount_input_id)).toContain('Amount'); - expect(widget.amountWidget().getPlaceholder(app.FIELD.amount_input_id)).toContain('Type amount'); - expect(widget.amountWidget().getAmountFieldCurrency(app.FIELD.amount_input_id)).toBe('$'); + await expect(await taskPage.formFields().isCompleteFormButtonDisabled()).toBeTruthy(); + await expect(await widget.amountWidget().getAmountFieldLabel(app.FIELD.amount_input_id)).toContain('Amount'); + await expect(await widget.amountWidget().getPlaceholder(app.FIELD.amount_input_id)).toContain('Type amount'); + await expect(await widget.amountWidget().getAmountFieldCurrency(app.FIELD.amount_input_id)).toBe('$'); - widget.amountWidget().setFieldValue(app.FIELD.amount_input_id, 4); - expect(widget.amountWidget().getErrorMessage(app.FIELD.amount_input_id)).toBe('Can\'t be less than 5'); - expect(taskPage.formFields().isCompleteFormButtonDisabled()).toBeTruthy(); - widget.amountWidget().clearFieldValue(app.FIELD.amount_input_id); + await widget.amountWidget().setFieldValue(app.FIELD.amount_input_id, 4); + await expect(await widget.amountWidget().getErrorMessage(app.FIELD.amount_input_id)).toBe('Can\'t be less than 5'); + await expect(await taskPage.formFields().isCompleteFormButtonDisabled()).toBeTruthy(); + await widget.amountWidget().clearFieldValue(app.FIELD.amount_input_id); - widget.amountWidget().setFieldValue(app.FIELD.amount_input_id, 101); - expect(widget.amountWidget().getErrorMessage(app.FIELD.amount_input_id)).toBe('Can\'t be greater than 100'); - expect(taskPage.formFields().isCompleteFormButtonDisabled()).toBeTruthy(); - widget.amountWidget().clearFieldValue(app.FIELD.amount_input_id); + await widget.amountWidget().setFieldValue(app.FIELD.amount_input_id, 101); + await expect(await widget.amountWidget().getErrorMessage(app.FIELD.amount_input_id)).toBe('Can\'t be greater than 100'); + await expect(await taskPage.formFields().isCompleteFormButtonDisabled()).toBeTruthy(); + await widget.amountWidget().clearFieldValue(app.FIELD.amount_input_id); - widget.amountWidget().setFieldValue(app.FIELD.amount_input_id, 6); - expect(taskPage.formFields().isCompleteFormButtonDisabled()).toBeFalsy(); + await widget.amountWidget().setFieldValue(app.FIELD.amount_input_id, 6); + await expect(await taskPage.formFields().isCompleteFormButtonDisabled()).toBeFalsy(); }); }); diff --git a/e2e/process-services/widgets/attach-folder-widget.e2e.ts b/e2e/process-services/widgets/attach-folder-widget.e2e.ts index 140425ba55..bab81c9b82 100644 --- a/e2e/process-services/widgets/attach-folder-widget.e2e.ts +++ b/e2e/process-services/widgets/attach-folder-widget.e2e.ts @@ -35,7 +35,7 @@ describe('Attach Folder widget', () => { const app = resources.Files.WIDGET_CHECK_APP.ATTACH_FOLDER; let deployedApp, process; - beforeAll(async (done) => { + beforeAll(async () => { const users = new UsersActions(); alfrescoJsApi = new AlfrescoApi({ @@ -56,28 +56,28 @@ describe('Attach Folder widget', () => { }); process = await appsActions.startProcess(alfrescoJsApi, appModel, app.processName); await loginPage.loginToProcessServicesUsingUserModel(processUserModel); - done(); + }); beforeEach(async () => { const urlToNavigateTo = `${browser.params.testConfig.adf.url}/activiti/apps/${deployedApp.id}/tasks/`; await BrowserActions.getUrl(urlToNavigateTo); - taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); - taskPage.formFields().checkFormIsDisplayed(); + await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); + await taskPage.formFields().checkFormIsDisplayed(); }); - afterAll(async (done) => { + afterAll(async () => { await alfrescoJsApi.activiti.processApi.deleteProcessInstance(process.id); await alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); await alfrescoJsApi.activiti.adminTenantsApi.deleteTenant(processUserModel.tenantId); - done(); + }); - it('[C276745] Should be possible to set visibility properties for Attach Folder Widget', () => { - taskPage.formFields().checkWidgetIsHidden(app.FIELD.upload_button_id); - widget.checkboxWidget().clickCheckboxInput(app.FIELD.checkbox_id); - taskPage.formFields().checkWidgetIsVisible(app.FIELD.upload_button_id); + it('[C276745] Should be possible to set visibility properties for Attach Folder Widget', async () => { + await taskPage.formFields().checkWidgetIsHidden(app.FIELD.upload_button_id); + await widget.checkboxWidget().clickCheckboxInput(app.FIELD.checkbox_id); + await taskPage.formFields().checkWidgetIsVisible(app.FIELD.upload_button_id); - expect(taskPage.formFields().isCompleteFormButtonDisabled()).toBeTruthy(); + await expect(await taskPage.formFields().isCompleteFormButtonDisabled()).toBeTruthy(); }); }); diff --git a/e2e/process-services/widgets/checkbox-widget.e2e.ts b/e2e/process-services/widgets/checkbox-widget.e2e.ts index 16ab4905a3..8113e4b434 100644 --- a/e2e/process-services/widgets/checkbox-widget.e2e.ts +++ b/e2e/process-services/widgets/checkbox-widget.e2e.ts @@ -36,7 +36,7 @@ describe('Checkbox Widget', () => { const app = resources.Files.WIDGET_CHECK_APP.CHECKBOX; let deployedApp, process; - beforeAll(async (done) => { + beforeAll(async () => { const users = new UsersActions(); alfrescoJsApi = new AlfrescoApi({ @@ -57,34 +57,34 @@ describe('Checkbox Widget', () => { }); process = await appsActions.startProcess(alfrescoJsApi, appModel, app.processName); await loginPage.loginToProcessServicesUsingUserModel(processUserModel); - done(); + }); beforeEach(async () => { const urlToNavigateTo = `${browser.params.testConfig.adf.url}/activiti/apps/${deployedApp.id}/tasks/`; await BrowserActions.getUrl(urlToNavigateTo); - taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); - taskPage.formFields().checkFormIsDisplayed(); + await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); + await taskPage.formFields().checkFormIsDisplayed(); }); - afterAll(async (done) => { + afterAll(async () => { await alfrescoJsApi.activiti.processApi.deleteProcessInstance(process.id); await alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); await alfrescoJsApi.activiti.adminTenantsApi.deleteTenant(processUserModel.tenantId); - done(); + }); - it('[C268554] Should be able to set general settings for Checkbox widget ', () => { - taskPage.formFields().setValueInInputById(app.FIELD.number_input_id, 2); - expect(widget.checkboxWidget().getCheckboxLabel()).toContain(app.FIELD.checkbox_label); - expect(taskPage.formFields().isCompleteFormButtonDisabled()).toBeTruthy(); - widget.checkboxWidget().clickCheckboxInput(app.FIELD.checkbox_input_id); - expect(taskPage.formFields().isCompleteFormButtonDisabled()).toBeFalsy(); + it('[C268554] Should be able to set general settings for Checkbox widget ', async () => { + await taskPage.formFields().setValueInInputById(app.FIELD.number_input_id, 2); + await expect(await widget.checkboxWidget().getCheckboxLabel()).toContain(app.FIELD.checkbox_label); + await expect(await taskPage.formFields().isCompleteFormButtonDisabled()).toBeTruthy(); + await widget.checkboxWidget().clickCheckboxInput(app.FIELD.checkbox_input_id); + await expect(await taskPage.formFields().isCompleteFormButtonDisabled()).toBeFalsy(); }); - it('[C272812] Should be able to set visibility settings for Checkbox widget', () => { - widget.checkboxWidget().isCheckboxHidden(app.FIELD.checkbox_field_id); - taskPage.formFields().setValueInInputById(app.FIELD.number_input_id, 2); - widget.checkboxWidget().isCheckboxDisplayed(app.FIELD.checkbox_field_id); + it('[C272812] Should be able to set visibility settings for Checkbox widget', async () => { + await widget.checkboxWidget().isCheckboxHidden(app.FIELD.checkbox_field_id); + await taskPage.formFields().setValueInInputById(app.FIELD.number_input_id, 2); + await widget.checkboxWidget().isCheckboxDisplayed(app.FIELD.checkbox_field_id); }); }); diff --git a/e2e/process-services/widgets/date-time-widget.e2e.ts b/e2e/process-services/widgets/date-time-widget.e2e.ts index 27ccbaad31..4db843973f 100644 --- a/e2e/process-services/widgets/date-time-widget.e2e.ts +++ b/e2e/process-services/widgets/date-time-widget.e2e.ts @@ -36,7 +36,7 @@ describe('Date and time widget', () => { const app = resources.Files.WIDGET_CHECK_APP.DATETIME; let deployedApp, process; - beforeAll(async (done) => { + beforeAll(async () => { const users = new UsersActions(); alfrescoJsApi = new AlfrescoApi({ @@ -57,48 +57,54 @@ describe('Date and time widget', () => { }); process = await appsActions.startProcess(alfrescoJsApi, appModel, app.processName); await loginPage.loginToProcessServicesUsingUserModel(processUserModel); - done(); + }); beforeEach(async () => { const urlToNavigateTo = `${browser.params.testConfig.adf.url}/activiti/apps/${deployedApp.id}/tasks/`; await BrowserActions.getUrl(urlToNavigateTo); - taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); - taskPage.formFields().checkFormIsDisplayed(); + await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); + await taskPage.formFields().checkFormIsDisplayed(); }); - afterAll(async (done) => { + afterAll(async () => { await alfrescoJsApi.activiti.processApi.deleteProcessInstance(process.id); await alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); await alfrescoJsApi.activiti.adminTenantsApi.deleteTenant(processUserModel.tenantId); - done(); }); - it('[C268818] Should be able to set general settings for Date Time widget', () => { - expect(widget.dateTimeWidget().getDateTimeLabel(app.FIELD.date_time_input)).toContain('Date'); - expect(taskPage.formFields().isCompleteFormButtonDisabled()).toBeTruthy(); + it('[C268818] Should be able to set general settings for Date Time widget', async () => { + await expect(await widget.dateTimeWidget().getDateTimeLabel(app.FIELD.date_time_input)).toContain('Date'); + await expect(await taskPage.formFields().isCompleteFormButtonDisabled()).toBeTruthy(); - widget.dateTimeWidget().openDatepicker(app.FIELD.date_time_input); - widget.dateTimeWidget().selectDay('10'); - widget.dateTimeWidget().selectHour('8'); - widget.dateTimeWidget().selectMinute('30'); - expect(taskPage.formFields().isCompleteFormButtonDisabled()).toBeFalsy(); + await widget.dateTimeWidget().openDatepicker(app.FIELD.date_time_input); + await widget.dateTimeWidget().selectDay('10'); + await widget.dateTimeWidget().selectHour('8'); + await widget.dateTimeWidget().selectMinute('30'); + await expect(await taskPage.formFields().isCompleteFormButtonDisabled()).toBeFalsy(); - expect(widget.dateTimeWidget().getPlaceholder(app.FIELD.date_time_between_input)).toBe('Choose anything...'); + await expect(await widget.dateTimeWidget().getPlaceholder(app.FIELD.date_time_between_input)).toBe('Choose anything...'); }); - it('[C268819] Should be able to set advanced settings for Date Time widget ', () => { - widget.dateTimeWidget().openDatepicker(app.FIELD.date_time_between_input); - widget.dateTimeWidget().closeDataTimeWidget(); - widget.dateTimeWidget().setDateTimeInput(app.FIELD.date_time_between_input, '20-03-17 07:30 PM'); - taskPage.formFields().saveForm(); - expect(widget.dateTimeWidget().getErrorMessage(app.FIELD.date_time_between_input)).toContain('Can\'t be less than'); + it('[C268819] Should be able to set advanced settings for Date Time widget ', async () => { + await widget.dateTimeWidget().openDatepicker(app.FIELD.date_time_between_input); + await widget.dateTimeWidget().closeDataTimeWidget(); - widget.dateTimeWidget().openDatepicker(app.FIELD.date_time_between_input); - widget.dateTimeWidget().closeDataTimeWidget(); - widget.dateTimeWidget().removeFromDatetimeWidget(app.FIELD.date_time_between_input); - widget.dateTimeWidget().setDateTimeInput(app.FIELD.date_time_between_input, '20-03-19 07:30 PM'); - taskPage.formFields().saveForm(); - expect(widget.dateTimeWidget().getErrorMessage(app.FIELD.date_time_between_input)).toContain('Can\'t be greater than'); + await widget.dateTimeWidget().setDateTimeInput(app.FIELD.date_time_between_input, '20-03-17 07:30 PM'); + await taskPage.formFields().saveForm(); + await expect(await widget.dateTimeWidget().getErrorMessage(app.FIELD.date_time_between_input)).toContain('Can\'t be less than'); + + await widget.dateTimeWidget().openDatepicker(app.FIELD.date_time_between_input); + await widget.dateTimeWidget().closeDataTimeWidget(); + await widget.dateTimeWidget().removeFromDatetimeWidget(app.FIELD.date_time_between_input); + + await browser.refresh(); + + await widget.dateTimeWidget().setDateTimeInput(app.FIELD.date_time_between_input, '20-03-19 07:30 PM'); + await widget.dateTimeWidget().closeDataTimeWidget(); + + await taskPage.formFields().saveForm(); + + await expect(await widget.dateTimeWidget().getErrorMessage(app.FIELD.date_time_between_input)).toContain('Can\'t be greater than'); }); }); diff --git a/e2e/process-services/widgets/date-widget.e2e.ts b/e2e/process-services/widgets/date-widget.e2e.ts index cc89574479..bc1ba4bca9 100644 --- a/e2e/process-services/widgets/date-widget.e2e.ts +++ b/e2e/process-services/widgets/date-widget.e2e.ts @@ -18,11 +18,13 @@ import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; import { AppsActions } from '../../actions/APS/apps.actions'; import { UsersActions } from '../../actions/users.actions'; -import { LoginPage, BrowserActions, Widget } from '@alfresco/adf-testing'; +import { LoginPage, BrowserActions, Widget, FormPage } from '@alfresco/adf-testing'; import { TasksPage } from '../../pages/adf/process-services/tasksPage'; import CONSTANTS = require('../../util/constants'); import { browser } from 'protractor'; import resources = require('../../util/resources'); +import { FormDemoPage } from '../../pages/adf/demo-shell/process-services/formDemoPage'; +import { customDateFormAPS1 } from '../../resources/forms/custom-date-form'; describe('Date widget', () => { @@ -30,13 +32,14 @@ describe('Date widget', () => { let processUserModel; const taskPage = new TasksPage(); const widget = new Widget(); + const dateWidget = widget.dateWidget(); let alfrescoJsApi; const appsActions = new AppsActions(); let appModel; const app = resources.Files.WIDGET_CHECK_APP.DATE; let deployedApp, process; - beforeAll(async (done) => { + beforeAll(async () => { const users = new UsersActions(); alfrescoJsApi = new AlfrescoApi({ @@ -57,38 +60,70 @@ describe('Date widget', () => { }); process = await appsActions.startProcess(alfrescoJsApi, appModel, app.processName); await loginPage.loginToProcessServicesUsingUserModel(processUserModel); - done(); + }); - beforeEach(async () => { - const urlToNavigateTo = `${browser.params.testConfig.adf.url}/activiti/apps/${deployedApp.id}/tasks/`; - await BrowserActions.getUrl(urlToNavigateTo); - taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); - taskPage.formFields().checkFormIsDisplayed(); - }); - - afterAll(async (done) => { + afterAll(async () => { await alfrescoJsApi.activiti.processApi.deleteProcessInstance(process.id); await alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); await alfrescoJsApi.activiti.adminTenantsApi.deleteTenant(processUserModel.tenantId); - done(); + }); - it('[C268814] Should be able to set general settings for Date widget', () => { - expect(widget.dateWidget().getDateLabel(app.FIELD.date_input)).toContain('Date'); - expect(taskPage.formFields().isCompleteFormButtonDisabled()).toBeTruthy(); - widget.dateWidget().setDateInput(app.FIELD.date_input, '20-10-2018'); - taskPage.formFields().saveForm(); - expect(taskPage.formFields().isCompleteFormButtonDisabled()).toBeFalsy(); + describe('Simple App', () => { + + beforeEach(async () => { + const urlToNavigateTo = `${browser.params.testConfig.adf.url}/activiti/apps/${deployedApp.id}/tasks/`; + await BrowserActions.getUrl(urlToNavigateTo); + await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); + await taskPage.formFields().checkFormIsDisplayed(); + }); + + it('[C268814] Should be able to set general settings for Date widget', async () => { + await expect(await dateWidget.getDateLabel(app.FIELD.date_input)).toContain('Date'); + await expect(await taskPage.formFields().isCompleteFormButtonDisabled()).toBeTruthy(); + await dateWidget.setDateInput(app.FIELD.date_input, '20-10-2018'); + await taskPage.formFields().saveForm(); + await expect(await taskPage.formFields().isCompleteFormButtonDisabled()).toBeFalsy(); + }); + + it('[C277234] Should be able to set advanced settings for Date widget ', async () => { + await dateWidget.setDateInput(app.FIELD.date_between_input, '20-10-2017'); + await taskPage.formFields().saveForm(); + await expect(await dateWidget.getErrorMessage(app.FIELD.date_between_input)).toBe('Can\'t be less than 1-10-2018'); + await dateWidget.clearDateInput(app.FIELD.date_between_input); + await dateWidget.setDateInput(app.FIELD.date_between_input, '20-10-2019'); + await taskPage.formFields().saveForm(); + await expect(await dateWidget.getErrorMessage(app.FIELD.date_between_input)).toBe('Can\'t be greater than 31-10-2018'); + }); }); - it('[C277234] Should be able to set advanced settings for Date widget ', () => { - widget.dateWidget().setDateInput(app.FIELD.date_between_input, '20-10-2017'); - taskPage.formFields().saveForm(); - expect(widget.dateWidget().getErrorMessage(app.FIELD.date_between_input)).toBe('Can\'t be less than 1-10-2018'); - widget.dateWidget().clearDateInput(app.FIELD.date_between_input); - widget.dateWidget().setDateInput(app.FIELD.date_between_input, '20-10-2019'); - taskPage.formFields().saveForm(); - expect(widget.dateWidget().getErrorMessage(app.FIELD.date_between_input)).toBe('Can\'t be greater than 31-10-2018'); + describe('Form Demo Page', () => { + + const formDemoPage = new FormDemoPage(); + const formJson = JSON.parse(customDateFormAPS1); + const formPage = new FormPage(); + + beforeAll(async () => { + const urlFormDemoPage = `${browser.params.testConfig.adf.url}/form`; + await BrowserActions.getUrl(urlFormDemoPage); + }); + + it('[C313199] Should display the validation for min and max date values with custom date format', async () => { + await formDemoPage.setConfigToEditor(formJson); + await dateWidget.setDateInput('datefield', '18-7-19'); + await formPage.saveForm(); + await expect(await dateWidget.getErrorMessage('datefield')) + .toBe('Can\'t be less than 19-7-19', 'Min date validation is not working'); + await dateWidget.clearDateInput('datefield'); + await dateWidget.setDateInput('datefield', '20-7-19'); + await formPage.saveForm(); + await expect(await dateWidget.getErrorMessage('datefield')) + .toBe('Can\'t be greater than 19-8-19', 'Max date validation is not working'); + await dateWidget.clearDateInput('datefield'); + await dateWidget.setDateInput('datefield', '19-7-19'); + await formPage.saveForm(); + await dateWidget.checkErrorMessageIsNotDisplayed('datefield'); + }); }); }); diff --git a/e2e/process-services/widgets/document-template-widget.e2e.ts b/e2e/process-services/widgets/document-template-widget.e2e.ts index e28d38b3ed..bde5e20c97 100644 --- a/e2e/process-services/widgets/document-template-widget.e2e.ts +++ b/e2e/process-services/widgets/document-template-widget.e2e.ts @@ -36,7 +36,7 @@ describe('Document Template widget', () => { const app = resources.Files.FILE_FORM_ADF; let deployedApp, process; - beforeAll(async (done) => { + beforeAll(async () => { const users = new UsersActions(); alfrescoJsApi = new AlfrescoApi({ @@ -57,25 +57,25 @@ describe('Document Template widget', () => { }); process = await appsActions.startProcess(alfrescoJsApi, appModel, app.processName); await loginPage.loginToProcessServicesUsingUserModel(processUserModel); - done(); + }); beforeEach(async () => { const urlToNavigateTo = `${browser.params.testConfig.adf.url}/activiti/apps/${deployedApp.id}/tasks/`; await BrowserActions.getUrl(urlToNavigateTo); - taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); - taskPage.formFields().checkFormIsDisplayed(); + await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); + await taskPage.formFields().checkFormIsDisplayed(); }); - afterAll(async (done) => { + afterAll(async () => { await alfrescoJsApi.activiti.processApi.deleteProcessInstance(process.id); await alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); await alfrescoJsApi.activiti.adminTenantsApi.deleteTenant(processUserModel.tenantId); - done(); + }); - it('[C260406] should check that the template contains assigned file ', () => { - expect(widget.containerWidget().getFieldText(app.form_fields.container_id)) + it('[C260406] should check that the template contains assigned file ', async () => { + await expect(await widget.containerWidget().getFieldText(app.form_fields.container_id)) .toEqual(app.attached_file); }); }); diff --git a/e2e/process-services/widgets/dropdown-widget.e2e.ts b/e2e/process-services/widgets/dropdown-widget.e2e.ts index 0fe797ccc1..a29dea6705 100644 --- a/e2e/process-services/widgets/dropdown-widget.e2e.ts +++ b/e2e/process-services/widgets/dropdown-widget.e2e.ts @@ -36,7 +36,7 @@ describe('Dropdown widget', () => { const app = resources.Files.WIDGET_CHECK_APP.DROPDOWN; let deployedApp, process; - beforeAll(async (done) => { + beforeAll(async () => { const users = new UsersActions(); alfrescoJsApi = new AlfrescoApi({ @@ -57,42 +57,41 @@ describe('Dropdown widget', () => { }); process = await appsActions.startProcess(alfrescoJsApi, appModel, app.processName); await loginPage.loginToProcessServicesUsingUserModel(processUserModel); - done(); + }); beforeEach(async () => { const urlToNavigateTo = `${browser.params.testConfig.adf.url}/activiti/apps/${deployedApp.id}/tasks/`; await BrowserActions.getUrl(urlToNavigateTo); - taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); - taskPage.formFields().checkFormIsDisplayed(); + await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); + await taskPage.formFields().checkFormIsDisplayed(); }); - afterAll(async (done) => { + afterAll(async () => { await alfrescoJsApi.activiti.processApi.deleteProcessInstance(process.id); await alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); await alfrescoJsApi.activiti.adminTenantsApi.deleteTenant(processUserModel.tenantId); - done(); }); - it('[C269051] Should be possible to set general and options properties for Dropdown widget ', () => { - expect(taskPage.formFields().isCompleteFormButtonDisabled()).toBeTruthy(); + it('[C269051] Should be possible to set general and options properties for Dropdown widget ', async () => { + await expect(await taskPage.formFields().isCompleteFormButtonDisabled()).toBeTruthy(); - widget.dropdown().selectOption('Happy'); - expect(widget.dropdown().getSelectedOptionText(app.FIELD.general_dropdown)).toContain('Happy'); - expect(taskPage.formFields().isCompleteFormButtonDisabled()).toBeFalsy(); + await widget.dropdown().selectOption('Happy'); + await expect(await widget.dropdown().getSelectedOptionText(app.FIELD.general_dropdown)).toContain('Happy'); + await expect(await taskPage.formFields().isCompleteFormButtonDisabled()).toBeFalsy(); - widget.dropdown().selectOption('Choose one'); - expect(widget.dropdown().getSelectedOptionText(app.FIELD.general_dropdown)).toContain('Choose one'); - expect(taskPage.formFields().isCompleteFormButtonDisabled()).toBeTruthy(); + await widget.dropdown().selectOption('Choose one'); + await expect(await widget.dropdown().getSelectedOptionText(app.FIELD.general_dropdown)).toContain('Choose one'); + await expect(await taskPage.formFields().isCompleteFormButtonDisabled()).toBeTruthy(); - widget.dropdown().selectOption('Sad'); - expect(widget.dropdown().getSelectedOptionText(app.FIELD.general_dropdown)).toContain('Sad'); - expect(taskPage.formFields().isCompleteFormButtonDisabled()).toBeFalsy(); + await widget.dropdown().selectOption('Sad'); + await expect(await widget.dropdown().getSelectedOptionText(app.FIELD.general_dropdown)).toContain('Sad'); + await expect(await taskPage.formFields().isCompleteFormButtonDisabled()).toBeFalsy(); }); - it('[C269052] Should be possible to set visibility properties for Dropdown widget', () => { - taskPage.formFields().checkWidgetIsHidden(app.FIELD.dropdown_visible); - widget.checkboxWidget().clickCheckboxInput(app.FIELD.checkbox_id); - taskPage.formFields().checkWidgetIsVisible(app.FIELD.dropdown_visible); + it('[C269052] Should be possible to set visibility properties for Dropdown widget', async () => { + await taskPage.formFields().checkWidgetIsHidden(app.FIELD.dropdown_visible); + await widget.checkboxWidget().clickCheckboxInput(app.FIELD.checkbox_id); + await taskPage.formFields().checkWidgetIsVisible(app.FIELD.dropdown_visible); }); }); diff --git a/e2e/process-services/widgets/dynamic-table-widget.e2e.ts b/e2e/process-services/widgets/dynamic-table-widget.e2e.ts index 91d1386601..f853534f78 100644 --- a/e2e/process-services/widgets/dynamic-table-widget.e2e.ts +++ b/e2e/process-services/widgets/dynamic-table-widget.e2e.ts @@ -38,7 +38,7 @@ describe('Dynamic Table widget ', () => { describe('with Date Time Widget App', () => { const app = resources.Files.WIDGET_CHECK_APP.DYNAMIC_TABLE; - beforeAll(async (done) => { + beforeAll(async () => { const users = new UsersActions(); alfrescoJsApi = new AlfrescoApi({ @@ -59,39 +59,39 @@ describe('Dynamic Table widget ', () => { }); process = await appsActions.startProcess(alfrescoJsApi, appModel, app.processName); await loginPage.loginToProcessServicesUsingUserModel(processUserModel); - done(); + }); beforeEach(async () => { const urlToNavigateTo = `${browser.params.testConfig.adf.url}/activiti/apps/${deployedApp.id}/tasks/`; await BrowserActions.getUrl(urlToNavigateTo); - taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); - taskPage.formFields().checkFormIsDisplayed(); + await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); + await taskPage.formFields().checkFormIsDisplayed(); }); - afterAll(async (done) => { + afterAll(async () => { await alfrescoJsApi.activiti.processApi.deleteProcessInstance(process.id); await alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); await alfrescoJsApi.activiti.adminTenantsApi.deleteTenant(processUserModel.tenantId); - done(); + }); - it('[C276729] Should be possible to set visibility properties for Dynamic Table', () => { - taskPage.formFields().checkWidgetIsHidden(app.FIELD.dynamic_table_age_id); - widget.checkboxWidget().clickCheckboxInput(app.FIELD.checkbox_id); - taskPage.formFields().checkWidgetIsVisible(app.FIELD.dynamic_table_age_id); + it('[C276729] Should be possible to set visibility properties for Dynamic Table', async () => { + await taskPage.formFields().checkWidgetIsHidden(app.FIELD.dynamic_table_age_id); + await widget.checkboxWidget().clickCheckboxInput(app.FIELD.checkbox_id); + await taskPage.formFields().checkWidgetIsVisible(app.FIELD.dynamic_table_age_id); }); - it('[C279349] Should be able to have a Date Time widget in a Dynamic Table widget', () => { - widget.dynamicTable().clickAddButton(); - widget.dateTimeWidget().openDatepicker(app.FIELD.dateTime_input_id); - widget.dateTimeWidget().selectDay('10'); - widget.dateTimeWidget().selectHour('8'); - widget.dateTimeWidget().selectMinute('30'); - widget.dateTimeWidget().clearDateTimeInput(app.FIELD.dateTime_input_id); + it('[C279349] Should be able to have a Date Time widget in a Dynamic Table widget', async () => { + await widget.dynamicTable().clickAddButton(); + await widget.dateTimeWidget().openDatepicker(app.FIELD.dateTime_input_id); + await widget.dateTimeWidget().selectDay('10'); + await widget.dateTimeWidget().selectHour('8'); + await widget.dateTimeWidget().selectMinute('30'); + await widget.dateTimeWidget().clearDateTimeInput(app.FIELD.dateTime_input_id); - widget.dynamicTable().clickSaveButton(); - widget.dynamicTable().getTableRow(0); + await widget.dynamicTable().clickSaveButton(); + await widget.dynamicTable().getTableRow(0); }); }); @@ -99,7 +99,7 @@ describe('Dynamic Table widget ', () => { const app = resources.Files.WIDGET_CHECK_APP.DYNAMIC_TABLE_USERS; - beforeAll(async (done) => { + beforeAll(async () => { const users = new UsersActions(); alfrescoJsApi = new AlfrescoApi({ @@ -120,45 +120,45 @@ describe('Dynamic Table widget ', () => { }); process = await appsActions.startProcess(alfrescoJsApi, appModel, app.processName); await loginPage.loginToProcessServicesUsingUserModel(processUserModel); - done(); + }); - beforeEach(() => { + beforeEach(async () => { const urlToNavigateTo = `${browser.params.testConfig.adf.url}/activiti/apps/${deployedApp.id}/tasks/`; - BrowserActions.getUrl(urlToNavigateTo); - taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); - taskPage.formFields().checkFormIsDisplayed(); + await BrowserActions.getUrl(urlToNavigateTo); + await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); + await taskPage.formFields().checkFormIsDisplayed(); }); - afterAll(async (done) => { + afterAll(async () => { await alfrescoJsApi.activiti.processApi.deleteProcessInstance(process.id); await alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); await alfrescoJsApi.activiti.adminTenantsApi.deleteTenant(processUserModel.tenantId); - done(); + }); - it('[C260407] Should be able to add/delete/update row in Dynamic Table widget', () => { + it('[C260407] Should be able to add/delete/update row in Dynamic Table widget', async () => { - widget.dynamicTable().clickAddRow(); - widget.dynamicTable().setDatatableInput('User1'); - widget.dynamicTable().clickSaveButton(); - expect(widget.dynamicTable().getTableRowText(0)).toEqual('User1'); + await widget.dynamicTable().clickAddRow(); + await widget.dynamicTable().setDatatableInput('User1'); + await widget.dynamicTable().clickSaveButton(); + await expect(await widget.dynamicTable().getTableRowText(0)).toEqual('User1'); - widget.dynamicTable().clickTableRow(0); - widget.dynamicTable().clickEditButton(); - widget.dynamicTable().setDatatableInput('User2'); - widget.dynamicTable().clickCancelButton(); - expect(widget.dynamicTable().getTableRowText(0)).toEqual('User1'); + await widget.dynamicTable().clickTableRow(0); + await widget.dynamicTable().clickEditButton(); + await widget.dynamicTable().setDatatableInput('User2'); + await widget.dynamicTable().clickCancelButton(); + await expect(await widget.dynamicTable().getTableRowText(0)).toEqual('User1'); - widget.dynamicTable().clickEditButton(); - widget.dynamicTable().setDatatableInput('User2'); - widget.dynamicTable().clickSaveButton(); - expect(widget.dynamicTable().getTableRowText(0)).toEqual('User2'); + await widget.dynamicTable().clickEditButton(); + await widget.dynamicTable().setDatatableInput('User2'); + await widget.dynamicTable().clickSaveButton(); + await expect(await widget.dynamicTable().getTableRowText(0)).toEqual('User2'); - widget.dynamicTable().clickAddRow(); - widget.dynamicTable().setDatatableInput('User3'); - widget.dynamicTable().clickCancelButton(); - widget.dynamicTable().checkTableRowIsNotVisible(1); + await widget.dynamicTable().clickAddRow(); + await widget.dynamicTable().setDatatableInput('User3'); + await widget.dynamicTable().clickCancelButton(); + await widget.dynamicTable().checkTableRowIsNotVisible(1); }); }); diff --git a/e2e/process-services/widgets/header-widget.e2e.ts b/e2e/process-services/widgets/header-widget.e2e.ts index 3cf29761dd..043a07e752 100644 --- a/e2e/process-services/widgets/header-widget.e2e.ts +++ b/e2e/process-services/widgets/header-widget.e2e.ts @@ -24,7 +24,7 @@ import CONSTANTS = require('../../util/constants'); import { browser } from 'protractor'; import resources = require('../../util/resources'); -describe('Header widget', () => { +describe('Header widget', async () => { const loginPage = new LoginPage(); let processUserModel; @@ -36,7 +36,7 @@ describe('Header widget', () => { const app = resources.Files.WIDGET_CHECK_APP.HEADER; let deployedApp, process; - beforeAll(async (done) => { + beforeAll(async () => { const users = new UsersActions(); alfrescoJsApi = new AlfrescoApi({ @@ -57,29 +57,29 @@ describe('Header widget', () => { }); process = await appsActions.startProcess(alfrescoJsApi, appModel, app.processName); await loginPage.loginToProcessServicesUsingUserModel(processUserModel); - done(); + }); beforeEach(async () => { const urlToNavigateTo = `${browser.params.testConfig.adf.url}/activiti/apps/${deployedApp.id}/tasks/`; await BrowserActions.getUrl(urlToNavigateTo); - taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); - taskPage.formFields().checkFormIsDisplayed(); + await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); + await taskPage.formFields().checkFormIsDisplayed(); }); - afterAll(async (done) => { + afterAll(async () => { await alfrescoJsApi.activiti.processApi.deleteProcessInstance(process.id); await alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); await alfrescoJsApi.activiti.adminTenantsApi.deleteTenant(processUserModel.tenantId); - done(); + }); - it('[C276737] Should be able to set general and visibility properties for Header widget', () => { - taskPage.formFields().checkWidgetIsHidden(app.FIELD.header_id); - widget.checkboxWidget().clickCheckboxInput(app.FIELD.checkbox_id); - taskPage.formFields().checkWidgetIsVisible(app.FIELD.header_id); + it('[C276737] Should be able to set general and visibility properties for Header widget', async () => { + await taskPage.formFields().checkWidgetIsHidden(app.FIELD.header_id); + await widget.checkboxWidget().clickCheckboxInput(app.FIELD.checkbox_id); + await taskPage.formFields().checkWidgetIsVisible(app.FIELD.header_id); - expect(widget.headerWidget().getFieldLabel(app.FIELD.header_id)).toBe('Header'); - expect(taskPage.formFields().isCompleteFormButtonDisabled()).toBeFalsy(); + await expect(await widget.headerWidget().getFieldLabel(app.FIELD.header_id)).toBe('Header'); + await expect(await taskPage.formFields().isCompleteFormButtonDisabled()).toBeFalsy(); }); }); diff --git a/e2e/process-services/widgets/hyperlink-widget.e2e.ts b/e2e/process-services/widgets/hyperlink-widget.e2e.ts index 801e7368c8..065f53170e 100644 --- a/e2e/process-services/widgets/hyperlink-widget.e2e.ts +++ b/e2e/process-services/widgets/hyperlink-widget.e2e.ts @@ -36,7 +36,7 @@ describe('Hyperlink widget', () => { const app = resources.Files.WIDGET_CHECK_APP.HYPERLINK; let deployedApp, process; - beforeAll(async (done) => { + beforeAll(async () => { const users = new UsersActions(); alfrescoJsApi = new AlfrescoApi({ @@ -57,29 +57,29 @@ describe('Hyperlink widget', () => { }); process = await appsActions.startProcess(alfrescoJsApi, appModel, app.processName); await loginPage.loginToProcessServicesUsingUserModel(processUserModel); - done(); + }); beforeEach(async () => { const urlToNavigateTo = `${browser.params.testConfig.adf.url}/activiti/apps/${deployedApp.id}/tasks/`; await BrowserActions.getUrl(urlToNavigateTo); - taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); - taskPage.formFields().checkFormIsDisplayed(); + await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); + await taskPage.formFields().checkFormIsDisplayed(); }); - afterAll(async (done) => { + afterAll(async () => { await alfrescoJsApi.activiti.processApi.deleteProcessInstance(process.id); await alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); await alfrescoJsApi.activiti.adminTenantsApi.deleteTenant(processUserModel.tenantId); - done(); + }); - it('[C276728] Should be able to set visibility properties for Hyperlink widget', () => { - taskPage.formFields().checkWidgetIsHidden(app.FIELD.hyperlink_id); - widget.checkboxWidget().clickCheckboxInput(app.FIELD.checkbox_id); - taskPage.formFields().checkWidgetIsVisible(app.FIELD.hyperlink_id); + it('[C276728] Should be able to set visibility properties for Hyperlink widget', async () => { + await taskPage.formFields().checkWidgetIsHidden(app.FIELD.hyperlink_id); + await widget.checkboxWidget().clickCheckboxInput(app.FIELD.checkbox_id); + await taskPage.formFields().checkWidgetIsVisible(app.FIELD.hyperlink_id); - expect(widget.hyperlink().getFieldLabel(app.FIELD.hyperlink_id)).toBe('Hyperlink'); - expect(widget.hyperlink().getFieldText(app.FIELD.hyperlink_id)).toBe('https://www.google.com/'); + await expect(await widget.hyperlink().getFieldLabel(app.FIELD.hyperlink_id)).toBe('Hyperlink'); + await expect(await widget.hyperlink().getFieldText(app.FIELD.hyperlink_id)).toBe('https://www.google.com/'); }); }); diff --git a/e2e/process-services/widgets/multi-line-widget.e2e.ts b/e2e/process-services/widgets/multi-line-widget.e2e.ts index c70d60aab5..132b033542 100644 --- a/e2e/process-services/widgets/multi-line-widget.e2e.ts +++ b/e2e/process-services/widgets/multi-line-widget.e2e.ts @@ -36,7 +36,7 @@ describe('Multi-line Widget', () => { const app = resources.Files.WIDGET_CHECK_APP.MULTILINE_TEXT; let deployedApp, process; - beforeAll(async (done) => { + beforeAll(async () => { const users = new UsersActions(); alfrescoJsApi = new AlfrescoApi({ @@ -57,53 +57,53 @@ describe('Multi-line Widget', () => { }); process = await appsActions.startProcess(alfrescoJsApi, appModel, app.processName); await loginPage.loginToProcessServicesUsingUserModel(processUserModel); - done(); + }); beforeEach(async () => { const urlToNavigateTo = `${browser.params.testConfig.adf.url}/activiti/apps/${deployedApp.id}/tasks/`; await BrowserActions.getUrl(urlToNavigateTo); - taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); - taskPage.formFields().checkFormIsDisplayed(); + await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); + await taskPage.formFields().checkFormIsDisplayed(); }); - afterAll(async (done) => { + afterAll(async () => { await alfrescoJsApi.activiti.processApi.deleteProcessInstance(process.id); await alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); await alfrescoJsApi.activiti.adminTenantsApi.deleteTenant(processUserModel.tenantId); - done(); + }); - it('[C268182] Should be able to set general properties for Multi-line Text Widget', () => { - const label = widget.multilineTextWidget().getFieldLabel(app.FIELD.multiSimple); - expect(label).toBe('multiSimple*'); - expect(taskPage.formFields().isCompleteFormButtonDisabled()).toBeTruthy(); - const placeHolder = widget.multilineTextWidget().getFieldPlaceHolder(app.FIELD.multiSimple); - expect(placeHolder).toBe('Type something...'); - widget.multilineTextWidget().setValue(app.FIELD.multiSimple, 'TEST'); - expect(taskPage.formFields().isCompleteFormButtonDisabled()).toBeFalsy(); + it('[C268182] Should be able to set general properties for Multi-line Text Widget', async () => { + const label = await widget.multilineTextWidget().getFieldLabel(app.FIELD.multiSimple); + await expect(label).toBe('multiSimple*'); + await expect(await taskPage.formFields().isCompleteFormButtonDisabled()).toBeTruthy(); + const placeHolder = await widget.multilineTextWidget().getFieldPlaceHolder(app.FIELD.multiSimple); + await expect(placeHolder).toBe('Type something...'); + await widget.multilineTextWidget().setValue(app.FIELD.multiSimple, 'TEST'); + await expect(await taskPage.formFields().isCompleteFormButtonDisabled()).toBeFalsy(); }); it('[C268184] Should be able to set advanced properties for Multi-line Text Widget', async () => { - widget.multilineTextWidget().setValue(app.FIELD.multiMinMax, 'A'); - expect(widget.multilineTextWidget().getErrorMessage(app.FIELD.multiMinMax)).toBe('Enter at least 4 characters'); - expect(taskPage.formFields().isCompleteFormButtonDisabled()).toBeTruthy(); - widget.multilineTextWidget().setValue(app.FIELD.multiMinMax, 'AAAAAAAAAAA'); - expect(widget.multilineTextWidget().getErrorMessage(app.FIELD.multiMinMax)).toBe('Enter no more than 10 characters'); - expect(taskPage.formFields().isCompleteFormButtonDisabled()).toBeTruthy(); - widget.multilineTextWidget().setValue(app.FIELD.multiMinMax, 'AAAA'); + await widget.multilineTextWidget().setValue(app.FIELD.multiMinMax, 'A'); + await expect(await widget.multilineTextWidget().getErrorMessage(app.FIELD.multiMinMax)).toContain('Enter at least 4 characters'); + await expect(await taskPage.formFields().isCompleteFormButtonDisabled()).toBeTruthy(); + await widget.multilineTextWidget().setValue(app.FIELD.multiMinMax, 'AAAAAAAAAAA'); + await expect(await widget.multilineTextWidget().getErrorMessage(app.FIELD.multiMinMax)).toContain('Enter no more than 10 characters'); + await expect(await taskPage.formFields().isCompleteFormButtonDisabled()).toBeTruthy(); + await widget.multilineTextWidget().setValue(app.FIELD.multiMinMax, 'AAAA'); - widget.multilineTextWidget().setValue(app.FIELD.multiSimple, 'TEST'); - widget.multilineTextWidget().setValue(app.FIELD.multiRegexp, '3'); - expect(taskPage.formFields().isCompleteFormButtonDisabled()).toBeTruthy(); - expect(widget.multilineTextWidget().getErrorMessage(app.FIELD.multiRegexp)).toBe('Enter a different value'); - widget.multilineTextWidget().setValue(app.FIELD.multiRegexp, 'TE'); - expect(taskPage.formFields().isCompleteFormButtonDisabled()).toBeFalsy(); + await widget.multilineTextWidget().setValue(app.FIELD.multiSimple, 'TEST'); + await widget.multilineTextWidget().setValue(app.FIELD.multiRegexp, '3'); + await expect(await taskPage.formFields().isCompleteFormButtonDisabled()).toBeTruthy(); + await expect(await widget.multilineTextWidget().getErrorMessage(app.FIELD.multiRegexp)).toContain('Enter a different value'); + await widget.multilineTextWidget().setValue(app.FIELD.multiRegexp, 'TE'); + await expect(await taskPage.formFields().isCompleteFormButtonDisabled()).toBeFalsy(); }); it('[C268232] Should be able to set visibility properties for Multi-line Text Widget', async () => { - widget.textWidget().isWidgetNotVisible(app.FIELD.multiVisible); - widget.textWidget().setValue(app.FIELD.showMultiHidden, '1'); - widget.textWidget().isWidgetVisible(app.FIELD.multiVisible); + await widget.textWidget().isWidgetNotVisible(app.FIELD.multiVisible); + await widget.textWidget().setValue(app.FIELD.showMultiHidden, '1'); + await widget.textWidget().isWidgetVisible(app.FIELD.multiVisible); }); }); diff --git a/e2e/process-services/widgets/number-widget.e2e.ts b/e2e/process-services/widgets/number-widget.e2e.ts index dbcd5bb7ce..d175709c62 100644 --- a/e2e/process-services/widgets/number-widget.e2e.ts +++ b/e2e/process-services/widgets/number-widget.e2e.ts @@ -37,7 +37,7 @@ describe('Number widget', () => { const app = resources.Files.WIDGET_CHECK_APP.NUMBER; let deployedApp, process; - beforeAll(async (done) => { + beforeAll(async () => { const users = new UsersActions(); alfrescoJsApi = new AlfrescoApi({ @@ -58,50 +58,50 @@ describe('Number widget', () => { }); process = await appsActions.startProcess(alfrescoJsApi, appModel, app.processName); await loginPage.loginToProcessServicesUsingUserModel(processUserModel); - done(); + }); - beforeEach(async() => { + beforeEach(async () => { const urlToNavigateTo = `${browser.params.testConfig.adf.url}/activiti/apps/${deployedApp.id}/tasks/`; await BrowserActions.getUrl(urlToNavigateTo); - taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); - taskPage.formFields().checkFormIsDisplayed(); + await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); + await taskPage.formFields().checkFormIsDisplayed(); }); - afterAll(async (done) => { + afterAll(async () => { await alfrescoJsApi.activiti.processApi.deleteProcessInstance(process.id); await alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); await alfrescoJsApi.activiti.adminTenantsApi.deleteTenant(processUserModel.tenantId); - done(); + }); - it('[C269111] Should be able to set general properties for Number Widget', () => { - expect(taskPage.formFields().isCompleteFormButtonDisabled()).toBeTruthy(); - expect(widget.numberWidget().getNumberFieldLabel(app.FIELD.number_general)).toContain('Number General'); - expect(widget.numberWidget().getPlaceholder(app.FIELD.number_general)).toContain('Type a number'); + it('[C269111] Should be able to set general properties for Number Widget', async () => { + await expect(await taskPage.formFields().isCompleteFormButtonDisabled()).toBeTruthy(); + await expect(await widget.numberWidget().getNumberFieldLabel(app.FIELD.number_general)).toContain('Number General'); + await expect(await widget.numberWidget().getPlaceholder(app.FIELD.number_general)).toContain('Type a number'); - widget.numberWidget().setFieldValue(app.FIELD.number_general, 2); - expect(taskPage.formFields().isCompleteFormButtonDisabled()).toBeFalsy(); + await widget.numberWidget().setFieldValue(app.FIELD.number_general, 2); + await expect(await taskPage.formFields().isCompleteFormButtonDisabled()).toBeFalsy(); }); - it('[C274702] Should be able to set advanced and visibility properties for Number Widget', () => { - widget.numberWidget().setFieldValue(app.FIELD.number_general, 2); + it('[C274702] Should be able to set advanced and visibility properties for Number Widget', async () => { + await widget.numberWidget().setFieldValue(app.FIELD.number_general, 2); - taskPage.formFields().checkWidgetIsHidden(app.FIELD.number_visible); - widget.checkboxWidget().clickCheckboxInput(app.FIELD.checkbox_id); - taskPage.formFields().checkWidgetIsVisible(app.FIELD.number_visible); + await taskPage.formFields().checkWidgetIsHidden(app.FIELD.number_visible); + await widget.checkboxWidget().clickCheckboxInput(app.FIELD.checkbox_id); + await taskPage.formFields().checkWidgetIsVisible(app.FIELD.number_visible); - widget.numberWidget().setFieldValue(app.FIELD.number_visible, 2); - expect(widget.numberWidget().getErrorMessage(app.FIELD.number_visible)).toBe('Can\'t be less than 3'); - expect(taskPage.formFields().isCompleteFormButtonDisabled()).toBeTruthy(); - widget.numberWidget().clearFieldValue(app.FIELD.number_visible); + await widget.numberWidget().setFieldValue(app.FIELD.number_visible, 2); + await expect(await widget.numberWidget().getErrorMessage(app.FIELD.number_visible)).toBe('Can\'t be less than 3'); + await expect(await taskPage.formFields().isCompleteFormButtonDisabled()).toBeTruthy(); + await widget.numberWidget().clearFieldValue(app.FIELD.number_visible); - widget.numberWidget().setFieldValue(app.FIELD.number_visible, 101); - expect(widget.numberWidget().getErrorMessage(app.FIELD.number_visible)).toBe('Can\'t be greater than 100'); - expect(taskPage.formFields().isCompleteFormButtonDisabled()).toBeTruthy(); - widget.numberWidget().clearFieldValue(app.FIELD.number_visible); + await widget.numberWidget().setFieldValue(app.FIELD.number_visible, 101); + await expect(await widget.numberWidget().getErrorMessage(app.FIELD.number_visible)).toBe('Can\'t be greater than 100'); + await expect(await taskPage.formFields().isCompleteFormButtonDisabled()).toBeTruthy(); + await widget.numberWidget().clearFieldValue(app.FIELD.number_visible); - widget.numberWidget().setFieldValue(app.FIELD.number_visible, 4); - expect(taskPage.formFields().isCompleteFormButtonDisabled()).toBeFalsy(); + await widget.numberWidget().setFieldValue(app.FIELD.number_visible, 4); + await expect(await taskPage.formFields().isCompleteFormButtonDisabled()).toBeFalsy(); }); }); diff --git a/e2e/process-services/widgets/people-widget.e2e.ts b/e2e/process-services/widgets/people-widget.e2e.ts index 6f6a047890..037f7f749b 100644 --- a/e2e/process-services/widgets/people-widget.e2e.ts +++ b/e2e/process-services/widgets/people-widget.e2e.ts @@ -36,7 +36,7 @@ describe('People widget', () => { const app = resources.Files.WIDGET_CHECK_APP.ADD_PEOPLE; let deployedApp, process; - beforeAll(async (done) => { + beforeAll(async () => { const users = new UsersActions(); alfrescoJsApi = new AlfrescoApi({ @@ -57,44 +57,44 @@ describe('People widget', () => { }); process = await appsActions.startProcess(alfrescoJsApi, appModel, app.processName); await loginPage.loginToProcessServicesUsingUserModel(processUserModel); - done(); + }); - beforeEach(async() => { + beforeEach(async () => { const urlToNavigateTo = `${browser.params.testConfig.adf.url}/activiti/apps/${deployedApp.id}/tasks/`; await BrowserActions.getUrl(urlToNavigateTo); - taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); - taskPage.formFields().checkFormIsDisplayed(); + await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); + await taskPage.formFields().checkFormIsDisplayed(); }); - afterAll(async (done) => { + afterAll(async () => { await alfrescoJsApi.activiti.processApi.deleteProcessInstance(process.id); await alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); await alfrescoJsApi.activiti.adminTenantsApi.deleteTenant(processUserModel.tenantId); - done(); + }); - it('[C260435] Should select user from People Widget', () => { - taskPage.formFields().checkWidgetIsHidden(app.FIELD.widget_id); - widget.checkboxWidget().clickCheckboxInput(app.FIELD.checkbox_id); - taskPage.formFields().checkWidgetIsVisible(app.FIELD.widget_id); + it('[C260435] Should select user from People Widget', async () => { + await taskPage.formFields().checkWidgetIsHidden(app.FIELD.widget_id); + await widget.checkboxWidget().clickCheckboxInput(app.FIELD.checkbox_id); + await taskPage.formFields().checkWidgetIsVisible(app.FIELD.widget_id); const admin = processUserModel.firstName + ' ' + processUserModel.lastName; - widget.peopleWidget().insertUser(app.FIELD.widget_id, admin.charAt(0)); - widget.peopleWidget().checkDropDownListIsDisplayed(); - widget.peopleWidget().checkUserIsListed(admin); - widget.peopleWidget().selectUserFromDropDown(admin); + await widget.peopleWidget().insertUser(app.FIELD.widget_id, admin.charAt(0)); + await widget.peopleWidget().checkDropDownListIsDisplayed(); + await widget.peopleWidget().checkUserIsListed(admin); + await widget.peopleWidget().selectUserFromDropDown(admin); }); - it('[C274707] Should be possible to set visibility properties for People Widget', () => { - taskPage.formFields().checkWidgetIsHidden(app.FIELD.widget_id); - widget.checkboxWidget().clickCheckboxInput(app.FIELD.checkbox_id); - taskPage.formFields().checkWidgetIsVisible(app.FIELD.widget_id); + it('[C274707] Should be possible to set visibility properties for People Widget', async () => { + await taskPage.formFields().checkWidgetIsHidden(app.FIELD.widget_id); + await widget.checkboxWidget().clickCheckboxInput(app.FIELD.checkbox_id); + await taskPage.formFields().checkWidgetIsVisible(app.FIELD.widget_id); const admin = processUserModel.firstName + ' ' + processUserModel.lastName; - widget.peopleWidget().insertUser(app.FIELD.widget_id, admin.charAt(0)); - widget.peopleWidget().checkDropDownListIsDisplayed(); - widget.peopleWidget().checkUserIsListed(admin); - widget.peopleWidget().selectUserFromDropDown(admin); + await widget.peopleWidget().insertUser(app.FIELD.widget_id, admin.charAt(0)); + await widget.peopleWidget().checkDropDownListIsDisplayed(); + await widget.peopleWidget().checkUserIsListed(admin); + await widget.peopleWidget().selectUserFromDropDown(admin); }); }); diff --git a/e2e/process-services/widgets/radio-buttons-widget.e2e.ts b/e2e/process-services/widgets/radio-buttons-widget.e2e.ts index 64e2103e5d..4d005cffef 100644 --- a/e2e/process-services/widgets/radio-buttons-widget.e2e.ts +++ b/e2e/process-services/widgets/radio-buttons-widget.e2e.ts @@ -36,7 +36,7 @@ describe('Radio Buttons Widget', () => { const app = resources.Files.WIDGET_CHECK_APP.RADIO_BUTTONS; let deployedApp, process; - beforeAll(async (done) => { + beforeAll(async () => { const users = new UsersActions(); alfrescoJsApi = new AlfrescoApi({ @@ -59,35 +59,34 @@ describe('Radio Buttons Widget', () => { process = await appsActions.startProcess(alfrescoJsApi, appModel, app.processName); await loginPage.loginToProcessServicesUsingUserModel(processUserModel); - done(); }); beforeEach(async () => { const urlToNavigateTo = `${browser.params.testConfig.adf.url}/activiti/apps/${deployedApp.id}/tasks/`; await BrowserActions.getUrl(urlToNavigateTo); - taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); - taskPage.formFields().checkFormIsDisplayed(); + await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); + await taskPage.formFields().checkFormIsDisplayed(); }); - afterAll(async (done) => { + afterAll(async () => { await alfrescoJsApi.activiti.processApi.deleteProcessInstance(process.id); await alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); await alfrescoJsApi.activiti.adminTenantsApi.deleteTenant(processUserModel.tenantId); - done(); + }); - it('[C277316] Should display empty radio buttons when no preselection is configured', () => { - widget.checkboxWidget().clickCheckboxInput(app.FIELD.checkbox_id); - widget.radioWidget().isSelectionClean(app.FIELD.radio_buttons_id); + it('[C277316] Should display empty radio buttons when no preselection is configured', async () => { + await widget.checkboxWidget().clickCheckboxInput(app.FIELD.checkbox_id); + await widget.radioWidget().isSelectionClean(app.FIELD.radio_buttons_id); }); - it('[C274704] Should be able to set visibility properties for Radio Button widget', () => { - taskPage.formFields().checkWidgetIsHidden(app.FIELD.radio_buttons_id); - expect(taskPage.formFields().isCompleteFormButtonDisabled()).toBeTruthy(); + it('[C274704] Should be able to set visibility properties for Radio Button widget', async () => { + await taskPage.formFields().checkWidgetIsHidden(app.FIELD.radio_buttons_id); + await expect(await taskPage.formFields().isCompleteFormButtonDisabled()).toBeTruthy(); - widget.checkboxWidget().clickCheckboxInput(app.FIELD.checkbox_id); - expect(widget.radioWidget().getRadioWidgetLabel(app.FIELD.radio_buttons_id)).toContain('Radio posts'); - widget.radioWidget().selectOption(app.FIELD.radio_buttons_id, 1); - expect(taskPage.formFields().isCompleteFormButtonDisabled()).toBeFalsy(); + await widget.checkboxWidget().clickCheckboxInput(app.FIELD.checkbox_id); + await expect(await widget.radioWidget().getRadioWidgetLabel(app.FIELD.radio_buttons_id)).toContain('Radio posts'); + await widget.radioWidget().selectOption(app.FIELD.radio_buttons_id, 1); + await expect(await taskPage.formFields().isCompleteFormButtonDisabled()).toBeFalsy(); }); }); diff --git a/e2e/process-services/widgets/text-widget.e2e.ts b/e2e/process-services/widgets/text-widget.e2e.ts index e1015e6c48..ee7b363255 100644 --- a/e2e/process-services/widgets/text-widget.e2e.ts +++ b/e2e/process-services/widgets/text-widget.e2e.ts @@ -36,7 +36,7 @@ describe('Text widget', () => { const app = resources.Files.WIDGET_CHECK_APP.TEXT; let deployedApp, process; - beforeAll(async (done) => { + beforeAll(async () => { const users = new UsersActions(); alfrescoJsApi = new AlfrescoApi({ @@ -57,64 +57,64 @@ describe('Text widget', () => { }); process = await appsActions.startProcess(alfrescoJsApi, appModel, app.processName); await loginPage.loginToProcessServicesUsingUserModel(processUserModel); - done(); + }); beforeEach(async () => { const urlToNavigateTo = `${browser.params.testConfig.adf.url}/activiti/apps/${deployedApp.id}/tasks/`; await BrowserActions.getUrl(urlToNavigateTo); - taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); - taskPage.formFields().checkFormIsDisplayed(); + await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); + await taskPage.formFields().checkFormIsDisplayed(); }); - afterAll(async (done) => { + afterAll(async () => { await alfrescoJsApi.activiti.processApi.deleteProcessInstance(process.id); await alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); await alfrescoJsApi.activiti.adminTenantsApi.deleteTenant(processUserModel.tenantId); - done(); + }); it('[C268157] Should be able to set general properties for Text widget', async () => { - const label = widget.textWidget().getFieldLabel(app.FIELD.simpleText); - expect(label).toBe('textSimple*'); - expect(taskPage.formFields().isCompleteFormButtonDisabled()).toBeTruthy(); - const placeHolder = widget.textWidget().getFieldPlaceHolder(app.FIELD.simpleText); - expect(placeHolder).toBe('Type something...'); - widget.textWidget().setValue(app.FIELD.simpleText, 'TEST'); - expect(taskPage.formFields().isCompleteFormButtonDisabled()).toBeFalsy(); + const label = await widget.textWidget().getFieldLabel(app.FIELD.simpleText); + await expect(label).toBe('textSimple*'); + await expect(await taskPage.formFields().isCompleteFormButtonDisabled()).toBeTruthy(); + const placeHolder = await widget.textWidget().getFieldPlaceHolder(app.FIELD.simpleText); + await expect(placeHolder).toBe('Type something...'); + await widget.textWidget().setValue(app.FIELD.simpleText, 'TEST'); + await expect(await taskPage.formFields().isCompleteFormButtonDisabled()).toBeFalsy(); }); it('[C268170] Min-max length properties', async () => { - widget.textWidget().setValue(app.FIELD.textMinMax, 'A'); - expect(widget.textWidget().getErrorMessage(app.FIELD.textMinMax)).toBe('Enter at least 4 characters'); - expect(taskPage.formFields().isCompleteFormButtonDisabled()).toBeTruthy(); - widget.textWidget().setValue(app.FIELD.textMinMax, 'AAAAAAAAAAA'); - expect(widget.textWidget().getErrorMessage(app.FIELD.textMinMax)).toBe('Enter no more than 10 characters'); - expect(taskPage.formFields().isCompleteFormButtonDisabled()).toBeTruthy(); + await widget.textWidget().setValue(app.FIELD.textMinMax, 'A'); + await expect(await widget.textWidget().getErrorMessage(app.FIELD.textMinMax)).toContain('Enter at least 4 characters'); + await expect(await taskPage.formFields().isCompleteFormButtonDisabled()).toBeTruthy(); + await widget.textWidget().setValue(app.FIELD.textMinMax, 'AAAAAAAAAAA'); + await expect(await widget.textWidget().getErrorMessage(app.FIELD.textMinMax)).toContain('Enter no more than 10 characters'); + await expect(await taskPage.formFields().isCompleteFormButtonDisabled()).toBeTruthy(); }); it('[C268171] Input mask reversed checkbox properties', async () => { - widget.textWidget().setValue(app.FIELD.textMask, '18951523'); - expect(widget.textWidget().getFieldValue(app.FIELD.textMask)).toBe('1895-1523'); + await widget.textWidget().setValue(app.FIELD.textMask, '18951523'); + await expect(await widget.textWidget().getFieldValue(app.FIELD.textMask)).toBe('1895-1523'); }); it('[C268171] Input mask reversed checkbox properties', async () => { - widget.textWidget().setValue(app.FIELD.textMaskReversed, '1234567899'); - expect(widget.textWidget().getFieldValue(app.FIELD.textMaskReversed)).toBe('3456-7899'); + await widget.textWidget().setValue(app.FIELD.textMaskReversed, '1234567899'); + await expect(await widget.textWidget().getFieldValue(app.FIELD.textMaskReversed)).toBe('3456-7899'); }); it('[C268177] Should be able to set Regex Pattern property for Text widget', async () => { - widget.textWidget().setValue(app.FIELD.simpleText, 'TEST'); - widget.textWidget().setValue(app.FIELD.textRegexp, 'T'); - expect(taskPage.formFields().isCompleteFormButtonDisabled()).toBeTruthy(); - expect(widget.textWidget().getErrorMessage(app.FIELD.textRegexp)).toBe('Enter a different value'); - widget.textWidget().setValue(app.FIELD.textRegexp, 'TE'); - expect(taskPage.formFields().isCompleteFormButtonDisabled()).toBeFalsy(); + await widget.textWidget().setValue(app.FIELD.simpleText, 'TEST'); + await widget.textWidget().setValue(app.FIELD.textRegexp, 'T'); + await expect(await taskPage.formFields().isCompleteFormButtonDisabled()).toBeTruthy(); + await expect(await widget.textWidget().getErrorMessage(app.FIELD.textRegexp)).toContain('Enter a different value'); + await widget.textWidget().setValue(app.FIELD.textRegexp, 'TE'); + await expect(await taskPage.formFields().isCompleteFormButtonDisabled()).toBeFalsy(); }); it('[C274712] Should be able to set visibility properties for Text widget ', async () => { - widget.textWidget().isWidgetNotVisible(app.FIELD.textHidden); - widget.textWidget().setValue(app.FIELD.showHiddenText, '1'); - widget.textWidget().isWidgetVisible(app.FIELD.textHidden); + await widget.textWidget().isWidgetNotVisible(app.FIELD.textHidden); + await widget.textWidget().setValue(app.FIELD.showHiddenText, '1'); + await widget.textWidget().isWidgetVisible(app.FIELD.textHidden); }); }); diff --git a/e2e/process-services/widgets/widget-visibility-condition.e2e.ts b/e2e/process-services/widgets/widget-visibility-condition.e2e.ts index aa3fc7981a..f88130e69b 100644 --- a/e2e/process-services/widgets/widget-visibility-condition.e2e.ts +++ b/e2e/process-services/widgets/widget-visibility-condition.e2e.ts @@ -59,7 +59,7 @@ describe('Process-Services - Visibility conditions', () => { const app = resources.Files.WIDGET_CHECK_APP.VISIBILITY; let deployedApp, process; - beforeAll(async (done) => { + beforeAll(async () => { const users = new UsersActions(); alfrescoJsApi = new AlfrescoApi({ @@ -80,73 +80,69 @@ describe('Process-Services - Visibility conditions', () => { }); process = await appsActions.startProcess(alfrescoJsApi, appModel, app.processName); await loginPage.loginToProcessServicesUsingUserModel(processUserModel); - done(); }); beforeEach(async () => { const urlToNavigateTo = `${browser.params.testConfig.adf.url}/activiti/apps/${deployedApp.id}/tasks/`; await BrowserActions.getUrl(urlToNavigateTo); - taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); - taskPage.formFields().checkFormIsDisplayed(); + await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); + await taskPage.formFields().checkFormIsDisplayed(); }); - afterAll(async (done) => { + afterAll(async () => { await alfrescoJsApi.activiti.processApi.deleteProcessInstance(process.id); await alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); await alfrescoJsApi.activiti.adminTenantsApi.deleteTenant(processUserModel.tenantId); - done(); }); - it('[C309647] Should be able to see Checkbox widget when visibility condition refers to another field with specific value', () => { - - expect(widget.textWidget().isWidgetVisible(widgets.textOneId)).toBe(true); - expect(widget.checkboxWidget().isCheckboxHidden(checkbox.checkboxFieldValue)).toBe(true); - widget.textWidget().setValue(widgets.textOneId, value.displayCheckbox); - expect(widget.checkboxWidget().isCheckboxDisplayed(checkbox.checkboxFieldValue)).toBe(true); + it('[C309647] Should be able to see Checkbox widget when visibility condition refers to another field with specific value', async () => { + await widget.textWidget().isWidgetVisible(widgets.textOneId); + await widget.checkboxWidget().isCheckboxHidden(checkbox.checkboxFieldValue); + await widget.textWidget().setValue(widgets.textOneId, value.displayCheckbox); + await widget.checkboxWidget().isCheckboxDisplayed(checkbox.checkboxFieldValue); }); - it('[C309648] Should be able to see Checkbox widget when visibility condition refers to a form variable and a field', () => { + it('[C309648] Should be able to see Checkbox widget when visibility condition refers to a form variable and a field', async () => { - widget.textWidget().isWidgetVisible(widgets.textOneId); - expect(widget.checkboxWidget().isCheckboxHidden(checkbox.checkboxVariableField)).toBe(true); + await widget.textWidget().isWidgetVisible(widgets.textOneId); + await widget.checkboxWidget().isCheckboxHidden(checkbox.checkboxVariableField); - widget.textWidget().setValue(widgets.textOneId, value.showVariableFieldCheckbox); - expect(widget.checkboxWidget().isCheckboxDisplayed(checkbox.checkboxVariableField)).toBe(true); + await widget.textWidget().setValue(widgets.textOneId, value.showVariableFieldCheckbox); + await widget.checkboxWidget().isCheckboxDisplayed(checkbox.checkboxVariableField); - widget.textWidget().setValue(widgets.textOneId, value.notDisplayCheckbox); - expect(widget.checkboxWidget().isCheckboxHidden(checkbox.checkboxVariableField)).toBe(true); + await widget.textWidget().setValue(widgets.textOneId, value.notDisplayCheckbox); + await widget.checkboxWidget().isCheckboxHidden(checkbox.checkboxVariableField); }); - it('[C309649] Should be able to see Checkbox widget when visibility condition refers to a field and a form variable', () => { + it('[C309649] Should be able to see Checkbox widget when visibility condition refers to a field and a form variable', async () => { - widget.textWidget().isWidgetVisible(widgets.textOneId); - expect(widget.checkboxWidget().isCheckboxHidden(checkbox.checkboxFieldVariable)).toBe(true); + await widget.textWidget().isWidgetVisible(widgets.textOneId); + await widget.checkboxWidget().isCheckboxHidden(checkbox.checkboxFieldVariable); - widget.textWidget().setValue(widgets.textOneId, value.displayFieldVariableCheckbox); - expect(widget.checkboxWidget().isCheckboxDisplayed(checkbox.checkboxFieldVariable)).toBe(true); + await widget.textWidget().setValue(widgets.textOneId, value.displayFieldVariableCheckbox); + await widget.checkboxWidget().isCheckboxDisplayed(checkbox.checkboxFieldVariable); - widget.textWidget().setValue(widgets.textOneId, value.notDisplayCheckbox); - widget.checkboxWidget().isCheckboxHidden(checkbox.checkboxFieldVariable); + await widget.textWidget().setValue(widgets.textOneId, value.notDisplayCheckbox); + await widget.checkboxWidget().isCheckboxHidden(checkbox.checkboxFieldVariable); }); - it('[C311425] Should be able to see Checkbox widget when visibility condition refers to a field and another field', () => { + it('[C311425] Should be able to see Checkbox widget when visibility condition refers to a field and another field', async () => { - widget.textWidget().isWidgetVisible(widgets.textOneId); - expect(widget.checkboxWidget().isCheckboxDisplayed(checkbox.checkboxFieldField)).toBe(true); - widget.textWidget().setValue(widgets.textOneId, value.displayCheckbox); + await widget.textWidget().isWidgetVisible(widgets.textOneId); + await widget.checkboxWidget().isCheckboxHidden(checkbox.checkboxFieldField); + await widget.textWidget().setValue(widgets.textOneId, value.displayCheckbox); - expect(widget.checkboxWidget().isCheckboxHidden(checkbox.checkboxFieldField)).toBe(true); + await widget.checkboxWidget().isCheckboxHidden(checkbox.checkboxFieldField); - widget.textWidget().setValue(widgets.textTwoId, value.displayCheckbox); - - expect(widget.checkboxWidget().isCheckboxDisplayed(checkbox.checkboxFieldField)).toBe(true); + await widget.textWidget().setValue(widgets.textTwoId, value.displayCheckbox); + await widget.checkboxWidget().isCheckboxDisplayed(checkbox.checkboxFieldField); }); - it('[C311424] Should be able to see Checkbox widget when visibility condition refers to a variable with specific value', () => { - expect(widget.checkboxWidget().isCheckboxDisplayed(checkbox.checkboxVariableValue)).toBe(true); + it('[C311424] Should be able to see Checkbox widget when visibility condition refers to a variable with specific value', async () => { + await widget.checkboxWidget().isCheckboxDisplayed(checkbox.checkboxVariableValue); }); - it('[C311426] Should be able to see Checkbox widget when visibility condition refers to form variable and another form variable', () => { - expect(widget.checkboxWidget().isCheckboxDisplayed(checkbox.checkboxVariableVariable)).toBe(true); + it('[C311426] Should be able to see Checkbox widget when visibility condition refers to form variable and another form variable', async () => { + await widget.checkboxWidget().isCheckboxDisplayed(checkbox.checkboxVariableVariable); }); }); diff --git a/e2e/protractor/override-jasmine.js b/e2e/protractor/override-jasmine.js index 125ffec3d1..4f8e2bcf4e 100644 --- a/e2e/protractor/override-jasmine.js +++ b/e2e/protractor/override-jasmine.js @@ -15,18 +15,17 @@ function beforeAllRewrite() { } catch (e) { // tslint:disable-next-line:no-console console.log('Error Before all second attempt fail all' + JSON.stringify(error)); - expect(true).toBe(false); + await expect(true).toBe(false); } } done(); - return; }; originalBeforeAll(wrapClbk, timeout); }; -}; +} function afterAllRewrite() { @@ -43,13 +42,12 @@ function afterAllRewrite() { } done(); - return; }; originalAfterAll(wrapClbk, timeout); }; -}; +} function beforeEachAllRewrite() { @@ -63,17 +61,15 @@ function beforeEachAllRewrite() { } catch (error) { // tslint:disable-next-line:no-console console.log('Error before Each' + JSON.stringify(error)); - expect(true).toBe(false); } done(); - return; }; originalBeforeEach(wrapClbk, timeout); }; -}; +} function afterEachAllRewrite() { @@ -87,17 +83,15 @@ function afterEachAllRewrite() { } catch (error) { // tslint:disable-next-line:no-console console.log('Error After each' + JSON.stringify(error)); - } done(); - return; }; originalAfterEach(wrapClbk, timeout); }; -}; +} function sleep(delay) { var start = new Date().getTime(); diff --git a/e2e/protractor/save-remote.js b/e2e/protractor/save-remote.js index adb66ad231..5170f68678 100644 --- a/e2e/protractor/save-remote.js +++ b/e2e/protractor/save-remote.js @@ -1,4 +1,7 @@ const htmlReporter = require('protractor-html-reporter-2'); +const fs = require('fs'); +const rimraf = require('rimraf'); +const path = require('path'); function buildNumber() { let buildNumber = process.env.TRAVIS_BUILD_NUMBER; @@ -143,8 +146,24 @@ async function saveReport(alfrescoJsApi, retryCount) { }); } +async function cleanReportFolder() { + let reportsFolder = `${projectRoot}/e2e-output/junit-report/`; + + fs.exists(reportsFolder, function (exists, error) { + if (exists) { + rimraf(reportsFolder, function (err) { + }); + } + + if (error) { + console.error('[ERROR] fs', error); + } + }); +} + module.exports = { uploadScreenshot: uploadScreenshot, uploadReport: uploadReport, + cleanReportFolder: cleanReportFolder, saveReport: saveReport }; diff --git a/e2e/resources/activiti7/candidatebaseapp.zip b/e2e/resources/activiti7/candidatebaseapp.zip index 7e5703449a..3e3b76e197 100644 Binary files a/e2e/resources/activiti7/candidatebaseapp.zip and b/e2e/resources/activiti7/candidatebaseapp.zip differ diff --git a/e2e/resources/activiti7/simpleapp.zip b/e2e/resources/activiti7/simpleapp.zip index 70a8911f85..b0db6aa09b 100644 Binary files a/e2e/resources/activiti7/simpleapp.zip and b/e2e/resources/activiti7/simpleapp.zip differ diff --git a/e2e/resources/activiti7/subProcessApp.zip b/e2e/resources/activiti7/subProcessApp.zip deleted file mode 100644 index 938393d492..0000000000 Binary files a/e2e/resources/activiti7/subProcessApp.zip and /dev/null differ diff --git a/e2e/resources/activiti7/subprocessapp.zip b/e2e/resources/activiti7/subprocessapp.zip new file mode 100644 index 0000000000..4cdf2945cf Binary files /dev/null and b/e2e/resources/activiti7/subprocessapp.zip differ diff --git a/e2e/resources/apps/Simple App with User Form.zip b/e2e/resources/apps/Simple App with User Form.zip index 377f7cf08f..2b72dd5549 100644 Binary files a/e2e/resources/apps/Simple App with User Form.zip and b/e2e/resources/apps/Simple App with User Form.zip differ diff --git a/e2e/resources/forms/checkbox-visibility-condition.ts b/e2e/resources/forms/checkbox-visibility-condition.ts index 4ce38ba090..2f5d355b71 100644 --- a/e2e/resources/forms/checkbox-visibility-condition.ts +++ b/e2e/resources/forms/checkbox-visibility-condition.ts @@ -16,197 +16,271 @@ */ /* tslint:disable */ -export const checkboxVisibilityForm = `{ - "formRepresentation": { - "id": "form-fb9245f6-1132-47bd-b0b3-823bb85002da", - "name": "test", - "description": "", - "version": 0, - "standAlone": true, - "formDefinition": { - "tabs": [], - "fields": [ +export const checkboxVisibilityFormJson = { + formRepresentation: { + id: 'form-fb9245f6-1132-47bd-b0b3-823bb85002da', + name: 'test', + description: '', + version: 0, + standAlone: true, + formDefinition: { + tabs: [], + fields: [ { - "id": "f3445185-b9af-41f7-a836-3b5712abeb0f", - "name": "Label", - "type": "container", - "tab": null, - "numberOfColumns": 2, - "fields": { - "1": [ + id: 'f3445185-b9af-41f7-a836-3b5712abeb0f', + name: 'Label', + type: 'container', + tab: null, + numberOfColumns: 2, + fields: { + 1: [ { - "id": "CheckboxFieldField", - "name": "CheckboxFieldField", - "type": "boolean", - "required": false, - "colspan": 1, - "visibilityCondition": { - "leftType": "field", - "leftValue": "textOne", - "operator": "==", - "rightValue": "textTwo", - "rightType": "field", - "nextConditionOperator": "", - "nextCondition": null + id: 'CheckboxFieldField', + name: 'CheckboxFieldField', + type: 'boolean', + required: false, + colspan: 1, + visibilityCondition: { + leftType: 'field', + leftValue: 'textOne', + operator: '==', + rightValue: 'textTwo', + rightType: 'field', + nextConditionOperator: '', + nextCondition: null }, - "params": { - "existingColspan": 1, - "maxColspan": 2 + params: { + existingColspan: 1, + maxColspan: 2 } }, { - "id": "CheckboxFieldVariable", - "name": "CheckboxFieldVariable", - "type": "boolean", - "required": false, - "colspan": 1, - "visibilityCondition": { - "leftType": "field", - "leftValue": "textOne", - "operator": "==", - "rightValue": "33c60b43-2d44-4f25-bdc4-62b34ae11b43", - "rightType": "variable", - "nextConditionOperator": "" + id: 'CheckboxFieldVariable', + name: 'CheckboxFieldVariable', + type: 'boolean', + required: false, + colspan: 1, + visibilityCondition: { + leftType: 'field', + leftValue: 'textOne', + operator: '==', + rightValue: '33c60b43-2d44-4f25-bdc4-62b34ae11b43', + rightType: 'variable', + nextConditionOperator: '' }, - "params": { - "existingColspan": 1, - "maxColspan": 2 + params: { + existingColspan: 1, + maxColspan: 2 } }, { - "id": "CheckboxFieldValue", - "name": "CheckboxFieldValue", - "type": "boolean", - "required": false, - "colspan": 1, - "visibilityCondition": { - "leftType": "field", - "leftValue": "textOne", - "operator": "==", - "rightValue": "showCheckbox", - "rightType": "value", - "nextConditionOperator": "", - "nextCondition": null + id: 'CheckboxFieldValue', + name: 'CheckboxFieldValue', + type: 'boolean', + required: false, + colspan: 1, + visibilityCondition: { + leftType: 'field', + leftValue: 'textOne', + operator: '==', + rightValue: 'showCheckbox', + rightType: 'value', + nextConditionOperator: '', + nextCondition: null }, - "params": { - "existingColspan": 1, - "maxColspan": 2 + params: { + existingColspan: 1, + maxColspan: 2 } }, { - "id": "CheckboxVariableValue", - "name": "CheckboxVariableValue", - "type": "boolean", - "required": false, - "colspan": 1, - "visibilityCondition": { - "leftType": "variable", - "leftValue": "33c60b43-2d44-4f25-bdc4-62b34ae11b43", - "operator": "==", - "rightValue": "showCheckbox", - "rightType": "value", - "nextConditionOperator": "", - "nextCondition": null + id: 'CheckboxVariableValue', + name: 'CheckboxVariableValue', + type: 'boolean', + required: false, + colspan: 1, + visibilityCondition: { + leftType: 'variable', + leftValue: '33c60b43-2d44-4f25-bdc4-62b34ae11b43', + operator: '==', + rightValue: 'showCheckbox', + rightType: 'value', + nextConditionOperator: '', + nextCondition: null }, - "params": { - "existingColspan": 1, - "maxColspan": 2 + params: { + existingColspan: 1, + maxColspan: 2 } }, { - "id": "CheckboxVariableVariable", - "name": "CheckboxVariableVariable", - "type": "boolean", - "required": false, - "colspan": 1, - "visibilityCondition": { - "leftType": "variable", - "leftValue": "33c60b43-2d44-4f25-bdc4-62b34ae11b43", - "operator": "==", - "rightValue": "0e67eb99-46f7-424e-9a78-6df0faa5844d", - "rightType": "variable", - "nextConditionOperator": "", - "nextCondition": null + id: 'CheckboxVariableVariable', + name: 'CheckboxVariableVariable', + type: 'boolean', + required: false, + colspan: 1, + visibilityCondition: { + leftType: 'variable', + leftValue: '33c60b43-2d44-4f25-bdc4-62b34ae11b43', + operator: '==', + rightValue: '0e67eb99-46f7-424e-9a78-6df0faa5844d', + rightType: 'variable', + nextConditionOperator: '', + nextCondition: null }, - "params": { - "existingColspan": 1, - "maxColspan": 2 + params: { + existingColspan: 1, + maxColspan: 2 } }, { - "id": "CheckboxVariableField", - "name": "CheckboxVariableField", - "type": "boolean", - "required": false, - "colspan": 1, - "visibilityCondition": { - "leftType": "variable", - "leftValue": "33c60b43-2d44-4f25-bdc4-62b34ae11b43", - "operator": "==", - "rightValue": "textOne", - "rightType": "field", - "nextConditionOperator": "", - "nextCondition": null + id: 'CheckboxVariableField', + name: 'CheckboxVariableField', + type: 'boolean', + required: false, + colspan: 1, + visibilityCondition: { + leftType: 'variable', + leftValue: '33c60b43-2d44-4f25-bdc4-62b34ae11b43', + operator: '==', + rightValue: 'textOne', + rightType: 'field', + nextConditionOperator: '', + nextCondition: null }, - "params": { - "existingColspan": 1, - "maxColspan": 2 + params: { + existingColspan: 1, + maxColspan: 2 } } ], - "2": [ + 2: [ { - "id": "textOne", - "name": "textOne", - "type": "text", - "required": false, - "colspan": 1, - "placeholder": null, - "minLength": 0, - "maxLength": 0, - "regexPattern": null, - "visibilityCondition": null, - "params": { - "existingColspan": 1, - "maxColspan": 2 + id: 'textOne', + name: 'textOne', + type: 'text', + required: false, + colspan: 1, + placeholder: null, + minLength: 0, + maxLength: 0, + regexPattern: null, + visibilityCondition: null, + params: { + existingColspan: 1, + maxColspan: 2 } }, { - "id": "textTwo", - "name": "textTwo", - "type": "text", - "required": false, - "colspan": 1, - "placeholder": null, - "minLength": 0, - "maxLength": 0, - "regexPattern": null, - "visibilityCondition": null, - "params": { - "existingColspan": 1, - "maxColspan": 2 + id: 'textTwo', + name: 'textTwo', + type: 'text', + required: false, + colspan: 1, + placeholder: null, + minLength: 0, + maxLength: 0, + regexPattern: null, + visibilityCondition: null, + params: { + existingColspan: 1, + maxColspan: 2 } } ] } } ], - "outcomes": [], - "metadata": {}, - "variables": [ + outcomes: [], + metadata: {}, + variables: [ { - "id": "33c60b43-2d44-4f25-bdc4-62b34ae11b43", - "name": "varString1", - "type": "string", - "value": "showCheckbox" + id: '33c60b43-2d44-4f25-bdc4-62b34ae11b43', + name: 'varString1', + type: 'string', + value: 'showCheckbox' }, { - "id": "0e67eb99-46f7-424e-9a78-6df0faa5844d", - "name": "varString2", - "type": "string", - "value": "showCheckbox" + id: '0e67eb99-46f7-424e-9a78-6df0faa5844d', + name: 'varString2', + type: 'string', + value: 'showCheckbox' } ] } } -}`; +}; + +export const multipleCheckboxVisibilityFormJson = { + formRepresentation: { + id: 'form-589a5b5d-da10-4af7-a5be-7dad2482dc19', + name: 'newtestform', + description: '', + version: 0, + standAlone: true, + formDefinition: { + tabs: [], + fields: [ + { + id: '438a9089-2641-498d-8e84-ffad51ea8379', + name: 'Label', + type: 'container', + tab: null, + numberOfColumns: 2, + fields: { + 1: [ + { + id: 'Checkbox1', + name: 'Checkbox1', + type: 'boolean', + required: false, + colspan: 1, + visibilityCondition: { + leftType: 'field', + leftValue: 'Checkbox2', + operator: '!=', + rightValue: 'Checkbox3', + rightType: 'field', + nextConditionOperator: '', + nextCondition: null + }, + params: { + existingColspan: 1, + maxColspan: 2 + } + }, + { + id: 'Checkbox2', + name: 'Checkbox2', + type: 'boolean', + required: false, + colspan: 1, + visibilityCondition: null, + params: { + existingColspan: 1, + maxColspan: 2 + } + }, + { + id: 'Checkbox3', + name: 'Checkbox3', + type: 'boolean', + required: false, + colspan: 1, + visibilityCondition: null, + params: { + existingColspan: 1, + maxColspan: 2 + } + } + ], + 2: [] + } + } + ], + outcomes: [], + metadata: {}, + variables: [] + } + } +}; diff --git a/e2e/resources/forms/custom-date-form.ts b/e2e/resources/forms/custom-date-form.ts new file mode 100644 index 0000000000..04825517c7 --- /dev/null +++ b/e2e/resources/forms/custom-date-form.ts @@ -0,0 +1,179 @@ +/*! + * @license + * Copyright 2019 Alfresco Software, Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* tslint:disable */ +export const customDateFormAPS1 = `{ + "id": 18977, + "name": "APS1customDateFrom", + "description": "", + "version": 1, + "lastUpdatedBy": 1, + "lastUpdatedByFullName": " Administrator", + "lastUpdated": "2019-08-21T09:29:18.042+0000", + "stencilSetId": 0, + "referenceId": null, + "formDefinition": { + "tabs": [], + "fields": [ + { + "fieldType": "ContainerRepresentation", + "id": "1566223482682", + "name": "Label", + "type": "container", + "value": null, + "required": false, + "readOnly": false, + "overrideId": false, + "colspan": 1, + "placeholder": null, + "minLength": 0, + "maxLength": 0, + "minValue": null, + "maxValue": null, + "regexPattern": null, + "optionType": null, + "hasEmptyValue": null, + "options": null, + "restUrl": null, + "restResponsePath": null, + "restIdProperty": null, + "restLabelProperty": null, + "tab": null, + "className": null, + "dateDisplayFormat": null, + "layout": null, + "sizeX": 2, + "sizeY": 1, + "row": -1, + "col": -1, + "visibilityCondition": null, + "numberOfColumns": 2, + "fields": { + "1": [ + { + "fieldType": "FormFieldRepresentation", + "id": "datefield", + "name": "DateField", + "type": "date", + "value": null, + "required": false, + "readOnly": false, + "overrideId": false, + "colspan": 1, + "placeholder": null, + "minLength": 0, + "maxLength": 0, + "minValue": "19-7-2019", + "maxValue": "19-8-2019", + "regexPattern": null, + "optionType": null, + "hasEmptyValue": null, + "options": null, + "restUrl": null, + "restResponsePath": null, + "restIdProperty": null, + "restLabelProperty": null, + "tab": null, + "className": null, + "params": { + "existingColspan": 1, + "maxColspan": 2 + }, + "dateDisplayFormat": "YY-M-D", + "layout": { + "row": -1, + "column": -1, + "colspan": 1 + }, + "sizeX": 1, + "sizeY": 1, + "row": -1, + "col": -1, + "visibilityCondition": null + } + ], + "2": [] + } + } + ], + "outcomes": [], + "javascriptEvents": [], + "className": "", + "style": "", + "customFieldTemplates": {}, + "metadata": {}, + "variables": [], + "customFieldsValueInfo": {}, + "gridsterForm": false + } +}`; + +export const customDateFormAPS2 = `{ + "formRepresentation":{ + "id":"form-71f621f5-7113-4bb8-a646-8fe36f27cdf4", + "name":"APS2customDateForm", + "description":"", + "version":0, + "standAlone":true, + "formDefinition":{ + "tabs":[ + + ], + "fields":[ + { + "id":"c207088c-e0f5-402e-8513-a865f3777c25", + "name":"Label", + "type":"container", + "tab":null, + "numberOfColumns":2, + "fields":{ + "1":[ + { + "id":"datefield", + "name":"DateField", + "type":"date", + "required":false, + "colspan":1, + "placeholder":null, + "minValue":"2019-07-19", + "maxValue":"2019-08-19", + "visibilityCondition":null, + "params":{ + "existingColspan":1, + "maxColspan":2 + }, + "dateDisplayFormat":"YY-M-D" + } + ], + "2":[ + + ] + } + } + ], + "outcomes":[ + + ], + "metadata":{ + + }, + "variables":[ + + ] + } + } +}`; diff --git a/e2e/resources/forms/multiple-visibility-conditions.ts b/e2e/resources/forms/multiple-visibility-conditions.ts new file mode 100644 index 0000000000..6915197bf0 --- /dev/null +++ b/e2e/resources/forms/multiple-visibility-conditions.ts @@ -0,0 +1,469 @@ +/*! + * @license + * Copyright 2019 Alfresco Software, Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + export const multipleVisibilityFormJson = { + formRepresentation: { + id: 'form-417ec60f-59ec-4990-a3b4-674f2c90af8a', + name: 'testtesttest', + description: '', + version: 0, + formDefinition: { + tabs: [], + fields: [ + { + id: '693934b1-fb52-45db-8ec0-f0d0f0accbed', + name: 'Label', + type: 'container', + tab: null, + numberOfColumns: 6, + fields: { + 1: [ + { + id: 'CheckboxReq', + name: 'CheckboxReq', + type: 'boolean', + required: true, + colspan: 1, + visibilityCondition: null, + params: { + existingColspan: 1, + maxColspan: 2 + } + }, + { + id: 'CheckboxNotReq', + name: 'CheckboxNotReq', + type: 'boolean', + required: false, + colspan: 1, + visibilityCondition: null, + params: { + existingColspan: 1, + maxColspan: 2 + } + }, + { + id: 'CheckboxColspan', + name: 'CheckboxColspan', + type: 'boolean', + required: false, + colspan: 2, + visibilityCondition: null, + params: { + existingColspan: 1, + maxColspan: 2 + } + }, + { + id: 'CheckboxBasicFieldValue', + name: 'CheckboxBasicFieldValue', + type: 'boolean', + required: false, + colspan: 1, + visibilityCondition: null, + params: { + existingColspan: 1, + maxColspan: 2 + } + }, + { + id: 'CheckboxBasicFieldVariable', + name: 'CheckboxBasicFieldVariable', + type: 'boolean', + required: false, + colspan: 1, + visibilityCondition: { + leftFormFieldId: 'textOne', + leftRestResponseId: '', + operator: '==', + rightValue: '', + rightType: null, + rightFormFieldId: '', + rightRestResponseId: '948aa549-5011-423e-b8a2-020e69daae5f', + nextConditionOperator: '', + nextCondition: null + }, + params: { + existingColspan: 1, + maxColspan: 2 + } + }, + { + id: 'CheckboxBasicVariableField', + name: 'CheckboxBasicVariableField', + type: 'boolean', + required: false, + colspan: 1, + visibilityCondition: { + leftFormFieldId: '', + leftRestResponseId: '948aa549-5011-423e-b8a2-020e69daae5f', + operator: '==', + rightValue: '', + rightType: null, + rightFormFieldId: 'textOne', + rightRestResponseId: '', + nextConditionOperator: '', + nextCondition: null + }, + params: { + existingColspan: 1, + maxColspan: 2 + } + }, + { + id: 'CheckboxMultiple', + name: 'CheckboxMultiple', + type: 'boolean', + required: false, + colspan: 1, + visibilityCondition: { + leftFormFieldId: 'textOne', + leftRestResponseId: '', + operator: '==', + rightValue: 'aaa', + rightType: null, + rightFormFieldId: '', + rightRestResponseId: '', + nextConditionOperator: 'and', + nextCondition: { + leftFormFieldId: 'textTwo', + leftRestResponseId: '', + operator: 'not equal', + rightValue: 'aaa', + rightType: null, + rightFormFieldId: '', + rightRestResponseId: '', + nextConditionOperator: '', + nextCondition: null + } + }, + params: { + existingColspan: 1, + maxColspan: 2 + } + }, + { + id: 'checkboxone', + name: 'CheckboxOne', + type: 'boolean', + required: false, + colspan: 1, + visibilityCondition: { + leftFormFieldId: 'textOne', + leftRestResponseId: '', + operator: '==', + rightValue: 'aaa', + rightType: null, + rightFormFieldId: '', + rightRestResponseId: '', + nextConditionOperator: 'and', + nextCondition: { + leftFormFieldId: 'textTwo', + leftRestResponseId: '', + operator: 'not equal', + rightValue: 'aaa', + rightType: null, + rightFormFieldId: '', + rightRestResponseId: '', + nextConditionOperator: 'and not', + nextCondition: { + leftFormFieldId: 'textThree', + leftRestResponseId: '', + operator: 'empty', + rightValue: '', + rightType: null, + rightFormFieldId: '', + rightRestResponseId: '', + nextConditionOperator: 'or', + nextCondition: { + leftFormFieldId: 'textfour', + leftRestResponseId: '', + operator: 'not empty', + rightValue: 'aaa', + rightType: null, + rightFormFieldId: '', + rightRestResponseId: '', + nextConditionOperator: 'or not', + nextCondition: { + leftFormFieldId: 'textfive', + leftRestResponseId: '', + operator: '==', + rightValue: 'aaa', + rightType: null, + rightFormFieldId: '', + rightRestResponseId: '', + nextConditionOperator: '', + nextCondition: null + } + } + } + } + }, + params: { + existingColspan: 1, + maxColspan: 2 + } + }, + { + id: 'checkboxtworeq', + name: 'CheckboxTwoReq', + type: 'boolean', + required: true, + colspan: 2, + visibilityCondition: { + leftFormFieldId: '', + leftRestResponseId: '948aa549-5011-423e-b8a2-020e69daae5f', + operator: '==', + rightValue: '', + rightType: null, + rightFormFieldId: 'textTwo', + rightRestResponseId: '', + nextConditionOperator: 'and', + nextCondition: { + leftFormFieldId: '', + leftRestResponseId: '08f66ebb-1e5c-4ae4-a8cc-ec9c674d1e40', + operator: 'not equal', + rightValue: '', + rightType: null, + rightFormFieldId: 'textOne', + rightRestResponseId: '', + nextConditionOperator: 'and not', + nextCondition: { + leftFormFieldId: '', + leftRestResponseId: '888786b1-e948-4e7a-9caa-deb2583d222f', + operator: 'not equal', + rightValue: '', + rightType: null, + rightFormFieldId: 'textThree', + rightRestResponseId: '', + nextConditionOperator: 'or', + nextCondition: { + leftFormFieldId: '', + leftRestResponseId: '5007cf47-aa68-42c0-b1ab-a98f0dff6bdc', + operator: 'not equal', + rightValue: '', + rightType: null, + rightFormFieldId: 'textfour', + rightRestResponseId: '', + nextConditionOperator: 'or not', + nextCondition: { + leftFormFieldId: '', + leftRestResponseId: '948aa549-5011-423e-b8a2-020e69daae5f', + operator: '==', + rightValue: '', + rightType: null, + rightFormFieldId: 'textfive', + rightRestResponseId: '', + nextConditionOperator: '', + nextCondition: null + } + } + } + } + }, + params: { + existingColspan: 1, + maxColspan: 2 + } + }, + { + id: 'checkboxthree', + name: 'CheckboxThree', + type: 'boolean', + required: false, + colspan: 1, + visibilityCondition: { + leftFormFieldId: 'textOne', + leftRestResponseId: '', + operator: '==', + rightValue: '', + rightType: null, + rightFormFieldId: '', + rightRestResponseId: '948aa549-5011-423e-b8a2-020e69daae5f', + nextConditionOperator: 'and', + nextCondition: { + leftFormFieldId: 'textTwo', + leftRestResponseId: '', + operator: 'not equal', + rightValue: '', + rightType: null, + rightFormFieldId: '', + rightRestResponseId: '08f66ebb-1e5c-4ae4-a8cc-ec9c674d1e40', + nextConditionOperator: 'and not', + nextCondition: { + leftFormFieldId: 'textThree', + leftRestResponseId: '', + operator: 'not equal', + rightValue: '', + rightType: null, + rightFormFieldId: '', + rightRestResponseId: '888786b1-e948-4e7a-9caa-deb2583d222f', + nextConditionOperator: 'or', + nextCondition: { + leftFormFieldId: 'textfour', + leftRestResponseId: '', + operator: 'not equal', + rightValue: '', + rightType: null, + rightFormFieldId: '', + rightRestResponseId: '5007cf47-aa68-42c0-b1ab-a98f0dff6bdc', + nextConditionOperator: 'or not', + nextCondition: { + leftFormFieldId: 'textfive', + leftRestResponseId: '', + operator: '==', + rightValue: '', + rightType: null, + rightFormFieldId: '', + rightRestResponseId: '948aa549-5011-423e-b8a2-020e69daae5f', + nextConditionOperator: '', + nextCondition: null + } + } + } + } + }, + params: { + existingColspan: 1, + maxColspan: 2 + } + } + ], + 2: [ + { + id: 'textOne', + name: 'TextOne', + type: 'text', + required: false, + colspan: 1, + placeholder: null, + minLength: 0, + maxLength: 0, + regexPattern: null, + visibilityCondition: null, + params: { + existingColspan: 1, + maxColspan: 2 + } + } + ], + 3: [ + { + id: 'textTwo', + name: 'TextTwo', + type: 'text', + required: false, + colspan: 1, + placeholder: null, + minLength: 0, + maxLength: 0, + regexPattern: null, + visibilityCondition: null, + params: { + existingColspan: 1, + maxColspan: 2 + } + } + ], + 4: [ + { + id: 'textThree', + name: 'TextThree', + type: 'text', + required: false, + colspan: 1, + placeholder: null, + minLength: 0, + maxLength: 0, + regexPattern: null, + visibilityCondition: null, + params: { + existingColspan: 1, + maxColspan: 2 + } + } + ], + 5: [ + { + id: 'textfour', + name: 'TextFour', + type: 'text', + required: false, + colspan: 1, + placeholder: null, + minLength: 0, + maxLength: 0, + regexPattern: null, + visibilityCondition: null, + params: { + existingColspan: 1, + maxColspan: 2 + } + } + ], + 6: [ + { + id: 'textfive', + name: 'TextFive', + type: 'text', + required: false, + colspan: 1, + placeholder: null, + minLength: 0, + maxLength: 0, + regexPattern: null, + visibilityCondition: null, + params: { + existingColspan: 1, + maxColspan: 2 + } + } + ] + } + } + ], + outcomes: [], + metadata: {}, + variables: [ + { + id: '948aa549-5011-423e-b8a2-020e69daae5f', + name: 'vstring', + type: 'string', + value: 'aaa' + }, + { + id: '08f66ebb-1e5c-4ae4-a8cc-ec9c674d1e40', + name: 'vint', + type: 'integer', + value: 5 + }, + { + id: '888786b1-e948-4e7a-9caa-deb2583d222f', + name: 'vbool', + type: 'boolean', + value: true + }, + { + id: '5007cf47-aa68-42c0-b1ab-a98f0dff6bdc', + name: 'vdate', + type: 'date', + value: '2019-05-10' + } + ] + } + } +}; diff --git a/e2e/resources/forms/tab-visibility-conditions.ts b/e2e/resources/forms/tab-visibility-conditions.ts new file mode 100644 index 0000000000..dcfd1527a9 --- /dev/null +++ b/e2e/resources/forms/tab-visibility-conditions.ts @@ -0,0 +1,673 @@ +/*! + * @license + * Copyright 2019 Alfresco Software, Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* tslint:disable */ +export const tabFieldValueVisibilityJson = { + formRepresentation: { + id: 'form-3aff57d3-62af-4adf-9b14-1d8f44a28077', + name: 'tabvisibility', + description: '', + version: 0, + standAlone: true, + formDefinition: { + tabs: [ + { + id: '71da814d-5580-4f1f-972a-8089253aeded', + title: 'tabBasicFieldValue', + visibilityCondition: { + leftType: 'field', + leftValue: 'TextOne', + operator: '==', + rightValue: 'showTab', + rightType: 'value', + nextConditionOperator: '', + nextCondition: null + } + }, + { + id: '442eea0b-65f9-484e-b37f-f5a91d5e1f21', + title: 'tabWithFields', + visibilityCondition: null + } + ], + fields: [ + { + id: 'dcde7e13-2444-48bc-ab30-32902cea549e', + name: 'Label', + type: 'container', + tab: '71da814d-5580-4f1f-972a-8089253aeded', + numberOfColumns: 2, + fields: { + 1: [ + { + id: 'TextTwo', + name: 'TextTwo', + type: 'text', + required: false, + colspan: 1, + placeholder: null, + minLength: 0, + maxLength: 0, + regexPattern: null, + visibilityCondition: null, + params: { + existingColspan: 1, + maxColspan: 2 + } + } + ], + 2: [] + } + }, + { + id: 'df452297-d0e8-4406-b9d3-10842033549d', + name: 'Label', + type: 'container', + tab: '442eea0b-65f9-484e-b37f-f5a91d5e1f21', + numberOfColumns: 2, + fields: { + 1: [ + { + id: 'TextOne', + name: 'TextOne', + type: 'text', + required: false, + colspan: 1, + placeholder: null, + minLength: 0, + maxLength: 0, + regexPattern: null, + visibilityCondition: null, + params: { + existingColspan: 1, + maxColspan: 2 + } + } + ], + 2: [] + } + } + ], + outcomes: [], + metadata: {}, + variables: [] + } + } +}; + +export const tabVarValueVisibilityJson = { + formRepresentation: { + id: 'form-3aff57d3-62af-4adf-9b14-1d8f44a28077', + name: 'tabvisibility', + description: '', + version: 0, + standAlone: true, + formDefinition: { + tabs: [ + { + id: '71da814d-5580-4f1f-972a-8089253aeded', + title: 'tabBasicVarValue', + visibilityCondition: { + leftType: 'variable', + leftValue: 'stringVar', + operator: '==', + rightValue: 'showTab', + rightType: 'value', + nextConditionOperator: '' + } + } + ], + fields: [ + { + id: 'dcde7e13-2444-48bc-ab30-32902cea549e', + name: 'Label', + type: 'container', + tab: '71da814d-5580-4f1f-972a-8089253aeded', + numberOfColumns: 2, + fields: { + 1: [ + { + id: 'TextTwo', + name: 'TextTwo', + type: 'text', + required: false, + colspan: 1, + placeholder: null, + minLength: 0, + maxLength: 0, + regexPattern: null, + visibilityCondition: null, + params: { + existingColspan: 1, + maxColspan: 2 + } + } + ], + 2: [] + } + } + ], + outcomes: [], + metadata: {}, + variables: [ + { + id: "803269e6-a568-40e2-aec3-75ad2f411688", + name: "stringVar", + type: "string", + value: "showTab" + } + ] + } + } +}; + +export const tabVarFieldVisibilityJson = { + formRepresentation: { + id: 'form-3aff57d3-62af-4adf-9b14-1d8f44a28077', + name: 'tabvisibility', + description: '', + version: 0, + standAlone: true, + formDefinition: { + tabs: [ + { + id: '71da814d-5580-4f1f-972a-8089253aeded', + title: 'tabBasicVarField', + visibilityCondition: { + leftType: 'variable', + leftValue: 'stringVar', + operator: '==', + rightValue: 'TextOne', + rightType: 'field', + nextConditionOperator: '' + } + }, + { + id: '0e538a28-f8d6-4cb8-ae93-dbfb2efdf3b1', + title: 'tabWithFields', + visibilityCondition: null + } + ], + fields: [ + { + id: 'dcde7e13-2444-48bc-ab30-32902cea549e', + name: 'Label', + type: 'container', + tab: '71da814d-5580-4f1f-972a-8089253aeded', + numberOfColumns: 2, + fields: { + 1: [ + { + id: 'TextTwo', + name: 'TextTwo', + type: 'text', + required: false, + colspan: 1, + placeholder: null, + minLength: 0, + maxLength: 0, + regexPattern: null, + visibilityCondition: null, + params: { + existingColspan: 1, + maxColspan: 2 + } + } + ], + 2: [] + } + }, + { + id: '1308e433-08ce-4448-a62a-0accc1187d15', + name: 'Label', + type: 'container', + tab: '0e538a28-f8d6-4cb8-ae93-dbfb2efdf3b1', + numberOfColumns: 2, + fields: { + 1: [ + { + id: 'TextOne', + name: 'TextOne', + type: 'text', + required: false, + colspan: 1, + placeholder: null, + minLength: 0, + maxLength: 0, + regexPattern: null, + visibilityCondition: null, + params: { + existingColspan: 1, + maxColspan: 2 + } + } + ], + 2: [] + } + } + ], + outcomes: [], + metadata: {}, + variables: [ + { + id: "803269e6-a568-40e2-aec3-75ad2f411688", + name: "stringVar", + type: "string", + value: "showTab" + } + ] + } + } +}; + +export const tabFieldFieldVisibilityJson = { + formRepresentation: { + id: 'form-3aff57d3-62af-4adf-9b14-1d8f44a28077', + name: 'tabvisibility', + description: '', + version: 0, + standAlone: true, + formDefinition: { + tabs: [ + { + id: '71da814d-5580-4f1f-972a-8089253aeded', + title: 'tabBasicFieldField', + visibilityCondition: { + leftType: 'field', + leftValue: 'TextThree', + operator: '==', + rightValue: 'TextOne', + rightType: 'field', + nextConditionOperator: '' + } + }, + { + id: '442eea0b-65f9-484e-b37f-f5a91d5e1f21', + title: 'tabWithFields', + visibilityCondition: null + } + ], + fields: [ + { + id: 'dcde7e13-2444-48bc-ab30-32902cea549e', + name: 'Label', + type: 'container', + tab: '71da814d-5580-4f1f-972a-8089253aeded', + numberOfColumns: 2, + fields: { + 1: [ + { + id: 'TextTwo', + name: 'TextTwo', + type: 'text', + required: false, + colspan: 1, + placeholder: null, + minLength: 0, + maxLength: 0, + regexPattern: null, + visibilityCondition: null, + params: { + existingColspan: 1, + maxColspan: 2 + } + } + ], + 2: [] + } + }, + { + id: 'df452297-d0e8-4406-b9d3-10842033549d', + name: 'Label', + type: 'container', + tab: '442eea0b-65f9-484e-b37f-f5a91d5e1f21', + numberOfColumns: 2, + fields: { + 1: [ + { + id: 'TextOne', + name: 'TextOne', + type: 'text', + required: false, + colspan: 1, + placeholder: null, + minLength: 0, + maxLength: 0, + regexPattern: null, + visibilityCondition: null, + params: { + existingColspan: 1, + maxColspan: 2 + } + } + ], + 2: [ + { + id: 'TextThree', + name: 'TextThree', + type: 'text', + required: false, + colspan: 1, + placeholder: null, + minLength: 0, + maxLength: 0, + regexPattern: null, + visibilityCondition: null, + params: { + existingColspan: 1, + maxColspan: 2 + } + } + ] + } + } + ], + outcomes: [], + metadata: {}, + variables: [] + } + } +}; + +export const tabFieldVarVisibilityJson = { + formRepresentation: { + id: 'form-3aff57d3-62af-4adf-9b14-1d8f44a28077', + name: 'tabvisibility', + description: '', + version: 0, + standAlone: true, + formDefinition: { + tabs: [ + { + id: '71da814d-5580-4f1f-972a-8089253aeded', + title: 'tabBasicVarField', + visibilityCondition: { + leftType: 'field', + leftValue: 'TextOne', + operator: '==', + rightValue: 'stringVar', + rightType: 'variable', + nextConditionOperator: '' + } + }, + { + id: '0e538a28-f8d6-4cb8-ae93-dbfb2efdf3b1', + title: 'tabWithFields', + visibilityCondition: null + } + ], + fields: [ + { + id: 'dcde7e13-2444-48bc-ab30-32902cea549e', + name: 'Label', + type: 'container', + tab: '71da814d-5580-4f1f-972a-8089253aeded', + numberOfColumns: 2, + fields: { + 1: [ + { + id: 'TextTwo', + name: 'TextTwo', + type: 'text', + required: false, + colspan: 1, + placeholder: null, + minLength: 0, + maxLength: 0, + regexPattern: null, + visibilityCondition: null, + params: { + existingColspan: 1, + maxColspan: 2 + } + } + ], + 2: [] + } + }, + { + id: '1308e433-08ce-4448-a62a-0accc1187d15', + name: 'Label', + type: 'container', + tab: '0e538a28-f8d6-4cb8-ae93-dbfb2efdf3b1', + numberOfColumns: 2, + fields: { + 1: [ + { + id: 'TextOne', + name: 'TextOne', + type: 'text', + required: false, + colspan: 1, + placeholder: null, + minLength: 0, + maxLength: 0, + regexPattern: null, + visibilityCondition: null, + params: { + existingColspan: 1, + maxColspan: 2 + } + } + ], + 2: [] + } + } + ], + outcomes: [], + metadata: {}, + variables: [ + { + id: "803269e6-a568-40e2-aec3-75ad2f411688", + name: "stringVar", + type: "string", + value: "showTab" + } + ] + } + } +}; + +export const tabVarVarVisibilityJson = { + formRepresentation: { + id: 'form-3aff57d3-62af-4adf-9b14-1d8f44a28077', + name: 'tabvisibility', + description: '', + version: 0, + standAlone: true, + formDefinition: { + tabs: [ + { + id: 'ef512cb3-0c41-4d12-84ef-a7ef8f0b111a', + title: 'tabBasicVarVar', + visibilityCondition: { + leftType: 'variable', + leftValue: 'showTabOne', + operator: '==', + rightValue: 'showTabTwo', + rightType: 'variable', + nextConditionOperator: '' + } + } + ], + fields: [ + { + id: '6eeb9e54-e51d-44f3-9557-503308f07361', + name: 'Label', + type: 'container', + tab: 'ef512cb3-0c41-4d12-84ef-a7ef8f0b111a', + numberOfColumns: 2, + fields: { + 1: [ + { + id: 'TextOne', + name: 'TextOne', + type: 'text', + required: false, + colspan: 1, + placeholder: null, + minLength: 0, + maxLength: 0, + regexPattern: null, + visibilityCondition: null, + params: { + existingColspan: 1, + maxColspan: 2 + } + } + ], + 2: [] + } + } + ], + outcomes: [], + metadata: {}, + variables: [ + { + id: "b116df99-f6b5-45f8-b48c-15b74f7f1c92", + name: "showTabOne", + type: "string", + value: "showTab" + }, + { + id: "6e3e88ab-848c-4f48-8326-a404d1427f60", + name: "showTabTwo", + type: "string", + value: "showTab" + } + ] + } + } +}; + +export const tabNextOperatorsVisibilityJson = { + formRepresentation: { + id: 'form-3aff57d3-62af-4adf-9b14-1d8f44a28077', + name: 'tabvisibility', + description: '', + version: 0, + standAlone: true, + formDefinition: { + tabs: [ + { + id: '71da814d-5580-4f1f-972a-8089253aeded', + title: 'tabNextOperators', + visibilityCondition: { + leftType: 'field', + leftValue: 'TextOne', + operator: '==', + rightValue: 'showTab', + rightType: 'value', + nextConditionOperator: 'and', + nextCondition: { + leftType: 'field', + leftValue: 'TextThree', + operator: '!=', + rightValue: 'showTab', + rightType: 'value', + nextConditionOperator: '', + nextCondition: null + } + } + }, + { + id: '442eea0b-65f9-484e-b37f-f5a91d5e1f21', + title: 'tabWithFields', + visibilityCondition: null + } + ], + fields: [ + { + id: 'dcde7e13-2444-48bc-ab30-32902cea549e', + name: 'Label', + type: 'container', + tab: '71da814d-5580-4f1f-972a-8089253aeded', + numberOfColumns: 2, + fields: { + 1: [ + { + id: 'TextTwo', + name: 'TextTwo', + type: 'text', + required: false, + colspan: 1, + placeholder: null, + minLength: 0, + maxLength: 0, + regexPattern: null, + visibilityCondition: null, + params: { + existingColspan: 1, + maxColspan: 2 + } + } + ], + 2: [] + } + }, + { + id: 'df452297-d0e8-4406-b9d3-10842033549d', + name: 'Label', + type: 'container', + tab: '442eea0b-65f9-484e-b37f-f5a91d5e1f21', + numberOfColumns: 2, + fields: { + 1: [ + { + id: 'TextOne', + name: 'TextOne', + type: 'text', + required: false, + colspan: 1, + placeholder: null, + minLength: 0, + maxLength: 0, + regexPattern: null, + visibilityCondition: null, + params: { + existingColspan: 1, + maxColspan: 2 + } + } + ], + 2: [ + { + id: 'TextThree', + name: 'TextThree', + type: 'text', + required: false, + colspan: 1, + placeholder: null, + minLength: 0, + maxLength: 0, + regexPattern: null, + visibilityCondition: null, + params: { + existingColspan: 1, + maxColspan: 2 + } + } + ] + } + } + ], + outcomes: [], + metadata: {}, + variables: [] + } + } +}; diff --git a/e2e/search/components/search-checkList.e2e.ts b/e2e/search/components/search-checkList.e2e.ts index 3926b767e3..81e3d724de 100644 --- a/e2e/search/components/search-checkList.e2e.ts +++ b/e2e/search/components/search-checkList.e2e.ts @@ -54,7 +54,7 @@ describe('Search Checklist Component', () => { let createdFile, createdFolder; - beforeAll(async (done) => { + beforeAll(async () => { await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); await this.alfrescoJsApi.core.peopleApi.addPerson(acsUser); @@ -64,16 +64,18 @@ describe('Search Checklist Component', () => { createdFolder = await this.alfrescoJsApi.nodes.addNode('-my-', { name: nodeNames.folder, nodeType: 'cm:folder' }); createdFile = await this.alfrescoJsApi.nodes.addNode('-my-', { name: nodeNames.document, nodeType: 'cm:content' }); - await browser.driver.sleep(15000); + await browser.sleep(15000); await loginPage.loginToContentServicesUsingUserModel(acsUser); - BrowserActions.getUrl(browser.params.testConfig.adf.url + '/search;q=' + randomName + ''); - - done(); }); - afterAll(async (done) => { + beforeEach(async () => { + await navigationBarPage.clickContentServicesButton(); + await BrowserActions.getUrl(`${browser.params.testConfig.adf.url}/search;q=${randomName}`); + }); + + afterAll(async () => { await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); await uploadActions.deleteFileOrFolder(createdFile.entry.id); @@ -81,45 +83,44 @@ describe('Search Checklist Component', () => { await navigationBarPage.clickLogoutButton(); - done(); }); - it('[C276991] Should be able to click between options and Clear All button', () => { - searchFiltersPage.checkCheckListFilterIsDisplayed(); - searchFiltersPage.checkCheckListFilterIsCollapsed(); - searchFiltersPage.clickCheckListFilter(); + it('[C276991] Should be able to click between options and Clear All button', async() => { + await searchFiltersPage.checkCheckListFilterIsDisplayed(); + await searchFiltersPage.checkCheckListFilterIsCollapsed(); + await searchFiltersPage.clickCheckListFilter(); - searchFiltersPage.checkListFiltersPage().checkCheckListOptionIsDisplayed(filterType.folder); - searchFiltersPage.checkListFiltersPage().checkCheckListOptionIsDisplayed(filterType.document); - searchFiltersPage.checkListFiltersPage().checkClearAllButtonIsDisplayed(); - searchFiltersPage.checkListFiltersPage().checkCheckListOptionIsNotSelected(filterType.folder); - searchFiltersPage.checkListFiltersPage().checkCheckListOptionIsNotSelected(filterType.document); - searchFiltersPage.checkListFiltersPage().clickCheckListOption(filterType.folder); - searchFiltersPage.checkListFiltersPage().checkCheckListOptionIsSelected(filterType.folder); + await searchFiltersPage.checkListFiltersPage().checkCheckListOptionIsDisplayed(filterType.folder); + await searchFiltersPage.checkListFiltersPage().checkCheckListOptionIsDisplayed(filterType.document); + await searchFiltersPage.checkListFiltersPage().checkClearAllButtonIsDisplayed(); + await searchFiltersPage.checkListFiltersPage().checkCheckListOptionIsNotSelected(filterType.folder); + await searchFiltersPage.checkListFiltersPage().checkCheckListOptionIsNotSelected(filterType.document); + await searchFiltersPage.checkListFiltersPage().clickCheckListOption(filterType.folder); + await searchFiltersPage.checkListFiltersPage().checkCheckListOptionIsSelected(filterType.folder); - searchResults.checkContentIsDisplayed(nodeNames.folder); - searchResults.checkContentIsNotDisplayed(nodeNames.document); + await searchResults.checkContentIsDisplayed(nodeNames.folder); + await searchResults.checkContentIsNotDisplayed(nodeNames.document); - searchFiltersPage.checkListFiltersPage().clickClearAllButton(); - searchFiltersPage.checkListFiltersPage().checkCheckListOptionIsNotSelected(filterType.folder); + await searchFiltersPage.checkListFiltersPage().clickClearAllButton(); + await searchFiltersPage.checkListFiltersPage().checkCheckListOptionIsNotSelected(filterType.folder); - searchResults.checkContentIsDisplayed(nodeNames.folder); - searchResults.checkContentIsDisplayed(nodeNames.document); + await searchResults.checkContentIsDisplayed(nodeNames.folder); + await searchResults.checkContentIsDisplayed(nodeNames.document); - searchFiltersPage.checkListFiltersPage().clickCheckListOption(filterType.folder); - searchFiltersPage.checkListFiltersPage().clickCheckListOption(filterType.document); - searchFiltersPage.checkListFiltersPage().checkCheckListOptionIsSelected(filterType.folder); - searchFiltersPage.checkListFiltersPage().checkCheckListOptionIsSelected(filterType.document); + await searchFiltersPage.checkListFiltersPage().clickCheckListOption(filterType.folder); + await searchFiltersPage.checkListFiltersPage().clickCheckListOption(filterType.document); + await searchFiltersPage.checkListFiltersPage().checkCheckListOptionIsSelected(filterType.folder); + await searchFiltersPage.checkListFiltersPage().checkCheckListOptionIsSelected(filterType.document); - searchResults.checkContentIsDisplayed(nodeNames.folder); - searchResults.checkContentIsDisplayed(nodeNames.document); + await searchResults.checkContentIsDisplayed(nodeNames.folder); + await searchResults.checkContentIsDisplayed(nodeNames.document); - searchFiltersPage.checkListFiltersPage().clickCheckListOption(filterType.folder); - searchFiltersPage.checkListFiltersPage().checkCheckListOptionIsSelected(filterType.document); - searchFiltersPage.checkListFiltersPage().checkCheckListOptionIsNotSelected(filterType.folder); + await searchFiltersPage.checkListFiltersPage().clickCheckListOption(filterType.folder); + await searchFiltersPage.checkListFiltersPage().checkCheckListOptionIsSelected(filterType.document); + await searchFiltersPage.checkListFiltersPage().checkCheckListOptionIsNotSelected(filterType.folder); - searchResults.checkContentIsDisplayed(nodeNames.document); - searchResults.checkContentIsNotDisplayed(nodeNames.folder); + await searchResults.checkContentIsDisplayed(nodeNames.document); + await searchResults.checkContentIsNotDisplayed(nodeNames.folder); }); describe('configuration change', () => { @@ -130,7 +131,7 @@ describe('Search Checklist Component', () => { }); it('[C277143] Should be able to click show more/less button with pageSize set as default', async () => { - navigationBarPage.clickContentServicesButton(); + await navigationBarPage.clickContentServicesButton(); for (let numberOfOptions = 0; numberOfOptions < 8; numberOfOptions++) { jsonFile.categories[1].component.settings.options.push({ @@ -140,32 +141,33 @@ describe('Search Checklist Component', () => { } await LocalStorageUtil.setConfigField('search', JSON.stringify(jsonFile)); - browser.sleep(2000); - searchDialog.clickOnSearchIcon().checkSearchBarIsVisible().enterTextAndPressEnter(randomName); - searchFiltersPage.clickCheckListFilter(); + await searchDialog.clickOnSearchIcon(); + await searchDialog.checkSearchBarIsVisible(); + await searchDialog.enterTextAndPressEnter(randomName); + await searchFiltersPage.clickCheckListFilter(); - expect(searchFiltersPage.checkListFiltersPage().getCheckListOptionsNumberOnPage()).toBe(5); + await expect(await searchFiltersPage.checkListFiltersPage().getCheckListOptionsNumberOnPage()).toBe(5); - searchFiltersPage.checkListFiltersPage().checkShowMoreButtonIsDisplayed(); - searchFiltersPage.checkListFiltersPage().checkShowLessButtonIsNotDisplayed(); + await searchFiltersPage.checkListFiltersPage().checkShowMoreButtonIsDisplayed(); + await searchFiltersPage.checkListFiltersPage().checkShowLessButtonIsNotDisplayed(); - searchFiltersPage.checkListFiltersPage().clickShowMoreButton(); + await searchFiltersPage.checkListFiltersPage().clickShowMoreButton(); - expect(searchFiltersPage.checkListFiltersPage().getCheckListOptionsNumberOnPage()).toBe(10); + await expect(await searchFiltersPage.checkListFiltersPage().getCheckListOptionsNumberOnPage()).toBe(10); - searchFiltersPage.checkListFiltersPage().checkShowMoreButtonIsNotDisplayed(); - searchFiltersPage.checkListFiltersPage().checkShowLessButtonIsDisplayed(); + await searchFiltersPage.checkListFiltersPage().checkShowMoreButtonIsNotDisplayed(); + await searchFiltersPage.checkListFiltersPage().checkShowLessButtonIsDisplayed(); - searchFiltersPage.checkListFiltersPage().clickShowLessButton(); + await searchFiltersPage.checkListFiltersPage().clickShowLessButton(); - expect(searchFiltersPage.checkListFiltersPage().getCheckListOptionsNumberOnPage()).toBe(5); + await expect(await searchFiltersPage.checkListFiltersPage().getCheckListOptionsNumberOnPage()).toBe(5); - searchFiltersPage.checkListFiltersPage().checkShowMoreButtonIsDisplayed(); - searchFiltersPage.checkListFiltersPage().checkShowLessButtonIsNotDisplayed(); + await searchFiltersPage.checkListFiltersPage().checkShowMoreButtonIsDisplayed(); + await searchFiltersPage.checkListFiltersPage().checkShowLessButtonIsNotDisplayed(); }); it('[C277144] Should be able to click show more/less button with pageSize set with a custom value', async () => { - navigationBarPage.clickContentServicesButton(); + await navigationBarPage.clickContentServicesButton(); jsonFile.categories[1].component.settings.pageSize = 10; @@ -178,41 +180,47 @@ describe('Search Checklist Component', () => { await LocalStorageUtil.setConfigField('search', JSON.stringify(jsonFile)); - searchDialog.clickOnSearchIcon().checkSearchBarIsVisible().enterTextAndPressEnter(randomName); - searchFiltersPage.clickCheckListFilter(); + await searchDialog.clickOnSearchIcon(); + await searchDialog.checkSearchBarIsVisible(); + await searchDialog.enterTextAndPressEnter(randomName); + await searchFiltersPage.clickCheckListFilter(); - expect(searchFiltersPage.checkListFiltersPage().getCheckListOptionsNumberOnPage()).toBe(10); + await expect(await searchFiltersPage.checkListFiltersPage().getCheckListOptionsNumberOnPage()).toBe(10); - searchFiltersPage.checkListFiltersPage().checkShowMoreButtonIsNotDisplayed(); + await searchFiltersPage.checkListFiltersPage().checkShowMoreButtonIsNotDisplayed(); - navigationBarPage.clickContentServicesButton(); + await navigationBarPage.clickContentServicesButton(); jsonFile.categories[1].component.settings.pageSize = 11; await LocalStorageUtil.setConfigField('search', JSON.stringify(jsonFile)); - searchDialog.clickOnSearchIcon().checkSearchBarIsVisible().enterTextAndPressEnter(randomName); - searchFiltersPage.clickCheckListFilter(); + await searchDialog.clickOnSearchIcon(); + await searchDialog.checkSearchBarIsVisible(); + await searchDialog.enterTextAndPressEnter(randomName); + await searchFiltersPage.clickCheckListFilter(); - expect(searchFiltersPage.checkListFiltersPage().getCheckListOptionsNumberOnPage()).toBe(10); + await expect(await searchFiltersPage.checkListFiltersPage().getCheckListOptionsNumberOnPage()).toBe(10); - searchFiltersPage.checkListFiltersPage().checkShowMoreButtonIsNotDisplayed(); + await searchFiltersPage.checkListFiltersPage().checkShowMoreButtonIsNotDisplayed(); - navigationBarPage.clickContentServicesButton(); + await navigationBarPage.clickContentServicesButton(); jsonFile.categories[1].component.settings.pageSize = 9; await LocalStorageUtil.setConfigField('search', JSON.stringify(jsonFile)); - searchDialog.clickOnSearchIcon().checkSearchBarIsVisible().enterTextAndPressEnter(randomName); - searchFiltersPage.clickCheckListFilter(); + await searchDialog.clickOnSearchIcon(); + await searchDialog.checkSearchBarIsVisible(); + await searchDialog.enterTextAndPressEnter(randomName); + await searchFiltersPage.clickCheckListFilter(); - expect(searchFiltersPage.checkListFiltersPage().getCheckListOptionsNumberOnPage()).toBe(9); + await expect(await searchFiltersPage.checkListFiltersPage().getCheckListOptionsNumberOnPage()).toBe(9); - searchFiltersPage.checkListFiltersPage().checkShowMoreButtonIsDisplayed(); + await searchFiltersPage.checkListFiltersPage().checkShowMoreButtonIsDisplayed(); }); it('[C277145] Should be able to click show more/less button with pageSize set to zero', async () => { - navigationBarPage.clickContentServicesButton(); + await navigationBarPage.clickContentServicesButton(); jsonFile.categories[1].component.settings.pageSize = 0; @@ -225,41 +233,45 @@ describe('Search Checklist Component', () => { await LocalStorageUtil.setConfigField('search', JSON.stringify(jsonFile)); - searchDialog.clickOnSearchIcon().checkSearchBarIsVisible().enterTextAndPressEnter(randomName); - searchFiltersPage.clickCheckListFilter(); + await searchDialog.clickOnSearchIcon(); + await searchDialog.checkSearchBarIsVisible(); + await searchDialog.enterTextAndPressEnter(randomName); + await searchFiltersPage.clickCheckListFilter(); - expect(searchFiltersPage.checkListFiltersPage().getCheckListOptionsNumberOnPage()).toBe(5); + await expect(await searchFiltersPage.checkListFiltersPage().getCheckListOptionsNumberOnPage()).toBe(5); - searchFiltersPage.checkListFiltersPage().checkShowMoreButtonIsDisplayed(); - searchFiltersPage.checkListFiltersPage().checkShowLessButtonIsNotDisplayed(); + await searchFiltersPage.checkListFiltersPage().checkShowMoreButtonIsDisplayed(); + await searchFiltersPage.checkListFiltersPage().checkShowLessButtonIsNotDisplayed(); - searchFiltersPage.checkListFiltersPage().clickShowMoreButton(); + await searchFiltersPage.checkListFiltersPage().clickShowMoreButton(); - expect(searchFiltersPage.checkListFiltersPage().getCheckListOptionsNumberOnPage()).toBe(10); + await expect(await searchFiltersPage.checkListFiltersPage().getCheckListOptionsNumberOnPage()).toBe(10); - searchFiltersPage.checkListFiltersPage().checkShowMoreButtonIsNotDisplayed(); - searchFiltersPage.checkListFiltersPage().checkShowLessButtonIsDisplayed(); + await searchFiltersPage.checkListFiltersPage().checkShowMoreButtonIsNotDisplayed(); + await searchFiltersPage.checkListFiltersPage().checkShowLessButtonIsDisplayed(); - navigationBarPage.clickContentServicesButton(); + await navigationBarPage.clickContentServicesButton(); delete jsonFile.categories[1].component.settings.pageSize; await LocalStorageUtil.setConfigField('search', JSON.stringify(jsonFile)); - searchDialog.clickOnSearchIcon().checkSearchBarIsVisible().enterTextAndPressEnter(randomName); - searchFiltersPage.clickCheckListFilter(); + await searchDialog.clickOnSearchIcon(); + await searchDialog.checkSearchBarIsVisible(); + await searchDialog.enterTextAndPressEnter(randomName); + await searchFiltersPage.clickCheckListFilter(); - expect(searchFiltersPage.checkListFiltersPage().getCheckListOptionsNumberOnPage()).toBe(5); + await expect(await searchFiltersPage.checkListFiltersPage().getCheckListOptionsNumberOnPage()).toBe(5); - searchFiltersPage.checkListFiltersPage().checkShowMoreButtonIsDisplayed(); - searchFiltersPage.checkListFiltersPage().checkShowLessButtonIsNotDisplayed(); + await searchFiltersPage.checkListFiltersPage().checkShowMoreButtonIsDisplayed(); + await searchFiltersPage.checkListFiltersPage().checkShowLessButtonIsNotDisplayed(); - searchFiltersPage.checkListFiltersPage().clickShowMoreButton(); + await searchFiltersPage.checkListFiltersPage().clickShowMoreButton(); - expect(searchFiltersPage.checkListFiltersPage().getCheckListOptionsNumberOnPage()).toBe(10); + await expect(await searchFiltersPage.checkListFiltersPage().getCheckListOptionsNumberOnPage()).toBe(10); - searchFiltersPage.checkListFiltersPage().checkShowMoreButtonIsNotDisplayed(); - searchFiltersPage.checkListFiltersPage().checkShowLessButtonIsDisplayed(); + await searchFiltersPage.checkListFiltersPage().checkShowMoreButtonIsNotDisplayed(); + await searchFiltersPage.checkListFiltersPage().checkShowLessButtonIsDisplayed(); }); }); @@ -272,36 +284,37 @@ describe('Search Checklist Component', () => { jsonFile = SearchConfiguration.getConfiguration(); }); - beforeAll(async (done) => { + beforeAll(async () => { await loginPage.loginToContentServicesUsingUserModel(acsUser); - done(); }); it('[C277018] Should be able to change the operator', async () => { - navigationBarPage.clickContentServicesButton(); + await navigationBarPage.clickContentServicesButton(); jsonFile.categories[1].component.settings.operator = 'AND'; await LocalStorageUtil.setConfigField('search', JSON.stringify(jsonFile)); - searchDialog.clickOnSearchIcon().checkSearchBarIsVisible().enterTextAndPressEnter(randomName); - searchFiltersPage.clickCheckListFilter(); + await searchDialog.clickOnSearchIcon(); + await searchDialog.checkSearchBarIsVisible(); + await searchDialog.enterTextAndPressEnter(randomName); + await searchFiltersPage.clickCheckListFilter(); - searchFiltersPage.checkListFiltersPage().clickCheckListOption(filterType.folder); - searchFiltersPage.checkListFiltersPage().checkCheckListOptionIsSelected(filterType.folder); + await searchFiltersPage.checkListFiltersPage().clickCheckListOption(filterType.folder); + await searchFiltersPage.checkListFiltersPage().checkCheckListOptionIsSelected(filterType.folder); - searchResults.checkContentIsDisplayed(nodeNames.folder); - searchResults.checkContentIsNotDisplayed(nodeNames.document); + await searchResults.checkContentIsDisplayed(nodeNames.folder); + await searchResults.checkContentIsNotDisplayed(nodeNames.document); - searchFiltersPage.checkListFiltersPage().clickCheckListOption(filterType.document); + await searchFiltersPage.checkListFiltersPage().clickCheckListOption(filterType.document); - searchResults.checkContentIsNotDisplayed(nodeNames.folder); - searchResults.checkContentIsNotDisplayed(nodeNames.document); + await searchResults.checkContentIsNotDisplayed(nodeNames.folder); + await searchResults.checkContentIsNotDisplayed(nodeNames.document); }); it('[C277019] Should be able to add new properties with different types', async () => { - navigationBarPage.clickContentServicesButton(); + await navigationBarPage.clickContentServicesButton(); jsonFile.categories[1].component.settings.options.push({ 'name': filterType.custom, @@ -310,23 +323,25 @@ describe('Search Checklist Component', () => { await LocalStorageUtil.setConfigField('search', JSON.stringify(jsonFile)); - searchDialog.clickOnSearchIcon().checkSearchBarIsVisible().enterTextAndPressEnter(randomName); - searchFiltersPage.clickCheckListFilter(); + await searchDialog.clickOnSearchIcon(); + await searchDialog.checkSearchBarIsVisible(); + await searchDialog.enterTextAndPressEnter(randomName); + await searchFiltersPage.clickCheckListFilter(); - searchFiltersPage.checkListFiltersPage().checkCheckListOptionIsDisplayed(filterType.folder); - searchFiltersPage.checkListFiltersPage().checkCheckListOptionIsDisplayed(filterType.document); - searchFiltersPage.checkListFiltersPage().checkCheckListOptionIsDisplayed(filterType.custom); + await searchFiltersPage.checkListFiltersPage().checkCheckListOptionIsDisplayed(filterType.folder); + await searchFiltersPage.checkListFiltersPage().checkCheckListOptionIsDisplayed(filterType.document); + await searchFiltersPage.checkListFiltersPage().checkCheckListOptionIsDisplayed(filterType.custom); - searchFiltersPage.checkListFiltersPage().clickCheckListOption(filterType.custom); + await searchFiltersPage.checkListFiltersPage().clickCheckListOption(filterType.custom); - searchResults.checkContentIsNotDisplayed(nodeNames.folder); - searchResults.checkContentIsNotDisplayed(nodeNames.document); + await searchResults.checkContentIsNotDisplayed(nodeNames.folder); + await searchResults.checkContentIsNotDisplayed(nodeNames.document); - searchFiltersPage.checkListFiltersPage().clickCheckListOption(filterType.document); - searchFiltersPage.checkListFiltersPage().clickCheckListOption(filterType.folder); + await searchFiltersPage.checkListFiltersPage().clickCheckListOption(filterType.document); + await searchFiltersPage.checkListFiltersPage().clickCheckListOption(filterType.folder); - searchResults.checkContentIsDisplayed(nodeNames.folder); - searchResults.checkContentIsDisplayed(nodeNames.document); + await searchResults.checkContentIsDisplayed(nodeNames.folder); + await searchResults.checkContentIsDisplayed(nodeNames.document); }); }); diff --git a/e2e/search/components/search-date-range.e2e.ts b/e2e/search/components/search-date-range.e2e.ts index 8ad22fefa1..e00c33f575 100644 --- a/e2e/search/components/search-date-range.e2e.ts +++ b/e2e/search/components/search-date-range.e2e.ts @@ -34,182 +34,178 @@ describe('Search Date Range Filter', () => { const dateRangeFilter = searchFilters.createdDateRangeFilterPage(); const searchResults = new SearchResultsPage(); const datePicker = new DatePickerPage(); - const navigationBarPage = new NavigationBarPage(); + const navigationBar = new NavigationBarPage(); const dataTable = new DataTableComponentPage(); - beforeAll(async (done) => { + beforeAll(async () => { this.alfrescoJsApi = new AlfrescoApi({ provider: 'ECM', hostEcm: browser.params.testConfig.adf_acs.host }); - loginPage.loginToContentServices(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); + await loginPage.loginToContentServices(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); - searchDialog.checkSearchIconIsVisible() - .clickOnSearchIcon() - .enterTextAndPressEnter('*'); + await searchDialog.checkSearchIconIsVisible(); + await searchDialog.clickOnSearchIcon(); + await searchDialog.enterTextAndPressEnter('*'); - done(); }); - beforeEach(() => { - searchFilters.checkCreatedRangeFilterIsDisplayed() - .clickCreatedRangeFilterHeader() - .checkCreatedRangeFilterIsExpanded(); + beforeEach(async () => { + await searchFilters.checkCreatedRangeFilterIsDisplayed(); + await searchFilters.clickCreatedRangeFilterHeader(); + await searchFilters.checkCreatedRangeFilterIsExpanded(); }); - afterEach(async (done) => { + afterEach(async () => { await browser.refresh(); - done(); + }); - it('[C277106] Should display default values for Date Range widget', () => { - dateRangeFilter.checkFromFieldIsDisplayed() - .checkFromDateToggleIsDisplayed() - .checkToFieldIsDisplayed() - .checkToDateToggleIsDisplayed() - .checkApplyButtonIsDisplayed() - .checkApplyButtonIsDisabled() - .checkClearButtonIsDisplayed(); + it('[C277106] Should display default values for Date Range widget', async () => { + await dateRangeFilter.checkFromFieldIsDisplayed(); + await dateRangeFilter.checkFromDateToggleIsDisplayed(); + await dateRangeFilter.checkToFieldIsDisplayed(); + await dateRangeFilter.checkToDateToggleIsDisplayed(); + await dateRangeFilter.checkApplyButtonIsDisplayed(); + await dateRangeFilter.checkApplyButtonIsDisabled(); + await dateRangeFilter.checkClearButtonIsDisplayed(); }); - it('[C277104] Should be able to set dates using date pickers', () => { - dateRangeFilter.checkFromDateToggleIsDisplayed().openFromDatePicker() - .selectTodayDate(); - browser.controlFlow().execute(async () => { - await expect(dateRangeFilter.getFromDate()).toEqual(dateRangeFilter.getFromCalendarSelectedDate()); - }); + it('[C277104] Should be able to set dates using date pickers', async () => { + await dateRangeFilter.checkFromDateToggleIsDisplayed(); + const fromDatePicker = await dateRangeFilter.openFromDatePicker(); + await fromDatePicker.selectTodayDate(); + await expect(await dateRangeFilter.getFromDate()).toEqual(await dateRangeFilter.getFromCalendarSelectedDate()); }); - it('[C277105] Should be able to type a date', () => { + it('[C277105] Should be able to type a date', async () => { const date = '01-May-18'; - dateRangeFilter.putFromDate(date); - browser.controlFlow().execute(async () => { - await expect(dateRangeFilter.getFromCalendarSelectedDate()).toEqual(dateRangeFilter.getFromDate()); - }); + await dateRangeFilter.putFromDate(date); + await expect(await dateRangeFilter.getFromCalendarSelectedDate()).toEqual(await dateRangeFilter.getFromDate()); }); - it('[C277119] FROM and TO dates should depend on each other', () => { - dateRangeFilter.checkFromDateToggleIsDisplayed().openFromDatePicker() - .checkDatesAfterDateAreDisabled(new Date()) - .closeDatePicker(); + it('[C277119] FROM and TO dates should depend on each other', async () => { + await dateRangeFilter.checkFromDateToggleIsDisplayed(); + const fromDatePicker = await dateRangeFilter.openFromDatePicker(); + await fromDatePicker.checkDatesAfterDateAreDisabled(new Date()); + await fromDatePicker.closeDatePicker(); - dateRangeFilter.checkToDateToggleIsDisplayed().openToDatePicker() - .checkDatesAfterDateAreDisabled(new Date()) - .closeDatePicker(); + await dateRangeFilter.checkToDateToggleIsDisplayed(); + let datePickerTo = await dateRangeFilter.openToDatePicker(); - dateRangeFilter.checkFromDateToggleIsDisplayed().openFromDatePicker() - .selectTodayDate() - .checkDatePickerIsNotDisplayed(); + await datePickerTo.checkDatesAfterDateAreDisabled(new Date()); + await datePickerTo.closeDatePicker(); - dateRangeFilter.checkToDateToggleIsDisplayed().openToDatePicker() - .checkDatesBeforeDateAreDisabled(new Date()) - .checkDatesAfterDateAreDisabled(new Date()); + await dateRangeFilter.checkFromDateToggleIsDisplayed(); + const datePickerFrom = await dateRangeFilter.openFromDatePicker(); + await datePickerFrom.selectTodayDate(); + await datePickerFrom.checkDatePickerIsNotDisplayed(); + + await dateRangeFilter.checkToDateToggleIsDisplayed(); + datePickerTo = await dateRangeFilter.openToDatePicker(); + await datePickerTo.checkDatesBeforeDateAreDisabled(new Date()); + await datePickerTo.checkDatesAfterDateAreDisabled(new Date()); }); - it('[C277107] Should be able to apply a date range', () => { - let fromDate, toDate; - dateRangeFilter.checkFromDateToggleIsDisplayed().openFromDatePicker() - .selectTodayDate() - .checkDatePickerIsNotDisplayed(); - dateRangeFilter.getFromDate().then((date) => { - fromDate = DateUtil.formatDate('DD-MM-YY', DateUtil.parse(date, 'DD-MMM-YY')); - }); + it('[C277107] Should be able to apply a date range', async () => { + await dateRangeFilter.checkFromDateToggleIsDisplayed(); + const datePickerToday = await dateRangeFilter.openFromDatePicker(); + await datePickerToday.selectTodayDate(); + await datePickerToday.checkDatePickerIsNotDisplayed(); + let fromDate = await dateRangeFilter.getFromDate(); + fromDate = DateUtil.formatDate('DD-MM-YY', DateUtil.parse(fromDate, 'DD-MMM-YY')); - dateRangeFilter.checkApplyButtonIsDisabled(); + await dateRangeFilter.checkApplyButtonIsDisabled(); - dateRangeFilter.checkToDateToggleIsDisplayed().openToDatePicker() - .selectTodayDate() - .checkDatePickerIsNotDisplayed(); - dateRangeFilter.getToDate().then((date) => { - toDate = DateUtil.formatDate('DD-MM-YY', DateUtil.parse(date, 'DD-MMM-YY'), 1); - }); + await dateRangeFilter.checkToDateToggleIsDisplayed(); + const toDatePicker = await dateRangeFilter.openToDatePicker(); - dateRangeFilter.checkApplyButtonIsEnabled() - .clickApplyButton(); + await toDatePicker.selectTodayDate(); + await toDatePicker.checkDatePickerIsNotDisplayed(); + let toDate = await dateRangeFilter.getToDate(); + toDate = DateUtil.formatDate('DD-MM-YY', DateUtil.parse(toDate, 'DD-MMM-YY'), 1); - searchResults.sortByCreated('ASC'); + await dateRangeFilter.checkApplyButtonIsEnabled(); + await dateRangeFilter.clickApplyButton(); - browser.controlFlow().execute(async () => { - const results = await dataTable.geCellElementDetail('Created'); - for (const currentResult of results) { + await searchResults.sortByCreated('ASC'); - currentResult.getAttribute('title').then(async (currentDate) => { - const currentDateFormatted = DateUtil.parse(currentDate, 'MMM DD, YYYY, h:mm:ss a'); + const results: any = dataTable.geCellElementDetail('Created'); + for (const currentResult of results) { - await expect(currentDateFormatted <= DateUtil.parse(toDate, 'DD-MM-YY')).toBe(true); - await expect(currentDateFormatted >= DateUtil.parse(fromDate, 'DD-MM-YY')).toBe(true); - }); + const currentDate = currentResult.getAttribute('title'); + const currentDateFormatted = DateUtil.parse(currentDate, 'MMM DD, YYYY, h:mm:ss a'); - } - }); + await expect(currentDateFormatted <= DateUtil.parse(toDate, 'DD-MM-YY')).toBe(true); + await expect(currentDateFormatted >= DateUtil.parse(fromDate, 'DD-MM-YY')).toBe(true); + } }); - it('[C277108] Should display a warning message when user doesn\'t set the date range at all', () => { - dateRangeFilter.checkFromFieldIsDisplayed() - .clickFromField() - .clickToField() - .checkFromErrorMessageIsDisplayed('Required value') - .clickFromField() - .checkToErrorMessageIsDisplayed('Required value'); + it('[C277108] Should display a warning message when user doesn\'t set the date range at all', async () => { + await dateRangeFilter.checkFromFieldIsDisplayed(); + await dateRangeFilter.clickFromField(); + await dateRangeFilter.clickToField(); + await dateRangeFilter.checkFromErrorMessageIsDisplayed('Required value'); + await dateRangeFilter.clickFromField(); + await dateRangeFilter.checkToErrorMessageIsDisplayed('Required value'); }); - it('[C277114] Should display warning message if user doesn\'t set the date range properly', () => { + it('[C277114] Should display warning message if user doesn\'t set the date range properly', async () => { const toDate = '01-May-18'; const fromDate = '16-May-18'; - dateRangeFilter.checkToFieldIsDisplayed() - .putToDate(toDate) - .checkFromFieldIsDisplayed() - .putFromDate(fromDate) - .clickFromField() - .checkToErrorMessageIsDisplayed('No days selected.'); + await dateRangeFilter.checkToFieldIsDisplayed(); + await dateRangeFilter.putToDate(toDate); + await dateRangeFilter.checkFromFieldIsDisplayed(); + await dateRangeFilter.putFromDate(fromDate); + await dateRangeFilter.clickFromField(); + await dateRangeFilter.checkToErrorMessageIsDisplayed('No days selected.'); }); - it('[C277115] Should display warning message if user types a date later than today\'s date', () => { - dateRangeFilter.checkFromFieldIsDisplayed() - .putFromDate(DateUtil.formatDate('DD-MMM-YY', new Date(), 1)) - .checkFromErrorMessageIsDisplayed('The date is beyond the maximum date.'); + it('[C277115] Should display warning message if user types a date later than today\'s date', async () => { + await dateRangeFilter.checkFromFieldIsDisplayed(); + await dateRangeFilter.putFromDate(DateUtil.formatDate('DD-MMM-YY', new Date(), 1)); + await dateRangeFilter.checkFromErrorMessageIsDisplayed('The date is beyond the maximum date.'); }); - it('[C277108] Should display a warning message when user doesn\'t set the date range at all', () => { - dateRangeFilter.checkFromFieldIsDisplayed() - .putFromDate('Wrong Format') - .clickToField() - .checkFromErrorMessageIsDisplayed('Invalid date. The date must be in the format \'DD-MMM-YY\'') - .putFromDate('01-May-18') - .checkFromErrorMessageIsNotDisplayed(); + it('[C277108] Should display a warning message when user doesn\'t set the date range at all', async () => { + await dateRangeFilter.checkFromFieldIsDisplayed(); + await dateRangeFilter.putFromDate('Wrong Format'); + await dateRangeFilter.clickToField(); + await dateRangeFilter.checkFromErrorMessageIsDisplayed('Invalid date. The date must be in the format \'DD-MMM-YY\''); + await dateRangeFilter.putFromDate('01-May-18'); + await dateRangeFilter.checkFromErrorMessageIsNotDisplayed(); }); describe('configuration change', () => { let jsonFile; - beforeAll(() => { + beforeAll(async () => { jsonFile = SearchConfiguration.getConfiguration(); }); it('[C277117] Should be able to change date format', async () => { - navigationBarPage.clickContentServicesButton(); + await navigationBar.clickContentServicesButton(); jsonFile.categories[4].component.settings.dateFormat = 'MM-DD-YY'; await LocalStorageUtil.setConfigField('search', JSON.stringify(jsonFile)); - searchDialog.clickOnSearchIcon().enterTextAndPressEnter('*'); - searchFilters.checkCreatedRangeFilterIsDisplayed() - .clickCreatedRangeFilterHeader() - .checkCreatedRangeFilterIsExpanded(); - dateRangeFilter.checkFromFieldIsDisplayed() - .openFromDatePicker(); + await searchDialog.clickOnSearchIcon(); + await searchDialog.enterTextAndPressEnter('*'); + await searchFilters.checkCreatedRangeFilterIsDisplayed(); + await searchFilters.clickCreatedRangeFilterHeader(); + await searchFilters.checkCreatedRangeFilterIsExpanded(); + await dateRangeFilter.checkFromFieldIsDisplayed(); + await dateRangeFilter.openFromDatePicker(); const todayDate = DateUtil.formatDate('MM-DD-YY'); - datePicker.selectTodayDate(); + await datePicker.selectTodayDate(); - browser.controlFlow().execute(async () => { - await expect(dateRangeFilter.getFromDate()).toEqual(todayDate); - }); + await expect(await dateRangeFilter.getFromDate()).toEqual(todayDate); }); }); }); diff --git a/e2e/search/components/search-number-range.e2e.ts b/e2e/search/components/search-number-range.e2e.ts index 73dedbf24c..f60b1edbda 100644 --- a/e2e/search/components/search-number-range.e2e.ts +++ b/e2e/search/components/search-number-range.e2e.ts @@ -56,7 +56,7 @@ describe('Search Number Range Filter', () => { }); const uploadActions = new UploadActions(this.alfrescoJsApi); - beforeAll(async (done) => { + beforeAll(async () => { await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); @@ -66,322 +66,318 @@ describe('Search Number Range Filter', () => { file2Bytes = await uploadActions.uploadFile(file2BytesModel.location, file2BytesModel.name, '-my-'); file0Bytes = await uploadActions.uploadFile(file0BytesModel.location, file0BytesModel.name, '-my-'); - await browser.driver.sleep(15000); + await browser.sleep(15000); - loginPage.loginToContentServices(acsUser.id, acsUser.password); + await loginPage.loginToContentServices(acsUser.id, acsUser.password); - searchDialog.checkSearchIconIsVisible() - .clickOnSearchIcon() - .enterTextAndPressEnter('*'); + await searchDialog.checkSearchIconIsVisible(); + await searchDialog.clickOnSearchIcon(); + await searchDialog.enterTextAndPressEnter('*'); - done(); }); - afterAll(async (done) => { + afterAll(async () => { await this.alfrescoJsApi.login(acsUser.id, acsUser.password); await uploadActions.deleteFileOrFolder(file2Bytes.entry.id); await uploadActions.deleteFileOrFolder(file0Bytes.entry.id); await navigationBarPage.clickLogoutButton(); - done(); }); - beforeEach(() => { - searchFilters.checkSizeRangeFilterIsDisplayed() - .clickSizeRangeFilterHeader() - .checkSizeRangeFilterIsExpanded(); + beforeEach(async () => { + await searchFilters.checkSizeRangeFilterIsDisplayed(); + await searchFilters.clickSizeRangeFilterHeader(); + await searchFilters.checkSizeRangeFilterIsExpanded(); }); - afterEach(async (done) => { + afterEach(async () => { await browser.refresh(); - done(); + }); - it('[C276921] Should display default values for Number Range widget', () => { - sizeRangeFilter.checkFromFieldIsDisplayed() - .checkToFieldIsDisplayed() - .checkApplyButtonIsDisplayed() - .checkClearButtonIsDisplayed(); + it('[C276921] Should display default values for Number Range widget', async () => { + await sizeRangeFilter.checkFromFieldIsDisplayed(); + await sizeRangeFilter.checkToFieldIsDisplayed(); + await sizeRangeFilter.checkApplyButtonIsDisplayed(); + await sizeRangeFilter.checkClearButtonIsDisplayed(); - expect(sizeRangeFilter.checkApplyButtonIsEnabled()).toBe(false); + await expect(await sizeRangeFilter.checkApplyButtonIsEnabled()).toBe(false); }); - it('[C276922] Should be keep value when Number Range widget is collapsed', () => { + it('[C276922] Should be keep value when Number Range widget is collapsed', async () => { const size = 5; - sizeRangeFilter.putFromNumber(size); - sizeRangeFilter.putToNumber(size); - searchFilters.clickSizeRangeFilterHeader() - .checkSizeRangeFilterIsCollapsed() - .clickSizeRangeFilterHeader() - .checkSizeRangeFilterIsExpanded(); - expect(sizeRangeFilter.getFromNumber()).toEqual(`${size}`); - expect(sizeRangeFilter.getToNumber()).toEqual(`${size}`); + await sizeRangeFilter.putFromNumber(size); + await sizeRangeFilter.putToNumber(size); + await searchFilters.clickSizeRangeFilterHeader(); + await searchFilters.checkSizeRangeFilterIsCollapsed(); + await searchFilters.clickSizeRangeFilterHeader(); + await searchFilters.checkSizeRangeFilterIsExpanded(); + await expect(await sizeRangeFilter.getFromNumber()).toEqual(`${size}`); + await expect(await sizeRangeFilter.getToNumber()).toEqual(`${size}`); }); - it('[C276924] Should display error message when input had an invalid format', () => { - sizeRangeFilter.checkFromFieldIsDisplayed() - .putFromNumber('a').putToNumber('A') - .checkFromErrorInvalidIsDisplayed().checkToErrorInvalidIsDisplayed(); + it('[C276924] Should display error message when input had an invalid format', async () => { + await sizeRangeFilter.checkFromFieldIsDisplayed(); + await sizeRangeFilter.putFromNumber('a'); + await sizeRangeFilter.putToNumber('A'); + await sizeRangeFilter.checkFromErrorInvalidIsDisplayed(); + await sizeRangeFilter.checkToErrorInvalidIsDisplayed(); - expect(sizeRangeFilter.getFromErrorInvalid()).toEqual('Invalid Format'); - expect(sizeRangeFilter.getToErrorInvalid()).toEqual('Invalid Format'); - expect(sizeRangeFilter.checkApplyButtonIsEnabled()).toBe(false); + await expect(await sizeRangeFilter.getFromErrorInvalid()).toEqual('Invalid Format'); + await expect(await sizeRangeFilter.getToErrorInvalid()).toEqual('Invalid Format'); + await expect(await sizeRangeFilter.checkApplyButtonIsEnabled()).toBe(false); - sizeRangeFilter.putFromNumber('@').putToNumber('£') - .checkFromErrorInvalidIsDisplayed().checkToErrorInvalidIsDisplayed(); - expect(sizeRangeFilter.getFromErrorInvalid()).toEqual('Invalid Format'); - expect(sizeRangeFilter.getToErrorInvalid()).toEqual('Invalid Format'); - expect(sizeRangeFilter.checkApplyButtonIsEnabled()).toBe(false); + await sizeRangeFilter.putFromNumber('@'); + await sizeRangeFilter.putToNumber('£'); + await sizeRangeFilter.checkFromErrorInvalidIsDisplayed(); + await sizeRangeFilter.checkToErrorInvalidIsDisplayed(); + await expect(await sizeRangeFilter.getFromErrorInvalid()).toEqual('Invalid Format'); + await expect(await sizeRangeFilter.getToErrorInvalid()).toEqual('Invalid Format'); + await expect(await sizeRangeFilter.checkApplyButtonIsEnabled()).toBe(false); - sizeRangeFilter.putFromNumber('4.5').putToNumber('4,5') - .checkFromErrorInvalidIsDisplayed().checkToErrorInvalidIsDisplayed(); - expect(sizeRangeFilter.getFromErrorInvalid()).toEqual('Invalid Format'); - expect(sizeRangeFilter.getToErrorInvalid()).toEqual('Invalid Format'); - expect(sizeRangeFilter.checkApplyButtonIsEnabled()).toBe(false); + await sizeRangeFilter.putFromNumber('4.5'); + await sizeRangeFilter.putToNumber('4,5'); + await sizeRangeFilter.checkFromErrorInvalidIsDisplayed(); + await sizeRangeFilter.checkToErrorInvalidIsDisplayed(); + await expect(await sizeRangeFilter.getFromErrorInvalid()).toEqual('Invalid Format'); + await expect(await sizeRangeFilter.getToErrorInvalid()).toEqual('Invalid Format'); + await expect(await sizeRangeFilter.checkApplyButtonIsEnabled()).toBe(false); - sizeRangeFilter.putFromNumber('01').putToNumber('-1'); - expect(sizeRangeFilter.getFromErrorInvalid()).toEqual('Invalid Format'); - expect(sizeRangeFilter.getToErrorInvalid()).toEqual('Invalid Format'); - expect(sizeRangeFilter.checkApplyButtonIsEnabled()).toBe(false); + await sizeRangeFilter.putFromNumber('01'); + await sizeRangeFilter.putToNumber('-1'); + await expect(await sizeRangeFilter.getFromErrorInvalid()).toEqual('Invalid Format'); + await expect(await sizeRangeFilter.getToErrorInvalid()).toEqual('Invalid Format'); + await expect(await sizeRangeFilter.checkApplyButtonIsEnabled()).toBe(false); - sizeRangeFilter.clearFromField().clearToField() - .checkFromErrorRequiredIsDisplayed().checkToErrorRequiredIsDisplayed(); - expect(sizeRangeFilter.getFromErrorRequired()).toEqual('Required value'); - expect(sizeRangeFilter.getToErrorRequired()).toEqual('Required value'); - expect(sizeRangeFilter.checkApplyButtonIsEnabled()).toBe(false); + await sizeRangeFilter.clearFromField(); + await sizeRangeFilter.clearToField(); + await sizeRangeFilter.checkFromErrorRequiredIsDisplayed(); + await sizeRangeFilter.checkToErrorRequiredIsDisplayed(); + await expect(await sizeRangeFilter.getFromErrorRequired()).toEqual('Required value'); + await expect(await sizeRangeFilter.getToErrorRequired()).toEqual('Required value'); + await expect(await sizeRangeFilter.checkApplyButtonIsEnabled()).toBe(false); }); - it('[C276943] Should be able to put a big value in To field', () => { + it('[C276943] Should be able to put a big value in To field', async () => { const toSize = 999999999; const fromSize = 0; - sizeRangeFilter.checkToFieldIsDisplayed() - .putToNumber(toSize) - .putFromNumber(fromSize); + await sizeRangeFilter.checkToFieldIsDisplayed(); + await sizeRangeFilter.putToNumber(toSize); + await sizeRangeFilter.putFromNumber(fromSize); - expect(sizeRangeFilter.checkApplyButtonIsEnabled()).toBe(true); + await expect(await sizeRangeFilter.checkApplyButtonIsEnabled()).toBe(true); - sizeRangeFilter.clickApplyButton(); - searchResults.tableIsLoaded(); - searchResults.sortBySize('DESC'); + await sizeRangeFilter.clickApplyButton(); + await searchResults.tableIsLoaded(); + await searchResults.sortBySize('DESC'); - browser.controlFlow().execute(async () => { - const results = await dataTable.geCellElementDetail('Size'); - for (const currentResult of results) { - try { - const currentSize = await currentResult.getAttribute('title'); - if (currentSize && currentSize.trim() !== '') { - await expect(parseInt(currentSize, 10) <= toSize).toBe(true); - } - } catch (e) { + const results: any = dataTable.geCellElementDetail('Size'); + for (const currentResult of results) { + try { + const currentSize = await currentResult.getAttribute('title'); + if (currentSize && currentSize.trim() !== '') { + await expect(parseInt(currentSize, 10) <= toSize).toBe(true); } + } catch (e) { } - }); + } }); - it('[C276944] Should be able to filter by name when size range filter is applied', () => { - const nameFilter = searchFilters.textFiltersPage(); + it('[C276944] Should be able to filter by name when size range filter is applied', async () => { + const nameFilter = await searchFilters.textFiltersPage(); const toSize = 40; const fromSize = 0; - searchFilters.checkNameFilterIsDisplayed() - .checkNameFilterIsExpanded(); - nameFilter.searchByName('*'); + await searchFilters.checkNameFilterIsDisplayed(); + await searchFilters.checkNameFilterIsExpanded(); + await nameFilter.searchByName('*'); - sizeRangeFilter.checkFromFieldIsDisplayed() - .putFromNumber(fromSize) - .putToNumber(toSize); + await sizeRangeFilter.checkFromFieldIsDisplayed(); + await sizeRangeFilter.putFromNumber(fromSize); + await sizeRangeFilter.putToNumber(toSize); - expect(sizeRangeFilter.checkApplyButtonIsEnabled()).toBe(true); + await expect(await sizeRangeFilter.checkApplyButtonIsEnabled()).toBe(true); - sizeRangeFilter.clickApplyButton(); - searchResults.sortBySize('DESC'); + await sizeRangeFilter.clickApplyButton(); + await searchResults.sortBySize('DESC'); - browser.controlFlow().execute(async () => { - const results = await dataTable.geCellElementDetail('Size'); - for (const currentResult of results) { - try { - const currentSize = await currentResult.getAttribute('title'); - if (currentSize && currentSize.trim() !== '') { - await expect(parseInt(currentSize, 10) <= toSize).toBe(true); - } - } catch (e) { + const results: any = dataTable.geCellElementDetail('Size'); + for (const currentResult of results) { + try { + const currentSize = await currentResult.getAttribute('title'); + if (currentSize && currentSize.trim() !== '') { + await expect(parseInt(currentSize, 10) <= toSize).toBe(true); } + } catch (e) { } - }); + } - searchFilters.checkNameFilterIsDisplayed() - .checkNameFilterIsExpanded(); - nameFilter.searchByName('z*'); - searchResults.sortBySize('DESC'); + await searchFilters.checkNameFilterIsDisplayed(); + await searchFilters.checkNameFilterIsExpanded(); + await nameFilter.searchByName('z*'); + await searchResults.sortBySize('DESC'); - browser.controlFlow().execute(async () => { - const results = await dataTable.geCellElementDetail('Size'); - for (const currentResult of results) { - try { - const currentSize = await currentResult.getAttribute('title'); - if (currentSize && currentSize.trim() !== '') { - await expect(parseInt(currentSize, 10) <= toSize).toBe(true); - } - } catch (e) { + const resultsSize: any = dataTable.geCellElementDetail('Size'); + for (const currentResult of resultsSize) { + try { + const currentSize = await currentResult.getAttribute('title'); + if (currentSize && currentSize.trim() !== '') { + await expect(parseInt(currentSize, 10) <= toSize).toBe(true); } + } catch (e) { } - }); + } - browser.controlFlow().execute(async () => { - const results = await dataTable.geCellElementDetail('Display name'); - for (const currentResult of results) { - try { - const name = await currentResult.getAttribute('title'); - if (name && name.trim() !== '') { - await expect(/z*/i.test(name)).toBe(true); - } - } catch (e) { + const resultsDisplay: any = dataTable.geCellElementDetail('Display name'); + for (const currentResult of resultsDisplay) { + try { + const name = await currentResult.getAttribute('title'); + if (name && name.trim() !== '') { + await expect(/z*/i.test(name)).toBe(true); } + } catch (e) { } - }); + } }); - it('[C276951] Should not display folders when Size range is applied', () => { - sizeRangeFilter.checkToFieldIsDisplayed() - .putToNumber(99999999) - .putFromNumber(0); - expect(sizeRangeFilter.checkApplyButtonIsEnabled()).toBe(true); + it('[C276951] Should not display folders when Size range is applied', async () => { + await sizeRangeFilter.checkToFieldIsDisplayed(); + await sizeRangeFilter.putToNumber(99999999); + await sizeRangeFilter.putFromNumber(0); + await expect(await sizeRangeFilter.checkApplyButtonIsEnabled()).toBe(true); - sizeRangeFilter.clickApplyButton(); - searchResults.tableIsLoaded(); - searchFilters.checkCheckListFilterIsDisplayed(); - searchFilters.clickCheckListFilter(); - searchFilters.checkCheckListFilterIsExpanded(); + await sizeRangeFilter.clickApplyButton(); + await searchResults.tableIsLoaded(); + await searchFilters.checkCheckListFilterIsDisplayed(); + await searchFilters.clickCheckListFilter(); + await searchFilters.checkCheckListFilterIsExpanded(); - searchFilters.checkListFiltersPage() - .clickCheckListOption('Folder'); + await searchFilters.checkListFiltersPage().clickCheckListOption('Folder'); - searchResults.tableIsLoaded(); - searchResults.checkNoResultMessageIsDisplayed(); + await searchResults.tableIsLoaded(); + await searchResults.checkNoResultMessageIsDisplayed(); }); - it('[C276952] Should only display empty files when size range is set from 0 to 1', () => { - sizeRangeFilter.checkToFieldIsDisplayed() - .putToNumber(1) - .putFromNumber(0); - expect(sizeRangeFilter.checkApplyButtonIsEnabled()).toBe(true); + it('[C276952] Should only display empty files when size range is set from 0 to 1', async () => { + await sizeRangeFilter.checkToFieldIsDisplayed(); + await sizeRangeFilter.putToNumber(1); + await sizeRangeFilter.putFromNumber(0); + await expect(await sizeRangeFilter.checkApplyButtonIsEnabled()).toBe(true); - sizeRangeFilter.clickApplyButton(); - searchResults.tableIsLoaded(); - searchResults.sortBySize('DESC'); + await sizeRangeFilter.clickApplyButton(); + await searchResults.tableIsLoaded(); + await searchResults.sortBySize('DESC'); - browser.controlFlow().execute(async () => { - const results = await dataTable.geCellElementDetail('Size'); - for (const currentResult of results) { - try { - const currentSize = await currentResult.getAttribute('title'); - if (currentSize && currentSize.trim() !== '') { - await expect(currentSize === '0').toBe(true); - } - } catch (e) { + const results: any = dataTable.geCellElementDetail('Size'); + for (const currentResult of results) { + try { + const currentSize = await currentResult.getAttribute('title'); + if (currentSize && currentSize.trim() !== '') { + await expect(currentSize === '0').toBe(true); } + } catch (e) { } - }); - + } }); - it('[C277092] Should disable apply button when from field value equal/is bigger than to field value', () => { - sizeRangeFilter.checkFromFieldIsDisplayed() - .putFromNumber(10); - expect(sizeRangeFilter.checkApplyButtonIsEnabled()).toBe(false); + it('[C277092] Should disable apply button when from field value equal/is bigger than to field value', async () => { + await sizeRangeFilter.checkFromFieldIsDisplayed(); + await sizeRangeFilter.putFromNumber(10); + await expect(await sizeRangeFilter.checkApplyButtonIsEnabled()).toBe(false); - sizeRangeFilter.putToNumber('5'); - expect(sizeRangeFilter.checkApplyButtonIsEnabled()).toBe(false); + await sizeRangeFilter.putToNumber('5'); + await expect(await sizeRangeFilter.checkApplyButtonIsEnabled()).toBe(false); - sizeRangeFilter.putToNumber('10'); - expect(sizeRangeFilter.checkApplyButtonIsEnabled()).toBe(false); + await sizeRangeFilter.putToNumber('10'); + await expect(await sizeRangeFilter.checkApplyButtonIsEnabled()).toBe(false); }); - it('[C289930] Should be able to clear values in number range fields', () => { - sizeRangeFilter.checkFromFieldIsDisplayed().checkClearButtonIsDisplayed().checkNoErrorMessageIsDisplayed() - .clickClearButton().checkNoErrorMessageIsDisplayed() - .putFromNumber(0).putToNumber(1).clickClearButton(); + it('[C289930] Should be able to clear values in number range fields', async () => { + await sizeRangeFilter.checkFromFieldIsDisplayed(); + await sizeRangeFilter.checkClearButtonIsDisplayed(); + await sizeRangeFilter.checkNoErrorMessageIsDisplayed(); + await sizeRangeFilter.clickClearButton(); + await sizeRangeFilter.checkNoErrorMessageIsDisplayed(); + await sizeRangeFilter.putFromNumber(0); + await sizeRangeFilter.putToNumber(1); + await sizeRangeFilter.clickClearButton(); - expect(sizeRangeFilter.getFromNumber()).toEqual(''); - expect(sizeRangeFilter.getToNumber()).toEqual(''); + await expect(await sizeRangeFilter.getFromNumber()).toEqual(''); + await expect(await sizeRangeFilter.getToNumber()).toEqual(''); - sizeRangeFilter.putFromNumber(0).putToNumber(1).clickApplyButton(); - searchResults.sortBySize('DESC'); + await sizeRangeFilter.putFromNumber(0); + await sizeRangeFilter.putToNumber(1); + await sizeRangeFilter.clickApplyButton(); + await searchResults.sortBySize('DESC'); - browser.controlFlow().execute(async () => { - const results = await dataTable.geCellElementDetail('Size'); - for (const currentResult of results) { - try { - - const currentSize = await currentResult.getAttribute('title'); - if (currentSize && currentSize.trim() !== '') { - await expect(parseInt(currentSize, 10) <= 1000).toBe(true); - } - } catch (e) { + const results: any = dataTable.geCellElementDetail('Size'); + for (const currentResult of results) { + try { + const currentSize = await currentResult.getAttribute('title'); + if (currentSize && currentSize.trim() !== '') { + await expect(parseInt(currentSize, 10) <= 1000).toBe(true); } + } catch (e) { } - }); + } - sizeRangeFilter.clickClearButton(); + await sizeRangeFilter.clickClearButton(); - expect(sizeRangeFilter.getFromNumber()).toEqual(''); - expect(sizeRangeFilter.getToNumber()).toEqual(''); + await expect(await sizeRangeFilter.getFromNumber()).toEqual(''); + await expect(await sizeRangeFilter.getToNumber()).toEqual(''); - browser.controlFlow().execute(async () => { - const results = await dataTable.geCellElementDetail('Size'); - for (const currentResult of results) { - try { - - const currentSize = await currentResult.getAttribute('title'); - if (currentSize && currentSize.trim() !== '') { - await expect(parseInt(currentSize, 10) >= 1000).toBe(true); - } - } catch (e) { + const resultsSize: any = dataTable.geCellElementDetail('Size'); + for (const currentResult of resultsSize) { + try { + const currentSize = await currentResult.getAttribute('title'); + if (currentSize && currentSize.trim() !== '') { + await expect(parseInt(currentSize, 10) >= 1000).toBe(true); } + } catch (e) { } - }); + } }); - it('[C277137] Number Range should be inclusive', () => { - sizeRangeFilter.checkToFieldIsDisplayed() - .putToNumber(2) - .putFromNumber(1); - expect(sizeRangeFilter.checkApplyButtonIsEnabled()).toBe(true); + it('[C277137] Number Range should be inclusive', async () => { + await sizeRangeFilter.checkToFieldIsDisplayed(); + await sizeRangeFilter.putToNumber(2); + await sizeRangeFilter.putFromNumber(1); + await expect(await sizeRangeFilter.checkApplyButtonIsEnabled()).toBe(true); - sizeRangeFilter.clickApplyButton(); + await sizeRangeFilter.clickApplyButton(); - searchResults.tableIsLoaded(); - searchResults.checkContentIsDisplayed(file2BytesModel.name); + await searchResults.tableIsLoaded(); + await searchResults.checkContentIsDisplayed(file2BytesModel.name); - sizeRangeFilter.checkToFieldIsDisplayed() - .putToNumber(1) - .putFromNumber(0); - expect(sizeRangeFilter.checkApplyButtonIsEnabled()).toBe(true); + await sizeRangeFilter.checkToFieldIsDisplayed(); + await sizeRangeFilter.putToNumber(1); + await sizeRangeFilter.putFromNumber(0); + await expect(await sizeRangeFilter.checkApplyButtonIsEnabled()).toBe(true); - sizeRangeFilter.clickApplyButton(); + await sizeRangeFilter.clickApplyButton(); - searchResults.tableIsLoaded(); - searchResults.checkContentIsNotDisplayed(file2BytesModel.name); + await searchResults.tableIsLoaded(); + await searchResults.checkContentIsNotDisplayed(file2BytesModel.name); - sizeRangeFilter.checkToFieldIsDisplayed() - .putToNumber(3) - .putFromNumber(2); - expect(sizeRangeFilter.checkApplyButtonIsEnabled()).toBe(true); + await sizeRangeFilter.checkToFieldIsDisplayed(); + await sizeRangeFilter.putToNumber(3); + await sizeRangeFilter.putFromNumber(2); + await expect(await sizeRangeFilter.checkApplyButtonIsEnabled()).toBe(true); - sizeRangeFilter.clickApplyButton(); + await sizeRangeFilter.clickApplyButton(); - searchResults.tableIsLoaded(); - searchResults.checkContentIsDisplayed(file2BytesModel.name); + await searchResults.tableIsLoaded(); + await searchResults.checkContentIsDisplayed(file2BytesModel.name); - sizeRangeFilter.checkToFieldIsDisplayed() - .putToNumber(4) - .putFromNumber(3); - expect(sizeRangeFilter.checkApplyButtonIsEnabled()).toBe(true); + await sizeRangeFilter.checkToFieldIsDisplayed(); + await sizeRangeFilter.putToNumber(4); + await sizeRangeFilter.putFromNumber(3); + await expect(await sizeRangeFilter.checkApplyButtonIsEnabled()).toBe(true); - sizeRangeFilter.clickApplyButton(); + await sizeRangeFilter.clickApplyButton(); - searchResults.tableIsLoaded(); - searchResults.checkContentIsNotDisplayed(file2BytesModel.name); + await searchResults.tableIsLoaded(); + await searchResults.checkContentIsNotDisplayed(file2BytesModel.name); }); describe('Configuration change', () => { @@ -392,117 +388,113 @@ describe('Search Number Range Filter', () => { }); it('[C276928] Should be able to change the field property for number range', async () => { - navigationBarPage.clickContentServicesButton(); + await navigationBarPage.clickContentServicesButton(); jsonFile.categories[3].component.settings.field = 'cm:created'; await LocalStorageUtil.setConfigField('search', JSON.stringify(jsonFile)); - searchDialog.checkSearchIconIsVisible() - .clickOnSearchIcon() - .enterTextAndPressEnter('*'); + await searchDialog.checkSearchIconIsVisible(); + await searchDialog.clickOnSearchIcon(); + await searchDialog.enterTextAndPressEnter('*'); - searchFilters.checkSizeRangeFilterIsDisplayed() - .clickSizeRangeFilterHeader() - .checkSizeRangeFilterIsExpanded(); + await searchFilters.checkSizeRangeFilterIsDisplayed(); + await searchFilters.clickSizeRangeFilterHeader(); + await searchFilters.checkSizeRangeFilterIsExpanded(); const fromYear = (new Date()).getFullYear(); const toYear = fromYear + 1; - sizeRangeFilter.checkToFieldIsDisplayed() - .putToNumber(toYear) - .putFromNumber(fromYear); - expect(sizeRangeFilter.checkApplyButtonIsEnabled()).toBe(true); + await sizeRangeFilter.checkToFieldIsDisplayed(); + await sizeRangeFilter.putToNumber(toYear); + await sizeRangeFilter.putFromNumber(fromYear); + await expect(await sizeRangeFilter.checkApplyButtonIsEnabled()).toBe(true); - sizeRangeFilter.clickApplyButton(); - searchResults.tableIsLoaded(); - searchResults.sortByCreated('DESC'); + await sizeRangeFilter.clickApplyButton(); + await searchResults.tableIsLoaded(); + await searchResults.sortByCreated('DESC'); - browser.controlFlow().execute(async () => { - const results = await dataTable.geCellElementDetail('Created'); - for (const currentResult of results) { - currentResult.getAttribute('title').then(async (currentDate) => { - const currentDateFormatted = DateUtil.parse(currentDate, 'MMM DD, YYYY, h:mm:ss a'); + const results: any = dataTable.geCellElementDetail('Created'); + for (const currentResult of results) { + const currentDate = await currentResult.getAttribute('title'); + const currentDateFormatted = DateUtil.parse(currentDate, 'MMM DD, YYYY, h:mm:ss a'); - await expect(currentDateFormatted.getFullYear() <= toYear).toBe(true); - await expect(currentDateFormatted.getFullYear() >= fromYear).toBe(true); - }); - - } - }); + await expect(currentDateFormatted.getFullYear() <= toYear).toBe(true); + await expect(currentDateFormatted.getFullYear() >= fromYear).toBe(true); + } }); it('[C277139] Should be able to set To field to be exclusive', async () => { - navigationBarPage.clickContentServicesButton(); + await navigationBarPage.clickContentServicesButton(); jsonFile.categories[3].component.settings.format = '[{FROM} TO {TO}>'; await LocalStorageUtil.setConfigField('search', JSON.stringify(jsonFile)); - searchDialog.checkSearchIconIsVisible() - .clickOnSearchIcon() - .enterTextAndPressEnter('*'); + await searchDialog.checkSearchIconIsVisible(); + await searchDialog.clickOnSearchIcon(); + await searchDialog.enterTextAndPressEnter('*'); - searchFilters.checkSizeRangeFilterIsDisplayed() - .clickSizeRangeFilterHeader() - .checkSizeRangeFilterIsExpanded(); + await searchFilters.checkSizeRangeFilterIsDisplayed(); + await searchFilters.clickSizeRangeFilterHeader(); + await searchFilters.checkSizeRangeFilterIsExpanded(); - sizeRangeFilter.checkToFieldIsDisplayed() - .putToNumber(2) - .putFromNumber(1); - expect(sizeRangeFilter.checkApplyButtonIsEnabled()).toBe(true); + await sizeRangeFilter.checkToFieldIsDisplayed(); + await sizeRangeFilter.putToNumber(2); + await sizeRangeFilter.putFromNumber(1); + await expect(await sizeRangeFilter.checkApplyButtonIsEnabled()).toBe(true); - sizeRangeFilter.clickApplyButton(); + await sizeRangeFilter.clickApplyButton(); - searchResults.tableIsLoaded(); - searchResults.checkContentIsNotDisplayed(file2BytesModel.name); + await searchResults.tableIsLoaded(); + await searchResults.checkContentIsNotDisplayed(file2BytesModel.name); - sizeRangeFilter.checkToFieldIsDisplayed() - .putToNumber(3) - .putFromNumber(1); - expect(sizeRangeFilter.checkApplyButtonIsEnabled()).toBe(true); + await sizeRangeFilter.checkToFieldIsDisplayed(); + await sizeRangeFilter.putToNumber(3); + await sizeRangeFilter.putFromNumber(1); + await expect(await sizeRangeFilter.checkApplyButtonIsEnabled()).toBe(true); - sizeRangeFilter.clickApplyButton(); + await sizeRangeFilter.clickApplyButton(); - searchResults.tableIsLoaded(); - searchResults.checkContentIsDisplayed(file2BytesModel.name); + await searchResults.tableIsLoaded(); + await searchResults.checkContentIsDisplayed(file2BytesModel.name); }); it('[C277140] Should be able to set From field to be exclusive', async () => { - navigationBarPage.clickContentServicesButton(); + await navigationBarPage.clickContentServicesButton(); jsonFile.categories[3].component.settings.format = '<{FROM} TO {TO}]'; await LocalStorageUtil.setConfigField('search', JSON.stringify(jsonFile)); - searchDialog.checkSearchIconIsVisible() - .clickOnSearchIcon() - .enterTextAndPressEnter('*'); + await searchDialog.checkSearchIconIsVisible(); + await searchDialog.clickOnSearchIcon(); + await searchDialog.enterTextAndPressEnter('*'); - searchFilters.checkSizeRangeFilterIsDisplayed() - .clickSizeRangeFilterHeader() - .checkSizeRangeFilterIsExpanded(); + await searchFilters.checkSizeRangeFilterIsDisplayed(); + await searchFilters.clickSizeRangeFilterHeader(); + await searchFilters.checkSizeRangeFilterIsExpanded(); - sizeRangeFilter.checkToFieldIsDisplayed() - .putToNumber(3) - .putFromNumber(1); - expect(sizeRangeFilter.checkApplyButtonIsEnabled()).toBe(true); + await sizeRangeFilter.checkToFieldIsDisplayed(); + await sizeRangeFilter.putToNumber(3); + await sizeRangeFilter.putFromNumber(1); + await expect(await sizeRangeFilter.checkApplyButtonIsEnabled()).toBe(true); - sizeRangeFilter.clickApplyButton(); + await sizeRangeFilter.clickApplyButton(); - searchResults.tableIsLoaded(); - searchResults.checkContentIsDisplayed(file2BytesModel.name); + await searchResults.tableIsLoaded(); + await searchResults.checkContentIsDisplayed(file2BytesModel.name); - sizeRangeFilter.checkToFieldIsDisplayed() - .putToNumber(3) - .putFromNumber(2); - expect(sizeRangeFilter.checkApplyButtonIsEnabled()).toBe(true); + await sizeRangeFilter.checkToFieldIsDisplayed(); + await sizeRangeFilter.putToNumber(3); + await sizeRangeFilter.putFromNumber(2); + await expect(await sizeRangeFilter.checkApplyButtonIsEnabled()).toBe(true); - sizeRangeFilter.clickApplyButton(); + await sizeRangeFilter.clickApplyButton(); - searchResults.tableIsLoaded(); - searchResults.checkContentIsNotDisplayed(file2BytesModel.name); + await searchResults.tableIsLoaded(); + await searchResults.checkContentIsNotDisplayed(file2BytesModel.name); }); }); }); diff --git a/e2e/search/components/search-radio.e2e.ts b/e2e/search/components/search-radio.e2e.ts index d05e0f1aad..09f300940a 100644 --- a/e2e/search/components/search-radio.e2e.ts +++ b/e2e/search/components/search-radio.e2e.ts @@ -56,7 +56,7 @@ describe('Search Radio Component', () => { let createdFile, createdFolder; - beforeAll(async (done) => { + beforeAll(async () => { await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); await this.alfrescoJsApi.core.peopleApi.addPerson(acsUser); @@ -71,16 +71,15 @@ describe('Search Radio Component', () => { nodeType: 'cm:content' }); - await browser.driver.sleep(15000); + await browser.sleep(15000); await loginPage.loginToContentServicesUsingUserModel(acsUser); - BrowserActions.getUrl(browser.params.testConfig.adf.url + '/search;q=' + randomName); + await BrowserActions.getUrl(browser.params.testConfig.adf.url + '/search;q=' + randomName); - done(); }); - afterAll(async (done) => { + afterAll(async () => { await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); await uploadActions.deleteFileOrFolder(createdFile.entry.id); @@ -88,41 +87,40 @@ describe('Search Radio Component', () => { await navigationBarPage.clickLogoutButton(); - done(); }); - it('[C277039] Should be able to choose only one option at a time', () => { - searchFiltersPage.checkTypeFilterIsDisplayed(); - searchFiltersPage.checkTypeFilterIsCollapsed(); - searchFiltersPage.clickTypeFilterHeader(); + it('[C277039] Should be able to choose only one option at a time', async () => { + await searchFiltersPage.checkTypeFilterIsDisplayed(); + await searchFiltersPage.checkTypeFilterIsCollapsed(); + await searchFiltersPage.clickTypeFilterHeader(); - searchFiltersPage.typeFiltersPage().checkFilterRadioButtonIsDisplayed(filterType.none); - searchFiltersPage.typeFiltersPage().checkFilterRadioButtonIsDisplayed(filterType.all); - searchFiltersPage.typeFiltersPage().checkFilterRadioButtonIsDisplayed(filterType.folder); - searchFiltersPage.typeFiltersPage().checkFilterRadioButtonIsDisplayed(filterType.document); + await searchFiltersPage.typeFiltersPage().checkFilterRadioButtonIsDisplayed(filterType.none); + await searchFiltersPage.typeFiltersPage().checkFilterRadioButtonIsDisplayed(filterType.all); + await searchFiltersPage.typeFiltersPage().checkFilterRadioButtonIsDisplayed(filterType.folder); + await searchFiltersPage.typeFiltersPage().checkFilterRadioButtonIsDisplayed(filterType.document); - searchFiltersPage.typeFiltersPage().checkFilterRadioButtonIsChecked(filterType.none); + await searchFiltersPage.typeFiltersPage().checkFilterRadioButtonIsChecked(filterType.none); - searchResults.checkContentIsDisplayed(nodeNames.folder); - searchResults.checkContentIsDisplayed(nodeNames.document); + await searchResults.checkContentIsDisplayed(nodeNames.folder); + await searchResults.checkContentIsDisplayed(nodeNames.document); - searchFiltersPage.typeFiltersPage().clickFilterRadioButton(filterType.folder); - searchFiltersPage.typeFiltersPage().checkFilterRadioButtonIsChecked(filterType.folder); + await searchFiltersPage.typeFiltersPage().clickFilterRadioButton(filterType.folder); + await searchFiltersPage.typeFiltersPage().checkFilterRadioButtonIsChecked(filterType.folder); - searchResults.checkContentIsDisplayed(nodeNames.folder); - searchResults.checkContentIsNotDisplayed(nodeNames.document); + await searchResults.checkContentIsDisplayed(nodeNames.folder); + await searchResults.checkContentIsNotDisplayed(nodeNames.document); - searchFiltersPage.typeFiltersPage().clickFilterRadioButton(filterType.document); - searchFiltersPage.typeFiltersPage().checkFilterRadioButtonIsChecked(filterType.document); + await searchFiltersPage.typeFiltersPage().clickFilterRadioButton(filterType.document); + await searchFiltersPage.typeFiltersPage().checkFilterRadioButtonIsChecked(filterType.document); - searchResults.checkContentIsDisplayed(nodeNames.document); - searchResults.checkContentIsNotDisplayed(nodeNames.folder); + await searchResults.checkContentIsDisplayed(nodeNames.document); + await searchResults.checkContentIsNotDisplayed(nodeNames.folder); - searchFiltersPage.typeFiltersPage().clickFilterRadioButton(filterType.all); - searchFiltersPage.typeFiltersPage().checkFilterRadioButtonIsChecked(filterType.all); + await searchFiltersPage.typeFiltersPage().clickFilterRadioButton(filterType.all); + await searchFiltersPage.typeFiltersPage().checkFilterRadioButtonIsChecked(filterType.all); - searchResults.checkContentIsDisplayed(nodeNames.folder); - searchResults.checkContentIsDisplayed(nodeNames.document); + await searchResults.checkContentIsDisplayed(nodeNames.folder); + await searchResults.checkContentIsDisplayed(nodeNames.document); }); describe('configuration change', () => { @@ -134,7 +132,7 @@ describe('Search Radio Component', () => { }); it('[C277147] Should be able to customise the pageSize value', async () => { - navigationBarPage.clickContentServicesButton(); + await navigationBarPage.clickContentServicesButton(); jsonFile.categories[5].component.settings.pageSize = 10; @@ -147,40 +145,46 @@ describe('Search Radio Component', () => { await LocalStorageUtil.setConfigField('search', JSON.stringify(jsonFile)); - searchDialog.clickOnSearchIcon().checkSearchBarIsVisible().enterTextAndPressEnter(randomName); - searchFiltersPage.clickTypeFilterHeader(); + await searchDialog.clickOnSearchIcon(); + await searchDialog.checkSearchBarIsVisible(); + await searchDialog.enterTextAndPressEnter(randomName); + await searchFiltersPage.clickTypeFilterHeader(); - expect(searchFiltersPage.typeFiltersPage().getRadioButtonsNumberOnPage()).toBe(10); + await expect(await searchFiltersPage.typeFiltersPage().getRadioButtonsNumberOnPage()).toBe(10); - navigationBarPage.clickContentServicesButton(); + await navigationBarPage.clickContentServicesButton(); jsonFile.categories[5].component.settings.pageSize = 11; await LocalStorageUtil.setConfigField('search', JSON.stringify(jsonFile)); - searchDialog.clickOnSearchIcon().checkSearchBarIsVisible().enterTextAndPressEnter(randomName); - searchFiltersPage.clickTypeFilterHeader(); + await searchDialog.clickOnSearchIcon(); + await searchDialog.checkSearchBarIsVisible(); + await searchDialog.enterTextAndPressEnter(randomName); + await searchFiltersPage.clickTypeFilterHeader(); - expect(searchFiltersPage.typeFiltersPage().getRadioButtonsNumberOnPage()).toBe(10); + await expect(await searchFiltersPage.typeFiltersPage().getRadioButtonsNumberOnPage()).toBe(10); - navigationBarPage.clickContentServicesButton(); + await navigationBarPage.clickContentServicesButton(); jsonFile.categories[5].component.settings.pageSize = 9; await LocalStorageUtil.setConfigField('search', JSON.stringify(jsonFile)); - searchDialog.clickOnSearchIcon().checkSearchBarIsVisible().enterTextAndPressEnter(randomName); - searchFiltersPage.clickTypeFilterHeader(); + await searchDialog.clickOnSearchIcon(); + await searchDialog.checkSearchBarIsVisible(); + await searchDialog.enterTextAndPressEnter(randomName); + await searchFiltersPage.clickTypeFilterHeader(); - expect(searchFiltersPage.typeFiltersPage().getRadioButtonsNumberOnPage()).toBe(9); + await expect(await searchFiltersPage.typeFiltersPage().getRadioButtonsNumberOnPage()).toBe(9); - searchFiltersPage.typeFiltersPage().checkShowMoreButtonIsDisplayed(); - searchFiltersPage.typeFiltersPage().checkShowLessButtonIsNotDisplayed(); + await searchFiltersPage.typeFiltersPage().checkShowMoreButtonIsDisplayed(); + await searchFiltersPage.typeFiltersPage().checkShowLessButtonIsNotDisplayed(); - browser.refresh(); + await browser.refresh(); }); it('[C277148] Should be able to click show more/less button', async () => { - navigationBarPage.clickContentServicesButton(); + await navigationBarPage.clickContentServicesButton(); jsonFile.categories[5].component.settings.pageSize = 0; @@ -193,54 +197,58 @@ describe('Search Radio Component', () => { await LocalStorageUtil.setConfigField('search', JSON.stringify(jsonFile)); - searchDialog.clickOnSearchIcon().checkSearchBarIsVisible().enterTextAndPressEnter(randomName); - searchFiltersPage.clickTypeFilterHeader(); + await searchDialog.clickOnSearchIcon(); + await searchDialog.checkSearchBarIsVisible(); + await searchDialog.enterTextAndPressEnter(randomName); + await searchFiltersPage.clickTypeFilterHeader(); - expect(searchFiltersPage.typeFiltersPage().getRadioButtonsNumberOnPage()).toBe(5); + await expect(await searchFiltersPage.typeFiltersPage().getRadioButtonsNumberOnPage()).toBe(5); - searchFiltersPage.typeFiltersPage().checkShowMoreButtonIsDisplayed(); - searchFiltersPage.typeFiltersPage().checkShowLessButtonIsNotDisplayed(); + await searchFiltersPage.typeFiltersPage().checkShowMoreButtonIsDisplayed(); + await searchFiltersPage.typeFiltersPage().checkShowLessButtonIsNotDisplayed(); - searchFiltersPage.typeFiltersPage().clickShowMoreButton(); + await searchFiltersPage.typeFiltersPage().clickShowMoreButton(); - expect(searchFiltersPage.typeFiltersPage().getRadioButtonsNumberOnPage()).toBe(10); + await expect(await searchFiltersPage.typeFiltersPage().getRadioButtonsNumberOnPage()).toBe(10); - searchFiltersPage.typeFiltersPage().checkShowMoreButtonIsNotDisplayed(); - searchFiltersPage.typeFiltersPage().checkShowLessButtonIsDisplayed(); + await searchFiltersPage.typeFiltersPage().checkShowMoreButtonIsNotDisplayed(); + await searchFiltersPage.typeFiltersPage().checkShowLessButtonIsDisplayed(); - searchFiltersPage.typeFiltersPage().clickShowLessButton(); + await searchFiltersPage.typeFiltersPage().clickShowLessButton(); - expect(searchFiltersPage.typeFiltersPage().getRadioButtonsNumberOnPage()).toBe(5); + await expect(await searchFiltersPage.typeFiltersPage().getRadioButtonsNumberOnPage()).toBe(5); - searchFiltersPage.typeFiltersPage().checkShowMoreButtonIsDisplayed(); - searchFiltersPage.typeFiltersPage().checkShowLessButtonIsNotDisplayed(); + await searchFiltersPage.typeFiltersPage().checkShowMoreButtonIsDisplayed(); + await searchFiltersPage.typeFiltersPage().checkShowLessButtonIsNotDisplayed(); - navigationBarPage.clickContentServicesButton(); + await navigationBarPage.clickContentServicesButton(); delete jsonFile.categories[5].component.settings.pageSize; await LocalStorageUtil.setConfigField('search', JSON.stringify(jsonFile)); - searchDialog.clickOnSearchIcon().checkSearchBarIsVisible().enterTextAndPressEnter(randomName); - searchFiltersPage.clickTypeFilterHeader(); + await searchDialog.clickOnSearchIcon(); + await searchDialog.checkSearchBarIsVisible(); + await searchDialog.enterTextAndPressEnter(randomName); + await searchFiltersPage.clickTypeFilterHeader(); - expect(searchFiltersPage.typeFiltersPage().getRadioButtonsNumberOnPage()).toBe(5); + await expect(await searchFiltersPage.typeFiltersPage().getRadioButtonsNumberOnPage()).toBe(5); - searchFiltersPage.typeFiltersPage().checkShowMoreButtonIsDisplayed(); - searchFiltersPage.typeFiltersPage().checkShowLessButtonIsNotDisplayed(); + await searchFiltersPage.typeFiltersPage().checkShowMoreButtonIsDisplayed(); + await searchFiltersPage.typeFiltersPage().checkShowLessButtonIsNotDisplayed(); - searchFiltersPage.typeFiltersPage().clickShowMoreButton(); + await searchFiltersPage.typeFiltersPage().clickShowMoreButton(); - expect(searchFiltersPage.typeFiltersPage().getRadioButtonsNumberOnPage()).toBe(10); + await expect(await searchFiltersPage.typeFiltersPage().getRadioButtonsNumberOnPage()).toBe(10); - searchFiltersPage.typeFiltersPage().checkShowMoreButtonIsNotDisplayed(); - searchFiltersPage.typeFiltersPage().checkShowLessButtonIsDisplayed(); + await searchFiltersPage.typeFiltersPage().checkShowMoreButtonIsNotDisplayed(); + await searchFiltersPage.typeFiltersPage().checkShowLessButtonIsDisplayed(); - searchFiltersPage.typeFiltersPage().clickShowLessButton(); + await searchFiltersPage.typeFiltersPage().clickShowLessButton(); - expect(searchFiltersPage.typeFiltersPage().getRadioButtonsNumberOnPage()).toBe(5); + await expect(await searchFiltersPage.typeFiltersPage().getRadioButtonsNumberOnPage()).toBe(5); - searchFiltersPage.typeFiltersPage().checkShowMoreButtonIsDisplayed(); - searchFiltersPage.typeFiltersPage().checkShowLessButtonIsNotDisplayed(); + await searchFiltersPage.typeFiltersPage().checkShowMoreButtonIsDisplayed(); + await searchFiltersPage.typeFiltersPage().checkShowLessButtonIsNotDisplayed(); }); }); @@ -253,14 +261,13 @@ describe('Search Radio Component', () => { jsonFile = SearchConfiguration.getConfiguration(); }); - beforeAll(async (done) => { + beforeAll(async () => { await loginPage.loginToContentServicesUsingUserModel(acsUser); - done(); }); it('[C277033] Should be able to add a new option', async () => { - navigationBarPage.clickContentServicesButton(); + await navigationBarPage.clickContentServicesButton(); jsonFile.categories[5].component.settings.options.push({ 'name': filterType.custom, @@ -269,20 +276,22 @@ describe('Search Radio Component', () => { await LocalStorageUtil.setConfigField('search', JSON.stringify(jsonFile)); - searchDialog.clickOnSearchIcon().checkSearchBarIsVisible().enterTextAndPressEnter(randomName); - searchFiltersPage.clickTypeFilterHeader(); + await searchDialog.clickOnSearchIcon(); + await searchDialog.checkSearchBarIsVisible(); + await searchDialog.enterTextAndPressEnter(randomName); + await searchFiltersPage.clickTypeFilterHeader(); - searchFiltersPage.typeFiltersPage().checkFilterRadioButtonIsDisplayed(filterType.none); - searchFiltersPage.typeFiltersPage().checkFilterRadioButtonIsDisplayed(filterType.all); - searchFiltersPage.typeFiltersPage().checkFilterRadioButtonIsDisplayed(filterType.folder); - searchFiltersPage.typeFiltersPage().checkFilterRadioButtonIsDisplayed(filterType.document); - searchFiltersPage.typeFiltersPage().checkFilterRadioButtonIsDisplayed(filterType.custom); - searchFiltersPage.typeFiltersPage().checkFilterRadioButtonIsChecked(filterType.none); + await searchFiltersPage.typeFiltersPage().checkFilterRadioButtonIsDisplayed(filterType.none); + await searchFiltersPage.typeFiltersPage().checkFilterRadioButtonIsDisplayed(filterType.all); + await searchFiltersPage.typeFiltersPage().checkFilterRadioButtonIsDisplayed(filterType.folder); + await searchFiltersPage.typeFiltersPage().checkFilterRadioButtonIsDisplayed(filterType.document); + await searchFiltersPage.typeFiltersPage().checkFilterRadioButtonIsDisplayed(filterType.custom); + await searchFiltersPage.typeFiltersPage().checkFilterRadioButtonIsChecked(filterType.none); - searchFiltersPage.typeFiltersPage().clickFilterRadioButton(filterType.custom); + await searchFiltersPage.typeFiltersPage().clickFilterRadioButton(filterType.custom); - searchResults.checkContentIsDisplayed(nodeNames.document); - searchResults.checkContentIsNotDisplayed(nodeNames.folder); + await searchResults.checkContentIsDisplayed(nodeNames.document); + await searchResults.checkContentIsNotDisplayed(nodeNames.folder); }); }); diff --git a/e2e/search/components/search-slider.e2e.ts b/e2e/search/components/search-slider.e2e.ts index 9d59bbf40e..4c333e9c7f 100644 --- a/e2e/search/components/search-slider.e2e.ts +++ b/e2e/search/components/search-slider.e2e.ts @@ -27,7 +27,7 @@ import { browser } from 'protractor'; import resources = require('../../util/resources'); import { SearchConfiguration } from '../search.config'; -describe('Search Number Range Filter', () => { +describe('Search Slider Filter', () => { const loginPage = new LoginPage(); const searchDialog = new SearchDialog(); @@ -51,7 +51,7 @@ describe('Search Number Range Filter', () => { }); const uploadActions = new UploadActions(this.alfrescoJsApi); - beforeAll(async (done) => { + beforeAll(async () => { await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); @@ -60,18 +60,17 @@ describe('Search Number Range Filter', () => { await this.alfrescoJsApi.login(acsUser.id, acsUser.password); file2Bytes = await uploadActions.uploadFile(file2BytesModel.location, file2BytesModel.name, '-my-'); - await browser.driver.sleep(15000); + await browser.sleep(15000); - loginPage.loginToContentServices(acsUser.id, acsUser.password); + await loginPage.loginToContentServices(acsUser.id, acsUser.password); - searchDialog.checkSearchIconIsVisible() - .clickOnSearchIcon() - .enterTextAndPressEnter('*'); + await searchDialog.checkSearchIconIsVisible(); + await searchDialog.clickOnSearchIcon(); + await searchDialog.enterTextAndPressEnter('*'); - done(); }); - afterAll(async (done) => { + afterAll(async () => { try { await this.alfrescoJsApi.login(acsUser.id, acsUser.password); await uploadActions.deleteFileOrFolder(file2Bytes.entry.id); @@ -80,169 +79,162 @@ describe('Search Number Range Filter', () => { await navigationBarPage.clickLogoutButton(); - done(); }); - beforeEach(() => { - searchFilters.checkSizeSliderFilterIsDisplayed() - .clickSizeSliderFilterHeader() - .checkSizeSliderFilterIsExpanded(); - }); - - afterEach(async (done) => { + afterEach(async () => { await browser.refresh(); - done(); }); - it('[C276970] Should be able to expand/collapse Search Size Slider', () => { - searchFilters.checkSizeSliderFilterIsExpanded() - .clickSizeSliderFilterHeader(); - sizeSliderFilter.checkSliderIsDisplayed() - .checkClearButtonIsDisplayed() - .checkClearButtonIsEnabled(); - searchFilters.checkSizeSliderFilterIsCollapsed(); + it('[C276970] Should be able to expand/collapse Search Size Slider', async () => { + await searchFilters.checkSizeSliderFilterIsDisplayed(); + await searchFilters.clickSizeSliderFilterHeader(); + await sizeSliderFilter.checkSliderIsDisplayed(); + await sizeSliderFilter.checkClearButtonIsDisplayed(); + await sizeSliderFilter.checkClearButtonIsEnabled(); + await searchFilters.clickSizeSliderFilterHeader(); + await searchFilters.checkSizeSliderFilterIsCollapsed(); + await sizeSliderFilter.checkSliderIsNotDisplayed(); + await sizeSliderFilter.checkClearButtonIsNotDisplayed(); }); - it('[C276972] Should be keep value when Search Size Slider is collapsed', () => { + it('[C276972] Should be keep value when Search Size Slider is collapsed', async () => { const size = 5; - sizeSliderFilter.checkSliderIsDisplayed().setValue(size); - searchFilters.clickSizeSliderFilterHeader() - .checkSizeSliderFilterIsCollapsed() - .clickSizeSliderFilterHeader() - .checkSizeSliderFilterIsExpanded() - .checkSizeSliderFilterIsDisplayed(); - expect(sizeSliderFilter.getValue()).toEqual(`${size}`); + + await searchFilters.checkSizeSliderFilterIsDisplayed(); + await searchFilters.clickSizeSliderFilterHeader(); + await sizeSliderFilter.checkSliderIsDisplayed(); + await sizeSliderFilter.setValue(size); + await searchFilters.clickSizeSliderFilterHeader(); + await searchFilters.checkSizeSliderFilterIsCollapsed(); + await searchFilters.clickSizeSliderFilterHeader(); + await searchFilters.checkSizeSliderFilterIsExpanded(); + await searchFilters.checkSizeSliderFilterIsDisplayed(); + + await expect(await sizeSliderFilter.getValue()).toEqual(`${size}`); }); - it('[C276981] Should be able to clear value in Search Size Slider', () => { + it('[C276981] Should be able to clear value in Search Size Slider', async () => { const size = 5; - sizeSliderFilter.checkSliderIsDisplayed().setValue(size); - searchResults.sortBySize('DESC') - .tableIsLoaded(); - browser.controlFlow().execute(async () => { - const results = await dataTable.geCellElementDetail('Size'); - for (const currentResult of results) { - try { - const currentSize = await currentResult.getAttribute('title'); - if (currentSize && currentSize.trim() !== '') { - await expect(parseInt(currentSize, 10) <= 5000).toBe(true); - } - } catch (e) { + await searchFilters.checkSizeSliderFilterIsDisplayed(); + await searchFilters.clickSizeSliderFilterHeader(); + await sizeSliderFilter.checkSliderIsDisplayed(); + await sizeSliderFilter.setValue(size); + await searchResults.sortBySize('DESC'); + await searchResults.tableIsLoaded(); + + const results: any = dataTable.geCellElementDetail('Size'); + for (const currentResult of results) { + try { + const currentSize = await currentResult.getAttribute('title'); + if (currentSize && currentSize.trim() !== '') { + await expect(parseInt(currentSize, 10) <= 5000).toBe(true); } + } catch (e) { } - }); + } - sizeSliderFilter.checkSliderIsDisplayed() - .clickClearButton(); + await sizeSliderFilter.checkSliderIsDisplayed(); + await sizeSliderFilter.clickClearButton(); - searchResults.sortBySize('DESC') - .tableIsLoaded(); + await searchResults.sortBySize('DESC'); + await searchResults.tableIsLoaded(); - browser.controlFlow().execute(async () => { - const results = await dataTable.geCellElementDetail('Size'); - for (const currentResult of results) { - try { - - const currentSize = await currentResult.getAttribute('title'); - if (currentSize && currentSize.trim() !== '') { - await expect(parseInt(currentSize, 10) >= 5000).toBe(true); - } - } catch (e) { + const resultsSize: any = dataTable.geCellElementDetail('Size'); + for (const currentResult of resultsSize) { + try { + const currentSize = await currentResult.getAttribute('title'); + if (currentSize && currentSize.trim() !== '') { + await expect(parseInt(currentSize, 10) >= 5000).toBe(true); } + } catch (e) { } - }); + } }); describe('Configuration change', () => { let jsonFile; - beforeEach(() => { + beforeEach(async () => { jsonFile = SearchConfiguration.getConfiguration(); + await navigationBarPage.clickContentServicesButton(); }); it('[C276983] Should be able to disable thumb label in Search Size Slider', async () => { - navigationBarPage.clickContentServicesButton(); - jsonFile.categories[2].component.settings.thumbLabel = false; await LocalStorageUtil.setConfigField('search', JSON.stringify(jsonFile)); - searchDialog.checkSearchIconIsVisible() - .clickOnSearchIcon() - .enterTextAndPressEnter('*'); + await searchDialog.checkSearchIconIsVisible(); + await searchDialog.clickOnSearchIcon(); + await searchDialog.enterTextAndPressEnter('*'); - searchFilters.checkSizeSliderFilterIsDisplayed() - .clickSizeSliderFilterHeader() - .checkSizeSliderFilterIsExpanded(); + await searchFilters.checkSizeSliderFilterIsDisplayed(); + await searchFilters.clickSizeSliderFilterHeader(); + await searchFilters.checkSizeSliderFilterIsExpanded(); - sizeSliderFilter.checkSliderWithThumbLabelIsNotDisplayed(); + await sizeSliderFilter.checkSliderWithThumbLabelIsNotDisplayed(); }); it('[C276985] Should be able to set min value for Search Size Slider', async () => { - navigationBarPage.clickContentServicesButton(); - const minSize = 3; jsonFile.categories[2].component.settings.min = minSize; await LocalStorageUtil.setConfigField('search', JSON.stringify(jsonFile)); - searchDialog.checkSearchIconIsVisible() - .clickOnSearchIcon() - .enterTextAndPressEnter('*'); + await searchDialog.checkSearchIconIsVisible(); + await searchDialog.clickOnSearchIcon(); + await searchDialog.enterTextAndPressEnter('*'); - searchFilters.checkSizeSliderFilterIsDisplayed() - .clickSizeSliderFilterHeader() - .checkSizeSliderFilterIsExpanded(); + await searchFilters.checkSizeSliderFilterIsDisplayed(); + await searchFilters.clickSizeSliderFilterHeader(); + await searchFilters.checkSizeSliderFilterIsExpanded(); - sizeSliderFilter.checkSliderIsDisplayed(); + await sizeSliderFilter.checkSliderIsDisplayed(); - expect(sizeSliderFilter.getMinValue()).toEqual(`${minSize}`); + await expect(await sizeSliderFilter.getMinValue()).toEqual(`${minSize}`); }); it('[C276986] Should be able to set max value for Search Size Slider', async () => { - navigationBarPage.clickContentServicesButton(); - const maxSize = 50; jsonFile.categories[2].component.settings.max = maxSize; await LocalStorageUtil.setConfigField('search', JSON.stringify(jsonFile)); - searchDialog.checkSearchIconIsVisible() - .clickOnSearchIcon() - .enterTextAndPressEnter('*'); + await searchDialog.checkSearchIconIsVisible(); + await searchDialog.clickOnSearchIcon(); + await searchDialog.enterTextAndPressEnter('*'); - searchFilters.checkSizeSliderFilterIsDisplayed() - .clickSizeSliderFilterHeader() - .checkSizeSliderFilterIsExpanded(); + await searchFilters.checkSizeSliderFilterIsDisplayed(); + await searchFilters.clickSizeSliderFilterHeader(); + await searchFilters.checkSizeSliderFilterIsExpanded(); - sizeSliderFilter.checkSliderIsDisplayed(); + await sizeSliderFilter.checkSliderIsDisplayed(); - expect(sizeSliderFilter.getMaxValue()).toEqual(`${maxSize}`); + await expect(await sizeSliderFilter.getMaxValue()).toEqual(`${maxSize}`); }); it('[C276987] Should be able to set steps for Search Size Slider', async () => { - navigationBarPage.clickContentServicesButton(); - const step = 10; jsonFile.categories[2].component.settings.step = step; await LocalStorageUtil.setConfigField('search', JSON.stringify(jsonFile)); - searchDialog.checkSearchIconIsVisible() - .clickOnSearchIcon() - .enterTextAndPressEnter('*'); + await searchDialog.checkSearchIconIsVisible(); + await searchDialog.clickOnSearchIcon(); + await searchDialog.enterTextAndPressEnter('*'); - searchFilters.checkSizeSliderFilterIsDisplayed() - .clickSizeSliderFilterHeader() - .checkSizeSliderFilterIsExpanded(); + await searchFilters.checkSizeSliderFilterIsDisplayed(); + await searchFilters.clickSizeSliderFilterHeader(); + await searchFilters.checkSizeSliderFilterIsExpanded(); const randomValue = 5; - sizeSliderFilter.checkSliderIsDisplayed() - .setValue(randomValue); - expect(sizeSliderFilter.getValue()).toEqual(`0`); - sizeSliderFilter.setValue(step); - expect(sizeSliderFilter.getValue()).toEqual(`${step}`); + await sizeSliderFilter.checkSliderIsDisplayed(); + await sizeSliderFilter.setValue(randomValue); + + await expect(await sizeSliderFilter.getValue()).toEqual(`0`); + await sizeSliderFilter.setValue(step); + await expect(await sizeSliderFilter.getValue()).toEqual(`${step}`); }); }); }); diff --git a/e2e/search/components/search-sorting-picker.e2e.ts b/e2e/search/components/search-sorting-picker.e2e.ts index f748d049e1..91b8dc159c 100644 --- a/e2e/search/components/search-sorting-picker.e2e.ts +++ b/e2e/search/components/search-sorting-picker.e2e.ts @@ -15,7 +15,12 @@ * limitations under the License. */ -import { LoginPage, LocalStorageUtil, BrowserActions, SearchSortingPickerPage, UploadActions } from '@alfresco/adf-testing'; +import { + LoginPage, + LocalStorageUtil, + SearchSortingPickerPage, + UploadActions +} from '@alfresco/adf-testing'; import { SearchDialog } from '../../pages/adf/dialog/searchDialog'; import { SearchResultsPage } from '../../pages/adf/searchResultsPage'; import { NavigationBarPage } from '../../pages/adf/navigationBarPage'; @@ -59,53 +64,47 @@ describe('Search Sorting Picker', () => { const search = '_png_file.png'; let jsonFile; - beforeAll(async (done) => { + beforeAll(async () => { await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); await this.alfrescoJsApi.core.peopleApi.addPerson(acsUser); await this.alfrescoJsApi.login(acsUser.id, acsUser.password); pngA = await uploadActions.uploadFile(pngAModel.location, pngAModel.name, '-my-'); - await browser.driver.sleep(3000); pngD = await uploadActions.uploadFile(pngDModel.location, pngDModel.name, '-my-'); - await browser.driver.sleep(12000); + await browser.sleep(12000); - loginPage.loginToContentServices(acsUser.id, acsUser.password); + await loginPage.loginToContentServices(acsUser.id, acsUser.password); - done(); }); - afterAll(async (done) => { + afterAll(async () => { await uploadActions.deleteFileOrFolder(pngA.entry.id); await uploadActions.deleteFileOrFolder(pngD.entry.id); await navigationBarPage.clickLogoutButton(); - done(); }); - beforeEach(async (done) => { - searchDialog.checkSearchIconIsVisible() - .clickOnSearchIcon() - .enterTextAndPressEnter(search); - done(); + beforeEach(async () => { + await searchDialog.clickOnSearchIcon(); + await searchDialog.enterTextAndPressEnter(search); }); - afterEach(async (done) => { - await BrowserActions.getUrl(browser.params.testConfig.adf.url); - done(); + afterEach(async () => { + await navigationBarPage.clickHomeButton(); }); - it(`[C277269] Should see the "sort by" option when search results are displayed in search results page`, () => { - searchSortingPicker.checkSortingSelectorIsDisplayed(); + it(`[C277269] Should see the "sort by" option when search results are displayed in search results page`, async () => { + await searchSortingPicker.checkSortingSelectorIsDisplayed(); }); - it(`[C277270] Should see the icon for ASC and DESC sort when search results are displayed in the search results page`, () => { - searchSortingPicker.checkOrderArrowIsDisplayed(); + it(`[C277270] Should see the icon for ASC and DESC sort when search results are displayed in the search results page`, async () => { + await searchSortingPicker.checkOrderArrowIsDisplayed(); }); it('[C277271] Should be able to add a custom search sorter in the "sort by" option', async () => { - navigationBarPage.clickContentServicesButton(); + await navigationBarPage.clickContentServicesButton(); jsonFile = SearchConfiguration.getConfiguration(); jsonFile.sorting.options.push({ 'key': 'Modifier', @@ -116,34 +115,34 @@ describe('Search Sorting Picker', () => { }); await LocalStorageUtil.setConfigField('search', JSON.stringify(jsonFile)); - searchDialog.checkSearchIconIsVisible() - .clickOnSearchIcon() - .enterTextAndPressEnter(search); + await searchDialog.checkSearchIconIsVisible(); + await searchDialog.clickOnSearchIcon(); + await searchDialog.enterTextAndPressEnter(search); - searchSortingPicker.checkSortingSelectorIsDisplayed() - .clickSortingSelector() - .checkOptionsDropdownIsDisplayed() - .checkOptionIsDisplayed('Modifier'); + await searchSortingPicker.checkSortingSelectorIsDisplayed(); + await searchSortingPicker.clickSortingSelector(); + await searchSortingPicker.checkOptionsDropdownIsDisplayed(); + await searchSortingPicker.checkOptionIsDisplayed('Modifier'); }); it('[C277272] Should be able to exclude a standard search sorter from the sorting option', async () => { - navigationBarPage.clickContentServicesButton(); + await navigationBarPage.clickContentServicesButton(); jsonFile = SearchConfiguration.getConfiguration(); const removedOption = jsonFile.sorting.options.splice(0, 1); await LocalStorageUtil.setConfigField('search', JSON.stringify(jsonFile)); - searchDialog.checkSearchIconIsVisible() - .clickOnSearchIcon() - .enterTextAndPressEnter(search); + await searchDialog.checkSearchIconIsVisible(); + await searchDialog.clickOnSearchIcon(); + await searchDialog.enterTextAndPressEnter(search); - searchSortingPicker.checkSortingSelectorIsDisplayed() - .clickSortingSelector() - .checkOptionsDropdownIsDisplayed() - .checkOptionIsNotDisplayed(removedOption[0].label); + await searchSortingPicker.checkSortingSelectorIsDisplayed(); + await searchSortingPicker.clickSortingSelector(); + await searchSortingPicker.checkOptionsDropdownIsDisplayed(); + await searchSortingPicker.checkOptionIsNotDisplayed(removedOption[0].label); }); it('[C277273] Should be able to set a default order for a search sorting option', async () => { - navigationBarPage.clickContentServicesButton(); + await navigationBarPage.clickContentServicesButton(); jsonFile = SearchConfiguration.getConfiguration(); jsonFile.sorting.options[0].ascending = false; @@ -157,50 +156,46 @@ describe('Search Sorting Picker', () => { await LocalStorageUtil.setConfigField('search', JSON.stringify(jsonFile)); - searchDialog.checkSearchIconIsVisible() - .clickOnSearchIcon() - .enterTextAndPressEnter(search); + await searchDialog.checkSearchIconIsVisible(); + await searchDialog.clickOnSearchIcon(); + await searchDialog.enterTextAndPressEnter(search); - searchSortingPicker.checkSortingSelectorIsDisplayed() - .clickSortingSelector() - .checkOptionIsDisplayed('Name') - .clickSortingOption('Name'); - expect(searchSortingPicker.checkOrderArrowIsDownward()).toBe(true); + await searchSortingPicker.checkSortingSelectorIsDisplayed(); + await searchSortingPicker.clickSortingSelector(); + await searchSortingPicker.checkOptionIsDisplayed('Name'); + await searchSortingPicker.clickSortingOption('Name'); + await expect(await searchSortingPicker.checkOrderArrowIsDownward()).toBe(true); }); - it('[C277280] Should be able to sort the search results by "Name" ASC', () => { - searchFilters.checkSearchFiltersIsDisplayed(); - searchFilters.creatorCheckListFiltersPage().filterBy(`${acsUser.firstName} ${acsUser.lastName}`); - searchResults.sortByName('ASC'); + it('[C277280] Should be able to sort the search results by "Name" ASC', async () => { + await searchFilters.checkSearchFiltersIsDisplayed(); + await searchFilters.creatorCheckListFiltersPage().filterBy(`${acsUser.firstName} ${acsUser.lastName}`); + await searchResults.sortByName('ASC'); - expect(searchResults.checkListIsOrderedByNameAsc()).toBe(true); + await expect(await searchResults.checkListIsOrderedByNameAsc()).toBe(true); }); - it('[C277281] Should be able to sort the search results by "Name" DESC', () => { - searchFilters.checkSearchFiltersIsDisplayed(); - searchFilters.creatorCheckListFiltersPage().filterBy(`${acsUser.firstName} ${acsUser.lastName}`); - searchResults.sortByName('DESC'); - expect(searchResults.checkListIsOrderedByNameDesc()).toBe(true); + it('[C277281] Should be able to sort the search results by "Name" DESC', async () => { + await searchFilters.checkSearchFiltersIsDisplayed(); + await searchFilters.creatorCheckListFiltersPage().filterBy(`${acsUser.firstName} ${acsUser.lastName}`); + await searchResults.sortByName('DESC'); + await expect(await searchResults.checkListIsOrderedByNameDesc()).toBe(true); }); - it('[C277286] Should be able to sort the search results by "Created Date" ASC', () => { - searchResults.sortByCreated('ASC'); - browser.controlFlow().execute(async () => { - const results = await searchResults.dataTable.geCellElementDetail('Created'); - expect(contentServices.checkElementsDateSortedAsc(results)).toBe(true); - }); + it('[C277286] Should be able to sort the search results by "Created Date" ASC', async () => { + await searchResults.sortByCreated('ASC'); + const results: any = searchResults.dataTable.geCellElementDetail('Created'); + await expect(contentServices.checkElementsDateSortedAsc(results)).toBe(true); }); - it('[C277287] Should be able to sort the search results by "Created Date" DESC', () => { - searchResults.sortByCreated('DESC'); - browser.controlFlow().execute(async () => { - const results = await searchResults.dataTable.geCellElementDetail('Created'); - expect(contentServices.checkElementsDateSortedDesc(results)).toBe(true); - }); + it('[C277287] Should be able to sort the search results by "Created Date" DESC', async () => { + await searchResults.sortByCreated('DESC'); + const results = searchResults.dataTable.geCellElementDetail('Created'); + await expect(contentServices.checkElementsDateSortedDesc(results)).toBe(true); }); it('[C277288] Should be able to sort the search results by "Modified Date" ASC', async () => { - navigationBarPage.clickContentServicesButton(); + await navigationBarPage.clickContentServicesButton(); jsonFile = SearchConfiguration.getConfiguration(); jsonFile.sorting.options.push({ @@ -212,24 +207,22 @@ describe('Search Sorting Picker', () => { }); await LocalStorageUtil.setConfigField('search', JSON.stringify(jsonFile)); - searchDialog.checkSearchIconIsVisible() - .clickOnSearchIcon() - .enterTextAndPressEnter(search); + await searchDialog.checkSearchIconIsVisible(); + await searchDialog.clickOnSearchIcon(); + await searchDialog.enterTextAndPressEnter(search); - searchSortingPicker.checkSortingSelectorIsDisplayed() - .sortBy('ASC', 'Modified Date'); + await searchSortingPicker.checkSortingSelectorIsDisplayed(); + await searchSortingPicker.sortBy('ASC', 'Modified Date'); - browser.controlFlow().execute(async () => { - const idList = await contentServices.getElementsDisplayedId(); - const numberOfElements = await contentServices.numberOfResultsDisplayed(); + const idList = await contentServices.getElementsDisplayedId(); + const numberOfElements = await contentServices.numberOfResultsDisplayed(); - const nodeList = await nodeActions.getNodesDisplayed(this.alfrescoJsApi, idList, numberOfElements); - const modifiedDateList = []; - for (let i = 0; i < nodeList.length; i++) { - modifiedDateList.push(new Date(nodeList[i].entry.modifiedAt)); - } - expect(contentServices.checkElementsDateSortedAsc(modifiedDateList)).toBe(true); - }); + const nodeList = await nodeActions.getNodesDisplayed(this.alfrescoJsApi, idList, numberOfElements); + const modifiedDateList = []; + for (let i = 0; i < nodeList.length; i++) { + modifiedDateList.push(new Date(nodeList[i].entry.modifiedAt)); + } + await expect(contentServices.checkElementsDateSortedAsc(modifiedDateList)).toBe(true); }); }); diff --git a/e2e/search/components/search-text.e2e.ts b/e2e/search/components/search-text.e2e.ts index 475849b97c..9cd0ddb3b2 100644 --- a/e2e/search/components/search-text.e2e.ts +++ b/e2e/search/components/search-text.e2e.ts @@ -42,7 +42,7 @@ describe('Search component - Text widget', () => { const acsUser = new AcsUserModel(); const newFolderModel = new FolderModel({ 'name': 'newFolder', 'description': 'newDescription' }); - beforeAll(async (done) => { + beforeAll(async () => { this.alfrescoJsApi = new AlfrescoApi({ provider: 'ECM', @@ -64,66 +64,66 @@ describe('Search component - Text widget', () => { } }, {}, {}); - await browser.driver.sleep(15000); + await browser.sleep(15000); await loginPage.loginToContentServicesUsingUserModel(acsUser); - done(); }); afterAll(async () => { await navigationBarPage.clickLogoutButton(); }); - it('[C289329] Placeholder should be displayed in the widget when the input string is empty', () => { - BrowserActions.getUrl(browser.params.testConfig.adf.url + '/search;q=*'); - searchResultPage.tableIsLoaded(); + it('[C289329] Placeholder should be displayed in the widget when the input string is empty', async () => { + await BrowserActions.getUrl(browser.params.testConfig.adf.url + '/search;q=*'); + await searchResultPage.tableIsLoaded(); - searchFiltersPage.checkNameFilterIsDisplayed(); - expect(searchFiltersPage.textFiltersPage().getNamePlaceholder()).toEqual('Enter the name'); + await searchFiltersPage.checkNameFilterIsDisplayed(); + await expect(await searchFiltersPage.textFiltersPage().getNamePlaceholder()).toEqual('Enter the name'); }); describe('configuration change', () => { let jsonFile; - beforeAll(() => { + beforeAll(async () => { jsonFile = SearchConfiguration.getConfiguration(); }); it('[C289330] Should be able to change the Field setting', async () => { - BrowserActions.getUrl(browser.params.testConfig.adf.url + '/search;q=*'); - searchResultPage.tableIsLoaded(); + await BrowserActions.getUrl(browser.params.testConfig.adf.url + '/search;q=*'); + await searchResultPage.tableIsLoaded(); - searchFiltersPage.checkCheckListFilterIsDisplayed(); - searchFiltersPage.clickCheckListFilter(); - searchFiltersPage.checkListFiltersPage().clickCheckListOption('Folder'); + await searchFiltersPage.checkCheckListFilterIsDisplayed(); + await searchFiltersPage.clickCheckListFilter(); + await searchFiltersPage.checkListFiltersPage().clickCheckListOption('Folder'); - searchFiltersPage.checkNameFilterIsDisplayed(); - searchFiltersPage.textFiltersPage().searchByName(newFolderModel.name); - searchResultPage.checkContentIsDisplayed(newFolderModel.name); + await searchFiltersPage.checkNameFilterIsDisplayed(); + await searchFiltersPage.textFiltersPage().searchByName(newFolderModel.name); + await searchResultPage.checkContentIsDisplayed(newFolderModel.name); - searchFiltersPage.textFiltersPage().searchByName(newFolderModel.description); - searchResultPage.checkContentIsNotDisplayed(newFolderModel.name); + await searchFiltersPage.textFiltersPage().searchByName(newFolderModel.description); + await searchResultPage.checkContentIsNotDisplayed(newFolderModel.name); jsonFile.categories[0].component.settings.field = 'cm:description'; - navigationBarPage.clickContentServicesButton(); + await navigationBarPage.clickContentServicesButton(); await LocalStorageUtil.setConfigField('search', JSON.stringify(jsonFile)); - searchDialog.clickOnSearchIcon().enterTextAndPressEnter('*'); - searchResultPage.tableIsLoaded(); + await searchDialog.clickOnSearchIcon(); + await searchDialog.enterTextAndPressEnter('*'); + await searchResultPage.tableIsLoaded(); - searchFiltersPage.checkCheckListFilterIsDisplayed(); - searchFiltersPage.clickCheckListFilter(); - searchFiltersPage.checkListFiltersPage().clickCheckListOption('Folder'); + await searchFiltersPage.checkCheckListFilterIsDisplayed(); + await searchFiltersPage.clickCheckListFilter(); + await searchFiltersPage.checkListFiltersPage().clickCheckListOption('Folder'); - searchFiltersPage.checkNameFilterIsDisplayed(); - searchFiltersPage.textFiltersPage().searchByName(newFolderModel.name); - searchResultPage.checkContentIsNotDisplayed(newFolderModel.name); + await searchFiltersPage.checkNameFilterIsDisplayed(); + await searchFiltersPage.textFiltersPage().searchByName(newFolderModel.name); + await searchResultPage.checkContentIsNotDisplayed(newFolderModel.name); - searchFiltersPage.textFiltersPage().searchByName(newFolderModel.description); - searchResultPage.checkContentIsDisplayed(newFolderModel.name); + await searchFiltersPage.textFiltersPage().searchByName(newFolderModel.description); + await searchResultPage.checkContentIsDisplayed(newFolderModel.name); }); }); }); diff --git a/e2e/search/search-component.e2e.ts b/e2e/search/search-component.e2e.ts index d41de82253..a4bf0fdd9c 100644 --- a/e2e/search/search-component.e2e.ts +++ b/e2e/search/search-component.e2e.ts @@ -79,7 +79,7 @@ describe('Search component - Search Bar', () => { let fileHighlightUploaded; - beforeAll(async (done) => { + beforeAll(async () => { await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); await this.alfrescoJsApi.core.peopleApi.addPerson(acsUser); @@ -103,178 +103,161 @@ describe('Search component - Search Bar', () => { filesToDelete.push(await uploadActions.createFolder(secondFolder.name, '-my-')); filesToDelete.push(await uploadActions.createFolder(thirdFolder.name, '-my-')); - await browser.driver.sleep(15000); // wait search index previous file/folder uploaded + await browser.sleep(15000); // wait search index previous file/folder uploaded await loginPage.loginToContentServicesUsingUserModel(acsUser); - done(); }); - afterAll(async (done) => { - - filesToDelete.forEach(async (currentNode) => { + afterAll(async () => { + for (const currentNode of filesToDelete) { await uploadActions.deleteFileOrFolder(currentNode.entry.id); - }); + } await navigationBarPage.clickLogoutButton(); - - done(); }); - afterEach(async (done) => { + afterEach(async () => { await BrowserActions.getUrl(browser.params.testConfig.adf.url); - done(); + }); - it('[C272798] Search bar should be visible', () => { - searchDialog - .checkSearchBarIsNotVisible() - .checkSearchIconIsVisible(); + it('[C272798] Search bar should be visible', async () => { + await searchDialog.checkSearchBarIsNotVisible(); + await searchDialog.checkSearchIconIsVisible(); - searchDialog - .clickOnSearchIcon() - .checkSearchBarIsVisible() - .checkSearchIconIsVisible(); + await searchDialog.clickOnSearchIcon(); + await searchDialog.checkSearchBarIsVisible(); + await searchDialog.checkSearchIconIsVisible(); - BrowserActions.closeMenuAndDialogs(); + await BrowserActions.closeMenuAndDialogs(); - searchDialog - .checkSearchBarIsNotVisible() - .checkSearchIconIsVisible(); + await searchDialog.checkSearchBarIsNotVisible(); + await searchDialog.checkSearchIconIsVisible(); }); - it('[C272799] Should be possible to hide search bar after input', () => { - searchDialog - .checkSearchIconIsVisible() - .clickOnSearchIcon() - .enterText(firstFolderModel.shortName); + it('[C272799] Should be possible to hide search bar after input', async () => { + await searchDialog.checkSearchIconIsVisible(); + await searchDialog.clickOnSearchIcon(); + await searchDialog.enterText(firstFolderModel.shortName); }); - it('[C260255] Should display message when searching for an inexistent file', () => { - searchDialog - .checkSearchBarIsNotVisible() - .clickOnSearchIcon() - .checkNoResultMessageIsNotDisplayed() - .enterText(search.inactive.name) - .checkNoResultMessageIsDisplayed(); + it('[C260255] Should display message when searching for an inexistent file', async () => { + await searchDialog.checkSearchBarIsNotVisible(); + await searchDialog.clickOnSearchIcon(); + await searchDialog.checkNoResultMessageIsNotDisplayed(); + await searchDialog.enterText(search.inactive.name); + await searchDialog.checkNoResultMessageIsDisplayed(); }); - it('[C260256] Should display file/folder in search suggestion when typing first characters', () => { - searchDialog - .clickOnSearchIcon() - .checkSearchBarIsVisible() - .enterText(firstFolderModel.shortName); + it('[C260256] Should display file/folder in search suggestion when typing first characters', async () => { + await searchDialog.clickOnSearchIcon(); + await searchDialog.checkSearchBarIsVisible(); + await searchDialog.enterText(firstFolderModel.shortName); - searchDialog.resultTableContainsRow(firstFolderModel.name); + await searchDialog.resultTableContainsRow(firstFolderModel.name); - expect(searchDialog.getSpecificRowsHighlightName(firstFolderModel.name)).toEqual(firstFolderModel.shortName); - expect(searchDialog.getSpecificRowsAuthor(firstFolderModel.name)).toEqual(acsUser.firstName + ' ' + acsUser.lastName); - expect(searchDialog.getSpecificRowsCompleteName(firstFolderModel.name)).toEqual(firstFolderModel.name); + await expect(await searchDialog.getSpecificRowsHighlightName(firstFolderModel.name)).toEqual(firstFolderModel.shortName); + await expect(await searchDialog.getSpecificRowsAuthor(firstFolderModel.name)).toEqual(acsUser.firstName + ' ' + acsUser.lastName); + await expect(await searchDialog.getSpecificRowsCompleteName(firstFolderModel.name)).toEqual(firstFolderModel.name); - searchDialog.clearText(); + await searchDialog.clearText(); - searchDialog.clickOnSearchIcon().enterText(firstFileModel.shortName); - searchDialog.resultTableContainsRow(firstFileModel.name); + await searchDialog.clickOnSearchIcon(); + await searchDialog.enterText(firstFileModel.shortName); + await searchDialog.resultTableContainsRow(firstFileModel.name); - expect(searchDialog.getSpecificRowsHighlightName(firstFileModel.name)).toEqual(firstFileModel.shortName); - expect(searchDialog.getSpecificRowsAuthor(firstFileModel.name)).toEqual(acsUser.firstName + ' ' + acsUser.lastName); + await expect(await searchDialog.getSpecificRowsHighlightName(firstFileModel.name)).toEqual(firstFileModel.shortName); + await expect(await searchDialog.getSpecificRowsAuthor(firstFileModel.name)).toEqual(acsUser.firstName + ' ' + acsUser.lastName); - expect(searchDialog.getSpecificRowsCompleteName(firstFileModel.name)).toEqual(firstFileModel.name); + await expect(await searchDialog.getSpecificRowsCompleteName(firstFileModel.name)).toEqual(firstFileModel.name); }); - it('[C272800] Should display file/folder in search suggestion when typing name', () => { - searchDialog - .clickOnSearchIcon() - .checkSearchBarIsVisible() - .enterText(firstFolderModel.name); + it('[C272800] Should display file/folder in search suggestion when typing name', async () => { + await searchDialog.clickOnSearchIcon(); + await searchDialog.checkSearchBarIsVisible(); + await searchDialog.enterText(firstFolderModel.name); - searchDialog.resultTableContainsRow(firstFolderModel.name); + await searchDialog.resultTableContainsRow(firstFolderModel.name); - expect(searchDialog.getSpecificRowsHighlightName(firstFolderModel.name)).toEqual(firstFolderModel.name); - expect(searchDialog.getSpecificRowsAuthor(firstFolderModel.name)).toEqual(acsUser.firstName + ' ' + acsUser.lastName); - expect(searchDialog.getSpecificRowsCompleteName(firstFolderModel.name)).toEqual(firstFolderModel.name); + await expect(await searchDialog.getSpecificRowsHighlightName(firstFolderModel.name)).toEqual(firstFolderModel.name); + await expect(await searchDialog.getSpecificRowsAuthor(firstFolderModel.name)).toEqual(acsUser.firstName + ' ' + acsUser.lastName); + await expect(await searchDialog.getSpecificRowsCompleteName(firstFolderModel.name)).toEqual(firstFolderModel.name); - searchDialog.clearText(); + await searchDialog.clearText(); - searchDialog.clickOnSearchIcon().enterText(firstFileModel.name); - searchDialog.resultTableContainsRow(firstFileModel.name); + await searchDialog.clickOnSearchIcon(); + await searchDialog.enterText(firstFileModel.name); + await searchDialog.resultTableContainsRow(firstFileModel.name); - expect(searchDialog.getSpecificRowsHighlightName(firstFileModel.name)).toEqual(firstFileModel.name); - expect(searchDialog.getSpecificRowsAuthor(firstFileModel.name)).toEqual(acsUser.firstName + ' ' + acsUser.lastName); - expect(searchDialog.getSpecificRowsCompleteName(firstFileModel.name)).toEqual(firstFileModel.name); + await expect(await searchDialog.getSpecificRowsHighlightName(firstFileModel.name)).toEqual(firstFileModel.name); + await expect(await searchDialog.getSpecificRowsAuthor(firstFileModel.name)).toEqual(acsUser.firstName + ' ' + acsUser.lastName); + await expect(await searchDialog.getSpecificRowsCompleteName(firstFileModel.name)).toEqual(firstFileModel.name); }); it('[C260257] Should display content when clicking on folder from search suggestions', async () => { - searchDialog - .clickOnSearchIcon() - .checkSearchBarIsVisible() - .enterText(firstFolderModel.shortName); + await searchDialog.clickOnSearchIcon(); + await searchDialog.checkSearchBarIsVisible(); + await searchDialog.enterText(firstFolderModel.shortName); - searchDialog.resultTableContainsRow(firstFolderModel.name); - searchDialog.clickOnSpecificRow(firstFolderModel.name); + await searchDialog.resultTableContainsRow(firstFolderModel.name); + await searchDialog.clickOnSpecificRow(firstFolderModel.name); - expect(contentServicesPage.currentFolderName()).toEqual(firstFolderModel.name); + await expect(await contentServicesPage.currentFolderName()).toEqual(firstFolderModel.name); - searchDialog - .checkSearchIconIsVisible() - .clickOnSearchIcon() - .checkSearchBarIsVisible() - .enterText(firstFileModel.name) - .resultTableContainsRow(firstFileModel.name); + await searchDialog.checkSearchIconIsVisible(); + await searchDialog.clickOnSearchIcon(); + await searchDialog.checkSearchBarIsVisible(); + await searchDialog.enterText(firstFileModel.name); + await searchDialog.resultTableContainsRow(firstFileModel.name); - searchDialog.clickOnSpecificRow(firstFileModel.name); - expect(await viewerPage.getDisplayedFileName()).toEqual(firstFileModel.name); + await searchDialog.clickOnSpecificRow(firstFileModel.name); + await expect(await viewerPage.getDisplayedFileName()).toEqual(firstFileModel.name); - viewerPage.clickCloseButton(); + await viewerPage.clickCloseButton(); }); - it('[C272801] Should display message when searching for non-existent folder', () => { - searchDialog - .checkSearchIconIsVisible() - .clickOnSearchIcon() - .checkSearchBarIsVisible() - .enterTextAndPressEnter(search.inactive.name); + it('[C272801] Should display message when searching for non-existent folder', async () => { + await searchDialog.checkSearchIconIsVisible(); + await searchDialog.clickOnSearchIcon(); + await searchDialog.checkSearchBarIsVisible(); + await searchDialog.enterTextAndPressEnter(search.inactive.name); - searchResultPage.checkNoResultMessageIsDisplayed(); + await searchResultPage.checkNoResultMessageIsDisplayed(); }); - it('[C272802] Should be able to find an existent folder in search results', () => { - searchDialog - .checkSearchIconIsVisible() - .clickOnSearchIcon() - .checkSearchBarIsVisible() - .enterTextAndPressEnter(firstFolderModel.name); + it('[C272802] Should be able to find an existent folder in search results', async () => { + await searchDialog.checkSearchIconIsVisible(); + await searchDialog.clickOnSearchIcon(); + await searchDialog.checkSearchBarIsVisible(); + await searchDialog.enterTextAndPressEnter(firstFolderModel.name); - searchResultPage.checkContentIsDisplayed(firstFolderModel.name); + await searchResultPage.checkContentIsDisplayed(firstFolderModel.name); }); - it('[C260258] Should be able to find an existent file in search results', () => { - searchDialog - .checkSearchIconIsVisible() - .clickOnSearchIcon() - .checkSearchBarIsVisible() - .enterTextAndPressEnter(firstFileModel.name); + it('[C260258] Should be able to find an existent file in search results', async () => { + await searchDialog.checkSearchIconIsVisible(); + await searchDialog.clickOnSearchIcon(); + await searchDialog.checkSearchBarIsVisible(); + await searchDialog.enterTextAndPressEnter(firstFileModel.name); - searchResultPage.checkContentIsDisplayed(firstFileModel.name); + await searchResultPage.checkContentIsDisplayed(firstFileModel.name); }); - it('[C91321] Should be able to use down arrow key when navigating throw suggestions', () => { - searchDialog - .checkSearchIconIsVisible() - .clickOnSearchIcon() - .checkSearchBarIsVisible() - .enterText(secondFolder.shortName) - .pressDownArrowAndEnter(); + it('[C91321] Should be able to use down arrow key when navigating throw suggestions', async () => { + await searchDialog.checkSearchIconIsVisible(); + await searchDialog.clickOnSearchIcon(); + await searchDialog.checkSearchBarIsVisible(); + await searchDialog.enterText(secondFolder.shortName); + await searchDialog.pressDownArrowAndEnter(); - searchResultPage.tableIsLoaded(); - expect(contentServicesPage.currentFolderName()).toEqual(secondFolder.name); + await expect(await contentServicesPage.currentFolderName()).toEqual(secondFolder.name); }); - it('[C290137] Should be able to search by \'%\'', () => { - searchDialog - .clickOnSearchIcon() - .enterTextAndPressEnter('%'); - searchResultPage.tableIsLoaded(); + it('[C290137] Should be able to search by \'%\'', async () => { + await searchDialog.clickOnSearchIcon(); + await searchDialog.enterTextAndPressEnter('%'); + await searchResultPage.tableIsLoaded(); }); describe('Highlight', () => { @@ -282,22 +265,20 @@ describe('Search component - Search Bar', () => { const searchConfiguration = SearchConfiguration.getConfiguration(); beforeAll(async () => { - navigationBarPage.clickContentServicesButton(); + await navigationBarPage.clickContentServicesButton(); await LocalStorageUtil.setConfigField('search', JSON.stringify(searchConfiguration)); - searchDialog - .checkSearchIconIsVisible() - .clickOnSearchIcon() - .checkSearchBarIsVisible() - .enterTextAndPressEnter(term); + await searchDialog.checkSearchIconIsVisible(); + await searchDialog.clickOnSearchIcon(); + await searchDialog.checkSearchBarIsVisible(); + await searchDialog.enterTextAndPressEnter(term); }); - it('[C299212] Should be able to configure the highlight option for search results', () => { - searchResultPage.getNodeHighlight(fileHighlightUploaded.entry.name).getText().then((text) => { - expect(text.includes(`¿${term}?`)).toBe(true); - expect(text.includes(`(${term})`)).toBe(true); - }); + it('[C299212] Should be able to configure the highlight option for search results', async () => { + const text = await searchResultPage.getNodeHighlight(fileHighlightUploaded.entry.name).getText(); + await expect(text.includes(`¿${term}?`)).toBe(true); + await expect(text.includes(`(${term})`)).toBe(true); }); }); }); diff --git a/e2e/search/search-filters.e2e.ts b/e2e/search/search-filters.e2e.ts index 7fe908d7be..b3d65cb354 100644 --- a/e2e/search/search-filters.e2e.ts +++ b/e2e/search/search-filters.e2e.ts @@ -21,12 +21,19 @@ import { SearchResultsPage } from '../pages/adf/searchResultsPage'; import { AcsUserModel } from '../models/ACS/acsUserModel'; import { FileModel } from '../models/ACS/fileModel'; import { NavigationBarPage } from '../pages/adf/navigationBarPage'; -import { StringUtil, DocumentListPage, PaginationPage, LoginPage, LocalStorageUtil, UploadActions } from '@alfresco/adf-testing'; +import { + StringUtil, + DocumentListPage, + PaginationPage, + LoginPage, + LocalStorageUtil, + UploadActions, + BrowserActions +} from '@alfresco/adf-testing'; import resources = require('../util/resources'); import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; import { browser } from 'protractor'; import { SearchConfiguration } from './search.config'; -import { BrowserActions } from '../../lib/testing/src/lib/core/utils/browser-actions'; describe('Search Filters', () => { @@ -81,7 +88,7 @@ describe('Search Filters', () => { let jsonFile; - beforeAll(async (done) => { + beforeAll(async () => { await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); await this.alfrescoJsApi.core.peopleApi.addPerson(acsUser); @@ -89,28 +96,19 @@ describe('Search Filters', () => { await this.alfrescoJsApi.login(acsUser.id, acsUser.password); fileUploaded = await uploadActions.uploadFile(fileModel.location, fileModel.name, '-my-'); - fileTypePng = await uploadActions.uploadFile(pngFileModel.location, pngFileModel.name, '-my-'); - fileTypeTxt1 = await uploadActions.uploadFile(txtFileModel1.location, txtFileModel1.name, '-my-'); - fileTypeJpg = await uploadActions.uploadFile(jpgFileModel.location, jpgFileModel.name, '-my-'); - fileTypeTxt2 = await uploadActions.uploadFile(txtFileModel2.location, txtFileModel2.name, '-my-'); await loginPage.loginToContentServicesUsingUserModel(acsUser); - await browser.driver.sleep(15000); // wait search index previous file/folder uploaded - - searchDialog.checkSearchIconIsVisible(); - searchDialog.clickOnSearchIcon(); + await browser.sleep(15000); // wait search index previous file/folder uploaded jsonFile = SearchConfiguration.getConfiguration(); - - done(); }); - afterAll(async (done) => { + afterAll(async () => { await this.alfrescoJsApi.login(acsUser.id, acsUser.password); await uploadActions.deleteFileOrFolder(fileUploaded.entry.id); @@ -119,153 +117,158 @@ describe('Search Filters', () => { await uploadActions.deleteFileOrFolder(fileTypeTxt2.entry.id); await uploadActions.deleteFileOrFolder(fileTypeJpg.entry.id); await navigationBarPage.clickLogoutButton(); - - done(); }); - it('[C286298] Should be able to cancel a filter using "x" button from the toolbar', () => { - searchDialog.enterTextAndPressEnter(fileUploaded.entry.name); + it('[C286298] Should be able to cancel a filter using "x" button from the toolbar', async () => { + await searchDialog.checkSearchIconIsVisible(); + await searchDialog.clickOnSearchIcon(); + await searchDialog.enterTextAndPressEnter(fileUploaded.entry.name); - searchFiltersPage.checkSearchFiltersIsDisplayed(); + await searchFiltersPage.checkSearchFiltersIsDisplayed(); const userOption = `${acsUser.firstName} ${acsUser.lastName}`; - searchFiltersPage.creatorCheckListFiltersPage().filterBy(userOption) - .checkChipIsDisplayed(userOption) - .removeFilterOption(userOption) - .checkChipIsNotDisplayed(userOption); + const searchCheckListPage = await searchFiltersPage.creatorCheckListFiltersPage().filterBy(userOption); + await searchCheckListPage.checkChipIsDisplayed(userOption); + await searchCheckListPage.removeFilterOption(userOption); + await searchCheckListPage.checkChipIsNotDisplayed(userOption); }); - it('[C277146] Should Show more/less buttons be hidden when inactive', () => { - BrowserActions.getUrl(browser.params.testConfig.adf.url + '/search;q=*'); + it('[C277146] Should Show more/less buttons be hidden when inactive', async () => { + await BrowserActions.getUrl(`${browser.params.testConfig.adf.url}/search;q=*`); - searchFiltersPage.creatorCheckListFiltersPage().checkShowLessButtonIsNotDisplayed() - .checkShowMoreButtonIsDisplayed() - .clickShowMoreButtonUntilIsNotDisplayed() - .checkShowLessButtonIsDisplayed() - .clickShowLessButtonUntilIsNotDisplayed(); + const searchCheckListPage = searchFiltersPage.creatorCheckListFiltersPage(); + + await searchCheckListPage.checkShowLessButtonIsNotDisplayed(); + await searchCheckListPage.checkShowMoreButtonIsDisplayed(); + await searchCheckListPage.clickShowMoreButtonUntilIsNotDisplayed(); + await searchCheckListPage.checkShowLessButtonIsDisplayed(); + await searchCheckListPage.clickShowLessButtonUntilIsNotDisplayed(); }); - it('[C286556] Search categories should preserve their collapsed/expanded state after the search', () => { - BrowserActions.getUrl(browser.params.testConfig.adf.url + '/search;q=*'); + it('[C286556] Search categories should preserve their collapsed/expanded state after the search', async () => { + await BrowserActions.getUrl(`${browser.params.testConfig.adf.url}/search;q=*`); - searchFiltersPage.clickFileTypeListFilter() - .checkFileTypeFilterIsCollapsed() - .clickFileSizeFilterHeader() - .checkFileSizeFilterIsCollapsed(); + await searchFiltersPage.clickFileTypeListFilter(); + await searchFiltersPage.checkFileTypeFilterIsCollapsed(); + await searchFiltersPage.clickFileSizeFilterHeader(); + await searchFiltersPage.checkFileSizeFilterIsCollapsed(); - searchFiltersPage.creatorCheckListFiltersPage().clickCheckListOption('Administrator'); + await searchFiltersPage.creatorCheckListFiltersPage().clickCheckListOption('Administrator'); - searchFiltersPage.checkFileTypeFilterIsCollapsed() - .checkFileSizeFilterIsCollapsed(); + await searchFiltersPage.checkFileTypeFilterIsCollapsed(); + await searchFiltersPage.checkFileSizeFilterIsCollapsed(); }); - it('[C287796] Should be able to display the correct bucket number after selecting a filter', () => { - BrowserActions.getUrl(browser.params.testConfig.adf.url + '/search;q=*'); + it('[C287796] Should be able to display the correct bucket number after selecting a filter', async () => { + await BrowserActions.getUrl(`${browser.params.testConfig.adf.url}/search;q=*`); - searchFiltersPage.fileTypeCheckListFiltersPage().clickCheckListOption('PNG Image'); + await searchFiltersPage.fileTypeCheckListFiltersPage().clickCheckListOption('PNG Image'); - const bucketNumberForFilter = searchFiltersPage.fileTypeCheckListFiltersPage().getBucketNumberOfFilterType(filter.type); - const resultFileNames = contentList.getAllRowsColumnValues('Display name'); + const bucketNumberForFilter = await searchFiltersPage.fileTypeCheckListFiltersPage().getBucketNumberOfFilterType(filter.type); + const resultFileNames: any = await contentList.getAllRowsColumnValues('Display name'); - expect(bucketNumberForFilter).not.toEqual('0'); - expect(paginationPage.getTotalNumberOfFiles()).toEqual(bucketNumberForFilter); + await expect(bucketNumberForFilter).not.toEqual('0'); + await expect(await paginationPage.getTotalNumberOfFiles()).toEqual(bucketNumberForFilter); - resultFileNames.then((fileNames) => { - fileNames.map((nameOfResultFiles) => { - expect(nameOfResultFiles).toContain('.png'); - }); + resultFileNames.map(async (nameOfResultFiles) => { + await expect(nameOfResultFiles).toContain('.png'); }); }); it('[C291802] Should be able to filter facet fields with "Contains"', async () => { - navigationBarPage.clickContentServicesButton(); + await navigationBarPage.clickContentServicesButton(); jsonFile['filterWithContains'] = true; await LocalStorageUtil.setConfigField('search', JSON.stringify(jsonFile)); - searchDialog.clickOnSearchIcon() - .enterTextAndPressEnter('*'); + await searchDialog.clickOnSearchIcon(); + await searchDialog.enterTextAndPressEnter('*'); - searchResults.tableIsLoaded(); + await searchResults.tableIsLoaded(); - searchFiltersPage.creatorCheckListFiltersPage() - .searchInFilter('dminis') - .checkCheckListOptionIsDisplayed('Administrator'); + await searchFiltersPage.creatorCheckListFiltersPage().searchInFilter('dminis'); + await searchFiltersPage.creatorCheckListFiltersPage().checkCheckListOptionIsDisplayed('Administrator'); }); - it('[C291980] Should group search facets under specified labels', () => { - BrowserActions.getUrl(browser.params.testConfig.adf.url + '/search;q=*'); + it('[C291980] Should group search facets under specified labels', async () => { + await BrowserActions.getUrl(`${browser.params.testConfig.adf.url}/search;q=*`); - searchFiltersPage.checkDefaultFacetQueryGroupIsDisplayed() - .checkTypeFacetQueryGroupIsDisplayed() - .checkSizeFacetQueryGroupIsDisplayed(); + await searchFiltersPage.checkDefaultFacetQueryGroupIsDisplayed(); + await searchFiltersPage.checkTypeFacetQueryGroupIsDisplayed(); + await searchFiltersPage.checkSizeFacetQueryGroupIsDisplayed(); }); it('[C291981] Should group search facets under the default label, by default', async () => { - navigationBarPage.clickContentServicesButton(); + await navigationBarPage.clickContentServicesButton(); await LocalStorageUtil.setConfigField('search', JSON.stringify(jsonFile)); - searchDialog.clickOnSearchIcon() - .enterTextAndPressEnter('*'); + await searchDialog.clickOnSearchIcon(); + await searchDialog.enterTextAndPressEnter('*'); - searchResults.tableIsLoaded(); + await searchResults.tableIsLoaded(); - searchFiltersPage.checkDefaultFacetQueryGroupIsDisplayed(); - expect(searchFiltersPage.isTypeFacetQueryGroupPresent()).toBe(false); - expect(searchFiltersPage.isSizeFacetQueryGroupPresent()).toBe(false); + await searchFiltersPage.checkDefaultFacetQueryGroupIsDisplayed(); + await expect(await searchFiltersPage.isTypeFacetQueryGroupPresent()).toBe(false); + await expect(await searchFiltersPage.isSizeFacetQueryGroupPresent()).toBe(false); }); - it('[C297509] Should display search intervals under specified labels from config', () => { - BrowserActions.getUrl(browser.params.testConfig.adf.url + '/search;q=*'); + it('[C297509] Should display search intervals under specified labels from config', async () => { + await BrowserActions.getUrl(`${browser.params.testConfig.adf.url}/search;q=*`); - searchFiltersPage.checkFacetIntervalsByCreatedIsDisplayed() - .checkFacetIntervalsByCreatedIsExpanded() - .clickFacetIntervalsByCreatedFilterHeader() - .checkFacetIntervalsByCreatedIsCollapsed() - .clickFacetIntervalsByCreatedFilterHeader() - .checkFacetIntervalsByCreatedIsExpanded() - .checkFacetIntervalsByModifiedIsDisplayed() - .checkFacetIntervalsByModifiedIsExpanded() - .clickFacetIntervalsByModifiedFilterHeader() - .checkFacetIntervalsByModifiedIsCollapsed() - .clickFacetIntervalsByModifiedFilterHeader() - .checkFacetIntervalsByModifiedIsExpanded(); + await searchFiltersPage.checkFacetIntervalsByCreatedIsDisplayed(); + await searchFiltersPage.checkFacetIntervalsByCreatedIsExpanded(); + await searchFiltersPage.clickFacetIntervalsByCreatedFilterHeader(); + await searchFiltersPage.checkFacetIntervalsByCreatedIsCollapsed(); + await searchFiltersPage.clickFacetIntervalsByCreatedFilterHeader(); + await searchFiltersPage.checkFacetIntervalsByCreatedIsExpanded(); + await searchFiltersPage.checkFacetIntervalsByModifiedIsDisplayed(); + await searchFiltersPage.checkFacetIntervalsByModifiedIsExpanded(); + await searchFiltersPage.clickFacetIntervalsByModifiedFilterHeader(); + await searchFiltersPage.checkFacetIntervalsByModifiedIsCollapsed(); + await searchFiltersPage.clickFacetIntervalsByModifiedFilterHeader(); + await searchFiltersPage.checkFacetIntervalsByModifiedIsExpanded(); }); - it('[C299200] Should reset the filters facet with search query', () => { - searchDialog.enterTextAndPressEnter(fileTypeTxt1.entry.name); + it('[C299200] Should reset the filters facet with search query', async () => { + await navigationBarPage.clickContentServicesButton(); + await searchDialog.checkSearchIconIsVisible(); + await searchDialog.clickOnSearchIcon(); + await searchDialog.enterTextAndPressEnter(fileTypeTxt1.entry.name); - searchFiltersPage.checkSearchFiltersIsDisplayed(); - searchResults.tableIsLoaded(); - searchResults.checkContentIsDisplayed(fileTypeTxt1.entry.name); - searchFiltersPage.checkFileTypeFacetLabelIsDisplayed('Plain Text (1)'); - searchFiltersPage.checkFileTypeFacetLabelIsNotDisplayed('JPEG Image'); + await searchFiltersPage.checkSearchFiltersIsDisplayed(); + await searchResults.tableIsLoaded(); + await searchResults.checkContentIsDisplayed(fileTypeTxt1.entry.name); + await searchFiltersPage.checkFileTypeFacetLabelIsDisplayed('Plain Text (1)'); + await searchFiltersPage.checkFileTypeFacetLabelIsNotDisplayed('JPEG Image'); - searchDialog.enterTextAndPressEnter(fileNamePrefix); - searchFiltersPage.checkSearchFiltersIsDisplayed(); - searchResults.tableIsLoaded(); - searchResults.checkContentIsDisplayed(fileTypeTxt1.entry.name); - searchResults.checkContentIsDisplayed(fileTypeTxt2.entry.name); - searchResults.checkContentIsDisplayed(fileTypeJpg.entry.name); - searchFiltersPage.checkFileTypeFacetLabelIsDisplayed('Plain Text (2)'); - searchFiltersPage.checkFileTypeFacetLabelIsDisplayed('JPEG Image (1)'); + await searchDialog.checkSearchIconIsVisible(); + await searchDialog.clickOnSearchIcon(); + + await searchDialog.enterTextAndPressEnter(fileNamePrefix); + await searchFiltersPage.checkSearchFiltersIsDisplayed(); + await searchResults.tableIsLoaded(); + await searchResults.checkContentIsDisplayed(fileTypeTxt1.entry.name); + await searchResults.checkContentIsDisplayed(fileTypeTxt2.entry.name); + await searchResults.checkContentIsDisplayed(fileTypeJpg.entry.name); + await searchFiltersPage.checkFileTypeFacetLabelIsDisplayed('Plain Text (2)'); + await searchFiltersPage.checkFileTypeFacetLabelIsDisplayed('JPEG Image (1)'); }); it('[C299124] Should be able to parse escaped empty spaced labels inside facetFields', async () => { - navigationBarPage.clickContentServicesButton(); + await navigationBarPage.clickContentServicesButton(); jsonFile.facetFields.fields[0].label = 'My File Types'; jsonFile.facetFields.fields[1].label = 'My File Sizes'; await LocalStorageUtil.setConfigField('search', JSON.stringify(jsonFile)); - searchDialog.clickOnSearchIcon() - .enterTextAndPressEnter('*'); + await searchDialog.clickOnSearchIcon(); + await searchDialog.enterTextAndPressEnter('*'); - searchResults.tableIsLoaded(); - searchFiltersPage.checkCustomFacetFieldLabelIsDisplayed('My File Types'); - searchFiltersPage.checkCustomFacetFieldLabelIsDisplayed('My File Sizes'); + await searchResults.tableIsLoaded(); + await searchFiltersPage.checkCustomFacetFieldLabelIsDisplayed('My File Types'); + await searchFiltersPage.checkCustomFacetFieldLabelIsDisplayed('My File Sizes'); }); }); diff --git a/e2e/search/search-multiselect.e2e.ts b/e2e/search/search-multiselect.e2e.ts index 483723d329..a648db3bd1 100644 --- a/e2e/search/search-multiselect.e2e.ts +++ b/e2e/search/search-multiselect.e2e.ts @@ -55,7 +55,7 @@ describe('Search Component - Multi-Select Facet', () => { 'name': `${randomName}.txt` }); - beforeAll(async (done) => { + beforeAll(async () => { await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); await this.alfrescoJsApi.core.peopleApi.addPerson(acsUser); @@ -75,24 +75,23 @@ describe('Search Component - Multi-Select Facet', () => { txtFileSite = await uploadActions.uploadFile(txtFileInfo.location, txtFileInfo.name, site.entry.guid); - await browser.driver.sleep(15000); + await browser.sleep(15000); - loginPage.loginToContentServicesUsingUserModel(acsUser); + await loginPage.loginToContentServicesUsingUserModel(acsUser); - searchDialog.checkSearchIconIsVisible(); - searchDialog.clickOnSearchIcon(); - searchDialog.enterTextAndPressEnter(`${randomName}`); + await searchDialog.checkSearchIconIsVisible(); + await searchDialog.clickOnSearchIcon(); + await searchDialog.enterTextAndPressEnter(`${randomName}`); userOption = `${acsUser.firstName} ${acsUser.lastName}`; - searchFiltersPage.checkSearchFiltersIsDisplayed(); - searchFiltersPage.creatorCheckListFiltersPage().filterBy(userOption); + await searchFiltersPage.checkSearchFiltersIsDisplayed(); + await searchFiltersPage.creatorCheckListFiltersPage().filterBy(userOption); - done(); }); - afterAll(async (done) => { - Promise.all([ + afterAll(async () => { + await Promise.all([ uploadActions.deleteFileOrFolder(jpgFile.entry.id), uploadActions.deleteFileOrFolder(jpgFileSite.entry.id), uploadActions.deleteFileOrFolder(txtFile.entry.id), @@ -102,33 +101,32 @@ describe('Search Component - Multi-Select Facet', () => { await this.alfrescoJsApi.core.sitesApi.deleteSite(site.entry.id); await navigationBarPage.clickLogoutButton(); - done(); }); - it('[C280054] Should be able to select multiple items from a search facet filter', () => { - loginPage.loginToContentServicesUsingUserModel(acsUser); + it('[C280054] Should be able to select multiple items from a search facet filter', async () => { + await loginPage.loginToContentServicesUsingUserModel(acsUser); - searchDialog.checkSearchIconIsVisible(); - searchDialog.clickOnSearchIcon(); - searchDialog.enterTextAndPressEnter(`${randomName}`); + await searchDialog.checkSearchIconIsVisible(); + await searchDialog.clickOnSearchIcon(); + await searchDialog.enterTextAndPressEnter(`${randomName}`); userOption = `${acsUser.firstName} ${acsUser.lastName}`; - searchFiltersPage.checkSearchFiltersIsDisplayed(); - searchFiltersPage.creatorCheckListFiltersPage().filterBy(userOption); - searchFiltersPage.fileTypeCheckListFiltersPage().filterBy('Plain Text'); + await searchFiltersPage.checkSearchFiltersIsDisplayed(); + await searchFiltersPage.creatorCheckListFiltersPage().filterBy(userOption); + await searchFiltersPage.fileTypeCheckListFiltersPage().filterBy('Plain Text'); - expect(searchResultsPage.numberOfResultsDisplayed()).toBe(2); - searchResultsPage.checkContentIsDisplayed(txtFile.entry.name); - searchResultsPage.checkContentIsDisplayed(txtFileSite.entry.name); + await expect(searchResultsPage.numberOfResultsDisplayed()).toBe(2); + await searchResultsPage.checkContentIsDisplayed(txtFile.entry.name); + await searchResultsPage.checkContentIsDisplayed(txtFileSite.entry.name); - searchFiltersPage.fileTypeCheckListFiltersPage().filterBy('JPEG Image'); + await searchFiltersPage.fileTypeCheckListFiltersPage().filterBy('JPEG Image'); - expect(searchResultsPage.numberOfResultsDisplayed()).toBe(4); - searchResultsPage.checkContentIsDisplayed(txtFile.entry.name); - searchResultsPage.checkContentIsDisplayed(txtFileSite.entry.name); - searchResultsPage.checkContentIsDisplayed(jpgFile.entry.name); - searchResultsPage.checkContentIsDisplayed(jpgFileSite.entry.name); + await expect(await searchResultsPage.numberOfResultsDisplayed()).toBe(4); + await searchResultsPage.checkContentIsDisplayed(txtFile.entry.name); + await searchResultsPage.checkContentIsDisplayed(txtFileSite.entry.name); + await searchResultsPage.checkContentIsDisplayed(jpgFile.entry.name); + await searchResultsPage.checkContentIsDisplayed(jpgFileSite.entry.name); }); }); @@ -147,7 +145,7 @@ describe('Search Component - Multi-Select Facet', () => { 'name': `${randomName}.txt` }); - beforeAll(async (done) => { + beforeAll(async () => { await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); await this.alfrescoJsApi.core.peopleApi.addPerson(userUploadingTxt); @@ -171,27 +169,27 @@ describe('Search Component - Multi-Select Facet', () => { jpgFile = await uploadActions.uploadFile(jpgFileInfo.location, jpgFileInfo.name, site.entry.guid); - await browser.driver.sleep(15000); + await browser.sleep(15000); - loginPage.loginToContentServicesUsingUserModel(userUploadingImg); + await loginPage.loginToContentServicesUsingUserModel(userUploadingImg); - searchDialog.checkSearchIconIsVisible(); - searchDialog.clickOnSearchIcon(); - searchDialog.enterTextAndPressEnter(`*${randomName}*`); + await searchDialog.checkSearchIconIsVisible(); + await searchDialog.clickOnSearchIcon(); + await searchDialog.enterTextAndPressEnter(`*${randomName}*`); - searchFiltersPage.checkSearchFiltersIsDisplayed(); - searchFiltersPage.creatorCheckListFiltersPage().filterBy(`${userUploadingTxt.firstName} ${userUploadingTxt.lastName}`); - searchFiltersPage.creatorCheckListFiltersPage().filterBy(`${userUploadingImg.firstName} ${userUploadingImg.lastName}`); + await searchFiltersPage.checkSearchFiltersIsDisplayed(); + await searchFiltersPage.creatorCheckListFiltersPage().filterBy(`${userUploadingTxt.firstName} ${userUploadingTxt.lastName}`); + await searchFiltersPage.creatorCheckListFiltersPage().filterBy(`${userUploadingImg.firstName} ${userUploadingImg.lastName}`); - searchResultsPage.checkContentIsDisplayed(txtFile.entry.name); - searchResultsPage.checkContentIsDisplayed(jpgFile.entry.name); + await searchResultsPage.checkContentIsDisplayed(txtFile.entry.name); + await searchResultsPage.checkContentIsDisplayed(jpgFile.entry.name); - searchFiltersPage.fileTypeCheckListFiltersPage().filterBy('Plain Text'); - searchFiltersPage.fileTypeCheckListFiltersPage().filterBy('JPEG Image'); + await searchFiltersPage.fileTypeCheckListFiltersPage().filterBy('Plain Text'); + await searchFiltersPage.fileTypeCheckListFiltersPage().filterBy('JPEG Image'); - expect(searchResultsPage.numberOfResultsDisplayed()).toBe(2); - searchResultsPage.checkContentIsDisplayed(txtFile.entry.name); - searchResultsPage.checkContentIsDisplayed(jpgFile.entry.name); + await expect(await searchResultsPage.numberOfResultsDisplayed()).toBe(2); + await searchResultsPage.checkContentIsDisplayed(txtFile.entry.name); + await searchResultsPage.checkContentIsDisplayed(jpgFile.entry.name); }); }); @@ -205,7 +203,7 @@ describe('Search Component - Multi-Select Facet', () => { 'name': `${randomName}.txt` }); - beforeAll(async (done) => { + beforeAll(async () => { await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); await this.alfrescoJsApi.core.peopleApi.addPerson(acsUser); @@ -218,38 +216,37 @@ describe('Search Component - Multi-Select Facet', () => { }); txtFile = await uploadActions.uploadFile(txtFileInfo.location, txtFileInfo.name, '-my-'); - await browser.driver.sleep(15000); + await browser.sleep(15000); - loginPage.loginToContentServicesUsingUserModel(acsUser); + await loginPage.loginToContentServicesUsingUserModel(acsUser); - searchDialog.checkSearchIconIsVisible(); - searchDialog.clickOnSearchIcon(); - searchDialog.enterTextAndPressEnter(`*${randomName}*`); + await searchDialog.checkSearchIconIsVisible(); + await searchDialog.clickOnSearchIcon(); + await searchDialog.enterTextAndPressEnter(`*${randomName}*`); - searchFiltersPage.checkSearchFiltersIsDisplayed(); + await searchFiltersPage.checkSearchFiltersIsDisplayed(); - done(); }); - afterAll(async (done) => { + afterAll(async () => { await uploadActions.deleteFileOrFolder(txtFile.entry.id); await this.alfrescoJsApi.core.sitesApi; - done(); + }); - it('[C280058] Should update filter facets items number when another filter facet item is selected', () => { - loginPage.loginToContentServicesUsingUserModel(acsUser); + it('[C280058] Should update filter facets items number when another filter facet item is selected', async () => { + await loginPage.loginToContentServicesUsingUserModel(acsUser); - searchDialog.checkSearchIconIsVisible(); - searchDialog.clickOnSearchIcon(); - searchDialog.enterTextAndPressEnter(`*${randomName}*`); + await searchDialog.checkSearchIconIsVisible(); + await searchDialog.clickOnSearchIcon(); + await searchDialog.enterTextAndPressEnter(`*${randomName}*`); - searchFiltersPage.checkSearchFiltersIsDisplayed(); - searchFiltersPage.fileTypeCheckListFiltersPage().filterBy('Plain Text'); - searchFiltersPage.creatorCheckListFiltersPage().filterBy(`${acsUser.firstName} ${acsUser.lastName}`); + await searchFiltersPage.checkSearchFiltersIsDisplayed(); + await searchFiltersPage.fileTypeCheckListFiltersPage().filterBy('Plain Text'); + await searchFiltersPage.creatorCheckListFiltersPage().filterBy(`${acsUser.firstName} ${acsUser.lastName}`); - expect(searchResultsPage.numberOfResultsDisplayed()).toBe(1); - searchResultsPage.checkContentIsDisplayed(txtFile.entry.name); + await expect(await searchResultsPage.numberOfResultsDisplayed()).toBe(1); + await searchResultsPage.checkContentIsDisplayed(txtFile.entry.name); }); }); }); diff --git a/e2e/search/search-page-component.e2e.ts b/e2e/search/search-page-component.e2e.ts index ed8b85b4c5..ca082829bc 100644 --- a/e2e/search/search-page-component.e2e.ts +++ b/e2e/search/search-page-component.e2e.ts @@ -63,7 +63,7 @@ describe('Search component - Search Page', () => { }); const uploadActions = new UploadActions(this.alfrescoJsApi); - beforeAll(async (done) => { + beforeAll(async () => { fileNames = Util.generateSequenceFiles(1, nrOfFiles, search.active.base, search.active.extension); const adminFileNames = Util.generateSequenceFiles(nrOfFiles + 1, nrOfFiles + adminNrOfFiles, search.active.base, search.active.extension); search.active.firstFile = fileNames[0]; @@ -91,84 +91,83 @@ describe('Search component - Search Page', () => { await uploadActions.createEmptyFiles(adminFileNames, newFolderModelUploaded.entry.id); - browser.driver.sleep(15000); + await browser.sleep(15000); await loginPage.loginToContentServicesUsingUserModel(acsUser); - done(); }); afterAll(async () => { await navigationBarPage.clickLogoutButton(); }); - it('[C260264] Should display message when no results are found', () => { + it('[C260264] Should display message when no results are found', async() => { const notExistentFileName = StringUtil.generateRandomString(); - searchDialog.checkSearchBarIsNotVisible().checkSearchIconIsVisible().clickOnSearchIcon() - .enterTextAndPressEnter(notExistentFileName); - searchResultPage.checkNoResultMessageIsDisplayed(); + await searchDialog.checkSearchBarIsNotVisible(); + await searchDialog.checkSearchIconIsVisible(); + await searchDialog.clickOnSearchIcon(); + await searchDialog.enterTextAndPressEnter(notExistentFileName); + await searchResultPage.checkNoResultMessageIsDisplayed(); }); - it('[C272810] Should display only files corresponding to search', () => { - searchDialog - .clickOnSearchIcon() - .enterTextAndPressEnter(search.active.firstFile); + it('[C272810] Should display only files corresponding to search', async () => { + await searchDialog.clickOnSearchIcon(); + await searchDialog.enterTextAndPressEnter(search.active.firstFile); - searchResultPage.checkContentIsDisplayed(search.active.firstFile); - expect(searchResultPage.numberOfResultsDisplayed()).toBe(1); + await searchResultPage.checkContentIsDisplayed(search.active.firstFile); + await expect(await searchResultPage.numberOfResultsDisplayed()).toBe(1); }); - it('[C260267] Should display content when opening a folder from search results', () => { - searchDialog - .clickOnSearchIcon() - .enterTextAndPressEnter(emptyFolderModel.name); + it('[C260267] Should display content when opening a folder from search results', async () => { + await searchDialog.clickOnSearchIcon(); + await searchDialog.enterTextAndPressEnter(emptyFolderModel.name); - searchResultPage.checkNoResultMessageIsNotDisplayed(); - searchResultPage.checkContentIsDisplayed(emptyFolderModel.name); - searchResultPage.navigateToFolder(emptyFolderModel.name); - contentServicesPage.currentFolderName().then((result) => { - expect(result).toEqual(emptyFolderModel.name); - }); + await searchResultPage.checkNoResultMessageIsNotDisplayed(); + await searchResultPage.checkContentIsDisplayed(emptyFolderModel.name); + await searchResultPage.navigateToFolder(emptyFolderModel.name); + const result = await contentServicesPage.currentFolderName(); + await expect(result).toEqual(emptyFolderModel.name); }); - it('[C260261] Should be able to delete a file from search results', () => { - searchDialog - .clickOnSearchIcon() - .enterTextAndPressEnter(search.active.firstFile); + it('[C260261] Should be able to delete a file from search results', async () => { + await searchDialog.clickOnSearchIcon(); + await searchDialog.enterTextAndPressEnter(search.active.firstFile); - searchResultPage.checkContentIsDisplayed(search.active.firstFile); + await searchResultPage.checkContentIsDisplayed(search.active.firstFile); - searchResultPage.deleteContent(search.active.firstFile); + await searchResultPage.deleteContent(search.active.firstFile); - searchResultPage.checkNoResultMessageIsDisplayed(); - searchResultPage.checkContentIsNotDisplayed(search.active.firstFile); + await searchResultPage.checkNoResultMessageIsDisplayed(); + await searchResultPage.checkContentIsNotDisplayed(search.active.firstFile); - searchDialog.checkSearchBarIsNotVisible().checkSearchIconIsVisible().clickOnSearchIcon() - .enterTextAndPressEnter(search.active.firstFile); - searchResultPage.checkNoResultMessageIsDisplayed(); + await searchDialog.checkSearchBarIsNotVisible(); + await searchDialog.checkSearchIconIsVisible(); + await searchDialog.clickOnSearchIcon(); + await searchDialog.enterTextAndPressEnter(search.active.firstFile); + await searchResultPage.checkNoResultMessageIsDisplayed(); }); - it('[C272809] Should be able to delete a folder from search results', () => { - searchDialog - .clickOnSearchIcon() - .enterTextAndPressEnter(emptyFolderModel.name); + it('[C272809] Should be able to delete a folder from search results', async () => { + await searchDialog.clickOnSearchIcon(); + await searchDialog.enterTextAndPressEnter(emptyFolderModel.name); - searchResultPage.checkContentIsDisplayed(emptyFolderModel.name); - searchResultPage.checkNoResultMessageIsNotDisplayed(); - searchResultPage.checkContentIsDisplayed(emptyFolderModel.name); - searchResultPage.deleteContent(emptyFolderModel.name); - searchResultPage.checkNoResultMessageIsDisplayed(); + await searchResultPage.checkContentIsDisplayed(emptyFolderModel.name); + await searchResultPage.checkNoResultMessageIsNotDisplayed(); + await searchResultPage.checkContentIsDisplayed(emptyFolderModel.name); + await searchResultPage.deleteContent(emptyFolderModel.name); + await searchResultPage.checkNoResultMessageIsDisplayed(); - searchDialog.checkSearchBarIsNotVisible().checkSearchIconIsVisible().clickOnSearchIcon() - .enterTextAndPressEnter(emptyFolderModel.name); - searchResultPage.checkNoResultMessageIsDisplayed(); + await searchDialog.checkSearchBarIsNotVisible(); + await searchDialog.checkSearchIconIsVisible(); + await searchDialog.clickOnSearchIcon(); + await searchDialog.enterTextAndPressEnter(emptyFolderModel.name); + await searchResultPage.checkNoResultMessageIsDisplayed(); }); - it('[C286675] Should display results when searching for all elements', () => { - searchDialog - .clickOnSearchIcon() - .enterTextAndPressEnter('*'); + it('[C286675] Should display results when searching for all elements', async () => { + await searchDialog.clickOnSearchIcon(); + await searchDialog.enterTextAndPressEnter('*'); - searchResultPage.checkNoResultMessageIsNotDisplayed(); + await searchResultPage.checkNoResultMessageIsNotDisplayed(); }); }); diff --git a/e2e/test.config.js b/e2e/test.config.js index 3e812a00d6..75b9126fa9 100644 --- a/e2e/test.config.js +++ b/e2e/test.config.js @@ -3,15 +3,7 @@ * @class config.test.config */ -let load_env_file = function () { - let ENV_FILE = process.env.ENV_FILE; - - if (ENV_FILE) { - require('dotenv').config({path: ENV_FILE}); - } -}; - -load_env_file(); +require('dotenv').config({path: process.env.ENV_FILE}); const HOST = process.env.URL_HOST_ADF; const HOST_BPM = process.env.URL_HOST_BPM_ADF; @@ -62,10 +54,12 @@ if (LOG) { module.exports = { - projectName :'ADF', + projectName: 'ADF', appConfig: appConfig, + log: LOG, + main: { timeout: TIMEOUT, rootPath: __dirname @@ -211,4 +205,5 @@ module.exports = { clientIdSso: "activiti" } + }; diff --git a/e2e/tsconfig.e2e.json b/e2e/tsconfig.e2e.json index 113be44976..f79ec79c13 100644 --- a/e2e/tsconfig.e2e.json +++ b/e2e/tsconfig.e2e.json @@ -12,24 +12,6 @@ "node" ], "paths": { - "@alfresco/adf-extensions": [ - "../lib/extensions" - ], - "@alfresco/adf-core": [ - "../lib/core" - ], - "@alfresco/adf-content-services": [ - "../lib/content-services" - ], - "@alfresco/adf-process-services": [ - "../lib/process-services" - ], - "@alfresco/adf-insights": [ - "../lib/insights" - ], - "@alfresco/adf-process-services-cloud": [ - "../lib/process-services-cloud" - ], "@alfresco/adf-testing": [ "../lib/testing" ] diff --git a/e2e/tslint.json b/e2e/tslint.json new file mode 100644 index 0000000000..f5e7bbf0ff --- /dev/null +++ b/e2e/tslint.json @@ -0,0 +1,6 @@ +{ + "extends": "../tslint.json", + "rules": { + "no-floating-promises": true + } +} diff --git a/e2e/util/material.ts b/e2e/util/material.ts index 13cf5fcadc..3166f8d188 100644 --- a/e2e/util/material.ts +++ b/e2e/util/material.ts @@ -16,24 +16,20 @@ */ import { ElementFinder } from 'protractor'; -import { BrowserVisibility } from '@alfresco/adf-testing'; +import { BrowserVisibility, BrowserActions } from '@alfresco/adf-testing'; -export function uncheck(el: ElementFinder) { - BrowserVisibility.waitUntilElementIsVisible(el); - el.getAttribute('class').then((classList) => { - if (classList && classList.indexOf('mat-checked') > -1) { - el.click(); - expect(el.getAttribute('class')).not.toContain('mat-checked'); - } - }); +export async function uncheck(el: ElementFinder) { + await BrowserVisibility.waitUntilElementIsVisible(el); + const classList = await el.getAttribute('class'); + if (classList && classList.indexOf('mat-checked') > -1) { + await BrowserActions.click(el); + } } -export function check(el: ElementFinder) { - BrowserVisibility.waitUntilElementIsVisible(el); - el.getAttribute('class').then((classList) => { - if (classList && classList.indexOf('mat-checked') === -1) { - el.click(); - expect(el.getAttribute('class')).toContain('mat-checked'); - } - }); +export async function check(el: ElementFinder) { + await BrowserVisibility.waitUntilElementIsVisible(el); + const classList = await el.getAttribute('class'); + if (classList && classList.indexOf('mat-checked') === -1) { + await BrowserActions.click(el); + } } diff --git a/e2e/util/resources.js b/e2e/util/resources.js index 04260492d9..ad1b569d07 100644 --- a/e2e/util/resources.js +++ b/e2e/util/resources.js @@ -82,7 +82,10 @@ exports.Files = { text_field: "activiti-textfield", form_fieldId: "textfield", text_field_value: "Hi tester, from Rest call" - } + }, + visibilityTabForm: { + formName: "visibilityTabWithFields" + }, }, WIDGETS_SMOKE_TEST: { @@ -108,7 +111,7 @@ exports.Files = { dateTime_id: "dateandtime", checkbox_id: "checkbox", dropdown_id: "dropdown", - dropdown_value: "mat-select[id='dropdown'] span span", + drofpdown_value: "mat-select[id='dropdown'] span span", radioButtons_id: "radiobuttons", dynamicTable_id: "dynamictable" } @@ -535,8 +538,18 @@ exports.ACTIVITI7_APPS = { file_location: "/resources/activiti7/simpleapp.zip", processes: { processwithvariables: "processwithvariables", - simpleProcess: "simpleProcess", + simpleProcess: "simpleprocess", dropdownrestprocess: "dropdownrestprocess" + }, + forms: { + tabVisibilityFields: { + name: "tabvisibilitywithfields", + id: "form-26b01063-4fb0-455f-b3ba-90172e013678" + }, + tabVisibilityVars: { + name: "tabvisibilitywithvars", + id: "form-7bf363d2-83c9-4b00-853e-373d0d59963c" + } } }, SUB_PROCESS_APP: { diff --git a/e2e/util/util.ts b/e2e/util/util.ts index c349d91452..6365e96712 100644 --- a/e2e/util/util.ts +++ b/e2e/util/util.ts @@ -16,7 +16,6 @@ */ import { browser } from 'protractor'; -import fs = require('fs'); export class Util { @@ -51,46 +50,17 @@ export class Util { if (0 === subset.length) { return false; } - return subset.every(function (value) { + return subset.every(function(value) { return (superset.indexOf(value) >= 0); }); } - static openNewTabInBrowser() { - browser.driver.executeScript("window.open('about: blank', '_blank');"); + static async openNewTabInBrowser() { + await browser.executeScript("window.open('about: blank', '_blank');"); } - static switchToWindowHandler(windowNumber) { - browser.driver.getAllWindowHandles().then((handles) => { - browser.waitForAngularEnabled(); - browser.driver.switchTo().window(handles[windowNumber]); - }); - } - - /** - * Verify file exists - * @param filePath - absolute path to the searched file - * @param retries - number of retries - * @returns - true if file is found, false otherwise - */ - static fileExists(filePath, retries) { - let tries = 0; - return new Promise(function (resolve, reject) { - const checkExist = setInterval(() => { - fs.stat(filePath, function (error, stats) { - tries++; - - if (error && tries === retries) { - clearInterval(checkExist); - resolve(false); - } - - if (!error) { - clearInterval(checkExist); - resolve(true); - } - }); - }, 2000); - }); + static async switchToWindowHandler(windowNumber) { + const handles = await browser.getAllWindowHandles(); + await browser.switchTo().window(handles[windowNumber]); } } diff --git a/lib/cli/README.md b/lib/cli/README.md index 63d398b397..aba09e0637 100644 --- a/lib/cli/README.md +++ b/lib/cli/README.md @@ -89,6 +89,12 @@ Update only js-api with a specific version adf-cli update-version --vjs "3.2.0-fa5916ff413131513c3e382d7f27dd9b4cfa0e7e" --pathPackage "$(pwd)" ``` +Update adf libs and js-api with latest alpha locally + +```bash +adf-cli update-version --alpha --pathPackage "$(pwd)" --skipGnu +``` + ### Update commit sha This command allows you to update the commit sha as part of the package.json. @@ -103,3 +109,8 @@ You can use the option --pointer to chose a different pointer from the default H ```bash adf-cli update-commit-sha --pointer "HEAD~1" --pathProject "$(pwd)" ``` + +Run command locally +```bash +adf-cli update-commit-sha --pathProject "$(pwd)" --skipGnu +``` diff --git a/lib/cli/package.json b/lib/cli/package.json index 9b72d82cd4..f083e60fb4 100644 --- a/lib/cli/package.json +++ b/lib/cli/package.json @@ -1,7 +1,7 @@ { "name": "@alfresco/adf-cli", "description": "Alfresco ADF cli and utils", - "version": "3.4.0", + "version": "3.5.0", "author": "Alfresco Software, Ltd.", "bin": { "adf-license": "./bin/doc/licenseList.js", diff --git a/lib/cli/scripts/docker-publish.ts b/lib/cli/scripts/docker-publish.ts index 35adb1a6ef..7d779a120e 100644 --- a/lib/cli/scripts/docker-publish.ts +++ b/lib/cli/scripts/docker-publish.ts @@ -19,7 +19,6 @@ import { logging } from '@angular-devkit/core'; import { spawnSync } from 'child_process'; -import * as path from 'path'; export interface PublishArgs { tag?: string; @@ -54,25 +53,25 @@ function _exec(command: string, args: string[], opts: { cwd?: string }, logger: } function _loginPerform(args: PublishArgs, logger: logging.Logger) { - logger.info('Perform docker login...'); + logger.info(`Perform docker login...${args.loginRepo}`); const loginDockerRes = _exec('docker', ['login', `-u=${args.loginUsername}`, `-p=${args.loginPassword}`, `${args.loginRepo}`], {}, logger); logger.info(loginDockerRes); } function _buildImagePerform(args: PublishArgs, tag: string, logger: logging.Logger) { - logger.info('Perform docker build...'); + logger.info(`Perform docker build...${args.dockerRepo}:${tag}`); const response = _exec('docker', ['build', `-t=${args.dockerRepo}:${tag}`, args.pathProject], {}, logger); logger.info(response); } function _tagImagePerform(args: PublishArgs, tag: string, logger: logging.Logger) { - logger.info('Perform docker tag...'); + logger.info(`Perform docker tag... ${args.dockerRepo}:${tag} on ${args.dockerRepo}:${tag}`); const response = _exec('docker', ['tag', `${args.dockerRepo}:${tag}`, `${args.dockerRepo}:${tag}`], {}, logger); logger.info(response); } -function _pushImagePerform(args: PublishArgs, tag: string, logger: logging.Logger) { - logger.info('Perform docker push...'); +function _pushImagePerform(args: PublishArgs, logger: logging.Logger) { + logger.info(`Perform docker push... ${args.dockerRepo}`); const response = _exec('docker', ['push', `${args.dockerRepo}`], {}, logger); logger.info(response); } @@ -93,7 +92,7 @@ export default async function (args: PublishArgs, logger: logging.Logger) { logger.info(`Analyzing tag:${tag} ...`); _buildImagePerform(args, tag, logger); _tagImagePerform(args, tag, logger); - _pushImagePerform(args, tag, logger); + _pushImagePerform(args, logger); _cleanImagePerform(args, tag, logger); logger.info(`tag:${tag} done`); }); diff --git a/lib/cli/scripts/kubectl-image.ts b/lib/cli/scripts/kubectl-image.ts index 99dcb7afa5..68618fd020 100644 --- a/lib/cli/scripts/kubectl-image.ts +++ b/lib/cli/scripts/kubectl-image.ts @@ -83,7 +83,7 @@ function _setImage(args: KubeArgs, logger: logging.Logger) { logger.info(response); } -function _installPerform(args: KubeArgs, logger: logging.Logger) { +function _installPerform(logger: logging.Logger) { logger.info('Perform install...'); const responseK8sStable = _exec('curl', [`-s`, `https://storage.googleapis.com/kubernetes-release/release/stable.txt`], {}, logger).trim(); const k8sRelease = `https://storage.googleapis.com/kubernetes-release/release/${responseK8sStable}/bin/linux/amd64/kubectl`; @@ -92,7 +92,7 @@ function _installPerform(args: KubeArgs, logger: logging.Logger) { export default async function (args: KubeArgs, logger: logging.Logger) { if (args.installCheck === true) { - _installPerform(args, logger); + _installPerform(logger); } if (args.tag !== undefined) { _setCluster(args, logger); diff --git a/lib/cli/scripts/npm-publish.ts b/lib/cli/scripts/npm-publish.ts new file mode 100644 index 0000000000..08a6d0c095 --- /dev/null +++ b/lib/cli/scripts/npm-publish.ts @@ -0,0 +1,106 @@ +#!/usr/bin/env node + +/*! + * @license + * Copyright 2019 Alfresco Software, Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { logging } from '@angular-devkit/core'; +import { spawnSync } from 'child_process'; +import * as path from 'path'; +import fs = require('fs'); + +export interface PublishArgs { + tag?: string; + npmRegistry?: string; + tokenRegistry?: string; + pathProject: string; +} + +const projects = [ + 'cli', + 'core', + 'insights', + 'testing', + 'content-services', + 'process-services', + 'process-services-cloud', + 'extensions' +]; + +function _exec(command: string, args: string[], opts: { cwd?: string }, logger: logging.Logger) { + if (process.platform.startsWith('win')) { + args.unshift('/c', command); + command = 'cmd.exe'; + } + + const { status, error, stderr, stdout } = spawnSync(command, args, { ...opts }); + + if (status !== 0) { + logger.error(`Command failed: ${command} ${args.map((x) => JSON.stringify(x)).join(', ')}`); + if (error) { + logger.error('Error: ' + (error ? error.message : 'undefined')); + } else { + logger.error(`STDERR:\n${stderr}`); + } + throw error; + } else { + return stdout.toString(); + } +} + +function _npmPublish(args: PublishArgs, project: string, logger: logging.Logger) { + if (args.npmRegistry) { + _changeRegistry(args, project, logger); + } + logger.info(`Publishing lib ${project} to npm`); + const options = ['publish']; + if (args.tag) { + options.push('-tag'); + options.push(`${args.tag}`); + } + const response = _exec('npm', options, {cwd: path.resolve(`${args.pathProject}/lib/dist/${project}`)}, logger); + logger.info(response); + if (args.npmRegistry) { + _removeNPMRC(args, project, logger); + } +} + +function _changeRegistry(args: PublishArgs, project: string, logger: logging.Logger) { + logger.info(`Change registry... `); + const folder = `${args.pathProject}/lib/dist/${project}`; + const content = +`strict-ssl=false +registry=http://${args.npmRegistry} +//${args.npmRegistry}/:_authToken="${args.tokenRegistry}"`; + try { + fs.writeFileSync(`${folder}/.npmrc`, content); + } catch (e) { + logger.error('Cannot write file', e); + } +} + +function _removeNPMRC(args: PublishArgs, project: string, logger: logging.Logger) { + logger.info(`Removing file from ${project}`); + const response = _exec('rm', ['.npmrc'], {cwd: path.resolve(`${args.pathProject}/lib/dist/${project}`)}, logger); + logger.info(response); +} + +export default async function (args: PublishArgs, logger: logging.Logger) { + projects.forEach( (project: string) => { + logger.info(`========Analyzing project: ${project} ========`); + _npmPublish(args, project, logger); + }); +} diff --git a/lib/cli/scripts/update-commit-sha.ts b/lib/cli/scripts/update-commit-sha.ts index d976f9f746..afa9e6009b 100644 --- a/lib/cli/scripts/update-commit-sha.ts +++ b/lib/cli/scripts/update-commit-sha.ts @@ -23,6 +23,7 @@ import { spawnSync } from 'child_process'; export interface CommitArgs { pointer: string; pathPackage: string; + skipGnu: boolean; } function _exec(command: string, args: string[], opts: { cwd?: string }, logger: logging.Logger) { @@ -55,7 +56,11 @@ function _commitPerform(args: CommitArgs, logger: logging.Logger): string { function _replacePerform(args: CommitArgs, sha: string, logger: logging.Logger) { logger.info(`Replace commit ${sha} in package...`); const sedRule = `s/\"commit\": \".*\"/\"commit\": \"${sha}\"/g`; - _exec('sed', [`-i`, `${sedRule}`, `${args.pathPackage}/package.json`], {}, logger); + if (args.skipGnu) { + _exec('sed', [`-i`, '', `${sedRule}`, `${args.pathPackage}/package.json`], {}, logger); + } else { + _exec('sed', [`-i`, `${sedRule}`, `${args.pathPackage}/package.json`], {}, logger); + } } export default async function (args: CommitArgs, logger: logging.Logger) { diff --git a/lib/cli/scripts/update-version.ts b/lib/cli/scripts/update-version.ts index e61b99c1fe..ba58ee01b3 100644 --- a/lib/cli/scripts/update-version.ts +++ b/lib/cli/scripts/update-version.ts @@ -27,6 +27,7 @@ export interface UpdateArgs { beta?: boolean; version: string; vjs: string; + skipGnu: boolean; } const ALPHA = 'alpha'; @@ -63,11 +64,11 @@ function _latestPerform(args: UpdateArgs, logger: logging.Logger) { } function _versionPerform(args: UpdateArgs, logger: logging.Logger) { - _tagLibPerform(args, args.version, logger); + _updateLibsVersionPerform(args.pathPackage, args.version, args.skipGnu, logger); } function _versionJsPerform(args: UpdateArgs, logger: logging.Logger) { - _tagJsPerform(args, args.vjs, logger); + _updateJsAPIVersionPerform(args.pathPackage, args.vjs, args.skipGnu, logger); } function _alphaPerform(args: UpdateArgs, logger: logging.Logger) { @@ -88,7 +89,6 @@ function _findADFLibsDependencies(args: UpdateArgs, logger: logging.Logger) { prjs.push(depName.replace(/"/g, '')); }); return prjs; - } function _getLatestVersionFromNpm(tag: string, project: string, logger: logging.Logger): string { @@ -98,25 +98,29 @@ function _getLatestVersionFromNpm(tag: string, project: string, logger: logging. return latestVersion; } -function _updateLibsVersionPerform(path: string, version: string, logger: logging.Logger) { +function _updateLibsVersionPerform(path: string, version: string, skipGnu = false, logger: logging.Logger) { logger.info('Perform libs version...'); projects.forEach( (project) => { logger.info(`apply version ${version} on ${project} ...`); project = project.replace('/', '\\/'); - _replaceVersionPerform(project, version, path, logger); + _replaceVersionPerform(project, version, path, skipGnu, logger); }); } -function _updateJsAPIVersionPerform(path: string, version: string, logger: logging.Logger) { +function _updateJsAPIVersionPerform(path: string, version: string, skipGnu = false, logger: logging.Logger) { logger.info('Perform js-api version...'); logger.info(`apply version ${version} on ${JS_API_DEPENDENCY} ...`); const project = JS_API_DEPENDENCY.replace('/', '\\/'); - _replaceVersionPerform(project, version, path, logger); + _replaceVersionPerform(project, version, path, skipGnu, logger); } -function _replaceVersionPerform(project: string, version: string, path: string, logger: logging.Logger) { +function _replaceVersionPerform(project: string, version: string, path: string, skipGnu = false, logger: logging.Logger) { const rule = `s/\"${project}\": \".*\"/\"${project}\": \"${version}\"/g`; - _exec('sed', ['-i', `${rule}`, `${path}/package.json`], {}, logger).trim(); + if (skipGnu) { + _exec('sed', ['-i', '', `${rule}`, `${path}/package.json`], {}, logger).trim(); + } else { + _exec('sed', ['-i', `${rule}`, `${path}/package.json`], {}, logger).trim(); + } } function _tagPerform(args: UpdateArgs, tag: string, logger: logging.Logger) { @@ -127,12 +131,12 @@ function _tagPerform(args: UpdateArgs, tag: string, logger: logging.Logger) { function _tagLibPerform(args: UpdateArgs, tag: string, logger: logging.Logger) { const libVersion = _getLatestVersionFromNpm(tag, '@alfresco/adf-extensions', logger); - _updateLibsVersionPerform(args.pathPackage, libVersion, logger); + _updateLibsVersionPerform(args.pathPackage, libVersion, args.skipGnu, logger); } function _tagJsPerform(args: UpdateArgs, tag: string, logger: logging.Logger) { const jsApiVersion = _getLatestVersionFromNpm(tag, JS_API_DEPENDENCY, logger); - _updateJsAPIVersionPerform(args.pathPackage, jsApiVersion, logger); + _updateJsAPIVersionPerform(args.pathPackage, jsApiVersion, args.skipGnu, logger); } export default async function (args: UpdateArgs, logger: logging.Logger) { diff --git a/lib/cli/tsconfig.json b/lib/cli/tsconfig.json index 2b72d03ca0..645ceb35d9 100644 --- a/lib/cli/tsconfig.json +++ b/lib/cli/tsconfig.json @@ -7,8 +7,8 @@ "noFallthroughCasesInSwitch": true, "noImplicitAny": true, "noImplicitThis": true, - "noUnusedParameters": false, // The linter is used for these. - "noUnusedLocals": false, // The linter is used for these. + "noUnusedParameters": true, + "noUnusedLocals": true, "outDir": "./dist", "rootDir": ".", "skipLibCheck": true, diff --git a/lib/config/bundle-process-services-scss.js b/lib/config/bundle-process-services-scss.js index ac086bfc71..871df9e9f0 100644 --- a/lib/config/bundle-process-services-scss.js +++ b/lib/config/bundle-process-services-scss.js @@ -1,6 +1,6 @@ var Bundler = require('scss-bundle').Bundler; var writeFileSync = require('fs-extra').writeFileSync; -new Bundler().Bundle('./lib/process-services/styles/_index.scss', '**/*.scss').then(result => { +new Bundler().Bundle('./lib/process-services/src/lib/styles/_index.scss', '**/*.scss').then(result => { writeFileSync('./lib/dist/process-services/_theming.scss', result.bundledContent); }); diff --git a/lib/config/bundle-scss.js b/lib/config/bundle-scss.js index d0277356de..3efd6a1c0d 100644 --- a/lib/config/bundle-scss.js +++ b/lib/config/bundle-scss.js @@ -10,7 +10,7 @@ var mkdirpSync = require('fs-extra').mkdirpSync; writeFileSync('./lib/dist/insights/_theming.scss', result.bundledContent); }); - new Bundler().Bundle('./lib/process-services/styles/_index.scss', '**/*.scss').then(result => { + new Bundler().Bundle('./lib/process-services/src/lib/styles/_index.scss', '**/*.scss').then(result => { writeFileSync('./lib/dist/process-services/_theming.scss', result.bundledContent); }); diff --git a/lib/content-services/breadcrumb/breadcrumb.component.html b/lib/content-services/breadcrumb/breadcrumb.component.html index 041493e662..ee09d8ab9e 100644 --- a/lib/content-services/breadcrumb/breadcrumb.component.html +++ b/lib/content-services/breadcrumb/breadcrumb.component.html @@ -1,12 +1,23 @@ -