From a78f24ada12a2522aee04fb1d6a214836cb30aae Mon Sep 17 00:00:00 2001 From: Eugenio Romano Date: Thu, 4 Jun 2020 14:41:30 +0100 Subject: [PATCH] [ACS-259] refactor login page (#5733) * refator login page * refator login page * remove obsolete classes and move what is needed in the test pck * fix const * revert modify * remove duplicate browser property * fix build * fix * fix * fix lint * move drop action in testing remove not necessary space js-api centralize content * first refactor use js-api * fix protractor * refactor test config * simplify properties fix namings * ps cloud simplify remove unused js files * id fix * fix search test simplify environment var step 1 * fix lint * first user iteration fix * fix model * unify use of apiService * first step automatic user creation Identity * refactor creation user content-services * refactor creation user search * refactor creation user core * process service refactoring 1 * process service refactoring 1 * process service refactoring 2 * fix process * appconfig * fix process util * fix gallery * fix "this" reference issues * fix incorrect import paths * fix core * some fixes * allign * fix some test remove structure folder and move in actions * fixes * move folders in the right place * fix * fix rebase * solve build issue * fix e2e * change init aae * order api and some fixes * fix possible not valid password * fix some ps test * replace host port also in objects * Update app-config.service.ts * fix process * fix process test * process service cloud fix * fiexs * modify init script * fix two test * remove unused property * host issue * not use npx * fix ps cloud test Co-authored-by: Denys Vuika --- demo-shell/src/app.config.json | 2 +- e2e/actions/ACS/node.actions.ts | 42 - e2e/actions/APS/apps-runtime.actions.ts | 17 +- e2e/actions/APS/apps.actions.ts | 76 - e2e/actions/APS/form-model.actions.ts | 12 +- e2e/actions/APS/models.actions.ts | 20 +- e2e/actions/users.actions.ts | 114 +- .../about-content-services.component.e2e.ts | 24 +- .../comments/comment-component.e2e.ts | 42 +- .../directives/create-folder-directive.e2e.ts | 22 +- .../create-library-directive.e2e.ts | 26 +- .../directives/delete-directive.e2e.ts | 64 +- .../directives/download-directive.e2e.ts | 33 +- .../directives/edit-folder-directive.e2e.ts | 46 +- .../directives/favorite-directive.e2e.ts | 33 +- .../restore-content-directive.e2e.ts | 59 +- .../document-list-actions.e2e.ts | 52 +- .../document-list-component.e2e.ts | 116 +- .../document-list-copy-move-actions.e2e.ts | 52 +- .../document-list-gallery.e2e.ts | 41 +- .../document-list-pagination.e2e.ts | 75 +- .../document-list-permissions.e2e.ts | 28 +- .../document-list-properties.e2e.ts | 29 +- .../document-list-selection.e2e.ts | 24 +- .../document-list-thumbnails-tooltips.e2e.ts | 34 +- e2e/content-services/lock-file.e2e.ts | 122 +- .../metadata/aspect-oriented-config.e2e.ts | 51 +- .../metadata/metadata-permissions.e2e.ts | 55 +- .../metadata/metadata-properties.e2e.ts | 41 +- .../metadata/metadata-smoke-tests.e2e.ts | 36 +- .../permissions/permissions-component.e2e.ts | 128 +- .../permissions/site-permissions.e2e.ts | 116 +- .../share-file/share-file.e2e.ts | 38 +- .../share-file/unshare-file.e2e.ts | 61 +- .../social/social.component.e2e.ts | 61 +- .../sso-download-directive-component.e2e.ts | 58 +- e2e/content-services/tag-component.e2e.ts | 29 +- .../trashcan-pagination.e2e.ts | 32 +- .../tree-view-component.e2e.ts | 36 +- .../upload/cancel-upload.e2e.ts | 26 +- .../upload/excluded-file.e2e.ts | 26 +- .../upload/upload-dialog.e2e.ts | 29 +- .../upload/uploader-component.e2e.ts | 29 +- .../upload/user-permission.e2e.ts | 61 +- .../version/version-actions.e2e.ts | 32 +- .../version/version-permissions.e2e.ts | 104 +- .../version/version-properties.e2e.ts | 35 +- .../version/version-smoke-tests.e2e.ts | 33 +- e2e/core/auth-guard/auth-guard-sso.e2e.ts | 8 +- .../data-table-component-selection.e2e.ts | 23 +- .../datatable/data-table-component.e2e.ts | 28 +- e2e/core/error-component.e2e.ts | 23 +- e2e/core/header-component.e2e.ts | 44 +- e2e/core/icons-component.e2e.ts | 24 +- e2e/core/infinite-scrolling.e2e.ts | 31 +- e2e/core/login/login-component.e2e.ts | 97 +- e2e/core/login/login-sso/login-sso.e2e.ts | 35 +- e2e/core/login/login-sso/logout-sso.e2e.ts | 6 +- e2e/core/login/redirection.e2e.ts | 58 +- e2e/core/login/remember-me.e2e.ts | 3 +- .../notifications-component.e2e.ts | 50 +- e2e/core/pagination-empty-current-page.e2e.ts | 46 +- e2e/core/settings-component.e2e.ts | 49 +- e2e/core/user-info-component-cloud.e2e.ts | 32 +- e2e/core/user-info-component.e2e.ts | 105 +- .../viewer-archive.component.e2e.ts | 34 +- .../file-extensions/viewer-component.e2e.ts | 37 +- .../viewer-excel.component.e2e.ts | 35 +- .../viewer-image.component.e2e.ts | 36 +- .../viewer-powerpoint.component.e2e.ts | 40 +- .../viewer-text.component.e2e.ts | 35 +- .../viewer-word.component.e2e.ts | 34 +- e2e/core/viewer/info-drawer.component.e2e.ts | 36 +- .../viewer-content-services-component.e2e.ts | 26 +- .../viewer-custom-toolbar-info-drawer.e2e.ts | 27 +- e2e/core/viewer/viewer-extension.e2e.ts | 40 +- e2e/core/viewer/viewer-properties.e2e.ts | 25 +- e2e/core/viewer/viewer-share-content.ts | 43 +- e2e/insights/analytics-component.e2e.ts | 37 +- e2e/models/ACS/acs-user.model.ts | 56 - e2e/models/APS/AppDefinition.js | 39 - e2e/models/APS/ProcessCreatedByModel.js | 49 - e2e/models/APS/ProcessInstance.js | 32 - e2e/models/APS/ProcessModel.js | 83 - e2e/models/APS/user.ts | 40 - e2e/pages/adf/content-services.page.ts | 4 +- .../pages/adf/demo-shell}/login.page.ts | 47 +- .../dialog/start-task-dialog.page.ts | 14 +- .../adf/process-services/filters.page.ts | 6 +- .../adf/process-services/tasks-list.page.ts | 20 +- ...ut-process-services-cloud.component.e2e.ts | 11 +- .../apps-section-cloud.e2e.ts | 21 +- .../edit-process-filters-component.e2e.ts | 351 +- .../edit-task-filters-component.e2e.ts | 409 ++- .../form-field/dropdown-widget.e2e.ts | 33 +- .../form-field/people-group-of-people.e2e.ts | 13 +- .../task-visibility-condition.e2e.ts | 28 +- .../visibility-condition-tabs.e2e.ts | 10 +- .../form-field/visibility-condition.e2e.ts | 15 +- .../people-group-cloud-component.e2e.ts | 45 +- ...people-group-cloud-filter-component.e2e.ts | 19 +- .../process-custom-filters.e2e.ts | 63 +- .../process-filter-results.e2e.ts | 34 +- .../process-filter-task.e2e.ts | 18 +- .../process-filters-cloud.e2e.ts | 28 +- .../process-header-cloud.e2e.ts | 27 +- .../process-list-cloud-action-menu.e2e.ts | 38 +- .../process-list-selection-cloud.e2e.ts | 24 +- ...cess-task-attach-content-file-cloud.e2e.ts | 19 +- .../start-process-cloud.e2e.ts | 17 +- .../start-task-form-cloud.e2e.ts | 51 +- .../start-task-custom-app-cloud.e2e.ts | 26 +- .../start-task/start-task-group-cloud.e2e.ts | 18 +- .../task-filters-cloud.e2e.ts | 35 +- .../task-form-cloud-component-tab.e2e.ts | 12 +- .../task-form-cloud-component.e2e.ts | 30 +- .../task-header-cloud.e2e.ts | 38 +- .../task-list-cloud-action-menu.e2e.ts | 52 +- .../task-list-properties-sort.e2e.ts | 18 +- .../task-list-properties.e2e.ts | 33 +- .../task-list-selection.e2e.ts | 38 +- .../tasks-claim-release.e2e.ts | 34 +- .../tasks-custom-filters.e2e.ts | 34 +- .../about-process-services.e2e.ts | 30 +- e2e/process-services/apps-section.e2e.ts | 52 +- .../attach-file-content-service.e2e.ts | 68 +- .../attach-file-widget-start-task-app.e2e.ts | 32 +- e2e/process-services/attach-folder.e2e.ts | 53 +- .../attach-form-component.e2e.ts | 43 +- .../checklist-component.e2e.ts | 35 +- .../comment-component-processes.e2e.ts | 62 +- .../comment-component-tasks.e2e.ts | 65 +- .../custom-process-filters-sorting.e2e.ts | 120 +- .../custom-process-filters.e2e.ts | 49 +- .../custom-tasks-filters.e2e.ts | 102 +- .../dynamic-table-date-picker.e2e.ts | 47 +- .../empty-process-list-component.e2e.ts | 41 +- e2e/process-services/form-component.e2e.ts | 28 +- .../form-people-widget.e2e.ts | 47 +- .../form-widgets-component.e2e.ts | 89 +- e2e/process-services/info-drawer.e2e.ts | 52 +- ...nation-processlist-adding-processes.e2e.ts | 59 +- .../pagination-tasklist-adding-tasks.e2e.ts | 33 +- e2e/process-services/people-component.e2e.ts | 61 +- ...process-attachment-list-action-menu.e2e.ts | 44 +- .../process-filters-component.e2e.ts | 51 +- .../process-instance-details.e2e.ts | 38 +- .../process-list-component.e2e.ts | 58 +- .../processlist-pagination.e2e.ts | 68 +- .../sort-tasklist-pagination.e2e.ts | 35 +- e2e/process-services/standalone-task.e2e.ts | 38 +- .../start-process-component.e2e.ts | 187 +- .../start-task-custom-app.e2e.ts | 35 +- .../start-task-task-app.e2e.ts | 42 +- e2e/process-services/stencil.e2e.ts | 33 +- e2e/process-services/task-assignee.e2e.ts | 136 +- .../task-attachment-list-action-menu.e2e.ts | 43 +- e2e/process-services/task-audit.e2e.ts | 39 +- e2e/process-services/task-details-form.e2e.ts | 72 +- .../task-details-no-form.e2e.ts | 36 +- e2e/process-services/task-details.e2e.ts | 93 +- .../task-filters-component.e2e.ts | 93 +- .../task-filters-sorting.e2e.ts | 52 +- .../task-list-pagination.e2e.ts | 32 +- .../widgets/amount-widget.e2e.ts | 41 +- .../widgets/attach-file-widget.e2e.ts | 36 +- .../widgets/attach-folder-widget.e2e.ts | 43 +- .../widgets/checkbox-widget.e2e.ts | 46 +- .../widgets/date-time-widget.e2e.ts | 46 +- .../widgets/date-widget.e2e.ts | 56 +- .../widgets/document-template-widget.e2e.ts | 46 +- .../widgets/dropdown-widget.e2e.ts | 45 +- .../widgets/dynamic-table-widget.e2e.ts | 73 +- .../widgets/header-widget.e2e.ts | 46 +- .../widgets/hyperlink-widget.e2e.ts | 46 +- .../widgets/multi-line-widget.e2e.ts | 45 +- .../widgets/number-widget.e2e.ts | 42 +- .../widgets/people-group-widget.e2e.ts | 89 +- .../widgets/people-widget.e2e.ts | 46 +- .../widgets/radio-buttons-widget.e2e.ts | 46 +- .../widgets/text-widget.e2e.ts | 46 +- .../widgets/typeahead-widget.e2e.ts | 33 +- .../widget-visibility-condition.e2e.ts | 48 +- e2e/protractor/save-remote.js | 35 +- e2e/resources/forms/custom-date-form.ts | 3 +- e2e/restAPI/ACS/PeopleAPI.js | 133 - e2e/restAPI/ACS/RequestUtil/RequestCoreAPI.js | 32 - e2e/restAPI/APIUtil.js | 60 - e2e/restAPI/httpRequest/BasicAuthorization.js | 27 - e2e/restAPI/httpRequest/HTTPRequestBase.js | 32 - e2e/restAPI/httpRequest/HTTPRequestPublic.js | 22 - .../components/search-check-list.e2e.ts | 57 +- .../components/search-date-range.e2e.ts | 23 +- .../components/search-number-range.e2e.ts | 40 +- e2e/search/components/search-radio.e2e.ts | 44 +- e2e/search/components/search-slider.e2e.ts | 36 +- .../components/search-sorting-picker.e2e.ts | 54 +- e2e/search/components/search-text.e2e.ts | 36 +- e2e/search/search-component.e2e.ts | 39 +- e2e/search/search-filters.e2e.ts | 33 +- e2e/search/search-multiselect.e2e.ts | 70 +- ...ge-component.e2e.ts => search-page.e2e.ts} | 35 +- e2e/test.config.js | 207 +- e2e/util/material.ts | 35 - e2e/util/util.ts | 66 - lib/cli/package-lock.json | 3105 ----------------- lib/cli/package.json | 1 - lib/cli/scripts/init-aae-env.ts | 267 +- lib/core/app-config/app-config.service.ts | 8 + lib/core/services/automation.service.ts | 4 + .../edit-process-filter-cloud.component.ts | 2 +- .../edit-task-filter-cloud.component.ts | 2 +- lib/testing/README.md | 8 +- .../actions/permission.actions.ts | 15 +- .../actions/upload.actions.ts | 21 +- .../content-node-selector-dialog.page.ts | 2 +- .../pages/search/date-range-filter.page.ts | 2 +- .../search/search-sorting-picker.page.ts | 2 +- .../lib/core/actions/APS/applications.util.ts | 69 - .../src/lib/core/actions/api.service.ts | 51 +- .../lib/core/{structure => actions}/api.ts | 32 +- .../core/{structure => actions}/api.util.ts | 0 .../src/lib/core}/actions/drop.actions.ts | 8 +- .../core/actions/e2e-request-api.helper.ts | 121 + .../actions/identity/applications.service.ts | 42 - .../identity/group-identity.service.ts | 2 +- .../core/actions/identity/identity.service.ts | 32 +- .../lib/core/actions/identity/public-api.ts | 2 - .../core/actions/identity/query.service.ts | 2 +- .../src/lib/core/actions/public-api.ts | 5 +- lib/testing/src/lib/core/models/user.model.ts | 47 +- .../card-view/card-view-date-item.page.ts | 4 +- .../card-view/card-view-select-item.page.ts | 2 +- .../src/lib/core/pages/form/form-fields.ts | 28 +- .../src/lib/core/pages/login-sso.page.ts | 61 +- .../lib/core/pages/material/checkbox.page.ts | 39 + .../material}/date-picker-calendar.page.ts | 6 +- .../pages/material}/date-picker.page.ts | 2 +- .../date-time-picker-calendar.page.ts | 4 +- .../pages/material}/date-time-picker.page.ts | 2 +- .../pages/material}/dropdown.page.ts | 4 +- .../pages/material}/public-api.ts | 1 + .../pages/material}/tabs.page.ts | 2 +- .../pages/material}/toggle.page.ts | 4 +- lib/testing/src/lib/core/pages/public-api.ts | 2 +- .../src/lib/core/pages/settings.page.ts | 16 +- .../src/lib/core/pages/snackbar.page.ts | 10 +- .../src/lib/core/pages/user-info.page.ts | 2 +- lib/testing/src/lib/core/pages/viewer.page.ts | 4 +- lib/testing/src/lib/core/public-api.ts | 1 - .../src/lib/core/structure/application.ts | 58 - .../core/structure/e2e-request-api.helper.ts | 112 - .../src/lib/core/structure/public-api.ts | 21 - .../testing/src/lib/core/utils/array.util.ts | 29 +- .../src/lib/core/utils/browser-actions.ts | 6 +- .../src/lib/core/utils/browser-visibility.ts | 2 +- lib/testing/src/lib/core/utils/logger.ts | 24 +- lib/testing/src/lib/core/utils/public-api.ts | 1 + lib/testing/src/lib/core/utils/string.util.ts | 19 +- .../src/lib/form-cloud/actions/public-api.ts | 18 - lib/testing/src/lib/form-cloud/public-api.ts | 18 - lib/testing/src/lib/material/public-api.ts | 18 - .../actions/application.ts | 59 + .../actions}/deployment-api.ts | 6 +- .../actions/form-cloud.service.ts | 0 .../actions}/modeling-api.ts | 4 +- .../actions}/project.ts | 8 +- .../actions/public-api.ts | 6 + .../actions}/tasks.service.ts | 4 +- ...dit-process-filter-cloud-component.page.ts | 2 +- .../edit-task-filter-cloud-component.page.ts | 4 +- .../actions/applications.util.ts | 110 + .../actions}/integration.service.ts | 10 +- .../actions}/models.service.ts | 14 +- .../actions}/process.util.ts | 34 +- .../actions}/public-api.ts | 4 +- .../process-services/pages/filters.page.ts | 8 +- .../pages/form-fields.page.ts | 2 +- .../pages/select-apps-dialog.page.ts | 2 +- .../pages/start-process.page.ts | 2 +- .../pages/task-filters.page.ts | 8 +- .../src/lib/process-services/public-api.ts | 1 + lib/testing/src/lib/test.configuration.ts | 35 +- lib/testing/src/public-api.ts | 3 - protractor.conf.ts | 38 +- scripts/app-config-replace.js | 6 +- scripts/check-env/check-cs-env.js | 10 +- scripts/check-env/check-ps-env.js | 4 +- scripts/check-env/delete-all-apps.js | 9 +- scripts/clean-env.js | 12 +- scripts/test-e2e-lib.sh | 16 +- scripts/travis/e2e/content-services-e2e.sh | 4 +- scripts/travis/e2e/core-e2e.sh | 4 +- scripts/travis/e2e/insights-e2e.sh | 3 + .../travis/e2e/process-services-cloud-e2e.sh | 8 +- scripts/travis/e2e/process-services-e2e.sh | 4 +- scripts/travis/e2e/search-e2e.sh | 4 +- 297 files changed, 5130 insertions(+), 9622 deletions(-) delete mode 100644 e2e/actions/ACS/node.actions.ts delete mode 100644 e2e/actions/APS/apps.actions.ts rename e2e/{content-services => core}/notifications-component.e2e.ts (85%) delete mode 100644 e2e/models/ACS/acs-user.model.ts delete mode 100644 e2e/models/APS/AppDefinition.js delete mode 100644 e2e/models/APS/ProcessCreatedByModel.js delete mode 100644 e2e/models/APS/ProcessInstance.js delete mode 100644 e2e/models/APS/ProcessModel.js delete mode 100644 e2e/models/APS/user.ts rename {lib/testing/src/lib/core/pages => e2e/pages/adf/demo-shell}/login.page.ts (80%) delete mode 100644 e2e/restAPI/ACS/PeopleAPI.js delete mode 100644 e2e/restAPI/ACS/RequestUtil/RequestCoreAPI.js delete mode 100644 e2e/restAPI/APIUtil.js delete mode 100644 e2e/restAPI/httpRequest/BasicAuthorization.js delete mode 100644 e2e/restAPI/httpRequest/HTTPRequestBase.js delete mode 100644 e2e/restAPI/httpRequest/HTTPRequestPublic.js rename e2e/search/{search-page-component.e2e.ts => search-page.e2e.ts} (82%) delete mode 100644 e2e/util/material.ts delete mode 100644 e2e/util/util.ts delete mode 100644 lib/cli/package-lock.json delete mode 100644 lib/testing/src/lib/core/actions/APS/applications.util.ts rename lib/testing/src/lib/core/{structure => actions}/api.ts (60%) rename lib/testing/src/lib/core/{structure => actions}/api.util.ts (100%) rename {e2e => lib/testing/src/lib/core}/actions/drop.actions.ts (96%) create mode 100644 lib/testing/src/lib/core/actions/e2e-request-api.helper.ts delete mode 100644 lib/testing/src/lib/core/actions/identity/applications.service.ts create mode 100644 lib/testing/src/lib/core/pages/material/checkbox.page.ts rename lib/testing/src/lib/{material/pages => core/pages/material}/date-picker-calendar.page.ts (93%) rename lib/testing/src/lib/{material/pages => core/pages/material}/date-picker.page.ts (94%) rename lib/testing/src/lib/{material/pages => core/pages/material}/date-time-picker-calendar.page.ts (95%) rename lib/testing/src/lib/{material/pages => core/pages/material}/date-time-picker.page.ts (96%) rename lib/testing/src/lib/{material/pages => core/pages/material}/dropdown.page.ts (95%) rename lib/testing/src/lib/{material/pages => core/pages/material}/public-api.ts (96%) rename lib/testing/src/lib/{material/pages => core/pages/material}/tabs.page.ts (94%) rename lib/testing/src/lib/{material/pages => core/pages/material}/toggle.page.ts (91%) delete mode 100644 lib/testing/src/lib/core/structure/application.ts delete mode 100644 lib/testing/src/lib/core/structure/e2e-request-api.helper.ts delete mode 100644 lib/testing/src/lib/core/structure/public-api.ts rename e2e/models/APS/standalone-task.ts => lib/testing/src/lib/core/utils/array.util.ts (59%) delete mode 100644 lib/testing/src/lib/form-cloud/actions/public-api.ts delete mode 100644 lib/testing/src/lib/form-cloud/public-api.ts delete mode 100644 lib/testing/src/lib/material/public-api.ts create mode 100644 lib/testing/src/lib/process-services-cloud/actions/application.ts rename lib/testing/src/lib/{core/structure => process-services-cloud/actions}/deployment-api.ts (91%) rename lib/testing/src/lib/{form-cloud => process-services-cloud}/actions/form-cloud.service.ts (100%) rename lib/testing/src/lib/{core/structure => process-services-cloud/actions}/modeling-api.ts (96%) rename lib/testing/src/lib/{core/structure => process-services-cloud/actions}/project.ts (95%) rename lib/testing/src/lib/{core/actions/identity => process-services-cloud/actions}/tasks.service.ts (98%) create mode 100644 lib/testing/src/lib/process-services/actions/applications.util.ts rename lib/testing/src/lib/{core/actions/APS => process-services/actions}/integration.service.ts (76%) rename lib/testing/src/lib/{core/actions/APS => process-services/actions}/models.service.ts (73%) rename lib/testing/src/lib/{core/actions/APS => process-services/actions}/process.util.ts (68%) rename lib/testing/src/lib/{core/actions/APS => process-services/actions}/public-api.ts (100%) diff --git a/demo-shell/src/app.config.json b/demo-shell/src/app.config.json index 56f4e57902..ae31f568bb 100644 --- a/demo-shell/src/app.config.json +++ b/demo-shell/src/app.config.json @@ -2,7 +2,7 @@ "$schema": "../../lib/core/app-config/schema.json", "ecmHost": "{protocol}//{hostname}{:port}", "bpmHost": "{protocol}//{hostname}{:port}", - "identityHost": "{protocol}//{hostname}{:port}/auth/realms/alfresco", + "identityHost": "{protocol}//{hostname}{:port}/auth/admin/realms/alfresco", "loginRoute": "login", "providers": "ALL", "contextRootBpm": "activiti-app", diff --git a/e2e/actions/ACS/node.actions.ts b/e2e/actions/ACS/node.actions.ts deleted file mode 100644 index cf6d22ea4a..0000000000 --- a/e2e/actions/ACS/node.actions.ts +++ /dev/null @@ -1,42 +0,0 @@ -/*! - * @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 class NodeActions { - - lockNode(alfrescoJsApi, nodeId: string, allowOwner?: string) { - - return alfrescoJsApi.nodes.lockNode(nodeId, { - type: allowOwner ? 'ALLOW_OWNER_CHANGES' : 'FULL', - lifetime: 'PERSISTENT' - }); - } - - async getNodesDisplayed(alfrescoJsApi, idList, numberOfElements) { - - const promises = []; - let nodeList; - - for (let i = 0; i < (numberOfElements - 1); i++) { - if (idList[i] && idList[i].trim() !== '') { - promises.push(alfrescoJsApi.core.nodesApi.getNode(idList[i])); - } - } - nodeList = await Promise.all(promises); - return nodeList; - } - -} diff --git a/e2e/actions/APS/apps-runtime.actions.ts b/e2e/actions/APS/apps-runtime.actions.ts index 07c25189f1..6ccebd5534 100644 --- a/e2e/actions/APS/apps-runtime.actions.ts +++ b/e2e/actions/APS/apps-runtime.actions.ts @@ -15,11 +15,19 @@ * limitations under the License. */ +import { ApiService } from '@alfresco/adf-testing'; +import { AppDefinitionRepresentation, ResultListDataRepresentationAppDefinitionRepresentation } from '@alfresco/js-api'; + export class AppsRuntimeActions { - async getRuntimeAppByName(alfrescoJsApi, appName) { + api: ApiService; - const runtimeApps = await this.getRuntimeAppDefinitions(alfrescoJsApi); + constructor(api: ApiService) { + this.api = api; + } + + async getRuntimeAppByName(appName: string): Promise { + const runtimeApps = await this.getRuntimeAppDefinitions(); let desiredApp; for (let i = 0; i < runtimeApps.data.length; i++) { @@ -31,9 +39,8 @@ export class AppsRuntimeActions { return desiredApp; } - async getRuntimeAppDefinitions(alfrescoJsApi) { - - return alfrescoJsApi.activiti.appsRuntimeApi.getAppDefinitions(); + async getRuntimeAppDefinitions(): Promise { + return this.api.getInstance().activiti.appsRuntimeApi.getAppDefinitions(); } } diff --git a/e2e/actions/APS/apps.actions.ts b/e2e/actions/APS/apps.actions.ts deleted file mode 100644 index eb2f07d5b6..0000000000 --- a/e2e/actions/APS/apps.actions.ts +++ /dev/null @@ -1,76 +0,0 @@ -/*! - * @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 path = require('path'); -import fs = require('fs'); -import AppPublish = require('../../models/APS/AppPublish'); -import remote = require('selenium-webdriver/remote'); -import { browser } from 'protractor'; - -export class AppsActions { - - async getProcessTaskId(alfrescoJsApi, processId) { - const taskList = await alfrescoJsApi.activiti.taskApi.listTasks({}); - let taskId = -1; - - taskList.data.forEach((task) => { - if (task.processInstanceId === processId) { - taskId = task.id; - } - }); - - return taskId; - } - - async getAppDefinitionId(alfrescoJsApi, appModelId) { - const appDefinitions = await alfrescoJsApi.activiti.appsApi.getAppDefinitions(); - let appDefinitionId = -1; - - appDefinitions.data.forEach((appDefinition) => { - if (appDefinition.modelId === appModelId) { - appDefinitionId = appDefinition.id; - } - }); - - return appDefinitionId; - } - - async publishDeployApp(alfrescoJsApi, appId) { - browser.setFileDetector(new remote.FileDetector()); - - const publishApp = await alfrescoJsApi.activiti.appsApi.publishAppDefinition(appId, new AppPublish()); - - await alfrescoJsApi.activiti.appsApi.deployAppDefinitions({ appDefinitions: [{ id: publishApp.appDefinition.id }] }); - - return publishApp; - } - - async importNewVersionAppDefinitionPublishDeployApp(alfrescoJsApi, appFileLocation, modelId) { - browser.setFileDetector(new remote.FileDetector()); - - const pathFile = path.join(browser.params.testConfig.main.rootPath + appFileLocation); - const file = fs.createReadStream(pathFile); - - const appCreated = await alfrescoJsApi.activiti.appsApi.importNewAppDefinition(modelId, file); - - const publishApp = await alfrescoJsApi.activiti.appsApi.publishAppDefinition(appCreated.id, new AppPublish()); - - await alfrescoJsApi.activiti.appsApi.deployAppDefinitions({ appDefinitions: [{ id: publishApp.appDefinition.id }] }); - - return appCreated; - } -} diff --git a/e2e/actions/APS/form-model.actions.ts b/e2e/actions/APS/form-model.actions.ts index fc1d638cbf..dd6b51755e 100644 --- a/e2e/actions/APS/form-model.actions.ts +++ b/e2e/actions/APS/form-model.actions.ts @@ -16,12 +16,20 @@ */ import { FormRepresentation } from '@alfresco/js-api'; +import { ApiService } from '@alfresco/adf-testing'; export class FormModelActions { - async getFormByName(alfrescoJsApi: any, name: string): Promise { + api: ApiService; - const forms = await alfrescoJsApi.activiti.editorApi.getForms(); + constructor(api: ApiService) { + this.api = api; + } + + async getFormByName(name: string): Promise { + + // @ts-ignore + const forms: any = await this.api.getInstance().activiti.editorApi.getForms(); const form = forms.data.find((currentForm) => { return currentForm.name === name; diff --git a/e2e/actions/APS/models.actions.ts b/e2e/actions/APS/models.actions.ts index 0c9d10cd52..a088efe728 100644 --- a/e2e/actions/APS/models.actions.ts +++ b/e2e/actions/APS/models.actions.ts @@ -15,16 +15,28 @@ * limitations under the License. */ +import { ApiService } from '@alfresco/adf-testing'; + export class ModelsActions { - async deleteVersionModel(alfrescoJsApi, modelId) { + api: ApiService; - return alfrescoJsApi.activiti.modelsApi.deleteModel(modelId, { cascade: false, deleteRuntimeApp : true }); + constructor(alfrescoApi: ApiService) { + this.api = alfrescoApi; } - async deleteEntireModel(alfrescoJsApi, modelId) { + async deleteVersionModel(modelId: number): Promise { + return this.api.getInstance().activiti.modelsApi.deleteModel(modelId, { + cascade: false, + deleteRuntimeApp: true + }); + } - return alfrescoJsApi.activiti.modelsApi.deleteModel(modelId, { cascade: true, deleteRuntimeApp : true }); + async deleteEntireModel(modelId: number): Promise { + return this.api.getInstance().activiti.modelsApi.deleteModel(modelId, { + cascade: true, + deleteRuntimeApp: true + }); } } diff --git a/e2e/actions/users.actions.ts b/e2e/actions/users.actions.ts index e391ba2450..337efa57e5 100644 --- a/e2e/actions/users.actions.ts +++ b/e2e/actions/users.actions.ts @@ -15,63 +15,121 @@ * limitations under the License. */ -import { Tenant } from '../models/APS/tenant'; -import { User } from '../models/APS/user'; import path = require('path'); import fs = require('fs'); import remote = require('selenium-webdriver/remote'); + import { browser } from 'protractor'; +import { ImageUploadRepresentation } from '@alfresco/js-api'; +import { ApiService, IdentityService, UserModel, Logger } from '@alfresco/adf-testing'; +import { Tenant } from '../models/APS/tenant'; +import { UserRepresentation } from '@alfresco/js-api/src/api/activiti-rest-api/model/userRepresentation'; + export class UsersActions { - async createTenantAndUser(alfrescoJsApi) { - const newTenant = await alfrescoJsApi.activiti.adminTenantsApi.createTenant(new Tenant()); + api: ApiService; + identityService: IdentityService; - const user = new User({ tenantId: newTenant.id }); - - const { id } = await alfrescoJsApi.activiti.adminUsersApi.createNewUser(user); - - return { ...user, id }; + constructor(alfrescoApi: ApiService) { + this.api = alfrescoApi; + if (this.api.apiService.isOauthConfiguration()) { + this.identityService = new IdentityService(this.api); + } } - async createApsUser(alfrescoJsApi, tenantId) { - const user = new User({ tenantId }); + async createUser(emailOrUserModel?: string | UserModel, firstName?: string, lastName?: string, tenantId?: number, password?: string): Promise { + let user; - const { id } = await alfrescoJsApi.activiti.adminUsersApi.createNewUser(user); + if (typeof emailOrUserModel !== 'string') { + user = new UserModel(emailOrUserModel); + } else { + user = new UserModel({ emailOrUserModel, firstName, lastName, tenantId, password }); + } - return { ...user, id }; - } + try { - async getApsUserByEmail(alfrescoJsApi, email) { + if (this.api.apiService.isEcmConfiguration() || (this.api.apiService.isEcmBpmConfiguration())) { + Logger.log('Create user ECM'); + await this.api.apiService.core.peopleApi.addPerson({ + id: user.email, + email: user.email, + firstName: user.firstName, + lastName: user.lastName, + password: user.password + }); + } - const users = await alfrescoJsApi.activiti.adminUsersApi.getUsers(); + if (this.api.apiService.isBpmConfiguration() || (this.api.apiService.isEcmBpmConfiguration())) { + Logger.log('Create user BPM'); - const user = users.data.filter((currentUser) => { - return currentUser.email === email; - }); + if (tenantId || (emailOrUserModel && typeof emailOrUserModel !== 'string' && emailOrUserModel.tenantId)) { + let tenantIdUser = 1; + + if (typeof emailOrUserModel !== 'string' && emailOrUserModel.tenantId) { + tenantIdUser = emailOrUserModel.tenantId; + } else if (tenantIdUser) { + tenantIdUser = tenantId; + } + + const apsUser = await this.createApsUser(tenantIdUser, user.email, user.firstName, user.lastName, user.password); + user.id = apsUser.id; + + } else { + const apsUser = await this.createTenantAndUser(user.email, user.firstName, user.lastName, user.password); + user.tenantId = apsUser.tenantId; + user.id = apsUser.id; + } + + } + + if (this.api.apiService.isOauthConfiguration()) { + Logger.log('Create user identity'); + + const identityUser = await this.identityService.createIdentityUser(user); + user.idIdentityService = identityUser.idIdentityService; + } + + } catch (e) { + Logger.error('Error create user' + JSON.stringify(e)); + } return user; } - async createApsUserWithName(alfrescoJsApi, tenantId, email, firstName, lastName) { - const user = new User({ tenantId , email, firstName, lastName}); + async createTenantAndUser(email?: string, firstName?: string, lastName?: string, password?: string): Promise { + const newTenant = await this.api.apiService.activiti.adminTenantsApi.createTenant(new Tenant()); - const { id } = await alfrescoJsApi.activiti.adminUsersApi.createNewUser(user); + const user = new UserModel({ + tenantId: newTenant.id, + email, + firstName, + lastName, + password + }); - return { ...user, id }; + return this.api.apiService.activiti.adminUsersApi.createNewUser(user.getAPSModel()); } - async cleanupTenant(alfrescoJsApi, tenantId) { - return alfrescoJsApi.activiti.adminTenantsApi.deleteTenant(tenantId); + async createApsUser(tenantId?: number, email?: string, firstName?: string, lastName?: string, password?: string): Promise { + + const user = new UserModel({ + tenantId, + email, + firstName, + lastName, + password + }); + + return this.api.apiService.activiti.adminUsersApi.createNewUser(user.getAPSModel()); } - async changeProfilePictureAps(alfrescoJsApi, fileLocation) { + async changeProfilePictureAps(fileLocation: string): Promise { browser.setFileDetector(new remote.FileDetector()); const pathFile = path.join(browser.params.testConfig.main.rootPath + fileLocation); const file = fs.createReadStream(pathFile); - return alfrescoJsApi.activiti.profileApi.uploadProfilePicture(file); + return this.api.apiService.activiti.profileApi.uploadProfilePicture(file); } - } diff --git a/e2e/content-services/about-content-services.component.e2e.ts b/e2e/content-services/about-content-services.component.e2e.ts index fdc750d976..88e8893fa7 100644 --- a/e2e/content-services/about-content-services.component.e2e.ts +++ b/e2e/content-services/about-content-services.component.e2e.ts @@ -14,29 +14,25 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import { LoginPage, AboutPage } from '@alfresco/adf-testing'; -import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; +import { LoginSSOPage, AboutPage, ApiService, UserModel } from '@alfresco/adf-testing'; import { browser } from 'protractor'; import { NavigationBarPage } from '../pages/adf/navigation-bar.page'; -import { AcsUserModel } from '../models/ACS/acs-user.model'; +import { UsersActions } from '../actions/users.actions'; describe('About Content Services', () => { - const loginPage = new LoginPage(); + const loginPage = new LoginSSOPage(); const navigationBarPage = new NavigationBarPage(); const aboutPage = new AboutPage(); - const acsUser = new AcsUserModel(); + let acsUser: UserModel; + const apiService = new ApiService(); + const usersActions = new UsersActions(apiService); beforeAll(async() => { - this.alfrescoJsApi = new AlfrescoApi({ - provider: 'ECM', - hostEcm: browser.params.testConfig.adf_acs.host - }); - - 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 apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); + acsUser = await usersActions.createUser(); + await apiService.getInstance().login(acsUser.email, acsUser.password); + await loginPage.login(acsUser.email, acsUser.password); await navigationBarPage.clickAboutButton(); }); diff --git a/e2e/content-services/comments/comment-component.e2e.ts b/e2e/content-services/comments/comment-component.e2e.ts index faad73c5d3..3f134d26c3 100644 --- a/e2e/content-services/comments/comment-component.e2e.ts +++ b/e2e/content-services/comments/comment-component.e2e.ts @@ -15,36 +15,34 @@ * limitations under the License. */ -import { LoginPage, UploadActions, StringUtil, ViewerPage } from '@alfresco/adf-testing'; +import { LoginSSOPage, UploadActions, StringUtil, ViewerPage, ApiService, UserModel } from '@alfresco/adf-testing'; import { ContentServicesPage } from '../../pages/adf/content-services.page'; import { CommentsPage } from '../../pages/adf/comments.page'; import { NavigationBarPage } from '../../pages/adf/navigation-bar.page'; -import { AcsUserModel } from '../../models/ACS/acs-user.model'; import { FileModel } from '../../models/ACS/file.model'; import { browser } from 'protractor'; import CONSTANTS = require('../../util/constants'); -import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; +import { UsersActions } from '../../actions/users.actions'; describe('Comment Component', () => { - const loginPage: LoginPage = new LoginPage(); + const loginPage: LoginSSOPage = new LoginSSOPage(); const contentServicesPage: ContentServicesPage = new ContentServicesPage(); const viewerPage: ViewerPage = new ViewerPage(); const commentsPage: CommentsPage = new CommentsPage(); const navigationBarPage = new NavigationBarPage(); - const acsUser: AcsUserModel = new AcsUserModel(); + const apiService = new ApiService(); let userFullName, nodeId; + let acsUser: UserModel; const pngFileModel = new FileModel({ name: browser.params.resources.Files.ADF_DOCUMENTS.PNG.file_name, location: browser.params.resources.Files.ADF_DOCUMENTS.PNG.file_path }); - this.alfrescoJsApi = new AlfrescoApi({ - provider: 'ECM', - hostEcm: browser.params.testConfig.adf_acs.host - }); - const uploadActions = new UploadActions(this.alfrescoJsApi); + + const uploadActions = new UploadActions(apiService); + const usersActions = new UsersActions(apiService); const comments = { first: 'This is a comment', @@ -59,8 +57,8 @@ describe('Comment Component', () => { }; beforeAll(async () => { - await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); - await this.alfrescoJsApi.core.peopleApi.addPerson(acsUser); + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); + acsUser = await usersActions.createUser(); }); afterAll(async () => { @@ -68,7 +66,7 @@ describe('Comment Component', () => { }); beforeEach(async () => { - await this.alfrescoJsApi.login(acsUser.id, acsUser.password); + await apiService.getInstance().login(acsUser.email, acsUser.password); const pngUploadedFile = await uploadActions.uploadFile(pngFileModel.location, pngFileModel.name, '-my-'); @@ -76,19 +74,19 @@ describe('Comment Component', () => { userFullName = pngUploadedFile.entry.createdByUser.displayName; - await loginPage.loginToContentServicesUsingUserModel(acsUser); + await loginPage.login(acsUser.email, acsUser.password); await navigationBarPage.clickContentServicesButton(); await contentServicesPage.waitForTableBody(); }); afterEach(async () => { - await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); await uploadActions.deleteFileOrFolder(nodeId); }); 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 }); + await apiService.getInstance().core.commentsApi.addComment(nodeId, { content: comments.test }); await viewerPage.viewFile(pngFileModel.name); await viewerPage.checkImgViewerIsDisplayed(); @@ -164,28 +162,28 @@ describe('Comment Component', () => { let site, pngUploadedFile; beforeAll(async () => { - await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); - site = await this.alfrescoJsApi.core.sitesApi.createSite({ + site = await apiService.getInstance().core.sitesApi.createSite({ title: StringUtil.generateRandomString(8), visibility: 'PUBLIC' }); - await this.alfrescoJsApi.core.sitesApi.addSiteMember(site.entry.id, { - id: acsUser.id, + await apiService.getInstance().core.sitesApi.addSiteMember(site.entry.id, { + id: acsUser.email, role: CONSTANTS.CS_USER_ROLES.CONSUMER }); pngUploadedFile = await uploadActions.uploadFile(pngFileModel.location, pngFileModel.name, site.entry.guid); - await loginPage.loginToContentServicesUsingUserModel(acsUser); + await loginPage.login(acsUser.email, acsUser.password); await navigationBarPage.clickContentServicesButton(); }); afterAll(async () => { await uploadActions.deleteFileOrFolder(pngUploadedFile.entry.id); - await this.alfrescoJsApi.core.sitesApi.deleteSite(site.entry.id, { permanent: true }); + await apiService.getInstance().core.sitesApi.deleteSite(site.entry.id, { permanent: true }); }); it('[C290147] Should NOT be able to add comments to a site file with Consumer permissions', async () => { diff --git a/e2e/content-services/directives/create-folder-directive.e2e.ts b/e2e/content-services/directives/create-folder-directive.e2e.ts index 4be620ad74..98f0d0b872 100644 --- a/e2e/content-services/directives/create-folder-directive.e2e.ts +++ b/e2e/content-services/directives/create-folder-directive.e2e.ts @@ -15,36 +15,32 @@ * limitations under the License. */ -import { LoginPage, NotificationHistoryPage, StringUtil } from '@alfresco/adf-testing'; +import { ApiService, LoginSSOPage, NotificationHistoryPage, StringUtil, UserModel } from '@alfresco/adf-testing'; import { ContentServicesPage } from '../../pages/adf/content-services.page'; import { FolderDialogPage } from '../../pages/adf/dialog/folder-dialog.page'; import { MetadataViewPage } from '../../pages/adf/metadata-view.page'; -import { AcsUserModel } from '../../models/ACS/acs-user.model'; -import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; import { browser, Key } from 'protractor'; import { NavigationBarPage } from '../../pages/adf/navigation-bar.page'; +import { UsersActions } from '../../actions/users.actions'; describe('Create folder directive', () => { - const loginPage = new LoginPage(); + const loginPage = new LoginSSOPage(); const contentServicesPage = new ContentServicesPage(); const createFolderDialog = new FolderDialogPage(); const notificationHistoryPage = new NotificationHistoryPage(); const metadataViewPage = new MetadataViewPage(); - const acsUser = new AcsUserModel(); + let acsUser: UserModel; const navigationBarPage = new NavigationBarPage(); + const apiService = new ApiService(); + const usersActions = new UsersActions(apiService); beforeAll(async () => { - this.alfrescoJsApi = new AlfrescoApi({ - provider: 'ECM', - hostEcm: browser.params.testConfig.adf_acs.host - }); + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); - await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); + acsUser = await usersActions.createUser(); - await this.alfrescoJsApi.core.peopleApi.addPerson(acsUser); - - await loginPage.loginToContentServicesUsingUserModel(acsUser); + await loginPage.login(acsUser.email, acsUser.password); await contentServicesPage.goToDocumentList(); }); diff --git a/e2e/content-services/directives/create-library-directive.e2e.ts b/e2e/content-services/directives/create-library-directive.e2e.ts index ed89f96018..4c7ddb35ac 100644 --- a/e2e/content-services/directives/create-library-directive.e2e.ts +++ b/e2e/content-services/directives/create-library-directive.e2e.ts @@ -15,22 +15,23 @@ * limitations under the License. */ -import { LoginPage, BrowserActions, StringUtil } from '@alfresco/adf-testing'; +import { LoginSSOPage, BrowserActions, StringUtil, ApiService, UserModel } from '@alfresco/adf-testing'; import { ContentServicesPage } from '../../pages/adf/content-services.page'; import { CreateLibraryDialogPage } from '../../pages/adf/dialog/create-library-dialog.page'; import { CustomSourcesPage } from '../../pages/adf/demo-shell/custom-sources.page'; -import { AcsUserModel } from '../../models/ACS/acs-user.model'; import { browser } from 'protractor'; -import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; import { NavigationBarPage } from '../../pages/adf/navigation-bar.page'; +import { UsersActions } from '../../actions/users.actions'; describe('Create library directive', () => { - const loginPage = new LoginPage(); + const loginPage = new LoginSSOPage(); const contentServicesPage = new ContentServicesPage(); const createLibraryDialog = new CreateLibraryDialogPage(); const customSourcesPage = new CustomSourcesPage(); const navigationBarPage = new NavigationBarPage(); + const apiService = new ApiService(); + const usersActions = new UsersActions(apiService); const visibility = { public: 'Public', @@ -40,21 +41,16 @@ describe('Create library directive', () => { let createSite; - const acsUser = new AcsUserModel(); + let acsUser: UserModel; beforeAll(async () => { - this.alfrescoJsApi = new AlfrescoApi({ - provider: 'ECM', - hostEcm: browser.params.testConfig.adf_acs.host - }); + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); - await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); + acsUser = await usersActions.createUser(); - await this.alfrescoJsApi.core.peopleApi.addPerson(acsUser); + await loginPage.login(acsUser.email, acsUser.password); - await loginPage.loginToContentServicesUsingUserModel(acsUser); - - createSite = await this.alfrescoJsApi.core.sitesApi.createSite({ + createSite = await apiService.getInstance().core.sitesApi.createSite({ title: StringUtil.generateRandomString(20).toLowerCase(), visibility: 'PUBLIC' }); @@ -62,7 +58,7 @@ describe('Create library directive', () => { afterAll(async () => { await navigationBarPage.clickLogoutButton(); - await this.alfrescoJsApi.core.sitesApi.deleteSite(createSite.entry.id, { permanent: true }); + await apiService.getInstance().core.sitesApi.deleteSite(createSite.entry.id, { permanent: true }); }); beforeEach(async () => { diff --git a/e2e/content-services/directives/delete-directive.e2e.ts b/e2e/content-services/directives/delete-directive.e2e.ts index 97750aef3d..8f21a7da49 100644 --- a/e2e/content-services/directives/delete-directive.e2e.ts +++ b/e2e/content-services/directives/delete-directive.e2e.ts @@ -16,29 +16,33 @@ */ import { ContentServicesPage } from '../../pages/adf/content-services.page'; -import { AcsUserModel } from '../../models/ACS/acs-user.model'; import { FileModel } from '../../models/ACS/file.model'; -import { BrowserActions, LoginPage, UploadActions, PaginationPage, StringUtil, PermissionActions } from '@alfresco/adf-testing'; +import { + BrowserActions, + LoginSSOPage, + UploadActions, + PaginationPage, + StringUtil, + PermissionActions, + ApiService, UserModel +} from '@alfresco/adf-testing'; import { browser } from 'protractor'; -import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; import { FolderModel } from '../../models/ACS/folder.model'; +import { UsersActions } from '../../actions/users.actions'; describe('Delete Directive', () => { - this.alfrescoJsApi = new AlfrescoApi({ - provider: 'ECM', - hostEcm: browser.params.testConfig.adf_acs.host - }); - - const loginPage = new LoginPage(); + const apiService = new ApiService(); + const loginPage = new LoginSSOPage(); const contentServicesPage = new ContentServicesPage(); const paginationPage = new PaginationPage(); const contentListPage = contentServicesPage.getDocumentList(); - const acsUser = new AcsUserModel(); - const secondAcsUser = new AcsUserModel(); - const uploadActions = new UploadActions(this.alfrescoJsApi); - const permissionActions = new PermissionActions(this.alfrescoJsApi); + const acsUser = new UserModel(); + const secondAcsUser = new UserModel(); + const uploadActions = new UploadActions(apiService); + const permissionActions = new PermissionActions(apiService); let baseFolderUploaded; + const usersActions = new UsersActions(apiService); const txtFileModel = new FileModel({ name: browser.params.resources.Files.ADF_DOCUMENTS.TXT.file_name, @@ -86,10 +90,10 @@ describe('Delete Directive', () => { }); 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(secondAcsUser); - await this.alfrescoJsApi.login(acsUser.id, acsUser.password); + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); + await usersActions.createUser(acsUser); + await usersActions.createUser(secondAcsUser); + await apiService.getInstance().login(acsUser.email, acsUser.password); }); beforeEach(async () => { @@ -104,7 +108,6 @@ describe('Delete Directive', () => { }); describe('Handling multiselection', () => { - beforeEach(async () => { await uploadActions.uploadFile(txtFileModel.location, txtFileModel.name, baseFolderUploaded.entry.id); await uploadActions.uploadFile(file0BytesModel.location, file0BytesModel.name, baseFolderUploaded.entry.id); @@ -113,7 +116,7 @@ describe('Delete Directive', () => { await uploadActions.uploadFile(pdfFileModel.location, pdfFileModel.name, textFolderUploaded.entry.id); await uploadActions.createFolder(folderSecond.name, baseFolderUploaded.entry.id); - await loginPage.loginToContentServicesUsingUserModel(acsUser); + await loginPage.login(acsUser.email, acsUser.password); await BrowserActions.getUrl(`${browser.baseUrl}/files/${baseFolderUploaded.entry.id}`); await contentServicesPage.waitForTableBody(); }); @@ -178,7 +181,6 @@ describe('Delete Directive', () => { }); describe('When selection on multiple pages', () => { - beforeEach(async () => { await uploadActions.uploadFile( txtFileModel.location, txtFileModel.name, baseFolderUploaded.entry.id); await uploadActions.uploadFile(file0BytesModel.location, file0BytesModel.name, baseFolderUploaded.entry.id); @@ -187,7 +189,7 @@ describe('Delete Directive', () => { await uploadActions.uploadFile(pngFileModel.location, pngFileModel.name, baseFolderUploaded.entry.id); await uploadActions.uploadFile(secondPngFileModel.location, secondPngFileModel.name, baseFolderUploaded.entry.id); - await loginPage.loginToContentServicesUsingUserModel(acsUser); + await loginPage.login(acsUser.email, acsUser.password); await BrowserActions.getUrl(`${browser.baseUrl}/files/${baseFolderUploaded.entry.id}`); await contentServicesPage.waitForTableBody(); }); @@ -205,22 +207,20 @@ describe('Delete Directive', () => { await contentListPage.dataTable.checkContentIsNotDisplayed('Display name', file0BytesModel.name); await contentListPage.dataTable.checkContentIsDisplayed('Display name', txtFileModel.name); }); - }); describe('when user does not have `delete` permission', () => { - let createdSite = null; let fileTxt, filePdf, folderA, folderB; beforeAll(async () => { - createdSite = await this.alfrescoJsApi.core.sitesApi.createSite({ + createdSite = await apiService.getInstance().core.sitesApi.createSite({ title: StringUtil.generateRandomString(20).toLowerCase(), visibility: 'PRIVATE' }); - await this.alfrescoJsApi.core.sitesApi.addSiteMember(createdSite.entry.id, { - id: secondAcsUser.id, + await apiService.getInstance().core.sitesApi.addSiteMember(createdSite.entry.id, { + id: secondAcsUser.email, role: 'SiteCollaborator' }); @@ -229,24 +229,24 @@ describe('Delete Directive', () => { folderA = await uploadActions.createFolder(StringUtil.generateRandomString(5), createdSite.entry.guid); folderB = await uploadActions.createFolder(StringUtil.generateRandomString(5), createdSite.entry.guid); - await permissionActions.addRoleForUser(secondAcsUser.getId(), 'SiteManager', folderA); - await permissionActions.addRoleForUser(secondAcsUser.getId(), 'SiteManager', fileTxt); - await permissionActions.addRoleForUser(secondAcsUser.getId(), 'SiteConsumer', folderB); - await permissionActions.addRoleForUser(secondAcsUser.getId(), 'SiteConsumer', filePdf); + await permissionActions.addRoleForUser(secondAcsUser.email, 'SiteManager', folderA); + await permissionActions.addRoleForUser(secondAcsUser.email, 'SiteManager', fileTxt); + await permissionActions.addRoleForUser(secondAcsUser.email, 'SiteConsumer', folderB); + await permissionActions.addRoleForUser(secondAcsUser.email, 'SiteConsumer', filePdf); await permissionActions.disableInheritedPermissionsForNode(folderA.entry.id); await permissionActions.disableInheritedPermissionsForNode(folderB.entry.id); await permissionActions.disableInheritedPermissionsForNode(fileTxt.entry.id); await permissionActions.disableInheritedPermissionsForNode(filePdf.entry.id); - await loginPage.loginToContentServicesUsingUserModel(secondAcsUser); + await loginPage.login(secondAcsUser.email, secondAcsUser.password); await BrowserActions.getUrl(`${browser.baseUrl}/files/${createdSite.entry.guid}`); await contentServicesPage.waitForTableBody(); }); afterAll(async () => { try { - await this.alfrescoJsApi.core.sitesApi.deleteSite(createdSite.entry.id, { permanent: true }); + await apiService.getInstance().core.sitesApi.deleteSite(createdSite.entry.id, { permanent: true }); } catch (error) {} }); diff --git a/e2e/content-services/directives/download-directive.e2e.ts b/e2e/content-services/directives/download-directive.e2e.ts index 0e79a25b75..d40e097306 100644 --- a/e2e/content-services/directives/download-directive.e2e.ts +++ b/e2e/content-services/directives/download-directive.e2e.ts @@ -16,22 +16,28 @@ */ import { ContentServicesPage } from '../../pages/adf/content-services.page'; -import { AcsUserModel } from '../../models/ACS/acs-user.model'; import { FileModel } from '../../models/ACS/file.model'; -import { LoginPage, UploadActions, BrowserVisibility, FileBrowserUtil } from '@alfresco/adf-testing'; +import { + LoginSSOPage, + UploadActions, + BrowserVisibility, + FileBrowserUtil, + ApiService, + UserModel +} from '@alfresco/adf-testing'; import { browser } from 'protractor'; -import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; import { NavigationBarPage } from '../../pages/adf/navigation-bar.page'; import { FolderModel } from '../../models/ACS/folder.model'; +import { UsersActions } from '../../actions/users.actions'; describe('Version component actions', () => { - const loginPage = new LoginPage(); + const loginPage = new LoginSSOPage(); const contentServicesPage = new ContentServicesPage(); const navigationBarPage = new NavigationBarPage(); const contentListPage = contentServicesPage.getDocumentList(); - const acsUser = new AcsUserModel(); + let acsUser: UserModel; const txtFileComma = new FileModel({ name: 'comma,name', @@ -58,17 +64,14 @@ describe('Version component actions', () => { location: browser.params.resources.Files.ADF_DOCUMENTS.TEXT_FOLDER.folder_location }); - this.alfrescoJsApi = new AlfrescoApi({ - provider: 'ECM', - hostEcm: browser.params.testConfig.adf_acs.host - }); - const uploadActions = new UploadActions(this.alfrescoJsApi); + const apiService = new ApiService(); + const uploadActions = new UploadActions(apiService); + const usersActions = new UsersActions(apiService); 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 apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); + acsUser = await usersActions.createUser(); + await apiService.getInstance().login(acsUser.email, acsUser.password); await uploadActions.uploadFile( txtFileModel.location, txtFileModel.name, '-my-'); await uploadActions.uploadFile(file0BytesModel.location, file0BytesModel.name, '-my-'); @@ -79,7 +82,7 @@ describe('Version component actions', () => { await uploadActions.createFolder(folderSecond.name, '-my-'); - await loginPage.loginToContentServicesUsingUserModel(acsUser); + await loginPage.login(acsUser.email, acsUser.password); await navigationBarPage.clickContentServicesButton(); await contentServicesPage.waitForTableBody(); diff --git a/e2e/content-services/directives/edit-folder-directive.e2e.ts b/e2e/content-services/directives/edit-folder-directive.e2e.ts index 1d56564768..02f7c05e7c 100644 --- a/e2e/content-services/directives/edit-folder-directive.e2e.ts +++ b/e2e/content-services/directives/edit-folder-directive.e2e.ts @@ -15,68 +15,71 @@ * limitations under the License. */ -import { BrowserActions, LoginPage, NotificationHistoryPage, StringUtil, UploadActions } from '@alfresco/adf-testing'; +import { + ApiService, + BrowserActions, + LoginSSOPage, + NotificationHistoryPage, + StringUtil, + UploadActions, UserModel +} from '@alfresco/adf-testing'; import { ContentServicesPage } from '../../pages/adf/content-services.page'; import { FolderDialogPage } from '../../pages/adf/dialog/folder-dialog.page'; -import { AcsUserModel } from '../../models/ACS/acs-user.model'; -import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; import { browser, protractor } from 'protractor'; import { NavigationBarPage } from '../../pages/adf/navigation-bar.page'; import { FileModel } from '../../models/ACS/file.model'; +import { UsersActions } from '../../actions/users.actions'; describe('Edit folder directive', () => { - const loginPage = new LoginPage(); + const loginPage = new LoginSSOPage(); const contentServicesPage = new ContentServicesPage(); const editFolderDialog = new FolderDialogPage(); - const acsUser = new AcsUserModel(); - const anotherAcsUser = new AcsUserModel(); + const acsUser = new UserModel(); + const anotherAcsUser = new UserModel(); const navigationBarPage = new NavigationBarPage(); const notificationHistoryPage = new NotificationHistoryPage(); - - this.alfrescoJsApi = new AlfrescoApi({ - provider: 'ECM', - hostEcm: browser.params.testConfig.adf_acs.host - }); + const apiService = new ApiService(); + const usersActions = new UsersActions(apiService); const pdfFile = new FileModel({ name: browser.params.resources.Files.ADF_DOCUMENTS.PDF.file_name, location: browser.params.resources.Files.ADF_DOCUMENTS.PDF.file_path }); - const uploadActions = new UploadActions(this.alfrescoJsApi); + const uploadActions = new UploadActions(apiService); const updateFolderName = StringUtil.generateRandomString(5); let editFolder, anotherFolder, filePdfNode, subFolder; 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); - await this.alfrescoJsApi.login(acsUser.id, acsUser.password); + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); + await usersActions.createUser(acsUser); + await usersActions.createUser(anotherAcsUser); + await apiService.getInstance().login(acsUser.email, acsUser.password); editFolder = await uploadActions.createFolder(StringUtil.generateRandomString(5), '-my-'); anotherFolder = await uploadActions.createFolder(StringUtil.generateRandomString(5), '-my-'); subFolder = await uploadActions.createFolder(StringUtil.generateRandomString(5), editFolder.entry.id); filePdfNode = await uploadActions.uploadFile(pdfFile.location, pdfFile.name, '-my-'); - await this.alfrescoJsApi.core.nodesApi.updateNode(editFolder.entry.id, + await apiService.getInstance().core.nodesApi.updateNode(editFolder.entry.id, { permissions: { locallySet: [{ - authorityId: anotherAcsUser.getId(), + authorityId: anotherAcsUser.email, name: 'Consumer', accessStatus: 'ALLOWED' }] } }); - await loginPage.loginToContentServicesUsingUserModel(acsUser); + await loginPage.login(acsUser.email, acsUser.password); }); afterAll(async () => { await navigationBarPage.clickLogoutButton(); - await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); await uploadActions.deleteFileOrFolder(editFolder.entry.id); await uploadActions.deleteFileOrFolder(anotherFolder.entry.id); await uploadActions.deleteFileOrFolder(filePdfNode.entry.id); @@ -223,9 +226,8 @@ describe('Edit folder directive', () => { }); describe('Edit Folder - no permission', () => { - beforeEach(async () => { - await loginPage.loginToContentServicesUsingUserModel(anotherAcsUser); + await loginPage.login(anotherAcsUser.email, anotherAcsUser.password); await BrowserActions.getUrl(browser.params.testConfig.adf.url + '/files/' + editFolder.entry.id); await contentServicesPage.getDocumentList().dataTablePage().waitTillContentLoaded(); }); diff --git a/e2e/content-services/directives/favorite-directive.e2e.ts b/e2e/content-services/directives/favorite-directive.e2e.ts index f08d077fb2..41a7df1a73 100644 --- a/e2e/content-services/directives/favorite-directive.e2e.ts +++ b/e2e/content-services/directives/favorite-directive.e2e.ts @@ -15,44 +15,47 @@ * limitations under the License. */ -import { ContentNodeSelectorDialogPage, LoginPage, StringUtil, UploadActions } from '@alfresco/adf-testing'; +import { + ApiService, + ContentNodeSelectorDialogPage, + LoginSSOPage, + StringUtil, + UploadActions, UserModel +} from '@alfresco/adf-testing'; import { ContentServicesPage } from '../../pages/adf/content-services.page'; -import { AcsUserModel } from '../../models/ACS/acs-user.model'; -import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; import { browser } from 'protractor'; import { FileModel } from '../../models/ACS/file.model'; import { NavigationBarPage } from '../../pages/adf/navigation-bar.page'; import { CustomSourcesPage } from '../../pages/adf/demo-shell/custom-sources.page'; import { TrashcanPage } from '../../pages/adf/trashcan.page'; +import { UsersActions } from '../../actions/users.actions'; describe('Favorite directive', () => { - const loginPage = new LoginPage(); + const loginPage = new LoginSSOPage(); const contentServicesPage = new ContentServicesPage(); const navigationBarPage = new NavigationBarPage(); - const acsUser = new AcsUserModel(); + let acsUser: UserModel; const customSourcesPage = new CustomSourcesPage(); const trashcanPage = new TrashcanPage(); const contentListPage = contentServicesPage.getDocumentList(); const contentNodeSelector = new ContentNodeSelectorDialogPage(); + const apiService = new ApiService(); + const usersActions = new UsersActions(apiService); - this.alfrescoJsApi = new AlfrescoApi({ - provider: 'ECM', - hostEcm: browser.params.testConfig.adf_acs.host - }); const pdfFile = new FileModel({ name: browser.params.resources.Files.ADF_DOCUMENTS.PDF.file_name, location: browser.params.resources.Files.ADF_DOCUMENTS.PDF.file_path }); - const uploadActions = new UploadActions(this.alfrescoJsApi); + const uploadActions = new UploadActions(apiService); let testFolder1, testFolder2, testFolder3, testFolder4, testFile; 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 apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); + acsUser = await usersActions.createUser(); + await apiService.getInstance().login(acsUser.email, acsUser.password); testFolder1 = await uploadActions.createFolder(StringUtil.generateRandomString(5), '-my-'); testFolder2 = await uploadActions.createFolder(StringUtil.generateRandomString(5), '-my-'); @@ -60,13 +63,13 @@ describe('Favorite directive', () => { testFolder4 = await uploadActions.createFolder(StringUtil.generateRandomString(5), '-my-'); testFile = await uploadActions.uploadFile(pdfFile.location, pdfFile.name, '-my-'); - await loginPage.loginToContentServicesUsingUserModel(acsUser); + await loginPage.login(acsUser.email, acsUser.password); await contentServicesPage.goToDocumentList(); }); afterAll(async () => { await navigationBarPage.clickLogoutButton(); - await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); await uploadActions.deleteFileOrFolder(testFolder1.entry.id); await uploadActions.deleteFileOrFolder(testFolder2.entry.id); await uploadActions.deleteFileOrFolder(testFolder3.entry.id); diff --git a/e2e/content-services/directives/restore-content-directive.e2e.ts b/e2e/content-services/directives/restore-content-directive.e2e.ts index f00fb895b6..58c4ea1291 100644 --- a/e2e/content-services/directives/restore-content-directive.e2e.ts +++ b/e2e/content-services/directives/restore-content-directive.e2e.ts @@ -17,29 +17,33 @@ import { ContentServicesPage } from '../../pages/adf/content-services.page'; -import { AcsUserModel } from '../../models/ACS/acs-user.model'; -import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; import { browser } from 'protractor'; import { FileModel } from '../../models/ACS/file.model'; import { NavigationBarPage } from '../../pages/adf/navigation-bar.page'; import { TrashcanPage } from '../../pages/adf/trashcan.page'; -import { LoginPage, NotificationHistoryPage, StringUtil, UploadActions, BrowserActions, BreadcrumbPage } from '@alfresco/adf-testing'; +import { + LoginSSOPage, + NotificationHistoryPage, + StringUtil, + UploadActions, + BrowserActions, + BreadcrumbPage, + ApiService, UserModel +} from '@alfresco/adf-testing'; +import { UsersActions } from '../../actions/users.actions'; describe('Restore content directive', () => { - const loginPage = new LoginPage(); + const loginPage = new LoginSSOPage(); const contentServicesPage = new ContentServicesPage(); const navigationBarPage = new NavigationBarPage(); - const acsUser = new AcsUserModel(); - const anotherAcsUser = new AcsUserModel(); + const acsUser = new UserModel(); + const anotherAcsUser = new UserModel(); const trashcanPage = new TrashcanPage(); const breadCrumbPage = new BreadcrumbPage(); const notificationHistoryPage = new NotificationHistoryPage(); - - this.alfrescoJsApi = new AlfrescoApi({ - provider: 'ECM', - hostEcm: browser.params.testConfig.adf_acs.host - }); + const apiService = new ApiService(); + const usersActions = new UsersActions(apiService); const pdfFileModel = new FileModel({ name: browser.params.resources.Files.ADF_DOCUMENTS.PDF.file_name, @@ -58,15 +62,15 @@ describe('Restore content directive', () => { const folderName = StringUtil.generateRandomString(5); - const uploadActions = new UploadActions(this.alfrescoJsApi); + const uploadActions = new UploadActions(apiService); let folderWithContent, folderWithFolder, subFolder, subFile, testFile, restoreFile, publicSite, siteFolder, siteFile; 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); - await this.alfrescoJsApi.login(acsUser.id, acsUser.password); + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); + await usersActions.createUser(acsUser); + await usersActions.createUser(anotherAcsUser); + await apiService.getInstance().login(acsUser.email, acsUser.password); await uploadActions.createFolder(folderName, '-my-'); folderWithContent = await uploadActions.createFolder(StringUtil.generateRandomString(5), '-my-'); @@ -76,11 +80,11 @@ describe('Restore content directive', () => { subFolder = await uploadActions.createFolder(StringUtil.generateRandomString(5), folderWithFolder.entry.id); restoreFile = await uploadActions.uploadFile(pngFileModel.location, pngFileModel.name, '-my-'); - await loginPage.loginToContentServicesUsingUserModel(acsUser); + await loginPage.login(acsUser.email, acsUser.password); }); afterAll(async () => { - await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); await uploadActions.deleteFileOrFolder(folderWithContent.entry.id); await uploadActions.deleteFileOrFolder(folderWithFolder.entry.id); }); @@ -92,7 +96,6 @@ describe('Restore content directive', () => { }); describe('Restore same name folders', () => { - beforeAll(async () => { await navigationBarPage.clickContentServicesButton(); await contentServicesPage.waitForTableBody(); @@ -174,7 +177,7 @@ describe('Restore content directive', () => { await contentServicesPage.checkContentIsDisplayed(subFolder.entry.name); await contentServicesPage.deleteContent(subFolder.entry.name); await contentServicesPage.checkContentIsNotDisplayed(subFolder.entry.name); - await breadCrumbPage.chooseBreadCrumb(acsUser.id); + await breadCrumbPage.chooseBreadCrumb(acsUser.email); await contentServicesPage.waitForTableBody(); await contentServicesPage.checkContentIsDisplayed(folderWithFolder.entry.name); await contentServicesPage.deleteContent(folderWithFolder.entry.name); @@ -231,20 +234,19 @@ describe('Restore content directive', () => { }); describe('Restore deleted library', () => { - beforeAll(async () => { - await this.alfrescoJsApi.login(acsUser.id, acsUser.password); + await apiService.getInstance().login(acsUser.email, acsUser.password); const publicSiteName = `00${StringUtil.generateRandomString(5)}`; const publicSiteBody = { visibility: 'PUBLIC', title: publicSiteName }; - publicSite = await this.alfrescoJsApi.core.sitesApi.createSite(publicSiteBody); + publicSite = await apiService.getInstance().core.sitesApi.createSite(publicSiteBody); 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); + await apiService.getInstance().core.sitesApi.deleteSite(publicSite.entry.id); }); afterAll(async () => { try { - await this.alfrescoJsApi.core.sitesApi.deleteSite(publicSite.entry.id, { permanent: true }); + await apiService.getInstance().core.sitesApi.deleteSite(publicSite.entry.id, { permanent: true }); } catch (error) { } }); @@ -269,11 +271,10 @@ describe('Restore content directive', () => { }); describe('Restore with folder hierarchies', () => { - let parentFolder, folderWithin, pdfFile, pngFile, mainFile, mainFolder; beforeAll(async () => { - await this.alfrescoJsApi.login(anotherAcsUser.id, anotherAcsUser.password); + await apiService.getInstance().login(anotherAcsUser.email, anotherAcsUser.password); await uploadActions.createFolder(folderName, '-my-'); parentFolder = await uploadActions.createFolder(StringUtil.generateRandomString(5), '-my-'); folderWithin = await uploadActions.createFolder(StringUtil.generateRandomString(5), parentFolder.entry.id); @@ -282,13 +283,13 @@ describe('Restore content directive', () => { mainFile = await uploadActions.uploadFile(testFileModel.location, testFileModel.name, '-my-'); mainFolder = await uploadActions.createFolder(StringUtil.generateRandomString(5), '-my-'); - await loginPage.loginToContentServicesUsingUserModel(anotherAcsUser); + await loginPage.login(anotherAcsUser.email, anotherAcsUser.password); await contentServicesPage.goToDocumentList(); await contentServicesPage.waitForTableBody(); }); afterAll(async () => { - await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); await uploadActions.deleteFileOrFolder(parentFolder.entry.id); await uploadActions.deleteFileOrFolder(mainFolder.entry.id); await uploadActions.deleteFileOrFolder(mainFile.entry.id); 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 497b73b4aa..b20d56108a 100644 --- a/e2e/content-services/document-list/document-list-actions.e2e.ts +++ b/e2e/content-services/document-list/document-list-actions.e2e.ts @@ -18,26 +18,24 @@ import { browser, by, element } from 'protractor'; import { BreadcrumbPage, - LoginPage, + LoginSSOPage, PaginationPage, UploadActions, StringUtil, ContentNodeSelectorDialogPage, - ViewerPage + ViewerPage, ApiService, UserModel } from '@alfresco/adf-testing'; import { ContentServicesPage } from '../../pages/adf/content-services.page'; import { NavigationBarPage } from '../../pages/adf/navigation-bar.page'; -import { AcsUserModel } from '../../models/ACS/acs-user.model'; -import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; import { FileModel } from '../../models/ACS/file.model'; -import { Util } from '../../util/util'; import { BreadCrumbDropdownPage } from '../../pages/adf/content-services/breadcrumb/bread-crumb-dropdown.page'; import { InfinitePaginationPage } from '../../pages/adf/core/infinite-pagination.page'; import { FolderModel } from '../../models/ACS/folder.model'; +import { UsersActions } from '../../actions/users.actions'; describe('Document List Component - Actions', () => { - const loginPage = new LoginPage(); + const loginPage = new LoginSSOPage(); const contentServicesPage = new ContentServicesPage(); const navigationBarPage = new NavigationBarPage(); const contentListPage = contentServicesPage.getDocumentList(); @@ -46,15 +44,13 @@ describe('Document List Component - Actions', () => { const breadCrumbDropdownPage = new BreadCrumbDropdownPage(); const breadCrumbPage = new BreadcrumbPage(); const viewerPage = new ViewerPage(); - this.alfrescoJsApi = new AlfrescoApi({ - provider: 'ECM', - hostEcm: browser.params.testConfig.adf_acs.host - }); - const uploadActions = new UploadActions(this.alfrescoJsApi); + const apiService = new ApiService(); + const usersActions = new UsersActions(apiService); + + const uploadActions = new UploadActions(apiService); const infinitePaginationPage = new InfinitePaginationPage(element(by.css('adf-content-node-selector'))); describe('Document List Component - Check Actions', () => { - let uploadedFolder, secondUploadedFolder; let acsUser = null; let pdfUploadedNode; @@ -77,20 +73,19 @@ describe('Document List Component - Actions', () => { }; 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); - await this.alfrescoJsApi.core.peopleApi.addPerson(acsUser); - await this.alfrescoJsApi.login(acsUser.id, acsUser.password); + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); + acsUser = await usersActions.createUser(); + await apiService.getInstance().login(acsUser.email, acsUser.password); pdfUploadedNode = await uploadActions.uploadFile(pdfFileModel.location, pdfFileModel.name, '-my-'); await uploadActions.uploadFile(testFileModel.location, testFileModel.name, '-my-'); uploadedFolder = await uploadActions.createFolder(folderName, '-my-'); secondUploadedFolder = await uploadActions.createFolder('secondFolder', '-my-'); - fileNames = Util.generateSequenceFiles(1, nrOfFiles, files.base, files.extension); + fileNames = StringUtil.generateFilesNames(1, nrOfFiles, files.base, files.extension); await uploadActions.createEmptyFiles(fileNames, uploadedFolder.entry.id); - await loginPage.loginToContentServicesUsingUserModel(acsUser); + await loginPage.login(acsUser.email, acsUser.password); await browser.sleep(10000); }); @@ -104,7 +99,6 @@ describe('Document List Component - Actions', () => { }); describe('File Actions', () => { - it('[C213257] Should be able to copy a file', async () => { await contentServicesPage.checkContentIsDisplayed(pdfUploadedNode.entry.name); await contentServicesPage.getDocumentList().rightClickOnRow(pdfFileModel.name); @@ -213,7 +207,6 @@ describe('Document List Component - Actions', () => { }); describe('Folder Actions', () => { - it('[C260138] Should be able to copy a folder', async () => { await contentServicesPage.copyContent(folderName); await contentNodeSelector.checkDialogIsDisplayed(); @@ -255,7 +248,6 @@ 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() }); @@ -266,12 +258,12 @@ describe('Document List Component - Actions', () => { let folder1, folder2, folder3, folder4, folder5, folder6; let folders; - const contentServicesUser = new AcsUserModel(); + const contentServicesUser = new UserModel(); beforeAll(async () => { - await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); - await this.alfrescoJsApi.core.peopleApi.addPerson(contentServicesUser); - await this.alfrescoJsApi.login(contentServicesUser.id, contentServicesUser.password); + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); + await usersActions.createUser(contentServicesUser); + await apiService.getInstance().login(contentServicesUser.email, contentServicesUser.password); folder1 = await uploadActions.createFolder('A' + folderModel1.name, '-my-'); folder2 = await uploadActions.createFolder('B' + folderModel2.name, '-my-'); folder3 = await uploadActions.createFolder('C' + folderModel3.name, '-my-'); @@ -282,7 +274,7 @@ describe('Document List Component - Actions', () => { }); beforeEach(async () => { - await loginPage.loginToContentServicesUsingUserModel(contentServicesUser); + await loginPage.login(contentServicesUser.email, contentServicesUser.password); await contentServicesPage.goToDocumentList(); await contentServicesPage.waitForTableBody(); await paginationPage.selectItemsPerPage('5'); @@ -291,7 +283,7 @@ describe('Document List Component - Actions', () => { }); afterAll(async () => { - await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); for (const folder of folders) { await uploadActions.deleteFileOrFolder(folder.entry.id); } @@ -343,11 +335,11 @@ describe('Document List Component - Actions', () => { await contentNodeSelector.checkDialogIsDisplayed(); await breadCrumbDropdownPage.clickParentFolder(); await breadCrumbDropdownPage.checkBreadCrumbDropdownIsDisplayed(); - await breadCrumbDropdownPage.choosePath(contentServicesUser.id); + await breadCrumbDropdownPage.choosePath(contentServicesUser.email); await contentNodeSelector.clickMoveCopyButton(); await contentServicesPage.checkContentIsNotDisplayed('A' + folderModel1.name); - await breadCrumbPage.chooseBreadCrumb(contentServicesUser.id); + await breadCrumbPage.chooseBreadCrumb(contentServicesUser.email); await contentServicesPage.waitForTableBody(); await contentServicesPage.checkContentIsDisplayed('A' + folderModel1.name); }); @@ -390,5 +382,5 @@ describe('Document List Component - Actions', () => { 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 59878ec7db..8b74fc76e7 100644 --- a/e2e/content-services/document-list/document-list-component.e2e.ts +++ b/e2e/content-services/document-list/document-list-component.e2e.ts @@ -16,28 +16,26 @@ */ import { ContentServicesPage } from '../../pages/adf/content-services.page'; -import { AcsUserModel } from '../../models/ACS/acs-user.model'; import { browser } from 'protractor'; -import { LoginPage, StringUtil, UploadActions, ViewerPage } from '@alfresco/adf-testing'; -import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; +import { ApiService, LoginSSOPage, StringUtil, UploadActions, ViewerPage } from '@alfresco/adf-testing'; import { FileModel } from '../../models/ACS/file.model'; import moment from 'moment-es6'; +import { UsersActions } from '../../actions/users.actions'; describe('Document List Component', () => { - const loginPage = new LoginPage(); + const loginPage = new LoginSSOPage(); const contentServicesPage = new ContentServicesPage(); let uploadedFolder, uploadedFolderExtra; - this.alfrescoJsApi = new AlfrescoApi({ - provider: 'ECM', - hostEcm: browser.params.testConfig.adf_acs.host - }); - const uploadActions = new UploadActions(this.alfrescoJsApi); + const apiService = new ApiService(); + const usersActions = new UsersActions(apiService); + + const uploadActions = new UploadActions(apiService); let acsUser = null; let testFileNode, pdfBFileNode; afterEach(async () => { - await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); if (uploadedFolder) { await uploadActions.deleteFileOrFolder(uploadedFolder.entry.id); uploadedFolder = null; @@ -54,11 +52,9 @@ describe('Document List Component', () => { await uploadActions.deleteFileOrFolder(pdfBFileNode.entry.id); pdfBFileNode = null; } - }); describe('Custom Column', () => { - let folderName; const pdfFileModel = new FileModel({ name: browser.params.resources.Files.ADF_DOCUMENTS.PDF.file_name, @@ -80,24 +76,21 @@ describe('Document List Component', () => { let pdfUploadedNode, docxUploadedNode, timeAgoUploadedNode, mediumDateUploadedNode; beforeAll(async () => { - - acsUser = new AcsUserModel(); - /* cspell:disable-next-line */ folderName = `MEESEEKS_${StringUtil.generateRandomString(5)}_LOOK_AT_ME`; - await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); - await this.alfrescoJsApi.core.peopleApi.addPerson(acsUser); + acsUser = await usersActions.createUser(); - await this.alfrescoJsApi.login(acsUser.id, acsUser.password); + await apiService.getInstance().login(acsUser.email, acsUser.password); uploadedFolder = await uploadActions.createFolder(folderName, '-my-'); pdfUploadedNode = await uploadActions.uploadFile(pdfFileModel.location, pdfFileModel.name, '-my-'); docxUploadedNode = await uploadActions.uploadFile(docxFileModel.location, docxFileModel.name, '-my-'); }); afterAll(async () => { - await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); if (pdfUploadedNode) { await uploadActions.deleteFileOrFolder(pdfUploadedNode.entry.id); @@ -111,11 +104,10 @@ describe('Document List Component', () => { if (mediumDateUploadedNode) { await uploadActions.deleteFileOrFolder(mediumDateUploadedNode.entry.id); } - }); beforeEach(async () => { - await loginPage.loginToContentServicesUsingUserModel(acsUser); + await loginPage.login(acsUser.email, acsUser.password); }); it('[C279926] Should only display the user\'s files and folders', async () => { @@ -135,7 +127,7 @@ describe('Document List Component', () => { }); it('[C279928] Should be able to display date with timeAgo', async () => { - await this.alfrescoJsApi.login(acsUser.id, acsUser.password); + await apiService.getInstance().login(acsUser.email, acsUser.password); timeAgoUploadedNode = await uploadActions.uploadFile(timeAgoFileModel.location, timeAgoFileModel.name, '-my-'); await contentServicesPage.goToDocumentList(); const dateValue = await contentServicesPage.getColumnValueForRow(timeAgoFileModel.name, 'Created'); @@ -143,7 +135,7 @@ describe('Document List Component', () => { }); it('[C279929] Should be able to display the date with date type', async () => { - await this.alfrescoJsApi.login(acsUser.id, acsUser.password); + await apiService.getInstance().login(acsUser.email, acsUser.password); mediumDateUploadedNode = await uploadActions.uploadFile(mediumFileModel.location, mediumFileModel.name, '-my-'); const createdDate = moment(mediumDateUploadedNode.createdAt).format('ll'); await contentServicesPage.goToDocumentList(); @@ -154,7 +146,6 @@ describe('Document List Component', () => { }); describe('Column Sorting', () => { - const fakeFileA = new FileModel({ name: 'A', location: browser.params.resources.Files.ADF_DOCUMENTS.TEST.file_path @@ -173,24 +164,22 @@ describe('Document List Component', () => { let fileANode, fileBNode, fileCNode; beforeAll(async () => { + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); - const user = new AcsUserModel(); + const user = await usersActions.createUser(); + await apiService.getInstance().login(user.email, user.password); - await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); - - await this.alfrescoJsApi.core.peopleApi.addPerson(user); - - await this.alfrescoJsApi.login(user.id, user.password); fileANode = await uploadActions.uploadFile(fakeFileA.location, fakeFileA.name, '-my-'); fileBNode = await uploadActions.uploadFile(fakeFileB.location, fakeFileB.name, '-my-'); fileCNode = await uploadActions.uploadFile(fakeFileC.location, fakeFileC.name, '-my-'); - await loginPage.loginToContentServicesUsingUserModel(user); + await loginPage.login(user.email, user.password); + await contentServicesPage.goToDocumentList(); }); afterAll(async () => { - await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); if (fileANode) { await uploadActions.deleteFileOrFolder(fileANode.entry.id); } @@ -200,7 +189,6 @@ describe('Document List Component', () => { if (fileCNode) { await uploadActions.deleteFileOrFolder(fileCNode.entry.id); } - }); it('[C260112] Should be able to sort by name (Ascending)', async () => { @@ -229,12 +217,10 @@ describe('Document List Component', () => { }); 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); + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); + acsUser = await usersActions.createUser(); + await loginPage.login(acsUser.email, acsUser.password); await contentServicesPage.goToDocumentList(); await contentServicesPage.createNewFolder(folderName); await contentServicesPage.doubleClickRow(folderName); @@ -247,14 +233,13 @@ describe('Document List Component', () => { name: browser.params.resources.Files.ADF_DOCUMENTS.TEST.file_name, location: browser.params.resources.Files.ADF_DOCUMENTS.TEST.file_location }); - acsUser = new AcsUserModel(); /* cspell:disable-next-line */ const folderName = `MEESEEKS_${StringUtil.generateRandomString(5)}_LOOK_AT_ME`; - 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 apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); + acsUser = await usersActions.createUser(); + await apiService.getInstance().login(acsUser.email, acsUser.password); uploadedFolder = await uploadActions.createFolder(folderName, '-my-'); - await loginPage.loginToContentServicesUsingUserModel(acsUser); + await loginPage.login(acsUser.email, acsUser.password); await contentServicesPage.goToDocumentList(); await contentServicesPage.checkContentIsDisplayed(uploadedFolder.entry.name); await contentServicesPage.doubleClickRow(uploadedFolder.entry.name); @@ -263,10 +248,9 @@ describe('Document List Component', () => { }); 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); + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); + const cleanUser = await usersActions.createUser(); + await loginPage.login(cleanUser.email, cleanUser.password); await contentServicesPage.clickOnContentServices(); await contentServicesPage.checkRecentFileToBeShowed(); const icon = await contentServicesPage.getRecentFileIcon(); @@ -277,15 +261,14 @@ describe('Document List Component', () => { }); 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`; - 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 apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); + acsUser = await usersActions.createUser(); + await apiService.getInstance().login(acsUser.email, acsUser.password); uploadedFolder = await uploadActions.createFolder(folderNameA, '-my-'); uploadedFolderExtra = await uploadActions.createFolder(folderNameB, '-my-'); - await loginPage.loginToContentServicesUsingUserModel(acsUser); + await loginPage.login(acsUser.email, acsUser.password); await contentServicesPage.goToDocumentList(); await contentServicesPage.checkContentIsDisplayed(folderNameA); await contentServicesPage.checkContentIsDisplayed(folderNameB); @@ -302,13 +285,12 @@ describe('Document List Component', () => { name: browser.params.resources.Files.ADF_DOCUMENTS.PDF_B.file_name, location: browser.params.resources.Files.ADF_DOCUMENTS.PDF_B.file_path }); - 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 this.alfrescoJsApi.login(acsUser.id, acsUser.password); + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); + acsUser = await usersActions.createUser(); + await apiService.getInstance().login(acsUser.email, acsUser.password); testFileNode = await uploadActions.uploadFile(testFileA.location, testFileA.name, '-my-'); pdfBFileNode = await uploadActions.uploadFile(testFileB.location, testFileB.name, '-my-'); - await loginPage.loginToContentServicesUsingUserModel(acsUser); + await loginPage.login(acsUser.email, acsUser.password); await contentServicesPage.goToDocumentList(); await contentServicesPage.checkContentIsDisplayed(testFileA.name); await contentServicesPage.checkContentIsDisplayed(testFileB.name); @@ -317,15 +299,13 @@ describe('Document List Component', () => { }); describe('Once uploaded 20 folders', () => { - let folderCreated; beforeAll(async () => { - acsUser = new AcsUserModel(); folderCreated = []; - 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 apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); + acsUser = await usersActions.createUser(); + await apiService.getInstance().login(acsUser.email, acsUser.password); let folderName = ''; let folder = null; @@ -343,14 +323,13 @@ describe('Document List Component', () => { }); it('[C277093] Should sort files with Items per page set to default', async () => { - await loginPage.loginToContentServicesUsingUserModel(acsUser); + await loginPage.login(acsUser.email, acsUser.password); await contentServicesPage.goToDocumentList(); await contentServicesPage.checkListIsSortedByNameColumn('asc'); }); }); describe('Column Template', () => { - const file0BytesModel = new FileModel({ name: browser.params.resources.Files.ADF_DOCUMENTS.TXT_0B.file_name, location: browser.params.resources.Files.ADF_DOCUMENTS.TXT_0B.file_path @@ -360,13 +339,12 @@ describe('Document List Component', () => { const viewer = new ViewerPage(); 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); - await this.alfrescoJsApi.login(acsUser.id, acsUser.password); + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); + acsUser = await usersActions.createUser(); + await apiService.getInstance().login(acsUser.email, acsUser.password); file = await uploadActions.uploadFile(file0BytesModel.location, file0BytesModel.name, '-my-'); - await loginPage.loginToContentServicesUsingUserModel(acsUser); + await loginPage.login(acsUser.email, acsUser.password); await contentServicesPage.goToDocumentList(); await contentServicesPage.waitForTableBody(); }); 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 464587cead..39c548246e 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 @@ -17,36 +17,34 @@ import { browser } from 'protractor'; import { - LoginPage, + LoginSSOPage, UploadActions, StringUtil, ContentNodeSelectorDialogPage, - NotificationHistoryPage, BrowserActions + NotificationHistoryPage, BrowserActions, ApiService, UserModel } from '@alfresco/adf-testing'; import { ContentServicesPage } from '../../pages/adf/content-services.page'; import { NavigationBarPage } from '../../pages/adf/navigation-bar.page'; -import { AcsUserModel } from '../../models/ACS/acs-user.model'; -import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; import { FileModel } from '../../models/ACS/file.model'; import CONSTANTS = require('../../util/constants'); +import { UsersActions } from '../../actions/users.actions'; describe('Document List Component', () => { - const loginPage = new LoginPage(); + const loginPage = new LoginSSOPage(); const contentServicesPage = new ContentServicesPage(); const navigationBarPage = new NavigationBarPage(); const contentNodeSelector = new ContentNodeSelectorDialogPage(); const notificationHistoryPage = new NotificationHistoryPage(); + const apiService = new ApiService(); + const usersActions = new UsersActions(apiService); - this.alfrescoJsApi = new AlfrescoApi({ - provider: 'ECM', - hostEcm: browser.params.testConfig.adf_acs.host - }); - const uploadActions = new UploadActions(this.alfrescoJsApi); + const uploadActions = new UploadActions(apiService); let uploadedFolder, uploadedFile, sourceFolder, destinationFolder, subFolder, subFolder2, copyFolder, subFile, duplicateFolderName; - let acsUser = null, anotherAcsUser: AcsUserModel; + const acsUser = new UserModel(); + const anotherAcsUser = new UserModel(); let folderName, sameNameFolder, site; const pdfFileModel = new FileModel({ @@ -60,22 +58,20 @@ describe('Document List Component', () => { }); beforeAll(async () => { - acsUser = new AcsUserModel(); - anotherAcsUser = new AcsUserModel(); folderName = StringUtil.generateRandomString(5); sameNameFolder = StringUtil.generateRandomString(5); - 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); - site = await this.alfrescoJsApi.core.sitesApi.createSite({ + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); + await usersActions.createUser(acsUser); + await usersActions.createUser(anotherAcsUser); + site = await apiService.getInstance().core.sitesApi.createSite({ title: StringUtil.generateRandomString(8), visibility: 'PUBLIC' }); - await this.alfrescoJsApi.core.sitesApi.addSiteMember(site.entry.id, { - id: anotherAcsUser.getId(), + await apiService.getInstance().core.sitesApi.addSiteMember(site.entry.id, { + id: anotherAcsUser.email, role: CONSTANTS.CS_USER_ROLES.COLLABORATOR }); - await this.alfrescoJsApi.login(acsUser.id, acsUser.password); + await apiService.getInstance().login(acsUser.email, acsUser.password); uploadedFolder = await uploadActions.createFolder(folderName, '-my-'); destinationFolder = await uploadActions.createFolder(StringUtil.generateRandomString(5), '-my-'); sourceFolder = await uploadActions.createFolder(StringUtil.generateRandomString(5), '-my-'); @@ -87,11 +83,11 @@ describe('Document List Component', () => { await uploadActions.uploadFile(pdfFileModel.location, pdfFileModel.name, uploadedFolder.entry.id); await uploadActions.uploadFile(pdfFileModel.location, pdfFileModel.name, sourceFolder.entry.id); uploadedFile = await uploadActions.uploadFile(pdfFileModel.location, pdfFileModel.name, '-my-'); - await this.alfrescoJsApi.core.nodesApi.updateNode(sourceFolder.entry.id, + await apiService.getInstance().core.nodesApi.updateNode(sourceFolder.entry.id, { permissions: { locallySet: [{ - authorityId: anotherAcsUser.getId(), + authorityId: anotherAcsUser.email, name: 'Consumer', accessStatus: 'ALLOWED' }] @@ -104,18 +100,17 @@ describe('Document List Component', () => { afterAll(async () => { await navigationBarPage.clickLogoutButton(); - await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); await uploadActions.deleteFileOrFolder(uploadedFolder.entry.id); await uploadActions.deleteFileOrFolder(uploadedFile.entry.id); await uploadActions.deleteFileOrFolder(sourceFolder.entry.id); await uploadActions.deleteFileOrFolder(destinationFolder.entry.id); - await this.alfrescoJsApi.core.sitesApi.deleteSite(site.entry.id, { permanent: true }); + await apiService.getInstance().core.sitesApi.deleteSite(site.entry.id, { permanent: true }); }); describe('Document List Component - Actions Move and Copy', () => { - beforeAll(async () => { - await loginPage.loginToContentServicesUsingUserModel(acsUser); + await loginPage.login(acsUser.email, acsUser.password); }); beforeEach(async () => { @@ -208,9 +203,8 @@ describe('Document List Component', () => { }); describe('Document List actionns - Move, Copy on no permission folder', () => { - beforeAll(async () => { - await loginPage.loginToContentServicesUsingUserModel(anotherAcsUser); + await loginPage.login(anotherAcsUser.email, anotherAcsUser.password); await BrowserActions.getUrl(`${browser.params.testConfig.adf.url}/files/${sourceFolder.entry.id}`); await contentServicesPage.getDocumentList().dataTablePage().waitTillContentLoaded(); }); @@ -271,7 +265,7 @@ describe('Document List Component', () => { await contentServicesPage.checkContentIsDisplayed(pdfFileModel.name); await contentServicesPage.checkDeleteIsDisabled(pdfFileModel.name); - await loginPage.loginToContentServicesUsingUserModel(acsUser); + await loginPage.login(acsUser.email, acsUser.password); await BrowserActions.getUrl(`${browser.params.testConfig.adf.url}/files/${sourceFolder.entry.id}`); await contentServicesPage.getDocumentList().dataTablePage().waitTillContentLoaded(); 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 f3cc6439d8..d2af83c019 100644 --- a/e2e/content-services/document-list/document-list-gallery.e2e.ts +++ b/e2e/content-services/document-list/document-list-gallery.e2e.ts @@ -16,27 +16,24 @@ */ import { ContentServicesPage } from '../../pages/adf/content-services.page'; -import { AcsUserModel } from '../../models/ACS/acs-user.model'; import { browser } from 'protractor'; -import { LoginPage, StringUtil, UploadActions } from '@alfresco/adf-testing'; -import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; +import { ApiService, LoginSSOPage, StringUtil, UploadActions } from '@alfresco/adf-testing'; import { FileModel } from '../../models/ACS/file.model'; import { NavigationBarPage } from '../../pages/adf/navigation-bar.page'; +import { UsersActions } from '../../actions/users.actions'; describe('Document List Component', () => { - const loginPage = new LoginPage(); + const loginPage = new LoginSSOPage(); const contentServicesPage = new ContentServicesPage(); - this.alfrescoJsApi = new AlfrescoApi({ - provider: 'ECM', - hostEcm: browser.params.testConfig.adf_acs.host - }); - const uploadActions = new UploadActions(this.alfrescoJsApi); + const apiService = new ApiService(); + const usersActions = new UsersActions(apiService); + + const uploadActions = new UploadActions(apiService); let acsUser = null; const navigationBarPage = new NavigationBarPage(); describe('Gallery View', () => { - const cardProperties = { DISPLAY_NAME: 'Display name', SIZE: 'Size', @@ -45,8 +42,6 @@ describe('Document List Component', () => { CREATED: 'Created' }; - let funnyUser; - const pdfFile = new FileModel({ name: browser.params.resources.Files.ADF_DOCUMENTS.PDF.file_name, location: browser.params.resources.Files.ADF_DOCUMENTS.PDF.file_path @@ -65,23 +60,22 @@ describe('Document List Component', () => { let filePdfNode, fileTestNode, fileDocxNode, folderNode, filePDFSubNode; 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); - await this.alfrescoJsApi.login(acsUser.id, acsUser.password); + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); + acsUser = await usersActions.createUser(); + await apiService.getInstance().login(acsUser.email, acsUser.password); filePdfNode = await uploadActions.uploadFile(pdfFile.location, pdfFile.name, '-my-'); fileTestNode = await uploadActions.uploadFile(testFile.location, testFile.name, '-my-'); fileDocxNode = await uploadActions.uploadFile(docxFile.location, docxFile.name, '-my-'); folderNode = await uploadActions.createFolder(folderName, '-my-'); filePDFSubNode = await uploadActions.uploadFile(pdfFile.location, pdfFile.name, folderNode.entry.id); - await loginPage.loginToContentServicesUsingUserModel(acsUser); + await loginPage.login(acsUser.email, acsUser.password); }); afterAll(async () => { await navigationBarPage.clickLogoutButton(); - await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); if (filePdfNode) { await uploadActions.deleteFileOrFolder(filePdfNode.entry.id); } @@ -97,8 +91,7 @@ describe('Document List Component', () => { if (folderNode) { await uploadActions.deleteFileOrFolder(folderNode.entry.id); } - - }); + }); beforeEach(async () => { await navigationBarPage.clickHomeButton(); @@ -129,27 +122,27 @@ describe('Document List Component', () => { await contentServicesPage.checkDocumentCardPropertyIsShowed(folderName, cardProperties.CREATED); 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}`); + await expect(await contentServicesPage.getAttributeValueForElement(folderName, cardProperties.CREATED_BY)).toBe(`${acsUser.firstName} ${acsUser.lastName}`); await expect(await contentServicesPage.getAttributeValueForElement(folderName, cardProperties.CREATED)).toMatch(/(ago|few)/); 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}`); + await expect(await contentServicesPage.getAttributeValueForElement(pdfFile.name, cardProperties.CREATED_BY)).toBe(`${acsUser.firstName} ${acsUser.lastName}`); await expect(await contentServicesPage.getAttributeValueForElement(pdfFile.name, cardProperties.CREATED)).toMatch(/(ago|few)/); await expect(await contentServicesPage.getAttributeValueForElement(docxFile.name, cardProperties.DISPLAY_NAME)).toBe(docxFile.name); await expect(await contentServicesPage.getAttributeValueForElement(docxFile.name, cardProperties.SIZE)).toBe(`11.81 KB`); await expect(await contentServicesPage.getAttributeValueForElement(docxFile.name, cardProperties.CREATED_BY)) - .toBe(`${funnyUser.entry.firstName} ${funnyUser.entry.lastName}`); + .toBe(`${acsUser.firstName} ${acsUser.lastName}`); await expect(await contentServicesPage.getAttributeValueForElement(docxFile.name, cardProperties.CREATED)).toMatch(/(ago|few)/); 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}`); + .toBe(`${acsUser.firstName} ${acsUser.lastName}`); await expect(await contentServicesPage.getAttributeValueForElement(testFile.name, cardProperties.CREATED)).toMatch(/(ago|few)/); }); 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 0f892996ff..55a909f57d 100644 --- a/e2e/content-services/document-list/document-list-pagination.e2e.ts +++ b/e2e/content-services/document-list/document-list-pagination.e2e.ts @@ -15,16 +15,23 @@ * limitations under the License. */ -import { LoginPage, UploadActions, PaginationPage, LocalStorageUtil, FileBrowserUtil } from '@alfresco/adf-testing'; +import { + ArrayUtil, + StringUtil, + LoginSSOPage, + UploadActions, + PaginationPage, + LocalStorageUtil, + FileBrowserUtil, + ApiService, UserModel +} from '@alfresco/adf-testing'; import { ContentServicesPage } from '../../pages/adf/content-services.page'; import { NavigationBarPage } from '../../pages/adf/navigation-bar.page'; -import { AcsUserModel } from '../../models/ACS/acs-user.model'; import { FolderModel } from '../../models/ACS/folder.model'; -import { Util } from '../../util/util'; import { browser } from 'protractor'; -import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; import { FileModel } from '../../models/ACS/file.model'; import { UploadDialogPage } from '../../pages/adf/dialog/upload-dialog.page'; +import { UsersActions } from '../../actions/users.actions'; describe('Document List - Pagination', () => { const pagination = { @@ -47,13 +54,13 @@ describe('Document List - Pagination', () => { default: '25' }; - const loginPage = new LoginPage(); + const loginPage = new LoginSSOPage(); const contentServicesPage = new ContentServicesPage(); const paginationPage = new PaginationPage(); const navigationBarPage = new NavigationBarPage(); const uploadDialog = new UploadDialogPage(); - const acsUser = new AcsUserModel(); + let acsUser: UserModel; const newFolderModel = new FolderModel({ name: 'newFolder' }); let fileNames = []; const nrOfFiles = 20; @@ -64,12 +71,10 @@ describe('Document List - Pagination', () => { const folderTwoModel = new FolderModel({ name: 'folderTwo' }); const folderThreeModel = new FolderModel({ name: 'folderThree' }); const numberOfSubFolders = 6; + const apiService = new ApiService(); + const usersActions = new UsersActions(apiService); - this.alfrescoJsApi = new AlfrescoApi({ - provider: 'ECM', - hostEcm: browser.params.testConfig.adf_acs.host - }); - const uploadActions = new UploadActions(this.alfrescoJsApi); + const uploadActions = new UploadActions(apiService); const docxFileModel = new FileModel({ 'name': browser.params.resources.Files.ADF_DOCUMENTS.DOCX.file_name, @@ -77,12 +82,12 @@ describe('Document List - Pagination', () => { }); beforeAll(async () => { - fileNames = Util.generateSequenceFiles(10, nrOfFiles + 9, pagination.base, pagination.extension); - secondSetOfFiles = Util.generateSequenceFiles(10, secondSetNumber + 9, pagination.secondSetBase, pagination.extension); + fileNames = StringUtil.generateFilesNames(10, nrOfFiles + 9, pagination.base, pagination.extension); + secondSetOfFiles = StringUtil.generateFilesNames(10, secondSetNumber + 9, pagination.secondSetBase, 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); + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); + acsUser = await usersActions.createUser(); + await apiService.getInstance().login(acsUser.email, acsUser.password); const folderThreeUploadedModel = await uploadActions.createFolder(folderThreeModel.name, '-my-'); const newFolderUploadedModel = await uploadActions.createFolder(newFolderModel.name, '-my-'); @@ -90,7 +95,7 @@ describe('Document List - Pagination', () => { await uploadActions.createEmptyFiles(fileNames, newFolderUploadedModel.entry.id); await uploadActions.createEmptyFiles(secondSetOfFiles, folderThreeUploadedModel.entry.id); - await loginPage.loginToContentServicesUsingUserModel(acsUser); + await loginPage.login(acsUser.email, acsUser.password); }); afterAll(async () => { @@ -108,7 +113,7 @@ describe('Document List - Pagination', () => { 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 expect(ArrayUtil.arrayContainsArray(list, fileNames)).toEqual(true); await paginationPage.checkNextPageButtonIsDisabled(); await paginationPage.checkPreviousPageButtonIsDisabled(); }); @@ -122,17 +127,17 @@ describe('Document List - Pagination', () => { 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 expect(ArrayUtil.arrayContainsArray(list, fileNames)).toEqual(true); await paginationPage.checkNextPageButtonIsDisabled(); await paginationPage.checkPreviousPageButtonIsDisabled(); await navigationBarPage.clickLogoutButton(); - await loginPage.loginToContentServicesUsingUserModel(acsUser); + await loginPage.login(acsUser.email, acsUser.password); await contentServicesPage.goToDocumentList(); await contentServicesPage.checkDocumentListElementsAreDisplayed(); await expect(await paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.twenty); await navigationBarPage.clickLogoutButton(); - await loginPage.loginToContentServicesUsingUserModel(acsUser); + await loginPage.login(acsUser.email, acsUser.password); }); it('[C260069] Should be able to set Items per page to 5', async () => { @@ -144,7 +149,7 @@ describe('Document List - Pagination', () => { 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 expect(ArrayUtil.arrayContainsArray(list, fileNames.slice(0, 5))).toEqual(true); await paginationPage.clickOnNextPage(); currentPage++; await contentServicesPage.checkDocumentListElementsAreDisplayed(); @@ -152,7 +157,7 @@ describe('Document List - Pagination', () => { 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 expect(ArrayUtil.arrayContainsArray(list, fileNames.slice(5, 10))).toEqual(true); await paginationPage.clickOnNextPage(); currentPage++; await contentServicesPage.checkDocumentListElementsAreDisplayed(); @@ -160,7 +165,7 @@ describe('Document List - Pagination', () => { 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 expect(ArrayUtil.arrayContainsArray(list, fileNames.slice(10, 15))).toEqual(true); await paginationPage.clickOnNextPage(); currentPage++; await contentServicesPage.checkDocumentListElementsAreDisplayed(); @@ -168,13 +173,13 @@ describe('Document List - Pagination', () => { 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); + await expect(ArrayUtil.arrayContainsArray(list, fileNames.slice(15, 20))).toEqual(true); await browser.refresh(); await contentServicesPage.checkDocumentListElementsAreDisplayed(); await expect(await paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.five); await navigationBarPage.clickLogoutButton(); - await loginPage.loginToContentServicesUsingUserModel(acsUser); + await loginPage.login(acsUser.email, acsUser.password); }); it('[C260067] Should be able to set Items per page to 10', async () => { @@ -187,7 +192,7 @@ describe('Document List - Pagination', () => { 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 expect(ArrayUtil.arrayContainsArray(list, fileNames.slice(0, 10))).toEqual(true); await paginationPage.clickOnNextPage(); currentPage++; await contentServicesPage.checkDocumentListElementsAreDisplayed(); @@ -195,13 +200,13 @@ describe('Document List - Pagination', () => { 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); + await expect(ArrayUtil.arrayContainsArray(list, fileNames.slice(10, 20))).toEqual(true); await browser.refresh(); await contentServicesPage.waitForTableBody(); await expect(await paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.ten); await navigationBarPage.clickLogoutButton(); - await loginPage.loginToContentServicesUsingUserModel(acsUser); + await loginPage.login(acsUser.email, acsUser.password); currentPage = 1; }); @@ -216,7 +221,7 @@ describe('Document List - Pagination', () => { 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); + await expect(ArrayUtil.arrayContainsArray(list, fileNames.slice(0, 15))).toEqual(true); currentPage++; await paginationPage.clickOnNextPage(); await contentServicesPage.checkDocumentListElementsAreDisplayed(); @@ -225,7 +230,7 @@ describe('Document List - Pagination', () => { 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); + await expect(ArrayUtil.arrayContainsArray(list, fileNames.slice(15, 20))).toEqual(true); await browser.refresh(); await contentServicesPage.waitForTableBody(); @@ -279,7 +284,7 @@ describe('Document List - Pagination', () => { 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); + await expect(ArrayUtil.arrayContainsArray(list, secondSetOfFiles.slice(0, 15))).toEqual(true); currentPage++; await paginationPage.clickOnNextPage(); @@ -288,7 +293,7 @@ describe('Document List - Pagination', () => { 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); + await expect(ArrayUtil.arrayContainsArray(list, secondSetOfFiles.slice(15, 25))).toEqual(true); currentPage = 1; await paginationPage.selectItemsPerPage(itemsPerPage.twenty); @@ -297,7 +302,7 @@ describe('Document List - Pagination', () => { 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); + await expect(ArrayUtil.arrayContainsArray(list, secondSetOfFiles.slice(0, 20))).toEqual(true); currentPage++; await paginationPage.clickOnNextPage(); @@ -306,7 +311,7 @@ describe('Document List - Pagination', () => { 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); + await expect(ArrayUtil.arrayContainsArray(list, secondSetOfFiles.slice(20, 25))).toEqual(true); }); it('[C216321] Should be able to modify the supported page size value', async () => { 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 d0443e95af..dbc49354cd 100644 --- a/e2e/content-services/document-list/document-list-permissions.e2e.ts +++ b/e2e/content-services/document-list/document-list-permissions.e2e.ts @@ -18,46 +18,38 @@ import { browser } from 'protractor'; import { ContentServicesPage } from '../../pages/adf/content-services.page'; import { NavigationBarPage } from '../../pages/adf/navigation-bar.page'; -import { AcsUserModel } from '../../models/ACS/acs-user.model'; -import { LoginPage, ErrorPage, StringUtil, BrowserActions } from '@alfresco/adf-testing'; -import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; +import { LoginSSOPage, ErrorPage, StringUtil, BrowserActions, ApiService } from '@alfresco/adf-testing'; +import { UsersActions } from '../../actions/users.actions'; describe('Document List Component', () => { - const loginPage = new LoginPage(); + const loginPage = new LoginSSOPage(); const contentServicesPage = new ContentServicesPage(); const errorPage = new ErrorPage(); const navigationBarPage = new NavigationBarPage(); + const apiService = new ApiService(); + const usersActions = new UsersActions(apiService); let privateSite; let acsUser = null; - beforeAll(() => { - this.alfrescoJsApi = new AlfrescoApi({ - provider: 'ECM', - hostEcm: browser.params.testConfig.adf_acs.host - }); - }); - describe('Permission Message', () => { - beforeAll(async () => { - acsUser = new AcsUserModel(); const siteName = `PRIVATE_TEST_SITE_${StringUtil.generateRandomString(5)}`; const privateSiteBody = { visibility: 'PRIVATE', title: siteName }; - await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); - await this.alfrescoJsApi.core.peopleApi.addPerson(acsUser); + acsUser = await usersActions.createUser(); - privateSite = await this.alfrescoJsApi.core.sitesApi.createSite(privateSiteBody); + privateSite = await apiService.getInstance().core.sitesApi.createSite(privateSiteBody); - await loginPage.loginToContentServicesUsingUserModel(acsUser); + await loginPage.login(acsUser.email, acsUser.password); }); afterAll(async () => { await navigationBarPage.clickLogoutButton(); - await this.alfrescoJsApi.core.sitesApi.deleteSite(privateSite.entry.id, { permanent: true }); + await apiService.getInstance().core.sitesApi.deleteSite(privateSite.entry.id, { permanent: true }); }); it('[C217334] Should display a message when accessing file without permissions', async () => { 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 e45e0e3286..364143e25d 100644 --- a/e2e/content-services/document-list/document-list-properties.e2e.ts +++ b/e2e/content-services/document-list/document-list-properties.e2e.ts @@ -15,28 +15,24 @@ * limitations under the License. */ -import { LoginPage, UploadActions } from '@alfresco/adf-testing'; +import { ApiService, DropActions, LoginSSOPage, UploadActions } from '@alfresco/adf-testing'; import { ContentServicesPage } from '../../pages/adf/content-services.page'; import { NavigationBarPage } from '../../pages/adf/navigation-bar.page'; -import { AcsUserModel } from '../../models/ACS/acs-user.model'; import { browser } from 'protractor'; -import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; -import { DropActions } from '../../actions/drop.actions'; import { FileModel } from '../../models/ACS/file.model'; +import { UsersActions } from '../../actions/users.actions'; describe('Document List Component - Properties', () => { - const loginPage = new LoginPage(); + const loginPage = new LoginSSOPage(); const contentServicesPage = new ContentServicesPage(); const navigationBar = new NavigationBarPage(); let subFolder, parentFolder; - this.alfrescoJsApi = new AlfrescoApi({ - provider: 'ECM', - hostEcm: browser.params.testConfig.adf_acs.host - }); - const uploadActions = new UploadActions(this.alfrescoJsApi); + const apiService = new ApiService(); + const uploadActions = new UploadActions(apiService); let acsUser = null; + const usersActions = new UsersActions(apiService); const pngFile = new FileModel({ name: browser.params.resources.Files.ADF_DOCUMENTS.PNG.file_name, @@ -44,25 +40,22 @@ describe('Document List Component - Properties', () => { }); describe('Allow drop files property', () => { - beforeEach(async () => { - acsUser = new AcsUserModel(); + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); - await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); + acsUser = await usersActions.createUser(); - await this.alfrescoJsApi.core.peopleApi.addPerson(acsUser); - - await this.alfrescoJsApi.login(acsUser.id, acsUser.password); + await apiService.getInstance().login(acsUser.email, acsUser.password); parentFolder = await uploadActions.createFolder('parentFolder', '-my-'); subFolder = await uploadActions.createFolder('subFolder', parentFolder.entry.id); - await loginPage.loginToContentServicesUsingUserModel(acsUser); + await loginPage.login(acsUser.email, acsUser.password); }); afterEach(async () => { - await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); await uploadActions.deleteFileOrFolder(subFolder.entry.id); await uploadActions.deleteFileOrFolder(parentFolder.entry.id); }); diff --git a/e2e/content-services/document-list/document-list-selection.e2e.ts b/e2e/content-services/document-list/document-list-selection.e2e.ts index cd69af80cc..f0cac1fd7e 100644 --- a/e2e/content-services/document-list/document-list-selection.e2e.ts +++ b/e2e/content-services/document-list/document-list-selection.e2e.ts @@ -15,42 +15,38 @@ * limitations under the License. */ -import { LoginPage, PaginationPage } from '@alfresco/adf-testing'; +import { ApiService, LoginSSOPage, PaginationPage, UserModel } from '@alfresco/adf-testing'; import { ContentServicesPage } from '../../pages/adf/content-services.page'; import { NavigationBarPage } from '../../pages/adf/navigation-bar.page'; -import { AcsUserModel } from '../../models/ACS/acs-user.model'; import { FolderModel } from '../../models/ACS/folder.model'; import { browser } from 'protractor'; -import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; import { FileModel } from '../../models/ACS/file.model'; import { UploadDialogPage } from '../../pages/adf/dialog/upload-dialog.page'; +import { UsersActions } from '../../actions/users.actions'; describe('Document List - Selection', () => { - const loginPage = new LoginPage(); + const loginPage = new LoginSSOPage(); const contentServicesPage = new ContentServicesPage(); const navigationBarPage = new NavigationBarPage(); const uploadDialog = new UploadDialogPage(); const paginationPage = new PaginationPage(); - const acsUser = new AcsUserModel(); + let acsUser: UserModel; const folderModel = new FolderModel({ name: 'folder' }); const docxFileModel = new FileModel({ 'name': browser.params.resources.Files.ADF_DOCUMENTS.DOCX.file_name, 'location': browser.params.resources.Files.ADF_DOCUMENTS.DOCX.file_location }); const displayColumnName = 'Display name'; - - this.alfrescoJsApi = new AlfrescoApi({ - provider: 'ECM', - hostEcm: browser.params.testConfig.adf_acs.host - }); + const apiService = new ApiService(); + const usersActions = new UsersActions(apiService); beforeAll(async () => { try { - 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 apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); + acsUser = await usersActions.createUser(); + await apiService.getInstance().login(acsUser.email, acsUser.password); - await loginPage.loginToContentServicesUsingUserModel(acsUser); + await loginPage.login(acsUser.email, acsUser.password); await contentServicesPage.goToDocumentList(); await contentServicesPage.checkDocumentListElementsAreDisplayed(); 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 41dd452c1d..2cc882a074 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 @@ -16,29 +16,27 @@ */ import { ContentServicesPage } from '../../pages/adf/content-services.page'; -import { AcsUserModel } from '../../models/ACS/acs-user.model'; import { browser } from 'protractor'; -import { LoginPage, StringUtil, UploadActions } from '@alfresco/adf-testing'; -import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; +import { ApiService, LoginSSOPage, StringUtil, UploadActions } from '@alfresco/adf-testing'; import { FileModel } from '../../models/ACS/file.model'; import { NavigationBarPage } from '../../pages/adf/navigation-bar.page'; +import { UsersActions } from '../../actions/users.actions'; describe('Document List Component', () => { - const loginPage = new LoginPage(); + const loginPage = new LoginSSOPage(); const contentServicesPage = new ContentServicesPage(); let uploadedFolder, uploadedFolderExtra; - this.alfrescoJsApi = new AlfrescoApi({ - provider: 'ECM', - hostEcm: browser.params.testConfig.adf_acs.host - }); - const uploadActions = new UploadActions(this.alfrescoJsApi); + const apiService = new ApiService(); + + const uploadActions = new UploadActions(apiService); let acsUser = null; let testFileNode, pdfBFileNode; const navigationBarPage = new NavigationBarPage(); + const usersActions = new UsersActions(apiService); afterEach(async () => { - await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); if (uploadedFolder) { await uploadActions.deleteFileOrFolder(uploadedFolder.entry.id); uploadedFolder = null; @@ -55,11 +53,9 @@ describe('Document List Component', () => { await uploadActions.deleteFileOrFolder(pdfBFileNode.entry.id); pdfBFileNode = null; } - }); describe('Thumbnails and tooltips', () => { - const pdfFile = new FileModel({ name: browser.params.resources.Files.ADF_DOCUMENTS.PDF.file_name, location: browser.params.resources.Files.ADF_DOCUMENTS.PDF.file_path @@ -78,12 +74,11 @@ describe('Document List Component', () => { let filePdfNode, fileTestNode, fileDocxNode, folderNode; beforeAll(async () => { - acsUser = new AcsUserModel(); - await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); - await this.alfrescoJsApi.core.peopleApi.addPerson(acsUser); + acsUser = await usersActions.createUser(); - await this.alfrescoJsApi.login(acsUser.id, acsUser.password); + await apiService.getInstance().login(acsUser.email, acsUser.password); filePdfNode = await uploadActions.uploadFile(pdfFile.location, pdfFile.name, '-my-'); fileTestNode = await uploadActions.uploadFile(testFile.location, testFile.name, '-my-'); fileDocxNode = await uploadActions.uploadFile(docxFile.location, docxFile.name, '-my-'); @@ -93,7 +88,7 @@ describe('Document List Component', () => { afterAll(async () => { await navigationBarPage.clickLogoutButton(); - await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); if (filePdfNode) { await uploadActions.deleteFileOrFolder(filePdfNode.entry.id); } @@ -106,11 +101,10 @@ describe('Document List Component', () => { if (folderNode) { await uploadActions.deleteFileOrFolder(folderNode.entry.id); } - - }); + }); beforeEach(async () => { - await loginPage.loginToContentServicesUsingUserModel(acsUser); + await loginPage.login(acsUser.email, acsUser.password); await contentServicesPage.goToDocumentList(); }); diff --git a/e2e/content-services/lock-file.e2e.ts b/e2e/content-services/lock-file.e2e.ts index ccccc18d5f..ed62bd5ce6 100644 --- a/e2e/content-services/lock-file.e2e.ts +++ b/e2e/content-services/lock-file.e2e.ts @@ -15,29 +15,27 @@ * limitations under the License. */ -import { LoginPage, UploadActions, StringUtil } from '@alfresco/adf-testing'; +import { LoginSSOPage, UploadActions, StringUtil, ApiService, UserModel } from '@alfresco/adf-testing'; import { NavigationBarPage } from '../pages/adf/navigation-bar.page'; import { ContentServicesPage } from '../pages/adf/content-services.page'; import { LockFilePage } from '../pages/adf/lock-file.page'; -import { AcsUserModel } from '../models/ACS/acs-user.model'; import { FileModel } from '../models/ACS/file.model'; import CONSTANTS = require('../util/constants'); import { browser } from 'protractor'; -import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; +import { UsersActions } from '../actions/users.actions'; describe('Lock File', () => { - const loginPage = new LoginPage(); + const loginPage = new LoginSSOPage(); const navigationBarPage = new NavigationBarPage(); const lockFilePage = new LockFilePage(); const contentServices = new ContentServicesPage(); - const adminUser = new AcsUserModel(); - const managerUser = new AcsUserModel(); - this.alfrescoJsApi = new AlfrescoApi({ - provider: 'ECM', - hostEcm: browser.params.testConfig.adf_acs.host - }); - const uploadActions = new UploadActions(this.alfrescoJsApi); + const adminUser = new UserModel(); + const managerUser = new UserModel(); + const apiService = new ApiService(); + const usersActions = new UsersActions(apiService); + + const uploadActions = new UploadActions(apiService); const pngFileModel = new FileModel({ name: browser.params.resources.Files.ADF_DOCUMENTS.PNG.file_name, @@ -52,34 +50,33 @@ describe('Lock File', () => { let nodeId, site, documentLibrary, lockedFileNodeId; beforeAll(async () => { - await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); - await this.alfrescoJsApi.core.peopleApi.addPerson(adminUser); - await this.alfrescoJsApi.core.peopleApi.addPerson(managerUser); + await usersActions.createUser(adminUser); + await usersActions.createUser(managerUser); - await this.alfrescoJsApi.login(adminUser.id, adminUser.password); + await apiService.getInstance().login(adminUser.email, adminUser.password); - site = await this.alfrescoJsApi.core.sitesApi.createSite({ + site = await apiService.getInstance().core.sitesApi.createSite({ title: StringUtil.generateRandomString(), visibility: 'PRIVATE' }); - const resultNode = await this.alfrescoJsApi.core.nodesApi.getNodeChildren(site.entry.guid); + const resultNode = await apiService.getInstance().core.nodesApi.getNodeChildren(site.entry.guid); documentLibrary = resultNode.list.entries[0].entry.id; - await this.alfrescoJsApi.core.sitesApi.addSiteMember(site.entry.id, { - id: managerUser.id, + await apiService.getInstance().core.sitesApi.addSiteMember(site.entry.id, { + id: managerUser.email, role: CONSTANTS.CS_USER_ROLES.MANAGER }); }); afterAll(async () => { - await this.alfrescoJsApi.core.sitesApi.deleteSite(site.entry.id, { permanent: true }); + await apiService.getInstance().core.sitesApi.deleteSite(site.entry.id, { permanent: true }); }); describe('Lock file interaction with the UI', () => { - beforeAll(async () => { const pngLockedUploadedFile = await uploadActions.uploadFile(pngFileToLock.location, pngFileToLock.name, documentLibrary); @@ -90,41 +87,35 @@ describe('Lock File', () => { try { const pngUploadedFile = await uploadActions.uploadFile(pngFileModel.location, pngFileModel.name, documentLibrary); nodeId = pngUploadedFile.entry.id; - await loginPage.loginToContentServicesUsingUserModel(adminUser); + await loginPage.login(adminUser.email, adminUser.password); await navigationBarPage.openContentServicesFolder(documentLibrary); await contentServices.waitForTableBody(); } catch (error) { - - } - - }); + } + }); afterEach(async () => { try { - await this.alfrescoJsApi.login(adminUser.id, adminUser.password); + await apiService.getInstance().login(adminUser.email, adminUser.password); await uploadActions.deleteFileOrFolder(nodeId); } catch (error) { - - } - - }); + } + }); afterAll(async () => { try { - await this.alfrescoJsApi.login(adminUser.id, adminUser.password); + await apiService.getInstance().login(adminUser.email, adminUser.password); - await this.alfrescoJsApi.core.nodesApi.unlockNode(lockedFileNodeId); + await apiService.getInstance().core.nodesApi.unlockNode(lockedFileNodeId); await uploadActions.deleteFileOrFolder(lockedFileNodeId); } catch (error) { - - } - - }); + } + }); it('[C286604] Should be able to open Lock file option by clicking the lock image', async () => { await contentServices.lockContent(pngFileModel.name); @@ -171,27 +162,25 @@ describe('Lock File', () => { }); describe('Locked file without owner permissions', () => { - beforeEach(async () => { const pngUploadedFile = await uploadActions.uploadFile(pngFileModel.location, pngFileModel.name, documentLibrary); nodeId = pngUploadedFile.entry.id; - await loginPage.loginToContentServicesUsingUserModel(managerUser); + await loginPage.login(managerUser.email, managerUser.password); await navigationBarPage.openContentServicesFolder(documentLibrary); }); afterEach(async () => { - await this.alfrescoJsApi.login(adminUser.id, adminUser.password); + await apiService.getInstance().login(adminUser.email, adminUser.password); try { - await this.alfrescoJsApi.core.nodesApi.unlockNode(nodeId); + await apiService.getInstance().core.nodesApi.unlockNode(nodeId); await uploadActions.deleteFileOrFolder(nodeId); } catch (error) { } - - }); + }); it('[C286610] Should not be able to delete a locked file', async () => { await contentServices.lockContent(pngFileModel.name); @@ -201,12 +190,11 @@ describe('Lock File', () => { await lockFilePage.clickSaveButton(); try { - await this.alfrescoJsApi.core.nodesApi.deleteNode(nodeId); + await apiService.getInstance().core.nodesApi.deleteNode(nodeId); } catch (error) { await expect(error.status).toEqual(409); } - - }); + }); it('[C286611] Should not be able to rename a locked file', async () => { await contentServices.lockContent(pngFileModel.name); @@ -216,13 +204,12 @@ describe('Lock File', () => { await lockFilePage.clickSaveButton(); try { - await this.alfrescoJsApi.core.nodesApi.updateNode(nodeId, { name: 'My new name' }); + await apiService.getInstance().core.nodesApi.updateNode(nodeId, { name: 'My new name' }); } catch (error) { await expect(error.status).toEqual(409); } - - }); + }); it('[C286612] Should not be able to move a locked file', async () => { await contentServices.lockContent(pngFileModel.name); @@ -232,7 +219,7 @@ describe('Lock File', () => { await lockFilePage.clickSaveButton(); try { - await this.alfrescoJsApi.core.nodesApi.moveNode(nodeId, { targetParentId: '-my-' }); + await apiService.getInstance().core.nodesApi.moveNode(nodeId, { targetParentId: '-my-' }); } catch (error) { await expect(error.status).toEqual(409); @@ -247,7 +234,7 @@ describe('Lock File', () => { await lockFilePage.clickSaveButton(); try { - await this.alfrescoJsApi.core.nodesApi.updateNodeContent(nodeId, 'NEW FILE CONTENT'); + await apiService.getInstance().core.nodesApi.updateNodeContent(nodeId, 'NEW FILE CONTENT'); } catch (error) { await expect(error.status).toEqual(409); @@ -256,7 +243,6 @@ describe('Lock File', () => { }); describe('Locked file with owner permissions', () => { - let pngFileToBeLocked; beforeAll(async () => { @@ -265,29 +251,26 @@ describe('Lock File', () => { lockedFileNodeId = pngFileToBeLocked.entry.id; } catch (error) { } - - }); + }); beforeEach(async () => { try { const pngUploadedFile = await uploadActions.uploadFile(pngFileModel.location, pngFileModel.name, documentLibrary); nodeId = pngUploadedFile.entry.id; - await loginPage.loginToContentServicesUsingUserModel(adminUser); + await loginPage.login(adminUser.email, adminUser.password); await navigationBarPage.openContentServicesFolder(documentLibrary); } catch (error) { } - - }); + }); afterEach(async () => { - await this.alfrescoJsApi.login(adminUser.id, adminUser.password); + await apiService.getInstance().login(adminUser.email, adminUser.password); try { await uploadActions.deleteFileOrFolder(nodeId); } catch (error) { } - - }); + }); it('[C286614] Owner of the locked file should be able to rename if Allow owner to modify is checked', async () => { await contentServices.lockContent(pngFileModel.name); @@ -298,12 +281,11 @@ describe('Lock File', () => { await lockFilePage.clickSaveButton(); try { - const response = await this.alfrescoJsApi.core.nodesApi.updateNode(nodeId, { name: 'My new name' }); + const response = await apiService.getInstance().core.nodesApi.updateNode(nodeId, { name: '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 () => { await contentServices.lockContent(pngFileModel.name); @@ -314,12 +296,11 @@ describe('Lock File', () => { await lockFilePage.clickSaveButton(); try { - const response = await this.alfrescoJsApi.core.nodesApi.updateNodeContent(nodeId, 'NEW FILE CONTENT'); - await expect(response.entry.modifiedAt).toBeGreaterThan(response.entry.createdAt); + const response = await apiService.getInstance().core.nodesApi.updateNodeContent(nodeId, 'NEW FILE CONTENT'); + await expect(response.entry.modifiedAt.getTime()).toBeGreaterThan(response.entry.createdAt.getTime()); } catch (error) { } - - }); + }); it('[C286616] Owner of the locked file should be able to move if Allow owner to modify is checked', async () => { await contentServices.lockContent(pngFileModel.name); @@ -330,15 +311,14 @@ describe('Lock File', () => { await lockFilePage.clickSaveButton(); try { - await this.alfrescoJsApi.core.nodesApi.moveNode(nodeId, { targetParentId: '-my-' }); + await apiService.getInstance().core.nodesApi.moveNode(nodeId, { targetParentId: '-my-' }); - const movedFile = await this.alfrescoJsApi.core.nodesApi.getNode(nodeId); + const movedFile = await apiService.getInstance().core.nodesApi.getNode(nodeId); 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', async () => { await contentServices.lockContent(pngFileToLock.name); diff --git a/e2e/content-services/metadata/aspect-oriented-config.e2e.ts b/e2e/content-services/metadata/aspect-oriented-config.e2e.ts index c7bef450cf..a3b5dc8e89 100644 --- a/e2e/content-services/metadata/aspect-oriented-config.e2e.ts +++ b/e2e/content-services/metadata/aspect-oriented-config.e2e.ts @@ -15,27 +15,34 @@ * limitations under the License. */ -import { LoginPage, UploadActions, LocalStorageUtil, ViewerPage } from '@alfresco/adf-testing'; +import { + CheckboxPage, + LoginSSOPage, + UploadActions, + LocalStorageUtil, + ViewerPage, + ApiService, UserModel +} from '@alfresco/adf-testing'; import { MetadataViewPage } from '../../pages/adf/metadata-view.page'; import { NavigationBarPage } from '../../pages/adf/navigation-bar.page'; -import { AcsUserModel } from '../../models/ACS/acs-user.model'; import { FileModel } from '../../models/ACS/file.model'; import { browser } from 'protractor'; -import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; import { ContentServicesPage } from '../../pages/adf/content-services.page'; -import { check } from '../../util/material'; +import { UsersActions } from '../../actions/users.actions'; describe('Aspect oriented config', () => { - const loginPage = new LoginPage(); + const loginPage = new LoginSSOPage(); const viewerPage = new ViewerPage(); const metadataViewPage = new MetadataViewPage(); const navigationBarPage = new NavigationBarPage(); const contentServicesPage = new ContentServicesPage(); const modelOneName = 'modelOne', emptyAspectName = 'emptyAspect'; const defaultModel = 'cm', defaultEmptyPropertiesAspect = 'taggable', aspectName = 'Taggable'; + const apiService = new ApiService(); + const usersActions = new UsersActions(apiService); - const acsUser = new AcsUserModel(); + let acsUser: UserModel; const pngFileModel = new FileModel({ name: browser.params.resources.Files.ADF_DOCUMENTS.PNG.file_name, @@ -44,39 +51,35 @@ describe('Aspect oriented config', () => { let uploadActions; beforeAll(async () => { - this.alfrescoJsApi = new AlfrescoApi({ - provider: 'ECM', - hostEcm: browser.params.testConfig.adf_acs.host - }); - uploadActions = new UploadActions(this.alfrescoJsApi); + uploadActions = new UploadActions(apiService); - await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); try { - await this.alfrescoJsApi.core.customModelApi.createCustomModel('ACTIVE', modelOneName, modelOneName, modelOneName, modelOneName); + await apiService.getInstance().core.customModelApi.createCustomModel('ACTIVE', modelOneName, modelOneName, modelOneName, modelOneName); } catch (e) { } try { - await this.alfrescoJsApi.core.customModelApi.createCustomAspect(modelOneName, emptyAspectName, null, emptyAspectName, emptyAspectName); + await apiService.getInstance().core.customModelApi.createCustomAspect(modelOneName, emptyAspectName, null, emptyAspectName, emptyAspectName); } catch (e) { } - await this.alfrescoJsApi.core.peopleApi.addPerson(acsUser); + acsUser = await usersActions.createUser(); - await this.alfrescoJsApi.login(acsUser.id, acsUser.password); + await apiService.getInstance().login(acsUser.email, acsUser.password); const uploadedFile = await uploadActions.uploadFile(pngFileModel.location, pngFileModel.name, '-my-'); - await loginPage.loginToContentServicesUsingUserModel(acsUser); + await loginPage.login(acsUser.email, acsUser.password); - const aspects = await this.alfrescoJsApi.core.nodesApi.getNode(uploadedFile.entry.id); + const aspects = await apiService.getInstance().core.nodesApi.getNode(uploadedFile.entry.id); aspects.entry.aspectNames.push(modelOneName.concat(':', emptyAspectName)); aspects.entry.aspectNames.push(defaultModel.concat(':', defaultEmptyPropertiesAspect)); - await this.alfrescoJsApi.core.nodesApi.updateNode(uploadedFile.entry.id, { aspectNames: aspects.entry.aspectNames }); + await apiService.getInstance().core.nodesApi.updateNode(uploadedFile.entry.id, { aspectNames: aspects.entry.aspectNames }); }); afterAll(async () => { @@ -89,7 +92,6 @@ describe('Aspect oriented config', () => { }); it('[C261117] Should be possible restrict the display properties of one an aspect', async () => { - await LocalStorageUtil.setConfigField('content-metadata', JSON.stringify({ presets: { default: [ @@ -130,7 +132,6 @@ describe('Aspect oriented config', () => { }); it('[C260185] Should ignore not existing aspect when present in the configuration', async () => { - await LocalStorageUtil.setConfigField('content-metadata', JSON.stringify({ presets: { default: { @@ -157,7 +158,6 @@ describe('Aspect oriented config', () => { }); it('[C260183] Should show all the aspect if the content-metadata configuration is NOT provided', async () => { - await LocalStorageUtil.setConfigField('content-metadata', '{}'); await navigationBarPage.clickContentServicesButton(); @@ -175,7 +175,6 @@ describe('Aspect oriented config', () => { }); it('[C260182] Should show all the aspects if the default configuration contains the star symbol', async () => { - await LocalStorageUtil.setConfigField('content-metadata', JSON.stringify({ presets: { default: '*' @@ -197,7 +196,6 @@ describe('Aspect oriented config', () => { }); it('[C268899] Should be possible use a Translation key as Title of a metadata group', async () => { - await LocalStorageUtil.setConfigField('content-metadata', '{' + ' "presets": {' + ' "default": [' + @@ -241,7 +239,6 @@ describe('Aspect oriented config', () => { }); it('[C279968] Should be possible use a custom preset', async () => { - await LocalStorageUtil.setConfigField('content-metadata', '{' + ' "presets": {' + ' "custom-preset": {' + @@ -258,7 +255,7 @@ describe('Aspect oriented config', () => { await viewerPage.checkInfoSideBarIsDisplayed(); await metadataViewPage.clickOnPropertiesTab(); - await check(metadataViewPage.presetSwitch); + await CheckboxPage.check(metadataViewPage.presetSwitch); await metadataViewPage.enterPresetText('custom-preset'); @@ -270,7 +267,6 @@ describe('Aspect oriented config', () => { }); it('[C299186] The aspect without properties is not displayed', async () => { - await LocalStorageUtil.setConfigField('content-metadata', '{' + ' "presets": { "' + modelOneName + ' ": { "' + modelOneName + ':' + emptyAspectName + @@ -293,7 +289,6 @@ describe('Aspect oriented config', () => { }); it('[C299187] The aspect with empty properties is displayed when edit', async () => { - await LocalStorageUtil.setConfigField('content-metadata', '{' + ' "presets": { "' + defaultModel + ' ": { "' + defaultModel + ':' + defaultEmptyPropertiesAspect + diff --git a/e2e/content-services/metadata/metadata-permissions.e2e.ts b/e2e/content-services/metadata/metadata-permissions.e2e.ts index 9be0bef169..f9693f0ae4 100644 --- a/e2e/content-services/metadata/metadata-permissions.e2e.ts +++ b/e2e/content-services/metadata/metadata-permissions.e2e.ts @@ -15,14 +15,13 @@ * limitations under the License. */ -import { LoginPage, UploadActions, StringUtil, ViewerPage } from '@alfresco/adf-testing'; +import { LoginSSOPage, UploadActions, StringUtil, ViewerPage, ApiService, UserModel } from '@alfresco/adf-testing'; import { MetadataViewPage } from '../../pages/adf/metadata-view.page'; import { NavigationBarPage } from '../../pages/adf/navigation-bar.page'; -import { AcsUserModel } from '../../models/ACS/acs-user.model'; import { FileModel } from '../../models/ACS/file.model'; import { browser } from 'protractor'; -import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; import CONSTANTS = require('../../util/constants'); +import { UsersActions } from '../../actions/users.actions'; describe('permissions', () => { @@ -39,64 +38,62 @@ describe('permissions', () => { EDIT_BUTTON_TOOLTIP: 'Edit' }; - const loginPage = new LoginPage(); + const loginPage = new LoginSSOPage(); const viewerPage = new ViewerPage(); const metadataViewPage = new MetadataViewPage(); const navigationBarPage = new NavigationBarPage(); - const consumerUser = new AcsUserModel(); - const collaboratorUser = new AcsUserModel(); - const contributorUser = new AcsUserModel(); + const consumerUser = new UserModel(); + const collaboratorUser = new UserModel(); + const contributorUser = new UserModel(); let site; const pngFileModel = new FileModel({ name: browser.params.resources.Files.ADF_DOCUMENTS.PNG.file_name, location: browser.params.resources.Files.ADF_DOCUMENTS.PNG.file_path }); - this.alfrescoJsApi = new AlfrescoApi({ - provider: 'ECM', - hostEcm: browser.params.testConfig.adf_acs.host - }); - const uploadActions = new UploadActions(this.alfrescoJsApi); + const apiService = new ApiService(); + const usersActions = new UsersActions(apiService); + + const uploadActions = new UploadActions(apiService); beforeAll(async () => { + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); - await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); + await usersActions.createUser(consumerUser); + await usersActions.createUser(collaboratorUser); + await usersActions.createUser(contributorUser); - await this.alfrescoJsApi.core.peopleApi.addPerson(consumerUser); - await this.alfrescoJsApi.core.peopleApi.addPerson(collaboratorUser); - await this.alfrescoJsApi.core.peopleApi.addPerson(contributorUser); - - site = await this.alfrescoJsApi.core.sitesApi.createSite({ + site = await apiService.getInstance().core.sitesApi.createSite({ title: StringUtil.generateRandomString(), visibility: 'PUBLIC' }); - await this.alfrescoJsApi.core.sitesApi.addSiteMember(site.entry.id, { - id: consumerUser.id, + await apiService.getInstance().core.sitesApi.addSiteMember(site.entry.id, { + id: consumerUser.email, role: CONSTANTS.CS_USER_ROLES.CONSUMER }); - await this.alfrescoJsApi.core.sitesApi.addSiteMember(site.entry.id, { - id: collaboratorUser.id, + await apiService.getInstance().core.sitesApi.addSiteMember(site.entry.id, { + id: collaboratorUser.email, role: CONSTANTS.CS_USER_ROLES.COLLABORATOR }); - await this.alfrescoJsApi.core.sitesApi.addSiteMember(site.entry.id, { - id: contributorUser.id, + await apiService.getInstance().core.sitesApi.addSiteMember(site.entry.id, { + id: contributorUser.email, role: CONSTANTS.CS_USER_ROLES.CONTRIBUTOR }); await uploadActions.uploadFile(pngFileModel.location, pngFileModel.name, site.entry.guid); - }); + }); afterAll(async () => { await navigationBarPage.clickLogoutButton(); - await this.alfrescoJsApi.core.sitesApi.deleteSite(site.entry.id, { permanent: true }); + await apiService.getInstance().core.sitesApi.deleteSite(site.entry.id, { permanent: true }); }); it('[C274692] Should not be possible edit metadata properties when the user is a consumer user', async () => { - await loginPage.loginToContentServicesUsingUserModel(consumerUser); + await loginPage.login(consumerUser.email, consumerUser.password); await navigationBarPage.openContentServicesFolder(site.entry.guid); @@ -108,7 +105,7 @@ describe('permissions', () => { }); it('[C279971] Should be possible edit metadata properties when the user is a collaborator user', async () => { - await loginPage.loginToContentServicesUsingUserModel(collaboratorUser); + await loginPage.login(collaboratorUser.email, collaboratorUser.password); await navigationBarPage.openContentServicesFolder(site.entry.guid); @@ -128,7 +125,7 @@ describe('permissions', () => { }); it('[C279972] Should be possible edit metadata properties when the user is a contributor user', async () => { - await loginPage.loginToContentServicesUsingUserModel(collaboratorUser); + await loginPage.login(collaboratorUser.email, collaboratorUser.password); await navigationBarPage.openContentServicesFolder(site.entry.guid); diff --git a/e2e/content-services/metadata/metadata-properties.e2e.ts b/e2e/content-services/metadata/metadata-properties.e2e.ts index f82bf3e8ce..68bbd8d0fb 100644 --- a/e2e/content-services/metadata/metadata-properties.e2e.ts +++ b/e2e/content-services/metadata/metadata-properties.e2e.ts @@ -15,15 +15,13 @@ * limitations under the License. */ -import { LoginPage, UploadActions, ViewerPage } from '@alfresco/adf-testing'; +import { ApiService, CheckboxPage, LoginSSOPage, UploadActions, UserModel, ViewerPage } from '@alfresco/adf-testing'; import { MetadataViewPage } from '../../pages/adf/metadata-view.page'; -import { AcsUserModel } from '../../models/ACS/acs-user.model'; import { FileModel } from '../../models/ACS/file.model'; import { browser } from 'protractor'; -import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; -import { check, uncheck } from '../../util/material'; import { NavigationBarPage } from '../../pages/adf/navigation-bar.page'; import { ContentServicesPage } from '../../pages/adf/content-services.page'; +import { UsersActions } from '../../actions/users.actions'; describe('CardView Component - properties', () => { @@ -40,29 +38,26 @@ describe('CardView Component - properties', () => { EDIT_BUTTON_TOOLTIP: 'Edit' }; - const loginPage = new LoginPage(); + const loginPage = new LoginSSOPage(); const navigationBarPage = new NavigationBarPage(); const viewerPage = new ViewerPage(); const metadataViewPage = new MetadataViewPage(); const contentServicesPage = new ContentServicesPage(); - const acsUser = new AcsUserModel(); + let acsUser: UserModel; const pngFileModel = new FileModel({ name: browser.params.resources.Files.ADF_DOCUMENTS.PNG.file_name, location: browser.params.resources.Files.ADF_DOCUMENTS.PNG.file_path }); - this.alfrescoJsApi = new AlfrescoApi({ - provider: 'ECM', - hostEcm: browser.params.testConfig.adf_acs.host - }); - const uploadActions = new UploadActions(this.alfrescoJsApi); + const apiService = new ApiService(); + const uploadActions = new UploadActions(apiService); + const usersActions = new UsersActions(apiService); 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 apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); + acsUser = await usersActions.createUser(); + await apiService.getInstance().login(acsUser.email, acsUser.password); const pdfUploadedFile = await uploadActions.uploadFile(pngFileModel.location, pngFileModel.name, '-my-'); @@ -70,7 +65,7 @@ describe('CardView Component - properties', () => { pngFileModel.update(pdfUploadedFile.entry); - await loginPage.loginToContentServicesUsingUserModel(acsUser); + await loginPage.login(acsUser.email, acsUser.password); await navigationBarPage.clickContentServicesButton(); await contentServicesPage.waitForTableBody(); @@ -96,7 +91,7 @@ describe('CardView Component - properties', () => { await metadataViewPage.checkPropertyIsVisible('properties.exif:flash', 'boolean'); await metadataViewPage.checkPropertyIsNotVisible('properties.exif:model', 'textitem'); - await check(metadataViewPage.displayEmptySwitch); + await CheckboxPage.check(metadataViewPage.displayEmptySwitch); await metadataViewPage.checkPropertyIsVisible('properties.exif:flash', 'boolean'); await metadataViewPage.checkPropertyIsVisible('properties.exif:model', 'textitem'); @@ -109,7 +104,7 @@ describe('CardView Component - properties', () => { await metadataViewPage.clickOnPropertiesTab(); await metadataViewPage.editIconIsDisplayed(); - await check(metadataViewPage.readonlySwitch); + await CheckboxPage.check(metadataViewPage.readonlySwitch); await metadataViewPage.editIconIsNotDisplayed(); }); @@ -135,7 +130,7 @@ describe('CardView Component - properties', () => { await metadataViewPage.checkMetadataGroupIsExpand('EXIF'); await metadataViewPage.checkMetadataGroupIsNotExpand('properties'); - await check(metadataViewPage.multiSwitch); + await CheckboxPage.check(metadataViewPage.multiSwitch); await metadataViewPage.clickMetadataGroup('properties'); @@ -149,13 +144,13 @@ describe('CardView Component - properties', () => { await viewerPage.checkInfoSideBarIsDisplayed(); await metadataViewPage.clickOnPropertiesTab(); - await uncheck(metadataViewPage.defaultPropertiesSwitch); + await CheckboxPage.uncheck(metadataViewPage.defaultPropertiesSwitch); await metadataViewPage.checkMetadataGroupIsNotPresent('properties'); await metadataViewPage.checkMetadataGroupIsPresent('EXIF'); await metadataViewPage.checkMetadataGroupIsExpand('EXIF'); - await check(metadataViewPage.defaultPropertiesSwitch); + await CheckboxPage.check(metadataViewPage.defaultPropertiesSwitch); await metadataViewPage.checkMetadataGroupIsPresent('properties'); await metadataViewPage.checkMetadataGroupIsExpand('properties'); @@ -169,7 +164,7 @@ describe('CardView Component - properties', () => { await metadataViewPage.informationButtonIsDisplayed(); - await uncheck(metadataViewPage.defaultPropertiesSwitch); + await CheckboxPage.uncheck(metadataViewPage.defaultPropertiesSwitch); await metadataViewPage.informationButtonIsNotDisplayed(); }); @@ -185,7 +180,7 @@ describe('CardView Component - properties', () => { await metadataViewPage.checkMetadataGroupIsExpand('EXIF'); await metadataViewPage.checkMetadataGroupIsNotExpand('properties'); - await check(metadataViewPage.displayEmptySwitch); + await CheckboxPage.check(metadataViewPage.displayEmptySwitch); await metadataViewPage.checkPropertyIsVisible('properties.exif:flash', 'boolean'); await metadataViewPage.checkPropertyIsVisible('properties.exif:model', 'textitem'); diff --git a/e2e/content-services/metadata/metadata-smoke-tests.e2e.ts b/e2e/content-services/metadata/metadata-smoke-tests.e2e.ts index 772cbfaea6..4d9d59c5d3 100644 --- a/e2e/content-services/metadata/metadata-smoke-tests.e2e.ts +++ b/e2e/content-services/metadata/metadata-smoke-tests.e2e.ts @@ -16,21 +16,20 @@ */ import { - LoginPage, + LoginSSOPage, LocalStorageUtil, BrowserActions, UploadActions, ViewerPage, - StringUtil + StringUtil, ApiService, UserModel } from '@alfresco/adf-testing'; import { ContentServicesPage } from '../../pages/adf/content-services.page'; import { MetadataViewPage } from '../../pages/adf/metadata-view.page'; -import { AcsUserModel } from '../../models/ACS/acs-user.model'; import { FileModel } from '../../models/ACS/file.model'; import { browser } from 'protractor'; import moment = require('moment'); -import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; import { NavigationBarPage } from '../../pages/adf/navigation-bar.page'; +import { UsersActions } from '../../actions/users.actions'; describe('Metadata component', () => { @@ -47,13 +46,13 @@ describe('Metadata component', () => { EDIT_BUTTON_TOOLTIP: 'Edit' }; - const loginPage = new LoginPage(); + const loginPage = new LoginSSOPage(); const contentServicesPage = new ContentServicesPage(); const viewerPage = new ViewerPage(); const metadataViewPage = new MetadataViewPage(); const navigationBarPage = new NavigationBarPage(); - const acsUser = new AcsUserModel(); + let acsUser: UserModel; const folderName = StringUtil.generateRandomString(); @@ -62,17 +61,14 @@ describe('Metadata component', () => { location: browser.params.resources.Files.ADF_DOCUMENTS.PNG.file_path }); - this.alfrescoJsApi = new AlfrescoApi({ - provider: 'ECM', - hostEcm: browser.params.testConfig.adf_acs.host - }); - - const uploadActions = new UploadActions(this.alfrescoJsApi); + const apiService = new ApiService(); + const uploadActions = new UploadActions(apiService); + const usersActions = new UsersActions(apiService); 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 apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); + acsUser = await usersActions.createUser(); + await apiService.getInstance().login(acsUser.email, acsUser.password); const pngUploadedFile = await uploadActions.uploadFile(pngFileModel.location, pngFileModel.name, '-my-'); Object.assign(pngFileModel, pngUploadedFile.entry); pngFileModel.update(pngUploadedFile.entry); @@ -83,9 +79,8 @@ describe('Metadata component', () => { }); describe('Viewer Metadata', () => { - beforeAll(async () => { - await loginPage.loginToContentServicesUsingUserModel(acsUser); + await loginPage.login(acsUser.email, acsUser.password); await navigationBarPage.clickContentServicesButton(); await contentServicesPage.waitForTableBody(); await LocalStorageUtil.setConfigField('content-metadata', JSON.stringify({ @@ -229,11 +224,10 @@ describe('Metadata component', () => { }); describe('Folder metadata', () => { - beforeAll(async () => { await uploadActions.createFolder(folderName, '-my-'); - await loginPage.loginToContentServicesUsingUserModel(acsUser); + await loginPage.login(acsUser.email, acsUser.password); await navigationBarPage.clickContentServicesButton(); await contentServicesPage.waitForTableBody(); }); @@ -266,7 +260,7 @@ 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); + await loginPage.login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); await BrowserActions.getUrl(browser.params.testConfig.adf.url + `/(overlay:files/${pngFileModel.id}/view)`); @@ -283,7 +277,7 @@ describe('Metadata component', () => { await metadataViewPage.clickSaveMetadata(); await expect(await metadataViewPage.getPropertyText('properties.cm:description')).toEqual('check author example description'); - await loginPage.loginToContentServicesUsingUserModel(acsUser); + await loginPage.login(acsUser.email, acsUser.password); await navigationBarPage.clickContentServicesButton(); await viewerPage.viewFile(pngFileModel.name); diff --git a/e2e/content-services/permissions/permissions-component.e2e.ts b/e2e/content-services/permissions/permissions-component.e2e.ts index 87e4d85eb7..205c81b0a0 100644 --- a/e2e/content-services/permissions/permissions-component.e2e.ts +++ b/e2e/content-services/permissions/permissions-component.e2e.ts @@ -17,34 +17,39 @@ import { PermissionsPage } from '../../pages/adf/permissions.page'; import { ContentServicesPage } from '../../pages/adf/content-services.page'; -import { AcsUserModel } from '../../models/ACS/acs-user.model'; -import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; import { FileModel } from '../../models/ACS/file.model'; -import { StringUtil, BrowserActions, NotificationHistoryPage, LoginPage, UploadActions, ViewerPage } from '@alfresco/adf-testing'; +import { + StringUtil, + BrowserActions, + NotificationHistoryPage, + LoginSSOPage, + UploadActions, + ViewerPage, + ApiService, UserModel +} from '@alfresco/adf-testing'; import { browser } from 'protractor'; import { FolderModel } from '../../models/ACS/folder.model'; import { MetadataViewPage } from '../../pages/adf/metadata-view.page'; import { NavigationBarPage } from '../../pages/adf/navigation-bar.page'; import { UploadDialogPage } from '../../pages/adf/dialog/upload-dialog.page'; +import { UsersActions } from '../../actions/users.actions'; describe('Permissions Component', () => { - this.alfrescoJsApi = new AlfrescoApi({ - provider: 'ECM', - hostEcm: browser.params.testConfig.adf_acs.host - }); - const loginPage = new LoginPage(); + const apiService = new ApiService(); + const loginPage = new LoginSSOPage(); const contentServicesPage = new ContentServicesPage(); const permissionsPage = new PermissionsPage(); const navigationBarPage = new NavigationBarPage(); - const uploadActions = new UploadActions(this.alfrescoJsApi); + const uploadActions = new UploadActions(apiService); + const usersActions = new UsersActions(apiService); const contentList = contentServicesPage.getDocumentList(); const viewerPage = new ViewerPage(); const metadataViewPage = new MetadataViewPage(); const notificationHistoryPage = new NotificationHistoryPage(); const uploadDialog = new UploadDialogPage(); - let fileOwnerUser, filePermissionUser, file; + let file; const fileModel = new FileModel({ name: browser.params.resources.Files.ADF_DOCUMENTS.TXT_0B.file_name, location: browser.params.resources.Files.ADF_DOCUMENTS.TXT_0B.file_path @@ -74,19 +79,17 @@ describe('Permissions Component', () => { let roleConsumerFolder, roleCoordinatorFolder, roleContributorFolder, roleCollaboratorFolder, roleEditorFolder; let folders; - fileOwnerUser = new AcsUserModel(); + const fileOwnerUser = new UserModel(); + const filePermissionUser = new UserModel(); - filePermissionUser = new AcsUserModel(); - - const duplicateUserPermissionMessage = 'One or more of the permissions you have set is already present : authority -> ' + filePermissionUser.getId() + ' / role -> Contributor'; + const duplicateUserPermissionMessage = 'One or more of the permissions you have set is already present : authority -> ' + filePermissionUser.email + ' / role -> Contributor'; beforeAll(async () => { - - await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); - await this.alfrescoJsApi.core.peopleApi.addPerson(fileOwnerUser); - await this.alfrescoJsApi.core.peopleApi.addPerson(filePermissionUser); - await this.alfrescoJsApi.core.groupsApi.createGroup(groupBody); - await this.alfrescoJsApi.login(fileOwnerUser.id, fileOwnerUser.password); + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); + await usersActions.createUser(fileOwnerUser); + await usersActions.createUser(filePermissionUser); + await apiService.getInstance().core.groupsApi.createGroup(groupBody); + await apiService.getInstance().login(fileOwnerUser.email, fileOwnerUser.password); roleConsumerFolder = await uploadActions.createFolder(roleConsumerFolderModel.name, '-my-'); roleCoordinatorFolder = await uploadActions.createFolder(roleCoordinatorFolderModel.name, '-my-'); @@ -96,58 +99,58 @@ describe('Permissions Component', () => { folders = [roleConsumerFolder, roleContributorFolder, roleCoordinatorFolder, roleCollaboratorFolder, roleEditorFolder]; - await this.alfrescoJsApi.core.nodesApi.updateNode(roleConsumerFolder.entry.id, + await apiService.getInstance().core.nodesApi.updateNode(roleConsumerFolder.entry.id, { permissions: { locallySet: [{ - authorityId: filePermissionUser.getId(), + authorityId: filePermissionUser.email, name: 'Consumer', accessStatus: 'ALLOWED' }] } }); - await this.alfrescoJsApi.core.nodesApi.updateNode(roleCollaboratorFolder.entry.id, + await apiService.getInstance().core.nodesApi.updateNode(roleCollaboratorFolder.entry.id, { permissions: { locallySet: [{ - authorityId: filePermissionUser.getId(), + authorityId: filePermissionUser.email, name: 'Collaborator', accessStatus: 'ALLOWED' }] } }); - await this.alfrescoJsApi.core.nodesApi.updateNode(roleCoordinatorFolder.entry.id, + await apiService.getInstance().core.nodesApi.updateNode(roleCoordinatorFolder.entry.id, { permissions: { locallySet: [{ - authorityId: filePermissionUser.getId(), + authorityId: filePermissionUser.email, name: 'Coordinator', accessStatus: 'ALLOWED' }] } }); - await this.alfrescoJsApi.core.nodesApi.updateNode(roleContributorFolder.entry.id, + await apiService.getInstance().core.nodesApi.updateNode(roleContributorFolder.entry.id, { permissions: { locallySet: [{ - authorityId: filePermissionUser.getId(), + authorityId: filePermissionUser.email, name: 'Contributor', accessStatus: 'ALLOWED' }] } }); - await this.alfrescoJsApi.core.nodesApi.updateNode(roleEditorFolder.entry.id, + await apiService.getInstance().core.nodesApi.updateNode(roleEditorFolder.entry.id, { permissions: { locallySet: [{ - authorityId: filePermissionUser.getId(), + authorityId: filePermissionUser.email, name: 'Editor', accessStatus: 'ALLOWED' }] @@ -164,19 +167,17 @@ describe('Permissions Component', () => { afterAll(async () => { await navigationBarPage.clickLogoutButton(); - await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); for (const folder of folders) { await uploadActions.deleteFileOrFolder(folder.entry.id); } - }); describe('Inherit and assigning permissions', () => { - beforeEach(async () => { - await this.alfrescoJsApi.login(fileOwnerUser.id, fileOwnerUser.password); + await apiService.getInstance().login(fileOwnerUser.email, fileOwnerUser.password); file = await uploadActions.uploadFile(fileModel.location, fileModel.name, '-my-'); - await loginPage.loginToContentServicesUsingUserModel(fileOwnerUser); + await loginPage.login(fileOwnerUser.email, fileOwnerUser.password); await contentServicesPage.goToDocumentList(); await contentServicesPage.checkContentIsDisplayed(fileModel.name); await contentServicesPage.checkSelectedSiteIsDisplayed('My files'); @@ -191,8 +192,7 @@ describe('Permissions Component', () => { await uploadActions.deleteFileOrFolder(file.entry.id); } catch (error) { } - - }); + }); it('[C268974] Inherit Permission', async () => { await permissionsPage.checkPermissionInheritedButtonIsDisplayed(); @@ -230,7 +230,7 @@ describe('Permissions Component', () => { await permissionsPage.clickAddPermissionButton(); await permissionsPage.checkAddPermissionDialogIsDisplayed(); await permissionsPage.checkSearchUserInputIsDisplayed(); - await permissionsPage.searchUserOrGroup(filePermissionUser.getId()); + await permissionsPage.searchUserOrGroup(filePermissionUser.email); await permissionsPage.checkResultListIsDisplayed(); await permissionsPage.checkUserOrGroupIsDisplayed('EVERYONE'); await permissionsPage.searchUserOrGroup('somerandomtext'); @@ -240,11 +240,10 @@ describe('Permissions Component', () => { }); describe('Changing and duplicate Permissions', () => { - beforeEach(async () => { - await this.alfrescoJsApi.login(fileOwnerUser.id, fileOwnerUser.password); + await apiService.getInstance().login(fileOwnerUser.email, fileOwnerUser.password); file = await uploadActions.uploadFile(fileModel.location, fileModel.name, '-my-'); - await loginPage.loginToContentServicesUsingUserModel(fileOwnerUser); + await loginPage.login(fileOwnerUser.email, fileOwnerUser.password); await contentServicesPage.goToDocumentList(); await contentServicesPage.checkContentIsDisplayed(fileModel.name); await contentServicesPage.checkSelectedSiteIsDisplayed('My files'); @@ -254,9 +253,9 @@ describe('Permissions Component', () => { await permissionsPage.clickAddPermissionButton(); await permissionsPage.checkAddPermissionDialogIsDisplayed(); await permissionsPage.checkSearchUserInputIsDisplayed(); - await permissionsPage.searchUserOrGroup(filePermissionUser.getId()); - await permissionsPage.clickUserOrGroup(filePermissionUser.getFirstName()); - await permissionsPage.checkUserOrGroupIsAdded(filePermissionUser.getId()); + await permissionsPage.searchUserOrGroup(filePermissionUser.email); + await permissionsPage.clickUserOrGroup(filePermissionUser.firstName); + await permissionsPage.checkUserOrGroupIsAdded(filePermissionUser.email); }); afterEach(async () => { @@ -264,8 +263,8 @@ describe('Permissions Component', () => { }); 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()); + await expect(await permissionsPage.getRoleCellValue(filePermissionUser.email)).toEqual('Contributor'); + await permissionsPage.clickRoleDropdownByUserOrGroupName(filePermissionUser.email); const roleDropdownOptions = permissionsPage.getRoleDropdownOptions(); await expect(await roleDropdownOptions.count()).toBe(5); await expect(await BrowserActions.getText(roleDropdownOptions.get(0))).toBe('Contributor'); @@ -274,40 +273,39 @@ describe('Permissions Component', () => { 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 expect(await permissionsPage.getRoleCellValue(filePermissionUser.email)).toEqual('Collaborator'); + await permissionsPage.clickRoleDropdownByUserOrGroupName(filePermissionUser.email); await permissionsPage.selectOption('Coordinator'); - await expect(await permissionsPage.getRoleCellValue(filePermissionUser.getId())).toEqual('Coordinator'); - await permissionsPage.clickRoleDropdownByUserOrGroupName(filePermissionUser.getId()); + await expect(await permissionsPage.getRoleCellValue(filePermissionUser.email)).toEqual('Coordinator'); + await permissionsPage.clickRoleDropdownByUserOrGroupName(filePermissionUser.email); await permissionsPage.selectOption('Editor'); - await expect(await permissionsPage.getRoleCellValue(filePermissionUser.getId())).toEqual('Editor'); - await permissionsPage.clickRoleDropdownByUserOrGroupName(filePermissionUser.getId()); + await expect(await permissionsPage.getRoleCellValue(filePermissionUser.email)).toEqual('Editor'); + await permissionsPage.clickRoleDropdownByUserOrGroupName(filePermissionUser.email); await permissionsPage.selectOption('Consumer'); - await expect(await permissionsPage.getRoleCellValue(filePermissionUser.getId())).toEqual('Consumer'); + await expect(await permissionsPage.getRoleCellValue(filePermissionUser.email)).toEqual('Consumer'); }); 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 expect(await permissionsPage.getRoleCellValue(filePermissionUser.email)).toEqual('Contributor'); await permissionsPage.clickAddPermissionButton(); await permissionsPage.checkAddPermissionDialogIsDisplayed(); await permissionsPage.checkSearchUserInputIsDisplayed(); - await permissionsPage.searchUserOrGroup(filePermissionUser.getId()); - await permissionsPage.clickUserOrGroup(filePermissionUser.getFirstName()); + await permissionsPage.searchUserOrGroup(filePermissionUser.email); + await permissionsPage.clickUserOrGroup(filePermissionUser.firstName); await notificationHistoryPage.checkNotifyContains(duplicateUserPermissionMessage); }); 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 expect(await permissionsPage.getRoleCellValue(filePermissionUser.email)).toEqual('Contributor'); await permissionsPage.clickDeletePermissionButton(); - await permissionsPage.checkUserOrGroupIsDeleted(filePermissionUser.getId()); + await permissionsPage.checkUserOrGroupIsDeleted(filePermissionUser.email); }); }); describe('Role: Consumer, Contributor, Coordinator, Collaborator, Editor, No Permissions', () => { - it('[C276993] Role Consumer', async () => { - await loginPage.loginToContentServicesUsingUserModel(filePermissionUser); + await loginPage.login(filePermissionUser.email, filePermissionUser.password); await navigationBarPage.openContentServicesFolder(roleConsumerFolder.entry.id); await contentServicesPage.checkContentIsDisplayed('RoleConsumer' + fileModel.name); await contentList.doubleClickRow('RoleConsumer' + fileModel.name); @@ -324,7 +322,7 @@ describe('Permissions Component', () => { }); it('[C276996] Role Contributor', async () => { - await loginPage.loginToContentServicesUsingUserModel(filePermissionUser); + await loginPage.login(filePermissionUser.email, filePermissionUser.password); await navigationBarPage.openContentServicesFolder(roleContributorFolder.entry.id); await contentServicesPage.checkContentIsDisplayed('RoleContributor' + fileModel.name); await contentList.doubleClickRow('RoleContributor' + fileModel.name); @@ -344,7 +342,7 @@ describe('Permissions Component', () => { }); it('[C277000] Role Editor', async () => { - await loginPage.loginToContentServicesUsingUserModel(filePermissionUser); + await loginPage.login(filePermissionUser.email, filePermissionUser.password); await navigationBarPage.openContentServicesFolder(roleEditorFolder.entry.id); await contentServicesPage.checkContentIsDisplayed('RoleEditor' + fileModel.name); await contentList.doubleClickRow('RoleEditor' + fileModel.name); @@ -366,7 +364,7 @@ describe('Permissions Component', () => { }); it('[C277003] Role Collaborator', async () => { - await loginPage.loginToContentServicesUsingUserModel(filePermissionUser); + await loginPage.login(filePermissionUser.email, filePermissionUser.password); await navigationBarPage.openContentServicesFolder(roleCollaboratorFolder.entry.id); await contentServicesPage.checkContentIsDisplayed('RoleCollaborator' + fileModel.name); await contentList.doubleClickRow('RoleCollaborator' + fileModel.name); @@ -391,7 +389,7 @@ describe('Permissions Component', () => { }); it('[C277004] Role Coordinator', async () => { - await loginPage.loginToContentServicesUsingUserModel(filePermissionUser); + await loginPage.login(filePermissionUser.email, filePermissionUser.password); await navigationBarPage.openContentServicesFolder(roleCoordinatorFolder.entry.id); await contentServicesPage.checkContentIsDisplayed('RoleCoordinator' + fileModel.name); await contentList.doubleClickRow('RoleCoordinator' + fileModel.name); @@ -416,7 +414,7 @@ describe('Permissions Component', () => { }); it('[C279881] No Permission User', async () => { - await loginPage.loginToContentServicesUsingUserModel(filePermissionUser); + await loginPage.login(filePermissionUser.email, filePermissionUser.password); await navigationBarPage.openContentServicesFolder(roleConsumerFolder.entry.id); await contentServicesPage.checkContentIsDisplayed('RoleConsumer' + fileModel.name); await contentServicesPage.checkSelectedSiteIsDisplayed('My files'); diff --git a/e2e/content-services/permissions/site-permissions.e2e.ts b/e2e/content-services/permissions/site-permissions.e2e.ts index 7b0af50b7f..4f7017d933 100644 --- a/e2e/content-services/permissions/site-permissions.e2e.ts +++ b/e2e/content-services/permissions/site-permissions.e2e.ts @@ -16,10 +16,15 @@ */ import { PermissionsPage } from '../../pages/adf/permissions.page'; -import { LoginPage, BrowserActions, UploadActions, StringUtil, NotificationHistoryPage, ViewerPage } from '@alfresco/adf-testing'; +import { + LoginSSOPage, + BrowserActions, + UploadActions, + StringUtil, + NotificationHistoryPage, + ViewerPage, ApiService, UserModel +} from '@alfresco/adf-testing'; import { ContentServicesPage } from '../../pages/adf/content-services.page'; -import { AcsUserModel } from '../../models/ACS/acs-user.model'; -import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; import { FileModel } from '../../models/ACS/file.model'; import { browser } from 'protractor'; import CONSTANTS = require('../../util/constants'); @@ -27,17 +32,15 @@ import { MetadataViewPage } from '../../pages/adf/metadata-view.page'; import { UploadDialogPage } from '../../pages/adf/dialog/upload-dialog.page'; import { NavigationBarPage } from '../../pages/adf/navigation-bar.page'; import { VersionManagePage } from '../../pages/adf/version-manager.page'; +import { UsersActions } from '../../actions/users.actions'; describe('Permissions Component', () => { - this.alfrescoJsApi = new AlfrescoApi({ - provider: 'ECM', - hostEcm: browser.params.testConfig.adf_acs.host - }); - const loginPage = new LoginPage(); + const apiService = new ApiService(); + const loginPage = new LoginSSOPage(); const contentServicesPage = new ContentServicesPage(); const permissionsPage = new PermissionsPage(); - const uploadActions = new UploadActions(this.alfrescoJsApi); + const uploadActions = new UploadActions(apiService); const contentList = contentServicesPage.getDocumentList(); @@ -48,8 +51,6 @@ describe('Permissions Component', () => { const uploadDialog = new UploadDialogPage(); const versionManagePage = new VersionManagePage(); - let folderOwnerUser, consumerUser, siteConsumerUser, contributorUser, managerUser, collaboratorUser; - let publicSite, privateSite, folderName; const fileModel = new FileModel({ @@ -74,23 +75,23 @@ describe('Permissions Component', () => { let siteFolder, privateSiteFile; - folderOwnerUser = new AcsUserModel(); - consumerUser = new AcsUserModel(); - siteConsumerUser = new AcsUserModel(); - collaboratorUser = new AcsUserModel(); - contributorUser = new AcsUserModel(); - managerUser = new AcsUserModel(); + const folderOwnerUser = new UserModel(); + const consumerUser: UserModel = new UserModel(); + const siteConsumerUser: UserModel = new UserModel(); + const collaboratorUser: UserModel = new UserModel(); + const contributorUser: UserModel = new UserModel(); + const managerUser: UserModel = new UserModel(); + const usersActions = new UsersActions(apiService); beforeAll(async () => { - - await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); - await this.alfrescoJsApi.core.peopleApi.addPerson(folderOwnerUser); - await this.alfrescoJsApi.core.peopleApi.addPerson(siteConsumerUser); - await this.alfrescoJsApi.core.peopleApi.addPerson(consumerUser); - await this.alfrescoJsApi.core.peopleApi.addPerson(contributorUser); - await this.alfrescoJsApi.core.peopleApi.addPerson(collaboratorUser); - await this.alfrescoJsApi.core.peopleApi.addPerson(managerUser); - await this.alfrescoJsApi.login(folderOwnerUser.id, folderOwnerUser.password); + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); + await usersActions.createUser(folderOwnerUser); + await usersActions.createUser(siteConsumerUser); + await usersActions.createUser(consumerUser); + await usersActions.createUser(contributorUser); + await usersActions.createUser(collaboratorUser); + await usersActions.createUser(managerUser); + await apiService.getInstance().login(folderOwnerUser.email, folderOwnerUser.password); await browser.sleep(15000); @@ -104,42 +105,42 @@ describe('Permissions Component', () => { const privateSiteBody = { visibility: 'PRIVATE', title: privateSiteName }; - publicSite = await this.alfrescoJsApi.core.sitesApi.createSite(publicSiteBody); - privateSite = await this.alfrescoJsApi.core.sitesApi.createSite(privateSiteBody); + publicSite = await apiService.getInstance().core.sitesApi.createSite(publicSiteBody); + privateSite = await apiService.getInstance().core.sitesApi.createSite(privateSiteBody); - await this.alfrescoJsApi.core.sitesApi.addSiteMember(publicSite.entry.id, { - id: siteConsumerUser.id, + await apiService.getInstance().core.sitesApi.addSiteMember(publicSite.entry.id, { + id: siteConsumerUser.email, role: CONSTANTS.CS_USER_ROLES.CONSUMER }); - await this.alfrescoJsApi.core.sitesApi.addSiteMember(publicSite.entry.id, { - id: collaboratorUser.id, + await apiService.getInstance().core.sitesApi.addSiteMember(publicSite.entry.id, { + id: collaboratorUser.email, role: CONSTANTS.CS_USER_ROLES.COLLABORATOR }); - await this.alfrescoJsApi.core.sitesApi.addSiteMember(publicSite.entry.id, { - id: contributorUser.id, + await apiService.getInstance().core.sitesApi.addSiteMember(publicSite.entry.id, { + id: contributorUser.email, role: CONSTANTS.CS_USER_ROLES.CONTRIBUTOR }); - await this.alfrescoJsApi.core.sitesApi.addSiteMember(publicSite.entry.id, { - id: managerUser.id, + await apiService.getInstance().core.sitesApi.addSiteMember(publicSite.entry.id, { + id: managerUser.email, role: CONSTANTS.CS_USER_ROLES.MANAGER }); - await this.alfrescoJsApi.core.sitesApi.addSiteMember(privateSite.entry.id, { - id: managerUser.id, + await apiService.getInstance().core.sitesApi.addSiteMember(privateSite.entry.id, { + id: managerUser.email, role: CONSTANTS.CS_USER_ROLES.MANAGER }); siteFolder = await uploadActions.createFolder(folderName, publicSite.entry.guid); privateSiteFile = await uploadActions.uploadFile(fileModel.location, 'privateSite' + fileModel.name, privateSite.entry.guid); - await this.alfrescoJsApi.core.nodesApi.updateNode(privateSiteFile.entry.id, + await apiService.getInstance().core.nodesApi.updateNode(privateSiteFile.entry.id, { permissions: { locallySet: [{ - authorityId: managerUser.getId(), + authorityId: managerUser.email, name: 'SiteConsumer', accessStatus: 'ALLOWED' }] @@ -152,15 +153,14 @@ describe('Permissions Component', () => { 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, { permanent: true }); - await this.alfrescoJsApi.core.sitesApi.deleteSite(privateSite.entry.id, { permanent: true }); + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); + await apiService.getInstance().core.sitesApi.deleteSite(publicSite.entry.id, { permanent: true }); + await apiService.getInstance().core.sitesApi.deleteSite(privateSite.entry.id, { permanent: true }); }); describe('Role Site Dropdown', () => { - beforeAll(async () => { - await loginPage.loginToContentServicesUsingUserModel(folderOwnerUser); + await loginPage.login(folderOwnerUser.email, folderOwnerUser.password); await BrowserActions.getUrl(browser.params.testConfig.adf.url + '/files/' + publicSite.entry.guid); }); @@ -181,14 +181,14 @@ describe('Permissions Component', () => { await permissionsPage.checkAddPermissionDialogIsDisplayed(); await permissionsPage.checkSearchUserInputIsDisplayed(); - await permissionsPage.searchUserOrGroup(consumerUser.getId()); + await permissionsPage.searchUserOrGroup(consumerUser.email); - await permissionsPage.clickUserOrGroup(consumerUser.getFirstName()); - await permissionsPage.checkUserOrGroupIsAdded(consumerUser.getId()); + await permissionsPage.clickUserOrGroup(consumerUser.firstName); + await permissionsPage.checkUserOrGroupIsAdded(consumerUser.email); - await expect(await permissionsPage.getRoleCellValue(consumerUser.getId())).toEqual('SiteCollaborator'); + await expect(await permissionsPage.getRoleCellValue(consumerUser.email)).toEqual('SiteCollaborator'); - await permissionsPage.clickRoleDropdownByUserOrGroupName(consumerUser.getId()); + await permissionsPage.clickRoleDropdownByUserOrGroupName(consumerUser.email); const roleDropdownOptions = permissionsPage.getRoleDropdownOptions(); @@ -201,9 +201,9 @@ describe('Permissions Component', () => { }); describe('Roles: SiteConsumer, SiteCollaborator, SiteContributor, SiteManager', () => { - it('[C276994] Role SiteConsumer', async () => { - await loginPage.loginToContentServicesUsingUserModel(siteConsumerUser); + await loginPage.login(siteConsumerUser.email, siteConsumerUser.password); + await navigationBarPage.openContentServicesFolder(siteFolder.entry.id); await contentServicesPage.checkContentIsDisplayed('Site' + fileModel.name); @@ -230,7 +230,8 @@ describe('Permissions Component', () => { }); it('[C276997] Role SiteContributor', async () => { - await loginPage.loginToContentServicesUsingUserModel(contributorUser); + await loginPage.login(contributorUser.email, contributorUser.password); + await navigationBarPage.openContentServicesFolder(siteFolder.entry.id); await contentServicesPage.checkContentIsDisplayed('Site' + fileModel.name); @@ -260,8 +261,8 @@ describe('Permissions Component', () => { }); it('[C277005] Role SiteCollaborator', async () => { + await loginPage.login(collaboratorUser.email, collaboratorUser.password); - await loginPage.loginToContentServicesUsingUserModel(collaboratorUser); await navigationBarPage.openContentServicesFolder(siteFolder.entry.id); await contentServicesPage.checkContentIsDisplayed('Site' + fileModel.name); @@ -299,7 +300,8 @@ describe('Permissions Component', () => { }); it('[C277006] Role SiteManager', async () => { - await loginPage.loginToContentServicesUsingUserModel(managerUser); + await loginPage.login(managerUser.email, managerUser.password); + await navigationBarPage.openContentServicesFolder(siteFolder.entry.id); await contentServicesPage.checkContentIsDisplayed('Site' + fileModel.name); @@ -336,9 +338,9 @@ describe('Permissions Component', () => { }); describe('Roles: Private site and Manager User', () => { - it('[C277196] should a user with Manager permissions be able to upload a new version for the created file', async () => { - await loginPage.loginToContentServicesUsingUserModel(managerUser); + await loginPage.login(managerUser.email, managerUser.password); + await navigationBarPage.openContentServicesFolder(privateSite.entry.guid); await contentServicesPage.versionManagerContent('privateSite' + 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 bd6907d7af..a1f7eee930 100644 --- a/e2e/content-services/share-file/share-file.e2e.ts +++ b/e2e/content-services/share-file/share-file.e2e.ts @@ -16,29 +16,27 @@ */ import { - LoginPage, + LoginSSOPage, BrowserActions, LocalStorageUtil, NotificationHistoryPage, UploadActions, - ViewerPage, ApiUtil + ViewerPage, ApiUtil, ApiService, UserModel } from '@alfresco/adf-testing'; import { ContentServicesPage } from '../../pages/adf/content-services.page'; import { NavigationBarPage } from '../../pages/adf/navigation-bar.page'; import { ShareDialogPage } from '../../pages/adf/dialog/share-dialog.page'; -import { AcsUserModel } from '../../models/ACS/acs-user.model'; import { FileModel } from '../../models/ACS/file.model'; import { browser } from 'protractor'; -import { AlfrescoApiCompatibility as AlfrescoApi, SharedLinkEntry, SharedLinkPaging } from '@alfresco/js-api'; +import { SharedLinkEntry, SharedLinkPaging } from '@alfresco/js-api'; import { CustomSourcesPage } from '../../pages/adf/demo-shell/custom-sources.page'; +import { UsersActions } from '../../actions/users.actions'; describe('Share file', () => { - this.alfrescoJsApi = new AlfrescoApi({ - provider: 'ECM', - hostEcm: browser.params.testConfig.adf_acs.host - }); - const loginPage = new LoginPage(); + const apiService = new ApiService(); + const usersActions = new UsersActions(apiService); + const loginPage = new LoginSSOPage(); const contentServicesPage = new ContentServicesPage(); const contentListPage = contentServicesPage.getDocumentList(); const shareDialog = new ShareDialogPage(); @@ -46,8 +44,8 @@ describe('Share file', () => { const customSourcesPage = new CustomSourcesPage(); const viewerPage = new ViewerPage(); const notificationHistoryPage = new NotificationHistoryPage(); - const acsUser = new AcsUserModel(); - const uploadActions = new UploadActions(this.alfrescoJsApi); + let acsUser: UserModel; + const uploadActions = new UploadActions(apiService); const pngFileModel = new FileModel({ name: browser.params.resources.Files.ADF_DOCUMENTS.PNG.file_name, location: browser.params.resources.Files.ADF_DOCUMENTS.PNG.file_path @@ -65,17 +63,17 @@ describe('Share file', () => { }; const apiCall = async () => { - await this.alfrescoJsApi.login(acsUser.id, acsUser.password); - return this.alfrescoJsApi.core.sharedlinksApi.findSharedLinks(); + await apiService.getInstance().login(acsUser.email, acsUser.password); + return apiService.getInstance().core.sharedlinksApi.findSharedLinks(); }; return ApiUtil.waitForApi(apiCall, predicate, 10, 2000); }; 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 apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); + acsUser = await usersActions.createUser(); + await apiService.getInstance().login(acsUser.email, acsUser.password); const pngUploadedFile = await uploadActions.uploadFile(pngFileModel.location, pngFileModel.name, '-my-'); @@ -83,14 +81,13 @@ describe('Share file', () => { }); afterAll(async () => { - await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); await uploadActions.deleteFileOrFolder(nodeId); }); describe('Shared link dialog', () => { - beforeAll(async () => { - await loginPage.loginToContentServicesUsingUserModel(acsUser); + await loginPage.login(acsUser.email, acsUser.password); await navigationBarPage.clickContentServicesButton(); await contentListPage.selectRow(pngFileModel.name); await BrowserActions.closeMenuAndDialogs(); @@ -162,9 +159,8 @@ describe('Share file', () => { }); describe('Shared link preview', () => { - beforeEach(async () => { - await loginPage.loginToContentServicesUsingUserModel(acsUser); + await loginPage.login(acsUser.email, acsUser.password); await navigationBarPage.clickContentServicesButton(); await contentServicesPage.waitForTableBody(); }); diff --git a/e2e/content-services/share-file/unshare-file.e2e.ts b/e2e/content-services/share-file/unshare-file.e2e.ts index 60e71cb8f1..8b23c983bb 100644 --- a/e2e/content-services/share-file/unshare-file.e2e.ts +++ b/e2e/content-services/share-file/unshare-file.e2e.ts @@ -20,45 +20,46 @@ import { StringUtil, BrowserActions, NotificationHistoryPage, - LoginPage, + LoginSSOPage, ErrorPage, - UploadActions + UploadActions, ApiService, UserModel } from '@alfresco/adf-testing'; import { NavigationBarPage } from '../../pages/adf/navigation-bar.page'; import { ContentServicesPage } from '../../pages/adf/content-services.page'; import { ShareDialogPage } from '../../pages/adf/dialog/share-dialog.page'; -import { AcsUserModel } from '../../models/ACS/acs-user.model'; import { FileModel } from '../../models/ACS/file.model'; -import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; import { browser } from 'protractor'; +import { UsersActions } from '../../actions/users.actions'; describe('Unshare file', () => { - this.alfrescoJsApi = new AlfrescoApi({ - provider: 'ECM', - hostEcm: browser.params.testConfig.adf_acs.host - }); - const loginPage = new LoginPage(); + const apiService = new ApiService(); + const loginPage = new LoginSSOPage(); const contentServicesPage = new ContentServicesPage(); const contentListPage = contentServicesPage.getDocumentList(); const navBar = new NavigationBarPage(); const errorPage = new ErrorPage(); const notificationHistoryPage = new NotificationHistoryPage(); const navigationBarPage = new NavigationBarPage(); - const shareDialog = new ShareDialogPage(); + + const uploadActions = new UploadActions(apiService); + const usersActions = new UsersActions(apiService); + const siteName = `PRIVATE-TEST-SITE-${StringUtil.generateRandomString(5)}`; - const acsUser = new AcsUserModel(); - const uploadActions = new UploadActions(this.alfrescoJsApi); - let nodeBody; - let nodeId; - let testSite; + let acsUser: UserModel; + + let nodeBody, nodeId, testSite; + const pngFileModel = new FileModel({ name: browser.params.resources.Files.ADF_DOCUMENTS.PNG.file_name, location: browser.params.resources.Files.ADF_DOCUMENTS.PNG.file_path }); beforeAll(async () => { + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); + acsUser = await usersActions.createUser(); + const site = { title: siteName, visibility: 'PRIVATE', @@ -66,7 +67,7 @@ describe('Unshare file', () => { }; const memberBody = { - id: acsUser.id, + id: acsUser.email, role: CONSTANTS.CS_USER_ROLES.CONSUMER }; @@ -78,39 +79,37 @@ describe('Unshare file', () => { } }; - await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); - await this.alfrescoJsApi.core.peopleApi.addPerson(acsUser); - testSite = await this.alfrescoJsApi.core.sitesApi.createSite(site); + testSite = await apiService.getInstance().core.sitesApi.createSite(site); - const docLibId = (await this.alfrescoJsApi.core.sitesApi.getSiteContainers(siteName)).list.entries[0].entry.id; - const testFile1Id = (await this.alfrescoJsApi.core.nodesApi.addNode(docLibId, nodeBody)).entry.id; - await this.alfrescoJsApi.core.sitesApi.addSiteMember(siteName, memberBody); + const docLibId = (await apiService.getInstance().core.sitesApi.getSiteContainers(siteName)).list.entries[0].entry.id; + const testFile1Id = (await apiService.getInstance().core.nodesApi.addNode(docLibId, nodeBody)).entry.id; + await apiService.getInstance().core.sitesApi.addSiteMember(siteName, memberBody); - await this.alfrescoJsApi.core.nodesApi.updateNode(testFile1Id, { + await apiService.getInstance().core.nodesApi.updateNode(testFile1Id, { permissions: { isInheritanceEnabled: false, locallySet: [ { - authorityId: acsUser.id, + authorityId: acsUser.email, name: CONSTANTS.CS_USER_ROLES.CONSUMER } ] } }); - await this.alfrescoJsApi.core.sharedlinksApi.addSharedLink({ nodeId: testFile1Id }); - await this.alfrescoJsApi.login(acsUser.id, acsUser.password); + await apiService.getInstance().core.sharedlinksApi.addSharedLink({ nodeId: testFile1Id }); + await apiService.getInstance().login(acsUser.email, acsUser.password); const pngUploadedFile = await uploadActions.uploadFile(pngFileModel.location, pngFileModel.name, '-my-'); nodeId = pngUploadedFile.entry.id; - await loginPage.loginToContentServicesUsingUserModel(acsUser); + await loginPage.login(acsUser.email, acsUser.password); await navBar.clickContentServicesButton(); await contentServicesPage.waitForTableBody(); }); afterAll(async () => { await navigationBarPage.clickLogoutButton(); - await this.alfrescoJsApi.core.sitesApi.deleteSite(testSite.entry.id, { permanent: true }); + await apiService.getInstance().core.sitesApi.deleteSite(testSite.entry.id, { permanent: true }); }); afterEach(async () => { @@ -159,15 +158,15 @@ describe('Unshare file', () => { 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 BrowserActions.getUrl(sharedLink.replace(browser.params.testConfig.appConfig.ecmHost, browser.params.testConfig.adf.host)); await errorPage.checkErrorCode(); }); }); describe('without permission', () => { 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 }); + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); + await apiService.getInstance().core.sitesApi.deleteSite(siteName, { permanent: true }); }); it('[C286555] Should NOT be able to unshare file without permission', async () => { diff --git a/e2e/content-services/social/social.component.e2e.ts b/e2e/content-services/social/social.component.e2e.ts index d31c92dbeb..3d6e9fa40a 100644 --- a/e2e/content-services/social/social.component.e2e.ts +++ b/e2e/content-services/social/social.component.e2e.ts @@ -15,29 +15,27 @@ * limitations under the License. */ -import { LoginPage, LikePage, RatePage, UploadActions } from '@alfresco/adf-testing'; -import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; -import { AcsUserModel } from '../../models/ACS/acs-user.model'; +import { LoginSSOPage, LikePage, RatePage, UploadActions, ApiService, UserModel } from '@alfresco/adf-testing'; import { FileModel } from '../../models/ACS/file.model'; import { NavigationBarPage } from '../../pages/adf/navigation-bar.page'; import { SocialPage } from '../../pages/adf/demo-shell/social.page'; import { browser } from 'protractor'; +import { UsersActions } from '../../actions/users.actions'; describe('Social component', () => { - const loginPage = new LoginPage(); + const loginPage = new LoginSSOPage(); const likePage = new LikePage(); const ratePage = new RatePage(); const socialPage = new SocialPage(); const navigationBarPage = new NavigationBarPage(); - const componentOwner = new AcsUserModel(); - const componentVisitor = new AcsUserModel(); - const secondComponentVisitor = new AcsUserModel(); - this.alfrescoJsApi = new AlfrescoApi({ - provider: 'ECM', - hostEcm: browser.params.testConfig.adf_acs.host - }); - const uploadActions = new UploadActions(this.alfrescoJsApi); + const componentOwner = new UserModel(); + const componentVisitor = new UserModel(); + const secondComponentVisitor = new UserModel(); + + const apiService = new ApiService(); + const usersActions = new UsersActions(apiService); + const uploadActions = new UploadActions(apiService); const blueLikeColor = ('rgba(33, 150, 243, 1)'); const greyLikeColor = ('rgba(128, 128, 128, 1)'); @@ -52,44 +50,43 @@ describe('Social component', () => { }); beforeAll(async () => { - await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); - await this.alfrescoJsApi.core.peopleApi.addPerson(componentOwner); + await usersActions.createUser(componentOwner); - await this.alfrescoJsApi.core.peopleApi.addPerson(componentVisitor); + await usersActions.createUser(componentVisitor); - await this.alfrescoJsApi.core.peopleApi.addPerson(secondComponentVisitor); + await usersActions.createUser(secondComponentVisitor); - await this.alfrescoJsApi.login(componentOwner.id, componentOwner.password); + await apiService.getInstance().login(componentOwner.email, componentOwner.password); emptyFile = await uploadActions.uploadFile(emptyFileModel.location, emptyFileModel.name, '-my-'); - await this.alfrescoJsApi.core.nodesApi.updateNode(emptyFile.entry.id, + await apiService.getInstance().core.nodesApi.updateNode(emptyFile.entry.id, { permissions: { locallySet: [{ - authorityId: componentVisitor.getId(), + authorityId: componentVisitor.email, name: 'Consumer', accessStatus: 'ALLOWED' }, { - authorityId: secondComponentVisitor.getId(), + authorityId: secondComponentVisitor.email, name: 'Consumer', accessStatus: 'ALLOWED' }] } }); - }); + }); afterAll(async () => { await navigationBarPage.clickLogoutButton(); - await uploadActions.deleteFileOrFolder(emptyFile.entry.id); - }); + await uploadActions.deleteFileOrFolder(emptyFile.entry.email); + }); describe('User interaction on their own components', () => { - beforeEach(async () => { - await loginPage.loginToContentServicesUsingUserModel(componentOwner); + await loginPage.login(componentOwner.email, componentOwner.password); await navigationBarPage.clickSocialButton(); }); @@ -109,12 +106,11 @@ describe('Social component', () => { await likePage.removeHoverFromLikeButton(); await expect(await likePage.getUnLikedIconColor()).toBe(greyLikeColor); }); - }); + }); describe('User interaction on components that belong to other users', () => { - beforeEach(async () => { - await loginPage.loginToContentServicesUsingUserModel(componentVisitor); + await loginPage.login(componentVisitor.email, componentVisitor.password); await navigationBarPage.clickSocialButton(); }); @@ -145,12 +141,11 @@ describe('Social component', () => { await expect(await ratePage.getRatingCounter()).toBe('0'); await expect(await ratePage.isNotStarRated(4)); }); - }); + }); describe('Multiple Users interaction', () => { - beforeEach(async () => { - await loginPage.loginToContentServicesUsingUserModel(componentVisitor); + await loginPage.login(componentVisitor.email, componentVisitor.password); await navigationBarPage.clickSocialButton(); }); @@ -163,7 +158,7 @@ describe('Social component', () => { await likePage.removeHoverFromLikeButton(); await expect(await likePage.getLikedIconColor()).toBe(blueLikeColor); - await loginPage.loginToContentServicesUsingUserModel(secondComponentVisitor); + await loginPage.login(secondComponentVisitor.email, secondComponentVisitor.password); await navigationBarPage.clickSocialButton(); await socialPage.writeCustomNodeId(emptyFile.entry.id); await expect(await likePage.getUnLikedIconColor()).toBe(greyLikeColor); @@ -185,7 +180,7 @@ describe('Social component', () => { await expect(await ratePage.isStarRated(4)); await expect(await ratePage.getRatedStarColor(4)).toBe(yellowRatedStarColor); - await loginPage.loginToContentServicesUsingUserModel(secondComponentVisitor); + await loginPage.login(secondComponentVisitor.email, secondComponentVisitor.password); await navigationBarPage.clickSocialButton(); await socialPage.writeCustomNodeId(emptyFile.entry.id); await expect(await socialPage.getNodeIdFieldValue()).toEqual(emptyFile.entry.id); 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 f3f9168f51..eacdde9223 100644 --- a/e2e/content-services/sso/sso-download-directive-component.e2e.ts +++ b/e2e/content-services/sso/sso-download-directive-component.e2e.ts @@ -25,12 +25,11 @@ import { IdentityService, SettingsPage, StringUtil, - UserModel, FileBrowserUtil, ViewerPage } from '@alfresco/adf-testing'; import { FileModel } from '../../models/ACS/file.model'; -import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; +import { UsersActions } from '../../actions/users.actions'; describe('SSO in ADF using ACS and AIS, Download Directive, Viewer, DocumentList, implicitFlow true', () => { @@ -40,8 +39,11 @@ describe('SSO in ADF using ACS and AIS, Download Directive, Viewer, DocumentList const contentListPage = contentServicesPage.getDocumentList(); const loginSsoPage = new LoginSSOPage(); const viewerPage = new ViewerPage(); - let silentLogin; - let implicitFlow; + + const apiService = new ApiService({ authType: 'OAUTH' }); + const uploadActions = new UploadActions(apiService); + const identityService = new IdentityService(apiService); + const usersActions = new UsersActions(apiService); const firstPdfFileModel = new FileModel({ 'name': browser.params.resources.Files.ADF_DOCUMENTS.PDF_B.file_name, @@ -53,54 +55,28 @@ describe('SSO in ADF using ACS and AIS, Download Directive, Viewer, DocumentList 'location': browser.params.resources.Files.ADF_DOCUMENTS.PNG.file_path }); - let pdfUploadedFile, pngUploadedFile, folder; - - this.alfrescoJsApi = new AlfrescoApi({ - provider: 'ECM', - hostEcm: browser.params.testConfig.adf_acs.host, - authType: 'OAUTH', - oauth2: { - host: browser.params.testConfig.adf.hostSso, - clientId: browser.params.config.oauth2.clientId, - scope: 'openid', - secret: '', - implicitFlow: false, - silentLogin: false, - redirectUri: '/', - redirectUriLogout: '/logout' - } - }); - const uploadActions = new UploadActions(this.alfrescoJsApi); + let pdfUploadedFile, pngUploadedFile, folder, acsUser; 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 () => { - 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); + await apiService.login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); - identityService = new IdentityService(apiService); + acsUser = await usersActions.createUser(); - await identityService.createIdentityUserAndSyncECMBPM(acsUser); - - await this.alfrescoJsApi.login(acsUser.id, acsUser.password); + await apiService.getInstance().login(acsUser.email, acsUser.password); folder = await uploadActions.createFolder(folderName, '-my-'); pdfUploadedFile = await uploadActions.uploadFile(firstPdfFileModel.location, firstPdfFileModel.name, folder.entry.id); pngUploadedFile = await uploadActions.uploadFile(pngFileModel.location, pngFileModel.name, folder.entry.id); - silentLogin = false; - implicitFlow = true; - - 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); + await settingsPage.setProviderEcmSso(browser.params.testConfig.appConfig.ecmHost, + browser.params.testConfig.appConfig.oauth2.host, + browser.params.testConfig.appConfig.identityHost, false, true, browser.params.testConfig.appConfig.oauth2.clientId); await loginSsoPage.clickOnSSOButton(); - await loginSsoPage.loginSSOIdentityService(acsUser.id, acsUser.password); + await loginSsoPage.loginSSOIdentityService(acsUser.email, acsUser.password); await navigationBarPage.clickContentServicesButton(); await contentServicesPage.checkAcsContainer(); @@ -110,12 +86,12 @@ describe('SSO in ADF using ACS and AIS, Download Directive, Viewer, DocumentList afterAll(async () => { try { - await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); await uploadActions.deleteFileOrFolder(folder.entry.id); - await identityService.deleteIdentityUser(acsUser.id); + await identityService.deleteIdentityUser(acsUser.email); } catch (error) { } - await this.alfrescoJsApi.logout(); + await apiService.getInstance().logout(); await browser.executeScript('window.sessionStorage.clear();'); await browser.executeScript('window.localStorage.clear();'); }); diff --git a/e2e/content-services/tag-component.e2e.ts b/e2e/content-services/tag-component.e2e.ts index fd7e0d3c69..710d96e3ef 100644 --- a/e2e/content-services/tag-component.e2e.ts +++ b/e2e/content-services/tag-component.e2e.ts @@ -15,26 +15,24 @@ * limitations under the License. */ -import { AcsUserModel } from '../models/ACS/acs-user.model'; import { FileModel } from '../models/ACS/file.model'; -import { LoginPage, UploadActions, StringUtil } from '@alfresco/adf-testing'; +import { LoginSSOPage, UploadActions, StringUtil, ApiService, UserModel } from '@alfresco/adf-testing'; import { TagPage } from '../pages/adf/tag.page'; import { NavigationBarPage } from '../pages/adf/navigation-bar.page'; -import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; import { browser } from 'protractor'; +import { UsersActions } from '../actions/users.actions'; describe('Tag component', () => { - const loginPage = new LoginPage(); + const loginPage = new LoginSSOPage(); const tagPage = new TagPage(); const navigationBarPage = new NavigationBarPage(); - const acsUser = new AcsUserModel(); - this.alfrescoJsApi = new AlfrescoApi({ - provider: 'ECM', - hostEcm: browser.params.testConfig.adf_acs.host - }); - const uploadActions = new UploadActions(this.alfrescoJsApi); + let acsUser: UserModel; + const apiService = new ApiService(); + const usersActions = new UsersActions(apiService); + + const uploadActions = new UploadActions(apiService); const pdfFileModel = new FileModel({ name: browser.params.resources.Files.ADF_DOCUMENTS.PDF.file_name }); const deleteFile = new FileModel({ name: StringUtil.generateRandomString() }); const sameTag = StringUtil.generateRandomString().toLowerCase(); @@ -53,12 +51,11 @@ describe('Tag component', () => { let pdfUploadedFile, nodeId; beforeAll(async () => { + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); - await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); + acsUser = await usersActions.createUser(); - await this.alfrescoJsApi.core.peopleApi.addPerson(acsUser); - - await this.alfrescoJsApi.login(acsUser.id, acsUser.password); + await apiService.getInstance().login(acsUser.email, acsUser.password); pdfUploadedFile = await uploadActions.uploadFile(pdfFileModel.location, pdfFileModel.name, '-my-'); @@ -70,9 +67,9 @@ describe('Tag component', () => { Object.assign(deleteFile, uploadedDeleteFile.entry); - await this.alfrescoJsApi.core.tagsApi.addTag(nodeId, tags); + await apiService.getInstance().core.tagsApi.addTag(nodeId, tags); - await loginPage.loginToContentServicesUsingUserModel(acsUser); + await loginPage.login(acsUser.email, acsUser.password); }); afterAll(async () => { diff --git a/e2e/content-services/trashcan-pagination.e2e.ts b/e2e/content-services/trashcan-pagination.e2e.ts index c166a2f4f9..6610b29506 100644 --- a/e2e/content-services/trashcan-pagination.e2e.ts +++ b/e2e/content-services/trashcan-pagination.e2e.ts @@ -15,14 +15,12 @@ * limitations under the License. */ -import { LoginPage, PaginationPage, UploadActions } from '@alfresco/adf-testing'; -import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; +import { StringUtil, LoginSSOPage, PaginationPage, UploadActions, ApiService, UserModel } from '@alfresco/adf-testing'; import { browser } from 'protractor'; -import { AcsUserModel } from '../models/ACS/acs-user.model'; import { FolderModel } from '../models/ACS/folder.model'; import { NavigationBarPage } from '../pages/adf/navigation-bar.page'; import { TrashcanPage } from '../pages/adf/trashcan.page'; -import { Util } from '../util/util'; +import { UsersActions } from '../actions/users.actions'; describe('Trashcan - Pagination', () => { const pagination = { @@ -42,33 +40,31 @@ describe('Trashcan - Pagination', () => { default: '25' }; - const loginPage = new LoginPage(); + const loginPage = new LoginSSOPage(); const trashcanPage = new TrashcanPage(); const paginationPage = new PaginationPage(); const navigationBarPage = new NavigationBarPage(); + const apiService = new ApiService(); + const usersActions = new UsersActions(apiService); - const acsUser = new AcsUserModel(); + let acsUser: UserModel; const newFolderModel = new FolderModel({ name: 'newFolder' }); const noOfFiles = 20; 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, 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 uploadActions = new UploadActions(apiService); + const fileNames = StringUtil.generateFilesNames(10, noOfFiles + 9, pagination.base, pagination.extension); + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); + acsUser = await usersActions.createUser(); + await apiService.getInstance().login(acsUser.email, acsUser.password); const folderUploadedModel = await uploadActions.createFolder(newFolderModel.name, '-my-'); 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 apiService.getInstance().node.deleteNode(entry.entry.id).then(() => {}, async () => { + await apiService.getInstance().node.deleteNode(entry.entry.id); }); } - await loginPage.loginToContentServicesUsingUserModel(acsUser); + await loginPage.login(acsUser.email, acsUser.password); await navigationBarPage.clickTrashcanButton(); await trashcanPage.waitForTableBody(); }); diff --git a/e2e/content-services/tree-view-component.e2e.ts b/e2e/content-services/tree-view-component.e2e.ts index eb5ada2743..86925e63d6 100644 --- a/e2e/content-services/tree-view-component.e2e.ts +++ b/e2e/content-services/tree-view-component.e2e.ts @@ -15,25 +15,23 @@ * limitations under the License. */ -import { LoginPage, UploadActions } from '@alfresco/adf-testing'; +import { ApiService, LoginSSOPage, UploadActions, UserModel } from '@alfresco/adf-testing'; import { NavigationBarPage } from '../pages/adf/navigation-bar.page'; import { TreeViewPage } from '../pages/adf/content-services/tree-view.page'; -import { AcsUserModel } from '../models/ACS/acs-user.model'; import { browser } from 'protractor'; -import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; +import { UsersActions } from '../actions/users.actions'; describe('Tree View Component', () => { - const loginPage = new LoginPage(); + const loginPage = new LoginSSOPage(); const navigationBarPage = new NavigationBarPage(); const treeViewPage = new TreeViewPage(); - const acsUser = new AcsUserModel(); - this.alfrescoJsApi = new AlfrescoApi({ - provider: 'ECM', - hostEcm: browser.params.testConfig.adf_acs.host - }); - const uploadActions = new UploadActions(this.alfrescoJsApi); + let acsUser: UserModel; + const apiService = new ApiService(); + const usersActions = new UsersActions(apiService); + + const uploadActions = new UploadActions(apiService); let treeFolder, secondTreeFolder, thirdTreeFolder; @@ -46,30 +44,30 @@ describe('Tree View Component', () => { }; beforeAll(async () => { - await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); - await this.alfrescoJsApi.core.peopleApi.addPerson(acsUser); + acsUser = await usersActions.createUser(); - await this.alfrescoJsApi.login(acsUser.id, acsUser.password); + await apiService.getInstance().login(acsUser.email, acsUser.password); - treeFolder = await this.alfrescoJsApi.nodes.addNode(nodeNames.parentFolder, { + treeFolder = await apiService.getInstance().nodes.addNode(nodeNames.parentFolder, { name: nodeNames.folder, nodeType: 'cm:folder' }); - secondTreeFolder = await this.alfrescoJsApi.nodes.addNode(nodeNames.parentFolder, { + secondTreeFolder = await apiService.getInstance().nodes.addNode(nodeNames.parentFolder, { name: nodeNames.secondFolder, nodeType: 'cm:folder' }); - thirdTreeFolder = await this.alfrescoJsApi.nodes.addNode(secondTreeFolder.entry.id, { + thirdTreeFolder = await apiService.getInstance().nodes.addNode(secondTreeFolder.entry.id, { name: nodeNames.thirdFolder, nodeType: 'cm:folder' }); - await this.alfrescoJsApi.nodes.addNode(thirdTreeFolder.entry.id, { + await apiService.getInstance().nodes.addNode(thirdTreeFolder.entry.id, { name: nodeNames.document, nodeType: 'cm:content' }); - await loginPage.loginToContentServicesUsingUserModel(acsUser); + await loginPage.login(acsUser.email, acsUser.password); await navigationBarPage.clickTreeViewButton(); }); @@ -77,7 +75,7 @@ describe('Tree View Component', () => { afterAll(async () => { await navigationBarPage.clickLogoutButton(); - await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); await uploadActions.deleteFileOrFolder(treeFolder.entry.id); await uploadActions.deleteFileOrFolder(secondTreeFolder.entry.id); diff --git a/e2e/content-services/upload/cancel-upload.e2e.ts b/e2e/content-services/upload/cancel-upload.e2e.ts index 2a74eba0da..97f17eb394 100644 --- a/e2e/content-services/upload/cancel-upload.e2e.ts +++ b/e2e/content-services/upload/cancel-upload.e2e.ts @@ -16,26 +16,24 @@ */ import { browser } from 'protractor'; -import { LoginPage, UploadActions } from '@alfresco/adf-testing'; +import { ApiService, LoginSSOPage, UploadActions, UserModel } from '@alfresco/adf-testing'; import { ContentServicesPage } from '../../pages/adf/content-services.page'; import { UploadDialogPage } from '../../pages/adf/dialog/upload-dialog.page'; import { UploadTogglesPage } from '../../pages/adf/dialog/upload-toggles.page'; -import { AcsUserModel } from '../../models/ACS/acs-user.model'; import { FileModel } from '../../models/ACS/file.model'; -import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; +import { UsersActions } from '../../actions/users.actions'; describe('Upload component', async () => { - this.alfrescoJsApi = new AlfrescoApi({ - provider: 'ECM', - hostEcm: browser.params.testConfig.adf_acs.host - }); + const apiService = new ApiService(); const contentServicesPage = new ContentServicesPage(); const uploadDialog = new UploadDialogPage(); const uploadToggles = new UploadTogglesPage(); - const loginPage = new LoginPage(); - const acsUser = new AcsUserModel(); - const uploadActions = new UploadActions(this.alfrescoJsApi); + const loginPage = new LoginSSOPage(); + const uploadActions = new UploadActions(apiService); + const usersActions = new UsersActions(apiService); + + let acsUser: UserModel; const pngFile = new FileModel({ 'name': browser.params.resources.Files.ADF_DOCUMENTS.PNG.file_name, @@ -53,11 +51,11 @@ describe('Upload component', async () => { }); 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 apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); + acsUser = await usersActions.createUser(); + await apiService.getInstance().login(acsUser.email, acsUser.password); - await loginPage.loginToContentServicesUsingUserModel(acsUser); + await loginPage.login(acsUser.email, acsUser.password); await contentServicesPage.goToDocumentList(); }); diff --git a/e2e/content-services/upload/excluded-file.e2e.ts b/e2e/content-services/upload/excluded-file.e2e.ts index c91fda4cea..cee27f09bc 100644 --- a/e2e/content-services/upload/excluded-file.e2e.ts +++ b/e2e/content-services/upload/excluded-file.e2e.ts @@ -16,25 +16,26 @@ */ import { element, by, browser } from 'protractor'; -import { LoginPage, LocalStorageUtil } from '@alfresco/adf-testing'; +import { DropActions, LoginSSOPage, LocalStorageUtil, ApiService, UserModel } from '@alfresco/adf-testing'; import { ContentServicesPage } from '../../pages/adf/content-services.page'; import { UploadDialogPage } from '../../pages/adf/dialog/upload-dialog.page'; import { UploadTogglesPage } from '../../pages/adf/dialog/upload-toggles.page'; -import { AcsUserModel } from '../../models/ACS/acs-user.model'; import { FileModel } from '../../models/ACS/file.model'; -import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; -import { DropActions } from '../../actions/drop.actions'; import { NavigationBarPage } from '../../pages/adf/navigation-bar.page'; import { FolderModel } from '../../models/ACS/folder.model'; +import { UsersActions } from '../../actions/users.actions'; describe('Upload component - Excluded Files', () => { const contentServicesPage = new ContentServicesPage(); const uploadDialog = new UploadDialogPage(); const uploadToggles = new UploadTogglesPage(); - const loginPage = new LoginPage(); - const acsUser = new AcsUserModel(); + const loginPage = new LoginSSOPage(); const navigationBarPage = new NavigationBarPage(); + const apiService = new ApiService(); + const usersActions = new UsersActions(apiService); + + let acsUser: UserModel; const iniExcludedFile = new FileModel({ 'name': browser.params.resources.Files.ADF_DOCUMENTS.INI.file_name, @@ -67,18 +68,13 @@ describe('Upload component - Excluded Files', () => { }); beforeAll(async () => { - this.alfrescoJsApi = new AlfrescoApi({ - provider: 'ECM', - hostEcm: browser.params.testConfig.adf_acs.host - }); + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); - await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); + acsUser = await usersActions.createUser(); - await this.alfrescoJsApi.core.peopleApi.addPerson(acsUser); + await apiService.getInstance().login(acsUser.email, acsUser.password); - await this.alfrescoJsApi.login(acsUser.id, acsUser.password); - - await loginPage.loginToContentServicesUsingUserModel(acsUser); + await loginPage.login(acsUser.email, acsUser.password); await contentServicesPage.goToDocumentList(); }); diff --git a/e2e/content-services/upload/upload-dialog.e2e.ts b/e2e/content-services/upload/upload-dialog.e2e.ts index 96f83713cb..1977fc9f00 100644 --- a/e2e/content-services/upload/upload-dialog.e2e.ts +++ b/e2e/content-services/upload/upload-dialog.e2e.ts @@ -15,30 +15,29 @@ * limitations under the License. */ -import { BrowserActions, LoginPage, UploadActions } from '@alfresco/adf-testing'; +import { ApiService, BrowserActions, LoginSSOPage, UploadActions, UserModel } from '@alfresco/adf-testing'; import { ContentServicesPage } from '../../pages/adf/content-services.page'; import { UploadDialogPage } from '../../pages/adf/dialog/upload-dialog.page'; import { UploadTogglesPage } from '../../pages/adf/dialog/upload-toggles.page'; -import { AcsUserModel } from '../../models/ACS/acs-user.model'; import { FileModel } from '../../models/ACS/file.model'; import { browser } from 'protractor'; -import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; import { VersionManagePage } from '../../pages/adf/version-manager.page'; import { FolderModel } from '../../models/ACS/folder.model'; +import { UsersActions } from '../../actions/users.actions'; describe('Upload component', () => { const contentServicesPage = new ContentServicesPage(); const uploadDialog = new UploadDialogPage(); const uploadToggles = new UploadTogglesPage(); - const loginPage = new LoginPage(); - const acsUser = new AcsUserModel(); + const loginPage = new LoginSSOPage(); const versionManagePage = new VersionManagePage(); - this.alfrescoJsApi = new AlfrescoApi({ - provider: 'ECM', - hostEcm: browser.params.testConfig.adf_acs.host - }); - const uploadActions = new UploadActions(this.alfrescoJsApi); + const apiService = new ApiService(); + + const uploadActions = new UploadActions(apiService); + const usersActions = new UsersActions(apiService); + + let acsUser: UserModel; const firstPdfFileModel = new FileModel({ 'name': browser.params.resources.Files.ADF_DOCUMENTS.PDF_B.file_name, @@ -88,10 +87,10 @@ describe('Upload component', () => { }); 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 apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); + acsUser = await usersActions.createUser(); + await apiService.getInstance().login(acsUser.email, acsUser.password); + await loginPage.login(acsUser.email, acsUser.password); await contentServicesPage.goToDocumentList(); }); @@ -232,7 +231,7 @@ describe('Upload component', () => { document.querySelector("#adf-upload-dialog-cancel-all").click(); document.querySelector("#adf-upload-dialog-cancel").click(); } - }, 2000)`); + }, 500)`); await contentServicesPage.uploadFolder(adfBigFolder.location); await expect(await uploadDialog.getTitleText()).toEqual('Upload canceled'); diff --git a/e2e/content-services/upload/uploader-component.e2e.ts b/e2e/content-services/upload/uploader-component.e2e.ts index 73ef2d746d..87c9dd2757 100644 --- a/e2e/content-services/upload/uploader-component.e2e.ts +++ b/e2e/content-services/upload/uploader-component.e2e.ts @@ -17,30 +17,28 @@ import { element, by, browser } from 'protractor'; -import { LoginPage, UploadActions, StringUtil } from '@alfresco/adf-testing'; +import { DropActions, LoginSSOPage, UploadActions, StringUtil, ApiService, UserModel } from '@alfresco/adf-testing'; import { ContentServicesPage } from '../../pages/adf/content-services.page'; import { UploadDialogPage } from '../../pages/adf/dialog/upload-dialog.page'; import { UploadTogglesPage } from '../../pages/adf/dialog/upload-toggles.page'; -import { AcsUserModel } from '../../models/ACS/acs-user.model'; import { FileModel } from '../../models/ACS/file.model'; import { NavigationBarPage } from '../../pages/adf/navigation-bar.page'; -import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; -import { DropActions } from '../../actions/drop.actions'; +import { UsersActions } from '../../actions/users.actions'; describe('Upload component', () => { const contentServicesPage = new ContentServicesPage(); const uploadDialog = new UploadDialogPage(); const uploadToggles = new UploadTogglesPage(); - const loginPage = new LoginPage(); - const acsUser = new AcsUserModel(); - this.alfrescoJsApi = new AlfrescoApi({ - provider: 'ECM', - hostEcm: browser.params.testConfig.adf_acs.host - }); - const uploadActions = new UploadActions(this.alfrescoJsApi); + const loginPage = new LoginSSOPage(); const navigationBarPage = new NavigationBarPage(); + const apiService = new ApiService(); + const usersActions = new UsersActions(apiService); + const uploadActions = new UploadActions(apiService); + + let acsUser: UserModel; + const firstPdfFileModel = new FileModel({ 'name': browser.params.resources.Files.ADF_DOCUMENTS.PDF_B.file_name, 'location': browser.params.resources.Files.ADF_DOCUMENTS.PDF_B.file_path @@ -67,10 +65,10 @@ describe('Upload component', () => { }); 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 apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); + acsUser = await usersActions.createUser(); + await apiService.getInstance().login(acsUser.email, acsUser.password); + await loginPage.login(acsUser.email, acsUser.password); const pdfUploadedFile = await uploadActions.uploadFile(firstPdfFileModel.location, firstPdfFileModel.name, '-my-'); Object.assign(firstPdfFileModel, pdfUploadedFile.entry); }); @@ -84,7 +82,6 @@ describe('Upload component', () => { }); describe('', () => { - afterEach(async () => { const nodeList = await contentServicesPage.getElementsDisplayedId(); for (const node of nodeList) { diff --git a/e2e/content-services/upload/user-permission.e2e.ts b/e2e/content-services/upload/user-permission.e2e.ts index b0610ce162..fbae310de6 100644 --- a/e2e/content-services/upload/user-permission.e2e.ts +++ b/e2e/content-services/upload/user-permission.e2e.ts @@ -16,24 +16,23 @@ */ import { browser } from 'protractor'; -import { StringUtil, LoginPage, NotificationHistoryPage } from '@alfresco/adf-testing'; +import { StringUtil, LoginSSOPage, NotificationHistoryPage, ApiService } from '@alfresco/adf-testing'; import { ContentServicesPage } from '../../pages/adf/content-services.page'; import { UploadDialogPage } from '../../pages/adf/dialog/upload-dialog.page'; import { NavigationBarPage } from '../../pages/adf/navigation-bar.page'; -import { AcsUserModel } from '../../models/ACS/acs-user.model'; import { FileModel } from '../../models/ACS/file.model'; -import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; import CONSTANTS = require('../../util/constants'); +import { UsersActions } from '../../actions/users.actions'; describe('Upload - User permission', () => { const contentServicesPage = new ContentServicesPage(); const uploadDialog = new UploadDialogPage(); - const loginPage = new LoginPage(); - let acsUser; - let acsUserTwo; + const loginPage = new LoginSSOPage(); const navigationBarPage = new NavigationBarPage(); const notificationHistoryPage = new NotificationHistoryPage(); + const apiService = new ApiService(); + const usersActions = new UsersActions(apiService); const emptyFile = new FileModel({ 'name': browser.params.resources.Files.ADF_DOCUMENTS.TXT_0B.file_name, @@ -50,49 +49,42 @@ describe('Upload - User permission', () => { 'location': browser.params.resources.Files.ADF_DOCUMENTS.PDF.file_location }); + let acsUser, acsUserTwo, consumerSite, managerSite; + beforeAll(async () => { - this.alfrescoJsApi = new AlfrescoApi({ - provider: 'ECM', - hostEcm: browser.params.testConfig.adf_acs.host - }); + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); + + acsUser = await usersActions.createUser(acsUser); + acsUserTwo = await usersActions.createUser(acsUserTwo); }); beforeEach(async () => { - acsUser = new AcsUserModel(); - acsUserTwo = new AcsUserModel(); + await loginPage.login(acsUser.email, acsUser.password); - 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(acsUserTwo); - - await loginPage.loginToContentServicesUsingUserModel(acsUser); - - this.consumerSite = await this.alfrescoJsApi.core.sitesApi.createSite({ + consumerSite = await apiService.getInstance().core.sitesApi.createSite({ title: StringUtil.generateRandomString(), visibility: 'PUBLIC' }); - this.managerSite = await this.alfrescoJsApi.core.sitesApi.createSite({ + managerSite = await apiService.getInstance().core.sitesApi.createSite({ title: StringUtil.generateRandomString(), visibility: 'PUBLIC' }); - await this.alfrescoJsApi.core.sitesApi.addSiteMember(this.consumerSite.entry.id, { - id: acsUser.id, + await apiService.getInstance().core.sitesApi.addSiteMember(consumerSite.entry.id, { + id: acsUser.email, role: CONSTANTS.CS_USER_ROLES.CONSUMER }); - await this.alfrescoJsApi.core.sitesApi.addSiteMember(this.managerSite.entry.id, { - id: acsUser.id, + await apiService.getInstance().core.sitesApi.addSiteMember(managerSite.entry.id, { + id: acsUser.email, role: CONSTANTS.CS_USER_ROLES.MANAGER }); }); afterEach(async () => { - await this.alfrescoJsApi.core.sitesApi.deleteSite(this.managerSite.entry.id, { permanent: true }); - await this.alfrescoJsApi.core.sitesApi.deleteSite(this.consumerSite.entry.id, { permanent: true }); + await apiService.getInstance().core.sitesApi.deleteSite(managerSite.entry.id, { permanent: true }); + await apiService.getInstance().core.sitesApi.deleteSite(consumerSite.entry.id, { permanent: true }); }); describe('Consumer permissions', () => { @@ -102,14 +94,13 @@ describe('Upload - User permission', () => { }); it('[C291921] Should display tooltip for uploading files without permissions', async () => { - await navigationBarPage.openContentServicesFolder(this.consumerSite.entry.guid); + await navigationBarPage.openContentServicesFolder(consumerSite.entry.guid); await contentServicesPage.checkDragAndDropDIsDisplayed(); await contentServicesPage.dragAndDropFile(emptyFile.location); await uploadDialog.fileIsError(emptyFile.name); - await uploadDialog.displayTooltip(); await expect(await uploadDialog.getTooltip()).toEqual('Insufficient permissions to upload in this location [403]'); @@ -124,7 +115,7 @@ describe('Upload - User permission', () => { await uploadDialog.clickOnCloseButton(); await uploadDialog.dialogIsNotDisplayed(); - await navigationBarPage.openContentServicesFolder(this.consumerSite.entry.guid); + await navigationBarPage.openContentServicesFolder(consumerSite.entry.guid); await browser.sleep(3000); @@ -135,9 +126,8 @@ describe('Upload - User permission', () => { }); describe('full permissions', () => { - beforeEach(async () => { - await navigationBarPage.openContentServicesFolder(this.managerSite.entry.guid); + await navigationBarPage.openContentServicesFolder(managerSite.entry.guid); await contentServicesPage.goToDocumentList(); }); @@ -150,7 +140,6 @@ describe('Upload - User permission', () => { }); describe('multiple users', () => { - beforeEach(async () => { await contentServicesPage.goToDocumentList(); }); @@ -163,7 +152,7 @@ describe('Upload - User permission', () => { await contentServicesPage.checkContentIsDisplayed(emptyFile.name); await navigationBarPage.clickLoginButton(); - await loginPage.loginToContentServicesUsingUserModel(acsUserTwo); + await loginPage.login(acsUserTwo.email, acsUserTwo.password); await contentServicesPage.goToDocumentList(); await contentServicesPage.checkContentIsNotDisplayed(emptyFile.name); @@ -173,7 +162,7 @@ describe('Upload - User permission', () => { await contentServicesPage.checkContentIsDisplayed(pngFile.name); await navigationBarPage.clickLoginButton(); - await loginPage.loginToContentServicesUsingUserModel(acsUser); + await loginPage.login(acsUser.email, acsUser.password); await contentServicesPage.goToDocumentList(); await contentServicesPage.checkContentIsNotDisplayed(pngFile.name); diff --git a/e2e/content-services/version/version-actions.e2e.ts b/e2e/content-services/version/version-actions.e2e.ts index 7a2c3068d6..2a5ad7a04b 100644 --- a/e2e/content-services/version/version-actions.e2e.ts +++ b/e2e/content-services/version/version-actions.e2e.ts @@ -15,25 +15,33 @@ * limitations under the License. */ -import { BrowserActions, BrowserVisibility, FileBrowserUtil, LoginPage, UploadActions } from '@alfresco/adf-testing'; -import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; +import { + ApiService, + BrowserActions, + BrowserVisibility, + FileBrowserUtil, + LoginSSOPage, + UploadActions, UserModel +} from '@alfresco/adf-testing'; import { browser, by, element } from 'protractor'; -import { AcsUserModel } from '../../models/ACS/acs-user.model'; import { FileModel } from '../../models/ACS/file.model'; import { ContentServicesPage } from '../../pages/adf/content-services.page'; import { UploadDialogPage } from '../../pages/adf/dialog/upload-dialog.page'; import { NavigationBarPage } from '../../pages/adf/navigation-bar.page'; import { VersionManagePage } from '../../pages/adf/version-manager.page'; +import { UsersActions } from '../../actions/users.actions'; describe('Version component actions', () => { - const loginPage = new LoginPage(); + const loginPage = new LoginSSOPage(); const contentServicesPage = new ContentServicesPage(); const versionManagePage = new VersionManagePage(); const navigationBarPage = new NavigationBarPage(); const uploadDialog = new UploadDialogPage(); + const apiService = new ApiService(); + const usersActions = new UsersActions(apiService); - const acsUser = new AcsUserModel(); + let acsUser: UserModel; const txtFileModel = new FileModel({ 'name': browser.params.resources.Files.ADF_DOCUMENTS.TXT.file_name, @@ -52,18 +60,14 @@ describe('Version component actions', () => { }); 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); + uploadActions = new UploadActions(apiService); + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); + acsUser = await usersActions.createUser(); + await apiService.getInstance().login(acsUser.email, 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 loginPage.login(acsUser.email, acsUser.password); await navigationBarPage.clickContentServicesButton(); await contentServicesPage.waitForTableBody(); }); diff --git a/e2e/content-services/version/version-permissions.e2e.ts b/e2e/content-services/version/version-permissions.e2e.ts index 695c549543..bbd5cfb85d 100644 --- a/e2e/content-services/version/version-permissions.e2e.ts +++ b/e2e/content-services/version/version-permissions.e2e.ts @@ -16,20 +16,25 @@ */ import { element, by, browser } from 'protractor'; -import { LoginPage, BrowserActions, UploadActions, StringUtil, NotificationHistoryPage } from '@alfresco/adf-testing'; +import { + LoginSSOPage, + BrowserActions, + UploadActions, + StringUtil, + NotificationHistoryPage, + ApiService, UserModel +} from '@alfresco/adf-testing'; import { NavigationBarPage } from '../../pages/adf/navigation-bar.page'; import { VersionManagePage } from '../../pages/adf/version-manager.page'; import { UploadDialogPage } from '../../pages/adf/dialog/upload-dialog.page'; import { ContentServicesPage } from '../../pages/adf/content-services.page'; -import { AcsUserModel } from '../../models/ACS/acs-user.model'; import { FileModel } from '../../models/ACS/file.model'; -import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; -import { NodeActions } from '../../actions/ACS/node.actions'; import CONSTANTS = require('../../util/constants'); +import { UsersActions } from '../../actions/users.actions'; describe('Version component permissions', () => { - const loginPage = new LoginPage(); + const loginPage = new LoginSSOPage(); const versionManagePage = new VersionManagePage(); const navigationBarPage = new NavigationBarPage(); const uploadDialog = new UploadDialogPage(); @@ -37,12 +42,15 @@ describe('Version component permissions', () => { const contentServices = new ContentServicesPage(); let site; - const acsUser = new AcsUserModel(); - const consumerUser = new AcsUserModel(); - const collaboratorUser = new AcsUserModel(); - const contributorUser = new AcsUserModel(); - const managerUser = new AcsUserModel(); - const fileCreatorUser = new AcsUserModel(); + const acsUser = new UserModel(); + const consumerUser = new UserModel(); + const collaboratorUser = new UserModel(); + const contributorUser = new UserModel(); + const managerUser = new UserModel(); + const fileCreatorUser = new UserModel(); + + const apiService = new ApiService(); + const usersActions = new UsersActions(apiService); const newVersionFile = new FileModel({ 'name': browser.params.resources.Files.ADF_DOCUMENTS.PNG_B.file_name, @@ -59,86 +67,83 @@ describe('Version component permissions', () => { 'location': browser.params.resources.Files.ADF_DOCUMENTS.PNG_D.file_path }); - this.alfrescoJsApi = new AlfrescoApi({ - provider: 'ECM', - hostEcm: browser.params.testConfig.adf_acs.host - }); - const uploadActions = new UploadActions(this.alfrescoJsApi); - const nodeActions = new NodeActions(); + const uploadActions = new UploadActions(apiService); 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(consumerUser); - await this.alfrescoJsApi.core.peopleApi.addPerson(collaboratorUser); - await this.alfrescoJsApi.core.peopleApi.addPerson(contributorUser); - await this.alfrescoJsApi.core.peopleApi.addPerson(managerUser); - await this.alfrescoJsApi.core.peopleApi.addPerson(fileCreatorUser); + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); + await usersActions.createUser(acsUser); + await usersActions.createUser(consumerUser); + await usersActions.createUser(collaboratorUser); + await usersActions.createUser(contributorUser); + await usersActions.createUser(managerUser); + await usersActions.createUser(fileCreatorUser); - site = await this.alfrescoJsApi.core.sitesApi.createSite({ + site = await apiService.getInstance().core.sitesApi.createSite({ title: StringUtil.generateRandomString(), visibility: 'PUBLIC' }); - await this.alfrescoJsApi.core.sitesApi.addSiteMember(site.entry.id, { - id: consumerUser.id, + await apiService.getInstance().core.sitesApi.addSiteMember(site.entry.id, { + id: consumerUser.email, role: CONSTANTS.CS_USER_ROLES.CONSUMER }); - await this.alfrescoJsApi.core.sitesApi.addSiteMember(site.entry.id, { - id: collaboratorUser.id, + await apiService.getInstance().core.sitesApi.addSiteMember(site.entry.id, { + id: collaboratorUser.email, role: CONSTANTS.CS_USER_ROLES.COLLABORATOR }); - await this.alfrescoJsApi.core.sitesApi.addSiteMember(site.entry.id, { - id: contributorUser.id, + await apiService.getInstance().core.sitesApi.addSiteMember(site.entry.id, { + id: contributorUser.email, role: CONSTANTS.CS_USER_ROLES.CONTRIBUTOR }); - await this.alfrescoJsApi.core.sitesApi.addSiteMember(site.entry.id, { - id: managerUser.id, + await apiService.getInstance().core.sitesApi.addSiteMember(site.entry.id, { + id: managerUser.email, role: CONSTANTS.CS_USER_ROLES.MANAGER }); - await this.alfrescoJsApi.core.sitesApi.addSiteMember(site.entry.id, { - id: fileCreatorUser.id, + await apiService.getInstance().core.sitesApi.addSiteMember(site.entry.id, { + id: fileCreatorUser.email, role: CONSTANTS.CS_USER_ROLES.MANAGER }); const lockFileUploaded = await uploadActions.uploadFile(lockFileModel.location, lockFileModel.name, site.entry.guid); Object.assign(lockFileModel, lockFileUploaded.entry); - nodeActions.lockNode(this.alfrescoJsApi, lockFileModel.id); + await apiService.getInstance().nodes.lockNode(lockFileModel.id, { + type: 'FULL', + lifetime: 'PERSISTENT' + }); - await this.alfrescoJsApi.login(fileCreatorUser.id, fileCreatorUser.password); + await apiService.getInstance().login(fileCreatorUser.email, fileCreatorUser.password); await uploadActions.uploadFile(differentCreatorFile.location, differentCreatorFile.name, site.entry.guid); }); afterAll(async () => { - await this.alfrescoJsApi.core.sitesApi.deleteSite(site.entry.id, { permanent: true }); + await apiService.getInstance().core.sitesApi.deleteSite(site.entry.id, { permanent: true }); }); describe('Manager', () => { - const sameCreatorFile = new FileModel({ 'name': browser.params.resources.Files.ADF_DOCUMENTS.PNG.file_name, 'location': browser.params.resources.Files.ADF_DOCUMENTS.PNG.file_path }); beforeAll(async () => { - await this.alfrescoJsApi.login(managerUser.id, managerUser.password); + await apiService.getInstance().login(managerUser.email, managerUser.password); const sameCreatorFileUploaded = await uploadActions.uploadFile(sameCreatorFile.location, sameCreatorFile.name, site.entry.guid); Object.assign(sameCreatorFile, sameCreatorFileUploaded.entry); - await loginPage.loginToContentServicesUsingUserModel(managerUser); + await loginPage.login(managerUser.email, managerUser.password); await navigationBarPage.openContentServicesFolder(site.entry.guid); }); afterAll(async () => { - await this.alfrescoJsApi.nodes.deleteNode(sameCreatorFile.id); + await apiService.getInstance().nodes.deleteNode(sameCreatorFile.id); await navigationBarPage.clickLogoutButton(); }); @@ -170,9 +175,8 @@ describe('Version component permissions', () => { }); describe('Consumer', () => { - beforeAll(async () => { - await loginPage.loginToContentServicesUsingUserModel(consumerUser); + await loginPage.login(consumerUser.email, consumerUser.password); await navigationBarPage.openContentServicesFolder(site.entry.guid); }); @@ -200,18 +204,18 @@ describe('Version component permissions', () => { }); beforeAll(async () => { - await this.alfrescoJsApi.login(contributorUser.id, contributorUser.password); + await apiService.getInstance().login(contributorUser.email, contributorUser.password); const sameCreatorFileUploaded = await uploadActions.uploadFile(sameCreatorFile.location, sameCreatorFile.name, site.entry.guid); Object.assign(sameCreatorFile, sameCreatorFileUploaded.entry); - await loginPage.loginToContentServicesUsingUserModel(contributorUser); + await loginPage.login(contributorUser.email, contributorUser.password); await navigationBarPage.openContentServicesFolder(site.entry.guid); }); afterAll(async () => { - await this.alfrescoJsApi.nodes.deleteNode(sameCreatorFile.id); + await apiService.getInstance().nodes.deleteNode(sameCreatorFile.id); await navigationBarPage.clickLogoutButton(); }); @@ -255,18 +259,18 @@ describe('Version component permissions', () => { }); beforeAll(async () => { - await this.alfrescoJsApi.login(collaboratorUser.id, collaboratorUser.password); + await apiService.getInstance().login(collaboratorUser.email, collaboratorUser.password); const sameCreatorFileUploaded = await uploadActions.uploadFile(sameCreatorFile.location, sameCreatorFile.name, site.entry.guid); Object.assign(sameCreatorFile, sameCreatorFileUploaded.entry); - await loginPage.loginToContentServicesUsingUserModel(collaboratorUser); + await loginPage.login(collaboratorUser.email, collaboratorUser.password); await navigationBarPage.openContentServicesFolder(site.entry.guid); }); afterAll(async () => { - await this.alfrescoJsApi.nodes.deleteNode(sameCreatorFile.id); + await apiService.getInstance().nodes.deleteNode(sameCreatorFile.id); await navigationBarPage.clickLogoutButton(); }); diff --git a/e2e/content-services/version/version-properties.e2e.ts b/e2e/content-services/version/version-properties.e2e.ts index a62553278b..fefbe570db 100644 --- a/e2e/content-services/version/version-properties.e2e.ts +++ b/e2e/content-services/version/version-properties.e2e.ts @@ -16,22 +16,31 @@ */ import { by, element, browser } from 'protractor'; -import { LoginPage, UploadActions, BrowserVisibility, BrowserActions } from '@alfresco/adf-testing'; +import { + LoginSSOPage, + UploadActions, + BrowserVisibility, + BrowserActions, + ApiService, + UserModel +} from '@alfresco/adf-testing'; import { ContentServicesPage } from '../../pages/adf/content-services.page'; import { VersionManagePage } from '../../pages/adf/version-manager.page'; -import { AcsUserModel } from '../../models/ACS/acs-user.model'; import { FileModel } from '../../models/ACS/file.model'; -import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; import { NavigationBarPage } from '../../pages/adf/navigation-bar.page'; +import { UsersActions } from '../../actions/users.actions'; describe('Version Properties', () => { - const loginPage = new LoginPage(); + const loginPage = new LoginSSOPage(); const contentServicesPage = new ContentServicesPage(); const versionManagePage = new VersionManagePage(); const navigationBarPage = new NavigationBarPage(); - const acsUser = new AcsUserModel(); + const apiService = new ApiService(); + const usersActions = new UsersActions(apiService); + + let acsUser: UserModel; const txtFileModel = new FileModel({ 'name': browser.params.resources.Files.ADF_DOCUMENTS.TXT_0B.file_name, @@ -42,19 +51,15 @@ describe('Version Properties', () => { 'name': browser.params.resources.Files.ADF_DOCUMENTS.PNG.file_name, 'location': browser.params.resources.Files.ADF_DOCUMENTS.PNG.file_location }); - this.alfrescoJsApi = new AlfrescoApi({ - provider: 'ECM', - hostEcm: browser.params.testConfig.adf_acs.host - }); - const uploadActions = new UploadActions(this.alfrescoJsApi); + + const uploadActions = new UploadActions(apiService); beforeAll(async () => { + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); - await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); + acsUser = await usersActions.createUser(); - await this.alfrescoJsApi.core.peopleApi.addPerson(acsUser); - - await this.alfrescoJsApi.login(acsUser.id, acsUser.password); + await apiService.getInstance().login(acsUser.email, acsUser.password); const txtUploadedFile = await uploadActions.uploadFile(txtFileModel.location, txtFileModel.name, '-my-'); @@ -62,7 +67,7 @@ describe('Version Properties', () => { txtFileModel.update(txtUploadedFile.entry); - await loginPage.loginToContentServicesUsingUserModel(acsUser); + await loginPage.login(acsUser.email, acsUser.password); await navigationBarPage.clickContentServicesButton(); await contentServicesPage.waitForTableBody(); diff --git a/e2e/content-services/version/version-smoke-tests.e2e.ts b/e2e/content-services/version/version-smoke-tests.e2e.ts index 45435a77d2..1e09dd4183 100644 --- a/e2e/content-services/version/version-smoke-tests.e2e.ts +++ b/e2e/content-services/version/version-smoke-tests.e2e.ts @@ -16,23 +16,32 @@ */ import { browser } from 'protractor'; -import { LoginPage, UploadActions, BrowserVisibility, BrowserActions } from '@alfresco/adf-testing'; +import { + LoginSSOPage, + UploadActions, + BrowserVisibility, + BrowserActions, + ApiService, + UserModel +} from '@alfresco/adf-testing'; import { ContentServicesPage } from '../../pages/adf/content-services.page'; import { VersionManagePage } from '../../pages/adf/version-manager.page'; -import { AcsUserModel } from '../../models/ACS/acs-user.model'; import { FileModel } from '../../models/ACS/file.model'; -import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; import { NavigationBarPage } from '../../pages/adf/navigation-bar.page'; +import { UsersActions } from '../../actions/users.actions'; describe('Version component', () => { let txtUploadedFile; - const loginPage = new LoginPage(); + const loginPage = new LoginSSOPage(); const contentServicesPage = new ContentServicesPage(); const navigationBarPage = new NavigationBarPage(); const versionManagePage = new VersionManagePage(); - const acsUser = new AcsUserModel(); + const apiService = new ApiService(); + const usersActions = new UsersActions(apiService); + + let acsUser: UserModel; const txtFileModel = new FileModel({ 'name': browser.params.resources.Files.ADF_DOCUMENTS.TXT.file_name, @@ -58,26 +67,22 @@ describe('Version component', () => { 'name': browser.params.resources.Files.ADF_DOCUMENTS.PNG_D.file_name, 'location': browser.params.resources.Files.ADF_DOCUMENTS.PNG_D.file_location }); - this.alfrescoJsApi = new AlfrescoApi({ - provider: 'ECM', - hostEcm: browser.params.testConfig.adf_acs.host - }); - const uploadActions = new UploadActions(this.alfrescoJsApi); + const uploadActions = new UploadActions(apiService); beforeAll(async () => { - await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); - await this.alfrescoJsApi.core.peopleApi.addPerson(acsUser); + acsUser = await usersActions.createUser(); - await this.alfrescoJsApi.login(acsUser.id, acsUser.password); + await apiService.getInstance().login(acsUser.email, acsUser.password); txtUploadedFile = await uploadActions.uploadFile(txtFileModel.location, txtFileModel.name, '-my-'); Object.assign(txtFileModel, txtUploadedFile.entry); txtFileModel.update(txtUploadedFile.entry); - await loginPage.loginToContentServicesUsingUserModel(acsUser); + await loginPage.login(acsUser.email, acsUser.password); await navigationBarPage.clickContentServicesButton(); await contentServicesPage.waitForTableBody(); diff --git a/e2e/core/auth-guard/auth-guard-sso.e2e.ts b/e2e/core/auth-guard/auth-guard-sso.e2e.ts index 5fe0151325..c0b8df7802 100644 --- a/e2e/core/auth-guard/auth-guard-sso.e2e.ts +++ b/e2e/core/auth-guard/auth-guard-sso.e2e.ts @@ -26,11 +26,11 @@ describe('Auth Guard SSO', () => { it('[C307058] Should be redirected to 403 when user doesn\'t have permissions', 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); + browser.params.testConfig.appConfig.oauth2.host, + browser.params.testConfig.appConfig.identityHost, + false, true, browser.params.testConfig.appConfig.oauth2.clientId); await loginSSOPage.clickOnSSOButton(); - await loginSSOPage.loginSSOIdentityService(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); + await loginSSOPage.loginSSOIdentityService(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); await BrowserActions.getUrl(browser.params.testConfig.adf.url + '/cloud/simple-app'); await browser.sleep(1000); const error = await errorPage.getErrorCode(); diff --git a/e2e/core/datatable/data-table-component-selection.e2e.ts b/e2e/core/datatable/data-table-component-selection.e2e.ts index 35190ba8f4..2b9b717470 100644 --- a/e2e/core/datatable/data-table-component-selection.e2e.ts +++ b/e2e/core/datatable/data-table-component-selection.e2e.ts @@ -15,32 +15,29 @@ * limitations under the License. */ -import { DataTableComponentPage, LoginPage } from '@alfresco/adf-testing'; -import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; +import { ApiService, DataTableComponentPage, LoginSSOPage, UserModel } from '@alfresco/adf-testing'; import { browser } from 'protractor'; -import { AcsUserModel } from '../../models/ACS/acs-user.model'; import { DataTablePage } from '../../pages/adf/demo-shell/data-table.page'; import { NavigationBarPage } from '../../pages/adf/navigation-bar.page'; +import { UsersActions } from '../../actions/users.actions'; describe('Datatable component - selection', () => { + const apiService = new ApiService(); + const usersActions = new UsersActions(apiService); + const dataTablePage = new DataTablePage(); - const loginPage = new LoginPage(); - const acsUser = new AcsUserModel(); + const loginPage = new LoginSSOPage(); + const acsUser = new UserModel(); const navigationBarPage = new NavigationBarPage(); const dataTableComponent = new DataTableComponentPage(); beforeAll(async () => { - this.alfrescoJsApi = new AlfrescoApi({ - provider: 'ECM', - hostEcm: browser.params.testConfig.adf_acs.host - }); + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); - await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); + await usersActions.createUser(acsUser); - await this.alfrescoJsApi.core.peopleApi.addPerson(acsUser); - - await loginPage.loginToContentServicesUsingUserModel(acsUser); + await loginPage.login(acsUser.email, acsUser.password); await navigationBarPage.navigateToDatatable(); }); diff --git a/e2e/core/datatable/data-table-component.e2e.ts b/e2e/core/datatable/data-table-component.e2e.ts index c16b77a6cf..aa2590d653 100644 --- a/e2e/core/datatable/data-table-component.e2e.ts +++ b/e2e/core/datatable/data-table-component.e2e.ts @@ -15,41 +15,37 @@ * limitations under the License. */ -import { LoginPage, NotificationHistoryPage } from '@alfresco/adf-testing'; -import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; +import { ApiService, DropActions, LoginSSOPage, NotificationHistoryPage, UserModel } from '@alfresco/adf-testing'; import { browser } from 'protractor'; -import { DropActions } from '../../actions/drop.actions'; -import { AcsUserModel } from '../../models/ACS/acs-user.model'; import { FileModel } from '../../models/ACS/file.model'; import { DataTablePage } from '../../pages/adf/demo-shell/data-table.page'; import { NavigationBarPage } from '../../pages/adf/navigation-bar.page'; +import { UsersActions } from '../../actions/users.actions'; describe('Datatable component', () => { const dataTablePage = new DataTablePage('defaultTable'); const copyContentDataTablePage = new DataTablePage('copyClipboardDataTable'); const dragAndDropDataTablePage = new DataTablePage(); - const loginPage = new LoginPage(); - const acsUser = new AcsUserModel(); + const loginPage = new LoginSSOPage(); + const acsUser = new UserModel(); const navigationBarPage = new NavigationBarPage(); const notificationHistoryPage = new NotificationHistoryPage(); - const dragAndDrop = new DropActions(); const pngFile = new FileModel({ 'name': browser.params.resources.Files.ADF_DOCUMENTS.PNG.file_name, 'location': browser.params.resources.Files.ADF_DOCUMENTS.PNG.file_location }); + const apiService = new ApiService(); + const usersActions = new UsersActions(apiService); + const dragAndDrop = new DropActions(); + beforeAll(async () => { - this.alfrescoJsApi = new AlfrescoApi({ - provider: 'ECM', - hostEcm: browser.params.testConfig.adf_acs.host - }); + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); - await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); + await usersActions.createUser(acsUser); - await this.alfrescoJsApi.core.peopleApi.addPerson(acsUser); - - await loginPage.loginToContentServicesUsingUserModel(acsUser); + await loginPage.login(acsUser.email, acsUser.password); }); afterAll(async () => { @@ -57,7 +53,6 @@ describe('Datatable component', () => { }); describe('Datatable component - copyContent', () => { - beforeAll(async () => { await navigationBarPage.navigateToCopyContentDatatable(); await dataTablePage.dataTable.waitForTableBody(); @@ -142,7 +137,6 @@ describe('Datatable component', () => { }); describe('Datatable component - Drag and Drop', () => { - beforeAll(async () => { await navigationBarPage.navigateToDragAndDropDatatable(); await dragAndDropDataTablePage.dataTable.waitForTableBody(); diff --git a/e2e/core/error-component.e2e.ts b/e2e/core/error-component.e2e.ts index 4c4f9603fa..90330a94e5 100644 --- a/e2e/core/error-component.e2e.ts +++ b/e2e/core/error-component.e2e.ts @@ -15,28 +15,25 @@ * limitations under the License. */ -import { LoginPage, ErrorPage, BrowserActions } from '@alfresco/adf-testing'; -import { AcsUserModel } from '../models/ACS/acs-user.model'; -import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; +import { LoginSSOPage, ErrorPage, BrowserActions, ApiService, UserModel } from '@alfresco/adf-testing'; import { browser } from 'protractor'; import { NavigationBarPage } from '../pages/adf/navigation-bar.page'; +import { UsersActions } from '../actions/users.actions'; describe('Error Component', () => { - const acsUser = new AcsUserModel(); - const loginPage = new LoginPage(); + const acsUser = new UserModel(); + const loginPage = new LoginSSOPage(); const errorPage = new ErrorPage(); const navigationBarPage = new NavigationBarPage(); - beforeAll(async () => { - this.alfrescoJsApi = new AlfrescoApi({ - provider: 'ECM', - hostEcm: browser.params.testConfig.adf_acs.host - }); + const apiService = new ApiService(); + const usersActions = new UsersActions(apiService); - 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); + beforeAll(async () => { + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); + await usersActions.createUser(acsUser); + await loginPage.login(acsUser.email, acsUser.password); }); afterAll(async () => { diff --git a/e2e/core/header-component.e2e.ts b/e2e/core/header-component.e2e.ts index 0eab61ffaa..51ce44c032 100644 --- a/e2e/core/header-component.e2e.ts +++ b/e2e/core/header-component.e2e.ts @@ -14,20 +14,22 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import { HeaderPage, LoginPage, SettingsPage } from '@alfresco/adf-testing'; -import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; +import { ApiService, HeaderPage, LoginSSOPage, SettingsPage, UserModel } from '@alfresco/adf-testing'; import { browser } from 'protractor'; -import { UsersActions } from '../actions/users.actions'; import { NavigationBarPage } from '../pages/adf/navigation-bar.page'; +import { UsersActions } from '../actions/users.actions'; describe('Header Component', () => { - const loginPage = new LoginPage(); + const loginPage = new LoginSSOPage(); const navigationBarPage = new NavigationBarPage(); const headerPage = new HeaderPage(); const settingsPage = new SettingsPage(); - let user, tenantId; + const apiService = new ApiService(); + const usersActions = new UsersActions(apiService); + + const acsUser = new UserModel(); const names = { app_title_default: 'ADF Demo Application', @@ -43,34 +45,16 @@ describe('Header Component', () => { logo_tooltip: 'test_tooltip' }; - beforeAll(async() => { - this.alfrescoJsApi = new AlfrescoApi({ - provider: 'BPM', - hostBpm: browser.params.testConfig.adf_aps.host - }); + beforeAll(async () => { + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); - 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); - - await loginPage.loginToProcessServicesUsingUserModel(user); - }); - - beforeEach(async() => { - await navigationBarPage.clickHeaderDataButton(); + await usersActions.createUser(acsUser); + await loginPage.login(acsUser.email, acsUser.password); }); - 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); - }); + beforeEach(async () => { + await navigationBarPage.clickHeaderDataButton(); + }); it('[C280002] Should be able to view Header component', async () => { await headerPage.checkShowMenuCheckBoxIsDisplayed(); diff --git a/e2e/core/icons-component.e2e.ts b/e2e/core/icons-component.e2e.ts index 9c277a6546..1acc56697b 100644 --- a/e2e/core/icons-component.e2e.ts +++ b/e2e/core/icons-component.e2e.ts @@ -15,30 +15,26 @@ * limitations under the License. */ -import { LoginPage } from '@alfresco/adf-testing'; +import { ApiService, LoginSSOPage, UserModel } from '@alfresco/adf-testing'; import { NavigationBarPage } from '../pages/adf/navigation-bar.page'; import { IconsPage } from '../pages/adf/icons.page'; -import { AcsUserModel } from '../models/ACS/acs-user.model'; - import { browser } from 'protractor'; -import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; +import { UsersActions } from '../actions/users.actions'; describe('Universal Icon component', () => { - const loginPage = new LoginPage(); - const acsUser = new AcsUserModel(); + const loginPage = new LoginSSOPage(); + const acsUser = new UserModel(); const navigationBarPage = new NavigationBarPage(); const iconsPage = new IconsPage(); - beforeAll(async () => { - this.alfrescoJsApi = new AlfrescoApi({ - provider: 'ECM', - hostEcm: browser.params.testConfig.adf_acs.host - }); + const apiService = new ApiService(); + const usersActions = new UsersActions(apiService); - 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); + beforeAll(async () => { + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); + await usersActions.createUser(acsUser); + await loginPage.login(acsUser.email, acsUser.password); }); afterAll(async () => { diff --git a/e2e/core/infinite-scrolling.e2e.ts b/e2e/core/infinite-scrolling.e2e.ts index a2c4458298..16df50e7ac 100644 --- a/e2e/core/infinite-scrolling.e2e.ts +++ b/e2e/core/infinite-scrolling.e2e.ts @@ -15,24 +15,25 @@ * limitations under the License. */ -import { LocalStorageUtil, LoginPage, UploadActions } from '@alfresco/adf-testing'; -import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; +import { StringUtil, LocalStorageUtil, LoginSSOPage, UploadActions, ApiService, UserModel } from '@alfresco/adf-testing'; import { browser } from 'protractor'; -import { AcsUserModel } from '../models/ACS/acs-user.model'; import { FolderModel } from '../models/ACS/folder.model'; import { ContentServicesPage } from '../pages/adf/content-services.page'; import { InfinitePaginationPage } from '../pages/adf/core/infinite-pagination.page'; import { NavigationBarPage } from '../pages/adf/navigation-bar.page'; -import { Util } from '../util/util'; +import { UsersActions } from '../actions/users.actions'; describe('Enable infinite scrolling', () => { - const loginPage = new LoginPage(); + const loginPage = new LoginSSOPage(); const contentServicesPage = new ContentServicesPage(); const infinitePaginationPage = new InfinitePaginationPage(); const navigationBarPage = new NavigationBarPage(); - const acsUser = new AcsUserModel(); + const apiService = new ApiService(); + const usersActions = new UsersActions(apiService); + + const acsUser = new UserModel(); const folderModel = new FolderModel({ 'name': 'folderOne' }); let fileNames = []; @@ -49,22 +50,18 @@ describe('Enable infinite scrolling', () => { }; beforeAll(async () => { - this.alfrescoJsApi = new AlfrescoApi({ - provider: 'ECM', - hostEcm: browser.params.testConfig.adf_acs.host - }); - const uploadActions = new UploadActions(this.alfrescoJsApi); + const uploadActions = new UploadActions(apiService); - await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); - await this.alfrescoJsApi.core.peopleApi.addPerson(acsUser); + await usersActions.createUser(acsUser); - await loginPage.loginToContentServicesUsingUserModel(acsUser); + await loginPage.login(acsUser.email, acsUser.password); - fileNames = Util.generateSequenceFiles(1, nrOfFiles, files.base, files.extension); - deleteFileNames = Util.generateSequenceFiles(1, nrOfDeletedFiles, files.base, files.extension); + fileNames = StringUtil.generateFilesNames(1, nrOfFiles, files.base, files.extension); + deleteFileNames = StringUtil.generateFilesNames(1, nrOfDeletedFiles, files.base, files.extension); - await this.alfrescoJsApi.login(acsUser.id, acsUser.password); + await apiService.getInstance().login(acsUser.email, acsUser.password); const folderUploadedModel = await uploadActions.createFolder(folderModel.name, '-my-'); emptyFolderModel = await uploadActions.createFolder('emptyFolder', '-my-'); diff --git a/e2e/core/login/login-component.e2e.ts b/e2e/core/login/login-component.e2e.ts index 06c0f5a85c..5f94f2f137 100644 --- a/e2e/core/login/login-component.e2e.ts +++ b/e2e/core/login/login-component.e2e.ts @@ -15,31 +15,32 @@ * limitations under the License. */ -import { BrowserActions, ErrorPage, LoginPage, SettingsPage, UserInfoPage } from '@alfresco/adf-testing'; -import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; +import { + ApiService, + BrowserActions, + ErrorPage, + LocalStorageUtil, + UserInfoPage, + UserModel +} from '@alfresco/adf-testing'; import { browser } from 'protractor'; -import { AcsUserModel } from '../../models/ACS/acs-user.model'; import { ContentServicesPage } from '../../pages/adf/content-services.page'; import { NavigationBarPage } from '../../pages/adf/navigation-bar.page'; import { ProcessServicesPage } from '../../pages/adf/process-services/process-services.page'; -import { Util } from '../../util/util'; +import { LoginPage } from '../../pages/adf/demo-shell/login.page'; +import { UsersActions } from '../../actions/users.actions'; describe('Login component', () => { - const settingsPage = new SettingsPage(); const processServicesPage = new ProcessServicesPage(); const navigationBarPage = new NavigationBarPage(); const userInfoPage = new UserInfoPage(); const contentServicesPage = new ContentServicesPage(); const loginPage = new LoginPage(); const errorPage = new ErrorPage(); - const adminUserModel = new AcsUserModel({ - 'id': browser.params.testConfig.adf.adminUser, - 'password': browser.params.testConfig.adf.adminPassword - }); - const userA = new AcsUserModel(); - const userB = new AcsUserModel(); + const userA = new UserModel(); + const userB = new UserModel(); const errorMessages = { username: 'Your username needs to be at least 2 characters.', @@ -50,33 +51,32 @@ describe('Login component', () => { const invalidUsername = 'invaliduser'; const invalidPassword = 'invalidpassword'; + const apiService = new ApiService(); + const usersActions = new UsersActions(apiService); + beforeAll(async () => { - this.alfrescoJsApi = new AlfrescoApi({ - provider: 'ALL', - hostEcm: browser.params.testConfig.adf_acs.host, - hostBpm: browser.params.testConfig.adf_aps.host - }); + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); - await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); - - await this.alfrescoJsApi.core.peopleApi.addPerson(userA); - await this.alfrescoJsApi.core.peopleApi.addPerson(userB); + await usersActions.createUser(userA); + await usersActions.createUser(userB); }); it('[C276746] Should display the right information in user-info when a different users logs in', async () => { - await loginPage.loginToContentServicesUsingUserModel(userA); + await LocalStorageUtil.setStorageItem('providers', 'ECM'); + + await loginPage.login(userA.email, userA.password); 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); + await loginPage.login(userB.email, userB.password); 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); + await loginPage.login(userA.email, userA.password); 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.'); @@ -120,7 +120,7 @@ describe('Login component', () => { it('[C260045] Should enable login button after entering a valid username and a password', async () => { await loginPage.goToLoginPage(); - await loginPage.enterUsername(adminUserModel.id); + await loginPage.enterUsername(browser.params.testConfig.admin.email); await expect(await loginPage.getSignInButtonIsEnabled()).toBe(false); await loginPage.enterPassword('a'); await expect(await loginPage.getSignInButtonIsEnabled()).toBe(true); @@ -165,11 +165,11 @@ describe('Login component', () => { }); it('[C260049] Should be possible to login to Process Services with Content Services disabled', async () => { + await LocalStorageUtil.setStorageItem('providers', 'BPM'); + await loginPage.goToLoginPage(); await expect(await loginPage.getSignInButtonIsEnabled()).toBe(false); - await loginPage.clickSettingsIcon(); - await settingsPage.setProviderBpm(); - await loginPage.login(adminUserModel.id, adminUserModel.password); + await loginPage.login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); await navigationBarPage.navigateToProcessServicesPage(); await processServicesPage.checkApsContainer(); await navigationBarPage.clickContentServicesButton(); @@ -177,23 +177,21 @@ describe('Login component', () => { }); it('[C260050] Should be possible to login to Content Services with Process Services disabled', async () => { + await LocalStorageUtil.setStorageItem('providers', 'ECM'); + 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 loginPage.login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); await navigationBarPage.clickContentServicesButton(); await contentServicesPage.checkAcsContainer(); }); it('[C260051] Should be able to login to both Content Services and Process Services', async () => { + await LocalStorageUtil.setStorageItem('providers', 'ALL'); + 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 loginPage.login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); await navigationBarPage.navigateToProcessServicesPage(); await processServicesPage.checkApsContainer(); await navigationBarPage.clickContentServicesButton(); @@ -203,30 +201,28 @@ describe('Login component', () => { }); it('[C277754] Should the user be redirect to the login page when the Content Service session expire', async () => { + await LocalStorageUtil.setStorageItem('providers', 'ECM'); + await loginPage.goToLoginPage(); - await loginPage.clickSettingsIcon(); - await settingsPage.setProviderEcmBpm(); - await loginPage.login(adminUserModel.id, adminUserModel.password); + await loginPage.login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); await browser.executeScript('window.localStorage.removeItem("ADF_ticket-ECM");'); await BrowserActions.getUrl(browser.params.testConfig.adf.url + '/files'); await loginPage.waitForElements(); + + await LocalStorageUtil.setStorageItem('providers', 'ALL'); }); 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 loginPage.login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); await processServicesPage.checkApsContainer(); }); 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 loginPage.login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); await browser.executeScript('window.localStorage.removeItem("ADF_ticket-BPM");'); await BrowserActions.getUrl(browser.params.testConfig.adf.url + '/activiti'); await loginPage.waitForElements(); @@ -234,11 +230,9 @@ describe('Login component', () => { 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); + await loginPage.login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); - await Util.openNewTabInBrowser(); + await browser.executeScript("window.open('about: blank', '_blank');"); const handles = await browser.getAllWindowHandles(); await browser.switchTo().window(handles[1]); @@ -250,16 +244,13 @@ describe('Login component', () => { 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', async () => { - await BrowserActions.getUrl(browser.params.testConfig.adf.url); - await loginPage.waitForElements(); + await loginPage.goToLoginPage(); await expect(await loginPage.getSignInButtonIsEnabled()).toBe(false); await loginPage.enterUsername(invalidUsername); await expect(await loginPage.getSignInButtonIsEnabled()).toBe(false); @@ -267,6 +258,6 @@ describe('Login component', () => { 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); + await loginPage.login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); }); }); diff --git a/e2e/core/login/login-sso/login-sso.e2e.ts b/e2e/core/login/login-sso/login-sso.e2e.ts index 107eeb4dc3..ead2de2b13 100644 --- a/e2e/core/login/login-sso/login-sso.e2e.ts +++ b/e2e/core/login/login-sso/login-sso.e2e.ts @@ -15,9 +15,10 @@ * limitations under the License. */ -import { LoginSSOPage, SettingsPage, LoginPage, BrowserVisibility } from '@alfresco/adf-testing'; +import { LoginSSOPage, SettingsPage, BrowserVisibility } from '@alfresco/adf-testing'; import { browser } from 'protractor'; import { NavigationBarPage } from '../../../pages/adf/navigation-bar.page'; +import { LoginPage } from '../../../pages/adf/demo-shell/login.page'; describe('Login component - SSO', () => { @@ -26,11 +27,7 @@ describe('Login component - SSO', () => { const loginPage = new LoginPage(); const navigationBarPage = new NavigationBarPage(); - const silentLogin = false; - let implicitFlow; - describe('Login component - SSO implicit Flow', () => { - afterEach(async () => { await navigationBarPage.clickLogoutButton(); await browser.executeScript('window.sessionStorage.clear();'); @@ -39,35 +36,33 @@ describe('Login component - SSO', () => { }); 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 settingsPage.setProviderEcmSso(browser.params.testConfig.appConfig.ecmHost, + browser.params.testConfig.appConfig.oauth2.host, + browser.params.testConfig.appConfig.identityHost, false, true, browser.params.testConfig.appConfig.oauth2.clientId); await loginSSOPage.clickOnSSOButton(); - await loginSSOPage.loginSSOIdentityService(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); + await loginSSOPage.loginSSOIdentityService(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); }); 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 settingsPage.setProviderEcmSso(browser.params.testConfig.appConfig.ecmHost, + browser.params.testConfig.appConfig.oauth2.host, + browser.params.testConfig.appConfig.identityHost, true, true, browser.params.testConfig.appConfig.oauth2.clientId); await browser.refresh(); - await loginSSOPage.loginSSOIdentityService(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); + await loginSSOPage.loginSSOIdentityService(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); }); }); describe('Login component - SSO Grant type password (implicit flow false)', () => { - it('[C299158] Should be possible to login with SSO, with grant type password (Implicit Flow false)', async () => { - implicitFlow = false; - 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); + await settingsPage.setProviderEcmSso(browser.params.testConfig.appConfig.ecmHost, + browser.params.testConfig.appConfig.oauth2.host, + browser.params.testConfig.appConfig.identityHost, false, false, browser.params.testConfig.appConfig.oauth2.clientId); await loginPage.waitForElements(); - await loginPage.enterUsername(browser.params.testConfig.adf.adminEmail); - await loginPage.enterPassword(browser.params.testConfig.adf.adminPassword); + await loginPage.enterUsername(browser.params.testConfig.admin.email); + await loginPage.enterPassword(browser.params.testConfig.admin.password); await loginPage.clickSignInButton(); await BrowserVisibility.waitUntilElementIsVisible(loginPage.sidenavLayout); diff --git a/e2e/core/login/login-sso/logout-sso.e2e.ts b/e2e/core/login/login-sso/logout-sso.e2e.ts index cc8f32bdef..b8b81091d7 100644 --- a/e2e/core/login/login-sso/logout-sso.e2e.ts +++ b/e2e/core/login/login-sso/logout-sso.e2e.ts @@ -27,10 +27,10 @@ describe('Logout component - SSO', () => { 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'); + browser.params.testConfig.appConfig.oauth2.host, + browser.params.testConfig.appConfig.identityHost, false, true, browser.params.testConfig.appConfig.oauth2.clientId, '/login'); await loginSSOPage.clickOnSSOButton(); - await loginSSOPage.loginSSOIdentityService(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); + await loginSSOPage.loginSSOIdentityService(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); await navigationBarPage.clickLogoutButton(); await browser.sleep(2000); diff --git a/e2e/core/login/redirection.e2e.ts b/e2e/core/login/redirection.e2e.ts index 7e90990151..5918ef47a3 100644 --- a/e2e/core/login/redirection.e2e.ts +++ b/e2e/core/login/redirection.e2e.ts @@ -17,13 +17,13 @@ import { browser } from 'protractor'; -import { LoginPage, SettingsPage, UploadActions, StringUtil } from '@alfresco/adf-testing'; +import { SettingsPage, UploadActions, StringUtil, ApiService, LocalStorageUtil } from '@alfresco/adf-testing'; import { ContentServicesPage } from '../../pages/adf/content-services.page'; import { ProcessServicesPage } from '../../pages/adf/process-services/process-services.page'; import { NavigationBarPage } from '../../pages/adf/navigation-bar.page'; -import { AcsUserModel } from '../../models/ACS/acs-user.model'; -import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; import { LogoutPage } from '../../pages/adf/demo-shell/logout.page'; +import { LoginPage } from '../../pages/adf/demo-shell/login.page'; +import { UsersActions } from '../../actions/users.actions'; describe('Login component - Redirect', () => { @@ -32,39 +32,31 @@ describe('Login component - Redirect', () => { const navigationBarPage = new NavigationBarPage(); const contentServicesPage = new ContentServicesPage(); const loginPage = new LoginPage(); - const user = new AcsUserModel(); - const userFolderOwner = new AcsUserModel(); - const adminUserModel = new AcsUserModel({ - 'id': browser.params.testConfig.adf.adminUser, - 'password': browser.params.testConfig.adf.adminPassword - }); - let uploadedFolder; - - this.alfrescoJsApi = new AlfrescoApi({ - provider: 'ECM', - hostEcm: browser.params.testConfig.adf_acs.host, - hostBpm: browser.params.testConfig.adf_aps.host - }); - const uploadActions = new UploadActions(this.alfrescoJsApi); const logoutPage = new LogoutPage(); + let user; + let uploadedFolder; + + const apiService = new ApiService(); + const uploadActions = new UploadActions(apiService); + const usersActions = new UsersActions(apiService); + beforeAll(async () => { + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); - await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); - - await this.alfrescoJsApi.core.peopleApi.addPerson(user); - await this.alfrescoJsApi.core.peopleApi.addPerson(userFolderOwner); - - await this.alfrescoJsApi.login(user.id, user.password); + user = await usersActions.createUser(); + await apiService.getInstance().login(user.email, user.password); uploadedFolder = await uploadActions.createFolder('protecteFolder' + StringUtil.generateRandomString(), '-my-'); - }); + }); it('[C213838] Should after login in CS be redirect to Login page when try to access to PS', async () => { + await LocalStorageUtil.setStorageItem('providers', 'ECM'); + await loginPage.goToLoginPage(); await loginPage.clickSettingsIcon(); await settingsPage.setProviderEcm(); - await loginPage.login(user.id, user.password); + await loginPage.login(user.email, user.password); await navigationBarPage.clickContentServicesButton(); await contentServicesPage.checkAcsContainer(); @@ -75,6 +67,8 @@ describe('Login component - Redirect', () => { }); it('[C260085] Should after login in PS be redirect to Login page when try to access to CS', async () => { + await LocalStorageUtil.setStorageItem('providers', 'BPM'); + await loginPage.goToLoginPage(); await loginPage.clickSettingsIcon(); await settingsPage.setProviderBpm(); @@ -82,7 +76,7 @@ describe('Login component - Redirect', () => { await loginPage.enableSuccessRouteSwitch(); await loginPage.enterSuccessRoute('activiti'); - await loginPage.login(adminUserModel.id, adminUserModel.password); + await loginPage.login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); await navigationBarPage.navigateToProcessServicesPage(); await processServicesPage.checkApsContainer(); @@ -93,12 +87,14 @@ describe('Login component - Redirect', () => { }); it('[C260081] Should after login in BOTH not be redirect to Login page when try to access to CS or PS', async () => { + await LocalStorageUtil.setStorageItem('providers', 'ALL'); + await loginPage.goToLoginPage(); await loginPage.clickSettingsIcon(); await settingsPage.setProviderEcmBpm(); - await loginPage.login(adminUserModel.id, adminUserModel.password); + await loginPage.login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); await navigationBarPage.navigateToProcessServicesPage(); await processServicesPage.checkApsContainer(); @@ -111,7 +107,7 @@ describe('Login component - Redirect', () => { await loginPage.goToLoginPage(); await loginPage.clickSettingsIcon(); await settingsPage.setProviderEcm(); - await loginPage.login(user.id, user.password); + await loginPage.login(user.email, user.password); await navigationBarPage.openContentServicesFolder(uploadedFolder.entry.id); @@ -128,7 +124,7 @@ describe('Login component - Redirect', () => { await loginPage.waitForElements(); - await loginPage.login(user.id, user.password); + await loginPage.login(user.email, user.password); actualUrl = await browser.getCurrentUrl(); await expect(actualUrl).toEqual(browser.params.testConfig.adf.url + '/files/' + uploadedFolder.entry.id); @@ -138,7 +134,7 @@ describe('Login component - Redirect', () => { await loginPage.goToLoginPage(); await loginPage.clickSettingsIcon(); await settingsPage.setProviderEcm(); - await loginPage.login(user.id, user.password); + await loginPage.login(user.email, user.password); await navigationBarPage.openContentServicesFolder(uploadedFolder.entry.id); @@ -156,7 +152,7 @@ describe('Login component - Redirect', () => { await browser.refresh(); await loginPage.waitForElements(); - await loginPage.enterUsername(user.id); + await loginPage.enterUsername(user.email); await loginPage.enterPassword(user.password); await loginPage.clickSignInButton(); diff --git a/e2e/core/login/remember-me.e2e.ts b/e2e/core/login/remember-me.e2e.ts index 53bb57fdb1..ac9ab5ba21 100644 --- a/e2e/core/login/remember-me.e2e.ts +++ b/e2e/core/login/remember-me.e2e.ts @@ -15,7 +15,8 @@ * limitations under the License. */ -import { LoginPage, SettingsPage } from '@alfresco/adf-testing'; +import { SettingsPage } from '@alfresco/adf-testing'; +import { LoginPage } from '../../pages/adf/demo-shell/login.page'; describe('Login component - Remember Me', () => { diff --git a/e2e/content-services/notifications-component.e2e.ts b/e2e/core/notifications-component.e2e.ts similarity index 85% rename from e2e/content-services/notifications-component.e2e.ts rename to e2e/core/notifications-component.e2e.ts index f6ae716c93..732c02b72d 100644 --- a/e2e/content-services/notifications-component.e2e.ts +++ b/e2e/core/notifications-component.e2e.ts @@ -15,49 +15,45 @@ * limitations under the License. */ -import { LoginPage } from '@alfresco/adf-testing'; -import { AcsUserModel } from '../models/ACS/acs-user.model'; -import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; +import { ApiService, LoginSSOPage, UserModel } from '@alfresco/adf-testing'; import { NotificationDemoPage } from '../pages/adf/demo-shell/notification.page'; import { browser } from 'protractor'; import { NavigationBarPage } from '../pages/adf/navigation-bar.page'; +import { UsersActions } from '../actions/users.actions'; describe('Notifications Component', () => { - const loginPage = new LoginPage(); + const loginPage = new LoginSSOPage(); const notificationPage = new NotificationDemoPage(); const navigationBarPage = new NavigationBarPage(); + const apiService = new ApiService(); + const usersActions = new UsersActions(apiService); - const acsUser = new AcsUserModel(); + let acsUser: UserModel; beforeAll(async () => { + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); - this.alfrescoJsApi = new AlfrescoApi({ - provider: 'ECM', - hostEcm: browser.params.testConfig.adf_acs.host - }); + acsUser = await usersActions.createUser(); - await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); + await apiService.getInstance().login(acsUser.email, acsUser.password); - await this.alfrescoJsApi.core.peopleApi.addPerson(acsUser); - - await this.alfrescoJsApi.login(acsUser.id, acsUser.password); - - await loginPage.loginToContentServicesUsingUserModel(acsUser); + await loginPage.login(acsUser.email, acsUser.password); await notificationPage.goToNotificationsPage(); - - await notificationPage.enterDurationField(3000); }); afterAll(async () => { await navigationBarPage.clickLogoutButton(); }); + beforeEach(async () => { + await notificationPage.enterDurationField(3000); + }); + afterEach(async () => { await notificationPage.waitForSnackBarToClose(); await browser.executeScript(`document.querySelector('button[data-automation-id="notification-custom-dismiss-button"]').click();`); - await notificationPage.enterDurationField(3000); }); it('[C279979] Should not show notification when the message is empty and button is clicked', async () => { @@ -88,15 +84,6 @@ describe('Notifications Component', () => { await expect(await notificationPage.isNotificationSnackBarDisplayed()).toEqual(true); }); - it('[C279987] Should show custom notification during a limited time when a duration is added', async () => { - await notificationPage.enterMessageField('test'); - await notificationPage.enterDurationField(1000); - await notificationPage.clickNotificationButton(); - await expect(await notificationPage.isNotificationSnackBarDisplayed()).toEqual(true); - await browser.sleep(2000); - await expect(await notificationPage.isNotificationSnackBarDisplayed()).toEqual(false); - }); - it('[C280000] Should show notification with action when the message is not empty and custom button is clicked', async () => { await notificationPage.enterMessageField('test'); await notificationPage.clickActionToggle(); @@ -110,6 +97,15 @@ describe('Notifications Component', () => { await notificationPage.clickActionToggle(); }); + it('[C279987] Should show custom notification during a limited time when a duration is added', async () => { + await notificationPage.enterMessageField('test'); + await notificationPage.enterDurationField(1000); + await notificationPage.clickNotificationButton(); + await expect(await notificationPage.isNotificationSnackBarDisplayed()).toEqual(true); + await browser.sleep(2000); + await expect(await notificationPage.isNotificationSnackBarDisplayed()).toEqual(false); + }); + it('[C280001] Should meet configuration when a custom notification is set', async () => { await notificationPage.enterMessageField('test'); await notificationPage.enterDurationField(1000); diff --git a/e2e/core/pagination-empty-current-page.e2e.ts b/e2e/core/pagination-empty-current-page.e2e.ts index d6dfc7ccca..5af5a17c58 100644 --- a/e2e/core/pagination-empty-current-page.e2e.ts +++ b/e2e/core/pagination-empty-current-page.e2e.ts @@ -15,23 +15,33 @@ * limitations under the License. */ -import { LoginPage, PaginationPage, UploadActions, ViewerPage } from '@alfresco/adf-testing'; -import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; +import { + ArrayUtil, + StringUtil, + LoginSSOPage, + PaginationPage, + UploadActions, + ViewerPage, + ApiService, + UserModel +} from '@alfresco/adf-testing'; import { browser } from 'protractor'; -import { AcsUserModel } from '../models/ACS/acs-user.model'; import { FileModel } from '../models/ACS/file.model'; import { FolderModel } from '../models/ACS/folder.model'; import { ContentServicesPage } from '../pages/adf/content-services.page'; -import { Util } from '../util/util'; +import { UsersActions } from '../actions/users.actions'; describe('Pagination - returns to previous page when current is empty', () => { - const loginPage = new LoginPage(); + const loginPage = new LoginSSOPage(); const contentServicesPage = new ContentServicesPage(); const paginationPage = new PaginationPage(); - const viewerPage = new ViewerPage(); - const acsUser = new AcsUserModel(); + const viewerPage = new ViewerPage(); + const apiService = new ApiService(); + const usersActions = new UsersActions(apiService); + + const acsUser = new UserModel(); const folderModel = new FolderModel({ 'name': 'folderOne' }); const parentFolderModel = new FolderModel({ 'name': 'parentFolder' }); @@ -59,19 +69,15 @@ describe('Pagination - returns to previous page when current is empty', () => { }); beforeAll(async () => { - this.alfrescoJsApi = new AlfrescoApi({ - provider: 'ECM', - hostEcm: browser.params.testConfig.adf_acs.host - }); - const uploadActions = new UploadActions(this.alfrescoJsApi); + const uploadActions = new UploadActions(apiService); - await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); - await this.alfrescoJsApi.core.peopleApi.addPerson(acsUser); + await usersActions.createUser(acsUser); - fileNames = Util.generateSequenceFiles(1, nrOfFiles, files.base, files.extension); + fileNames = StringUtil.generateFilesNames(1, nrOfFiles, files.base, files.extension); - await this.alfrescoJsApi.login(acsUser.id, acsUser.password); + await apiService.getInstance().login(acsUser.email, acsUser.password); const folderUploadedModel = await uploadActions.createFolder(folderModel.name, '-my-'); @@ -87,7 +93,7 @@ describe('Pagination - returns to previous page when current is empty', () => { pngFileUploaded = await uploadActions.uploadFile(pngFileInfo.location, pngFileInfo.name, lastFolderResponse.entry.id); - await loginPage.loginToContentServicesUsingUserModel(acsUser); + await loginPage.login(acsUser.email, acsUser.password); await contentServicesPage.goToDocumentList(); }); @@ -102,7 +108,7 @@ describe('Pagination - returns to previous page when current is empty', () => { 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 expect(ArrayUtil.arrayContainsArray(list, fileNames.slice(0, 5))).toEqual(true); await paginationPage.clickOnNextPage(); @@ -111,7 +117,7 @@ describe('Pagination - returns to previous page when current is empty', () => { await expect(await paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.five); list = await contentServicesPage.getAllRowsNameColumn(); - await expect(Util.arrayContainsArray(list, fileNames.slice(5, 6))).toEqual(true); + await expect(ArrayUtil.arrayContainsArray(list, fileNames.slice(5, 6))).toEqual(true); await contentServicesPage.deleteContent(lastFile); await contentServicesPage.checkContentIsNotDisplayed(lastFile); @@ -120,7 +126,7 @@ describe('Pagination - returns to previous page when current is empty', () => { await expect(await contentServicesPage.numberOfResultsDisplayed()).toBe(itemsPerPage.fiveValue); list = await contentServicesPage.getAllRowsNameColumn(); - await expect(Util.arrayContainsArray(list, fileNames.slice(0, 5))).toEqual(true); + await expect(ArrayUtil.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 () => { diff --git a/e2e/core/settings-component.e2e.ts b/e2e/core/settings-component.e2e.ts index a64731ae47..a9f84c367f 100644 --- a/e2e/core/settings-component.e2e.ts +++ b/e2e/core/settings-component.e2e.ts @@ -15,12 +15,12 @@ * limitations under the License. */ -import { BrowserActions, LoginPage, SettingsPage } from '@alfresco/adf-testing'; +import { BrowserActions, SettingsPage } from '@alfresco/adf-testing'; import { browser, protractor } from 'protractor'; -import { AcsUserModel } from '../models/ACS/acs-user.model'; import { ContentServicesPage } from '../pages/adf/content-services.page'; import { NavigationBarPage } from '../pages/adf/navigation-bar.page'; import { ProcessServicesPage } from '../pages/adf/process-services/process-services.page'; +import { LoginPage } from '../pages/adf/demo-shell/login.page'; describe('Settings component', () => { @@ -32,11 +32,6 @@ describe('Settings component', () => { const loginError = 'Request has been terminated ' + 'Possible causes: the network is offline, Origin is not allowed by Access-Control-Allow-Origin, the page is being unloaded, etc.'; - const adminUserModel = new AcsUserModel({ - 'id': browser.params.testConfig.adf.adminUser, - 'password': browser.params.testConfig.adf.adminPassword - }); - describe('Should be able to change Urls in the Settings', () => { beforeEach(async () => { await settingsPage.goToSettingsPage(); @@ -54,8 +49,8 @@ describe('Settings component', () => { 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'); + await expect(await settingsPage.getBpmHostUrl()).toEqual(browser.params.testConfig.appConfig.bpmHost, 'The BPM Settings changes are not saved'); + await expect(await settingsPage.getEcmHostUrl()).toEqual(browser.params.testConfig.appConfig.ecmHost, 'The ECM Settings changes are not saved'); }); it('[C291949] Should have field validation for Content Services Url', async () => { @@ -79,8 +74,8 @@ describe('Settings component', () => { await settingsPage.setContentServicesURL('http://localhost:7070'); await settingsPage.clickApply(); await loginPage.waitForElements(); - await loginPage.enterUsername(adminUserModel.id); - await loginPage.enterPassword(adminUserModel.password); + await loginPage.enterUsername(browser.params.testConfig.admin.email); + await loginPage.enterPassword(browser.params.testConfig.admin.password); await loginPage.clickSignInButton(); await expect(await loginPage.getLoginError()).toMatch(loginError); }); @@ -90,8 +85,8 @@ describe('Settings component', () => { await settingsPage.setProcessServicesURL('http://localhost:7070'); await settingsPage.clickApply(); await loginPage.waitForElements(); - await loginPage.enterUsername(adminUserModel.id); - await loginPage.enterPassword(adminUserModel.password); + await loginPage.enterUsername(browser.params.testConfig.admin.email); + await loginPage.enterPassword(browser.params.testConfig.admin.password); await loginPage.clickSignInButton(); await expect(await loginPage.getLoginError()).toMatch(loginError); }); @@ -101,8 +96,8 @@ describe('Settings component', () => { beforeAll(async () => { await settingsPage.goToSettingsPage(); await settingsPage.setProvider('ALL'); - await settingsPage.setContentServicesURL(browser.params.testConfig.adf_acs.host); - await settingsPage.setProcessServicesURL(browser.params.testConfig.adf_aps.host); + await settingsPage.setContentServicesURL(browser.params.testConfig.appConfig.ecmHost); + await settingsPage.setProcessServicesURL(browser.params.testConfig.appConfig.bpmHost); await settingsPage.clickApply(); }); @@ -116,8 +111,8 @@ describe('Settings component', () => { 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.getEcmHostUrl()).toBe(browser.params.testConfig.appConfig.ecmHost); + await expect(await settingsPage.getBpmHostUrl()).toBe(browser.params.testConfig.appConfig.bpmHost); await expect(await settingsPage.getBackButton().isEnabled()).toBe(true); await expect(await settingsPage.getApplyButton().isEnabled()).toBe(true); @@ -131,8 +126,8 @@ describe('Settings component', () => { await settingsPage.checkProviderDropdownIsDisplayed(); await settingsPage.setProviderBpm(); await loginPage.waitForElements(); - await loginPage.enterUsername(adminUserModel.id); - await loginPage.enterPassword(adminUserModel.password); + await loginPage.enterUsername(browser.params.testConfig.admin.email); + await loginPage.enterPassword(browser.params.testConfig.admin.password); await loginPage.clickSignInButton(); await navigationBarPage.navigateToProcessServicesPage(); await processServicesPage.checkApsContainer(); @@ -142,7 +137,7 @@ describe('Settings component', () => { await settingsPage.checkBasicAuthRadioIsSelected(); await settingsPage.checkSsoRadioIsNotSelected(); - await expect(await settingsPage.getBpmHostUrl()).toBe(browser.params.testConfig.adf_aps.host); + await expect(await settingsPage.getBpmHostUrl()).toBe(browser.params.testConfig.appConfig.bpmHost); await expect(await settingsPage.getBackButton().isEnabled()).toBe(true); await expect(await settingsPage.getApplyButton().isEnabled()).toBe(true); @@ -161,8 +156,8 @@ describe('Settings component', () => { await settingsPage.checkProviderDropdownIsDisplayed(); await settingsPage.setProviderEcm(); await loginPage.waitForElements(); - await loginPage.enterUsername(adminUserModel.id); - await loginPage.enterPassword(adminUserModel.password); + await loginPage.enterUsername(browser.params.testConfig.admin.email); + await loginPage.enterPassword(browser.params.testConfig.admin.password); await loginPage.clickSignInButton(); await navigationBarPage.clickContentServicesButton(); await contentServicesPage.checkAcsContainer(); @@ -171,7 +166,7 @@ describe('Settings component', () => { await settingsPage.checkBasicAuthRadioIsSelected(); await settingsPage.checkSsoRadioIsNotSelected(); - await expect(await settingsPage.getEcmHostUrl()).toBe(browser.params.testConfig.adf_acs.host); + await expect(await settingsPage.getEcmHostUrl()).toBe(browser.params.testConfig.appConfig.ecmHost); await expect(await settingsPage.getBackButton().isEnabled()).toBe(true); await expect(await settingsPage.getApplyButton().isEnabled()).toBe(true); await settingsPage.clickBackButton(); @@ -188,8 +183,8 @@ describe('Settings component', () => { await settingsPage.checkProviderDropdownIsDisplayed(); await settingsPage.setProviderEcmBpm(); await loginPage.waitForElements(); - await loginPage.enterUsername(adminUserModel.id); - await loginPage.enterPassword(adminUserModel.password); + await loginPage.enterUsername(browser.params.testConfig.admin.email); + await loginPage.enterPassword(browser.params.testConfig.admin.password); await loginPage.clickSignInButton(); await navigationBarPage.clickContentServicesButton(); await contentServicesPage.checkAcsContainer(); @@ -200,8 +195,8 @@ describe('Settings component', () => { 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.getEcmHostUrl()).toBe(browser.params.testConfig.appConfig.ecmHost); + await expect(await settingsPage.getBpmHostUrl()).toBe(browser.params.testConfig.appConfig.bpmHost); await expect(await settingsPage.getBackButton().isEnabled()).toBe(true); await expect(await settingsPage.getApplyButton().isEnabled()).toBe(true); diff --git a/e2e/core/user-info-component-cloud.e2e.ts b/e2e/core/user-info-component-cloud.e2e.ts index b483311340..bf1d4770cb 100644 --- a/e2e/core/user-info-component-cloud.e2e.ts +++ b/e2e/core/user-info-component-cloud.e2e.ts @@ -15,38 +15,38 @@ * limitations under the License. */ -import { ApiService, IdentityService, LoginSSOPage, SettingsPage, UserInfoPage } from '@alfresco/adf-testing'; +import { + ApiService, + LoginSSOPage, + SettingsPage, + UserInfoPage +} from '@alfresco/adf-testing'; import { browser } from 'protractor'; +import { UsersActions } from '../actions/users.actions'; describe('User Info - SSO', () => { const settingsPage = new SettingsPage(); const loginSSOPage = new LoginSSOPage(); const userInfoPage = new UserInfoPage(); - let silentLogin, identityUser; - let identityService: IdentityService; + + const apiService = new ApiService({ authType: 'OAUTH', provider: 'ECM' }); + const usersActions = new UsersActions(apiService); + + let identityUser; 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); + await apiService.login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); - identityService = new IdentityService(apiService); - identityUser = await identityService.createIdentityUser(); + identityUser = await usersActions.createUser(); - silentLogin = false; 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); + browser.params.testConfig.appConfig.oauth2.host, + browser.params.testConfig.appConfig.identityHost, false, true, browser.params.testConfig.appConfig.oauth2.clientId); await loginSSOPage.clickOnSSOButton(); await loginSSOPage.loginSSOIdentityService(identityUser.email, identityUser.password); - }); - - afterAll(async () => { - if (identityService) { - await identityService.deleteIdentityUser(identityUser.idIdentityService); - } }); it('[C290066] Should display UserInfo when login using SSO', async () => { diff --git a/e2e/core/user-info-component.e2e.ts b/e2e/core/user-info-component.e2e.ts index 0f3d87b80d..0aa8c2728e 100644 --- a/e2e/core/user-info-component.e2e.ts +++ b/e2e/core/user-info-component.e2e.ts @@ -15,22 +15,27 @@ * limitations under the License. */ -import { LoginPage, UserInfoPage } from '@alfresco/adf-testing'; -import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; +import { PeopleApi } from '@alfresco/js-api'; +import { ApiService, LocalStorageUtil, LoginSSOPage, UserInfoPage } from '@alfresco/adf-testing'; import { browser } from 'protractor'; import { UsersActions } from '../actions/users.actions'; -import { AcsUserModel } from '../models/ACS/acs-user.model'; import { FileModel } from '../models/ACS/file.model'; import { NavigationBarPage } from '../pages/adf/navigation-bar.page'; -import PeopleAPI = require('../restAPI/ACS/PeopleAPI'); +import path = require('path'); +import fs = require('fs'); describe('User Info component', () => { - const loginPage = new LoginPage(); + const loginPage = new LoginSSOPage(); const userInfoPage = new UserInfoPage(); - let processUserModel, contentUserModel; const navigationBarPage = new NavigationBarPage(); + const apiService = new ApiService(); + const usersActions = new UsersActions(apiService); + const peopleApi: PeopleApi = new PeopleApi(apiService.getInstance()); + + let user; + const acsAvatarFileModel = new FileModel({ 'name': browser.params.resources.Files.PROFILE_IMAGES.ECM.file_name, 'location': browser.params.resources.Files.PROFILE_IMAGES.ECM.file_location @@ -41,43 +46,25 @@ describe('User Info component', () => { }); beforeAll(async () => { - const users = new UsersActions(); + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); - this.alfrescoJsApi = new AlfrescoApi({ - provider: 'ALL', - hostEcm: browser.params.testConfig.adf_acs.host, - hostBpm: browser.params.testConfig.adf_aps.host - }); - - await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); - - processUserModel = await users.createTenantAndUser(this.alfrescoJsApi); - - contentUserModel = new AcsUserModel({ - 'id': processUserModel.email, - 'password': processUserModel.password, - 'firstName': processUserModel.firstName, - 'lastName': processUserModel.lastName, - 'email': processUserModel.email - }); - - await this.alfrescoJsApi.core.peopleApi.addPerson(contentUserModel); - }); + user = await usersActions.createUser(); + }); afterAll(async () => { await navigationBarPage.clickLogoutButton(); }); it('[C260111] Should display UserInfo when Process Services and Content Services are enabled', async () => { - await loginPage.loginToAllUsingUserModel(contentUserModel); + await loginPage.login(user.email, user.password); await userInfoPage.clickUserProfile(); await userInfoPage.dialogIsDisplayed(); await userInfoPage.checkContentServicesTabIsSelected(); - 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.getContentHeaderTitle()).toEqual(user.firstName + ' ' + user.lastName); + await expect(await userInfoPage.getContentTitle()).toEqual(user.firstName + ' ' + user.lastName); + await expect(await userInfoPage.getContentEmail()).toEqual(user.email); await expect(await userInfoPage.getContentJobTitle()).toEqual('N/A'); await userInfoPage.checkInitialImage(); @@ -89,22 +76,22 @@ describe('User Info component', () => { await browser.sleep(1000); - 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); + await expect(await userInfoPage.getProcessHeaderTitle()).toEqual(user.firstName + ' ' + user.lastName); + await expect(await userInfoPage.getProcessTitle()).toEqual(user.firstName + ' ' + user.lastName); + await expect(await userInfoPage.getProcessEmail()).toEqual(user.email); await userInfoPage.closeUserProfile(); }); it('[C260113] Should display UserInfo when Content Services is enabled and Process Services is disabled', async () => { - await loginPage.loginToContentServicesUsingUserModel(contentUserModel); + await loginPage.login(user.email, user.password); await userInfoPage.clickUserProfile(); await userInfoPage.dialogIsDisplayed(); - 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.getContentHeaderTitle()).toEqual(user.firstName + ' ' + user.lastName); + await expect(await userInfoPage.getContentTitle()).toEqual(user.firstName + ' ' + user.lastName); + await expect(await userInfoPage.getContentEmail()).toEqual(user.email); await expect(await userInfoPage.getContentJobTitle()).toEqual('N/A'); await userInfoPage.checkInitialImage(); @@ -115,15 +102,17 @@ describe('User Info component', () => { }); it('[C260115] Should display UserInfo when Process Services is enabled and Content Services is disabled', async () => { - await loginPage.loginToProcessServicesUsingUserModel(contentUserModel); + await LocalStorageUtil.setStorageItem('providers', 'BPM'); + + await loginPage.login(user.email, user.password); await userInfoPage.clickUserProfile(); await userInfoPage.dialogIsDisplayed(); - 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); + await expect(await userInfoPage.getProcessHeaderTitle()).toEqual(user.firstName + ' ' + user.lastName); + await expect(await userInfoPage.getProcessTitle()).toEqual(user.firstName + ' ' + user.lastName); + await expect(await userInfoPage.getProcessEmail()).toEqual(user.email); await userInfoPage.checkInitialImage(); await userInfoPage.APSProfileImageNotDisplayed(); @@ -132,11 +121,11 @@ describe('User Info component', () => { }); it('[C260117] Should display UserInfo with profile image uploaded in ACS', async () => { - await PeopleAPI.updateAvatarViaAPI(contentUserModel, acsAvatarFileModel, '-me-'); - await PeopleAPI.getAvatarViaAPI(4, contentUserModel, '-me-', async() => { - }); + await LocalStorageUtil.setStorageItem('providers', 'ECM'); - await loginPage.loginToContentServicesUsingUserModel(contentUserModel); + await updateAvatarACS(); + + await loginPage.login(user.email, user.password); await userInfoPage.clickUserProfile(); @@ -146,11 +135,13 @@ describe('User Info component', () => { }); it('[C260118] Should display UserInfo with profile image uploaded in APS', async () => { - const users = new UsersActions(); - await this.alfrescoJsApi.login(contentUserModel.email, contentUserModel.password); - await users.changeProfilePictureAps(this.alfrescoJsApi, apsAvatarFileModel.getLocation()); + await LocalStorageUtil.setStorageItem('providers', 'BPM'); - await loginPage.loginToProcessServicesUsingUserModel(contentUserModel); + const users = new UsersActions(apiService); + await apiService.getInstance().login(user.email, user.password); + await users.changeProfilePictureAps(apsAvatarFileModel.getLocation()); + + await loginPage.login(user.email, user.password); await userInfoPage.clickUserProfile(); @@ -161,15 +152,23 @@ describe('User Info component', () => { }); it('[C260120] Should not display profile image in UserInfo when deleted in ACS', async () => { - await PeopleAPI.deleteAvatarViaAPI(contentUserModel, '-me-'); + await LocalStorageUtil.setStorageItem('providers', 'ECM'); - await loginPage.loginToContentServicesUsingUserModel(contentUserModel); + await peopleApi.deleteAvatarImage(user.email); + + await loginPage.login(user.email, user.password); await userInfoPage.clickUserProfile(); await userInfoPage.checkInitialImage(); - await userInfoPage.APSProfileImageNotDisplayed(); await userInfoPage.ACSProfileImageNotDisplayed(); await userInfoPage.closeUserProfile(); }); + + const updateAvatarACS = async function () { + await apiService.getInstance().login(user.email, user.password); + const absolutePath = path.resolve(path.join(browser.params.testConfig.main.rootPath, acsAvatarFileModel.getLocation())); + const file: any = fs.readFileSync(absolutePath); + await peopleApi.updateAvatarImage('-me-', file); + }; }); diff --git a/e2e/core/viewer/file-extensions/viewer-archive.component.e2e.ts b/e2e/core/viewer/file-extensions/viewer-archive.component.e2e.ts index dd59d31e99..a495626a73 100644 --- a/e2e/core/viewer/file-extensions/viewer-archive.component.e2e.ts +++ b/e2e/core/viewer/file-extensions/viewer-archive.component.e2e.ts @@ -16,28 +16,26 @@ */ import { browser } from 'protractor'; -import { LoginPage, UploadActions, StringUtil, ViewerPage } from '@alfresco/adf-testing'; +import { LoginSSOPage, UploadActions, StringUtil, ViewerPage, ApiService, UserModel } from '@alfresco/adf-testing'; import { ContentServicesPage } from '../../../pages/adf/content-services.page'; import CONSTANTS = require('../../../util/constants'); import { FolderModel } from '../../../models/ACS/folder.model'; -import { AcsUserModel } from '../../../models/ACS/acs-user.model'; -import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; import { NavigationBarPage } from '../../../pages/adf/navigation-bar.page'; +import { UsersActions } from '../../../actions/users.actions'; describe('Viewer', () => { const viewerPage = new ViewerPage(); - const loginPage = new LoginPage(); + const loginPage = new LoginSSOPage(); const contentServicesPage = new ContentServicesPage(); const navigationBarPage = new NavigationBarPage(); let site; - const acsUser = new AcsUserModel(); - this.alfrescoJsApi = new AlfrescoApi({ - provider: 'ECM', - hostEcm: browser.params.testConfig.adf_acs.host - }); - const uploadActions = new UploadActions(this.alfrescoJsApi); + const acsUser = new UserModel(); + const apiService = new ApiService(); + const usersActions = new UsersActions(apiService); + + const uploadActions = new UploadActions(apiService); const archiveFolderInfo = new FolderModel({ 'name': browser.params.resources.Files.ADF_DOCUMENTS.ARCHIVE_FOLDER.folder_name, @@ -45,21 +43,21 @@ describe('Viewer', () => { }); 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({ + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); + await usersActions.createUser(acsUser); + site = await apiService.getInstance().core.sitesApi.createSite({ title: StringUtil.generateRandomString(8), visibility: 'PUBLIC' }); - await this.alfrescoJsApi.core.sitesApi.addSiteMember(site.entry.id, { - id: acsUser.id, + await apiService.getInstance().core.sitesApi.addSiteMember(site.entry.id, { + id: acsUser.email, role: CONSTANTS.CS_USER_ROLES.MANAGER }); - await this.alfrescoJsApi.login(acsUser.id, acsUser.password); + await apiService.getInstance().login(acsUser.email, acsUser.password); }); afterAll(async () => { - await this.alfrescoJsApi.core.sitesApi.deleteSite(site.entry.id, { permanent: true }); + await apiService.getInstance().core.sitesApi.deleteSite(site.entry.id, { permanent: true }); await navigationBarPage.clickLogoutButton(); }); @@ -70,7 +68,7 @@ describe('Viewer', () => { beforeAll(async () => { archiveFolderUploaded = await uploadActions.createFolder(archiveFolderInfo.name, '-my-'); uploadedArchives = await uploadActions.uploadFolder(archiveFolderInfo.location, archiveFolderUploaded.entry.id); - await loginPage.loginToContentServicesUsingUserModel(acsUser); + await loginPage.login(acsUser.email, acsUser.password); await contentServicesPage.goToDocumentList(); }); diff --git a/e2e/core/viewer/file-extensions/viewer-component.e2e.ts b/e2e/core/viewer/file-extensions/viewer-component.e2e.ts index 15d65762b7..55d730e1a3 100644 --- a/e2e/core/viewer/file-extensions/viewer-component.e2e.ts +++ b/e2e/core/viewer/file-extensions/viewer-component.e2e.ts @@ -16,29 +16,27 @@ */ import { browser } from 'protractor'; -import { LoginPage, UploadActions, StringUtil, ViewerPage } from '@alfresco/adf-testing'; +import { LoginSSOPage, UploadActions, StringUtil, ViewerPage, ApiService, UserModel } from '@alfresco/adf-testing'; import { ContentServicesPage } from '../../../pages/adf/content-services.page'; import CONSTANTS = require('../../../util/constants'); import { FileModel } from '../../../models/ACS/file.model'; import { FolderModel } from '../../../models/ACS/folder.model'; -import { AcsUserModel } from '../../../models/ACS/acs-user.model'; -import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; import { NavigationBarPage } from '../../../pages/adf/navigation-bar.page'; +import { UsersActions } from '../../../actions/users.actions'; describe('Viewer', () => { const viewerPage = new ViewerPage(); - const loginPage = new LoginPage(); + const loginPage = new LoginSSOPage(); const contentServicesPage = new ContentServicesPage(); const navigationBarPage = new NavigationBarPage(); - this.alfrescoJsApi = new AlfrescoApi({ - provider: 'ECM', - hostEcm: browser.params.testConfig.adf_acs.host - }); - const uploadActions = new UploadActions(this.alfrescoJsApi); + const apiService = new ApiService(); + const uploadActions = new UploadActions(apiService); + const usersActions = new UsersActions(apiService); + let site; - const acsUser = new AcsUserModel(); + const acsUser = new UserModel(); let pngFileUploaded; const pngFileInfo = new FileModel({ @@ -52,31 +50,31 @@ describe('Viewer', () => { }); beforeAll(async () => { - await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); - await this.alfrescoJsApi.core.peopleApi.addPerson(acsUser); + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); + await usersActions.createUser(acsUser); - site = await this.alfrescoJsApi.core.sitesApi.createSite({ + site = await apiService.getInstance().core.sitesApi.createSite({ title: StringUtil.generateRandomString(8), visibility: 'PUBLIC' }); - await this.alfrescoJsApi.core.sitesApi.addSiteMember(site.entry.id, { - id: acsUser.id, + await apiService.getInstance().core.sitesApi.addSiteMember(site.entry.id, { + id: acsUser.email, role: CONSTANTS.CS_USER_ROLES.MANAGER }); - await this.alfrescoJsApi.login(acsUser.id, acsUser.password); + await apiService.getInstance().login(acsUser.email, acsUser.password); pngFileUploaded = await uploadActions.uploadFile(pngFileInfo.location, pngFileInfo.name, site.entry.guid); }); afterAll(async () => { - await this.alfrescoJsApi.core.sitesApi.deleteSite(site.entry.id, { permanent: true }); + await apiService.getInstance().core.sitesApi.deleteSite(site.entry.id, { permanent: true }); await navigationBarPage.clickLogoutButton(); }); it('[C272813] Should be redirected to site when opening and closing a file in a site', async () => { - await loginPage.loginToContentServicesUsingUserModel(acsUser); + await loginPage.login(acsUser.email, acsUser.password); await navigationBarPage.goToSite(site); await contentServicesPage.checkAcsContainer(); @@ -89,7 +87,6 @@ describe('Viewer', () => { }); describe('Other Folder Uploaded', () => { - let uploadedOthers; let otherFolderUploaded; @@ -98,7 +95,7 @@ describe('Viewer', () => { uploadedOthers = await uploadActions.uploadFolder(otherFolderInfo.location, otherFolderUploaded.entry.id); - await loginPage.loginToContentServicesUsingUserModel(acsUser); + await loginPage.login(acsUser.email, acsUser.password); await contentServicesPage.goToDocumentList(); }); 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 609b8a1686..9f2691f3b0 100644 --- a/e2e/core/viewer/file-extensions/viewer-excel.component.e2e.ts +++ b/e2e/core/viewer/file-extensions/viewer-excel.component.e2e.ts @@ -16,54 +16,51 @@ */ import { browser } from 'protractor'; -import { LoginPage, StringUtil, UploadActions, ViewerPage } from '@alfresco/adf-testing'; +import { ApiService, LoginSSOPage, StringUtil, UploadActions, ViewerPage, UserModel } from '@alfresco/adf-testing'; import { ContentServicesPage } from '../../../pages/adf/content-services.page'; import CONSTANTS = require('../../../util/constants'); import { FolderModel } from '../../../models/ACS/folder.model'; -import { AcsUserModel } from '../../../models/ACS/acs-user.model'; -import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; +import { UsersActions } from '../../../actions/users.actions'; describe('Viewer', () => { const viewerPage = new ViewerPage(); - const loginPage = new LoginPage(); + const loginPage = new LoginSSOPage(); const contentServicesPage = new ContentServicesPage(); let site; - const acsUser = new AcsUserModel(); + const acsUser = new UserModel(); const excelFolderInfo = new FolderModel({ 'name': browser.params.resources.Files.ADF_DOCUMENTS.EXCEL_FOLDER.folder_name, 'location': browser.params.resources.Files.ADF_DOCUMENTS.EXCEL_FOLDER.folder_path }); - this.alfrescoJsApi = new AlfrescoApi({ - provider: 'ECM', - hostEcm: browser.params.testConfig.adf_acs.host - }); - const uploadActions = new UploadActions(this.alfrescoJsApi); + + const apiService = new ApiService(); + const uploadActions = new UploadActions(apiService); + const usersActions = new UsersActions(apiService); beforeAll(async () => { - await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); - await this.alfrescoJsApi.core.peopleApi.addPerson(acsUser); + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); + await usersActions.createUser(acsUser); - site = await this.alfrescoJsApi.core.sitesApi.createSite({ + site = await apiService.getInstance().core.sitesApi.createSite({ title: StringUtil.generateRandomString(8), visibility: 'PUBLIC' }); - await this.alfrescoJsApi.core.sitesApi.addSiteMember(site.entry.id, { - id: acsUser.id, + await apiService.getInstance().core.sitesApi.addSiteMember(site.entry.id, { + id: acsUser.email, role: CONSTANTS.CS_USER_ROLES.MANAGER }); - await this.alfrescoJsApi.login(acsUser.id, acsUser.password); + await apiService.getInstance().login(acsUser.email, acsUser.password); }); afterAll(async () => { - await this.alfrescoJsApi.core.sitesApi.deleteSite(site.entry.id, { permanent: true }); + await apiService.getInstance().core.sitesApi.deleteSite(site.entry.id, { permanent: true }); }); describe('Excel Folder Uploaded', () => { - let uploadedExcels; let excelFolderUploaded; @@ -72,7 +69,7 @@ describe('Viewer', () => { uploadedExcels = await uploadActions.uploadFolder(excelFolderInfo.location, excelFolderUploaded.entry.id); - await loginPage.loginToContentServicesUsingUserModel(acsUser); + await loginPage.login(acsUser.email, acsUser.password); await contentServicesPage.goToDocumentList(); }); 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 9d67e8fd21..d269564cf4 100644 --- a/e2e/core/viewer/file-extensions/viewer-image.component.e2e.ts +++ b/e2e/core/viewer/file-extensions/viewer-image.component.e2e.ts @@ -16,25 +16,24 @@ */ import { browser } from 'protractor'; -import { LoginPage, StringUtil, UploadActions, ViewerPage } from '@alfresco/adf-testing'; +import { ApiService, LoginSSOPage, StringUtil, UploadActions, ViewerPage, UserModel } from '@alfresco/adf-testing'; import { ContentServicesPage } from '../../../pages/adf/content-services.page'; import CONSTANTS = require('../../../util/constants'); import { FolderModel } from '../../../models/ACS/folder.model'; -import { AcsUserModel } from '../../../models/ACS/acs-user.model'; -import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; +import { UsersActions } from '../../../actions/users.actions'; describe('Viewer', () => { const viewerPage = new ViewerPage(); - const loginPage = new LoginPage(); + const loginPage = new LoginSSOPage(); const contentServicesPage = new ContentServicesPage(); - this.alfrescoJsApi = new AlfrescoApi({ - provider: 'ECM', - hostEcm: browser.params.testConfig.adf_acs.host - }); - const uploadActions = new UploadActions(this.alfrescoJsApi); + + const apiService = new ApiService(); + const uploadActions = new UploadActions(apiService); + const usersActions = new UsersActions(apiService); + let site; - const acsUser = new AcsUserModel(); + const acsUser = new UserModel(); const imgFolderInfo = new FolderModel({ 'name': browser.params.resources.Files.ADF_DOCUMENTS.IMG_FOLDER.folder_name, @@ -47,28 +46,27 @@ describe('Viewer', () => { }); beforeAll(async () => { - await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); - await this.alfrescoJsApi.core.peopleApi.addPerson(acsUser); + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); + await usersActions.createUser(acsUser); - site = await this.alfrescoJsApi.core.sitesApi.createSite({ + site = await apiService.getInstance().core.sitesApi.createSite({ title: StringUtil.generateRandomString(8), visibility: 'PUBLIC' }); - await this.alfrescoJsApi.core.sitesApi.addSiteMember(site.entry.id, { - id: acsUser.id, + await apiService.getInstance().core.sitesApi.addSiteMember(site.entry.id, { + id: acsUser.email, role: CONSTANTS.CS_USER_ROLES.MANAGER }); - await this.alfrescoJsApi.login(acsUser.id, acsUser.password); + await apiService.getInstance().login(acsUser.email, acsUser.password); }); afterAll(async () => { - await this.alfrescoJsApi.core.sitesApi.deleteSite(site.entry.id, { permanent: true }); + await apiService.getInstance().core.sitesApi.deleteSite(site.entry.id, { permanent: true }); }); describe('Image Folder Uploaded', () => { - let uploadedImages, uploadedImgRenditionFolderInfo; let imgFolderUploaded, imgFolderRenditionUploaded; @@ -81,7 +79,7 @@ describe('Viewer', () => { uploadedImgRenditionFolderInfo = await uploadActions.uploadFolder(imgRenditionFolderInfo.location, imgFolderRenditionUploaded.entry.id); - await loginPage.loginToContentServicesUsingUserModel(acsUser); + await loginPage.login(acsUser.email, acsUser.password); await contentServicesPage.goToDocumentList(); }); 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 3059d27158..afa59a1287 100644 --- a/e2e/core/viewer/file-extensions/viewer-powerpoint.component.e2e.ts +++ b/e2e/core/viewer/file-extensions/viewer-powerpoint.component.e2e.ts @@ -15,56 +15,54 @@ * limitations under the License. */ -import { LoginPage, UploadActions, StringUtil, ViewerPage } from '@alfresco/adf-testing'; +import { LoginSSOPage, UploadActions, StringUtil, ViewerPage, ApiService, UserModel } from '@alfresco/adf-testing'; import { ContentServicesPage } from '../../../pages/adf/content-services.page'; import CONSTANTS = require('../../../util/constants'); import { FolderModel } from '../../../models/ACS/folder.model'; -import { AcsUserModel } from '../../../models/ACS/acs-user.model'; -import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; import { browser } from 'protractor'; +import { UsersActions } from '../../../actions/users.actions'; describe('Viewer', () => { const viewerPage = new ViewerPage(); - const loginPage = new LoginPage(); + const loginPage = new LoginSSOPage(); const contentServicesPage = new ContentServicesPage(); - this.alfrescoJsApi = new AlfrescoApi({ - provider: 'ECM', - hostEcm: browser.params.testConfig.adf_acs.host - }); - const uploadActions = new UploadActions(this.alfrescoJsApi); - let site; - const acsUser = new AcsUserModel(); + const apiService = new ApiService(); + const usersActions = new UsersActions(apiService); + const uploadActions = new UploadActions(apiService); + + const acsUser = new UserModel(); const pptFolderInfo = new FolderModel({ 'name': browser.params.resources.Files.ADF_DOCUMENTS.PPT_FOLDER.folder_name, 'location': browser.params.resources.Files.ADF_DOCUMENTS.PPT_FOLDER.folder_path }); - beforeAll(async () => { - await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); - await this.alfrescoJsApi.core.peopleApi.addPerson(acsUser); + let site; - site = await this.alfrescoJsApi.core.sitesApi.createSite({ + beforeAll(async () => { + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); + await usersActions.createUser(acsUser); + + site = await apiService.getInstance().core.sitesApi.createSite({ title: StringUtil.generateRandomString(8), visibility: 'PUBLIC' }); - await this.alfrescoJsApi.core.sitesApi.addSiteMember(site.entry.id, { - id: acsUser.id, + await apiService.getInstance().core.sitesApi.addSiteMember(site.entry.id, { + id: acsUser.email, role: CONSTANTS.CS_USER_ROLES.MANAGER }); - await this.alfrescoJsApi.login(acsUser.id, acsUser.password); + await apiService.getInstance().login(acsUser.email, acsUser.password); }); afterAll(async () => { - await this.alfrescoJsApi.core.sitesApi.deleteSite(site.entry.id, { permanent: true }); + await apiService.getInstance().core.sitesApi.deleteSite(site.entry.id, { permanent: true }); }); describe('PowerPoint Folder Uploaded', () => { - let uploadedPpt; let pptFolderUploaded; @@ -73,7 +71,7 @@ describe('Viewer', () => { uploadedPpt = await uploadActions.uploadFolder(pptFolderInfo.location, pptFolderUploaded.entry.id); - await loginPage.loginToContentServicesUsingUserModel(acsUser); + await loginPage.login(acsUser.email, acsUser.password); await contentServicesPage.goToDocumentList(); }); 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 3cc2d56ca7..c694010066 100644 --- a/e2e/core/viewer/file-extensions/viewer-text.component.e2e.ts +++ b/e2e/core/viewer/file-extensions/viewer-text.component.e2e.ts @@ -16,25 +16,23 @@ */ import { browser } from 'protractor'; -import { LoginPage, UploadActions, StringUtil, ViewerPage } from '@alfresco/adf-testing'; +import { LoginSSOPage, UploadActions, StringUtil, ViewerPage, ApiService, UserModel } from '@alfresco/adf-testing'; import { ContentServicesPage } from '../../../pages/adf/content-services.page'; import CONSTANTS = require('../../../util/constants'); import { FolderModel } from '../../../models/ACS/folder.model'; -import { AcsUserModel } from '../../../models/ACS/acs-user.model'; -import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; +import { UsersActions } from '../../../actions/users.actions'; describe('Viewer', () => { const viewerPage = new ViewerPage(); - const loginPage = new LoginPage(); + const loginPage = new LoginSSOPage(); const contentServicesPage = new ContentServicesPage(); - this.alfrescoJsApi = new AlfrescoApi({ - provider: 'ECM', - hostEcm: browser.params.testConfig.adf_acs.host - }); - const uploadActions = new UploadActions(this.alfrescoJsApi); + + const apiService = new ApiService(); + const usersActions = new UsersActions(apiService); + const uploadActions = new UploadActions(apiService); let site; - const acsUser = new AcsUserModel(); + const acsUser = new UserModel(); const textFolderInfo = new FolderModel({ 'name': browser.params.resources.Files.ADF_DOCUMENTS.TEXT_FOLDER.folder_name, @@ -42,28 +40,27 @@ describe('Viewer', () => { }); beforeAll(async () => { - await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); - await this.alfrescoJsApi.core.peopleApi.addPerson(acsUser); + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); + await usersActions.createUser(acsUser); - site = await this.alfrescoJsApi.core.sitesApi.createSite({ + site = await apiService.getInstance().core.sitesApi.createSite({ title: StringUtil.generateRandomString(8), visibility: 'PUBLIC' }); - await this.alfrescoJsApi.core.sitesApi.addSiteMember(site.entry.id, { - id: acsUser.id, + await apiService.getInstance().core.sitesApi.addSiteMember(site.entry.id, { + id: acsUser.email, role: CONSTANTS.CS_USER_ROLES.MANAGER }); - await this.alfrescoJsApi.login(acsUser.id, acsUser.password); + await apiService.getInstance().login(acsUser.email, acsUser.password); }); afterAll(async () => { - await this.alfrescoJsApi.core.sitesApi.deleteSite(site.entry.id, { permanent: true }); + await apiService.getInstance().core.sitesApi.deleteSite(site.entry.id, { permanent: true }); }); describe('Text Folder Uploaded', () => { - let uploadedTexts; let textFolderUploaded; @@ -72,7 +69,7 @@ describe('Viewer', () => { uploadedTexts = await uploadActions.uploadFolder(textFolderInfo.location, textFolderUploaded.entry.id); - await loginPage.loginToContentServicesUsingUserModel(acsUser); + await loginPage.login(acsUser.email, acsUser.password); await contentServicesPage.goToDocumentList(); }); 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 2eb7d83209..da3c96efa5 100644 --- a/e2e/core/viewer/file-extensions/viewer-word.component.e2e.ts +++ b/e2e/core/viewer/file-extensions/viewer-word.component.e2e.ts @@ -16,28 +16,25 @@ */ import { browser } from 'protractor'; -import { LoginPage, UploadActions, StringUtil, ViewerPage } from '@alfresco/adf-testing'; +import { LoginSSOPage, UploadActions, StringUtil, ViewerPage, ApiService, UserModel } from '@alfresco/adf-testing'; import { ContentServicesPage } from '../../../pages/adf/content-services.page'; import CONSTANTS = require('../../../util/constants'); import { FolderModel } from '../../../models/ACS/folder.model'; -import { AcsUserModel } from '../../../models/ACS/acs-user.model'; -import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; import { NavigationBarPage } from '../../../pages/adf/navigation-bar.page'; +import { UsersActions } from '../../../actions/users.actions'; describe('Viewer', () => { const viewerPage = new ViewerPage(); - const loginPage = new LoginPage(); + const loginPage = new LoginSSOPage(); const contentServicesPage = new ContentServicesPage(); const navigationBarPage = new NavigationBarPage(); - this.alfrescoJsApi = new AlfrescoApi({ - provider: 'ECM', - hostEcm: browser.params.testConfig.adf_acs.host - }); - const uploadActions = new UploadActions(this.alfrescoJsApi); + const apiService = new ApiService(); + const usersActions = new UsersActions(apiService); + const uploadActions = new UploadActions(apiService); let site; - const acsUser = new AcsUserModel(); + const acsUser = new UserModel(); const wordFolderInfo = new FolderModel({ 'name': browser.params.resources.Files.ADF_DOCUMENTS.WORD_FOLDER.folder_name, @@ -45,29 +42,28 @@ describe('Viewer', () => { }); beforeAll(async () => { - await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); - await this.alfrescoJsApi.core.peopleApi.addPerson(acsUser); + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); + await usersActions.createUser(acsUser); - site = await this.alfrescoJsApi.core.sitesApi.createSite({ + site = await apiService.getInstance().core.sitesApi.createSite({ title: StringUtil.generateRandomString(8), visibility: 'PUBLIC' }); - await this.alfrescoJsApi.core.sitesApi.addSiteMember(site.entry.id, { - id: acsUser.id, + await apiService.getInstance().core.sitesApi.addSiteMember(site.entry.id, { + id: acsUser.email, role: CONSTANTS.CS_USER_ROLES.MANAGER }); - await this.alfrescoJsApi.login(acsUser.id, acsUser.password); + await apiService.getInstance().login(acsUser.email, acsUser.password); }); afterAll(async () => { - await this.alfrescoJsApi.core.sitesApi.deleteSite(site.entry.id, { permanent: true }); + await apiService.getInstance().core.sitesApi.deleteSite(site.entry.id, { permanent: true }); await navigationBarPage.clickLogoutButton(); }); describe('Word Folder Uploaded', () => { - let uploadedWords; let wordFolderUploaded; @@ -76,7 +72,7 @@ describe('Viewer', () => { uploadedWords = await uploadActions.uploadFolder(wordFolderInfo.location, wordFolderUploaded.entry.id); - await loginPage.loginToContentServicesUsingUserModel(acsUser); + await loginPage.login(acsUser.email, acsUser.password); await contentServicesPage.goToDocumentList(); }); diff --git a/e2e/core/viewer/info-drawer.component.e2e.ts b/e2e/core/viewer/info-drawer.component.e2e.ts index 0532f140a9..56ff910df7 100644 --- a/e2e/core/viewer/info-drawer.component.e2e.ts +++ b/e2e/core/viewer/info-drawer.component.e2e.ts @@ -16,27 +16,25 @@ */ import { browser } from 'protractor'; -import { LoginPage, UploadActions, StringUtil, ViewerPage } from '@alfresco/adf-testing'; +import { LoginSSOPage, UploadActions, StringUtil, ViewerPage, ApiService, UserModel } from '@alfresco/adf-testing'; import { NavigationBarPage } from '../../pages/adf/navigation-bar.page'; import { ContentServicesPage } from '../../pages/adf/content-services.page'; import CONSTANTS = require('../../util/constants'); import { FileModel } from '../../models/ACS/file.model'; -import { AcsUserModel } from '../../models/ACS/acs-user.model'; -import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; +import { UsersActions } from '../../actions/users.actions'; describe('Info Drawer', () => { const viewerPage = new ViewerPage(); const navigationBarPage = new NavigationBarPage(); - const loginPage = new LoginPage(); + const loginPage = new LoginSSOPage(); const contentServicesPage = new ContentServicesPage(); - this.alfrescoJsApi = new AlfrescoApi({ - provider: 'ECM', - hostEcm: browser.params.testConfig.adf_acs.host - }); - const uploadActions = new UploadActions(this.alfrescoJsApi); + + const apiService = new ApiService(); + const usersActions = new UsersActions(apiService); + const uploadActions = new UploadActions(apiService); let site; - const acsUser = new AcsUserModel(); + const acsUser = new UserModel(); let pngFileUploaded; const pngFileInfo = new FileModel({ @@ -45,32 +43,32 @@ describe('Info Drawer', () => { }); beforeAll(async () => { - await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); - await this.alfrescoJsApi.core.peopleApi.addPerson(acsUser); + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); + await usersActions.createUser(acsUser); - site = await this.alfrescoJsApi.core.sitesApi.createSite({ + site = await apiService.getInstance().core.sitesApi.createSite({ title: StringUtil.generateRandomString(8), visibility: 'PUBLIC' }); - await this.alfrescoJsApi.core.sitesApi.addSiteMember(site.entry.id, { - id: acsUser.id, + await apiService.getInstance().core.sitesApi.addSiteMember(site.entry.id, { + id: acsUser.email, role: CONSTANTS.CS_USER_ROLES.MANAGER }); - await this.alfrescoJsApi.login(acsUser.id, acsUser.password); + await apiService.getInstance().login(acsUser.email, acsUser.password); pngFileUploaded = await uploadActions.uploadFile(pngFileInfo.location, pngFileInfo.name, site.entry.guid); }); afterAll(async () => { - await this.alfrescoJsApi.login(acsUser.id, acsUser.password); + await apiService.getInstance().login(acsUser.email, acsUser.password); await uploadActions.deleteFileOrFolder(pngFileUploaded.entry.id); - await this.alfrescoJsApi.core.sitesApi.deleteSite(site.entry.id, { permanent: true }); + await apiService.getInstance().core.sitesApi.deleteSite(site.entry.id, { permanent: true }); }); beforeEach(async() => { - await loginPage.loginToContentServicesUsingUserModel(acsUser); + await loginPage.login(acsUser.email, acsUser.password); await navigationBarPage.goToSite(site); await contentServicesPage.checkAcsContainer(); diff --git a/e2e/core/viewer/viewer-content-services-component.e2e.ts b/e2e/core/viewer/viewer-content-services-component.e2e.ts index 6732cacecc..693a945e2e 100644 --- a/e2e/core/viewer/viewer-content-services-component.e2e.ts +++ b/e2e/core/viewer/viewer-content-services-component.e2e.ts @@ -16,18 +16,17 @@ */ import { browser } from 'protractor'; -import { LoginPage, UploadActions, ViewerPage } from '@alfresco/adf-testing'; +import { ApiService, LoginSSOPage, UploadActions, ViewerPage, UserModel } from '@alfresco/adf-testing'; import { ContentServicesPage } from '../../pages/adf/content-services.page'; import { FileModel } from '../../models/ACS/file.model'; -import { AcsUserModel } from '../../models/ACS/acs-user.model'; -import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; import { NavigationBarPage } from '../../pages/adf/navigation-bar.page'; +import { UsersActions } from '../../actions/users.actions'; describe('Content Services Viewer', () => { - const acsUser = new AcsUserModel(); + const acsUser = new UserModel(); const viewerPage = new ViewerPage(); const contentServicesPage = new ContentServicesPage(); - const loginPage = new LoginPage(); + const loginPage = new LoginSSOPage(); const navigationBarPage = new NavigationBarPage(); let zoom; @@ -68,18 +67,17 @@ describe('Content Services Viewer', () => { 'name': browser.params.resources.Files.ADF_DOCUMENTS.PPT.file_name, 'firstPageText': browser.params.resources.Files.ADF_DOCUMENTS.PPT.first_page_text }); - this.alfrescoJsApi = new AlfrescoApi({ - provider: 'ECM', - hostEcm: browser.params.testConfig.adf_acs.host - }); - const uploadActions = new UploadActions(this.alfrescoJsApi); + + const apiService = new ApiService(); + const usersActions = new UsersActions(apiService); + const uploadActions = new UploadActions(apiService); beforeAll(async () => { - await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); - await this.alfrescoJsApi.core.peopleApi.addPerson(acsUser); + await usersActions.createUser(acsUser); - await this.alfrescoJsApi.login(acsUser.id, acsUser.password); + await apiService.getInstance().login(acsUser.email, acsUser.password); const pdfFileUploaded = await uploadActions.uploadFile(pdfFile.location, pdfFile.name, '-my-'); Object.assign(pdfFile, pdfFileUploaded.entry); @@ -102,7 +100,7 @@ describe('Content Services Viewer', () => { const unsupportedFileUploaded = await uploadActions.uploadFile(unsupportedFile.location, unsupportedFile.name, '-my-'); Object.assign(unsupportedFile, unsupportedFileUploaded.entry); - await loginPage.loginToContentServicesUsingUserModel(acsUser); + await loginPage.login(acsUser.email, acsUser.password); await contentServicesPage.goToDocumentList(); }); 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 18adbf4857..1b23f1acf2 100644 --- a/e2e/core/viewer/viewer-custom-toolbar-info-drawer.e2e.ts +++ b/e2e/core/viewer/viewer-custom-toolbar-info-drawer.e2e.ts @@ -16,25 +16,24 @@ */ import { browser } from 'protractor'; -import { LoginPage, UploadActions, ViewerPage } from '@alfresco/adf-testing'; +import { ApiService, LoginSSOPage, UploadActions, ViewerPage, UserModel } from '@alfresco/adf-testing'; import { ContentServicesPage } from '../../pages/adf/content-services.page'; import { FileModel } from '../../models/ACS/file.model'; -import { AcsUserModel } from '../../models/ACS/acs-user.model'; -import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; import { NavigationBarPage } from '../../pages/adf/navigation-bar.page'; +import { UsersActions } from '../../actions/users.actions'; describe('Viewer', () => { const navigationBarPage = new NavigationBarPage(); const viewerPage = new ViewerPage(); - const loginPage = new LoginPage(); + const loginPage = new LoginSSOPage(); const contentServicesPage = new ContentServicesPage(); - this.alfrescoJsApi = new AlfrescoApi({ - provider: 'ECM', - hostEcm: browser.params.testConfig.adf_acs.host - }); - const uploadActions = new UploadActions(this.alfrescoJsApi); - const acsUser = new AcsUserModel(); + + const apiService = new ApiService(); + const uploadActions = new UploadActions(apiService); + const usersActions = new UsersActions(apiService); + + const acsUser = new UserModel(); let txtFileUploaded; const txtFileInfo = new FileModel({ @@ -43,14 +42,14 @@ describe('Viewer', () => { }); beforeAll(async () => { - await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); - await this.alfrescoJsApi.core.peopleApi.addPerson(acsUser); + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); + await usersActions.createUser(acsUser); - await this.alfrescoJsApi.login(acsUser.id, acsUser.password); + await apiService.getInstance().login(acsUser.email, acsUser.password); txtFileUploaded = await uploadActions.uploadFile(txtFileInfo.location, txtFileInfo.name, '-my-'); - await loginPage.loginToContentServicesUsingUserModel(acsUser); + await loginPage.login(acsUser.email, acsUser.password); }); afterAll(async () => { diff --git a/e2e/core/viewer/viewer-extension.e2e.ts b/e2e/core/viewer/viewer-extension.e2e.ts index 617e9e1ec5..615f1bc914 100644 --- a/e2e/core/viewer/viewer-extension.e2e.ts +++ b/e2e/core/viewer/viewer-extension.e2e.ts @@ -16,30 +16,29 @@ */ import { browser } from 'protractor'; -import { LoginPage, StringUtil, UploadActions, ViewerPage } from '@alfresco/adf-testing'; +import { ApiService, LoginSSOPage, StringUtil, UploadActions, ViewerPage, UserModel } from '@alfresco/adf-testing'; import { NavigationBarPage } from '../../pages/adf/navigation-bar.page'; import { ContentServicesPage } from '../../pages/adf/content-services.page'; import { MonacoExtensionPage } from '../../pages/adf/demo-shell/monaco-extension.page'; import CONSTANTS = require('../../util/constants'); import { FileModel } from '../../models/ACS/file.model'; -import { AcsUserModel } from '../../models/ACS/acs-user.model'; -import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; +import { UsersActions } from '../../actions/users.actions'; describe('Viewer', () => { const viewerPage = new ViewerPage(); const navigationBarPage = new NavigationBarPage(); - const loginPage = new LoginPage(); + const loginPage = new LoginSSOPage(); const contentServicesPage = new ContentServicesPage(); - this.alfrescoJsApi = new AlfrescoApi({ - provider: 'ECM', - hostEcm: browser.params.testConfig.adf_acs.host - }); - const uploadActions = new UploadActions(this.alfrescoJsApi); - let site; - const acsUser = new AcsUserModel(); + const acsUser = new UserModel(); const monacoExtensionPage = new MonacoExtensionPage(); + const apiService = new ApiService(); + const usersActions = new UsersActions(apiService); + const uploadActions = new UploadActions(apiService); + + let site; + let jsFileUploaded; const jsFileInfo = new FileModel({ 'name': browser.params.resources.Files.ADF_DOCUMENTS.JS.file_name, @@ -47,35 +46,34 @@ describe('Viewer', () => { }); beforeAll(async () => { - await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); - await this.alfrescoJsApi.core.peopleApi.addPerson(acsUser); + await usersActions.createUser(acsUser); - site = await this.alfrescoJsApi.core.sitesApi.createSite({ + site = await apiService.getInstance().core.sitesApi.createSite({ title: StringUtil.generateRandomString(8), visibility: 'PUBLIC' }); - await this.alfrescoJsApi.core.sitesApi.addSiteMember(site.entry.id, { - id: acsUser.id, + await apiService.getInstance().core.sitesApi.addSiteMember(site.entry.id, { + id: acsUser.email, role: CONSTANTS.CS_USER_ROLES.MANAGER }); - await this.alfrescoJsApi.login(acsUser.id, acsUser.password); + await apiService.getInstance().login(acsUser.email, acsUser.password); jsFileUploaded = await uploadActions.uploadFile(jsFileInfo.location, jsFileInfo.name, '-my-'); - await loginPage.loginToContentServicesUsingUserModel(acsUser); + await loginPage.login(acsUser.email, acsUser.password); }); afterAll(async () => { - await this.alfrescoJsApi.core.sitesApi.deleteSite(site.entry.id, { permanent: true }); - await this.alfrescoJsApi.login(acsUser.id, acsUser.password); + await apiService.getInstance().core.sitesApi.deleteSite(site.entry.id, { permanent: true }); + await apiService.getInstance().login(acsUser.email, acsUser.password); await uploadActions.deleteFileOrFolder(jsFileUploaded.entry.id); }); describe('Viewer extension', () => { - it('[C297698] Should be able to add an extension for code editor viewer', async () => { await navigationBarPage.clickAboutButton(); diff --git a/e2e/core/viewer/viewer-properties.e2e.ts b/e2e/core/viewer/viewer-properties.e2e.ts index 674176520c..eebccc109e 100644 --- a/e2e/core/viewer/viewer-properties.e2e.ts +++ b/e2e/core/viewer/viewer-properties.e2e.ts @@ -16,19 +16,18 @@ */ import { browser } from 'protractor'; -import { LoginPage, UploadActions, DataTableComponentPage, ViewerPage } from '@alfresco/adf-testing'; +import { LoginSSOPage, UploadActions, DataTableComponentPage, ViewerPage, ApiService, UserModel } from '@alfresco/adf-testing'; import { ContentServicesPage } from '../../pages/adf/content-services.page'; import { NavigationBarPage } from '../../pages/adf/navigation-bar.page'; import { FileModel } from '../../models/ACS/file.model'; -import { AcsUserModel } from '../../models/ACS/acs-user.model'; -import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; +import { UsersActions } from '../../actions/users.actions'; describe('Viewer - properties', () => { - const acsUser = new AcsUserModel(); + const acsUser = new UserModel(); const viewerPage = new ViewerPage(); const contentServicesPage = new ContentServicesPage(); - const loginPage = new LoginPage(); + const loginPage = new LoginSSOPage(); const navigationBarPage = new NavigationBarPage(); const dataTable = new DataTableComponentPage(); @@ -41,18 +40,16 @@ describe('Viewer - properties', () => { 'name': 'fileForOverlay.png', 'location': browser.params.resources.Files.ADF_DOCUMENTS.PNG.file_path }); - this.alfrescoJsApi = new AlfrescoApi({ - provider: 'ECM', - hostEcm: browser.params.testConfig.adf_acs.host - }); - const uploadActions = new UploadActions(this.alfrescoJsApi); + const apiService = new ApiService(); + const usersActions = new UsersActions(apiService); + const uploadActions = new UploadActions(apiService); beforeAll(async () => { - await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); - await this.alfrescoJsApi.core.peopleApi.addPerson(acsUser); + await usersActions.createUser(acsUser); - await this.alfrescoJsApi.login(acsUser.id, acsUser.password); + await apiService.getInstance().login(acsUser.email, acsUser.password); let pngFileUploaded = await uploadActions.uploadFile(pngFile.location, pngFile.name, '-my-'); Object.assign(pngFile, pngFileUploaded.entry); @@ -60,7 +57,7 @@ describe('Viewer - properties', () => { pngFileUploaded = await uploadActions.uploadFile(fileForOverlay.location, fileForOverlay.name, '-my-'); Object.assign(fileForOverlay, pngFileUploaded.entry); - await loginPage.loginToContentServicesUsingUserModel(acsUser); + await loginPage.login(acsUser.email, acsUser.password); await contentServicesPage.goToDocumentList(); diff --git a/e2e/core/viewer/viewer-share-content.ts b/e2e/core/viewer/viewer-share-content.ts index 8a3ba3f47b..d5a0c618fa 100644 --- a/e2e/core/viewer/viewer-share-content.ts +++ b/e2e/core/viewer/viewer-share-content.ts @@ -15,32 +15,31 @@ * limitations under the License. */ -import { LoginPage, UploadActions, StringUtil, BrowserActions, ViewerPage } from '@alfresco/adf-testing'; +import { LoginSSOPage, UploadActions, StringUtil, BrowserActions, ViewerPage, ApiService, UserModel } from '@alfresco/adf-testing'; import { NavigationBarPage } from '../../pages/adf/navigation-bar.page'; import { ContentServicesPage } from '../../pages/adf/content-services.page'; import { ShareDialogPage } from '../../pages/adf/dialog/share-dialog.page'; import CONSTANTS = require('../../util/constants'); import { FileModel } from '../../models/ACS/file.model'; -import { AcsUserModel } from '../../models/ACS/acs-user.model'; -import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; import { browser } from 'protractor'; +import { UsersActions } from '../../actions/users.actions'; describe('Viewer', () => { const viewerPage = new ViewerPage(); const navigationBarPage = new NavigationBarPage(); - const loginPage = new LoginPage(); + const loginPage = new LoginSSOPage(); const contentServicesPage = new ContentServicesPage(); - this.alfrescoJsApi = new AlfrescoApi({ - provider: 'ECM', - hostEcm: browser.params.testConfig.adf_acs.host - }); - const uploadActions = new UploadActions(this.alfrescoJsApi); + const shareDialog = new ShareDialogPage(); + + const apiService = new ApiService(); + const usersActions = new UsersActions(apiService); + const uploadActions = new UploadActions(apiService); + let site; - const acsUser = new AcsUserModel(); + const acsUser = new UserModel(); let pngFileUploaded; const contentList = contentServicesPage.getDocumentList(); - const shareDialog = new ShareDialogPage(); const pngFileInfo = new FileModel({ 'name': browser.params.resources.Files.ADF_DOCUMENTS.PNG.file_name, @@ -55,38 +54,38 @@ describe('Viewer', () => { let pngFileShared, wordFileUploaded; beforeAll(async () => { - await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); - await this.alfrescoJsApi.core.peopleApi.addPerson(acsUser); + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); + await usersActions.createUser(acsUser); - site = await this.alfrescoJsApi.core.sitesApi.createSite({ + site = await apiService.getInstance().core.sitesApi.createSite({ title: StringUtil.generateRandomString(8), visibility: 'PUBLIC' }); - await this.alfrescoJsApi.core.sitesApi.addSiteMember(site.entry.id, { - id: acsUser.id, + await apiService.getInstance().core.sitesApi.addSiteMember(site.entry.id, { + id: acsUser.email, role: CONSTANTS.CS_USER_ROLES.MANAGER }); - await this.alfrescoJsApi.login(acsUser.id, acsUser.password); + await apiService.getInstance().login(acsUser.email, acsUser.password); pngFileUploaded = await uploadActions.uploadFile(pngFileInfo.location, pngFileInfo.name, site.entry.guid); - await this.alfrescoJsApi.login(acsUser.id, acsUser.password); + await apiService.getInstance().login(acsUser.email, acsUser.password); wordFileUploaded = await uploadActions.uploadFile(wordFileInfo.location, wordFileInfo.name, '-my-'); - pngFileShared = await this.alfrescoJsApi.core.sharedlinksApi.addSharedLink({ 'nodeId': pngFileUploaded.entry.id }); + pngFileShared = await apiService.getInstance().core.sharedlinksApi.addSharedLink({ 'nodeId': pngFileUploaded.entry.id }); }); afterAll(async () => { - await this.alfrescoJsApi.core.sitesApi.deleteSite(site.entry.id, { permanent: true }); - await this.alfrescoJsApi.login(acsUser.id, acsUser.password); + await apiService.getInstance().core.sitesApi.deleteSite(site.entry.id, { permanent: true }); + await apiService.getInstance().login(acsUser.email, acsUser.password); await uploadActions.deleteFileOrFolder(wordFileUploaded.entry.id); }); beforeEach(async () => { - await loginPage.loginToContentServicesUsingUserModel(acsUser); + await loginPage.login(acsUser.email, acsUser.password); }); it('[C260105] Should be able to open an image file shared via API', async () => { diff --git a/e2e/insights/analytics-component.e2e.ts b/e2e/insights/analytics-component.e2e.ts index 74757a4e8d..a992092447 100644 --- a/e2e/insights/analytics-component.e2e.ts +++ b/e2e/insights/analytics-component.e2e.ts @@ -15,48 +15,39 @@ * limitations under the License. */ -import { LoginPage } from '@alfresco/adf-testing'; +import { ApiService, LoginSSOPage, UserModel } from '@alfresco/adf-testing'; import { NavigationBarPage } from '../pages/adf/navigation-bar.page'; import { AnalyticsPage } from '../pages/adf/process-services/analytics.page'; import { ProcessServicesPage } from '../pages/adf/process-services/process-services.page'; import { ProcessServiceTabBarPage } from '../pages/adf/process-services/process-service-tab-bar.page'; import { browser } from 'protractor'; -import { Tenant } from '../models/APS/tenant'; -import { User } from '../models/APS/user'; - -import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; +import { UsersActions } from '../actions/users.actions'; describe('Analytics Smoke Test', () => { - const loginPage = new LoginPage(); + const loginPage = new LoginSSOPage(); const navigationBarPage = new NavigationBarPage(); const processServiceTabBarPage = new ProcessServiceTabBarPage(); const analyticsPage = new AnalyticsPage(); const processServicesPage = new ProcessServicesPage(); - let tenantId; + const reportTitle = 'New Title'; + let procUserModel: UserModel; + + const apiService = new ApiService(); + const usersActions = new UsersActions(apiService); beforeAll(async () => { - this.alfrescoJsApi = new AlfrescoApi({ - provider: 'BPM', - hostBpm: browser.params.testConfig.adf_aps.host - }); + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); - await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); + procUserModel = await usersActions.createUser(); - const newTenant = await this.alfrescoJsApi.activiti.adminTenantsApi.createTenant(new Tenant()); - - tenantId = newTenant.id; - const procUserModel = new User({ tenantId: tenantId }); - - await this.alfrescoJsApi.activiti.adminUsersApi.createNewUser(procUserModel); - - await loginPage.loginToProcessServicesUsingUserModel(procUserModel); - }); + await loginPage.login(procUserModel.email, procUserModel.password); + }); afterAll(async () => { - await this.alfrescoJsApi.activiti.adminTenantsApi.deleteTenant(tenantId); - }); + await apiService.getInstance().activiti.adminTenantsApi.deleteTenant(procUserModel.tenantId); + }); it('[C260346] Should be able to change title of a report', async () => { await navigationBarPage.navigateToProcessServicesPage(); diff --git a/e2e/models/ACS/acs-user.model.ts b/e2e/models/ACS/acs-user.model.ts deleted file mode 100644 index ea2d41622a..0000000000 --- a/e2e/models/ACS/acs-user.model.ts +++ /dev/null @@ -1,56 +0,0 @@ -/*! - * @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 { StringUtil } from '@alfresco/adf-testing'; - -export class AcsUserModel { - - firstName = StringUtil.generateRandomString(); - lastName = StringUtil.generateRandomString(); - password = StringUtil.generateRandomString(); - email = StringUtil.generateRandomString(); - id = StringUtil.generateRandomString(); - - constructor(details?: any) { - Object.assign(this, details); - } - - getFirstName = function () { - return this.firstName; - }; - - getLastName = function () { - return this.lastName; - }; - - getPassword = function () { - return this.password; - }; - - getEmail = function () { - return this.email; - }; - - getId = function () { - return this.id; - }; - - getJobTitle = function () { - return this.jobTitle; - }; - -} diff --git a/e2e/models/APS/AppDefinition.js b/e2e/models/APS/AppDefinition.js deleted file mode 100644 index 03c77228f8..0000000000 --- a/e2e/models/APS/AppDefinition.js +++ /dev/null @@ -1,39 +0,0 @@ -/*! - * @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. - */ - -/** - * App definition representation JSON Object - * - * @param details - JSON object used to overwrite the default values - * @constructor - */ - -var AppDefinition = function (details) { - this.defaultAppId = "1"; - this.deploymentId = "1"; - this.description = "App deployment"; - this.icon = "default icon"; - this.id = 0; - this.modelId = 0; - this.name = "App name"; - this.tenantId = 0; - this.theme = "default theme"; - - Object.assign(this, details); -}; - -module.exports = AppDefinition; diff --git a/e2e/models/APS/ProcessCreatedByModel.js b/e2e/models/APS/ProcessCreatedByModel.js deleted file mode 100644 index fab1b5fd2b..0000000000 --- a/e2e/models/APS/ProcessCreatedByModel.js +++ /dev/null @@ -1,49 +0,0 @@ -/*! - * @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. - */ - -var ProcessCreatedByModel = function (details) { - - this.id; - this.firstName; - this.lastName; - this.email; - - this.getFirstName = function () { - return this.firstName; - }; - - this.getId = function () { - return this.id; - }; - - this.getLastName = function () { - return this.lastName; - }; - - this.getEmail = function () { - return this.email; - }; - - this.getEntireName = function() { - return this.firstName + " " + this.getLastName(); - }; - - Object.assign(this, details); - -}; - -module.exports = ProcessCreatedByModel; diff --git a/e2e/models/APS/ProcessInstance.js b/e2e/models/APS/ProcessInstance.js deleted file mode 100644 index 33cf8fd5a3..0000000000 --- a/e2e/models/APS/ProcessInstance.js +++ /dev/null @@ -1,32 +0,0 @@ -/*! - * @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. - */ - -/** - * Process Instance representation JSON Object - * - * @param details - JSON object used to overwrite the default values - * @constructor - */ - -var ProcessInstance = function (details) { - this.processDefinitionId = 1234; - this.name = "Process started from REST API"; - - Object.assign(this, details); -}; - -module.exports = ProcessInstance; diff --git a/e2e/models/APS/ProcessModel.js b/e2e/models/APS/ProcessModel.js deleted file mode 100644 index 0b8603e54d..0000000000 --- a/e2e/models/APS/ProcessModel.js +++ /dev/null @@ -1,83 +0,0 @@ -/*! - * @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. - */ - -var ProcessCreatedByModel = require('./ProcessCreatedByModel'); - -var ProcessModel = function (details) { - - this.id; - this.name; - this.version; - this.modelType; - this.description; - this.createdByFullName; - this.createdBy; - this.lastUpdatedByFullName; - this.lastUpdatedBy; - this.lastUpdated; - this.startedBy = {}; - - this.getName = function () { - return this.name; - }; - - this.getId = function () { - return this.id; - }; - - this.getVersion = function () { - return this.version; - }; - - this.getModelType = function () { - return this.modelType; - }; - - this.getDescription = function () { - return this.description; - }; - - this.getCreatedByFullName = function () { - return this.createdByFullName; - }; - - this.getCreatedBy = function () { - return this.createdBy; - }; - - this.getLastUpdatedByFullName = function () { - return this.lastUpdatedByFullName; - }; - - this.getLastUpdatedBy = function () { - return this.lastUpdatedBy; - }; - - this.getLastUpdated = function () { - return this.lastUpdated; - }; - - this.getStartedBy = function () { - return this.startedBy; - }; - - Object.assign(this, details); - Object.assign(this.startedBy, new ProcessCreatedByModel(details.startedBy)); - - -}; -module.exports = ProcessModel; diff --git a/e2e/models/APS/user.ts b/e2e/models/APS/user.ts deleted file mode 100644 index 7b43b3dbf9..0000000000 --- a/e2e/models/APS/user.ts +++ /dev/null @@ -1,40 +0,0 @@ -/*! - * @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 { StringUtil } from '@alfresco/adf-testing'; - -/** - * Create tenant JSON Object - * - * @param details - JSON object used to overwrite the default values - * @constructor - */ -export class User { - - email = StringUtil.generateRandomEmail('@activiti.test.com'); - firstName = StringUtil.generateRandomString(); - lastName = StringUtil.generateRandomString(); - password = StringUtil.generatePasswordString(); - type = 'enterprise'; - tenantId = 1; - company = null; - id = 0; - - constructor(details?: any) { - Object.assign(this, details); - } -} diff --git a/e2e/pages/adf/content-services.page.ts b/e2e/pages/adf/content-services.page.ts index fe340352d4..c6680136bf 100644 --- a/e2e/pages/adf/content-services.page.ts +++ b/e2e/pages/adf/content-services.page.ts @@ -15,15 +15,13 @@ * limitations under the License. */ -import { BrowserActions, BrowserVisibility, DateUtil, DocumentListPage, TogglePage } from '@alfresco/adf-testing'; +import { DropActions, BrowserActions, BrowserVisibility, DateUtil, DocumentListPage, TogglePage, DropdownPage } from '@alfresco/adf-testing'; import { $$, browser, by, element, ElementFinder, ElementArrayFinder, protractor } from 'protractor'; -import { DropActions } from '../../actions/drop.actions'; import { CreateLibraryDialogPage } from './dialog/create-library-dialog.page'; import { FolderDialogPage } from './dialog/folder-dialog.page'; import { NavigationBarPage } from './navigation-bar.page'; import path = require('path'); -import { DropdownPage } from '../../../lib/testing/src/lib/material/pages/dropdown.page'; export class ContentServicesPage { diff --git a/lib/testing/src/lib/core/pages/login.page.ts b/e2e/pages/adf/demo-shell/login.page.ts similarity index 80% rename from lib/testing/src/lib/core/pages/login.page.ts rename to e2e/pages/adf/demo-shell/login.page.ts index b0f5e60101..be08f74d74 100644 --- a/lib/testing/src/lib/core/pages/login.page.ts +++ b/e2e/pages/adf/demo-shell/login.page.ts @@ -15,16 +15,15 @@ * limitations under the License. */ -import { TogglePage } from '../../material/pages/toggle.page'; import { browser, by, element, ElementFinder } from 'protractor'; -import { BrowserVisibility } from '../utils/browser-visibility'; -import { LocalStorageUtil } from '../utils/local-storage.util'; -import { BrowserActions } from '../utils/browser-actions'; +import { TogglePage, BrowserActions, BrowserVisibility, LoginSSOPage } from '@alfresco/adf-testing'; export class LoginPage { loginURL: string = browser.baseUrl + '/login'; + loginSSOPage: LoginSSOPage = new LoginSSOPage(); + togglePage: TogglePage = new TogglePage(); txtUsername: ElementFinder = element(by.css('input[id="username"]')); txtPassword: ElementFinder = element(by.css('input[id="password"]')); @@ -125,42 +124,9 @@ export class LoginPage { } async getSignInButtonIsEnabled(): Promise { - await BrowserVisibility.waitUntilElementIsVisible(this.signInButton); return this.signInButton.isEnabled(); } - async loginToAllUsingUserModel(userModel): Promise { - await this.goToLoginPage(); - await LocalStorageUtil.clearStorage(); - await LocalStorageUtil.setStorageItem('providers', 'ALL'); - await LocalStorageUtil.apiReset(); - await this.login(userModel.email, userModel.password); - } - - async loginToProcessServicesUsingUserModel(userModel): Promise { - await this.goToLoginPage(); - await LocalStorageUtil.clearStorage(); - await LocalStorageUtil.setStorageItem('providers', 'BPM'); - await LocalStorageUtil.apiReset(); - await this.login(userModel.email, userModel.password); - } - - async loginToContentServicesUsingUserModel(userModel): Promise { - await this.goToLoginPage(); - await LocalStorageUtil.clearStorage(); - await LocalStorageUtil.setStorageItem('providers', 'ECM'); - await LocalStorageUtil.apiReset(); - await this.login(userModel.getId(), userModel.getPassword()); - } - - async loginToContentServices(username, password): Promise { - await this.goToLoginPage(); - await LocalStorageUtil.clearStorage(); - await LocalStorageUtil.setStorageItem('providers', 'ECM'); - await LocalStorageUtil.apiReset(); - await this.login(username, password); - } - async clickSignInButton(): Promise { await BrowserActions.click(this.signInButton); } @@ -237,10 +203,7 @@ export class LoginPage { await BrowserActions.clearSendKeys(this.logoTxt, logo); } - async login(username, password): Promise { - await this.enterUsername(username); - await this.enterPassword(password); - await this.clickSignInButton(); - await BrowserVisibility.waitUntilElementIsVisible(this.sidenavLayout); + async login(username: string, password: string): Promise { + await this.loginSSOPage.login(username, password); } } diff --git a/e2e/pages/adf/process-services/dialog/start-task-dialog.page.ts b/e2e/pages/adf/process-services/dialog/start-task-dialog.page.ts index 0cdd53966a..2e2ee6654a 100644 --- a/e2e/pages/adf/process-services/dialog/start-task-dialog.page.ts +++ b/e2e/pages/adf/process-services/dialog/start-task-dialog.page.ts @@ -31,29 +31,29 @@ export class StartTaskDialogPage { selectFormDropdown = new DropdownPage(element(by.css('mat-select[id="form_id"]'))); selectAssigneeDropdown = new DropdownPage(); - async addName(userName): Promise { + async addName(userName: string): Promise { await BrowserVisibility.waitUntilElementIsVisible(this.name); await this.name.clear(); await this.name.sendKeys(userName); } - async addDescription(userDescription): Promise { + async addDescription(userDescription: string): Promise { await BrowserVisibility.waitUntilElementIsVisible(this.description); await this.description.sendKeys(userDescription); } - async addDueDate(date): Promise { + async addDueDate(date: string): Promise { await BrowserVisibility.waitUntilElementIsVisible(this.dueDate); await this.dueDate.sendKeys(date); } - async addAssignee(name): Promise { + async addAssignee(name: string): Promise { await BrowserVisibility.waitUntilElementIsVisible(this.assignee); await this.assignee.sendKeys(name); await this.selectAssigneeFromList(name); } - async selectAssigneeFromList(name): Promise { + async selectAssigneeFromList(name: string): Promise { await this.selectAssigneeDropdown.selectOption(name); } @@ -82,12 +82,12 @@ export class StartTaskDialogPage { await BrowserActions.click(this.cancelButton); } - async blur(locator): Promise { + async blur(locator: ElementFinder): Promise { await BrowserActions.click(locator); await locator.sendKeys(Key.TAB); } - async checkValidationErrorIsDisplayed(error, elementRef = 'mat-error'): Promise { + async checkValidationErrorIsDisplayed(error: string, elementRef = 'mat-error'): Promise { const errorElement: ElementFinder = element(by.cssContainingText(elementRef, error)); await BrowserVisibility.waitUntilElementIsVisible(errorElement); } diff --git a/e2e/pages/adf/process-services/filters.page.ts b/e2e/pages/adf/process-services/filters.page.ts index bf6565b942..fdcbbf81ec 100644 --- a/e2e/pages/adf/process-services/filters.page.ts +++ b/e2e/pages/adf/process-services/filters.page.ts @@ -29,19 +29,19 @@ export class FiltersPage { async goToFilter(filterName): Promise { await BrowserActions.closeMenuAndDialogs(); - await BrowserActions.clickExecuteScript(`button[data-automation-id="${filterName}_filter"]`); + await BrowserActions.clickExecuteScript(`[data-automation-id="${filterName}_filter"]`); } async sortByName(sortOrder: string): Promise { await this.dataTable.sortByColumn(sortOrder, 'name'); } - async getAllRowsNameColumn() { + async getAllRowsNameColumn(): Promise { return this.dataTable.getAllRowsColumnValues('Name'); } async checkFilterIsHighlighted(filterName: string): Promise { - const highlightedFilter: ElementFinder = element(by.css(`.adf-active button[data-automation-id='${filterName}_filter']`)); + const highlightedFilter: ElementFinder = element(by.css(`.adf-active [data-automation-id='${filterName}_filter']`)); await BrowserVisibility.waitUntilElementIsVisible(highlightedFilter); } } diff --git a/e2e/pages/adf/process-services/tasks-list.page.ts b/e2e/pages/adf/process-services/tasks-list.page.ts index 1ab983fae7..3e31f9d9f7 100644 --- a/e2e/pages/adf/process-services/tasks-list.page.ts +++ b/e2e/pages/adf/process-services/tasks-list.page.ts @@ -28,27 +28,27 @@ export class TasksListPage { return this.dataTable; } - getRowsDisplayedWithSameName(taskName): Promise { + getRowsDisplayedWithSameName(taskName: string): Promise { return this.dataTable.getRowsWithSameColumnValues('Name', taskName); } - checkContentIsDisplayed(taskName): Promise { - return this.dataTable.checkContentIsDisplayed('Name', taskName); + async checkContentIsDisplayed(taskName: string): Promise { + await this.dataTable.checkContentIsDisplayed('Name', taskName); } - checkContentIsNotDisplayed(taskName): Promise { - return this.dataTable.checkContentIsNotDisplayed('Name', taskName); + async checkContentIsNotDisplayed(taskName: string): Promise { + await this.dataTable.checkContentIsNotDisplayed('Name', taskName); } - checkRowIsSelected(taskName): Promise { - return this.dataTable.checkRowIsSelected('Name', taskName); + async checkRowIsSelected(taskName: string): Promise { + await this.dataTable.checkRowIsSelected('Name', taskName); } - selectRow(taskName): Promise { - return this.dataTable.selectRow('Name', taskName); + async selectRow(taskName: string): Promise { + await this.dataTable.selectRow('Name', taskName); } - getAllRowsNameColumn(): Promise { + getAllRowsNameColumn(): Promise { return this.dataTable.getAllRowsColumnValues('Name'); } diff --git a/e2e/process-services-cloud/about-process-services-cloud.component.e2e.ts b/e2e/process-services-cloud/about-process-services-cloud.component.e2e.ts index 955428d1b4..c3e4aef39a 100644 --- a/e2e/process-services-cloud/about-process-services-cloud.component.e2e.ts +++ b/e2e/process-services-cloud/about-process-services-cloud.component.e2e.ts @@ -24,15 +24,16 @@ describe('About Process Services Cloud', () => { const loginSSOPage = new LoginSSOPage(); const navigationBarPage = new NavigationBarPage(); const aboutPage = new AboutPage(); - let identityService: IdentityService; + + const apiService = new ApiService(); + const identityService = new IdentityService(apiService); + let testUser; - 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); - testUser = await identityService.createIdentityUserWithRole(apiService, [identityService.ROLES.ACTIVITI_USER, identityService.ROLES.ACTIVITI_DEVOPS]); - await loginSSOPage.loginSSOIdentityService(testUser.email, testUser.password); + testUser = await identityService.createIdentityUserWithRole( [identityService.ROLES.ACTIVITI_USER, identityService.ROLES.ACTIVITI_DEVOPS]); + await loginSSOPage.login(testUser.email, testUser.password); await apiService.login(testUser.email, testUser.password); await navigationBarPage.clickAboutButton(); }); diff --git a/e2e/process-services-cloud/apps-section-cloud.e2e.ts b/e2e/process-services-cloud/apps-section-cloud.e2e.ts index 41e74a5914..9dfd43f654 100644 --- a/e2e/process-services-cloud/apps-section-cloud.e2e.ts +++ b/e2e/process-services-cloud/apps-section-cloud.e2e.ts @@ -15,32 +15,33 @@ * limitations under the License. */ -import { ApiService, ApplicationsService, AppListCloudPage, IdentityService, LocalStorageUtil, LoginSSOPage } from '@alfresco/adf-testing'; +import { ApiService, Application, AppListCloudPage, IdentityService, LocalStorageUtil, LoginSSOPage } from '@alfresco/adf-testing'; import { browser } from 'protractor'; import { NavigationBarPage } from '../pages/adf/navigation-bar.page'; describe('Applications list', () => { + const simpleApp = browser.params.resources.ACTIVITI_CLOUD_APPS.SIMPLE_APP.name; + const loginSSOPage = new LoginSSOPage(); const navigationBarPage = new NavigationBarPage(); const appListCloudPage = new AppListCloudPage(); - const simpleApp = browser.params.resources.ACTIVITI_CLOUD_APPS.SIMPLE_APP.name; - let identityService: IdentityService; - let applicationsService: ApplicationsService; + const apiService = new ApiService(); + const applicationsService = new Application(apiService); + const identityService = new IdentityService(apiService); + let testUser; const appNames = []; let applications; - 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); - testUser = await identityService.createIdentityUserWithRole(apiService, [identityService.ROLES.ACTIVITI_USER, identityService.ROLES.ACTIVITI_DEVOPS]); + testUser = await identityService.createIdentityUserWithRole( [identityService.ROLES.ACTIVITI_USER, identityService.ROLES.ACTIVITI_DEVOPS]); - await loginSSOPage.loginSSOIdentityService(testUser.email, testUser.password); + await loginSSOPage.login(testUser.email, testUser.password); await apiService.login(testUser.email, testUser.password); - applicationsService = new ApplicationsService(apiService); + applications = await applicationsService.getApplicationsByStatus('RUNNING'); applications.list.entries.forEach(app => { @@ -48,6 +49,7 @@ describe('Applications list', () => { }); await LocalStorageUtil.setConfigField('alfresco-deployed-apps', '[]'); + await LocalStorageUtil.apiReset(); }); afterAll(async () => { @@ -60,6 +62,7 @@ describe('Applications list', () => { await appListCloudPage.checkApsContainer(); const list = await appListCloudPage.getNameOfTheApplications(); + await expect(JSON.stringify(list)).toEqual(JSON.stringify(appNames)); }); 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 6f2c705426..863ef2de3b 100644 --- a/e2e/process-services-cloud/edit-process-filters-component.e2e.ts +++ b/e2e/process-services-cloud/edit-process-filters-component.e2e.ts @@ -15,7 +15,13 @@ * limitations under the License. */ -import { ApiService, AppListCloudPage, GroupIdentityService, IdentityService, LoginSSOPage } from '@alfresco/adf-testing'; +import { + ApiService, + AppListCloudPage, + GroupIdentityService, + IdentityService, + LoginSSOPage +} from '@alfresco/adf-testing'; import { browser } from 'protractor'; import { ProcessCloudDemoPage } from '../pages/adf/demo-shell/process-services/process-cloud-demo.page'; import { TasksCloudDemoPage } from '../pages/adf/demo-shell/process-services/tasks-cloud-demo.page'; @@ -23,209 +29,208 @@ import { NavigationBarPage } from '../pages/adf/navigation-bar.page'; describe('Edit process filters cloud', () => { - describe('Edit process Filters', () => { - const loginSSOPage = new LoginSSOPage(); - const navigationBarPage = new NavigationBarPage(); - const appListCloudComponent = new AppListCloudPage(); - const tasksCloudDemoPage = new TasksCloudDemoPage(); - const processCloudDemoPage = new ProcessCloudDemoPage(); + const simpleApp = browser.params.resources.ACTIVITI_CLOUD_APPS.SIMPLE_APP.name; - const simpleApp = browser.params.resources.ACTIVITI_CLOUD_APPS.SIMPLE_APP.name; - let identityService: IdentityService; - let groupIdentityService: GroupIdentityService; - let testUser, groupInfo; - const apiService = new ApiService(browser.params.config.oauth2.clientId, browser.params.config.bpmHost, browser.params.config.oauth2.host, 'BPM'); + const loginSSOPage = new LoginSSOPage(); + const navigationBarPage = new NavigationBarPage(); + const appListCloudComponent = new AppListCloudPage(); + const tasksCloudDemoPage = new TasksCloudDemoPage(); + const processCloudDemoPage = new ProcessCloudDemoPage(); - 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.ACTIVITI_USER]); - groupInfo = await groupIdentityService.getGroupInfoByGroupName('hr'); - await identityService.addUserToGroup(testUser.idIdentityService, groupInfo.id); + const apiService = new ApiService(); + const identityService = new IdentityService(apiService); + const groupIdentityService = new GroupIdentityService(apiService); - await loginSSOPage.loginSSOIdentityService(testUser.email, testUser.password); - }); + let testUser, groupInfo; - afterAll(async () => { - await apiService.login(browser.params.identityAdmin.email, browser.params.identityAdmin.password); - await identityService.deleteIdentityUser(testUser.idIdentityService); - }); + beforeAll(async () => { + await apiService.login(browser.params.identityAdmin.email, browser.params.identityAdmin.password); - beforeEach(async () => { - await navigationBarPage.navigateToProcessServicesCloudPage(); - await appListCloudComponent.checkApsContainer(); - await appListCloudComponent.goToApp(simpleApp); - await tasksCloudDemoPage.taskListCloudComponent().checkTaskListIsLoaded(); - await processCloudDemoPage.processFilterCloudComponent.clickOnProcessFilters(); - const editProcessFilterCloud = processCloudDemoPage.editProcessFilterCloudComponent(); - await editProcessFilterCloud.openFilter(); - await editProcessFilterCloud.checkCustomiseFilterHeaderIsExpanded(); - await processCloudDemoPage.processFilterCloudComponent.clickAllProcessesFilter(); - }); + testUser = await identityService.createIdentityUserWithRole([identityService.ROLES.ACTIVITI_USER]); + groupInfo = await groupIdentityService.getGroupInfoByGroupName('hr'); + await identityService.addUserToGroup(testUser.idIdentityService, groupInfo.id); - it('[C291804] Delete Save and Save as actions should be displayed when clicking on custom filter header', async () => { - await processCloudDemoPage.processFilterCloudComponent.clickAllProcessesFilter(); - await expect(await processCloudDemoPage.processFilterCloudComponent.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(); - }); + await loginSSOPage.login(testUser.email, testUser.password); + }); - it('[C291805] New process filter is added when clicking Save As button', async () => { - await processCloudDemoPage.editProcessFilterCloudComponent().setSortFilterDropDown('Id'); - await processCloudDemoPage.processFilterCloudComponent.clickAllProcessesFilter(); + afterAll(async () => { + await apiService.login(browser.params.identityAdmin.email, browser.params.identityAdmin.password); + await identityService.deleteIdentityUser(testUser.idIdentityService); + }); - await processCloudDemoPage.editProcessFilterCloudComponent().clickSaveAsButton(); - await processCloudDemoPage.editProcessFilterCloudComponent().editProcessFilterDialog().setFilterName('New'); - await processCloudDemoPage.editProcessFilterCloudComponent().editProcessFilterDialog().clickOnSaveButton(); + beforeEach(async () => { + await navigationBarPage.navigateToProcessServicesCloudPage(); + await appListCloudComponent.checkApsContainer(); + await appListCloudComponent.goToApp(simpleApp); + await tasksCloudDemoPage.taskListCloudComponent().checkTaskListIsLoaded(); + await processCloudDemoPage.processFilterCloudComponent.clickOnProcessFilters(); + const editProcessFilterCloud = processCloudDemoPage.editProcessFilterCloudComponent(); + await editProcessFilterCloud.openFilter(); + await editProcessFilterCloud.checkCustomiseFilterHeaderIsExpanded(); + await processCloudDemoPage.processFilterCloudComponent.clickAllProcessesFilter(); + }); - await browser.driver.sleep(1000); + it('[C291804] Delete Save and Save as actions should be displayed when clicking on custom filter header', async () => { + await processCloudDemoPage.processFilterCloudComponent.clickAllProcessesFilter(); + await expect(await processCloudDemoPage.processFilterCloudComponent.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(); + }); - await expect(await processCloudDemoPage.processFilterCloudComponent.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.processFilterCloudComponent.clickAllProcessesFilter(); - await expect(await processCloudDemoPage.editProcessFilterCloudComponent().getSortFilterDropDownValue()).toEqual('StartDate'); - await processCloudDemoPage.processFilterCloudComponent.clickProcessFilter('custom-new'); - await expect(await processCloudDemoPage.editProcessFilterCloudComponent().getSortFilterDropDownValue()).toEqual('Id'); - await processCloudDemoPage.editProcessFilterCloudComponent().clickDeleteButton(); - }); + it('[C291805] New process filter is added when clicking Save As button', async () => { + await processCloudDemoPage.editProcessFilterCloudComponent().setSortFilterDropDown('Id'); + await processCloudDemoPage.processFilterCloudComponent.clickAllProcessesFilter(); - 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(); + await processCloudDemoPage.editProcessFilterCloudComponent().clickSaveAsButton(); + await processCloudDemoPage.editProcessFilterCloudComponent().editProcessFilterDialog().setFilterName('New'); + await processCloudDemoPage.editProcessFilterCloudComponent().editProcessFilterDialog().clickOnSaveButton(); - await browser.driver.sleep(1000); + await browser.driver.sleep(1000); - await processCloudDemoPage.editProcessFilterCloudComponent().openFilter(); - await processCloudDemoPage.editProcessFilterCloudComponent().checkCustomiseFilterHeaderIsExpanded(); - await expect(await processCloudDemoPage.processFilterCloudComponent.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(); + await expect(await processCloudDemoPage.processFilterCloudComponent.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.processFilterCloudComponent.clickAllProcessesFilter(); + await expect(await processCloudDemoPage.editProcessFilterCloudComponent().getSortFilterDropDownValue()).toEqual('StartDate'); + await processCloudDemoPage.processFilterCloudComponent.clickProcessFilter('custom-new'); + await expect(await processCloudDemoPage.editProcessFilterCloudComponent().getSortFilterDropDownValue()).toEqual('Id'); + await processCloudDemoPage.editProcessFilterCloudComponent().clickDeleteButton(); + }); - await processCloudDemoPage.editProcessFilterCloudComponent().editProcessFilterDialog().setFilterName('New'); - await processCloudDemoPage.editProcessFilterCloudComponent().editProcessFilterDialog().clickOnSaveButton(); - await processCloudDemoPage.editProcessFilterCloudComponent().openFilter(); - await processCloudDemoPage.editProcessFilterCloudComponent().checkCustomiseFilterHeaderIsExpanded(); + 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(); - await browser.driver.sleep(1000); + await browser.driver.sleep(1000); - await expect(await processCloudDemoPage.processFilterCloudComponent.getActiveFilterName()).toBe('New'); - await expect(await processCloudDemoPage.editProcessFilterCloudComponent().getSortFilterDropDownValue()).toEqual('Name'); - await processCloudDemoPage.editProcessFilterCloudComponent().clickDeleteButton(); + await processCloudDemoPage.editProcessFilterCloudComponent().openFilter(); + await processCloudDemoPage.editProcessFilterCloudComponent().checkCustomiseFilterHeaderIsExpanded(); + await expect(await processCloudDemoPage.processFilterCloudComponent.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(); - await browser.driver.sleep(1000); + await processCloudDemoPage.editProcessFilterCloudComponent().editProcessFilterDialog().setFilterName('New'); + await processCloudDemoPage.editProcessFilterCloudComponent().editProcessFilterDialog().clickOnSaveButton(); + await processCloudDemoPage.editProcessFilterCloudComponent().openFilter(); + await processCloudDemoPage.editProcessFilterCloudComponent().checkCustomiseFilterHeaderIsExpanded(); - await processCloudDemoPage.processFilterCloudComponent.clickProcessFilter('custom-new'); - await processCloudDemoPage.editProcessFilterCloudComponent().openFilter(); - await processCloudDemoPage.editProcessFilterCloudComponent().checkCustomiseFilterHeaderIsExpanded(); - await expect(await processCloudDemoPage.editProcessFilterCloudComponent().getSortFilterDropDownValue()).toEqual('Id'); - await processCloudDemoPage.editProcessFilterCloudComponent().clickDeleteButton(); - }); + await browser.driver.sleep(1000); - it('[C291807] A process filter is overrided when clicking on save button', async () => { - await processCloudDemoPage.editProcessFilterCloudComponent().setSortFilterDropDown('Id'); - await processCloudDemoPage.processFilterCloudComponent.clickAllProcessesFilter(); - await processCloudDemoPage.editProcessFilterCloudComponent().clickSaveAsButton(); - await processCloudDemoPage.editProcessFilterCloudComponent().editProcessFilterDialog().setFilterName('New'); - await processCloudDemoPage.editProcessFilterCloudComponent().editProcessFilterDialog().clickOnSaveButton(); + await expect(await processCloudDemoPage.processFilterCloudComponent.getActiveFilterName()).toBe('New'); + await expect(await processCloudDemoPage.editProcessFilterCloudComponent().getSortFilterDropDownValue()).toEqual('Name'); + await processCloudDemoPage.editProcessFilterCloudComponent().clickDeleteButton(); - await browser.driver.sleep(1000); + await browser.driver.sleep(1000); - await expect(await processCloudDemoPage.processFilterCloudComponent.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(); + await processCloudDemoPage.processFilterCloudComponent.clickProcessFilter('custom-new'); + await processCloudDemoPage.editProcessFilterCloudComponent().openFilter(); + await processCloudDemoPage.editProcessFilterCloudComponent().checkCustomiseFilterHeaderIsExpanded(); + await expect(await processCloudDemoPage.editProcessFilterCloudComponent().getSortFilterDropDownValue()).toEqual('Id'); + await processCloudDemoPage.editProcessFilterCloudComponent().clickDeleteButton(); + }); - await browser.driver.sleep(1000); + it('[C291807] A process filter is overrided when clicking on save button', async () => { + await processCloudDemoPage.editProcessFilterCloudComponent().setSortFilterDropDown('Id'); + await processCloudDemoPage.processFilterCloudComponent.clickAllProcessesFilter(); + await processCloudDemoPage.editProcessFilterCloudComponent().clickSaveAsButton(); + await processCloudDemoPage.editProcessFilterCloudComponent().editProcessFilterDialog().setFilterName('New'); + await processCloudDemoPage.editProcessFilterCloudComponent().editProcessFilterDialog().clickOnSaveButton(); - await expect(await processCloudDemoPage.processFilterCloudComponent.getActiveFilterName()).toBe('New'); - await expect(await processCloudDemoPage.editProcessFilterCloudComponent().getSortFilterDropDownValue()).toEqual('Name'); - await processCloudDemoPage.editProcessFilterCloudComponent().clickDeleteButton(); - }); + await browser.driver.sleep(1000); - it('[C291808] A process filter is deleted when clicking on delete button', async () => { - await processCloudDemoPage.editProcessFilterCloudComponent().setSortFilterDropDown('Id'); - await processCloudDemoPage.processFilterCloudComponent.clickAllProcessesFilter(); - await processCloudDemoPage.editProcessFilterCloudComponent().clickSaveAsButton(); - await processCloudDemoPage.editProcessFilterCloudComponent().editProcessFilterDialog().setFilterName('New'); + await expect(await processCloudDemoPage.processFilterCloudComponent.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(); - await browser.driver.sleep(1000); + await browser.driver.sleep(1000); - await processCloudDemoPage.editProcessFilterCloudComponent().editProcessFilterDialog().clickOnSaveButton(); - await processCloudDemoPage.editProcessFilterCloudComponent().openFilter(); - await expect(await processCloudDemoPage.processFilterCloudComponent.getActiveFilterName()).toBe('New'); - await expect(await processCloudDemoPage.editProcessFilterCloudComponent().getSortFilterDropDownValue()).toEqual('Id'); - await processCloudDemoPage.editProcessFilterCloudComponent().clickDeleteButton(); + await expect(await processCloudDemoPage.processFilterCloudComponent.getActiveFilterName()).toBe('New'); + await expect(await processCloudDemoPage.editProcessFilterCloudComponent().getSortFilterDropDownValue()).toEqual('Name'); + await processCloudDemoPage.editProcessFilterCloudComponent().clickDeleteButton(); + }); - await browser.driver.sleep(1000); + it('[C291808] A process filter is deleted when clicking on delete button', async () => { + await processCloudDemoPage.editProcessFilterCloudComponent().setSortFilterDropDown('Id'); + await processCloudDemoPage.processFilterCloudComponent.clickAllProcessesFilter(); + await processCloudDemoPage.editProcessFilterCloudComponent().clickSaveAsButton(); + await processCloudDemoPage.editProcessFilterCloudComponent().editProcessFilterDialog().setFilterName('New'); - await expect(await processCloudDemoPage.processFilterCloudComponent.getActiveFilterName()).toBe('All Processes'); - await processCloudDemoPage.processFilterCloudComponent.checkProcessFilterNotDisplayed('New'); - }); + await browser.driver.sleep(1000); - it('[C291810] Process filter should not be created when process filter dialog is closed', async () => { - await processCloudDemoPage.editProcessFilterCloudComponent().setSortFilterDropDown('Id'); - await processCloudDemoPage.processFilterCloudComponent.clickAllProcessesFilter(); - 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.processFilterCloudComponent.checkProcessFilterNotDisplayed('Cancel'); - await expect(await processCloudDemoPage.processFilterCloudComponent.getActiveFilterName()).toEqual('All Processes'); - await processCloudDemoPage.processFilterCloudComponent.clickRunningProcessesFilter(); - await expect(await processCloudDemoPage.processFilterCloudComponent.getActiveFilterName()).toEqual('Running Processes'); - await processCloudDemoPage.editProcessFilterCloudComponent().openFilter(); - await processCloudDemoPage.processFilterCloudComponent.clickAllProcessesFilter(); - await expect(await processCloudDemoPage.processFilterCloudComponent.getActiveFilterName()).toEqual('All Processes'); - await expect(await processCloudDemoPage.editProcessFilterCloudComponent().getSortFilterDropDownValue()).toEqual('StartDate'); - await processCloudDemoPage.editProcessFilterCloudComponent().openFilter(); - }); + await processCloudDemoPage.editProcessFilterCloudComponent().editProcessFilterDialog().clickOnSaveButton(); + await processCloudDemoPage.editProcessFilterCloudComponent().openFilter(); + await expect(await processCloudDemoPage.processFilterCloudComponent.getActiveFilterName()).toBe('New'); + await expect(await processCloudDemoPage.editProcessFilterCloudComponent().getSortFilterDropDownValue()).toEqual('Id'); + await processCloudDemoPage.editProcessFilterCloudComponent().clickDeleteButton(); - it('[C291811] Save button of process filter dialog should be disabled when process name is empty', async () => { - await processCloudDemoPage.editProcessFilterCloudComponent().setSortFilterDropDown('Id'); - await processCloudDemoPage.processFilterCloudComponent.clickAllProcessesFilter(); - await processCloudDemoPage.editProcessFilterCloudComponent().clickSaveAsButton(); - await processCloudDemoPage.editProcessFilterCloudComponent().editProcessFilterDialog().clearFilterName(); + await browser.driver.sleep(1000); - 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 expect(await processCloudDemoPage.processFilterCloudComponent.getActiveFilterName()).toBe('All Processes'); + await processCloudDemoPage.processFilterCloudComponent.checkProcessFilterNotDisplayed('New'); + }); - 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('[C291810] Process filter should not be created when process filter dialog is closed', async () => { + await processCloudDemoPage.editProcessFilterCloudComponent().setSortFilterDropDown('Id'); + await processCloudDemoPage.processFilterCloudComponent.clickAllProcessesFilter(); + 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.processFilterCloudComponent.checkProcessFilterNotDisplayed('Cancel'); + await expect(await processCloudDemoPage.processFilterCloudComponent.getActiveFilterName()).toEqual('All Processes'); + await processCloudDemoPage.processFilterCloudComponent.clickRunningProcessesFilter(); + await expect(await processCloudDemoPage.processFilterCloudComponent.getActiveFilterName()).toEqual('Running Processes'); + await processCloudDemoPage.editProcessFilterCloudComponent().openFilter(); + await processCloudDemoPage.processFilterCloudComponent.clickAllProcessesFilter(); + await expect(await processCloudDemoPage.processFilterCloudComponent.getActiveFilterName()).toEqual('All Processes'); + await expect(await processCloudDemoPage.editProcessFilterCloudComponent().getSortFilterDropDownValue()).toEqual('StartDate'); + await processCloudDemoPage.editProcessFilterCloudComponent().openFilter(); + }); - it('[C291809] Process filter dialog is displayed when clicking on Save As button', async () => { - await processCloudDemoPage.editProcessFilterCloudComponent().setSortFilterDropDown('Name'); - await processCloudDemoPage.processFilterCloudComponent.clickAllProcessesFilter(); - 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(); - }); - }); + it('[C291811] Save button of process filter dialog should be disabled when process name is empty', async () => { + await processCloudDemoPage.editProcessFilterCloudComponent().setSortFilterDropDown('Id'); + await processCloudDemoPage.processFilterCloudComponent.clickAllProcessesFilter(); + await processCloudDemoPage.editProcessFilterCloudComponent().clickSaveAsButton(); + await processCloudDemoPage.editProcessFilterCloudComponent().editProcessFilterDialog().clearFilterName(); + + 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('[C291809] Process filter dialog is displayed when clicking on Save As button', async () => { + await processCloudDemoPage.editProcessFilterCloudComponent().setSortFilterDropDown('Name'); + await processCloudDemoPage.processFilterCloudComponent.clickAllProcessesFilter(); + 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 53ce515876..9fab873e24 100644 --- a/e2e/process-services-cloud/edit-task-filters-component.e2e.ts +++ b/e2e/process-services-cloud/edit-task-filters-component.e2e.ts @@ -30,259 +30,258 @@ import { TasksCloudDemoPage } from '../pages/adf/demo-shell/process-services/tas describe('Edit task filters cloud', () => { - describe('Edit Task Filters', () => { - const loginSSOPage = new LoginSSOPage(); - const navigationBarPage = new NavigationBarPage(); - const appListCloudComponent = new AppListCloudPage(); - const tasksCloudDemoPage = new TasksCloudDemoPage(); - let tasksService: TasksService; - let identityService: IdentityService; - let groupIdentityService: GroupIdentityService; - let testUser, groupInfo; - const apiService = new ApiService(browser.params.config.oauth2.clientId, browser.params.config.bpmHost, browser.params.config.oauth2.host, 'BPM'); + const simpleApp = browser.params.resources.ACTIVITI_CLOUD_APPS.SIMPLE_APP.name; - const simpleApp = browser.params.resources.ACTIVITI_CLOUD_APPS.SIMPLE_APP.name; - const completedTaskName = StringUtil.generateRandomString(), - assignedTaskName = StringUtil.generateRandomString(); + const loginSSOPage = new LoginSSOPage(); + const navigationBarPage = new NavigationBarPage(); + const appListCloudComponent = new AppListCloudPage(); + const tasksCloudDemoPage = new TasksCloudDemoPage(); - beforeAll(async () => { - await apiService.login(browser.params.identityAdmin.email, browser.params.identityAdmin.password); - identityService = new IdentityService(apiService); - groupIdentityService = new GroupIdentityService(apiService); - tasksService = new TasksService(apiService); - testUser = await identityService.createIdentityUserWithRole(apiService, [identityService.ROLES.ACTIVITI_USER]); - groupInfo = await groupIdentityService.getGroupInfoByGroupName('hr'); - await identityService.addUserToGroup(testUser.idIdentityService, groupInfo.id); + const apiService = new ApiService(); + const identityService = new IdentityService(apiService); + const groupIdentityService = new GroupIdentityService(apiService); + const tasksService = new TasksService(apiService); - await apiService.login(testUser.email, testUser.password); - const assignedTask = await tasksService.createStandaloneTask(assignedTaskName, simpleApp); - await tasksService.claimTask(assignedTask.entry.id, simpleApp); - await tasksService.createAndCompleteTask(completedTaskName, simpleApp); + let testUser, groupInfo; - await loginSSOPage.loginSSOIdentityService(testUser.email, testUser.password); - }); + const completedTaskName = StringUtil.generateRandomString(), + assignedTaskName = StringUtil.generateRandomString(); - afterAll(async () => { - await apiService.login(browser.params.identityAdmin.email, browser.params.identityAdmin.password); - await identityService.deleteIdentityUser(testUser.idIdentityService); - }); + beforeAll(async () => { + await apiService.login(browser.params.identityAdmin.email, browser.params.identityAdmin.password); - beforeEach(async () => { - await navigationBarPage.navigateToProcessServicesCloudPage(); - await appListCloudComponent.checkApsContainer(); - await appListCloudComponent.goToApp(simpleApp); - }); + testUser = await identityService.createIdentityUserWithRole([identityService.ROLES.ACTIVITI_USER]); + groupInfo = await groupIdentityService.getGroupInfoByGroupName('hr'); + await identityService.addUserToGroup(testUser.idIdentityService, groupInfo.id); - afterEach(async () => { - await tasksCloudDemoPage.taskFilterCloudComponent.clickTaskFilter('my-tasks'); - }); + await apiService.login(testUser.email, testUser.password); + const assignedTask = await tasksService.createStandaloneTask(assignedTaskName, simpleApp); + await tasksService.claimTask(assignedTask.entry.id, simpleApp); + await tasksService.createAndCompleteTask(completedTaskName, simpleApp); - it('[C291785] All the filters property should be set up accordingly with the Query Param', async () => { - await tasksCloudDemoPage.editTaskFilterCloudComponent().openFilter(); - await tasksCloudDemoPage.taskFilterCloudComponent.clickTaskFilter('my-tasks'); - await expect(await tasksCloudDemoPage.taskFilterCloudComponent.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); + await loginSSOPage.login(testUser.email, testUser.password); + }); - await tasksCloudDemoPage.taskFilterCloudComponent.clickTaskFilter('completed-tasks'); - await expect(await tasksCloudDemoPage.taskFilterCloudComponent.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(); - }); + afterAll(async () => { + await apiService.login(browser.params.identityAdmin.email, browser.params.identityAdmin.password); + await identityService.deleteIdentityUser(testUser.idIdentityService); + }); - it('[C306896] Delete Save and Save as actions should be displayed when clicking on custom filter header', async () => { - await tasksCloudDemoPage.taskFilterCloudComponent.clickTaskFilter('my-tasks'); - await tasksCloudDemoPage.editTaskFilterCloudComponent().openFilter(); - await tasksCloudDemoPage.taskFilterCloudComponent.clickTaskFilter('my-tasks'); - await expect(await tasksCloudDemoPage.taskFilterCloudComponent.getActiveFilterName()).toBe('My Tasks'); - const editTaskFilterCloudComponent = tasksCloudDemoPage.editTaskFilterCloudComponent(); + beforeEach(async () => { + await navigationBarPage.navigateToProcessServicesCloudPage(); + await appListCloudComponent.checkApsContainer(); + await appListCloudComponent.goToApp(simpleApp); + }); - await editTaskFilterCloudComponent.checkSaveButtonIsDisplayed(); - await editTaskFilterCloudComponent.checkSaveAsButtonIsDisplayed(); - await editTaskFilterCloudComponent.checkDeleteButtonIsDisplayed(); + afterEach(async () => { + await tasksCloudDemoPage.taskFilterCloudComponent.clickTaskFilter('my-tasks'); + }); - 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('[C291785] All the filters property should be set up accordingly with the Query Param', async () => { + await tasksCloudDemoPage.editTaskFilterCloudComponent().openFilter(); + await tasksCloudDemoPage.taskFilterCloudComponent.clickTaskFilter('my-tasks'); + await expect(await tasksCloudDemoPage.taskFilterCloudComponent.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); - it('[C291795] New filter is added when clicking Save As button', async () => { - await tasksCloudDemoPage.taskFilterCloudComponent.clickTaskFilter('my-tasks'); + await tasksCloudDemoPage.taskFilterCloudComponent.clickTaskFilter('completed-tasks'); + await expect(await tasksCloudDemoPage.taskFilterCloudComponent.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(); + }); - const editTaskFilterCloudComponent = tasksCloudDemoPage.editTaskFilterCloudComponent(); - await editTaskFilterCloudComponent.openFilter(); - await editTaskFilterCloudComponent.setSortFilterDropDown('Id'); + it('[C306896] Delete Save and Save as actions should be displayed when clicking on custom filter header', async () => { + await tasksCloudDemoPage.taskFilterCloudComponent.clickTaskFilter('my-tasks'); + await tasksCloudDemoPage.editTaskFilterCloudComponent().openFilter(); + await tasksCloudDemoPage.taskFilterCloudComponent.clickTaskFilter('my-tasks'); + await expect(await tasksCloudDemoPage.taskFilterCloudComponent.getActiveFilterName()).toBe('My Tasks'); + const editTaskFilterCloudComponent = tasksCloudDemoPage.editTaskFilterCloudComponent(); - await tasksCloudDemoPage.taskFilterCloudComponent.clickTaskFilter('my-tasks'); + await editTaskFilterCloudComponent.checkSaveButtonIsDisplayed(); + await editTaskFilterCloudComponent.checkSaveAsButtonIsDisplayed(); + await editTaskFilterCloudComponent.checkDeleteButtonIsDisplayed(); - await tasksCloudDemoPage.editTaskFilterCloudComponent().clickSaveAsButton(); + 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(); + }); - const editTaskFilterDialog = tasksCloudDemoPage.editTaskFilterCloudComponent().editTaskFilterDialog(); - await editTaskFilterDialog.setFilterName('New'); - await editTaskFilterDialog.clickOnSaveButton(); + it('[C291795] New filter is added when clicking Save As button', async () => { + await tasksCloudDemoPage.taskFilterCloudComponent.clickTaskFilter('my-tasks'); - await expect(await tasksCloudDemoPage.taskFilterCloudComponent.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.taskFilterCloudComponent.clickTaskFilter('my-tasks'); - await expect(await tasksCloudDemoPage.editTaskFilterCloudComponent().getSortFilterDropDownValue()).toEqual('CreatedDate'); - await tasksCloudDemoPage.taskFilterCloudComponent.clickTaskFilter('custom-new'); - await expect(await tasksCloudDemoPage.editTaskFilterCloudComponent().getSortFilterDropDownValue()).toEqual('Id'); - await tasksCloudDemoPage.editTaskFilterCloudComponent().clickDeleteButton(); - }); + const editTaskFilterCloudComponent = tasksCloudDemoPage.editTaskFilterCloudComponent(); + await editTaskFilterCloudComponent.openFilter(); + await editTaskFilterCloudComponent.setSortFilterDropDown('Id'); - it('[C291796] Two filters with same name can be created when clicking the Save As button', async () => { - await tasksCloudDemoPage.taskFilterCloudComponent.clickTaskFilter('my-tasks'); + await tasksCloudDemoPage.taskFilterCloudComponent.clickTaskFilter('my-tasks'); - const editTaskFilterCloudComponent = tasksCloudDemoPage.editTaskFilterCloudComponent(); - await editTaskFilterCloudComponent.openFilter(); - await editTaskFilterCloudComponent.setSortFilterDropDown('Id'); + await tasksCloudDemoPage.editTaskFilterCloudComponent().clickSaveAsButton(); - await tasksCloudDemoPage.taskFilterCloudComponent.clickTaskFilter('my-tasks'); + const editTaskFilterDialog = tasksCloudDemoPage.editTaskFilterCloudComponent().editTaskFilterDialog(); + await editTaskFilterDialog.setFilterName('New'); + await editTaskFilterDialog.clickOnSaveButton(); - await tasksCloudDemoPage.editTaskFilterCloudComponent().clickSaveAsButton(); + await expect(await tasksCloudDemoPage.taskFilterCloudComponent.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.taskFilterCloudComponent.clickTaskFilter('my-tasks'); + await expect(await tasksCloudDemoPage.editTaskFilterCloudComponent().getSortFilterDropDownValue()).toEqual('CreatedDate'); + await tasksCloudDemoPage.taskFilterCloudComponent.clickTaskFilter('custom-new'); + await expect(await tasksCloudDemoPage.editTaskFilterCloudComponent().getSortFilterDropDownValue()).toEqual('Id'); + await tasksCloudDemoPage.editTaskFilterCloudComponent().clickDeleteButton(); + }); - const editTaskFilterDialog = editTaskFilterCloudComponent.editTaskFilterDialog(); - await editTaskFilterDialog.setFilterName('New'); - await editTaskFilterDialog.clickOnSaveButton(); + it('[C291796] Two filters with same name can be created when clicking the Save As button', async () => { + await tasksCloudDemoPage.taskFilterCloudComponent.clickTaskFilter('my-tasks'); - await expect(await tasksCloudDemoPage.taskFilterCloudComponent.getActiveFilterName()).toBe('New'); - await tasksCloudDemoPage.editTaskFilterCloudComponent().openFilter(); + const editTaskFilterCloudComponent = tasksCloudDemoPage.editTaskFilterCloudComponent(); + await editTaskFilterCloudComponent.openFilter(); + await editTaskFilterCloudComponent.setSortFilterDropDown('Id'); - 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 tasksCloudDemoPage.taskFilterCloudComponent.clickTaskFilter('my-tasks'); - await expect(await tasksCloudDemoPage.taskFilterCloudComponent.getActiveFilterName()).toBe('New'); - await tasksCloudDemoPage.editTaskFilterCloudComponent().openFilter(); - await expect(await tasksCloudDemoPage.editTaskFilterCloudComponent().getSortFilterDropDownValue()).toEqual('Priority'); - await tasksCloudDemoPage.editTaskFilterCloudComponent().clickDeleteButton(); - await tasksCloudDemoPage.taskFilterCloudComponent.clickTaskFilter('custom-new'); + await tasksCloudDemoPage.editTaskFilterCloudComponent().clickSaveAsButton(); - await tasksCloudDemoPage.editTaskFilterCloudComponent().openFilter(); - await expect(await tasksCloudDemoPage.editTaskFilterCloudComponent().getSortFilterDropDownValue()).toEqual('Id'); - await tasksCloudDemoPage.editTaskFilterCloudComponent().clickDeleteButton(); - }); + const editTaskFilterDialog = editTaskFilterCloudComponent.editTaskFilterDialog(); + await editTaskFilterDialog.setFilterName('New'); + await editTaskFilterDialog.clickOnSaveButton(); - it('[C291797] A filter is overrided when clicking on save button', async () => { - await tasksCloudDemoPage.taskFilterCloudComponent.clickTaskFilter('my-tasks'); + await expect(await tasksCloudDemoPage.taskFilterCloudComponent.getActiveFilterName()).toBe('New'); + await tasksCloudDemoPage.editTaskFilterCloudComponent().openFilter(); - const editTaskFilterCloudComponent = tasksCloudDemoPage.editTaskFilterCloudComponent(); - await editTaskFilterCloudComponent.openFilter(); - await editTaskFilterCloudComponent.setSortFilterDropDown('Id'); + 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 tasksCloudDemoPage.taskFilterCloudComponent.clickTaskFilter('my-tasks'); - await tasksCloudDemoPage.editTaskFilterCloudComponent().clickSaveAsButton(); + await expect(await tasksCloudDemoPage.taskFilterCloudComponent.getActiveFilterName()).toBe('New'); + await tasksCloudDemoPage.editTaskFilterCloudComponent().openFilter(); + await expect(await tasksCloudDemoPage.editTaskFilterCloudComponent().getSortFilterDropDownValue()).toEqual('Priority'); + await tasksCloudDemoPage.editTaskFilterCloudComponent().clickDeleteButton(); + await tasksCloudDemoPage.taskFilterCloudComponent.clickTaskFilter('custom-new'); - const editTaskFilterDialog = await tasksCloudDemoPage.editTaskFilterCloudComponent().editTaskFilterDialog(); - await editTaskFilterDialog.setFilterName('New'); - await editTaskFilterDialog.clickOnSaveButton(); + await tasksCloudDemoPage.editTaskFilterCloudComponent().openFilter(); + await expect(await tasksCloudDemoPage.editTaskFilterCloudComponent().getSortFilterDropDownValue()).toEqual('Id'); + await tasksCloudDemoPage.editTaskFilterCloudComponent().clickDeleteButton(); + }); - await expect(await tasksCloudDemoPage.taskFilterCloudComponent.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(); + it('[C291797] A filter is overrided when clicking on save button', async () => { + await tasksCloudDemoPage.taskFilterCloudComponent.clickTaskFilter('my-tasks'); - await expect(await tasksCloudDemoPage.taskFilterCloudComponent.getActiveFilterName()).toBe('New'); - await expect(await tasksCloudDemoPage.editTaskFilterCloudComponent().getSortFilterDropDownValue()).toEqual('Name'); - await tasksCloudDemoPage.editTaskFilterCloudComponent().clickDeleteButton(); - }); + const editTaskFilterCloudComponent = tasksCloudDemoPage.editTaskFilterCloudComponent(); + await editTaskFilterCloudComponent.openFilter(); + await editTaskFilterCloudComponent.setSortFilterDropDown('Id'); - it('[C291798] A filter is deleted when clicking on delete button', async () => { - await tasksCloudDemoPage.taskFilterCloudComponent.clickTaskFilter('my-tasks'); + await tasksCloudDemoPage.taskFilterCloudComponent.clickTaskFilter('my-tasks'); + await tasksCloudDemoPage.editTaskFilterCloudComponent().clickSaveAsButton(); - const editTaskFilterCloudComponent = tasksCloudDemoPage.editTaskFilterCloudComponent(); - await editTaskFilterCloudComponent.openFilter(); - await editTaskFilterCloudComponent.setSortFilterDropDown('Id'); + const editTaskFilterDialog = await tasksCloudDemoPage.editTaskFilterCloudComponent().editTaskFilterDialog(); + await editTaskFilterDialog.setFilterName('New'); + await editTaskFilterDialog.clickOnSaveButton(); - await tasksCloudDemoPage.taskFilterCloudComponent.clickTaskFilter('my-tasks'); - await tasksCloudDemoPage.editTaskFilterCloudComponent().clickSaveAsButton(); + await expect(await tasksCloudDemoPage.taskFilterCloudComponent.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(); - const editTaskFilterDialog = await tasksCloudDemoPage.editTaskFilterCloudComponent().editTaskFilterDialog(); - await editTaskFilterDialog.setFilterName('New'); - await editTaskFilterDialog.clickOnSaveButton(); + await expect(await tasksCloudDemoPage.taskFilterCloudComponent.getActiveFilterName()).toBe('New'); + await expect(await tasksCloudDemoPage.editTaskFilterCloudComponent().getSortFilterDropDownValue()).toEqual('Name'); + await tasksCloudDemoPage.editTaskFilterCloudComponent().clickDeleteButton(); + }); - await expect(await tasksCloudDemoPage.taskFilterCloudComponent.getActiveFilterName()).toBe('New'); - await tasksCloudDemoPage.editTaskFilterCloudComponent().openFilter(); - await expect(await tasksCloudDemoPage.editTaskFilterCloudComponent().getSortFilterDropDownValue()).toEqual('Id'); - await tasksCloudDemoPage.editTaskFilterCloudComponent().clickDeleteButton(); + it('[C291798] A filter is deleted when clicking on delete button', async () => { + await tasksCloudDemoPage.taskFilterCloudComponent.clickTaskFilter('my-tasks'); - await expect(await tasksCloudDemoPage.taskFilterCloudComponent.getActiveFilterName()).toBe('My Tasks'); - await tasksCloudDemoPage.taskFilterCloudComponent.checkTaskFilterNotDisplayed('New'); - }); + const editTaskFilterCloudComponent = tasksCloudDemoPage.editTaskFilterCloudComponent(); + await editTaskFilterCloudComponent.openFilter(); + await editTaskFilterCloudComponent.setSortFilterDropDown('Id'); - it('[C291800] Task filter should not be created when task filter dialog is closed', async () => { - await tasksCloudDemoPage.taskFilterCloudComponent.clickTaskFilter('my-tasks'); + await tasksCloudDemoPage.taskFilterCloudComponent.clickTaskFilter('my-tasks'); + await tasksCloudDemoPage.editTaskFilterCloudComponent().clickSaveAsButton(); - const editTaskFilterCloudComponent = tasksCloudDemoPage.editTaskFilterCloudComponent(); - await editTaskFilterCloudComponent.openFilter(); - await editTaskFilterCloudComponent.setSortFilterDropDown('Priority'); + const editTaskFilterDialog = await tasksCloudDemoPage.editTaskFilterCloudComponent().editTaskFilterDialog(); + await editTaskFilterDialog.setFilterName('New'); + await editTaskFilterDialog.clickOnSaveButton(); - 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.taskFilterCloudComponent.checkTaskFilterNotDisplayed('Cancel'); - await expect(await tasksCloudDemoPage.taskFilterCloudComponent.getActiveFilterName()).toEqual('My Tasks'); - await tasksCloudDemoPage.taskFilterCloudComponent.clickTaskFilter('completed-tasks'); - await tasksCloudDemoPage.taskFilterCloudComponent.clickTaskFilter('my-tasks'); - await tasksCloudDemoPage.editTaskFilterCloudComponent().openFilter(); - await expect(await tasksCloudDemoPage.taskFilterCloudComponent.getActiveFilterName()).toBe('My Tasks'); - await expect(await tasksCloudDemoPage.editTaskFilterCloudComponent().getSortFilterDropDownValue()).toEqual('CreatedDate'); - await tasksCloudDemoPage.editTaskFilterCloudComponent().openFilter(); - }); + await expect(await tasksCloudDemoPage.taskFilterCloudComponent.getActiveFilterName()).toBe('New'); + await tasksCloudDemoPage.editTaskFilterCloudComponent().openFilter(); + await expect(await tasksCloudDemoPage.editTaskFilterCloudComponent().getSortFilterDropDownValue()).toEqual('Id'); + await tasksCloudDemoPage.editTaskFilterCloudComponent().clickDeleteButton(); - it('[C291801] Save button of task filter dialog should be disabled when task name is empty', async () => { - await tasksCloudDemoPage.taskFilterCloudComponent.clickTaskFilter('my-tasks'); + await expect(await tasksCloudDemoPage.taskFilterCloudComponent.getActiveFilterName()).toBe('My Tasks'); + await tasksCloudDemoPage.taskFilterCloudComponent.checkTaskFilterNotDisplayed('New'); + }); - const editTaskFilterCloudComponent = tasksCloudDemoPage.editTaskFilterCloudComponent(); - await editTaskFilterCloudComponent.openFilter(); - await editTaskFilterCloudComponent.setSortFilterDropDown('Id'); + it('[C291800] Task filter should not be created when task filter dialog is closed', async () => { + await tasksCloudDemoPage.taskFilterCloudComponent.clickTaskFilter('my-tasks'); - await expect(await tasksCloudDemoPage.editTaskFilterCloudComponent().getSortFilterDropDownValue()).toEqual('Id'); - await tasksCloudDemoPage.editTaskFilterCloudComponent().clickSaveAsButton(); + const editTaskFilterCloudComponent = tasksCloudDemoPage.editTaskFilterCloudComponent(); + await editTaskFilterCloudComponent.openFilter(); + await editTaskFilterCloudComponent.setSortFilterDropDown('Priority'); - await expect(await tasksCloudDemoPage.editTaskFilterCloudComponent().editTaskFilterDialog().getFilterName()).toEqual('My Tasks'); + 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.taskFilterCloudComponent.checkTaskFilterNotDisplayed('Cancel'); + await expect(await tasksCloudDemoPage.taskFilterCloudComponent.getActiveFilterName()).toEqual('My Tasks'); + await tasksCloudDemoPage.taskFilterCloudComponent.clickTaskFilter('completed-tasks'); + await tasksCloudDemoPage.taskFilterCloudComponent.clickTaskFilter('my-tasks'); + await tasksCloudDemoPage.editTaskFilterCloudComponent().openFilter(); + await expect(await tasksCloudDemoPage.taskFilterCloudComponent.getActiveFilterName()).toBe('My Tasks'); + await expect(await tasksCloudDemoPage.editTaskFilterCloudComponent().getSortFilterDropDownValue()).toEqual('CreatedDate'); + await tasksCloudDemoPage.editTaskFilterCloudComponent().openFilter(); + }); - const tasksCloud = tasksCloudDemoPage.editTaskFilterCloudComponent(); - await tasksCloud.editTaskFilterDialog().clearFilterName(); + it('[C291801] Save button of task filter dialog should be disabled when task name is empty', async () => { + await tasksCloudDemoPage.taskFilterCloudComponent.clickTaskFilter('my-tasks'); - await expect(await tasksCloudDemoPage.editTaskFilterCloudComponent().editTaskFilterDialog().getFilterName()).toEqual(''); + const editTaskFilterCloudComponent = tasksCloudDemoPage.editTaskFilterCloudComponent(); + await editTaskFilterCloudComponent.openFilter(); + await editTaskFilterCloudComponent.setSortFilterDropDown('Id'); - await expect(await tasksCloudDemoPage.editTaskFilterCloudComponent().editTaskFilterDialog().checkSaveButtonIsEnabled()).toEqual(false); - await expect(await tasksCloudDemoPage.editTaskFilterCloudComponent().editTaskFilterDialog().checkCancelButtonIsEnabled()).toEqual(true); - await tasksCloudDemoPage.editTaskFilterCloudComponent().editTaskFilterDialog().clickOnCancelButton(); - }); + await expect(await tasksCloudDemoPage.editTaskFilterCloudComponent().getSortFilterDropDownValue()).toEqual('Id'); + await tasksCloudDemoPage.editTaskFilterCloudComponent().clickSaveAsButton(); - it('[C291799] Task filter dialog is displayed when clicking on Save As button', async () => { - await tasksCloudDemoPage.taskFilterCloudComponent.clickTaskFilter('my-tasks'); - 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(); - }); - }); + 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', async () => { + await tasksCloudDemoPage.taskFilterCloudComponent.clickTaskFilter('my-tasks'); + 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/dropdown-widget.e2e.ts b/e2e/process-services-cloud/form-field/dropdown-widget.e2e.ts index e09446ae70..6b40856166 100644 --- a/e2e/process-services-cloud/form-field/dropdown-widget.e2e.ts +++ b/e2e/process-services-cloud/form-field/dropdown-widget.e2e.ts @@ -26,6 +26,7 @@ import { TasksCloudDemoPage } from '../../pages/adf/demo-shell/process-services/ import { NavigationBarPage } from '../../pages/adf/navigation-bar.page'; describe('Form Field Component - Dropdown Widget', () => { + const loginSSOPage = new LoginSSOPage(); const navigationBarPage = new NavigationBarPage(); const appListCloudComponent = new AppListCloudPage(); @@ -34,49 +35,41 @@ describe('Form Field Component - Dropdown Widget', () => { const notificationHistoryPage = new NotificationHistoryPage(); const taskHeaderCloudPage = new TaskHeaderCloudPage(); const widget = new ProcessCloudWidgetPage(); - const dropdown = widget.dropdown(); - const apiService = new ApiService( - browser.params.config.oauth2.clientId, - browser.params.config.bpmHost, browser.params.config.oauth2.host, browser.params.config.providers - ); - let tasksService: TasksService; - let identityService: IdentityService; - let groupIdentityService: GroupIdentityService; - let processDefinitionService: ProcessDefinitionsService; - let processInstancesService: ProcessInstancesService; - let queryService: QueryService; + const apiService = new ApiService(); + const identityService = new IdentityService(apiService); + const groupIdentityService = new GroupIdentityService(apiService); + const processDefinitionService = new ProcessDefinitionsService(apiService); + const processInstancesService = new ProcessInstancesService(apiService); + const queryService = new QueryService(apiService); + const tasksService = new TasksService(apiService); + + const dropdown = widget.dropdown(); let runningProcessInstance, testUser, groupInfo, tasklist, task; const simpleApp = browser.params.resources.ACTIVITI_CLOUD_APPS.SIMPLE_APP.name; 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.ACTIVITI_USER]); + + testUser = await identityService.createIdentityUserWithRole( [identityService.ROLES.ACTIVITI_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(browser.params.resources.ACTIVITI_CLOUD_APPS.SIMPLE_APP.processes.dropdownrestprocess, simpleApp); - processInstancesService = new ProcessInstancesService(apiService); await processInstancesService.createProcessInstance(processDefinition.entry.key, simpleApp); runningProcessInstance = await processInstancesService.createProcessInstance(processDefinition.entry.key, simpleApp); - queryService = new QueryService(apiService); tasklist = await queryService.getProcessInstanceTasks(runningProcessInstance.entry.id, simpleApp); task = await tasklist.list.entries[0]; - tasksService = new TasksService(apiService); await tasksService.claimTask(task.entry.id, simpleApp); - await loginSSOPage.loginSSOIdentityService(testUser.email, testUser.password); + await loginSSOPage.login(testUser.email, testUser.password); }); afterAll(async () => { diff --git a/e2e/process-services-cloud/form-field/people-group-of-people.e2e.ts b/e2e/process-services-cloud/form-field/people-group-of-people.e2e.ts index 5da401abb2..4fc077060b 100644 --- a/e2e/process-services-cloud/form-field/people-group-of-people.e2e.ts +++ b/e2e/process-services-cloud/form-field/people-group-of-people.e2e.ts @@ -33,16 +33,17 @@ import { groupReadOnlyFormMock } from '../../resources/forms/people-group-formwidget-mocks'; import { NavigationBarPage } from '../../pages/adf/navigation-bar.page'; -import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; describe('People and Group of people Widgets', () => { + const loginSSOPage = new LoginSSOPage(); const navigationBarPage = new NavigationBarPage(); const formCloudComponentPage = new FormCloudComponentPage(); const widget = new ProcessCloudWidgetPage(); + const formPage = new FormPage(); + const peopleCloudWidget = widget.peopleCloudWidget(); const groupCloudWidget = widget.groupCloudWidget(); - const formPage = new FormPage(); const widgets = { peopleCloudWidgetSingleModeId: 'PeopleSingleMode', @@ -70,13 +71,7 @@ describe('People and Group of people Widgets', () => { }; beforeAll(async () => { - this.alfrescoJsApi = new AlfrescoApi({ - provider: 'BPM', - hostBpm: browser.params.testConfig.adf_aps.host - }); - - await loginSSOPage.loginSSOIdentityService(browser.params.testConfig.hrUser.email, browser.params.testConfig.hrUser.password); - + await loginSSOPage.login(browser.params.testConfig.hrUser.email, browser.params.testConfig.hrUser.password); await navigationBarPage.navigateToFormCloudPage(); }); diff --git a/e2e/process-services-cloud/form-field/task-visibility-condition.e2e.ts b/e2e/process-services-cloud/form-field/task-visibility-condition.e2e.ts index a7570d23c9..3012e2c227 100644 --- a/e2e/process-services-cloud/form-field/task-visibility-condition.e2e.ts +++ b/e2e/process-services-cloud/form-field/task-visibility-condition.e2e.ts @@ -34,6 +34,8 @@ import { ProcessCloudDemoPage } from '../../pages/adf/demo-shell/process-service describe('Task cloud visibility', async () => { + const simpleApp = browser.params.resources.ACTIVITI_CLOUD_APPS.SIMPLE_APP.name; + const navigationBarPage = new NavigationBarPage(); const appListCloudComponent = new AppListCloudPage(); const tasksCloudDemoPage = new TasksCloudDemoPage(); @@ -43,23 +45,23 @@ describe('Task cloud visibility', async () => { const processCloudDemoPage = new ProcessCloudDemoPage(); const loginSSOPage = new LoginSSOPage(); - const simpleApp = browser.params.resources.ACTIVITI_CLOUD_APPS.SIMPLE_APP.name; + const apiService = new ApiService(); + const identityService = new IdentityService(apiService); + const groupIdentityService = new GroupIdentityService(apiService); + const standaloneTaskName = StringUtil.generateRandomString(5); const processName = StringUtil.generateRandomString(5); - let identityService: IdentityService; - let groupIdentityService: GroupIdentityService; + let testUser, groupInfo; - 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.ACTIVITI_USER]); + + testUser = await identityService.createIdentityUserWithRole( [identityService.ROLES.ACTIVITI_USER]); groupInfo = await groupIdentityService.getGroupInfoByGroupName('hr'); await identityService.addUserToGroup(testUser.idIdentityService, groupInfo.id); - await loginSSOPage.loginSSOIdentityService(testUser.email, testUser.password); + await loginSSOPage.login(testUser.email, testUser.password); }); afterAll(async () => { @@ -87,11 +89,11 @@ describe('Task cloud visibility', async () => { await taskFormCloudComponent.formFields().checkWidgetIsHidden('Number2'); await expect(await taskFormCloudComponent.formFields().isCompleteFormButtonDisabled()).toBeTruthy(); - await taskFormCloudComponent.formFields().setFieldValue(by.id, 'Number1', 5); + await taskFormCloudComponent.formFields().setFieldValue(by.id, 'Number1', '5'); await taskFormCloudComponent.formFields().checkWidgetIsVisible('Number2'); await expect(await taskFormCloudComponent.formFields().isCompleteFormButtonDisabled()).toBeFalsy(); - await taskFormCloudComponent.formFields().setFieldValue(by.id, 'Number1', 123); + await taskFormCloudComponent.formFields().setFieldValue(by.id, 'Number1', '123'); await expect(await taskFormCloudComponent.formFields().isCompleteFormButtonDisabled()).toBeTruthy(); await taskFormCloudComponent.formFields().checkWidgetIsHidden('Number2'); }); @@ -116,15 +118,15 @@ describe('Task cloud visibility', async () => { await taskFormCloudComponent.formFields().checkWidgetIsHidden('Number2'); await expect(await taskFormCloudComponent.formFields().isCompleteFormButtonDisabled()).toBeTruthy(); - await taskFormCloudComponent.formFields().setFieldValue(by.id, 'Number1', 5); + await taskFormCloudComponent.formFields().setFieldValue(by.id, 'Number1', '5'); await taskFormCloudComponent.formFields().checkWidgetIsVisible('Number2'); await expect(await taskFormCloudComponent.formFields().isCompleteFormButtonDisabled()).toBeFalsy(); - await taskFormCloudComponent.formFields().setFieldValue(by.id, 'Number1', 123); + await taskFormCloudComponent.formFields().setFieldValue(by.id, 'Number1', '123'); await expect(await taskFormCloudComponent.formFields().isCompleteFormButtonDisabled()).toBeTruthy(); await taskFormCloudComponent.formFields().checkWidgetIsHidden('Number2'); - await taskFormCloudComponent.formFields().setFieldValue(by.id, 'Number1', 4); + await taskFormCloudComponent.formFields().setFieldValue(by.id, 'Number1', '4'); await expect(await taskFormCloudComponent.formFields().isCompleteFormButtonDisabled()).toBeFalsy(); await taskFormCloudComponent.clickCompleteButton(); }); 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 index 863e4e55cf..a663bbd70f 100644 --- a/e2e/process-services-cloud/form-field/visibility-condition-tabs.e2e.ts +++ b/e2e/process-services-cloud/form-field/visibility-condition-tabs.e2e.ts @@ -18,7 +18,6 @@ import { FormCloudComponentPage, LoginSSOPage, ProcessCloudWidgetPage } from '@alfresco/adf-testing'; import { browser } from 'protractor'; -import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; import { NavigationBarPage } from '../../pages/adf/navigation-bar.page'; import { tabFieldValueVisibilityJson, tabVarValueVisibilityJson, tabVarFieldVisibilityJson, tabFieldFieldVisibilityJson, tabFieldVarVisibilityJson, tabVarVarVisibilityJson, @@ -27,7 +26,6 @@ import { tabFieldValueVisibilityJson, tabVarValueVisibilityJson, tabVarFieldVisi describe('Visibility conditions on tabs - cloud', () => { const loginSSOPage = new LoginSSOPage(); - const navigationBarPage = new NavigationBarPage(); const formCloudDemoPage = new FormCloudComponentPage(); const widget = new ProcessCloudWidgetPage(); @@ -54,13 +52,7 @@ describe('Visibility conditions on tabs - cloud', () => { }; beforeAll(async () => { - this.alfrescoJsApi = new AlfrescoApi({ - provider: 'BPM', - hostBpm: browser.params.testConfig.adf_aps.host - }); - - await loginSSOPage.loginSSOIdentityService(browser.params.testConfig.hrUser.email, browser.params.testConfig.hrUser.password); - + await loginSSOPage.login(browser.params.testConfig.hrUser.email, browser.params.testConfig.hrUser.password); await navigationBarPage.navigateToFormCloudPage(); }); 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 390c92d750..8445cb4380 100644 --- a/e2e/process-services-cloud/form-field/visibility-condition.e2e.ts +++ b/e2e/process-services-cloud/form-field/visibility-condition.e2e.ts @@ -18,7 +18,6 @@ import { FormCloudComponentPage, LoginSSOPage, ProcessCloudWidgetPage } from '@alfresco/adf-testing'; import { browser } from 'protractor'; -import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; import { NavigationBarPage } from '../../pages/adf/navigation-bar.page'; import { checkboxVisibilityFormJson, multipleCheckboxVisibilityFormJson } from '../../resources/forms/checkbox-visibility-condition'; import { multipleTextVisibilityFormJson, multipleVisibilityFormJson } from '../../resources/forms/multiple-visibility-conditions'; @@ -28,7 +27,6 @@ import { dropdownVisibilityFormFieldJson, dropdownVisibilityFormVariableJson } f describe('Visibility conditions - cloud', () => { const loginSSOPage = new LoginSSOPage(); - const navigationBarPage = new NavigationBarPage(); const formCloudDemoPage = new FormCloudComponentPage(); const widget = new ProcessCloudWidgetPage(); @@ -83,20 +81,12 @@ describe('Visibility conditions - cloud', () => { }; beforeAll(async () => { - this.alfrescoJsApi = new AlfrescoApi({ - provider: 'BPM', - hostBpm: browser.params.testConfig.adf_aps.host - }); - - await loginSSOPage.loginSSOIdentityService(browser.params.testConfig.hrUser.email, browser.params.testConfig.hrUser.password); - + await loginSSOPage.login(browser.params.testConfig.hrUser.email, browser.params.testConfig.hrUser.password); await navigationBarPage.navigateToFormCloudPage(); - await formCloudDemoPage.setConfigToEditor(checkboxVisibilityFormJson); }); 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); @@ -107,7 +97,6 @@ describe('Visibility conditions - cloud', () => { }); it('[C309648] Should be able to see Checkbox widget when visibility condition refers to a form variable and a field', async () => { - await widget.textWidget().isWidgetVisible(widgets.textOneId); await widget.checkboxWidget().isCheckboxHidden(checkbox.checkboxVariableField); @@ -119,7 +108,6 @@ describe('Visibility conditions - cloud', () => { }); it('[C309649] Should be able to see Checkbox widget when visibility condition refers to a field and a form variable', async () => { - await widget.textWidget().isWidgetVisible(widgets.textOneId); await widget.checkboxWidget().isCheckboxHidden(checkbox.checkboxFieldVariable); @@ -131,7 +119,6 @@ describe('Visibility conditions - cloud', () => { }); it('[C311425] Should be able to see Checkbox widget when visibility condition refers to a field and another field', async () => { - await widget.textWidget().isWidgetVisible(widgets.textOneId); await widget.textWidget().isWidgetVisible(widgets.textTwoId); await widget.checkboxWidget().isCheckboxHidden(checkbox.checkboxFieldField); 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 cc07c08884..2d9ee33a74 100644 --- a/e2e/process-services-cloud/people-group-cloud-component.e2e.ts +++ b/e2e/process-services-cloud/people-group-cloud-component.e2e.ts @@ -15,7 +15,15 @@ * limitations under the License. */ -import { ApiService, GroupCloudComponentPage, GroupIdentityService, IdentityService, LoginSSOPage, PeopleCloudComponentPage, RolesService } from '@alfresco/adf-testing'; +import { + ApiService, + GroupCloudComponentPage, + GroupIdentityService, + IdentityService, + LoginSSOPage, + PeopleCloudComponentPage, + RolesService +} from '@alfresco/adf-testing'; import { browser } from 'protractor'; import { PeopleGroupCloudComponentPage } from '../pages/adf/demo-shell/process-services/people-group-cloud-component.page'; import { NavigationBarPage } from '../pages/adf/navigation-bar.page'; @@ -23,18 +31,17 @@ import { NavigationBarPage } from '../pages/adf/navigation-bar.page'; describe('People Groups Cloud Component', () => { describe('People Groups Cloud Component', () => { + const loginSSOPage = new LoginSSOPage(); const navigationBarPage = new NavigationBarPage(); const peopleGroupCloudComponentPage = new PeopleGroupCloudComponentPage(); const peopleCloudComponent = new PeopleCloudComponentPage(); const groupCloudComponentPage = new GroupCloudComponentPage(); - let identityService: IdentityService; - let groupIdentityService: GroupIdentityService; - let rolesService: RolesService; - const apiService = new ApiService( - browser.params.config.oauth2.clientId, - browser.params.config.bpmHost, browser.params.config.oauth2.host, browser.params.config.providers - ); + + const apiService = new ApiService(); + const identityService = new IdentityService(apiService); + const rolesService = new RolesService(apiService); + const groupIdentityService = new GroupIdentityService(apiService); let apsUser; let testUser; @@ -50,22 +57,17 @@ describe('People Groups Cloud Component', () => { let groups = []; beforeAll(async () => { - await apiService.login(browser.params.identityAdmin.email, browser.params.identityAdmin.password); - identityService = new IdentityService(apiService); - testUser = await identityService.createIdentityUserWithRole(apiService, [identityService.ROLES.ACTIVITI_USER]); - apsUser = await identityService.createIdentityUserWithRole(apiService, [identityService.ROLES.ACTIVITI_USER]); - activitiUser = await identityService.createIdentityUserWithRole(apiService, [identityService.ROLES.ACTIVITI_USER]); - devopsUser = await identityService.createIdentityUserWithRole(apiService, [identityService.ROLES.ACTIVITI_DEVOPS]); + testUser = await identityService.createIdentityUserWithRole([identityService.ROLES.ACTIVITI_USER]); + apsUser = await identityService.createIdentityUserWithRole([identityService.ROLES.ACTIVITI_USER]); + activitiUser = await identityService.createIdentityUserWithRole([identityService.ROLES.ACTIVITI_USER]); + devopsUser = await identityService.createIdentityUserWithRole([identityService.ROLES.ACTIVITI_DEVOPS]); noRoleUser = await identityService.createIdentityUser(); - rolesService = new RolesService(apiService); apsAdminRoleId = await rolesService.getRoleIdByRoleName(identityService.ROLES.ACTIVITI_ADMIN); apsUserRoleId = await rolesService.getRoleIdByRoleName(identityService.ROLES.ACTIVITI_USER); - groupIdentityService = new GroupIdentityService(apiService); - groupUser = await groupIdentityService.createIdentityGroup(); await groupIdentityService.assignRole(groupUser.id, apsUserRoleId, identityService.ROLES.ACTIVITI_USER); @@ -78,7 +80,7 @@ describe('People Groups Cloud Component', () => { `${testUser.idIdentityService}`, `${devopsUser.idIdentityService}`]; groups = [`${groupUser.id}`, `${groupAdmin.id}`, `${groupNoRole.id}`]; - await loginSSOPage.loginSSOIdentityService(testUser.email, testUser.password); + await loginSSOPage.login(testUser.email, testUser.password); }); afterAll(async () => { @@ -89,7 +91,6 @@ describe('People Groups Cloud Component', () => { for (const group of groups) { await groupIdentityService.deleteIdentityGroup(group); } - }); beforeEach(async () => { @@ -103,7 +104,6 @@ describe('People Groups Cloud Component', () => { }); describe('[C297674] Should be able to add filtering to People Cloud Component', () => { - beforeEach(async () => { await peopleGroupCloudComponentPage.clickPeopleCloudMultipleSelection(); await peopleGroupCloudComponentPage.checkPeopleCloudMultipleSelectionIsSelected(); @@ -142,7 +142,6 @@ describe('People Groups Cloud Component', () => { }); describe('[C309674] Should be able to add filtering to Group Cloud Component', () => { - beforeEach(async () => { await peopleGroupCloudComponentPage.clickGroupCloudMultipleSelection(); await peopleGroupCloudComponentPage.clickGroupCloudFilterRole(); @@ -191,7 +190,6 @@ describe('People Groups Cloud Component', () => { }); it('[C305033] Should fetch the preselect users based on the Validate flag set to True in Single mode selection', async () => { - await peopleGroupCloudComponentPage.clickPeopleCloudSingleSelection(); await peopleGroupCloudComponentPage.checkPeopleCloudSingleSelectionIsSelected(); @@ -212,7 +210,6 @@ describe('People Groups Cloud Component', () => { }); it('[C309676] Should fetch the preselect users based on the Validate flag set to True in Multiple mode selection', async () => { - await peopleGroupCloudComponentPage.clickPeopleCloudMultipleSelection(); await peopleGroupCloudComponentPage.checkPeopleCloudMultipleSelectionIsSelected(); await peopleGroupCloudComponentPage.clickPreselectValidation(); @@ -252,5 +249,5 @@ describe('People Groups Cloud Component', () => { await peopleCloudComponent.checkSelectedPeople('TestFirstName2 TestLastName2'); await peopleCloudComponent.checkSelectedPeople('TestFirstName3 TestLastName3'); }); - }); + }); }); 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 5eecc25acf..b485fbbc9e 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 @@ -23,17 +23,16 @@ import { NavigationBarPage } from '../pages/adf/navigation-bar.page'; describe('People Groups Cloud Component', () => { describe('People Groups Cloud Component', () => { + const loginSSOPage = new LoginSSOPage(); const navigationBarPage = new NavigationBarPage(); const peopleGroupCloudComponentPage = new PeopleGroupCloudComponentPage(); const peopleCloudComponent = new PeopleCloudComponentPage(); const groupCloudComponentPage = new GroupCloudComponentPage(); - const apiService = new ApiService( - browser.params.config.oauth2.clientId, - browser.params.config.bpmHost, browser.params.config.oauth2.host, browser.params.config.providers - ); - let identityService: IdentityService; - let groupIdentityService: GroupIdentityService; + + const apiService = new ApiService(); + const identityService = new IdentityService(apiService); + const groupIdentityService = new GroupIdentityService(apiService); let apsUser, testUser; let noRoleUser; @@ -45,13 +44,11 @@ describe('People Groups Cloud Component', () => { beforeAll(async () => { await apiService.login(browser.params.identityAdmin.email, browser.params.identityAdmin.password); - identityService = new IdentityService(apiService); - groupIdentityService = new GroupIdentityService(apiService); hrGroup = await groupIdentityService.getGroupInfoByGroupName('hr'); testGroup = await groupIdentityService.getGroupInfoByGroupName('testgroup'); - testUser = await identityService.createIdentityUserWithRole(apiService, [identityService.ROLES.ACTIVITI_USER]); - apsUser = await identityService.createIdentityUserWithRole(apiService, [identityService.ROLES.ACTIVITI_USER]); + testUser = await identityService.createIdentityUserWithRole( [identityService.ROLES.ACTIVITI_USER]); + apsUser = await identityService.createIdentityUserWithRole( [identityService.ROLES.ACTIVITI_USER]); await identityService.addUserToGroup(testUser.idIdentityService, testGroup.id); await identityService.addUserToGroup(apsUser.idIdentityService, hrGroup.id); noRoleUser = await identityService.createIdentityUser(); @@ -60,7 +57,7 @@ describe('People Groups Cloud Component', () => { users = [apsUser.idIdentityService, noRoleUser.idIdentityService, testUser.idIdentityService]; - await loginSSOPage.loginSSOIdentityService(apsUser.email, apsUser.password); + await loginSSOPage.login(apsUser.email, apsUser.password); }); afterAll(async () => { diff --git a/e2e/process-services-cloud/process-custom-filters.e2e.ts b/e2e/process-services-cloud/process-custom-filters.e2e.ts index b97e012389..d670c2a040 100644 --- a/e2e/process-services-cloud/process-custom-filters.e2e.ts +++ b/e2e/process-services-cloud/process-custom-filters.e2e.ts @@ -26,81 +26,74 @@ import { ProcessListCloudConfiguration } from './config/process-list-cloud.confi describe('Process list cloud', () => { describe('Process List', () => { + const loginSSOPage = new LoginSSOPage(); const navigationBarPage = new NavigationBarPage(); const appListCloudComponent = new AppListCloudPage(); const processCloudDemoPage = new ProcessCloudDemoPage(); const tasksCloudDemoPage = new TasksCloudDemoPage(); - const apiService = new ApiService( - browser.params.config.oauth2.clientId, - browser.params.config.bpmHost, browser.params.config.oauth2.host, browser.params.config.providers - ); + + const apiService = new ApiService(); + const identityService = new IdentityService(apiService); + const groupIdentityService = new GroupIdentityService(apiService); + const processDefinitionService = new ProcessDefinitionsService(apiService); + const processInstancesService = new ProcessInstancesService(apiService); + const queryService = new QueryService(apiService); + const tasksService = new TasksService(apiService); + const processListCloudConfiguration = new ProcessListCloudConfiguration(); const editProcessFilterConfiguration = new EditProcessFilterConfiguration(); const processListCloudConfigFile = processListCloudConfiguration.getConfiguration(); const editProcessFilterConfigFile = editProcessFilterConfiguration.getConfiguration(); - let tasksService: TasksService; - let identityService: IdentityService; - let groupIdentityService: GroupIdentityService; - let processDefinitionService: ProcessDefinitionsService; - let processInstancesService: ProcessInstancesService; - let queryService: QueryService; - let completedProcess, runningProcessInstance, switchProcessInstance, noOfApps, testUser, groupInfo, anotherProcessInstance; const candidateBaseApp = browser.params.resources.ACTIVITI_CLOUD_APPS.CANDIDATE_BASE_APP.name; beforeAll(async () => { + await apiService.login(browser.params.identityAdmin.email, browser.params.identityAdmin.password); - 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.ACTIVITI_USER]); + testUser = await identityService.createIdentityUserWithRole( [identityService.ROLES.ACTIVITI_USER]); - groupInfo = await groupIdentityService.getGroupInfoByGroupName('hr'); - await identityService.addUserToGroup(testUser.idIdentityService, groupInfo.id); - await apiService.login(testUser.email, testUser.password); + 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 + const processDefinition = await processDefinitionService .getProcessDefinitionByName(browser.params.resources.ACTIVITI_CLOUD_APPS.CANDIDATE_BASE_APP.processes.candidateGroupProcess, candidateBaseApp); - const anotherProcessDefinition = await processDefinitionService + const anotherProcessDefinition = await processDefinitionService .getProcessDefinitionByName(browser.params.resources.ACTIVITI_CLOUD_APPS.CANDIDATE_BASE_APP.processes.anotherCandidateGroupProcess, candidateBaseApp); - processInstancesService = new ProcessInstancesService(apiService); - await processInstancesService.createProcessInstance(processDefinition.entry.key, candidateBaseApp); + await processInstancesService.createProcessInstance(processDefinition.entry.key, candidateBaseApp); - runningProcessInstance = await processInstancesService.createProcessInstance(processDefinition.entry.key, candidateBaseApp, { + runningProcessInstance = await processInstancesService.createProcessInstance(processDefinition.entry.key, candidateBaseApp, { 'name': StringUtil.generateRandomString(), 'businessKey': StringUtil.generateRandomString() }); - anotherProcessInstance = await processInstancesService.createProcessInstance(anotherProcessDefinition.entry.key, candidateBaseApp, { + anotherProcessInstance = await processInstancesService.createProcessInstance(anotherProcessDefinition.entry.key, candidateBaseApp, { 'name': StringUtil.generateRandomString(), 'businessKey': StringUtil.generateRandomString() }); - switchProcessInstance = await processInstancesService.createProcessInstance(processDefinition.entry.key, candidateBaseApp, { + switchProcessInstance = await processInstancesService.createProcessInstance(processDefinition.entry.key, candidateBaseApp, { 'name': StringUtil.generateRandomString(), 'businessKey': StringUtil.generateRandomString() }); - completedProcess = await processInstancesService.createProcessInstance(processDefinition.entry.key, candidateBaseApp, { + completedProcess = await processInstancesService.createProcessInstance(processDefinition.entry.key, candidateBaseApp, { 'name': StringUtil.generateRandomString(), 'businessKey': StringUtil.generateRandomString() }); - queryService = new QueryService(apiService); - 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); - await tasksService.completeTask(claimedTask.entry.id, candidateBaseApp); + const task = await queryService.getProcessInstanceTasks(completedProcess.entry.id, candidateBaseApp); + const claimedTask = await tasksService.claimTask(task.list.entries[0].entry.id, candidateBaseApp); + await tasksService.completeTask(claimedTask.entry.id, candidateBaseApp); - 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)); + await loginSSOPage.login(testUser.email, testUser.password); + await LocalStorageUtil.setConfigField('adf-edit-process-filter', JSON.stringify(editProcessFilterConfigFile)); + await LocalStorageUtil.setConfigField('adf-cloud-process-list', JSON.stringify(processListCloudConfigFile)); }); afterAll(async () => { diff --git a/e2e/process-services-cloud/process-filter-results.e2e.ts b/e2e/process-services-cloud/process-filter-results.e2e.ts index 3825a4137c..84adaf6890 100644 --- a/e2e/process-services-cloud/process-filter-results.e2e.ts +++ b/e2e/process-services-cloud/process-filter-results.e2e.ts @@ -39,16 +39,22 @@ import { ProcessListCloudConfiguration } from './config/process-list-cloud.confi import moment = require('moment'); describe('Process filters cloud', () => { + const loginSSOPage = new LoginSSOPage(); const navigationBarPage = new NavigationBarPage(); const appListCloudComponent = new AppListCloudPage(); const processCloudDemoPage = new ProcessCloudDemoPage(); const tasksCloudDemoPage = new TasksCloudDemoPage(); const processListPage = new ProcessListPage(); - const apiService = new ApiService( - browser.params.config.oauth2.clientId, - browser.params.config.bpmHost, browser.params.config.oauth2.host, browser.params.config.providers - ); + + const apiService = new ApiService(); + const identityService = new IdentityService(apiService); + const groupIdentityService = new GroupIdentityService(apiService); + const processDefinitionService = new ProcessDefinitionsService(apiService); + const processInstancesService = new ProcessInstancesService(apiService); + const queryService = new QueryService(apiService); + const tasksService = new TasksService(apiService); + const beforeDate = moment().add(-1, 'days').format('DD/MM/YYYY'); const currentDate = DateUtil.formatDate('DD/MM/YYYY'); const afterDate = moment().add(1, 'days').format('DD/MM/YYYY'); @@ -57,13 +63,6 @@ describe('Process filters cloud', () => { const processListCloudConfigFile = processListCloudConfiguration.getConfiguration(); const editProcessFilterConfigFile = editProcessFilterConfiguration.getConfiguration(); - let tasksService: TasksService; - let identityService: IdentityService; - let groupIdentityService: GroupIdentityService; - let processDefinitionService: ProcessDefinitionsService; - let processInstancesService: ProcessInstancesService; - let queryService: QueryService; - let completedProcess, runningProcessInstance, suspendProcessInstance, testUser, anotherUser, groupInfo, anotherProcessInstance, processDefinition, anotherProcessDefinition, differentAppUserProcessInstance, simpleAppProcessDefinition; @@ -71,24 +70,19 @@ describe('Process filters cloud', () => { const simpleApp = browser.params.resources.ACTIVITI_CLOUD_APPS.SIMPLE_APP.name; 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.ACTIVITI_USER]); - anotherUser = await identityService.createIdentityUserWithRole(apiService, [identityService.ROLES.ACTIVITI_USER]); + testUser = await identityService.createIdentityUserWithRole( [identityService.ROLES.ACTIVITI_USER]); + anotherUser = await identityService.createIdentityUserWithRole( [identityService.ROLES.ACTIVITI_USER]); groupInfo = await groupIdentityService.getGroupInfoByGroupName('hr'); await identityService.addUserToGroup(testUser.idIdentityService, groupInfo.id); await identityService.addUserToGroup(anotherUser.idIdentityService, groupInfo.id); await apiService.login(anotherUser.email, anotherUser.password); - processDefinitionService = new ProcessDefinitionsService(apiService); simpleAppProcessDefinition = await processDefinitionService .getProcessDefinitionByName(browser.params.resources.ACTIVITI_CLOUD_APPS.SIMPLE_APP.processes.simpleProcess, simpleApp); - processInstancesService = new ProcessInstancesService(apiService); differentAppUserProcessInstance = await processInstancesService.createProcessInstance(simpleAppProcessDefinition.entry.key, simpleApp, { 'name': StringUtil.generateRandomString(), 'businessKey': StringUtil.generateRandomString() @@ -121,14 +115,12 @@ describe('Process filters cloud', () => { 'name': StringUtil.generateRandomString(), 'businessKey': StringUtil.generateRandomString() }); - queryService = new QueryService(apiService); 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); await tasksService.completeTask(claimedTask.entry.id, candidateBaseApp); - await loginSSOPage.loginSSOIdentityService(testUser.email, testUser.password); + await loginSSOPage.login(testUser.email, testUser.password); await LocalStorageUtil.setConfigField('adf-edit-process-filter', JSON.stringify(editProcessFilterConfigFile)); await LocalStorageUtil.setConfigField('adf-cloud-process-list', JSON.stringify(processListCloudConfigFile)); }); diff --git a/e2e/process-services-cloud/process-filter-task.e2e.ts b/e2e/process-services-cloud/process-filter-task.e2e.ts index c9cd2ecab6..ed95a2a279 100644 --- a/e2e/process-services-cloud/process-filter-task.e2e.ts +++ b/e2e/process-services-cloud/process-filter-task.e2e.ts @@ -40,6 +40,7 @@ import { } from '@alfresco/adf-process-services-cloud'; describe('Process filters cloud', () => { + const loginSSOPage = new LoginSSOPage(); const navigationBarPage = new NavigationBarPage(); const appListCloudComponent = new AppListCloudPage(); @@ -48,17 +49,15 @@ describe('Process filters cloud', () => { const processDetailsCloudDemoPage = new ProcessDetailsCloudDemoPage(); const taskHeaderCloudPage = new TaskHeaderCloudPage(); const taskFormCloudComponent = new TaskFormCloudComponent(); - const apiService = new ApiService( - browser.params.config.oauth2.clientId, - browser.params.config.bpmHost, browser.params.config.oauth2.host, browser.params.config.providers - ); + + const apiService = new ApiService(); + const processDefinitionService = new ProcessDefinitionsService(apiService); + const processInstancesService = new ProcessInstancesService(apiService); + const queryService = new QueryService(apiService); const processListCloudConfigFile = new ProcessListCloudConfiguration().getConfiguration(); const editProcessFilterConfigFile = new EditProcessFilterConfiguration().getConfiguration(); - let processDefinitionService: ProcessDefinitionsService; - let processInstancesService: ProcessInstancesService; - let queryService: QueryService; let simpleProcessDefinition: ProcessDefinitionCloud; let processInstance: ProcessInstanceCloud; let taskAssigned: StartTaskCloudResponseModel[]; @@ -67,9 +66,6 @@ describe('Process filters cloud', () => { beforeAll(async () => { await apiService.login(browser.params.testConfig.hrUser.email, browser.params.testConfig.hrUser.password); - processDefinitionService = new ProcessDefinitionsService(apiService); - processInstancesService = new ProcessInstancesService(apiService); - queryService = new QueryService(apiService); simpleProcessDefinition = (await processDefinitionService .getProcessDefinitionByName(browser.params.resources.ACTIVITI_CLOUD_APPS.SIMPLE_APP.processes.processstring, simpleApp)).entry; @@ -77,7 +73,7 @@ describe('Process filters cloud', () => { taskAssigned = (await queryService.getProcessInstanceTasks(processInstance.id, simpleApp)).list.entries; taskName = browser.params.resources.ACTIVITI_CLOUD_APPS.SIMPLE_APP.tasks.processstring; - await loginSSOPage.loginSSOIdentityService(browser.params.testConfig.hrUser.email, browser.params.testConfig.hrUser.password); + await loginSSOPage.login(browser.params.testConfig.hrUser.email, browser.params.testConfig.hrUser.password); await LocalStorageUtil.setConfigField('adf-edit-process-filter', JSON.stringify(editProcessFilterConfigFile)); await LocalStorageUtil.setConfigField('adf-cloud-process-list', JSON.stringify(processListCloudConfigFile)); }); diff --git a/e2e/process-services-cloud/process-filters-cloud.e2e.ts b/e2e/process-services-cloud/process-filters-cloud.e2e.ts index b859628c9d..7f3ca0952c 100644 --- a/e2e/process-services-cloud/process-filters-cloud.e2e.ts +++ b/e2e/process-services-cloud/process-filters-cloud.e2e.ts @@ -42,36 +42,30 @@ describe('Process filters cloud', () => { const processCloudDemoPage = new ProcessCloudDemoPage(); const tasksCloudDemoPage = new TasksCloudDemoPage(); const editProcessFilterCloudComponentPage = new EditProcessFilterCloudComponentPage(); - const apiService = new ApiService( - browser.params.config.oauth2.clientId, - browser.params.config.bpmHost, browser.params.config.oauth2.host, browser.params.config.providers - ); - let tasksService: TasksService; - let identityService: IdentityService; - let groupIdentityService: GroupIdentityService; - let processDefinitionService: ProcessDefinitionsService; - let processInstancesService: ProcessInstancesService; - let queryService: QueryService; + const apiService = new ApiService(); + const identityService = new IdentityService(apiService); + const groupIdentityService = new GroupIdentityService(apiService); + const processDefinitionService = new ProcessDefinitionsService(apiService); + const queryService = new QueryService(apiService); + const tasksService = new TasksService(apiService); + const processInstancesService = new ProcessInstancesService(apiService); let runningProcess, completedProcess, testUser, groupInfo; const candidateBaseApp = browser.params.resources.ACTIVITI_CLOUD_APPS.CANDIDATE_BASE_APP.name; 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.ACTIVITI_USER]); + + testUser = await identityService.createIdentityUserWithRole( [identityService.ROLES.ACTIVITI_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(browser.params.resources.ACTIVITI_CLOUD_APPS.CANDIDATE_BASE_APP.processes.candidateGroupProcess, candidateBaseApp); - processInstancesService = new ProcessInstancesService(apiService); runningProcess = await processInstancesService.createProcessInstance(processDefinition.entry.key, candidateBaseApp, { 'name': StringUtil.generateRandomString(), 'businessKey': StringUtil.generateRandomString() @@ -81,14 +75,12 @@ describe('Process filters cloud', () => { 'name': StringUtil.generateRandomString(), 'businessKey': StringUtil.generateRandomString() }); - queryService = new QueryService(apiService); 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); await tasksService.completeTask(claimedTask.entry.id, candidateBaseApp); - await loginSSOPage.loginSSOIdentityService(testUser.email, testUser.password); + await loginSSOPage.login(testUser.email, testUser.password); }, 5 * 60 * 1000); diff --git a/e2e/process-services-cloud/process-header-cloud.e2e.ts b/e2e/process-services-cloud/process-header-cloud.e2e.ts index 4d7ea49f07..a5fdf496f5 100644 --- a/e2e/process-services-cloud/process-header-cloud.e2e.ts +++ b/e2e/process-services-cloud/process-header-cloud.e2e.ts @@ -27,7 +27,6 @@ import { EditProcessFilterConfiguration } from './config/edit-process-filter.con describe('Process Header cloud component', () => { describe('Process Header cloud component', () => { - const simpleApp = browser.params.resources.ACTIVITI_CLOUD_APPS.SIMPLE_APP.name; const subProcessApp = browser.params.resources.ACTIVITI_CLOUD_APPS.SUB_PROCESS_APP.name; const formatDate = 'MMM D, YYYY'; @@ -41,37 +40,31 @@ describe('Process Header cloud component', () => { const processCloudDemoPage = new ProcessCloudDemoPage(); const editProcessFilterConfiguration = new EditProcessFilterConfiguration(); const editProcessFilterConfigFile = editProcessFilterConfiguration.getConfiguration(); - const apiService = new ApiService( - browser.params.config.oauth2.clientId, - browser.params.config.bpmHost, browser.params.config.oauth2.host, browser.params.config.providers - ); - let processDefinitionService: ProcessDefinitionsService; - let processInstancesService: ProcessInstancesService; - let queryService: QueryService; - let identityService: IdentityService; - let groupIdentityService: GroupIdentityService; + const apiService = new ApiService(); + const identityService = new IdentityService(apiService); + const groupIdentityService = new GroupIdentityService(apiService); + const processDefinitionService = new ProcessDefinitionsService(apiService); + const processInstancesService = new ProcessInstancesService(apiService); + const queryService = new QueryService(apiService); + let testUser, groupInfo; let runningProcess, runningCreatedDate, parentCompleteProcess, childCompleteProcess, completedCreatedDate; 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.ACTIVITI_USER]); + testUser = await identityService.createIdentityUserWithRole( [identityService.ROLES.ACTIVITI_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 dropdownRestProcess = await processDefinitionService.getProcessDefinitionByName(browser.params.resources.ACTIVITI_CLOUD_APPS.SIMPLE_APP.processes.dropdownrestprocess, simpleApp); const processparent = await processDefinitionService.getProcessDefinitionByName(browser.params.resources.ACTIVITI_CLOUD_APPS.SUB_PROCESS_APP.processes.processparent, subProcessApp); - processInstancesService = new ProcessInstancesService(apiService); runningProcess = await processInstancesService.createProcessInstance(dropdownRestProcess.entry.key, simpleApp, { name: StringUtil.generateRandomString(), businessKey: 'test' }); @@ -80,8 +73,6 @@ describe('Process Header cloud component', () => { parentCompleteProcess = await processInstancesService.createProcessInstance(processparent.entry.key, subProcessApp); - queryService = new QueryService(apiService); - const parentProcessInstance = await queryService.getProcessInstanceSubProcesses(parentCompleteProcess.entry.id, subProcessApp); @@ -89,7 +80,7 @@ describe('Process Header cloud component', () => { completedCreatedDate = moment(childCompleteProcess.entry.startDate).format(formatDate); - await loginSSOPage.loginSSOIdentityService(testUser.email, testUser.password); + await loginSSOPage.login(testUser.email, testUser.password); await LocalStorageUtil.setConfigField('adf-edit-process-filter', JSON.stringify(editProcessFilterConfigFile)); }); 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 index 4e7149d99e..699d94b764 100644 --- a/e2e/process-services-cloud/process-list-cloud-action-menu.e2e.ts +++ b/e2e/process-services-cloud/process-list-cloud-action-menu.e2e.ts @@ -33,46 +33,44 @@ import { NavigationBarPage } from '../pages/adf/navigation-bar.page'; describe('Process list cloud', () => { describe('Process List - Custom Action Menu', () => { + + const simpleApp = browser.params.resources.ACTIVITI_CLOUD_APPS.SIMPLE_APP.name; + const loginSSOPage = new LoginSSOPage(); const navigationBarPage = new NavigationBarPage(); const appListCloudComponent = new AppListCloudPage(); const processCloudDemoPage = new ProcessCloudDemoPage(); const tasksCloudDemoPage = new TasksCloudDemoPage(); - let processDefinitionService: ProcessDefinitionsService; - let processInstancesService: ProcessInstancesService; - let identityService: IdentityService; - let groupIdentityService: GroupIdentityService; + const apiService = new ApiService(); + const identityService = new IdentityService(apiService); + const groupIdentityService = new GroupIdentityService(apiService); + const processDefinitionService = new ProcessDefinitionsService(apiService); + const processInstancesService = new ProcessInstancesService(apiService); + let testUser, groupInfo, editProcess, deleteProcess; - const simpleApp = browser.params.resources.ACTIVITI_CLOUD_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); - 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.ACTIVITI_USER]); - groupInfo = await groupIdentityService.getGroupInfoByGroupName('hr'); - await identityService.addUserToGroup(testUser.idIdentityService, groupInfo.id); + testUser = await identityService.createIdentityUserWithRole( [identityService.ROLES.ACTIVITI_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 + await apiService.login(testUser.email, testUser.password); + const processDefinition = await processDefinitionService .getProcessDefinitionByName(browser.params.resources.ACTIVITI_CLOUD_APPS.SIMPLE_APP.processes.simpleProcess, simpleApp); - processInstancesService = new ProcessInstancesService(apiService); - editProcess = await processInstancesService.createProcessInstance(processDefinition.entry.key, simpleApp, { + editProcess = await processInstancesService.createProcessInstance(processDefinition.entry.key, simpleApp, { 'name': StringUtil.generateRandomString(), 'businessKey': StringUtil.generateRandomString() }); - deleteProcess = await processInstancesService.createProcessInstance(processDefinition.entry.key, simpleApp, { + deleteProcess = await processInstancesService.createProcessInstance(processDefinition.entry.key, simpleApp, { 'name': StringUtil.generateRandomString(), 'businessKey': StringUtil.generateRandomString() }); - await loginSSOPage.loginSSOIdentityService(testUser.email, testUser.password); + await loginSSOPage.login(testUser.email, testUser.password); }); afterAll(async () => { 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 6275e6a458..00150d1f1c 100644 --- a/e2e/process-services-cloud/process-list-selection-cloud.e2e.ts +++ b/e2e/process-services-cloud/process-list-selection-cloud.e2e.ts @@ -26,6 +26,9 @@ import { EditProcessFilterConfiguration } from './config/edit-process-filter.con describe('Process list cloud', () => { describe('Process List - selection', () => { + + const simpleApp = browser.params.resources.ACTIVITI_CLOUD_APPS.SIMPLE_APP.name; + const loginSSOPage = new LoginSSOPage(); const navigationBarPage = new NavigationBarPage(); const appListCloudComponent = new AppListCloudPage(); @@ -33,14 +36,14 @@ describe('Process list cloud', () => { const tasksCloudDemoPage = new TasksCloudDemoPage(); const processDetailsCloudDemoPage = new ProcessDetailsCloudDemoPage(); - let processDefinitionService: ProcessDefinitionsService; - let processInstancesService: ProcessInstancesService; - let identityService: IdentityService; - let groupIdentityService: GroupIdentityService; + const apiService = new ApiService(); + const identityService = new IdentityService(apiService); + const groupIdentityService = new GroupIdentityService(apiService); + const processDefinitionService = new ProcessDefinitionsService(apiService); + const processInstancesService = new ProcessInstancesService(apiService); + let testUser, groupInfo; - const simpleApp = browser.params.resources.ACTIVITI_CLOUD_APPS.SIMPLE_APP.name; - const apiService = new ApiService(browser.params.config.oauth2.clientId, browser.params.config.bpmHost, browser.params.config.oauth2.host, 'BPM'); const noOfProcesses = 3; const processInstances = []; const editProcessFilterConfiguration = new EditProcessFilterConfiguration(); @@ -48,24 +51,21 @@ describe('Process list cloud', () => { 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.ACTIVITI_USER]); + + testUser = await identityService.createIdentityUserWithRole( [identityService.ROLES.ACTIVITI_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(browser.params.resources.ACTIVITI_CLOUD_APPS.SIMPLE_APP.processes.simpleProcess, simpleApp); - processInstancesService = new ProcessInstancesService(apiService); for (let i = 0; i < noOfProcesses; i++) { const response = await processInstancesService.createProcessInstance(processDefinition.entry.key, simpleApp); processInstances.push(response.entry.id); } - await loginSSOPage.loginSSOIdentityService(testUser.email, testUser.password); + await loginSSOPage.login(testUser.email, testUser.password); await LocalStorageUtil.setConfigField('adf-edit-process-filter', JSON.stringify(editProcessFilterConfigFile)); }); diff --git a/e2e/process-services-cloud/process-task-attach-content-file-cloud.e2e.ts b/e2e/process-services-cloud/process-task-attach-content-file-cloud.e2e.ts index b643a191d1..17a7957fde 100644 --- a/e2e/process-services-cloud/process-task-attach-content-file-cloud.e2e.ts +++ b/e2e/process-services-cloud/process-task-attach-content-file-cloud.e2e.ts @@ -15,7 +15,6 @@ * limitations under the License. */ -import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; import { browser } from 'protractor'; import { ApiService, @@ -44,6 +43,12 @@ describe('Process Task - Attach content file', () => { const taskFormCloudComponent = new TaskFormCloudComponent(); const processCloudWidget = new ProcessCloudWidgetPage(); const contentNodeSelectorDialog = new ContentNodeSelectorDialogPage(); + + const apiService = new ApiService(); + const uploadActions = new UploadActions(apiService); + const processDefinitionService = new ProcessDefinitionsService(apiService); + const processInstancesService = new ProcessInstancesService(apiService); + const viewerPage = new ViewerPage(); const simpleApp = browser.params.resources.ACTIVITI_CLOUD_APPS.SIMPLE_APP.name; const processDefinitionName = browser.params.resources.ACTIVITI_CLOUD_APPS.SIMPLE_APP.processes.uploadSingleMultipleFiles; @@ -51,8 +56,6 @@ describe('Process Task - Attach content file', () => { const taskName = browser.params.resources.ACTIVITI_CLOUD_APPS.SIMPLE_APP.tasks.uploadSingleMultipleFiles; const folderName = StringUtil.generateRandomString(5); - let processDefinitionService: ProcessDefinitionsService; - let processInstancesService: ProcessInstancesService; let uploadedFolder: any; let processInstance: any; @@ -66,17 +69,11 @@ describe('Process Task - Attach content file', () => { 'location': browser.params.resources.Files.ADF_DOCUMENTS.PDF_B.file_path }; - const apiService = new ApiService(browser.params.config.oauth2.clientId, browser.params.config.bpmHost, browser.params.config.oauth2.host, 'BPM'); - this.alfrescoJsApi = new AlfrescoApi({ provider: 'ECM', hostEcm: browser.params.config.bpmHost }); - const uploadActions = new UploadActions(this.alfrescoJsApi); - beforeAll(async () => { await apiService.login(browser.params.testConfig.hrUser.email, browser.params.testConfig.hrUser.password); - processDefinitionService = new ProcessDefinitionsService(apiService); const processDefinition = await processDefinitionService.getProcessDefinitionByName(processDefinitionName, simpleApp); - processInstancesService = new ProcessInstancesService(apiService); processInstance = await processInstancesService.createProcessInstance(processDefinition.entry.key, simpleApp, { name: 'upload process' }); - await this.alfrescoJsApi.login(browser.params.testConfig.hrUser.email, browser.params.testConfig.hrUser.password); + await apiService.getInstance().login(browser.params.testConfig.hrUser.email, browser.params.testConfig.hrUser.password); uploadedFolder = await uploadActions.createFolder(folderName, '-my-'); await uploadActions.uploadFile(pdfFileOne.location, pdfFileOne.name, uploadedFolder.entry.id); await uploadActions.uploadFile(pdfFileTwo.location, pdfFileTwo.name, uploadedFolder.entry.id); @@ -87,7 +84,7 @@ describe('Process Task - Attach content file', () => { }); beforeEach(async () => { - await loginSSOPage.loginSSOIdentityService(browser.params.testConfig.hrUser.email, browser.params.testConfig.hrUser.password); + await loginSSOPage.login(browser.params.testConfig.hrUser.email, browser.params.testConfig.hrUser.password); await navigationBarPage.navigateToProcessServicesCloudPage(); await appListCloudComponent.checkApsContainer(); }); diff --git a/e2e/process-services-cloud/start-process-cloud.e2e.ts b/e2e/process-services-cloud/start-process-cloud.e2e.ts index 3249f1bd6e..0e9357a9a9 100644 --- a/e2e/process-services-cloud/start-process-cloud.e2e.ts +++ b/e2e/process-services-cloud/start-process-cloud.e2e.ts @@ -27,10 +27,10 @@ describe('Start Process', () => { const appListCloudComponent = new AppListCloudPage(); const processCloudDemoPage = new ProcessCloudDemoPage(); const startProcessPage = new StartProcessCloudPage(); - const apiService = new ApiService( - browser.params.config.oauth2.clientId, - browser.params.config.bpmHost, browser.params.config.oauth2.host, browser.params.config.providers - ); + + const apiService = new ApiService(); + const identityService = new IdentityService(apiService); + const groupIdentityService = new GroupIdentityService(apiService); const processName = StringUtil.generateRandomString(10); const processName255Characters = StringUtil.generateRandomString(255); @@ -38,19 +38,16 @@ describe('Start Process', () => { const lengthValidationError = 'Length exceeded, 255 characters max.'; const requiredError = 'Process Name is required'; const simpleApp = browser.params.resources.ACTIVITI_CLOUD_APPS.SIMPLE_APP.name; - let identityService: IdentityService; - let groupIdentityService: GroupIdentityService; let testUser, groupInfo; 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.ACTIVITI_USER]); + + testUser = await identityService.createIdentityUserWithRole( [identityService.ROLES.ACTIVITI_USER]); groupInfo = await groupIdentityService.getGroupInfoByGroupName('hr'); await identityService.addUserToGroup(testUser.idIdentityService, groupInfo.id); - await loginSSOPage.loginSSOIdentityService(testUser.email, testUser.password); + await loginSSOPage.login(testUser.email, testUser.password); await navigationBarPage.navigateToProcessServicesCloudPage(); await appListCloudComponent.checkApsContainer(); 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 c1edadcacf..70b9755f14 100644 --- a/e2e/process-services-cloud/start-task-form-cloud.e2e.ts +++ b/e2e/process-services-cloud/start-task-form-cloud.e2e.ts @@ -25,7 +25,6 @@ import { StartTasksCloudPage, ApiService, IdentityService, - SettingsPage, GroupIdentityService, TaskFormCloudComponent, LocalStorageUtil, @@ -43,8 +42,6 @@ import { StartProcessCloudConfiguration } from './config/start-process-cloud.con import { ProcessCloudDemoPage } from '../pages/adf/demo-shell/process-services/process-cloud-demo.page'; import { ProcessDetailsCloudDemoPage } from '../pages/adf/demo-shell/process-services-cloud/process-details-cloud-demo.page'; import { FileModel } from '../models/ACS/file.model'; -import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; -import { AcsUserModel } from '../models/ACS/acs-user.model'; import { BreadCrumbDropdownPage } from '../pages/adf/content-services/breadcrumb/bread-crumb-dropdown.page'; describe('Start Task Form', () => { @@ -58,28 +55,23 @@ describe('Start Task Form', () => { const contentNodeSelectorDialogPage = new ContentNodeSelectorDialogPage(); const breadCrumbDropdownPage = new BreadCrumbDropdownPage(); const processDetailsCloudDemoPage = new ProcessDetailsCloudDemoPage(); - const settingsPage = new SettingsPage(); const widget = new ProcessCloudWidgetPage(); const startProcessPage = new StartProcessCloudPage(); const processCloudDemoPage = new ProcessCloudDemoPage(); const taskHeaderCloudPage = new TaskHeaderCloudPage(); const processHeaderCloud = new ProcessHeaderCloudPage(); - const apiService = new ApiService( - browser.params.config.oauth2.clientId, - browser.params.config.bpmHost, browser.params.config.oauth2.host, browser.params.config.providers - ); - this.alfrescoJsApi = new AlfrescoApi({ - provider: 'ECM', - hostEcm: browser.params.config.bpmHost - }); - const uploadActions = new UploadActions(this.alfrescoJsApi); + + const apiService = new ApiService(); + const uploadActions = new UploadActions(apiService); + const identityService = new IdentityService(apiService); + const groupIdentityService = new GroupIdentityService(apiService); const startProcessCloudConfiguration = new StartProcessCloudConfiguration(); const startProcessCloudConfig = startProcessCloudConfiguration.getConfiguration(); const standaloneTaskName = StringUtil.generateRandomString(5); const startEventFormProcess = StringUtil.generateRandomString(5); - let testUser, acsUser, groupInfo; + let testUser, groupInfo; let processDefinitionService: ProcessDefinitionsService; let processInstancesService: ProcessInstancesService; let processDefinition, uploadLocalFileProcess, uploadContentFileProcess, uploadDefaultFileProcess, @@ -95,17 +87,13 @@ describe('Start Task Form', () => { 'location': browser.params.resources.Files.ADF_DOCUMENTS.TEST.file_path }); - let identityService: IdentityService; - let groupIdentityService: GroupIdentityService; const folderName = StringUtil.generateRandomString(5); let uploadedFolder; 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.ACTIVITI_USER]); + testUser = await identityService.createIdentityUserWithRole( [identityService.ROLES.ACTIVITI_USER]); groupInfo = await groupIdentityService.getGroupInfoByGroupName('hr'); await identityService.addUserToGroup(testUser.idIdentityService, groupInfo.id); @@ -147,30 +135,12 @@ describe('Start Task Form', () => { 'businessKey': StringUtil.generateRandomString() }); - acsUser = await new AcsUserModel({ - email: testUser.email, - password: testUser.password, - id: testUser.username, - firstName: testUser.firstName, - lastName: testUser.lastName - }); - await this.alfrescoJsApi.login(browser.params.identityAdmin.email, browser.params.identityAdmin.password); - await this.alfrescoJsApi.core.peopleApi.addPerson(acsUser); - await this.alfrescoJsApi.login(acsUser.id, acsUser.password); + await apiService.getInstance().login(testUser.email, testUser.password); uploadedFolder = await uploadActions.createFolder(folderName, '-my-'); await uploadActions.uploadFile(testFileModel.location, testFileModel.name, uploadedFolder.entry.id); await uploadActions.uploadFile(pdfFileModel.location, pdfFileModel.name, uploadedFolder.entry.id); - await settingsPage.setProviderEcmBpmSso( - browser.params.config.bpmHost, - browser.params.config.bpmHost, - browser.params.config.oauth2.host, - browser.params.config.identityHost, - browser.params.config.oauth2.clientId, - false); - await loginSSOPage.clickOnSSOButton(); - - await loginSSOPage.loginSSOIdentityService(testUser.email, testUser.password); + await loginSSOPage.login(testUser.email, testUser.password); await LocalStorageUtil.setConfigField('adf-cloud-start-process', JSON.stringify(startProcessCloudConfig)); }); @@ -186,7 +156,6 @@ describe('Start Task Form', () => { }); describe('StandaloneTask with form', () => { - beforeEach(async () => { await navigationBarPage.navigateToProcessServicesCloudPage(); await appListCloudComponent.checkApsContainer(); @@ -238,7 +207,6 @@ describe('Start Task Form', () => { }); describe('Start a process with a start event form', async () => { - beforeEach(async () => { await navigationBarPage.navigateToProcessServicesCloudPage(); await appListCloudComponent.checkApsContainer(); @@ -312,7 +280,6 @@ describe('Start Task Form', () => { }); describe('Attach content to process-cloud task form using upload widget', async () => { - beforeEach(async () => { await navigationBarPage.navigateToProcessServicesCloudPage(); await appListCloudComponent.checkApsContainer(); 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 cc953c05b1..6ee21991fe 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 @@ -33,6 +33,8 @@ import { describe('Start Task', () => { + const simpleApp = browser.params.resources.ACTIVITI_CLOUD_APPS.SIMPLE_APP.name; + const loginSSOPage = new LoginSSOPage(); const taskHeaderCloudPage = new TaskHeaderCloudPage(); const navigationBarPage = new NavigationBarPage(); @@ -40,10 +42,10 @@ describe('Start Task', () => { const tasksCloudDemoPage = new TasksCloudDemoPage(); const startTask = new StartTasksCloudPage(); const peopleCloudComponent = new PeopleCloudComponentPage(); - const apiService = new ApiService( - browser.params.config.oauth2.clientId, - browser.params.config.bpmHost, browser.params.config.oauth2.host, browser.params.config.providers - ); + + const apiService = new ApiService(); + const identityService = new IdentityService(apiService); + const groupIdentityService = new GroupIdentityService(apiService); const standaloneTaskName = StringUtil.generateRandomString(5); const reassignTaskName = StringUtil.generateRandomString(5); @@ -54,18 +56,12 @@ describe('Start Task', () => { const requiredError = 'Field required'; const dateValidationError = 'Date format DD/MM/YYYY'; let apsUser, testUser, activitiUser, groupInfo; - const simpleApp = browser.params.resources.ACTIVITI_CLOUD_APPS.SIMPLE_APP.name; - - let identityService: IdentityService; - let groupIdentityService: GroupIdentityService; 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.ACTIVITI_USER]); - apsUser = await identityService.createIdentityUserWithRole(apiService, [identityService.ROLES.ACTIVITI_USER, identityService.ROLES.ACTIVITI_USER]); + testUser = await identityService.createIdentityUserWithRole([identityService.ROLES.ACTIVITI_USER]); + apsUser = await identityService.createIdentityUserWithRole([identityService.ROLES.ACTIVITI_USER, identityService.ROLES.ACTIVITI_USER]); activitiUser = await identityService.createIdentityUser(); groupInfo = await groupIdentityService.getGroupInfoByGroupName('hr'); @@ -73,7 +69,7 @@ describe('Start Task', () => { await identityService.addUserToGroup(apsUser.idIdentityService, groupInfo.id); await apiService.login(testUser.email, testUser.password); - await loginSSOPage.loginSSOIdentityService(testUser.email, testUser.password); + await loginSSOPage.login(testUser.email, testUser.password); }); afterAll(async () => { @@ -92,7 +88,7 @@ describe('Start Task', () => { await identityService.deleteIdentityUser(activitiUser.idIdentityService); await identityService.deleteIdentityUser(apsUser.idIdentityService); await identityService.deleteIdentityUser(testUser.idIdentityService); - }); + }); beforeEach(async () => { await navigationBarPage.navigateToProcessServicesCloudPage(); @@ -143,7 +139,7 @@ describe('Start Task', () => { await startTask.checkValidationErrorIsDisplayed(requiredError); await startTask.addName(standaloneTaskName); await startTask.addDescription('descriptions'); - await startTask .addDueDate('12/12/2018'); + await startTask.addDueDate('12/12/2018'); await startTask.checkStartButtonIsEnabled(); await startTask.clickCancelButton(); await tasksCloudDemoPage.taskListCloudComponent().checkContentIsNotDisplayedByName(standaloneTaskName); 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 ff89775aaf..435578ace7 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 @@ -33,31 +33,27 @@ import { describe('Start Task - Group Cloud Component', () => { + const simpleApp = browser.params.resources.ACTIVITI_CLOUD_APPS.SIMPLE_APP.name; + const loginSSOPage = new LoginSSOPage(); const navigationBarPage = new NavigationBarPage(); const appListCloudComponent = new AppListCloudPage(); const tasksCloudDemoPage = new TasksCloudDemoPage(); const startTask = new StartTasksCloudPage(); const peopleCloudComponent = new PeopleCloudComponentPage(); - const apiService = new ApiService( - browser.params.config.oauth2.clientId, - browser.params.config.bpmHost, browser.params.config.oauth2.host, browser.params.config.providers - ); const groupCloud = new GroupCloudComponentPage(); + const apiService = new ApiService(); + const identityService = new IdentityService(apiService); + const groupIdentityService = new GroupIdentityService(apiService); + const bothGroupsTaskName = StringUtil.generateRandomString(5); const oneGroupTaskName = StringUtil.generateRandomString(5); let apsUser, testUser, hrGroup, testGroup; - const simpleApp = browser.params.resources.ACTIVITI_CLOUD_APPS.SIMPLE_APP.name; - - let identityService: IdentityService; - let groupIdentityService: GroupIdentityService; beforeAll(async () => { await apiService.login(browser.params.identityAdmin.email, browser.params.identityAdmin.password); - identityService = new IdentityService(apiService); - groupIdentityService = new GroupIdentityService(apiService); testUser = await identityService.createIdentityUser(); apsUser = await identityService.createIdentityUser(); @@ -88,7 +84,7 @@ describe('Start Task - Group Cloud Component', () => { }); beforeEach(async () => { - await loginSSOPage.loginSSOIdentityService(testUser.email, testUser.password); + await loginSSOPage.login(testUser.email, testUser.password); await navigationBarPage.navigateToProcessServicesCloudPage(); await appListCloudComponent.checkApsContainer(); await appListCloudComponent.checkAppIsDisplayed(simpleApp); diff --git a/e2e/process-services-cloud/task-filters-cloud.e2e.ts b/e2e/process-services-cloud/task-filters-cloud.e2e.ts index b89dd614f4..6e3b78f0fe 100644 --- a/e2e/process-services-cloud/task-filters-cloud.e2e.ts +++ b/e2e/process-services-cloud/task-filters-cloud.e2e.ts @@ -32,42 +32,40 @@ import { TasksCloudDemoPage } from '../pages/adf/demo-shell/process-services/tas describe('Task filters cloud', () => { describe('Task Filters', () => { + + const simpleApp = browser.params.resources.ACTIVITI_CLOUD_APPS.SIMPLE_APP.name; + const loginSSOPage = new LoginSSOPage(); const navigationBarPage = new NavigationBarPage(); const appListCloudComponent = new AppListCloudPage(); const tasksCloudDemoPage = new TasksCloudDemoPage(); - let tasksService: TasksService; - let identityService: IdentityService; - let groupIdentityService: GroupIdentityService; - let queryService: QueryService; + const apiService = new ApiService(); + const queryService = new QueryService(apiService); + const identityService = new IdentityService(apiService); + const groupIdentityService = new GroupIdentityService(apiService); + const tasksService = new TasksService(apiService); + let testUser, groupInfo; - const apiService = new ApiService(browser.params.config.oauth2.clientId, browser.params.config.bpmHost, browser.params.config.oauth2.host, 'BPM'); const newTask = StringUtil.generateRandomString(5), completedTask = StringUtil.generateRandomString(5); - const simpleApp = browser.params.resources.ACTIVITI_CLOUD_APPS.SIMPLE_APP.name; beforeAll(async () => { - queryService = new QueryService(apiService); - 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.ACTIVITI_USER]); + + testUser = await identityService.createIdentityUserWithRole( [identityService.ROLES.ACTIVITI_USER]); groupInfo = await groupIdentityService.getGroupInfoByGroupName('hr'); await identityService.addUserToGroup(testUser.idIdentityService, groupInfo.id); await apiService.login(testUser.email, testUser.password); - await loginSSOPage.loginSSOIdentityService(testUser.email, testUser.password); - - }); + await loginSSOPage.login(testUser.email, testUser.password); + }); afterAll(async () => { await apiService.login(browser.params.identityAdmin.email, browser.params.identityAdmin.password); await identityService.deleteIdentityUser(testUser.idIdentityService); - - }); + }); beforeEach(async () => { await navigationBarPage.navigateToProcessServicesCloudPage(); @@ -76,8 +74,6 @@ describe('Task filters cloud', () => { }); it('[C290009] Should display default filters and created task', async () => { - tasksService = new TasksService(apiService); - const task = await tasksService.createStandaloneTask(newTask, simpleApp); await tasksService.claimTask(task.entry.id, simpleApp); @@ -92,8 +88,6 @@ describe('Task filters cloud', () => { }); it('[C289955] Should display task in Complete Tasks List when task is completed', async () => { - tasksService = new TasksService(apiService); - const toBeCompletedTask = await tasksService.createStandaloneTask(completedTask, simpleApp); await tasksService.claimTask(toBeCompletedTask.entry.id, simpleApp); await tasksService.completeTask(toBeCompletedTask.entry.id, simpleApp); @@ -108,6 +102,5 @@ describe('Task filters cloud', () => { await tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(completedTask); }); - }); }); diff --git a/e2e/process-services-cloud/task-form-cloud-component-tab.e2e.ts b/e2e/process-services-cloud/task-form-cloud-component-tab.e2e.ts index ac689460dc..dabf2353a6 100644 --- a/e2e/process-services-cloud/task-form-cloud-component-tab.e2e.ts +++ b/e2e/process-services-cloud/task-form-cloud-component-tab.e2e.ts @@ -26,11 +26,10 @@ import { ProcessInstancesService, TaskHeaderCloudPage, TaskFormCloudComponent, - IdentityService, GroupIdentityService, ProcessCloudWidgetPage + IdentityService, GroupIdentityService, ProcessCloudWidgetPage, FormCloudService } from '@alfresco/adf-testing'; import { NavigationBarPage } from '../pages/adf/navigation-bar.page'; import { TasksCloudDemoPage } from '../pages/adf/demo-shell/process-services/tasks-cloud-demo.page'; -import { FormCloudService } from '../../lib/testing/src/lib/form-cloud/actions/form-cloud.service'; describe('Task form cloud component', () => { @@ -50,8 +49,8 @@ describe('Task form cloud component', () => { const candidateBaseApp = browser.params.resources.ACTIVITI_CLOUD_APPS.CANDIDATE_BASE_APP.name; const simpleApp = browser.params.resources.ACTIVITI_CLOUD_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); - const apiServiceHrUser = new ApiService(browser.params.config.oauth2.clientId, browser.params.config.bpmHost, browser.params.config.oauth2.host, browser.params.config.providers); + const apiService = new ApiService(); + const apiServiceHrUser = new ApiService(); const visibilityConditionTasks = []; @@ -85,7 +84,7 @@ describe('Task form cloud component', () => { identityService = new IdentityService(apiService); const groupIdentityService = new GroupIdentityService(apiService); - testUser = await identityService.createIdentityUserWithRole(apiService, [identityService.ROLES.ACTIVITI_USER]); + testUser = await identityService.createIdentityUserWithRole( [identityService.ROLES.ACTIVITI_USER]); const groupInfo = await groupIdentityService.getGroupInfoByGroupName('hr'); await identityService.addUserToGroup(testUser.idIdentityService, groupInfo.id); @@ -135,7 +134,7 @@ describe('Task form cloud component', () => { processInstancesService = new ProcessInstancesService(apiServiceHrUser); await processInstancesService.createProcessInstance(processDefinition.entry.key, candidateBaseApp); - await loginSSOPage.loginSSOIdentityService(testUser.email, testUser.password); + await loginSSOPage.login(testUser.email, testUser.password); }, 5 * 60 * 1000); @@ -156,7 +155,6 @@ describe('Task form cloud component', () => { }); describe('Complete task with form - cloud directive', () => { - it('[C315174] Should be able to complete a standalone task with visible tab with empty value for field', async () => { await tasksCloudDemoPage.taskFilterCloudComponent.clickTaskFilter('my-tasks'); await expect(await tasksCloudDemoPage.taskFilterCloudComponent.getActiveFilterName()).toBe('My Tasks'); 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 4f95c64003..033056a77e 100644 --- a/e2e/process-services-cloud/task-form-cloud-component.e2e.ts +++ b/e2e/process-services-cloud/task-form-cloud-component.e2e.ts @@ -27,14 +27,17 @@ import { StringUtil, TaskFormCloudComponent, TaskHeaderCloudPage, - TasksService + TasksService, + FormCloudService } from '@alfresco/adf-testing'; import { NavigationBarPage } from '../pages/adf/navigation-bar.page'; import { TasksCloudDemoPage } from '../pages/adf/demo-shell/process-services/tasks-cloud-demo.page'; -import { FormCloudService } from '../../lib/testing/src/lib/form-cloud/actions/form-cloud.service'; describe('Task form cloud component', () => { + const candidateBaseApp = browser.params.resources.ACTIVITI_CLOUD_APPS.CANDIDATE_BASE_APP.name; + const simpleApp = browser.params.resources.ACTIVITI_CLOUD_APPS.SIMPLE_APP.name; + const loginSSOPage = new LoginSSOPage(); const navigationBarPage = new NavigationBarPage(); const appListCloudComponent = new AppListCloudPage(); @@ -43,25 +46,24 @@ describe('Task form cloud component', () => { const taskFormCloudComponent = new TaskFormCloudComponent(); const widget = new ProcessCloudWidgetPage(); - let processDefinitionService: ProcessDefinitionsService; - let processInstancesService: ProcessInstancesService; + const apiService = new ApiService(); + const tasksService = new TasksService(apiService); + const queryService = new QueryService(apiService); + const processDefinitionService = new ProcessDefinitionsService(apiService); + const processInstancesService = new ProcessInstancesService(apiService); let completedTask, createdTask, assigneeTask, toBeCompletedTask, formValidationsTask, formTaskId, assigneeTaskId, assigneeReleaseTask, candidateUsersTask ; - const candidateBaseApp = browser.params.resources.ACTIVITI_CLOUD_APPS.CANDIDATE_BASE_APP.name; - const simpleApp = browser.params.resources.ACTIVITI_CLOUD_APPS.SIMPLE_APP.name; const completedTaskName = StringUtil.generateRandomString(), assignedTaskName = StringUtil.generateRandomString(); - const apiServiceHrUser = new ApiService(browser.params.config.oauth2.clientId, browser.params.config.bpmHost, browser.params.config.oauth2.host, browser.params.config.providers); beforeAll(async () => { - await apiServiceHrUser.login(browser.params.testConfig.hrUser.email, browser.params.testConfig.hrUser.password); - const tasksService = new TasksService(apiServiceHrUser); - const queryService = new QueryService(apiServiceHrUser); + await apiService.login(browser.params.testConfig.hrUser.email, browser.params.testConfig.hrUser.password); + createdTask = await tasksService.createStandaloneTask(StringUtil.generateRandomString(), candidateBaseApp); assigneeTask = await tasksService.createStandaloneTask(StringUtil.generateRandomString(), candidateBaseApp); await tasksService.claimTask(assigneeTask.entry.id, candidateBaseApp); - const formCloudService = new FormCloudService(apiServiceHrUser); + const formCloudService = new FormCloudService(apiService); const formToTestValidationsKey = await formCloudService.getIdByFormName(browser.params.resources.ACTIVITI_CLOUD_APPS.CANDIDATE_BASE_APP.name, browser.params.resources.ACTIVITI_CLOUD_APPS.CANDIDATE_BASE_APP.forms.formtotestvalidations); @@ -76,12 +78,9 @@ describe('Task form cloud component', () => { await tasksService.claimTask(completedTask.entry.id, candidateBaseApp); await tasksService.createAndCompleteTask(completedTaskName, candidateBaseApp); - processDefinitionService = new ProcessDefinitionsService(apiServiceHrUser); - let processDefinition = await processDefinitionService .getProcessDefinitionByName(browser.params.resources.ACTIVITI_CLOUD_APPS.CANDIDATE_BASE_APP.processes.candidateUserProcess, candidateBaseApp); - processInstancesService = new ProcessInstancesService(apiServiceHrUser); const candidateUsersProcessInstance = await processInstancesService.createProcessInstance(processDefinition.entry.key, candidateBaseApp); const processInstanceTasks = await queryService.getProcessInstanceTasks(candidateUsersProcessInstance.entry.id, candidateBaseApp); @@ -103,7 +102,7 @@ describe('Task form cloud component', () => { assigneeReleaseTask = await queryService.getProcessInstanceTasks(assigneeProcess.entry.id, simpleApp); assigneeTaskId = assigneeReleaseTask.list.entries[0].entry.id; - await loginSSOPage.loginSSOIdentityService(browser.params.testConfig.hrUser.email, browser.params.testConfig.hrUser.password); + await loginSSOPage.login(browser.params.testConfig.hrUser.email, browser.params.testConfig.hrUser.password); }, 5 * 60 * 1000); @@ -165,7 +164,6 @@ describe('Task form cloud component', () => { }); describe('Candidate Base App', () => { - beforeEach(async () => { await appListCloudComponent.goToApp(candidateBaseApp); }); diff --git a/e2e/process-services-cloud/task-header-cloud.e2e.ts b/e2e/process-services-cloud/task-header-cloud.e2e.ts index 9c46d0da7c..bf9ed4301f 100644 --- a/e2e/process-services-cloud/task-header-cloud.e2e.ts +++ b/e2e/process-services-cloud/task-header-cloud.e2e.ts @@ -39,6 +39,22 @@ const isValueInvalid = (value: any): boolean => { }; describe('Task Header cloud component', () => { + + const simpleApp = browser.params.resources.ACTIVITI_CLOUD_APPS.SIMPLE_APP.name; + + const loginSSOPage = new LoginSSOPage(); + const navigationBarPage = new NavigationBarPage(); + const appListCloudComponent = new AppListCloudPage(); + const tasksCloudDemoPage = new TasksCloudDemoPage(); + const startTaskCloudPage = new StartTasksCloudPage(); + const peopleCloudComponentPage = new PeopleCloudComponentPage(); + const taskHeaderCloudPage = new TaskHeaderCloudPage(); + + const apiService = new ApiService(); + const identityService = new IdentityService(apiService); + const groupIdentityService = new GroupIdentityService(apiService); + const tasksService = new TasksService(apiService); + const basicCreatedTaskName = StringUtil.generateRandomString(); const completedTaskName = StringUtil.generateRandomString(); const unclaimedTaskName = StringUtil.generateRandomString(); @@ -54,26 +70,12 @@ describe('Task Header cloud component', () => { let groupInfo: any; let testUser: any; let unclaimedTask: any; - const simpleApp = browser.params.resources.ACTIVITI_CLOUD_APPS.SIMPLE_APP.name; const priority = 30; const description = 'descriptionTask'; const formatDate = 'MMM D, YYYY'; const dateTimeFormat = 'MMM D, Y, H:mm'; const defaultFormat = 'M/D/YY'; - const taskHeaderCloudPage = new TaskHeaderCloudPage(); - - const loginSSOPage = new LoginSSOPage(); - const navigationBarPage = new NavigationBarPage(); - const appListCloudComponent = new AppListCloudPage(); - const tasksCloudDemoPage = new TasksCloudDemoPage(); - const startTaskCloudPage = new StartTasksCloudPage(); - const peopleCloudComponentPage = new PeopleCloudComponentPage(); - const apiService = new ApiService(browser.params.config.oauth2.clientId, browser.params.config.bpmHost, browser.params.config.oauth2.host, browser.params.config.providers); - let tasksService: TasksService; - let identityService: IdentityService; - let groupIdentityService: GroupIdentityService; - const createCompletedTask = async function () { const completedTaskId = await tasksService.createStandaloneTask(completedTaskName, simpleApp, { priority: priority, description: description, dueDate: basicCreatedTask.entry.createdDate }); @@ -98,16 +100,12 @@ describe('Task Header cloud component', () => { 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.ACTIVITI_USER]); + testUser = await identityService.createIdentityUserWithRole( [identityService.ROLES.ACTIVITI_USER]); groupInfo = await groupIdentityService.getGroupInfoByGroupName('hr'); await identityService.addUserToGroup(testUser.idIdentityService, groupInfo.id); await apiService.login(testUser.email, testUser.password); - tasksService = new TasksService(apiService); - unclaimedTask = await tasksService.createStandaloneTask(unclaimedTaskName, simpleApp); const createdTaskId = await createTask(); @@ -123,7 +121,7 @@ describe('Task Header cloud component', () => { subTaskCreatedDate = moment(subTask.entry.createdDate).format(formatDate); await browser.sleep(3000); - await loginSSOPage.loginSSOIdentityService(testUser.email, testUser.password); + await loginSSOPage.login(testUser.email, testUser.password); }); afterAll(async () => { 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 index 2cda738fa4..74ad3b1b18 100644 --- a/e2e/process-services-cloud/task-list-cloud-action-menu.e2e.ts +++ b/e2e/process-services-cloud/task-list-cloud-action-menu.e2e.ts @@ -23,48 +23,44 @@ import { NavigationBarPage } from '../pages/adf/navigation-bar.page'; describe('Process list cloud', () => { describe('Process List - Custom Action Menu', () => { + + const simpleApp = browser.params.resources.ACTIVITI_CLOUD_APPS.SIMPLE_APP.name; + const loginSSOPage = new LoginSSOPage(); const navigationBarPage = new NavigationBarPage(); const appListCloudComponent = new AppListCloudPage(); const tasksCloudDemoPage = new TasksCloudDemoPage(); - let processDefinitionService: ProcessDefinitionsService; - let processInstancesService: ProcessInstancesService; - let identityService: IdentityService; - let groupIdentityService: GroupIdentityService; - let queryService: QueryService; - let tasksService: TasksService; + const apiService = new ApiService(); + const identityService = new IdentityService(apiService); + const groupIdentityService = new GroupIdentityService(apiService); + const processDefinitionService = new ProcessDefinitionsService(apiService); + const processInstancesService = new ProcessInstancesService(apiService); + const queryService = new QueryService(apiService); + const tasksService = new TasksService(apiService); + let testUser, groupInfo, editProcess, deleteProcess, editTask, deleteTask; - const simpleApp = browser.params.resources.ACTIVITI_CLOUD_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); - 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.ACTIVITI_USER]); - groupInfo = await groupIdentityService.getGroupInfoByGroupName('hr'); - await identityService.addUserToGroup(testUser.idIdentityService, groupInfo.id); + testUser = await identityService.createIdentityUserWithRole( [identityService.ROLES.ACTIVITI_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 + await apiService.login(testUser.email, testUser.password); + const processDefinition = await processDefinitionService .getProcessDefinitionByName(browser.params.resources.ACTIVITI_CLOUD_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); + editProcess = await processInstancesService.createProcessInstance(processDefinition.entry.key, simpleApp); + deleteProcess = await processInstancesService.createProcessInstance(processDefinition.entry.key, simpleApp); - 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); + editTask = await queryService.getProcessInstanceTasks(editProcess.entry.id, simpleApp); + deleteTask = await queryService.getProcessInstanceTasks(deleteProcess.entry.id, simpleApp); + await tasksService.claimTask(editTask.list.entries[0].entry.id, simpleApp); + await tasksService.claimTask(deleteTask.list.entries[0].entry.id, simpleApp); - await loginSSOPage.loginSSOIdentityService(testUser.email, testUser.password); + await loginSSOPage.login(testUser.email, testUser.password); }); afterAll(async() => { diff --git a/e2e/process-services-cloud/task-list-properties-sort.e2e.ts b/e2e/process-services-cloud/task-list-properties-sort.e2e.ts index c29c94c2c1..c149473b98 100644 --- a/e2e/process-services-cloud/task-list-properties-sort.e2e.ts +++ b/e2e/process-services-cloud/task-list-properties-sort.e2e.ts @@ -29,14 +29,13 @@ describe('Edit task filters and task list properties', () => { const loginSSOPage = new LoginSSOPage(); const navigationBarPage = new NavigationBarPage(); - const appListCloudComponent = new AppListCloudPage(); const tasksCloudDemoPage = new TasksCloudDemoPage(); - let tasksService: TasksService; - let identityService: IdentityService; - let groupIdentityService: GroupIdentityService; - const apiService = new ApiService(browser.params.config.oauth2.clientId, browser.params.config.bpmHost, browser.params.config.oauth2.host, browser.params.config.providers); + const apiService = new ApiService(); + const identityService = new IdentityService(apiService); + const groupIdentityService = new GroupIdentityService(apiService); + const tasksService = new TasksService(apiService); const simpleApp = browser.params.resources.ACTIVITI_CLOUD_APPS.SIMPLE_APP.name; const candidateBaseApp = browser.params.resources.ACTIVITI_CLOUD_APPS.CANDIDATE_BASE_APP.name; @@ -45,13 +44,9 @@ describe('Edit task filters and task list properties', () => { const priority = 30; beforeAll(async () => { - await apiService.login(browser.params.identityAdmin.email, browser.params.identityAdmin.password); - identityService = new IdentityService(apiService); - groupIdentityService = new GroupIdentityService(apiService); - tasksService = new TasksService(apiService); - testUser = await identityService.createIdentityUserWithRole(apiService, [identityService.ROLES.ACTIVITI_USER]); + testUser = await identityService.createIdentityUserWithRole( [identityService.ROLES.ACTIVITI_USER]); groupInfo = await groupIdentityService.getGroupInfoByGroupName('hr'); await identityService.addUserToGroup(testUser.idIdentityService, groupInfo.id); @@ -75,7 +70,7 @@ describe('Edit task filters and task list properties', () => { const jsonFile = new TaskListCloudConfiguration().getConfiguration(); - await loginSSOPage.loginSSOIdentityService(testUser.email, testUser.password); + await loginSSOPage.login(testUser.email, testUser.password); await LocalStorageUtil.setConfigField('adf-cloud-task-list', JSON.stringify(jsonFile)); await LocalStorageUtil.setConfigField('adf-edit-task-filter', JSON.stringify({ 'filterProperties': [ @@ -122,7 +117,6 @@ describe('Edit task filters and task list properties', () => { }); describe('Edit task filters and task list properties - sort properties', () => { - beforeEach(async () => { await navigationBarPage.navigateToProcessServicesCloudPage(); await appListCloudComponent.checkApsContainer(); diff --git a/e2e/process-services-cloud/task-list-properties.e2e.ts b/e2e/process-services-cloud/task-list-properties.e2e.ts index 240d2c6dd5..b41be03819 100644 --- a/e2e/process-services-cloud/task-list-properties.e2e.ts +++ b/e2e/process-services-cloud/task-list-properties.e2e.ts @@ -30,21 +30,21 @@ import { taskFilterConfiguration } from './config/task-filter.config'; describe('Edit task filters and task list properties', () => { + const simpleApp = browser.params.resources.ACTIVITI_CLOUD_APPS.SIMPLE_APP.name; + const candidateBaseApp = browser.params.resources.ACTIVITI_CLOUD_APPS.CANDIDATE_BASE_APP.name; + const loginSSOPage = new LoginSSOPage(); const navigationBarPage = new NavigationBarPage(); - const appListCloudComponent = new AppListCloudPage(); const tasksCloudDemoPage = new TasksCloudDemoPage(); - let tasksService: TasksService; - let processDefinitionService: ProcessDefinitionsService; - let processInstancesService: ProcessInstancesService; - let identityService: IdentityService; - let groupIdentityService: GroupIdentityService; - const apiService = new ApiService(browser.params.config.oauth2.clientId, browser.params.config.bpmHost, browser.params.config.oauth2.host, browser.params.config.providers); + const apiService = new ApiService(); + const identityService = new IdentityService(apiService); + const groupIdentityService = new GroupIdentityService(apiService); + const tasksService = new TasksService(apiService); + const processDefinitionService = new ProcessDefinitionsService(apiService); + const processInstancesService = new ProcessInstancesService(apiService); - const simpleApp = browser.params.resources.ACTIVITI_CLOUD_APPS.SIMPLE_APP.name; - const candidateBaseApp = browser.params.resources.ACTIVITI_CLOUD_APPS.CANDIDATE_BASE_APP.name; const noTasksFoundMessage = 'No Tasks Found'; let createdTask, notAssigned, notDisplayedTask, processDefinition, processInstance, priorityTask, subTask, otherOwnerTask, testUser, groupInfo; @@ -55,13 +55,9 @@ describe('Edit task filters and task list properties', () => { const afterDate = moment().add(1, 'days').format('DD/MM/YYYY'); beforeAll(async () => { - await apiService.login(browser.params.identityAdmin.email, browser.params.identityAdmin.password); - identityService = new IdentityService(apiService); - groupIdentityService = new GroupIdentityService(apiService); - tasksService = new TasksService(apiService); - testUser = await identityService.createIdentityUserWithRole(apiService, [identityService.ROLES.ACTIVITI_USER]); + testUser = await identityService.createIdentityUserWithRole([identityService.ROLES.ACTIVITI_USER]); groupInfo = await groupIdentityService.getGroupInfoByGroupName('hr'); await identityService.addUserToGroup(testUser.idIdentityService, groupInfo.id); @@ -81,11 +77,9 @@ describe('Edit task filters and task list properties', () => { notDisplayedTask = await tasksService.createStandaloneTask(StringUtil.generateRandomString(), candidateBaseApp); await tasksService.claimTask(notDisplayedTask.entry.id, candidateBaseApp); - processDefinitionService = new ProcessDefinitionsService(apiService); processDefinition = await processDefinitionService .getProcessDefinitionByName(browser.params.resources.ACTIVITI_CLOUD_APPS.SIMPLE_APP.processes.dropdownrestprocess, simpleApp); - processInstancesService = new ProcessInstancesService(apiService); processInstance = await processInstancesService.createProcessInstance(processDefinition.entry.key, simpleApp); subTask = await tasksService.createStandaloneTask(StringUtil.generateRandomString(), simpleApp, { 'parentTaskId': createdTask.entry.id }); @@ -93,7 +87,7 @@ describe('Edit task filters and task list properties', () => { const jsonFile = new TaskListCloudConfiguration().getConfiguration(); - await loginSSOPage.loginSSOIdentityService(testUser.email, testUser.password); + await loginSSOPage.login(testUser.email, testUser.password); await LocalStorageUtil.setConfigField('adf-cloud-task-list', JSON.stringify(jsonFile)); await LocalStorageUtil.setConfigField('adf-edit-task-filter', JSON.stringify(taskFilterConfiguration)); }, 5 * 60 * 1000); @@ -105,7 +99,6 @@ describe('Edit task filters and task list properties', () => { }); describe('Edit task filters and task list properties - filter properties', () => { - beforeEach(async () => { await navigationBarPage.navigateToProcessServicesCloudPage(); await appListCloudComponent.checkApsContainer(); @@ -222,7 +215,7 @@ describe('Edit task filters and task list properties', () => { await expect(await tasksCloudDemoPage.taskListCloudComponent().getNoTasksFoundMessage()).toEqual(noTasksFoundMessage); }); - it('[C297484] Task is displayed when typing into lastModifiedFrom field a date before the task CreatedDate', async() => { + it('[C297484] Task is displayed when typing into lastModifiedFrom field a date before the task CreatedDate', async () => { await tasksCloudDemoPage.editTaskFilterCloudComponent().setLastModifiedFrom(beforeDate); await tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(createdTask.entry.name); @@ -270,5 +263,5 @@ describe('Edit task filters and task list properties', () => { await tasksCloudDemoPage.editTaskFilterCloudComponent().setLastModifiedTo(afterDate); await expect(await tasksCloudDemoPage.taskListCloudComponent().getNoTasksFoundMessage()).toEqual(noTasksFoundMessage); }); - }); + }); }); diff --git a/e2e/process-services-cloud/task-list-selection.e2e.ts b/e2e/process-services-cloud/task-list-selection.e2e.ts index c92d71dd79..9366d0d195 100644 --- a/e2e/process-services-cloud/task-list-selection.e2e.ts +++ b/e2e/process-services-cloud/task-list-selection.e2e.ts @@ -15,7 +15,15 @@ * limitations under the License. */ -import { ApiService, AppListCloudPage, GroupIdentityService, IdentityService, LoginSSOPage, StringUtil, TasksService } from '@alfresco/adf-testing'; +import { + ApiService, + AppListCloudPage, + GroupIdentityService, + IdentityService, + LoginSSOPage, + StringUtil, + TasksService +} from '@alfresco/adf-testing'; import { browser } from 'protractor'; import { TasksCloudDemoPage } from '../pages/adf/demo-shell/process-services/tasks-cloud-demo.page'; import { NavigationBarPage } from '../pages/adf/navigation-bar.page'; @@ -23,46 +31,42 @@ import { NavigationBarPage } from '../pages/adf/navigation-bar.page'; describe('Task list cloud - selection', () => { describe('Task list cloud - selection', () => { + + const simpleApp = browser.params.resources.ACTIVITI_CLOUD_APPS.SIMPLE_APP.name; + const loginSSOPage = new LoginSSOPage(); const navigationBarPage = new NavigationBarPage(); const appListCloudComponent = new AppListCloudPage(); const tasksCloudDemoPage = new TasksCloudDemoPage(); - const apiService = new ApiService( - browser.params.config.oauth2.clientId, - browser.params.config.bpmHost, browser.params.config.oauth2.host, browser.params.config.providers - ); - let tasksService: TasksService; - let identityService: IdentityService; - let groupIdentityService: GroupIdentityService; + const apiService = new ApiService(); + const identityService = new IdentityService(apiService); + const groupIdentityService = new GroupIdentityService(apiService); + const tasksService = new TasksService(apiService); - const simpleApp = browser.params.resources.ACTIVITI_CLOUD_APPS.SIMPLE_APP.name; const noOfTasks = 3; let response, testUser, groupInfo; const tasks = []; 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.ACTIVITI_USER]); + + testUser = await identityService.createIdentityUserWithRole([identityService.ROLES.ACTIVITI_USER]); groupInfo = await groupIdentityService.getGroupInfoByGroupName('hr'); await identityService.addUserToGroup(testUser.idIdentityService, groupInfo.id); await apiService.login(testUser.email, testUser.password); - tasksService = new TasksService(apiService); - for (let i = 0; i < noOfTasks; i++) { response = await tasksService.createStandaloneTask(StringUtil.generateRandomString(), simpleApp); await tasksService.claimTask(response.entry.id, simpleApp); tasks.push(response.entry.name); } - await loginSSOPage.loginSSOIdentityService(testUser.email, testUser.password); + await loginSSOPage.login(testUser.email, testUser.password); }); - afterAll(async() => { + afterAll(async () => { await apiService.login(browser.params.identityAdmin.email, browser.params.identityAdmin.password); await identityService.deleteIdentityUser(testUser.idIdentityService); }); @@ -174,5 +178,5 @@ describe('Task list cloud - selection', () => { 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-claim-release.e2e.ts b/e2e/process-services-cloud/tasks-claim-release.e2e.ts index bb4443bf0f..5c47b0fe66 100644 --- a/e2e/process-services-cloud/tasks-claim-release.e2e.ts +++ b/e2e/process-services-cloud/tasks-claim-release.e2e.ts @@ -34,23 +34,23 @@ import { ProcessInstanceCloud } from '@alfresco/adf-process-services-cloud'; import { taskFilterConfiguration } from './config/task-filter.config'; describe('Task claim/release', () => { + + const candidateApp = browser.params.resources.ACTIVITI_CLOUD_APPS.CANDIDATE_BASE_APP; + const loginSSOPage = new LoginSSOPage(); const navigationBarPage = new NavigationBarPage(); const appListCloudComponent = new AppListCloudPage(); const tasksCloudDemoPage = new TasksCloudDemoPage(); const taskHeaderCloudPage = new TaskHeaderCloudPage(); const taskFormCloudComponent = new TaskFormCloudComponent(); - const apiService = new ApiService( - browser.params.config.oauth2.clientId, - browser.params.config.bpmHost, browser.params.config.oauth2.host, browser.params.config.providers - ); + + const apiService = new ApiService(); const processDefinitionService = new ProcessDefinitionsService(apiService); const processInstancesService = new ProcessInstancesService(apiService); - const candidateApp = browser.params.resources.ACTIVITI_CLOUD_APPS.CANDIDATE_BASE_APP; + let processInstance: ProcessInstanceCloud; describe('candidate user', () => { - beforeAll(async () => { await apiService.login(browser.params.testConfig.hrUser.email, browser.params.testConfig.hrUser.password); const processDefinition = await processDefinitionService.getProcessDefinitionByName(candidateApp.processes.candidateUserProcess, candidateApp.name); @@ -62,16 +62,16 @@ describe('Task claim/release', () => { }); afterAll(async () => { - await apiService.login(browser.params.testConfig.hrUser.email, browser.params.testConfig.hrUser.password); await processInstancesService.deleteProcessInstance(processInstance.id, processInstance.appName); await navigationBarPage.clickLogoutButton(); }); it('[C306874] Should be able to Claim/Release a process task which has a candidate user', async () => { - await setTaskFilter({ status: 'CREATED', processInstanceId: processInstance.id }); + await setTaskFilter('CREATED', processInstance.id); await tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(candidateApp.tasks.candidateUserTask); await tasksCloudDemoPage.taskListCloudComponent().selectRow(candidateApp.tasks.candidateUserTask); + await taskHeaderCloudPage.checkTaskPropertyListIsDisplayed(); await taskFormCloudComponent.checkClaimButtonIsDisplayed(); @@ -82,6 +82,7 @@ describe('Task claim/release', () => { await taskHeaderCloudPage.checkTaskPropertyListIsDisplayed(); await taskFormCloudComponent.checkReleaseButtonIsDisplayed(); + await expect(await taskHeaderCloudPage.getStatus()).toEqual('ASSIGNED'); await expect(await taskHeaderCloudPage.getAssignee()).toEqual(browser.params.testConfig.hrUser.email); @@ -94,7 +95,7 @@ describe('Task claim/release', () => { await expect(await taskHeaderCloudPage.getAssignee()).toEqual('No assignee'); }); - }); + }); describe('candidate group', () => { let identityService: IdentityService; @@ -105,7 +106,7 @@ describe('Task claim/release', () => { await apiService.login(browser.params.identityAdmin.email, browser.params.identityAdmin.password); identityService = new IdentityService(apiService); groupIdentityService = new GroupIdentityService(apiService); - candidate = await identityService.createIdentityUserWithRole(apiService, [identityService.ROLES.ACTIVITI_USER]); + candidate = await identityService.createIdentityUserWithRole([identityService.ROLES.ACTIVITI_USER]); const groupInfo = await groupIdentityService.getGroupInfoByGroupName('hr'); await identityService.addUserToGroup(candidate.idIdentityService, groupInfo.id); @@ -125,7 +126,7 @@ describe('Task claim/release', () => { it('[C306875] should be able to Claim/Release a process task which has a candidate group', async () => { await navigateToApp(browser.params.testConfig.hrUser); - await setTaskFilter({ status: 'CREATED', processInstanceId: processInstance.id }); + await setTaskFilter('CREATED', processInstance.id); await tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(candidateApp.tasks.uploadFileTask); await tasksCloudDemoPage.taskListCloudComponent().selectRow(candidateApp.tasks.uploadFileTask); @@ -153,7 +154,7 @@ describe('Task claim/release', () => { await navigationBarPage.clickLogoutButton(); await navigateToApp(candidate); - await setTaskFilter({ status: 'CREATED', processInstanceId: processInstance.id }); + await setTaskFilter('CREATED', processInstance.id); await tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(candidateApp.tasks.uploadFileTask); await tasksCloudDemoPage.taskListCloudComponent().selectRow(candidateApp.tasks.uploadFileTask); @@ -180,21 +181,24 @@ describe('Task claim/release', () => { await expect(await taskHeaderCloudPage.getAssignee()).toEqual('No assignee'); }); - }); + }); async function navigateToApp(user) { - await loginSSOPage.loginSSOIdentityService(user.email, user.password); + await loginSSOPage.login(user.email, user.password); await LocalStorageUtil.setConfigField('adf-edit-task-filter', JSON.stringify(taskFilterConfiguration)); await navigationBarPage.navigateToProcessServicesCloudPage(); + await appListCloudComponent.checkApsContainer(); await appListCloudComponent.goToApp(candidateApp.name); + await tasksCloudDemoPage.taskListCloudComponent().getDataTable().waitForTableBody(); } - async function setTaskFilter({ status, processInstanceId }) { + async function setTaskFilter(status, processInstanceId) { await tasksCloudDemoPage.editTaskFilterCloudComponent().openFilter(); await tasksCloudDemoPage.editTaskFilterCloudComponent().clearAssignee(); await tasksCloudDemoPage.editTaskFilterCloudComponent().setStatusFilterDropDown(status); + await tasksCloudDemoPage.editTaskFilterCloudComponent().setProcessInstanceId(processInstanceId); await tasksCloudDemoPage.editTaskFilterCloudComponent().openFilter(); } diff --git a/e2e/process-services-cloud/tasks-custom-filters.e2e.ts b/e2e/process-services-cloud/tasks-custom-filters.e2e.ts index 5d96c5844c..5a01612428 100644 --- a/e2e/process-services-cloud/tasks-custom-filters.e2e.ts +++ b/e2e/process-services-cloud/tasks-custom-filters.e2e.ts @@ -35,25 +35,25 @@ import { TasksCloudDemoPage } from '../pages/adf/demo-shell/process-services/tas describe('Task filters cloud', () => { describe('Filters', () => { + + const simpleApp = browser.params.resources.ACTIVITI_CLOUD_APPS.SIMPLE_APP.name; + const loginSSOPage = new LoginSSOPage(); const navigationBarPage = new NavigationBarPage(); const appListCloudComponent = new AppListCloudPage(); const tasksCloudDemoPage = new TasksCloudDemoPage(); - const apiService = new ApiService( - browser.params.config.oauth2.clientId, - browser.params.config.bpmHost, browser.params.config.oauth2.host, browser.params.config.providers - ); - let tasksService: TasksService; - let identityService: IdentityService; - let groupIdentityService: GroupIdentityService; - let processDefinitionService: ProcessDefinitionsService; - let processInstancesService: ProcessInstancesService; - let queryService: QueryService; + + const apiService = new ApiService(); + const identityService = new IdentityService(apiService); + const groupIdentityService = new GroupIdentityService(apiService); + const tasksService = new TasksService(apiService); + const processDefinitionService = new ProcessDefinitionsService(apiService); + const processInstancesService = new ProcessInstancesService(apiService); + const queryService = new QueryService(apiService); const createdTaskName = StringUtil.generateRandomString(), completedTaskName = StringUtil.generateRandomString(), assignedTaskName = StringUtil.generateRandomString(), deletedTaskName = StringUtil.generateRandomString(); - const simpleApp = browser.params.resources.ACTIVITI_CLOUD_APPS.SIMPLE_APP.name; let assignedTask, deletedTask, testUser, groupInfo; const orderByNameAndPriority = ['cCreatedTask', 'dCreatedTask', 'eCreatedTask']; let priority = 30; @@ -61,15 +61,13 @@ describe('Task filters cloud', () => { 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.ACTIVITI_USER]); + + testUser = await identityService.createIdentityUserWithRole( [identityService.ROLES.ACTIVITI_USER]); groupInfo = await groupIdentityService.getGroupInfoByGroupName('hr'); await identityService.addUserToGroup(testUser.idIdentityService, groupInfo.id); await apiService.login(testUser.email, testUser.password); - tasksService = new TasksService(apiService); await tasksService.createStandaloneTask(createdTaskName, simpleApp); assignedTask = await tasksService.createStandaloneTask(assignedTaskName, simpleApp); @@ -82,22 +80,18 @@ describe('Task filters cloud', () => { priority = priority + 20; } - processDefinitionService = new ProcessDefinitionsService(apiService); const processDefinition = await processDefinitionService .getProcessDefinitionByName(browser.params.resources.ACTIVITI_CLOUD_APPS.SIMPLE_APP.processes.simpleProcess, simpleApp); - processInstancesService = new ProcessInstancesService(apiService); const processInstance = await processInstancesService.createProcessInstance(processDefinition.entry.key, simpleApp); const secondProcessInstance = await processInstancesService.createProcessInstance(processDefinition.entry.key, simpleApp); - queryService = new QueryService(apiService); - await queryService.getProcessInstanceTasks(secondProcessInstance.entry.id, simpleApp); await processInstancesService.suspendProcessInstance(processInstance.entry.id, simpleApp); await processInstancesService.deleteProcessInstance(secondProcessInstance.entry.id, simpleApp); await queryService.getProcessInstanceTasks(processInstance.entry.id, simpleApp); - await loginSSOPage.loginSSOIdentityService(testUser.email, testUser.password); + await loginSSOPage.login(testUser.email, testUser.password); }, 5 * 60 * 1000); diff --git a/e2e/process-services/about-process-services.e2e.ts b/e2e/process-services/about-process-services.e2e.ts index 9d5ab124ab..8b870cecc8 100644 --- a/e2e/process-services/about-process-services.e2e.ts +++ b/e2e/process-services/about-process-services.e2e.ts @@ -14,38 +14,34 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import { LoginPage, AboutPage } from '@alfresco/adf-testing'; -import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; +import { LoginSSOPage, AboutPage, ApiService } from '@alfresco/adf-testing'; import { browser } from 'protractor'; import { UsersActions } from '../actions/users.actions'; import { NavigationBarPage } from '../pages/adf/navigation-bar.page'; describe('About Process Services', () => { - const loginPage = new LoginPage(); + const loginPage = new LoginSSOPage(); const navigationBarPage = new NavigationBarPage(); const aboutPage = new AboutPage(); - let user, tenantId; + + let user; + + const apiService = new ApiService(); + const usersActions = new UsersActions(apiService); beforeAll(async() => { - this.alfrescoJsApi = new AlfrescoApi({ - provider: 'BPM', - hostBpm: browser.params.testConfig.adf_aps.host - }); - 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); - await loginPage.loginToProcessServicesUsingUserModel(user); + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); + user = await usersActions.createUser(); + await apiService.getInstance().login(user.email, user.password); + await loginPage.login(user.email, user.password); await navigationBarPage.clickAboutButton(); - }); 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); + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); + await apiService.getInstance().activiti.adminTenantsApi.deleteTenant(user.tenantId); }); it('[C280002] Should be able to view about process services info', async () => { diff --git a/e2e/process-services/apps-section.e2e.ts b/e2e/process-services/apps-section.e2e.ts index c3c99468de..c7444682a3 100644 --- a/e2e/process-services/apps-section.e2e.ts +++ b/e2e/process-services/apps-section.e2e.ts @@ -16,48 +16,42 @@ */ import { browser } from 'protractor'; -import { LoginPage, ApplicationsUtil } from '@alfresco/adf-testing'; +import { LoginSSOPage, ApplicationsUtil, ApiService } from '@alfresco/adf-testing'; import { ProcessServicesPage } from '../pages/adf/process-services/process-services.page'; import { NavigationBarPage } from '../pages/adf/navigation-bar.page'; import CONSTANTS = require('../util/constants'); -import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; import { UsersActions } from '../actions/users.actions'; -import { AppsActions } from '../actions/APS/apps.actions'; import { ModelsActions } from '../actions/APS/models.actions'; describe('Modify applications', () => { - const loginPage = new LoginPage(); - const navigationBarPage = new NavigationBarPage(); - const processServicesPage = new ProcessServicesPage(); const app = browser.params.resources.Files.APP_WITH_PROCESSES; const appToBeDeleted = browser.params.resources.Files.SIMPLE_APP_WITH_USER_FORM; const replacingApp = browser.params.resources.Files.WIDGETS_SMOKE_TEST; - const apps = new AppsActions(); - const modelActions = new ModelsActions(); + + const loginPage = new LoginSSOPage(); + const navigationBarPage = new NavigationBarPage(); + const processServicesPage = new ProcessServicesPage(); + + const apiService = new ApiService(); + const modelActions = new ModelsActions(apiService); + const apps = new ApplicationsUtil(apiService); + const usersActions = new UsersActions(apiService); + const applicationService = new ApplicationsUtil(apiService); + let firstApp, appVersionToBeDeleted; - let applicationService; beforeAll(async () => { - const users = new UsersActions(); + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); - this.alfrescoJsApi = new AlfrescoApi({ - provider: 'BPM', - hostBpm: browser.params.testConfig.adf_aps.host - }); + const user = await usersActions.createUser(); - applicationService = new ApplicationsUtil(this.alfrescoJsApi); - - await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); - - const user = await users.createTenantAndUser(this.alfrescoJsApi); - - await this.alfrescoJsApi.login(user.email, user.password); + await apiService.getInstance().login(user.email, user.password); firstApp = await applicationService.importPublishDeployApp(app.file_path); appVersionToBeDeleted = await applicationService.importPublishDeployApp(appToBeDeleted.file_path); - await loginPage.loginToProcessServicesUsingUserModel(user); + await loginPage.login(user.email, user.password); }); it('[C260198] Should the app be displayed on dashboard when is deployed on APS', async () => { @@ -79,7 +73,7 @@ describe('Modify applications', () => { await expect(await processServicesPage.getBackgroundColor(app.title)).toEqual(CONSTANTS.APP_COLOR.BLUE); await expect(await processServicesPage.getDescription(app.title)).toEqual(app.description); - await apps.importNewVersionAppDefinitionPublishDeployApp(this.alfrescoJsApi, replacingApp.file_location, firstApp.id); + await apps.importNewVersionAppDefinitionPublishDeployApp(replacingApp.file_location, firstApp.id); await navigationBarPage.clickHomeButton(); await navigationBarPage.navigateToProcessServicesPage(); @@ -98,7 +92,7 @@ describe('Modify applications', () => { await processServicesPage.checkAppIsDisplayed(app.title); - await modelActions.deleteEntireModel(this.alfrescoJsApi, firstApp.id); + await modelActions.deleteEntireModel(firstApp.id); await navigationBarPage.clickHomeButton(); await navigationBarPage.navigateToProcessServicesPage(); @@ -114,7 +108,7 @@ describe('Modify applications', () => { await processServicesPage.checkAppIsDisplayed(appToBeDeleted.title); await expect(await processServicesPage.getBackgroundColor(appToBeDeleted.title)).toEqual(CONSTANTS.APP_COLOR.ORANGE); - await apps.importNewVersionAppDefinitionPublishDeployApp(this.alfrescoJsApi, replacingApp.file_location, appVersionToBeDeleted.id); + await apps.importNewVersionAppDefinitionPublishDeployApp(replacingApp.file_location, appVersionToBeDeleted.id); await navigationBarPage.clickHomeButton(); await navigationBarPage.navigateToProcessServicesPage(); @@ -123,9 +117,9 @@ describe('Modify applications', () => { await expect(await processServicesPage.getBackgroundColor(appToBeDeleted.title)).toEqual(CONSTANTS.APP_COLOR.GREY); - await modelActions.deleteVersionModel(this.alfrescoJsApi, appVersionToBeDeleted.id); - await modelActions.deleteVersionModel(this.alfrescoJsApi, appVersionToBeDeleted.id); - await apps.publishDeployApp(this.alfrescoJsApi, appVersionToBeDeleted.id); + await modelActions.deleteVersionModel(appVersionToBeDeleted.id); + await modelActions.deleteVersionModel(appVersionToBeDeleted.id); + await apps.publishDeployApp(appVersionToBeDeleted.id); await navigationBarPage.clickHomeButton(); await navigationBarPage.navigateToProcessServicesPage(); @@ -155,7 +149,7 @@ describe('Modify applications', () => { }, 'publish': true }; - await this.alfrescoJsApi.activiti.appsApi.updateAppDefinition(appVersionToBeDeleted.id, appDefinition); + await apiService.getInstance().activiti.appsApi.updateAppDefinition(appVersionToBeDeleted.id, appDefinition); await navigationBarPage.clickHomeButton(); await navigationBarPage.navigateToProcessServicesPage(); diff --git a/e2e/process-services/attach-file-content-service.e2e.ts b/e2e/process-services/attach-file-content-service.e2e.ts index c8b914d4be..902e9eb85f 100644 --- a/e2e/process-services/attach-file-content-service.e2e.ts +++ b/e2e/process-services/attach-file-content-service.e2e.ts @@ -16,42 +16,45 @@ */ import { + ApiService, ApplicationsUtil, ContentNodeSelectorDialogPage, ExternalNodeSelectorDialogPage, - IntegrationService, - LoginPage, - UploadActions, + IntegrationService, LocalStorageUtil, + LoginSSOPage, + UploadActions, UserModel, Widget } from '@alfresco/adf-testing'; import { TasksPage } from '../pages/adf/process-services/tasks.page'; import { browser } from 'protractor'; import { NavigationBarPage } from '../pages/adf/navigation-bar.page'; -import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; import { UsersActions } from '../actions/users.actions'; -import { User } from '../models/APS/user'; import CONSTANTS = require('../util/constants'); describe('Attach File - Content service', () => { - this.alfrescoJsApi = new AlfrescoApi({ - provider: 'ALL', - hostEcm: browser.params.testConfig.adf_acs.host, - hostBpm: browser.params.testConfig.adf_aps.host - }); - this.alfrescoJsApiExternal = new AlfrescoApi({ - provider: 'ECM', - hostEcm: browser.params.testConfig.adf_external_acs.host - }); - const loginPage = new LoginPage(); + const app = browser.params.resources.Files.WIDGET_CHECK_APP; + + const loginPage = new LoginSSOPage(); const widget = new Widget(); const taskPage = new TasksPage(); const navigationBarPage = new NavigationBarPage(); const contentNodeSelector = new ContentNodeSelectorDialogPage(); const externalNodeSelector = new ExternalNodeSelectorDialogPage(); - const app = browser.params.resources.Files.WIDGET_CHECK_APP; - const { adminEmail, adminPassword } = browser.params.testConfig.adf; + const apiServiceExternal = new ApiService({ + provider: 'ECM', + hostEcm: browser.params.testConfig.adf_external_acs.host + }); + const usersActionsExternal = new UsersActions(apiServiceExternal); + + const apiService = new ApiService({ provider: 'ALL'}); + const integrationService = new IntegrationService(apiService); + const applicationService = new ApplicationsUtil(apiService); + const uploadActions = new UploadActions(apiService); + const usersActions = new UsersActions(apiService); + + const { email, password } = browser.params.testConfig.admin; const pdfFileOne = { name: browser.params.resources.Files.ADF_DOCUMENTS.PDF.file_name, @@ -65,36 +68,32 @@ describe('Attach File - Content service', () => { const externalFile = 'Project Overview.ppt'; const csIntegrations = ['adf dev', 'adf master']; - let user: User; + let user: UserModel; beforeAll(async () => { - const integrationService = new IntegrationService(this.alfrescoJsApi); - const applicationService = new ApplicationsUtil(this.alfrescoJsApi); - const uploadActions = new UploadActions(this.alfrescoJsApi); - const users = new UsersActions(); + await LocalStorageUtil.setStorageItem('providers', 'ALL'); - await this.alfrescoJsApi.login(adminEmail, adminPassword); - user = await users.createTenantAndUser(this.alfrescoJsApi); - const acsUser = { ...user, id: user.email }; delete acsUser.type; delete acsUser.tenantId; - await this.alfrescoJsApi.core.peopleApi.addPerson(acsUser); - await this.alfrescoJsApiExternal.login(adminEmail, adminPassword); - await this.alfrescoJsApiExternal.core.peopleApi.addPerson(acsUser); + await apiService.getInstance().login(email, password); + user = await usersActions.createUser(); - await integrationService.addCSIntegration({ tenantId: user.tenantId, name: csIntegrations[0], host: browser.params.testConfig.adf_acs.host }); + await apiServiceExternal.login(email, password); + await usersActionsExternal.createUser(user); + + await integrationService.addCSIntegration({ tenantId: user.tenantId, name: csIntegrations[0], host: browser.params.testConfig.appConfig.ecmHost }); await integrationService.addCSIntegration({ tenantId: user.tenantId, name: csIntegrations[1], host: browser.params.testConfig.adf_external_acs.host }); - await this.alfrescoJsApi.login(user.email, user.password); + await apiService.getInstance().login(user.email, user.password); await uploadActions.uploadFile(pdfFileTwo.location, pdfFileTwo.name, '-my-'); await applicationService.importPublishDeployApp(app.file_path); }); afterAll(async () => { - await this.alfrescoJsApi.login(adminEmail, adminPassword); - await this.alfrescoJsApi.activiti.adminTenantsApi.deleteTenant(user.tenantId); + await apiService.getInstance().login(email, password); + await apiService.getInstance().activiti.adminTenantsApi.deleteTenant(user.tenantId); }); beforeEach( async () => { - await loginPage.loginToAllUsingUserModel(user); + await loginPage.login(user.email, user.password); }); afterEach( async () => { @@ -172,9 +171,6 @@ describe('Attach File - Content service', () => { await widget.attachFileWidget().clickUploadButton(app.UPLOAD_FILE_FORM_CS.FIELD.widget_id); await widget.attachFileWidget().selectUploadSource(csIntegrations[1]); - await expect(await externalNodeSelector.getTitle()).toEqual(`Sign into '${browser.params.testConfig.adf_external_acs.host}'`); - await externalNodeSelector.login(user.email, user.password); - await externalNodeSelector.searchAndSelectResult(externalFile, externalFile); await externalNodeSelector.clickMoveCopyButton(); await widget.attachFileWidget().checkFileIsAttached(app.UPLOAD_FILE_FORM_CS.FIELD.widget_id, externalFile); diff --git a/e2e/process-services/attach-file-widget-start-task-app.e2e.ts b/e2e/process-services/attach-file-widget-start-task-app.e2e.ts index 006dcd0dac..f667c1b97a 100644 --- a/e2e/process-services/attach-file-widget-start-task-app.e2e.ts +++ b/e2e/process-services/attach-file-widget-start-task-app.e2e.ts @@ -15,32 +15,28 @@ * limitations under the License. */ -import { LoginPage, Widget, ViewerPage, ApplicationsUtil } from '@alfresco/adf-testing'; +import { LoginSSOPage, Widget, ViewerPage, ApplicationsUtil, ApiService, UserModel } from '@alfresco/adf-testing'; import { TasksPage } from '../pages/adf/process-services/tasks.page'; import CONSTANTS = require('../util/constants'); import { FileModel } from '../models/ACS/file.model'; import { browser } from 'protractor'; import { NavigationBarPage } from '../pages/adf/navigation-bar.page'; -import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; import { UsersActions } from '../actions/users.actions'; -import { User } from '../models/APS/user'; describe('Start Task - Task App', () => { - this.alfrescoJsApi = new AlfrescoApi({ - provider: 'BPM', - hostBpm: browser.params.testConfig.adf_aps.host - }); - const users = new UsersActions(); - const applicationService = new ApplicationsUtil(this.alfrescoJsApi); + const app = browser.params.resources.Files.WIDGETS_SMOKE_TEST; - const loginPage = new LoginPage(); + const loginPage = new LoginSSOPage(); const viewerPage = new ViewerPage(); const widget = new Widget(); const taskPage = new TasksPage(); const navigationBarPage = new NavigationBarPage(); - let user: User; - const app = browser.params.resources.Files.WIDGETS_SMOKE_TEST; + const apiService = new ApiService(); + const usersActions = new UsersActions(apiService); + const applicationService = new ApplicationsUtil(apiService); + + let user: UserModel; const pdfFile = new FileModel({ 'name': browser.params.resources.Files.ADF_DOCUMENTS.PDF.file_name }); const wordFile = new FileModel({ name: browser.params.resources.Files.ADF_DOCUMENTS.DOCX.file_name, @@ -49,16 +45,16 @@ describe('Start Task - Task App', () => { const appFields = app.form_fields; beforeAll(async () => { - await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); - user = await users.createTenantAndUser(this.alfrescoJsApi); - await this.alfrescoJsApi.login(user.email, user.password); + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); + user = await usersActions.createUser(); + await apiService.getInstance().login(user.email, user.password); await applicationService.importPublishDeployApp(app.file_path); - await loginPage.loginToProcessServicesUsingUserModel(user); + await loginPage.login(user.email, user.password); }); afterAll(async () => { - await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); - await this.alfrescoJsApi.activiti.adminTenantsApi.deleteTenant(user.tenantId); + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); + await apiService.getInstance().activiti.adminTenantsApi.deleteTenant(user.tenantId); }); it('[C274690] Should be able to open a file attached to a start form', async () => { diff --git a/e2e/process-services/attach-folder.e2e.ts b/e2e/process-services/attach-folder.e2e.ts index 05a8927224..7f71e30ec3 100644 --- a/e2e/process-services/attach-folder.e2e.ts +++ b/e2e/process-services/attach-folder.e2e.ts @@ -16,58 +16,55 @@ */ import { + ApiService, ApplicationsUtil, ContentNodeSelectorDialogPage, - IntegrationService, - LoginPage, + IntegrationService, LocalStorageUtil, + LoginSSOPage, UserModel, Widget } from '@alfresco/adf-testing'; import { TasksPage } from '../pages/adf/process-services/tasks.page'; import { browser } from 'protractor'; import { NavigationBarPage } from '../pages/adf/navigation-bar.page'; -import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; import { UsersActions } from '../actions/users.actions'; -import { User } from '../models/APS/user'; import CONSTANTS = require('../util/constants'); describe('Attach Folder', () => { - this.alfrescoJsApi = new AlfrescoApi({ - provider: 'ALL', - hostEcm: browser.params.testConfig.adf_acs.host, - hostBpm: browser.params.testConfig.adf_aps.host - }); - const integrationService = new IntegrationService(this.alfrescoJsApi); - const applicationService = new ApplicationsUtil(this.alfrescoJsApi); + const app = browser.params.resources.Files.WIDGET_CHECK_APP; - const users = new UsersActions(); - const loginPage = new LoginPage(); + const apiService = new ApiService({ provider: 'ALL' }); + const integrationService = new IntegrationService(apiService); + const applicationService = new ApplicationsUtil(apiService); + const usersActions = new UsersActions(apiService); + + const loginPage = new LoginSSOPage(); const widget = new Widget(); const taskPage = new TasksPage(); const navigationBarPage = new NavigationBarPage(); const contentNodeSelector = new ContentNodeSelectorDialogPage(); - const app = browser.params.resources.Files.WIDGET_CHECK_APP; - const meetingNotes = 'Meeting Notes'; - const { adminEmail, adminPassword } = browser.params.testConfig.adf; - let user: User; + let user: UserModel; beforeAll(async () => { - await this.alfrescoJsApi.login(adminEmail, adminPassword); - user = await users.createTenantAndUser(this.alfrescoJsApi); + await LocalStorageUtil.setStorageItem('providers', 'ALL'); - const acsUser = { ...user, id: user.email }; delete acsUser.type; delete acsUser.tenantId; - await this.alfrescoJsApi.core.peopleApi.addPerson(acsUser); + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); + user = await usersActions.createUser(); - await integrationService.addCSIntegration({ tenantId: user.tenantId, name: 'adf dev', host: browser.params.testConfig.adf_acs.host }); - await this.alfrescoJsApi.login(user.email, user.password); + await integrationService.addCSIntegration({ + tenantId: user.tenantId, + name: 'adf dev', + host: browser.params.testConfig.appConfig.ecmHost + }); + await apiService.getInstance().login(user.email, user.password); await applicationService.importPublishDeployApp(app.file_path); - await loginPage.loginToAllUsingUserModel(user); + await loginPage.login(user.email, user.password); }); afterAll(async () => { - await this.alfrescoJsApi.login(adminEmail, adminPassword); - await this.alfrescoJsApi.activiti.adminTenantsApi.deleteTenant(user.tenantId); - }); + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); + await apiService.getInstance().activiti.adminTenantsApi.deleteTenant(user.tenantId); + }); it('[C246534] Attach folder - ACS', async () => { await (await (await navigationBarPage.navigateToProcessServicesPage()).goToTaskApp()).clickTasksButton(); @@ -81,7 +78,7 @@ describe('Attach Folder', () => { await expect(await contentNodeSelector.checkCancelButtonIsEnabled()).toBe(true); await expect(await contentNodeSelector.checkCopyMoveButtonIsEnabled()).toBe(true); - await contentNodeSelector.searchAndSelectResult(meetingNotes, meetingNotes); + await contentNodeSelector.searchAndSelectResult('Meeting Notes', 'Meeting Notes'); await expect(await contentNodeSelector.checkCancelButtonIsEnabled()).toBe(true); await expect(await contentNodeSelector.checkCopyMoveButtonIsEnabled()).toBe(false); diff --git a/e2e/process-services/attach-form-component.e2e.ts b/e2e/process-services/attach-form-component.e2e.ts index debb477374..bb2a5997a3 100644 --- a/e2e/process-services/attach-form-component.e2e.ts +++ b/e2e/process-services/attach-form-component.e2e.ts @@ -15,8 +15,7 @@ * limitations under the License. */ -import { FormFields, LoginPage, ApplicationsUtil } from '@alfresco/adf-testing'; -import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; +import { FormFields, LoginSSOPage, ApplicationsUtil, ApiService } from '@alfresco/adf-testing'; import { browser, by } from 'protractor'; import { UsersActions } from '../actions/users.actions'; import { NavigationBarPage } from '../pages/adf/navigation-bar.page'; @@ -24,19 +23,24 @@ import { AttachFormPage } from '../pages/adf/process-services/attach-form.page'; import { TasksPage } from '../pages/adf/process-services/tasks.page'; import { TaskDetailsPage } from '../pages/adf/process-services/task-details.page'; import CONSTANTS = require('../util/constants'); +import { TaskRepresentation } from '@alfresco/js-api'; describe('Attach Form Component', () => { + const app = browser.params.resources.Files.SIMPLE_APP_WITH_USER_FORM; - const loginPage = new LoginPage(); + const loginPage = new LoginSSOPage(); const taskPage = new TasksPage(); const taskDetailsPage = new TaskDetailsPage(); const attachFormPage = new AttachFormPage(); const formFields = new FormFields(); const navigationBarPage = new NavigationBarPage(); - const app = browser.params.resources.Files.SIMPLE_APP_WITH_USER_FORM; + const apiService = new ApiService(); + const usersActions = new UsersActions(apiService); + const applicationService = new ApplicationsUtil(apiService); + const formTextField = app.form_fields.form_fieldId; - let user, tenantId, appId; + let user, tenantId, appModel; const testNames = { taskName: 'Test Task', @@ -47,36 +51,25 @@ describe('Attach Form Component', () => { }; beforeAll(async () => { + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); - this.alfrescoJsApi = new AlfrescoApi({ - provider: 'BPM', - hostBpm: browser.params.testConfig.adf_aps.host - }); - const applicationService = new ApplicationsUtil(this.alfrescoJsApi); - - const users = new UsersActions(); - - await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); - - user = await users.createTenantAndUser(this.alfrescoJsApi); + user = await usersActions.createUser(); tenantId = user.tenantId; - await this.alfrescoJsApi.login(user.email, user.password); + await apiService.getInstance().login(user.email, user.password); - const appModel = await applicationService.importPublishDeployApp(app.file_path); + appModel = await applicationService.importPublishDeployApp(app.file_path); - appId = appModel.id; + await apiService.getInstance().activiti.taskApi.createNewTask(new TaskRepresentation({ name: testNames.taskName })); - await this.alfrescoJsApi.activiti.taskApi.createNewTask({ name: testNames.taskName }); - - await loginPage.loginToProcessServicesUsingUserModel(user); + await loginPage.login(user.email, user.password); }); 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); + await apiService.getInstance().activiti.modelsApi.deleteModel(appModel.id); + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); + await apiService.getInstance().activiti.adminTenantsApi.deleteTenant(tenantId); }); it('[C280047] Should be able to view the attach-form component after creating a standalone task', async () => { diff --git a/e2e/process-services/checklist-component.e2e.ts b/e2e/process-services/checklist-component.e2e.ts index 03b37b6289..e69addd8dd 100644 --- a/e2e/process-services/checklist-component.e2e.ts +++ b/e2e/process-services/checklist-component.e2e.ts @@ -15,60 +15,55 @@ * limitations under the License. */ -import { LoginPage } from '@alfresco/adf-testing'; +import { ApiService, LoginSSOPage } from '@alfresco/adf-testing'; import { TasksPage } from '../pages/adf/process-services/tasks.page'; import { ProcessServicesPage } from '../pages/adf/process-services/process-services.page'; import { ChecklistDialog } from '../pages/adf/process-services/dialog/create-checklist-dialog.page'; import { NavigationBarPage } from '../pages/adf/navigation-bar.page'; import CONSTANTS = require('../util/constants'); -import { Tenant } from '../models/APS/tenant'; import { browser } from 'protractor'; -import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; import { UsersActions } from '../actions/users.actions'; import fs = require('fs'); import path = require('path'); +import { TaskRepresentation } from '@alfresco/js-api'; describe('Checklist component', () => { - const loginPage = new LoginPage(); - let processUserModel; const app = browser.params.resources.Files.SIMPLE_APP_WITH_USER_FORM; + + const loginPage = new LoginSSOPage(); const taskPage = new TasksPage(); const processServices = new ProcessServicesPage(); const checklistDialog = new ChecklistDialog(); const navigationBarPage = new NavigationBarPage(); + const apiService = new ApiService(); + const usersActions = new UsersActions(apiService); + + let processUserModel; + const tasks = ['no checklist created task', 'checklist number task', 'remove running checklist', 'remove completed checklist', 'hierarchy']; const checklists = ['cancelCheckList', 'dialogChecklist', 'addFirstChecklist', 'addSecondChecklist']; const removeChecklist = ['removeFirstRunningChecklist', 'removeSecondRunningChecklist', 'removeFirstCompletedChecklist', 'removeSecondCompletedChecklist']; const hierarchyChecklist = ['checklistOne', 'checklistTwo', 'checklistOneChild', 'checklistTwoChild']; beforeAll(async () => { - const users = new UsersActions(); + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); - this.alfrescoJsApi = new AlfrescoApi({ - provider: 'BPM', - hostBpm: browser.params.testConfig.adf_aps.host - }); - - await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); - - const newTenant = await this.alfrescoJsApi.activiti.adminTenantsApi.createTenant(new Tenant()); - - processUserModel = await users.createApsUser(this.alfrescoJsApi, newTenant.id); + processUserModel = await usersActions.createUser(); const pathFile = path.join(browser.params.testConfig.main.rootPath + app.file_location); const file = fs.createReadStream(pathFile); - await this.alfrescoJsApi.login(processUserModel.email, processUserModel.password); + await apiService.getInstance().login(processUserModel.email, processUserModel.password); - await this.alfrescoJsApi.activiti.appsApi.importAppDefinition(file); + await apiService.getInstance().activiti.appsApi.importAppDefinition(file); for (let i = 0; i < tasks.length; i++) { - this.alfrescoJsApi.activiti.taskApi.createNewTask({ name: tasks[i] }); + await apiService.getInstance().activiti.taskApi.createNewTask(new TaskRepresentation({ name: tasks[i] })); } - await loginPage.loginToProcessServicesUsingUserModel(processUserModel); + await loginPage.login(processUserModel.email, processUserModel.password); }); beforeEach(async () => { diff --git a/e2e/process-services/comment-component-processes.e2e.ts b/e2e/process-services/comment-component-processes.e2e.ts index 45b2c209e3..57c691e6fd 100644 --- a/e2e/process-services/comment-component-processes.e2e.ts +++ b/e2e/process-services/comment-component-processes.e2e.ts @@ -16,65 +16,59 @@ */ import { browser } from 'protractor'; -import { LoginPage, ApplicationsUtil, ProcessUtil } from '@alfresco/adf-testing'; +import { LoginSSOPage, ApplicationsUtil, ProcessUtil, ApiService } from '@alfresco/adf-testing'; import { ProcessFiltersPage } from '../pages/adf/process-services/process-filters.page'; import { CommentsPage } from '../pages/adf/comments.page'; import { NavigationBarPage } from '../pages/adf/navigation-bar.page'; -import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; import { UsersActions } from '../actions/users.actions'; describe('Comment component for Processes', () => { - const loginPage = new LoginPage(); + const app = browser.params.resources.Files.SIMPLE_APP_WITH_USER_FORM; + + const loginPage = new LoginSSOPage(); const processFiltersPage = new ProcessFiltersPage(); const commentsPage = new CommentsPage(); const navigationBarPage = new NavigationBarPage(); - const app = browser.params.resources.Files.SIMPLE_APP_WITH_USER_FORM; - let user, tenantId, appId, processInstanceId, addedComment; + const apiService = new ApiService(); + const usersActions = new UsersActions(apiService); + const applicationsService = new ApplicationsUtil(apiService); + + let user, appId, processInstanceId, addedComment; const processName = 'Comment APS'; beforeAll(async () => { - this.alfrescoJsApi = new AlfrescoApi({ - provider: 'BPM', - hostBpm: browser.params.testConfig.adf_aps.host - }); + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); - const users = new UsersActions(); - const applicationsService = new ApplicationsUtil(this.alfrescoJsApi); + user = await usersActions.createUser(); - await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); + await apiService.getInstance().login(user.email, user.password); - user = await users.createTenantAndUser(this.alfrescoJsApi); + const importedApp = await applicationsService.importPublishDeployApp(app.file_path); + appId = importedApp.id; - tenantId = user.tenantId; + const processWithComment = await new ProcessUtil(apiService).startProcessOfApp(importedApp.name, processName); + processInstanceId = processWithComment.id; - await this.alfrescoJsApi.login(user.email, user.password); - - const importedApp = await applicationsService.importPublishDeployApp(app.file_path); - appId = importedApp.id; - - const processWithComment = await new ProcessUtil(this.alfrescoJsApi).startProcessOfApp(importedApp.name, processName); - processInstanceId = processWithComment.id; - - await loginPage.loginToProcessServicesUsingUserModel(user); + await loginPage.login(user.email, user.password); }); 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); + await apiService.getInstance().activiti.modelsApi.deleteModel(appId); + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); + await apiService.getInstance().activiti.adminTenantsApi.deleteTenant(user.tenantId); }); 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 apiService.getInstance().activiti.commentsApi.addProcessInstanceComment({ message: 'HELLO' }, processInstanceId); await (await (await navigationBarPage.navigateToProcessServicesPage()).goToTaskApp()).clickProcessButton(); await processFiltersPage.clickRunningFilterButton(); await processFiltersPage.selectFromProcessList(processName); - addedComment = await this.alfrescoJsApi.activiti.commentsApi.getProcessInstanceComments(processInstanceId, { 'latestFirst': true }); + addedComment = await apiService.getInstance().activiti.commentsApi.getProcessInstanceComments(processInstanceId, { 'latestFirst': true }); await commentsPage.checkUserIconIsDisplayed(); @@ -85,34 +79,34 @@ describe('Comment component for Processes', () => { }); it('[C260465] Should not be able to view process comment on included task', async () => { - await this.alfrescoJsApi.activiti.commentsApi.addProcessInstanceComment({ message: 'GOODBYE' }, processInstanceId); + await apiService.getInstance().activiti.commentsApi.addProcessInstanceComment({ message: 'GOODBYE' }, processInstanceId); await (await (await navigationBarPage.navigateToProcessServicesPage()).goToTaskApp()).clickProcessButton(); await processFiltersPage.clickRunningFilterButton(); await processFiltersPage.selectFromProcessList(processName); - const taskQuery = await this.alfrescoJsApi.activiti.taskApi.listTasks({ processInstanceId: processInstanceId }); + const taskQuery = await apiService.getInstance().activiti.taskApi.listTasks({ processInstanceId: processInstanceId }); const taskId = taskQuery.data[0].id; - const taskComments = await this.alfrescoJsApi.activiti.commentsApi.getTaskComments(taskId, { 'latestFirst': true }); + const taskComments = await apiService.getInstance().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', async () => { - const taskQuery = await this.alfrescoJsApi.activiti.taskApi.listTasks({ processInstanceId: processInstanceId }); + const taskQuery = await apiService.getInstance().activiti.taskApi.listTasks({ processInstanceId: processInstanceId }); const taskId = taskQuery.data[0].id; - await this.alfrescoJsApi.activiti.taskApi.addTaskComment({ message: 'Task Comment' }, taskId); + await apiService.getInstance().activiti.taskApi.addTaskComment({ message: 'Task Comment' }, taskId); await (await (await navigationBarPage.navigateToProcessServicesPage()).goToTaskApp()).clickProcessButton(); await processFiltersPage.clickRunningFilterButton(); await processFiltersPage.selectFromProcessList(processName); - const addedTaskComment = await this.alfrescoJsApi.activiti.commentsApi.getProcessInstanceComments(processInstanceId, { 'latestFirst': true }); + const addedTaskComment = await apiService.getInstance().activiti.commentsApi.getProcessInstanceComments(processInstanceId, { 'latestFirst': true }); await commentsPage.checkUserIconIsDisplayed(); diff --git a/e2e/process-services/comment-component-tasks.e2e.ts b/e2e/process-services/comment-component-tasks.e2e.ts index 1f1d11ecb5..066b428aa2 100644 --- a/e2e/process-services/comment-component-tasks.e2e.ts +++ b/e2e/process-services/comment-component-tasks.e2e.ts @@ -17,23 +17,27 @@ import { browser } from 'protractor'; -import { LoginPage, ApplicationsUtil } from '@alfresco/adf-testing'; +import { LoginSSOPage, ApplicationsUtil, ApiService, UserModel } from '@alfresco/adf-testing'; import { TasksPage } from '../pages/adf/process-services/tasks.page'; import { CommentsPage } from '../pages/adf/comments.page'; import { NavigationBarPage } from '../pages/adf/navigation-bar.page'; import CONSTANTS = require('../util/constants'); -import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; import { UsersActions } from '../actions/users.actions'; +import { TaskRepresentation } from '@alfresco/js-api'; describe('Comment component for Processes', () => { - const loginPage = new LoginPage(); + const app = browser.params.resources.Files.SIMPLE_APP_WITH_USER_FORM; + + const loginPage = new LoginSSOPage(); const navigationBarPage = new NavigationBarPage(); const taskPage = new TasksPage(); const commentsPage = new CommentsPage(); - const app = browser.params.resources.Files.SIMPLE_APP_WITH_USER_FORM; - let user, tenantId, appId, secondUser, newTaskId; + const apiService = new ApiService(); + const usersActions = new UsersActions(apiService); + + let user, appId, secondUser, newTaskId; const taskName = { completed_task: 'Test Completed', @@ -41,42 +45,31 @@ describe('Comment component for Processes', () => { }; beforeAll(async () => { + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); - this.alfrescoJsApi = new AlfrescoApi({ - provider: 'BPM', - hostBpm: browser.params.testConfig.adf_aps.host - }); + user = await usersActions.createUser(); + secondUser = await usersActions.createUser(new UserModel({ tenantId: user.tenantId })); - const users = new UsersActions(); + await apiService.getInstance().login(user.email, user.password); - await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); - - user = await users.createTenantAndUser(this.alfrescoJsApi); - - tenantId = user.tenantId; - - secondUser = await users.createApsUser(this.alfrescoJsApi, tenantId); - - await this.alfrescoJsApi.login(user.email, user.password); - - const importedApp = await new ApplicationsUtil(this.alfrescoJsApi).importPublishDeployApp(app.file_path); + const importedApp = await new ApplicationsUtil(apiService).importPublishDeployApp(app.file_path); appId = importedApp.id; - await loginPage.loginToProcessServicesUsingUserModel(user); - }); + await loginPage.login(user.email, user.password); + }); 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); + await apiService.getInstance().activiti.modelsApi.deleteModel(appId); + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); + await apiService.getInstance().activiti.adminTenantsApi.deleteTenant(user.tenantId); }); 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 newTask = await apiService.getInstance().activiti.taskApi.createNewTask(new TaskRepresentation({ name: taskName.completed_task })); const taskId = newTask.id; - await this.alfrescoJsApi.activiti.taskActionsApi.completeTask(taskId); + await apiService.getInstance().activiti.taskActionsApi.completeTask(taskId); await (await (await navigationBarPage.navigateToProcessServicesPage()).goToTaskApp()).clickTasksButton(); @@ -87,17 +80,17 @@ describe('Comment component for Processes', () => { }); 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 }); + const newTask = await apiService.getInstance().activiti.taskApi.createNewTask(new TaskRepresentation({ name: taskName.multiple_users })); newTaskId = newTask.id; - await this.alfrescoJsApi.activiti.taskApi.involveUser(newTaskId, { email: secondUser.email }); + await apiService.getInstance().activiti.taskApi.involveUser(newTaskId, { email: secondUser.email }); 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 apiService.getInstance().activiti.taskApi.addTaskComment(taskComment, newTaskId); + await apiService.getInstance().activiti.taskApi.addTaskComment(secondTaskComment, newTaskId); await (await (await navigationBarPage.navigateToProcessServicesPage()).goToTaskApp()).clickTasksButton(); @@ -105,7 +98,7 @@ describe('Comment component for Processes', () => { await taskPage.tasksListPage().selectRow(taskName.multiple_users); await taskPage.taskDetails().selectActivityTab(); - const totalCommentsLatest = await this.alfrescoJsApi.activiti.taskApi.getTaskComments(newTaskId, { 'latestFirst': true }); + const totalCommentsLatest = await apiService.getInstance().activiti.taskApi.getTaskComments(newTaskId, { 'latestFirst': true }); const thirdTaskComment = { message: 'Third Task Comment' }; @@ -123,9 +116,9 @@ describe('Comment component for Processes', () => { await expect(await commentsPage.getTime(0)).toMatch(/(ago|few)/); await expect(await commentsPage.getTime(1)).toMatch(/(ago|few)/); - await loginPage.loginToProcessServicesUsingUserModel(secondUser); + await loginPage.login(secondUser.email, secondUser.password); - await this.alfrescoJsApi.activiti.taskApi.addTaskComment(thirdTaskComment, newTaskId); + await apiService.getInstance().activiti.taskApi.addTaskComment(thirdTaskComment, newTaskId); await (await (await navigationBarPage.navigateToProcessServicesPage()).goToTaskApp()).clickTasksButton(); @@ -133,7 +126,7 @@ describe('Comment component for Processes', () => { await taskPage.tasksListPage().selectRow(taskName.multiple_users); await taskPage.taskDetails().selectActivityTab(); - const totalComments = await this.alfrescoJsApi.activiti.taskApi.getTaskComments(newTaskId, { 'latestFirst': true }); + const totalComments = await apiService.getInstance().activiti.taskApi.getTaskComments(newTaskId, { 'latestFirst': true }); await commentsPage.checkUserIconIsDisplayed(); await commentsPage.checkUserIconIsDisplayed(); diff --git a/e2e/process-services/custom-process-filters-sorting.e2e.ts b/e2e/process-services/custom-process-filters-sorting.e2e.ts index 29dba94170..d01c740311 100644 --- a/e2e/process-services/custom-process-filters-sorting.e2e.ts +++ b/e2e/process-services/custom-process-filters-sorting.e2e.ts @@ -17,21 +17,24 @@ import { browser } from 'protractor'; -import { LoginPage, ApplicationsUtil, ProcessUtil } from '@alfresco/adf-testing'; +import { LoginSSOPage, ApplicationsUtil, ProcessUtil, ApiService } from '@alfresco/adf-testing'; import { NavigationBarPage } from '../pages/adf/navigation-bar.page'; import { ProcessFiltersPage } from '../pages/adf/process-services/process-filters.page'; import { FiltersPage } from '../pages/adf/process-services/filters.page'; -import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; import { UsersActions } from '../actions/users.actions'; describe('Sorting for process filters', () => { - const loginPage = new LoginPage(); + const app = browser.params.resources.Files.SIMPLE_APP_WITH_USER_FORM; + + const loginPage = new LoginSSOPage(); const navigationBarPage = new NavigationBarPage(); const processFiltersPage = new ProcessFiltersPage(); const filtersPage = new FiltersPage(); - const app = browser.params.resources.Files.SIMPLE_APP_WITH_USER_FORM; + const apiService = new ApiService(); + const usersActions = new UsersActions(apiService); + let tenantId, appId, user, processesQuery; let importedApp; @@ -46,45 +49,36 @@ describe('Sorting for process filters', () => { completed_least_recently: 'Completed - Least recently' }; - beforeAll(async () => { - this.alfrescoJsApi = new AlfrescoApi({ - provider: 'BPM', - hostBpm: browser.params.testConfig.adf_aps.host - }); - }); - beforeEach(async () => { - const users = new UsersActions(); + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); - await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); + const applicationsService = new ApplicationsUtil(apiService); - const applicationsService = new ApplicationsUtil(this.alfrescoJsApi); - - user = await users.createTenantAndUser(this.alfrescoJsApi); + user = await usersActions.createUser(); tenantId = user.tenantId; - await this.alfrescoJsApi.login(user.email, user.password); + await apiService.getInstance().login(user.email, user.password); importedApp = await applicationsService.importPublishDeployApp(app.file_path); appId = importedApp.id; - await loginPage.loginToProcessServicesUsingUserModel(user); + await loginPage.login(user.email, user.password); }); afterEach(async () => { - await this.alfrescoJsApi.activiti.modelsApi.deleteModel(appId); + await apiService.getInstance().activiti.modelsApi.deleteModel(appId); - await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); - await this.alfrescoJsApi.activiti.adminTenantsApi.deleteTenant(tenantId); + await apiService.getInstance().activiti.adminTenantsApi.deleteTenant(tenantId); }); it('[C260476] Should be able to create a filter on APS for running processes - Oldest first and check on ADF', async () => { - await this.alfrescoJsApi.activiti.userFiltersApi.createUserProcessInstanceFilter({ + await apiService.getInstance().activiti.userFiltersApi.createUserProcessInstanceFilter({ 'appId': null, 'name': processFilter.running_old_first, 'icon': 'glyphicon-random', 'filter': { 'sort': 'created-asc', 'name': '', 'state': 'running' } }); - const processUtil = new ProcessUtil(this.alfrescoJsApi); + const processUtil = new ProcessUtil(apiService); const firstProc = await processUtil.startProcessOfApp(importedApp.name); const secondProc = await processUtil.startProcessOfApp(importedApp.name); const thirdProc = await processUtil.startProcessOfApp(importedApp.name); @@ -93,7 +87,7 @@ describe('Sorting for process filters', () => { await processFiltersPage.checkFilterIsDisplayed(processFilter.running_old_first); await filtersPage.goToFilter(processFilter.running_old_first); - processesQuery = await this.alfrescoJsApi.activiti.processApi.getProcessInstances({ + processesQuery = await apiService.getInstance().activiti.processApi.getProcessInstances({ 'processDefinitionId': null, 'appDefinitionId': null, 'state': 'running', 'sort': 'created-asc' }); await expect(processesQuery.data[0].name).toEqual(firstProc.name); @@ -102,19 +96,19 @@ describe('Sorting for process filters', () => { }); it('[C260477] Should be able to create a filter on APS for completed processes - Oldest first and check on ADF', async () => { - await this.alfrescoJsApi.activiti.userFiltersApi.createUserProcessInstanceFilter({ + await apiService.getInstance().activiti.userFiltersApi.createUserProcessInstanceFilter({ 'appId': null, 'name': processFilter.completed_old_first, 'icon': 'glyphicon-random', 'filter': { 'sort': 'created-asc', 'name': '', 'state': 'completed' } }); - const processUtil = new ProcessUtil(this.alfrescoJsApi); + const processUtil = new ProcessUtil(apiService); const firstProc = await processUtil.startProcessOfApp(importedApp.name); const secondProc = await processUtil.startProcessOfApp(importedApp.name); const thirdProc = await processUtil.startProcessOfApp(importedApp.name); - 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 apiService.getInstance().activiti.processInstancesApi.deleteProcessInstance(firstProc.id); + await apiService.getInstance().activiti.processInstancesApi.deleteProcessInstance(secondProc.id); + await apiService.getInstance().activiti.processInstancesApi.deleteProcessInstance(thirdProc.id); await (await (await navigationBarPage.navigateToProcessServicesPage()).goToTaskApp()).clickProcessButton(); @@ -122,7 +116,7 @@ describe('Sorting for process filters', () => { await filtersPage.goToFilter(processFilter.completed_old_first); - processesQuery = await this.alfrescoJsApi.activiti.processApi.getProcessInstances({ + processesQuery = await apiService.getInstance().activiti.processApi.getProcessInstances({ 'processDefinitionId': null, 'appDefinitionId': null, 'state': 'completed', 'sort': 'created-asc' }); await expect(processesQuery.data[0].name).toEqual(firstProc.name); @@ -131,12 +125,12 @@ describe('Sorting for process filters', () => { }); it('[C260478] Should be able to create a filter on APS for all processes - Oldest first and check on ADF', async () => { - await this.alfrescoJsApi.activiti.userFiltersApi.createUserProcessInstanceFilter({ + await apiService.getInstance().activiti.userFiltersApi.createUserProcessInstanceFilter({ 'appId': null, 'name': processFilter.all_old_first, 'icon': 'glyphicon-random', 'filter': { 'sort': 'created-asc', 'name': '', 'state': 'all' } }); - const processUtil = new ProcessUtil(this.alfrescoJsApi); + const processUtil = new ProcessUtil(apiService); const firstProc = await processUtil.startProcessOfApp(importedApp.name); const secondProc = await processUtil.startProcessOfApp(importedApp.name); const thirdProc = await processUtil.startProcessOfApp(importedApp.name); @@ -145,9 +139,9 @@ describe('Sorting for process filters', () => { const deleteSecondProc = await processUtil.startProcessOfApp(importedApp.name); const deleteThirdProc = await processUtil.startProcessOfApp(importedApp.name); - await this.alfrescoJsApi.activiti.processInstancesApi.deleteProcessInstance(deleteFirstProc.id); - await this.alfrescoJsApi.activiti.processInstancesApi.deleteProcessInstance(deleteSecondProc.id); - await this.alfrescoJsApi.activiti.processInstancesApi.deleteProcessInstance(deleteThirdProc.id); + await apiService.getInstance().activiti.processInstancesApi.deleteProcessInstance(deleteFirstProc.id); + await apiService.getInstance().activiti.processInstancesApi.deleteProcessInstance(deleteSecondProc.id); + await apiService.getInstance().activiti.processInstancesApi.deleteProcessInstance(deleteThirdProc.id); await (await (await navigationBarPage.navigateToProcessServicesPage()).goToTaskApp()).clickProcessButton(); @@ -155,7 +149,7 @@ describe('Sorting for process filters', () => { await filtersPage.goToFilter(processFilter.all_old_first); - processesQuery = await this.alfrescoJsApi.activiti.processApi.getProcessInstances({ + processesQuery = await apiService.getInstance().activiti.processApi.getProcessInstances({ 'processDefinitionId': null, 'appDefinitionId': null, 'state': 'all', 'sort': 'created-asc' }); await expect(processesQuery.data[0].name).toEqual(firstProc.name); @@ -167,12 +161,12 @@ describe('Sorting for process filters', () => { }); it('[C260479] Should be able to create a filter on APS for running processes - Newest first and check on ADF', async () => { - await this.alfrescoJsApi.activiti.userFiltersApi.createUserProcessInstanceFilter({ + await apiService.getInstance().activiti.userFiltersApi.createUserProcessInstanceFilter({ 'appId': null, 'name': processFilter.running_new_first, 'icon': 'glyphicon-random', 'filter': { 'sort': 'created-desc', 'name': '', 'state': 'running' } }); - const processUtil = new ProcessUtil(this.alfrescoJsApi); + const processUtil = new ProcessUtil(apiService); const firstProc = await processUtil.startProcessOfApp(importedApp.name); const secondProc = await processUtil.startProcessOfApp(importedApp.name); const thirdProc = await processUtil.startProcessOfApp(importedApp.name); @@ -183,7 +177,7 @@ describe('Sorting for process filters', () => { await filtersPage.goToFilter(processFilter.running_new_first); - processesQuery = await this.alfrescoJsApi.activiti.processApi.getProcessInstances({ + processesQuery = await apiService.getInstance().activiti.processApi.getProcessInstances({ 'processDefinitionId': null, 'appDefinitionId': null, 'state': 'running', 'sort': 'created-desc' }); await expect(processesQuery.data[0].name).toEqual(thirdProc.name); @@ -192,26 +186,26 @@ describe('Sorting for process filters', () => { }); it('[C260480] Should be able to create a filter on APS for completed processes - Newest first and check on ADF', async () => { - await this.alfrescoJsApi.activiti.userFiltersApi.createUserProcessInstanceFilter({ + await apiService.getInstance().activiti.userFiltersApi.createUserProcessInstanceFilter({ 'appId': null, 'name': processFilter.completed_new_first, 'icon': 'glyphicon-random', 'filter': { 'sort': 'created-desc', 'name': '', 'state': 'completed' } }); - const processUtil = new ProcessUtil(this.alfrescoJsApi); + const processUtil = new ProcessUtil(apiService); const firstProc = await processUtil.startProcessOfApp(importedApp.name); const secondProc = await processUtil.startProcessOfApp(importedApp.name); const thirdProc = await processUtil.startProcessOfApp(importedApp.name); - 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 apiService.getInstance().activiti.processInstancesApi.deleteProcessInstance(firstProc.id); + await apiService.getInstance().activiti.processInstancesApi.deleteProcessInstance(secondProc.id); + await apiService.getInstance().activiti.processInstancesApi.deleteProcessInstance(thirdProc.id); await (await (await navigationBarPage.navigateToProcessServicesPage()).goToTaskApp()).clickProcessButton(); await processFiltersPage.checkFilterIsDisplayed(processFilter.completed_new_first); await filtersPage.goToFilter(processFilter.completed_new_first); - processesQuery = await this.alfrescoJsApi.activiti.processApi.getProcessInstances({ + processesQuery = await apiService.getInstance().activiti.processApi.getProcessInstances({ 'processDefinitionId': null, 'appDefinitionId': null, 'state': 'completed', 'sort': 'created-desc' }); await expect(processesQuery.data[0].name).toEqual(thirdProc.name); @@ -220,12 +214,12 @@ describe('Sorting for process filters', () => { }); it('[C260481] Should be able to create a filter on APS for all processes - Newest first and check on ADF', async () => { - await this.alfrescoJsApi.activiti.userFiltersApi.createUserProcessInstanceFilter({ + await apiService.getInstance().activiti.userFiltersApi.createUserProcessInstanceFilter({ 'appId': null, 'name': processFilter.all_new_first, 'icon': 'glyphicon-random', 'filter': { 'sort': 'created-desc', 'name': '', 'state': 'all' } }); - const processUtil = new ProcessUtil(this.alfrescoJsApi); + const processUtil = new ProcessUtil(apiService); const firstProc = await processUtil.startProcessOfApp(importedApp.name); const secondProc = await processUtil.startProcessOfApp(importedApp.name); const thirdProc = await processUtil.startProcessOfApp(importedApp.name); @@ -234,9 +228,9 @@ describe('Sorting for process filters', () => { const deleteSecondProc = await processUtil.startProcessOfApp(importedApp.name); const deleteThirdProc = await processUtil.startProcessOfApp(importedApp.name); - await this.alfrescoJsApi.activiti.processInstancesApi.deleteProcessInstance(deleteFirstProc.id); - await this.alfrescoJsApi.activiti.processInstancesApi.deleteProcessInstance(deleteSecondProc.id); - await this.alfrescoJsApi.activiti.processInstancesApi.deleteProcessInstance(deleteThirdProc.id); + await apiService.getInstance().activiti.processInstancesApi.deleteProcessInstance(deleteFirstProc.id); + await apiService.getInstance().activiti.processInstancesApi.deleteProcessInstance(deleteSecondProc.id); + await apiService.getInstance().activiti.processInstancesApi.deleteProcessInstance(deleteThirdProc.id); await (await (await navigationBarPage.navigateToProcessServicesPage()).goToTaskApp()).clickProcessButton(); @@ -244,7 +238,7 @@ describe('Sorting for process filters', () => { await filtersPage.goToFilter(processFilter.all_new_first); - processesQuery = await this.alfrescoJsApi.activiti.processApi.getProcessInstances({ + processesQuery = await apiService.getInstance().activiti.processApi.getProcessInstances({ 'processDefinitionId': null, 'appDefinitionId': null, 'state': 'all', 'sort': 'created-desc' }); await expect(processesQuery.data[0].name).toEqual(deleteThirdProc.name); @@ -256,19 +250,19 @@ describe('Sorting for process filters', () => { }); it('[C272815] Should be able to create a filter on APS for completed processes - Completed most recently and check on ADF', async () => { - await this.alfrescoJsApi.activiti.userFiltersApi.createUserProcessInstanceFilter({ + await apiService.getInstance().activiti.userFiltersApi.createUserProcessInstanceFilter({ 'appId': null, 'name': processFilter.completed_most_recently, 'icon': 'glyphicon-random', 'filter': { 'sort': 'ended-asc', 'name': '', 'state': 'completed' } }); - const processUtil = new ProcessUtil(this.alfrescoJsApi); + const processUtil = new ProcessUtil(apiService); const firstProc = await processUtil.startProcessOfApp(importedApp.name); const secondProc = await processUtil.startProcessOfApp(importedApp.name); const thirdProc = await processUtil.startProcessOfApp(importedApp.name); - 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 apiService.getInstance().activiti.processInstancesApi.deleteProcessInstance(secondProc.id); + await apiService.getInstance().activiti.processInstancesApi.deleteProcessInstance(firstProc.id); + await apiService.getInstance().activiti.processInstancesApi.deleteProcessInstance(thirdProc.id); await (await (await navigationBarPage.navigateToProcessServicesPage()).goToTaskApp()).clickProcessButton(); @@ -276,7 +270,7 @@ describe('Sorting for process filters', () => { await filtersPage.goToFilter(processFilter.completed_most_recently); - processesQuery = await this.alfrescoJsApi.activiti.processApi.getProcessInstances({ + processesQuery = await apiService.getInstance().activiti.processApi.getProcessInstances({ 'processDefinitionId': null, 'appDefinitionId': null, 'state': 'completed', 'sort': 'ended-asc' }); await expect(processesQuery.data[0].name).toEqual(secondProc.name); @@ -285,19 +279,19 @@ describe('Sorting for process filters', () => { }); it('[C272816] Should be able to create a filter on APS for completed processes - Completed least recently and check on ADF', async () => { - await this.alfrescoJsApi.activiti.userFiltersApi.createUserProcessInstanceFilter({ + await apiService.getInstance().activiti.userFiltersApi.createUserProcessInstanceFilter({ 'appId': null, 'name': processFilter.completed_least_recently, 'icon': 'glyphicon-random', 'filter': { 'sort': 'ended-desc', 'name': '', 'state': 'completed' } }); - const processUtil = new ProcessUtil(this.alfrescoJsApi); + const processUtil = new ProcessUtil(apiService); const firstProc = await processUtil.startProcessOfApp(importedApp.name); const secondProc = await processUtil.startProcessOfApp(importedApp.name); const thirdProc = await processUtil.startProcessOfApp(importedApp.name); - 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 apiService.getInstance().activiti.processInstancesApi.deleteProcessInstance(secondProc.id); + await apiService.getInstance().activiti.processInstancesApi.deleteProcessInstance(firstProc.id); + await apiService.getInstance().activiti.processInstancesApi.deleteProcessInstance(thirdProc.id); await (await (await navigationBarPage.navigateToProcessServicesPage()).goToTaskApp()).clickProcessButton(); @@ -305,7 +299,7 @@ describe('Sorting for process filters', () => { await filtersPage.goToFilter(processFilter.completed_least_recently); - processesQuery = await this.alfrescoJsApi.activiti.processApi.getProcessInstances({ + processesQuery = await apiService.getInstance().activiti.processApi.getProcessInstances({ 'processDefinitionId': null, 'appDefinitionId': null, 'state': 'completed', 'sort': 'ended-desc' }); await expect(processesQuery.data[0].name).toEqual(thirdProc.name); diff --git a/e2e/process-services/custom-process-filters.e2e.ts b/e2e/process-services/custom-process-filters.e2e.ts index 623aae038e..e8ac4b4ad5 100644 --- a/e2e/process-services/custom-process-filters.e2e.ts +++ b/e2e/process-services/custom-process-filters.e2e.ts @@ -17,23 +17,25 @@ import { browser } from 'protractor'; -import { LoginPage } from '@alfresco/adf-testing'; +import { ApiService, LoginSSOPage } from '@alfresco/adf-testing'; import { ProcessFiltersPage } from '../pages/adf/process-services/process-filters.page'; import { ProcessServiceTabBarPage } from '../pages/adf/process-services/process-service-tab-bar.page'; import { AppSettingsTogglesPage } from '../pages/adf/process-services/dialog/app-settings-toggles.page'; import { NavigationBarPage } from '../pages/adf/navigation-bar.page'; -import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; import { UsersActions } from '../actions/users.actions'; describe('New Process Filters', () => { - const loginPage = new LoginPage(); + const loginPage = new LoginSSOPage(); const processFiltersPage = new ProcessFiltersPage(); const processServiceTabBarPage = new ProcessServiceTabBarPage(); const appSettingsToggles = new AppSettingsTogglesPage(); const navigationBarPage = new NavigationBarPage(); + const apiService = new ApiService(); + const usersActions = new UsersActions(apiService); + let tenantId, user, filterId, customProcessFilter; const processFilter = { @@ -48,28 +50,21 @@ describe('New Process Filters', () => { }; beforeAll(async () => { - const users = new UsersActions(); + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); - this.alfrescoJsApi = new AlfrescoApi({ - provider: 'BPM', - hostBpm: browser.params.testConfig.adf_aps.host - }); - - await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); - - user = await users.createTenantAndUser(this.alfrescoJsApi); + user = await usersActions.createUser(); tenantId = user.tenantId; - await this.alfrescoJsApi.login(user.email, user.password); + await apiService.getInstance().login(user.email, user.password); - await loginPage.loginToProcessServicesUsingUserModel(user); - }); + await loginPage.login(user.email, user.password); + }); afterAll(async () => { - await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); - await this.alfrescoJsApi.activiti.adminTenantsApi.deleteTenant(tenantId); - }); + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); + await apiService.getInstance().activiti.adminTenantsApi.deleteTenant(tenantId); + }); it('[C279965] Should be able to view default filters on ADF', async () => { await (await (await navigationBarPage.navigateToProcessServicesPage()).goToTaskApp()).clickProcessButton(); @@ -80,7 +75,7 @@ describe('New Process Filters', () => { }); it('[C260473] Should be able to create a new filter on APS and display it on ADF', async () => { - customProcessFilter = await this.alfrescoJsApi.activiti.userFiltersApi.createUserProcessInstanceFilter({ + customProcessFilter = await apiService.getInstance().activiti.userFiltersApi.createUserProcessInstanceFilter({ 'appId': null, 'name': processFilter.new_filter, 'icon': 'glyphicon-random', @@ -95,7 +90,7 @@ describe('New Process Filters', () => { }); it('[C286450] Should display the process filter icon when a custom filter is added', async () => { - customProcessFilter = await this.alfrescoJsApi.activiti.userFiltersApi.createUserProcessInstanceFilter({ + customProcessFilter = await apiService.getInstance().activiti.userFiltersApi.createUserProcessInstanceFilter({ 'appId': null, 'name': processFilter.new_icon, 'icon': 'glyphicon-cloud', @@ -117,20 +112,20 @@ describe('New Process Filters', () => { }); it('[C260474] Should be able to edit a filter on APS and check it on ADF', async () => { - this.alfrescoJsApi.activiti.userFiltersApi.updateUserProcessInstanceFilter(filterId, { + await apiService.getInstance().activiti.userFiltersApi.updateUserProcessInstanceFilter(filterId, { 'appId': null, 'name': processFilter.edited, 'icon': 'glyphicon-random', 'filter': { 'sort': 'created-desc', 'name': '', 'state': 'running' } }); - await (await (await navigationBarPage.navigateToProcessServicesPage()).goToTaskApp()).clickProcessButton(); + await (await (await navigationBarPage.navigateToProcessServicesPage()).goToTaskApp()).clickProcessButton(); - await 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 () => { - customProcessFilter = await this.alfrescoJsApi.activiti.userFiltersApi.createUserProcessInstanceFilter({ + customProcessFilter = await apiService.getInstance().activiti.userFiltersApi.createUserProcessInstanceFilter({ 'appId': null, 'name': processFilter.edit_icon, 'icon': 'glyphicon-random', @@ -143,7 +138,7 @@ describe('New Process Filters', () => { await processFiltersPage.checkFilterIsDisplayed(processFilter.edit_icon); - await this.alfrescoJsApi.activiti.userFiltersApi.updateUserProcessInstanceFilter(filterId, { + await apiService.getInstance().activiti.userFiltersApi.updateUserProcessInstanceFilter(filterId, { 'appId': null, 'name': processFilter.edit_icon, 'icon': 'glyphicon-cloud', @@ -175,7 +170,7 @@ describe('New Process Filters', () => { }); it('[C260475] Should be able to delete a filter on APS and check it on ADF', async () => { - customProcessFilter = await this.alfrescoJsApi.activiti.userFiltersApi.createUserProcessInstanceFilter({ + customProcessFilter = await apiService.getInstance().activiti.userFiltersApi.createUserProcessInstanceFilter({ 'appId': null, 'name': processFilter.deleted, 'icon': 'glyphicon-random', @@ -184,7 +179,7 @@ describe('New Process Filters', () => { filterId = customProcessFilter.id; - await this.alfrescoJsApi.activiti.userFiltersApi.deleteUserProcessInstanceFilter(filterId); + await apiService.getInstance().activiti.userFiltersApi.deleteUserProcessInstanceFilter(filterId); await (await (await navigationBarPage.navigateToProcessServicesPage()).goToTaskApp()).clickProcessButton(); diff --git a/e2e/process-services/custom-tasks-filters.e2e.ts b/e2e/process-services/custom-tasks-filters.e2e.ts index ff16373a6d..010780ddd5 100644 --- a/e2e/process-services/custom-tasks-filters.e2e.ts +++ b/e2e/process-services/custom-tasks-filters.e2e.ts @@ -15,27 +15,41 @@ * limitations under the License. */ -import { DateUtil, LoginPage, PaginationPage, ApplicationsUtil, ProcessUtil } from '@alfresco/adf-testing'; -import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; +import { + ArrayUtil, + DateUtil, + LoginSSOPage, + PaginationPage, + ApplicationsUtil, + ProcessUtil, + ApiService +} from '@alfresco/adf-testing'; import { browser } from 'protractor'; import { AppsRuntimeActions } from '../actions/APS/apps-runtime.actions'; import { UsersActions } from '../actions/users.actions'; -import { Tenant } from '../models/APS/tenant'; import { TaskListDemoPage } from '../pages/adf/demo-shell/process-services/task-list-demo.page'; import { NavigationBarPage } from '../pages/adf/navigation-bar.page'; -import { Util } from '../util/util'; import moment = require('moment'); +import { TaskRepresentation } from '@alfresco/js-api'; describe('Start Task - Custom App', () => { - const loginPage = new LoginPage(); + const app = browser.params.resources.Files.SIMPLE_APP_WITH_USER_FORM; + const secondApp = browser.params.resources.Files.WIDGETS_SMOKE_TEST; + + const loginPage = new LoginSSOPage(); const navigationBarPage = new NavigationBarPage(); const taskListSinglePage = new TaskListDemoPage(); const paginationPage = new PaginationPage(); + + const apiService = new ApiService(); + const appsRuntime = new AppsRuntimeActions(apiService); + const usersActions = new UsersActions(apiService); + const applicationsService = new ApplicationsUtil(apiService); + const processUtil = new ProcessUtil(apiService); + let processUserModel; - const app = browser.params.resources.Files.SIMPLE_APP_WITH_USER_FORM; let appRuntime, secondAppRuntime; - const secondApp = browser.params.resources.Files.WIDGETS_SMOKE_TEST; let appModel; const completedTasks = []; const paginationTasksName = ['t01', 't02', 't03', 't04', 't05', 't06', 't07', 't08', 't09', 't10', 't11', 't12', 't13', 'taskOne', 'taskTwo', 'taskOne']; @@ -67,60 +81,46 @@ describe('Start Task - Custom App', () => { }; beforeAll(async () => { - const appsRuntime = new AppsRuntimeActions(); - const users = new UsersActions(); + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); - this.alfrescoJsApi = new AlfrescoApi({ - provider: 'BPM', - hostBpm: browser.params.testConfig.adf_aps.host - }); + processUserModel = await usersActions.createUser(); - await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); - - const applicationsService = new ApplicationsUtil(this.alfrescoJsApi); - - const newTenant = await this.alfrescoJsApi.activiti.adminTenantsApi.createTenant(new Tenant()); - - processUserModel = await users.createApsUser(this.alfrescoJsApi, newTenant.id); - - await this.alfrescoJsApi.login(processUserModel.email, processUserModel.password); + await apiService.getInstance().login(processUserModel.email, processUserModel.password); appModel = await applicationsService.importPublishDeployApp(app.file_path); - appRuntime = await appsRuntime.getRuntimeAppByName(this.alfrescoJsApi, app.title); + appRuntime = await appsRuntime.getRuntimeAppByName(app.title); await applicationsService.importPublishDeployApp(secondApp.file_path); - secondAppRuntime = await appsRuntime.getRuntimeAppByName(this.alfrescoJsApi, secondApp.title); + secondAppRuntime = await appsRuntime.getRuntimeAppByName(secondApp.title); - const processUtil = new ProcessUtil(this.alfrescoJsApi); processDefinitionId = await processUtil.startProcessOfApp(appModel.name); await processUtil.startProcessOfApp(appModel.name); await processUtil.startProcessOfApp(appModel.name); await processUtil.startProcessOfApp(appModel.name); for (let i = 1; i < paginationTasksName.length; i++) { - await this.alfrescoJsApi.activiti.taskApi.createNewTask({ 'name': paginationTasksName[i] }); + await apiService.getInstance().activiti.taskApi.createNewTask(new TaskRepresentation({ 'name': paginationTasksName[i] })); } for (let i = 0; i < 3; i++) { - completedTasks[i] = await this.alfrescoJsApi.activiti.taskApi.createNewTask({ + completedTasks[i] = await apiService.getInstance().activiti.taskApi.createNewTask(new TaskRepresentation({ 'name': completedTasksName[i], 'dueDate': DateUtil.formatDate('YYYY-MM-DDTHH:mm:ss.SSSZ', new Date(), i + 2) - }); - await this.alfrescoJsApi.activiti.taskActionsApi.completeTask(completedTasks[i].id); + })); + await apiService.getInstance().activiti.taskActionsApi.completeTask(completedTasks[i].id); } - taskWithDueDate = await this.alfrescoJsApi.activiti.taskApi.createNewTask({ + taskWithDueDate = await apiService.getInstance().activiti.taskApi.createNewTask(new TaskRepresentation({ 'name': paginationTasksName[0], 'dueDate': currentDateStandardFormat - }); + })); - await loginPage.loginToProcessServicesUsingUserModel(processUserModel); + await loginPage.login(processUserModel.email, processUserModel.password); }); describe('', () => { - beforeEach(async () => { await navigationBarPage.clickTaskListButton(); await taskListSinglePage.clickResetButton(); @@ -132,7 +132,7 @@ describe('Start Task - Custom App', () => { await expect(await taskListSinglePage.taskList().getDataTable().numberOfRows()).toBe(nrOfTasks); await taskListSinglePage.taskList().getAllRowsNameColumn().then(async (list) => { - await expect(Util.arrayContainsArray(list, allTasksName)).toEqual(true); + await expect(ArrayUtil.arrayContainsArray(list, allTasksName)).toEqual(true); }); await expect(await paginationPage.getCurrentPage()).toEqual('Page 1'); @@ -150,7 +150,7 @@ describe('Start Task - Custom App', () => { await expect(await taskListSinglePage.taskList().getDataTable().numberOfRows()).toBe(nrOfTasks); await taskListSinglePage.taskList().getAllRowsNameColumn().then(async (list) => { - await expect(Util.arrayContainsArray(list, allTasksName)).toEqual(true); + await expect(ArrayUtil.arrayContainsArray(list, allTasksName)).toEqual(true); }); await paginationPage.checkNextPageButtonIsDisabled(); await paginationPage.checkPreviousPageButtonIsDisabled(); @@ -164,7 +164,7 @@ describe('Start Task - Custom App', () => { 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); + await expect(ArrayUtil.arrayContainsArray(list, allTasksName.slice(0, 5))).toEqual(true); }); await paginationPage.clickOnNextPage(); @@ -176,7 +176,7 @@ describe('Start Task - Custom App', () => { 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); + await expect(ArrayUtil.arrayContainsArray(list, allTasksName.slice(5, 10))).toEqual(true); }); await paginationPage.clickOnNextPage(); @@ -187,7 +187,7 @@ describe('Start Task - Custom App', () => { 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); + await expect(ArrayUtil.arrayContainsArray(list, allTasksName.slice(10, 15))).toEqual(true); }); await paginationPage.clickOnNextPage(); @@ -197,7 +197,7 @@ describe('Start Task - Custom App', () => { 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); + await expect(ArrayUtil.arrayContainsArray(list, allTasksName.slice(15, 20))).toEqual(true); }); }); @@ -209,7 +209,7 @@ describe('Start Task - Custom App', () => { 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); + await expect(ArrayUtil.arrayContainsArray(list, allTasksName.slice(0, 10))).toEqual(true); }); await paginationPage.clickOnNextPage(); currentPage++; @@ -218,7 +218,7 @@ describe('Start Task - Custom App', () => { 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); + await expect(ArrayUtil.arrayContainsArray(list, allTasksName.slice(10, 20))).toEqual(true); }); }); @@ -230,7 +230,7 @@ describe('Start Task - Custom App', () => { 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); + await expect(ArrayUtil.arrayContainsArray(list, allTasksName.slice(0, 15))).toEqual(true); }); currentPage++; await paginationPage.clickOnNextPage(); @@ -239,7 +239,7 @@ describe('Start Task - Custom App', () => { 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); + await expect(ArrayUtil.arrayContainsArray(list, allTasksName.slice(15, 20))).toEqual(true); }); }); @@ -266,7 +266,7 @@ describe('Start Task - Custom App', () => { 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); + await expect(ArrayUtil.arrayContainsArray(list, allTasksName.slice(0, 5))).toEqual(true); }); currentPage++; @@ -277,7 +277,7 @@ describe('Start Task - Custom App', () => { 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); + await expect(ArrayUtil.arrayContainsArray(list, allTasksName.slice(5, 10))).toEqual(true); }); currentPage++; @@ -288,7 +288,7 @@ describe('Start Task - Custom App', () => { 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); + await expect(ArrayUtil.arrayContainsArray(list, allTasksName.slice(10, 15))).toEqual(true); }); currentPage++; @@ -299,7 +299,7 @@ describe('Start Task - Custom App', () => { 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); + await expect(ArrayUtil.arrayContainsArray(list, allTasksName.slice(15, 20))).toEqual(true); }); }); @@ -426,7 +426,7 @@ describe('Start Task - Custom App', () => { 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(ArrayUtil.arrayContainsArray(list, allTasksName)).toEqual(true); }); await expect(await taskListSinglePage.taskList().getDataTable().numberOfRows()).toBe(20); }); @@ -438,7 +438,7 @@ describe('Start Task - Custom App', () => { 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); + await expect(ArrayUtil.arrayContainsArray(list, allTasksName)).toEqual(true); }); await expect(await taskListSinglePage.taskList().getDataTable().numberOfRows()).toBe(23); }); @@ -455,7 +455,7 @@ describe('Start Task - Custom App', () => { await expect(await taskListSinglePage.taskList().getDataTable().numberOfRows()).toBe(4); await taskListSinglePage.getAllProcessDefinitionIds().then(async (list) => { - await expect(Util.arrayContainsArray(list, processDefinitionIds)).toEqual(true); + await expect(ArrayUtil.arrayContainsArray(list, processDefinitionIds)).toEqual(true); }); }); @@ -479,7 +479,7 @@ describe('Start Task - Custom App', () => { await expect(await taskListSinglePage.taskList().getDataTable().numberOfRows()).toBe(1); await taskListSinglePage.getAllProcessInstanceIds().then(async (list) => { - await expect(Util.arrayContainsArray(list, processInstanceIds)).toEqual(true); + await expect(ArrayUtil.arrayContainsArray(list, processInstanceIds)).toEqual(true); }); }); diff --git a/e2e/process-services/dynamic-table-date-picker.e2e.ts b/e2e/process-services/dynamic-table-date-picker.e2e.ts index c669bb7a34..9dda572e66 100644 --- a/e2e/process-services/dynamic-table-date-picker.e2e.ts +++ b/e2e/process-services/dynamic-table-date-picker.e2e.ts @@ -15,39 +15,42 @@ * limitations under the License. */ -import { LoginPage, Widget, DatePickerCalendarPage, DateUtil, ApplicationsUtil } from '@alfresco/adf-testing'; +import { + LoginSSOPage, + Widget, + DatePickerCalendarPage, + DateUtil, + ApplicationsUtil, + ApiService +} from '@alfresco/adf-testing'; import { ProcessFiltersPage } from '../pages/adf/process-services/process-filters.page'; import { ProcessServiceTabBarPage } from '../pages/adf/process-services/process-service-tab-bar.page'; import { NavigationBarPage } from '../pages/adf/navigation-bar.page'; import { browser } from 'protractor'; -import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; import { UsersActions } from '../actions/users.actions'; describe('Dynamic Table', () => { - const loginPage = new LoginPage(); + const loginPage = new LoginSSOPage(); const processFiltersPage = new ProcessFiltersPage(); const processServiceTabBarPage = new ProcessServiceTabBarPage(); const datePicker = new DatePickerCalendarPage(); const navigationBarPage = new NavigationBarPage(); const widget = new Widget(); - const users = new UsersActions(); - const alfrescoJsApi = new AlfrescoApi({ - provider: 'BPM', - hostBpm: browser.params.testConfig.adf_aps.host - }); + const apiService = new ApiService(); + const usersActions = new UsersActions(apiService); let user, tenantId, appId; beforeAll(async () => { - await alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); - user = await users.createTenantAndUser(alfrescoJsApi); + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); + user = await usersActions.createUser(); tenantId = user.tenantId; }); afterAll(async () => { - await alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); - await alfrescoJsApi.activiti.adminTenantsApi.deleteTenant(tenantId); + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); + await apiService.getInstance().activiti.adminTenantsApi.deleteTenant(tenantId); }); describe('Date Picker', () => { @@ -65,16 +68,16 @@ describe('Dynamic Table', () => { const rowPosition = 0; beforeAll(async () => { - await alfrescoJsApi.login(user.email, user.password); - const applicationsService = new ApplicationsUtil(alfrescoJsApi); + await apiService.getInstance().login(user.email, user.password); + const applicationsService = new ApplicationsUtil(apiService); const importedApp = await applicationsService.importPublishDeployApp(app.file_path); appId = importedApp.id; - await loginPage.loginToProcessServicesUsingUserModel(user); + await loginPage.login(user.email, user.password); }); afterAll(async () => { - await alfrescoJsApi.login(user.email, user.password); - await alfrescoJsApi.activiti.modelsApi.deleteModel(appId); + await apiService.getInstance().login(user.email, user.password); + await apiService.getInstance().activiti.modelsApi.deleteModel(appId); }); beforeEach(async () => { @@ -126,17 +129,17 @@ describe('Dynamic Table', () => { const dropdown = widget.dropdown(); beforeAll(async () => { - await alfrescoJsApi.login(user.email, user.password); - const applicationsService = new ApplicationsUtil(alfrescoJsApi); + await apiService.getInstance().login(user.email, user.password); + const applicationsService = new ApplicationsUtil(apiService); const importedApp = await applicationsService.importPublishDeployApp(app.file_path); appId = importedApp.id; - await loginPage.loginToProcessServicesUsingUserModel(user); + await loginPage.login(user.email, user.password); }); afterAll(async () => { - await alfrescoJsApi.login(user.email, user.password); - await alfrescoJsApi.activiti.modelsApi.deleteModel(appId); + await apiService.getInstance().login(user.email, user.password); + await apiService.getInstance().activiti.modelsApi.deleteModel(appId); }); beforeEach(async () => { diff --git a/e2e/process-services/empty-process-list-component.e2e.ts b/e2e/process-services/empty-process-list-component.e2e.ts index d7474dd189..c638046dd0 100644 --- a/e2e/process-services/empty-process-list-component.e2e.ts +++ b/e2e/process-services/empty-process-list-component.e2e.ts @@ -16,75 +16,70 @@ */ import { browser } from 'protractor'; -import { LoginPage, ApplicationsUtil, StartProcessPage } from '@alfresco/adf-testing'; +import { LoginSSOPage, ApplicationsUtil, StartProcessPage, ApiService } from '@alfresco/adf-testing'; import { NavigationBarPage } from '../pages/adf/navigation-bar.page'; import { ProcessServicesPage } from '../pages/adf/process-services/process-services.page'; import { ProcessFiltersPage } from '../pages/adf/process-services/process-filters.page'; import { ProcessDetailsPage } from '../pages/adf/process-services/process-details.page'; import { ProcessListPage } from '../pages/adf/process-services/process-list.page'; -import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; import { UsersActions } from '../actions/users.actions'; describe('Empty Process List Test', () => { - const loginPage = new LoginPage(); + const appWithProcess = browser.params.resources.Files.APP_WITH_PROCESSES; + const simpleAppWithUserForm = browser.params.resources.Files.SIMPLE_APP_WITH_USER_FORM; + + const loginPage = new LoginSSOPage(); const navigationBarPage = new NavigationBarPage(); const processServicesPage = new ProcessServicesPage(); const processFiltersPage = new ProcessFiltersPage(); const processDetailsPage = new ProcessDetailsPage(); const processListPage = new ProcessListPage(); const startProcessPage = new StartProcessPage(); - - const appA = browser.params.resources.Files.APP_WITH_PROCESSES; - const appB = browser.params.resources.Files.SIMPLE_APP_WITH_USER_FORM; + const apiService = new ApiService(); let user; beforeAll(async () => { - const users = new UsersActions(); + const usersActions = new UsersActions(apiService); - this.alfrescoJsApi = new AlfrescoApi({ - provider: 'BPM', - hostBpm: browser.params.testConfig.adf_aps.host - }); + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); - await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); + const applicationsService = new ApplicationsUtil(apiService); - const applicationsService = new ApplicationsUtil(this.alfrescoJsApi); + user = await usersActions.createUser(); - user = await users.createTenantAndUser(this.alfrescoJsApi); + await apiService.getInstance().login(user.email, user.password); - await this.alfrescoJsApi.login(user.email, user.password); + await applicationsService.importPublishDeployApp(appWithProcess.file_path); + await applicationsService.importPublishDeployApp(simpleAppWithUserForm.file_path); - await applicationsService.importPublishDeployApp(appA.file_path); - await applicationsService.importPublishDeployApp(appB.file_path); - - await loginPage.loginToProcessServicesUsingUserModel(user); + await loginPage.login(user.email, user.password); }); 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 (await processServicesPage.goToApp(appWithProcess.title)).clickProcessButton(); await expect(await processListPage.getDisplayedProcessListTitle()).toEqual('No Processes Found'); await expect(await processDetailsPage.checkProcessDetailsMessage()).toEqual('No process details found'); await processFiltersPage.clickCreateProcessButton(); await processFiltersPage.clickNewProcessDropdown(); - await startProcessPage.selectFromProcessDropdown(appA.process_wse_name); + await startProcessPage.selectFromProcessDropdown(appWithProcess.process_wse_name); await startProcessPage.clickStartProcessButton(); await expect(await processFiltersPage.numberOfProcessRows()).toEqual(1); await processDetailsPage.checkProcessDetailsCard(); await navigationBarPage.navigateToProcessServicesPage(); await processServicesPage.checkApsContainer(); - await (await processServicesPage.goToApp(appB.title)).clickProcessButton(); + await (await processServicesPage.goToApp(simpleAppWithUserForm.title)).clickProcessButton(); await expect(await processListPage.getDisplayedProcessListTitle()).toEqual('No Processes Found'); await expect(await processDetailsPage.checkProcessDetailsMessage()).toEqual('No process details found'); await processFiltersPage.clickCreateProcessButton(); await processFiltersPage.clickNewProcessDropdown(); - await startProcessPage.selectFromProcessDropdown(appB.processName); + await startProcessPage.selectFromProcessDropdown(simpleAppWithUserForm.processName); await startProcessPage.clickStartProcessButton(); await expect(await processFiltersPage.numberOfProcessRows()).toEqual(1); diff --git a/e2e/process-services/form-component.e2e.ts b/e2e/process-services/form-component.e2e.ts index f28df69ddc..722c067d7e 100644 --- a/e2e/process-services/form-component.e2e.ts +++ b/e2e/process-services/form-component.e2e.ts @@ -15,20 +15,21 @@ * limitations under the License. */ -import { LoginPage, Widget, FormPage } from '@alfresco/adf-testing'; +import { LoginSSOPage, Widget, FormPage, ApiService } from '@alfresco/adf-testing'; import { NavigationBarPage } from '../pages/adf/navigation-bar.page'; import { browser } from 'protractor'; - -import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; import { UsersActions } from '../actions/users.actions'; describe('Form Component', () => { - const loginPage = new LoginPage(); + const loginPage = new LoginSSOPage(); const navigationBarPage = new NavigationBarPage(); const formPage = new FormPage(); const widget = new Widget(); + const apiService = new ApiService(); + const usersActions = new UsersActions(apiService); + let tenantId, user; const fields = { @@ -48,30 +49,23 @@ describe('Form Component', () => { }; beforeAll(async () => { - this.alfrescoJsApi = new AlfrescoApi({ - provider: 'BPM', - hostBpm: browser.params.testConfig.adf_aps.host - }); + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); - const users = new UsersActions(); - - await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); - - user = await users.createTenantAndUser(this.alfrescoJsApi); + user = await usersActions.createUser(); tenantId = user.tenantId; - await this.alfrescoJsApi.login(user.email, user.password); + await apiService.getInstance().login(user.email, user.password); - await loginPage.loginToProcessServicesUsingUserModel(user); + await loginPage.login(user.email, user.password); await navigationBarPage.navigateToProcessServicesFormPage(); }); afterAll(async () => { - await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); - await this.alfrescoJsApi.activiti.adminTenantsApi.deleteTenant(tenantId); + await apiService.getInstance().activiti.adminTenantsApi.deleteTenant(tenantId); }); it('[C286505] Should be able to display errors under the Error Log section', async () => { diff --git a/e2e/process-services/form-people-widget.e2e.ts b/e2e/process-services/form-people-widget.e2e.ts index 5b6fece91f..e3461831e1 100644 --- a/e2e/process-services/form-people-widget.e2e.ts +++ b/e2e/process-services/form-people-widget.e2e.ts @@ -15,57 +15,52 @@ * limitations under the License. */ -import { LoginPage, Widget, ApplicationsUtil, StartProcessPage } from '@alfresco/adf-testing'; +import { LoginSSOPage, Widget, ApplicationsUtil, StartProcessPage, ApiService } from '@alfresco/adf-testing'; import { ProcessFiltersPage } from '../pages/adf/process-services/process-filters.page'; import { ProcessDetailsPage } from '../pages/adf/process-services/process-details.page'; import { TaskDetailsPage } from '../pages/adf/process-services/task-details.page'; import { NavigationBarPage } from '../pages/adf/navigation-bar.page'; -import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; import { UsersActions } from '../actions/users.actions'; import { browser } from 'protractor'; import { ProcessServiceTabBarPage } from '../pages/adf/process-services/process-service-tab-bar.page'; describe('Form widgets - People ', () => { - const loginPage = new LoginPage(); - let processUserModel; const app = browser.params.resources.Files.APP_WITH_USER_WIDGET; + + const loginPage = new LoginSSOPage(); const processFiltersPage = new ProcessFiltersPage(); - let appModel; - let alfrescoJsApi; - const widget = new Widget(); const startProcess = new StartProcessPage(); const processDetailsPage = new ProcessDetailsPage(); const taskDetails = new TaskDetailsPage(); const processServiceTabBarPage = new ProcessServiceTabBarPage(); + const widget = new Widget(); + + const apiService = new ApiService(); + const usersActions = new UsersActions(apiService); + + let processUserModel; + let appModel; beforeAll(async () => { - const users = new UsersActions(); + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); - alfrescoJsApi = new AlfrescoApi({ - provider: 'BPM', - hostBpm: browser.params.testConfig.adf_aps.host - }); + processUserModel = await usersActions.createUser(); - await alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); + await apiService.getInstance().login(processUserModel.email, processUserModel.password); - processUserModel = await users.createTenantAndUser(alfrescoJsApi); - - await alfrescoJsApi.login(processUserModel.email, processUserModel.password); - - const applicationsService = new ApplicationsUtil(alfrescoJsApi); + const applicationsService = new ApplicationsUtil(apiService); appModel = await applicationsService.importPublishDeployApp(app.file_path); - await loginPage.loginToProcessServicesUsingUserModel(processUserModel); - }); + await loginPage.login(processUserModel.email, processUserModel.password); + }); afterAll(async () => { + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); - await alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); - - await alfrescoJsApi.activiti.adminTenantsApi.deleteTenant(processUserModel.tenantId); - }); + await apiService.getInstance().activiti.adminTenantsApi.deleteTenant(processUserModel.tenantId); + }); beforeEach(async () => { await (await (await new NavigationBarPage().navigateToProcessServicesPage()).goToApp(appModel.name)).clickProcessButton(); @@ -82,7 +77,7 @@ describe('Form widgets - People ', () => { await processDetailsPage.clickOnActiveTask(); const taskId = await taskDetails.getId(); - const taskForm = await alfrescoJsApi.activiti.taskApi.getTaskForm(taskId); + const taskForm: any = await apiService.getInstance().activiti.taskApi.getTaskForm(taskId); const userEmail = taskForm['fields'][0].fields['1'][0].value.email; await expect(userEmail).toEqual(processUserModel.email); }); @@ -102,7 +97,7 @@ describe('Form widgets - People ', () => { await processDetailsPage.clickOnCompletedTask(); const taskId = await taskDetails.getId(); - const taskForm = await alfrescoJsApi.activiti.taskApi.getTaskForm(taskId); + const taskForm: any = await apiService.getInstance().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 b55c2cc5d4..8234395115 100644 --- a/e2e/process-services/form-widgets-component.e2e.ts +++ b/e2e/process-services/form-widgets-component.e2e.ts @@ -15,49 +15,45 @@ * limitations under the License. */ -import { LoginPage, BrowserActions, Widget, ApplicationsUtil, ProcessUtil } from '@alfresco/adf-testing'; +import { LoginSSOPage, BrowserActions, Widget, ApplicationsUtil, ProcessUtil, ApiService } from '@alfresco/adf-testing'; import { TasksPage } from '../pages/adf/process-services/tasks.page'; import CONSTANTS = require('../util/constants'); import FormDefinitionModel = require('../models/APS/FormDefinitionModel'); import { NavigationBarPage } from '../pages/adf/navigation-bar.page'; import { browser } from 'protractor'; -import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; import { UsersActions } from '../actions/users.actions'; const formInstance = new FormDefinitionModel(); describe('Form widgets', () => { - let alfrescoJsApi; + const taskPage = new TasksPage(); - const newTask = 'First task'; - const loginPage = new LoginPage(); - let processUserModel; - let appModel; + const loginPage = new LoginSSOPage(); const widget = new Widget(); + const apiService = new ApiService(); + const usersActions = new UsersActions(apiService); + const applicationsService = new ApplicationsUtil(apiService); + + const newTask = 'First task'; + let processUserModel; + let appModel; + describe('Form widgets', () => { + const app = browser.params.resources.Files.WIDGETS_SMOKE_TEST; const appFields = app.form_fields; beforeAll(async () => { - const users = new UsersActions(); + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); - alfrescoJsApi = new AlfrescoApi({ - provider: 'BPM', - hostBpm: browser.params.testConfig.adf_aps.host - }); + processUserModel = await usersActions.createUser(); - await alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); - - processUserModel = await users.createTenantAndUser(alfrescoJsApi); - - await alfrescoJsApi.login(processUserModel.email, processUserModel.password); - - const applicationsService = new ApplicationsUtil(alfrescoJsApi); + await apiService.getInstance().login(processUserModel.email, processUserModel.password); appModel = await applicationsService.importPublishDeployApp(app.file_path); - await loginPage.loginToProcessServicesUsingUserModel(processUserModel); + await loginPage.login(processUserModel.email, processUserModel.password); await (await new NavigationBarPage().navigateToProcessServicesPage()).goToApp(appModel.name); @@ -74,15 +70,15 @@ describe('Form widgets', () => { const response = await taskPage.taskDetails().getId(); - const formDefinition = await alfrescoJsApi.activiti.taskFormsApi.getTaskForm(response); + const formDefinition = await apiService.getInstance().activiti.taskFormsApi.getTaskForm(response); formInstance.setFields(formDefinition.fields); formInstance.setAllWidgets(formDefinition.fields); }); afterAll(async () => { - await alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); - await alfrescoJsApi.activiti.adminTenantsApi.deleteTenant(processUserModel.tenantId); + await apiService.getInstance().activiti.adminTenantsApi.deleteTenant(processUserModel.tenantId); }); it('[C272778] Should display text and multi-line in form', async () => { @@ -141,12 +137,11 @@ describe('Form widgets', () => { }); it('[C272783] Should display displayText and displayValue in form', async () => { - - await expect(await widget.displayTextWidget().getFieldLabel(appFields.displayText_id)) + await expect(await widget.displayTextWidget().getFieldLabel(appFields.displayText_id)) .toEqual(formInstance.getWidgetBy('id', appFields.displayText_id).value); - await expect(await 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' || ''); - await expect(await widget.displayValueWidget().getFieldValue(appFields.displayValue_id)) + await expect(await widget.displayValueWidget().getFieldValue(appFields.displayValue_id)) .toEqual(formInstance.getWidgetBy('id', appFields.displayValue_id).value || ''); }); @@ -172,53 +167,43 @@ describe('Form widgets', () => { }); it('[C268149] Should display hyperlink, dropdown and dynamic table in form', async () => { - - await expect(await widget.hyperlink().getFieldText(appFields.hyperlink_id)) + await expect(await widget.hyperlink().getFieldText(appFields.hyperlink_id)) .toEqual(formInstance.getWidgetBy('id', appFields.hyperlink_id).hyperlinkUrl || ''); - await expect(await taskPage.formFields().getFieldLabel(appFields.hyperlink_id)) + await expect(await taskPage.formFields().getFieldLabel(appFields.hyperlink_id)) .toEqual(formInstance.getWidgetBy('id', appFields.hyperlink_id).name); - await expect(await taskPage.formFields().getFieldLabel(appFields.dropdown_id)) + await expect(await taskPage.formFields().getFieldLabel(appFields.dropdown_id)) .toContain(formInstance.getWidgetBy('id', appFields.dropdown_id).name); - await expect(widget.dropdown().getSelectedOptionText(appFields.dropdown_id)) + await expect(widget.dropdown().getSelectedOptionText(appFields.dropdown_id)) .toContain(formInstance.getWidgetBy('id', appFields.dropdown_id).value); - await expect(await widget.dynamicTable().getFieldLabel(appFields.dynamicTable_id)) + await expect(await widget.dynamicTable().getFieldLabel(appFields.dynamicTable_id)) .toContain(formInstance.getWidgetBy('id', appFields.dynamicTable_id).name); - await expect(await 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); }); }); describe('with fields involving other people', () => { - const app = browser.params.resources.Files.FORM_ADF; let deployedApp, process; const appFields = app.form_fields; beforeAll(async () => { - const users = new UsersActions(); + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); - alfrescoJsApi = new AlfrescoApi({ - provider: 'BPM', - hostBpm: browser.params.testConfig.adf_aps.host - }); + processUserModel = await usersActions.createUser(); - await alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); - - processUserModel = await users.createTenantAndUser(alfrescoJsApi); - - await alfrescoJsApi.login(processUserModel.email, processUserModel.password); - const applicationsService = new ApplicationsUtil(alfrescoJsApi); + await apiService.getInstance().login(processUserModel.email, processUserModel.password); appModel = await applicationsService.importPublishDeployApp(app.file_path); - const appDefinitions = await alfrescoJsApi.activiti.appsApi.getAppDefinitions(); + const appDefinitions = await apiService.getInstance().activiti.appsApi.getAppDefinitions(); deployedApp = appDefinitions.data.find((currentApp) => { return currentApp.modelId === appModel.id; }); - const processUtil = new ProcessUtil(alfrescoJsApi); + const processUtil = new ProcessUtil(apiService); process = await processUtil.startProcessOfApp(appModel.name); - await loginPage.loginToProcessServicesUsingUserModel(processUserModel); + await loginPage.login(processUserModel.email, processUserModel.password); }); beforeEach(async () => { @@ -229,9 +214,9 @@ describe('Form widgets', () => { }); 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); + await apiService.getInstance().activiti.processApi.deleteProcessInstance(process.id); + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); + await apiService.getInstance().activiti.adminTenantsApi.deleteTenant(processUserModel.tenantId); }); it('[C260405] Value fields configured with process variables', async () => { diff --git a/e2e/process-services/info-drawer.e2e.ts b/e2e/process-services/info-drawer.e2e.ts index 1654dcfc2c..f8ca2430cd 100644 --- a/e2e/process-services/info-drawer.e2e.ts +++ b/e2e/process-services/info-drawer.e2e.ts @@ -15,15 +15,18 @@ * limitations under the License. */ -import { BrowserActions, BrowserVisibility, LocalStorageUtil, LoginPage, StringUtil, ApplicationsUtil } from '@alfresco/adf-testing'; import { - AlfrescoApiCompatibility as AlfrescoApi, - AppDefinitionRepresentation, - LightTenantRepresentation -} from '@alfresco/js-api'; + BrowserActions, + BrowserVisibility, + LocalStorageUtil, + LoginSSOPage, + StringUtil, + ApplicationsUtil, + ApiService, UserModel +} from '@alfresco/adf-testing'; +import { AppDefinitionRepresentation } from '@alfresco/js-api'; import { browser, by, element } from 'protractor'; import { UsersActions } from '../actions/users.actions'; -import { Tenant } from '../models/APS/tenant'; import { NavigationBarPage } from '../pages/adf/navigation-bar.page'; import { TasksPage } from '../pages/adf/process-services/tasks.page'; import CONSTANTS = require('../util/constants'); @@ -34,13 +37,17 @@ import { infoDrawerConfiguration } from './config/task.config'; describe('Info Drawer', () => { - const loginPage = new LoginPage(); + const app = browser.params.resources.Files.SIMPLE_APP_WITH_USER_FORM; + + const loginPage = new LoginSSOPage(); const navigationBarPage = new NavigationBarPage(); const taskPage = new TasksPage(); const processServiceTabBarPage = new ProcessServiceTabBarPage(); const processFiltersPage = new ProcessFiltersPage(); - const app = browser.params.resources.Files.SIMPLE_APP_WITH_USER_FORM; + const apiService = new ApiService(); + const applicationsService = new ApplicationsUtil(apiService); + const firstComment = 'comm1'; const date = { @@ -62,32 +69,29 @@ describe('Info Drawer', () => { let processUserModelFullName: string; let assigneeUserModelFullName: string; let appCreated: AppDefinitionRepresentation; - let newTenant: LightTenantRepresentation; + let processUserModel; beforeAll(async () => { - const users = new UsersActions(); - this.alfrescoApi = new AlfrescoApi({ - provider: 'BPM', - hostBpm: browser.params.testConfig.adf_aps.host - }); + const usersActions = new UsersActions(apiService); - await this.alfrescoApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); - newTenant = await this.alfrescoApi.activiti.adminTenantsApi.createTenant(new Tenant()); - const assigneeUserModel = await users.createApsUser(this.alfrescoApi, newTenant.id); + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); + + const assigneeUserModel = await usersActions.createUser(); assigneeUserModelFullName = assigneeUserModel.firstName + ' ' + assigneeUserModel.lastName; - const processUserModel = await users.createApsUser(this.alfrescoApi, newTenant.id); + + processUserModel = await usersActions.createUser(new UserModel({ tenantId: assigneeUserModel.tenantId })); processUserModelFullName = processUserModel.firstName + ' ' + processUserModel.lastName; - await this.alfrescoApi.login(processUserModel.email, processUserModel.password); - const applicationsService = new ApplicationsUtil(this.alfrescoApi); + + await apiService.getInstance().login(processUserModel.email, processUserModel.password); appCreated = await applicationsService.importPublishDeployApp(app.file_path); - await loginPage.loginToProcessServicesUsingUserModel(processUserModel); + await loginPage.login(processUserModel.email, processUserModel.password); }); afterAll(async () => { - await this.alfrescoApi.activiti.modelsApi.deleteModel(appCreated.id); - await this.alfrescoApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); - await this.alfrescoApi.activiti.adminTenantsApi.deleteTenant(newTenant.id); + await apiService.getInstance().activiti.modelsApi.deleteModel(appCreated.id); + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); + await apiService.getInstance().activiti.adminTenantsApi.deleteTenant(processUserModel.tenantId); }); beforeEach(async () => { diff --git a/e2e/process-services/pagination-processlist-adding-processes.e2e.ts b/e2e/process-services/pagination-processlist-adding-processes.e2e.ts index e04b346998..583411dbe2 100644 --- a/e2e/process-services/pagination-processlist-adding-processes.e2e.ts +++ b/e2e/process-services/pagination-processlist-adding-processes.e2e.ts @@ -15,8 +15,7 @@ * limitations under the License. */ -import { LoginPage, PaginationPage, ApplicationsUtil, ProcessUtil } from '@alfresco/adf-testing'; -import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; +import { LoginSSOPage, PaginationPage, ApplicationsUtil, ProcessUtil, ApiService } from '@alfresco/adf-testing'; import { browser } from 'protractor'; import { UsersActions } from '../actions/users.actions'; import { NavigationBarPage } from '../pages/adf/navigation-bar.page'; @@ -25,56 +24,49 @@ import { ProcessFiltersPage } from '../pages/adf/process-services/process-filter describe('Process List - Pagination when adding processes', () => { + const app = browser.params.resources.Files.SIMPLE_APP_WITH_USER_FORM; + + const loginPage = new LoginSSOPage(); + const paginationPage = new PaginationPage(); + const processFiltersPage = new ProcessFiltersPage(); + const processDetailsPage = new ProcessDetailsPage(); + + const apiService = new ApiService(); + const usersActions = new UsersActions(apiService); + const processUtil = new ProcessUtil(apiService); + const applicationsService = new ApplicationsUtil(apiService); + const itemsPerPage = { fifteen: '15', fifteenValue: 15 }; - const loginPage = new LoginPage(); - const paginationPage = new PaginationPage(); - const processFiltersPage = new ProcessFiltersPage(); - const processDetailsPage = new ProcessDetailsPage(); - let processUserModel; - const app = browser.params.resources.Files.SIMPLE_APP_WITH_USER_FORM; - const nrOfProcesses = 25; - let page, totalPages; - let i; let resultApp; beforeAll(async () => { - const users = new UsersActions(); + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); - this.alfrescoJsApi = new AlfrescoApi({ - provider: 'BPM', - hostBpm: browser.params.testConfig.adf_aps.host - }); + processUserModel = await usersActions.createUser(); - await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); - - processUserModel = await users.createTenantAndUser(this.alfrescoJsApi); - - await this.alfrescoJsApi.login(processUserModel.email, processUserModel.password); - - const applicationsService = new ApplicationsUtil(this.alfrescoJsApi); + await apiService.getInstance().login(processUserModel.email, processUserModel.password); resultApp = await applicationsService.importPublishDeployApp(app.file_path); - const processUtil = new ProcessUtil(this.alfrescoJsApi); - for (i = 0; i < (nrOfProcesses - 5); i++) { + for (let i = 0; i < 20; i++) { await processUtil.startProcessOfApp(resultApp.name); } - await loginPage.loginToProcessServicesUsingUserModel(processUserModel); + await loginPage.login(processUserModel.email, processUserModel.password); await (await (await new NavigationBarPage().navigateToProcessServicesPage()).goToTaskApp()).clickProcessButton(); - }); + }); it('[C261046] Should keep Items per page after adding processes', async () => { await processDetailsPage.checkProcessTitleIsDisplayed(); await processFiltersPage.waitForTableBody(); - totalPages = 2; - page = 1; + const totalPages = 2; + let page = 1; await paginationPage.selectItemsPerPage(itemsPerPage.fifteen); await processDetailsPage.checkProcessTitleIsDisplayed(); @@ -83,13 +75,12 @@ describe('Process List - Pagination when adding processes', () => { 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 paginationPage.getPaginationRange()).toEqual('Showing 1-' + itemsPerPage.fifteenValue * page + ' of 20' ); await expect(await processFiltersPage.numberOfProcessRows()).toBe(itemsPerPage.fifteenValue); await paginationPage.checkNextPageButtonIsEnabled(); await paginationPage.checkPreviousPageButtonIsDisabled(); - const processUtil = new ProcessUtil(this.alfrescoJsApi); - for (i; i < nrOfProcesses; i++) { + for (let i = 0; i < 5; i++) { await processUtil.startProcessOfApp(resultApp.name); } @@ -100,8 +91,8 @@ describe('Process List - Pagination when adding processes', () => { 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 expect(await paginationPage.getPaginationRange()).toEqual('Showing 16-25 of 25' ); + await expect(await processFiltersPage.numberOfProcessRows()).toBe(10); await paginationPage.checkNextPageButtonIsDisabled(); await paginationPage.checkPreviousPageButtonIsEnabled(); }); diff --git a/e2e/process-services/pagination-tasklist-adding-tasks.e2e.ts b/e2e/process-services/pagination-tasklist-adding-tasks.e2e.ts index 426b825a30..0554dd22b3 100644 --- a/e2e/process-services/pagination-tasklist-adding-tasks.e2e.ts +++ b/e2e/process-services/pagination-tasklist-adding-tasks.e2e.ts @@ -15,8 +15,7 @@ * limitations under the License. */ -import { LoginPage, PaginationPage, ApplicationsUtil, ProcessUtil } from '@alfresco/adf-testing'; -import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; +import { LoginSSOPage, PaginationPage, ApplicationsUtil, ProcessUtil, ApiService } from '@alfresco/adf-testing'; import { browser } from 'protractor'; import { UsersActions } from '../actions/users.actions'; import { NavigationBarPage } from '../pages/adf/navigation-bar.page'; @@ -25,12 +24,17 @@ import CONSTANTS = require('../util/constants'); describe('Items per page set to 15 and adding of tasks', () => { - const loginPage = new LoginPage(); + const app = browser.params.resources.Files.SIMPLE_APP_WITH_USER_FORM; + + const loginPage = new LoginSSOPage(); const taskPage = new TasksPage(); const paginationPage = new PaginationPage(); + const apiService = new ApiService(); + const usersActions = new UsersActions(apiService); + const applicationsService = new ApplicationsUtil(apiService); + let processUserModel; - const app = browser.params.resources.Files.SIMPLE_APP_WITH_USER_FORM; let currentPage = 1; const nrOfTasks = 25; const totalPages = 2; @@ -43,29 +47,20 @@ describe('Items per page set to 15 and adding of tasks', () => { }; beforeAll(async () => { - const users = new UsersActions(); + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); - this.alfrescoJsApi = new AlfrescoApi({ - provider: 'BPM', - hostBpm: browser.params.testConfig.adf_aps.host - }); + processUserModel = await usersActions.createUser(); - await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); - - processUserModel = await users.createTenantAndUser(this.alfrescoJsApi); - - await this.alfrescoJsApi.login(processUserModel.email, processUserModel.password); - - const applicationsService = new ApplicationsUtil(this.alfrescoJsApi); + await apiService.getInstance().login(processUserModel.email, processUserModel.password); resultApp = await applicationsService.importPublishDeployApp(app.file_path); - const processUtil = new ProcessUtil(this.alfrescoJsApi); + const processUtil = new ProcessUtil(apiService); for (i = 0; i < (nrOfTasks - 5); i++) { await processUtil.startProcessOfApp(resultApp.name); } - await loginPage.loginToProcessServicesUsingUserModel(processUserModel); + await loginPage.login(processUserModel.email, processUserModel.password); }); it('[C260306] Items per page set to 15 and adding of tasks', async () => { @@ -79,7 +74,7 @@ describe('Items per page set to 15 and adding of tasks', () => { await expect(await paginationPage.getPaginationRange()).toEqual('Showing 1-' + itemsPerPage.fifteenValue + ' of ' + (nrOfTasks - 5)); await expect(await taskPage.tasksListPage().getDataTable().numberOfRows()).toBe(itemsPerPage.fifteenValue); - const processUtil = new ProcessUtil(this.alfrescoJsApi); + const processUtil = new ProcessUtil(apiService); for (i; i < nrOfTasks; i++) { await processUtil.startProcessOfApp(resultApp.name); } diff --git a/e2e/process-services/people-component.e2e.ts b/e2e/process-services/people-component.e2e.ts index ee52fdc8ea..853a73c004 100644 --- a/e2e/process-services/people-component.e2e.ts +++ b/e2e/process-services/people-component.e2e.ts @@ -15,69 +15,62 @@ * limitations under the License. */ -import { LoginPage } from '@alfresco/adf-testing'; +import { ApiService, LoginSSOPage, UserModel } from '@alfresco/adf-testing'; import { TasksPage } from '../pages/adf/process-services/tasks.page'; import { NavigationBarPage } from '../pages/adf/navigation-bar.page'; import { ProcessServicesPage } from '../pages/adf/process-services/process-services.page'; import CONSTANTS = require('../util/constants'); -import { Tenant } from '../models/APS/tenant'; import { browser } from 'protractor'; -import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; import { UsersActions } from '../actions/users.actions'; import fs = require('fs'); import path = require('path'); +import { TaskRepresentation } from '@alfresco/js-api'; describe('People component', () => { - const loginPage = new LoginPage(); - const navigationBarPage = new NavigationBarPage(); - let processUserModel, assigneeUserModel, secondAssigneeUserModel; const app = browser.params.resources.Files.SIMPLE_APP_WITH_USER_FORM; + + const loginPage = new LoginSSOPage(); + const navigationBarPage = new NavigationBarPage(); const taskPage = new TasksPage(); - const peopleTitle = 'People this task is shared with '; const processServices = new ProcessServicesPage(); + const apiService = new ApiService(); + const usersActions = new UsersActions(apiService); + + let processUserModel, assigneeUserModel, secondAssigneeUserModel; + const peopleTitle = 'People this task is shared with '; + const tasks = ['no people involved task', 'remove people task', 'can not complete task', 'multiple users', 'completed filter']; beforeAll(async () => { - const users = new UsersActions(); + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); - this.alfrescoJsApi = new AlfrescoApi({ - provider: 'BPM', - hostBpm: browser.params.testConfig.adf_aps.host - }); - - await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); - - const newTenant = await this.alfrescoJsApi.activiti.adminTenantsApi.createTenant(new Tenant()); - - assigneeUserModel = await users.createApsUser(this.alfrescoJsApi, newTenant.id); - - secondAssigneeUserModel = await users.createApsUser(this.alfrescoJsApi, newTenant.id); - - processUserModel = await users.createApsUser(this.alfrescoJsApi, newTenant.id); + assigneeUserModel = await usersActions.createUser(); + secondAssigneeUserModel = await usersActions.createUser(new UserModel({ tenantId: assigneeUserModel.tenantId })); + processUserModel = await usersActions.createUser(new UserModel({ tenantId: assigneeUserModel.tenantId })); const pathFile = path.join(browser.params.testConfig.main.rootPath + app.file_location); const file = fs.createReadStream(pathFile); - await this.alfrescoJsApi.login(processUserModel.email, processUserModel.password); + await apiService.getInstance().login(processUserModel.email, processUserModel.password); - await this.alfrescoJsApi.activiti.appsApi.importAppDefinition(file); + await apiService.getInstance().activiti.appsApi.importAppDefinition(file); - await this.alfrescoJsApi.activiti.taskApi.createNewTask({ name: tasks[0] }); - await this.alfrescoJsApi.activiti.taskApi.createNewTask({ name: tasks[1] }); - await this.alfrescoJsApi.activiti.taskApi.createNewTask({ name: tasks[2] }); - await this.alfrescoJsApi.activiti.taskApi.createNewTask({ name: tasks[3] }); - await this.alfrescoJsApi.activiti.taskApi.createNewTask({ name: tasks[4] }); - }); + await apiService.getInstance().activiti.taskApi.createNewTask(new TaskRepresentation({ name: tasks[0] })); + await apiService.getInstance().activiti.taskApi.createNewTask(new TaskRepresentation({ name: tasks[1] })); + await apiService.getInstance().activiti.taskApi.createNewTask(new TaskRepresentation({ name: tasks[2] })); + await apiService.getInstance().activiti.taskApi.createNewTask(new TaskRepresentation({ name: tasks[3] })); + await apiService.getInstance().activiti.taskApi.createNewTask(new TaskRepresentation({ name: tasks[4] })); + }); beforeEach(async () => { - await loginPage.loginToProcessServicesUsingUserModel(processUserModel); + await loginPage.login(processUserModel.email, processUserModel.password); 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', async () => { await taskPage.tasksListPage().checkContentIsDisplayed(tasks[0]); @@ -162,7 +155,7 @@ describe('People component', () => { await expect(await taskPage.taskDetails().getInvolvedUserEmail(assigneeUserModel.firstName + ' ' + assigneeUserModel.lastName)) .toEqual(assigneeUserModel.email); - await loginPage.loginToProcessServicesUsingUserModel(assigneeUserModel); + await loginPage.login(assigneeUserModel.email, assigneeUserModel.password); await (await (await navigationBarPage.navigateToProcessServicesPage()).goToTaskApp()).clickTasksButton(); await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.INV_TASKS); await taskPage.tasksListPage().checkContentIsDisplayed(tasks[1]); @@ -220,7 +213,7 @@ describe('People component', () => { await expect(await taskPage.taskDetails().getInvolvedUserEmail(assigneeUserModel.firstName + ' ' + assigneeUserModel.lastName)) .toEqual(assigneeUserModel.email); - await loginPage.loginToProcessServicesUsingUserModel(assigneeUserModel); + await loginPage.login(assigneeUserModel.email, assigneeUserModel.password); await (await (await navigationBarPage.navigateToProcessServicesPage()).goToTaskApp()).clickTasksButton(); await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.COMPLETED_TASKS); await taskPage.tasksListPage().checkContentIsDisplayed(tasks[3]); diff --git a/e2e/process-services/process-attachment-list-action-menu.e2e.ts b/e2e/process-services/process-attachment-list-action-menu.e2e.ts index c520d8623f..fadd1c8410 100644 --- a/e2e/process-services/process-attachment-list-action-menu.e2e.ts +++ b/e2e/process-services/process-attachment-list-action-menu.e2e.ts @@ -15,25 +15,37 @@ * limitations under the License. */ -import { LoginPage, FileBrowserUtil, ViewerPage, ApplicationsUtil, ProcessUtil } from '@alfresco/adf-testing'; +import { + LoginSSOPage, + FileBrowserUtil, + ViewerPage, + ApplicationsUtil, + ProcessUtil, + ApiService +} from '@alfresco/adf-testing'; import { ProcessFiltersPage } from '../pages/adf/process-services/process-filters.page'; import { ProcessDetailsPage } from '../pages/adf/process-services/process-details.page'; import { AttachmentListPage } from '../pages/adf/process-services/attachment-list.page'; import { NavigationBarPage } from '../pages/adf/navigation-bar.page'; -import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; import { UsersActions } from '../actions/users.actions'; import { FileModel } from '../models/ACS/file.model'; import { browser } from 'protractor'; describe('Attachment list action menu for processes', () => { - const loginPage = new LoginPage(); + const app = browser.params.resources.Files.SIMPLE_APP_WITH_USER_FORM; + + const loginPage = new LoginSSOPage(); const processFiltersPage = new ProcessFiltersPage(); const processDetailsPage = new ProcessDetailsPage(); const attachmentListPage = new AttachmentListPage(); const navigationBarPage = new NavigationBarPage(); const viewerPage = new ViewerPage(); - const app = browser.params.resources.Files.SIMPLE_APP_WITH_USER_FORM; + + const apiService = new ApiService(); + const usersActions = new UsersActions(apiService); + const applicationsService = new ApplicationsUtil(apiService); + const pngFile = new FileModel({ location: browser.params.resources.Files.ADF_DOCUMENTS.PNG.file_location, name: browser.params.resources.Files.ADF_DOCUMENTS.PNG.file_name @@ -50,40 +62,32 @@ describe('Attachment list action menu for processes', () => { }; beforeAll(async () => { - const users = new UsersActions(); - this.alfrescoJsApi = new AlfrescoApi({ - provider: 'BPM', - hostBpm: browser.params.testConfig.adf_aps.host - }); + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); - await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); - - const user = await users.createTenantAndUser(this.alfrescoJsApi); + const user = await usersActions.createUser(); tenantId = user.tenantId; - await this.alfrescoJsApi.login(user.email, user.password); - - const applicationsService = new ApplicationsUtil(this.alfrescoJsApi); + await apiService.getInstance().login(user.email, user.password); const importedApp = await applicationsService.importPublishDeployApp(app.file_path); appId = importedApp.id; - const processUtil = new ProcessUtil(this.alfrescoJsApi); + const processUtil = new ProcessUtil(apiService); await processUtil.startProcessOfApp(importedApp.name, processName.completed); await processUtil.startProcessOfApp(importedApp.name, processName.active); await processUtil.startProcessOfApp(importedApp.name, processName.taskApp); await processUtil.startProcessOfApp(importedApp.name, processName.emptyList); await processUtil.startProcessOfApp(importedApp.name, processName.dragDrop); - await loginPage.loginToProcessServicesUsingUserModel(user); + await loginPage.login(user.email, user.password); }); 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); + await apiService.getInstance().activiti.modelsApi.deleteModel(appId); + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); + await apiService.getInstance().activiti.adminTenantsApi.deleteTenant(tenantId); }); it('[C260228] Should be able to access options of a file attached to an active process', async () => { diff --git a/e2e/process-services/process-filters-component.e2e.ts b/e2e/process-services/process-filters-component.e2e.ts index d6f7213fe1..a6f302c5f0 100644 --- a/e2e/process-services/process-filters-component.e2e.ts +++ b/e2e/process-services/process-filters-component.e2e.ts @@ -15,7 +15,7 @@ * limitations under the License. */ -import { LoginPage, BrowserActions, ApplicationsUtil, StartProcessPage } from '@alfresco/adf-testing'; +import { LoginSSOPage, BrowserActions, ApplicationsUtil, StartProcessPage, ApiService } from '@alfresco/adf-testing'; import { NavigationBarPage } from '../pages/adf/navigation-bar.page'; import { ProcessServicesPage } from '../pages/adf/process-services/process-services.page'; import { ProcessFiltersPage } from '../pages/adf/process-services/process-filters.page'; @@ -23,7 +23,7 @@ import { ProcessServiceTabBarPage } from '../pages/adf/process-services/process- import { ProcessDetailsPage } from '../pages/adf/process-services/process-details.page'; import { ProcessListPage } from '../pages/adf/process-services/process-list.page'; -import { AlfrescoApiCompatibility as AlfrescoApi, UserProcessInstanceFilterRepresentation } from '@alfresco/js-api'; +import { UserProcessInstanceFilterRepresentation } from '@alfresco/js-api'; import { UsersActions } from '../actions/users.actions'; import { browser } from 'protractor'; import { ProcessListDemoPage } from '../pages/adf/demo-shell/process-services/process-list-demo.page'; @@ -31,7 +31,9 @@ import CONSTANTS = require('../util/constants'); describe('Process Filters Test', () => { - const loginPage = new LoginPage(); + const app = browser.params.resources.Files.APP_WITH_DATE_FIELD_FORM; + + const loginPage = new LoginSSOPage(); const processListPage = new ProcessListPage(); const navigationBarPage = new NavigationBarPage(); const processServicesPage = new ProcessServicesPage(); @@ -40,9 +42,12 @@ describe('Process Filters Test', () => { const processFiltersPage = new ProcessFiltersPage(); const processServiceTabBarPage = new ProcessServiceTabBarPage(); const processDetailsPage = new ProcessDetailsPage(); - let appModel, user; - const app = browser.params.resources.Files.APP_WITH_DATE_FIELD_FORM; + const apiService = new ApiService(); + const usersActions = new UsersActions(apiService); + const applicationsService = new ApplicationsUtil(apiService); + + let appModel, user; const processTitle = { running: 'Test_running', @@ -58,19 +63,12 @@ describe('Process Filters Test', () => { }; beforeAll(async () => { - const users = new UsersActions(); - this.alfrescoJsApi = new AlfrescoApi({ - provider: 'BPM', - hostBpm: browser.params.testConfig.adf_aps.host - }); - - await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); - user = await users.createTenantAndUser(this.alfrescoJsApi); - await this.alfrescoJsApi.login(user.email, user.password); - const applicationsService = new ApplicationsUtil(this.alfrescoJsApi); + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); + user = await usersActions.createUser(); + await apiService.getInstance().login(user.email, user.password); appModel = await applicationsService.importPublishDeployApp(app.file_path); - await loginPage.loginToProcessServicesUsingUserModel(user); + await loginPage.login(user.email, user.password); }); beforeEach(async () => { @@ -133,24 +131,23 @@ describe('Process Filters Test', () => { }); it('[C280407] Should be able to access the filters with URL', async () => { - const defaultFiltersNumber = 3; let deployedApp, processFilterUrl; - const appDefinitions = await this.alfrescoJsApi.activiti.appsApi.getAppDefinitions(); + const appDefinitions = await apiService.getInstance().activiti.appsApi.getAppDefinitions(); deployedApp = appDefinitions.data.find((currentApp) => { return currentApp.modelId === appModel.id; }); processFilterUrl = browser.params.testConfig.adf.url + '/activiti/apps/' + deployedApp.id + '/processes/'; - const taskAppFilters = await this.alfrescoJsApi.activiti.userFiltersApi.getUserProcessInstanceFilters({ appId: deployedApp.id }); + const taskAppFilters = await apiService.getInstance().activiti.userFiltersApi.getUserProcessInstanceFilters({ appId: deployedApp.id }); await processServicesPage.goToApp(app.title); await processServiceTabBarPage.clickProcessButton(); await processListPage.checkProcessListIsDisplayed(); await expect(taskAppFilters.size).toBe(defaultFiltersNumber); - for (const filter of taskAppFilters) { + for (const filter of taskAppFilters.data) { await BrowserActions.getUrl(processFilterUrl + filter.id); await processListPage.checkProcessListIsDisplayed(); await processFiltersPage.checkFilterIsHighlighted(filter.name); @@ -218,8 +215,8 @@ describe('Process Filters Test', () => { }); it('[C260384] Edit default filter', async () => { - const runningFilter = (await getFilter(this.alfrescoJsApi)).find(filter => filter.name === 'Running'); - await this.alfrescoJsApi.activiti.userFiltersApi + const runningFilter = (await getFilter()).find(filter => filter.name === 'Running'); + await apiService.getInstance().activiti.userFiltersApi .updateUserProcessInstanceFilter(runningFilter.id, { ...runningFilter, name: 'Edited Running' }); await processServicesPage.goToApp(app.title); @@ -229,18 +226,18 @@ describe('Process Filters Test', () => { }); it('[C260385] Delete default filter', async () => { - const allFilter = (await getFilter(this.alfrescoJsApi)).find(filter => filter.name === 'All'); - await this.alfrescoJsApi.activiti.userFiltersApi.deleteUserProcessInstanceFilter(allFilter.id); + const allFilter = (await getFilter()).find(filter => filter.name === 'All'); + await apiService.getInstance().activiti.userFiltersApi.deleteUserProcessInstanceFilter(allFilter.id); await processServicesPage.goToApp(app.title); await processServiceTabBarPage.clickProcessButton(); await processFiltersPage.checkFilterIsNotDisplayed('All'); }); - async function getFilter(alfrescoJsApi): Promise { - const apps = await alfrescoJsApi.activiti.appsApi.getAppDefinitions(); + async function getFilter(): Promise { + const apps = await apiService.getInstance().activiti.appsApi.getAppDefinitions(); const { id: appId = 0 } = apps.data.find((application) => application.name === appModel.name); - const filters = await alfrescoJsApi.activiti.userFiltersApi.getUserProcessInstanceFilters({ appId }); + const filters = await apiService.getInstance().activiti.userFiltersApi.getUserProcessInstanceFilters({ appId }); return filters.data; } diff --git a/e2e/process-services/process-instance-details.e2e.ts b/e2e/process-services/process-instance-details.e2e.ts index 70753393d3..503d99988c 100644 --- a/e2e/process-services/process-instance-details.e2e.ts +++ b/e2e/process-services/process-instance-details.e2e.ts @@ -16,10 +16,9 @@ */ import { browser } from 'protractor'; -import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; import { UsersActions } from '../actions/users.actions'; import { ProcessServicesPage } from '../pages/adf/process-services/process-services.page'; -import { LoginPage, ApplicationsUtil, ProcessUtil } from '@alfresco/adf-testing'; +import { LoginSSOPage, ApplicationsUtil, ProcessUtil, ApiService } from '@alfresco/adf-testing'; import { NavigationBarPage } from '../pages/adf/navigation-bar.page'; import { ProcessServiceTabBarPage } from '../pages/adf/process-services/process-service-tab-bar.page'; import { ProcessListPage } from '../pages/adf/process-services/process-list.page'; @@ -28,36 +27,33 @@ import moment = require('moment'); describe('Process Instance Details', () => { - const loginPage = new LoginPage(); + const app = browser.params.resources.Files.SIMPLE_APP_WITH_USER_FORM; + + const loginPage = new LoginSSOPage(); const navigationBarPage = new NavigationBarPage(); const processServicesPage = new ProcessServicesPage(); const processServiceTabBarPage = new ProcessServiceTabBarPage(); const processListPage = new ProcessListPage(); const processDetailsPage = new ProcessDetailsPage(); + const apiService = new ApiService(); + const usersActions = new UsersActions(apiService); + const applicationsService = new ApplicationsUtil(apiService); + let appModel, process, user; - const app = browser.params.resources.Files.SIMPLE_APP_WITH_USER_FORM; const PROCESS_DATE_FORMAT = 'll'; beforeAll(async () => { - const users = new UsersActions(); + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); - this.alfrescoJsApi = new AlfrescoApi({ - provider: 'BPM', - hostBpm: browser.params.testConfig.adf_aps.host - }); + user = await usersActions.createUser(); - await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); + await apiService.getInstance().login(user.email, user.password); - user = await users.createTenantAndUser(this.alfrescoJsApi); - - await this.alfrescoJsApi.login(user.email, user.password); - - const applicationsService = new ApplicationsUtil(this.alfrescoJsApi); appModel = await applicationsService.importPublishDeployApp(app.file_path); - const processModel = await new ProcessUtil(this.alfrescoJsApi).startProcessOfApp(appModel.name); + const processModel = await new ProcessUtil(apiService).startProcessOfApp(appModel.name); - await loginPage.loginToProcessServicesUsingUserModel(user); + await loginPage.login(user.email, user.password); await navigationBarPage.navigateToProcessServicesPage(); await processServicesPage.checkApsContainer(); @@ -65,13 +61,13 @@ describe('Process Instance Details', () => { await processServiceTabBarPage.clickProcessButton(); await processListPage.checkProcessListIsDisplayed(); - process = await this.alfrescoJsApi.activiti.processApi.getProcessInstance(processModel.id); + process = await apiService.getInstance().activiti.processApi.getProcessInstance(processModel.id); }); 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); + await apiService.getInstance().activiti.modelsApi.deleteModel(appModel.id); + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); + await apiService.getInstance().activiti.adminTenantsApi.deleteTenant(user.tenantId); }); it('[C307031] Should display the created date in the default format', async () => { diff --git a/e2e/process-services/process-list-component.e2e.ts b/e2e/process-services/process-list-component.e2e.ts index 212ea34570..4a123954d3 100644 --- a/e2e/process-services/process-list-component.e2e.ts +++ b/e2e/process-services/process-list-component.e2e.ts @@ -15,20 +15,23 @@ * limitations under the License. */ -import { LoginPage, BrowserActions, ApplicationsUtil, ProcessUtil } from '@alfresco/adf-testing'; +import { LoginSSOPage, BrowserActions, ProcessUtil, ApiService, ApplicationsUtil } from '@alfresco/adf-testing'; import { ProcessListDemoPage } from '../pages/adf/demo-shell/process-services/process-list-demo.page'; import { browser } from 'protractor'; -import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; -import { AppsActions } from '../actions/APS/apps.actions'; import { UsersActions } from '../actions/users.actions'; describe('Process List Test', () => { - const loginPage = new LoginPage(); - const processListDemoPage = new ProcessListDemoPage(); - const appWithDateField = browser.params.resources.Files.APP_WITH_DATE_FIELD_FORM; const appWithUserWidget = browser.params.resources.Files.APP_WITH_USER_WIDGET; + + const loginPage = new LoginSSOPage(); + const processListDemoPage = new ProcessListDemoPage(); + + const apiService = new ApiService(); + const applicationsUtil = new ApplicationsUtil(apiService); + const usersActions = new UsersActions(apiService); + let appDateModel, appUserWidgetModel, user; const processList = ['Process With Date', 'Process With Date 2', 'Process With User Widget', 'Process With User Widget 2']; @@ -49,51 +52,42 @@ describe('Process List Test', () => { let procWithDate, completedProcWithDate, completedProcWithUserWidget; beforeAll(async () => { - const apps = new AppsActions(); - const users = new UsersActions(); + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); - this.alfrescoJsApi = new AlfrescoApi({ - provider: 'BPM', - hostBpm: browser.params.testConfig.adf_aps.host - }); + user = await usersActions.createUser(); - await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); + await apiService.getInstance().login(user.email, user.password); - user = await users.createTenantAndUser(this.alfrescoJsApi); + appDateModel = await applicationsUtil.importPublishDeployApp(appWithDateField.file_path); - await this.alfrescoJsApi.login(user.email, user.password); - - const applicationsService = new ApplicationsUtil(this.alfrescoJsApi); - - appDateModel = await applicationsService.importPublishDeployApp(appWithDateField.file_path); - - const processUtil = new ProcessUtil(this.alfrescoJsApi); + const processUtil = new ProcessUtil(apiService); procWithDate = await processUtil.startProcessOfApp(appDateModel.name, processName.procWithDate); completedProcWithDate = await processUtil.startProcessOfApp(appDateModel.name, processName.completedProcWithDate); - appUserWidgetModel = await applicationsService.importPublishDeployApp(appWithUserWidget.file_path); + appUserWidgetModel = await applicationsUtil.importPublishDeployApp(appWithUserWidget.file_path); await processUtil.startProcessOfApp(appUserWidgetModel.name, processName.procWithUserWidget); completedProcWithUserWidget = await processUtil.startProcessOfApp(appUserWidgetModel.name, processName.completedProcWithUserWidget); - appWithDateFieldId = await apps.getAppDefinitionId(this.alfrescoJsApi, appDateModel.id); + appWithDateFieldId = await applicationsUtil.getAppDefinitionId(appDateModel.id); - const procWithDateTaskId = await apps.getProcessTaskId(this.alfrescoJsApi, completedProcWithDate.id); - const procWithUserWidgetTaskId = await apps.getProcessTaskId(this.alfrescoJsApi, completedProcWithUserWidget.id); + const procWithDateTaskId = await processUtil.getProcessTaskId(completedProcWithDate.id); - await this.alfrescoJsApi.activiti.taskApi.completeTaskForm(procWithDateTaskId.toString(), { values: { label: null } }); - await this.alfrescoJsApi.activiti.taskFormsApi.completeTaskForm(procWithUserWidgetTaskId.toString(), { values: { label: null } }); + const procWithUserWidgetTaskId = await processUtil.getProcessTaskId(completedProcWithUserWidget.id); - await loginPage.loginToProcessServicesUsingUserModel(user); + await apiService.getInstance().activiti.taskApi.completeTaskForm(procWithDateTaskId.id, { values: { label: null } }); + await apiService.getInstance().activiti.taskFormsApi.completeTaskForm(procWithUserWidgetTaskId.id, { values: { label: null } }); + + await loginPage.login(user.email, user.password); }); afterAll(async () => { - await this.alfrescoJsApi.activiti.modelsApi.deleteModel(appDateModel.id); - await this.alfrescoJsApi.activiti.modelsApi.deleteModel(appUserWidgetModel.id); + await apiService.getInstance().activiti.modelsApi.deleteModel(appDateModel.id); + await apiService.getInstance().activiti.modelsApi.deleteModel(appUserWidgetModel.id); - await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); - await this.alfrescoJsApi.activiti.adminTenantsApi.deleteTenant(user.tenantId); + await apiService.getInstance().activiti.adminTenantsApi.deleteTenant(user.tenantId); }); beforeEach(async () => { diff --git a/e2e/process-services/processlist-pagination.e2e.ts b/e2e/process-services/processlist-pagination.e2e.ts index c5c4fa9de4..6a06675c7d 100644 --- a/e2e/process-services/processlist-pagination.e2e.ts +++ b/e2e/process-services/processlist-pagination.e2e.ts @@ -15,8 +15,7 @@ * limitations under the License. */ -import { LoginPage, PaginationPage, ApplicationsUtil, ProcessUtil } from '@alfresco/adf-testing'; -import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; +import { LoginSSOPage, PaginationPage, ApplicationsUtil, ProcessUtil, ApiService } from '@alfresco/adf-testing'; import { browser } from 'protractor'; import { UsersActions } from '../actions/users.actions'; import { NavigationBarPage } from '../pages/adf/navigation-bar.page'; @@ -25,6 +24,18 @@ import { ProcessFiltersPage } from '../pages/adf/process-services/process-filter describe('Process List - Pagination', () => { + const app = browser.params.resources.Files.SIMPLE_APP_WITH_USER_FORM; + + const loginPage = new LoginSSOPage(); + const navigationBarPage = new NavigationBarPage(); + const paginationPage = new PaginationPage(); + const processFiltersPage = new ProcessFiltersPage(); + const processDetailsPage = new ProcessDetailsPage(); + + const apiService = new ApiService(); + const usersActions = new UsersActions(apiService); + const applicationsService = new ApplicationsUtil(apiService); + const itemsPerPage = { five: '5', fiveValue: 5, @@ -39,61 +50,38 @@ describe('Process List - Pagination', () => { const processFilterRunning = 'Running'; - const loginPage = new LoginPage(); - const navigationBarPage = new NavigationBarPage(); - const paginationPage = new PaginationPage(); - const processFiltersPage = new ProcessFiltersPage(); - const processDetailsPage = new ProcessDetailsPage(); let deployedTestApp; let processUserModel; - const app = browser.params.resources.Files.SIMPLE_APP_WITH_USER_FORM; const nrOfProcesses = 20; let page; let totalPages; beforeAll(async () => { - const users = new UsersActions(); + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); - this.alfrescoJsApi = new AlfrescoApi({ - provider: 'BPM', - hostBpm: browser.params.testConfig.adf_aps.host - }); + processUserModel = await usersActions.createUser(); - await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); - - processUserModel = await users.createTenantAndUser(this.alfrescoJsApi); - - await this.alfrescoJsApi.login(processUserModel.email, processUserModel.password); - - const applicationsService = new ApplicationsUtil(this.alfrescoJsApi); + await apiService.getInstance().login(processUserModel.email, processUserModel.password); deployedTestApp = await applicationsService.importPublishDeployApp(app.file_path); - await loginPage.loginToProcessServicesUsingUserModel(processUserModel); - }); + await loginPage.login(processUserModel.email, processUserModel.password); + }); describe('With processes Pagination', () => { - beforeAll(async () => { - - this.alfrescoJsApi = new AlfrescoApi({ - provider: 'BPM', - hostBpm: browser.params.testConfig.adf_aps.host - }); - - await this.alfrescoJsApi.login(processUserModel.email, processUserModel.password); + await apiService.getInstance().login(processUserModel.email, processUserModel.password); for (let i = 0; i < nrOfProcesses; i++) { - await new ProcessUtil(this.alfrescoJsApi).startProcessOfApp(deployedTestApp.name); + await new ProcessUtil(apiService).startProcessOfApp(deployedTestApp.name); } - }); beforeEach(async () => { await (await (await navigationBarPage.navigateToProcessServicesPage()).goToTaskApp()).clickProcessButton(); }); - it('[C261042] Should display default pagination', async() => { + it('[C261042] Should display default pagination', async () => { page = 1; totalPages = 1; await processFiltersPage.clickRunningFilterButton(); @@ -110,7 +98,7 @@ describe('Process List - Pagination', () => { await paginationPage.checkPreviousPageButtonIsDisabled(); }); - it('[C261043] Should be possible to Items per page to 15', async() => { + it('[C261043] Should be possible to Items per page to 15', async () => { page = 1; totalPages = 2; await processFiltersPage.clickRunningFilterButton(); @@ -151,7 +139,7 @@ describe('Process List - Pagination', () => { await expect(await paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.fifteen); }); - it('[C261044] Should be possible to Items per page to 10', async() => { + it('[C261044] Should be possible to Items per page to 10', async () => { page = 1; totalPages = 2; await processFiltersPage.clickRunningFilterButton(); @@ -192,7 +180,7 @@ describe('Process List - Pagination', () => { await expect(await paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.ten); }); - it('[C261047] Should be possible to Items per page to 20', async() => { + it('[C261047] Should be possible to Items per page to 20', async () => { page = 1; totalPages = 1; await processFiltersPage.clickRunningFilterButton(); @@ -220,7 +208,7 @@ describe('Process List - Pagination', () => { await expect(await paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.twenty); }); - it('[C261045] Should be possible to Items per page to 5', async() => { + it('[C261045] Should be possible to Items per page to 5', async () => { let showing; page = 1; totalPages = 4; @@ -294,7 +282,7 @@ describe('Process List - Pagination', () => { await expect(await paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.five); }); - it('[C261049] Should be possible to open page number dropdown', async() => { + it('[C261049] Should be possible to open page number dropdown', async () => { let showing; page = 1; totalPages = 2; @@ -347,7 +335,7 @@ describe('Process List - Pagination', () => { await paginationPage.checkPreviousPageButtonIsDisabled(); }); - it('[C261048] Should be possible to sort processes by name', async() => { + it('[C261048] Should be possible to sort processes by name', async () => { await processFiltersPage.clickRunningFilterButton(); await processFiltersPage.checkFilterIsHighlighted(processFilterRunning); await processDetailsPage.checkProcessTitleIsDisplayed(); @@ -366,7 +354,7 @@ describe('Process List - Pagination', () => { await processFiltersPage.checkProcessesSortedByNameDesc(); }); - it('[C286260] Should keep sorting when changing \'Items per page\'', async() => { + it('[C286260] Should keep sorting when changing \'Items per page\'', async () => { await processFiltersPage.clickRunningFilterButton(); await processFiltersPage.checkFilterIsHighlighted(processFilterRunning); await processDetailsPage.checkProcessTitleIsDisplayed(); diff --git a/e2e/process-services/sort-tasklist-pagination.e2e.ts b/e2e/process-services/sort-tasklist-pagination.e2e.ts index 56f8689610..4d8cf44e1c 100644 --- a/e2e/process-services/sort-tasklist-pagination.e2e.ts +++ b/e2e/process-services/sort-tasklist-pagination.e2e.ts @@ -15,26 +15,30 @@ * limitations under the License. */ -import { LoginPage, PaginationPage, ApplicationsUtil } from '@alfresco/adf-testing'; -import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; +import { StringUtil, LoginSSOPage, PaginationPage, ApplicationsUtil, ApiService } from '@alfresco/adf-testing'; import { browser } from 'protractor'; import { UsersActions } from '../actions/users.actions'; import { NavigationBarPage } from '../pages/adf/navigation-bar.page'; import { TasksPage } from '../pages/adf/process-services/tasks.page'; -import { Util } from '../util/util'; import CONSTANTS = require('../util/constants'); +import { TaskRepresentation } from '@alfresco/js-api'; describe('Task List Pagination - Sorting', () => { - const loginPage = new LoginPage(); + const app = browser.params.resources.Files.SIMPLE_APP_WITH_USER_FORM; + + const loginPage = new LoginSSOPage(); const taskPage = new TasksPage(); const paginationPage = new PaginationPage(); - const app = browser.params.resources.Files.SIMPLE_APP_WITH_USER_FORM; + const apiService = new ApiService(); + const usersActions = new UsersActions(apiService); + const applicationsService = new ApplicationsUtil(apiService); + const nrOfTasks = 20; let processUserModel; const taskNameBase = 'Task'; - const taskNames = Util.generateSequenceFiles(10, nrOfTasks + 9, taskNameBase, ''); + const taskNames = StringUtil.generateFilesNames(10, nrOfTasks + 9, taskNameBase, ''); const itemsPerPage = { five: '5', @@ -46,28 +50,19 @@ describe('Task List Pagination - Sorting', () => { }; beforeAll(async () => { - const users = new UsersActions(); + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); - this.alfrescoJsApi = new AlfrescoApi({ - provider: 'BPM', - hostBpm: browser.params.testConfig.adf_aps.host - }); + processUserModel = await usersActions.createUser(); - await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); - - processUserModel = await users.createTenantAndUser(this.alfrescoJsApi); - - await this.alfrescoJsApi.login(processUserModel.email, processUserModel.password); - - const applicationsService = new ApplicationsUtil(this.alfrescoJsApi); + await apiService.getInstance().login(processUserModel.email, processUserModel.password); await applicationsService.importPublishDeployApp(app.file_path); for (let i = 0; i < nrOfTasks; i++) { - await this.alfrescoJsApi.activiti.taskApi.createNewTask({ name: taskNames[i] }); + await apiService.getInstance().activiti.taskApi.createNewTask(new TaskRepresentation({ name: taskNames[i] })); } - await loginPage.loginToProcessServicesUsingUserModel(processUserModel); + await loginPage.login(processUserModel.email, processUserModel.password); }); it('[C260308] Should be possible to sort tasks by name', async () => { diff --git a/e2e/process-services/standalone-task.e2e.ts b/e2e/process-services/standalone-task.e2e.ts index b14518470e..d3d6e0e4f6 100644 --- a/e2e/process-services/standalone-task.e2e.ts +++ b/e2e/process-services/standalone-task.e2e.ts @@ -17,49 +17,44 @@ import { browser } from 'protractor'; -import { LoginPage } from '@alfresco/adf-testing'; +import { ApiService, LoginSSOPage } from '@alfresco/adf-testing'; import { TasksPage } from '../pages/adf/process-services/tasks.page'; import { NavigationBarPage } from '../pages/adf/navigation-bar.page'; import CONSTANTS = require('../util/constants'); -import { Tenant } from '../models/APS/tenant'; import Task = require('../models/APS/Task'); -import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; import { UsersActions } from '../actions/users.actions'; import fs = require('fs'); import path = require('path'); describe('Start Task - Task App', () => { - const loginPage = new LoginPage(); - const navigationBarPage = new NavigationBarPage(); - let processUserModel; const app = browser.params.resources.Files.SIMPLE_APP_WITH_USER_FORM; + + const loginPage = new LoginSSOPage(); + const navigationBarPage = new NavigationBarPage(); const taskPage = new TasksPage(); + + let processUserModel; const tasks = ['Standalone task', 'Completed standalone task', 'Add a form', 'Remove form']; const noFormMessage = 'No forms attached'; + const apiService = new ApiService(); + const usersActions = new UsersActions(apiService); + beforeAll(async () => { - const users = new UsersActions(); - this.alfrescoJsApi = new AlfrescoApi({ - provider: 'BPM', - hostBpm: browser.params.testConfig.adf_aps.host - }); + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); - await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); - - const newTenant = await this.alfrescoJsApi.activiti.adminTenantsApi.createTenant(new Tenant()); - - processUserModel = await users.createApsUser(this.alfrescoJsApi, newTenant.id); + processUserModel = await usersActions.createUser(); const pathFile = path.join(browser.params.testConfig.main.rootPath + app.file_location); const file = fs.createReadStream(pathFile); - await this.alfrescoJsApi.login(processUserModel.email, processUserModel.password); + await apiService.getInstance().login(processUserModel.email, processUserModel.password); - await this.alfrescoJsApi.activiti.appsApi.importAppDefinition(file); + await apiService.getInstance().activiti.appsApi.importAppDefinition(file); - await loginPage.loginToProcessServicesUsingUserModel(processUserModel); + await loginPage.login(processUserModel.email, processUserModel.password); }); beforeEach(async () => { @@ -68,7 +63,6 @@ describe('Start Task - Task App', () => { }); it('[C260421] Should a standalone task be displayed when creating a new task without form', async () => { - const task = await taskPage.createNewTask(); await task.addName(tasks[0]); await task.clickStartButton(); @@ -128,8 +122,8 @@ describe('Start Task - Task App', () => { await taskPage.tasksListPage().checkContentIsDisplayed(tasks[3]); await expect(await taskPage.taskDetails().getFormName()).toEqual(app.formName); - 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 apiService.getInstance().activiti.taskApi.listTasks(new Task({ sort: 'created-desc' })); + await apiService.getInstance().activiti.taskApi.removeForm(listOfTasks.data[0].id); await browser.refresh(); await taskPage.tasksListPage().checkContentIsDisplayed(tasks[3]); diff --git a/e2e/process-services/start-process-component.e2e.ts b/e2e/process-services/start-process-component.e2e.ts index d46ca174f5..e3bc6fb047 100644 --- a/e2e/process-services/start-process-component.e2e.ts +++ b/e2e/process-services/start-process-component.e2e.ts @@ -18,18 +18,15 @@ import CONSTANTS = require('../util/constants'); import { FileBrowserUtil, - LoginPage, SelectAppsDialog, + LoginSSOPage, SelectAppsDialog, ProcessInstanceTasksPage, StringUtil, Widget, ApplicationsUtil, - StartProcessPage + StartProcessPage, ApiService, UserModel, LocalStorageUtil } from '@alfresco/adf-testing'; -import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; import { browser } from 'protractor'; import { FileModel } from '../models/ACS/file.model'; -import { Tenant } from '../models/APS/tenant'; -import { User } from '../models/APS/user'; import { NavigationBarPage } from '../pages/adf/navigation-bar.page'; import { AttachmentListPage } from '../pages/adf/process-services/attachment-list.page'; import { ProcessDetailsPage } from '../pages/adf/process-services/process-details.page'; @@ -38,11 +35,16 @@ import { ProcessServicesPage } from '../pages/adf/process-services/process-servi import { ProcessServiceTabBarPage } from '../pages/adf/process-services/process-service-tab-bar.page'; import { ContentServicesPage } from '../pages/adf/content-services.page'; import { UsersActions } from '../actions/users.actions'; -import { AcsUserModel } from '../models/ACS/acs-user.model'; import { UploadDialogPage } from '../pages/adf/dialog/upload-dialog.page'; describe('Start Process Component', () => { - const loginPage = new LoginPage(); + + const app = browser.params.resources.Files.APP_WITH_PROCESSES; + const simpleApp = browser.params.resources.Files.WIDGETS_SMOKE_TEST; + const dateFormApp = browser.params.resources.Files.APP_WITH_DATE_FIELD_FORM; + const startProcessAttachFileApp = browser.params.resources.Files.START_PROCESS_ATTACH_FILE; + + const loginPage = new LoginSSOPage(); const navigationBarPage = new NavigationBarPage(); const processServicesPage = new ProcessServicesPage(); const startProcessPage = new StartProcessPage(); @@ -54,14 +56,17 @@ describe('Start Process Component', () => { const contentServicesPage = new ContentServicesPage(); const selectAppsDialog = new SelectAppsDialog(); const widget = new Widget(); - const app = browser.params.resources.Files.APP_WITH_PROCESSES; - const simpleApp = browser.params.resources.Files.WIDGETS_SMOKE_TEST; - const dateFormApp = browser.params.resources.Files.APP_WITH_DATE_FIELD_FORM; - const startProcessAttachFileApp = browser.params.resources.Files.START_PROCESS_ATTACH_FILE; - let appId, procUserModel, secondProcUserModel, tenantId, simpleAppCreated, dateFormAppCreated; - const processModelWithSe = 'process_with_se', processModelWithoutSe = 'process_without_se'; + + const apiService = new ApiService(); + const apiServiceUserTwo = new ApiService(); + + let procUserModel: UserModel; + let secondProcUserModel: UserModel; + let appCreated, simpleAppCreated, dateFormAppCreated; + const processName255Characters = StringUtil.generateRandomString(255); const processNameBiggerThen255Characters = StringUtil.generateRandomString(256); + const lengthValidationError = 'Length exceeded, 255 characters max.'; const auditLogFile = 'Audit.pdf'; @@ -72,57 +77,31 @@ describe('Start Process Component', () => { }); describe('Provider: BPM', () => { - beforeAll(async () => { - try { - this.alfrescoJsApi = new AlfrescoApi({ - provider: 'BPM', - hostBpm: browser.params.testConfig.adf_aps.host - }); + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); - await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); + const usersActions = new UsersActions(apiService); + procUserModel = await usersActions.createUser(); + secondProcUserModel = await usersActions.createUser(new UserModel({ tenantId: procUserModel.tenantId })); - const newTenant = await this.alfrescoJsApi.activiti.adminTenantsApi.createTenant(new Tenant()); + await apiServiceUserTwo.getInstance().login(secondProcUserModel.email, secondProcUserModel.password); - tenantId = newTenant.id; - procUserModel = new User({tenantId: tenantId}); - secondProcUserModel = new User({tenantId: tenantId}); - - await this.alfrescoJsApi.activiti.adminUsersApi.createNewUser(procUserModel); - await this.alfrescoJsApi.activiti.adminUsersApi.createNewUser(secondProcUserModel); - - this.alfrescoJsApiUserTwo = new AlfrescoApi({ - provider: 'BPM', - hostBpm: browser.params.testConfig.adf_aps.host - }); - - await this.alfrescoJsApiUserTwo.login(secondProcUserModel.email, secondProcUserModel.password); - - const applicationsService = new ApplicationsUtil(this.alfrescoJsApiUserTwo); - - const appCreated = await applicationsService.importPublishDeployApp(app.file_path); - - simpleAppCreated = await applicationsService.importPublishDeployApp(simpleApp.file_path); - - dateFormAppCreated = await applicationsService.importPublishDeployApp(dateFormApp.file_path); - - appId = appCreated.id; - } catch (error) { - throw new Error(`API call failed in beforeAll: ${error}`); - } + const applicationsService = new ApplicationsUtil(apiServiceUserTwo); + appCreated = await applicationsService.importPublishDeployApp(app.file_path); + simpleAppCreated = await applicationsService.importPublishDeployApp(simpleApp.file_path); + dateFormAppCreated = await applicationsService.importPublishDeployApp(dateFormApp.file_path); }); 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); + await apiServiceUserTwo.getInstance().activiti.modelsApi.deleteModel(appCreated.id); + await apiServiceUserTwo.getInstance().activiti.modelsApi.deleteModel(simpleAppCreated.id); + await apiServiceUserTwo.getInstance().activiti.modelsApi.deleteModel(dateFormAppCreated.id); + await apiService.getInstance().activiti.adminTenantsApi.deleteTenant(procUserModel.tenantId); }); describe(' Once logged with user without apps', () => { - beforeEach(async () => { - await loginPage.loginToProcessServicesUsingUserModel(procUserModel); + await loginPage.login(procUserModel.email, procUserModel.password); await navigationBarPage.navigateToProcessServicesPage(); await processServicesPage.checkApsContainer(); }); @@ -137,9 +116,8 @@ describe('Start Process Component', () => { }); describe(' Once logged with user with app', () => { - beforeAll(async () => { - await loginPage.loginToProcessServicesUsingUserModel(secondProcUserModel); + await loginPage.login(secondProcUserModel.email, secondProcUserModel.password); }); beforeEach(async () => { @@ -175,15 +153,15 @@ describe('Start Process Component', () => { await processFiltersPage.clickCreateProcessButton(); await processFiltersPage.clickNewProcessDropdown(); - await startProcessPage.selectFromProcessDropdown(processModelWithoutSe); + await startProcessPage.selectFromProcessDropdown(browser.params.resources.Files.APP_WITH_PROCESSES.process_wse_name); await startProcessPage.deleteDefaultName(); await browser.sleep(1000); await startProcessPage.checkStartProcessButtonIsDisabled(); await startProcessPage.clickProcessDropdownArrow(); - await startProcessPage.checkProcessOptionIsDisplayed(processModelWithSe); - await startProcessPage.checkProcessOptionIsDisplayed(processModelWithoutSe); + await startProcessPage.checkProcessOptionIsDisplayed(browser.params.resources.Files.APP_WITH_PROCESSES.process_se_name); + await startProcessPage.checkProcessOptionIsDisplayed(browser.params.resources.Files.APP_WITH_PROCESSES.process_wse_name); }); it('[C260443] Should be possible to start a process without start event', async () => { @@ -196,7 +174,7 @@ describe('Start Process Component', () => { await expect(await startProcessPage.checkSelectProcessPlaceholderIsDisplayed()).toBe(''); - await startProcessPage.selectFromProcessDropdown(processModelWithoutSe); + await startProcessPage.selectFromProcessDropdown(browser.params.resources.Files.APP_WITH_PROCESSES.process_wse_name); await expect(await startProcessPage.getDefaultName()).toEqual('My Default Name'); @@ -209,11 +187,11 @@ describe('Start Process Component', () => { await processFiltersPage.clickCreateProcessButton(); await processFiltersPage.clickNewProcessDropdown(); await startProcessPage.enterProcessName('Test'); - await startProcessPage.selectFromProcessDropdown(processModelWithSe); + await startProcessPage.selectFromProcessDropdown(browser.params.resources.Files.APP_WITH_PROCESSES.process_se_name); await startProcessPage.clickFormStartProcessButton(); await processDetailsPage.checkDetailsAreDisplayed(); const processId = await processDetailsPage.getId(); - const response = await this.alfrescoJsApi.activiti.processApi.getProcessInstance(processId); + const response = await apiService.getInstance().activiti.processApi.getProcessInstance(processId); await expect(await processDetailsPage.getProcessStatus()).toEqual(CONSTANTS.PROCESS_STATUS.RUNNING); await expect(await processDetailsPage.getEndDate()).toEqual(CONSTANTS.PROCESS_END_DATE); @@ -241,9 +219,9 @@ describe('Start Process Component', () => { await processFiltersPage.clickCreateProcessButton(); await processFiltersPage.clickNewProcessDropdown(); await startProcessPage.typeProcessDefinition('process'); - await startProcessPage.checkProcessOptionIsDisplayed(processModelWithoutSe); - await startProcessPage.checkProcessOptionIsDisplayed(processModelWithSe); - await startProcessPage.selectProcessOption(processModelWithoutSe); + await startProcessPage.checkProcessOptionIsDisplayed(browser.params.resources.Files.APP_WITH_PROCESSES.process_wse_name); + await startProcessPage.checkProcessOptionIsDisplayed(browser.params.resources.Files.APP_WITH_PROCESSES.process_se_name); + await startProcessPage.selectProcessOption(browser.params.resources.Files.APP_WITH_PROCESSES.process_wse_name); await startProcessPage.checkStartProcessButtonIsEnabled(); }); @@ -252,10 +230,10 @@ describe('Start Process Component', () => { await processServiceTabBarPage.clickProcessButton(); await processFiltersPage.clickCreateProcessButton(); await processFiltersPage.clickNewProcessDropdown(); - await startProcessPage.typeProcessDefinition(processModelWithoutSe); - await startProcessPage.checkProcessOptionIsDisplayed(processModelWithoutSe); - await startProcessPage.checkProcessOptionIsNotDisplayed(processModelWithSe); - await startProcessPage.selectProcessOption(processModelWithoutSe); + await startProcessPage.typeProcessDefinition(browser.params.resources.Files.APP_WITH_PROCESSES.process_wse_name); + await startProcessPage.checkProcessOptionIsDisplayed(browser.params.resources.Files.APP_WITH_PROCESSES.process_wse_name); + await startProcessPage.checkProcessOptionIsNotDisplayed(browser.params.resources.Files.APP_WITH_PROCESSES.process_se_name); + await startProcessPage.selectProcessOption(browser.params.resources.Files.APP_WITH_PROCESSES.process_wse_name); await startProcessPage.checkStartProcessButtonIsEnabled(); }); @@ -274,10 +252,10 @@ describe('Start Process Component', () => { await processFiltersPage.clickCreateProcessButton(); await processFiltersPage.clickNewProcessDropdown(); await startProcessPage.enterProcessName('Type'); - await startProcessPage.typeProcessDefinition(processModelWithoutSe); - await startProcessPage.selectProcessOption(processModelWithoutSe); + await startProcessPage.typeProcessDefinition(browser.params.resources.Files.APP_WITH_PROCESSES.process_wse_name); + await startProcessPage.selectProcessOption(browser.params.resources.Files.APP_WITH_PROCESSES.process_wse_name); await startProcessPage.checkStartProcessButtonIsEnabled(); - await expect(await startProcessPage.getProcessDefinitionValue()).toBe(processModelWithoutSe); + await expect(await startProcessPage.getProcessDefinitionValue()).toBe(browser.params.resources.Files.APP_WITH_PROCESSES.process_wse_name); await startProcessPage.clickStartProcessButton(); await processFiltersPage.clickRunningFilterButton(); await processFiltersPage.selectFromProcessList('Type'); @@ -291,7 +269,7 @@ describe('Start Process Component', () => { await startProcessPage.typeProcessDefinition('process'); await startProcessPage.pressDownArrowAndEnter(); - await expect(await startProcessPage.getProcessDefinitionValue()).toBe(processModelWithoutSe); + await expect(await startProcessPage.getProcessDefinitionValue()).toBe(browser.params.resources.Files.APP_WITH_PROCESSES.process_wse_name); }); it('[C286514] Should the process definition input be cleared when clicking on options drop down ', async () => { @@ -300,8 +278,8 @@ describe('Start Process Component', () => { await processFiltersPage.clickCreateProcessButton(); await processFiltersPage.clickNewProcessDropdown(); await startProcessPage.typeProcessDefinition('process'); - await startProcessPage.selectProcessOption(processModelWithoutSe); - await expect(await startProcessPage.getProcessDefinitionValue()).toBe(processModelWithoutSe); + await startProcessPage.selectProcessOption(browser.params.resources.Files.APP_WITH_PROCESSES.process_wse_name); + await expect(await startProcessPage.getProcessDefinitionValue()).toBe(browser.params.resources.Files.APP_WITH_PROCESSES.process_wse_name); await startProcessPage.clickProcessDropdownArrow(); await expect(await startProcessPage.getProcessDefinitionValue()).toBe(''); @@ -313,7 +291,7 @@ describe('Start Process Component', () => { await processFiltersPage.clickCreateProcessButton(); await processFiltersPage.clickNewProcessDropdown(); await startProcessPage.enterProcessName('Comment Process'); - await startProcessPage.selectFromProcessDropdown(processModelWithSe); + await startProcessPage.selectFromProcessDropdown(browser.params.resources.Files.APP_WITH_PROCESSES.process_se_name); await startProcessPage.clickFormStartProcessButton(); await processFiltersPage.clickRunningFilterButton(); await processFiltersPage.selectFromProcessList('Comment Process'); @@ -327,7 +305,7 @@ describe('Start Process Component', () => { await processFiltersPage.clickCreateProcessButton(); await processFiltersPage.clickNewProcessDropdown(); await startProcessPage.enterProcessName('Audit Log'); - await startProcessPage.selectFromProcessDropdown(processModelWithSe); + await startProcessPage.selectFromProcessDropdown(browser.params.resources.Files.APP_WITH_PROCESSES.process_se_name); await startProcessPage.clickFormStartProcessButton(); await processFiltersPage.clickRunningFilterButton(); await processFiltersPage.selectFromProcessList('Audit Log'); @@ -345,7 +323,7 @@ describe('Start Process Component', () => { await processFiltersPage.clickNewProcessDropdown(); await startProcessPage.enterProcessName('Attach File'); - await startProcessPage.selectFromProcessDropdown(processModelWithSe); + await startProcessPage.selectFromProcessDropdown(browser.params.resources.Files.APP_WITH_PROCESSES.process_se_name); await startProcessPage.clickFormStartProcessButton(); await processFiltersPage.clickRunningFilterButton(); @@ -364,7 +342,7 @@ describe('Start Process Component', () => { await processFiltersPage.clickNewProcessDropdown(); await startProcessPage.enterProcessName('Show Diagram'); - await startProcessPage.selectFromProcessDropdown(processModelWithSe); + await startProcessPage.selectFromProcessDropdown(browser.params.resources.Files.APP_WITH_PROCESSES.process_se_name); await startProcessPage.clickFormStartProcessButton(); await processFiltersPage.clickRunningFilterButton(); @@ -379,7 +357,7 @@ describe('Start Process Component', () => { await processFiltersPage.clickCreateProcessButton(); await processFiltersPage.clickNewProcessDropdown(); await startProcessPage.enterProcessName('Active Task'); - await startProcessPage.selectFromProcessDropdown(processModelWithSe); + await startProcessPage.selectFromProcessDropdown(browser.params.resources.Files.APP_WITH_PROCESSES.process_se_name); await startProcessPage.clickFormStartProcessButton(); await processFiltersPage.clickRunningFilterButton(); await processFiltersPage.selectFromProcessList('Active Task'); @@ -388,7 +366,7 @@ describe('Start Process Component', () => { }); it('[C260457] Should display process in Completed when cancelled', async () => { - await loginPage.loginToProcessServicesUsingUserModel(secondProcUserModel); + await loginPage.login(secondProcUserModel.email, secondProcUserModel.password); await navigationBarPage.navigateToProcessServicesPage(); await processServicesPage.checkApsContainer(); await processServicesPage.goToApp(app.title); @@ -396,7 +374,7 @@ describe('Start Process Component', () => { await processFiltersPage.clickCreateProcessButton(); await processFiltersPage.clickNewProcessDropdown(); await startProcessPage.enterProcessName('Cancel Process'); - await startProcessPage.selectFromProcessDropdown(processModelWithSe); + await startProcessPage.selectFromProcessDropdown(browser.params.resources.Files.APP_WITH_PROCESSES.process_se_name); await startProcessPage.clickFormStartProcessButton(); await processFiltersPage.clickRunningFilterButton(); await processFiltersPage.selectFromProcessList('Cancel Process'); @@ -412,7 +390,7 @@ describe('Start Process Component', () => { await processFiltersPage.clickCreateProcessButton(); await processFiltersPage.clickNewProcessDropdown(); await startProcessPage.enterProcessName('Comment Process 2'); - await startProcessPage.selectFromProcessDropdown(processModelWithSe); + await startProcessPage.selectFromProcessDropdown(browser.params.resources.Files.APP_WITH_PROCESSES.process_se_name); await startProcessPage.clickFormStartProcessButton(); await processFiltersPage.clickRunningFilterButton(); await processFiltersPage.selectFromProcessList('Comment Process 2'); @@ -429,7 +407,7 @@ describe('Start Process Component', () => { await processFiltersPage.clickCreateProcessButton(); await processFiltersPage.clickNewProcessDropdown(); await startProcessPage.enterProcessName('File'); - await startProcessPage.selectFromProcessDropdown(processModelWithSe); + await startProcessPage.selectFromProcessDropdown(browser.params.resources.Files.APP_WITH_PROCESSES.process_se_name); await startProcessPage.clickFormStartProcessButton(); await processFiltersPage.clickRunningFilterButton(); await processFiltersPage.selectFromProcessList('File'); @@ -448,7 +426,7 @@ describe('Start Process Component', () => { await processFiltersPage.clickNewProcessDropdown(); await startProcessPage.enterProcessName(processName255Characters); - await startProcessPage.selectFromProcessDropdown(processModelWithoutSe); + await startProcessPage.selectFromProcessDropdown(browser.params.resources.Files.APP_WITH_PROCESSES.process_wse_name); await startProcessPage.checkStartProcessButtonIsEnabled(); await startProcessPage.enterProcessName(processNameBiggerThen255Characters); @@ -479,47 +457,34 @@ describe('Start Process Component', () => { }); }); - describe('Provider: ALL', () => { + describe('Provider: ALL', () => { const uploadDialog = new UploadDialogPage(); - let processUserModel, contentUserModel; + let processUserModel; const imageUploaded = new FileModel({ 'name': browser.params.resources.Files.PROFILE_IMAGES.ECM.file_name, 'location': browser.params.resources.Files.PROFILE_IMAGES.ECM.file_location }); beforeAll(async () => { - const users = new UsersActions(); - - this.alfrescoJsApi = new AlfrescoApi({ + const apiServiceAll = new ApiService({ provider: 'ALL', - hostEcm: browser.params.testConfig.adf_acs.host, - hostBpm: browser.params.testConfig.adf_aps.host + hostEcm: browser.params.testConfig.appConfig.ecmHost, + hostBpm: browser.params.testConfig.appConfig.bpmHost }); - await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); + const usersActions = new UsersActions(apiServiceAll); - processUserModel = await users.createTenantAndUser(this.alfrescoJsApi); + await apiServiceAll.login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); - contentUserModel = new AcsUserModel({ - 'id': processUserModel.email, - 'password': processUserModel.password, - 'firstName': processUserModel.firstName, - 'lastName': processUserModel.lastName, - 'email': processUserModel.email - }); + processUserModel = await usersActions.createUser(); - await this.alfrescoJsApi.core.peopleApi.addPerson(contentUserModel); + const alfrescoJsBPMAdminUser = new ApiService({ hostBpm: browser.params.testConfig.appConfig.bpmHost }); - this.alfrescoJsBPMAdminUser = new AlfrescoApi({ - provider: 'BPM', - hostBpm: browser.params.testConfig.adf_aps.host - }); - await this.alfrescoJsBPMAdminUser.login(processUserModel.email, processUserModel.password); + await alfrescoJsBPMAdminUser.login(processUserModel.email, processUserModel.password); - const applicationsService = new ApplicationsUtil(this.alfrescoJsBPMAdminUser); + const applicationsService = new ApplicationsUtil(alfrescoJsBPMAdminUser); - const appCreated = await applicationsService.importPublishDeployApp(startProcessAttachFileApp.file_path); - appId = appCreated.id; + await applicationsService.importPublishDeployApp(startProcessAttachFileApp.file_path); }); afterAll(async () => { @@ -527,7 +492,9 @@ describe('Start Process Component', () => { }); it('[C260490] Should be able to start a Process within ACS', async () => { - await loginPage.loginToAllUsingUserModel(contentUserModel); + await LocalStorageUtil.setStorageItem('providers', 'ALL'); + + await loginPage.login(processUserModel.email, processUserModel.password); await contentServicesPage.goToDocumentList(); await contentServicesPage.checkDocumentListElementsAreDisplayed(); diff --git a/e2e/process-services/start-task-custom-app.e2e.ts b/e2e/process-services/start-task-custom-app.e2e.ts index 79f84472b4..07c64f5999 100644 --- a/e2e/process-services/start-task-custom-app.e2e.ts +++ b/e2e/process-services/start-task-custom-app.e2e.ts @@ -15,12 +15,10 @@ * limitations under the License. */ -import { LoginPage, ApplicationsUtil } from '@alfresco/adf-testing'; -import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; +import { LoginSSOPage, ApplicationsUtil, ApiService, UserModel } from '@alfresco/adf-testing'; import { browser, by } from 'protractor'; import { UsersActions } from '../actions/users.actions'; import { FileModel } from '../models/ACS/file.model'; -import { Tenant } from '../models/APS/tenant'; import { NavigationBarPage } from '../pages/adf/navigation-bar.page'; import { AttachmentListPage } from '../pages/adf/process-services/attachment-list.page'; import { ProcessServiceTabBarPage } from '../pages/adf/process-services/process-service-tab-bar.page'; @@ -29,13 +27,18 @@ import CONSTANTS = require('../util/constants'); describe('Start Task - Custom App', () => { - const loginPage = new LoginPage(); + const app = browser.params.resources.Files.SIMPLE_APP_WITH_USER_FORM; + + const loginPage = new LoginSSOPage(); const navigationBarPage = new NavigationBarPage(); const attachmentListPage = new AttachmentListPage(); const processServiceTabBarPage = new ProcessServiceTabBarPage(); + const apiService = new ApiService(); + const usersActions = new UsersActions(apiService); + const applicationsService = new ApplicationsUtil(apiService); + let processUserModel, assigneeUserModel; - const app = browser.params.resources.Files.SIMPLE_APP_WITH_USER_FORM; const formTextField = app.form_fields.form_fieldId; const formFieldValue = 'First value '; const taskPage = new TasksPage(); @@ -49,28 +52,16 @@ describe('Start Task - Custom App', () => { }); beforeAll(async () => { - const users = new UsersActions(); + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); - this.alfrescoJsApi = new AlfrescoApi({ - provider: 'BPM', - hostBpm: browser.params.testConfig.adf_aps.host - }); + assigneeUserModel = await usersActions.createUser(); + processUserModel = await usersActions.createUser(new UserModel({ tenantId: assigneeUserModel.tenantId })); - await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); - - const newTenant = await this.alfrescoJsApi.activiti.adminTenantsApi.createTenant(new Tenant()); - - assigneeUserModel = await users.createApsUser(this.alfrescoJsApi, newTenant.id); - - processUserModel = await users.createApsUser(this.alfrescoJsApi, newTenant.id); - - await this.alfrescoJsApi.login(processUserModel.email, processUserModel.password); - - const applicationsService = new ApplicationsUtil(this.alfrescoJsApi); + await apiService.getInstance().login(processUserModel.email, processUserModel.password); appModel = await applicationsService.importPublishDeployApp(app.file_path); - await loginPage.loginToProcessServicesUsingUserModel(processUserModel); + await loginPage.login(processUserModel.email, processUserModel.password); }); it('[C263942] Should be possible to modify a task', async () => { diff --git a/e2e/process-services/start-task-task-app.e2e.ts b/e2e/process-services/start-task-task-app.e2e.ts index bb4a003087..4446f3220a 100644 --- a/e2e/process-services/start-task-task-app.e2e.ts +++ b/e2e/process-services/start-task-task-app.e2e.ts @@ -15,12 +15,10 @@ * limitations under the License. */ -import { LoginPage, StringUtil } from '@alfresco/adf-testing'; -import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; +import { ApiService, LoginSSOPage, StringUtil, UserModel } from '@alfresco/adf-testing'; import { browser, by } from 'protractor'; import { UsersActions } from '../actions/users.actions'; import { FileModel } from '../models/ACS/file.model'; -import { Tenant } from '../models/APS/tenant'; import { NavigationBarPage } from '../pages/adf/navigation-bar.page'; import { AttachmentListPage } from '../pages/adf/process-services/attachment-list.page'; import { ChecklistDialog } from '../pages/adf/process-services/dialog/create-checklist-dialog.page'; @@ -29,16 +27,21 @@ import { TasksPage } from '../pages/adf/process-services/tasks.page'; import CONSTANTS = require('../util/constants'); import fs = require('fs'); import path = require('path'); +import { TaskRepresentation } from '@alfresco/js-api'; describe('Start Task - Task App', () => { - const loginPage = new LoginPage(); + const app = browser.params.resources.Files.SIMPLE_APP_WITH_USER_FORM; + + const loginPage = new LoginSSOPage(); const attachmentListPage = new AttachmentListPage(); const processServiceTabBarPage = new ProcessServiceTabBarPage(); const navigationBarPage = new NavigationBarPage(); + const apiService = new ApiService(); + const usersActions = new UsersActions(apiService); + let processUserModel, assigneeUserModel; - const app = browser.params.resources.Files.SIMPLE_APP_WITH_USER_FORM; const formTextField = app.form_fields.form_fieldId; const formFieldValue = 'First value '; const taskPage = new TasksPage(); @@ -54,37 +57,28 @@ describe('Start Task - Task App', () => { }); beforeAll(async () => { - const users = new UsersActions(); + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); - this.alfrescoJsApi = new AlfrescoApi({ - provider: 'BPM', - hostBpm: browser.params.testConfig.adf_aps.host - }); + assigneeUserModel = await usersActions.createUser(); - await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); - - const newTenant = await this.alfrescoJsApi.activiti.adminTenantsApi.createTenant(new Tenant()); - - assigneeUserModel = await users.createApsUser(this.alfrescoJsApi, newTenant.id); - - processUserModel = await users.createApsUser(this.alfrescoJsApi, newTenant.id); + processUserModel = await usersActions.createUser(new UserModel({ tenantId: assigneeUserModel.tenantId })); const pathFile = path.join(browser.params.testConfig.main.rootPath + app.file_location); const file = fs.createReadStream(pathFile); - await this.alfrescoJsApi.login(processUserModel.email, processUserModel.password); + await apiService.getInstance().login(processUserModel.email, processUserModel.password); - await this.alfrescoJsApi.activiti.appsApi.importAppDefinition(file); + await apiService.getInstance().activiti.appsApi.importAppDefinition(file); - await this.alfrescoJsApi.activiti.taskApi.createNewTask({ name: showHeaderTask }); + await apiService.getInstance().activiti.taskApi.createNewTask(new TaskRepresentation({ name: showHeaderTask })); - await loginPage.loginToProcessServicesUsingUserModel(processUserModel); - }); + await loginPage.login(processUserModel.email, processUserModel.password); + }); beforeEach(async () => { await (await navigationBarPage.navigateToProcessServicesPage()).goToTaskApp(); await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); - }); + }); it('[C260383] Should be possible to modify a task', async () => { const task = await taskPage.createNewTask(); @@ -197,5 +191,5 @@ describe('Start Task - Task App', () => { await startDialog.blur(startDialog.name); await startDialog.checkValidationErrorIsDisplayed(lengthValidationError); await startDialog.checkStartButtonIsDisabled(); - }); + }); }); diff --git a/e2e/process-services/stencil.e2e.ts b/e2e/process-services/stencil.e2e.ts index ef36964760..001dad750a 100644 --- a/e2e/process-services/stencil.e2e.ts +++ b/e2e/process-services/stencil.e2e.ts @@ -15,12 +15,10 @@ * limitations under the License. */ -import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; import { UsersActions } from '../actions/users.actions'; -import { LoginPage, ApplicationsUtil, StartProcessPage } from '@alfresco/adf-testing'; +import { LoginSSOPage, ApplicationsUtil, StartProcessPage, ApiService, UserModel } from '@alfresco/adf-testing'; import { TasksPage } from '../pages/adf/process-services/tasks.page'; import { browser } from 'protractor'; -import { User } from '../models/APS/user'; import { NavigationBarPage } from '../pages/adf/navigation-bar.page'; import { ProcessServiceTabBarPage } from '../pages/adf/process-services/process-service-tab-bar.page'; import { ProcessListDemoPage } from '../pages/adf/demo-shell/process-services/process-list-demo.page'; @@ -31,7 +29,9 @@ import CONSTANTS = require('../util/constants'); describe('Stencil', () => { - const loginPage = new LoginPage(); + const app = browser.params.resources.Files.STENCIL_PROCESS; + + const loginPage = new LoginSSOPage(); const taskPage = new TasksPage(); const navigationBarPage = new NavigationBarPage(); const processServiceTabBarPage = new ProcessServiceTabBarPage(); @@ -40,28 +40,25 @@ describe('Stencil', () => { const processListPage = new ProcessListPage(); const processDetailsPage = new ProcessDetailsPage(); const processFiltersPage = new ProcessFiltersPage(); - const usersActions = new UsersActions(); - const alfrescoJsApi = new AlfrescoApi({ - provider: 'BPM', - hostBpm: browser.params.testConfig.adf_aps.host - }); - const app = browser.params.resources.Files.STENCIL_PROCESS; - let user: User; + const apiService = new ApiService(); + const usersActions = new UsersActions(apiService); + + let user: UserModel; beforeAll(async () => { - await alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); - user = await usersActions.createTenantAndUser(alfrescoJsApi); + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); + user = await usersActions.createUser(); - await alfrescoJsApi.login(user.email, user.password); - const applicationsService = new ApplicationsUtil(alfrescoJsApi); + await apiService.getInstance().login(user.email, user.password); + const applicationsService = new ApplicationsUtil(apiService); await applicationsService.importPublishDeployApp(app.file_path); - await loginPage.loginToProcessServicesUsingUserModel(user); + await loginPage.login(user.email, user.password); }); afterAll(async () => { - await alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); - await alfrescoJsApi.activiti.adminTenantsApi.deleteTenant(user.tenantId); + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); + await apiService.getInstance().activiti.adminTenantsApi.deleteTenant(user.tenantId); }); beforeEach(async () => { diff --git a/e2e/process-services/task-assignee.e2e.ts b/e2e/process-services/task-assignee.e2e.ts index 8e6ec7f393..59e1c70c1e 100644 --- a/e2e/process-services/task-assignee.e2e.ts +++ b/e2e/process-services/task-assignee.e2e.ts @@ -15,65 +15,73 @@ * limitations under the License. */ -import { LoginPage, ApplicationsUtil, ProcessUtil, StartProcessPage } from '@alfresco/adf-testing'; +import { + LoginSSOPage, + ApplicationsUtil, + ProcessUtil, + StartProcessPage, + ApiService, + UserModel +} from '@alfresco/adf-testing'; import { NavigationBarPage } from '../pages/adf/navigation-bar.page'; import { ProcessServicesPage } from '../pages/adf/process-services/process-services.page'; import { ProcessFiltersPage } from '../pages/adf/process-services/process-filters.page'; import { ProcessServiceTabBarPage } from '../pages/adf/process-services/process-service-tab-bar.page'; import { ProcessDetailsPage } from '../pages/adf/process-services/process-details.page'; import { ProcessListPage } from '../pages/adf/process-services/process-list.page'; -import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; import { UsersActions } from '../actions/users.actions'; import { browser } from 'protractor'; -import { User } from '../models/APS/user'; import { TasksPage } from '../pages/adf/process-services/tasks.page'; import CONSTANTS = require('../util/constants'); describe('Task Assignee', () => { - const loginPage = new LoginPage(); - const navigationBarPage = new NavigationBarPage(); - const processServicesPage = new ProcessServicesPage(); - const taskPage = new TasksPage(); - const users = new UsersActions(); const app = browser.params.resources.Files.TEST_ASSIGNEE; - this.alfrescoJsApi = new AlfrescoApi({ - provider: 'BPM', - hostBpm: browser.params.testConfig.adf_aps.host - }); + + const loginPage = new LoginSSOPage(); + const navigationBarPage = new NavigationBarPage(); + const processServicesPage = new ProcessServicesPage(); + const processListPage = new ProcessListPage(); + const processFiltersPage = new ProcessFiltersPage(); + const startProcessPage = new StartProcessPage(); + const processServiceTabBarPage = new ProcessServiceTabBarPage(); + const processDetailsPage = new ProcessDetailsPage(); + const taskPage = new TasksPage(); + + const apiService = new ApiService(); + const usersActions = new UsersActions(apiService); + const applicationsService = new ApplicationsUtil(apiService); describe('Candidate User Assignee', () => { - const processListPage = new ProcessListPage(); - const processFiltersPage = new ProcessFiltersPage(); - const startProcessPage = new StartProcessPage(); - const processServiceTabBarPage = new ProcessServiceTabBarPage(); - const processDetailsPage = new ProcessDetailsPage(); - let user: User; + let user: UserModel; beforeAll(async () => { - await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); - user = await users.createTenantAndUser(this.alfrescoJsApi); - try {// creates user and group if not available - await users.createApsUserWithName(this.alfrescoJsApi, user.tenantId, app.candidate.email, app.candidate.firstName, app.candidate.lastName); - } catch (e) {} - try {// creates group if not available - await this.alfrescoJsApi.activiti.adminGroupsApi.createNewGroup({ 'name': app.candidateGroup, 'tenantId': user.tenantId, 'type': 1 }); - } catch (e) {} + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); - await this.alfrescoJsApi.login(user.email, user.password); - const applicationsService = new ApplicationsUtil(this.alfrescoJsApi); - try { - await applicationsService.importPublishDeployApp(app.file_path, { renewIdmEntries: true }); + user = await usersActions.createUser(new UserModel({ + firstName: app.candidate.firstName, + lastName: app.candidate.lastName + })); + + try {// creates group if not available + await apiService.getInstance().activiti.adminGroupsApi.createNewGroup({ + 'name': app.candidateGroup, + 'tenantId': user.tenantId, + 'type': 1 + }); } catch (e) { - console.error(`failed to publish the application`); } - await loginPage.loginToProcessServicesUsingUserModel(user); + + await apiService.getInstance().login(user.email, user.password); + await applicationsService.importPublishDeployApp(app.file_path, { renewIdmEntries: true }); + + await loginPage.login(user.email, user.password); }); afterAll(async () => { - await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); - await this.alfrescoJsApi.activiti.adminTenantsApi.deleteTenant(user.tenantId); + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); + await apiService.getInstance().activiti.adminTenantsApi.deleteTenant(user.tenantId); }); beforeEach(async () => { @@ -110,49 +118,57 @@ describe('Task Assignee', () => { await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.COMPLETED_TASKS); await taskPage.tasksListPage().checkContentIsDisplayed(app.userTasks.simple.two); }); - }); describe('Candidate Group Assignee', () => { - let user: User; - let candidate1: User; - let candidate2: User; + let user: UserModel; + let candidate1: UserModel; + let candidate2: UserModel; beforeAll(async () => { - await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); - user = await users.createTenantAndUser(this.alfrescoJsApi); - candidate1 = await users.createApsUser(this.alfrescoJsApi, user.tenantId); - candidate2 = await users.createApsUser(this.alfrescoJsApi, user.tenantId); - const adminGroup = await this.alfrescoJsApi.activiti.adminGroupsApi.createNewGroup( + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); + user = await usersActions.createUser(); + candidate1 = await usersActions.createUser(new UserModel({ tenantId: user.tenantId })); + candidate2 = await usersActions.createUser(new UserModel({ tenantId: user.tenantId })); + + const adminGroup = await apiService.getInstance().activiti.adminGroupsApi.createNewGroup( { 'name': app.adminGroup, 'tenantId': user.tenantId } ); - await this.alfrescoJsApi.activiti.adminGroupsApi.addGroupMember(adminGroup.id, user.id); - await this.alfrescoJsApi.activiti.adminGroupsApi.addGroupCapabilities(adminGroup.id, { capabilities: app.adminCapabilities }); - const candidateGroup = await this.alfrescoJsApi.activiti.adminGroupsApi.createNewGroup( + await apiService.getInstance().activiti.adminGroupsApi.addGroupMember(adminGroup.id, user.id); + + await apiService.getInstance().activiti.adminGroupsApi.addGroupCapabilities(adminGroup.id, { capabilities: app.adminCapabilities }); + + const candidateGroup = await apiService.getInstance().activiti.adminGroupsApi.createNewGroup( { 'name': app.candidateGroup, 'tenantId': user.tenantId, 'type': 1 } ); - await this.alfrescoJsApi.activiti.adminGroupsApi.addGroupMember(candidateGroup.id, candidate1.id); - await this.alfrescoJsApi.activiti.adminGroupsApi.addGroupMember(candidateGroup.id, candidate2.id); - await this.alfrescoJsApi.activiti.adminGroupsApi.addGroupMember(candidateGroup.id, user.id); + + await apiService.getInstance().activiti.adminGroupsApi.addGroupMember(candidateGroup.id, candidate1.id); + await apiService.getInstance().activiti.adminGroupsApi.addGroupMember(candidateGroup.id, candidate2.id); + await apiService.getInstance().activiti.adminGroupsApi.addGroupMember(candidateGroup.id, user.id); try {// for creates user if not available - await users.createApsUserWithName(this.alfrescoJsApi, user.tenantId, app.candidate.email, app.candidate.firstName, app.candidate.lastName); - } catch (e) {} + await usersActions.createUser(new UserModel({ + tenantId: user.tenantId, + firstName: app.candidate.firstName, + lastName: app.candidate.lastName + })); + } catch (e) { + } - await this.alfrescoJsApi.login(user.email, user.password); - const applicationsService = new ApplicationsUtil(this.alfrescoJsApi); + await apiService.getInstance().login(user.email, user.password); const appModel = await applicationsService.importPublishDeployApp(app.file_path, { renewIdmEntries: true }); - await new ProcessUtil(this.alfrescoJsApi).startProcessByDefinitionName(appModel.name, app.processNames[1]); + + await new ProcessUtil(apiService).startProcessByDefinitionName(appModel.name, app.processNames[1]); }); afterAll(async () => { - await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); - await this.alfrescoJsApi.activiti.adminTenantsApi.deleteTenant(user.tenantId); + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); + await apiService.getInstance().activiti.adminTenantsApi.deleteTenant(user.tenantId); }); it('[C216430] Start Task - Claim and Requeue a task', async () => { - await loginPage.loginToProcessServicesUsingUserModel(candidate1); + await loginPage.login(candidate1.email, candidate1.password); await navigationBarPage.navigateToProcessServicesPage(); await processServicesPage.checkApsContainer(); await processServicesPage.goToApp('Task App'); @@ -198,7 +214,7 @@ describe('Task Assignee', () => { await taskPage.tasksListPage().checkTaskListIsLoaded(); await taskPage.tasksListPage().checkContentIsNotDisplayed(app.userTasks.candidateTask); - await loginPage.loginToProcessServicesUsingUserModel(candidate2); + await loginPage.login(candidate2.email, candidate2.password); await navigationBarPage.navigateToProcessServicesPage(); await processServicesPage.checkApsContainer(); await processServicesPage.goToApp('Task App'); @@ -209,7 +225,7 @@ describe('Task Assignee', () => { await taskPage.tasksListPage().checkTaskListIsLoaded(); await taskPage.tasksListPage().checkContentIsNotDisplayed(app.userTasks.candidateTask); - await loginPage.loginToProcessServicesUsingUserModel(candidate1); + await loginPage.login(candidate1.email, candidate1.password); await navigationBarPage.navigateToProcessServicesPage(); await processServicesPage.checkApsContainer(); await processServicesPage.goToApp('Task App'); @@ -237,7 +253,7 @@ describe('Task Assignee', () => { await taskPage.tasksListPage().checkContentIsDisplayed(app.userTasks.candidateTask); await taskPage.taskDetails().checkClaimEnabled(); - await loginPage.loginToProcessServicesUsingUserModel(candidate2); + await loginPage.login(candidate2.email, candidate2.password); await navigationBarPage.navigateToProcessServicesPage(); await processServicesPage.checkApsContainer(); await processServicesPage.goToApp('Task App'); diff --git a/e2e/process-services/task-attachment-list-action-menu.e2e.ts b/e2e/process-services/task-attachment-list-action-menu.e2e.ts index dbf504d0e8..674c5d793c 100644 --- a/e2e/process-services/task-attachment-list-action-menu.e2e.ts +++ b/e2e/process-services/task-attachment-list-action-menu.e2e.ts @@ -16,25 +16,30 @@ */ import { browser } from 'protractor'; -import { LoginPage, FileBrowserUtil, ViewerPage, ApplicationsUtil } from '@alfresco/adf-testing'; +import { LoginSSOPage, FileBrowserUtil, ViewerPage, ApplicationsUtil, ApiService } from '@alfresco/adf-testing'; import { NavigationBarPage } from '../pages/adf/navigation-bar.page'; import { TasksPage } from '../pages/adf/process-services/tasks.page'; import { AttachmentListPage } from '../pages/adf/process-services/attachment-list.page'; import CONSTANTS = require('../util/constants'); import path = require('path'); import fs = require('fs'); -import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; import { UsersActions } from '../actions/users.actions'; import { FileModel } from '../models/ACS/file.model'; +import { TaskRepresentation } from '@alfresco/js-api'; describe('Attachment list action menu for tasks', () => { - const loginPage = new LoginPage(); + const app = browser.params.resources.Files.SIMPLE_APP_WITH_USER_FORM; + + const loginPage = new LoginSSOPage(); const navigationBarPage = new NavigationBarPage(); const taskPage = new TasksPage(); const attachmentListPage = new AttachmentListPage(); const viewerPage = new ViewerPage(); - const app = browser.params.resources.Files.SIMPLE_APP_WITH_USER_FORM; + + const apiService = new ApiService(); + const usersActions = new UsersActions(apiService); + const pngFile = new FileModel({ location: browser.params.resources.Files.ADF_DOCUMENTS.PNG.file_location, name: browser.params.resources.Files.ADF_DOCUMENTS.PNG.file_name @@ -49,36 +54,30 @@ describe('Attachment list action menu for tasks', () => { }; beforeAll(async () => { - const users = new UsersActions(); - this.alfrescoJsApi = new AlfrescoApi({ - provider: 'BPM', - hostBpm: browser.params.testConfig.adf_aps.host - }); - - await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); - const user = await users.createTenantAndUser(this.alfrescoJsApi); + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); + const user = await usersActions.createUser(); tenantId = user.tenantId; - await this.alfrescoJsApi.login(user.email, user.password); - const applicationsService = new ApplicationsUtil(this.alfrescoJsApi); + await apiService.getInstance().login(user.email, user.password); + const applicationsService = new ApplicationsUtil(apiService); const { id } = await applicationsService.importPublishDeployApp(app.file_path); appId = id; - await loginPage.loginToProcessServicesUsingUserModel(user); + await loginPage.login(user.email, user.password); }); 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); + await apiService.getInstance().activiti.modelsApi.deleteModel(appId); + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); + await apiService.getInstance().activiti.adminTenantsApi.deleteTenant(tenantId); }); 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(); await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); - await taskPage.createTask({name: taskName.active}); + await taskPage.createTask({ name: taskName.active }); await attachmentListPage.clickAttachFileButton(pngFile.location); await attachmentListPage.viewFile(pngFile.name); @@ -161,12 +160,12 @@ describe('Attachment list action menu for tasks', () => { }); 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 newTask = await apiService.getInstance().activiti.taskApi.createNewTask(new TaskRepresentation({ name: 'SHARE KNOWLEDGE' })); const newTaskId = newTask.id; const filePath = path.join(browser.params.testConfig.main.rootPath + pngFile.location); const file = fs.createReadStream(filePath); - relatedContent = await this.alfrescoJsApi.activiti.contentApi.createRelatedContentOnTask(newTaskId, file, { 'isRelatedContent': true }); + relatedContent = await apiService.getInstance().activiti.contentApi.createRelatedContentOnTask(newTaskId, file, { 'isRelatedContent': true }); relatedContentId = relatedContent.id; await (await (await navigationBarPage.navigateToProcessServicesPage()).goToTaskApp()).clickTasksButton(); @@ -176,7 +175,7 @@ describe('Attachment list action menu for tasks', () => { await attachmentListPage.checkFileIsAttached(pngFile.name); - await this.alfrescoJsApi.activiti.contentApi.deleteContent(relatedContentId); + await apiService.getInstance().activiti.contentApi.deleteContent(relatedContentId); await (await (await navigationBarPage.navigateToProcessServicesPage()).goToTaskApp()).clickTasksButton(); diff --git a/e2e/process-services/task-audit.e2e.ts b/e2e/process-services/task-audit.e2e.ts index 312544a63d..5ea6d5a008 100644 --- a/e2e/process-services/task-audit.e2e.ts +++ b/e2e/process-services/task-audit.e2e.ts @@ -15,50 +15,47 @@ * limitations under the License. */ -import { LoginPage, BrowserActions, FileBrowserUtil, ApplicationsUtil } from '@alfresco/adf-testing'; +import { LoginSSOPage, BrowserActions, FileBrowserUtil, ApplicationsUtil, ApiService } from '@alfresco/adf-testing'; import { TasksPage } from '../pages/adf/process-services/tasks.page'; import { ProcessServicesPage } from '../pages/adf/process-services/process-services.page'; import CONSTANTS = require('../util/constants'); -import { Tenant } from '../models/APS/tenant'; import { browser } from 'protractor'; -import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; import { UsersActions } from '../actions/users.actions'; +import { TaskRepresentation } from '@alfresco/js-api'; describe('Task Audit', () => { - const loginPage = new LoginPage(); - let processUserModel; const app = browser.params.resources.Files.SIMPLE_APP_WITH_USER_FORM; + + const loginPage = new LoginSSOPage(); const taskPage = new TasksPage(); const processServices = new ProcessServicesPage(); + + const apiService = new ApiService(); + const usersActions = new UsersActions(apiService); + + let processUserModel; + const taskTaskApp = 'Audit task task app'; const taskCustomApp = 'Audit task custom app'; const taskCompleteCustomApp = 'Audit completed task custom app'; const auditLogFile = 'Audit.pdf'; beforeAll(async () => { - const users = new UsersActions(); + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); + processUserModel = await usersActions.createUser(); - this.alfrescoJsApi = new AlfrescoApi({ - provider: 'BPM', - hostBpm: browser.params.testConfig.adf_aps.host - }); - - await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); - const { id } = await this.alfrescoJsApi.activiti.adminTenantsApi.createTenant(new Tenant()); - processUserModel = await users.createApsUser(this.alfrescoJsApi, id); - - await this.alfrescoJsApi.login(processUserModel.email, processUserModel.password); - this.alfrescoJsApi.activiti.taskApi.createNewTask({ name: taskTaskApp }); - const applicationsService = new ApplicationsUtil(this.alfrescoJsApi); + await apiService.getInstance().login(processUserModel.email, processUserModel.password); + await apiService.getInstance().activiti.taskApi.createNewTask(new TaskRepresentation({ name: taskTaskApp })); + const applicationsService = new ApplicationsUtil(apiService); await applicationsService.importPublishDeployApp(app.file_path); - await loginPage.loginToProcessServicesUsingUserModel(processUserModel); + await loginPage.login(processUserModel.email, processUserModel.password); }); afterAll( async () => { - await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); - await this.alfrescoJsApi.activiti.adminTenantsApi.deleteTenant(processUserModel.tenantId); + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); + await apiService.getInstance().activiti.adminTenantsApi.deleteTenant(processUserModel.tenantId); }); beforeEach(async () => { diff --git a/e2e/process-services/task-details-form.e2e.ts b/e2e/process-services/task-details-form.e2e.ts index 9760ffe451..eccfd67664 100644 --- a/e2e/process-services/task-details-form.e2e.ts +++ b/e2e/process-services/task-details-form.e2e.ts @@ -15,12 +15,10 @@ * limitations under the License. */ -import { LoginPage, StringUtil, Widget, ApplicationsUtil, ProcessUtil } from '@alfresco/adf-testing'; -import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; +import { LoginSSOPage, StringUtil, Widget, ApplicationsUtil, ProcessUtil, ApiService } from '@alfresco/adf-testing'; import { browser } from 'protractor'; import { FormModelActions } from '../actions/APS/form-model.actions'; import { UsersActions } from '../actions/users.actions'; -import { StandaloneTask } from '../models/APS/standalone-task'; import { NavigationBarPage } from '../pages/adf/navigation-bar.page'; import { FiltersPage } from '../pages/adf/process-services/filters.page'; import { TaskDetailsPage } from '../pages/adf/process-services/task-details.page'; @@ -28,27 +26,31 @@ import { TasksListPage } from '../pages/adf/process-services/tasks-list.page'; import CONSTANTS = require('../util/constants'); import { TasksPage } from '../pages/adf/process-services/tasks.page'; import { AttachFormPage } from '../pages/adf/process-services/attach-form.page'; +import { TaskRepresentation } from '@alfresco/js-api'; describe('Task Details - Form', () => { - const loginPage = new LoginPage(); + const loginPage = new LoginSSOPage(); const tasksListPage = new TasksListPage(); const taskDetailsPage = new TaskDetailsPage(); const attachFormPage = new AttachFormPage(); const taskPage = new TasksPage(); const filtersPage = new FiltersPage(); const widget = new Widget(); + + const apiService = new ApiService(); + const formActions = new FormModelActions(apiService); + const usersActions = new UsersActions(apiService); + const applicationsService = new ApplicationsUtil(apiService); + let task, otherTask, user, newForm, attachedForm, otherAttachedForm; - let newTask; beforeAll(async () => { - const users = new UsersActions(); const attachedFormModel = { 'name': StringUtil.generateRandomString(), 'description': '', 'modelType': 2, 'stencilSet': 0 }; - const otherTaskModel = new StandaloneTask(); const otherAttachedFormModel = { 'name': StringUtil.generateRandomString(), 'description': '', @@ -62,37 +64,31 @@ describe('Task Details - Form', () => { 'stencilSet': 0 }; - this.alfrescoJsApi = new AlfrescoApi({ - provider: 'BPM', - hostBpm: browser.params.testConfig.adf_aps.host - }); + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); + user = await usersActions.createUser(); + await apiService.getInstance().login(user.email, user.password); - await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); - user = await users.createTenantAndUser(this.alfrescoJsApi); - await this.alfrescoJsApi.login(user.email, user.password); + attachedForm = await apiService.getInstance().activiti.modelsApi.createModel(attachedFormModel); + newForm = await apiService.getInstance().activiti.modelsApi.createModel(newFormModel); - attachedForm = await this.alfrescoJsApi.activiti.modelsApi.createModel(attachedFormModel); - newForm = await this.alfrescoJsApi.activiti.modelsApi.createModel(newFormModel); + const otherEmptyTask = await apiService.getInstance().activiti.taskApi.createNewTask(new TaskRepresentation({ name: StringUtil.generateRandomString() })); + otherAttachedForm = await apiService.getInstance().activiti.modelsApi.createModel(otherAttachedFormModel); - const otherEmptyTask = await this.alfrescoJsApi.activiti.taskApi.createNewTask(otherTaskModel); - otherAttachedForm = await this.alfrescoJsApi.activiti.modelsApi.createModel(otherAttachedFormModel); + await apiService.getInstance().activiti.taskApi.attachForm(otherEmptyTask.id, { 'formId': otherAttachedForm.id }); + otherTask = await apiService.getInstance().activiti.taskApi.getTask(otherEmptyTask.id); - await this.alfrescoJsApi.activiti.taskApi.attachForm(otherEmptyTask.id, { 'formId': otherAttachedForm.id }); - otherTask = await this.alfrescoJsApi.activiti.taskApi.getTask(otherEmptyTask.id); + await loginPage.login(user.email, user.password); + }); - await loginPage.loginToProcessServicesUsingUserModel(user); - }); - - afterAll( async () => { - await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); - await this.alfrescoJsApi.activiti.adminTenantsApi.deleteTenant(user.tenantId); + afterAll(async () => { + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); + await apiService.getInstance().activiti.adminTenantsApi.deleteTenant(user.tenantId); }); beforeEach(async () => { - const emptyTask = await this.alfrescoJsApi.activiti.taskApi.createNewTask(new StandaloneTask()); - await this.alfrescoJsApi.activiti.taskApi.attachForm(emptyTask.id, { 'formId': attachedForm.id }); - task = await this.alfrescoJsApi.activiti.taskApi.getTask(emptyTask.id); - + const emptyTask = await apiService.getInstance().activiti.taskApi.createNewTask(new TaskRepresentation({ name: StringUtil.generateRandomString() })); + await apiService.getInstance().activiti.taskApi.attachForm(emptyTask.id, { 'formId': attachedForm.id }); + task = await apiService.getInstance().activiti.taskApi.getTask(emptyTask.id); await (await new NavigationBarPage().navigateToProcessServicesPage()).goToTaskApp(); await tasksListPage.checkTaskListIsLoaded(); await filtersPage.goToFilter(CONSTANTS.TASK_FILTERS.INV_TASKS); @@ -151,7 +147,6 @@ describe('Task Details - Form', () => { }); describe('Task Details - Complete form with visibility conditions on tabs', () => { - const widgets = { textOneId: 'textone', textTwoId: 'texttwo', @@ -172,19 +167,17 @@ describe('Task Details - Form', () => { tabFieldVar: 'tabBasicFieldVar' }; - const formActions = new FormModelActions(); - let app; + let app, newTask; beforeAll(async () => { app = browser.params.resources.Files.SIMPLE_APP_WITH_USER_FORM; - const applicationsService = new ApplicationsUtil(this.alfrescoJsApi); await applicationsService.importPublishDeployApp(app.file_path); }); beforeEach(async () => { - newTask = await this.alfrescoJsApi.activiti.taskApi.createNewTask({ name: StringUtil.generateRandomString() }); - const form = await formActions.getFormByName(this.alfrescoJsApi, app.visibilityProcess.formName); - await this.alfrescoJsApi.activiti.taskApi.attachForm(newTask.id, { 'formId': form.id }); + newTask = await apiService.getInstance().activiti.taskApi.createNewTask(new TaskRepresentation({ name: StringUtil.generateRandomString() })); + const form = await formActions.getFormByName(app.visibilityProcess.formName); + await apiService.getInstance().activiti.taskApi.attachForm(newTask.id, { 'formId': form.id }); await (await new NavigationBarPage().navigateToProcessServicesPage()).goToTaskApp(); await tasksListPage.checkTaskListIsLoaded(); @@ -194,6 +187,7 @@ describe('Task Details - Form', () => { 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); @@ -346,7 +340,7 @@ describe('Task Details - Form', () => { }); it('[C315197] Should be able to complete a process task with visible tab with empty value for field', async () => { - await new ProcessUtil(this.alfrescoJsApi).startProcessByDefinitionName(app.name, app.visibilityProcess.name); + await new ProcessUtil(apiService).startProcessByDefinitionName(app.name, app.visibilityProcess.name); await filtersPage.goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); await tasksListPage.checkTaskListIsLoaded(); @@ -380,7 +374,7 @@ describe('Task Details - Form', () => { }); it('[C212922] Should a User task form be refreshed, saved or completed.', async () => { - await new ProcessUtil(this.alfrescoJsApi).startProcessByDefinitionName(app.name, app.processName); + await new ProcessUtil(apiService).startProcessByDefinitionName(app.name, app.processName); await filtersPage.goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); await tasksListPage.checkTaskListIsLoaded(); diff --git a/e2e/process-services/task-details-no-form.e2e.ts b/e2e/process-services/task-details-no-form.e2e.ts index 28867eec77..8e156cd258 100644 --- a/e2e/process-services/task-details-no-form.e2e.ts +++ b/e2e/process-services/task-details-no-form.e2e.ts @@ -15,46 +15,42 @@ * limitations under the License. */ -import { LoginPage, ApplicationsUtil, ProcessUtil } from '@alfresco/adf-testing'; +import { LoginSSOPage, ApplicationsUtil, ProcessUtil, ApiService } from '@alfresco/adf-testing'; import { NavigationBarPage } from '../pages/adf/navigation-bar.page'; import { TasksPage } from '../pages/adf/process-services/tasks.page'; import CONSTANTS = require('../util/constants'); -import { Tenant } from '../models/APS/tenant'; import { browser } from 'protractor'; -import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; import { UsersActions } from '../actions/users.actions'; describe('Task Details - No form', () => { - const loginPage = new LoginPage(); - const navigationBarPage = new NavigationBarPage(); - let processUserModel; const app = browser.params.resources.Files.NO_FORM_APP; + + const loginPage = new LoginSSOPage(); + const navigationBarPage = new NavigationBarPage(); + const apiService = new ApiService(); + + let processUserModel; const taskPage = new TasksPage(); const noFormMessage = 'No forms attached'; let importedApp; beforeAll(async () => { - const users = new UsersActions(); - this.alfrescoJsApi = new AlfrescoApi({ - provider: 'BPM', - hostBpm: browser.params.testConfig.adf_aps.host - }); + const usersActions = new UsersActions(apiService); - await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); - const { id } = await this.alfrescoJsApi.activiti.adminTenantsApi.createTenant(new Tenant()); - processUserModel = await users.createApsUser(this.alfrescoJsApi, id); + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); + processUserModel = await usersActions.createUser(); - await this.alfrescoJsApi.login(processUserModel.email, processUserModel.password); - const applicationsService = new ApplicationsUtil(this.alfrescoJsApi); + await apiService.getInstance().login(processUserModel.email, processUserModel.password); + const applicationsService = new ApplicationsUtil(apiService); importedApp = await applicationsService.importPublishDeployApp(app.file_path); - await new ProcessUtil(this.alfrescoJsApi).startProcessOfApp(importedApp.name); - await loginPage.loginToProcessServicesUsingUserModel(processUserModel); + await new ProcessUtil(apiService).startProcessOfApp(importedApp.name); + await loginPage.login(processUserModel.email, processUserModel.password); }); afterAll( async () => { - await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); - await this.alfrescoJsApi.activiti.adminTenantsApi.deleteTenant(processUserModel.tenantId); + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); + await apiService.getInstance().activiti.adminTenantsApi.deleteTenant(processUserModel.tenantId); }); it('[C289311] Should attach form and complete buttons to be displayed when no form is attached', async () => { diff --git a/e2e/process-services/task-details.e2e.ts b/e2e/process-services/task-details.e2e.ts index 223eda713e..9bd1ec762c 100644 --- a/e2e/process-services/task-details.e2e.ts +++ b/e2e/process-services/task-details.e2e.ts @@ -15,24 +15,36 @@ * limitations under the License. */ -import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; import { UsersActions } from '../actions/users.actions'; -import { Tenant } from '../models/APS/tenant'; import Task = require('../models/APS/Task'); import TaskModel = require('../models/APS/TaskModel'); import FormModel = require('../models/APS/FormModel'); import { ProcessServicesPage } from '../pages/adf/process-services/process-services.page'; import CONSTANTS = require('../util/constants'); import moment = require('moment'); -import { LoginPage, BrowserActions, StringUtil, ApplicationsUtil, ProcessUtil } from '@alfresco/adf-testing'; +import { + LoginSSOPage, + BrowserActions, + StringUtil, + ApplicationsUtil, + ProcessUtil, + ApiService +} from '@alfresco/adf-testing'; import { TasksPage } from '../pages/adf/process-services/tasks.page'; import { browser } from 'protractor'; +import { TaskRepresentation } from '@alfresco/js-api'; describe('Task Details component', () => { - const processServices = new ProcessServicesPage(); - let processUserModel, appModel; const app = browser.params.resources.Files.SIMPLE_APP_WITH_USER_FORM; + + const processServices = new ProcessServicesPage(); + const loginPage = new LoginSSOPage(); + const taskPage = new TasksPage(); + + const apiService = new ApiService(); + + let processUserModel, appModel; const tasks = ['Modifying task', 'Information box', 'No form', 'Not Created', 'Refreshing form', 'Assignee task', 'Attach File']; const TASK_DATE_FORMAT = 'll'; let formModel; @@ -44,30 +56,21 @@ describe('Task Details component', () => { 'stencilSet': 0 }; - const loginPage = new LoginPage(); - const taskPage = new TasksPage(); - beforeAll(async () => { - const users = new UsersActions(); + const usersActions = new UsersActions(apiService); - this.alfrescoJsApi = new AlfrescoApi({ - provider: 'BPM', - hostBpm: browser.params.testConfig.adf_aps.host - }); + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); + processUserModel = await usersActions.createUser(); - await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); - const { id } = await this.alfrescoJsApi.activiti.adminTenantsApi.createTenant(new Tenant()); - processUserModel = await users.createApsUser(this.alfrescoJsApi, id); - - await this.alfrescoJsApi.login(processUserModel.email, processUserModel.password); - const applicationsService = new ApplicationsUtil(this.alfrescoJsApi); + await apiService.getInstance().login(processUserModel.email, processUserModel.password); + const applicationsService = new ApplicationsUtil(apiService); appModel = await applicationsService.importPublishDeployApp(app.file_path); - await loginPage.loginToProcessServicesUsingUserModel(processUserModel); + await loginPage.login(processUserModel.email, processUserModel.password); }); - afterAll( async () => { - await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); - await this.alfrescoJsApi.activiti.adminTenantsApi.deleteTenant(processUserModel.tenantId); + afterAll(async () => { + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); + await apiService.getInstance().activiti.adminTenantsApi.deleteTenant(processUserModel.tenantId); }); beforeEach(async () => { @@ -79,10 +82,10 @@ describe('Task Details component', () => { await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); - await taskPage.createTask({name: tasks[1], description: 'Description', formName: app.formName}); + await taskPage.createTask({ name: tasks[1], description: 'Description', formName: app.formName }); await expect(await taskPage.taskDetails().getTitle()).toEqual('Activities'); - const allTasks = await this.alfrescoJsApi.activiti.taskApi.listTasks(new Task({ sort: 'created-desc' })); + const allTasks = await apiService.getInstance().activiti.taskApi.listTasks(new Task({ sort: 'created-desc' })); const taskModel = new TaskModel(allTasks.data[0]); await taskPage.tasksListPage().checkContentIsDisplayed(taskModel.getName()); @@ -98,7 +101,7 @@ describe('Task Details component', () => { 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); + const taskForm = await apiService.getInstance().activiti.taskFormsApi.getTaskForm(allTasks.data[0].id); formModel = new FormModel(taskForm); await expect(await taskPage.taskDetails().getFormName()).toEqual(formModel.getName()); @@ -108,10 +111,10 @@ describe('Task Details component', () => { await (await processServices.goToTaskApp()).clickTasksButton(); await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); - await taskPage.createTask({name: tasks[1], description: 'Description', formName: app.formName}); + await taskPage.createTask({ name: tasks[1], description: 'Description', formName: app.formName }); await expect(await taskPage.taskDetails().getTitle()).toEqual('Activities'); - const allTasks = await this.alfrescoJsApi.activiti.taskApi.listTasks(new Task({ sort: 'created-desc' })); + const allTasks = await apiService.getInstance().activiti.taskApi.listTasks(new Task({ sort: 'created-desc' })); const taskModel = new TaskModel(allTasks.data[0]); await taskPage.tasksListPage().checkContentIsDisplayed(taskModel.getName()); @@ -129,7 +132,7 @@ describe('Task Details component', () => { 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); + const taskForm = await apiService.getInstance().activiti.taskFormsApi.getTaskForm(allTasks.data[0].id); formModel = new FormModel(taskForm); @@ -137,7 +140,7 @@ describe('Task Details component', () => { }); it('[C286706] Should display task details for task - Task App', async () => { - await new ProcessUtil(this.alfrescoJsApi).startProcessOfApp(appModel.name); + await new ProcessUtil(apiService).startProcessOfApp(appModel.name); await (await processServices.goToTaskApp()).clickTasksButton(); @@ -145,7 +148,7 @@ describe('Task Details component', () => { await expect(await taskPage.taskDetails().getTitle()).toEqual('Activities'); - const allTasks = await this.alfrescoJsApi.activiti.taskApi.listTasks(new Task({ sort: 'created-desc' })); + const allTasks = await apiService.getInstance().activiti.taskApi.listTasks(new Task({ sort: 'created-desc' })); const taskModel = new TaskModel(allTasks.data[0]); @@ -162,7 +165,7 @@ describe('Task Details component', () => { 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); + const taskForm = await apiService.getInstance().activiti.taskFormsApi.getTaskForm(allTasks.data[0].id); formModel = new FormModel(taskForm); @@ -171,14 +174,14 @@ describe('Task Details component', () => { }); it('[C286705] Should display task details for task - Custom App', async () => { - await new ProcessUtil(this.alfrescoJsApi).startProcessOfApp(appModel.name); + await new ProcessUtil(apiService).startProcessOfApp(appModel.name); await (await processServices.goToTaskApp()).clickTasksButton(); await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); await expect(await taskPage.taskDetails().getTitle()).toEqual('Activities'); - const allTasks = await this.alfrescoJsApi.activiti.taskApi.listTasks(new Task({ sort: 'created-desc' })); + const allTasks = await apiService.getInstance().activiti.taskApi.listTasks(new Task({ sort: 'created-desc' })); const taskModel = new TaskModel(allTasks.data[0]); await taskPage.tasksListPage().checkContentIsDisplayed(taskModel.getName()); @@ -194,7 +197,7 @@ describe('Task Details component', () => { 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); + const taskForm = await apiService.getInstance().activiti.taskFormsApi.getTaskForm(allTasks.data[0].id); formModel = new FormModel(taskForm); @@ -205,7 +208,7 @@ describe('Task Details component', () => { it('[C286708] Should display task details for subtask - Task App', async () => { const taskName = 'TaskAppSubtask'; const checklistName = 'TaskAppChecklist'; - await this.alfrescoJsApi.activiti.taskApi.createNewTask({ 'name': taskName }); + await apiService.getInstance().activiti.taskApi.createNewTask(new TaskRepresentation({ 'name': taskName })); await (await processServices.goToTaskApp()).clickTasksButton(); @@ -222,7 +225,7 @@ describe('Task Details component', () => { await taskPage.tasksListPage().checkContentIsDisplayed(checklistName); await taskPage.tasksListPage().selectRow(checklistName); - const allTasks = await this.alfrescoJsApi.activiti.taskApi.listTasks(new Task({ sort: 'created-desc' })); + const allTasks = await apiService.getInstance().activiti.taskApi.listTasks(new Task({ sort: 'created-desc' })); const taskModel = new TaskModel(allTasks.data[0]); await taskPage.tasksListPage().checkContentIsDisplayed(taskModel.getName()); @@ -242,7 +245,7 @@ describe('Task Details component', () => { it('[C286707] Should display task details for subtask - Custom App', async () => { const checklistName = 'CustomAppChecklist'; - await new ProcessUtil(this.alfrescoJsApi).startProcessOfApp(appModel.name); + await new ProcessUtil(apiService).startProcessOfApp(appModel.name); await (await processServices.goToTaskApp()).clickTasksButton(); @@ -259,7 +262,7 @@ describe('Task Details component', () => { await taskPage.tasksListPage().checkContentIsDisplayed(checklistName); await taskPage.tasksListPage().selectRow(checklistName); - const allTasks = await this.alfrescoJsApi.activiti.taskApi.listTasks(new Task({ sort: 'created-desc' })); + const allTasks = await apiService.getInstance().activiti.taskApi.listTasks(new Task({ sort: 'created-desc' })); const taskModel = new TaskModel(allTasks.data[0]); await taskPage.tasksListPage().checkContentIsDisplayed(taskModel.getName()); @@ -278,7 +281,7 @@ describe('Task Details component', () => { it('[C286709] Should display task details for completed task - Task App', async () => { const taskName = 'TaskAppCompleted'; - const taskId = await this.alfrescoJsApi.activiti.taskApi.createNewTask({ 'name': taskName }); + const taskId = await apiService.getInstance().activiti.taskApi.createNewTask(new TaskRepresentation({ 'name': taskName })); await (await processServices.goToTaskApp()).clickTasksButton(); await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); @@ -290,7 +293,7 @@ describe('Task Details component', () => { 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 getTaskResponse = await apiService.getInstance().activiti.taskApi.getTask(taskId.id); const taskModel = new TaskModel(getTaskResponse); await taskPage.tasksListPage().checkContentIsDisplayed(taskModel.getName()); @@ -309,10 +312,10 @@ describe('Task Details component', () => { 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 } }); + const form = await apiService.getInstance().activiti.modelsApi.createModel(taskFormModel); + const task = await apiService.getInstance().activiti.taskApi.createNewTask(new TaskRepresentation({ 'name': taskName })); + await apiService.getInstance().activiti.taskApi.attachForm(task.id, { 'formId': form.id }); + await apiService.getInstance().activiti.taskApi.completeTaskForm(task.id, { values: { label: null } }); await (await processServices.goToTaskApp()).clickTasksButton(); diff --git a/e2e/process-services/task-filters-component.e2e.ts b/e2e/process-services/task-filters-component.e2e.ts index d03ed4fac4..92958d864f 100644 --- a/e2e/process-services/task-filters-component.e2e.ts +++ b/e2e/process-services/task-filters-component.e2e.ts @@ -15,7 +15,7 @@ * limitations under the License. */ -import { LoginPage, ApplicationsUtil } from '@alfresco/adf-testing'; +import { LoginSSOPage, ApplicationsUtil, ApiService, UserModel } from '@alfresco/adf-testing'; import { NavigationBarPage } from '../pages/adf/navigation-bar.page'; import { ProcessServicesPage } from '../pages/adf/process-services/process-services.page'; import { TasksPage } from '../pages/adf/process-services/tasks.page'; @@ -24,16 +24,17 @@ import { TaskDetailsPage } from '../pages/adf/process-services/task-details.page import { ProcessServiceTabBarPage } from '../pages/adf/process-services/process-service-tab-bar.page'; import { AppSettingsTogglesPage } from '../pages/adf/process-services/dialog/app-settings-toggles.page'; import { TaskFiltersDemoPage } from '../pages/adf/demo-shell/process-services/task-filters-demo.page'; -import { AlfrescoApiCompatibility as AlfrescoApi, UserProcessInstanceFilterRepresentation } from '@alfresco/js-api'; +import { UserProcessInstanceFilterRepresentation } from '@alfresco/js-api'; import { UsersActions } from '../actions/users.actions'; import { browser } from 'protractor'; -import { User } from '../models/APS/user'; describe('Task', () => { describe('Filters', () => { - const loginPage = new LoginPage(); + const app = browser.params.resources.Files.APP_WITH_DATE_FIELD_FORM; + + const loginPage = new LoginSSOPage(); const navigationBarPage = new NavigationBarPage(); const processServicesPage = new ProcessServicesPage(); const tasksPage = new TasksPage(); @@ -41,38 +42,30 @@ describe('Task', () => { const taskDetailsPage = new TaskDetailsPage(); const taskFiltersDemoPage = new TaskFiltersDemoPage(); - const app = browser.params.resources.Files.APP_WITH_DATE_FIELD_FORM; - let appId: number, user: User; + const apiService = new ApiService(); + const usersActions = new UsersActions(apiService); - beforeAll(async () => { - this.alfrescoJsApi = new AlfrescoApi({ - provider: 'BPM', - hostBpm: browser.params.testConfig.adf_aps.host - }); - }); + let appId: number, user: UserModel; beforeEach(async () => { + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); + user = await usersActions.createUser(); - const users = new UsersActions(); - - await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); - user = await users.createTenantAndUser(this.alfrescoJsApi); - - await this.alfrescoJsApi.login(user.email, user.password); - const applicationsService = new ApplicationsUtil(this.alfrescoJsApi); + await apiService.getInstance().login(user.email, user.password); + const applicationsService = new ApplicationsUtil(apiService); const { id } = await applicationsService.importPublishDeployApp(app.file_path); appId = id; - await loginPage.loginToProcessServicesUsingUserModel(user); + await loginPage.login(user.email, user.password); await navigationBarPage.navigateToProcessServicesPage(); await processServicesPage.checkApsContainer(); await processServicesPage.goToApp(app.title); }); 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(user.tenantId); + await apiService.getInstance().activiti.modelsApi.deleteModel(appId); + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); + await apiService.getInstance().activiti.adminTenantsApi.deleteTenant(user.tenantId); }); it('[C279967] Should display default filters when an app is deployed', async () => { @@ -83,7 +76,7 @@ describe('Task', () => { }); it('[C260330] Should display Task Filter List when app is in Task Tab', async () => { - await tasksPage.createTask({name: 'Test'}); + await tasksPage.createTask({ name: 'Test' }); await taskFiltersDemoPage.myTasksFilter().clickTaskFilter(); await tasksListPage.checkContentIsDisplayed('Test'); await expect(await taskFiltersDemoPage.checkActiveFilterActive()).toBe('My Tasks'); @@ -136,14 +129,14 @@ describe('Task', () => { }); it('[C260349] Should sort task by name when Name sorting is clicked', async () => { - await tasksPage.createTask({name: 'Test1'}); + await tasksPage.createTask({ name: 'Test1' }); await taskDetailsPage.clickCompleteTask(); - await tasksPage.createTask({name: 'Test2'}); + await tasksPage.createTask({ name: 'Test2' }); await taskDetailsPage.clickCompleteTask(); - await tasksPage.createTask({name: 'Test3'}); - await tasksPage.createTask({name: 'Test4'}); + await tasksPage.createTask({ name: 'Test3' }); + await tasksPage.createTask({ name: 'Test4' }); await tasksListPage.checkContentIsDisplayed('Test4'); await tasksListPage.checkRowIsSelected('Test4'); @@ -169,7 +162,7 @@ describe('Task', () => { }); it('[C277264] Should display task filter results when task filter is selected', async () => { - await tasksPage.createTask({name: 'Test'}); + await tasksPage.createTask({ name: 'Test' }); await taskFiltersDemoPage.myTasksFilter().clickTaskFilter(); await tasksListPage.checkContentIsDisplayed('Test'); @@ -178,13 +171,13 @@ describe('Task', () => { }); describe('Custom Filters', () => { - - const loginPage = new LoginPage(); + const loginPage = new LoginSSOPage(); const navigationBarPage = new NavigationBarPage(); const processServicesPage = new ProcessServicesPage(); const processServiceTabBarPage = new ProcessServiceTabBarPage(); const appSettingsToggles = new AppSettingsTogglesPage(); const taskFiltersDemoPage = new TaskFiltersDemoPage(); + const apiService = new ApiService(); let user; let appId: number; @@ -192,28 +185,22 @@ describe('Task', () => { const app = browser.params.resources.Files.APP_WITH_PROCESSES; beforeAll(async () => { - const users = new UsersActions(); + const usersActions = new UsersActions(apiService); + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); + user = await usersActions.createUser(); - this.alfrescoJsApi = new AlfrescoApi({ - provider: 'BPM', - hostBpm: browser.params.testConfig.adf_aps.host - }); - - await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); - user = await users.createTenantAndUser(this.alfrescoJsApi); - - await this.alfrescoJsApi.login(user.email, user.password); - const applicationsService = new ApplicationsUtil(this.alfrescoJsApi); + await apiService.getInstance().login(user.email, user.password); + const applicationsService = new ApplicationsUtil(apiService); const importedApp = await applicationsService.importPublishDeployApp(app.file_path); - const appDefinitions = await this.alfrescoJsApi.activiti.appsApi.getAppDefinitions(); + const appDefinitions = await apiService.getInstance().activiti.appsApi.getAppDefinitions(); appId = appDefinitions.data.find((currentApp) => currentApp.modelId === importedApp.id).id; - await loginPage.loginToProcessServicesUsingUserModel(user); + await loginPage.login(user.email, user.password); }); - afterAll( async () => { - await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); - await this.alfrescoJsApi.activiti.adminTenantsApi.deleteTenant(user.tenantId); + afterAll(async () => { + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); + await apiService.getInstance().activiti.adminTenantsApi.deleteTenant(user.tenantId); }); beforeEach(async () => { @@ -229,21 +216,21 @@ describe('Task', () => { icon: 'glyphicon-filter', filter: { sort: 'created-desc', state: 'completed', assignment: 'involved' } }); - const { id } = await this.alfrescoJsApi.activiti.userFiltersApi.createUserTaskFilter(newFilter); + const { id } = await apiService.getInstance().activiti.userFiltersApi.createUserTaskFilter(newFilter); await browser.refresh(); await taskFiltersDemoPage.customTaskFilter('New Task Filter').checkTaskFilterIsDisplayed(); - await this.alfrescoJsApi.activiti.userFiltersApi.deleteUserTaskFilter(id); + await apiService.getInstance().activiti.userFiltersApi.deleteUserTaskFilter(id); }); it('[C286447] Should display the task filter icon when a custom filter is added', async () => { const newFilter = new UserProcessInstanceFilterRepresentation({ - name : 'New Task Filter with icon', + name: 'New Task Filter with icon', appId, icon: 'glyphicon-cloud', filter: { sort: 'created-desc', state: 'completed', assignment: 'involved' } }); - const { id } = await this.alfrescoJsApi.activiti.userFiltersApi.createUserTaskFilter(newFilter); + const { id } = await apiService.getInstance().activiti.userFiltersApi.createUserTaskFilter(newFilter); await browser.refresh(); await processServiceTabBarPage.clickSettingsButton(); @@ -253,7 +240,7 @@ describe('Task', () => { await taskFiltersDemoPage.customTaskFilter('New Task Filter with icon').checkTaskFilterIsDisplayed(); await expect(await taskFiltersDemoPage.customTaskFilter('New Task Filter with icon').getTaskFilterIcon()).toEqual('cloud'); - await this.alfrescoJsApi.activiti.userFiltersApi.deleteUserTaskFilter(id); + await apiService.getInstance().activiti.userFiltersApi.deleteUserTaskFilter(id); }); it('[C286449] Should display task filter icons only when showIcon property is set on true', async () => { @@ -266,5 +253,5 @@ describe('Task', () => { 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 efb66b31a4..113d1f8385 100644 --- a/e2e/process-services/task-filters-sorting.e2e.ts +++ b/e2e/process-services/task-filters-sorting.e2e.ts @@ -15,20 +15,22 @@ * limitations under the License. */ -import { LoginPage, ApplicationsUtil } from '@alfresco/adf-testing'; +import { LoginSSOPage, ApplicationsUtil, ApiService } from '@alfresco/adf-testing'; import { NavigationBarPage } from '../pages/adf/navigation-bar.page'; import { ProcessServicesPage } from '../pages/adf/process-services/process-services.page'; import { TasksPage } from '../pages/adf/process-services/tasks.page'; import { TasksListPage } from '../pages/adf/process-services/tasks-list.page'; import { TaskDetailsPage } from '../pages/adf/process-services/task-details.page'; import { TaskFiltersDemoPage } from '../pages/adf/demo-shell/process-services/task-filters-demo.page'; -import { AlfrescoApiCompatibility as AlfrescoApi, UserProcessInstanceFilterRepresentation } from '@alfresco/js-api'; +import { UserProcessInstanceFilterRepresentation } from '@alfresco/js-api'; import { UsersActions } from '../actions/users.actions'; import { browser } from 'protractor'; describe('Task Filters Sorting', () => { - const loginPage = new LoginPage(); + const app = browser.params.resources.Files.APP_WITH_PROCESSES; + + const loginPage = new LoginSSOPage(); const navigationBarPage = new NavigationBarPage(); const processServicesPage = new ProcessServicesPage(); const tasksPage = new TasksPage(); @@ -36,11 +38,12 @@ describe('Task Filters Sorting', () => { const taskDetailsPage = new TaskDetailsPage(); const taskFiltersDemoPage = new TaskFiltersDemoPage(); + const apiService = new ApiService(); + const usersActions = new UsersActions(apiService); + let user; let appId; - const app = browser.params.resources.Files.APP_WITH_PROCESSES; - const tasks = [ { name: 'Task 1 Completed', dueDate: '01/01/2019' }, { name: 'Task 2 Completed', dueDate: '02/01/2019' }, @@ -50,23 +53,16 @@ describe('Task Filters Sorting', () => { { name: 'Task 6', dueDate: '03/01/2019' }]; beforeAll(async () => { - const users = new UsersActions(); + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); + user = await usersActions.createUser(); - this.alfrescoJsApi = new AlfrescoApi({ - provider: 'BPM', - hostBpm: browser.params.testConfig.adf_aps.host - }); - - await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); - user = await users.createTenantAndUser(this.alfrescoJsApi); - - await this.alfrescoJsApi.login(user.email, user.password); - const applicationsService = new ApplicationsUtil(this.alfrescoJsApi); + await apiService.getInstance().login(user.email, user.password); + const applicationsService = new ApplicationsUtil(apiService); const importedApp = await applicationsService.importPublishDeployApp(app.file_path); - const appDefinitions = await this.alfrescoJsApi.activiti.appsApi.getAppDefinitions(); + const appDefinitions = await apiService.getInstance().activiti.appsApi.getAppDefinitions(); appId = appDefinitions.data.find((currentApp) => currentApp.modelId === importedApp.id).id; - await loginPage.loginToProcessServicesUsingUserModel(user); + await loginPage.login(user.email, user.password); await navigationBarPage.navigateToProcessServicesPage(); await processServicesPage.checkApsContainer(); await processServicesPage.goToApp(app.title); @@ -86,8 +82,8 @@ describe('Task Filters Sorting', () => { }); afterAll( async () => { - await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); - await this.alfrescoJsApi.activiti.adminTenantsApi.deleteTenant(user.tenantId); + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); + await apiService.getInstance().activiti.adminTenantsApi.deleteTenant(user.tenantId); }); it('[C277254] Should display tasks under new filter from newest to oldest when they are completed', async () => { @@ -97,7 +93,7 @@ describe('Task Filters Sorting', () => { icon: 'glyphicon-filter', filter: { sort: 'created-desc', state: 'completed', assignment: 'involved' } }); - await this.alfrescoJsApi.activiti.userFiltersApi.createUserTaskFilter(newFilter); + await apiService.getInstance().activiti.userFiltersApi.createUserTaskFilter(newFilter); await browser.refresh(); await taskFiltersDemoPage.customTaskFilter(newFilter.name).clickTaskFilter(); @@ -114,7 +110,7 @@ describe('Task Filters Sorting', () => { icon: 'glyphicon-filter', filter: { sort: 'created-asc', state: 'completed', assignment: 'involved' } }); - await this.alfrescoJsApi.activiti.userFiltersApi.createUserTaskFilter(newFilter); + await apiService.getInstance().activiti.userFiltersApi.createUserTaskFilter(newFilter); await browser.refresh(); await taskFiltersDemoPage.customTaskFilter(newFilter.name).clickTaskFilter(); @@ -131,7 +127,7 @@ describe('Task Filters Sorting', () => { icon: 'glyphicon-filter', filter: { sort: 'due-desc', state: 'completed', assignment: 'involved' } }); - await this.alfrescoJsApi.activiti.userFiltersApi.createUserTaskFilter(newFilter); + await apiService.getInstance().activiti.userFiltersApi.createUserTaskFilter(newFilter); await browser.refresh(); await taskFiltersDemoPage.customTaskFilter(newFilter.name).clickTaskFilter(); @@ -148,7 +144,7 @@ describe('Task Filters Sorting', () => { icon: 'glyphicon-filter', filter: { sort: 'due-asc', state: 'completed', assignment: 'involved' } }); - await this.alfrescoJsApi.activiti.userFiltersApi.createUserTaskFilter(newFilter); + await apiService.getInstance().activiti.userFiltersApi.createUserTaskFilter(newFilter); await browser.refresh(); await taskFiltersDemoPage.customTaskFilter(newFilter.name).clickTaskFilter(); @@ -165,7 +161,7 @@ describe('Task Filters Sorting', () => { icon: 'glyphicon-filter', filter: { sort: 'created-desc', state: 'open', assignment: 'involved' } }); - await this.alfrescoJsApi.activiti.userFiltersApi.createUserTaskFilter(newFilter); + await apiService.getInstance().activiti.userFiltersApi.createUserTaskFilter(newFilter); await browser.refresh(); await taskFiltersDemoPage.customTaskFilter(newFilter.name).clickTaskFilter(); @@ -182,7 +178,7 @@ describe('Task Filters Sorting', () => { icon: 'glyphicon-filter', filter: { sort: 'created-asc', state: 'open', assignment: 'involved' } }); - await this.alfrescoJsApi.activiti.userFiltersApi.createUserTaskFilter(newFilter); + await apiService.getInstance().activiti.userFiltersApi.createUserTaskFilter(newFilter); await browser.refresh(); await taskFiltersDemoPage.customTaskFilter(newFilter.name).clickTaskFilter(); @@ -199,7 +195,7 @@ describe('Task Filters Sorting', () => { icon: 'glyphicon-filter', filter: { sort: 'due-desc', state: 'open', assignment: 'involved' } }); - await this.alfrescoJsApi.activiti.userFiltersApi.createUserTaskFilter(newFilter); + await apiService.getInstance().activiti.userFiltersApi.createUserTaskFilter(newFilter); await browser.refresh(); await taskFiltersDemoPage.customTaskFilter(newFilter.name).clickTaskFilter(); @@ -216,7 +212,7 @@ describe('Task Filters Sorting', () => { icon: 'glyphicon-filter', filter: { sort: 'due-asc', state: 'open', assignment: 'involved' } }); - await this.alfrescoJsApi.activiti.userFiltersApi.createUserTaskFilter(newFilter); + await apiService.getInstance().activiti.userFiltersApi.createUserTaskFilter(newFilter); await browser.refresh(); await taskFiltersDemoPage.customTaskFilter(newFilter.name).clickTaskFilter(); diff --git a/e2e/process-services/task-list-pagination.e2e.ts b/e2e/process-services/task-list-pagination.e2e.ts index 439ef6a64b..5d493dec5c 100644 --- a/e2e/process-services/task-list-pagination.e2e.ts +++ b/e2e/process-services/task-list-pagination.e2e.ts @@ -15,23 +15,22 @@ * limitations under the License. */ -import { LoginPage, PaginationPage, ApplicationsUtil, ProcessUtil } from '@alfresco/adf-testing'; -import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; +import { LoginSSOPage, PaginationPage, ApplicationsUtil, ProcessUtil, ApiService, UserModel } from '@alfresco/adf-testing'; import { browser } from 'protractor'; import { UsersActions } from '../actions/users.actions'; import { NavigationBarPage } from '../pages/adf/navigation-bar.page'; import { TasksPage } from '../pages/adf/process-services/tasks.page'; import CONSTANTS = require('../util/constants'); -import { User } from '../models/APS/user'; describe('Task List Pagination', () => { - const loginPage = new LoginPage(); + const loginPage = new LoginSSOPage(); const navigationBarPage = new NavigationBarPage(); const taskPage = new TasksPage(); const paginationPage = new PaginationPage(); + const apiService = new ApiService(); - let processUserModel: User; + let processUserModel: UserModel; const app = browser.params.resources.Files.SIMPLE_APP_WITH_USER_FORM; let currentPage = 1; const nrOfTasks = 20; @@ -50,30 +49,25 @@ describe('Task List Pagination', () => { }; beforeAll(async () => { - const users = new UsersActions(); + const usersActions = new UsersActions(apiService); - this.alfrescoJsApi = new AlfrescoApi({ - provider: 'BPM', - hostBpm: browser.params.testConfig.adf_aps.host - }); + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); + processUserModel = await usersActions.createUser(); - await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); - processUserModel = await users.createTenantAndUser(this.alfrescoJsApi); - - await this.alfrescoJsApi.login(processUserModel.email, processUserModel.password); - const applicationsService = new ApplicationsUtil(this.alfrescoJsApi); + await apiService.getInstance().login(processUserModel.email, processUserModel.password); + const applicationsService = new ApplicationsUtil(apiService); const resultApp = await applicationsService.importPublishDeployApp(app.file_path); for (let i = 0; i < nrOfTasks; i++) { - await new ProcessUtil(this.alfrescoJsApi).startProcessOfApp(resultApp.name); + await new ProcessUtil(apiService).startProcessOfApp(resultApp.name); } - await loginPage.loginToProcessServicesUsingUserModel(processUserModel); + await loginPage.login(processUserModel.email, processUserModel.password); }); afterAll( async () => { - await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); - await this.alfrescoJsApi.activiti.adminTenantsApi.deleteTenant(processUserModel.tenantId); + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); + await apiService.getInstance().activiti.adminTenantsApi.deleteTenant(processUserModel.tenantId); }); it('[C260301] Should display default pagination', async () => { diff --git a/e2e/process-services/widgets/amount-widget.e2e.ts b/e2e/process-services/widgets/amount-widget.e2e.ts index e439e974b3..3308f16dd3 100644 --- a/e2e/process-services/widgets/amount-widget.e2e.ts +++ b/e2e/process-services/widgets/amount-widget.e2e.ts @@ -15,48 +15,43 @@ * limitations under the License. */ -import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; import { UsersActions } from '../../actions/users.actions'; -import { LoginPage, BrowserActions, Widget, ApplicationsUtil, ProcessUtil } from '@alfresco/adf-testing'; +import { LoginSSOPage, BrowserActions, Widget, ApplicationsUtil, ProcessUtil, ApiService } from '@alfresco/adf-testing'; import { TasksPage } from '../../pages/adf/process-services/tasks.page'; import CONSTANTS = require('../../util/constants'); import { browser } from 'protractor'; describe('Amount Widget', () => { - const loginPage = new LoginPage(); + const app = browser.params.resources.Files.WIDGET_CHECK_APP.AMOUNT; - let processUserModel; + const loginPage = new LoginSSOPage(); const taskPage = new TasksPage(); const widget = new Widget(); - let alfrescoJsApi; + let appModel; - const app = browser.params.resources.Files.WIDGET_CHECK_APP.AMOUNT; let deployedApp, process; + let processUserModel; + + const apiService = new ApiService(); + const applicationsService = new ApplicationsUtil(apiService); + const usersActions = new UsersActions(apiService); + const processUtil = new ProcessUtil(apiService); beforeAll(async () => { - const users = new UsersActions(); + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); - alfrescoJsApi = new AlfrescoApi({ - provider: 'BPM', - hostBpm: browser.params.testConfig.adf_aps.host - }); + processUserModel = await usersActions.createUser(); - await alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); - - processUserModel = await users.createTenantAndUser(alfrescoJsApi); - - await alfrescoJsApi.login(processUserModel.email, processUserModel.password); - const applicationsService = new ApplicationsUtil(alfrescoJsApi); + await apiService.getInstance().login(processUserModel.email, processUserModel.password); appModel = await applicationsService.importPublishDeployApp(browser.params.resources.Files.WIDGET_CHECK_APP.file_path); - const appDefinitions = await alfrescoJsApi.activiti.appsApi.getAppDefinitions(); + const appDefinitions = await apiService.getInstance().activiti.appsApi.getAppDefinitions(); deployedApp = appDefinitions.data.find((currentApp) => { return currentApp.modelId === appModel.id; }); - const processUtil = new ProcessUtil(alfrescoJsApi); process = await processUtil.startProcessByDefinitionName(appModel.name, app.processName); - await loginPage.loginToProcessServicesUsingUserModel(processUserModel); + await loginPage.login(processUserModel.email, processUserModel.password); }); beforeEach(async() => { @@ -67,9 +62,9 @@ describe('Amount Widget', () => { }); 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); + await apiService.getInstance().activiti.processApi.deleteProcessInstance(process.id); + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); + await apiService.getInstance().activiti.adminTenantsApi.deleteTenant(processUserModel.tenantId); }); it('[C274703] Should be possible to set general, advance and visibility properties for Amount Widget', async () => { diff --git a/e2e/process-services/widgets/attach-file-widget.e2e.ts b/e2e/process-services/widgets/attach-file-widget.e2e.ts index 7ea3d3785b..a5f11597c6 100644 --- a/e2e/process-services/widgets/attach-file-widget.e2e.ts +++ b/e2e/process-services/widgets/attach-file-widget.e2e.ts @@ -15,20 +15,22 @@ * limitations under the License. */ -import { LoginPage, Widget, ViewerPage, FileBrowserUtil, ApplicationsUtil } from '@alfresco/adf-testing'; +import { LoginSSOPage, Widget, ViewerPage, FileBrowserUtil, ApplicationsUtil, ApiService } from '@alfresco/adf-testing'; import { TasksPage } from '../../pages/adf/process-services/tasks.page'; import CONSTANTS = require('../../util/constants'); import { FileModel } from '../../models/ACS/file.model'; import { browser } from 'protractor'; import { NavigationBarPage } from '../../pages/adf/navigation-bar.page'; -import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; import { UsersActions } from '../../actions/users.actions'; import { TaskDetailsPage } from '../../pages/adf/process-services/task-details.page'; import { TasksListPage } from '../../pages/adf/process-services/tasks-list.page'; import { FiltersPage } from '../../pages/adf/process-services/filters.page'; describe('Attach widget - File', () => { - const loginPage = new LoginPage(); + + const app = browser.params.resources.Files.WIDGETS_SMOKE_TEST; + + const loginPage = new LoginSSOPage(); const viewerPage = new ViewerPage(); const widget = new Widget(); const taskPage = new TasksPage(); @@ -37,26 +39,22 @@ describe('Attach widget - File', () => { const tasksListPage = new TasksListPage(); const filtersPage = new FiltersPage(); + const apiService = new ApiService(); + const usersActions = new UsersActions(apiService); + const applicationsService = new ApplicationsUtil(apiService); + let processUserModel; - const app = browser.params.resources.Files.WIDGETS_SMOKE_TEST; const pdfFile = new FileModel({'name': browser.params.resources.Files.ADF_DOCUMENTS.PDF.file_name}); const appFields = app.form_fields; beforeAll(async () => { - const users = new UsersActions(); + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); - this.alfrescoJsApi = new AlfrescoApi({ - provider: 'BPM', - hostBpm: browser.params.testConfig.adf_aps.host - }); + processUserModel = await usersActions.createUser(); + await apiService.getInstance().login(processUserModel.email, processUserModel.password); - await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); - processUserModel = await users.createTenantAndUser(this.alfrescoJsApi); - await this.alfrescoJsApi.login(processUserModel.email, processUserModel.password); - - const applicationsService = new ApplicationsUtil(this.alfrescoJsApi); await applicationsService.importPublishDeployApp(app.file_path); - await loginPage.loginToProcessServicesUsingUserModel(processUserModel); + await loginPage.login(processUserModel.email, processUserModel.password); }); beforeEach(async () => { @@ -74,12 +72,8 @@ describe('Attach widget - File', () => { }); afterAll(async () => { - this.alfrescoJsApi = new AlfrescoApi({ - provider: 'BPM', - hostBpm: browser.params.testConfig.adf_aps.host - }); - await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); - await this.alfrescoJsApi.activiti.adminTenantsApi.deleteTenant(processUserModel.tenantId); + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); + await apiService.getInstance().activiti.adminTenantsApi.deleteTenant(processUserModel.tenantId); }); it('[C268067] Should be able to preview, download and remove attached files from an active form', async () => { diff --git a/e2e/process-services/widgets/attach-folder-widget.e2e.ts b/e2e/process-services/widgets/attach-folder-widget.e2e.ts index cbf9783fa5..61a95560dd 100644 --- a/e2e/process-services/widgets/attach-folder-widget.e2e.ts +++ b/e2e/process-services/widgets/attach-folder-widget.e2e.ts @@ -15,46 +15,43 @@ * limitations under the License. */ -import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; import { UsersActions } from '../../actions/users.actions'; -import { LoginPage, BrowserActions, Widget, ApplicationsUtil, ProcessUtil } from '@alfresco/adf-testing'; +import { LoginSSOPage, BrowserActions, Widget, ApplicationsUtil, ProcessUtil, ApiService } from '@alfresco/adf-testing'; import { TasksPage } from '../../pages/adf/process-services/tasks.page'; import CONSTANTS = require('../../util/constants'); import { browser } from 'protractor'; describe('Attach Folder widget', () => { - const loginPage = new LoginPage(); - let processUserModel; + + const app = browser.params.resources.Files.WIDGET_CHECK_APP.ATTACH_FOLDER; + + const loginPage = new LoginSSOPage(); const taskPage = new TasksPage(); const widget = new Widget(); - let alfrescoJsApi; + let appModel; - const app = browser.params.resources.Files.WIDGET_CHECK_APP.ATTACH_FOLDER; let deployedApp, process; + let processUserModel; + + const apiService = new ApiService(); + const usersActions = new UsersActions(apiService); + const processUtil = new ProcessUtil(apiService); + const applicationsService = new ApplicationsUtil(apiService); beforeAll(async () => { - const users = new UsersActions(); + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); - alfrescoJsApi = new AlfrescoApi({ - provider: 'BPM', - hostBpm: browser.params.testConfig.adf_aps.host - }); + processUserModel = await usersActions.createUser(); - await alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); - - processUserModel = await users.createTenantAndUser(alfrescoJsApi); - - await alfrescoJsApi.login(processUserModel.email, processUserModel.password); - const applicationsService = new ApplicationsUtil(alfrescoJsApi); + await apiService.getInstance().login(processUserModel.email, processUserModel.password); appModel = await applicationsService.importPublishDeployApp(browser.params.resources.Files.WIDGET_CHECK_APP.file_path); - const appDefinitions = await alfrescoJsApi.activiti.appsApi.getAppDefinitions(); + const appDefinitions = await apiService.getInstance().activiti.appsApi.getAppDefinitions(); deployedApp = appDefinitions.data.find((currentApp) => { return currentApp.modelId === appModel.id; }); - const processUtil = new ProcessUtil(alfrescoJsApi); process = await processUtil.startProcessByDefinitionName(appModel.name, app.processName); - await loginPage.loginToProcessServicesUsingUserModel(processUserModel); + await loginPage.login(processUserModel.email, processUserModel.password); }); beforeEach(async () => { @@ -65,9 +62,9 @@ describe('Attach Folder widget', () => { }); 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); + await apiService.getInstance().activiti.processApi.deleteProcessInstance(process.id); + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); + await apiService.getInstance().activiti.adminTenantsApi.deleteTenant(processUserModel.tenantId); }); it('[C276745] Should be possible to set visibility properties for Attach Folder Widget', async () => { diff --git a/e2e/process-services/widgets/checkbox-widget.e2e.ts b/e2e/process-services/widgets/checkbox-widget.e2e.ts index 1e4f03f15f..df2167cf1d 100644 --- a/e2e/process-services/widgets/checkbox-widget.e2e.ts +++ b/e2e/process-services/widgets/checkbox-widget.e2e.ts @@ -15,46 +15,42 @@ * limitations under the License. */ -import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; import { UsersActions } from '../../actions/users.actions'; -import { LoginPage, BrowserActions, Widget, ApplicationsUtil, ProcessUtil } from '@alfresco/adf-testing'; +import { LoginSSOPage, BrowserActions, Widget, ApplicationsUtil, ProcessUtil, ApiService } from '@alfresco/adf-testing'; import { TasksPage } from '../../pages/adf/process-services/tasks.page'; import CONSTANTS = require('../../util/constants'); import { browser } from 'protractor'; describe('Checkbox Widget', () => { - const loginPage = new LoginPage(); - let processUserModel; + const app = browser.params.resources.Files.WIDGET_CHECK_APP.CHECKBOX; + + const loginPage = new LoginSSOPage(); const taskPage = new TasksPage(); const widget = new Widget(); - let alfrescoJsApi; + + let processUserModel; let appModel; - const app = browser.params.resources.Files.WIDGET_CHECK_APP.CHECKBOX; let deployedApp, process; + const apiService = new ApiService(); + const usersActions = new UsersActions(apiService); + const applicationsService = new ApplicationsUtil(apiService); + beforeAll(async () => { - const users = new UsersActions(); + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); - alfrescoJsApi = new AlfrescoApi({ - provider: 'BPM', - hostBpm: browser.params.testConfig.adf_aps.host - }); + processUserModel = await usersActions.createUser(); - await alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); - - processUserModel = await users.createTenantAndUser(alfrescoJsApi); - - await alfrescoJsApi.login(processUserModel.email, processUserModel.password); - const applicationsService = new ApplicationsUtil(alfrescoJsApi); + await apiService.getInstance().login(processUserModel.email, processUserModel.password); appModel = await applicationsService.importPublishDeployApp(browser.params.resources.Files.WIDGET_CHECK_APP.file_path); - const appDefinitions = await alfrescoJsApi.activiti.appsApi.getAppDefinitions(); + const appDefinitions = await apiService.getInstance().activiti.appsApi.getAppDefinitions(); deployedApp = appDefinitions.data.find((currentApp) => { return currentApp.modelId === appModel.id; }); - process = await new ProcessUtil(alfrescoJsApi).startProcessByDefinitionName(appModel.name, app.processName); - await loginPage.loginToProcessServicesUsingUserModel(processUserModel); + process = await new ProcessUtil(apiService).startProcessByDefinitionName(appModel.name, app.processName); + await loginPage.login(processUserModel.email, processUserModel.password); }); beforeEach(async () => { @@ -65,13 +61,13 @@ describe('Checkbox Widget', () => { }); 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); + await apiService.getInstance().activiti.processApi.deleteProcessInstance(process.id); + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); + await apiService.getInstance().activiti.adminTenantsApi.deleteTenant(processUserModel.tenantId); }); it('[C268554] Should be able to set general settings for Checkbox widget ', async () => { - await taskPage.formFields().setValueInInputById(app.FIELD.number_input_id, 2); + 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); @@ -80,7 +76,7 @@ describe('Checkbox Widget', () => { 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 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 8aa98a2f8b..1167bce50c 100644 --- a/e2e/process-services/widgets/date-time-widget.e2e.ts +++ b/e2e/process-services/widgets/date-time-widget.e2e.ts @@ -15,46 +15,42 @@ * limitations under the License. */ -import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; import { UsersActions } from '../../actions/users.actions'; -import { LoginPage, BrowserActions, Widget, ApplicationsUtil, ProcessUtil } from '@alfresco/adf-testing'; +import { LoginSSOPage, BrowserActions, Widget, ApplicationsUtil, ProcessUtil, ApiService } from '@alfresco/adf-testing'; import { TasksPage } from '../../pages/adf/process-services/tasks.page'; import CONSTANTS = require('../../util/constants'); import { browser } from 'protractor'; describe('Date and time widget', () => { - const loginPage = new LoginPage(); - let processUserModel; + const app = browser.params.resources.Files.WIDGET_CHECK_APP.DATETIME; + + const loginPage = new LoginSSOPage(); const taskPage = new TasksPage(); const widget = new Widget(); - let alfrescoJsApi; + + const apiService = new ApiService(); + const usersActions = new UsersActions(apiService); + const applicationsService = new ApplicationsUtil(apiService); + + let processUserModel; let appModel; - const app = browser.params.resources.Files.WIDGET_CHECK_APP.DATETIME; let deployedApp, process; beforeAll(async () => { - const users = new UsersActions(); + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); - alfrescoJsApi = new AlfrescoApi({ - provider: 'BPM', - hostBpm: browser.params.testConfig.adf_aps.host - }); + processUserModel = await usersActions.createUser(); - await alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); + await apiService.getInstance().login(processUserModel.email, processUserModel.password); + appModel = await applicationsService.importPublishDeployApp(browser.params.resources.Files.WIDGET_CHECK_APP.file_path); - processUserModel = await users.createTenantAndUser(alfrescoJsApi); - - await alfrescoJsApi.login(processUserModel.email, processUserModel.password); - const applicationsService = new ApplicationsUtil(alfrescoJsApi); - appModel = await applicationsService.importPublishDeployApp(browser.params.resources.Files.WIDGET_CHECK_APP.file_path); - - const appDefinitions = await alfrescoJsApi.activiti.appsApi.getAppDefinitions(); - deployedApp = appDefinitions.data.find((currentApp) => { + const appDefinitions = await apiService.getInstance().activiti.appsApi.getAppDefinitions(); + deployedApp = appDefinitions.data.find((currentApp) => { return currentApp.modelId === appModel.id; }); - process = await new ProcessUtil(alfrescoJsApi).startProcessByDefinitionName(appModel.name, app.processName); - await loginPage.loginToProcessServicesUsingUserModel(processUserModel); + process = await new ProcessUtil(apiService).startProcessByDefinitionName(appModel.name, app.processName); + await loginPage.login(processUserModel.email, processUserModel.password); }); beforeEach(async () => { @@ -65,9 +61,9 @@ describe('Date and time widget', () => { }); 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); + await apiService.getInstance().activiti.processApi.deleteProcessInstance(process.id); + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); + await apiService.getInstance().activiti.adminTenantsApi.deleteTenant(processUserModel.tenantId); }); it('[C268818] Should be able to set general settings for Date Time widget', async () => { diff --git a/e2e/process-services/widgets/date-widget.e2e.ts b/e2e/process-services/widgets/date-widget.e2e.ts index 3057e59c71..e8d668042a 100644 --- a/e2e/process-services/widgets/date-widget.e2e.ts +++ b/e2e/process-services/widgets/date-widget.e2e.ts @@ -15,9 +15,16 @@ * limitations under the License. */ -import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; import { UsersActions } from '../../actions/users.actions'; -import { LoginPage, BrowserActions, Widget, FormPage, ApplicationsUtil, ProcessUtil } from '@alfresco/adf-testing'; +import { + LoginSSOPage, + BrowserActions, + Widget, + FormPage, + ApplicationsUtil, + ProcessUtil, + ApiService +} from '@alfresco/adf-testing'; import { TasksPage } from '../../pages/adf/process-services/tasks.page'; import CONSTANTS = require('../../util/constants'); import { browser } from 'protractor'; @@ -26,48 +33,44 @@ import { customDateFormAPS1 } from '../../resources/forms/custom-date-form'; describe('Date widget', () => { - const loginPage = new LoginPage(); - let processUserModel; + const app = browser.params.resources.Files.WIDGET_CHECK_APP.DATE; + + const loginPage = new LoginSSOPage(); const taskPage = new TasksPage(); const widget = new Widget(); + const dateWidget = widget.dateWidget(); - let alfrescoJsApi; let appModel; - const app = browser.params.resources.Files.WIDGET_CHECK_APP.DATE; + let processUserModel; let deployedApp, process; + const apiService = new ApiService(); + const usersActions = new UsersActions(apiService); + const applicationsService = new ApplicationsUtil(apiService); + beforeAll(async () => { - const users = new UsersActions(); + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); - alfrescoJsApi = new AlfrescoApi({ - provider: 'BPM', - hostBpm: browser.params.testConfig.adf_aps.host - }); + processUserModel = await usersActions.createUser(); - await alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); + await apiService.getInstance().login(processUserModel.email, processUserModel.password); + appModel = await applicationsService.importPublishDeployApp(browser.params.resources.Files.WIDGET_CHECK_APP.file_path); - processUserModel = await users.createTenantAndUser(alfrescoJsApi); - - await alfrescoJsApi.login(processUserModel.email, processUserModel.password); - const applicationsService = new ApplicationsUtil(alfrescoJsApi); - appModel = await applicationsService.importPublishDeployApp(browser.params.resources.Files.WIDGET_CHECK_APP.file_path); - - const appDefinitions = await alfrescoJsApi.activiti.appsApi.getAppDefinitions(); - deployedApp = appDefinitions.data.find((currentApp) => { + const appDefinitions = await apiService.getInstance().activiti.appsApi.getAppDefinitions(); + deployedApp = appDefinitions.data.find((currentApp) => { return currentApp.modelId === appModel.id; }); - process = await new ProcessUtil(alfrescoJsApi).startProcessByDefinitionName(appModel.name, app.processName); - await loginPage.loginToProcessServicesUsingUserModel(processUserModel); + process = await new ProcessUtil(apiService).startProcessByDefinitionName(appModel.name, app.processName); + await loginPage.login(processUserModel.email, processUserModel.password); }); 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); + await apiService.getInstance().activiti.processApi.deleteProcessInstance(process.id); + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); + await apiService.getInstance().activiti.adminTenantsApi.deleteTenant(processUserModel.tenantId); }); describe('Simple App', () => { - beforeEach(async () => { const urlToNavigateTo = `${browser.params.testConfig.adf.url}/activiti/apps/${deployedApp.id}/tasks/`; await BrowserActions.getUrl(urlToNavigateTo); @@ -95,7 +98,6 @@ describe('Date widget', () => { }); describe('Form Demo Page', () => { - const formDemoPage = new FormDemoPage(); const formJson = JSON.parse(customDateFormAPS1); const formPage = new FormPage(); diff --git a/e2e/process-services/widgets/document-template-widget.e2e.ts b/e2e/process-services/widgets/document-template-widget.e2e.ts index 062db882ad..461a8b5cc9 100644 --- a/e2e/process-services/widgets/document-template-widget.e2e.ts +++ b/e2e/process-services/widgets/document-template-widget.e2e.ts @@ -15,46 +15,42 @@ * limitations under the License. */ -import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; import { UsersActions } from '../../actions/users.actions'; -import { LoginPage, BrowserActions, Widget, ApplicationsUtil, ProcessUtil } from '@alfresco/adf-testing'; +import { LoginSSOPage, BrowserActions, Widget, ApplicationsUtil, ProcessUtil, ApiService } from '@alfresco/adf-testing'; import { TasksPage } from '../../pages/adf/process-services/tasks.page'; import CONSTANTS = require('../../util/constants'); import { browser } from 'protractor'; describe('Document Template widget', () => { - const loginPage = new LoginPage(); - let processUserModel; + const app = browser.params.resources.Files.FILE_FORM_ADF; + + const loginPage = new LoginSSOPage(); const taskPage = new TasksPage(); const widget = new Widget(); - let alfrescoJsApi; + + const apiService = new ApiService(); + const usersActions = new UsersActions(apiService); + const applicationsService = new ApplicationsUtil(apiService); + let appModel; - const app = browser.params.resources.Files.FILE_FORM_ADF; let deployedApp, process; + let processUserModel; beforeAll(async () => { - const users = new UsersActions(); + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); - alfrescoJsApi = new AlfrescoApi({ - provider: 'BPM', - hostBpm: browser.params.testConfig.adf_aps.host - }); + processUserModel = await usersActions.createUser(); - await alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); + await apiService.getInstance().login(processUserModel.email, processUserModel.password); + appModel = await applicationsService.importPublishDeployApp( app.file_path); - processUserModel = await users.createTenantAndUser(alfrescoJsApi); - - await alfrescoJsApi.login(processUserModel.email, processUserModel.password); - const applicationsService = new ApplicationsUtil(alfrescoJsApi); - appModel = await applicationsService.importPublishDeployApp( app.file_path); - - const appDefinitions = await alfrescoJsApi.activiti.appsApi.getAppDefinitions(); - deployedApp = appDefinitions.data.find((currentApp) => { + const appDefinitions = await apiService.getInstance().activiti.appsApi.getAppDefinitions(); + deployedApp = appDefinitions.data.find((currentApp) => { return currentApp.modelId === appModel.id; }); - process = await new ProcessUtil(alfrescoJsApi).startProcessOfApp(appModel.name); - await loginPage.loginToProcessServicesUsingUserModel(processUserModel); + process = await new ProcessUtil(apiService).startProcessOfApp(appModel.name); + await loginPage.login(processUserModel.email, processUserModel.password); }); beforeEach(async () => { @@ -65,9 +61,9 @@ describe('Document Template widget', () => { }); 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); + await apiService.getInstance().activiti.processApi.deleteProcessInstance(process.id); + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); + await apiService.getInstance().activiti.adminTenantsApi.deleteTenant(processUserModel.tenantId); }); it('[C260406] should check that the template contains assigned file ', async () => { diff --git a/e2e/process-services/widgets/dropdown-widget.e2e.ts b/e2e/process-services/widgets/dropdown-widget.e2e.ts index cff613c502..d2009903fa 100644 --- a/e2e/process-services/widgets/dropdown-widget.e2e.ts +++ b/e2e/process-services/widgets/dropdown-widget.e2e.ts @@ -15,46 +15,41 @@ * limitations under the License. */ -import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; import { UsersActions } from '../../actions/users.actions'; -import { LoginPage, BrowserActions, Widget, ApplicationsUtil, ProcessUtil } from '@alfresco/adf-testing'; +import { LoginSSOPage, BrowserActions, Widget, ApplicationsUtil, ProcessUtil, ApiService } from '@alfresco/adf-testing'; import { TasksPage } from '../../pages/adf/process-services/tasks.page'; import CONSTANTS = require('../../util/constants'); import { browser } from 'protractor'; describe('Dropdown widget', () => { + const app = browser.params.resources.Files.WIDGET_CHECK_APP.DROPDOWN; - const loginPage = new LoginPage(); - let processUserModel; + const loginPage = new LoginSSOPage(); const taskPage = new TasksPage(); const widget = new Widget(); - let alfrescoJsApi; + + const apiService = new ApiService(); + const usersActions = new UsersActions(apiService); + const applicationsService = new ApplicationsUtil(apiService); + let appModel; - const app = browser.params.resources.Files.WIDGET_CHECK_APP.DROPDOWN; let deployedApp, process; + let processUserModel; beforeAll(async () => { - const users = new UsersActions(); + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); - alfrescoJsApi = new AlfrescoApi({ - provider: 'BPM', - hostBpm: browser.params.testConfig.adf_aps.host - }); + processUserModel = await usersActions.createUser(); - await alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); + await apiService.getInstance().login(processUserModel.email, processUserModel.password); + appModel = await applicationsService.importPublishDeployApp(browser.params.resources.Files.WIDGET_CHECK_APP.file_path); - processUserModel = await users.createTenantAndUser(alfrescoJsApi); - - await alfrescoJsApi.login(processUserModel.email, processUserModel.password); - const applicationsService = new ApplicationsUtil(alfrescoJsApi); - appModel = await applicationsService.importPublishDeployApp(browser.params.resources.Files.WIDGET_CHECK_APP.file_path); - - const appDefinitions = await alfrescoJsApi.activiti.appsApi.getAppDefinitions(); - deployedApp = appDefinitions.data.find((currentApp) => { + const appDefinitions = await apiService.getInstance().activiti.appsApi.getAppDefinitions(); + deployedApp = appDefinitions.data.find((currentApp) => { return currentApp.modelId === appModel.id; }); - process = await new ProcessUtil(alfrescoJsApi).startProcessByDefinitionName(appModel.name, app.processName); - await loginPage.loginToProcessServicesUsingUserModel(processUserModel); + process = await new ProcessUtil(apiService).startProcessByDefinitionName(appModel.name, app.processName); + await loginPage.login(processUserModel.email, processUserModel.password); }); beforeEach(async () => { @@ -65,9 +60,9 @@ describe('Dropdown widget', () => { }); 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); + await apiService.getInstance().activiti.processApi.deleteProcessInstance(process.id); + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); + await apiService.getInstance().activiti.adminTenantsApi.deleteTenant(processUserModel.tenantId); }); it('[C269051] Should be possible to set general and options properties for Dropdown widget ', async () => { diff --git a/e2e/process-services/widgets/dynamic-table-widget.e2e.ts b/e2e/process-services/widgets/dynamic-table-widget.e2e.ts index dcaf750b03..70a144fac8 100644 --- a/e2e/process-services/widgets/dynamic-table-widget.e2e.ts +++ b/e2e/process-services/widgets/dynamic-table-widget.e2e.ts @@ -15,9 +15,8 @@ * limitations under the License. */ -import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; import { UsersActions } from '../../actions/users.actions'; -import { LoginPage, BrowserActions, Widget, ApplicationsUtil, ProcessUtil } from '@alfresco/adf-testing'; +import { LoginSSOPage, BrowserActions, Widget, ApplicationsUtil, ProcessUtil, ApiService } from '@alfresco/adf-testing'; import { TasksPage } from '../../pages/adf/process-services/tasks.page'; import CONSTANTS = require('../../util/constants'); import { browser } from 'protractor'; @@ -25,35 +24,34 @@ import { NavigationBarPage } from '../../pages/adf/navigation-bar.page'; describe('Dynamic Table widget ', () => { - const loginPage = new LoginPage(); + const loginPage = new LoginSSOPage(); const taskPage = new TasksPage(); const widget = new Widget(); - const users = new UsersActions(); const navigationBarPage = new NavigationBarPage(); - const alfrescoJsApi = new AlfrescoApi({ - provider: 'BPM', - hostBpm: browser.params.testConfig.adf_aps.host - }); + + const apiService = new ApiService(); + const usersActions = new UsersActions(apiService); + const applicationsService = new ApplicationsUtil(apiService); let processUserModel; let appModel; let deployedApp, process; describe('with Date Time Widget App', () => { + const app = browser.params.resources.Files.WIDGET_CHECK_APP.DYNAMIC_TABLE; beforeAll(async () => { - await alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); - processUserModel = await users.createTenantAndUser(alfrescoJsApi); + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); + processUserModel = await usersActions.createUser(); - await alfrescoJsApi.login(processUserModel.email, processUserModel.password); - const applicationsService = new ApplicationsUtil(alfrescoJsApi); + await apiService.getInstance().login(processUserModel.email, processUserModel.password); appModel = await applicationsService.importPublishDeployApp(browser.params.resources.Files.WIDGET_CHECK_APP.file_path); - const appDefinitions = await alfrescoJsApi.activiti.appsApi.getAppDefinitions(); + const appDefinitions = await apiService.getInstance().activiti.appsApi.getAppDefinitions(); deployedApp = appDefinitions.data.find((currentApp) => currentApp.modelId === appModel.id); - process = await new ProcessUtil(alfrescoJsApi).startProcessByDefinitionName(appModel.name, app.processName); - await loginPage.loginToProcessServicesUsingUserModel(processUserModel); + process = await new ProcessUtil(apiService).startProcessByDefinitionName(appModel.name, app.processName); + await loginPage.login(processUserModel.email, processUserModel.password); }); beforeEach(async () => { @@ -64,9 +62,9 @@ describe('Dynamic Table widget ', () => { }); 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); + await apiService.getInstance().activiti.processApi.deleteProcessInstance(process.id); + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); + await apiService.getInstance().activiti.adminTenantsApi.deleteTenant(processUserModel.tenantId); await navigationBarPage.clickLogoutButton(); }); @@ -93,23 +91,22 @@ describe('Dynamic Table widget ', () => { const app = browser.params.resources.Files.WIDGET_CHECK_APP.DYNAMIC_TABLE_USERS; beforeAll(async () => { - await alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); - processUserModel = await users.createTenantAndUser(alfrescoJsApi); + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); + processUserModel = await usersActions.createUser(); - await alfrescoJsApi.login(processUserModel.email, processUserModel.password); - const applicationsService = new ApplicationsUtil(alfrescoJsApi); + await apiService.getInstance().login(processUserModel.email, processUserModel.password); appModel = await applicationsService.importPublishDeployApp(browser.params.resources.Files.WIDGET_CHECK_APP.file_path); - const appDefinitions = await alfrescoJsApi.activiti.appsApi.getAppDefinitions(); + const appDefinitions = await apiService.getInstance().activiti.appsApi.getAppDefinitions(); deployedApp = appDefinitions.data.find((currentApp) => currentApp.modelId === appModel.id); - process = await new ProcessUtil(alfrescoJsApi).startProcessByDefinitionName(appModel.name, app.processName); - await loginPage.loginToProcessServicesUsingUserModel(processUserModel); + process = await new ProcessUtil(apiService).startProcessByDefinitionName(appModel.name, app.processName); + await loginPage.login(processUserModel.email, processUserModel.password); }); 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); + await apiService.getInstance().activiti.processApi.deleteProcessInstance(process.id); + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); + await apiService.getInstance().activiti.adminTenantsApi.deleteTenant(processUserModel.tenantId); await navigationBarPage.clickLogoutButton(); }); @@ -146,30 +143,28 @@ describe('Dynamic Table widget ', () => { }); describe('Custom validation', () => { - const app = browser.params.resources.Files.WIDGET_CHECK_APP; beforeAll(async () => { - await alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); - processUserModel = await users.createTenantAndUser(alfrescoJsApi); + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); + processUserModel = await usersActions.createUser(); - await alfrescoJsApi.login(processUserModel.email, processUserModel.password); - const applicationsService = new ApplicationsUtil(alfrescoJsApi); + await apiService.getInstance().login(processUserModel.email, processUserModel.password); const application = await applicationsService.importPublishDeployApp(app.file_path); - const appDefinitions = await alfrescoJsApi.activiti.appsApi.getAppDefinitions(); + const appDefinitions = await apiService.getInstance().activiti.appsApi.getAppDefinitions(); deployedApp = appDefinitions.data.find((currentApp) => currentApp.modelId === application.id); - process = await new ProcessUtil(alfrescoJsApi).startProcessByDefinitionName(application.name, app.CUSTOM_VALIDATOR.processName); + process = await new ProcessUtil(apiService).startProcessByDefinitionName(application.name, app.CUSTOM_VALIDATOR.processName); }); 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); + await apiService.getInstance().activiti.processApi.deleteProcessInstance(process.id); + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); + await apiService.getInstance().activiti.adminTenantsApi.deleteTenant(processUserModel.tenantId); }); beforeEach(async () => { - await loginPage.loginToProcessServicesUsingUserModel(processUserModel); + await loginPage.login(processUserModel.email, processUserModel.password); 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); diff --git a/e2e/process-services/widgets/header-widget.e2e.ts b/e2e/process-services/widgets/header-widget.e2e.ts index 8d48bf6230..56e97cbf8b 100644 --- a/e2e/process-services/widgets/header-widget.e2e.ts +++ b/e2e/process-services/widgets/header-widget.e2e.ts @@ -15,46 +15,42 @@ * limitations under the License. */ -import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; import { UsersActions } from '../../actions/users.actions'; -import { LoginPage, BrowserActions, Widget, ApplicationsUtil, ProcessUtil } from '@alfresco/adf-testing'; +import { LoginSSOPage, BrowserActions, Widget, ApplicationsUtil, ProcessUtil, ApiService } from '@alfresco/adf-testing'; import { TasksPage } from '../../pages/adf/process-services/tasks.page'; import CONSTANTS = require('../../util/constants'); import { browser } from 'protractor'; describe('Header widget', async () => { - const loginPage = new LoginPage(); - let processUserModel; + const app = browser.params.resources.Files.WIDGET_CHECK_APP.HEADER; + + const loginPage = new LoginSSOPage(); const taskPage = new TasksPage(); const widget = new Widget(); - let alfrescoJsApi; + + const apiService = new ApiService(); + const usersActions = new UsersActions(apiService); + const applicationsService = new ApplicationsUtil(apiService); + let appModel; - const app = browser.params.resources.Files.WIDGET_CHECK_APP.HEADER; let deployedApp, process; + let processUserModel; beforeAll(async () => { - const users = new UsersActions(); + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); - alfrescoJsApi = new AlfrescoApi({ - provider: 'BPM', - hostBpm: browser.params.testConfig.adf_aps.host - }); + processUserModel = await usersActions.createUser(); - await alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); + await apiService.getInstance().login(processUserModel.email, processUserModel.password); + appModel = await applicationsService.importPublishDeployApp(browser.params.resources.Files.WIDGET_CHECK_APP.file_path); - processUserModel = await users.createTenantAndUser(alfrescoJsApi); - - await alfrescoJsApi.login(processUserModel.email, processUserModel.password); - const applicationsService = new ApplicationsUtil(alfrescoJsApi); - appModel = await applicationsService.importPublishDeployApp(browser.params.resources.Files.WIDGET_CHECK_APP.file_path); - - const appDefinitions = await alfrescoJsApi.activiti.appsApi.getAppDefinitions(); - deployedApp = appDefinitions.data.find((currentApp) => { + const appDefinitions = await apiService.getInstance().activiti.appsApi.getAppDefinitions(); + deployedApp = appDefinitions.data.find((currentApp) => { return currentApp.modelId === appModel.id; }); - process = await new ProcessUtil(alfrescoJsApi).startProcessByDefinitionName(appModel.name, app.processName); - await loginPage.loginToProcessServicesUsingUserModel(processUserModel); + process = await new ProcessUtil(apiService).startProcessByDefinitionName(appModel.name, app.processName); + await loginPage.login(processUserModel.email, processUserModel.password); }); beforeEach(async () => { @@ -65,9 +61,9 @@ describe('Header widget', async () => { }); 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); + await apiService.getInstance().activiti.processApi.deleteProcessInstance(process.id); + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); + await apiService.getInstance().activiti.adminTenantsApi.deleteTenant(processUserModel.tenantId); }); it('[C276737] Should be able to set general and visibility properties for Header widget', async () => { diff --git a/e2e/process-services/widgets/hyperlink-widget.e2e.ts b/e2e/process-services/widgets/hyperlink-widget.e2e.ts index 24fd1f3b84..6df65c467b 100644 --- a/e2e/process-services/widgets/hyperlink-widget.e2e.ts +++ b/e2e/process-services/widgets/hyperlink-widget.e2e.ts @@ -15,46 +15,42 @@ * limitations under the License. */ -import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; import { UsersActions } from '../../actions/users.actions'; -import { LoginPage, BrowserActions, Widget, ApplicationsUtil, ProcessUtil } from '@alfresco/adf-testing'; +import { LoginSSOPage, BrowserActions, Widget, ApplicationsUtil, ProcessUtil, ApiService } from '@alfresco/adf-testing'; import { TasksPage } from '../../pages/adf/process-services/tasks.page'; import CONSTANTS = require('../../util/constants'); import { browser } from 'protractor'; describe('Hyperlink widget', () => { - const loginPage = new LoginPage(); - let processUserModel; + const app = browser.params.resources.Files.WIDGET_CHECK_APP.HYPERLINK; + + const loginPage = new LoginSSOPage(); const taskPage = new TasksPage(); const widget = new Widget(); - let alfrescoJsApi; + + const apiService = new ApiService(); + const usersActions = new UsersActions(apiService); + const applicationsService = new ApplicationsUtil(apiService); + let appModel; - const app = browser.params.resources.Files.WIDGET_CHECK_APP.HYPERLINK; + let processUserModel; let deployedApp, process; beforeAll(async () => { - const users = new UsersActions(); + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); - alfrescoJsApi = new AlfrescoApi({ - provider: 'BPM', - hostBpm: browser.params.testConfig.adf_aps.host - }); + processUserModel = await usersActions.createUser(); - await alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); + await apiService.getInstance().login(processUserModel.email, processUserModel.password); + appModel = await applicationsService.importPublishDeployApp(browser.params.resources.Files.WIDGET_CHECK_APP.file_path); - processUserModel = await users.createTenantAndUser(alfrescoJsApi); - - await alfrescoJsApi.login(processUserModel.email, processUserModel.password); - const applicationsService = new ApplicationsUtil(alfrescoJsApi); - appModel = await applicationsService.importPublishDeployApp(browser.params.resources.Files.WIDGET_CHECK_APP.file_path); - - const appDefinitions = await alfrescoJsApi.activiti.appsApi.getAppDefinitions(); - deployedApp = appDefinitions.data.find((currentApp) => { + const appDefinitions = await apiService.getInstance().activiti.appsApi.getAppDefinitions(); + deployedApp = appDefinitions.data.find((currentApp) => { return currentApp.modelId === appModel.id; }); - process = await new ProcessUtil(alfrescoJsApi).startProcessByDefinitionName(appModel.name, app.processName); - await loginPage.loginToProcessServicesUsingUserModel(processUserModel); + process = await new ProcessUtil(apiService).startProcessByDefinitionName(appModel.name, app.processName); + await loginPage.login(processUserModel.email, processUserModel.password); }); beforeEach(async () => { @@ -65,9 +61,9 @@ describe('Hyperlink widget', () => { }); 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); + await apiService.getInstance().activiti.processApi.deleteProcessInstance(process.id); + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); + await apiService.getInstance().activiti.adminTenantsApi.deleteTenant(processUserModel.tenantId); }); it('[C276728] Should be able to set visibility properties for Hyperlink widget', async () => { diff --git a/e2e/process-services/widgets/multi-line-widget.e2e.ts b/e2e/process-services/widgets/multi-line-widget.e2e.ts index a69a7fa219..d086081a1d 100644 --- a/e2e/process-services/widgets/multi-line-widget.e2e.ts +++ b/e2e/process-services/widgets/multi-line-widget.e2e.ts @@ -15,46 +15,41 @@ * limitations under the License. */ -import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; import { UsersActions } from '../../actions/users.actions'; -import { LoginPage, BrowserActions, Widget, ApplicationsUtil, ProcessUtil } from '@alfresco/adf-testing'; +import { LoginSSOPage, BrowserActions, Widget, ApplicationsUtil, ProcessUtil, ApiService } from '@alfresco/adf-testing'; import { TasksPage } from '../../pages/adf/process-services/tasks.page'; import CONSTANTS = require('../../util/constants'); import { browser } from 'protractor'; describe('Multi-line Widget', () => { + const app = browser.params.resources.Files.WIDGET_CHECK_APP.MULTILINE_TEXT; - const loginPage = new LoginPage(); - let processUserModel; + const loginPage = new LoginSSOPage(); const taskPage = new TasksPage(); const widget = new Widget(); - let alfrescoJsApi; + + const apiService = new ApiService(); + const usersActions = new UsersActions(apiService); + const applicationsService = new ApplicationsUtil(apiService); + let appModel; - const app = browser.params.resources.Files.WIDGET_CHECK_APP.MULTILINE_TEXT; + let processUserModel; let deployedApp, process; beforeAll(async () => { - const users = new UsersActions(); + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); - alfrescoJsApi = new AlfrescoApi({ - provider: 'BPM', - hostBpm: browser.params.testConfig.adf_aps.host - }); + processUserModel = await usersActions.createUser(); - await alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); + await apiService.getInstance().login(processUserModel.email, processUserModel.password); + appModel = await applicationsService.importPublishDeployApp(browser.params.resources.Files.WIDGET_CHECK_APP.file_path); - processUserModel = await users.createTenantAndUser(alfrescoJsApi); - - await alfrescoJsApi.login(processUserModel.email, processUserModel.password); - const applicationsService = new ApplicationsUtil(alfrescoJsApi); - appModel = await applicationsService.importPublishDeployApp(browser.params.resources.Files.WIDGET_CHECK_APP.file_path); - - const appDefinitions = await alfrescoJsApi.activiti.appsApi.getAppDefinitions(); - deployedApp = appDefinitions.data.find((currentApp) => { + const appDefinitions = await apiService.getInstance().activiti.appsApi.getAppDefinitions(); + deployedApp = appDefinitions.data.find((currentApp) => { return currentApp.modelId === appModel.id; }); - process = await new ProcessUtil(alfrescoJsApi).startProcessByDefinitionName(appModel.name, app.processName); - await loginPage.loginToProcessServicesUsingUserModel(processUserModel); + process = await new ProcessUtil(apiService).startProcessByDefinitionName(appModel.name, app.processName); + await loginPage.login(processUserModel.email, processUserModel.password); }); beforeEach(async () => { @@ -65,9 +60,9 @@ describe('Multi-line Widget', () => { }); 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); + await apiService.getInstance().activiti.processApi.deleteProcessInstance(process.id); + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); + await apiService.getInstance().activiti.adminTenantsApi.deleteTenant(processUserModel.tenantId); }); it('[C268182] Should be able to set general properties for Multi-line Text Widget', async () => { diff --git a/e2e/process-services/widgets/number-widget.e2e.ts b/e2e/process-services/widgets/number-widget.e2e.ts index 0411e6d811..22c14b7ef3 100644 --- a/e2e/process-services/widgets/number-widget.e2e.ts +++ b/e2e/process-services/widgets/number-widget.e2e.ts @@ -15,46 +15,42 @@ * limitations under the License. */ -import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; import { UsersActions } from '../../actions/users.actions'; -import { LoginPage, BrowserActions, Widget, ApplicationsUtil, ProcessUtil } from '@alfresco/adf-testing'; +import { LoginSSOPage, BrowserActions, Widget, ApplicationsUtil, ProcessUtil, ApiService } from '@alfresco/adf-testing'; import { TasksPage } from '../../pages/adf/process-services/tasks.page'; import CONSTANTS = require('../../util/constants'); import { browser } from 'protractor'; describe('Number widget', () => { - const loginPage = new LoginPage(); - let processUserModel; + const app = browser.params.resources.Files.WIDGET_CHECK_APP.NUMBER; + + const loginPage = new LoginSSOPage(); const taskPage = new TasksPage(); const widget = new Widget(); - let alfrescoJsApi; + + const apiService = new ApiService(); + const usersActions = new UsersActions(apiService); + const applicationsService = new ApplicationsUtil(apiService); + let appModel; - const app = browser.params.resources.Files.WIDGET_CHECK_APP.NUMBER; let deployedApp, process; + let processUserModel; beforeAll(async () => { - const users = new UsersActions(); + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); - alfrescoJsApi = new AlfrescoApi({ - provider: 'BPM', - hostBpm: browser.params.testConfig.adf_aps.host - }); + processUserModel = await usersActions.createUser(); - await alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); - - processUserModel = await users.createTenantAndUser(alfrescoJsApi); - - await alfrescoJsApi.login(processUserModel.email, processUserModel.password); - const applicationsService = new ApplicationsUtil(alfrescoJsApi); + await apiService.getInstance().login(processUserModel.email, processUserModel.password); appModel = await applicationsService.importPublishDeployApp(browser.params.resources.Files.WIDGET_CHECK_APP.file_path); - const appDefinitions = await alfrescoJsApi.activiti.appsApi.getAppDefinitions(); + const appDefinitions = await apiService.getInstance().activiti.appsApi.getAppDefinitions(); deployedApp = appDefinitions.data.find((currentApp) => { return currentApp.modelId === appModel.id; }); - process = await new ProcessUtil(alfrescoJsApi).startProcessByDefinitionName(appModel.name, app.processName); - await loginPage.loginToProcessServicesUsingUserModel(processUserModel); + process = await new ProcessUtil(apiService).startProcessByDefinitionName(appModel.name, app.processName); + await loginPage.login(processUserModel.email, processUserModel.password); }); beforeEach(async () => { @@ -65,9 +61,9 @@ describe('Number widget', () => { }); 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); + await apiService.getInstance().activiti.processApi.deleteProcessInstance(process.id); + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); + await apiService.getInstance().activiti.adminTenantsApi.deleteTenant(processUserModel.tenantId); }); it('[C269111] Should be able to set general properties for Number Widget', async () => { diff --git a/e2e/process-services/widgets/people-group-widget.e2e.ts b/e2e/process-services/widgets/people-group-widget.e2e.ts index bb601eb85e..ea7c2980ca 100644 --- a/e2e/process-services/widgets/people-group-widget.e2e.ts +++ b/e2e/process-services/widgets/people-group-widget.e2e.ts @@ -15,46 +15,38 @@ * limitations under the License. */ -import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; import { UsersActions } from '../../actions/users.actions'; -import { LoginPage, StringUtil, Widget, ApplicationsUtil } from '@alfresco/adf-testing'; +import { LoginSSOPage, Widget, ApplicationsUtil, ApiService, UserModel } from '@alfresco/adf-testing'; import { TasksPage } from '../../pages/adf/process-services/tasks.page'; import { browser } from 'protractor'; -import { User } from '../../models/APS/user'; import { NavigationBarPage } from '../../pages/adf/navigation-bar.page'; import CONSTANTS = require('../../util/constants'); describe('People and Group widget', () => { - const loginPage = new LoginPage(); + const app = browser.params.resources.Files.MORE_WIDGETS; + + const loginPage = new LoginSSOPage(); const taskPage = new TasksPage(); const navigationBarPage = new NavigationBarPage(); const widget = new Widget(); - const usersActions = new UsersActions(); - const alfrescoJsApi = new AlfrescoApi({ - provider: 'BPM', - hostBpm: browser.params.testConfig.adf_aps.host - }); - const app = browser.params.resources.Files.MORE_WIDGETS; - let user: User; + const apiService = new ApiService(); + const usersActions = new UsersActions(apiService); + const applicationsService = new ApplicationsUtil(apiService); + + let user: UserModel; beforeAll(async () => { - await alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); - user = await usersActions.createTenantAndUser(alfrescoJsApi); + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); + + user = await usersActions.createUser(); await createGroupAndUsers(user.tenantId); + await apiService.getInstance().login(user.email, user.password); - await alfrescoJsApi.login(user.email, user.password); - try { - const applicationsService = new ApplicationsUtil(alfrescoJsApi); - await applicationsService.importPublishDeployApp(app.file_path, { renewIdmEntries: true }); - } catch (e) { console.error('failed to deploy the application'); } - await loginPage.loginToProcessServicesUsingUserModel(user); - }); + await applicationsService.importPublishDeployApp(app.file_path, { renewIdmEntries: true }); - afterAll(async () => { - await alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); - await alfrescoJsApi.activiti.adminTenantsApi.deleteTenant(user.tenantId); + await loginPage.login(user.email, user.password); }); beforeEach(async () => { @@ -65,7 +57,7 @@ describe('People and Group widget', () => { it('[C275715] Add group widget - Visibility and group restriction', async () => { const name = 'group visibility task'; const groupVisibilityForm = app.ADD_GROUP_VISIBILITY; - await taskPage.createTask({name, formName: groupVisibilityForm.formName}); + await taskPage.createTask({ name, formName: groupVisibilityForm.formName }); await expect(await taskPage.taskDetails().getTitle()).toEqual('Activities'); await taskPage.formFields().checkWidgetIsHidden(groupVisibilityForm.FIELD.widget_id); @@ -75,7 +67,7 @@ describe('People and Group widget', () => { await widget.groupWidget().insertGroup(groupVisibilityForm.FIELD.widget_id, groupVisibilityForm.searchTerm); await widget.groupWidget().checkDropDownListIsDisplayed(); const suggestions = await widget.groupWidget().getDropDownList(); - await expect(suggestions.sort()).toEqual([ 'Heros', 'Users' ]); + await expect(suggestions.sort()).toEqual(['Heros', 'Users']); await widget.groupWidget().selectGroupFromDropDown('Users'); await taskPage.taskDetails().clickCompleteFormTask(); }); @@ -83,7 +75,7 @@ describe('People and Group widget', () => { it('[C275716] Add group widget - sub group restrictions', async () => { const name = 'group widget - subgroup restriction'; const subgroupFrom = app.ADD_GROUP_AND_SUBGROUP_RESTRICTION; - await taskPage.createTask({name, formName: subgroupFrom.formName}); + await taskPage.createTask({ name, formName: subgroupFrom.formName }); await expect(await taskPage.taskDetails().getTitle()).toEqual('Activities'); await taskPage.formFields().checkWidgetIsHidden(subgroupFrom.FIELD.widget_id); @@ -108,7 +100,7 @@ describe('People and Group widget', () => { it('[C275714] Add people widget - group restrictions', async () => { const name = 'people widget - group restrictions'; const peopleWidget = app.ADD_PEOPLE_AND_GROUP_RESTRICTION; - await taskPage.createTask({name, formName: peopleWidget.formName}); + await taskPage.createTask({ name, formName: peopleWidget.formName }); await expect(await taskPage.taskDetails().getTitle()).toEqual('Activities'); await taskPage.formFields().checkWidgetIsHidden(peopleWidget.FIELD.widget_id); @@ -123,23 +115,40 @@ describe('People and Group widget', () => { await taskPage.taskDetails().clickCompleteFormTask(); }); - async function createGroupAndUsers(tenantId) { - await alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); + async function createGroupAndUsers(tenantId: number) { + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); - try { - const happyUsers: any[] = await Promise.all(app.groupUser.map(happyUser => - usersActions.createApsUserWithName(alfrescoJsApi, tenantId, StringUtil.generateRandomString(), happyUser.firstName, happyUser.lastName))); - const subgroupUser = await usersActions.createApsUserWithName( - alfrescoJsApi, tenantId, StringUtil.generateRandomString(), app.subGroupUser.firstName, app.subGroupUser.lastName); + const userCreated = await Promise.all(app.groupUser.map(usersToCreate => + usersActions.createUser(new UserModel({ + tenantId: tenantId, + firstName: usersToCreate.firstName, + lastName: usersToCreate.lastName + })) + )); - const group = await alfrescoJsApi.activiti.adminGroupsApi.createNewGroup({ name: app.group.name, tenantId, type: 1 }); - await Promise.all(happyUsers.map(happyUser => alfrescoJsApi.activiti.adminGroupsApi.addGroupMember(group.id, happyUser.id))); + const subgroupUser = await usersActions.createUser(new UserModel({ + tenantId: tenantId, firstName: app.subGroupUser.firstName, lastName: app.subGroupUser.lastName + })); - const subgroups: any[] = await Promise.all(getSubGroupsName().map((name) => - alfrescoJsApi.activiti.adminGroupsApi.createNewGroup({ name, tenantId , type: 1, parentGroupId: group.id }))); - await Promise.all(subgroups.map((subgroup) => alfrescoJsApi.activiti.adminGroupsApi.addGroupMember(subgroup.id, subgroupUser.id))); + const group = await apiService.getInstance().activiti.adminGroupsApi.createNewGroup({ + name: app.group.name, + tenantId, + type: 1 + }); + + await Promise.all(userCreated.map((userToAddGroup: UserModel) => apiService.getInstance().activiti.adminGroupsApi.addGroupMember(group.id, userToAddGroup.id))); + + const subgroups: any[] = await Promise.all(getSubGroupsName().map((name) => + apiService.getInstance().activiti.adminGroupsApi.createNewGroup({ + name, + tenantId, + type: 1, + parentGroupId: group.id + }) + )); + + await Promise.all(subgroups.map((subgroup) => apiService.getInstance().activiti.adminGroupsApi.addGroupMember(subgroup.id, subgroupUser.id))); - } catch (e) {} } function getSubGroupsName() { diff --git a/e2e/process-services/widgets/people-widget.e2e.ts b/e2e/process-services/widgets/people-widget.e2e.ts index 15e5ccc917..3b3338c768 100644 --- a/e2e/process-services/widgets/people-widget.e2e.ts +++ b/e2e/process-services/widgets/people-widget.e2e.ts @@ -15,46 +15,42 @@ * limitations under the License. */ -import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; import { UsersActions } from '../../actions/users.actions'; -import { LoginPage, BrowserActions, Widget, ApplicationsUtil, ProcessUtil } from '@alfresco/adf-testing'; +import { LoginSSOPage, BrowserActions, Widget, ApplicationsUtil, ProcessUtil, ApiService } from '@alfresco/adf-testing'; import { TasksPage } from '../../pages/adf/process-services/tasks.page'; import CONSTANTS = require('../../util/constants'); import { browser } from 'protractor'; describe('People widget', () => { - const loginPage = new LoginPage(); - let processUserModel; + const app = browser.params.resources.Files.WIDGET_CHECK_APP.ADD_PEOPLE; + + const loginPage = new LoginSSOPage(); const taskPage = new TasksPage(); const widget = new Widget(); - let alfrescoJsApi; + + const apiService = new ApiService(); + const usersActions = new UsersActions(apiService); + const applicationsService = new ApplicationsUtil(apiService); + let appModel; - const app = browser.params.resources.Files.WIDGET_CHECK_APP.ADD_PEOPLE; let deployedApp, process; + let processUserModel; beforeAll(async () => { - const users = new UsersActions(); + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); - alfrescoJsApi = new AlfrescoApi({ - provider: 'BPM', - hostBpm: browser.params.testConfig.adf_aps.host - }); + processUserModel = await usersActions.createUser(); - await alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); + await apiService.getInstance().login(processUserModel.email, processUserModel.password); + appModel = await applicationsService.importPublishDeployApp(browser.params.resources.Files.WIDGET_CHECK_APP.file_path); - processUserModel = await users.createTenantAndUser(alfrescoJsApi); - - await alfrescoJsApi.login(processUserModel.email, processUserModel.password); - const applicationsService = new ApplicationsUtil(alfrescoJsApi); - appModel = await applicationsService.importPublishDeployApp(browser.params.resources.Files.WIDGET_CHECK_APP.file_path); - - const appDefinitions = await alfrescoJsApi.activiti.appsApi.getAppDefinitions(); - deployedApp = appDefinitions.data.find((currentApp) => { + const appDefinitions = await apiService.getInstance().activiti.appsApi.getAppDefinitions(); + deployedApp = appDefinitions.data.find((currentApp) => { return currentApp.modelId === appModel.id; }); - process = await new ProcessUtil(alfrescoJsApi).startProcessOfApp(appModel.name, app.processName); - await loginPage.loginToProcessServicesUsingUserModel(processUserModel); + process = await new ProcessUtil(apiService).startProcessOfApp(appModel.name, app.processName); + await loginPage.login(processUserModel.email, processUserModel.password); }); beforeEach(async () => { @@ -65,9 +61,9 @@ describe('People widget', () => { }); 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); + await apiService.getInstance().activiti.processApi.deleteProcessInstance(process.id); + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); + await apiService.getInstance().activiti.adminTenantsApi.deleteTenant(processUserModel.tenantId); }); it('[C260435][C274707] Should be possible to set visibility properties for People Widget', async () => { diff --git a/e2e/process-services/widgets/radio-buttons-widget.e2e.ts b/e2e/process-services/widgets/radio-buttons-widget.e2e.ts index fd28304621..71271aa6d0 100644 --- a/e2e/process-services/widgets/radio-buttons-widget.e2e.ts +++ b/e2e/process-services/widgets/radio-buttons-widget.e2e.ts @@ -15,47 +15,43 @@ * limitations under the License. */ -import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; import { UsersActions } from '../../actions/users.actions'; -import { LoginPage, BrowserActions, Widget, ApplicationsUtil, ProcessUtil } from '@alfresco/adf-testing'; +import { LoginSSOPage, BrowserActions, Widget, ApplicationsUtil, ProcessUtil, ApiService } from '@alfresco/adf-testing'; import { TasksPage } from '../../pages/adf/process-services/tasks.page'; import CONSTANTS = require('../../util/constants'); import { browser } from 'protractor'; describe('Radio Buttons Widget', () => { - const loginPage = new LoginPage(); - let processUserModel; + const app = browser.params.resources.Files.WIDGET_CHECK_APP.RADIO_BUTTONS; + + const loginPage = new LoginSSOPage(); const taskPage = new TasksPage(); const widget = new Widget(); - let alfrescoJsApi; + + const apiService = new ApiService(); + const usersActions = new UsersActions(apiService); + const applicationsService = new ApplicationsUtil(apiService); + let appModel; - const app = browser.params.resources.Files.WIDGET_CHECK_APP.RADIO_BUTTONS; let deployedApp, process; + let processUserModel; beforeAll(async () => { - const users = new UsersActions(); + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); - alfrescoJsApi = new AlfrescoApi({ - provider: 'BPM', - hostBpm: browser.params.testConfig.adf_aps.host - }); + processUserModel = await usersActions.createUser(); - await alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); + await apiService.getInstance().login(processUserModel.email, processUserModel.password); + appModel = await applicationsService.importPublishDeployApp(browser.params.resources.Files.WIDGET_CHECK_APP.file_path); - processUserModel = await users.createTenantAndUser(alfrescoJsApi); - - await alfrescoJsApi.login(processUserModel.email, processUserModel.password); - const applicationsService = new ApplicationsUtil(alfrescoJsApi); - appModel = await applicationsService.importPublishDeployApp(browser.params.resources.Files.WIDGET_CHECK_APP.file_path); - - const appDefinitions = await alfrescoJsApi.activiti.appsApi.getAppDefinitions(); - deployedApp = appDefinitions.data.find((currentApp) => { + const appDefinitions = await apiService.getInstance().activiti.appsApi.getAppDefinitions(); + deployedApp = appDefinitions.data.find((currentApp) => { return currentApp.modelId === appModel.id; }); - process = await new ProcessUtil(alfrescoJsApi).startProcessByDefinitionName(appModel.name, app.processName); - await loginPage.loginToProcessServicesUsingUserModel(processUserModel); + process = await new ProcessUtil(apiService).startProcessByDefinitionName(appModel.name, app.processName); + await loginPage.login(processUserModel.email, processUserModel.password); }); beforeEach(async () => { @@ -66,9 +62,9 @@ describe('Radio Buttons Widget', () => { }); 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); + await apiService.getInstance().activiti.processApi.deleteProcessInstance(process.id); + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); + await apiService.getInstance().activiti.adminTenantsApi.deleteTenant(processUserModel.tenantId); }); it('[C277316] Should display empty radio buttons when no preselection is configured', async () => { diff --git a/e2e/process-services/widgets/text-widget.e2e.ts b/e2e/process-services/widgets/text-widget.e2e.ts index 70dc59c2cc..fc35f2ac58 100644 --- a/e2e/process-services/widgets/text-widget.e2e.ts +++ b/e2e/process-services/widgets/text-widget.e2e.ts @@ -15,46 +15,42 @@ * limitations under the License. */ -import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; import { UsersActions } from '../../actions/users.actions'; -import { LoginPage, BrowserActions, Widget, ApplicationsUtil, ProcessUtil } from '@alfresco/adf-testing'; +import { LoginSSOPage, BrowserActions, Widget, ApplicationsUtil, ProcessUtil, ApiService } from '@alfresco/adf-testing'; import { TasksPage } from '../../pages/adf/process-services/tasks.page'; import CONSTANTS = require('../../util/constants'); import { browser } from 'protractor'; describe('Text widget', () => { - const loginPage = new LoginPage(); - let processUserModel; + const app = browser.params.resources.Files.WIDGET_CHECK_APP.TEXT; + + const loginPage = new LoginSSOPage(); const taskPage = new TasksPage(); const widget = new Widget(); - let alfrescoJsApi; + + const apiService = new ApiService(); + const usersActions = new UsersActions(apiService); + const applicationsService = new ApplicationsUtil(apiService); + let appModel; - const app = browser.params.resources.Files.WIDGET_CHECK_APP.TEXT; let deployedApp, process; + let processUserModel; beforeAll(async () => { - const users = new UsersActions(); + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); - alfrescoJsApi = new AlfrescoApi({ - provider: 'BPM', - hostBpm: browser.params.testConfig.adf_aps.host - }); + processUserModel = await usersActions.createUser(); - await alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); + await apiService.getInstance().login(processUserModel.email, processUserModel.password); + appModel = await applicationsService.importPublishDeployApp(browser.params.resources.Files.WIDGET_CHECK_APP.file_path); - processUserModel = await users.createTenantAndUser(alfrescoJsApi); - - await alfrescoJsApi.login(processUserModel.email, processUserModel.password); - const applicationsService = new ApplicationsUtil(alfrescoJsApi); - appModel = await applicationsService.importPublishDeployApp(browser.params.resources.Files.WIDGET_CHECK_APP.file_path); - - const appDefinitions = await alfrescoJsApi.activiti.appsApi.getAppDefinitions(); - deployedApp = appDefinitions.data.find((currentApp) => { + const appDefinitions = await apiService.getInstance().activiti.appsApi.getAppDefinitions(); + deployedApp = appDefinitions.data.find((currentApp) => { return currentApp.modelId === appModel.id; }); - process = await new ProcessUtil(alfrescoJsApi).startProcessByDefinitionName(appModel.name, app.processName); - await loginPage.loginToProcessServicesUsingUserModel(processUserModel); + process = await new ProcessUtil(apiService).startProcessByDefinitionName(appModel.name, app.processName); + await loginPage.login(processUserModel.email, processUserModel.password); }); beforeEach(async () => { @@ -65,9 +61,9 @@ describe('Text widget', () => { }); 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); + await apiService.getInstance().activiti.processApi.deleteProcessInstance(process.id); + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); + await apiService.getInstance().activiti.adminTenantsApi.deleteTenant(processUserModel.tenantId); }); it('[C268157] Should be able to set general properties for Text widget', async () => { diff --git a/e2e/process-services/widgets/typeahead-widget.e2e.ts b/e2e/process-services/widgets/typeahead-widget.e2e.ts index bf5a483061..d08de5c7b7 100644 --- a/e2e/process-services/widgets/typeahead-widget.e2e.ts +++ b/e2e/process-services/widgets/typeahead-widget.e2e.ts @@ -15,43 +15,40 @@ * limitations under the License. */ -import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; import { UsersActions } from '../../actions/users.actions'; -import { LoginPage, Widget, ApplicationsUtil } from '@alfresco/adf-testing'; +import { LoginSSOPage, Widget, ApplicationsUtil, ApiService, UserModel } from '@alfresco/adf-testing'; import { TasksPage } from '../../pages/adf/process-services/tasks.page'; import { browser } from 'protractor'; -import { User } from '../../models/APS/user'; import { NavigationBarPage } from '../../pages/adf/navigation-bar.page'; import CONSTANTS = require('../../util/constants'); describe('Typeahead widget', () => { - const loginPage = new LoginPage(); + const app = browser.params.resources.Files.WIDGET_CHECK_APP; + + const loginPage = new LoginSSOPage(); const taskPage = new TasksPage(); const navigationBarPage = new NavigationBarPage(); const widget = new Widget(); - const usersActions = new UsersActions(); - const alfrescoJsApi = new AlfrescoApi({ - provider: 'BPM', - hostBpm: browser.params.testConfig.adf_aps.host - }); - const app = browser.params.resources.Files.WIDGET_CHECK_APP; - let user: User; + const apiService = new ApiService(); + const usersActions = new UsersActions(apiService); + const applicationsService = new ApplicationsUtil(apiService); + + let user: UserModel; beforeAll(async () => { - await alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); - user = await usersActions.createTenantAndUser(alfrescoJsApi); + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); + user = await usersActions.createUser(); - await alfrescoJsApi.login(user.email, user.password); - const applicationsService = new ApplicationsUtil(alfrescoJsApi); + await apiService.getInstance().login(user.email, user.password); await applicationsService.importPublishDeployApp(app.file_path, { renewIdmEntries: true }); - await loginPage.loginToProcessServicesUsingUserModel(user); + await loginPage.login(user.email, user.password); }); afterAll(async () => { - await alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); - await alfrescoJsApi.activiti.adminTenantsApi.deleteTenant(user.tenantId); + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); + await apiService.getInstance().activiti.adminTenantsApi.deleteTenant(user.tenantId); }); beforeEach(async () => { diff --git a/e2e/process-services/widgets/widget-visibility-condition.e2e.ts b/e2e/process-services/widgets/widget-visibility-condition.e2e.ts index b3b8052392..0b836b6f45 100644 --- a/e2e/process-services/widgets/widget-visibility-condition.e2e.ts +++ b/e2e/process-services/widgets/widget-visibility-condition.e2e.ts @@ -15,8 +15,7 @@ * limitations under the License. */ -import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; -import { LoginPage, Widget, BrowserActions, ApplicationsUtil, ProcessUtil } from '@alfresco/adf-testing'; +import { LoginSSOPage, Widget, BrowserActions, ApplicationsUtil, ProcessUtil, ApiService } from '@alfresco/adf-testing'; import { browser } from 'protractor'; import { UsersActions } from '../../actions/users.actions'; import CONSTANTS = require('../../util/constants'); @@ -46,38 +45,34 @@ const checkbox = { describe('Process-Services - Visibility conditions', () => { - const loginPage = new LoginPage(); + const app = browser.params.resources.Files.WIDGET_CHECK_APP.VISIBILITY; - let processUserModel; + const loginPage = new LoginSSOPage(); const taskPage = new TasksPage(); const widget = new Widget(); - let alfrescoJsApi; + + const apiService = new ApiService(); + const usersActions = new UsersActions(apiService); + const applicationsService = new ApplicationsUtil(apiService); + let appModel; - const app = browser.params.resources.Files.WIDGET_CHECK_APP.VISIBILITY; let deployedApp, process; + let processUserModel; beforeAll(async () => { - const users = new UsersActions(); + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); - alfrescoJsApi = new AlfrescoApi({ - provider: 'BPM', - hostBpm: browser.params.testConfig.adf_aps.host - }); + processUserModel = await usersActions.createUser(); - await alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); + await apiService.getInstance().login(processUserModel.email, processUserModel.password); + appModel = await applicationsService.importPublishDeployApp(browser.params.resources.Files.WIDGET_CHECK_APP.file_path); - processUserModel = await users.createTenantAndUser(alfrescoJsApi); - - await alfrescoJsApi.login(processUserModel.email, processUserModel.password); - const applicationsService = new ApplicationsUtil(alfrescoJsApi); - appModel = await applicationsService.importPublishDeployApp(browser.params.resources.Files.WIDGET_CHECK_APP.file_path); - - const appDefinitions = await alfrescoJsApi.activiti.appsApi.getAppDefinitions(); - deployedApp = appDefinitions.data.find((currentApp) => { + const appDefinitions = await apiService.getInstance().activiti.appsApi.getAppDefinitions(); + deployedApp = appDefinitions.data.find((currentApp) => { return currentApp.modelId === appModel.id; }); - process = await new ProcessUtil(alfrescoJsApi).startProcessByDefinitionName(appModel.name, app.processName); - await loginPage.loginToProcessServicesUsingUserModel(processUserModel); + process = await new ProcessUtil(apiService).startProcessByDefinitionName(appModel.name, app.processName); + await loginPage.login(processUserModel.email, processUserModel.password); }); beforeEach(async () => { @@ -88,9 +83,9 @@ describe('Process-Services - Visibility conditions', () => { }); 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); + await apiService.getInstance().activiti.processApi.deleteProcessInstance(process.id); + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); + await apiService.getInstance().activiti.adminTenantsApi.deleteTenant(processUserModel.tenantId); }); it('[C309647] Should be able to see Checkbox widget when visibility condition refers to another field with specific value', async () => { @@ -101,7 +96,6 @@ describe('Process-Services - Visibility conditions', () => { }); it('[C309648] Should be able to see Checkbox widget when visibility condition refers to a form variable and a field', async () => { - await widget.textWidget().isWidgetVisible(widgets.textOneId); await widget.checkboxWidget().isCheckboxHidden(checkbox.checkboxVariableField); @@ -113,7 +107,6 @@ describe('Process-Services - Visibility conditions', () => { }); it('[C309649] Should be able to see Checkbox widget when visibility condition refers to a field and a form variable', async () => { - await widget.textWidget().isWidgetVisible(widgets.textOneId); await widget.checkboxWidget().isCheckboxHidden(checkbox.checkboxFieldVariable); @@ -125,7 +118,6 @@ describe('Process-Services - Visibility conditions', () => { }); it('[C311425] Should be able to see Checkbox widget when visibility condition refers to a field and another field', async () => { - await widget.textWidget().isWidgetVisible(widgets.textOneId); await widget.checkboxWidget().isCheckboxDisplayed(checkbox.checkboxFieldField); await widget.textWidget().setValue(widgets.textOneId, value.displayCheckbox); diff --git a/e2e/protractor/save-remote.js b/e2e/protractor/save-remote.js index 751bd8f87e..e74bf7be66 100644 --- a/e2e/protractor/save-remote.js +++ b/e2e/protractor/save-remote.js @@ -14,7 +14,7 @@ function buildNumber() { return process.env.TRAVIS_BUILD_NUMBER; } -async function uploadScreenshot(alfrescoJsApi, retryCount) { +async function uploadScreenshot(retryCount) { let files = fs.readdirSync(path.join(__dirname, '../../e2e-output/screenshots')); if (files && files.length > 0) { @@ -49,22 +49,25 @@ async function uploadScreenshot(alfrescoJsApi, retryCount) { let pathFile = path.join(__dirname, '../../e2e-output/screenshots', fileName); let file = fs.createReadStream(pathFile); - let safeFileName = fileName.replace(new RegExp('"', 'g'), ''); + let safeFileName = fileName.match(/\[(.*?)\]/); - try { - await alfrescoJsApi.upload.uploadFile( - file, - '', - folder.entry.id, - null, - { - 'name': safeFileName, - 'nodeType': 'cm:content', - 'autoRename': true - } - ); - } catch (error) { - console.log(error); + if (safeFileName) { + const safeFileNameMatch = `${safeFileName[1]}.png`; + try { + await alfrescoJsApi.upload.uploadFile( + file, + '', + folder.entry.id, + null, + { + 'name': safeFileNameMatch, + 'nodeType': 'cm:content', + 'autoRename': true + } + ); + } catch (error) { + console.log(error); + } } } } diff --git a/e2e/resources/forms/custom-date-form.ts b/e2e/resources/forms/custom-date-form.ts index 7d671725ee..fcd0ccaf81 100644 --- a/e2e/resources/forms/custom-date-form.ts +++ b/e2e/resources/forms/custom-date-form.ts @@ -171,8 +171,7 @@ export const customDateFormAPS2 = `{ ], "metadata":{ - - }, + }, "variables":[ ] diff --git a/e2e/restAPI/ACS/PeopleAPI.js b/e2e/restAPI/ACS/PeopleAPI.js deleted file mode 100644 index e23f276908..0000000000 --- a/e2e/restAPI/ACS/PeopleAPI.js +++ /dev/null @@ -1,133 +0,0 @@ -/*! - * @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. - */ - -var exports = module.exports = {}; -var request = require('request'); -var RequestCoreAPI = require('./RequestUtil/RequestCoreAPI'); -var url = require('url-join'); -var path = require('path'); -var fs = require('fs'); -var TestConfig = require('../../test.config'); - -var peopleBaseUrl = 'people'; - -function read(initialFile) { - return new Promise(function (resolve, reject) { - fs.readFile(initialFile, function (err, file) { - if (err) { - //console.log('read error', err); - reject(err); - } - - // console.log('read success', file); - resolve(file); - }) - }) -} - -function write(file, uri, header) { - return new Promise(function (resolve, reject) { - request.put({url: uri, headers: header, body: file}, function (err, httpResponse, body) { - if (err) { - console.error('updated failed:', err); - reject(err); - } - var json_data = JSON.parse(body); - - // console.log('write success', json_data); - resolve(body); - }); - }); -} - -/** - * Update avatar using API - * - * @param requestUserModel {User that makes the request} - * @param fileModel - * @param personId - * @method updateAvatarViaAPI - */ -exports.updateAvatarViaAPI = function (requestUserModel, fileModel, personId) { - - var absolutePath = path.resolve(path.join(browser.params.testConfig.main.rootPath, fileModel.getLocation())); - var uri = url(RequestCoreAPI.getBaseURL(), peopleBaseUrl, personId, "avatar"); - // console.debug("Update avatar via API: fileName=" + fileModel.getName() + " uri=" + uri + " auth=" + requestUserModel.id + " password: " + requestUserModel.password); - - var allHeaders = RequestCoreAPI.requestHeaders(requestUserModel); - allHeaders['Content-Type'] = 'application/octet-stream'; - - return read(absolutePath) - .then(function (file) { - return write(file, uri, allHeaders); - }); -}; - -/** - * Get avatar using API - * - * @param requestUserModel {User that makes the request} - * @param personId - * @method getAvatarViaAPIWithRetry - */ -exports.getAvatarViaAPI = function (retry, requestUserModel, personId, callback) { - var uri = url(RequestCoreAPI.getBaseURL(), peopleBaseUrl, personId, "avatar"); - - // console.debug("Get avatar via API: uri= " + uri + " auth=" + requestUserModel.id + " password: " + requestUserModel.password); - - function run() { - request.get({ - url: uri, - headers: RequestCoreAPI.requestHeaders(requestUserModel) - }, function (error, httpResponse, body) { - retry--; - var statusCode = httpResponse.statusCode; - // console.log("status code: " + statusCode); - if (statusCode != "200" && retry > 0) { - run(); - } - else if (typeof callback === 'function') { - callback.apply(null); - } - }); - } - - run(); -}; - -/** - * Delete avatar using API - * - * @param requestUserModel {User that makes the request} - * @param personId - * @param callback - */ -exports.deleteAvatarViaAPI = function (requestUserModel, personId, callback) { - - var uri = url(RequestCoreAPI.getBaseURL(), peopleBaseUrl, personId, "avatar"); - - request.del({url: uri, headers: RequestCoreAPI.requestHeaders(requestUserModel)}, function (error, response, body) { - if (error) { - return console.error('delete failed:', error); - } - // console.debug("Avatar deleted via API: " + " uri=" + uri + " auth=" + requestUserModel.id + " password: " + requestUserModel.password); - - if (typeof callback === 'function') { - callback.apply(null); - } - }); -}; diff --git a/e2e/restAPI/ACS/RequestUtil/RequestCoreAPI.js b/e2e/restAPI/ACS/RequestUtil/RequestCoreAPI.js deleted file mode 100644 index 0b2cad0c76..0000000000 --- a/e2e/restAPI/ACS/RequestUtil/RequestCoreAPI.js +++ /dev/null @@ -1,32 +0,0 @@ -/*! - * @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. - */ - -var url = require('url-join'); -var APIUtils = require('../../../restAPI/APIUtil'); -var CONSTANTS = require('../../../util/constants'); - -var ACMBaseURL = '/alfresco/versions/1'; - -exports.getBaseURL = function () { - return url(new APIUtils().getBaseURL(CONSTANTS.APPLICATION.ADF_ACS), ACMBaseURL); -}; - -exports.requestHeaders = function (auth) { - return { - 'Authorization': new APIUtils().getAuthorization(auth.id, auth.password) - }; -}; diff --git a/e2e/restAPI/APIUtil.js b/e2e/restAPI/APIUtil.js deleted file mode 100644 index c921f1eb2b..0000000000 --- a/e2e/restAPI/APIUtil.js +++ /dev/null @@ -1,60 +0,0 @@ -/*! - * @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. - */ - -var url = require('url-join'); -var TestConfig = require('../test.config'); - -var APIUtils = function () { - /** - * Return Basic authorization - * - * @param user - * @param password - * @returns Basic authorization - */ - this.getAuthorization = function (user, password) { - return 'Basic ' + Buffer.from(user + ':' + password).toString('base64'); - }; - - /**
 - * Return any application base URL
 - * ://:/
 - * - * @param application - any application declared in config file: main or adf
 - * @param urlComponentsParam - Object with details required to define the baseURL
 - * {
 - * protocol: "http",
 - * hostname: "localhost",
 - * port: "8080"
 - * }
 - * If urlComponents empty {}, the default test configuration values are set
 - */ - this.getBaseURL = function (application, urlComponentsParam) { - var urlComponents = {}; - urlComponents.hostname = TestConfig[application].host; - urlComponents.port = TestConfig[application].port; - urlComponents.path = TestConfig[application].apiContextRoot; - Object.assign(urlComponents, urlComponentsParam); - - return url(urlComponents.hostname - + (urlComponents.port !== "" ? ":" + urlComponents.port : ""), - urlComponents.path); - }; - -}; - -module.exports = APIUtils; diff --git a/e2e/restAPI/httpRequest/BasicAuthorization.js b/e2e/restAPI/httpRequest/BasicAuthorization.js deleted file mode 100644 index 3338c57ff6..0000000000 --- a/e2e/restAPI/httpRequest/BasicAuthorization.js +++ /dev/null @@ -1,27 +0,0 @@ -/*! - * @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. - */ - -var BasicAuthorization = function (user, password) { - this.user = user; - this.password = password; - - this.displayCredentials = function () { - // console.info("Basic Authorization: " + user + "(" + password + ")"); - } -}; - -module.exports = BasicAuthorization; diff --git a/e2e/restAPI/httpRequest/HTTPRequestBase.js b/e2e/restAPI/httpRequest/HTTPRequestBase.js deleted file mode 100644 index a381700fe2..0000000000 --- a/e2e/restAPI/httpRequest/HTTPRequestBase.js +++ /dev/null @@ -1,32 +0,0 @@ -/*! - * @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. - */ - -var HTTPRequestBase = function(host, rootPath, requestMethod, uri, dataSet, port) { - this.host = host; - - if (!port) { - port = ""; - } - - this.port = port; - this.rootPath = rootPath; - this.requestMethod = requestMethod; - this.uri = uri; - this.dataSet = dataSet; -}; - -module.exports = HTTPRequestBase; diff --git a/e2e/restAPI/httpRequest/HTTPRequestPublic.js b/e2e/restAPI/httpRequest/HTTPRequestPublic.js deleted file mode 100644 index 535ab6dc8c..0000000000 --- a/e2e/restAPI/httpRequest/HTTPRequestPublic.js +++ /dev/null @@ -1,22 +0,0 @@ -/*! - * @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. - */ - -var HTTPRequestPublic = function(authorization) { - this.authorization = authorization; -}; - -module.exports = HTTPRequestPublic; diff --git a/e2e/search/components/search-check-list.e2e.ts b/e2e/search/components/search-check-list.e2e.ts index cc8780509d..8be362bccc 100644 --- a/e2e/search/components/search-check-list.e2e.ts +++ b/e2e/search/components/search-check-list.e2e.ts @@ -15,30 +15,36 @@ * limitations under the License. */ -import { LoginPage, BrowserActions, UploadActions, StringUtil, LocalStorageUtil } from '@alfresco/adf-testing'; +import { + LoginSSOPage, + BrowserActions, + UploadActions, + StringUtil, + LocalStorageUtil, + ApiService, + UserModel +} from '@alfresco/adf-testing'; import { SearchResultsPage } from '../../pages/adf/search-results.page'; import { SearchFiltersPage } from '../../pages/adf/search-filters.page'; import { SearchDialogPage } from '../../pages/adf/dialog/search-dialog.page'; import { NavigationBarPage } from '../../pages/adf/navigation-bar.page'; -import { AcsUserModel } from '../../models/ACS/acs-user.model'; import { SearchConfiguration } from '../search.config'; -import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; import { browser } from 'protractor'; +import { UsersActions } from '../../actions/users.actions'; describe('Search Checklist Component', () => { - const loginPage = new LoginPage(); + const loginPage = new LoginSSOPage(); const searchFiltersPage = new SearchFiltersPage(); const searchDialog = new SearchDialogPage(); const searchResults = new SearchResultsPage(); const navigationBarPage = new NavigationBarPage(); - const acsUser = new AcsUserModel(); - this.alfrescoJsApi = new AlfrescoApi({ - provider: 'ECM', - hostEcm: browser.params.testConfig.adf_acs.host - }); - const uploadActions = new UploadActions(this.alfrescoJsApi); + const acsUser = new UserModel(); + const apiService = new ApiService(); + + const uploadActions = new UploadActions(apiService); + const usersActions = new UsersActions(apiService); const filterType = { folder: 'Folder', @@ -55,19 +61,25 @@ describe('Search Checklist Component', () => { let createdFile, createdFolder; beforeAll(async () => { - await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); - await this.alfrescoJsApi.core.peopleApi.addPerson(acsUser); + await usersActions.createUser(acsUser); - await this.alfrescoJsApi.login(acsUser.id, acsUser.password); + await apiService.getInstance().login(acsUser.email, acsUser.password); - 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' }); + createdFolder = await apiService.getInstance().nodes.addNode('-my-', { + name: nodeNames.folder, + nodeType: 'cm:folder' + }); + createdFile = await apiService.getInstance().nodes.addNode('-my-', { + name: nodeNames.document, + nodeType: 'cm:content' + }); await browser.sleep(15000); - await loginPage.loginToContentServicesUsingUserModel(acsUser); - }); + await loginPage.login(acsUser.email, acsUser.password); + }); beforeEach(async () => { await navigationBarPage.clickContentServicesButton(); @@ -75,15 +87,15 @@ describe('Search Checklist Component', () => { }); afterAll(async () => { - await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); await uploadActions.deleteFileOrFolder(createdFile.entry.id); await uploadActions.deleteFileOrFolder(createdFolder.entry.id); await navigationBarPage.clickLogoutButton(); - }); + }); - it('[C276991] Should be able to click between options and Clear All button', async() => { + it('[C276991] Should be able to click between options and Clear All button', async () => { await searchFiltersPage.checkCheckListFilterIsDisplayed(); await searchFiltersPage.checkCheckListFilterIsCollapsed(); await searchFiltersPage.clickCheckListFilter(); @@ -271,10 +283,9 @@ describe('Search Checklist Component', () => { await searchFiltersPage.checkListFiltersPage().checkShowMoreButtonIsNotDisplayed(); await searchFiltersPage.checkListFiltersPage().checkShowLessButtonIsDisplayed(); }); - }); + }); describe('Properties', () => { - let jsonFile; beforeEach(() => { @@ -282,7 +293,7 @@ describe('Search Checklist Component', () => { }); beforeAll(async () => { - await loginPage.loginToContentServicesUsingUserModel(acsUser); + await loginPage.login(acsUser.email, acsUser.password); }); it('[C277018] Should be able to change the operator', async () => { diff --git a/e2e/search/components/search-date-range.e2e.ts b/e2e/search/components/search-date-range.e2e.ts index 9a973371c2..46a19792b9 100644 --- a/e2e/search/components/search-date-range.e2e.ts +++ b/e2e/search/components/search-date-range.e2e.ts @@ -15,8 +15,7 @@ * limitations under the License. */ -import { DataTableComponentPage, DatePickerCalendarPage, DateUtil, LocalStorageUtil, LoginPage } from '@alfresco/adf-testing'; -import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; +import { DataTableComponentPage, DatePickerCalendarPage, DateUtil, LocalStorageUtil, LoginSSOPage } from '@alfresco/adf-testing'; import { browser } from 'protractor'; import { SearchDialogPage } from '../../pages/adf/dialog/search-dialog.page'; import { NavigationBarPage } from '../../pages/adf/navigation-bar.page'; @@ -26,7 +25,7 @@ import { SearchConfiguration } from '../search.config'; describe('Search Date Range Filter', () => { - const loginPage = new LoginPage(); + const loginPage = new LoginSSOPage(); const searchDialog = new SearchDialogPage(); const searchFilters = new SearchFiltersPage(); const dateRangeFilter = searchFilters.createdDateRangeFilterPage(); @@ -36,13 +35,7 @@ describe('Search Date Range Filter', () => { const dataTable = new DataTableComponentPage(); beforeAll(async () => { - - this.alfrescoJsApi = new AlfrescoApi({ - provider: 'ECM', - hostEcm: browser.params.testConfig.adf_acs.host - }); - - await loginPage.loginToContentServices(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); + await loginPage.login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); await searchDialog.checkSearchIconIsVisible(); await searchDialog.clickOnSearchIcon(); @@ -130,12 +123,11 @@ describe('Search Date Range Filter', () => { const results: any = dataTable.geCellElementDetail('Created'); for (const currentResult of results) { + const currentDate = currentResult.getAttribute('title'); + const currentDateFormatted = DateUtil.parse(currentDate, 'MMM DD, YYYY, h:mm:ss a'); - 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); + await expect(currentDateFormatted <= DateUtil.parse(toDate, 'DD-MM-YY')).toBe(true); + await expect(currentDateFormatted >= DateUtil.parse(fromDate, 'DD-MM-YY')).toBe(true); } }); @@ -176,7 +168,6 @@ describe('Search Date Range Filter', () => { }); describe('configuration change', () => { - let jsonFile; beforeAll(async () => { diff --git a/e2e/search/components/search-number-range.e2e.ts b/e2e/search/components/search-number-range.e2e.ts index fe81cfeebf..178123fe44 100644 --- a/e2e/search/components/search-number-range.e2e.ts +++ b/e2e/search/components/search-number-range.e2e.ts @@ -15,20 +15,27 @@ * limitations under the License. */ -import { LoginPage, LocalStorageUtil, UploadActions, DataTableComponentPage, DateUtil } from '@alfresco/adf-testing'; +import { + LoginSSOPage, + LocalStorageUtil, + UploadActions, + DataTableComponentPage, + DateUtil, + ApiService, + UserModel +} from '@alfresco/adf-testing'; import { SearchDialogPage } from '../../pages/adf/dialog/search-dialog.page'; import { SearchResultsPage } from '../../pages/adf/search-results.page'; import { NavigationBarPage } from '../../pages/adf/navigation-bar.page'; import { SearchFiltersPage } from '../../pages/adf/search-filters.page'; -import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; -import { AcsUserModel } from '../../models/ACS/acs-user.model'; import { FileModel } from '../../models/ACS/file.model'; import { browser } from 'protractor'; import { SearchConfiguration } from '../search.config'; +import { UsersActions } from '../../actions/users.actions'; describe('Search Number Range Filter', () => { - const loginPage = new LoginPage(); + const loginPage = new LoginSSOPage(); const searchDialog = new SearchDialogPage(); const searchFilters = new SearchFiltersPage(); const sizeRangeFilter = searchFilters.sizeRangeFilterPage(); @@ -36,7 +43,7 @@ describe('Search Number Range Filter', () => { const navigationBarPage = new NavigationBarPage(); const dataTable = new DataTableComponentPage(); - const acsUser = new AcsUserModel(); + const acsUser = new UserModel(); const file2BytesModel = new FileModel({ 'name': browser.params.resources.Files.ADF_DOCUMENTS.UNSUPPORTED.file_name, @@ -49,25 +56,23 @@ describe('Search Number Range Filter', () => { }); let file2Bytes, file0Bytes; - this.alfrescoJsApi = new AlfrescoApi({ - provider: 'ECM', - hostEcm: browser.params.testConfig.adf_acs.host - }); - const uploadActions = new UploadActions(this.alfrescoJsApi); + const apiService = new ApiService(); + const usersActions = new UsersActions(apiService); + + const uploadActions = new UploadActions(apiService); beforeAll(async () => { + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); - await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); + await usersActions.createUser(acsUser); - await this.alfrescoJsApi.core.peopleApi.addPerson(acsUser); - - await this.alfrescoJsApi.login(acsUser.id, acsUser.password); + await apiService.getInstance().login(acsUser.email, acsUser.password); file2Bytes = await uploadActions.uploadFile(file2BytesModel.location, file2BytesModel.name, '-my-'); file0Bytes = await uploadActions.uploadFile(file0BytesModel.location, file0BytesModel.name, '-my-'); await browser.sleep(15000); - await loginPage.loginToContentServices(acsUser.id, acsUser.password); + await loginPage.login(acsUser.email, acsUser.password); await searchDialog.checkSearchIconIsVisible(); await searchDialog.clickOnSearchIcon(); @@ -75,7 +80,7 @@ describe('Search Number Range Filter', () => { }); afterAll(async () => { - await this.alfrescoJsApi.login(acsUser.id, acsUser.password); + await apiService.getInstance().login(acsUser.email, acsUser.password); await uploadActions.deleteFileOrFolder(file2Bytes.entry.id); await uploadActions.deleteFileOrFolder(file0Bytes.entry.id); @@ -418,8 +423,7 @@ describe('Search Number Range Filter', () => { 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 () => { await navigationBarPage.clickContentServicesButton(); diff --git a/e2e/search/components/search-radio.e2e.ts b/e2e/search/components/search-radio.e2e.ts index 13239e04d5..fcd50b4eaf 100644 --- a/e2e/search/components/search-radio.e2e.ts +++ b/e2e/search/components/search-radio.e2e.ts @@ -15,30 +15,36 @@ * limitations under the License. */ -import { LoginPage, BrowserActions, StringUtil, LocalStorageUtil, UploadActions } from '@alfresco/adf-testing'; +import { + LoginSSOPage, + BrowserActions, + StringUtil, + LocalStorageUtil, + UploadActions, + ApiService, + UserModel +} from '@alfresco/adf-testing'; import { SearchFiltersPage } from '../../pages/adf/search-filters.page'; import { SearchResultsPage } from '../../pages/adf/search-results.page'; import { NavigationBarPage } from '../../pages/adf/navigation-bar.page'; import { SearchDialogPage } from '../../pages/adf/dialog/search-dialog.page'; -import { AcsUserModel } from '../../models/ACS/acs-user.model'; import { SearchConfiguration } from '../search.config'; -import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; import { browser } from 'protractor'; +import { UsersActions } from '../../actions/users.actions'; describe('Search Radio Component', () => { - const loginPage = new LoginPage(); + const loginPage = new LoginSSOPage(); const searchFiltersPage = new SearchFiltersPage(); const navigationBarPage = new NavigationBarPage(); const searchDialog = new SearchDialogPage(); const searchResults = new SearchResultsPage(); - const acsUser = new AcsUserModel(); - this.alfrescoJsApi = new AlfrescoApi({ - provider: 'ECM', - hostEcm: browser.params.testConfig.adf_acs.host - }); - const uploadActions = new UploadActions(this.alfrescoJsApi); + const acsUser = new UserModel(); + const apiService = new ApiService(); + + const uploadActions = new UploadActions(apiService); + const usersActions = new UsersActions(apiService); const filterType = { none: 'None', @@ -57,29 +63,29 @@ describe('Search Radio Component', () => { let createdFile, createdFolder; beforeAll(async () => { - await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); - await this.alfrescoJsApi.core.peopleApi.addPerson(acsUser); - await this.alfrescoJsApi.login(acsUser.id, acsUser.password); + await usersActions.createUser(acsUser); + await apiService.getInstance().login(acsUser.email, acsUser.password); - createdFolder = await this.alfrescoJsApi.nodes.addNode('-my-', { + createdFolder = await apiService.getInstance().nodes.addNode('-my-', { name: nodeNames.folder, nodeType: 'cm:folder' }); - createdFile = await this.alfrescoJsApi.nodes.addNode('-my-', { + createdFile = await apiService.getInstance().nodes.addNode('-my-', { name: nodeNames.document, nodeType: 'cm:content' }); await browser.sleep(15000); - await loginPage.loginToContentServicesUsingUserModel(acsUser); + await loginPage.login(acsUser.email, acsUser.password); 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 apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); await uploadActions.deleteFileOrFolder(createdFile.entry.id); await uploadActions.deleteFileOrFolder(createdFolder.entry.id); @@ -122,7 +128,6 @@ describe('Search Radio Component', () => { }); describe('configuration change', () => { - let jsonFile; beforeEach(() => { @@ -251,7 +256,6 @@ describe('Search Radio Component', () => { }); describe('Properties', () => { - let jsonFile; beforeEach(() => { @@ -259,7 +263,7 @@ describe('Search Radio Component', () => { }); beforeAll(async () => { - await loginPage.loginToContentServicesUsingUserModel(acsUser); + await loginPage.login(acsUser.email, acsUser.password); }); it('[C277033] Should be able to add a new option', async () => { diff --git a/e2e/search/components/search-slider.e2e.ts b/e2e/search/components/search-slider.e2e.ts index 3854b58347..eafb4809e0 100644 --- a/e2e/search/components/search-slider.e2e.ts +++ b/e2e/search/components/search-slider.e2e.ts @@ -15,20 +15,26 @@ * limitations under the License. */ -import { LoginPage, LocalStorageUtil, UploadActions, DataTableComponentPage } from '@alfresco/adf-testing'; +import { + LoginSSOPage, + LocalStorageUtil, + UploadActions, + DataTableComponentPage, + ApiService, + UserModel +} from '@alfresco/adf-testing'; import { SearchDialogPage } from '../../pages/adf/dialog/search-dialog.page'; import { SearchResultsPage } from '../../pages/adf/search-results.page'; import { NavigationBarPage } from '../../pages/adf/navigation-bar.page'; import { SearchFiltersPage } from '../../pages/adf/search-filters.page'; -import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; -import { AcsUserModel } from '../../models/ACS/acs-user.model'; import { FileModel } from '../../models/ACS/file.model'; import { browser } from 'protractor'; import { SearchConfiguration } from '../search.config'; +import { UsersActions } from '../../actions/users.actions'; describe('Search Slider Filter', () => { - const loginPage = new LoginPage(); + const loginPage = new LoginSSOPage(); const searchDialog = new SearchDialogPage(); const searchFilters = new SearchFiltersPage(); const sizeSliderFilter = searchFilters.sizeSliderFilterPage(); @@ -36,7 +42,7 @@ describe('Search Slider Filter', () => { const navigationBarPage = new NavigationBarPage(); const dataTable = new DataTableComponentPage(); - const acsUser = new AcsUserModel(); + const acsUser = new UserModel(); const file2BytesModel = new FileModel({ 'name': browser.params.resources.Files.ADF_DOCUMENTS.UNSUPPORTED.file_name, @@ -44,24 +50,22 @@ describe('Search Slider Filter', () => { }); let file2Bytes; - this.alfrescoJsApi = new AlfrescoApi({ - provider: 'ECM', - hostEcm: browser.params.testConfig.adf_acs.host - }); - const uploadActions = new UploadActions(this.alfrescoJsApi); + const apiService = new ApiService(); + + const uploadActions = new UploadActions(apiService); + const usersActions = new UsersActions(apiService); beforeAll(async () => { + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); - await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); + await usersActions.createUser(acsUser); - await this.alfrescoJsApi.core.peopleApi.addPerson(acsUser); - - await this.alfrescoJsApi.login(acsUser.id, acsUser.password); + await apiService.getInstance().login(acsUser.email, acsUser.password); file2Bytes = await uploadActions.uploadFile(file2BytesModel.location, file2BytesModel.name, '-my-'); await browser.sleep(15000); - await loginPage.loginToContentServices(acsUser.id, acsUser.password); + await loginPage.login(acsUser.email, acsUser.password); await searchDialog.checkSearchIconIsVisible(); await searchDialog.clickOnSearchIcon(); @@ -70,7 +74,7 @@ describe('Search Slider Filter', () => { afterAll(async () => { try { - await this.alfrescoJsApi.login(acsUser.id, acsUser.password); + await apiService.getInstance().login(acsUser.email, acsUser.password); await uploadActions.deleteFileOrFolder(file2Bytes.entry.id); } catch (error) { } diff --git a/e2e/search/components/search-sorting-picker.e2e.ts b/e2e/search/components/search-sorting-picker.e2e.ts index 6f3008fe21..849daa69e2 100644 --- a/e2e/search/components/search-sorting-picker.e2e.ts +++ b/e2e/search/components/search-sorting-picker.e2e.ts @@ -16,33 +16,32 @@ */ import { - LoginPage, + LoginSSOPage, LocalStorageUtil, SearchSortingPickerPage, - UploadActions + UploadActions, + ApiService, + UserModel } from '@alfresco/adf-testing'; import { SearchDialogPage } from '../../pages/adf/dialog/search-dialog.page'; import { SearchResultsPage } from '../../pages/adf/search-results.page'; import { NavigationBarPage } from '../../pages/adf/navigation-bar.page'; import { SearchFiltersPage } from '../../pages/adf/search-filters.page'; import { ContentServicesPage } from '../../pages/adf/content-services.page'; -import { NodeActions } from '../../actions/ACS/node.actions'; -import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; -import { AcsUserModel } from '../../models/ACS/acs-user.model'; import { browser } from 'protractor'; import { SearchConfiguration } from '../search.config'; +import { UsersActions } from '../../actions/users.actions'; describe('Search Sorting Picker', () => { - const loginPage = new LoginPage(); + const loginPage = new LoginSSOPage(); const searchDialog = new SearchDialogPage(); const searchFilters = new SearchFiltersPage(); const searchResults = new SearchResultsPage(); const navigationBarPage = new NavigationBarPage(); const searchSortingPicker = new SearchSortingPickerPage(); const contentServices = new ContentServicesPage(); - const nodeActions = new NodeActions(); - const acsUser = new AcsUserModel(); + const acsUser = new UserModel(); const pngAModel = { 'name': browser.params.resources.Files.ADF_DOCUMENTS.PNG.file_name, @@ -55,33 +54,33 @@ describe('Search Sorting Picker', () => { }; let pngA, pngD; - this.alfrescoJsApi = new AlfrescoApi({ - provider: 'ECM', - hostEcm: browser.params.testConfig.adf_acs.host - }); - const uploadActions = new UploadActions(this.alfrescoJsApi); + const apiService = new ApiService(); + + const uploadActions = new UploadActions(apiService); + const usersActions = new UsersActions(apiService); + const search = '_png_file.png'; let jsonFile; beforeAll(async () => { - await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); - await this.alfrescoJsApi.core.peopleApi.addPerson(acsUser); + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); + await usersActions.createUser(acsUser); - await this.alfrescoJsApi.login(acsUser.id, acsUser.password); + await apiService.getInstance().login(acsUser.email, acsUser.password); pngA = await uploadActions.uploadFile(pngAModel.location, pngAModel.name, '-my-'); pngD = await uploadActions.uploadFile(pngDModel.location, pngDModel.name, '-my-'); await browser.sleep(12000); - await loginPage.loginToContentServices(acsUser.id, acsUser.password); - }); + await loginPage.login(acsUser.email, acsUser.password); + }); afterAll(async () => { await uploadActions.deleteFileOrFolder(pngA.entry.id); await uploadActions.deleteFileOrFolder(pngD.entry.id); await navigationBarPage.clickLogoutButton(); - }); + }); beforeEach(async () => { await searchDialog.clickOnSearchIcon(); @@ -214,11 +213,26 @@ describe('Search Sorting Picker', () => { const idList = await contentServices.getElementsDisplayedId(); const numberOfElements = await contentServices.numberOfResultsDisplayed(); - const nodeList = await nodeActions.getNodesDisplayed(this.alfrescoJsApi, idList, numberOfElements); + const nodeList = await getNodesDisplayed(numberOfElements, idList); + 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); }); + + const getNodesDisplayed = async function (numberOfElements: number, idList: string[]) { + const promises = []; + let nodeList; + + for (let i = 0; i < (numberOfElements - 1); i++) { + if (idList[i] && idList[i].trim() !== '') { + promises.push(apiService.getInstance().core.nodesApi.getNode(idList[i])); + } + } + nodeList = await Promise.all(promises); + return nodeList; + }; }); diff --git a/e2e/search/components/search-text.e2e.ts b/e2e/search/components/search-text.e2e.ts index 690b7046d3..829cdb40ac 100644 --- a/e2e/search/components/search-text.e2e.ts +++ b/e2e/search/components/search-text.e2e.ts @@ -17,57 +17,52 @@ import { browser } from 'protractor'; -import { AcsUserModel } from '../../models/ACS/acs-user.model'; import { FolderModel } from '../../models/ACS/folder.model'; -import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; - -import { LoginPage, LocalStorageUtil, BrowserActions } from '@alfresco/adf-testing'; +import { LoginSSOPage, LocalStorageUtil, BrowserActions, ApiService, UserModel } from '@alfresco/adf-testing'; import { SearchDialogPage } from '../../pages/adf/dialog/search-dialog.page'; import { SearchResultsPage } from '../../pages/adf/search-results.page'; import { SearchFiltersPage } from '../../pages/adf/search-filters.page'; import { NavigationBarPage } from '../../pages/adf/navigation-bar.page'; import { SearchConfiguration } from '../search.config'; +import { UsersActions } from '../../actions/users.actions'; describe('Search component - Text widget', () => { const navigationBarPage = new NavigationBarPage(); const searchFiltersPage = new SearchFiltersPage(); - const loginPage = new LoginPage(); + const loginPage = new LoginSSOPage(); const searchDialog = new SearchDialogPage(); const searchResultPage = new SearchResultsPage(); - const acsUser = new AcsUserModel(); - const newFolderModel = new FolderModel({ 'name': 'newFolder', 'description': 'newDescription' }); + const apiService = new ApiService(); + const usersActions = new UsersActions(apiService); + + const acsUser = new UserModel(); + const newFolderModel = new FolderModel({ 'description': 'newDescription' }); beforeAll(async () => { + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); - this.alfrescoJsApi = new AlfrescoApi({ - provider: 'ECM', - hostEcm: browser.params.testConfig.adf_acs.host - }); + await usersActions.createUser(acsUser); - await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); + await apiService.getInstance().login(acsUser.email, acsUser.password); - await this.alfrescoJsApi.core.peopleApi.addPerson(acsUser); - - await this.alfrescoJsApi.login(acsUser.id, acsUser.password); - - await this.alfrescoJsApi.nodes.addNode('-my-', { + await apiService.getInstance().nodes.addNode('-my-', { 'name': newFolderModel.name, 'nodeType': 'cm:folder', 'properties': { 'cm:description': newFolderModel.description } - }, {}, {}); + }, {}); await browser.sleep(15000); - await loginPage.loginToContentServicesUsingUserModel(acsUser); - }); + await loginPage.login(acsUser.email, acsUser.password); + }); afterAll(async () => { await navigationBarPage.clickLogoutButton(); @@ -82,7 +77,6 @@ describe('Search component - Text widget', () => { }); describe('configuration change', () => { - let jsonFile; beforeAll(async () => { diff --git a/e2e/search/search-component.e2e.ts b/e2e/search/search-component.e2e.ts index bf12714bf1..c63c4b8aa2 100644 --- a/e2e/search/search-component.e2e.ts +++ b/e2e/search/search-component.e2e.ts @@ -17,16 +17,24 @@ import { browser } from 'protractor'; -import { LoginPage, UploadActions, StringUtil, LocalStorageUtil, BrowserActions, ViewerPage } from '@alfresco/adf-testing'; +import { + LoginSSOPage, + UploadActions, + StringUtil, + LocalStorageUtil, + BrowserActions, + ViewerPage, + ApiService, + UserModel +} from '@alfresco/adf-testing'; import { SearchDialogPage } from '../pages/adf/dialog/search-dialog.page'; import { ContentServicesPage } from '../pages/adf/content-services.page'; import { SearchResultsPage } from '../pages/adf/search-results.page'; -import { AcsUserModel } from '../models/ACS/acs-user.model'; import { FileModel } from '../models/ACS/file.model'; import { FolderModel } from '../models/ACS/folder.model'; -import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; import { NavigationBarPage } from '../pages/adf/navigation-bar.page'; import { SearchConfiguration } from './search.config'; +import { UsersActions } from '../actions/users.actions'; describe('Search component - Search Bar', () => { @@ -39,7 +47,7 @@ describe('Search component - Search Bar', () => { } }; - const loginPage = new LoginPage(); + const loginPage = new LoginSSOPage(); const contentServicesPage = new ContentServicesPage(); const navigationBarPage = new NavigationBarPage(); @@ -47,12 +55,11 @@ describe('Search component - Search Bar', () => { const searchResultPage = new SearchResultsPage(); const viewerPage = new ViewerPage(); - const acsUser = new AcsUserModel(); - this.alfrescoJsApi = new AlfrescoApi({ - provider: 'ECM', - hostEcm: browser.params.testConfig.adf_acs.host - }); - const uploadActions = new UploadActions(this.alfrescoJsApi); + const acsUser = new UserModel(); + const apiService = new ApiService(); + const usersActions = new UsersActions(apiService); + + const uploadActions = new UploadActions(apiService); const filename = StringUtil.generateRandomString(16); const firstFolderName = StringUtil.generateRandomString(16); @@ -79,15 +86,14 @@ describe('Search component - Search Bar', () => { let fileHighlightUploaded; 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 apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); + await usersActions.createUser(acsUser); + await apiService.getInstance().login(acsUser.email, acsUser.password); const firstFileUploaded = await uploadActions.uploadFile(firstFileModel.location, firstFileModel.name, '-my-'); Object.assign(firstFileModel, firstFileUploaded.entry); - fileHighlightUploaded = await this.alfrescoJsApi.nodes.addNode('-my-', { + fileHighlightUploaded = await apiService.getInstance().nodes.addNode('-my-', { 'name': StringUtil.generateRandomString(16), 'nodeType': 'cm:content', 'properties': { @@ -104,7 +110,7 @@ describe('Search component - Search Bar', () => { await browser.sleep(15000); // wait search index previous file/folder uploaded - await loginPage.loginToContentServicesUsingUserModel(acsUser); + await loginPage.login(acsUser.email, acsUser.password); }); afterAll(async () => { @@ -258,7 +264,6 @@ describe('Search component - Search Bar', () => { }); describe('Highlight', () => { - const searchConfiguration = SearchConfiguration.getConfiguration(); beforeAll(async () => { diff --git a/e2e/search/search-filters.e2e.ts b/e2e/search/search-filters.e2e.ts index 2f2f25901f..00872958ab 100644 --- a/e2e/search/search-filters.e2e.ts +++ b/e2e/search/search-filters.e2e.ts @@ -18,38 +18,38 @@ import { SearchDialogPage } from '../pages/adf/dialog/search-dialog.page'; import { SearchFiltersPage } from '../pages/adf/search-filters.page'; import { SearchResultsPage } from '../pages/adf/search-results.page'; -import { AcsUserModel } from '../models/ACS/acs-user.model'; import { FileModel } from '../models/ACS/file.model'; import { NavigationBarPage } from '../pages/adf/navigation-bar.page'; import { StringUtil, DocumentListPage, PaginationPage, - LoginPage, + LoginSSOPage, LocalStorageUtil, UploadActions, - BrowserActions + BrowserActions, + ApiService, + UserModel } from '@alfresco/adf-testing'; -import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; import { browser } from 'protractor'; import { SearchConfiguration } from './search.config'; +import { UsersActions } from '../actions/users.actions'; describe('Search Filters', () => { - const loginPage = new LoginPage(); + const loginPage = new LoginSSOPage(); const searchDialog = new SearchDialogPage(); const searchFiltersPage = new SearchFiltersPage(); - this.alfrescoJsApi = new AlfrescoApi({ - provider: 'ECM', - hostEcm: browser.params.testConfig.adf_acs.host - }); - const uploadActions = new UploadActions(this.alfrescoJsApi); const paginationPage = new PaginationPage(); const contentList = new DocumentListPage(); const searchResults = new SearchResultsPage(); const navigationBarPage = new NavigationBarPage(); - const acsUser = new AcsUserModel(); + const apiService = new ApiService(); + const uploadActions = new UploadActions(apiService); + const usersActions = new UsersActions(apiService); + + const acsUser = new UserModel(); const filename = StringUtil.generateRandomString(16); const fileNamePrefix = StringUtil.generateRandomString(5); @@ -88,11 +88,11 @@ describe('Search Filters', () => { let jsonFile; beforeAll(async () => { - await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); - await this.alfrescoJsApi.core.peopleApi.addPerson(acsUser); + await usersActions.createUser(acsUser); - await this.alfrescoJsApi.login(acsUser.id, acsUser.password); + await apiService.getInstance().login(acsUser.email, acsUser.password); fileUploaded = await uploadActions.uploadFile(fileModel.location, fileModel.name, '-my-'); fileTypePng = await uploadActions.uploadFile(pngFileModel.location, pngFileModel.name, '-my-'); @@ -100,7 +100,7 @@ describe('Search Filters', () => { fileTypeJpg = await uploadActions.uploadFile(jpgFileModel.location, jpgFileModel.name, '-my-'); fileTypeTxt2 = await uploadActions.uploadFile(txtFileModel2.location, txtFileModel2.name, '-my-'); - await loginPage.loginToContentServicesUsingUserModel(acsUser); + await loginPage.login(acsUser.email, acsUser.password); await browser.sleep(15000); // wait search index previous file/folder uploaded @@ -108,7 +108,7 @@ describe('Search Filters', () => { }); afterAll(async () => { - await this.alfrescoJsApi.login(acsUser.id, acsUser.password); + await apiService.getInstance().login(acsUser.email, acsUser.password); await uploadActions.deleteFileOrFolder(fileUploaded.entry.id); await uploadActions.deleteFileOrFolder(fileTypePng.entry.id); @@ -121,6 +121,7 @@ describe('Search Filters', () => { 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); await searchFiltersPage.checkSearchFiltersIsDisplayed(); diff --git a/e2e/search/search-multiselect.e2e.ts b/e2e/search/search-multiselect.e2e.ts index f13c3aee3f..e68be2ecbe 100644 --- a/e2e/search/search-multiselect.e2e.ts +++ b/e2e/search/search-multiselect.e2e.ts @@ -15,34 +15,32 @@ * limitations under the License. */ -import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; -import { StringUtil, UploadActions, LoginPage } from '@alfresco/adf-testing'; +import { StringUtil, UploadActions, LoginSSOPage, ApiService, UserModel } from '@alfresco/adf-testing'; import CONSTANTS = require('../util/constants'); import { browser } from 'protractor'; import { SearchDialogPage } from '../pages/adf/dialog/search-dialog.page'; import { SearchResultsPage } from '../pages/adf/search-results.page'; import { SearchFiltersPage } from '../pages/adf/search-filters.page'; -import { AcsUserModel } from '../models/ACS/acs-user.model'; import { FileModel } from '../models/ACS/file.model'; import { NavigationBarPage } from '../pages/adf/navigation-bar.page'; +import { UsersActions } from '../actions/users.actions'; describe('Search Component - Multi-Select Facet', () => { - const loginPage = new LoginPage(); + const loginPage = new LoginSSOPage(); const searchDialog = new SearchDialogPage(); const searchResultsPage = new SearchResultsPage(); - this.alfrescoJsApi = new AlfrescoApi({ - provider: 'ECM', - hostEcm: browser.params.testConfig.adf_acs.host - }); - const uploadActions = new UploadActions(this.alfrescoJsApi); const searchFiltersPage = new SearchFiltersPage(); const navigationBarPage = new NavigationBarPage(); + const apiService = new ApiService(); + const uploadActions = new UploadActions(apiService); + const usersActions = new UsersActions(apiService); + let site, userOption; describe('', () => { let jpgFile, jpgFileSite, txtFile, txtFileSite; - const acsUser = new AcsUserModel(); + const acsUser = new UserModel(); const randomName = StringUtil.generateRandomString(); const jpgFileInfo = new FileModel({ @@ -55,13 +53,13 @@ describe('Search Component - Multi-Select Facet', () => { }); beforeAll(async () => { - await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); - await this.alfrescoJsApi.core.peopleApi.addPerson(acsUser); + await usersActions.createUser(acsUser); - await this.alfrescoJsApi.login(acsUser.id, acsUser.password); + await apiService.getInstance().login(acsUser.email, acsUser.password); - site = await this.alfrescoJsApi.core.sitesApi.createSite({ + site = await apiService.getInstance().core.sitesApi.createSite({ title: StringUtil.generateRandomString(8), visibility: 'PUBLIC' }); @@ -76,7 +74,7 @@ describe('Search Component - Multi-Select Facet', () => { await browser.sleep(15000); - await loginPage.loginToContentServicesUsingUserModel(acsUser); + await loginPage.login(acsUser.email, acsUser.password); await searchDialog.checkSearchIconIsVisible(); await searchDialog.clickOnSearchIcon(); @@ -96,12 +94,12 @@ describe('Search Component - Multi-Select Facet', () => { uploadActions.deleteFileOrFolder(txtFileSite.entry.id) ]); - await this.alfrescoJsApi.core.sitesApi.deleteSite(site.entry.id, { permanent: true }); + await apiService.getInstance().core.sitesApi.deleteSite(site.entry.id, { permanent: true }); await navigationBarPage.clickLogoutButton(); }); it('[C280054] Should be able to select multiple items from a search facet filter', async () => { - await loginPage.loginToContentServicesUsingUserModel(acsUser); + await loginPage.login(acsUser.email, acsUser.password); await searchDialog.checkSearchIconIsVisible(); await searchDialog.clickOnSearchIcon(); @@ -129,8 +127,8 @@ describe('Search Component - Multi-Select Facet', () => { describe('', () => { let jpgFile, txtFile; - const userUploadingTxt = new AcsUserModel(); - const userUploadingImg = new AcsUserModel(); + const userUploadingTxt = new UserModel(); + const userUploadingImg = new UserModel(); const randomName = StringUtil.generateRandomString(); const jpgFileInfo = new FileModel({ @@ -143,32 +141,32 @@ describe('Search Component - Multi-Select Facet', () => { }); beforeAll(async () => { - await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); - await this.alfrescoJsApi.core.peopleApi.addPerson(userUploadingTxt); - await this.alfrescoJsApi.core.peopleApi.addPerson(userUploadingImg); + await usersActions.createUser(userUploadingTxt); + await usersActions.createUser(userUploadingImg); - await this.alfrescoJsApi.login(userUploadingTxt.id, userUploadingTxt.password); + await apiService.getInstance().login(userUploadingTxt.email, userUploadingTxt.password); - site = await this.alfrescoJsApi.core.sitesApi.createSite({ + site = await apiService.getInstance().core.sitesApi.createSite({ title: StringUtil.generateRandomString(8), visibility: 'PUBLIC' }); - await this.alfrescoJsApi.core.sitesApi.addSiteMember(site.entry.id, { - id: userUploadingImg.id, + await apiService.getInstance().core.sitesApi.addSiteMember(site.entry.id, { + id: userUploadingImg.email, role: CONSTANTS.CS_USER_ROLES.MANAGER }); txtFile = await uploadActions.uploadFile(txtFileInfo.location, txtFileInfo.name, site.entry.guid); - await this.alfrescoJsApi.login(userUploadingImg.id, userUploadingImg.password); + await apiService.getInstance().login(userUploadingImg.email, userUploadingImg.password); jpgFile = await uploadActions.uploadFile(jpgFileInfo.location, jpgFileInfo.name, site.entry.guid); await browser.sleep(15000); - await loginPage.loginToContentServicesUsingUserModel(userUploadingImg); + await loginPage.login(userUploadingImg.email, userUploadingImg.password); await searchDialog.checkSearchIconIsVisible(); await searchDialog.clickOnSearchIcon(); @@ -192,7 +190,7 @@ describe('Search Component - Multi-Select Facet', () => { describe('', () => { let txtFile; - const acsUser = new AcsUserModel(); + const acsUser = new UserModel(); const randomName = StringUtil.generateRandomString(); const txtFileInfo = new FileModel({ @@ -201,13 +199,13 @@ describe('Search Component - Multi-Select Facet', () => { }); beforeAll(async () => { - await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); - await this.alfrescoJsApi.core.peopleApi.addPerson(acsUser); + await usersActions.createUser(acsUser); - await this.alfrescoJsApi.login(acsUser.id, acsUser.password); + await apiService.getInstance().login(acsUser.email, acsUser.password); - site = await this.alfrescoJsApi.core.sitesApi.createSite({ + site = await apiService.getInstance().core.sitesApi.createSite({ title: StringUtil.generateRandomString(8), visibility: 'PUBLIC' }); @@ -215,7 +213,7 @@ describe('Search Component - Multi-Select Facet', () => { txtFile = await uploadActions.uploadFile(txtFileInfo.location, txtFileInfo.name, '-my-'); await browser.sleep(15000); - await loginPage.loginToContentServicesUsingUserModel(acsUser); + await loginPage.login(acsUser.email, acsUser.password); await searchDialog.checkSearchIconIsVisible(); await searchDialog.clickOnSearchIcon(); @@ -226,11 +224,11 @@ describe('Search Component - Multi-Select Facet', () => { afterAll(async () => { await uploadActions.deleteFileOrFolder(txtFile.entry.id); - await this.alfrescoJsApi.core.sitesApi.deleteSite(site.entry.id, { permanent: true }); + await apiService.getInstance().core.sitesApi.deleteSite(site.entry.id, { permanent: true }); }); it('[C280058] Should update filter facets items number when another filter facet item is selected', async () => { - await loginPage.loginToContentServicesUsingUserModel(acsUser); + await loginPage.login(acsUser.email, acsUser.password); await searchDialog.checkSearchIconIsVisible(); await searchDialog.clickOnSearchIcon(); diff --git a/e2e/search/search-page-component.e2e.ts b/e2e/search/search-page.e2e.ts similarity index 82% rename from e2e/search/search-page-component.e2e.ts rename to e2e/search/search-page.e2e.ts index 6f9553999a..0859e8f9e5 100644 --- a/e2e/search/search-page-component.e2e.ts +++ b/e2e/search/search-page.e2e.ts @@ -17,17 +17,15 @@ import { browser } from 'protractor'; -import { LoginPage, UploadActions, StringUtil } from '@alfresco/adf-testing'; +import { LoginSSOPage, UploadActions, StringUtil, ApiService, UserModel } from '@alfresco/adf-testing'; import { SearchDialogPage } from '../pages/adf/dialog/search-dialog.page'; import { ContentServicesPage } from '../pages/adf/content-services.page'; import { SearchResultsPage } from '../pages/adf/search-results.page'; -import { AcsUserModel } from '../models/ACS/acs-user.model'; import { FolderModel } from '../models/ACS/folder.model'; import { FileModel } from '../models/ACS/file.model'; -import { Util } from '../util/util'; -import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; import { NavigationBarPage } from '../pages/adf/navigation-bar.page'; +import { UsersActions } from '../actions/users.actions'; describe('Search component - Search Page', () => { const search = { @@ -43,28 +41,27 @@ describe('Search component - Search Page', () => { } }; - const loginPage = new LoginPage(); + const loginPage = new LoginSSOPage(); const contentServicesPage = new ContentServicesPage(); const searchDialog = new SearchDialogPage(); const searchResultPage = new SearchResultsPage(); const navigationBarPage = new NavigationBarPage(); - const acsUser = new AcsUserModel(); + const apiService = new ApiService(); + const uploadActions = new UploadActions(apiService); + const usersActions = new UsersActions(apiService); + + const acsUser = new UserModel(); const emptyFolderModel = new FolderModel({ 'name': 'search' + StringUtil.generateRandomString() }); let firstFileModel; - const newFolderModel = new FolderModel({ 'name': 'newFolder' }); + const newFolderModel = new FolderModel(); let fileNames = []; const nrOfFiles = 15; const adminNrOfFiles = 5; - this.alfrescoJsApi = new AlfrescoApi({ - provider: 'ECM', - hostEcm: browser.params.testConfig.adf_acs.host - }); - const uploadActions = new UploadActions(this.alfrescoJsApi); 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); + fileNames = StringUtil.generateFilesNames(1, nrOfFiles, search.active.base, search.active.extension); + const adminFileNames = StringUtil.generateFilesNames(nrOfFiles + 1, nrOfFiles + adminNrOfFiles, search.active.base, search.active.extension); search.active.firstFile = fileNames[0]; search.active.secondFile = fileNames[1]; fileNames.splice(0, 1); @@ -74,10 +71,10 @@ describe('Search component - Search Page', () => { 'location': browser.params.resources.Files.ADF_DOCUMENTS.TXT.file_path }); - await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); - await this.alfrescoJsApi.core.peopleApi.addPerson(acsUser); - await this.alfrescoJsApi.login(acsUser.id, acsUser.password); + await usersActions.createUser(acsUser); + await apiService.getInstance().login(acsUser.email, acsUser.password); await uploadActions.createFolder(emptyFolderModel.name, '-my-'); const newFolderModelUploaded = await uploadActions.createFolder(newFolderModel.name, '-my-'); @@ -86,13 +83,13 @@ describe('Search component - Search Page', () => { await uploadActions.uploadFile(firstFileModel.location, firstFileModel.name, '-my-'); - await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); + await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password); await uploadActions.createEmptyFiles(adminFileNames, newFolderModelUploaded.entry.id); await browser.sleep(15000); - await loginPage.loginToContentServicesUsingUserModel(acsUser); + await loginPage.login(acsUser.email, acsUser.password); }); afterAll(async () => { diff --git a/e2e/test.config.js b/e2e/test.config.js index 456748947b..38a8f03cfd 100644 --- a/e2e/test.config.js +++ b/e2e/test.config.js @@ -6,40 +6,41 @@ require('dotenv').config({path: process.env.ENV_FILE}); const HOST = process.env.URL_HOST_ADF; -const HOST_BPM = process.env.URL_HOST_BPM_ADF; -const HOST_SSO = process.env.URL_HOST_SSO_ADF; -const HOST_IDENTITY = process.env.URL_HOST_IDENTITY; -const TIMEOUT = parseInt(process.env.TIMEOUT, 10); -const PROXY = process.env.PROXY_HOST_ADF; + const LOG = process.env.LOG; -const BPM_HOST = process.env.URL_HOST_BPM_ADF || "bpm"; -const OAUTH_HOST = process.env.URL_HOST_SSO_ADF || "keycloak"; -const OAUTH_CLIENT_ID = process.env.OAUTH_CLIENDID || "alfresco"; +const HOST_ECM = process.env.PROXY_HOST_ADF || HOST || 'ecm'; +const HOST_BPM = process.env.PROXY_HOST_ADF || HOST || 'bpm'; + +const PROVIDER = process.env.PROVIDER ? process.env.PROVIDER : 'ALL'; +const AUTH_TYPE = process.env.AUTH_TYPE ? process.env.AUTH_TYPE : 'BASIC'; + +const OAUTH_HOST = process.env.HOST_SSO || process.env.PROXY_HOST_ADF || HOST || 'oauth'; +const OAUTH_CLIENT_ID = process.env.OAUTH_CLIENDID || 'alfresco'; -const IDENTITY_HOST = process.env.URL_HOST_IDENTITY || "identity"; const IDENTITY_ADMIN_EMAIL = process.env.IDENTITY_ADMIN_EMAIL || "defaultadmin"; const IDENTITY_ADMIN_PASSWORD = process.env.IDENTITY_ADMIN_PASSWORD || "defaultadminpassword"; -const IDENTITY_USERNAME_ADF = process.env.IDENTITY_USERNAME_ADF || "defaultuser"; -const IDENTITY_PASSWORD_ADF = process.env.IDENTITY_PASSWORD_ADF; + +const HR_USER = process.env.HR_USER || "hruser"; +const HR_USER_PASSWORD = process.env.HR_USER_PASSWORD || "defaulthruserpassword"; const USERNAME_ADF = process.env.USERNAME_ADF || "defaultuser"; const PASSWORD_ADF = process.env.PASSWORD_ADF || "defaultuserpassword"; -const EMAIL = process.env.EMAIL_ADF || USERNAME_ADF; -const SCREENSHOT_URL = process.env.SCREENSHOT_URL || process.env.URL_HOST_ADF; +const SCREENSHOT_URL = process.env.SCREENSHOT_URL || HOST; const SCREENSHOT_PASSWORD = process.env.SCREENSHOT_PASSWORD || process.env.PASSWORD_ADF; const SCREENSHOT_USERNAME = process.env.SCREENSHOT_USERNAME || process.env.USERNAME_ADF; const EXTERNAL_ACS_HOST = process.env.EXTERNAL_ACS_HOST; const appConfig = { - "bpmHost": BPM_HOST, - "identityHost": IDENTITY_HOST, - "providers": "BPM", - "authType": "OAUTH", + "ecmHost": HOST_ECM, + "bpmHost": HOST_BPM, + "identityHost": `${OAUTH_HOST}/auth/admin/realms/alfresco`, + "provider": PROVIDER, + "authType": AUTH_TYPE, "oauth2": { - "host": OAUTH_HOST, + "host": `${OAUTH_HOST}/auth/realms/alfresco`, "clientId": OAUTH_CLIENT_ID, "scope": "openid", "secret": "", @@ -52,41 +53,38 @@ const appConfig = { if (LOG) { console.log('======= test.config.js hostBPM ====== '); - console.log('hostBPM : ' + (HOST_BPM || PROXY || HOST)); - console.log('EMAIL : ' + (EMAIL)); - console.log('PROXY_HOST_ADF : ' + PROXY); + console.log('hostBPM : ' + HOST_ECM); + console.log('hostECM : ' + HOST_BPM); console.log('HOST : ' + HOST); console.log('USERNAME_ADF : ' + USERNAME_ADF + ' PASSWORD_ADF : ' + PASSWORD_ADF); console.log('IDENTITY_ADMIN_EMAIL : ' + IDENTITY_ADMIN_EMAIL + ' IDENTITY_ADMIN_PASSWORD : ' + IDENTITY_ADMIN_PASSWORD); - console.log(JSON.stringify(appConfig)) } module.exports = { - projectName: 'ADF', + projectName: 'adf', appConfig: appConfig, log: LOG, main: { - timeout: TIMEOUT, rootPath: __dirname }, + admin: { + email: USERNAME_ADF, + password: PASSWORD_ADF + }, + identityAdmin: { email: IDENTITY_ADMIN_EMAIL, password: IDENTITY_ADMIN_PASSWORD }, - identityUser: { - email: IDENTITY_USERNAME_ADF, - password: IDENTITY_PASSWORD_ADF - }, - hrUser: { - email: process.env.HR_USER, - password: process.env.HR_USER_PASSWORD + email: HR_USER, + password: HR_USER_PASSWORD }, screenshot: { @@ -99,159 +97,14 @@ module.exports = { /** * base */ - url: HOST, - - /** - * adf port - */ - port: "", - - /** - * adf login - */ - login: "/login", - - /** - * admin username - */ - adminUser: USERNAME_ADF, - - /** - * main admin email - */ - adminEmail: EMAIL, - - /** - * main admin password - */ - adminPassword: PASSWORD_ADF, - - hostBPM: HOST_BPM || PROXY || HOST, - - clientIdSso: "alfresco", - - hostSso: function () { - let baseUrl; - - if (HOST_SSO) { - baseUrl = HOST_SSO; - } else if (PROXY) { - baseUrl = PROXY; - } else { - baseUrl = HOST; - } - - if (LOG) { - console.log('hostSso baseUrl : ' + baseUrl); - } - - return `${baseUrl}/auth/realms/alfresco`; - }(), - - hostIdentity: function () { - let baseUrl; - - if (HOST_IDENTITY) { - baseUrl = HOST_IDENTITY; - } else if (HOST_SSO) { - baseUrl = HOST_SSO; - } else if (PROXY) { - baseUrl = PROXY; - } else { - baseUrl = HOST; - } - - if (LOG) { - console.log('hostIdentity baseUrl : ' + baseUrl); - } - - return `${baseUrl}/auth/admin/realms/alfresco`; - }() - - }, - - adf_acs: { - /** - * The protocol where the app runs. - * @config main.protocol {String} - */ - protocol: "http", - - /** - * The protocol where the app runs. - * @config main.protocol {String} - */ - host: PROXY || HOST, - - /** - * The port where the app runs. - * @config main.port {String} - */ - port: "", - - /** - * The ECM API context required for calls - * @config adf.ACSAPIContextRoot {String} - */ - apiContextRoot: "/alfresco/api/-default-/public", - - clientIdSso: "alfresco", + url: HOST }, adf_external_acs: { /** - * The protocol where the app runs. - * @config main.protocol {String} - */ - protocol: "http", - - /** - * The protocol where the app runs. * @config main.protocol {String} */ host: EXTERNAL_ACS_HOST, - - /** - * The port where the app runs. - * @config main.port {String} - */ - port: "", - - /** - * The ECM API context required for calls - * @config adf.ACSAPIContextRoot {String} - */ - apiContextRoot: "/alfresco/api/-default-/public", - - clientIdSso: "alfresco", }, - adf_aps: { - /** - * The protocol where the app runs. - * @config main.protocol {String} - */ - protocol: "http", - - /** - * The host where the app runs. - * @config main.host {String} - */ - host: PROXY || HOST, - - /** - * The port where the app runs. - * @config main.port {String} - */ - port: "", - - /** - * The BPM API context required for calls - * @config adf.APSAPIContextRoot {String} - */ - apiContextRoot: "/activiti-app", - - clientIdSso: "activiti" - } - }; diff --git a/e2e/util/material.ts b/e2e/util/material.ts deleted file mode 100644 index 3166f8d188..0000000000 --- a/e2e/util/material.ts +++ /dev/null @@ -1,35 +0,0 @@ -/*! - * @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 { ElementFinder } from 'protractor'; -import { BrowserVisibility, BrowserActions } from '@alfresco/adf-testing'; - -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 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/util.ts b/e2e/util/util.ts deleted file mode 100644 index 6365e96712..0000000000 --- a/e2e/util/util.ts +++ /dev/null @@ -1,66 +0,0 @@ -/*! - * @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'; - -export class Util { - - /** - * Generates a sequence of files with name: baseName + index + extension (e.g.) baseName1.txt, baseName2.txt, ... - * - * @param startIndex {int} - * @param endIndex {int} - * @param baseName{string} the base name of all files - * @param extension{string} the extension of the file - * @return fileNames - * @method generateSequenceFiles - */ - static generateSequenceFiles(startIndex, endIndex, baseName, extension) { - const fileNames = []; - for (let i = startIndex; i <= endIndex; i++) { - fileNames.push(baseName + i + extension); - } - return fileNames; - } - - /** - * Returns TRUE if the first array contains all elements from the second one. - * - * @param {array} superset - * @param {array} subset - * - * @return {boolean} - * @method arrayContainsArray - */ - static arrayContainsArray(superset: any[], subset: any[]) { - if (0 === subset.length) { - return false; - } - return subset.every(function(value) { - return (superset.indexOf(value) >= 0); - }); - } - - static async openNewTabInBrowser() { - await browser.executeScript("window.open('about: blank', '_blank');"); - } - - static async switchToWindowHandler(windowNumber) { - const handles = await browser.getAllWindowHandles(); - await browser.switchTo().window(handles[windowNumber]); - } -} diff --git a/lib/cli/package-lock.json b/lib/cli/package-lock.json deleted file mode 100644 index d042ae6e6b..0000000000 --- a/lib/cli/package-lock.json +++ /dev/null @@ -1,3105 +0,0 @@ -{ - "name": "@alfresco/adf-cli", - "version": "3.8.0", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "@alfresco/adf-testing": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/@alfresco/adf-testing/-/adf-testing-3.8.0.tgz", - "integrity": "sha512-feinvQ62LLpIHca7SnCc6mRK2vhGeK8w+VCmSZlHkcf97YF+nou0JuFi/CQ6aAWWfaQtNZrm9VjXEeUUvh1s1Q==", - "requires": { - "tslib": "^1.9.0" - } - }, - "@angular-devkit/core": { - "version": "7.3.9", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-7.3.9.tgz", - "integrity": "sha512-SaxD+nKFW3iCBKsxNR7+66J30EexW/y7tm8m5AvUH+GwSAgIj0ZYmRUzFEPggcaLVA4WnE/YWqIXZMJW5dT7gw==", - "requires": { - "ajv": "6.9.1", - "chokidar": "2.0.4", - "fast-json-stable-stringify": "2.0.0", - "rxjs": "6.3.3", - "source-map": "0.7.3" - }, - "dependencies": { - "anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", - "requires": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" - } - }, - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=" - }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=" - }, - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "chokidar": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.0.4.tgz", - "integrity": "sha512-z9n7yt9rOvIJrMhvDtDictKrkFHeihkNl6uWMmZlmL6tJtX9Cs+87oK+teBx+JIgzvbX3yZHT3eF8vpbDxHJXQ==", - "requires": { - "anymatch": "^2.0.0", - "async-each": "^1.0.0", - "braces": "^2.3.0", - "fsevents": "^1.2.2", - "glob-parent": "^3.1.0", - "inherits": "^2.0.1", - "is-binary-path": "^1.0.0", - "is-glob": "^4.0.0", - "lodash.debounce": "^4.0.8", - "normalize-path": "^2.1.1", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.0.0", - "upath": "^1.0.5" - } - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", - "requires": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - } - }, - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" - } - } - }, - "extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "requires": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", - "requires": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - }, - "dependencies": { - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "requires": { - "is-extglob": "^2.1.0" - } - } - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" - }, - "is-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" - }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "rxjs": { - "version": "6.3.3", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.3.3.tgz", - "integrity": "sha512-JTWmoY9tWCs7zvIk/CvRjhjGaOd+OVBM987mxFo+OW66cGpdKjZcpmc74ES1sB//7Kl/PAe8+wEakuhG4pcgOw==", - "requires": { - "tslib": "^1.9.0" - } - }, - "source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==" - } - } - }, - "@types/events": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/events/-/events-3.0.0.tgz", - "integrity": "sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g==", - "dev": true - }, - "@types/glob": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.1.tgz", - "integrity": "sha512-1Bh06cbWJUHMC97acuD6UMG29nMt0Aqz1vF3guLfG+kHHJhy3AyohZFFxYk2f7Q1SQIrNwvncxAE0N/9s70F2w==", - "dev": true, - "requires": { - "@types/events": "*", - "@types/minimatch": "*", - "@types/node": "*" - } - }, - "@types/minimatch": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz", - "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==", - "dev": true - }, - "@types/node": { - "version": "13.13.4", - "resolved": "https://registry.npmjs.org/@types/node/-/node-13.13.4.tgz", - "integrity": "sha512-x26ur3dSXgv5AwKS0lNfbjpCakGIduWU1DU91Zz58ONRWrIKGunmZBNv4P7N+e27sJkiGDsw/3fT4AtsqQBrBA==", - "dev": true - }, - "@types/shelljs": { - "version": "0.8.7", - "resolved": "https://registry.npmjs.org/@types/shelljs/-/shelljs-0.8.7.tgz", - "integrity": "sha512-Mg2qGjLIJIieeJ1/NjswAOY9qXDShLeh6JwpD1NZsvUvI0hxdUCNDpnBXv9YQeugKi2EHU+BqkbUE4jpY4GKmQ==", - "dev": true, - "requires": { - "@types/glob": "*", - "@types/node": "*" - } - }, - "JSONStream": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", - "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", - "requires": { - "jsonparse": "^1.2.0", - "through": ">=2.2.7 <3" - } - }, - "abbrev": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" - }, - "agent-base": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.3.0.tgz", - "integrity": "sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg==", - "requires": { - "es6-promisify": "^5.0.0" - } - }, - "agentkeepalive": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-3.5.2.tgz", - "integrity": "sha512-e0L/HNe6qkQ7H19kTlRRqUibEAwDK5AFk6y3PtMsuut2VAH6+Q4xZml1tNDJD7kSAyqmbG/K08K5WEJYtUrSlQ==", - "requires": { - "humanize-ms": "^1.2.1" - } - }, - "ajv": { - "version": "6.9.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.9.1.tgz", - "integrity": "sha512-XDN92U311aINL77ieWHmqCcNlwjoP5cHXDxIxbf2MaPYuCXOHS7gHH8jktxeK5omgd52XbSTX6a4Piwd1pQmzA==", - "requires": { - "fast-deep-equal": "^2.0.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "^1.9.0" - } - }, - "aproba": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" - }, - "arr-flatten": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==" - }, - "arr-union": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=" - }, - "array-find-index": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", - "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=" - }, - "asap": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=" - }, - "assign-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=" - }, - "async-each": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", - "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==" - }, - "atob": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==" - }, - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" - }, - "base": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", - "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", - "requires": { - "cache-base": "^1.0.1", - "class-utils": "^0.3.5", - "component-emitter": "^1.2.1", - "define-property": "^1.0.0", - "isobject": "^3.0.1", - "mixin-deep": "^1.2.0", - "pascalcase": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" - }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" - } - } - }, - "binary-extensions": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", - "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==" - }, - "bluebird": { - "version": "3.5.5", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.5.tgz", - "integrity": "sha512-5am6HnnfN+urzt4yfg7IgTbotDjIT/u8AJpEt0sIU9FtXfVeezXAPKswrG+xKUCOYAINpSdgZVDU6QFh+cuH3w==" - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "buffer-from": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", - "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==" - }, - "builtins": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz", - "integrity": "sha1-y5T662HIaWRR2zZTThQi+U8K7og=" - }, - "cacache": { - "version": "11.3.2", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-11.3.2.tgz", - "integrity": "sha512-E0zP4EPGDOaT2chM08Als91eYnf8Z+eH1awwwVsngUmgppfM5jjJ8l3z5vO5p5w/I3LsiXawb1sW0VY65pQABg==", - "requires": { - "bluebird": "^3.5.3", - "chownr": "^1.1.1", - "figgy-pudding": "^3.5.1", - "glob": "^7.1.3", - "graceful-fs": "^4.1.15", - "lru-cache": "^5.1.1", - "mississippi": "^3.0.0", - "mkdirp": "^0.5.1", - "move-concurrently": "^1.0.1", - "promise-inflight": "^1.0.1", - "rimraf": "^2.6.2", - "ssri": "^6.0.1", - "unique-filename": "^1.1.1", - "y18n": "^4.0.0" - }, - "dependencies": { - "lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "requires": { - "yallist": "^3.0.2" - } - }, - "yallist": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz", - "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==" - } - } - }, - "cache-base": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", - "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", - "requires": { - "collection-visit": "^1.0.0", - "component-emitter": "^1.2.1", - "get-value": "^2.0.6", - "has-value": "^1.0.0", - "isobject": "^3.0.1", - "set-value": "^2.0.0", - "to-object-path": "^0.3.0", - "union-value": "^1.0.0", - "unset-value": "^1.0.0" - }, - "dependencies": { - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" - } - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "chownr": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.1.tgz", - "integrity": "sha512-j38EvO5+LHX84jlo6h4UzmOwi0UgW61WRyPtJz4qaadK5eY3BTS5TY/S1Stc3Uk2lIM6TPevAlULiEJwie860g==" - }, - "class-utils": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", - "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", - "requires": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" - } - } - }, - "collection-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", - "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", - "requires": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" - }, - "commander": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-4.0.0.tgz", - "integrity": "sha512-SEa2abMBTZuEjLVYpNrAFoRgxPwG4rXP3+SGY6CM/HZGeDzIA7Pzp+7H3AHDukKEpyy2SoSGGPShKqqfH9T9AQ==" - }, - "component-emitter": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", - "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==" - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" - }, - "concat-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", - "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", - "requires": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" - } - }, - "copy-concurrently": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz", - "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==", - "requires": { - "aproba": "^1.1.1", - "fs-write-stream-atomic": "^1.0.8", - "iferr": "^0.1.5", - "mkdirp": "^0.5.1", - "rimraf": "^2.5.4", - "run-queue": "^1.0.0" - } - }, - "copy-descriptor": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=" - }, - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" - }, - "cyclist": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-0.2.2.tgz", - "integrity": "sha1-GzN5LhHpFKL9bW7WRHRkRE5fpkA=" - }, - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "requires": { - "ms": "^2.1.1" - } - }, - "debuglog": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/debuglog/-/debuglog-1.0.1.tgz", - "integrity": "sha1-qiT/uaw9+aI1GDfPstJ5NgzXhJI=" - }, - "decode-uri-component": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=" - }, - "define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", - "requires": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - }, - "dependencies": { - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" - }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" - } - } - }, - "dezalgo": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.3.tgz", - "integrity": "sha1-f3Qt4Gb8dIvI24IFad3c5Jvw1FY=", - "requires": { - "asap": "^2.0.0", - "wrappy": "1" - } - }, - "duplexify": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", - "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", - "requires": { - "end-of-stream": "^1.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.0.0", - "stream-shift": "^1.0.0" - } - }, - "ejs": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/ejs/-/ejs-2.6.1.tgz", - "integrity": "sha512-0xy4A/twfrRCnkhfk8ErDi5DqdAsAqeGxht4xkCUrsvhhbQNs7E+4jV0CN7+NKIY0aHE72+XvqtBIXzD31ZbXQ==" - }, - "encoding": { - "version": "0.1.12", - "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.12.tgz", - "integrity": "sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=", - "requires": { - "iconv-lite": "~0.4.13" - } - }, - "end-of-stream": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", - "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", - "requires": { - "once": "^1.4.0" - } - }, - "err-code": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/err-code/-/err-code-1.1.2.tgz", - "integrity": "sha1-BuARbTAo9q70gGhJ6w6mp0iuaWA=" - }, - "es6-promise": { - "version": "4.2.8", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", - "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==" - }, - "es6-promisify": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz", - "integrity": "sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=", - "requires": { - "es6-promise": "^4.0.3" - } - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" - }, - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, - "fast-deep-equal": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", - "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=" - }, - "fast-json-stable-stringify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", - "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=" - }, - "figgy-pudding": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.1.tgz", - "integrity": "sha512-vNKxJHTEKNThjfrdJwHc7brvM6eVevuO5nTj6ez8ZQ1qbXTvGthucRF7S4vf2cr71QVnT70V34v0S1DyQsti0w==" - }, - "flush-write-stream": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz", - "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==", - "requires": { - "inherits": "^2.0.3", - "readable-stream": "^2.3.6" - } - }, - "for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=" - }, - "fragment-cache": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", - "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", - "requires": { - "map-cache": "^0.2.2" - } - }, - "from2": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", - "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", - "requires": { - "inherits": "^2.0.1", - "readable-stream": "^2.0.0" - } - }, - "fs-write-stream-atomic": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz", - "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=", - "requires": { - "graceful-fs": "^4.1.2", - "iferr": "^0.1.5", - "imurmurhash": "^0.1.4", - "readable-stream": "1 || 2" - } - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" - }, - "fsevents": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.9.tgz", - "integrity": "sha512-oeyj2H3EjjonWcFjD5NvZNE9Rqe4UW+nQBU2HNeKw0koVLEFIhtyETyAakeAM3de7Z/SW5kcA+fZUait9EApnw==", - "optional": true, - "requires": { - "nan": "^2.12.1", - "node-pre-gyp": "^0.12.0" - }, - "dependencies": { - "abbrev": { - "version": "1.1.1", - "bundled": true, - "optional": true - }, - "ansi-regex": { - "version": "2.1.1", - "bundled": true, - "optional": true - }, - "aproba": { - "version": "1.2.0", - "bundled": true, - "optional": true - }, - "are-we-there-yet": { - "version": "1.1.5", - "bundled": true, - "optional": true, - "requires": { - "delegates": "^1.0.0", - "readable-stream": "^2.0.6" - } - }, - "balanced-match": { - "version": "1.0.0", - "bundled": true, - "optional": true - }, - "brace-expansion": { - "version": "1.1.11", - "bundled": true, - "optional": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "chownr": { - "version": "1.1.1", - "bundled": true, - "optional": true - }, - "code-point-at": { - "version": "1.1.0", - "bundled": true, - "optional": true - }, - "concat-map": { - "version": "0.0.1", - "bundled": true, - "optional": true - }, - "console-control-strings": { - "version": "1.1.0", - "bundled": true, - "optional": true - }, - "core-util-is": { - "version": "1.0.2", - "bundled": true, - "optional": true - }, - "debug": { - "version": "4.1.1", - "bundled": true, - "optional": true, - "requires": { - "ms": "^2.1.1" - } - }, - "deep-extend": { - "version": "0.6.0", - "bundled": true, - "optional": true - }, - "delegates": { - "version": "1.0.0", - "bundled": true, - "optional": true - }, - "detect-libc": { - "version": "1.0.3", - "bundled": true, - "optional": true - }, - "fs-minipass": { - "version": "1.2.5", - "bundled": true, - "optional": true, - "requires": { - "minipass": "^2.2.1" - } - }, - "fs.realpath": { - "version": "1.0.0", - "bundled": true, - "optional": true - }, - "gauge": { - "version": "2.7.4", - "bundled": true, - "optional": true, - "requires": { - "aproba": "^1.0.3", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", - "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" - } - }, - "glob": { - "version": "7.1.3", - "bundled": true, - "optional": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "has-unicode": { - "version": "2.0.1", - "bundled": true, - "optional": true - }, - "iconv-lite": { - "version": "0.4.24", - "bundled": true, - "optional": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "ignore-walk": { - "version": "3.0.1", - "bundled": true, - "optional": true, - "requires": { - "minimatch": "^3.0.4" - } - }, - "inflight": { - "version": "1.0.6", - "bundled": true, - "optional": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.3", - "bundled": true, - "optional": true - }, - "ini": { - "version": "1.3.5", - "bundled": true, - "optional": true - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "bundled": true, - "optional": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "isarray": { - "version": "1.0.0", - "bundled": true, - "optional": true - }, - "minimatch": { - "version": "3.0.4", - "bundled": true, - "optional": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "0.0.8", - "bundled": true, - "optional": true - }, - "minipass": { - "version": "2.3.5", - "bundled": true, - "optional": true, - "requires": { - "safe-buffer": "^5.1.2", - "yallist": "^3.0.0" - } - }, - "minizlib": { - "version": "1.2.1", - "bundled": true, - "optional": true, - "requires": { - "minipass": "^2.2.1" - } - }, - "mkdirp": { - "version": "0.5.1", - "bundled": true, - "optional": true, - "requires": { - "minimist": "0.0.8" - } - }, - "ms": { - "version": "2.1.1", - "bundled": true, - "optional": true - }, - "needle": { - "version": "2.3.0", - "bundled": true, - "optional": true, - "requires": { - "debug": "^4.1.0", - "iconv-lite": "^0.4.4", - "sax": "^1.2.4" - } - }, - "node-pre-gyp": { - "version": "0.12.0", - "bundled": true, - "optional": true, - "requires": { - "detect-libc": "^1.0.2", - "mkdirp": "^0.5.1", - "needle": "^2.2.1", - "nopt": "^4.0.1", - "npm-packlist": "^1.1.6", - "npmlog": "^4.0.2", - "rc": "^1.2.7", - "rimraf": "^2.6.1", - "semver": "^5.3.0", - "tar": "^4" - } - }, - "nopt": { - "version": "4.0.1", - "bundled": true, - "optional": true, - "requires": { - "abbrev": "1", - "osenv": "^0.1.4" - } - }, - "npm-bundled": { - "version": "1.0.6", - "bundled": true, - "optional": true - }, - "npm-packlist": { - "version": "1.4.1", - "bundled": true, - "optional": true, - "requires": { - "ignore-walk": "^3.0.1", - "npm-bundled": "^1.0.1" - } - }, - "npmlog": { - "version": "4.1.2", - "bundled": true, - "optional": true, - "requires": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" - } - }, - "number-is-nan": { - "version": "1.0.1", - "bundled": true, - "optional": true - }, - "object-assign": { - "version": "4.1.1", - "bundled": true, - "optional": true - }, - "once": { - "version": "1.4.0", - "bundled": true, - "optional": true, - "requires": { - "wrappy": "1" - } - }, - "os-homedir": { - "version": "1.0.2", - "bundled": true, - "optional": true - }, - "os-tmpdir": { - "version": "1.0.2", - "bundled": true, - "optional": true - }, - "osenv": { - "version": "0.1.5", - "bundled": true, - "optional": true, - "requires": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.0" - } - }, - "path-is-absolute": { - "version": "1.0.1", - "bundled": true, - "optional": true - }, - "process-nextick-args": { - "version": "2.0.0", - "bundled": true, - "optional": true - }, - "rc": { - "version": "1.2.8", - "bundled": true, - "optional": true, - "requires": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "bundled": true, - "optional": true - } - } - }, - "readable-stream": { - "version": "2.3.6", - "bundled": true, - "optional": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "rimraf": { - "version": "2.6.3", - "bundled": true, - "optional": true, - "requires": { - "glob": "^7.1.3" - } - }, - "safe-buffer": { - "version": "5.1.2", - "bundled": true, - "optional": true - }, - "safer-buffer": { - "version": "2.1.2", - "bundled": true, - "optional": true - }, - "sax": { - "version": "1.2.4", - "bundled": true, - "optional": true - }, - "semver": { - "version": "5.7.0", - "bundled": true, - "optional": true - }, - "set-blocking": { - "version": "2.0.0", - "bundled": true, - "optional": true - }, - "signal-exit": { - "version": "3.0.2", - "bundled": true, - "optional": true - }, - "string-width": { - "version": "1.0.2", - "bundled": true, - "optional": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - }, - "string_decoder": { - "version": "1.1.1", - "bundled": true, - "optional": true, - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "bundled": true, - "optional": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "strip-json-comments": { - "version": "2.0.1", - "bundled": true, - "optional": true - }, - "tar": { - "version": "4.4.8", - "bundled": true, - "optional": true, - "requires": { - "chownr": "^1.1.1", - "fs-minipass": "^1.2.5", - "minipass": "^2.3.4", - "minizlib": "^1.1.1", - "mkdirp": "^0.5.0", - "safe-buffer": "^5.1.2", - "yallist": "^3.0.2" - } - }, - "util-deprecate": { - "version": "1.0.2", - "bundled": true, - "optional": true - }, - "wide-align": { - "version": "1.1.3", - "bundled": true, - "optional": true, - "requires": { - "string-width": "^1.0.2 || 2" - } - }, - "wrappy": { - "version": "1.0.2", - "bundled": true, - "optional": true - }, - "yallist": { - "version": "3.0.3", - "bundled": true, - "optional": true - } - } - }, - "get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=" - }, - "glob": { - "version": "7.1.4", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", - "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "graceful-fs": { - "version": "4.1.15", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", - "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==" - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" - }, - "has-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", - "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", - "requires": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" - }, - "dependencies": { - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" - } - } - }, - "has-values": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", - "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", - "requires": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" - }, - "dependencies": { - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "hosted-git-info": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.7.1.tgz", - "integrity": "sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w==" - }, - "http-cache-semantics": { - "version": "3.8.1", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz", - "integrity": "sha512-5ai2iksyV8ZXmnZhHH4rWPoxxistEexSi5936zIQ1bnNTW5VnA85B6P/VpXiRM017IgRvb2kKo1a//y+0wSp3w==" - }, - "http-proxy-agent": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-2.1.0.tgz", - "integrity": "sha512-qwHbBLV7WviBl0rQsOzH6o5lwyOIvwp/BdFnvVxXORldu5TmjFfjzBcWUWS5kWAZhmv+JtiDhSuQCp4sBfbIgg==", - "requires": { - "agent-base": "4", - "debug": "3.1.0" - }, - "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - } - } - }, - "https-proxy-agent": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.4.tgz", - "integrity": "sha512-OmvfoQ53WLjtA9HeYP9RNrWMJzzAz1JGaSFr1nijg0PVR1JaD/xbJq1mdEIIlxGpXp9eSe/O2LgU9DJmTPd0Eg==", - "requires": { - "agent-base": "^4.3.0", - "debug": "^3.1.0" - } - }, - "humanize-ms": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", - "integrity": "sha1-xG4xWaKT9riW2ikxbYtv6Lt5u+0=", - "requires": { - "ms": "^2.0.0" - } - }, - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "iferr": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz", - "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=" - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=" - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" - }, - "interpret": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.2.0.tgz", - "integrity": "sha512-mT34yGKMNceBQUoVn7iCDKDntA7SC6gycMAWzGx1z/CMCTV7b2AAtXlo3nRyHZ1FelRkQbQjprHSYGwzLtkVbw==" - }, - "ip": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", - "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=" - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "requires": { - "kind-of": "^3.0.2" - } - }, - "is-binary-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", - "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", - "requires": { - "binary-extensions": "^1.0.0" - } - }, - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "requires": { - "kind-of": "^3.0.2" - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "dependencies": { - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" - } - } - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=" - }, - "is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "requires": { - "isobject": "^3.0.1" - }, - "dependencies": { - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" - } - } - }, - "is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==" - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - }, - "json-parse-better-errors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==" - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" - }, - "jsonparse": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", - "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=" - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "^1.1.5" - } - }, - "license-checker": { - "version": "25.0.1", - "resolved": "https://registry.npmjs.org/license-checker/-/license-checker-25.0.1.tgz", - "integrity": "sha512-mET5AIwl7MR2IAKYYoVBBpV0OnkKQ1xGj2IMMeEFIs42QAkEVjRtFZGWmQ28WeU7MP779iAgOaOy93Mn44mn6g==", - "requires": { - "chalk": "^2.4.1", - "debug": "^3.1.0", - "mkdirp": "^0.5.1", - "nopt": "^4.0.1", - "read-installed": "~4.0.3", - "semver": "^5.5.0", - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0", - "spdx-satisfies": "^4.0.0", - "treeify": "^1.1.0" - } - }, - "lodash.debounce": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=" - }, - "lru-cache": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", - "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", - "requires": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" - } - }, - "make-fetch-happen": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-4.0.1.tgz", - "integrity": "sha512-7R5ivfy9ilRJ1EMKIOziwrns9fGeAD4bAha8EB7BIiBBLHm2KeTUGCrICFt2rbHfzheTLynv50GnNTK1zDTrcQ==", - "requires": { - "agentkeepalive": "^3.4.1", - "cacache": "^11.0.1", - "http-cache-semantics": "^3.8.1", - "http-proxy-agent": "^2.1.0", - "https-proxy-agent": "^2.2.1", - "lru-cache": "^4.1.2", - "mississippi": "^3.0.0", - "node-fetch-npm": "^2.0.2", - "promise-retry": "^1.1.1", - "socks-proxy-agent": "^4.0.0", - "ssri": "^6.0.0" - } - }, - "map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=" - }, - "map-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", - "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", - "requires": { - "object-visit": "^1.0.0" - } - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" - }, - "mississippi": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz", - "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==", - "requires": { - "concat-stream": "^1.5.0", - "duplexify": "^3.4.2", - "end-of-stream": "^1.1.0", - "flush-write-stream": "^1.0.0", - "from2": "^2.1.0", - "parallel-transform": "^1.1.0", - "pump": "^3.0.0", - "pumpify": "^1.3.3", - "stream-each": "^1.1.0", - "through2": "^2.0.0" - } - }, - "mixin-deep": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", - "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", - "requires": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, - "mkdirp": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", - "requires": { - "minimist": "0.0.8" - } - }, - "move-concurrently": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", - "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=", - "requires": { - "aproba": "^1.1.1", - "copy-concurrently": "^1.0.0", - "fs-write-stream-atomic": "^1.0.8", - "mkdirp": "^0.5.1", - "rimraf": "^2.5.4", - "run-queue": "^1.0.3" - } - }, - "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" - }, - "nan": { - "version": "2.14.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.0.tgz", - "integrity": "sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==", - "optional": true - }, - "nanomatch": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", - "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "fragment-cache": "^0.2.1", - "is-windows": "^1.0.2", - "kind-of": "^6.0.2", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=" - }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=" - }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" - } - } - }, - "node-fetch-npm": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/node-fetch-npm/-/node-fetch-npm-2.0.2.tgz", - "integrity": "sha512-nJIxm1QmAj4v3nfCvEeCrYSoVwXyxLnaPBK5W1W5DGEJwjlKuC2VEUycGw5oxk+4zZahRrB84PUJJgEmhFTDFw==", - "requires": { - "encoding": "^0.1.11", - "json-parse-better-errors": "^1.0.0", - "safe-buffer": "^5.1.1" - } - }, - "nopt": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.1.tgz", - "integrity": "sha1-0NRoWv1UFRk8jHUFYC0NF81kR00=", - "requires": { - "abbrev": "1", - "osenv": "^0.1.4" - } - }, - "normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "requires": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "requires": { - "remove-trailing-separator": "^1.0.1" - } - }, - "npm-package-arg": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-6.1.0.tgz", - "integrity": "sha512-zYbhP2k9DbJhA0Z3HKUePUgdB1x7MfIfKssC+WLPFMKTBZKpZh5m13PgexJjCq6KW7j17r0jHWcCpxEqnnncSA==", - "requires": { - "hosted-git-info": "^2.6.0", - "osenv": "^0.1.5", - "semver": "^5.5.0", - "validate-npm-package-name": "^3.0.0" - } - }, - "npm-registry-fetch": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-3.9.0.tgz", - "integrity": "sha512-srwmt8YhNajAoSAaDWndmZgx89lJwIZ1GWxOuckH4Coek4uHv5S+o/l9FLQe/awA+JwTnj4FJHldxhlXdZEBmw==", - "requires": { - "JSONStream": "^1.3.4", - "bluebird": "^3.5.1", - "figgy-pudding": "^3.4.1", - "lru-cache": "^4.1.3", - "make-fetch-happen": "^4.0.1", - "npm-package-arg": "^6.1.0" - } - }, - "object-copy": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", - "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", - "requires": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "requires": { - "is-descriptor": "^0.1.0" - } - } - } - }, - "object-visit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", - "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", - "requires": { - "isobject": "^3.0.0" - }, - "dependencies": { - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" - } - } - }, - "object.pick": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", - "requires": { - "isobject": "^3.0.1" - }, - "dependencies": { - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" - } - } - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "requires": { - "wrappy": "1" - } - }, - "os-homedir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", - "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=" - }, - "os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" - }, - "osenv": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", - "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", - "requires": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.0" - } - }, - "parallel-transform": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.1.0.tgz", - "integrity": "sha1-1BDwZbBdojCB/NEPKIVMKb2jOwY=", - "requires": { - "cyclist": "~0.2.2", - "inherits": "^2.0.3", - "readable-stream": "^2.1.5" - } - }, - "pascalcase": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=" - }, - "path-dirname": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", - "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=" - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" - }, - "path-parse": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", - "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==" - }, - "posix-character-classes": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", - "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=" - }, - "process-nextick-args": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", - "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==" - }, - "promise-inflight": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", - "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=" - }, - "promise-retry": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-1.1.1.tgz", - "integrity": "sha1-ZznpaOMFHaIM5kl/srUPaRHfPW0=", - "requires": { - "err-code": "^1.0.0", - "retry": "^0.10.0" - } - }, - "pseudomap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", - "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=" - }, - "pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "pumpify": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", - "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", - "requires": { - "duplexify": "^3.6.0", - "inherits": "^2.0.3", - "pump": "^2.0.0" - }, - "dependencies": { - "pump": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", - "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - } - } - }, - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" - }, - "read-installed": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/read-installed/-/read-installed-4.0.3.tgz", - "integrity": "sha1-/5uLZ/GH0eTCm5/rMfayI6zRkGc=", - "requires": { - "debuglog": "^1.0.1", - "graceful-fs": "^4.1.2", - "read-package-json": "^2.0.0", - "readdir-scoped-modules": "^1.0.0", - "semver": "2 || 3 || 4 || 5", - "slide": "~1.1.3", - "util-extend": "^1.0.1" - } - }, - "read-package-json": { - "version": "2.0.13", - "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-2.0.13.tgz", - "integrity": "sha512-/1dZ7TRZvGrYqE0UAfN6qQb5GYBsNcqS1C0tNK601CFOJmtHI7NIGXwetEPU/OtoFHZL3hDxm4rolFFVE9Bnmg==", - "requires": { - "glob": "^7.1.1", - "graceful-fs": "^4.1.2", - "json-parse-better-errors": "^1.0.1", - "normalize-package-data": "^2.0.0", - "slash": "^1.0.0" - } - }, - "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "readdir-scoped-modules": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/readdir-scoped-modules/-/readdir-scoped-modules-1.0.2.tgz", - "integrity": "sha1-n6+jfShr5dksuuve4DDcm19AZ0c=", - "requires": { - "debuglog": "^1.0.1", - "dezalgo": "^1.0.0", - "graceful-fs": "^4.1.2", - "once": "^1.3.0" - } - }, - "readdirp": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", - "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", - "requires": { - "graceful-fs": "^4.1.11", - "micromatch": "^3.1.10", - "readable-stream": "^2.0.2" - }, - "dependencies": { - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=" - }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=" - }, - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", - "requires": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - } - }, - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" - } - } - }, - "extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "requires": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" - }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - } - } - }, - "rechoir": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", - "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", - "requires": { - "resolve": "^1.1.6" - } - }, - "regex-not": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", - "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", - "requires": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" - } - }, - "remove-trailing-separator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=" - }, - "repeat-element": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", - "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==" - }, - "repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=" - }, - "resolve": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.11.0.tgz", - "integrity": "sha512-WL2pBDjqT6pGUNSUzMw00o4T7If+z4H2x3Gz893WoUQ5KW8Vr9txp00ykiP16VBaZF5+j/OcXJHZ9+PCvdiDKw==", - "requires": { - "path-parse": "^1.0.6" - } - }, - "resolve-url": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=" - }, - "ret": { - "version": "0.1.15", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==" - }, - "retry": { - "version": "0.10.1", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.10.1.tgz", - "integrity": "sha1-52OI0heZLCUnUCQdPTlW/tmNj/Q=" - }, - "rimraf": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", - "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", - "requires": { - "glob": "^7.1.3" - } - }, - "run-queue": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz", - "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=", - "requires": { - "aproba": "^1.1.1" - } - }, - "rxjs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.2.tgz", - "integrity": "sha512-HUb7j3kvb7p7eCUHE3FqjoDsC1xfZQ4AHFWfTKSpZ+sAhhz5X1WX0ZuUqWbzB2QhSLp3DoLUG+hMdEDKqWo2Zg==", - "requires": { - "tslib": "^1.9.0" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "safe-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", - "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", - "requires": { - "ret": "~0.1.10" - } - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, - "semver": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", - "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==" - }, - "set-value": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", - "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", - "requires": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.3", - "split-string": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "shelljs": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.3.tgz", - "integrity": "sha512-fc0BKlAWiLpwZljmOvAOTE/gXawtCoNrP5oaY7KIaQbbyHeQVg01pSEuEGvGh3HEdBU4baCD7wQBwADmM/7f7A==", - "requires": { - "glob": "^7.0.0", - "interpret": "^1.0.0", - "rechoir": "^0.6.2" - } - }, - "slash": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", - "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=" - }, - "slide": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/slide/-/slide-1.1.6.tgz", - "integrity": "sha1-VusCfWW00tzmyy4tMsTUr8nh1wc=" - }, - "smart-buffer": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.0.2.tgz", - "integrity": "sha512-JDhEpTKzXusOqXZ0BUIdH+CjFdO/CR3tLlf5CN34IypI+xMmXW1uB16OOY8z3cICbJlDAVJzNbwBhNO0wt9OAw==" - }, - "snapdragon": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", - "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", - "requires": { - "base": "^0.11.1", - "debug": "^2.2.0", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "map-cache": "^0.2.2", - "source-map": "^0.5.6", - "source-map-resolve": "^0.5.0", - "use": "^3.1.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - } - } - }, - "snapdragon-node": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", - "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", - "requires": { - "define-property": "^1.0.0", - "isobject": "^3.0.0", - "snapdragon-util": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" - }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" - } - } - }, - "snapdragon-util": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", - "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", - "requires": { - "kind-of": "^3.2.0" - } - }, - "socks": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.3.2.tgz", - "integrity": "sha512-pCpjxQgOByDHLlNqlnh/mNSAxIUkyBBuwwhTcV+enZGbDaClPvHdvm6uvOwZfFJkam7cGhBNbb4JxiP8UZkRvQ==", - "requires": { - "ip": "^1.1.5", - "smart-buffer": "4.0.2" - } - }, - "socks-proxy-agent": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-4.0.2.tgz", - "integrity": "sha512-NT6syHhI9LmuEMSK6Kd2V7gNv5KFZoLE7V5udWmn0de+3Mkj3UMA/AJPLyeNUVmElCurSHtUdM3ETpR3z770Wg==", - "requires": { - "agent-base": "~4.2.1", - "socks": "~2.3.2" - }, - "dependencies": { - "agent-base": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.2.1.tgz", - "integrity": "sha512-JVwXMr9nHYTUXsBFKUqhJwvlcYU/blreOEUkhNR2eXZIvwd+c+o5V4MgDPKWnMS/56awN3TRzIP+KoPn+roQtg==", - "requires": { - "es6-promisify": "^5.0.0" - } - } - } - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" - }, - "source-map-resolve": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz", - "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==", - "requires": { - "atob": "^2.1.1", - "decode-uri-component": "^0.2.0", - "resolve-url": "^0.2.1", - "source-map-url": "^0.4.0", - "urix": "^0.1.0" - } - }, - "source-map-url": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", - "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=" - }, - "spdx-compare": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/spdx-compare/-/spdx-compare-1.0.0.tgz", - "integrity": "sha512-C1mDZOX0hnu0ep9dfmuoi03+eOdDoz2yvK79RxbcrVEG1NO1Ph35yW102DHWKN4pk80nwCgeMmSY5L25VE4D9A==", - "requires": { - "array-find-index": "^1.0.2", - "spdx-expression-parse": "^3.0.0", - "spdx-ranges": "^2.0.0" - } - }, - "spdx-correct": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz", - "integrity": "sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==", - "requires": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-exceptions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz", - "integrity": "sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==" - }, - "spdx-expression-parse": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", - "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", - "requires": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-license-ids": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.4.tgz", - "integrity": "sha512-7j8LYJLeY/Yb6ACbQ7F76qy5jHkp0U6jgBfJsk97bwWlVUnUWsAgpyaCvo17h0/RQGnQ036tVDomiwoI4pDkQA==" - }, - "spdx-license-list": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/spdx-license-list/-/spdx-license-list-5.0.0.tgz", - "integrity": "sha512-N5u9tEFRBUzQDjMKRRt8SHxC/UaqYApPmdF4MMFnICQg3z52onNbnneuro/sWw2rd+eGu9agQOzUbD671Xia7Q==" - }, - "spdx-ranges": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/spdx-ranges/-/spdx-ranges-2.1.0.tgz", - "integrity": "sha512-OOWghvosfmECc9edy/A9j7GabERmn8bJWHc0J1knVytQtO5Rw7VfxK6CDqmivJhfMJqWhWWUfffNNMPYvyvyQA==" - }, - "spdx-satisfies": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/spdx-satisfies/-/spdx-satisfies-4.0.1.tgz", - "integrity": "sha512-WVzZ/cXAzoNmjCWiEluEA3BjHp5tiUmmhn9MK+X0tBbR9sOqtC6UQwmgCNrAIZvNlMuBUYAaHYfb2oqlF9SwKA==", - "requires": { - "spdx-compare": "^1.0.0", - "spdx-expression-parse": "^3.0.0", - "spdx-ranges": "^2.0.0" - } - }, - "split-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", - "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", - "requires": { - "extend-shallow": "^3.0.0" - } - }, - "ssri": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.1.tgz", - "integrity": "sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==", - "requires": { - "figgy-pudding": "^3.5.1" - } - }, - "static-extend": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", - "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", - "requires": { - "define-property": "^0.2.5", - "object-copy": "^0.1.0" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "requires": { - "is-descriptor": "^0.1.0" - } - } - } - }, - "stream-each": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.3.tgz", - "integrity": "sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==", - "requires": { - "end-of-stream": "^1.1.0", - "stream-shift": "^1.0.0" - } - }, - "stream-shift": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.0.tgz", - "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=" - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - }, - "through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" - }, - "through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "requires": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - } - }, - "to-object-path": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", - "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", - "requires": { - "kind-of": "^3.0.2" - } - }, - "to-regex": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", - "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", - "requires": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" - } - }, - "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", - "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - }, - "dependencies": { - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "requires": { - "kind-of": "^3.0.2" - } - } - } - }, - "treeify": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/treeify/-/treeify-1.1.0.tgz", - "integrity": "sha512-1m4RA7xVAJrSGrrXGs0L3YTwyvBs2S8PbRHaLZAkFw7JR8oIFwYtysxlBZhYIa7xSyiYJKZ3iGrrk55cGA3i9A==" - }, - "tslib": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.10.0.tgz", - "integrity": "sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ==" - }, - "typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" - }, - "typescript": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.1.6.tgz", - "integrity": "sha512-tDMYfVtvpb96msS1lDX9MEdHrW4yOuZ4Kdc4Him9oU796XldPYF/t2+uKoX0BBa0hXXwDlqYQbXY5Rzjzc5hBA==", - "dev": true - }, - "union-value": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", - "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", - "requires": { - "arr-union": "^3.1.0", - "get-value": "^2.0.6", - "is-extendable": "^0.1.1", - "set-value": "^2.0.1" - } - }, - "unique-filename": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", - "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", - "requires": { - "unique-slug": "^2.0.0" - } - }, - "unique-slug": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.1.tgz", - "integrity": "sha512-n9cU6+gITaVu7VGj1Z8feKMmfAjEAQGhwD9fE3zvpRRa0wEIx8ODYkVGfSc94M2OX00tUFV8wH3zYbm1I8mxFg==", - "requires": { - "imurmurhash": "^0.1.4" - } - }, - "unset-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", - "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", - "requires": { - "has-value": "^0.3.1", - "isobject": "^3.0.0" - }, - "dependencies": { - "has-value": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", - "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", - "requires": { - "get-value": "^2.0.3", - "has-values": "^0.1.4", - "isobject": "^2.0.0" - }, - "dependencies": { - "isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "requires": { - "isarray": "1.0.0" - } - } - } - }, - "has-values": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", - "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=" - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" - } - } - }, - "upath": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/upath/-/upath-1.1.2.tgz", - "integrity": "sha512-kXpym8nmDmlCBr7nKdIx8P2jNBa+pBpIUFRnKJ4dr8htyYGJFokkr2ZvERRtUN+9SY+JqXouNgUPtv6JQva/2Q==" - }, - "uri-js": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", - "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", - "requires": { - "punycode": "^2.1.0" - } - }, - "urix": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=" - }, - "use": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", - "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==" - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" - }, - "util-extend": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/util-extend/-/util-extend-1.0.3.tgz", - "integrity": "sha1-p8IW0mdUUWljeztu3GypEZ4v+T8=" - }, - "validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "requires": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "validate-npm-package-name": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz", - "integrity": "sha1-X6kS2B630MdK/BQN5zF/DKffQ34=", - "requires": { - "builtins": "^1.0.3" - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" - }, - "xtend": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", - "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=" - }, - "y18n": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", - "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==" - }, - "yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=" - } - } -} diff --git a/lib/cli/package.json b/lib/cli/package.json index 110db394c2..2426d35aa6 100644 --- a/lib/cli/package.json +++ b/lib/cli/package.json @@ -21,7 +21,6 @@ }, "dependencies": { "commander": "^4.0.0", - "@alfresco/adf-testing": "3.8.0", "license-checker": "^25.0.1", "npm-registry-fetch": "^3.9.0", "@angular-devkit/core": "^7.2.15", diff --git a/lib/cli/scripts/init-aae-env.ts b/lib/cli/scripts/init-aae-env.ts index 16d0101785..ac0320f829 100644 --- a/lib/cli/scripts/init-aae-env.ts +++ b/lib/cli/scripts/init-aae-env.ts @@ -17,7 +17,6 @@ * limitations under the License. */ -import { ACTIVITI_CLOUD_APPS, DeploymentAPI, ModelingAPI } from '@alfresco/adf-testing'; import * as program from 'commander'; /* tslint:disable */ @@ -27,6 +26,10 @@ import request = require('request'); import * as fs from 'fs'; import { logger } from './logger'; +let alfrescoJsApi: any; +let args: ConfigArgs; +let isValid = true; + export interface ConfigArgs { modelerUsername: string; modelerPassword: string; @@ -38,45 +41,168 @@ export interface ConfigArgs { identityHost: boolean; } -let browser: any; -let deploymentAPI: DeploymentAPI; -let modelingAPI: ModelingAPI; - export const AAE_MICROSERVICES = [ 'deployment-service', 'modeling-service', 'dmn-service' ]; -async function healthCheck(args: ConfigArgs, apiService: any, nameService: string, result: any) { +async function healthCheck(nameService: string) { const url = `${args.host}/${nameService}/actuator/health`; const pathParams = {}, queryParams = {}, headerParams = {}, formParams = {}, bodyParam = {}, contentTypes = ['application/json'], accepts = ['application/json']; try { - const health = await apiService.oauth2Auth.callCustomApi(url, 'GET', pathParams, queryParams, headerParams, formParams, bodyParam, + const health = await alfrescoJsApi.oauth2Auth.callCustomApi(url, 'GET', pathParams, queryParams, headerParams, formParams, bodyParam, contentTypes, accepts); - if (health.status !== 'UP' ) { + if (health.status !== 'UP') { logger.error(`${nameService} is DOWN `); - result.isValid = false; + isValid = false; } else { logger.info(`${nameService} is UP!`); } } catch (error) { logger.error(`${nameService} is not reachable ${error.status} `); - result.isValid = false; + isValid = false; } } -function getAlfrescoJsApiInstance(args: ConfigArgs) { +function getApplicationByStatus(status: string) { + const url = `${args.host}/deployment-service/v1/applications/`; + + const pathParams = {}, queryParams = { status: status }, + headerParams = {}, formParams = {}, bodyParam = {}, + contentTypes = ['application/json'], accepts = ['application/json']; + try { + return alfrescoJsApi.oauth2Auth.callCustomApi(url, 'GET', pathParams, queryParams, headerParams, formParams, bodyParam, + contentTypes, accepts); + + } catch (error) { + logger.error(error.status); + isValid = false; + } +} + +function getDescriptors() { + const url = `${args.host}/deployment-service/v1/descriptors`; + + const pathParams = {}, queryParams = {}, + headerParams = {}, formParams = {}, bodyParam = {}, + contentTypes = ['application/json'], accepts = ['application/json']; + try { + return alfrescoJsApi.oauth2Auth.callCustomApi(url, 'GET', pathParams, queryParams, headerParams, formParams, bodyParam, + contentTypes, accepts); + + } catch (error) { + logger.error(error.status); + isValid = false; + } +} + +function getProjects() { + const url = `${args.host}/deployment-service/v1/projects/'`; + + const pathParams = {}, queryParams = { maxItems: 1000 }, + headerParams = {}, formParams = {}, bodyParam = {}, + contentTypes = ['application/json'], accepts = ['application/json']; + try { + return alfrescoJsApi.oauth2Auth.callCustomApi(url, 'GET', pathParams, queryParams, headerParams, formParams, bodyParam, + contentTypes, accepts); + + } catch (error) { + logger.error(error.status); + isValid = false; + } +} + +function getProjectRelease(projectId: string) { + const url = `${args.host}/deployment-service/v1/projects/${projectId}/releases`; + + const pathParams = {}, queryParams = {}, + headerParams = {}, formParams = {}, bodyParam = {}, + contentTypes = ['application/json'], accepts = ['application/json']; + try { + return alfrescoJsApi.oauth2Auth.callCustomApi(url, 'GET', pathParams, queryParams, headerParams, formParams, bodyParam, + contentTypes, accepts); + + } catch (error) { + logger.error(error.status); + isValid = false; + } +} + +function releaseProject(projectId: string) { + const url = `${args.host}/deployment-service/v1/projects/${projectId}/releases`; + + const pathParams = {}, queryParams = {}, + headerParams = {}, formParams = {}, bodyParam = {}, + contentTypes = ['application/json'], accepts = ['application/json']; + try { + return alfrescoJsApi.oauth2Auth.callCustomApi(url, 'POST', pathParams, queryParams, headerParams, formParams, bodyParam, + contentTypes, accepts); + + } catch (error) { + logger.error(error.status); + isValid = false; + } +} + +async function importAndReleaseProject(absoluteFilePath: string) { + const fileContent = await fs.createReadStream(absoluteFilePath); + + try { + const project = await alfrescoJsApi.oauth2Auth.callCustomApi(`${args.host}/v1/projects/import`, 'POST', {}, {}, {}, { file: fileContent }, {}, ['multipart/form-data'], ['application/json']); + + await alfrescoJsApi.oauth2Auth.callCustomApi(`${args.host}/v1/projects/${project.entry.id}/releases`, 'POST', {}, {}, {}, {}, {}, + ['application/json'], ['application/json']); + + } catch (error) { + logger.error(error.status); + isValid = false; + } +} + +function deleteDescriptor(name: string) { + const url = `${args.host}/v1/descriptors/${name}`; + + const pathParams = {}, queryParams = {}, + headerParams = {}, formParams = {}, bodyParam = {}, + contentTypes = ['application/json'], accepts = ['application/json']; + try { + return alfrescoJsApi.oauth2Auth.callCustomApi(url, 'DELETE', pathParams, queryParams, headerParams, formParams, bodyParam, + contentTypes, accepts); + + } catch (error) { + logger.error(error.status); + isValid = false; + } +} + +function deploy(model: any) { + const url = `${args.host}/v1/applications/`; + + const pathParams = {}, queryParams = {}, + headerParams = {}, formParams = {}, bodyParam = model, + contentTypes = ['application/json'], accepts = ['application/json']; + try { + return alfrescoJsApi.oauth2Auth.callCustomApi(url, 'POST', pathParams, queryParams, headerParams, formParams, bodyParam, + contentTypes, accepts); + + } catch (error) { + logger.error(error.status); + isValid = false; + } +} + +function getAlfrescoJsApiInstance(configArgs: ConfigArgs) { const config = { provider: 'BPM', - hostBpm: `${args.host}`, + hostBpm: `${configArgs.host}`, authType: 'OAUTH', oauth2: { - host: `${args.oauth}`, - clientId: `${args.clientId}`, + host: `${configArgs.oauth}/auth/realms/alfresco`, + clientId: `${configArgs.clientId}`, scope: 'openid', secret: '', implicitFlow: false, @@ -87,19 +213,8 @@ function getAlfrescoJsApiInstance(args: ConfigArgs) { return new alfrescoApi.AlfrescoApiCompatibility(config); } -async function login(args: ConfigArgs, alfrescoJsApi: any) { - logger.info(`Perform login...`); - try { - await alfrescoJsApi.login(args.modelerUsername, args.modelerPassword); - } catch (error) { - logger.error(`Not able to login. Credentials ${args.modelerUsername}:${args.modelerPassword} are not valid`); - process.exit(1); - } - return alfrescoJsApi; -} - async function deployMissingApps() { - const deployedApps = await deploymentAPI.getApplicationByStatus(''); + const deployedApps = await getApplicationByStatus(''); const absentApps = findMissingApps(deployedApps.list.entries); if (absentApps.length > 0) { @@ -111,7 +226,7 @@ async function deployMissingApps() { } async function checkIfAppIsReleased(absentApps: any []) { - const projectList = await modelingAPI.getProjects(); + const projectList = await getProjects(); let TIME = 5000; let noError = true; @@ -147,11 +262,11 @@ async function checkIfAppIsReleased(absentApps: any []) { logger.info('Project ' + project.entry.name + ' found'); - const projectReleaseList = await modelingAPI.getProjectRelease(project.entry.id); + const projectReleaseList = await getProjectRelease(project.entry.id); if (projectReleaseList.list.entries.length === 0) { logger.warn('Project needs release'); - projectRelease = await modelingAPI.releaseProject(project); + projectRelease = await releaseProject(project); logger.warn(`Project released: ${projectRelease.id}`); } else { logger.info('Project already has release'); @@ -177,18 +292,18 @@ async function checkIfAppIsReleased(absentApps: any []) { 'infrastructure': currentAbsentApp.infrastructure, 'variables': currentAbsentApp.variables }; - await deploymentAPI.deploy(deployPayload); + await deploy(deployPayload); } } } async function checkDescriptorExist(name: string) { logger.info(`Check descriptor ${name} exist in the list `); - const descriptorList = await deploymentAPI.getDescriptors(); - descriptorList.list.entries.forEach( async(descriptor: any) => { + const descriptorList = await getDescriptors(); + descriptorList.list.entries.forEach(async (descriptor: any) => { if (descriptor.entry.name === name) { if (descriptor.entry.deployed === false) { - await deploymentAPI.deleteDescriptor(descriptor.entry.name); + await deleteDescriptor(descriptor.entry.name); } } }); @@ -198,20 +313,20 @@ async function checkDescriptorExist(name: string) { async function importProjectAndRelease(app: any) { await getFileFromRemote(app.file_location, app.name); logger.warn('Project imported ' + app.name); - const result = await modelingAPI.importAndReleaseProject(`${app.name}.zip`); + const projectRelease = await importAndReleaseProject(`${app.name}.zip`); deleteLocalFile(`${app.name}`); - return result; + return projectRelease; } function findMissingApps(deployedApps: any []) { const absentApps: any [] = []; - Object.keys(ACTIVITI_CLOUD_APPS).forEach((key) => { + ['candidatebaseapp', 'simpleapp', 'subprocessapp'].forEach((app) => { const isPresent = deployedApps.find((currentApp: any) => { - return ACTIVITI_CLOUD_APPS[key].name === currentApp.entry.name; + return app === currentApp.entry.name; }); if (!isPresent) { - absentApps.push(ACTIVITI_CLOUD_APPS[key]); + absentApps.push(app); } }); return absentApps; @@ -220,14 +335,14 @@ function findMissingApps(deployedApps: any []) { async function getFileFromRemote(url: string, name: string) { return new Promise((resolve, reject) => { request(url) - .pipe(fs.createWriteStream(`${name}.zip`)) - .on('finish', () => { - logger.info(`The file is finished downloading.`); - resolve(); - }) - .on('error', (error: any) => { - reject(error); - }); + .pipe(fs.createWriteStream(`${name}.zip`)) + .on('finish', () => { + logger.info(`The file is finished downloading.`); + resolve(); + }) + .on('error', (error: any) => { + reject(error); + }); }); } @@ -243,49 +358,13 @@ async function sleep(time: number) { return; } -async function initConfiguration(args: ConfigArgs) { - browser = { - params: { - config: { - log: true - }, - adminapp: { - apiConfig: { - authType: 'OAUTH', - identityHost: args.identityHost, - oauth2: { - host: args.oauth, - authPath: '/protocol/openid-connect/token/', - clientId: args.clientId, - scope: 'openid', - implicitFlow: false, - redirectUri: '' - }, - bpmHost: args.host, - providers: 'BPM' - }, - modeler: args.modelerUsername, - modeler_password: args.modelerPassword, - devops: args.devopsUsername, - devops_password: args.devopsPassword - } - } - }; - - global['protractor'] = {browser: browser}; - - deploymentAPI = new DeploymentAPI(); - modelingAPI = new ModelingAPI(); - - await deploymentAPI.setUp(); - await modelingAPI.setUp(); +export default async function (configArgs: ConfigArgs) { + await main(configArgs); } -export default async function (args: ConfigArgs) { - await main(args); -} +async function main(configArgs: ConfigArgs) { -async function main(args: ConfigArgs) { + args = configArgs; program .version('0.1.0') @@ -293,6 +372,7 @@ async function main(args: ConfigArgs) { 'adf-cli init-aae-env --host "gateway_env" --oauth "identity_env" --identityHost "identity_env" --modelerUsername "modelerusername" --modelerPassword "modelerpassword" --devopsUsername "devevopsusername" --devopsPassword "devopspassword"') .option('-h, --host [type]', 'Host gateway') .option('-o, --oauth [type]', 'Host sso server') + .option('-jsonAppsPath, --oauth [type]', 'Host sso server') .option('--clientId[type]', 'sso client') .option('--modelerUsername [type]', 'username of a user with role ACTIVIT_MODELER') .option('--modelerPassword [type]', 'modeler password') @@ -305,22 +385,19 @@ async function main(args: ConfigArgs) { return; } - await initConfiguration(args); - - const alfrescoJsApi = getAlfrescoJsApiInstance(args); - await login(args, alfrescoJsApi); - - const result = { isValid: true }; + alfrescoJsApi = getAlfrescoJsApiInstance(args); + await alfrescoJsApi.login(args.modelerUsername, args.modelerPassword); AAE_MICROSERVICES.map(async (serviceName) => { - await healthCheck(args, alfrescoJsApi, serviceName, result); + await healthCheck(serviceName); }); - if (result.isValid) { + if (isValid) { logger.error('The environment is up and running'); + await alfrescoJsApi.login(args.devopsUsername, args.devopsPassword); await deployMissingApps(); } else { - logger.error('The environment is not up'); + logger.info('The environment is not up'); process.exit(1); } diff --git a/lib/core/app-config/app-config.service.ts b/lib/core/app-config/app-config.service.ts index 56e73cd9ed..d433e91ab4 100644 --- a/lib/core/app-config/app-config.service.ts +++ b/lib/core/app-config/app-config.service.ts @@ -103,9 +103,17 @@ export class AppConfigService { keywords.set('protocol', this.getLocationProtocol()); result = this.formatString(result, keywords); } + + if (typeof result === 'object') { + result = JSON.parse(JSON.stringify(result).replace('{hostname}', this.getLocationHostname())); + result = JSON.parse(JSON.stringify(result).replace('{:port}', this.getLocationPort(':'))); + result = JSON.parse(JSON.stringify(result).replace('{protocol}', this.getLocationProtocol())); + } + if (result === undefined) { return defaultValue; } + return result; } diff --git a/lib/core/services/automation.service.ts b/lib/core/services/automation.service.ts index 09ca039828..4464af7860 100644 --- a/lib/core/services/automation.service.ts +++ b/lib/core/services/automation.service.ts @@ -46,6 +46,10 @@ export class CoreAutomationService { this.storageService.setItem(key, data); }; + adfProxy.removeStorageItem = (key: string) => { + this.storageService.removeItem(key); + }; + adfProxy.setUserPreference = (key: string, data: any) => { this.userPreferencesService.set(key, data); }; diff --git a/lib/process-services-cloud/src/lib/process/process-filters/components/edit-process-filter-cloud.component.ts b/lib/process-services-cloud/src/lib/process/process-filters/components/edit-process-filter-cloud.component.ts index 9184a5760e..5205edbe97 100644 --- a/lib/process-services-cloud/src/lib/process/process-filters/components/edit-process-filter-cloud.component.ts +++ b/lib/process-services-cloud/src/lib/process/process-filters/components/edit-process-filter-cloud.component.ts @@ -179,7 +179,7 @@ export class EditProcessFilterCloudComponent implements OnInit, OnChanges, OnDes onFilterChange() { this.editProcessFilterForm.valueChanges .pipe( - debounceTime(500), + debounceTime(200), filter(() => this.isFormValid()), takeUntil(this.onDestroy$) ) diff --git a/lib/process-services-cloud/src/lib/task/task-filters/components/edit-task-filter-cloud.component.ts b/lib/process-services-cloud/src/lib/task/task-filters/components/edit-task-filter-cloud.component.ts index 0af6e6bc57..5f496bf932 100644 --- a/lib/process-services-cloud/src/lib/task/task-filters/components/edit-task-filter-cloud.component.ts +++ b/lib/process-services-cloud/src/lib/task/task-filters/components/edit-task-filter-cloud.component.ts @@ -165,7 +165,7 @@ export class EditTaskFilterCloudComponent implements OnInit, OnChanges, OnDestro onFilterChange() { this.editTaskFilterForm.valueChanges .pipe( - debounceTime(500), + debounceTime(200), filter(() => this.isFormValid()), takeUntil(this.onDestroy$) ) diff --git a/lib/testing/README.md b/lib/testing/README.md index 65090355d6..4694c14fba 100644 --- a/lib/testing/README.md +++ b/lib/testing/README.md @@ -5,8 +5,8 @@ Contains the reusable pages for e2e tests ## Run e2e against a remote env using the .env.cloud file Create a file `.env.cloud` under the `e2e` folder ``` -URL_HOST_BPM_ADF="https://gateway.example.com" -URL_HOST_SSO_ADF="https://identity.example.com/auth/realms/alfresco" +HOST_BPM="https://gateway.example.com" +HOST_SSO="https://identity.example.com/auth/realms/alfresco" URL_HOST_IDENTITY="https://identity.example.com/auth/admin/realms/alfresco" IDENTITY_USERNAME_ADF="username" IDENTITY_PASSWORD_ADF="password" @@ -45,8 +45,8 @@ or `./scripts/test-e2e-lib.sh -host http://myadf.example.com -s process-services ## Run e2e against a local env (use dist) using the .env.cloud file Create a file `.env.cloud` under the `e2e` folder ``` -URL_HOST_BPM_ADF="https://gateway.example.com" -URL_HOST_SSO_ADF="https://identity.example.com/auth/realms/alfresco" +HOST_BPM="https://gateway.example.com" +HOST_SSO="https://identity.example.com/auth/realms/alfresco" URL_HOST_IDENTITY="https://identity.example.com/auth/admin/realms/alfresco" IDENTITY_USERNAME_ADF="username" IDENTITY_PASSWORD_ADF="password" diff --git a/lib/testing/src/lib/content-services/actions/permission.actions.ts b/lib/testing/src/lib/content-services/actions/permission.actions.ts index 466f0c962a..5a8d86cd7e 100644 --- a/lib/testing/src/lib/content-services/actions/permission.actions.ts +++ b/lib/testing/src/lib/content-services/actions/permission.actions.ts @@ -15,13 +15,14 @@ * limitations under the License. */ -import { AlfrescoApiCompatibility as AlfrescoApi, NodeEntry, NodeBodyUpdate } from '@alfresco/js-api'; +import { NodeEntry, NodeBodyUpdate } from '@alfresco/js-api'; +import { ApiService } from '../../core/actions/api.service'; export class PermissionActions { - alfrescoJsApi: AlfrescoApi = null; + api: ApiService; - constructor(alfrescoJsApi: AlfrescoApi) { - this.alfrescoJsApi = alfrescoJsApi; + constructor(apiService: ApiService) { + this.api = apiService; } addRoleForUser(userName: string, role: string, nodeToUpdate: NodeEntry): Promise { @@ -36,17 +37,17 @@ export class PermissionActions { ] } }; - return this.alfrescoJsApi.nodes.updateNode(nodeToUpdate.entry.id, payload); + return this.api.apiService.nodes.updateNode(nodeToUpdate.entry.id, payload); } disableInheritedPermissionsForNode(nodeId: string): Promise { const nodeBody = { permissions: { isInheritanceEnabled: false } }; - return this.alfrescoJsApi.nodes.updateNode(nodeId, nodeBody, { include: ['permissions'] }); + return this.api.apiService.nodes.updateNode(nodeId, nodeBody, { include: ['permissions'] }); } enableInheritedPermissionsForNode(nodeId: string): Promise { const nodeBody = { permissions: { isInheritanceEnabled: true } }; - return this.alfrescoJsApi.nodes.updateNode(nodeId, nodeBody, { include: ['permissions'] }); + return this.api.apiService.nodes.updateNode(nodeId, nodeBody, { include: ['permissions'] }); } } diff --git a/lib/testing/src/lib/content-services/actions/upload.actions.ts b/lib/testing/src/lib/content-services/actions/upload.actions.ts index 9fe94dc810..95db193736 100644 --- a/lib/testing/src/lib/content-services/actions/upload.actions.ts +++ b/lib/testing/src/lib/content-services/actions/upload.actions.ts @@ -17,22 +17,23 @@ import * as path from 'path'; import * as fs from 'fs'; -import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; -import { NodeEntry } from '@alfresco/js-api/src/api/content-rest-api/model/nodeEntry'; -import { ApiUtil } from '../../core/structure/api.util'; +import { NodeEntry } from '@alfresco/js-api'; +import { ApiUtil } from '../../core/actions/api.util'; import { Logger } from '../../core/utils/logger'; +import { ApiService } from '../../core/actions/api.service'; export class UploadActions { - alfrescoJsApi: AlfrescoApi = null; - constructor(alfrescoJsApi: AlfrescoApi) { - this.alfrescoJsApi = alfrescoJsApi; + api: ApiService; + + constructor(alfrescoJsApi: ApiService) { + this.api = alfrescoJsApi; } async uploadFile(fileLocation, fileName, parentFolderId): Promise { const file = fs.createReadStream(fileLocation); - return this.alfrescoJsApi.upload.uploadFile( + return this.api.apiService.upload.uploadFile( file, '', parentFolderId, @@ -55,11 +56,11 @@ export class UploadActions { filesRequest.push(jsonItem); } - return this.alfrescoJsApi.nodes.addNode(parentFolderId, filesRequest, {}); + return this.api.apiService.nodes.addNode(parentFolderId, filesRequest, {}); } async createFolder(folderName, parentFolderId): Promise { - return this.alfrescoJsApi.node.addNode(parentFolderId, { + return this.api.apiService.node.addNode(parentFolderId, { name: folderName, nodeType: 'cm:folder' }, {}); @@ -68,7 +69,7 @@ export class UploadActions { async deleteFileOrFolder(nodeId) { const apiCall = async () => { try { - return this.alfrescoJsApi.node.deleteNode(nodeId, { permanent: true }); + return this.api.apiService.node.deleteNode(nodeId, { permanent: true }); } catch (error) { Logger.error('Error delete file or folder'); } diff --git a/lib/testing/src/lib/content-services/dialog/content-node-selector-dialog.page.ts b/lib/testing/src/lib/content-services/dialog/content-node-selector-dialog.page.ts index 08c068bc5c..c243061578 100644 --- a/lib/testing/src/lib/content-services/dialog/content-node-selector-dialog.page.ts +++ b/lib/testing/src/lib/content-services/dialog/content-node-selector-dialog.page.ts @@ -19,7 +19,7 @@ import { by, element, ElementFinder } from 'protractor'; import { DocumentListPage } from '../pages/document-list.page'; import { BrowserVisibility } from '../../core/utils/browser-visibility'; import { BrowserActions } from '../../core/utils/browser-actions'; -import { DropdownPage } from '../../material/pages/dropdown.page'; +import { DropdownPage } from '../../core/pages/material/dropdown.page'; import { DataTableComponentPage } from '../../core/pages/data-table-component.page'; export class ContentNodeSelectorDialogPage { diff --git a/lib/testing/src/lib/content-services/pages/search/date-range-filter.page.ts b/lib/testing/src/lib/content-services/pages/search/date-range-filter.page.ts index 1ed1536b23..2de931ad2d 100644 --- a/lib/testing/src/lib/content-services/pages/search/date-range-filter.page.ts +++ b/lib/testing/src/lib/content-services/pages/search/date-range-filter.page.ts @@ -16,7 +16,7 @@ */ import { by, protractor, ElementFinder, Locator, element } from 'protractor'; -import { DatePickerCalendarPage } from '../../../material/pages/date-picker-calendar.page'; +import { DatePickerCalendarPage } from '../../../core/pages/material/date-picker-calendar.page'; import { BrowserVisibility } from '../../../core/utils/browser-visibility'; import { BrowserActions } from '../../../core/utils/browser-actions'; diff --git a/lib/testing/src/lib/content-services/pages/search/search-sorting-picker.page.ts b/lib/testing/src/lib/content-services/pages/search/search-sorting-picker.page.ts index 328b60d32b..513552c935 100644 --- a/lib/testing/src/lib/content-services/pages/search/search-sorting-picker.page.ts +++ b/lib/testing/src/lib/content-services/pages/search/search-sorting-picker.page.ts @@ -18,7 +18,7 @@ import { browser, by, element, ElementFinder } from 'protractor'; import { BrowserActions } from '../../../core/utils/browser-actions'; import { BrowserVisibility } from '../../../core/utils/browser-visibility'; -import { DropdownPage } from '../../../material/pages/dropdown.page'; +import { DropdownPage } from '../../../core/pages/material/dropdown.page'; export class SearchSortingPickerPage { diff --git a/lib/testing/src/lib/core/actions/APS/applications.util.ts b/lib/testing/src/lib/core/actions/APS/applications.util.ts deleted file mode 100644 index 41513b17ce..0000000000 --- a/lib/testing/src/lib/core/actions/APS/applications.util.ts +++ /dev/null @@ -1,69 +0,0 @@ -/*! - * @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 { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; -import { Logger } from '../../utils/logger'; -import * as remote from 'selenium-webdriver/remote'; -import { browser } from 'protractor'; -import * as fs from 'fs'; - -export class AppPublish { - comment: string = ''; - force: boolean = true; -} - -export class ApplicationsUtil { - - api: AlfrescoApi; - - constructor(api: AlfrescoApi) { - this.api = api; - } - - async importPublishDeployApp(appFileLocation, option = {}) { - try { - const appCreated = await this.importApplication(appFileLocation, option); - const publishApp = await this.api.activiti.appsApi.publishAppDefinition(appCreated.id, new AppPublish()); - await this.api.activiti.appsApi.deployAppDefinitions({ appDefinitions: [{ id: publishApp.appDefinition.id }] }); - return appCreated; - } catch (error) { - Logger.error('Import Publish Deploy Application - Service error, Response: ', JSON.parse(JSON.stringify(error)).response.text); - } - } - - async importApplication(appFileLocation, options = {}): Promise { - try { - browser.setFileDetector(new remote.FileDetector()); - const file = fs.createReadStream(appFileLocation); - return await this.api.activiti.appsDefinitionApi.importAppDefinition(file, options); - } catch (error) { - Logger.error('Import Application - Service error, Response: ', JSON.parse(JSON.stringify(error)).response.text); - } - } - - async getAppDefinitionByName(appName): Promise { - try { - const appDefinitionsList = await this.api.activiti.appsApi.getAppDefinitions(); - const appDefinition = appDefinitionsList.data.filter((currentApp) => { - return currentApp.name === appName; - }); - return appDefinition; - } catch (error) { - Logger.error('Get AppDefinitions - Service error, Response: ', JSON.parse(JSON.stringify(error)).response.text); - } - } -} diff --git a/lib/testing/src/lib/core/actions/api.service.ts b/lib/testing/src/lib/core/actions/api.service.ts index 958fe5afd7..98c9ea52dc 100644 --- a/lib/testing/src/lib/core/actions/api.service.ts +++ b/lib/testing/src/lib/core/actions/api.service.ts @@ -16,6 +16,7 @@ */ import { AlfrescoApiCompatibility as AlfrescoApi, AlfrescoApiConfig } from '@alfresco/js-api'; +import { browser } from 'protractor'; export class ApiService { @@ -23,28 +24,44 @@ export class ApiService { config: AlfrescoApiConfig; - constructor(clientId: string, host: string, hostSso: string, provider: string) { - this.config = { - provider, - hostBpm: host, - hostEcm: host, - authType: 'OAUTH', - oauth2: { - host: hostSso, - clientId, - scope: 'openid', - secret: '', - implicitFlow: false, - silentLogin: false, - redirectUri: '/', - redirectUriLogout: '/logout' - } + constructor(clientIdOrAppConfig?: AlfrescoApiConfig | string, host?: string, hostSso?: string, provider?: string) { - }; + if (browser.params.testConfig && browser.params.testConfig.appConfig) { + this.config = { ...browser.params.testConfig.appConfig }; + this.config.hostEcm = browser.params.testConfig.appConfig.ecmHost; + this.config.hostBpm = browser.params.testConfig.appConfig.bpmHost; + } + if (clientIdOrAppConfig && typeof clientIdOrAppConfig !== 'string') { + this.config = { ...browser.params.testConfig.appConfig, ...clientIdOrAppConfig }; + + this.config.hostEcm = clientIdOrAppConfig.hostEcm ? clientIdOrAppConfig.hostEcm : browser.params.testConfig.appConfig.ecmHost; + this.config.hostBpm = clientIdOrAppConfig.hostBpm ? clientIdOrAppConfig.hostBpm : browser.params.testConfig.appConfig.bpmHost; + } else if (clientIdOrAppConfig && typeof clientIdOrAppConfig === 'string') { + this.config.oauth2.clientId = clientIdOrAppConfig; + } + + if (hostSso) { + this.config.oauth2.host = hostSso; + } + + if (host) { + this.config.hostBpm = host; + this.config.hostEcm = host; + } + + if (provider) { + this.config.provider = provider; + } + + this.config.oauth2.implicitFlow = false; this.apiService = new AlfrescoApi(this.config); } + getInstance(): AlfrescoApi { + return this.apiService; + } + async login(username: string, password: string): Promise { await this.apiService.login(username, password); } diff --git a/lib/testing/src/lib/core/structure/api.ts b/lib/testing/src/lib/core/actions/api.ts similarity index 60% rename from lib/testing/src/lib/core/structure/api.ts rename to lib/testing/src/lib/core/actions/api.ts index 8cf77906ca..fdc267a251 100644 --- a/lib/testing/src/lib/core/structure/api.ts +++ b/lib/testing/src/lib/core/actions/api.ts @@ -19,24 +19,24 @@ import { AlfrescoApi } from '@alfresco/js-api'; import { browser } from 'protractor'; export abstract class Api { - public api: AlfrescoApi; - testConfig = browser.params; + public api: AlfrescoApi; - constructor(root: string) { - this.api = this.configureApi(root); - } + constructor(root: string) { + this.api = this.configureApi(root); + } - private configureApi(root: string): AlfrescoApi { - const config = browser.params.adminapp.apiConfig; - return new AlfrescoApi({ - provider: 'BPM', - authType: config.authType, - oauth2: config.oauth2, - hostBpm: config.bpmHost + '/' + root - }); - } + private configureApi(root: string): AlfrescoApi { + const config = browser.params.adminapp.apiConfig; - abstract setUp(): Promise; + return new AlfrescoApi({ + provider: 'BPM', + authType: config.authType, + oauth2: config.oauth2, + hostBpm: config.bpmHost + '/' + root + }); + } - abstract tearDown(); + abstract setUp(): Promise; + + abstract tearDown(); } diff --git a/lib/testing/src/lib/core/structure/api.util.ts b/lib/testing/src/lib/core/actions/api.util.ts similarity index 100% rename from lib/testing/src/lib/core/structure/api.util.ts rename to lib/testing/src/lib/core/actions/api.util.ts diff --git a/e2e/actions/drop.actions.ts b/lib/testing/src/lib/core/actions/drop.actions.ts similarity index 96% rename from e2e/actions/drop.actions.ts rename to lib/testing/src/lib/core/actions/drop.actions.ts index e0dd5888a9..1e5c2524ee 100644 --- a/e2e/actions/drop.actions.ts +++ b/lib/testing/src/lib/core/actions/drop.actions.ts @@ -14,11 +14,11 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - -import fs = require('fs'); -import path = require('path'); import { browser } from 'protractor'; -import remote = require('selenium-webdriver/remote'); + +import * as path from 'path'; +import * as fs from 'fs'; +import * as remote from 'selenium-webdriver/remote'; const JS_BIND_INPUT = function(target) { const input = document.createElement('input'); diff --git a/lib/testing/src/lib/core/actions/e2e-request-api.helper.ts b/lib/testing/src/lib/core/actions/e2e-request-api.helper.ts new file mode 100644 index 0000000000..b857c5f75f --- /dev/null +++ b/lib/testing/src/lib/core/actions/e2e-request-api.helper.ts @@ -0,0 +1,121 @@ +/*! + * @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 { Api } from './api'; +import { ApiService } from './api.service'; +import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; + +export interface E2eRequestApiHelperOptions { + pathParams?: { [key: string]: any }; + queryParams?: { [key: string]: any }; + headerParams?: { [key: string]: any }; + formParams?: { [key: string]: any }; + bodyParam?: { [key: string]: any }; + contentTypes?: string[]; + accepts?: string[]; + returnType?: any; + contextRoot?: string; + responseType?: 'arraybuffer' | 'blob' | 'document' | 'json' | 'text'; +} + +function getDefaultOptions(): E2eRequestApiHelperOptions { + return { + pathParams: {}, + queryParams: {}, + headerParams: {}, + formParams: {}, + bodyParam: {}, + contentTypes: ['application/json'], + accepts: ['application/json'], + returnType: undefined + }; +} + +export class E2eRequestApiHelper { + + api: AlfrescoApi; + + // @ts-ignore + constructor(private backend: Api | ApiService) { + if (backend.constructor === Api) { + // @ts-ignore + this.api = backend.api; + } else { + // @ts-ignore + this.api = backend.apiService; + } + } + + private buildUrl(endPoint: string): string { + const trimSlash = (str: string) => str.replace(/^\/|\/$/g, ''); + const host = this.api.config.hostBpm; + const path = '/' + trimSlash(endPoint); + + return `${host}${path}`; + } + + public get(endPoint: string, overriddenOptions?: E2eRequestApiHelperOptions): PromiseLike { + return this.request('GET', endPoint, overriddenOptions); + } + + public post(endPoint: string, overriddenOptions?: E2eRequestApiHelperOptions): PromiseLike { + return this.request('POST', endPoint, overriddenOptions); + } + + public put(endPoint: string, overriddenOptions?: E2eRequestApiHelperOptions): PromiseLike { + return this.request('PUT', endPoint, overriddenOptions); + } + + public delete(endPoint: string, overriddenOptions?: E2eRequestApiHelperOptions): PromiseLike { + return this.request('DELETE', endPoint, overriddenOptions); + } + + private request(httpMethod: string, endPoint: string, overriddenOptions?: E2eRequestApiHelperOptions): PromiseLike { + const options = { + ...getDefaultOptions(), + ...overriddenOptions + }; + + const { + pathParams, + queryParams, + headerParams, + formParams, + bodyParam, + contentTypes, + accepts, + returnType, + contextRoot, + responseType + } = options; + + return this.api.oauth2Auth.callCustomApi( + this.buildUrl(endPoint), + httpMethod, + pathParams, + queryParams, + headerParams, + formParams, + bodyParam, + contentTypes, + accepts, + returnType, + contextRoot, + responseType + ); + } +} diff --git a/lib/testing/src/lib/core/actions/identity/applications.service.ts b/lib/testing/src/lib/core/actions/identity/applications.service.ts deleted file mode 100644 index e6657e3c61..0000000000 --- a/lib/testing/src/lib/core/actions/identity/applications.service.ts +++ /dev/null @@ -1,42 +0,0 @@ -/*! - * @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 { ApiService } from '../api.service'; -import { Logger } from '../../utils/logger'; - -export class ApplicationsService { - - api: ApiService; - - constructor(api: ApiService) { - this.api = api; - } - - async getApplicationsByStatus(status): Promise { - try { - const path = '/deployment-service/v1/applications'; - const method = 'GET'; - - const queryParams = { status: status, sort: 'name' }, postBody = {}; - - return this.api.performBpmOperation(path, method, queryParams, postBody); - } catch (error) { - Logger.error('Get Applications - Service error, Response: ', JSON.parse(JSON.stringify(error)).response.text); - } - } - -} diff --git a/lib/testing/src/lib/core/actions/identity/group-identity.service.ts b/lib/testing/src/lib/core/actions/identity/group-identity.service.ts index 90701dcb81..992c028efb 100644 --- a/lib/testing/src/lib/core/actions/identity/group-identity.service.ts +++ b/lib/testing/src/lib/core/actions/identity/group-identity.service.ts @@ -17,7 +17,7 @@ import { ApiService } from '../api.service'; import { StringUtil } from '../../utils/string.util'; -import { ApiUtil } from '../../structure/api.util'; +import { ApiUtil } from '../../actions/api.util'; import { Logger } from '../../utils/logger'; import { browser } from 'protractor'; diff --git a/lib/testing/src/lib/core/actions/identity/identity.service.ts b/lib/testing/src/lib/core/actions/identity/identity.service.ts index 323bc18073..dd19d94930 100644 --- a/lib/testing/src/lib/core/actions/identity/identity.service.ts +++ b/lib/testing/src/lib/core/actions/identity/identity.service.ts @@ -17,7 +17,6 @@ import { ApiService } from '../api.service'; import { UserModel } from '../../models/user.model'; -import { PersonBodyCreate } from '@alfresco/js-api'; import { RolesService } from './roles.service'; import { Logger } from '../../utils/logger'; @@ -36,8 +35,8 @@ export class IdentityService { ACTIVITI_IDENTITY: 'ACTIVITI_IDENTITY' }; - async createIdentityUserWithRole(apiService: ApiService, roles: string[]): Promise { - const rolesService = new RolesService(apiService); + async createIdentityUserWithRole(roles: string[]): Promise { + const rolesService = new RolesService(this.api); const user = await this.createIdentityUser(); for (let i = 0; i < roles.length; i++) { const roleId = await rolesService.getRoleIdByRoleName(roles[i]); @@ -55,33 +54,6 @@ export class IdentityService { return user; } - async createIdentityUserAndSyncECMBPM(user: UserModel): Promise { - if (this.api.config.provider === 'ECM' || this.api.config.provider === 'ALL') { - const createUser: PersonBodyCreate = { - firstName: user.firstName, - lastName: user.lastName, - password: user.password, - email: user.email, - id: user.email - } as PersonBodyCreate; - await this.api.apiService.core.peopleApi.addPerson(createUser); - } - - if (this.api.config.provider === 'BPM' || this.api.config.provider === 'ALL') { - await this.api.apiService.activiti.adminUsersApi.createNewUser({ - email: user.email, - firstName: user.firstName, - lastName: user.lastName, - password: user.password, - type: 'enterprise', - tenantId: 1, - company: null - }); - } - - await this.createIdentityUser(user); - } - async deleteIdentityUser(userId: string): Promise { await this.deleteUser(userId); } diff --git a/lib/testing/src/lib/core/actions/identity/public-api.ts b/lib/testing/src/lib/core/actions/identity/public-api.ts index 0cb1aa3229..01dd1b7df1 100644 --- a/lib/testing/src/lib/core/actions/identity/public-api.ts +++ b/lib/testing/src/lib/core/actions/identity/public-api.ts @@ -15,9 +15,7 @@ * limitations under the License. */ -export * from './applications.service'; export * from './identity.service'; export * from './group-identity.service'; export * from './roles.service'; -export * from './tasks.service'; export * from './query.service'; diff --git a/lib/testing/src/lib/core/actions/identity/query.service.ts b/lib/testing/src/lib/core/actions/identity/query.service.ts index 25ce63d7dd..2b78d54b28 100644 --- a/lib/testing/src/lib/core/actions/identity/query.service.ts +++ b/lib/testing/src/lib/core/actions/identity/query.service.ts @@ -17,7 +17,7 @@ import { ApiService } from '../api.service'; import { Logger } from '../../utils/logger'; -import { ApiUtil } from '../../structure/api.util'; +import { ApiUtil } from '../../actions/api.util'; export type TaskStatus = 'COMPLETED' | 'CREATED' | 'ASSIGNED' | 'SUSPENDED' | 'CANCELLED' | 'COMPLETED'; diff --git a/lib/testing/src/lib/core/actions/public-api.ts b/lib/testing/src/lib/core/actions/public-api.ts index df8983df7a..13086ece5b 100644 --- a/lib/testing/src/lib/core/actions/public-api.ts +++ b/lib/testing/src/lib/core/actions/public-api.ts @@ -16,5 +16,8 @@ */ export * from './identity/public-api'; -export * from './APS/public-api'; export * from './api.service'; +export * from './drop.actions'; +export * from './api'; +export * from './api.util'; +export * from './e2e-request-api.helper'; diff --git a/lib/testing/src/lib/core/models/user.model.ts b/lib/testing/src/lib/core/models/user.model.ts index 64d9d7fc68..a3ed8e53ae 100644 --- a/lib/testing/src/lib/core/models/user.model.ts +++ b/lib/testing/src/lib/core/models/user.model.ts @@ -17,24 +17,49 @@ import { StringUtil } from '../utils/string.util'; import { browser } from 'protractor'; +import { UserRepresentation } from '@alfresco/js-api'; export class UserModel { - EMAIL_DOMAIN = browser.params.testConfig ? browser.params.testConfig.projectName : 'alfresco'; + firstName?: string = StringUtil.generateRandomLowercaseString(); + lastName?: string = StringUtil.generateRandomLowercaseString(); + password?: string = StringUtil.generateRandomLowercaseString(4) + StringUtil.generateRandomString(4).toUpperCase(); + email?: string; + username?: string; + idIdentityService?: string; + type = 'enterprise'; + tenantId; + company; + id: number; - firstName: string = StringUtil.generateRandomString(); - lastName: string = StringUtil.generateRandomString(); - password: string = StringUtil.generateRandomString(); - email: string = StringUtil.generateRandomEmail(`@${this.EMAIL_DOMAIN}.com`); - username: string = StringUtil.generateRandomString().toLowerCase(); - idIdentityService: string; + constructor(details: any = {}) { + const EMAIL_DOMAIN = browser.params.testConfig ? browser.params.testConfig.projectName : 'alfresco'; + this.firstName = details.firstName ? details.firstName : this.firstName; + this.lastName = details.lastName ? details.lastName : this.lastName; - constructor(details?: any) { - Object.assign(this, details); + const USER_IDENTIFY = `${this.firstName}${this.lastName}.${StringUtil.generateRandomLowercaseString(5)}`; + + this.password = details.password ? details.password : this.password; + this.email = details.email ? details.email : `${USER_IDENTIFY}@${EMAIL_DOMAIN}.com`; + this.username = details.username ? details.username : USER_IDENTIFY; + this.idIdentityService = details.idIdentityService ? details.idIdentityService : this.idIdentityService; + this.type = details.type ? details.type : this.type; + this.tenantId = details.tenantId ? details.tenantId : this.tenantId; + this.company = details.company ? details.company : this.company; + this.id = details.id ? details.id : this.id; } - get id() { - return this.email; + getAPSModel() { + return new UserRepresentation({ + firstName: this.firstName, + lastName: this.lastName, + password: this.password, + email: this.email, + type: this.type, + tenantId: this.tenantId, + company: this.company, + id: this.id + }); } } diff --git a/lib/testing/src/lib/core/pages/card-view/card-view-date-item.page.ts b/lib/testing/src/lib/core/pages/card-view/card-view-date-item.page.ts index 8db0371e32..9c12008fc5 100644 --- a/lib/testing/src/lib/core/pages/card-view/card-view-date-item.page.ts +++ b/lib/testing/src/lib/core/pages/card-view/card-view-date-item.page.ts @@ -16,8 +16,8 @@ */ import { element, by, ElementFinder, Locator } from 'protractor'; -import { DateTimePickerPage } from '../../../material/pages/date-time-picker.page'; -import { DatePickerPage } from '../../../material/pages/date-picker.page'; +import { DateTimePickerPage } from '../material/date-time-picker.page'; +import { DatePickerPage } from '../material/date-picker.page'; export class CardDateItemPage { diff --git a/lib/testing/src/lib/core/pages/card-view/card-view-select-item.page.ts b/lib/testing/src/lib/core/pages/card-view/card-view-select-item.page.ts index 0b7097070e..ad74f99d6d 100644 --- a/lib/testing/src/lib/core/pages/card-view/card-view-select-item.page.ts +++ b/lib/testing/src/lib/core/pages/card-view/card-view-select-item.page.ts @@ -17,7 +17,7 @@ import { element, by, ElementFinder, Locator } from 'protractor'; import { BrowserVisibility } from '../../utils/public-api'; -import { DropdownPage } from '../../../material/pages/dropdown.page'; +import { DropdownPage } from '../material/dropdown.page'; export class CardSelectItemPage { diff --git a/lib/testing/src/lib/core/pages/form/form-fields.ts b/lib/testing/src/lib/core/pages/form/form-fields.ts index 0839618943..405d014897 100644 --- a/lib/testing/src/lib/core/pages/form/form-fields.ts +++ b/lib/testing/src/lib/core/pages/form/form-fields.ts @@ -17,7 +17,7 @@ import { by, element, Locator, ElementFinder } from 'protractor'; import { BrowserVisibility, BrowserActions } from '../../utils/public-api'; -import { DropdownPage } from '../../../material/pages/dropdown.page'; +import { DropdownPage } from '../material/dropdown.page'; export class FormFields { @@ -36,27 +36,27 @@ export class FormFields { selectFormDropdown = new DropdownPage(element.all(by.css('adf-attach-form div[class*="mat-select-arrow"]')).first()); - async setFieldValue(locator, field, value): Promise { + async setFieldValue(locator, field, value: string): Promise { const fieldElement = element(locator(field)); await BrowserActions.clearSendKeys(fieldElement, value); } - async clickField(locator, field, fieldtext?): Promise { + async clickField(locator, field: string, fieldtext?: string): Promise { const fieldElement = fieldtext ? element(locator(field, fieldtext)) : element(locator(field)); await BrowserActions.click(fieldElement); } - async checkWidgetIsVisible(fieldId): Promise { + async checkWidgetIsVisible(fieldId: string): Promise { const fieldElement = element.all(by.css(`adf-form-field div[id='field-${fieldId}-container']`)).first(); await BrowserVisibility.waitUntilElementIsVisible(fieldElement); } - async checkWidgetIsClickable(fieldId): Promise { + async checkWidgetIsClickable(fieldId: string): Promise { const fieldElement = element.all(by.css(`adf-form-field div[id='field-${fieldId}-container']`)).first(); await BrowserVisibility.waitUntilElementIsClickable(fieldElement); } - async checkWidgetIsHidden(fieldId): Promise { + async checkWidgetIsHidden(fieldId: string): Promise { const hiddenElement = element(by.css(`adf-form-field div[id='field-${fieldId}-container']`)); await BrowserVisibility.waitUntilElementIsNotVisible(hiddenElement, 6000); } @@ -65,30 +65,30 @@ export class FormFields { return element(by.css(`adf-form-field div[id='field-${fieldId}-container']`)); } - async getFieldValue(fieldId, valueLocatorParam?: any): Promise { + async getFieldValue(fieldId: string, valueLocatorParam?: any): Promise { const valueWidget: ElementFinder = await (await this.getWidget(fieldId)).element(valueLocatorParam || this.valueLocator); await BrowserVisibility.waitUntilElementIsVisible(valueWidget); return valueWidget.getAttribute('value'); } - async getFieldLabel(fieldId, labelLocatorParam?: any) { + async getFieldLabel(fieldId: string, labelLocatorParam?: any) { const label = await (await this.getWidget(fieldId)).all(labelLocatorParam || this.labelLocator).first(); return BrowserActions.getText(label); } - async getFieldErrorMessage(fieldId): Promise { + async getFieldErrorMessage(fieldId: string): Promise { const error = await this.getWidget(fieldId); error.element(this.errorMessage); return BrowserActions.getText(error); } - async getFieldText(fieldId, labelLocatorParam?: any) { + async getFieldText(fieldId: string, labelLocatorParam?: any) { const label = await (await this.getWidget(fieldId)).element(labelLocatorParam || this.labelLocator); return BrowserActions.getText(label); } - async getFieldPlaceHolder(fieldId, locator = 'input'): Promise { + async getFieldPlaceHolder(fieldId: string, locator = 'input'): Promise { const placeHolderLocator: ElementFinder = element(by.css(`${locator}#${fieldId}`)); await BrowserVisibility.waitUntilElementIsVisible(placeHolderLocator); return placeHolderLocator.getAttribute('placeholder'); @@ -137,11 +137,11 @@ export class FormFields { await BrowserActions.click(this.attachFormButton); } - async selectForm(formName): Promise { + async selectForm(formName: string): Promise { await this.selectFormDropdown.selectDropdownOption(formName); } - async selectFormFromDropDown(formName): Promise { + async selectFormFromDropDown(formName: string): Promise { const formNameElement = element(by.cssContainingText('span', formName)); await BrowserActions.click(formNameElement); } @@ -157,7 +157,7 @@ export class FormFields { await BrowserActions.click(this.completeButton); } - async setValueInInputById(fieldId, value): Promise { + async setValueInInputById(fieldId: string, value: string): Promise { const input = element(by.id(fieldId)); await BrowserActions.clearSendKeys(input, value); } diff --git a/lib/testing/src/lib/core/pages/login-sso.page.ts b/lib/testing/src/lib/core/pages/login-sso.page.ts index 39a1f20b6b..84dee9e7d4 100644 --- a/lib/testing/src/lib/core/pages/login-sso.page.ts +++ b/lib/testing/src/lib/core/pages/login-sso.page.ts @@ -15,7 +15,7 @@ * limitations under the License. */ -import { element, by, browser, protractor } from 'protractor'; +import { element, by, browser, protractor, ElementFinder } from 'protractor'; import { BrowserVisibility } from '../utils/browser-visibility'; import { BrowserActions } from '../utils/browser-actions'; @@ -28,7 +28,35 @@ export class LoginSSOPage { header = element(by.tagName('adf-layout-header')); loginError = element(by.css(`div[data-automation-id="login-error"]`)); - async loginSSOIdentityService(username, password) { + txtUsernameBasicAuth: ElementFinder = element(by.css('input[id="username"]')); + txtPasswordBasicAuth: ElementFinder = element(by.css('input[id="password"]')); + signInButtonBasicAuth: ElementFinder = element(by.id('login-button')); + + async goToLoginPage(): Promise { + let currentUrl; + + try { + currentUrl = await browser.getCurrentUrl(); + } catch (e) { + } + + if (!currentUrl || currentUrl.indexOf(`${browser.baseUrl}/login`) === -1) { + await BrowserActions.getUrl(browser.baseUrl + '/login'); + } + + await BrowserVisibility.waitUntilElementIsVisible(this.txtUsernameBasicAuth); + await BrowserVisibility.waitUntilElementIsVisible(this.txtPasswordBasicAuth); + } + + async login(username: string, password: string) { + if (browser.params.testConfig.appConfig.authType === 'OAUTH') { + await this.loginSSOIdentityService(username, password); + } else { + await this.loginBasicAuth(username, password); + } + } + + async loginSSOIdentityService(username: string, password: string) { browser.ignoreSynchronization = true; let currentUrl; @@ -53,15 +81,36 @@ export class LoginSSOPage { await browser.waitForAngular(); } - async clickOnSSOButton() { - await BrowserActions.clickExecuteScript('[data-automation-id="login-button-sso"]'); + async loginBasicAuth(username: string, password: string): Promise { + await this.goToLoginPage(); + + await this.enterUsernameBasicAuth(username); + await this.enterPasswordBasicAuth(password); + await this.clickSignInBasicAuthButton(); + await BrowserVisibility.waitUntilElementIsVisible(this.header); } - async enterUsername(username) { + async clickSignInBasicAuthButton(): Promise { + await BrowserActions.click(this.signInButtonBasicAuth); + } + + async enterUsernameBasicAuth(username): Promise { + await BrowserActions.clearSendKeys(this.txtUsernameBasicAuth, username); + } + + async enterPasswordBasicAuth(password): Promise { + await BrowserActions.clearSendKeys(this.txtPasswordBasicAuth, password); + } + + async clickOnSSOButton() { + await BrowserActions.click(this.ssoButton); + } + + async enterUsername(username: string) { await BrowserActions.clearSendKeys(this.usernameField, username); } - async enterPassword(password) { + async enterPassword(password: string) { await BrowserActions.clearSendKeys(this.passwordField, password); } diff --git a/lib/testing/src/lib/core/pages/material/checkbox.page.ts b/lib/testing/src/lib/core/pages/material/checkbox.page.ts new file mode 100644 index 0000000000..df4351e92a --- /dev/null +++ b/lib/testing/src/lib/core/pages/material/checkbox.page.ts @@ -0,0 +1,39 @@ +/*! + * @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 { ElementFinder } from 'protractor'; +import { BrowserActions } from '../../utils/browser-actions'; +import { BrowserVisibility } from '../../utils/browser-visibility'; + +export class CheckboxPage { + + static async uncheck(el: ElementFinder) { + await BrowserVisibility.waitUntilElementIsVisible(el); + const classList = await el.getAttribute('class'); + if (classList && classList.indexOf('mat-checked') > -1) { + await BrowserActions.click(el); + } + } + + static async 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/lib/testing/src/lib/material/pages/date-picker-calendar.page.ts b/lib/testing/src/lib/core/pages/material/date-picker-calendar.page.ts similarity index 93% rename from lib/testing/src/lib/material/pages/date-picker-calendar.page.ts rename to lib/testing/src/lib/core/pages/material/date-picker-calendar.page.ts index 3bd51e67df..9df37a3fba 100644 --- a/lib/testing/src/lib/material/pages/date-picker-calendar.page.ts +++ b/lib/testing/src/lib/core/pages/material/date-picker-calendar.page.ts @@ -16,9 +16,9 @@ */ import { element, by, ElementFinder } from 'protractor'; -import { DateUtil } from '../../core/utils/date-util'; -import { BrowserVisibility } from '../../core/utils/browser-visibility'; -import { BrowserActions } from '../../core/utils/browser-actions'; +import { DateUtil } from '../../utils/date-util'; +import { BrowserVisibility } from '../../utils/browser-visibility'; +import { BrowserActions } from '../../utils/browser-actions'; export class DatePickerCalendarPage { diff --git a/lib/testing/src/lib/material/pages/date-picker.page.ts b/lib/testing/src/lib/core/pages/material/date-picker.page.ts similarity index 94% rename from lib/testing/src/lib/material/pages/date-picker.page.ts rename to lib/testing/src/lib/core/pages/material/date-picker.page.ts index d2d2031546..1b386f8d1d 100644 --- a/lib/testing/src/lib/material/pages/date-picker.page.ts +++ b/lib/testing/src/lib/core/pages/material/date-picker.page.ts @@ -16,7 +16,7 @@ */ import { element, by, ElementFinder } from 'protractor'; -import { BrowserActions } from '../../core/utils/browser-actions'; +import { BrowserActions } from '../../utils/browser-actions'; import { DatePickerCalendarPage } from './date-picker-calendar.page'; export class DatePickerPage { diff --git a/lib/testing/src/lib/material/pages/date-time-picker-calendar.page.ts b/lib/testing/src/lib/core/pages/material/date-time-picker-calendar.page.ts similarity index 95% rename from lib/testing/src/lib/material/pages/date-time-picker-calendar.page.ts rename to lib/testing/src/lib/core/pages/material/date-time-picker-calendar.page.ts index ee1e9211be..31796c504e 100644 --- a/lib/testing/src/lib/material/pages/date-time-picker-calendar.page.ts +++ b/lib/testing/src/lib/core/pages/material/date-time-picker-calendar.page.ts @@ -16,8 +16,8 @@ */ import { element, by, ElementFinder, Locator } from 'protractor'; -import { BrowserVisibility } from '../../core/utils/browser-visibility'; -import { BrowserActions } from '../../core/utils/browser-actions'; +import { BrowserVisibility } from '../../utils/browser-visibility'; +import { BrowserActions } from '../../utils/browser-actions'; export class DateTimePickerCalendarPage { diff --git a/lib/testing/src/lib/material/pages/date-time-picker.page.ts b/lib/testing/src/lib/core/pages/material/date-time-picker.page.ts similarity index 96% rename from lib/testing/src/lib/material/pages/date-time-picker.page.ts rename to lib/testing/src/lib/core/pages/material/date-time-picker.page.ts index 94eb1234ba..6d35e6c449 100644 --- a/lib/testing/src/lib/material/pages/date-time-picker.page.ts +++ b/lib/testing/src/lib/core/pages/material/date-time-picker.page.ts @@ -16,7 +16,7 @@ */ import { element, by, ElementFinder } from 'protractor'; -import { BrowserActions } from '../../core/utils/browser-actions'; +import { BrowserActions } from '../../utils/browser-actions'; import { DateTimePickerCalendarPage } from './date-time-picker-calendar.page'; export class DateTimePickerPage { diff --git a/lib/testing/src/lib/material/pages/dropdown.page.ts b/lib/testing/src/lib/core/pages/material/dropdown.page.ts similarity index 95% rename from lib/testing/src/lib/material/pages/dropdown.page.ts rename to lib/testing/src/lib/core/pages/material/dropdown.page.ts index fa4d2564dd..3888dfa149 100644 --- a/lib/testing/src/lib/material/pages/dropdown.page.ts +++ b/lib/testing/src/lib/core/pages/material/dropdown.page.ts @@ -16,8 +16,8 @@ */ import { element, by, ElementFinder } from 'protractor'; -import { BrowserVisibility } from '../../core/utils/browser-visibility'; -import { BrowserActions } from '../../core/utils/browser-actions'; +import { BrowserVisibility } from '../../utils/browser-visibility'; +import { BrowserActions } from '../../utils/browser-actions'; export class DropdownPage { diff --git a/lib/testing/src/lib/material/pages/public-api.ts b/lib/testing/src/lib/core/pages/material/public-api.ts similarity index 96% rename from lib/testing/src/lib/material/pages/public-api.ts rename to lib/testing/src/lib/core/pages/material/public-api.ts index a941d281d1..fd3d56a3af 100644 --- a/lib/testing/src/lib/material/pages/public-api.ts +++ b/lib/testing/src/lib/core/pages/material/public-api.ts @@ -22,3 +22,4 @@ export * from './date-picker.page'; export * from './date-time-picker-calendar.page'; export * from './dropdown.page'; export * from './toggle.page'; +export * from './checkbox.page'; diff --git a/lib/testing/src/lib/material/pages/tabs.page.ts b/lib/testing/src/lib/core/pages/material/tabs.page.ts similarity index 94% rename from lib/testing/src/lib/material/pages/tabs.page.ts rename to lib/testing/src/lib/core/pages/material/tabs.page.ts index 3e7d55e25b..bdc2fb6f45 100644 --- a/lib/testing/src/lib/material/pages/tabs.page.ts +++ b/lib/testing/src/lib/core/pages/material/tabs.page.ts @@ -16,7 +16,7 @@ */ import { element, by } from 'protractor'; -import { BrowserActions } from '../../core/utils/browser-actions'; +import { BrowserActions } from '../../utils/browser-actions'; export class TabsPage { diff --git a/lib/testing/src/lib/material/pages/toggle.page.ts b/lib/testing/src/lib/core/pages/material/toggle.page.ts similarity index 91% rename from lib/testing/src/lib/material/pages/toggle.page.ts rename to lib/testing/src/lib/core/pages/material/toggle.page.ts index 4b6a26f556..24bf2579c6 100644 --- a/lib/testing/src/lib/material/pages/toggle.page.ts +++ b/lib/testing/src/lib/core/pages/material/toggle.page.ts @@ -16,8 +16,8 @@ */ import { by, ElementFinder } from 'protractor'; -import { BrowserVisibility } from '../../core/utils/browser-visibility'; -import { BrowserActions } from '../../core/utils/browser-actions'; +import { BrowserVisibility } from '../../utils/browser-visibility'; +import { BrowserActions } from '../../utils/browser-actions'; export class TogglePage { diff --git a/lib/testing/src/lib/core/pages/public-api.ts b/lib/testing/src/lib/core/pages/public-api.ts index c551b067c5..43c63f9c48 100644 --- a/lib/testing/src/lib/core/pages/public-api.ts +++ b/lib/testing/src/lib/core/pages/public-api.ts @@ -18,7 +18,6 @@ export * from './bread-crumb.page'; export * from './header.page'; export * from './user-info.page'; -export * from './login.page'; export * from './settings.page'; export * from './login-sso.page'; export * from './data-table-component.page'; @@ -26,6 +25,7 @@ export * from './pagination.page'; export * from './error.page'; export * from './notification-history.page'; export * from './form/public-api'; +export * from './material/public-api'; export * from './card-view/public-api'; export * from './viewer.page'; export * from './config-editor-page'; diff --git a/lib/testing/src/lib/core/pages/settings.page.ts b/lib/testing/src/lib/core/pages/settings.page.ts index a14ddc525a..9a5697a3c8 100644 --- a/lib/testing/src/lib/core/pages/settings.page.ts +++ b/lib/testing/src/lib/core/pages/settings.page.ts @@ -18,7 +18,7 @@ import { browser, by, element, ElementFinder } from 'protractor'; import { BrowserVisibility } from '../utils/browser-visibility'; import { BrowserActions } from '../utils/browser-actions'; -import { DropdownPage } from '../../material/pages/dropdown.page'; +import { DropdownPage } from '../../core/pages/material/dropdown.page'; export class SettingsPage { @@ -42,7 +42,16 @@ export class SettingsPage { providerDropdown = new DropdownPage(element(by.css('mat-select[id="adf-provider-selector"]'))); async goToSettingsPage(): Promise { - await browser.get(this.settingsURL); + let currentUrl; + + try { + currentUrl = await browser.getCurrentUrl(); + } catch (e) { + } + + if (!currentUrl || currentUrl.indexOf(this.settingsURL) === -1) { + await browser.get(this.settingsURL); + } await this.providerDropdown.checkDropdownIsVisible(); } @@ -93,6 +102,7 @@ export class SettingsPage { } async setProviderEcmSso(contentServiceURL, authHost, identityHost, silentLogin = true, implicitFlow = true, clientId?: string, logoutUrl: string = '/logout') { + await this.goToSettingsPage(); await this.setProvider('ECM'); await this.clickSsoRadioButton(); @@ -149,7 +159,7 @@ export class SettingsPage { await BrowserActions.clearSendKeys(this.bpmText, processServiceURL); } - async setClientId(clientId: string = browser.params.config.oauth2.clientId) { + async setClientId(clientId: string = browser.params.testConfig.appConfig.oauth2.clientId) { await BrowserActions.clearSendKeys(this.clientIdText, clientId); } diff --git a/lib/testing/src/lib/core/pages/snackbar.page.ts b/lib/testing/src/lib/core/pages/snackbar.page.ts index ca05a0c96c..f4afa65125 100644 --- a/lib/testing/src/lib/core/pages/snackbar.page.ts +++ b/lib/testing/src/lib/core/pages/snackbar.page.ts @@ -17,21 +17,20 @@ import { element, by, ElementFinder } from 'protractor'; import { BrowserVisibility } from '../utils/browser-visibility'; -import { Logger } from '../utils/logger'; export class SnackbarPage { - notificationSnackBar: ElementFinder = element(by.css('simple-snack-bar span')); + notificationSnackBar: ElementFinder = element.all(by.css('simple-snack-bar span')).first(); snackBarContainerCss = by.css('.mat-snack-bar-container'); async waitForSnackBarToAppear() { - return BrowserVisibility.waitUntilElementIsVisible(element(this.snackBarContainerCss), 20000, + return BrowserVisibility.waitUntilElementIsVisible(element.all(this.snackBarContainerCss).first(), 5000, 'snackbar did not appear' ); } async waitForSnackBarToClose() { - return BrowserVisibility.waitUntilElementIsNotVisible(element(this.snackBarContainerCss), 20000); + return BrowserVisibility.waitUntilElementIsNotVisible(element.all(this.snackBarContainerCss).first(), 5000); } async getSnackBarMessage(): Promise { @@ -41,10 +40,9 @@ export class SnackbarPage { async isNotificationSnackBarDisplayed(): Promise { try { - await BrowserVisibility.waitUntilElementIsVisible(this.notificationSnackBar); + await BrowserVisibility.waitUntilElementIsVisible(this.notificationSnackBar, 2000); return true; } catch { - Logger.error(`Snackbar is not displayed `); return false; } } diff --git a/lib/testing/src/lib/core/pages/user-info.page.ts b/lib/testing/src/lib/core/pages/user-info.page.ts index fe4e64d1bb..10ad81dc78 100644 --- a/lib/testing/src/lib/core/pages/user-info.page.ts +++ b/lib/testing/src/lib/core/pages/user-info.page.ts @@ -17,7 +17,7 @@ import { element, by, ElementFinder } from 'protractor'; import { BrowserVisibility } from '../utils/browser-visibility'; -import { TabsPage } from '../../material/pages/tabs.page'; +import { TabsPage } from '../../core/pages/material/tabs.page'; import { BrowserActions } from '../utils/browser-actions'; export class UserInfoPage { diff --git a/lib/testing/src/lib/core/pages/viewer.page.ts b/lib/testing/src/lib/core/pages/viewer.page.ts index 227d6c5613..ad8d1a8131 100644 --- a/lib/testing/src/lib/core/pages/viewer.page.ts +++ b/lib/testing/src/lib/core/pages/viewer.page.ts @@ -16,8 +16,8 @@ */ import { BrowserActions } from '../utils/browser-actions'; -import { TabsPage } from '../../../lib/material/pages/tabs.page'; -import { TogglePage } from '../../material/pages/toggle.page'; +import { TabsPage } from './material/tabs.page'; +import { TogglePage } from './material/toggle.page'; import { BrowserVisibility } from '../utils/browser-visibility'; import { element, by, ElementFinder, browser, protractor } from 'protractor'; diff --git a/lib/testing/src/lib/core/public-api.ts b/lib/testing/src/lib/core/public-api.ts index 635aa7f36a..c4ebe673dc 100644 --- a/lib/testing/src/lib/core/public-api.ts +++ b/lib/testing/src/lib/core/public-api.ts @@ -20,4 +20,3 @@ export * from './pages/public-api'; export * from './models/public-api'; export * from './dialog/public-api'; export * from './utils/public-api'; -export * from './structure/public-api'; diff --git a/lib/testing/src/lib/core/structure/application.ts b/lib/testing/src/lib/core/structure/application.ts deleted file mode 100644 index bef69bba92..0000000000 --- a/lib/testing/src/lib/core/structure/application.ts +++ /dev/null @@ -1,58 +0,0 @@ -/*! - * @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 { E2eRequestApiHelper } from './e2e-request-api.helper'; -import { Api } from './api'; -import { Logger } from '../utils/logger'; -import { ResultSetPaging } from '@alfresco/js-api'; - -export class Application { - - requestApiHelper: E2eRequestApiHelper; - endPoint = `/v1/applications/`; - - constructor(api: Api) { - this.requestApiHelper = new E2eRequestApiHelper(api); - } - - async deploy(model: any): Promise { - await this.requestApiHelper.post(`${this.endPoint}`, { bodyParam: model}); - Logger.info(`[Application] Application '${model.name}' was deployed successfully.`); - } - - async delete(applicationId: string): Promise { - await this.requestApiHelper.delete(`${this.endPoint}${applicationId}`); - Logger.info(`[Application] Application: '${applicationId}' was deleted successfully.`); - } - - async deleteDescriptor(name: string): Promise { - await this.requestApiHelper.delete(`v1/descriptors/${name}`); - Logger.info(`[Descriptor] Descriptor: '${name}' was deleted successfully.`); - } - - async getDescriptors(): Promise { - Logger.info(`[Descriptor] Return descriptors`); - return this.requestApiHelper.get(`v1/descriptors`, {}); - } - - async getApplicationsByStatus(status: string): Promise { - Logger.info(`[Application] Return application by status: ${status}`); - return this.requestApiHelper.get(this.endPoint, { - queryParams: { status: status } - }); - } -} diff --git a/lib/testing/src/lib/core/structure/e2e-request-api.helper.ts b/lib/testing/src/lib/core/structure/e2e-request-api.helper.ts deleted file mode 100644 index a5be6d502e..0000000000 --- a/lib/testing/src/lib/core/structure/e2e-request-api.helper.ts +++ /dev/null @@ -1,112 +0,0 @@ -/*! - * @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 { Oauth2Auth } from '@alfresco/js-api/src/authentication/oauth2Auth'; - -export interface E2eRequestApiHelperOptions { - pathParams?: { [key: string]: any }; - queryParams?: { [key: string]: any }; - headerParams?: { [key: string]: any }; - formParams?: { [key: string]: any }; - bodyParam?: { [key: string]: any }; - contentTypes?: string[]; - accepts?: string[]; - returnType?: any; - contextRoot?: string; - responseType?: 'arraybuffer' | 'blob' | 'document' | 'json' | 'text'; -} - -function getDefaultOptions(): E2eRequestApiHelperOptions { - return { - pathParams: {}, - queryParams: {}, - headerParams: {}, - formParams: {}, - bodyParam: {}, - contentTypes: ['application/json'], - accepts: ['application/json'], - returnType: undefined - }; -} - -export class E2eRequestApiHelper { - - api: Oauth2Auth; - - constructor(private backend) { - this.api = backend.api.oauth2Auth; - } - - private buildUrl(endPoint: string): string { - const trimSlash = (str: string) => str.replace(/^\/|\/$/g, ''); - const host = this.backend.api.config.hostBpm; - const path = '/' + trimSlash(endPoint); - - return `${host}${path}`; - } - - public get(endPoint: string, overriddenOptions?: E2eRequestApiHelperOptions): PromiseLike { - return this.request('GET', endPoint, overriddenOptions); - } - - public post(endPoint: string, overriddenOptions?: E2eRequestApiHelperOptions): PromiseLike { - return this.request('POST', endPoint, overriddenOptions); - } - - public put(endPoint: string, overriddenOptions?: E2eRequestApiHelperOptions): PromiseLike { - return this.request('PUT', endPoint, overriddenOptions); - } - - public delete(endPoint: string, overriddenOptions?: E2eRequestApiHelperOptions): PromiseLike { - return this.request('DELETE', endPoint, overriddenOptions); - } - - private request(httpMethod: string, endPoint: string, overriddenOptions?: E2eRequestApiHelperOptions): PromiseLike { - const options = { - ...getDefaultOptions(), - ...overriddenOptions - }; - - const { - pathParams, - queryParams, - headerParams, - formParams, - bodyParam, - contentTypes, - accepts, - returnType, - contextRoot, - responseType - } = options; - - return this.api.callCustomApi( - this.buildUrl(endPoint), - httpMethod, - pathParams, - queryParams, - headerParams, - formParams, - bodyParam, - contentTypes, - accepts, - returnType, - contextRoot, - responseType - ); - } -} diff --git a/lib/testing/src/lib/core/structure/public-api.ts b/lib/testing/src/lib/core/structure/public-api.ts deleted file mode 100644 index aa5e9f1846..0000000000 --- a/lib/testing/src/lib/core/structure/public-api.ts +++ /dev/null @@ -1,21 +0,0 @@ -/*! - * @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 * from './api'; -export * from './api.util'; -export * from './deployment-api'; -export * from './modeling-api'; diff --git a/e2e/models/APS/standalone-task.ts b/lib/testing/src/lib/core/utils/array.util.ts similarity index 59% rename from e2e/models/APS/standalone-task.ts rename to lib/testing/src/lib/core/utils/array.util.ts index 29c819a844..8cc993d188 100644 --- a/e2e/models/APS/standalone-task.ts +++ b/lib/testing/src/lib/core/utils/array.util.ts @@ -15,20 +15,21 @@ * limitations under the License. */ -import { StringUtil } from '@alfresco/adf-testing'; +export class ArrayUtil { -/** - * Create Json Object for standalone task - * - * @param details - JSON object used to overwrite the default values - * @constructor - */ -export class StandaloneTask { - - name = StringUtil.generateRandomString(); - - constructor(details?: any) { - Object.assign(this, details); + /** + * Returns TRUE if the first array contains all elements from the second one. + * + * @param superset + * @param subset + * + */ + static arrayContainsArray(superset: any[], subset: any[]): boolean { + if (0 === subset.length) { + return false; + } + return subset.every(function (value) { + return (superset.indexOf(value) >= 0); + }); } - } diff --git a/lib/testing/src/lib/core/utils/browser-actions.ts b/lib/testing/src/lib/core/utils/browser-actions.ts index 38bfc6e38d..7924d1194d 100644 --- a/lib/testing/src/lib/core/utils/browser-actions.ts +++ b/lib/testing/src/lib/core/utils/browser-actions.ts @@ -38,12 +38,12 @@ export class BrowserActions { } static async waitUntilActionMenuIsVisible(): Promise { - const actionMenu = element(by.css('div[role="menu"]')); + const actionMenu = element.all(by.css('div[role="menu"]')).first(); await BrowserVisibility.waitUntilElementIsVisible(actionMenu); } static async waitUntilActionMenuIsNotVisible(): Promise { - const actionMenu = element(by.css('div[role="menu"]')); + const actionMenu = element.all(by.css('div[role="menu"]')).first(); await BrowserVisibility.waitUntilElementIsNotVisible(actionMenu); } @@ -87,6 +87,8 @@ export class BrowserActions { static async clearWithBackSpace(elementFinder: ElementFinder, sleepTime: number = 0) { await BrowserVisibility.waitUntilElementIsVisible(elementFinder); await elementFinder.click(); + await elementFinder.sendKeys(protractor.Key.END); + const value = await elementFinder.getAttribute('value'); for (let i = value.length; i >= 0; i--) { await elementFinder.sendKeys(protractor.Key.BACK_SPACE); diff --git a/lib/testing/src/lib/core/utils/browser-visibility.ts b/lib/testing/src/lib/core/utils/browser-visibility.ts index 28448971c6..4c7989eec2 100644 --- a/lib/testing/src/lib/core/utils/browser-visibility.ts +++ b/lib/testing/src/lib/core/utils/browser-visibility.ts @@ -18,7 +18,7 @@ import { browser, by, element, ElementFinder, protractor } from 'protractor'; const DEFAULT_TIMEOUT = global['TestConfig'] ? global['TestConfig'].main.timeout : 20000; -const NOT_VISIBLE_DEFAULT_TIMEOUT = global['TestConfig'] ? global['TestConfig'].main.timeout : 5000; +const NOT_VISIBLE_DEFAULT_TIMEOUT = global['TestConfig'] ? global['TestConfig'].main.timeout : 2000; export class BrowserVisibility { diff --git a/lib/testing/src/lib/core/utils/logger.ts b/lib/testing/src/lib/core/utils/logger.ts index 476f922074..4c535b73c5 100644 --- a/lib/testing/src/lib/core/utils/logger.ts +++ b/lib/testing/src/lib/core/utils/logger.ts @@ -22,22 +22,40 @@ const infoColor = '\x1b[36m%s\x1b[0m', warnColor = '\x1b[33m%s\x1b[0m', errorColor = '\x1b[31m%s\x1b[0m'; +export class LogLevelsEnum extends Number { + static TRACE: number = 5; + static DEBUG: number = 4; + static INFO: number = 3; + static WARN: number = 2; + static ERROR: number = 1; + static SILENT: number = 0; +} + +export let logLevels: any[] = [ + {level: LogLevelsEnum.TRACE, name: 'TRACE'}, + {level: LogLevelsEnum.DEBUG, name: 'DEBUG'}, + {level: LogLevelsEnum.INFO, name: 'INFO'}, + {level: LogLevelsEnum.WARN, name: 'WARN'}, + {level: LogLevelsEnum.ERROR, name: 'ERROR'}, + {level: LogLevelsEnum.SILENT, name: 'SILENT'} +]; + /* tslint:disable:no-console */ export class Logger { static info(...messages: string[]): void { - if (browser.params.config && browser.params.config.log) { + if (browser.params.config && browser.params.testConfig.appConfig.log >= LogLevelsEnum.INFO) { console.log(infoColor, messages.join('')); } } static log(...messages: string[]): void { - if (browser.params.config && browser.params.config.log) { + if (browser.params.config && browser.params.testConfig.appConfig.log >= LogLevelsEnum.TRACE) { console.log(logColor, messages.join('')); } } static warn(...messages: string[]): void { - if (browser.params.config && browser.params.config.log) { + if (browser.params.config && browser.params.testConfig.appConfig.log >= LogLevelsEnum.WARN) { console.log(warnColor, messages.join('')); } } diff --git a/lib/testing/src/lib/core/utils/public-api.ts b/lib/testing/src/lib/core/utils/public-api.ts index 94c3f185d7..dd11b67674 100644 --- a/lib/testing/src/lib/core/utils/public-api.ts +++ b/lib/testing/src/lib/core/utils/public-api.ts @@ -18,6 +18,7 @@ export * from './browser-visibility'; export * from './browser-actions'; export * from './string.util'; +export * from './array.util'; export * from './protractor.util'; export * from './local-storage.util'; export * from './file-browser.util'; diff --git a/lib/testing/src/lib/core/utils/string.util.ts b/lib/testing/src/lib/core/utils/string.util.ts index 22a0249759..8316e55c6c 100644 --- a/lib/testing/src/lib/core/utils/string.util.ts +++ b/lib/testing/src/lib/core/utils/string.util.ts @@ -71,7 +71,7 @@ export class StringUtil { * @param length {int} If this parameter is not provided the length is set to 3 by default. */ static generateRandomStringNonLatin(length: number = 3): string { - return StringUtil.generateRandomCharset(length, '密码你好𠮷'); + return StringUtil.generateRandomCharset(length, '密码你好𠮷'); } /** @@ -90,4 +90,21 @@ export class StringUtil { return text; } + /** + * Generates a sequence of files with name: baseName + index + extension (e.g.) baseName1.txt, baseName2.txt, ... + * + * @param startIndex + * @param endIndex + * @param baseName the base name of all files + * @param extension the extension of the file + * @return fileNames + */ + static generateFilesNames(startIndex: number, endIndex: number, baseName: string, extension: string): string [] { + const fileNames: string[] = []; + for (let i = startIndex; i <= endIndex; i++) { + fileNames.push(baseName + i + extension); + } + return fileNames; + } + } diff --git a/lib/testing/src/lib/form-cloud/actions/public-api.ts b/lib/testing/src/lib/form-cloud/actions/public-api.ts deleted file mode 100644 index 44d0e7c29c..0000000000 --- a/lib/testing/src/lib/form-cloud/actions/public-api.ts +++ /dev/null @@ -1,18 +0,0 @@ -/*! - * @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 * from './form-cloud.service'; diff --git a/lib/testing/src/lib/form-cloud/public-api.ts b/lib/testing/src/lib/form-cloud/public-api.ts deleted file mode 100644 index 963a643008..0000000000 --- a/lib/testing/src/lib/form-cloud/public-api.ts +++ /dev/null @@ -1,18 +0,0 @@ -/*! - * @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 * from './actions/public-api'; diff --git a/lib/testing/src/lib/material/public-api.ts b/lib/testing/src/lib/material/public-api.ts deleted file mode 100644 index 4143973c23..0000000000 --- a/lib/testing/src/lib/material/public-api.ts +++ /dev/null @@ -1,18 +0,0 @@ -/*! - * @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 * from './pages/public-api'; diff --git a/lib/testing/src/lib/process-services-cloud/actions/application.ts b/lib/testing/src/lib/process-services-cloud/actions/application.ts new file mode 100644 index 0000000000..4ea356e771 --- /dev/null +++ b/lib/testing/src/lib/process-services-cloud/actions/application.ts @@ -0,0 +1,59 @@ +/*! + * @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 { E2eRequestApiHelper } from '../../core/actions/e2e-request-api.helper'; +import { Api } from '../../core/actions/api'; +import { Logger } from '../../core/utils/logger'; +import { ResultSetPaging } from '@alfresco/js-api'; +import { ApiService } from '../../core/actions/api.service'; + +export class Application { + + requestApiHelper: E2eRequestApiHelper; + endPoint = `/deployment-service/v1/applications/`; + + constructor(api: Api | ApiService) { + this.requestApiHelper = new E2eRequestApiHelper(api); + } + + async deploy(model: any): Promise { + await this.requestApiHelper.post(`${this.endPoint}`, { bodyParam: model }); + Logger.info(`[Application] Application '${model.name}' was deployed successfully.`); + } + + async delete(applicationId: string): Promise { + await this.requestApiHelper.delete(`${this.endPoint}${applicationId}`); + Logger.info(`[Application] Application: '${applicationId}' was deleted successfully.`); + } + + async deleteDescriptor(name: string): Promise { + await this.requestApiHelper.delete(`v1/descriptors/${name}`); + Logger.info(`[Descriptor] Descriptor: '${name}' was deleted successfully.`); + } + + async getDescriptors(): Promise { + Logger.info(`[Descriptor] Return descriptors`); + return this.requestApiHelper.get(`v1/descriptors`, {}); + } + + async getApplicationsByStatus(status: string): Promise { + Logger.info(`[Application] Return application by status: ${status}`); + return this.requestApiHelper.get(this.endPoint, { + queryParams: { status: status, sort: 'name' } + }); + } +} diff --git a/lib/testing/src/lib/core/structure/deployment-api.ts b/lib/testing/src/lib/process-services-cloud/actions/deployment-api.ts similarity index 91% rename from lib/testing/src/lib/core/structure/deployment-api.ts rename to lib/testing/src/lib/process-services-cloud/actions/deployment-api.ts index e821192680..e88477958f 100644 --- a/lib/testing/src/lib/core/structure/deployment-api.ts +++ b/lib/testing/src/lib/process-services-cloud/actions/deployment-api.ts @@ -15,9 +15,9 @@ * limitations under the License. */ -import { Api } from './api'; +import { Api } from '../../core/actions/api'; import { Application } from './application'; -import { Logger } from '../utils/logger'; +import { Logger } from '../../core/utils/logger'; import { browser } from 'protractor'; import { ResultSetPaging } from '@alfresco/js-api'; @@ -63,7 +63,7 @@ export class DeploymentAPI extends Api { } async getApplicationByStatus(status: string): Promise { - const applications = this.application.getApplicationsByStatus(status); + const applications = this.application.getApplicationsByStatus(status); return applications; } } diff --git a/lib/testing/src/lib/form-cloud/actions/form-cloud.service.ts b/lib/testing/src/lib/process-services-cloud/actions/form-cloud.service.ts similarity index 100% rename from lib/testing/src/lib/form-cloud/actions/form-cloud.service.ts rename to lib/testing/src/lib/process-services-cloud/actions/form-cloud.service.ts diff --git a/lib/testing/src/lib/core/structure/modeling-api.ts b/lib/testing/src/lib/process-services-cloud/actions/modeling-api.ts similarity index 96% rename from lib/testing/src/lib/core/structure/modeling-api.ts rename to lib/testing/src/lib/process-services-cloud/actions/modeling-api.ts index f05608d45a..b5d58912d1 100644 --- a/lib/testing/src/lib/core/structure/modeling-api.ts +++ b/lib/testing/src/lib/process-services-cloud/actions/modeling-api.ts @@ -15,9 +15,9 @@ * limitations under the License. */ -import { Api } from './api'; +import { Api } from '../../core/actions/api'; import { Project } from './project'; -import { Logger } from '../utils/logger'; +import { Logger } from '../../core/utils/logger'; import { browser } from 'protractor'; import { NodeEntry, ResultSetPaging } from '@alfresco/js-api'; diff --git a/lib/testing/src/lib/core/structure/project.ts b/lib/testing/src/lib/process-services-cloud/actions/project.ts similarity index 95% rename from lib/testing/src/lib/core/structure/project.ts rename to lib/testing/src/lib/process-services-cloud/actions/project.ts index 1b5b56bc7f..1bee98814a 100644 --- a/lib/testing/src/lib/core/structure/project.ts +++ b/lib/testing/src/lib/process-services-cloud/actions/project.ts @@ -18,11 +18,11 @@ import { browser } from 'protractor'; import { ModelingAPI } from './modeling-api'; import { NodeEntry, ResultSetPaging } from '@alfresco/js-api'; -import { ApiUtil } from './api.util'; -import { E2eRequestApiHelper, E2eRequestApiHelperOptions } from './e2e-request-api.helper'; +import { ApiUtil } from '../../core/actions/api.util'; +import { E2eRequestApiHelper, E2eRequestApiHelperOptions } from '../../core/actions/e2e-request-api.helper'; import * as fs from 'fs'; -import { StringUtil } from '../utils/string.util'; -import { Logger } from '../utils/logger'; +import { StringUtil } from '../../core/utils/string.util'; +import { Logger } from '../../core/utils/logger'; export class Project { requestApiHelper: E2eRequestApiHelper; diff --git a/lib/testing/src/lib/process-services-cloud/actions/public-api.ts b/lib/testing/src/lib/process-services-cloud/actions/public-api.ts index d9702ee825..3c6a0e9cf4 100644 --- a/lib/testing/src/lib/process-services-cloud/actions/public-api.ts +++ b/lib/testing/src/lib/process-services-cloud/actions/public-api.ts @@ -20,3 +20,9 @@ export * from './testing-app-config.service'; export * from './process-definitions.service'; export * from './process-instances.service'; export * from './message-events.service'; +export * from './form-cloud.service'; +export * from './tasks.service'; +export * from './deployment-api'; +export * from './modeling-api'; +export * from './application'; +export * from './project'; diff --git a/lib/testing/src/lib/core/actions/identity/tasks.service.ts b/lib/testing/src/lib/process-services-cloud/actions/tasks.service.ts similarity index 98% rename from lib/testing/src/lib/core/actions/identity/tasks.service.ts rename to lib/testing/src/lib/process-services-cloud/actions/tasks.service.ts index e1d8de91ab..cdbd45a6c5 100644 --- a/lib/testing/src/lib/core/actions/identity/tasks.service.ts +++ b/lib/testing/src/lib/process-services-cloud/actions/tasks.service.ts @@ -15,8 +15,8 @@ * limitations under the License. */ -import { ApiService } from '../api.service'; -import { Logger } from '../../utils/logger'; +import { ApiService } from '../../core/actions/api.service'; +import { Logger } from '../../core/utils/logger'; export class TasksService { diff --git a/lib/testing/src/lib/process-services-cloud/pages/edit-process-filter-cloud-component.page.ts b/lib/testing/src/lib/process-services-cloud/pages/edit-process-filter-cloud-component.page.ts index 501b8efc80..48f4199651 100644 --- a/lib/testing/src/lib/process-services-cloud/pages/edit-process-filter-cloud-component.page.ts +++ b/lib/testing/src/lib/process-services-cloud/pages/edit-process-filter-cloud-component.page.ts @@ -18,7 +18,7 @@ import { browser, by, element, protractor, ElementFinder } from 'protractor'; import { EditProcessFilterDialogPage } from './dialog/edit-process-filter-dialog.page'; import { BrowserVisibility } from '../../core/utils/browser-visibility'; import { BrowserActions } from '../../core/utils/browser-actions'; -import { DropdownPage } from '../../material/pages/dropdown.page'; +import { DropdownPage } from '../../core/pages/material/dropdown.page'; export class EditProcessFilterCloudComponentPage { diff --git a/lib/testing/src/lib/process-services-cloud/pages/edit-task-filter-cloud-component.page.ts b/lib/testing/src/lib/process-services-cloud/pages/edit-task-filter-cloud-component.page.ts index 11ff8d7436..1bce87f120 100644 --- a/lib/testing/src/lib/process-services-cloud/pages/edit-task-filter-cloud-component.page.ts +++ b/lib/testing/src/lib/process-services-cloud/pages/edit-task-filter-cloud-component.page.ts @@ -19,7 +19,7 @@ import { browser, by, element, protractor, ElementFinder } from 'protractor'; import { EditTaskFilterDialogPage } from './dialog/edit-task-filter-dialog.page'; import { BrowserVisibility } from '../../core/utils/browser-visibility'; import { BrowserActions } from '../../core/utils/browser-actions'; -import { DropdownPage } from '../../material/pages/dropdown.page'; +import { DropdownPage } from '../../core/pages/material/dropdown.page'; export class EditTaskFilterCloudComponentPage { @@ -183,7 +183,7 @@ export class EditTaskFilterCloudComponentPage { } async clearAssignee(): Promise { - await BrowserActions.clearWithBackSpace(this.assignee, 200); + await BrowserActions.clearWithBackSpace(this.assignee, 250); await browser.driver.sleep(1000); } diff --git a/lib/testing/src/lib/process-services/actions/applications.util.ts b/lib/testing/src/lib/process-services/actions/applications.util.ts new file mode 100644 index 0000000000..3224b4064f --- /dev/null +++ b/lib/testing/src/lib/process-services/actions/applications.util.ts @@ -0,0 +1,110 @@ +/*! + * @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 { Logger } from '../../core/utils/logger'; +import * as remote from 'selenium-webdriver/remote'; +import { browser } from 'protractor'; +import { ApiService } from '../../core/actions/api.service'; +import { AppDefinitionUpdateResultRepresentation } from '@alfresco/js-api'; +import * as path from 'path'; +import * as fs from 'fs'; + +export class AppPublish { + comment: string = ''; + force: boolean = true; +} + +export class ApplicationsUtil { + + api: ApiService; + + constructor(api: ApiService) { + this.api = api; + } + + async getAppDefinitionId(appModelId: number): Promise { + const appDefinitions = await this.api.getInstance().activiti.appsApi.getAppDefinitions(); + let appDefinitionId = -1; + + appDefinitions.data.forEach((appDefinition) => { + if (appDefinition.modelId === appModelId) { + appDefinitionId = appDefinition.id; + } + }); + + return appDefinitionId; + } + + async publishDeployApp(appId: number): Promise { + browser.setFileDetector(new remote.FileDetector()); + + const publishApp = await this.api.getInstance().activiti.appsApi.publishAppDefinition(appId, new AppPublish()); + + await this.api.getInstance().activiti.appsApi.deployAppDefinitions({ appDefinitions: [{ id: publishApp.appDefinition.id }] }); + + return publishApp; + } + + async importPublishDeployApp(appFileLocation: string, option = {}) { + try { + const appCreated = await this.importApplication(appFileLocation, option); + const publishApp = await this.publishDeployApp(appCreated.id); + await this.api.getInstance().activiti.appsApi.deployAppDefinitions({ appDefinitions: [{ id: publishApp.appDefinition.id }] }); + return appCreated; + } catch (error) { + Logger.error('Import Publish Deploy Application - Service error, Response: ', JSON.parse(JSON.stringify(error)).response.text); + } + } + + async importNewVersionAppDefinitionPublishDeployApp(appFileLocation: string, modelId: number) { + browser.setFileDetector(new remote.FileDetector()); + + const pathFile = path.join(browser.params.testConfig.main.rootPath + appFileLocation); + const file = fs.createReadStream(pathFile); + + const appCreated = await this.api.getInstance().activiti.appsApi.importNewAppDefinition(modelId, file); + + const publishApp = await this.api.getInstance().activiti.appsApi.publishAppDefinition(appCreated.id, new AppPublish()); + + await this.api.getInstance().activiti.appsApi.deployAppDefinitions({ appDefinitions: [{ id: publishApp.appDefinition.id }] }); + + return appCreated; + } + + async importApplication(appFileLocation: string, options = {}): Promise { + try { + browser.setFileDetector(new remote.FileDetector()); + const file = fs.createReadStream(appFileLocation); + return await this.api.getInstance().activiti.appsDefinitionApi.importAppDefinition(file, options); + } catch (error) { + Logger.error('Import Application - Service error, Response: ', JSON.parse(JSON.stringify(error)).response.text); + } + } + + async getAppDefinitionByName(appName: string): Promise { + try { + const appDefinitionsList = await this.api.getInstance().activiti.appsApi.getAppDefinitions(); + const appDefinition = appDefinitionsList.data.filter((currentApp) => { + return currentApp.name === appName; + }); + return appDefinition; + } catch (error) { + Logger.error('Get AppDefinitions - Service error, Response: ', JSON.parse(JSON.stringify(error)).response.text); + } + } + +} diff --git a/lib/testing/src/lib/core/actions/APS/integration.service.ts b/lib/testing/src/lib/process-services/actions/integration.service.ts similarity index 76% rename from lib/testing/src/lib/core/actions/APS/integration.service.ts rename to lib/testing/src/lib/process-services/actions/integration.service.ts index 35642e5f94..71059261d8 100644 --- a/lib/testing/src/lib/core/actions/APS/integration.service.ts +++ b/lib/testing/src/lib/process-services/actions/integration.service.ts @@ -15,12 +15,12 @@ * limitations under the License. */ -import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; +import { ApiService } from '../../core/actions/api.service'; export class IntegrationService { - api: AlfrescoApi; + api: ApiService; - constructor(api: AlfrescoApi) { + constructor(api: ApiService) { this.api = api; } @@ -34,12 +34,12 @@ export class IntegrationService { version: '6.1.1', authenticationType: 'basic' }; - return this.api.activiti.integrationAccountApi.apiClient.callApi('app/rest/integration/alfresco', 'POST', + return this.api.apiService.activiti.integrationAccountApi.apiClient.callApi('app/rest/integration/alfresco', 'POST', {}, {}, {}, {}, repository, [], [], Object); } authenticateRepository(id: number, body: { username: string, password: string }): Promise { - return this.api.activiti.integrationAccountApi.apiClient.callApi(`app/rest/integration/alfresco/${id}/account`, 'POST', + return this.api.apiService.activiti.integrationAccountApi.apiClient.callApi(`app/rest/integration/alfresco/${id}/account`, 'POST', {}, {}, {}, body, {}, [], []); } } diff --git a/lib/testing/src/lib/core/actions/APS/models.service.ts b/lib/testing/src/lib/process-services/actions/models.service.ts similarity index 73% rename from lib/testing/src/lib/core/actions/APS/models.service.ts rename to lib/testing/src/lib/process-services/actions/models.service.ts index d6c139ac64..d98e43c043 100644 --- a/lib/testing/src/lib/core/actions/APS/models.service.ts +++ b/lib/testing/src/lib/process-services/actions/models.service.ts @@ -14,20 +14,20 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; -import { Logger } from '../../utils/logger'; +import { Logger } from '../../core/utils/logger'; +import { ApiService } from '../../core/actions/api.service'; export class ModelsActions { - api: AlfrescoApi; + api: ApiService; - constructor(api: AlfrescoApi) { + constructor(api: ApiService) { this.api = api; } async deleteVersionModel(modelId) { try { - return await this.api.activiti.modelsApi.deleteModel(modelId, { cascade: false, deleteRuntimeApp : true }); + return await this.api.apiService.activiti.modelsApi.deleteModel(modelId, { cascade: false, deleteRuntimeApp : true }); } catch (error) { Logger.error('Delete Model Version - Service error, Response: ', JSON.parse(JSON.stringify(error)).response.text); } @@ -35,7 +35,7 @@ export class ModelsActions { async deleteEntireModel(modelId) { try { - return await this.api.activiti.modelsApi.deleteModel(modelId, { cascade: true, deleteRuntimeApp : true }); + return await this.api.apiService.activiti.modelsApi.deleteModel(modelId, { cascade: true, deleteRuntimeApp : true }); } catch (error) { Logger.error('Delete Model - Service error, Response: ', JSON.parse(JSON.stringify(error)).response.text); } @@ -45,7 +45,7 @@ export class ModelsActions { const options = opts || {}; let models; try { - models = await this.api.activiti.modelsApi.getModels(options); + models = await this.api.apiService.activiti.modelsApi.getModels(options); } catch (error) { Logger.error('Get Models - Service error, Response: ', JSON.parse(JSON.stringify(error)).response.text); } diff --git a/lib/testing/src/lib/core/actions/APS/process.util.ts b/lib/testing/src/lib/process-services/actions/process.util.ts similarity index 68% rename from lib/testing/src/lib/core/actions/APS/process.util.ts rename to lib/testing/src/lib/process-services/actions/process.util.ts index 25baf1fff5..af2210d48e 100644 --- a/lib/testing/src/lib/core/actions/APS/process.util.ts +++ b/lib/testing/src/lib/process-services/actions/process.util.ts @@ -15,16 +15,17 @@ * limitations under the License. */ -import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; import { ApplicationsUtil } from './applications.util'; -import { Logger } from '../../utils/logger'; -import { StringUtil } from '../../utils/string.util'; +import { Logger } from '../../core/utils/logger'; +import { StringUtil } from '../../core/utils/string.util'; +import { ApiService } from '../../core/actions/api.service'; +import { TaskRepresentation } from '@alfresco/js-api'; export class ProcessUtil { - api: AlfrescoApi; + api: ApiService; - constructor(api: AlfrescoApi) { + constructor(api: ApiService) { this.api = api; } @@ -36,45 +37,45 @@ export class ProcessUtil { const startProcessOptions: any = { processDefinitionId: processDefinition.id, name: processDefinitionName }; - return this.api.activiti.processApi.startNewProcessInstance(startProcessOptions); + return this.api.apiService.activiti.processApi.startNewProcessInstance(startProcessOptions); } catch (error) { - Logger.error('Start Process - Service error, Response: ', JSON.parse(JSON.stringify(error)).response.text); + Logger.error('Start Process - Service error, Response: ', JSON.parse(JSON.stringify(error))); } } async startProcessOfApp(appName: string, processName?: string): Promise { try { const appDefinition = await new ApplicationsUtil(this.api).getAppDefinitionByName(appName); - const processDefinitionList = await this.api.activiti.processApi.getProcessDefinitions({ deploymentId: appDefinition[0].deploymentId }); + const processDefinitionList = await this.api.apiService.activiti.processApi.getProcessDefinitions({ deploymentId: appDefinition[0].deploymentId }); const startProcessOptions: any = { processDefinitionId: processDefinitionList.data[0].id, name: processName ? processName : StringUtil.generateRandomString(5).toLowerCase() }; - return this.api.activiti.processApi.startNewProcessInstance(startProcessOptions); + return this.api.apiService.activiti.processApi.startNewProcessInstance(startProcessOptions); } catch (error) { - Logger.error('Start Process - Service error, Response: ', JSON.parse(JSON.stringify(error)).response.text); + Logger.error('Start Process - Service error, Response: ', JSON.parse(JSON.stringify(error))); } } async cancelProcessInstance(processInstance: string): Promise { try { - return this.api.activiti.processApi.deleteProcessInstance(processInstance); + return this.api.apiService.activiti.processApi.deleteProcessInstance(processInstance); } catch (error) { - Logger.error('Cancel Process - Service error, Response: ', JSON.parse(JSON.stringify(error)).response.text); + Logger.error('Cancel Process - Service error, Response: ', JSON.parse(JSON.stringify(error))); } } async getProcessDefinitionByName(deploymentId: string, processName: string): Promise { try { - const processDefinitionList = await this.api.activiti.processApi.getProcessDefinitions({ deploymentId: deploymentId }); + const processDefinitionList = await this.api.apiService.activiti.processApi.getProcessDefinitions({ deploymentId: deploymentId }); const chosenProcess = processDefinitionList.data.find( (processDefinition) => { return processDefinition.name === processName; }); return chosenProcess; } catch (error) { - Logger.error('Get ProcessDefinitions - Service error, Response: ', JSON.parse(JSON.stringify(error)).response.text); + Logger.error('Get ProcessDefinitions - Service error, Response: ', JSON.parse(JSON.stringify(error))); } } - async getProcessTaskId(processId: string): Promise { - const taskList = await this.api.activiti.taskApi.listTasks({}); + async getProcessTaskId(processId: string): Promise { + const taskList = await this.api.apiService.activiti.taskApi.listTasks({}); let wantedtask; taskList.data.forEach((task) => { @@ -84,4 +85,5 @@ export class ProcessUtil { }); return wantedtask ? wantedtask : 'null'; } + } diff --git a/lib/testing/src/lib/core/actions/APS/public-api.ts b/lib/testing/src/lib/process-services/actions/public-api.ts similarity index 100% rename from lib/testing/src/lib/core/actions/APS/public-api.ts rename to lib/testing/src/lib/process-services/actions/public-api.ts index dd3ee37369..dbc9faddd3 100644 --- a/lib/testing/src/lib/core/actions/APS/public-api.ts +++ b/lib/testing/src/lib/process-services/actions/public-api.ts @@ -16,6 +16,6 @@ */ export * from './applications.util'; -export * from './process.util'; -export * from './models.service'; export * from './integration.service'; +export * from './models.service'; +export * from './process.util'; diff --git a/lib/testing/src/lib/process-services/pages/filters.page.ts b/lib/testing/src/lib/process-services/pages/filters.page.ts index 11df9c3068..86c6385074 100644 --- a/lib/testing/src/lib/process-services/pages/filters.page.ts +++ b/lib/testing/src/lib/process-services/pages/filters.page.ts @@ -34,7 +34,7 @@ export class FiltersPage { } async isFilterHighlighted(filterName): Promise { - const processNameHighlighted: ElementFinder = element(by.css(`.adf-active button[data-automation-id='${filterName}_filter']`)); + const processNameHighlighted: ElementFinder = element(by.css(`.adf-active [data-automation-id='${filterName}_filter']`)); try { await BrowserVisibility.waitUntilElementIsVisible(processNameHighlighted); return true; @@ -44,7 +44,7 @@ export class FiltersPage { } async isFilterDisplayed(name): Promise { - const filterName: ElementFinder = element(by.css(`button[data-automation-id='${name}_filter']`)); + const filterName: ElementFinder = element(by.css(`[data-automation-id='${name}_filter']`)); try { await BrowserVisibility.waitUntilElementIsVisible(filterName); return true; @@ -54,13 +54,13 @@ export class FiltersPage { } async checkFilterHasNoIcon(name): Promise { - const filterName: ElementFinder = element(by.css(`button[data-automation-id='${name}_filter']`)); + const filterName: ElementFinder = element(by.css(`[data-automation-id='${name}_filter']`)); await BrowserVisibility.waitUntilElementIsVisible(filterName); await BrowserVisibility.waitUntilElementIsNotVisible(filterName.element(this.processIcon)); } async getFilterIcon(name): Promise { - const filterName: ElementFinder = element(by.css(`button[data-automation-id='${name}_filter']`)); + const filterName: ElementFinder = element(by.css(`[data-automation-id='${name}_filter']`)); await BrowserVisibility.waitUntilElementIsVisible(filterName); const icon = filterName.element(this.processIcon); return BrowserActions.getText(icon); diff --git a/lib/testing/src/lib/process-services/pages/form-fields.page.ts b/lib/testing/src/lib/process-services/pages/form-fields.page.ts index 47ccf20545..9ea02cb98e 100644 --- a/lib/testing/src/lib/process-services/pages/form-fields.page.ts +++ b/lib/testing/src/lib/process-services/pages/form-fields.page.ts @@ -19,7 +19,7 @@ import { BrowserVisibility } from '../../core/utils/browser-visibility'; import { by, element, ElementFinder, Locator } from 'protractor'; import { BrowserActions } from '../../core/utils/browser-actions'; import { By } from 'selenium-webdriver'; -import { DropdownPage } from '../../material/pages/dropdown.page'; +import { DropdownPage } from '../../core/pages/material/dropdown.page'; export class FormFieldsPage { diff --git a/lib/testing/src/lib/process-services/pages/select-apps-dialog.page.ts b/lib/testing/src/lib/process-services/pages/select-apps-dialog.page.ts index d3e721eed2..80d3b3c203 100644 --- a/lib/testing/src/lib/process-services/pages/select-apps-dialog.page.ts +++ b/lib/testing/src/lib/process-services/pages/select-apps-dialog.page.ts @@ -18,7 +18,7 @@ import { BrowserVisibility } from '../../core/utils/browser-visibility'; import { by, element, ElementFinder } from 'protractor'; import { BrowserActions } from '../../core/utils/browser-actions'; -import { DropdownPage } from '../../material/pages/dropdown.page'; +import { DropdownPage } from '../../core/pages/material/dropdown.page'; export class SelectAppsDialog { diff --git a/lib/testing/src/lib/process-services/pages/start-process.page.ts b/lib/testing/src/lib/process-services/pages/start-process.page.ts index 87d24fba1a..95fee764d3 100644 --- a/lib/testing/src/lib/process-services/pages/start-process.page.ts +++ b/lib/testing/src/lib/process-services/pages/start-process.page.ts @@ -18,7 +18,7 @@ import { by, element, Key, protractor, browser, ElementFinder } from 'protractor'; import { BrowserVisibility } from '../../core/utils/browser-visibility'; import { BrowserActions } from '../../core/utils/browser-actions'; -import { DropdownPage } from '../../material/pages/dropdown.page'; +import { DropdownPage } from '../../core/pages/material/dropdown.page'; import { FormFields } from '../../core/pages/form/form-fields'; export class StartProcessPage { diff --git a/lib/testing/src/lib/process-services/pages/task-filters.page.ts b/lib/testing/src/lib/process-services/pages/task-filters.page.ts index 88edbb14bd..967b3694a2 100644 --- a/lib/testing/src/lib/process-services/pages/task-filters.page.ts +++ b/lib/testing/src/lib/process-services/pages/task-filters.page.ts @@ -22,10 +22,10 @@ export class TaskFiltersPage { filtersPage = new FiltersPage(); - myTasks: ElementFinder = element(by.css('button[data-automation-id="My Tasks_filter"]')); - queuedTask: ElementFinder = element(by.css('button[data-automation-id="Queued Tasks_filter"]')); - completedTask: ElementFinder = element(by.css('button[data-automation-id="Completed Tasks_filter"]')); - involvedTask: ElementFinder = element(by.css('button[data-automation-id="Involved Tasks_filter"]')); + myTasks: ElementFinder = element(by.css('[data-automation-id="My Tasks_filter"]')); + queuedTask: ElementFinder = element(by.css('[data-automation-id="Queued Tasks_filter"]')); + completedTask: ElementFinder = element(by.css('[data-automation-id="Completed Tasks_filter"]')); + involvedTask: ElementFinder = element(by.css('[data-automation-id="Involved Tasks_filter"]')); accordionMenu: ElementFinder = element(by.css('.app-processes-menu mat-accordion')); async clickMyTasksFilterButton(): Promise { diff --git a/lib/testing/src/lib/process-services/public-api.ts b/lib/testing/src/lib/process-services/public-api.ts index 4143973c23..9b50b7ff58 100644 --- a/lib/testing/src/lib/process-services/public-api.ts +++ b/lib/testing/src/lib/process-services/public-api.ts @@ -15,4 +15,5 @@ * limitations under the License. */ +export * from './actions/public-api'; export * from './pages/public-api'; diff --git a/lib/testing/src/lib/test.configuration.ts b/lib/testing/src/lib/test.configuration.ts index 12ef3f3028..63eac82f76 100644 --- a/lib/testing/src/lib/test.configuration.ts +++ b/lib/testing/src/lib/test.configuration.ts @@ -31,46 +31,21 @@ export interface TestConfiguration { password: string }; + admin: { + email: string, + password: string + }; + main: { - timeout: number; rootPath: string; }; adf: { url: string; - port: string; - login: string; - adminUser: string; - adminEmail: string; - adminPassword: string; - hostBPM: string; - clientIdSso: string; - - hostSso: () => string; - hostIdentity: () => string; - }; - - adf_acs: { - protocol: string; - host: string; - port: string; - apiContextRoot: string; - clientIdSso: string; }; adf_external_acs: { - protocol: string; host: string; - port: string; - apiContextRoot: string; - clientIdSso: string; }; - adf_aps: { - protocol: string; - host: string; - port: string; - apiContextRoot: string; - clientIdSso: string; - }; } diff --git a/lib/testing/src/public-api.ts b/lib/testing/src/public-api.ts index 40f334aee8..de234ff539 100644 --- a/lib/testing/src/public-api.ts +++ b/lib/testing/src/public-api.ts @@ -16,10 +16,7 @@ */ export * from './lib/core/public-api'; -export * from './lib/form-cloud/public-api'; -export * from './lib/material/public-api'; export * from './lib/content-services/public-api'; -export * from './lib/material/public-api'; export * from './lib/process-services/public-api'; export * from './lib/process-services-cloud/public-api'; export * from './lib/testing.module'; diff --git a/protractor.conf.ts b/protractor.conf.ts index 678a7ee1bb..fe0cdd1ebe 100644 --- a/protractor.conf.ts +++ b/protractor.conf.ts @@ -1,8 +1,10 @@ +const { LocalStorageUtil } = require('@alfresco/adf-testing'); + const path = require('path'); const { SpecReporter } = require('jasmine-spec-reporter'); const retry = require('protractor-retry').retry; const tsConfig = require('./e2e/tsconfig.e2e.json'); -const TestConfig = require('./e2e/test.config'); +const testConfig = require('./e2e/test.config'); const RESOURCES = require('./e2e/util/resources'); const SmartRunner = require('protractor-smartrunner'); const resolve = require('path').resolve; @@ -30,7 +32,6 @@ let HOST = process.env.URL_HOST_ADF; let BROWSER_RUN = !!process.env.BROWSER_RUN; let FOLDER = process.env.FOLDER || ''; let SELENIUM_SERVER = process.env.SELENIUM_SERVER || ''; -let DIRECT_CONNECCT = !SELENIUM_SERVER; let MAXINSTANCES = process.env.MAXINSTANCES || 1; let TIMEOUT = parseInt(process.env.TIMEOUT, 10); let SAVE_SCREENSHOT = (process.env.SAVE_SCREENSHOT == 'true'); @@ -110,17 +111,16 @@ exports.config = { } }, - directConnect: DIRECT_CONNECCT, + directConnect: !SELENIUM_SERVER, baseUrl: HOST, params: { - testConfig: TestConfig, + testConfig: testConfig, loginRoute: '/login', - config: TestConfig.appConfig, groupSuffix: GROUP_SUFFIX, - identityAdmin: TestConfig.identityAdmin, - identityUser: TestConfig.identityUser, + identityAdmin: testConfig.identityAdmin, + identityUser: testConfig.identityUser, rootPath: __dirname, resources: RESOURCES }, @@ -132,7 +132,8 @@ exports.config = { jasmineNodeOpts: { showColors: true, defaultTimeoutInterval: 120000, - print: () => {}, + print: () => { + }, ...SmartRunner.withOptionalExclusions( resolve(__dirname, './e2e/protractor.excludes.json') ) @@ -159,7 +160,7 @@ exports.config = { retry.onCleanUp(results); }, - onPrepare() { + async onPrepare() { retry.onPrepare(); jasmine.DEFAULT_TIMEOUT_INTERVAL = TIMEOUT; @@ -190,7 +191,22 @@ exports.config = { }) ); - return browser.driver.executeScript(disableCSSAnimation); + await browser.driver.executeScript(disableCSSAnimation); + + await browser.get(`${HOST}/settings`); + await LocalStorageUtil.clearStorage(); + + await LocalStorageUtil.setStorageItem('ecmHost', browser.params.testConfig.appConfig.ecmHost); + await LocalStorageUtil.setStorageItem('bpmHost', browser.params.testConfig.appConfig.bpmHost); + await LocalStorageUtil.setStorageItem('providers', browser.params.testConfig.appConfig.provider); + + if (browser.params.testConfig.appConfig.authType === 'OAUTH') { + await LocalStorageUtil.setStorageItem('authType', browser.params.testConfig.appConfig.authType); + await LocalStorageUtil.setStorageItem('identityHost', browser.params.testConfig.appConfig.identityHost); + await LocalStorageUtil.setStorageItem('oauth2', JSON.stringify(browser.params.testConfig.appConfig.oauth2)); + } + + await LocalStorageUtil.apiReset(); function disableCSSAnimation() { let css = '* {' + @@ -209,6 +225,7 @@ exports.config = { }, + beforeLaunch: function () { if (SAVE_SCREENSHOT) { cleanReportFolder(); @@ -217,7 +234,6 @@ exports.config = { afterLaunch: async function () { if (SAVE_SCREENSHOT) { - let retryCount = 1; if (argv.retry) { retryCount = ++argv.retry; diff --git a/scripts/app-config-replace.js b/scripts/app-config-replace.js index fe0e2eef24..a8a62a759b 100644 --- a/scripts/app-config-replace.js +++ b/scripts/app-config-replace.js @@ -10,10 +10,10 @@ fs.readFile(configPath, (err, appConfigString) => { if (err) throw err; let appConfig = JSON.parse(appConfigString); appConfig.providers = process.env.PROVIDERS || 'ALL'; - appConfig.bpmHost = (process.env.PROXY_HOST_ADF || process.env.URL_HOST_BPM_ADF || process.env.URL_HOST_ADF); + appConfig.bpmHost = (process.env.PROXY_HOST_ADF || process.env.URL_HOST_ADF); appConfig.ecmHost = (process.env.PROXY_HOST_ADF || process.env.URL_HOST_ADF); - appConfig.identityHost = process.env.URL_HOST_IDENTITY; - appConfig.oauth2.host = process.env.URL_HOST_SSO_ADF; + appConfig.identityHost = (process.env.HOST_SSO + '/auth/admin/realms/alfresco'); + appConfig.oauth2.host = (process.env.HOST_SSO + '/auth/realms/alfresco'); appConfig.notificationDefaultDuration = process.env.NOTIFICATION_LAST || 8000; appConfig.authType = process.env.AUTH_TYPE || 'BASIC'; diff --git a/scripts/check-env/check-cs-env.js b/scripts/check-env/check-cs-env.js index 3d8e0a7a18..3d8aeab8d2 100755 --- a/scripts/check-env/check-cs-env.js +++ b/scripts/check-env/check-cs-env.js @@ -23,12 +23,12 @@ async function main() { async function checkEnv() { try { - this.alfrescoJsApi = new alfrescoApi.AlfrescoApiCompatibility({ + const alfrescoJsApi = new alfrescoApi.AlfrescoApiCompatibility({ provider: 'ECM', hostEcm: program.host }); - await this.alfrescoJsApi.login(program.username, program.password); + await alfrescoJsApi.login(program.username, program.password); } catch (e) { console.log('Login error environment down or inaccessible'); counter++; @@ -46,12 +46,12 @@ async function checkEnv() { async function checkDiskSpaceFullEnv() { try { - this.alfrescoJsApi = new alfrescoApi.AlfrescoApiCompatibility({ + const alfrescoJsApi = new alfrescoApi.AlfrescoApiCompatibility({ provider: 'ECM', hostEcm: program.host }); - await this.alfrescoJsApi.login(program.username, program.password); + await alfrescoJsApi.login(program.username, program.password); let folder; @@ -88,7 +88,7 @@ async function checkDiskSpaceFullEnv() { } ); - this.alfrescoJsApi.node.deleteNode(uploadedFile.entry.id, {permanent: true}); + alfrescoJsApi.node.deleteNode(uploadedFile.entry.id, {permanent: true}); } catch (error) { counter++; diff --git a/scripts/check-env/check-ps-env.js b/scripts/check-env/check-ps-env.js index ca0f5483b4..0bf5e8106e 100755 --- a/scripts/check-env/check-ps-env.js +++ b/scripts/check-env/check-ps-env.js @@ -20,12 +20,12 @@ async function main() { async function checkEnv() { try { - this.alfrescoJsApi = new alfrescoApi.AlfrescoApiCompatibility({ + const alfrescoJsApi = new alfrescoApi.AlfrescoApiCompatibility({ provider: 'BPM', hostBpm: program.host }); - await this.alfrescoJsApi.login(program.username, program.password); + await alfrescoJsApi.login(program.username, program.password); } catch (e) { console.log('Login error environment down or inaccessible'); counter++; diff --git a/scripts/check-env/delete-all-apps.js b/scripts/check-env/delete-all-apps.js index 6622455cb5..5bc0241dfc 100755 --- a/scripts/check-env/delete-all-apps.js +++ b/scripts/check-env/delete-all-apps.js @@ -35,18 +35,21 @@ async function main() { host = program.host; + let alfrescoJsApi; + try { - this.alfrescoJsApi = new alfrescoApi.AlfrescoApiCompatibility(config); - await this.alfrescoJsApi.login(program.username, program.password); + alfrescoJsApi = new alfrescoApi.AlfrescoApiCompatibility(config); + await alfrescoJsApi.login(program.username, program.password); } catch (e) { console.log('Login error' + e); + return; } for (const key of Object.keys(RESOURCES_CLOUD.ACTIVITI_CLOUD_APPS)) { await deleteApp(alfrescoJsApi, RESOURCES_CLOUD.ACTIVITI_CLOUD_APPS[key].name); } - let notRunning = await getNotRunningApps(this.alfrescoJsApi); + let notRunning = await getNotRunningApps(alfrescoJsApi); if (notRunning && notRunning.length > 0) { console.log(JSON.stringify(notRunning)); diff --git a/scripts/clean-env.js b/scripts/clean-env.js index 296eee415b..650efc3974 100644 --- a/scripts/clean-env.js +++ b/scripts/clean-env.js @@ -10,25 +10,25 @@ async function main() { .option('-u, --username [type]', 'username RANCHER') .parse(process.argv); - this.alfrescoJsApi = new alfrescoApi.AlfrescoApiCompatibility({ + const alfrescoJsApi = new alfrescoApi.AlfrescoApiCompatibility({ provider: 'ECM', hostEcm: program.host }); try { - await this.alfrescoJsApi.login(program.username, program.password); + await alfrescoJsApi.login(program.username, program.password); } catch (error) { console.log(JSON.stringify(error)); } console.log('====== Clean Root ======'); - await cleanRoot(this.alfrescoJsApi); + await cleanRoot(alfrescoJsApi); console.log('====== Clean Sites ======'); - await deleteSite(this.alfrescoJsApi); + await deleteSite(alfrescoJsApi); console.log('====== Empty Trash ======'); - await emptyTrashCan(this.alfrescoJsApi); + await emptyTrashCan(alfrescoJsApi); } async function cleanRoot(alfrescoJsApi) { @@ -75,7 +75,7 @@ async function emptyTrashCan(alfrescoJsApi) { } async function deleteSite(alfrescoJsApi) { - let listSites = await this.alfrescoJsApi.core.sitesApi.getSites(); + let listSites = alfrescoJsApi.core.sitesApi.getSites(); if (listSites.list.pagination.totalItems > 1) { for (let i = 0; i < listSites.list.entries.length; i++) { diff --git a/scripts/test-e2e-lib.sh b/scripts/test-e2e-lib.sh index d15e2bf8ea..c6a94cc520 100755 --- a/scripts/test-e2e-lib.sh +++ b/scripts/test-e2e-lib.sh @@ -26,8 +26,6 @@ show_help() { echo "-proxy or --proxy proxy Back end URL to use only possible to use with -dev option" echo "-dev or --dev run it against local development environment it will deploy on localhost:4200 the current version of your branch" echo "-host or --host URL of the Front end to test" - echo "-host_bpm URL of the Back end to test" - echo "-host_identity URL of the identity service backend to test" echo "-host_sso the entire path including the name of the realm" echo "-save save the error screenshot and report in the remote env" echo "-timeout or --timeout override the timeout foe the wait utils" @@ -69,19 +67,9 @@ set_host(){ export URL_HOST_ADF=$HOST } -set_host_bpm(){ - HOST_BPM=$1 - export URL_HOST_BPM_ADF=$HOST_BPM -} - set_host_sso(){ HOST_SSO=$1 - export URL_HOST_SSO_ADF=$HOST_SSO -} - -set_host_identity(){ - HOST_IDENTITY=$1 - export URL_HOST_IDENTITY=$HOST_IDENTITY + export HOST_SSO=$HOST_SSO } set_specs(){ @@ -182,9 +170,7 @@ while [[ $1 == -* ]]; do -s|--seleniumServer) set_selenium $2; shift 2;; -host|--host) set_host $2; shift 2;; -log|--log) set_log; shift ;; - -host_bpm|--host_bpm) set_host_bpm $2; shift 2;; -host_sso|--host_sso) set_host_sso $2; shift 2;; - -host_identity|--host_identity) set_host_identity $2; shift 2;; -l|--lint) lint; shift;; -m|--maxInstances) max_instances $2; shift 2;; -vjsapi) version_js_api $2; shift 2;; diff --git a/scripts/travis/e2e/content-services-e2e.sh b/scripts/travis/e2e/content-services-e2e.sh index d69b24ffb9..7ec0dd81bb 100755 --- a/scripts/travis/e2e/content-services-e2e.sh +++ b/scripts/travis/e2e/content-services-e2e.sh @@ -4,7 +4,9 @@ DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" cd $DIR/../../../ -CONTEXT_ENV="content-services" +export CONTEXT_ENV="content-services" +export PROVIDER='ECM' +export AUTH_TYPE='BASIC' ./scripts/git-util/check-branch-updated.sh -b $TRAVIS_BRANCH || exit 1; diff --git a/scripts/travis/e2e/core-e2e.sh b/scripts/travis/e2e/core-e2e.sh index f31a50c9a0..048fdfec4d 100755 --- a/scripts/travis/e2e/core-e2e.sh +++ b/scripts/travis/e2e/core-e2e.sh @@ -4,7 +4,9 @@ DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" cd $DIR/../../../ -CONTEXT_ENV="core" +export CONTEXT_ENV="core" +export PROVIDER='ALL' +export AUTH_TYPE='BASIC' ./scripts/git-util/check-branch-updated.sh -b $TRAVIS_BRANCH || exit 1; diff --git a/scripts/travis/e2e/insights-e2e.sh b/scripts/travis/e2e/insights-e2e.sh index 6b302285c4..932d0df370 100755 --- a/scripts/travis/e2e/insights-e2e.sh +++ b/scripts/travis/e2e/insights-e2e.sh @@ -2,6 +2,9 @@ DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" +export PROVIDER='BPM' +export AUTH_TYPE='BASIC' + cd $DIR/../../../ ./scripts/git-util/check-branch-updated.sh -b $TRAVIS_BRANCH || exit 1; diff --git a/scripts/travis/e2e/process-services-cloud-e2e.sh b/scripts/travis/e2e/process-services-cloud-e2e.sh index d63d58a75c..7232beab17 100755 --- a/scripts/travis/e2e/process-services-cloud-e2e.sh +++ b/scripts/travis/e2e/process-services-cloud-e2e.sh @@ -4,8 +4,8 @@ DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" cd $DIR/../../../ -CONTEXT_ENV="process-services-cloud" -export PROVIDERS="BPMN" +export CONTEXT_ENV="process-services-cloud" +export PROVIDER="ALL" export AUTH_TYPE="OAUTH" ./scripts/git-util/check-branch-updated.sh -b $TRAVIS_BRANCH || exit 1; @@ -13,9 +13,9 @@ export AUTH_TYPE="OAUTH" AFFECTED_LIBS="$(./scripts/affected-libs.sh -gnu -b $TRAVIS_BRANCH)"; AFFECTED_E2E="$(./scripts/git-util/affected-folder.sh -b $TRAVIS_BRANCH -f "e2e/$CONTEXT_ENV")"; -RUN_E2E=$(echo ./scripts/test-e2e-lib.sh -host http://localhost:4200 -proxy "$E2E_HOST_BPM" -u "$E2E_USERNAME" -p "$E2E_PASSWORD" -e "$E2E_EMAIL" -host_sso "$E2E_HOST_SSO" -host_bpm "$E2E_HOST_BPM" -host_identity "$E2E_HOST_IDENTITY" -identity_admin_email "$E2E_ADMIN_EMAIL_IDENTITY" -identity_admin_password "$E2E_ADMIN_PASSWORD_IDENTITY" -prefix $TRAVIS_BUILD_NUMBER --use-dist -m 2 -save ) +RUN_E2E=$(echo ./scripts/test-e2e-lib.sh -host http://localhost:4200 -proxy "$E2E_HOST_BPM" -u "$E2E_USERNAME" -p "$E2E_PASSWORD" -e "$E2E_EMAIL" -host_sso "$E2E_HOST_SSO" -identity_admin_email "$E2E_ADMIN_EMAIL_IDENTITY" -identity_admin_password "$E2E_ADMIN_PASSWORD_IDENTITY" -prefix $TRAVIS_BUILD_NUMBER --use-dist -m 2 -save ) -npx @alfresco/adf-cli init-aae-env --host "$E2E_HOST_BPM" --oauth "$E2E_HOST_SSO" --modelerUsername "$E2E_MODELER_USERNAME" --modelerPassword "$E2E_MODELER_PASSWORD" --devopsUsername "$E2E_DEVOPS_USERNAME" --devopsPassword "$E2E_DEVOPS_PASSWORD" --clientId 'activiti' || exit 1 +./node_modules/@alfresco/adf-cli/bin/adf-cli init-aae-env --host "$E2E_HOST_BPM" --oauth "$E2E_HOST_SSO" --modelerUsername "$E2E_MODELER_USERNAME" --modelerPassword "$E2E_MODELER_PASSWORD" --devopsUsername "$E2E_DEVOPS_USERNAME" --devopsPassword "$E2E_DEVOPS_PASSWORD" --clientId 'activiti' || exit 1 node ./scripts/check-env/check-cs-env.js --host "$E2E_HOST_BPM" -u "$E2E_ADMIN_EMAIL_IDENTITY" -p "$E2E_ADMIN_PASSWORD_IDENTITY" || exit 1 if [[ $AFFECTED_LIBS =~ "testing" || $AFFECTED_LIBS =~ "$CONTEXT_ENV" || $TRAVIS_PULL_REQUEST == "false" ]]; diff --git a/scripts/travis/e2e/process-services-e2e.sh b/scripts/travis/e2e/process-services-e2e.sh index e8d9bb2428..480143c3c1 100755 --- a/scripts/travis/e2e/process-services-e2e.sh +++ b/scripts/travis/e2e/process-services-e2e.sh @@ -4,7 +4,9 @@ DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" cd $DIR/../../../ -CONTEXT_ENV="process-services" +export CONTEXT_ENV="process-services" +export PROVIDER='BPM' +export AUTH_TYPE='BASIC' ./scripts/git-util/check-branch-updated.sh -b $TRAVIS_BRANCH || exit 1; diff --git a/scripts/travis/e2e/search-e2e.sh b/scripts/travis/e2e/search-e2e.sh index 7705a09c1b..41cba6ad70 100755 --- a/scripts/travis/e2e/search-e2e.sh +++ b/scripts/travis/e2e/search-e2e.sh @@ -4,7 +4,9 @@ DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" cd $DIR/../../../ -CONTEXT_ENV="search" +export CONTEXT_ENV="search" +export PROVIDER='ECM' +export AUTH_TYPE='BASIC' ./scripts/git-util/check-branch-updated.sh -b $TRAVIS_BRANCH || exit 1;