diff --git a/.gitignore b/.gitignore index 9951e86ac55..232d436edae 100644 --- a/.gitignore +++ b/.gitignore @@ -27,3 +27,4 @@ out-tsc !/.protractor-smartrunner/ /reports/ e2e-result-* +licenses.txt diff --git a/e2e/actions/APS/apps-runtime.actions.ts b/e2e/actions/APS/apps-runtime.actions.ts deleted file mode 100644 index 6ccebd55341..00000000000 --- a/e2e/actions/APS/apps-runtime.actions.ts +++ /dev/null @@ -1,46 +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 '@alfresco/adf-testing'; -import { AppDefinitionRepresentation, ResultListDataRepresentationAppDefinitionRepresentation } from '@alfresco/js-api'; - -export class AppsRuntimeActions { - - api: ApiService; - - 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++) { - if (runtimeApps.data[i].name === appName) { - desiredApp = runtimeApps.data[i]; - } - } - - return desiredApp; - } - - async getRuntimeAppDefinitions(): Promise { - return this.api.getInstance().activiti.appsRuntimeApi.getAppDefinitions(); - } - -} diff --git a/e2e/actions/APS/form-model.actions.ts b/e2e/actions/APS/form-model.actions.ts deleted file mode 100644 index dd6b51755eb..00000000000 --- a/e2e/actions/APS/form-model.actions.ts +++ /dev/null @@ -1,41 +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 { FormRepresentation } from '@alfresco/js-api'; -import { ApiService } from '@alfresco/adf-testing'; - -export class FormModelActions { - - api: ApiService; - - 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; - }); - - return form; - } - -} diff --git a/e2e/actions/APS/models.actions.ts b/e2e/actions/APS/models.actions.ts deleted file mode 100644 index a088efe7282..00000000000 --- a/e2e/actions/APS/models.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. - */ - -import { ApiService } from '@alfresco/adf-testing'; - -export class ModelsActions { - - api: ApiService; - - constructor(alfrescoApi: ApiService) { - this.api = alfrescoApi; - } - - async deleteVersionModel(modelId: number): Promise { - return this.api.getInstance().activiti.modelsApi.deleteModel(modelId, { - cascade: false, - deleteRuntimeApp: true - }); - } - - async deleteEntireModel(modelId: number): Promise { - return this.api.getInstance().activiti.modelsApi.deleteModel(modelId, { - cascade: true, - deleteRuntimeApp: true - }); - } - -} diff --git a/e2e/content-services/components/comment-component.e2e.ts b/e2e/content-services/components/comment-component.e2e.ts index 3a19665886b..71efa3d510b 100644 --- a/e2e/content-services/components/comment-component.e2e.ts +++ b/e2e/content-services/components/comment-component.e2e.ts @@ -30,7 +30,7 @@ import { NavigationBarPage } from '../../core/pages/navigation-bar.page'; import { FileModel } from '../../models/ACS/file.model'; import { browser } from 'protractor'; import CONSTANTS = require('../../util/constants'); -import { SitesApi, SiteEntry } from '@alfresco/js-api'; +import { SitesApi, SiteEntry, CommentsApi } from '@alfresco/js-api'; describe('Comment', () => { @@ -39,7 +39,9 @@ describe('Comment', () => { const viewerPage: ViewerPage = new ViewerPage(); const commentsPage: CommentsPage = new CommentsPage(); const navigationBarPage = new NavigationBarPage(); + const apiService = new ApiService(); + const commentsApi = new CommentsApi(apiService.getInstance()); let userFullName, nodeId; let acsUser: UserModel; @@ -93,7 +95,7 @@ describe('Comment', () => { }); it('[C276947] Should be able to add a comment on ACS and view on ADF', async () => { - await apiService.getInstance().core.commentsApi.addComment(nodeId, { content: comments.test }); + await commentsApi.createComment(nodeId, { content: comments.test }); await viewerPage.viewFile(pngFileModel.name); diff --git a/e2e/content-services/components/lock-file.e2e.ts b/e2e/content-services/components/lock-file.e2e.ts index 12d10c00d50..686277948ae 100644 --- a/e2e/content-services/components/lock-file.e2e.ts +++ b/e2e/content-services/components/lock-file.e2e.ts @@ -29,7 +29,7 @@ import { ContentServicesPage } from '../../core/pages/content-services.page'; import { LockFilePage } from '../../content-services/pages/lock-file.page'; import { FileModel } from '../../models/ACS/file.model'; import { browser } from 'protractor'; -import { NodeEntry, SitesApi } from '@alfresco/js-api'; +import { NodeEntry, NodesApi, SitesApi } from '@alfresco/js-api'; import CONSTANTS = require('../../util/constants'); describe('Lock File', () => { @@ -45,6 +45,7 @@ describe('Lock File', () => { const usersActions = new UsersActions(apiService); const uploadActions = new UploadActions(apiService); const waitActions = new WaitActions(apiService); + const nodesApi = new NodesApi(apiService.getInstance()); const pngFileModel = new FileModel({ name: browser.params.resources.Files.ADF_DOCUMENTS.PNG.file_name, @@ -56,6 +57,11 @@ describe('Lock File', () => { location: browser.params.resources.Files.ADF_DOCUMENTS.PNG_B.file_path }); + const pngFileToLockAdmin = new FileModel({ + name: browser.params.resources.Files.ADF_DOCUMENTS.PNG_C.file_name, + location: browser.params.resources.Files.ADF_DOCUMENTS.PNG_C.file_path + }); + let site, documentLibrary; beforeAll(async () => { @@ -73,7 +79,7 @@ describe('Lock File', () => { visibility: 'PRIVATE' }); - const resultNode = await apiService.getInstance().core.nodesApi.getNodeChildren(site.entry.guid); + const resultNode = await nodesApi.listNodeChildren(site.entry.guid); documentLibrary = resultNode.list.entries[0].entry.id; @@ -111,7 +117,7 @@ describe('Lock File', () => { afterEach(async () => { await apiService.login(adminUser.username, adminUser.password); try { - await apiService.getInstance().core.nodesApi.unlockNode(pngUploadedFile.entry.id); + await nodesApi.unlockNode(pngUploadedFile.entry.id); await waitActions.nodeIsUnlock(pngUploadedFile.entry.id); } catch (e) { } @@ -120,7 +126,7 @@ describe('Lock File', () => { afterAll(async () => { await apiService.loginWithProfile('admin'); try { - await apiService.getInstance().core.nodesApi.unlockNode(pngLockedUploadedFile.entry.id); + await nodesApi.unlockNode(pngLockedUploadedFile.entry.id); } catch (e) { } try { @@ -194,7 +200,7 @@ describe('Lock File', () => { await apiService.login(adminUser.username, adminUser.password); try { - await apiService.getInstance().core.nodesApi.unlockNode(pngUploadedFile.entry.id); + await nodesApi.unlockNode(pngUploadedFile.entry.id); await uploadActions.deleteFileOrFolder(pngUploadedFile.entry.id); } catch (error) { } @@ -209,7 +215,7 @@ describe('Lock File', () => { await lockFilePage.saveButton.click(); try { - await apiService.getInstance().core.nodesApi.deleteNode(pngUploadedFile.entry.id); + await nodesApi.deleteNode(pngUploadedFile.entry.id); } catch (error) { await expect(error.status).toEqual(409); } @@ -223,7 +229,7 @@ describe('Lock File', () => { await lockFilePage.saveButton.click(); try { - await apiService.getInstance().core.nodesApi.updateNode(pngUploadedFile.entry.id, { name: 'My new name' }); + await nodesApi.updateNode(pngUploadedFile.entry.id, { name: 'My new name' }); } catch (error) { await expect(error.status).toEqual(409); @@ -238,7 +244,7 @@ describe('Lock File', () => { await lockFilePage.saveButton.click(); try { - await apiService.getInstance().core.nodesApi.moveNode(pngUploadedFile.entry.id, { targetParentId: '-my-' }); + await nodesApi.moveNode(pngUploadedFile.entry.id, { targetParentId: '-my-' }); } catch (error) { await expect(error.status).toEqual(409); @@ -253,7 +259,7 @@ describe('Lock File', () => { await lockFilePage.saveButton.click(); try { - await apiService.getInstance().core.nodesApi.updateNodeContent(pngUploadedFile.entry.id, 'NEW FILE CONTENT'); + await nodesApi.updateNodeContent(pngUploadedFile.entry.id, 'NEW FILE CONTENT'); } catch (error) { await expect(error.status).toEqual(409); } @@ -266,7 +272,7 @@ describe('Lock File', () => { beforeEach(async () => { await apiService.login(adminUser.username, adminUser.password); - pngFileToBeLocked = await uploadActions.uploadFile(pngFileToLock.location, pngFileToLock.name, documentLibrary); + pngFileToBeLocked = await uploadActions.uploadFile(pngFileToLockAdmin.location, pngFileToLockAdmin.name, documentLibrary); pngUploadedFile = await uploadActions.uploadFile(pngFileModel.location, pngFileModel.name, documentLibrary); await loginPage.login(adminUser.username, adminUser.password); await navigationBarPage.openContentServicesFolder(documentLibrary); @@ -294,7 +300,7 @@ describe('Lock File', () => { try { await apiService.login(adminUser.username, adminUser.password); - const response = await apiService.getInstance().core.nodesApi.updateNodeContent(pngUploadedFile.entry.id, 'NEW FILE CONTENT'); + const response = await nodesApi.updateNodeContent(pngUploadedFile.entry.id, 'NEW FILE CONTENT'); await expect(response.entry.modifiedAt.getTime()).toBeGreaterThan(response.entry.createdAt.getTime()); } catch (error) { } @@ -310,9 +316,9 @@ describe('Lock File', () => { try { await apiService.login(adminUser.username, adminUser.password); - await apiService.getInstance().core.nodesApi.moveNode(pngUploadedFile.entry.id, { targetParentId: '-my-' }); + await nodesApi.moveNode(pngUploadedFile.entry.id, { targetParentId: '-my-' }); - const movedFile = await apiService.getInstance().core.nodesApi.getNode(pngUploadedFile.entry.id); + const movedFile = await nodesApi.getNode(pngUploadedFile.entry.id); await expect(movedFile.entry.parentId).not.toEqual(documentLibrary); } catch (error) { @@ -320,7 +326,7 @@ describe('Lock File', () => { }); 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); + await contentServices.lockContent(pngFileToLockAdmin.name); await lockFilePage.lockFileCheckboxText.waitVisible(); await lockFilePage.lockFileCheckbox.click(); @@ -340,7 +346,7 @@ describe('Lock File', () => { await lockFilePage.saveButton.click(); try { - const response = await apiService.getInstance().core.nodesApi.updateNode(pngUploadedFile.entry.id, { name: 'My new name' }); + const response = await nodesApi.updateNode(pngUploadedFile.entry.id, { name: 'My new name' }); await expect(response.entry.name).toEqual('My new name'); } catch (error) { } diff --git a/e2e/content-services/components/permissions-component.e2e.ts b/e2e/content-services/components/permissions-component.e2e.ts index 35253e59370..963469f940c 100644 --- a/e2e/content-services/components/permissions-component.e2e.ts +++ b/e2e/content-services/components/permissions-component.e2e.ts @@ -20,7 +20,7 @@ import { ContentServicesPage } from '../../core/pages/content-services.page'; import { FileModel } from '../../models/ACS/file.model'; import { ApiService, - BrowserActions, + BrowserActions, Logger, LoginPage, NotificationHistoryPage, PermissionActions, @@ -37,6 +37,7 @@ import { MetadataViewPage } from '../../core/pages/metadata-view.page'; import { NavigationBarPage } from '../../core/pages/navigation-bar.page'; import { UploadDialogPage } from '../../core/pages/dialog/upload-dialog.page'; import { NotificationDemoPage } from '../../core/pages/notification.page'; +import { GroupsApi } from '@alfresco/js-api'; describe('Permissions Component', () => { @@ -50,6 +51,7 @@ describe('Permissions Component', () => { const notificationPage = new NotificationDemoPage(); const searchService = new SearchService(apiService); const permissionActions = new PermissionActions(apiService); + const groupsApi = new GroupsApi(apiService.getInstance()); const contentList = contentServicesPage.getDocumentList(); const viewerPage = new ViewerPage(); @@ -94,7 +96,7 @@ describe('Permissions Component', () => { await apiService.loginWithProfile('admin'); await usersActions.createUser(fileOwnerUser); await usersActions.createUser(filePermissionUser); - await apiService.getInstance().core.groupsApi.createGroup(groupBody); + await groupsApi.createGroup(groupBody); await apiService.login(fileOwnerUser.username, fileOwnerUser.password); roleConsumerFolder = await uploadActions.createFolder(roleConsumerFolderModel.name, '-my-'); @@ -119,7 +121,7 @@ describe('Permissions Component', () => { try { await searchService.isUserSearchable(filePermissionUser); } catch (e) { - console.error(`*****\n Failed to sync user \n*****`); + Logger.error(`*****\n Failed to sync user \n*****`); } await browser.sleep(browser.params.testConfig.timeouts.index_search); // wait search index previous file/folder uploaded } catch (e) { diff --git a/e2e/content-services/components/share-file.e2e.ts b/e2e/content-services/components/share-file.e2e.ts index b3a580787da..4a4f680f7b3 100644 --- a/e2e/content-services/components/share-file.e2e.ts +++ b/e2e/content-services/components/share-file.e2e.ts @@ -32,13 +32,11 @@ import { NavigationBarPage } from '../../core/pages/navigation-bar.page'; import { ShareDialogPage } from '../../core/pages/dialog/share-dialog.page'; import { FileModel } from '../../models/ACS/file.model'; import { browser } from 'protractor'; -import { SharedLinkEntry, SharedLinkPaging } from '@alfresco/js-api'; +import { SharedLinkEntry, SharedLinkPaging, SharedlinksApi } from '@alfresco/js-api'; import { CustomSourcesPage } from '../../core/pages/custom-sources.page'; describe('Share file', () => { - const apiService = new ApiService(); - const usersActions = new UsersActions(apiService); const loginPage = new LoginPage(); const contentServicesPage = new ContentServicesPage(); const contentListPage = contentServicesPage.getDocumentList(); @@ -47,8 +45,14 @@ describe('Share file', () => { const customSourcesPage = new CustomSourcesPage(); const viewerPage = new ViewerPage(); const notificationHistoryPage = new NotificationHistoryPage(); + let acsUser: UserModel; + + const apiService = new ApiService(); + const usersActions = new UsersActions(apiService); const uploadActions = new UploadActions(apiService); + const sharedLinksApi = new SharedlinksApi(apiService.getInstance()); + const pngFileModel = new FileModel({ name: browser.params.resources.Files.ADF_DOCUMENTS.PNG.file_name, location: browser.params.resources.Files.ADF_DOCUMENTS.PNG.file_path @@ -67,7 +71,7 @@ describe('Share file', () => { const apiCall = async () => { await apiService.login(acsUser.username, acsUser.password); - return apiService.getInstance().core.sharedlinksApi.findSharedLinks(); + return sharedLinksApi.listSharedLinks(); }; return ApiUtil.waitForApi(apiCall, predicate, 10, 2000); diff --git a/e2e/content-services/components/site-permissions.e2e.ts b/e2e/content-services/components/site-permissions.e2e.ts index 77fa6b4d36a..1f59de74726 100644 --- a/e2e/content-services/components/site-permissions.e2e.ts +++ b/e2e/content-services/components/site-permissions.e2e.ts @@ -18,7 +18,7 @@ import { PermissionsPage } from '../../content-services/pages/permissions.page'; import { ApiService, - BrowserActions, + BrowserActions, Logger, LoginPage, NotificationHistoryPage, SearchService, StringUtil, @@ -35,7 +35,7 @@ import { UploadDialogPage } from '../../core/pages/dialog/upload-dialog.page'; import { NavigationBarPage } from '../../core/pages/navigation-bar.page'; import { VersionManagePage } from '../../core/pages/version-manager.page'; import CONSTANTS = require('../../util/constants'); -import { SitesApi } from '@alfresco/js-api'; +import { NodesApi, SitesApi } from '@alfresco/js-api'; import { NotificationDemoPage } from '../../core/pages/notification.page'; describe('Permissions Component', () => { @@ -43,6 +43,7 @@ describe('Permissions Component', () => { const apiService = new ApiService(); const uploadActions = new UploadActions(apiService); const searchService = new SearchService(apiService); + const nodesApi = new NodesApi(apiService.getInstance()); const loginPage = new LoginPage(); const contentServicesPage = new ContentServicesPage(); @@ -142,7 +143,7 @@ describe('Permissions Component', () => { siteFolder = await uploadActions.createFolder(folderName, publicSite.entry.guid); privateSiteFile = await uploadActions.uploadFile(fileModel.location, 'privateSite' + fileModel.name, privateSite.entry.guid); - await apiService.getInstance().core.nodesApi.updateNode(privateSiteFile.entry.id, + await nodesApi.updateNode(privateSiteFile.entry.id, { permissions: { locallySet: [{ @@ -159,7 +160,7 @@ describe('Permissions Component', () => { try { await searchService.isUserSearchable(consumerUser); } catch (e) { - console.error(`*****\n Failed to sync user \n*****`); + Logger.error(`*****\n Failed to sync user \n*****`); } await browser.sleep(browser.params.testConfig.timeouts.index_search); } catch (error) { diff --git a/e2e/content-services/components/social.component.e2e.ts b/e2e/content-services/components/social.component.e2e.ts index 27746168cb5..b42a1964d71 100644 --- a/e2e/content-services/components/social.component.e2e.ts +++ b/e2e/content-services/components/social.component.e2e.ts @@ -28,6 +28,7 @@ import { FileModel } from '../../models/ACS/file.model'; import { NavigationBarPage } from '../../core/pages/navigation-bar.page'; import { SocialPage } from '../../content-services/pages/social.page'; import { browser } from 'protractor'; +import { NodesApi } from '@alfresco/js-api'; describe('Social component', () => { @@ -43,6 +44,7 @@ describe('Social component', () => { const apiService = new ApiService(); const usersActions = new UsersActions(apiService); const uploadActions = new UploadActions(apiService); + const nodesApi = new NodesApi(apiService.getInstance()); const blueLikeColor = ('rgba(33, 150, 243, 1)'); const greyLikeColor = ('rgba(128, 128, 128, 1)'); @@ -67,7 +69,7 @@ describe('Social component', () => { emptyFile = await uploadActions.uploadFile(emptyFileModel.location, emptyFileModel.name, '-my-'); - await apiService.getInstance().core.nodesApi.updateNode(emptyFile.entry.id, + await nodesApi.updateNode(emptyFile.entry.id, { permissions: { diff --git a/e2e/content-services/components/tag-component.e2e.ts b/e2e/content-services/components/tag-component.e2e.ts index 255a9382c8f..afc9fc64543 100644 --- a/e2e/content-services/components/tag-component.e2e.ts +++ b/e2e/content-services/components/tag-component.e2e.ts @@ -27,6 +27,7 @@ import { import { TagPage } from '../../content-services/pages/tag.page'; import { NavigationBarPage } from '../../core/pages/navigation-bar.page'; import { browser } from 'protractor'; +import { TagsApi } from '@alfresco/js-api'; describe('Tag component', () => { @@ -37,6 +38,7 @@ describe('Tag component', () => { let acsUser: UserModel; const apiService = new ApiService(); const usersActions = new UsersActions(apiService); + const tagsApi = new TagsApi(apiService.getInstance()); const uploadActions = new UploadActions(apiService); const pdfFileModel = new FileModel({ name: browser.params.resources.Files.ADF_DOCUMENTS.PDF.file_name }); @@ -73,7 +75,7 @@ describe('Tag component', () => { Object.assign(deleteFile, uploadedDeleteFile.entry); - await apiService.getInstance().core.tagsApi.addTag(nodeId, tags); + await tagsApi.createTagForNode(nodeId, tags); await loginPage.login(acsUser.username, acsUser.password); await navigationBarPage.clickTagButton(); diff --git a/e2e/content-services/components/tree-view-component.e2e.ts b/e2e/content-services/components/tree-view-component.e2e.ts index d499f671817..75024390b59 100644 --- a/e2e/content-services/components/tree-view-component.e2e.ts +++ b/e2e/content-services/components/tree-view-component.e2e.ts @@ -18,6 +18,7 @@ import { ApiService, LoginPage, UploadActions, UserModel, UsersActions } from '@alfresco/adf-testing'; import { NavigationBarPage } from '../../core/pages/navigation-bar.page'; import { TreeViewPage } from './../pages/tree-view.page'; +import { NodesApi } from '@alfresco/js-api'; describe('Tree View Component', () => { @@ -28,8 +29,8 @@ describe('Tree View Component', () => { let acsUser: UserModel; const apiService = new ApiService(); const usersActions = new UsersActions(apiService); - const uploadActions = new UploadActions(apiService); + const nodesApi = new NodesApi(apiService.getInstance()); let treeFolder, secondTreeFolder, thirdTreeFolder; @@ -48,19 +49,19 @@ describe('Tree View Component', () => { await apiService.login(acsUser.username, acsUser.password); - treeFolder = await apiService.getInstance().nodes.addNode(nodeNames.parentFolder, { + treeFolder = await nodesApi.createNode(nodeNames.parentFolder, { name: nodeNames.folder, nodeType: 'cm:folder' }); - secondTreeFolder = await apiService.getInstance().nodes.addNode(nodeNames.parentFolder, { + secondTreeFolder = await nodesApi.createNode(nodeNames.parentFolder, { name: nodeNames.secondFolder, nodeType: 'cm:folder' }); - thirdTreeFolder = await apiService.getInstance().nodes.addNode(secondTreeFolder.entry.id, { + thirdTreeFolder = await nodesApi.createNode(secondTreeFolder.entry.id, { name: nodeNames.thirdFolder, nodeType: 'cm:folder' }); - await apiService.getInstance().nodes.addNode(thirdTreeFolder.entry.id, { + await nodesApi.createNode(thirdTreeFolder.entry.id, { name: nodeNames.document, nodeType: 'cm:content' }); diff --git a/e2e/content-services/components/unshare-file.e2e.ts b/e2e/content-services/components/unshare-file.e2e.ts index 5c34dbd6916..c08963c54fc 100644 --- a/e2e/content-services/components/unshare-file.e2e.ts +++ b/e2e/content-services/components/unshare-file.e2e.ts @@ -27,7 +27,7 @@ import { UserModel, UsersActions } from '@alfresco/adf-testing'; -import { NodeEntry, SitesApi } from '@alfresco/js-api'; +import { NodeEntry, NodesApi, SharedlinksApi, SitesApi } from '@alfresco/js-api'; import { NavigationBarPage } from '../../core/pages/navigation-bar.page'; import { ContentServicesPage } from '../../core/pages/content-services.page'; import { ShareDialogPage } from '../../core/pages/dialog/share-dialog.page'; @@ -47,6 +47,8 @@ describe('Unshare file', () => { const apiService = new ApiService(); const uploadActions = new UploadActions(apiService); const usersActions = new UsersActions(apiService); + const nodesApi = new NodesApi(apiService.getInstance()); + const sharedlinksApi = new SharedlinksApi(apiService.getInstance()); const siteName = `PRIVATE-TEST-SITE-${StringUtil.generateRandomString(5)}`; let acsUser: UserModel; @@ -82,13 +84,13 @@ describe('Unshare file', () => { shareFilesSite = await sitesApi.createSite(site); const docLibId = (await sitesApi.listSiteContainers(siteName)).list.entries[0].entry.id; - const testFile1Id = (await apiService.getInstance().core.nodesApi.addNode(docLibId, nodeBody)).entry.id; + const testFile1Id = (await nodesApi.createNode(docLibId, nodeBody)).entry.id; await sitesApi.createSiteMembership(siteName, { id: acsUser.username, role: CONSTANTS.CS_USER_ROLES.CONSUMER }); - await apiService.getInstance().core.nodesApi.updateNode(testFile1Id, { + await nodesApi.updateNode(testFile1Id, { permissions: { isInheritanceEnabled: false, locallySet: [ @@ -99,7 +101,7 @@ describe('Unshare file', () => { ] } }); - await apiService.getInstance().core.sharedlinksApi.addSharedLink({ nodeId: testFile1Id }); + await sharedlinksApi.createSharedLink({ nodeId: testFile1Id }); }); afterAll(async () => { diff --git a/e2e/content-services/directives/delete-directive.e2e.ts b/e2e/content-services/directives/delete-directive.e2e.ts index 53d8e346fbc..41e8c0201f7 100644 --- a/e2e/content-services/directives/delete-directive.e2e.ts +++ b/e2e/content-services/directives/delete-directive.e2e.ts @@ -269,6 +269,7 @@ describe('Delete Directive', () => { afterAll(async () => { try { + await apiService.login(acsUser.username, acsUser.password); const sitesApi = new SitesApi(apiService.getInstance()); await sitesApi.deleteSite(createdSite.entry.id, { permanent: true }); } catch (error) {} diff --git a/e2e/content-services/directives/edit-folder-directive.e2e.ts b/e2e/content-services/directives/edit-folder-directive.e2e.ts index 846c6a8f154..22052825573 100644 --- a/e2e/content-services/directives/edit-folder-directive.e2e.ts +++ b/e2e/content-services/directives/edit-folder-directive.e2e.ts @@ -30,6 +30,7 @@ import { FolderDialogPage } from '../../core/pages/dialog/folder-dialog.page'; import { browser, protractor } from 'protractor'; import { NavigationBarPage } from '../../core/pages/navigation-bar.page'; import { FileModel } from '../../models/ACS/file.model'; +import { NodesApi } from '@alfresco/js-api'; describe('Edit folder directive', () => { @@ -40,8 +41,10 @@ describe('Edit folder directive', () => { const anotherAcsUser = new UserModel(); const navigationBarPage = new NavigationBarPage(); const notificationHistoryPage = new NotificationHistoryPage(); + const apiService = new ApiService(); const usersActions = new UsersActions(apiService); + const nodesApi = new NodesApi(apiService.getInstance()); const pdfFile = new FileModel({ name: browser.params.resources.Files.ADF_DOCUMENTS.PDF.file_name, @@ -63,7 +66,7 @@ describe('Edit folder directive', () => { subFolder = await uploadActions.createFolder(StringUtil.generateRandomString(5), editFolder.entry.id); filePdfNode = await uploadActions.uploadFile(pdfFile.location, pdfFile.name, '-my-'); - await apiService.getInstance().core.nodesApi.updateNode(editFolder.entry.id, + await nodesApi.updateNode(editFolder.entry.id, { permissions: { 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 f95c42b996a..79c6cb5bf36 100644 --- a/e2e/content-services/document-list/document-list-component.e2e.ts +++ b/e2e/content-services/document-list/document-list-component.e2e.ts @@ -264,20 +264,6 @@ describe('Document List Component', () => { await contentServicesPage.checkContentIsDisplayed(testFile.name); }); - it('[C261997] Should be able to clean Recent Files history', async () => { - await apiService.loginWithProfile('admin'); - const cleanUser = await usersActions.createUser(); - - await loginPage.login(cleanUser.username, cleanUser.password); - await contentServicesPage.clickOnContentServices(); - await contentServicesPage.checkRecentFileToBeShowed(); - const icon = await contentServicesPage.getRecentFileIcon(); - await expect(icon).toBe('history'); - await contentServicesPage.expandRecentFiles(); - await contentServicesPage.checkEmptyRecentFileIsDisplayed(); - await contentServicesPage.closeRecentFiles(); - }); - it('[C279970] Should display Islocked field for folders', async () => { const folderNameA = `MEESEEKS_${StringUtil.generateRandomString(5)}_LOOK_AT_ME`; const folderNameB = `MEESEEKS_${StringUtil.generateRandomString(5)}_LOOK_AT_ME`; 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 660e2ed9d90..1dd495c60e2 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 @@ -31,7 +31,7 @@ import { ContentServicesPage } from '../../core/pages/content-services.page'; import { NavigationBarPage } from '../../core/pages/navigation-bar.page'; import { FileModel } from '../../models/ACS/file.model'; import CONSTANTS = require('../../util/constants'); -import { SitesApi } from '@alfresco/js-api'; +import { NodesApi, SitesApi } from '@alfresco/js-api'; describe('Document List Component', () => { @@ -40,9 +40,10 @@ describe('Document List Component', () => { const navigationBarPage = new NavigationBarPage(); const contentNodeSelector = new ContentNodeSelectorDialogPage(); const notificationHistoryPage = new NotificationHistoryPage(); + const apiService = new ApiService(); const usersActions = new UsersActions(apiService); - + const nodesApi = new NodesApi(apiService.getInstance()); const uploadActions = new UploadActions(apiService); let uploadedFolder, uploadedFile, sourceFolder, destinationFolder, subFolder, subFolder2, copyFolder, subFile, @@ -89,7 +90,7 @@ 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 apiService.getInstance().core.nodesApi.updateNode(sourceFolder.entry.id, + await nodesApi.updateNode(sourceFolder.entry.id, { permissions: { locallySet: [{ 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 450b2dd6761..f7ed7d73ad5 100644 --- a/e2e/content-services/document-list/document-list-properties.e2e.ts +++ b/e2e/content-services/document-list/document-list-properties.e2e.ts @@ -39,6 +39,7 @@ describe('Document List Component - Properties', () => { }); describe('Allow drop files property', () => { + beforeEach(async () => { await apiService.loginWithProfile('admin'); @@ -49,6 +50,9 @@ describe('Document List Component - Properties', () => { subFolder = await uploadActions.createFolder('subFolder', parentFolder.entry.id); await loginPage.login(acsUser.username, acsUser.password); + + await navigationBar.navigateToContentServices(); + await contentServicesPage.getDocumentList().dataTablePage().waitTillContentLoaded(); }); afterEach(async () => { @@ -59,9 +63,6 @@ describe('Document List Component - Properties', () => { }); it('[C299154] Should disallow upload content on a folder row if allowDropFiles is false', async () => { - await navigationBar.navigateToContentServices(); - await contentServicesPage.getDocumentList().dataTablePage().waitTillContentLoaded(); - await contentServicesPage.openFolder(parentFolder.entry.name); await contentServicesPage.disableDropFilesInAFolder(); await browser.sleep(1000); @@ -75,9 +76,6 @@ describe('Document List Component - Properties', () => { }); it('[C91319] Should allow upload content on a folder row if allowDropFiles is true', async () => { - await navigationBar.navigateToContentServices(); - await contentServicesPage.getDocumentList().dataTablePage().waitTillContentLoaded(); - await contentServicesPage.openFolder(parentFolder.entry.name); await contentServicesPage.enableDropFilesInAFolder(); await browser.sleep(1000); diff --git a/e2e/content-services/metadata/aspect-oriented-config.e2e.ts b/e2e/content-services/metadata/aspect-oriented-config.e2e.ts index 4ae87bd71f3..ebba51e2b2c 100644 --- a/e2e/content-services/metadata/aspect-oriented-config.e2e.ts +++ b/e2e/content-services/metadata/aspect-oriented-config.e2e.ts @@ -30,6 +30,7 @@ import { NavigationBarPage } from '../../core/pages/navigation-bar.page'; import { FileModel } from '../../models/ACS/file.model'; import { browser } from 'protractor'; import { ContentServicesPage } from '../../core/pages/content-services.page'; +import { CustomModelApi, NodesApi } from '@alfresco/js-api'; describe('Aspect oriented config', () => { @@ -40,8 +41,11 @@ describe('Aspect oriented config', () => { 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 nodesApi = new NodesApi(apiService.getInstance()); + const customModelApi = new CustomModelApi(apiService.getInstance()); let acsUser: UserModel; @@ -57,12 +61,12 @@ describe('Aspect oriented config', () => { await apiService.loginWithProfile('admin'); try { - await apiService.getInstance().core.customModelApi.createCustomModel('ACTIVE', modelOneName, modelOneName, modelOneName, modelOneName); + await customModelApi.createCustomModel('ACTIVE', modelOneName, modelOneName, modelOneName, modelOneName); } catch (e) { } try { - await apiService.getInstance().core.customModelApi.createCustomAspect(modelOneName, emptyAspectName, null, emptyAspectName, emptyAspectName); + await customModelApi.createCustomAspect(modelOneName, emptyAspectName, null, emptyAspectName, emptyAspectName); } catch (e) { } @@ -74,13 +78,13 @@ describe('Aspect oriented config', () => { await loginPage.login(acsUser.username, acsUser.password); - const aspects = await apiService.getInstance().core.nodesApi.getNode(uploadedFile.entry.id); + const aspects = await nodesApi.getNode(uploadedFile.entry.id); aspects.entry.aspectNames.push(modelOneName.concat(':', emptyAspectName)); aspects.entry.aspectNames.push(defaultModel.concat(':', defaultEmptyPropertiesAspect)); - await apiService.getInstance().core.nodesApi.updateNode(uploadedFile.entry.id, { aspectNames: aspects.entry.aspectNames }); + await nodesApi.updateNode(uploadedFile.entry.id, { aspectNames: aspects.entry.aspectNames }); }); afterAll(async () => { diff --git a/e2e/content-services/metadata/metadata-content-type.e2e.ts b/e2e/content-services/metadata/metadata-content-type.e2e.ts index 91b7f86141e..3c15b2581c0 100644 --- a/e2e/content-services/metadata/metadata-content-type.e2e.ts +++ b/e2e/content-services/metadata/metadata-content-type.e2e.ts @@ -24,7 +24,8 @@ import { UploadActions, UserModel, UsersActions, - ViewerPage + ViewerPage, + Logger } from '@alfresco/adf-testing'; import { CustomModel, CustomType } from '@alfresco/js-api'; import { FileModel } from '../../models/ACS/file.model'; @@ -94,7 +95,7 @@ describe('content type', () => { await modelActions.deactivateCustomModel(model.name); await modelActions.deleteCustomModel(model.name); } catch (e) { - console.error('failed to delete the model', e); + Logger.error('failed to delete the model {e}'); } }); diff --git a/e2e/content-services/upload/user-permission.e2e.ts b/e2e/content-services/upload/user-permission.e2e.ts index 136345d6ba0..6fd8ba89c86 100644 --- a/e2e/content-services/upload/user-permission.e2e.ts +++ b/e2e/content-services/upload/user-permission.e2e.ts @@ -60,6 +60,7 @@ describe('Upload - User permission', () => { }); beforeEach(async () => { + await apiService.loginWithProfile('admin'); const sitesApi = new SitesApi(apiService.getInstance()); consumerSite = await sitesApi.createSite({ diff --git a/e2e/content-services/upload/version-permissions.e2e.ts b/e2e/content-services/upload/version-permissions.e2e.ts index 5d72bbfcbc7..e7c2291df65 100644 --- a/e2e/content-services/upload/version-permissions.e2e.ts +++ b/e2e/content-services/upload/version-permissions.e2e.ts @@ -31,7 +31,7 @@ import { UploadDialogPage } from '../../core/pages/dialog/upload-dialog.page'; import { ContentServicesPage } from '../../core/pages/content-services.page'; import { FileModel } from '../../models/ACS/file.model'; import CONSTANTS = require('../../util/constants'); -import { SitesApi } from '@alfresco/js-api'; +import { NodesApi, SitesApi } from '@alfresco/js-api'; describe('Version component permissions', () => { @@ -52,6 +52,7 @@ describe('Version component permissions', () => { const apiService = new ApiService(); const usersActions = new UsersActions(apiService); + const nodesApi = new NodesApi(apiService.getInstance()); const newVersionFile = new FileModel({ 'name': browser.params.resources.Files.ADF_DOCUMENTS.PNG_B.file_name, @@ -114,7 +115,7 @@ describe('Version component permissions', () => { const lockFileUploaded = await uploadActions.uploadFile(lockFileModel.location, lockFileModel.name, site.entry.guid); Object.assign(lockFileModel, lockFileUploaded.entry); - await apiService.getInstance().nodes.lockNode(lockFileModel.id, { + await nodesApi.lockNode(lockFileModel.id, { type: 'FULL', lifetime: 'PERSISTENT' }); @@ -150,7 +151,7 @@ describe('Version component permissions', () => { afterAll(async () => { await apiService.loginWithProfile('admin'); - await apiService.getInstance().nodes.deleteNode(sameCreatorFile.id); + await nodesApi.deleteNode(sameCreatorFile.id); await navigationBarPage.clickLogoutButton(); }); @@ -222,7 +223,7 @@ describe('Version component permissions', () => { afterAll(async () => { await apiService.loginWithProfile('admin'); - await apiService.getInstance().nodes.deleteNode(sameCreatorFile.id); + await nodesApi.deleteNode(sameCreatorFile.id); await navigationBarPage.clickLogoutButton(); }); @@ -277,7 +278,7 @@ describe('Version component permissions', () => { afterAll(async () => { await apiService.loginWithProfile('admin'); - await apiService.getInstance().nodes.deleteNode(sameCreatorFile.id); + await nodesApi.deleteNode(sameCreatorFile.id); await navigationBarPage.clickLogoutButton(); }); diff --git a/e2e/core/pages/metadata-view.page.ts b/e2e/core/pages/metadata-view.page.ts index 2d446ee793e..d26b3ae267a 100644 --- a/e2e/core/pages/metadata-view.page.ts +++ b/e2e/core/pages/metadata-view.page.ts @@ -250,7 +250,7 @@ export class MetadataViewPage { async changeContentType(option: string, attempt = 0, maxAttempt = 3): Promise { const nodeType = TestElement.byCss('div[data-automation-id="header-nodeType"] .mat-select-trigger'); if (attempt > maxAttempt) { - console.error(`content type select option not found. check acs version may be lesser than 7.0.0`); + Logger.error(`content type select option not found. check acs version may be lesser than 7.0.0`); return false; } try { 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 11d55b90ad1..080e1f2ef3f 100644 --- a/e2e/core/viewer/file-extensions/viewer-excel.component.e2e.ts +++ b/e2e/core/viewer/file-extensions/viewer-excel.component.e2e.ts @@ -88,10 +88,11 @@ describe('Viewer', () => { it('[C280008] Should be possible to open any Excel file', async () => { await contentServicesPage.doubleClickRow('excel'); + for (const currentFile of uploadedExcels) { if (currentFile.entry.name !== '.DS_Store') { await contentServicesPage.doubleClickRow(currentFile.entry.name); - await viewerPage.checkFileIsLoaded(currentFile.entry.name); + await viewerPage.waitTillContentLoaded(); await viewerPage.clickCloseButton(); } } 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 705f1c4983b..6ba4fdc80f8 100644 --- a/e2e/core/viewer/file-extensions/viewer-image.component.e2e.ts +++ b/e2e/core/viewer/file-extensions/viewer-image.component.e2e.ts @@ -101,7 +101,7 @@ describe('Viewer', () => { for (const image of uploadedImages) { if (image.entry.name !== '.DS_Store') { await contentServicesPage.doubleClickRow(image.entry.name); - await viewerPage.checkImgViewerIsDisplayed(); + await viewerPage.waitTillContentLoaded(); await viewerPage.clickCloseButton(); } } @@ -109,7 +109,7 @@ describe('Viewer', () => { for (const item of uploadedImgRenditionFolderInfo) { if (item.entry.name !== '.DS_Store') { await contentServicesPage.doubleClickRow(item.entry.name); - await viewerPage.checkFileIsLoaded(); + await viewerPage.waitTillContentLoaded(); await viewerPage.clickCloseButton(); } } 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 7fcf29c39d7..f972f4b886a 100644 --- a/e2e/core/viewer/file-extensions/viewer-powerpoint.component.e2e.ts +++ b/e2e/core/viewer/file-extensions/viewer-powerpoint.component.e2e.ts @@ -94,7 +94,7 @@ describe('Viewer', () => { for (const currentFile of uploadedPpt) { if (currentFile.entry.name !== '.DS_Store') { await contentServicesPage.doubleClickRow(currentFile.entry.name); - await viewerPage.checkFileIsLoaded(); + await viewerPage.waitTillContentLoaded(); await viewerPage.clickCloseButton(); } } 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 85251fda483..82db0b872b1 100644 --- a/e2e/core/viewer/file-extensions/viewer-text.component.e2e.ts +++ b/e2e/core/viewer/file-extensions/viewer-text.component.e2e.ts @@ -91,7 +91,7 @@ describe('Viewer', () => { for (const currentFile of uploadedTexts) { if (currentFile.entry.name !== '.DS_Store') { await contentServicesPage.doubleClickRow(currentFile.entry.name); - await viewerPage.checkFileIsLoaded(); + await viewerPage.waitTillContentLoaded(); await viewerPage.clickCloseButton(); } } diff --git a/e2e/core/viewer/file-extensions/viewer-word.component.e2e.ts b/e2e/core/viewer/file-extensions/viewer-word.component.e2e.ts index 05b49cad764..1ebbe35a21e 100644 --- a/e2e/core/viewer/file-extensions/viewer-word.component.e2e.ts +++ b/e2e/core/viewer/file-extensions/viewer-word.component.e2e.ts @@ -95,7 +95,7 @@ describe('Viewer', () => { for (const currentFile of uploadedWords) { if (currentFile.entry.name !== '.DS_Store') { await contentServicesPage.doubleClickRow(currentFile.entry.name); - await viewerPage.checkFileIsLoaded(); + await viewerPage.waitTillContentLoaded(); await viewerPage.clickCloseButton(); } } diff --git a/e2e/core/viewer/viewer-content-services-component.e2e.ts b/e2e/core/viewer/viewer-content-services-component.e2e.ts index 3cb9d6fde57..55d94e8f4eb 100644 --- a/e2e/core/viewer/viewer-content-services-component.e2e.ts +++ b/e2e/core/viewer/viewer-content-services-component.e2e.ts @@ -134,7 +134,9 @@ describe('Content Services Viewer', () => { describe('Usual type files', () => { it('[C260038] Should display first page, toolbar and pagination when opening a .pdf file', async () => { - await viewerPage.viewFile(pdfFile.name); + await contentServicesPage.doubleClickRow(pdfFile.name); + await viewerPage.waitTillContentLoaded(); + await viewerPage.checkZoomInButtonIsDisplayed(); await viewerPage.checkFileContent('1', pdfFile.firstPageText); @@ -156,7 +158,9 @@ describe('Content Services Viewer', () => { }); it('[C260040] Should be able to change pages and zoom when .pdf file is open', async () => { - await viewerPage.viewFile(pdfFile.name); + await contentServicesPage.doubleClickRow(pdfFile.name); + await viewerPage.waitTillContentLoaded(); + await viewerPage.checkZoomInButtonIsDisplayed(); await viewerPage.checkFileContent('1', pdfFile.firstPageText); @@ -190,7 +194,9 @@ describe('Content Services Viewer', () => { }); it('[C260042] Should be able to download, open full-screen and Info container from the Viewer', async () => { - await viewerPage.viewFile(jpgFile.name); + await contentServicesPage.doubleClickRow(jpgFile.name); + await viewerPage.waitTillContentLoaded(); + await viewerPage.checkZoomInButtonIsDisplayed(); await viewerPage.checkImgContainerIsDisplayed(); @@ -207,7 +213,9 @@ describe('Content Services Viewer', () => { }); it('[C260052] Should display image, toolbar and pagination when opening a .jpg file', async () => { - await viewerPage.viewFile(jpgFile.name); + await contentServicesPage.doubleClickRow(jpgFile.name); + await viewerPage.waitTillContentLoaded(); + await viewerPage.checkZoomInButtonIsDisplayed(); await viewerPage.checkImgContainerIsDisplayed(); @@ -227,7 +235,9 @@ describe('Content Services Viewer', () => { }); it('[C260483] Should be able to zoom and rotate image when .jpg file is open', async () => { - await viewerPage.viewFile(jpgFile.name); + await contentServicesPage.doubleClickRow(jpgFile.name); + await viewerPage.waitTillContentLoaded(); + await viewerPage.checkZoomInButtonIsDisplayed(); await viewerPage.checkPercentageIsDisplayed(); @@ -244,7 +254,8 @@ describe('Content Services Viewer', () => { }); it('[C279922] Should display first page, toolbar and pagination when opening a .ppt file', async () => { - await viewerPage.viewFile(pptFile.name); + await contentServicesPage.doubleClickRow(pptFile.name); + await viewerPage.waitTillContentLoaded(); await viewerPage.checkZoomInButtonIsDisplayed(); await viewerPage.checkFileContent('1', pptFile.firstPageText); @@ -264,7 +275,9 @@ describe('Content Services Viewer', () => { }); it('[C291903] Should display the buttons in order in the adf viewer toolbar', async () => { - await viewerPage.viewFile(pdfFile.name); + await contentServicesPage.doubleClickRow(pdfFile.name); + await viewerPage.waitTillContentLoaded(); + await viewerPage.checkLeftSideBarIsNotDisplayed(); await viewerPage.clickLeftSidebarButton(); await viewerPage.checkLeftSideBarIsDisplayed(); @@ -275,7 +288,9 @@ describe('Content Services Viewer', () => { }); it('[C260053] Should display first page, toolbar and pagination when opening a .docx file', async () => { - await viewerPage.viewFile(docxFile.name); + await contentServicesPage.doubleClickRow(docxFile.name); + await viewerPage.waitTillContentLoaded(); + await viewerPage.checkZoomInButtonIsDisplayed(); await viewerPage.checkFileContent('1', docxFile.firstPageText); @@ -295,7 +310,8 @@ describe('Content Services Viewer', () => { }); it('[C260054] Should display Preview could not be loaded and viewer toolbar when opening an unsupported file', async () => { - await viewerPage.viewFile(unsupportedFile.name); + await contentServicesPage.doubleClickRow(unsupportedFile.name); + await viewerPage.waitTillContentLoaded(); await viewerPage.checkCloseButtonIsDisplayed(); await viewerPage.checkFileNameIsDisplayed(unsupportedFile.name); @@ -311,7 +327,8 @@ describe('Content Services Viewer', () => { }); it('[C260056] Should display video and viewer toolbar when opening a media file', async () => { - await viewerPage.viewFile(mp4File.name); + await contentServicesPage.doubleClickRow(mp4File.name); + await viewerPage.waitTillContentLoaded(); await viewerPage.checkMediaPlayerContainerIsDisplayed(); await viewerPage.checkCloseButtonIsDisplayed(); @@ -327,7 +344,8 @@ describe('Content Services Viewer', () => { }); it('[C261123] Should be able to preview all pages and navigate to a page when using thumbnails', async () => { - await viewerPage.viewFile(pdfFile.name); + await contentServicesPage.doubleClickRow(pdfFile.name); + await viewerPage.waitTillContentLoaded(); await viewerPage.checkZoomInButtonIsDisplayed(); await viewerPage.checkFileContent('1', pdfFile.firstPageText); @@ -357,7 +375,9 @@ describe('Content Services Viewer', () => { }); it('[C268105] Should display current thumbnail when getting to the page following the last visible thumbnail', async () => { - await viewerPage.viewFile(pdfFile.name); + await contentServicesPage.doubleClickRow(pdfFile.name); + await viewerPage.waitTillContentLoaded(); + await viewerPage.checkZoomInButtonIsDisplayed(); await viewerPage.checkFileContent('1', pdfFile.firstPageText); @@ -385,7 +405,8 @@ describe('Content Services Viewer', () => { }); it('[C268901] Should need a password when opening a protected file', async () => { - await viewerPage.viewFile(protectedFile.name); + await contentServicesPage.doubleClickRow(protectedFile.name); + await viewerPage.waitTillContentLoaded(); await viewerPage.checkZoomInButtonIsDisplayed(); await viewerPage.checkPasswordDialogIsDisplayed(); @@ -404,7 +425,9 @@ describe('Content Services Viewer', () => { }); it('[C307985] Should close the viewer when password dialog is cancelled', async () => { - await viewerPage.viewFile(protectedFile.name); + await contentServicesPage.doubleClickRow(protectedFile.name); + await viewerPage.waitTillContentLoaded(); + await viewerPage.checkPasswordDialogIsDisplayed(); await viewerPage.clickClosePasswordDialog(); await contentServicesPage.checkContentIsDisplayed(protectedFile.name); @@ -429,7 +452,9 @@ describe('Content Services Viewer', () => { }); async function uploadNewVersion(originalFileName: string, newVersionLocation: string): Promise { - await viewerPage.viewFile(originalFileName); + await contentServicesPage.doubleClickRow(originalFileName); + await viewerPage.waitTillContentLoaded(); + await viewerPage.clickCloseButton(); await contentServicesPage.versionManagerContent(originalFileName); await versionManagePage.showNewVersionButton.click(); @@ -440,14 +465,17 @@ describe('Content Services Viewer', () => { } async function previewUnsupportedFile(unsupportedFileName: string): Promise { - await viewerPage.viewFile(unsupportedFileName); + await contentServicesPage.doubleClickRow(unsupportedFileName); + await viewerPage.waitTillContentLoaded(); await viewerPage.checkUnknownFormatIsDisplayed(); await expect(await viewerPage.getUnknownFormatMessage()).toBe('Couldn\'t load preview. Unknown format.'); await viewerPage.clickCloseButton(); } async function changeFileNameInViewer(fileName: string, newName: string): Promise { - await viewerPage.viewFile(fileName); + await contentServicesPage.doubleClickRow(fileName); + await viewerPage.waitTillContentLoaded(); + await viewerPage.clickInfoButton(); await viewerPage.checkInfoSideBarIsDisplayed(); await viewerPage.clickOnTab('Properties'); 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 260c843f4ec..924e717693a 100644 --- a/e2e/core/viewer/viewer-custom-toolbar-info-drawer.e2e.ts +++ b/e2e/core/viewer/viewer-custom-toolbar-info-drawer.e2e.ts @@ -67,6 +67,7 @@ describe('Viewer', () => { beforeEach(async () => { await contentServicesPage.goToDocumentList(); await contentServicesPage.doubleClickRow(txtFileUploaded.entry.name); + await viewerPage.waitTillContentLoaded(); }); afterEach(async () => { @@ -99,6 +100,7 @@ describe('Viewer', () => { await versionManagePage.uploadNewVersionFile(fileModelVersionTwo.location); await versionManagePage.closeVersionDialog(); await contentServicesPage.doubleClickRow(txtFileUploaded.entry.name); + await viewerPage.waitTillContentLoaded(); await viewerPage.clickInfoButton(); await viewerPage.clickOnTab('Versions'); await versionManagePage.viewFileVersion('1.0'); diff --git a/e2e/core/viewer/viewer-share-content.ts b/e2e/core/viewer/viewer-share-content.ts index 30f5c421288..cc1dd0489d2 100644 --- a/e2e/core/viewer/viewer-share-content.ts +++ b/e2e/core/viewer/viewer-share-content.ts @@ -31,7 +31,7 @@ import { ShareDialogPage } from '../../core/pages/dialog/share-dialog.page'; import { FileModel } from '../../models/ACS/file.model'; import { browser } from 'protractor'; import CONSTANTS = require('../../util/constants'); -import { SitesApi } from '@alfresco/js-api'; +import { SharedlinksApi, SitesApi } from '@alfresco/js-api'; describe('Viewer', () => { @@ -44,6 +44,7 @@ describe('Viewer', () => { const apiService = new ApiService(); const usersActions = new UsersActions(apiService); const uploadActions = new UploadActions(apiService); + const sharedlinksApi = new SharedlinksApi(apiService); let site; const acsUser = new UserModel(); @@ -86,7 +87,7 @@ describe('Viewer', () => { wordFileUploaded = await uploadActions.uploadFile(wordFileInfo.location, wordFileInfo.name, '-my-'); - pngFileShared = await apiService.getInstance().core.sharedlinksApi.addSharedLink({ 'nodeId': pngFileUploaded.entry.id }); + pngFileShared = await sharedlinksApi.createSharedLink({ 'nodeId': pngFileUploaded.entry.id }); }); afterAll(async () => { diff --git a/e2e/insights/analytics-component.e2e.ts b/e2e/insights/analytics-component.e2e.ts index aa84da9c62b..b776bdd9bde 100644 --- a/e2e/insights/analytics-component.e2e.ts +++ b/e2e/insights/analytics-component.e2e.ts @@ -45,7 +45,7 @@ describe('Analytics Smoke Test', () => { afterAll(async () => { await apiService.loginWithProfile('admin'); - await apiService.getInstance().activiti.adminTenantsApi.deleteTenant(procUserModel.tenantId); + await usersActions.deleteTenant(procUserModel.tenantId); }); it('[C260346] Should be able to change title of a report', async () => { diff --git a/e2e/process-services-cloud/task-list/task-list-properties-sort.e2e.ts b/e2e/process-services-cloud/task-list/task-list-properties-sort.e2e.ts index 0a2345d95a4..427e26dced2 100644 --- a/e2e/process-services-cloud/task-list/task-list-properties-sort.e2e.ts +++ b/e2e/process-services-cloud/task-list/task-list-properties-sort.e2e.ts @@ -123,10 +123,9 @@ describe('Edit task filters and task list properties', () => { })); }, 5 * 60 * 1000); - afterAll(async (done) => { + afterAll(async () => { await apiService.loginWithProfile('identityAdmin'); await identityService.deleteIdentityUser(testUser.idIdentityService); - done(); }); describe('Edit task filters and task list properties - sort properties', () => { diff --git a/e2e/process-services-cloud/task-list/task-list-properties.e2e.ts b/e2e/process-services-cloud/task-list/task-list-properties.e2e.ts index dc456e44d07..ce6f5c449c2 100644 --- a/e2e/process-services-cloud/task-list/task-list-properties.e2e.ts +++ b/e2e/process-services-cloud/task-list/task-list-properties.e2e.ts @@ -97,10 +97,9 @@ describe('Edit task filters and task list properties', () => { await LocalStorageUtil.setConfigField('adf-edit-task-filter', JSON.stringify(taskFilterConfiguration)); }, 5 * 60 * 1000); - afterAll(async (done) => { + afterAll(async () => { await apiService.loginWithProfile('identityAdmin'); await identityService.deleteIdentityUser(testUser.idIdentityService); - done(); }); describe('Edit task filters and task list properties - filter properties', () => { diff --git a/e2e/process-services/form/apps-section.e2e.ts b/e2e/process-services/form/apps-section.e2e.ts index 15f69665c75..b9e84cf1973 100644 --- a/e2e/process-services/form/apps-section.e2e.ts +++ b/e2e/process-services/form/apps-section.e2e.ts @@ -16,11 +16,11 @@ */ import { browser } from 'protractor'; -import { ApiService, ApplicationsUtil, LoginPage, UsersActions } from '@alfresco/adf-testing'; +import { ModelsActions, ApiService, ApplicationsUtil, LoginPage, UsersActions } from '@alfresco/adf-testing'; import { ProcessServicesPage } from './../pages/process-services.page'; import { NavigationBarPage } from '../../core/pages/navigation-bar.page'; -import { ModelsActions } from '../../actions/APS/models.actions'; import CONSTANTS = require('../../util/constants'); +import { AppDefinitionsApi } from '@alfresco/js-api'; describe('Modify applications', () => { @@ -37,6 +37,7 @@ describe('Modify applications', () => { const apps = new ApplicationsUtil(apiService); const usersActions = new UsersActions(apiService); const applicationService = new ApplicationsUtil(apiService); + const appsApi = new AppDefinitionsApi(apiService.getInstance()); let firstApp, appVersionToBeDeleted; @@ -105,8 +106,8 @@ describe('Modify applications', () => { await expect(await processServicesPage.getBackgroundColor(appToBeDeleted.title)).toEqual(CONSTANTS.APP_COLOR.GREY); - await modelActions.deleteVersionModel(appVersionToBeDeleted.id); - await modelActions.deleteVersionModel(appVersionToBeDeleted.id); + await modelActions.deleteModel(appVersionToBeDeleted.id); + await modelActions.deleteModel(appVersionToBeDeleted.id); await apps.publishDeployApp(appVersionToBeDeleted.id); await navigationBarPage.clickHomeButton(); @@ -134,7 +135,7 @@ describe('Modify applications', () => { }, 'publish': true }; - await apiService.getInstance().activiti.appsApi.updateAppDefinition(appVersionToBeDeleted.id, appDefinition); + await appsApi.updateAppDefinition(appVersionToBeDeleted.id, appDefinition); await navigationBarPage.clickHomeButton(); await navigationBarPage.navigateToProcessServicesPage(); diff --git a/e2e/process-services/form/attach-file-content-service.e2e.ts b/e2e/process-services/form/attach-file-content-service.e2e.ts index 6a5221ab105..8f6fde1f111 100644 --- a/e2e/process-services/form/attach-file-content-service.e2e.ts +++ b/e2e/process-services/form/attach-file-content-service.e2e.ts @@ -74,41 +74,36 @@ describe('Attach File - Content service', () => { const csIntegrations = ['adf dev', 'adf master']; let user: UserModel; - beforeAll(async (done) => { + beforeAll(async () => { await LocalStorageUtil.setStorageItem('providers', 'ALL'); - try { - await apiService.loginWithProfile('admin'); - user = await usersActions.createUser(); - - await apiServiceExternal.loginWithProfile('admin'); - 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 apiService.login(user.username, user.password); - await uploadActions.uploadFile(pdfFileTwo.location, pdfFileTwo.name, '-my-'); - await applicationService.importPublishDeployApp(app.file_path); - - await searchService.isSearchable(pdfFileTwo.name); - await searchService.isSearchable(externalFile); - } catch (error) { - console.error('Preconditions failed check if the external env is up and running'); - } - done(); + await apiService.loginWithProfile('admin'); + user = await usersActions.createUser(); + + await apiServiceExternal.loginWithProfile('admin'); + 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 apiService.login(user.username, user.password); + await uploadActions.uploadFile(pdfFileTwo.location, pdfFileTwo.name, '-my-'); + await applicationService.importPublishDeployApp(app.file_path); + + await searchService.isSearchable(pdfFileTwo.name); + await searchService.isSearchable(externalFile); }); afterAll(async () => { await apiService.loginWithProfile('admin'); - await apiService.getInstance().activiti.adminTenantsApi.deleteTenant(user.tenantId); + await usersActions.deleteTenant(user.tenantId); }); beforeEach(async () => { diff --git a/e2e/process-services/form/attach-file-widget-start-task-app.e2e.ts b/e2e/process-services/form/attach-file-widget-start-task-app.e2e.ts index c36e801a78a..d70997c286e 100644 --- a/e2e/process-services/form/attach-file-widget-start-task-app.e2e.ts +++ b/e2e/process-services/form/attach-file-widget-start-task-app.e2e.ts @@ -61,7 +61,7 @@ describe('Start Task - Task App', () => { afterAll(async () => { await apiService.loginWithProfile('admin'); - await apiService.getInstance().activiti.adminTenantsApi.deleteTenant(user.tenantId); + await usersActions.deleteTenant(user.tenantId); }); it('[C274690] Should be able to open a file attached to a start form', async () => { diff --git a/e2e/process-services/form/attach-folder.e2e.ts b/e2e/process-services/form/attach-folder.e2e.ts index c92768e500f..380220fe6d2 100644 --- a/e2e/process-services/form/attach-folder.e2e.ts +++ b/e2e/process-services/form/attach-folder.e2e.ts @@ -72,7 +72,7 @@ describe('Attach Folder', () => { afterAll(async () => { await apiService.loginWithProfile('admin'); - await apiService.getInstance().activiti.adminTenantsApi.deleteTenant(user.tenantId); + await usersActions.deleteTenant(user.tenantId); }); it('[C246534] Attach folder - ACS', async () => { diff --git a/e2e/process-services/form/attach-form-component.e2e.ts b/e2e/process-services/form/attach-form-component.e2e.ts index 4ec3c163d0c..6bccf254162 100644 --- a/e2e/process-services/form/attach-form-component.e2e.ts +++ b/e2e/process-services/form/attach-form-component.e2e.ts @@ -15,13 +15,20 @@ * limitations under the License. */ -import { ApiService, ApplicationsUtil, FormFields, LoginPage, UsersActions } from '@alfresco/adf-testing'; +import { + ApiService, + ApplicationsUtil, + FormFields, + LoginPage, + ModelsActions, + TaskUtil, + UsersActions +} from '@alfresco/adf-testing'; import { browser, by } from 'protractor'; import { NavigationBarPage } from '../../core/pages/navigation-bar.page'; import { AttachFormPage } from './../pages/attach-form.page'; import { TasksPage } from './../pages/tasks.page'; import { TaskDetailsPage } from './../pages/task-details.page'; -import { TaskRepresentation } from '@alfresco/js-api'; import CONSTANTS = require('../../util/constants'); describe('Attach Form Component', () => { @@ -37,6 +44,8 @@ describe('Attach Form Component', () => { const apiService = new ApiService(); const usersActions = new UsersActions(apiService); const applicationService = new ApplicationsUtil(apiService); + const taskUtil = new TaskUtil(apiService); + const modelsActions = new ModelsActions(apiService); const formTextField = app.form_fields.form_fieldId; let user, tenantId, appModel; @@ -60,15 +69,14 @@ describe('Attach Form Component', () => { appModel = await applicationService.importPublishDeployApp(app.file_path); - await apiService.getInstance().activiti.taskApi.createNewTask(new TaskRepresentation({ name: testNames.taskName })); - + await taskUtil.createStandaloneTask(testNames.taskName); await loginPage.login(user.username, user.password); }); afterAll(async () => { - await apiService.getInstance().activiti.modelsApi.deleteModel(appModel.id); + await modelsActions.deleteModel(appModel.id); await apiService.loginWithProfile('admin'); - await apiService.getInstance().activiti.adminTenantsApi.deleteTenant(tenantId); + await usersActions.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/form/checklist-component.e2e.ts b/e2e/process-services/form/checklist-component.e2e.ts index a60eb6a7a69..94dd8dd0b5d 100644 --- a/e2e/process-services/form/checklist-component.e2e.ts +++ b/e2e/process-services/form/checklist-component.e2e.ts @@ -15,15 +15,12 @@ * limitations under the License. */ -import { ApiService, LoginPage, UsersActions } from '@alfresco/adf-testing'; +import { ApiService, ApplicationsUtil, LoginPage, TaskUtil, UsersActions } from '@alfresco/adf-testing'; import { TasksPage } from './../pages/tasks.page'; import { ProcessServicesPage } from './../pages/process-services.page'; import { ChecklistDialog } from './../pages/dialog/create-checklist-dialog.page'; import { NavigationBarPage } from '../../core/pages/navigation-bar.page'; import { browser } from 'protractor'; -import * as fs from 'fs'; -import * as path from 'path'; -import { TaskRepresentation } from '@alfresco/js-api'; import CONSTANTS = require('../../util/constants'); describe('Checklist component', () => { @@ -38,6 +35,8 @@ describe('Checklist component', () => { const apiService = new ApiService(); const usersActions = new UsersActions(apiService); + const applicationService = new ApplicationsUtil(apiService); + const taskUtil = new TaskUtil(apiService); let processUserModel; @@ -51,15 +50,12 @@ describe('Checklist component', () => { processUserModel = await usersActions.createUser(); - const pathFile = path.join(browser.params.testConfig.main.rootPath + app.file_location); - const file = fs.createReadStream(pathFile); + await applicationService.importPublishDeployApp(app.file_path); await apiService.login(processUserModel.username, processUserModel.password); - await apiService.getInstance().activiti.appsApi.importAppDefinition(file); - for (let i = 0; i < tasks.length; i++) { - await apiService.getInstance().activiti.taskApi.createNewTask(new TaskRepresentation({ name: tasks[i] })); + await taskUtil.createStandaloneTask(tasks[i]); } await loginPage.login(processUserModel.username, processUserModel.password); diff --git a/e2e/process-services/form/dynamic-table-date-picker.e2e.ts b/e2e/process-services/form/dynamic-table-date-picker.e2e.ts index 839fb1a11bb..6abc18ff501 100644 --- a/e2e/process-services/form/dynamic-table-date-picker.e2e.ts +++ b/e2e/process-services/form/dynamic-table-date-picker.e2e.ts @@ -20,7 +20,7 @@ import { ApplicationsUtil, DatePickerCalendarPage, DateUtil, - LoginPage, + LoginPage, ModelsActions, UsersActions, Widget } from '@alfresco/adf-testing'; @@ -37,8 +37,10 @@ describe('Dynamic Table', () => { const datePicker = new DatePickerCalendarPage(); const navigationBarPage = new NavigationBarPage(); const widget = new Widget(); + const apiService = new ApiService(); const usersActions = new UsersActions(apiService); + const modelsActions = new ModelsActions(apiService); let user, tenantId, appId; @@ -50,7 +52,7 @@ describe('Dynamic Table', () => { afterAll(async () => { await apiService.loginWithProfile('admin'); - await apiService.getInstance().activiti.adminTenantsApi.deleteTenant(tenantId); + await usersActions.deleteTenant(tenantId); }); describe('Date Picker', () => { @@ -77,7 +79,7 @@ describe('Dynamic Table', () => { afterAll(async () => { await apiService.login(user.username, user.password); - await apiService.getInstance().activiti.modelsApi.deleteModel(appId); + await modelsActions.deleteModel(appId); await navigationBarPage.clickLogoutButton(); }); @@ -140,7 +142,7 @@ describe('Dynamic Table', () => { afterAll(async () => { await apiService.login(user.username, user.password); - await apiService.getInstance().activiti.modelsApi.deleteModel(appId); + await modelsActions.deleteModel(appId); }); beforeEach(async () => { diff --git a/e2e/process-services/form/form-component.e2e.ts b/e2e/process-services/form/form-component.e2e.ts index f439eb0cb30..1bbf135d97c 100644 --- a/e2e/process-services/form/form-component.e2e.ts +++ b/e2e/process-services/form/form-component.e2e.ts @@ -63,7 +63,7 @@ describe('Form Component', () => { afterAll(async () => { await apiService.loginWithProfile('admin'); - await apiService.getInstance().activiti.adminTenantsApi.deleteTenant(tenantId); + await usersActions.deleteTenant(tenantId); }); it('[C286505] Should be able to display errors under the Error Log section', async () => { diff --git a/e2e/process-services/form/form-people-widget.e2e.ts b/e2e/process-services/form/form-people-widget.e2e.ts index 4837d1d4407..86ff83d166b 100644 --- a/e2e/process-services/form/form-people-widget.e2e.ts +++ b/e2e/process-services/form/form-people-widget.e2e.ts @@ -29,6 +29,7 @@ import { TaskDetailsPage } from './../pages/task-details.page'; import { NavigationBarPage } from '../../core/pages/navigation-bar.page'; import { browser } from 'protractor'; import { ProcessServiceTabBarPage } from './../pages/process-service-tab-bar.page'; +import { TaskFormsApi } from '@alfresco/js-api'; describe('Form widgets - People ', () => { @@ -44,6 +45,7 @@ describe('Form widgets - People ', () => { const apiService = new ApiService(); const usersActions = new UsersActions(apiService); + const taskFormsApi = new TaskFormsApi(apiService.getInstance()); let processUserModel; let appModel; @@ -65,7 +67,7 @@ describe('Form widgets - People ', () => { afterAll(async () => { await apiService.loginWithProfile('admin'); - await apiService.getInstance().activiti.adminTenantsApi.deleteTenant(processUserModel.tenantId); + await usersActions.deleteTenant(processUserModel.tenantId); }); beforeEach(async () => { @@ -83,7 +85,7 @@ describe('Form widgets - People ', () => { await processDetailsPage.activeTask.click(); const taskId = await taskDetails.getId(); - const taskForm: any = await apiService.getInstance().activiti.taskApi.getTaskForm(taskId); + const taskForm: any = await taskFormsApi.getTaskForm(taskId); const userEmail = taskForm['fields'][0].fields['1'][0].value.email; await expect(userEmail).toEqual(processUserModel.email); }); @@ -103,7 +105,7 @@ describe('Form widgets - People ', () => { await processDetailsPage.completedTask.click(); const taskId = await taskDetails.getId(); - const taskForm: any = await apiService.getInstance().activiti.taskApi.getTaskForm(taskId); + const taskForm: any = await taskFormsApi.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/form-widgets-component.e2e.ts b/e2e/process-services/form/form-widgets-component.e2e.ts index 454c1c54f67..33e7ba6340a 100644 --- a/e2e/process-services/form/form-widgets-component.e2e.ts +++ b/e2e/process-services/form/form-widgets-component.e2e.ts @@ -28,6 +28,7 @@ import { NavigationBarPage } from '../../core/pages/navigation-bar.page'; import { browser } from 'protractor'; import CONSTANTS = require('../../util/constants'); import FormDefinitionModel = require('../../models/APS/FormDefinitionModel'); +import { TaskFormsApi } from '@alfresco/js-api'; const formInstance = new FormDefinitionModel(); @@ -40,6 +41,8 @@ describe('Form widgets', () => { const apiService = new ApiService(); const usersActions = new UsersActions(apiService); const applicationsService = new ApplicationsUtil(apiService); + const taskFormsApi = new TaskFormsApi(apiService.getInstance()); + const processUtil = new ProcessUtil(apiService); const newTask = 'First task'; let processUserModel; @@ -76,7 +79,7 @@ describe('Form widgets', () => { const response = await taskPage.taskDetails().getId(); - const formDefinition = await apiService.getInstance().activiti.taskFormsApi.getTaskForm(response); + const formDefinition = await taskFormsApi.getTaskForm(response); formInstance.setFields(formDefinition.fields); formInstance.setAllWidgets(formDefinition.fields); }); @@ -85,7 +88,7 @@ describe('Form widgets', () => { await new NavigationBarPage().clickLogoutButton(); await apiService.loginWithProfile('admin'); - await apiService.getInstance().activiti.adminTenantsApi.deleteTenant(processUserModel.tenantId); + await usersActions.deleteTenant(processUserModel.tenantId); await apiService.getInstance().logout(); }); @@ -206,7 +209,6 @@ describe('Form widgets', () => { await apiService.login(processUserModel.username, processUserModel.password); appModel = await applicationsService.importPublishDeployApp(app.file_path); - const processUtil = new ProcessUtil(apiService); process = await processUtil.startProcessOfApp(appModel.name); await loginPage.login(processUserModel.username, processUserModel.password); }); @@ -219,9 +221,9 @@ describe('Form widgets', () => { }); afterAll(async () => { - await apiService.getInstance().activiti.processApi.deleteProcessInstance(process.id); + await processUtil.cancelProcessInstance(process.id); await apiService.loginWithProfile('admin'); - await apiService.getInstance().activiti.adminTenantsApi.deleteTenant(processUserModel.tenantId); + await usersActions.deleteTenant(processUserModel.tenantId); }); it('[C260405] Value fields configured with process variables', async () => { diff --git a/e2e/process-services/form/people-component.e2e.ts b/e2e/process-services/form/people-component.e2e.ts index ffbd2a2d1d1..6af1cc22572 100644 --- a/e2e/process-services/form/people-component.e2e.ts +++ b/e2e/process-services/form/people-component.e2e.ts @@ -15,14 +15,11 @@ * limitations under the License. */ -import { ApiService, LoginPage, UserModel, UsersActions } from '@alfresco/adf-testing'; +import { ApiService, ApplicationsUtil, LoginPage, TaskUtil, UserModel, UsersActions } from '@alfresco/adf-testing'; import { TasksPage } from './../pages/tasks.page'; import { NavigationBarPage } from '../../core/pages/navigation-bar.page'; import { ProcessServicesPage } from './../pages/process-services.page'; import { browser } from 'protractor'; -import * as fs from 'fs'; -import * as path from 'path'; -import { TaskRepresentation } from '@alfresco/js-api'; import CONSTANTS = require('../../util/constants'); describe('People component', () => { @@ -36,6 +33,8 @@ describe('People component', () => { const apiService = new ApiService(); const usersActions = new UsersActions(apiService); + const taskUtil = new TaskUtil(apiService); + const applicationUtil = new ApplicationsUtil(apiService); let processUserModel, assigneeUserModel, secondAssigneeUserModel; const peopleTitle = 'People this task is shared with '; @@ -49,18 +48,15 @@ describe('People component', () => { 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 apiService.login(processUserModel.username, processUserModel.password); - await apiService.getInstance().activiti.appsApi.importAppDefinition(file); + await applicationUtil.importApplication(app.file_path); - 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] })); + await taskUtil.createStandaloneTask(tasks[0]); + await taskUtil.createStandaloneTask(tasks[1]); + await taskUtil.createStandaloneTask(tasks[2]); + await taskUtil.createStandaloneTask(tasks[3]); + await taskUtil.createStandaloneTask(tasks[4]); }); beforeEach(async () => { diff --git a/e2e/process-services/form/stencil.e2e.ts b/e2e/process-services/form/stencil.e2e.ts index 3df3c2d36b1..b587c9e91d6 100644 --- a/e2e/process-services/form/stencil.e2e.ts +++ b/e2e/process-services/form/stencil.e2e.ts @@ -64,7 +64,7 @@ describe('Stencil', () => { afterAll(async () => { await apiService.loginWithProfile('admin'); - await apiService.getInstance().activiti.adminTenantsApi.deleteTenant(user.tenantId); + await usersActions.deleteTenant(user.tenantId); }); beforeEach(async () => { diff --git a/e2e/process-services/process/comment-component-processes.e2e.ts b/e2e/process-services/process/comment-component-processes.e2e.ts index 6c31a8debec..9761a4a8d24 100644 --- a/e2e/process-services/process/comment-component-processes.e2e.ts +++ b/e2e/process-services/process/comment-component-processes.e2e.ts @@ -16,10 +16,18 @@ */ import { browser } from 'protractor'; -import { ApiService, ApplicationsUtil, LoginPage, ProcessUtil, UsersActions } from '@alfresco/adf-testing'; +import { + ApiService, + ApplicationsUtil, + LoginPage, + ModelsActions, + ProcessUtil, + UsersActions +} from '@alfresco/adf-testing'; import { ProcessFiltersPage } from './../pages/process-filters.page'; import { CommentsPage } from '../../core/pages/comments.page'; import { NavigationBarPage } from '../../core/pages/navigation-bar.page'; +import { ActivitiCommentsApi, TasksApi } from '@alfresco/js-api'; describe('Comment component for Processes', () => { @@ -33,6 +41,9 @@ describe('Comment component for Processes', () => { const apiService = new ApiService(); const usersActions = new UsersActions(apiService); const applicationsService = new ApplicationsUtil(apiService); + const modelsActions = new ModelsActions(apiService); + const commentsApi = new ActivitiCommentsApi(apiService.getInstance()); + const taskApi = new TasksApi(apiService.getInstance()); let user, appId, processInstanceId, addedComment; const processName = 'Comment APS'; @@ -54,20 +65,20 @@ describe('Comment component for Processes', () => { }); afterAll(async () => { - await apiService.getInstance().activiti.modelsApi.deleteModel(appId); + await modelsActions.deleteModel(appId); await apiService.loginWithProfile('admin'); - await apiService.getInstance().activiti.adminTenantsApi.deleteTenant(user.tenantId); + await usersActions.deleteTenant(user.tenantId); }); it('[C260464] Should be able to add a comment on APS and check on ADF', async () => { - await apiService.getInstance().activiti.commentsApi.addProcessInstanceComment({ message: 'HELLO' }, processInstanceId); + await commentsApi.addProcessInstanceComment({ message: 'HELLO' }, processInstanceId); await (await (await navigationBarPage.navigateToProcessServicesPage()).goToTaskApp()).clickProcessButton(); await processFiltersPage.clickRunningFilterButton(); await processFiltersPage.selectFromProcessList(processName); - addedComment = await apiService.getInstance().activiti.commentsApi.getProcessInstanceComments(processInstanceId, { 'latestFirst': true }); + addedComment = await commentsApi.getProcessInstanceComments(processInstanceId, { 'latestFirst': true }); await commentsPage.checkUserIconIsDisplayed(); @@ -78,34 +89,34 @@ describe('Comment component for Processes', () => { }); it('[C260465] Should not be able to view process comment on included task', async () => { - await apiService.getInstance().activiti.commentsApi.addProcessInstanceComment({ message: 'GOODBYE' }, processInstanceId); + await commentsApi.addProcessInstanceComment({ message: 'GOODBYE' }, processInstanceId); await (await (await navigationBarPage.navigateToProcessServicesPage()).goToTaskApp()).clickProcessButton(); await processFiltersPage.clickRunningFilterButton(); await processFiltersPage.selectFromProcessList(processName); - const taskQuery = await apiService.getInstance().activiti.taskApi.listTasks({ processInstanceId: processInstanceId }); + const taskQuery = await taskApi.listTasks({ processInstanceId: processInstanceId }); const taskId = taskQuery.data[0].id; - const taskComments = await apiService.getInstance().activiti.commentsApi.getTaskComments(taskId, { 'latestFirst': true }); + const taskComments = await commentsApi.getTaskComments(taskId, { 'latestFirst': true }); await expect(taskComments.total).toEqual(0); }); it('[C260466] Should be able to display comments from Task on the related Process', async () => { - const taskQuery = await apiService.getInstance().activiti.taskApi.listTasks({ processInstanceId: processInstanceId }); + const taskQuery = await taskApi.listTasks({ processInstanceId: processInstanceId }); const taskId = taskQuery.data[0].id; - await apiService.getInstance().activiti.taskApi.addTaskComment({ message: 'Task Comment' }, taskId); + await commentsApi.addTaskComment({ message: 'Task Comment' }, taskId); await (await (await navigationBarPage.navigateToProcessServicesPage()).goToTaskApp()).clickProcessButton(); await processFiltersPage.clickRunningFilterButton(); await processFiltersPage.selectFromProcessList(processName); - const addedTaskComment = await apiService.getInstance().activiti.commentsApi.getProcessInstanceComments(processInstanceId, { 'latestFirst': true }); + const addedTaskComment = await commentsApi.getProcessInstanceComments(processInstanceId, { 'latestFirst': true }); await commentsPage.checkUserIconIsDisplayed(); diff --git a/e2e/process-services/process/custom-process-filters-sorting.e2e.ts b/e2e/process-services/process/custom-process-filters-sorting.e2e.ts index bacef09c6dd..9d9b69e7ea6 100644 --- a/e2e/process-services/process/custom-process-filters-sorting.e2e.ts +++ b/e2e/process-services/process/custom-process-filters-sorting.e2e.ts @@ -17,10 +17,18 @@ import { browser } from 'protractor'; -import { ApiService, ApplicationsUtil, LoginPage, ProcessUtil, UsersActions } from '@alfresco/adf-testing'; +import { + ApiService, + ApplicationsUtil, + LoginPage, + ModelsActions, + ProcessUtil, + UsersActions +} from '@alfresco/adf-testing'; import { NavigationBarPage } from '../../core/pages/navigation-bar.page'; import { ProcessFiltersPage } from './../pages/process-filters.page'; import { FiltersPage } from './../pages/filters.page'; +import { ProcessInstancesApi, UserFiltersApi } from '@alfresco/js-api'; describe('Sorting for process filters', () => { @@ -33,6 +41,9 @@ describe('Sorting for process filters', () => { const apiService = new ApiService(); const usersActions = new UsersActions(apiService); + const modelsActions = new ModelsActions(apiService); + const userFiltersApi = new UserFiltersApi(apiService.getInstance()); + const processInstancesApi = new ProcessInstancesApi(apiService.getInstance()); let tenantId, appId, user, processesQuery; let importedApp; @@ -66,9 +77,9 @@ describe('Sorting for process filters', () => { afterEach(async () => { try { - await apiService.getInstance().activiti.modelsApi.deleteModel(appId); + await modelsActions.deleteModel(appId); await apiService.loginWithProfile('admin'); - await apiService.getInstance().activiti.adminTenantsApi.deleteTenant(tenantId); + await usersActions.deleteTenant(tenantId); } catch (e) { } @@ -76,7 +87,7 @@ describe('Sorting for process filters', () => { }); it('[C260476] Should be able to create a filter on APS for running processes - Oldest first and check on ADF', async () => { - await apiService.getInstance().activiti.userFiltersApi.createUserProcessInstanceFilter({ + await userFiltersApi.createUserProcessInstanceFilter({ 'appId': null, 'name': processFilter.running_old_first, 'icon': 'glyphicon-random', 'filter': { 'sort': 'created-asc', 'name': '', 'state': 'running' } }); @@ -89,7 +100,7 @@ describe('Sorting for process filters', () => { await processFiltersPage.checkFilterIsDisplayed(processFilter.running_old_first); await filtersPage.goToFilter(processFilter.running_old_first); - processesQuery = await apiService.getInstance().activiti.processApi.getProcessInstances({ + processesQuery = await processInstancesApi.getProcessInstances({ 'processDefinitionId': null, 'appDefinitionId': null, 'state': 'running', 'sort': 'created-asc' }); await expect(processesQuery.data[0].name).toEqual(firstProc.name); @@ -98,7 +109,7 @@ 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 apiService.getInstance().activiti.userFiltersApi.createUserProcessInstanceFilter({ + await userFiltersApi.createUserProcessInstanceFilter({ 'appId': null, 'name': processFilter.completed_old_first, 'icon': 'glyphicon-random', 'filter': { 'sort': 'created-asc', 'name': '', 'state': 'completed' } }); @@ -108,9 +119,9 @@ describe('Sorting for process filters', () => { const secondProc = await processUtil.startProcessOfApp(importedApp.name); const thirdProc = await processUtil.startProcessOfApp(importedApp.name); - 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 processUtil.cancelProcessInstance(firstProc.id); + await processUtil.cancelProcessInstance(secondProc.id); + await processUtil.cancelProcessInstance(thirdProc.id); await (await (await navigationBarPage.navigateToProcessServicesPage()).goToTaskApp()).clickProcessButton(); @@ -118,7 +129,7 @@ describe('Sorting for process filters', () => { await filtersPage.goToFilter(processFilter.completed_old_first); - processesQuery = await apiService.getInstance().activiti.processApi.getProcessInstances({ + processesQuery = await processInstancesApi.getProcessInstances({ 'processDefinitionId': null, 'appDefinitionId': null, 'state': 'completed', 'sort': 'created-asc' }); await expect(processesQuery.data[0].name).toEqual(firstProc.name); @@ -127,7 +138,7 @@ 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 apiService.getInstance().activiti.userFiltersApi.createUserProcessInstanceFilter({ + await userFiltersApi.createUserProcessInstanceFilter({ 'appId': null, 'name': processFilter.all_old_first, 'icon': 'glyphicon-random', 'filter': { 'sort': 'created-asc', 'name': '', 'state': 'all' } }); @@ -141,9 +152,9 @@ describe('Sorting for process filters', () => { const deleteSecondProc = await processUtil.startProcessOfApp(importedApp.name); const deleteThirdProc = await processUtil.startProcessOfApp(importedApp.name); - 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 processUtil.cancelProcessInstance(deleteFirstProc.id); + await processUtil.cancelProcessInstance(deleteSecondProc.id); + await processUtil.cancelProcessInstance(deleteThirdProc.id); await (await (await navigationBarPage.navigateToProcessServicesPage()).goToTaskApp()).clickProcessButton(); @@ -151,7 +162,7 @@ describe('Sorting for process filters', () => { await filtersPage.goToFilter(processFilter.all_old_first); - processesQuery = await apiService.getInstance().activiti.processApi.getProcessInstances({ + processesQuery = await processInstancesApi.getProcessInstances({ 'processDefinitionId': null, 'appDefinitionId': null, 'state': 'all', 'sort': 'created-asc' }); await expect(processesQuery.data[0].name).toEqual(firstProc.name); @@ -163,7 +174,7 @@ 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 apiService.getInstance().activiti.userFiltersApi.createUserProcessInstanceFilter({ + await userFiltersApi.createUserProcessInstanceFilter({ 'appId': null, 'name': processFilter.running_new_first, 'icon': 'glyphicon-random', 'filter': { 'sort': 'created-desc', 'name': '', 'state': 'running' } }); @@ -179,7 +190,7 @@ describe('Sorting for process filters', () => { await filtersPage.goToFilter(processFilter.running_new_first); - processesQuery = await apiService.getInstance().activiti.processApi.getProcessInstances({ + processesQuery = await processInstancesApi.getProcessInstances({ 'processDefinitionId': null, 'appDefinitionId': null, 'state': 'running', 'sort': 'created-desc' }); await expect(processesQuery.data[0].name).toEqual(thirdProc.name); @@ -188,7 +199,7 @@ 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 apiService.getInstance().activiti.userFiltersApi.createUserProcessInstanceFilter({ + await userFiltersApi.createUserProcessInstanceFilter({ 'appId': null, 'name': processFilter.completed_new_first, 'icon': 'glyphicon-random', 'filter': { 'sort': 'created-desc', 'name': '', 'state': 'completed' } }); @@ -198,16 +209,16 @@ describe('Sorting for process filters', () => { const secondProc = await processUtil.startProcessOfApp(importedApp.name); const thirdProc = await processUtil.startProcessOfApp(importedApp.name); - 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 processUtil.cancelProcessInstance(firstProc.id); + await processUtil.cancelProcessInstance(secondProc.id); + await processUtil.cancelProcessInstance(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 apiService.getInstance().activiti.processApi.getProcessInstances({ + processesQuery = await processInstancesApi.getProcessInstances({ 'processDefinitionId': null, 'appDefinitionId': null, 'state': 'completed', 'sort': 'created-desc' }); await expect(processesQuery.data[0].name).toEqual(thirdProc.name); @@ -216,7 +227,7 @@ 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 apiService.getInstance().activiti.userFiltersApi.createUserProcessInstanceFilter({ + await userFiltersApi.createUserProcessInstanceFilter({ 'appId': null, 'name': processFilter.all_new_first, 'icon': 'glyphicon-random', 'filter': { 'sort': 'created-desc', 'name': '', 'state': 'all' } }); @@ -230,9 +241,9 @@ describe('Sorting for process filters', () => { const deleteSecondProc = await processUtil.startProcessOfApp(importedApp.name); const deleteThirdProc = await processUtil.startProcessOfApp(importedApp.name); - 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 processUtil.cancelProcessInstance(deleteFirstProc.id); + await processUtil.cancelProcessInstance(deleteSecondProc.id); + await processUtil.cancelProcessInstance(deleteThirdProc.id); await (await (await navigationBarPage.navigateToProcessServicesPage()).goToTaskApp()).clickProcessButton(); @@ -240,7 +251,7 @@ describe('Sorting for process filters', () => { await filtersPage.goToFilter(processFilter.all_new_first); - processesQuery = await apiService.getInstance().activiti.processApi.getProcessInstances({ + processesQuery = await processInstancesApi.getProcessInstances({ 'processDefinitionId': null, 'appDefinitionId': null, 'state': 'all', 'sort': 'created-desc' }); await expect(processesQuery.data[0].name).toEqual(deleteThirdProc.name); @@ -252,7 +263,7 @@ 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 apiService.getInstance().activiti.userFiltersApi.createUserProcessInstanceFilter({ + await userFiltersApi.createUserProcessInstanceFilter({ 'appId': null, 'name': processFilter.completed_most_recently, 'icon': 'glyphicon-random', 'filter': { 'sort': 'ended-asc', 'name': '', 'state': 'completed' } }); @@ -262,9 +273,9 @@ describe('Sorting for process filters', () => { const secondProc = await processUtil.startProcessOfApp(importedApp.name); const thirdProc = await processUtil.startProcessOfApp(importedApp.name); - 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 processUtil.cancelProcessInstance(secondProc.id); + await processUtil.cancelProcessInstance(firstProc.id); + await processUtil.cancelProcessInstance(thirdProc.id); await (await (await navigationBarPage.navigateToProcessServicesPage()).goToTaskApp()).clickProcessButton(); @@ -272,7 +283,7 @@ describe('Sorting for process filters', () => { await filtersPage.goToFilter(processFilter.completed_most_recently); - processesQuery = await apiService.getInstance().activiti.processApi.getProcessInstances({ + processesQuery = await processInstancesApi.getProcessInstances({ 'processDefinitionId': null, 'appDefinitionId': null, 'state': 'completed', 'sort': 'ended-asc' }); await expect(processesQuery.data[0].name).toEqual(secondProc.name); @@ -281,7 +292,7 @@ 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 apiService.getInstance().activiti.userFiltersApi.createUserProcessInstanceFilter({ + await userFiltersApi.createUserProcessInstanceFilter({ 'appId': null, 'name': processFilter.completed_least_recently, 'icon': 'glyphicon-random', 'filter': { 'sort': 'ended-desc', 'name': '', 'state': 'completed' } }); @@ -291,9 +302,9 @@ describe('Sorting for process filters', () => { const secondProc = await processUtil.startProcessOfApp(importedApp.name); const thirdProc = await processUtil.startProcessOfApp(importedApp.name); - 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 processUtil.cancelProcessInstance(secondProc.id); + await processUtil.cancelProcessInstance(firstProc.id); + await processUtil.cancelProcessInstance(thirdProc.id); await (await (await navigationBarPage.navigateToProcessServicesPage()).goToTaskApp()).clickProcessButton(); @@ -301,7 +312,7 @@ describe('Sorting for process filters', () => { await filtersPage.goToFilter(processFilter.completed_least_recently); - processesQuery = await apiService.getInstance().activiti.processApi.getProcessInstances({ + processesQuery = await processInstancesApi.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/process/custom-process-filters.e2e.ts b/e2e/process-services/process/custom-process-filters.e2e.ts index e614d5b383d..4c1fe18fa71 100644 --- a/e2e/process-services/process/custom-process-filters.e2e.ts +++ b/e2e/process-services/process/custom-process-filters.e2e.ts @@ -20,6 +20,7 @@ import { ProcessFiltersPage } from './../pages/process-filters.page'; import { ProcessServiceTabBarPage } from './../pages/process-service-tab-bar.page'; import { AppSettingsTogglesPage } from './../pages/dialog/app-settings-toggles.page'; import { NavigationBarPage } from '../../core/pages/navigation-bar.page'; +import { UserFiltersApi } from '@alfresco/js-api'; describe('New Process Filters', () => { @@ -31,6 +32,7 @@ describe('New Process Filters', () => { const apiService = new ApiService(); const usersActions = new UsersActions(apiService); + const userFiltersApi = new UserFiltersApi(apiService.getInstance()); let tenantId, user, filterId, customProcessFilter; @@ -59,7 +61,7 @@ describe('New Process Filters', () => { afterAll(async () => { await apiService.loginWithProfile('admin'); - await apiService.getInstance().activiti.adminTenantsApi.deleteTenant(tenantId); + await usersActions.deleteTenant(tenantId); }); it('[C279965] Should be able to view default filters on ADF', async () => { @@ -71,7 +73,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 apiService.getInstance().activiti.userFiltersApi.createUserProcessInstanceFilter({ + customProcessFilter = await userFiltersApi.createUserProcessInstanceFilter({ 'appId': null, 'name': processFilter.new_filter, 'icon': 'glyphicon-random', @@ -86,7 +88,7 @@ describe('New Process Filters', () => { }); it('[C286450] Should display the process filter icon when a custom filter is added', async () => { - customProcessFilter = await apiService.getInstance().activiti.userFiltersApi.createUserProcessInstanceFilter({ + customProcessFilter = await userFiltersApi.createUserProcessInstanceFilter({ 'appId': null, 'name': processFilter.new_icon, 'icon': 'glyphicon-cloud', @@ -108,7 +110,7 @@ describe('New Process Filters', () => { }); it('[C260474] Should be able to edit a filter on APS and check it on ADF', async () => { - await apiService.getInstance().activiti.userFiltersApi.updateUserProcessInstanceFilter(filterId, { + await userFiltersApi.updateUserProcessInstanceFilter(filterId, { 'appId': null, 'name': processFilter.edited, 'icon': 'glyphicon-random', @@ -121,7 +123,7 @@ describe('New Process Filters', () => { }); it('[C286451] Should display changes on a process filter when this filter icon is edited', async () => { - customProcessFilter = await apiService.getInstance().activiti.userFiltersApi.createUserProcessInstanceFilter({ + customProcessFilter = await userFiltersApi.createUserProcessInstanceFilter({ 'appId': null, 'name': processFilter.edit_icon, 'icon': 'glyphicon-random', @@ -134,7 +136,7 @@ describe('New Process Filters', () => { await processFiltersPage.checkFilterIsDisplayed(processFilter.edit_icon); - await apiService.getInstance().activiti.userFiltersApi.updateUserProcessInstanceFilter(filterId, { + await userFiltersApi.updateUserProcessInstanceFilter(filterId, { 'appId': null, 'name': processFilter.edit_icon, 'icon': 'glyphicon-cloud', @@ -166,7 +168,7 @@ describe('New Process Filters', () => { }); it('[C260475] Should be able to delete a filter on APS and check it on ADF', async () => { - customProcessFilter = await apiService.getInstance().activiti.userFiltersApi.createUserProcessInstanceFilter({ + customProcessFilter = await userFiltersApi.createUserProcessInstanceFilter({ 'appId': null, 'name': processFilter.deleted, 'icon': 'glyphicon-random', @@ -175,7 +177,7 @@ describe('New Process Filters', () => { filterId = customProcessFilter.id; - await apiService.getInstance().activiti.userFiltersApi.deleteUserProcessInstanceFilter(filterId); + await userFiltersApi.deleteUserProcessInstanceFilter(filterId); await (await (await navigationBarPage.navigateToProcessServicesPage()).goToTaskApp()).clickProcessButton(); diff --git a/e2e/process-services/process/process-attachment-list-action-menu.e2e.ts b/e2e/process-services/process/process-attachment-list-action-menu.e2e.ts index 492e820f290..06aa89eb4bf 100644 --- a/e2e/process-services/process/process-attachment-list-action-menu.e2e.ts +++ b/e2e/process-services/process/process-attachment-list-action-menu.e2e.ts @@ -22,7 +22,8 @@ import { LoginPage, ProcessUtil, UsersActions, - ViewerPage + ViewerPage, + ModelsActions } from '@alfresco/adf-testing'; import { ProcessFiltersPage } from './../pages/process-filters.page'; import { ProcessDetailsPage } from './../pages/process-details.page'; @@ -45,6 +46,7 @@ describe('Attachment list action menu for processes', () => { const apiService = new ApiService(); const usersActions = new UsersActions(apiService); const applicationsService = new ApplicationsUtil(apiService); + const modelsActions = new ModelsActions(apiService); const pngFile = new FileModel({ location: browser.params.resources.Files.ADF_DOCUMENTS.PNG.file_location, @@ -85,9 +87,9 @@ describe('Attachment list action menu for processes', () => { }); afterAll(async () => { - await apiService.getInstance().activiti.modelsApi.deleteModel(appId); + await modelsActions.deleteModel(appId); await apiService.loginWithProfile('admin'); - await apiService.getInstance().activiti.adminTenantsApi.deleteTenant(tenantId); + await usersActions.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/process-filters-component.e2e.ts b/e2e/process-services/process/process-filters-component.e2e.ts index 18d12ccac1a..3ebaa1569d3 100644 --- a/e2e/process-services/process/process-filters-component.e2e.ts +++ b/e2e/process-services/process/process-filters-component.e2e.ts @@ -29,7 +29,7 @@ import { ProcessFiltersPage } from './../pages/process-filters.page'; import { ProcessServiceTabBarPage } from './../pages/process-service-tab-bar.page'; import { ProcessDetailsPage } from './../pages/process-details.page'; import { ProcessListPage } from './../pages/process-list.page'; -import { UserProcessInstanceFilterRepresentation } from '@alfresco/js-api'; +import { RuntimeAppDefinitionsApi, UserFiltersApi, UserProcessInstanceFilterRepresentation } from '@alfresco/js-api'; import { browser } from 'protractor'; import { ProcessListDemoPage } from './../pages/process-list-demo.page'; import CONSTANTS = require('../../util/constants'); @@ -51,6 +51,8 @@ describe('Process Filters Test', () => { const apiService = new ApiService(); const usersActions = new UsersActions(apiService); const applicationsService = new ApplicationsUtil(apiService); + const userFiltersApi = new UserFiltersApi(apiService.getInstance()); + const appsApi = new RuntimeAppDefinitionsApi(apiService.getInstance()); let appModel, user; @@ -137,15 +139,12 @@ describe('Process Filters Test', () => { it('[C280407] Should be able to access the filters with URL', async () => { const defaultFiltersNumber = 3; - let deployedApp, processFilterUrl; + let processFilterUrl; - const appDefinitions = await apiService.getInstance().activiti.appsApi.getAppDefinitions(); - deployedApp = appDefinitions.data.find((currentApp) => { - return currentApp.modelId === appModel.id; - }); + const deployedAppId = await applicationsService.getAppDefinitionId(appModel.id); - processFilterUrl = browser.baseUrl + '/activiti/apps/' + deployedApp.id + '/processes/'; - const taskAppFilters = await apiService.getInstance().activiti.userFiltersApi.getUserProcessInstanceFilters({ appId: deployedApp.id }); + processFilterUrl = browser.baseUrl + '/activiti/apps/' + deployedAppId + '/processes/'; + const taskAppFilters = await userFiltersApi.getUserProcessInstanceFilters({ appId: deployedAppId }); await processServicesPage.goToApp(app.title); await processServiceTabBarPage.clickProcessButton(); @@ -194,7 +193,7 @@ describe('Process Filters Test', () => { await processListDemoPage.checkProcessIsDisplayed(processTitle.one); await processFiltersPage.checkFilterIsHighlighted(processFilter.running); await processDetailsPage.propertiesList.waitVisible(); - await checkProcessInfoDrawer({ name: processTitle.one }); + await checkProcessInfoDrawer({ name: processTitle.one }); await processFiltersPage.clickCreateProcessButton(); await processFiltersPage.clickNewProcessDropdown(); @@ -220,8 +219,8 @@ describe('Process Filters Test', () => { }); it('[C260384] Edit default filter', async () => { - const runningFilter = (await getFilter()).find(filter => filter.name === 'Running'); - await apiService.getInstance().activiti.userFiltersApi + const runningFilter = (await getFilter()).find(filter => filter.name === 'Running'); + await userFiltersApi .updateUserProcessInstanceFilter(runningFilter.id, { ...runningFilter, name: 'Edited Running' }); await processServicesPage.goToApp(app.title); @@ -231,8 +230,8 @@ describe('Process Filters Test', () => { }); it('[C260385] Delete default filter', async () => { - const allFilter = (await getFilter()).find(filter => filter.name === 'All'); - await apiService.getInstance().activiti.userFiltersApi.deleteUserProcessInstanceFilter(allFilter.id); + const allFilter = (await getFilter()).find(filter => filter.name === 'All'); + await userFiltersApi.deleteUserProcessInstanceFilter(allFilter.id); await processServicesPage.goToApp(app.title); await processServiceTabBarPage.clickProcessButton(); @@ -240,9 +239,10 @@ describe('Process Filters Test', () => { }); async function getFilter(): Promise { - const apps = await apiService.getInstance().activiti.appsApi.getAppDefinitions(); + const apps = await appsApi.getAppDefinitions(); const { id: appId = 0 } = apps.data.find((application) => application.name === appModel.name); - const filters = await apiService.getInstance().activiti.userFiltersApi.getUserProcessInstanceFilters({ appId }); + + const filters = await userFiltersApi.getUserProcessInstanceFilters({ appId }); return filters.data; } diff --git a/e2e/process-services/process/process-instance-details.e2e.ts b/e2e/process-services/process/process-instance-details.e2e.ts index a462b23ff0f..8e9751891b8 100644 --- a/e2e/process-services/process/process-instance-details.e2e.ts +++ b/e2e/process-services/process/process-instance-details.e2e.ts @@ -16,13 +16,21 @@ */ import { browser } from 'protractor'; -import { ApiService, ApplicationsUtil, LoginPage, ProcessUtil, UsersActions } from '@alfresco/adf-testing'; +import { + ApiService, + ApplicationsUtil, + LoginPage, + ModelsActions, + ProcessUtil, + UsersActions +} from '@alfresco/adf-testing'; import { ProcessServicesPage } from './../pages/process-services.page'; import { NavigationBarPage } from '../../core/pages/navigation-bar.page'; import { ProcessServiceTabBarPage } from './../pages/process-service-tab-bar.page'; import { ProcessListPage } from './../pages/process-list.page'; import { ProcessDetailsPage } from './../pages/process-details.page'; import moment = require('moment'); +import { ProcessInstancesApi } from '@alfresco/js-api'; describe('Process Instance Details', () => { @@ -38,6 +46,8 @@ describe('Process Instance Details', () => { const apiService = new ApiService(); const usersActions = new UsersActions(apiService); const applicationsService = new ApplicationsUtil(apiService); + const modelsActions = new ModelsActions(apiService); + const processApi = new ProcessInstancesApi(apiService.getInstance()); let appModel, process, user; const PROCESS_DATE_FORMAT = 'll'; @@ -60,13 +70,13 @@ describe('Process Instance Details', () => { await processServiceTabBarPage.clickProcessButton(); await expect(await processListPage.isProcessListDisplayed()).toEqual(true); - process = await apiService.getInstance().activiti.processApi.getProcessInstance(processModel.id); + process = await processApi.getProcessInstance(processModel.id); }); afterAll(async () => { - await apiService.getInstance().activiti.modelsApi.deleteModel(appModel.id); + await modelsActions.deleteModel(appModel.id); await apiService.loginWithProfile('admin'); - await apiService.getInstance().activiti.adminTenantsApi.deleteTenant(user.tenantId); + await usersActions.deleteTenant(user.tenantId); }); it('[C307031] Should display the created date in the default format', async () => { diff --git a/e2e/process-services/process/process-list-component.e2e.ts b/e2e/process-services/process/process-list-component.e2e.ts index ea2572ec305..11d29e15e6c 100644 --- a/e2e/process-services/process/process-list-component.e2e.ts +++ b/e2e/process-services/process/process-list-component.e2e.ts @@ -19,12 +19,13 @@ import { ApiService, ApplicationsUtil, BrowserActions, - LoginPage, + LoginPage, ModelsActions, ProcessUtil, UsersActions } from '@alfresco/adf-testing'; import { ProcessListDemoPage } from './../pages/process-list-demo.page'; import { browser } from 'protractor'; +import { TaskFormsApi } from '@alfresco/js-api'; describe('Process List Test', () => { @@ -37,6 +38,8 @@ describe('Process List Test', () => { const apiService = new ApiService(); const applicationsUtil = new ApplicationsUtil(apiService); const usersActions = new UsersActions(apiService); + const modelsActions = new ModelsActions(apiService); + const taskFormsApi = new TaskFormsApi(apiService.getInstance()); let appDateModel, appUserWidgetModel, user; @@ -81,19 +84,19 @@ describe('Process List Test', () => { const procWithUserWidgetTaskId = await processUtil.getProcessTaskId(completedProcWithUserWidget.id); - await apiService.getInstance().activiti.taskApi.completeTaskForm(procWithDateTaskId.id, { values: { label: null } }); - await apiService.getInstance().activiti.taskFormsApi.completeTaskForm(procWithUserWidgetTaskId.id, { values: { label: null } }); + await taskFormsApi.completeTaskForm(procWithDateTaskId.id, { values: { label: null } }); + await taskFormsApi.completeTaskForm(procWithUserWidgetTaskId.id, { values: { label: null } }); await loginPage.login(user.username, user.password); }); afterAll(async () => { - await apiService.getInstance().activiti.modelsApi.deleteModel(appDateModel.id); - await apiService.getInstance().activiti.modelsApi.deleteModel(appUserWidgetModel.id); + await modelsActions.deleteModel(appDateModel.id); + await modelsActions.deleteModel(appUserWidgetModel.id); await apiService.loginWithProfile('admin'); - await apiService.getInstance().activiti.adminTenantsApi.deleteTenant(user.tenantId); + await usersActions.deleteTenant(user.tenantId); }); beforeEach(async () => { diff --git a/e2e/process-services/process/start-process-component.e2e.ts b/e2e/process-services/process/start-process-component.e2e.ts index 54f5d907105..21bb0f0fdd8 100644 --- a/e2e/process-services/process/start-process-component.e2e.ts +++ b/e2e/process-services/process/start-process-component.e2e.ts @@ -21,7 +21,7 @@ import { ApplicationsUtil, BrowserActions, FileBrowserUtil, LocalStorageUtil, - LoginPage, + LoginPage, ModelsActions, ProcessInstanceTasksPage, SelectAppsDialog, StartProcessPage, @@ -40,6 +40,7 @@ import { ProcessServicesPage } from './../pages/process-services.page'; import { ProcessServiceTabBarPage } from './../pages/process-service-tab-bar.page'; import { ContentServicesPage } from '../../core/pages/content-services.page'; import { UploadDialogPage } from '../../core/pages/dialog/upload-dialog.page'; +import { ProcessInstancesApi } from '@alfresco/js-api'; describe('Start Process Component', () => { @@ -63,6 +64,9 @@ describe('Start Process Component', () => { const apiService = new ApiService(); const apiServiceUserTwo = new ApiService(); + const modelsActions = new ModelsActions(apiService); + const usersActions = new UsersActions(apiService); + const processApi = new ProcessInstancesApi(apiService.getInstance()); let procUserModel: UserModel; let secondProcUserModel: UserModel; @@ -85,7 +89,6 @@ describe('Start Process Component', () => { beforeAll(async () => { await apiService.loginWithProfile('admin'); - const usersActions = new UsersActions(apiService); procUserModel = await usersActions.createUser(); secondProcUserModel = await usersActions.createUser(new UserModel({ tenantId: procUserModel.tenantId })); @@ -99,10 +102,10 @@ describe('Start Process Component', () => { afterAll(async () => { await apiService.loginWithProfile('admin'); - 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); + await modelsActions.deleteModel(appCreated.id); + await modelsActions.deleteModel(simpleAppCreated.id); + await modelsActions.deleteModel(dateFormAppCreated.id); + await usersActions.deleteTenant(procUserModel.tenantId); }); describe(' Once logged with user without apps', () => { @@ -205,7 +208,7 @@ describe('Start Process Component', () => { await processDetailsPage.checkProcessHeaderDetailsAreVisible(); const processId = await processDetailsPage.getId(); - const response = await apiService.getInstance().activiti.processApi.getProcessInstance(processId); + const response = await processApi.getProcessInstance(processId); await expect(await processDetailsPage.getProcessStatus()).toEqual(CONSTANTS.PROCESS_STATUS.RUNNING); await expect(await processDetailsPage.getEndDate()).toEqual(CONSTANTS.PROCESS_END_DATE); @@ -485,11 +488,11 @@ describe('Start Process Component', () => { hostBpm: browser.params.testConfig.appConfig.bpmHost }); - const usersActions = new UsersActions(apiServiceAll); + const usersActionsAll = new UsersActions(apiServiceAll); await apiServiceAll.login(browser.params.testConfig.users.admin.username, browser.params.testConfig.users.admin.password); - processUserModel = await usersActions.createUser(); + processUserModel = await usersActionsAll.createUser(); const alfrescoJsBPMAdminUser = new ApiService({ hostBpm: browser.params.testConfig.appConfig.bpmHost }); diff --git a/e2e/process-services/tasks/comment-component-tasks.e2e.ts b/e2e/process-services/tasks/comment-component-tasks.e2e.ts index 5426d520ee7..588f983b196 100644 --- a/e2e/process-services/tasks/comment-component-tasks.e2e.ts +++ b/e2e/process-services/tasks/comment-component-tasks.e2e.ts @@ -17,12 +17,19 @@ import { browser } from 'protractor'; -import { ApiService, ApplicationsUtil, LoginPage, UserModel, UsersActions } from '@alfresco/adf-testing'; +import { + ApiService, + ApplicationsUtil, + LoginPage, + ModelsActions, + TaskUtil, + UserModel, + UsersActions +} from '@alfresco/adf-testing'; import { TasksPage } from './../pages/tasks.page'; import { CommentsPage } from '../../core/pages/comments.page'; import { NavigationBarPage } from '../../core/pages/navigation-bar.page'; - -import { TaskRepresentation } from '@alfresco/js-api'; +import { ActivitiCommentsApi, TaskActionsApi } from '@alfresco/js-api'; import CONSTANTS = require('../../util/constants'); describe('Comment component for Processes', () => { @@ -36,6 +43,10 @@ describe('Comment component for Processes', () => { const apiService = new ApiService(); const usersActions = new UsersActions(apiService); + const taskUtil = new TaskUtil(apiService); + const modelsActions = new ModelsActions(apiService); + const activitiCommentsApi = new ActivitiCommentsApi(apiService.getInstance()); + const taskActionsApi = new TaskActionsApi(apiService.getInstance()); let user, appId, secondUser; @@ -59,17 +70,17 @@ describe('Comment component for Processes', () => { }); afterAll(async () => { - await apiService.getInstance().activiti.modelsApi.deleteModel(appId); + await modelsActions.deleteModel(appId); await apiService.loginWithProfile('admin'); - await apiService.getInstance().activiti.adminTenantsApi.deleteTenant(user.tenantId); + await usersActions.deleteTenant(user.tenantId); }); it('[C260237] Should not be able to add a comment on a completed task', async () => { - const newTask = await apiService.getInstance().activiti.taskApi.createNewTask(new TaskRepresentation({ name: taskName.completed_task })); + const newTask = await taskUtil.createStandaloneTask(taskName.completed_task); const taskId = newTask.id; - await apiService.getInstance().activiti.taskActionsApi.completeTask(taskId); + await taskActionsApi.completeTask(taskId); await (await (await navigationBarPage.navigateToProcessServicesPage()).goToTaskApp()).clickTasksButton(); @@ -80,15 +91,15 @@ 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 apiService.getInstance().activiti.taskApi.createNewTask(new TaskRepresentation({ name: taskName.multiple_users })); + const newTask = await taskUtil.createStandaloneTask(taskName.multiple_users); - await apiService.getInstance().activiti.taskApi.involveUser(newTask.id, { email: secondUser.email }); + await taskActionsApi.involveUser(newTask.id, { email: secondUser.email }); const taskComment = { message: 'Task Comment' }; const secondTaskComment = { message: 'Second Task Comment' }; - await apiService.getInstance().activiti.taskApi.addTaskComment(taskComment, newTask.id); - await apiService.getInstance().activiti.taskApi.addTaskComment(secondTaskComment, newTask.id); + await activitiCommentsApi.addTaskComment(taskComment, newTask.id); + await activitiCommentsApi.addTaskComment(secondTaskComment, newTask.id); await (await (await navigationBarPage.navigateToProcessServicesPage()).goToTaskApp()).clickTasksButton(); @@ -96,7 +107,7 @@ describe('Comment component for Processes', () => { await taskPage.tasksListPage().selectRow(taskName.multiple_users); await taskPage.taskDetails().selectActivityTab(); - const totalCommentsLatest = await apiService.getInstance().activiti.taskApi.getTaskComments(newTask.id, { 'latestFirst': true }); + const totalCommentsLatest = await activitiCommentsApi.getTaskComments(newTask.id, { 'latestFirst': true }); const thirdTaskComment = { message: 'Third Task Comment' }; @@ -117,7 +128,7 @@ describe('Comment component for Processes', () => { await navigationBarPage.clickLogoutButton(); await loginPage.login(secondUser.username, secondUser.password); - await apiService.getInstance().activiti.taskApi.addTaskComment(thirdTaskComment, newTask.id); + await activitiCommentsApi.addTaskComment(thirdTaskComment, newTask.id); await (await (await navigationBarPage.navigateToProcessServicesPage()).goToTaskApp()).clickTasksButton(); @@ -125,7 +136,7 @@ describe('Comment component for Processes', () => { await taskPage.tasksListPage().selectRow(taskName.multiple_users); await taskPage.taskDetails().selectActivityTab(); - const totalComments = await apiService.getInstance().activiti.taskApi.getTaskComments(newTask.id, { 'latestFirst': true }); + const totalComments = await activitiCommentsApi.getTaskComments(newTask.id, { 'latestFirst': true }); await commentsPage.checkUserIconIsDisplayed(); await commentsPage.checkUserIconIsDisplayed(); diff --git a/e2e/process-services/tasks/custom-tasks-filters.e2e.ts b/e2e/process-services/tasks/custom-tasks-filters.e2e.ts index 220331a4d31..1a3ef0f84a1 100644 --- a/e2e/process-services/tasks/custom-tasks-filters.e2e.ts +++ b/e2e/process-services/tasks/custom-tasks-filters.e2e.ts @@ -22,14 +22,13 @@ import { DateUtil, LoginPage, PaginationPage, - ProcessUtil, + ProcessUtil, TaskUtil, UsersActions } from '@alfresco/adf-testing'; import { browser } from 'protractor'; -import { AppsRuntimeActions } from '../../actions/APS/apps-runtime.actions'; import { TaskListDemoPage } from './../pages/task-list-demo.page'; import { NavigationBarPage } from '../../core/pages/navigation-bar.page'; -import { TaskRepresentation } from '@alfresco/js-api'; +import { TaskActionsApi, TaskRepresentation, TasksApi } from '@alfresco/js-api'; import moment = require('moment'); describe('Start Task - Custom App', () => { @@ -43,10 +42,13 @@ describe('Start Task - Custom App', () => { const paginationPage = new PaginationPage(); const apiService = new ApiService(); - const appsRuntime = new AppsRuntimeActions(apiService); + const appsRuntime = new ApplicationsUtil(apiService); const usersActions = new UsersActions(apiService); const applicationsService = new ApplicationsUtil(apiService); const processUtil = new ProcessUtil(apiService); + const taskUtil = new TaskUtil(apiService); + const taskActionsApi = new TaskActionsApi(apiService.getInstance()); + const tasksApi = new TasksApi(apiService.getInstance()); let processUserModel; let appRuntime, secondAppRuntime; @@ -89,11 +91,11 @@ describe('Start Task - Custom App', () => { appModel = await applicationsService.importPublishDeployApp(app.file_path); - appRuntime = await appsRuntime.getRuntimeAppByName(app.title); + appRuntime = await appsRuntime.getAppDefinitionByName(app.title); await applicationsService.importPublishDeployApp(secondApp.file_path); - secondAppRuntime = await appsRuntime.getRuntimeAppByName(secondApp.title); + secondAppRuntime = await appsRuntime.getAppDefinitionByName(secondApp.title); processDefinitionId = await processUtil.startProcessOfApp(appModel.name); await processUtil.startProcessOfApp(appModel.name); @@ -101,18 +103,18 @@ describe('Start Task - Custom App', () => { await processUtil.startProcessOfApp(appModel.name); for (let i = 1; i < paginationTasksName.length; i++) { - await apiService.getInstance().activiti.taskApi.createNewTask(new TaskRepresentation({ 'name': paginationTasksName[i] })); + await taskUtil.createStandaloneTask(paginationTasksName[i]); } for (let i = 0; i < 3; i++) { - completedTasks[i] = await apiService.getInstance().activiti.taskApi.createNewTask(new TaskRepresentation({ + completedTasks[i] = await tasksApi.createNewTask(new TaskRepresentation({ 'name': completedTasksName[i], 'dueDate': DateUtil.formatDate('YYYY-MM-DDTHH:mm:ss.SSSZ', new Date(), i + 2) })); - await apiService.getInstance().activiti.taskActionsApi.completeTask(completedTasks[i].id); + await taskActionsApi.completeTask(completedTasks[i].id); } - taskWithDueDate = await apiService.getInstance().activiti.taskApi.createNewTask(new TaskRepresentation({ + taskWithDueDate = await tasksApi.createNewTask(new TaskRepresentation({ 'name': paginationTasksName[0], 'dueDate': currentDateStandardFormat })); diff --git a/e2e/process-services/tasks/info-drawer.e2e.ts b/e2e/process-services/tasks/info-drawer.e2e.ts index 46f0c0c16b9..69d6a793e4c 100644 --- a/e2e/process-services/tasks/info-drawer.e2e.ts +++ b/e2e/process-services/tasks/info-drawer.e2e.ts @@ -21,7 +21,7 @@ import { BrowserActions, BrowserVisibility, LocalStorageUtil, - LoginPage, + LoginPage, ModelsActions, StringUtil, UserModel, UsersActions @@ -47,6 +47,8 @@ describe('Info Drawer', () => { const apiService = new ApiService(); const applicationsService = new ApplicationsUtil(apiService); + const modelsActions = new ModelsActions(apiService); + const usersActions = new UsersActions(apiService); const firstComment = 'comm1'; @@ -72,8 +74,6 @@ describe('Info Drawer', () => { let processUserModel; beforeAll(async () => { - const usersActions = new UsersActions(apiService); - await apiService.loginWithProfile('admin'); const assigneeUserModel = await usersActions.createUser(); @@ -89,9 +89,9 @@ describe('Info Drawer', () => { }); afterAll(async () => { - await apiService.getInstance().activiti.modelsApi.deleteModel(appCreated.id); + await modelsActions.deleteModel(appCreated.id); await apiService.loginWithProfile('admin'); - await apiService.getInstance().activiti.adminTenantsApi.deleteTenant(processUserModel.tenantId); + await usersActions.deleteTenant(processUserModel.tenantId); }); beforeEach(async () => { diff --git a/e2e/process-services/tasks/sort-tasklist-pagination.e2e.ts b/e2e/process-services/tasks/sort-tasklist-pagination.e2e.ts index a4c7ee06cc4..6d6c77b003f 100644 --- a/e2e/process-services/tasks/sort-tasklist-pagination.e2e.ts +++ b/e2e/process-services/tasks/sort-tasklist-pagination.e2e.ts @@ -20,13 +20,12 @@ import { ApplicationsUtil, LoginPage, PaginationPage, - StringUtil, + StringUtil, TaskUtil, UsersActions } from '@alfresco/adf-testing'; import { browser } from 'protractor'; import { NavigationBarPage } from '../../core/pages/navigation-bar.page'; import { TasksPage } from './../pages/tasks.page'; -import { TaskRepresentation } from '@alfresco/js-api'; import CONSTANTS = require('../../util/constants'); describe('Task List Pagination - Sorting', () => { @@ -40,6 +39,7 @@ describe('Task List Pagination - Sorting', () => { const apiService = new ApiService(); const usersActions = new UsersActions(apiService); const applicationsService = new ApplicationsUtil(apiService); + const taskUtil = new TaskUtil(apiService); const nrOfTasks = 20; let processUserModel; @@ -65,11 +65,11 @@ describe('Task List Pagination - Sorting', () => { await applicationsService.importPublishDeployApp(app.file_path); for (let i = 0; i < nrOfTasks; i++) { - await apiService.getInstance().activiti.taskApi.createNewTask(new TaskRepresentation({ name: taskNames[i] })); + await taskUtil.createStandaloneTask(taskNames[i]); } await loginPage.login(processUserModel.username, processUserModel.password); - }); + }); it('[C260308] Should be possible to sort tasks by name', async () => { await (await new NavigationBarPage().navigateToProcessServicesPage()).goToTaskApp(); @@ -79,13 +79,12 @@ describe('Task List Pagination - Sorting', () => { await taskPage.tasksListPage().getDataTable().waitForTableBody(); await taskPage.filtersPage().sortByName('ASC'); await taskPage.tasksListPage().getDataTable().waitForTableBody(); - await taskPage.filtersPage().getAllRowsNameColumn().then(async (list) => { - await expect(JSON.stringify(list) === JSON.stringify(taskNames)).toEqual(true); - }); + const listAsc = await taskPage.filtersPage().getAllRowsNameColumn(); + await expect(JSON.stringify(listAsc) === JSON.stringify(taskNames)).toEqual(true); await taskPage.filtersPage().sortByName('DESC'); - await taskPage.filtersPage().getAllRowsNameColumn().then(async (list) => { - taskNames.reverse(); - await expect(JSON.stringify(list) === JSON.stringify(taskNames)).toEqual(true); - }); + const listDesc = await taskPage.filtersPage().getAllRowsNameColumn(); + + taskNames.reverse(); + await expect(JSON.stringify(listDesc) === JSON.stringify(taskNames)).toEqual(true); }); }); diff --git a/e2e/process-services/tasks/standalone-task.e2e.ts b/e2e/process-services/tasks/standalone-task.e2e.ts index 0b742e0779f..6e3b9bec371 100644 --- a/e2e/process-services/tasks/standalone-task.e2e.ts +++ b/e2e/process-services/tasks/standalone-task.e2e.ts @@ -17,13 +17,12 @@ import { browser } from 'protractor'; -import { ApiService, LoginPage, UsersActions } from '@alfresco/adf-testing'; +import { ApiService, ApplicationsUtil, LoginPage, UsersActions } from '@alfresco/adf-testing'; import { TasksPage } from './../pages/tasks.page'; import { NavigationBarPage } from '../../core/pages/navigation-bar.page'; -import * as fs from 'fs'; -import * as path from 'path'; import CONSTANTS = require('../../util/constants'); import Task = require('../../models/APS/Task'); +import { TaskActionsApi, TasksApi } from '@alfresco/js-api'; describe('Start Task - Task App', () => { @@ -34,24 +33,21 @@ describe('Start Task - Task App', () => { 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); + const applicationUtil = new ApplicationsUtil(apiService); + const tasksApi = new TasksApi(apiService.getInstance()); + const taskActionsApi = new TaskActionsApi(apiService.getInstance()); beforeAll(async () => { - await apiService.loginWithProfile('admin'); - processUserModel = await usersActions.createUser(); - const pathFile = path.join(browser.params.testConfig.main.rootPath + app.file_location); - const file = fs.createReadStream(pathFile); - await apiService.login(processUserModel.username, processUserModel.password); - await apiService.getInstance().activiti.appsApi.importAppDefinition(file); + await applicationUtil.importApplication(app.file_path); await loginPage.login(processUserModel.username, processUserModel.password); }); @@ -64,9 +60,9 @@ 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.addName('Standalone task'); await task.clickStartButton(); - await taskPage.tasksListPage().checkContentIsDisplayed(tasks[0]); + await taskPage.tasksListPage().checkContentIsDisplayed('Standalone task'); await taskPage.taskDetails().noFormIsDisplayed(); const taskDetails = await taskPage.taskDetails(); @@ -80,15 +76,16 @@ describe('Start Task - Task App', () => { it('[C268910] Should a standalone task be displayed in completed tasks when completing it', async () => { const task = await taskPage.createNewTask(); - await task.addName(tasks[1]); + await task.addName('Completed standalone task'); await task.clickStartButton(); - await taskPage.tasksListPage().checkContentIsDisplayed(tasks[1]); + + await taskPage.tasksListPage().checkContentIsDisplayed('Completed standalone task'); await taskPage.formFields().noFormIsDisplayed(); await taskPage.completeTaskNoForm(); await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.COMPLETED_TASKS); - await taskPage.tasksListPage().selectRow(tasks[1]); - await expect(await taskPage.formFields().getCompletedTaskNoFormMessage()).toEqual('Task ' + tasks[1] + ' completed'); + await taskPage.tasksListPage().selectRow('Completed standalone task'); + await expect(await taskPage.formFields().getCompletedTaskNoFormMessage()).toEqual('Task ' + 'Completed standalone task' + ' completed'); await taskPage.formFields().noFormIsDisplayed(); await taskPage.taskDetails().waitFormNameEqual(CONSTANTS.TASK_DETAILS.NO_FORM); @@ -96,10 +93,10 @@ describe('Start Task - Task App', () => { it('[C268911] Should allow adding a form to a standalone task when clicking on Add form button', async () => { const task = await taskPage.createNewTask(); - await task.addName(tasks[2]); + await task.addName('Add a form'); await task.clickStartButton(); - await taskPage.tasksListPage().checkContentIsDisplayed(tasks[2]); + await taskPage.tasksListPage().checkContentIsDisplayed('Add a form'); await taskPage.formFields().noFormIsDisplayed(); await taskPage.taskDetails().clickAttachFormButton(); @@ -116,19 +113,19 @@ describe('Start Task - Task App', () => { it('[C268912] Should a standalone task be displayed when removing the form from APS', async () => { const task = await taskPage.createNewTask(); const taskDetails = await taskPage.taskDetails(); - await task.addName(tasks[3]); + await task.addName('Remove form'); await task.selectForm(app.formName); await task.clickStartButton(); - await taskPage.tasksListPage().checkContentIsDisplayed(tasks[3]); + await taskPage.tasksListPage().checkContentIsDisplayed('Remove form'); await taskPage.taskDetails().waitFormNameEqual(app.formName); - const listOfTasks = await apiService.getInstance().activiti.taskApi.listTasks(new Task({ sort: 'created-desc' })); - await apiService.getInstance().activiti.taskApi.removeForm(listOfTasks.data[0].id); + const listOfTasks = await tasksApi.listTasks(new Task({ sort: 'created-desc' })); + await taskActionsApi.removeForm(listOfTasks.data[0].id); await browser.refresh(); - await taskPage.tasksListPage().checkContentIsDisplayed(tasks[3]); - await taskPage.checkTaskTitle(tasks[3]); + await taskPage.tasksListPage().checkContentIsDisplayed('Remove form'); + await taskPage.checkTaskTitle('Remove form'); await taskPage.formFields().noFormIsDisplayed(); await taskPage.taskDetails().waitFormNameEqual(CONSTANTS.TASK_DETAILS.NO_FORM); diff --git a/e2e/process-services/tasks/start-task-task-app.e2e.ts b/e2e/process-services/tasks/start-task-task-app.e2e.ts index 64f119168e0..8863e16d4eb 100644 --- a/e2e/process-services/tasks/start-task-task-app.e2e.ts +++ b/e2e/process-services/tasks/start-task-task-app.e2e.ts @@ -15,7 +15,15 @@ * limitations under the License. */ -import { ApiService, LoginPage, StringUtil, UserModel, UsersActions } from '@alfresco/adf-testing'; +import { + ApiService, + ApplicationsUtil, + LoginPage, + StringUtil, + TaskUtil, + UserModel, + UsersActions +} from '@alfresco/adf-testing'; import { browser, by } from 'protractor'; import { FileModel } from '../../models/ACS/file.model'; import { NavigationBarPage } from '../../core/pages/navigation-bar.page'; @@ -23,9 +31,6 @@ import { AttachmentListPage } from './../pages/attachment-list.page'; import { ChecklistDialog } from './../pages/dialog/create-checklist-dialog.page'; import { ProcessServiceTabBarPage } from './../pages/process-service-tab-bar.page'; import { TasksPage } from './../pages/tasks.page'; -import * as fs from 'fs'; -import * as path from 'path'; -import { TaskRepresentation } from '@alfresco/js-api'; import CONSTANTS = require('../../util/constants'); describe('Start Task - Task App', () => { @@ -39,6 +44,8 @@ describe('Start Task - Task App', () => { const apiService = new ApiService(); const usersActions = new UsersActions(apiService); + const taskUtil = new TaskUtil(apiService); + const applicationsUtil = new ApplicationsUtil(apiService); let processUserModel, assigneeUserModel; const formTextField = app.form_fields.form_fieldId; @@ -62,14 +69,11 @@ describe('Start Task - Task App', () => { 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 apiService.login(processUserModel.username, processUserModel.password); - await apiService.getInstance().activiti.appsApi.importAppDefinition(file); + await applicationsUtil.importApplication(app.file_path); - await apiService.getInstance().activiti.taskApi.createNewTask(new TaskRepresentation({ name: showHeaderTask })); + await taskUtil.createStandaloneTask(showHeaderTask); await loginPage.login(processUserModel.username, processUserModel.password); }); diff --git a/e2e/process-services/tasks/task-assignee.e2e.ts b/e2e/process-services/tasks/task-assignee.e2e.ts index a1df4ca0752..6f2b098b157 100644 --- a/e2e/process-services/tasks/task-assignee.e2e.ts +++ b/e2e/process-services/tasks/task-assignee.e2e.ts @@ -33,6 +33,7 @@ import { ProcessListPage } from './../pages/process-list.page'; import { browser } from 'protractor'; import { TasksPage } from './../pages/tasks.page'; import CONSTANTS = require('../../util/constants'); +import { AdminGroupsApi } from '@alfresco/js-api'; describe('Task Assignee', () => { @@ -51,6 +52,7 @@ describe('Task Assignee', () => { const apiService = new ApiService(); const usersActions = new UsersActions(apiService); const applicationsService = new ApplicationsUtil(apiService); + const adminGroupsApi = new AdminGroupsApi(apiService.getInstance()); describe('Candidate User Assignee', () => { @@ -65,7 +67,7 @@ describe('Task Assignee', () => { })); try {// creates group if not available - await apiService.getInstance().activiti.adminGroupsApi.createNewGroup({ + await adminGroupsApi.createNewGroup({ 'name': app.candidateGroup, 'tenantId': user.tenantId, 'type': 1 @@ -81,7 +83,7 @@ describe('Task Assignee', () => { afterAll(async () => { await apiService.loginWithProfile('admin'); - await apiService.getInstance().activiti.adminTenantsApi.deleteTenant(user.tenantId); + await usersActions.deleteTenant(user.tenantId); await navigationBarPage.clickLogoutButton(); }); @@ -132,21 +134,21 @@ describe('Task Assignee', () => { 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( + const adminGroup = await adminGroupsApi.createNewGroup( { 'name': app.adminGroup, 'tenantId': user.tenantId } ); - await apiService.getInstance().activiti.adminGroupsApi.addGroupMember(adminGroup.id, user.id); + await adminGroupsApi.addGroupMember(adminGroup.id, user.id); - await apiService.getInstance().activiti.adminGroupsApi.addGroupCapabilities(adminGroup.id, { capabilities: app.adminCapabilities }); + await adminGroupsApi.addGroupCapabilities(adminGroup.id, { capabilities: app.adminCapabilities }); - const candidateGroup = await apiService.getInstance().activiti.adminGroupsApi.createNewGroup( + const candidateGroup = await adminGroupsApi.createNewGroup( { 'name': app.candidateGroup, 'tenantId': user.tenantId, 'type': 1 } ); - 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); + await adminGroupsApi.addGroupMember(candidateGroup.id, candidate1.id); + await adminGroupsApi.addGroupMember(candidateGroup.id, candidate2.id); + await adminGroupsApi.addGroupMember(candidateGroup.id, user.id); try {// for creates user if not available await usersActions.createUser(new UserModel({ @@ -165,7 +167,7 @@ describe('Task Assignee', () => { afterAll(async () => { await apiService.loginWithProfile('admin'); - await apiService.getInstance().activiti.adminTenantsApi.deleteTenant(user.tenantId); + await usersActions.deleteTenant(user.tenantId); }); it('[C216430] Start Task - Claim and Requeue a task', async () => { diff --git a/e2e/process-services/tasks/task-attachment-list-action-menu.e2e.ts b/e2e/process-services/tasks/task-attachment-list-action-menu.e2e.ts index 206548aecad..b987a357b70 100644 --- a/e2e/process-services/tasks/task-attachment-list-action-menu.e2e.ts +++ b/e2e/process-services/tasks/task-attachment-list-action-menu.e2e.ts @@ -20,7 +20,7 @@ import { ApiService, ApplicationsUtil, FileBrowserUtil, - LoginPage, + LoginPage, ModelsActions, TaskUtil, UsersActions, ViewerPage } from '@alfresco/adf-testing'; @@ -30,8 +30,9 @@ import { AttachmentListPage } from './../pages/attachment-list.page'; import * as fs from 'fs'; import * as path from 'path'; import { FileModel } from '../../models/ACS/file.model'; -import { TaskRepresentation } from '@alfresco/js-api'; import CONSTANTS = require('../../util/constants'); +import { Activiti } from '@alfresco/js-api'; +import ContentApi = Activiti.ContentApi; describe('Attachment list action menu for tasks', () => { @@ -45,6 +46,10 @@ describe('Attachment list action menu for tasks', () => { const apiService = new ApiService(); const usersActions = new UsersActions(apiService); + const modelsActions = new ModelsActions(apiService); + const taskUtil = new TaskUtil(apiService); + const contentApi = new ContentApi(); + contentApi.init(apiService.getInstance()); const pngFile = new FileModel({ location: browser.params.resources.Files.ADF_DOCUMENTS.PNG.file_location, @@ -74,9 +79,9 @@ describe('Attachment list action menu for tasks', () => { }); afterAll(async () => { - await apiService.getInstance().activiti.modelsApi.deleteModel(appId); + await modelsActions.deleteModel(appId); await apiService.loginWithProfile('admin'); - await apiService.getInstance().activiti.adminTenantsApi.deleteTenant(tenantId); + await usersActions.deleteTenant(tenantId); }); it('[C277311] Should be able to View /Download /Remove from Attachment List on an active task', async () => { @@ -166,12 +171,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 apiService.getInstance().activiti.taskApi.createNewTask(new TaskRepresentation({ name: 'SHARE KNOWLEDGE' })); + const newTask = await taskUtil.createStandaloneTask('SHARE KNOWLEDGE'); const newTaskId = newTask.id; const filePath = path.join(browser.params.testConfig.main.rootPath + pngFile.location); const file = fs.createReadStream(filePath); - relatedContent = await apiService.getInstance().activiti.contentApi.createRelatedContentOnTask(newTaskId, file, { 'isRelatedContent': true }); + relatedContent = await contentApi.createRelatedContentOnTask(newTaskId, file, { 'isRelatedContent': true }); relatedContentId = relatedContent.id; await (await (await navigationBarPage.navigateToProcessServicesPage()).goToTaskApp()).clickTasksButton(); @@ -181,7 +186,7 @@ describe('Attachment list action menu for tasks', () => { await attachmentListPage.checkFileIsAttached(pngFile.name); - await apiService.getInstance().activiti.contentApi.deleteContent(relatedContentId); + await contentApi.deleteContent(relatedContentId); await (await (await navigationBarPage.navigateToProcessServicesPage()).goToTaskApp()).clickTasksButton(); diff --git a/e2e/process-services/tasks/task-audit.e2e.ts b/e2e/process-services/tasks/task-audit.e2e.ts index 74a585e95bc..3ed13d1f873 100644 --- a/e2e/process-services/tasks/task-audit.e2e.ts +++ b/e2e/process-services/tasks/task-audit.e2e.ts @@ -15,12 +15,19 @@ * limitations under the License. */ -import { LoginPage, BrowserActions, FileBrowserUtil, ApplicationsUtil, ApiService, UsersActions } from '@alfresco/adf-testing'; +import { + LoginPage, + BrowserActions, + FileBrowserUtil, + ApplicationsUtil, + ApiService, + UsersActions, + TaskUtil +} from '@alfresco/adf-testing'; import { TasksPage } from './../pages/tasks.page'; import { ProcessServicesPage } from './../pages/process-services.page'; import CONSTANTS = require('../../util/constants'); import { browser } from 'protractor'; -import { TaskRepresentation } from '@alfresco/js-api'; describe('Task Audit', () => { @@ -32,6 +39,7 @@ describe('Task Audit', () => { const apiService = new ApiService(); const usersActions = new UsersActions(apiService); + const taskUtil = new TaskUtil(apiService); let processUserModel; @@ -45,7 +53,7 @@ describe('Task Audit', () => { processUserModel = await usersActions.createUser(); await apiService.login(processUserModel.username, processUserModel.password); - await apiService.getInstance().activiti.taskApi.createNewTask(new TaskRepresentation({ name: taskTaskApp })); + await taskUtil.createStandaloneTask(taskTaskApp); const applicationsService = new ApplicationsUtil(apiService); await applicationsService.importPublishDeployApp(app.file_path); @@ -54,7 +62,7 @@ describe('Task Audit', () => { afterAll( async () => { await apiService.loginWithProfile('admin'); - await apiService.getInstance().activiti.adminTenantsApi.deleteTenant(processUserModel.tenantId); + await usersActions.deleteTenant(processUserModel.tenantId); }); beforeEach(async () => { diff --git a/e2e/process-services/tasks/task-details-form.e2e.ts b/e2e/process-services/tasks/task-details-form.e2e.ts index f284a4ad69a..d1c7460b0ff 100644 --- a/e2e/process-services/tasks/task-details-form.e2e.ts +++ b/e2e/process-services/tasks/task-details-form.e2e.ts @@ -18,25 +18,27 @@ import { ApiService, ApplicationsUtil, - LoginPage, + LoginPage, ModelsActions, ProcessUtil, - StringUtil, + StringUtil, TaskUtil, UsersActions, - Widget + Widget, + FormUtil } from '@alfresco/adf-testing'; import { browser } from 'protractor'; -import { FormModelActions } from '../../actions/APS/form-model.actions'; import { NavigationBarPage } from '../../core/pages/navigation-bar.page'; import { FiltersPage } from './../pages/filters.page'; import { TaskDetailsPage } from './../pages/task-details.page'; import { TasksListPage } from './../pages/tasks-list.page'; import { TasksPage } from './../pages/tasks.page'; import { AttachFormPage } from './../pages/attach-form.page'; -import { TaskRepresentation } from '@alfresco/js-api'; import CONSTANTS = require('../../util/constants'); +import { TaskActionsApi, TasksApi } from '@alfresco/js-api'; describe('Task Details - Form', () => { + const app = browser.params.resources.Files.SIMPLE_APP_WITH_USER_FORM; + const loginPage = new LoginPage(); const tasksListPage = new TasksListPage(); const taskDetailsPage = new TaskDetailsPage(); @@ -46,9 +48,14 @@ describe('Task Details - Form', () => { const widget = new Widget(); const apiService = new ApiService(); - const formActions = new FormModelActions(apiService); + const formActions = new FormUtil(apiService); + const processUtil = new ProcessUtil(apiService); const usersActions = new UsersActions(apiService); const applicationsService = new ApplicationsUtil(apiService); + const taskUtil = new TaskUtil(apiService); + const modelsActions = new ModelsActions(apiService); + const taskActionsApi = new TaskActionsApi(apiService.getInstance()); + const tasksApi = new TasksApi(apiService.getInstance()); let task, otherTask, user, newForm, attachedForm, otherAttachedForm; @@ -76,27 +83,28 @@ describe('Task Details - Form', () => { user = await usersActions.createUser(); await apiService.login(user.username, user.password); - attachedForm = await apiService.getInstance().activiti.modelsApi.createModel(attachedFormModel); - newForm = await apiService.getInstance().activiti.modelsApi.createModel(newFormModel); + attachedForm = await modelsActions.modelsApi.createModel(attachedFormModel); + newForm = await modelsActions.modelsApi.createModel(newFormModel); + + const otherEmptyTask = await taskUtil.createStandaloneTask(); - const otherEmptyTask = await apiService.getInstance().activiti.taskApi.createNewTask(new TaskRepresentation({ name: StringUtil.generateRandomString() })); - otherAttachedForm = await apiService.getInstance().activiti.modelsApi.createModel(otherAttachedFormModel); + otherAttachedForm = await modelsActions.modelsApi.createModel(otherAttachedFormModel); - await apiService.getInstance().activiti.taskApi.attachForm(otherEmptyTask.id, { 'formId': otherAttachedForm.id }); - otherTask = await apiService.getInstance().activiti.taskApi.getTask(otherEmptyTask.id); + await taskActionsApi.attachForm(otherEmptyTask.id, { 'formId': otherAttachedForm.id }); + otherTask = await tasksApi.getTask(otherEmptyTask.id); await loginPage.login(user.username, user.password); }); afterAll(async () => { await apiService.loginWithProfile('admin'); - await apiService.getInstance().activiti.adminTenantsApi.deleteTenant(user.tenantId); + await usersActions.deleteTenant(user.tenantId); }); beforeEach(async () => { - 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); + const emptyTask = await taskUtil.createStandaloneTask(); + await taskActionsApi.attachForm(emptyTask.id, { 'formId': attachedForm.id }); + task = await tasksApi.getTask(emptyTask.id); await (await new NavigationBarPage().navigateToProcessServicesPage()).goToTaskApp(); await tasksListPage.checkTaskListIsLoaded(); await filtersPage.goToFilter(CONSTANTS.TASK_FILTERS.INV_TASKS); @@ -176,17 +184,16 @@ describe('Task Details - Form', () => { tabFieldVar: 'tabBasicFieldVar' }; - let app, newTask; + let newTask, appModel; beforeAll(async () => { - app = browser.params.resources.Files.SIMPLE_APP_WITH_USER_FORM; - await applicationsService.importPublishDeployApp(app.file_path); + appModel = await applicationsService.importPublishDeployApp(app.file_path); }); beforeEach(async () => { - newTask = await apiService.getInstance().activiti.taskApi.createNewTask(new TaskRepresentation({ name: StringUtil.generateRandomString() })); + newTask = await taskUtil.createStandaloneTask(); const form = await formActions.getFormByName(app.visibilityProcess.formName); - await apiService.getInstance().activiti.taskApi.attachForm(newTask.id, { 'formId': form.id }); + await taskActionsApi.attachForm(newTask.id, { 'formId': form.id }); await browser.refresh(); await (await new NavigationBarPage().navigateToProcessServicesPage()).goToTaskApp(); @@ -350,7 +357,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(apiService).startProcessByDefinitionName(app.name, app.visibilityProcess.name); + await processUtil.startProcessByDefinitionName(appModel.name, app.visibilityProcess.name); await filtersPage.goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); await tasksListPage.checkTaskListIsLoaded(); @@ -384,7 +391,7 @@ describe('Task Details - Form', () => { }); it('[C212922] Should a User task form be refreshed, saved or completed.', async () => { - await new ProcessUtil(apiService).startProcessByDefinitionName(app.name, app.processName); + await processUtil.startProcessByDefinitionName(appModel.name, app.processName); await filtersPage.goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); await tasksListPage.checkTaskListIsLoaded(); diff --git a/e2e/process-services/tasks/task-details-no-form.e2e.ts b/e2e/process-services/tasks/task-details-no-form.e2e.ts index 0e5ec8835e9..b9a832333c3 100644 --- a/e2e/process-services/tasks/task-details-no-form.e2e.ts +++ b/e2e/process-services/tasks/task-details-no-form.e2e.ts @@ -27,16 +27,16 @@ describe('Task Details - No form', () => { const loginPage = new LoginPage(); const navigationBarPage = new NavigationBarPage(); + const taskPage = new TasksPage(); + const apiService = new ApiService(); + const usersActions = new UsersActions(apiService); let processUserModel; - const taskPage = new TasksPage(); const noFormMessage = 'No forms attached'; let importedApp; beforeAll(async () => { - const usersActions = new UsersActions(apiService); - await apiService.loginWithProfile('admin'); processUserModel = await usersActions.createUser(); @@ -49,7 +49,7 @@ describe('Task Details - No form', () => { afterAll( async () => { await apiService.loginWithProfile('admin'); - await apiService.getInstance().activiti.adminTenantsApi.deleteTenant(processUserModel.tenantId); + await usersActions.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/tasks/task-details.e2e.ts b/e2e/process-services/tasks/task-details.e2e.ts index 15b0d037519..45f57bbe2f4 100644 --- a/e2e/process-services/tasks/task-details.e2e.ts +++ b/e2e/process-services/tasks/task-details.e2e.ts @@ -19,15 +19,15 @@ import { ApiService, ApplicationsUtil, BrowserActions, - LoginPage, + LoginPage, ModelsActions, ProcessUtil, - StringUtil, + StringUtil, TaskUtil, UsersActions } from '@alfresco/adf-testing'; import { ProcessServicesPage } from './../pages/process-services.page'; import { TasksPage } from './../pages/tasks.page'; import { browser } from 'protractor'; -import { TaskRepresentation } from '@alfresco/js-api'; +import { TaskActionsApi, TaskFormsApi, TasksApi } from '@alfresco/js-api'; import Task = require('../../models/APS/Task'); import TaskModel = require('../../models/APS/TaskModel'); import FormModel = require('../../models/APS/FormModel'); @@ -43,6 +43,12 @@ describe('Task Details component', () => { const taskPage = new TasksPage(); const apiService = new ApiService(); + const taskUtil = new TaskUtil(apiService); + const modelsActions = new ModelsActions(apiService); + const usersActions = new UsersActions(apiService); + const tasksApi = new TasksApi(apiService.getInstance()); + const taskActionsApi = new TaskActionsApi(apiService.getInstance()); + const taskFormsApi = new TaskFormsApi(apiService.getInstance()); let processUserModel, appModel; const tasks = ['Modifying task', 'Information box', 'No form', 'Not Created', 'Refreshing form', 'Assignee task', 'Attach File']; @@ -57,8 +63,6 @@ describe('Task Details component', () => { }; beforeAll(async () => { - const usersActions = new UsersActions(apiService); - await apiService.loginWithProfile('admin'); processUserModel = await usersActions.createUser(); @@ -70,7 +74,7 @@ describe('Task Details component', () => { afterAll(async () => { await apiService.loginWithProfile('admin'); - await apiService.getInstance().activiti.adminTenantsApi.deleteTenant(processUserModel.tenantId); + await usersActions.deleteTenant(processUserModel.tenantId); }); beforeEach(async () => { @@ -85,7 +89,7 @@ describe('Task Details component', () => { await taskPage.createTask({ name: tasks[1], description: 'Description', formName: app.formName }); await expect(await taskPage.taskDetails().getTitle()).toEqual('Activities'); - const allTasks = await apiService.getInstance().activiti.taskApi.listTasks(new Task({ sort: 'created-desc' })); + const allTasks = await tasksApi.listTasks(new Task({ sort: 'created-desc' })); const taskModel = new TaskModel(allTasks.data[0]); await taskPage.tasksListPage().checkContentIsDisplayed(taskModel.getName()); @@ -101,7 +105,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 apiService.getInstance().activiti.taskFormsApi.getTaskForm(allTasks.data[0].id); + const taskForm = await taskFormsApi.getTaskForm(allTasks.data[0].id); formModel = new FormModel(taskForm); await taskPage.taskDetails().waitFormNameEqual(formModel.getName()); @@ -114,7 +118,7 @@ describe('Task Details component', () => { await taskPage.createTask({ name: tasks[1], description: 'Description', formName: app.formName }); await expect(await taskPage.taskDetails().getTitle()).toEqual('Activities'); - const allTasks = await apiService.getInstance().activiti.taskApi.listTasks(new Task({ sort: 'created-desc' })); + const allTasks = await tasksApi.listTasks(new Task({ sort: 'created-desc' })); const taskModel = new TaskModel(allTasks.data[0]); await taskPage.tasksListPage().checkContentIsDisplayed(taskModel.getName()); @@ -132,7 +136,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 apiService.getInstance().activiti.taskFormsApi.getTaskForm(allTasks.data[0].id); + const taskForm = await taskFormsApi.getTaskForm(allTasks.data[0].id); formModel = new FormModel(taskForm); @@ -148,7 +152,7 @@ describe('Task Details component', () => { await expect(await taskPage.taskDetails().getTitle()).toEqual('Activities'); - const allTasks = await apiService.getInstance().activiti.taskApi.listTasks(new Task({ sort: 'created-desc' })); + const allTasks = await tasksApi.listTasks(new Task({ sort: 'created-desc' })); const taskModel = new TaskModel(allTasks.data[0]); @@ -165,7 +169,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 apiService.getInstance().activiti.taskFormsApi.getTaskForm(allTasks.data[0].id); + const taskForm = await taskFormsApi.getTaskForm(allTasks.data[0].id); formModel = new FormModel(taskForm); @@ -180,7 +184,7 @@ describe('Task Details component', () => { await expect(await taskPage.taskDetails().getTitle()).toEqual('Activities'); - const allTasks = await apiService.getInstance().activiti.taskApi.listTasks(new Task({ sort: 'created-desc' })); + const allTasks = await tasksApi.listTasks(new Task({ sort: 'created-desc' })); const taskModel = new TaskModel(allTasks.data[0]); await taskPage.tasksListPage().checkContentIsDisplayed(taskModel.getName()); @@ -196,7 +200,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 apiService.getInstance().activiti.taskFormsApi.getTaskForm(allTasks.data[0].id); + const taskForm = await taskFormsApi.getTaskForm(allTasks.data[0].id); formModel = new FormModel(taskForm); @@ -206,8 +210,7 @@ describe('Task Details component', () => { it('[C286708] Should display task details for subtask - Task App', async () => { const taskName = 'TaskAppSubtask'; const checklistName = 'TaskAppChecklist'; - await apiService.getInstance().activiti.taskApi.createNewTask(new TaskRepresentation({ 'name': taskName })); - + await taskUtil.createStandaloneTask(taskName); await (await processServices.goToTaskApp()).clickTasksButton(); await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); @@ -223,7 +226,7 @@ describe('Task Details component', () => { await taskPage.tasksListPage().checkContentIsDisplayed(checklistName); await taskPage.tasksListPage().selectRow(checklistName); - const allTasks = await apiService.getInstance().activiti.taskApi.listTasks(new Task({ sort: 'created-desc' })); + const allTasks = await tasksApi.listTasks(new Task({ sort: 'created-desc' })); const taskModel = new TaskModel(allTasks.data[0]); await taskPage.tasksListPage().checkContentIsDisplayed(taskModel.getName()); @@ -260,7 +263,7 @@ describe('Task Details component', () => { await taskPage.tasksListPage().checkContentIsDisplayed(checklistName); await taskPage.tasksListPage().selectRow(checklistName); - const allTasks = await apiService.getInstance().activiti.taskApi.listTasks(new Task({ sort: 'created-desc' })); + const allTasks = await tasksApi.listTasks(new Task({ sort: 'created-desc' })); const taskModel = new TaskModel(allTasks.data[0]); await taskPage.tasksListPage().checkContentIsDisplayed(taskModel.getName()); @@ -279,7 +282,7 @@ describe('Task Details component', () => { it('[C286709] Should display task details for completed task - Task App', async () => { const taskName = 'TaskAppCompleted'; - const taskId = await apiService.getInstance().activiti.taskApi.createNewTask(new TaskRepresentation({ 'name': taskName })); + const taskId = await taskUtil.createStandaloneTask(taskName); await (await processServices.goToTaskApp()).clickTasksButton(); await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); @@ -291,7 +294,7 @@ describe('Task Details component', () => { await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.COMPLETED_TASKS); await taskPage.tasksListPage().selectRow(taskName); - const getTaskResponse = await apiService.getInstance().activiti.taskApi.getTask(taskId.id); + const getTaskResponse = await tasksApi.getTask(taskId.id); const taskModel = new TaskModel(getTaskResponse); await taskPage.tasksListPage().checkContentIsDisplayed(taskModel.getName()); @@ -310,10 +313,11 @@ describe('Task Details component', () => { it('[C260321] Should not be able to edit a completed task\'s details', async () => { const taskName = 'TaskCompleted'; - 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 } }); + const form = await modelsActions.modelsApi.createModel(taskFormModel); + const task = await taskUtil.createStandaloneTask(taskName); + + await taskActionsApi.attachForm(task.id, { 'formId': form.id }); + await taskFormsApi.completeTaskForm(task.id, { values: { label: null } }); await (await processServices.goToTaskApp()).clickTasksButton(); diff --git a/e2e/process-services/tasks/task-filters-component.e2e.ts b/e2e/process-services/tasks/task-filters-component.e2e.ts index 3bd6b325478..9851d804dfb 100644 --- a/e2e/process-services/tasks/task-filters-component.e2e.ts +++ b/e2e/process-services/tasks/task-filters-component.e2e.ts @@ -15,7 +15,14 @@ * limitations under the License. */ -import { ApiService, ApplicationsUtil, LoginPage, UserModel, UsersActions } from '@alfresco/adf-testing'; +import { + ApiService, + ApplicationsUtil, + LoginPage, ModelsActions, + UserFiltersUtil, + UserModel, + UsersActions +} from '@alfresco/adf-testing'; import { NavigationBarPage } from '../../core/pages/navigation-bar.page'; import { ProcessServicesPage } from './../pages/process-services.page'; import { TasksPage } from './../pages/tasks.page'; @@ -43,6 +50,7 @@ describe('Task', () => { const apiService = new ApiService(); const usersActions = new UsersActions(apiService); + const modelsActions = new ModelsActions(apiService); let appId: number, user: UserModel; @@ -62,9 +70,9 @@ describe('Task', () => { }); afterEach(async () => { - await apiService.getInstance().activiti.modelsApi.deleteModel(appId); + await modelsActions.deleteModel(appId); await apiService.loginWithProfile('admin'); - await apiService.getInstance().activiti.adminTenantsApi.deleteTenant(user.tenantId); + await usersActions.deleteTenant(user.tenantId); await navigationBarPage.clickLogoutButton(); }); @@ -177,7 +185,10 @@ describe('Task', () => { const processServiceTabBarPage = new ProcessServiceTabBarPage(); const appSettingsToggles = new AppSettingsTogglesPage(); const taskFiltersDemoPage = new TaskFiltersDemoPage(); + const apiService = new ApiService(); + const userFiltersApi = new UserFiltersUtil(apiService); + const usersActions = new UsersActions(apiService); let user; let appId: number; @@ -185,22 +196,20 @@ describe('Task', () => { const app = browser.params.resources.Files.APP_WITH_PROCESSES; beforeAll(async () => { - const usersActions = new UsersActions(apiService); await apiService.loginWithProfile('admin'); user = await usersActions.createUser(); await apiService.login(user.username, user.password); const applicationsService = new ApplicationsUtil(apiService); const importedApp = await applicationsService.importPublishDeployApp(app.file_path); - const appDefinitions = await apiService.getInstance().activiti.appsApi.getAppDefinitions(); - appId = appDefinitions.data.find((currentApp) => currentApp.modelId === importedApp.id).id; + appId = await applicationsService.getAppDefinitionId(importedApp.id); await loginPage.login(user.username, user.password); }); afterAll(async () => { await apiService.loginWithProfile('admin'); - await apiService.getInstance().activiti.adminTenantsApi.deleteTenant(user.tenantId); + await usersActions.deleteTenant(user.tenantId); }); beforeEach(async () => { @@ -216,11 +225,11 @@ describe('Task', () => { icon: 'glyphicon-filter', filter: { sort: 'created-desc', state: 'completed', assignment: 'involved' } }); - const { id } = await apiService.getInstance().activiti.userFiltersApi.createUserTaskFilter(newFilter); + const { id } = await userFiltersApi.createUserTaskFilter(newFilter); await browser.refresh(); await taskFiltersDemoPage.customTaskFilter('New Task Filter').checkTaskFilterIsDisplayed(); - await apiService.getInstance().activiti.userFiltersApi.deleteUserTaskFilter(id); + await userFiltersApi.deleteUserTaskFilter(id); }); it('[C286447] Should display the task filter icon when a custom filter is added', async () => { @@ -230,7 +239,7 @@ describe('Task', () => { icon: 'glyphicon-cloud', filter: { sort: 'created-desc', state: 'completed', assignment: 'involved' } }); - const { id } = await apiService.getInstance().activiti.userFiltersApi.createUserTaskFilter(newFilter); + const { id } = await userFiltersApi.createUserTaskFilter(newFilter); await browser.refresh(); await processServiceTabBarPage.clickSettingsButton(); @@ -240,7 +249,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 apiService.getInstance().activiti.userFiltersApi.deleteUserTaskFilter(id); + await userFiltersApi.deleteUserTaskFilter(id); }); it('[C286449] Should display task filter icons only when showIcon property is set on true', async () => { diff --git a/e2e/process-services/tasks/task-filters-sorting.e2e.ts b/e2e/process-services/tasks/task-filters-sorting.e2e.ts index 5cf05ab53f5..a00dc756ed6 100644 --- a/e2e/process-services/tasks/task-filters-sorting.e2e.ts +++ b/e2e/process-services/tasks/task-filters-sorting.e2e.ts @@ -15,7 +15,7 @@ * limitations under the License. */ -import { ApiService, ApplicationsUtil, LoginPage, UsersActions } from '@alfresco/adf-testing'; +import { ApiService, ApplicationsUtil, LoginPage, UserFiltersUtil, UsersActions } from '@alfresco/adf-testing'; import { NavigationBarPage } from '../../core/pages/navigation-bar.page'; import { ProcessServicesPage } from './../pages/process-services.page'; import { TasksPage } from './../pages/tasks.page'; @@ -39,6 +39,7 @@ describe('Task Filters Sorting', () => { const apiService = new ApiService(); const usersActions = new UsersActions(apiService); + const userFiltersUtil = new UserFiltersUtil(apiService); let user; let appId; @@ -57,9 +58,9 @@ describe('Task Filters Sorting', () => { await apiService.login(user.username, user.password); const applicationsService = new ApplicationsUtil(apiService); - const importedApp = await applicationsService.importPublishDeployApp(app.file_path); - const appDefinitions = await apiService.getInstance().activiti.appsApi.getAppDefinitions(); - appId = appDefinitions.data.find((currentApp) => currentApp.modelId === importedApp.id).id; + + const appModel = await applicationsService.importPublishDeployApp(app.file_path); + appId = await applicationsService.getAppDefinitionId(appModel.id); await loginPage.login(user.username, user.password); await navigationBarPage.navigateToProcessServicesPage(); @@ -82,7 +83,7 @@ describe('Task Filters Sorting', () => { afterAll( async () => { await apiService.loginWithProfile('admin'); - await apiService.getInstance().activiti.adminTenantsApi.deleteTenant(user.tenantId); + await usersActions.deleteTenant(user.tenantId); }); it('[C277254] Should display tasks under new filter from newest to oldest when they are completed', async () => { @@ -92,7 +93,7 @@ describe('Task Filters Sorting', () => { icon: 'glyphicon-filter', filter: { sort: 'created-desc', state: 'completed', assignment: 'involved' } }); - await apiService.getInstance().activiti.userFiltersApi.createUserTaskFilter(newFilter); + await userFiltersUtil.createUserTaskFilter(newFilter); await browser.refresh(); await taskFiltersDemoPage.customTaskFilter(newFilter.name).clickTaskFilter(); @@ -109,7 +110,7 @@ describe('Task Filters Sorting', () => { icon: 'glyphicon-filter', filter: { sort: 'created-asc', state: 'completed', assignment: 'involved' } }); - await apiService.getInstance().activiti.userFiltersApi.createUserTaskFilter(newFilter); + await userFiltersUtil.createUserTaskFilter(newFilter); await browser.refresh(); await taskFiltersDemoPage.customTaskFilter(newFilter.name).clickTaskFilter(); @@ -126,7 +127,7 @@ describe('Task Filters Sorting', () => { icon: 'glyphicon-filter', filter: { sort: 'due-desc', state: 'completed', assignment: 'involved' } }); - await apiService.getInstance().activiti.userFiltersApi.createUserTaskFilter(newFilter); + await userFiltersUtil.createUserTaskFilter(newFilter); await browser.refresh(); await taskFiltersDemoPage.customTaskFilter(newFilter.name).clickTaskFilter(); @@ -143,7 +144,7 @@ describe('Task Filters Sorting', () => { icon: 'glyphicon-filter', filter: { sort: 'due-asc', state: 'completed', assignment: 'involved' } }); - await apiService.getInstance().activiti.userFiltersApi.createUserTaskFilter(newFilter); + await userFiltersUtil.createUserTaskFilter(newFilter); await browser.refresh(); await taskFiltersDemoPage.customTaskFilter(newFilter.name).clickTaskFilter(); @@ -160,7 +161,7 @@ describe('Task Filters Sorting', () => { icon: 'glyphicon-filter', filter: { sort: 'created-desc', state: 'open', assignment: 'involved' } }); - await apiService.getInstance().activiti.userFiltersApi.createUserTaskFilter(newFilter); + await userFiltersUtil.createUserTaskFilter(newFilter); await browser.refresh(); await taskFiltersDemoPage.customTaskFilter(newFilter.name).clickTaskFilter(); @@ -177,7 +178,7 @@ describe('Task Filters Sorting', () => { icon: 'glyphicon-filter', filter: { sort: 'created-asc', state: 'open', assignment: 'involved' } }); - await apiService.getInstance().activiti.userFiltersApi.createUserTaskFilter(newFilter); + await userFiltersUtil.createUserTaskFilter(newFilter); await browser.refresh(); await taskFiltersDemoPage.customTaskFilter(newFilter.name).clickTaskFilter(); @@ -194,7 +195,7 @@ describe('Task Filters Sorting', () => { icon: 'glyphicon-filter', filter: { sort: 'due-desc', state: 'open', assignment: 'involved' } }); - await apiService.getInstance().activiti.userFiltersApi.createUserTaskFilter(newFilter); + await userFiltersUtil.createUserTaskFilter(newFilter); await browser.refresh(); await taskFiltersDemoPage.customTaskFilter(newFilter.name).clickTaskFilter(); @@ -211,7 +212,7 @@ describe('Task Filters Sorting', () => { icon: 'glyphicon-filter', filter: { sort: 'due-asc', state: 'open', assignment: 'involved' } }); - await apiService.getInstance().activiti.userFiltersApi.createUserTaskFilter(newFilter); + await userFiltersUtil.createUserTaskFilter(newFilter); await browser.refresh(); await taskFiltersDemoPage.customTaskFilter(newFilter.name).clickTaskFilter(); diff --git a/e2e/process-services/tasks/task-list-pagination.e2e.ts b/e2e/process-services/tasks/task-list-pagination.e2e.ts index fcfb4b5ae2c..8a4b0ebb1df 100644 --- a/e2e/process-services/tasks/task-list-pagination.e2e.ts +++ b/e2e/process-services/tasks/task-list-pagination.e2e.ts @@ -35,7 +35,9 @@ describe('Task List Pagination', () => { const navigationBarPage = new NavigationBarPage(); const taskPage = new TasksPage(); const paginationPage = new PaginationPage(); + const apiService = new ApiService(); + const usersActions = new UsersActions(apiService); let processUserModel: UserModel; const app = browser.params.resources.Files.SIMPLE_APP_WITH_USER_FORM; @@ -56,8 +58,6 @@ describe('Task List Pagination', () => { }; beforeAll(async () => { - const usersActions = new UsersActions(apiService); - await apiService.loginWithProfile('admin'); processUserModel = await usersActions.createUser(); @@ -74,7 +74,7 @@ describe('Task List Pagination', () => { afterAll( async () => { await apiService.loginWithProfile('admin'); - await apiService.getInstance().activiti.adminTenantsApi.deleteTenant(processUserModel.tenantId); + await usersActions.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 b76044e6a1d..b4d340ba038 100644 --- a/e2e/process-services/widgets/amount-widget.e2e.ts +++ b/e2e/process-services/widgets/amount-widget.e2e.ts @@ -29,7 +29,7 @@ describe('Amount Widget', () => { const widget = new Widget(); let appModel; - let deployedApp, process; + let deployedAppId, process; let processUserModel; const apiService = new ApiService(); @@ -45,16 +45,14 @@ describe('Amount Widget', () => { await apiService.login(processUserModel.username, processUserModel.password); appModel = await applicationsService.importPublishDeployApp(browser.params.resources.Files.WIDGET_CHECK_APP.file_path); - const appDefinitions = await apiService.getInstance().activiti.appsApi.getAppDefinitions(); - deployedApp = appDefinitions.data.find((currentApp) => { - return currentApp.modelId === appModel.id; - }); + deployedAppId = await applicationsService.getAppDefinitionId(appModel.id); + process = await processUtil.startProcessByDefinitionName(appModel.name, app.processName); await loginPage.login(processUserModel.username, processUserModel.password); }); beforeEach(async() => { - const urlToNavigateTo = `${browser.baseUrl}/activiti/apps/${deployedApp.id}/tasks/`; + const urlToNavigateTo = `${browser.baseUrl}/activiti/apps/${deployedAppId}/tasks/`; await BrowserActions.getUrl(urlToNavigateTo); await taskPage.tasksListPage().checkTaskListIsLoaded(); @@ -63,9 +61,9 @@ describe('Amount Widget', () => { }); afterAll(async () => { - await apiService.getInstance().activiti.processApi.deleteProcessInstance(process.id); + await processUtil.cancelProcessInstance(process.id); await apiService.loginWithProfile('admin'); - await apiService.getInstance().activiti.adminTenantsApi.deleteTenant(processUserModel.tenantId); + await usersActions.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 4094f7495af..42dd6d26ac3 100644 --- a/e2e/process-services/widgets/attach-file-widget.e2e.ts +++ b/e2e/process-services/widgets/attach-file-widget.e2e.ts @@ -80,7 +80,7 @@ describe('Attach widget - File', () => { afterAll(async () => { await apiService.loginWithProfile('admin'); - await apiService.getInstance().activiti.adminTenantsApi.deleteTenant(processUserModel.tenantId); + await usersActions.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 cbd3c918f3b..76f1711e35a 100644 --- a/e2e/process-services/widgets/attach-folder-widget.e2e.ts +++ b/e2e/process-services/widgets/attach-folder-widget.e2e.ts @@ -39,7 +39,7 @@ describe('Attach Folder widget', () => { const navigationBarPage = new NavigationBarPage(); let appModel; - let deployedApp, process; + let deployedAppId, process; let processUserModel; const apiService = new ApiService(); @@ -55,26 +55,24 @@ describe('Attach Folder widget', () => { await apiService.login(processUserModel.username, processUserModel.password); appModel = await applicationsService.importPublishDeployApp(browser.params.resources.Files.WIDGET_CHECK_APP.file_path); - const appDefinitions = await apiService.getInstance().activiti.appsApi.getAppDefinitions(); - deployedApp = appDefinitions.data.find((currentApp) => { - return currentApp.modelId === appModel.id; - }); + deployedAppId = await applicationsService.getAppDefinitionId(appModel.id); + process = await processUtil.startProcessByDefinitionName(appModel.name, app.processName); await loginPage.login(processUserModel.username, processUserModel.password); }); beforeEach(async () => { await navigationBarPage.clickHomeButton(); - await (new ProcessServicesPage()).goToAppByAppId(deployedApp.id); + await (new ProcessServicesPage()).goToAppByAppId(deployedAppId); await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); await taskPage.formFields().checkFormIsDisplayed(); }); afterAll(async () => { - await apiService.getInstance().activiti.processApi.deleteProcessInstance(process.id); + await processUtil.cancelProcessInstance(process.id); await apiService.loginWithProfile('admin'); - await apiService.getInstance().activiti.adminTenantsApi.deleteTenant(processUserModel.tenantId); + await usersActions.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 4c6ed331bb6..6497643cf9b 100644 --- a/e2e/process-services/widgets/checkbox-widget.e2e.ts +++ b/e2e/process-services/widgets/checkbox-widget.e2e.ts @@ -38,11 +38,12 @@ describe('Checkbox Widget', () => { let processUserModel; let appModel; - let deployedApp, process; + let deployedAppId, process; const apiService = new ApiService(); const usersActions = new UsersActions(apiService); const applicationsService = new ApplicationsUtil(apiService); + const processUtil = new ProcessUtil(apiService); beforeAll(async () => { await apiService.loginWithProfile('admin'); @@ -52,24 +53,22 @@ describe('Checkbox Widget', () => { await apiService.login(processUserModel.username, processUserModel.password); appModel = await applicationsService.importPublishDeployApp(browser.params.resources.Files.WIDGET_CHECK_APP.file_path); - const appDefinitions = await apiService.getInstance().activiti.appsApi.getAppDefinitions(); - deployedApp = appDefinitions.data.find((currentApp) => { - return currentApp.modelId === appModel.id; - }); - process = await new ProcessUtil(apiService).startProcessByDefinitionName(appModel.name, app.processName); + deployedAppId = await applicationsService.getAppDefinitionId(appModel.id); + + process = await processUtil.startProcessByDefinitionName(appModel.name, app.processName); await loginPage.login(processUserModel.username, processUserModel.password); }); beforeEach(async () => { - await (new ProcessServicesPage()).goToAppByAppId(deployedApp.id); + await (new ProcessServicesPage()).goToAppByAppId(deployedAppId); await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); await taskPage.formFields().checkFormIsDisplayed(); }); afterAll(async () => { - await apiService.getInstance().activiti.processApi.deleteProcessInstance(process.id); + await processUtil.cancelProcessInstance(process.id); await apiService.loginWithProfile('admin'); - await apiService.getInstance().activiti.adminTenantsApi.deleteTenant(processUserModel.tenantId); + await usersActions.deleteTenant(processUserModel.tenantId); }); it('[C268554] Should be able to set general settings for Checkbox widget ', async () => { diff --git a/e2e/process-services/widgets/date-time-widget.e2e.ts b/e2e/process-services/widgets/date-time-widget.e2e.ts index 2fa724ce936..6e00efe53dc 100644 --- a/e2e/process-services/widgets/date-time-widget.e2e.ts +++ b/e2e/process-services/widgets/date-time-widget.e2e.ts @@ -41,10 +41,11 @@ describe('Date and time widget', () => { const apiService = new ApiService(); const usersActions = new UsersActions(apiService); const applicationsService = new ApplicationsUtil(apiService); + const processUtil = new ProcessUtil(apiService); let processUserModel; let appModel; - let deployedApp, process; + let deployedAppId, process; beforeAll(async () => { await apiService.loginWithProfile('admin'); @@ -54,26 +55,24 @@ describe('Date and time widget', () => { await apiService.login(processUserModel.username, processUserModel.password); appModel = await applicationsService.importPublishDeployApp(browser.params.resources.Files.WIDGET_CHECK_APP.file_path); - const appDefinitions = await apiService.getInstance().activiti.appsApi.getAppDefinitions(); - deployedApp = appDefinitions.data.find((currentApp) => { - return currentApp.modelId === appModel.id; - }); - process = await new ProcessUtil(apiService).startProcessByDefinitionName(appModel.name, app.processName); + deployedAppId = await applicationsService.getAppDefinitionId(appModel.id); + + process = await processUtil.startProcessByDefinitionName(appModel.name, app.processName); await loginPage.login(processUserModel.username, processUserModel.password); }); beforeEach(async () => { await navigationBarPage.clickHomeButton(); - await (new ProcessServicesPage()).goToAppByAppId(deployedApp.id); + await (new ProcessServicesPage()).goToAppByAppId(deployedAppId); await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); await taskPage.formFields().checkFormIsDisplayed(); }); afterAll(async () => { - await apiService.getInstance().activiti.processApi.deleteProcessInstance(process.id); + await processUtil.cancelProcessInstance(process.id); await apiService.loginWithProfile('admin'); - await apiService.getInstance().activiti.adminTenantsApi.deleteTenant(processUserModel.tenantId); + await usersActions.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 f224460942e..d63c4e09f6a 100644 --- a/e2e/process-services/widgets/date-widget.e2e.ts +++ b/e2e/process-services/widgets/date-widget.e2e.ts @@ -45,11 +45,12 @@ describe('Date widget', () => { const dateWidget = widget.dateWidget(); let appModel; let processUserModel; - let deployedApp, process; + let deployedAppId, process; const apiService = new ApiService(); const usersActions = new UsersActions(apiService); const applicationsService = new ApplicationsUtil(apiService); + const processUtil = new ProcessUtil(apiService); beforeAll(async () => { await apiService.loginWithProfile('admin'); @@ -59,24 +60,22 @@ describe('Date widget', () => { await apiService.login(processUserModel.username, processUserModel.password); appModel = await applicationsService.importPublishDeployApp(browser.params.resources.Files.WIDGET_CHECK_APP.file_path); - const appDefinitions = await apiService.getInstance().activiti.appsApi.getAppDefinitions(); - deployedApp = appDefinitions.data.find((currentApp) => { - return currentApp.modelId === appModel.id; - }); - process = await new ProcessUtil(apiService).startProcessByDefinitionName(appModel.name, app.processName); + deployedAppId = await applicationsService.getAppDefinitionId(appModel.id); + + process = await processUtil.startProcessByDefinitionName(appModel.name, app.processName); await loginPage.login(processUserModel.username, processUserModel.password); }); afterAll(async () => { - await apiService.getInstance().activiti.processApi.deleteProcessInstance(process.id); + await processUtil.cancelProcessInstance(process.id); await apiService.loginWithProfile('admin'); - await apiService.getInstance().activiti.adminTenantsApi.deleteTenant(processUserModel.tenantId); + await usersActions.deleteTenant(processUserModel.tenantId); }); describe('Simple App', () => { beforeEach(async () => { await navigationBarPage.clickHomeButton(); - await (new ProcessServicesPage()).goToAppByAppId(deployedApp.id); + await (new ProcessServicesPage()).goToAppByAppId(deployedAppId); await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); await taskPage.formFields().checkFormIsDisplayed(); diff --git a/e2e/process-services/widgets/document-template-widget.e2e.ts b/e2e/process-services/widgets/document-template-widget.e2e.ts index 3d1f7683fb0..1fb48f8e5df 100644 --- a/e2e/process-services/widgets/document-template-widget.e2e.ts +++ b/e2e/process-services/widgets/document-template-widget.e2e.ts @@ -41,9 +41,10 @@ describe('Document Template widget', () => { const apiService = new ApiService(); const usersActions = new UsersActions(apiService); const applicationsService = new ApplicationsUtil(apiService); + const processUtil = new ProcessUtil(apiService); let appModel; - let deployedApp, process; + let deployedAppId, process; let processUserModel; beforeAll(async () => { @@ -54,26 +55,24 @@ describe('Document Template widget', () => { await apiService.login(processUserModel.username, processUserModel.password); appModel = await applicationsService.importPublishDeployApp( app.file_path); - const appDefinitions = await apiService.getInstance().activiti.appsApi.getAppDefinitions(); - deployedApp = appDefinitions.data.find((currentApp) => { - return currentApp.modelId === appModel.id; - }); - process = await new ProcessUtil(apiService).startProcessOfApp(appModel.name); + deployedAppId = await applicationsService.getAppDefinitionId(appModel.id); + + process = await processUtil.startProcessOfApp(appModel.name); await loginPage.login(processUserModel.username, processUserModel.password); }); beforeEach(async () => { await navigationBarPage.clickHomeButton(); - await (new ProcessServicesPage()).goToAppByAppId(deployedApp.id); + await (new ProcessServicesPage()).goToAppByAppId(deployedAppId); await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); await taskPage.formFields().checkFormIsDisplayed(); }); afterAll(async () => { - await apiService.getInstance().activiti.processApi.deleteProcessInstance(process.id); + await processUtil.cancelProcessInstance(process.id); await apiService.loginWithProfile('admin'); - await apiService.getInstance().activiti.adminTenantsApi.deleteTenant(processUserModel.tenantId); + await usersActions.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 927cd02dad2..f96edfe41f9 100644 --- a/e2e/process-services/widgets/dropdown-widget.e2e.ts +++ b/e2e/process-services/widgets/dropdown-widget.e2e.ts @@ -40,9 +40,10 @@ describe('Dropdown widget', () => { const apiService = new ApiService(); const usersActions = new UsersActions(apiService); const applicationsService = new ApplicationsUtil(apiService); + const processUtil = new ProcessUtil(apiService); let appModel; - let deployedApp, process; + let deployedAppId, process; let processUserModel; beforeAll(async () => { @@ -53,26 +54,24 @@ describe('Dropdown widget', () => { await apiService.login(processUserModel.username, processUserModel.password); appModel = await applicationsService.importPublishDeployApp(browser.params.resources.Files.WIDGET_CHECK_APP.file_path); - const appDefinitions = await apiService.getInstance().activiti.appsApi.getAppDefinitions(); - deployedApp = appDefinitions.data.find((currentApp) => { - return currentApp.modelId === appModel.id; - }); - process = await new ProcessUtil(apiService).startProcessByDefinitionName(appModel.name, app.processName); + deployedAppId = await applicationsService.getAppDefinitionId(appModel.id); + + process = await processUtil.startProcessByDefinitionName(appModel.name, app.processName); await loginPage.login(processUserModel.username, processUserModel.password); }); beforeEach(async () => { await navigationBarPage.clickHomeButton(); - await (new ProcessServicesPage()).goToAppByAppId(deployedApp.id); + await (new ProcessServicesPage()).goToAppByAppId(deployedAppId); await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); await taskPage.formFields().checkFormIsDisplayed(); }); afterAll(async () => { - await apiService.getInstance().activiti.processApi.deleteProcessInstance(process.id); + await processUtil.cancelProcessInstance(process.id); await apiService.loginWithProfile('admin'); - await apiService.getInstance().activiti.adminTenantsApi.deleteTenant(processUserModel.tenantId); + await usersActions.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 53e28b3c561..dd5b26b2f75 100644 --- a/e2e/process-services/widgets/dynamic-table-widget.e2e.ts +++ b/e2e/process-services/widgets/dynamic-table-widget.e2e.ts @@ -39,13 +39,12 @@ describe('Dynamic Table widget ', () => { const apiService = new ApiService(); const usersActions = new UsersActions(apiService); const applicationsService = new ApplicationsUtil(apiService); + const processUtil = new ProcessUtil(apiService); let processUserModel; - let appModel; - let deployedApp, process; + let deployedAppId, process; describe('with Date Time Widget App', () => { - const app = browser.params.resources.Files.WIDGET_CHECK_APP.DYNAMIC_TABLE; beforeAll(async () => { @@ -53,26 +52,26 @@ describe('Dynamic Table widget ', () => { processUserModel = await usersActions.createUser(); await apiService.login(processUserModel.username, processUserModel.password); - appModel = await applicationsService.importPublishDeployApp(browser.params.resources.Files.WIDGET_CHECK_APP.file_path); + const appModel = await applicationsService.importPublishDeployApp(browser.params.resources.Files.WIDGET_CHECK_APP.file_path); + + deployedAppId = await applicationsService.getAppDefinitionId(appModel.id); - const appDefinitions = await apiService.getInstance().activiti.appsApi.getAppDefinitions(); - deployedApp = appDefinitions.data.find((currentApp) => currentApp.modelId === appModel.id); - process = await new ProcessUtil(apiService).startProcessByDefinitionName(appModel.name, app.processName); + process = await processUtil.startProcessByDefinitionName(appModel.name, app.processName); await loginPage.login(processUserModel.username, processUserModel.password); }); beforeEach(async () => { await navigationBarPage.clickHomeButton(); - await (new ProcessServicesPage()).goToAppByAppId(deployedApp.id); + await (new ProcessServicesPage()).goToAppByAppId(deployedAppId); await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); await taskPage.formFields().checkFormIsDisplayed(); }); afterAll(async () => { - await apiService.getInstance().activiti.processApi.deleteProcessInstance(process.id); + await processUtil.cancelProcessInstance(process.id); await apiService.loginWithProfile('admin'); - await apiService.getInstance().activiti.adminTenantsApi.deleteTenant(processUserModel.tenantId); + await usersActions.deleteTenant(processUserModel.tenantId); await navigationBarPage.clickLogoutButton(); }); @@ -103,24 +102,24 @@ describe('Dynamic Table widget ', () => { processUserModel = await usersActions.createUser(); await apiService.login(processUserModel.username, processUserModel.password); - appModel = await applicationsService.importPublishDeployApp(browser.params.resources.Files.WIDGET_CHECK_APP.file_path); + const appModel = await applicationsService.importPublishDeployApp(browser.params.resources.Files.WIDGET_CHECK_APP.file_path); - const appDefinitions = await apiService.getInstance().activiti.appsApi.getAppDefinitions(); - deployedApp = appDefinitions.data.find((currentApp) => currentApp.modelId === appModel.id); - process = await new ProcessUtil(apiService).startProcessByDefinitionName(appModel.name, app.processName); + deployedAppId = await applicationsService.getAppDefinitionId(appModel.id); + + process = await processUtil.startProcessByDefinitionName(appModel.name, app.processName); await loginPage.login(processUserModel.username, processUserModel.password); }); afterAll(async () => { - await apiService.getInstance().activiti.processApi.deleteProcessInstance(process.id); + await processUtil.cancelProcessInstance(process.id); await apiService.loginWithProfile('admin'); - await apiService.getInstance().activiti.adminTenantsApi.deleteTenant(processUserModel.tenantId); + await usersActions.deleteTenant(processUserModel.tenantId); await navigationBarPage.clickLogoutButton(); }); beforeEach(async () => { await navigationBarPage.clickHomeButton(); - await (new ProcessServicesPage()).goToAppByAppId(deployedApp.id); + await (new ProcessServicesPage()).goToAppByAppId(deployedAppId); await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); await taskPage.tasksListPage().checkTaskListIsLoaded(); @@ -159,24 +158,24 @@ describe('Dynamic Table widget ', () => { processUserModel = await usersActions.createUser(); await apiService.login(processUserModel.username, processUserModel.password); - const application = await applicationsService.importPublishDeployApp(app.file_path); + const appModel = await applicationsService.importPublishDeployApp(app.file_path); + + deployedAppId = await applicationsService.getAppDefinitionId(appModel.id); - const appDefinitions = await apiService.getInstance().activiti.appsApi.getAppDefinitions(); - deployedApp = appDefinitions.data.find((currentApp) => currentApp.modelId === application.id); - process = await new ProcessUtil(apiService).startProcessByDefinitionName(application.name, app.CUSTOM_VALIDATOR.processName); + process = await processUtil.startProcessByDefinitionName(appModel.name, app.CUSTOM_VALIDATOR.processName); }); afterAll(async () => { - await apiService.getInstance().activiti.processApi.deleteProcessInstance(process.id); + await processUtil.cancelProcessInstance(process.id); await apiService.loginWithProfile('admin'); - await apiService.getInstance().activiti.adminTenantsApi.deleteTenant(processUserModel.tenantId); + await usersActions.deleteTenant(processUserModel.tenantId); }); beforeEach(async () => { await loginPage.login(processUserModel.username, processUserModel.password); await navigationBarPage.clickHomeButton(); - await (new ProcessServicesPage()).goToAppByAppId(deployedApp.id); + await (new ProcessServicesPage()).goToAppByAppId(deployedAppId); await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); await taskPage.tasksListPage().checkTaskListIsLoaded(); @@ -195,7 +194,7 @@ describe('Dynamic Table widget ', () => { await widget.dynamicTable().setDatatableInput('id', app.CUSTOM_VALIDATOR.FIELD.ID); await widget.dynamicTable().clickSaveButton(); - await expect(await widget.dynamicTable().checkErrorMessage()).toBe('Field \'Number\' is required.' ); + await expect(await widget.dynamicTable().checkErrorMessage()).toBe('Field \'Number\' is required.'); await widget.dynamicTable().setDatatableInput('12', app.CUSTOM_VALIDATOR.FIELD.NUM); await widget.dynamicTable().clickSaveButton(); diff --git a/e2e/process-services/widgets/header-widget.e2e.ts b/e2e/process-services/widgets/header-widget.e2e.ts index 45e9b4d042f..46b829a05ac 100644 --- a/e2e/process-services/widgets/header-widget.e2e.ts +++ b/e2e/process-services/widgets/header-widget.e2e.ts @@ -41,9 +41,10 @@ describe('Header widget', async () => { const apiService = new ApiService(); const usersActions = new UsersActions(apiService); const applicationsService = new ApplicationsUtil(apiService); + const processUtil = new ProcessUtil(apiService); let appModel; - let deployedApp, process; + let deployedAppId, process; let processUserModel; beforeAll(async () => { @@ -54,26 +55,24 @@ describe('Header widget', async () => { await apiService.login(processUserModel.username, processUserModel.password); appModel = await applicationsService.importPublishDeployApp(browser.params.resources.Files.WIDGET_CHECK_APP.file_path); - const appDefinitions = await apiService.getInstance().activiti.appsApi.getAppDefinitions(); - deployedApp = appDefinitions.data.find((currentApp) => { - return currentApp.modelId === appModel.id; - }); - process = await new ProcessUtil(apiService).startProcessByDefinitionName(appModel.name, app.processName); + deployedAppId = await applicationsService.getAppDefinitionId(appModel.id); + + process = await processUtil.startProcessByDefinitionName(appModel.name, app.processName); await loginPage.login(processUserModel.username, processUserModel.password); }); beforeEach(async () => { await navigationBarPage.clickHomeButton(); - await (new ProcessServicesPage()).goToAppByAppId(deployedApp.id); + await (new ProcessServicesPage()).goToAppByAppId(deployedAppId); await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); await taskPage.formFields().checkFormIsDisplayed(); }); afterAll(async () => { - await apiService.getInstance().activiti.processApi.deleteProcessInstance(process.id); + await processUtil.cancelProcessInstance(process.id); await apiService.loginWithProfile('admin'); - await apiService.getInstance().activiti.adminTenantsApi.deleteTenant(processUserModel.tenantId); + await usersActions.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 00406613a8e..89b997167b7 100644 --- a/e2e/process-services/widgets/hyperlink-widget.e2e.ts +++ b/e2e/process-services/widgets/hyperlink-widget.e2e.ts @@ -41,10 +41,11 @@ describe('Hyperlink widget', () => { const apiService = new ApiService(); const usersActions = new UsersActions(apiService); const applicationsService = new ApplicationsUtil(apiService); + const processUtil = new ProcessUtil(apiService); let appModel; let processUserModel; - let deployedApp, process; + let deployedAppId, process; beforeAll(async () => { await apiService.loginWithProfile('admin'); @@ -54,26 +55,24 @@ describe('Hyperlink widget', () => { await apiService.login(processUserModel.username, processUserModel.password); appModel = await applicationsService.importPublishDeployApp(browser.params.resources.Files.WIDGET_CHECK_APP.file_path); - const appDefinitions = await apiService.getInstance().activiti.appsApi.getAppDefinitions(); - deployedApp = appDefinitions.data.find((currentApp) => { - return currentApp.modelId === appModel.id; - }); - process = await new ProcessUtil(apiService).startProcessByDefinitionName(appModel.name, app.processName); + deployedAppId = await applicationsService.getAppDefinitionId(appModel.id); + + process = await processUtil.startProcessByDefinitionName(appModel.name, app.processName); await loginPage.login(processUserModel.username, processUserModel.password); }); beforeEach(async () => { await navigationBarPage.clickHomeButton(); - await (new ProcessServicesPage()).goToAppByAppId(deployedApp.id); + await (new ProcessServicesPage()).goToAppByAppId(deployedAppId); await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); await taskPage.formFields().checkFormIsDisplayed(); }); afterAll(async () => { - await apiService.getInstance().activiti.processApi.deleteProcessInstance(process.id); + await processUtil.cancelProcessInstance(process.id); await apiService.loginWithProfile('admin'); - await apiService.getInstance().activiti.adminTenantsApi.deleteTenant(processUserModel.tenantId); + await usersActions.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 0ac32e12ca1..2fc90f5e5f2 100644 --- a/e2e/process-services/widgets/multi-line-widget.e2e.ts +++ b/e2e/process-services/widgets/multi-line-widget.e2e.ts @@ -40,10 +40,11 @@ describe('Multi-line Widget', () => { const apiService = new ApiService(); const usersActions = new UsersActions(apiService); const applicationsService = new ApplicationsUtil(apiService); + const processUtil = new ProcessUtil(apiService); let appModel; let processUserModel; - let deployedApp, process; + let deployedAppId, process; beforeAll(async () => { await apiService.loginWithProfile('admin'); @@ -53,26 +54,24 @@ describe('Multi-line Widget', () => { await apiService.login(processUserModel.username, processUserModel.password); appModel = await applicationsService.importPublishDeployApp(browser.params.resources.Files.WIDGET_CHECK_APP.file_path); - const appDefinitions = await apiService.getInstance().activiti.appsApi.getAppDefinitions(); - deployedApp = appDefinitions.data.find((currentApp) => { - return currentApp.modelId === appModel.id; - }); - process = await new ProcessUtil(apiService).startProcessByDefinitionName(appModel.name, app.processName); + deployedAppId = await applicationsService.getAppDefinitionId(appModel.id); + + process = await processUtil.startProcessByDefinitionName(appModel.name, app.processName); await loginPage.login(processUserModel.username, processUserModel.password); }); beforeEach(async () => { await navigationBarPage.clickHomeButton(); - await (new ProcessServicesPage()).goToAppByAppId(deployedApp.id); + await (new ProcessServicesPage()).goToAppByAppId(deployedAppId); await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); await taskPage.formFields().checkFormIsDisplayed(); }); afterAll(async () => { - await apiService.getInstance().activiti.processApi.deleteProcessInstance(process.id); + await processUtil.cancelProcessInstance(process.id); await apiService.loginWithProfile('admin'); - await apiService.getInstance().activiti.adminTenantsApi.deleteTenant(processUserModel.tenantId); + await usersActions.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 fc93c6c2a82..e453dac1d1d 100644 --- a/e2e/process-services/widgets/number-widget.e2e.ts +++ b/e2e/process-services/widgets/number-widget.e2e.ts @@ -41,9 +41,10 @@ describe('Number widget', () => { const apiService = new ApiService(); const usersActions = new UsersActions(apiService); const applicationsService = new ApplicationsUtil(apiService); + const processUtil = new ProcessUtil(apiService); let appModel; - let deployedApp, process; + let deployedAppId, process; let processUserModel; beforeAll(async () => { @@ -54,26 +55,24 @@ describe('Number widget', () => { await apiService.login(processUserModel.username, processUserModel.password); appModel = await applicationsService.importPublishDeployApp(browser.params.resources.Files.WIDGET_CHECK_APP.file_path); - const appDefinitions = await apiService.getInstance().activiti.appsApi.getAppDefinitions(); - deployedApp = appDefinitions.data.find((currentApp) => { - return currentApp.modelId === appModel.id; - }); - process = await new ProcessUtil(apiService).startProcessByDefinitionName(appModel.name, app.processName); + deployedAppId = await applicationsService.getAppDefinitionId(appModel.id); + + process = await processUtil.startProcessByDefinitionName(appModel.name, app.processName); await loginPage.login(processUserModel.username, processUserModel.password); }); beforeEach(async () => { await navigationBarPage.clickHomeButton(); - await (new ProcessServicesPage()).goToAppByAppId(deployedApp.id); + await (new ProcessServicesPage()).goToAppByAppId(deployedAppId); await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); await taskPage.formFields().checkFormIsDisplayed(); }); afterAll(async () => { - await apiService.getInstance().activiti.processApi.deleteProcessInstance(process.id); + await processUtil.cancelProcessInstance(process.id); await apiService.loginWithProfile('admin'); - await apiService.getInstance().activiti.adminTenantsApi.deleteTenant(processUserModel.tenantId); + await usersActions.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 0a2a6d90e69..5d218a90bc3 100644 --- a/e2e/process-services/widgets/people-group-widget.e2e.ts +++ b/e2e/process-services/widgets/people-group-widget.e2e.ts @@ -20,6 +20,7 @@ import { TasksPage } from '../pages/tasks.page'; import { browser } from 'protractor'; import { NavigationBarPage } from '../../core/pages/navigation-bar.page'; import CONSTANTS = require('../../util/constants'); +import { AdminGroupsApi } from '@alfresco/js-api'; describe('People and Group widget', () => { @@ -33,6 +34,7 @@ describe('People and Group widget', () => { const apiService = new ApiService(); const usersActions = new UsersActions(apiService); const applicationsService = new ApplicationsUtil(apiService); + const adminGroupsApi = new AdminGroupsApi(apiService.getInstance()); let user: UserModel; @@ -129,16 +131,16 @@ describe('People and Group widget', () => { tenantId: tenantId, firstName: app.subGroupUser.firstName, lastName: app.subGroupUser.lastName })); - const group = await apiService.getInstance().activiti.adminGroupsApi.createNewGroup({ + const group = await 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))); + await Promise.all(userCreated.map((userToAddGroup: UserModel) => adminGroupsApi.addGroupMember(group.id, userToAddGroup.id))); const subgroups: any[] = await Promise.all(getSubGroupsName().map((name) => - apiService.getInstance().activiti.adminGroupsApi.createNewGroup({ + adminGroupsApi.createNewGroup({ name, tenantId, type: 1, @@ -146,7 +148,7 @@ describe('People and Group widget', () => { }) )); - await Promise.all(subgroups.map((subgroup) => apiService.getInstance().activiti.adminGroupsApi.addGroupMember(subgroup.id, subgroupUser.id))); + await Promise.all(subgroups.map((subgroup) => adminGroupsApi.addGroupMember(subgroup.id, subgroupUser.id))); } diff --git a/e2e/process-services/widgets/people-widget.e2e.ts b/e2e/process-services/widgets/people-widget.e2e.ts index 6e4821862b6..8868ddb4c6d 100644 --- a/e2e/process-services/widgets/people-widget.e2e.ts +++ b/e2e/process-services/widgets/people-widget.e2e.ts @@ -41,9 +41,10 @@ describe('People widget', () => { const apiService = new ApiService(); const usersActions = new UsersActions(apiService); const applicationsService = new ApplicationsUtil(apiService); + const processUtil = new ProcessUtil(apiService); let appModel; - let deployedApp, process; + let deployedAppId, process; let processUserModel; beforeAll(async () => { @@ -54,26 +55,24 @@ describe('People widget', () => { await apiService.login(processUserModel.username, processUserModel.password); appModel = await applicationsService.importPublishDeployApp(browser.params.resources.Files.WIDGET_CHECK_APP.file_path); - const appDefinitions = await apiService.getInstance().activiti.appsApi.getAppDefinitions(); - deployedApp = appDefinitions.data.find((currentApp) => { - return currentApp.modelId === appModel.id; - }); - process = await new ProcessUtil(apiService).startProcessOfApp(appModel.name, app.processName); + deployedAppId = await applicationsService.getAppDefinitionId(appModel.id); + + process = await processUtil.startProcessOfApp(appModel.name, app.processName); await loginPage.login(processUserModel.username, processUserModel.password); }); beforeEach(async () => { await navigationBarPage.clickHomeButton(); - await (new ProcessServicesPage()).goToAppByAppId(deployedApp.id); + await (new ProcessServicesPage()).goToAppByAppId(deployedAppId); await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); await taskPage.formFields().checkFormIsDisplayed(); }); afterAll(async () => { - await apiService.getInstance().activiti.processApi.deleteProcessInstance(process.id); + await processUtil.cancelProcessInstance(process.id); await apiService.loginWithProfile('admin'); - await apiService.getInstance().activiti.adminTenantsApi.deleteTenant(processUserModel.tenantId); + await usersActions.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 6db7bb4ea9e..b55897b4509 100644 --- a/e2e/process-services/widgets/radio-buttons-widget.e2e.ts +++ b/e2e/process-services/widgets/radio-buttons-widget.e2e.ts @@ -41,9 +41,10 @@ describe('Radio Buttons Widget', () => { const apiService = new ApiService(); const usersActions = new UsersActions(apiService); const applicationsService = new ApplicationsUtil(apiService); + const processUtil = new ProcessUtil(apiService); let appModel; - let deployedApp, process; + let appId, process; let processUserModel; beforeAll(async () => { @@ -53,28 +54,24 @@ describe('Radio Buttons Widget', () => { await apiService.login(processUserModel.username, processUserModel.password); appModel = await applicationsService.importPublishDeployApp(browser.params.resources.Files.WIDGET_CHECK_APP.file_path); + appId = await applicationsService.getAppDefinitionId(appModel.id); - const appDefinitions = await apiService.getInstance().activiti.appsApi.getAppDefinitions(); - deployedApp = appDefinitions.data.find((currentApp) => { - return currentApp.modelId === appModel.id; - }); - - process = await new ProcessUtil(apiService).startProcessByDefinitionName(appModel.name, app.processName); + process = await processUtil.startProcessByDefinitionName(appModel.name, app.processName); await loginPage.login(processUserModel.username, processUserModel.password); }); beforeEach(async () => { await navigationBarPage.clickHomeButton(); - await (new ProcessServicesPage()).goToAppByAppId(deployedApp.id); + await (new ProcessServicesPage()).goToAppByAppId(appId); await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); await taskPage.formFields().checkFormIsDisplayed(); }); afterAll(async () => { - await apiService.getInstance().activiti.processApi.deleteProcessInstance(process.id); + await processUtil.cancelProcessInstance(process.id); await apiService.loginWithProfile('admin'); - await apiService.getInstance().activiti.adminTenantsApi.deleteTenant(processUserModel.tenantId); + await usersActions.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 447848b9550..071c8e06dc8 100644 --- a/e2e/process-services/widgets/text-widget.e2e.ts +++ b/e2e/process-services/widgets/text-widget.e2e.ts @@ -41,9 +41,10 @@ describe('Text widget', () => { const apiService = new ApiService(); const usersActions = new UsersActions(apiService); const applicationsService = new ApplicationsUtil(apiService); + const processUtil = new ProcessUtil(apiService); let appModel; - let deployedApp, process; + let deployedAppId, process; let processUserModel; beforeAll(async () => { @@ -54,26 +55,24 @@ describe('Text widget', () => { await apiService.login(processUserModel.username, processUserModel.password); appModel = await applicationsService.importPublishDeployApp(browser.params.resources.Files.WIDGET_CHECK_APP.file_path); - const appDefinitions = await apiService.getInstance().activiti.appsApi.getAppDefinitions(); - deployedApp = appDefinitions.data.find((currentApp) => { - return currentApp.modelId === appModel.id; - }); - process = await new ProcessUtil(apiService).startProcessByDefinitionName(appModel.name, app.processName); + deployedAppId = await applicationsService.getAppDefinitionId(appModel.id); + + process = await processUtil.startProcessByDefinitionName(appModel.name, app.processName); await loginPage.login(processUserModel.username, processUserModel.password); }); beforeEach(async () => { await navigationBarPage.clickHomeButton(); - await (new ProcessServicesPage()).goToAppByAppId(deployedApp.id); + await (new ProcessServicesPage()).goToAppByAppId(deployedAppId); await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); await taskPage.formFields().checkFormIsDisplayed(); }); afterAll(async () => { - await apiService.getInstance().activiti.processApi.deleteProcessInstance(process.id); + await processUtil.cancelProcessInstance(process.id); await apiService.loginWithProfile('admin'); - await apiService.getInstance().activiti.adminTenantsApi.deleteTenant(processUserModel.tenantId); + await usersActions.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 deleted file mode 100644 index 552bb525947..00000000000 --- a/e2e/process-services/widgets/typeahead-widget.e2e.ts +++ /dev/null @@ -1,89 +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, ApplicationsUtil, LoginPage, UserModel, UsersActions, Widget } from '@alfresco/adf-testing'; -import { TasksPage } from '../pages/tasks.page'; -import { browser } from 'protractor'; -import { NavigationBarPage } from '../../core/pages/navigation-bar.page'; -import CONSTANTS = require('../../util/constants'); - -describe('Typeahead widget', () => { - - const app = browser.params.resources.Files.WIDGET_CHECK_APP; - - const loginPage = new LoginPage(); - const taskPage = new TasksPage(); - const navigationBarPage = new NavigationBarPage(); - const widget = new Widget(); - - const apiService = new ApiService(); - const usersActions = new UsersActions(apiService); - const applicationsService = new ApplicationsUtil(apiService); - - let user: UserModel; - - beforeAll(async () => { - await apiService.loginWithProfile('admin'); - user = await usersActions.createUser(); - - await apiService.login(user.username, user.password); - await applicationsService.importPublishDeployApp(app.file_path, { renewIdmEntries: true }); - await loginPage.login(user.username, user.password); - }); - - afterAll(async () => { - await apiService.loginWithProfile('admin'); - await apiService.getInstance().activiti.adminTenantsApi.deleteTenant(user.tenantId); - }); - - beforeEach(async () => { - await (await navigationBarPage.navigateToProcessServicesPage()).goToTaskApp(); - await taskPage.tasksListPage().checkTaskListIsLoaded(); - }); - - it('[C307988] Type ahead form control should work for URLs', async () => { - const name = 'typahead widget task'; - const typeaheadWidget = app.TYPE_AHEAD_WIDGET; - await taskPage.createTask({name, formName: typeaheadWidget.formName}); - await expect(await taskPage.taskDetails().getTitle()).toEqual('Activities'); - - await widget.typeahedWidget().checkTypeaheadFieldIsDisplayed(); - await widget.typeahedWidget().fillTypeaheadField(typeaheadWidget.case1.searchTerm); - await widget.typeahedWidget().checkDropDownListIsDisplayed(); - let suggestions = await widget.typeahedWidget().getDropDownList(); - await expect(suggestions.sort()).toEqual(typeaheadWidget.case1.result.sort()); - - await widget.typeahedWidget().fillTypeaheadField(typeaheadWidget.case2.searchTerm); - - await widget.typeahedWidget().checkDropDownListIsDisplayed(); - suggestions = await widget.typeahedWidget().getDropDownList(); - await expect(suggestions.sort()).toEqual(typeaheadWidget.case2.result); - - await widget.typeahedWidget().selectOptionFromDropdown(); - await taskPage.taskDetails().clickCompleteFormTask(); - - await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.COMPLETED_TASKS); - await taskPage.tasksListPage().checkTaskListIsLoaded(); - - await taskPage.tasksListPage().selectRow(name); - await widget.typeahedWidget().checkTypeaheadFieldIsDisplayed(); - - await browser.sleep(1000); - - await expect(await widget.typeahedWidget().getFieldValue('1583773306434')).toBe(typeaheadWidget.case2.result[0]); - }); -}); diff --git a/e2e/process-services/widgets/widget-visibility-condition.e2e.ts b/e2e/process-services/widgets/widget-visibility-condition.e2e.ts index 88d983188eb..57038f09d72 100644 --- a/e2e/process-services/widgets/widget-visibility-condition.e2e.ts +++ b/e2e/process-services/widgets/widget-visibility-condition.e2e.ts @@ -63,9 +63,10 @@ describe('Process-Services - Visibility conditions', () => { const apiService = new ApiService(); const usersActions = new UsersActions(apiService); const applicationsService = new ApplicationsUtil(apiService); + const processUtil = new ProcessUtil(apiService); let appModel; - let deployedApp, process; + let deployedAppId, process; let processUserModel; beforeAll(async () => { @@ -76,25 +77,23 @@ describe('Process-Services - Visibility conditions', () => { await apiService.login(processUserModel.username, processUserModel.password); appModel = await applicationsService.importPublishDeployApp(browser.params.resources.Files.WIDGET_CHECK_APP.file_path); - const appDefinitions = await apiService.getInstance().activiti.appsApi.getAppDefinitions(); - deployedApp = appDefinitions.data.find((currentApp) => { - return currentApp.modelId === appModel.id; - }); - process = await new ProcessUtil(apiService).startProcessByDefinitionName(appModel.name, app.processName); + deployedAppId = await applicationsService.getAppDefinitionId(appModel.id); + + process = await processUtil.startProcessByDefinitionName(appModel.name, app.processName); await loginPage.login(processUserModel.username, processUserModel.password); }); beforeEach(async () => { await navigationBarPage.clickHomeButton(); - await (new ProcessServicesPage()).goToAppByAppId(deployedApp.id); + await (new ProcessServicesPage()).goToAppByAppId(deployedAppId); await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); await taskPage.formFields().checkFormIsDisplayed(); }); afterAll(async () => { - await apiService.getInstance().activiti.processApi.deleteProcessInstance(process.id); + await processUtil.cancelProcessInstance(process.id); await apiService.loginWithProfile('admin'); - await apiService.getInstance().activiti.adminTenantsApi.deleteTenant(processUserModel.tenantId); + await usersActions.deleteTenant(processUserModel.tenantId); }); it('[C309647] Should be able to see Checkbox widget when visibility condition refers to another field with specific value', async () => { diff --git a/e2e/search/components/search-check-list.e2e.ts b/e2e/search/components/search-check-list.e2e.ts index 455cfae8151..ebcb3d4a18f 100644 --- a/e2e/search/components/search-check-list.e2e.ts +++ b/e2e/search/components/search-check-list.e2e.ts @@ -30,6 +30,7 @@ import { SearchBarPage } from '../pages/search-bar.page'; import { NavigationBarPage } from '../../core/pages/navigation-bar.page'; import { SearchConfiguration } from '../search.config'; import { browser } from 'protractor'; +import { NodesApi } from '@alfresco/js-api'; describe('Search Checklist Component', () => { @@ -40,10 +41,11 @@ describe('Search Checklist Component', () => { const navigationBarPage = new NavigationBarPage(); const acsUser = new UserModel(); - const apiService = new ApiService(); + const apiService = new ApiService(); const uploadActions = new UploadActions(apiService); const usersActions = new UsersActions(apiService); + const nodesApi = new NodesApi(apiService.getInstance()); const filterType = { folder: 'Folder', @@ -66,11 +68,11 @@ describe('Search Checklist Component', () => { await apiService.login(acsUser.username, acsUser.password); - createdFolder = await apiService.getInstance().nodes.addNode('-my-', { + createdFolder = await nodesApi.createNode('-my-', { name: nodeNames.folder, nodeType: 'cm:folder' }); - createdFile = await apiService.getInstance().nodes.addNode('-my-', { + createdFile = await nodesApi.createNode('-my-', { name: nodeNames.document, nodeType: 'cm:content' }); diff --git a/e2e/search/components/search-radio.e2e.ts b/e2e/search/components/search-radio.e2e.ts index 316bb6e00c1..c358b3ea28e 100644 --- a/e2e/search/components/search-radio.e2e.ts +++ b/e2e/search/components/search-radio.e2e.ts @@ -31,6 +31,7 @@ import { NavigationBarPage } from '../../core/pages/navigation-bar.page'; import { SearchBarPage } from '../pages/search-bar.page'; import { SearchConfiguration } from '../search.config'; import { browser } from 'protractor'; +import { NodesApi } from '@alfresco/js-api'; describe('Search Radio Component', () => { @@ -42,7 +43,7 @@ describe('Search Radio Component', () => { const acsUser = new UserModel(); const apiService = new ApiService(); - + const nodesApi = new NodesApi(apiService.getInstance()); const uploadActions = new UploadActions(apiService); const usersActions = new UsersActions(apiService); @@ -68,11 +69,11 @@ describe('Search Radio Component', () => { await usersActions.createUser(acsUser); await apiService.login(acsUser.username, acsUser.password); - createdFolder = await apiService.getInstance().nodes.addNode('-my-', { + createdFolder = await nodesApi.createNode('-my-', { name: nodeNames.folder, nodeType: 'cm:folder' }); - createdFile = await apiService.getInstance().nodes.addNode('-my-', { + createdFile = await nodesApi.createNode('-my-', { name: nodeNames.document, nodeType: 'cm:content' }); diff --git a/e2e/search/components/search-sorting-picker.e2e.ts b/e2e/search/components/search-sorting-picker.e2e.ts index fe9c11b235f..304c3abe8b9 100644 --- a/e2e/search/components/search-sorting-picker.e2e.ts +++ b/e2e/search/components/search-sorting-picker.e2e.ts @@ -31,6 +31,7 @@ import { SearchFiltersPage } from '../pages/search-filters.page'; import { ContentServicesPage } from '../../core/pages/content-services.page'; import { browser } from 'protractor'; import { SearchConfiguration } from '../search.config'; +import { NodesApi } from '@alfresco/js-api'; describe('Search Sorting Picker', () => { @@ -58,6 +59,7 @@ describe('Search Sorting Picker', () => { const uploadActions = new UploadActions(apiService); const usersActions = new UsersActions(apiService); + const nodesApi = new NodesApi(apiService.getInstance()); const search = '_png_file.png'; let jsonFile; @@ -234,7 +236,7 @@ describe('Search Sorting Picker', () => { for (let i = 0; i < (numberOfElements - 1); i++) { if (idList[i] && idList[i].trim() !== '') { - promises.push(apiService.getInstance().core.nodesApi.getNode(idList[i])); + promises.push(nodesApi.getNode(idList[i])); } } nodeList = await Promise.all(promises); diff --git a/e2e/search/components/search-text.e2e.ts b/e2e/search/components/search-text.e2e.ts index 08af6215d20..ae3a2eb1c44 100644 --- a/e2e/search/components/search-text.e2e.ts +++ b/e2e/search/components/search-text.e2e.ts @@ -33,6 +33,7 @@ import { SearchFiltersPage } from '../pages/search-filters.page'; import { NavigationBarPage } from '../../core/pages/navigation-bar.page'; import { SearchConfiguration } from '../search.config'; +import { NodesApi } from '@alfresco/js-api'; describe('Search component - Text widget', () => { @@ -45,6 +46,7 @@ describe('Search component - Text widget', () => { const apiService = new ApiService(); const usersActions = new UsersActions(apiService); + const nodesApi = new NodesApi(apiService.getInstance()); const acsUser = new UserModel(); const newFolderModel = new FolderModel({ 'description': 'newDescription' }); @@ -56,7 +58,7 @@ describe('Search component - Text widget', () => { await apiService.login(acsUser.username, acsUser.password); - await apiService.getInstance().nodes.addNode('-my-', { + await nodesApi.createNode('-my-', { 'name': newFolderModel.name, 'nodeType': 'cm:folder', 'properties': diff --git a/e2e/search/pages/search-bar.page.ts b/e2e/search/pages/search-bar.page.ts index 52f12328746..1feeb389df2 100644 --- a/e2e/search/pages/search-bar.page.ts +++ b/e2e/search/pages/search-bar.page.ts @@ -16,13 +16,13 @@ */ import { Locator, browser, by, element, ElementFinder, protractor } from 'protractor'; -import { BrowserVisibility, BrowserActions } from '@alfresco/adf-testing'; +import { BrowserVisibility, BrowserActions, TestElement } from '@alfresco/adf-testing'; export class SearchBarPage { searchIcon = element(by.css(`button[class*='adf-search-button']`)); searchBar = element(by.css(`adf-search-control input`)); - searchBarExpanded = element(by.css(`adf-search-control mat-form-field[class*="mat-focused"] input`)); + searchBarExpanded: TestElement = TestElement.byCss(`adf-search-control mat-form-field[class*="mat-focused"] input`); noResultMessage = element(by.css(`p[class*='adf-search-fixed-text']`)); rowsAuthor: Locator = by.css(`.mat-list-text p[class*='adf-search-fixed-text']`); completeName: Locator = by.css(`h4[class*='adf-search-fixed-text']`); @@ -48,7 +48,7 @@ export class SearchBarPage { } async checkSearchBarIsNotVisible(): Promise { - await BrowserVisibility.waitUntilElementIsNotVisible(this.searchBarExpanded); + await this.searchBarExpanded.waitNotVisible(); } async checkNoResultMessageIsDisplayed(): Promise { @@ -61,12 +61,12 @@ export class SearchBarPage { async enterText(text: string): Promise { await BrowserVisibility.waitUntilElementIsVisible(this.searchBar); - await this.searchBar.sendKeys(text); + await BrowserActions.clearSendKeys(this.searchBar, text); } async enterTextAndPressEnter(text: string): Promise { await BrowserVisibility.waitUntilElementIsVisible(this.searchBar); - await this.searchBar.sendKeys(text); + await BrowserActions.clearSendKeys(this.searchBar, text); await this.searchBar.sendKeys(protractor.Key.ENTER); } diff --git a/e2e/search/search-component.e2e.ts b/e2e/search/search-component.e2e.ts index a99bf23f73a..cc009ce58fd 100644 --- a/e2e/search/search-component.e2e.ts +++ b/e2e/search/search-component.e2e.ts @@ -35,6 +35,7 @@ import { FileModel } from '../models/ACS/file.model'; import { FolderModel } from '../models/ACS/folder.model'; import { NavigationBarPage } from '../core/pages/navigation-bar.page'; import { SearchConfiguration } from './search.config'; +import { NodesApi } from '@alfresco/js-api'; describe('Search component - Search Bar', () => { @@ -58,7 +59,7 @@ describe('Search component - Search Bar', () => { const acsUser = new UserModel(); const apiService = new ApiService(); const usersActions = new UsersActions(apiService); - + const nodesApi = new NodesApi(apiService.getInstance()); const uploadActions = new UploadActions(apiService); const filename = StringUtil.generateRandomString(16); @@ -93,7 +94,7 @@ describe('Search component - Search Bar', () => { const firstFileUploaded = await uploadActions.uploadFile(firstFileModel.location, firstFileModel.name, '-my-'); Object.assign(firstFileModel, firstFileUploaded.entry); - fileHighlightUploaded = await apiService.getInstance().nodes.addNode('-my-', { + fileHighlightUploaded = await nodesApi.createNode('-my-', { 'name': StringUtil.generateRandomString(16), 'nodeType': 'cm:content', 'properties': { @@ -126,11 +127,8 @@ describe('Search component - Search Bar', () => { }); it('[C272798] Search bar should be visible', async () => { - await searchBarPage.checkSearchBarIsNotVisible(); - await searchBarPage.checkSearchIconIsVisible(); + await openSearchBar(); - await searchBarPage.clickOnSearchIcon(); - await searchBarPage.checkSearchBarIsVisible(); await searchBarPage.checkSearchIconIsVisible(); await BrowserActions.closeMenuAndDialogs(); @@ -140,14 +138,14 @@ describe('Search component - Search Bar', () => { }); it('[C272799] Should be possible to hide search bar after input', async () => { - await searchBarPage.checkSearchIconIsVisible(); - await searchBarPage.clickOnSearchIcon(); + await openSearchBar(); + await searchBarPage.enterText(firstFolderModel.shortName); }); it('[C260255] Should display message when searching for an inexistent file', async () => { - await searchBarPage.checkSearchBarIsNotVisible(); - await searchBarPage.clickOnSearchIcon(); + await openSearchBar(); + await searchBarPage.checkNoResultMessageIsNotDisplayed(); await searchBarPage.enterText(search.inactive.name); await searchResultPage.dataTable.waitTillContentLoaded(); @@ -156,8 +154,7 @@ describe('Search component - Search Bar', () => { }); it('[C260256] Should display file/folder in search suggestion when typing first characters', async () => { - await searchBarPage.clickOnSearchIcon(); - await searchBarPage.checkSearchBarIsVisible(); + await openSearchBar(); await searchBarPage.enterText(firstFolderModel.shortName); await searchBarPage.resultTableContainsRow(firstFolderModel.name); @@ -179,8 +176,8 @@ describe('Search component - Search Bar', () => { }); it('[C272800] Should display file/folder in search suggestion when typing name', async () => { - await searchBarPage.clickOnSearchIcon(); - await searchBarPage.checkSearchBarIsVisible(); + await openSearchBar(); + await searchBarPage.enterText(firstFolderModel.name); await searchBarPage.resultTableContainsRow(firstFolderModel.name); @@ -203,8 +200,8 @@ describe('Search component - Search Bar', () => { }); it('[C260257] Should display content when clicking on folder from search suggestions', async () => { - await searchBarPage.clickOnSearchIcon(); - await searchBarPage.checkSearchBarIsVisible(); + await openSearchBar(); + await searchBarPage.enterText(firstFolderModel.shortName); await searchBarPage.resultTableContainsRow(firstFolderModel.name); @@ -227,9 +224,8 @@ describe('Search component - Search Bar', () => { }); it('[C272801] Should display message when searching for non-existent folder', async () => { - await searchBarPage.checkSearchIconIsVisible(); - await searchBarPage.clickOnSearchIcon(); - await searchBarPage.checkSearchBarIsVisible(); + await openSearchBar(); + await searchBarPage.enterTextAndPressEnter(search.inactive.name); await searchResultPage.dataTable.waitTillContentLoaded(); @@ -237,9 +233,8 @@ describe('Search component - Search Bar', () => { }); it('[C272802] Should be able to find an existent folder in search results', async () => { - await searchBarPage.checkSearchIconIsVisible(); - await searchBarPage.clickOnSearchIcon(); - await searchBarPage.checkSearchBarIsVisible(); + await openSearchBar(); + await searchBarPage.enterTextAndPressEnter(firstFolderModel.name); await searchResultPage.dataTable.waitTillContentLoaded(); @@ -247,28 +242,17 @@ describe('Search component - Search Bar', () => { }); it('[C260258] Should be able to find an existent file in search results', async () => { - await searchBarPage.checkSearchIconIsVisible(); - await searchBarPage.clickOnSearchIcon(); - await searchBarPage.checkSearchBarIsVisible(); + await openSearchBar(); + await searchBarPage.enterTextAndPressEnter(firstFileModel.name); await searchResultPage.dataTable.waitTillContentLoaded(); await searchResultPage.checkContentIsDisplayed(firstFileModel.name); }); - it('[C91321] Should be able to use down arrow key when navigating throw suggestions', async () => { - await searchBarPage.checkSearchIconIsVisible(); - await searchBarPage.clickOnSearchIcon(); - await searchBarPage.checkSearchBarIsVisible(); - await searchBarPage.enterText(secondFolder.shortName); - await searchBarPage.pressDownArrowAndEnter(); - await searchResultPage.dataTable.waitTillContentLoaded(); - - await expect(await contentServicesPage.currentFolderName()).toEqual(secondFolder.name); - }); - it('[C290137] Should be able to search by \'%\'', async () => { - await searchBarPage.clickOnSearchIcon(); + await openSearchBar(); + await searchBarPage.enterTextAndPressEnter('%'); await searchResultPage.dataTable.waitTillContentLoaded(); }); @@ -281,9 +265,8 @@ describe('Search component - Search Bar', () => { await LocalStorageUtil.setConfigField('search', JSON.stringify(searchConfiguration)); - await searchBarPage.checkSearchIconIsVisible(); - await searchBarPage.clickOnSearchIcon(); - await searchBarPage.checkSearchBarIsVisible(); + await openSearchBar(); + await searchBarPage.enterTextAndPressEnter(term); await searchResultPage.dataTable.waitTillContentLoaded(); @@ -295,4 +278,14 @@ describe('Search component - Search Bar', () => { await expect(text.includes(`(${term})`)).toBe(true); }); }); + + async function openSearchBar(): Promise { + if (await searchBarPage.searchBarExpanded.isDisplayed()) { + await searchBarPage.clearText(); + await searchBarPage.checkSearchBarIsNotVisible(); + } + + await searchBarPage.clickOnSearchIcon(); + await searchBarPage.checkSearchBarIsVisible(); + } }); diff --git a/e2e/search/search-multiselect.e2e.ts b/e2e/search/search-multiselect.e2e.ts index 869a10c716a..efb6ac10d30 100644 --- a/e2e/search/search-multiselect.e2e.ts +++ b/e2e/search/search-multiselect.e2e.ts @@ -98,7 +98,6 @@ describe('Search Component - Multi-Select Facet', () => { uploadActions.deleteFileOrFolder(txtFileSite.entry.id) ]); - const sitesApi = new SitesApi(apiService.getInstance()); await sitesApi.deleteSite(site.entry.id, { permanent: true }); await navigationBarPage.clickLogoutButton(); }); @@ -216,7 +215,6 @@ describe('Search Component - Multi-Select Facet', () => { await apiService.login(acsUser.username, acsUser.password); - const sitesApi = new SitesApi(apiService.getInstance()); site = await sitesApi.createSite({ title: StringUtil.generateRandomString(8), visibility: 'PUBLIC' @@ -239,7 +237,6 @@ describe('Search Component - Multi-Select Facet', () => { await apiService.loginWithProfile('admin'); await uploadActions.deleteFileOrFolder(txtFile.entry.id); - const sitesApi = new SitesApi(apiService.getInstance()); await sitesApi.deleteSite(site.entry.id, { permanent: true }); }); diff --git a/e2e/search/search-page.e2e.ts b/e2e/search/search-page.e2e.ts index f4952c53270..fba06ae087d 100644 --- a/e2e/search/search-page.e2e.ts +++ b/e2e/search/search-page.e2e.ts @@ -82,7 +82,7 @@ describe('Search component - Search Page', () => { await uploadActions.uploadFile(firstFileModel.location, firstFileModel.name, '-my-'); - await apiService.login(browser.params.testConfig.users.admin.username, browser.params.testConfig.users.admin.password); + await apiService.loginWithProfile('admin'); await uploadActions.createEmptyFiles(adminFileNames, newFolderModelUploaded.entry.id); diff --git a/lib/cli/scripts/kubectl-clean-app.ts b/lib/cli/scripts/kubectl-clean-app.ts index ed2822cb279..26bf4a60131 100644 --- a/lib/cli/scripts/kubectl-clean-app.ts +++ b/lib/cli/scripts/kubectl-clean-app.ts @@ -88,7 +88,7 @@ async function deleteDescriptor(args: ConfigArgs, apiService: any, name: string) try { return await apiService.oauth2Auth.callCustomApi(url, 'DELETE', pathParams, queryParams, headerParams, formParams, bodyParam, contentTypes, accepts); } catch (error) { - logger.error(`Not possible to delete the descriptor ${name} status : ${JSON.stringify(error.status)} ${JSON.stringify(error.response.text)}`); + logger.error(`Not possible to delete the descriptor ${name} status : ${JSON.stringify(error.status)} ${JSON.stringify(error?.response?.text)}`); } } @@ -106,7 +106,7 @@ async function deleteProject(args: ConfigArgs, apiService: any, projectId: strin try { return await apiService.oauth2Auth.callCustomApi(url, 'DELETE', pathParams, queryParams, headerParams, formParams, bodyParam, contentTypes, accepts); } catch (error) { - logger.error(`Not possible to delete the project ${projectId} status : ${JSON.stringify(error.status)} ${JSON.stringify(error.response.text)}`); + logger.error(`Not possible to delete the project ${projectId} status : ${JSON.stringify(error.status)} ${JSON.stringify(error?.response?.text)}`); } } @@ -164,7 +164,7 @@ async function undeployApplication(args: ConfigArgs, apiService: any, name: stri try { return await apiService.oauth2Auth.callCustomApi(url, 'DELETE', pathParams, queryParams, headerParams, formParams, bodyParam, contentTypes, accepts); } catch (error) { - logger.error(`Not possible to undeploy the applications ${name} status : ${JSON.stringify(error.status)} ${JSON.stringify(error.response.text)}`); + logger.error(`Not possible to undeploy the applications ${name} status : ${JSON.stringify(error.status)} ${JSON.stringify(error?.response?.text)}`); } } diff --git a/lib/cli/scripts/scan-env.ts b/lib/cli/scripts/scan-env.ts index 9d6c7c20510..e8a1a148e2a 100644 --- a/lib/cli/scripts/scan-env.ts +++ b/lib/cli/scripts/scan-env.ts @@ -97,9 +97,9 @@ async function handleLoginError(loginError) { checkEnvReachable(loginError); loginAttempts++; if (MAX_ATTEMPTS === loginAttempts) { - if (loginError && loginError.response && loginError.response.text) { + if (loginError && loginError.response && loginError?.response?.text) { try { - const parsedJson = JSON.parse(loginError.response.text); + const parsedJson = JSON.parse(loginError?.response?.text); if (typeof parsedJson === 'object' && parsedJson.error) { const { stackTrace, ...errorWithoutDeprecatedProperty } = parsedJson.error; logger.error(errorWithoutDeprecatedProperty); @@ -208,9 +208,9 @@ async function getFilesCount(): Promise { function handleError(error) { logger.error(` ${red}Error encountered${reset}`); - if (error && error.response && error.response.text) { + if (error && error.response && error?.response?.text) { try { - const parsedJson = JSON.parse(error.response.text); + const parsedJson = JSON.parse(error?.response?.text); if (typeof parsedJson === 'object' && parsedJson.error) { const { stackTrace, ...errorWithoutDeprecatedProperty } = parsedJson.error; logger.error(errorWithoutDeprecatedProperty); diff --git a/lib/content-services/src/lib/audit/audit.service.ts b/lib/content-services/src/lib/audit/audit.service.ts index 39304fbc71c..d7be676e953 100644 --- a/lib/content-services/src/lib/audit/audit.service.ts +++ b/lib/content-services/src/lib/audit/audit.service.ts @@ -17,7 +17,7 @@ import { Injectable } from '@angular/core'; import { Observable, from, throwError } from 'rxjs'; -import { AlfrescoApiService } from '../../../../core/services'; +import { AlfrescoApiService, LogService } from '@alfresco/adf-core'; import { AuditApi, AuditAppPaging, AuditAppEntry, AuditApp, AuditBodyUpdate, AuditEntryPaging, AuditEntryEntry } from '@alfresco/js-api'; import { catchError } from 'rxjs/operators'; @@ -28,8 +28,7 @@ export class AuditService { auditApi: AuditApi; - constructor( - private apiService: AlfrescoApiService) { + constructor(private apiService: AlfrescoApiService, private logService: LogService) { this.auditApi = new AuditApi(this.apiService.getInstance()); } @@ -111,7 +110,7 @@ export class AuditService { } private handleError(error: any): any { - console.error(error); + this.logService.error(error); return throwError(error || 'Server error'); } } diff --git a/lib/content-services/src/lib/social/services/rating.service.ts b/lib/content-services/src/lib/social/services/rating.service.ts index bf24d2f10c2..33208bfdf25 100644 --- a/lib/content-services/src/lib/social/services/rating.service.ts +++ b/lib/content-services/src/lib/social/services/rating.service.ts @@ -15,7 +15,7 @@ * limitations under the License. */ -import { AlfrescoApiService } from '@alfresco/adf-core'; +import { AlfrescoApiService, LogService } from '@alfresco/adf-core'; import { Injectable } from '@angular/core'; import { RatingEntry, RatingBody } from '@alfresco/js-api'; import { from, throwError, Observable } from 'rxjs'; @@ -26,7 +26,7 @@ import { catchError } from 'rxjs/operators'; }) export class RatingService { - constructor(private apiService: AlfrescoApiService) { + constructor(private apiService: AlfrescoApiService, private logService: LogService) { } /** @@ -74,7 +74,7 @@ export class RatingService { } private handleError(error: any): any { - console.error(error); + this.logService.error(error); return throwError(error || 'Server error'); } } diff --git a/lib/core/services/sites.service.ts b/lib/core/services/sites.service.ts index 6faad7c5b04..d4a4573dc8a 100644 --- a/lib/core/services/sites.service.ts +++ b/lib/core/services/sites.service.ts @@ -33,6 +33,7 @@ import { SitesApi } from '@alfresco/js-api'; import { catchError } from 'rxjs/operators'; +import { LogService } from './log.service'; @Injectable({ providedIn: 'root' @@ -41,7 +42,7 @@ export class SitesService { sitesApi: SitesApi; - constructor(private apiService: AlfrescoApiService) { + constructor(private apiService: AlfrescoApiService, private logService: LogService) { this.sitesApi = new SitesApi(apiService.getInstance()); } @@ -305,7 +306,7 @@ export class SitesService { } private handleError(error: any): Observable { - console.error(error); + this.logService.error(error); return throwError(error || 'Server error'); } } 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 5a8d86cd7e3..a14de91cba4 100644 --- a/lib/testing/src/lib/content-services/actions/permission.actions.ts +++ b/lib/testing/src/lib/content-services/actions/permission.actions.ts @@ -15,14 +15,16 @@ * limitations under the License. */ -import { NodeEntry, NodeBodyUpdate } from '@alfresco/js-api'; +import { NodeEntry, NodeBodyUpdate, NodesApi } from '@alfresco/js-api'; import { ApiService } from '../../core/actions/api.service'; export class PermissionActions { api: ApiService; + nodesApi: NodesApi; constructor(apiService: ApiService) { this.api = apiService; + this.nodesApi = new NodesApi(apiService.getInstance()); } addRoleForUser(userName: string, role: string, nodeToUpdate: NodeEntry): Promise { @@ -37,17 +39,17 @@ export class PermissionActions { ] } }; - return this.api.apiService.nodes.updateNode(nodeToUpdate.entry.id, payload); + return this.nodesApi.updateNode(nodeToUpdate.entry.id, payload); } disableInheritedPermissionsForNode(nodeId: string): Promise { const nodeBody = { permissions: { isInheritanceEnabled: false } }; - return this.api.apiService.nodes.updateNode(nodeId, nodeBody, { include: ['permissions'] }); + return this.nodesApi.updateNode(nodeId, nodeBody, { include: ['permissions'] }); } enableInheritedPermissionsForNode(nodeId: string): Promise { const nodeBody = { permissions: { isInheritanceEnabled: true } }; - return this.api.apiService.nodes.updateNode(nodeId, nodeBody, { include: ['permissions'] }); + return this.nodesApi.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 95db1937369..5f6ad2c6f85 100644 --- a/lib/testing/src/lib/content-services/actions/upload.actions.ts +++ b/lib/testing/src/lib/content-services/actions/upload.actions.ts @@ -17,7 +17,7 @@ import * as path from 'path'; import * as fs from 'fs'; -import { NodeEntry } from '@alfresco/js-api'; +import { NodeEntry, UploadApi, NodesApi } from '@alfresco/js-api'; import { ApiUtil } from '../../core/actions/api.util'; import { Logger } from '../../core/utils/logger'; import { ApiService } from '../../core/actions/api.service'; @@ -25,15 +25,19 @@ import { ApiService } from '../../core/actions/api.service'; export class UploadActions { api: ApiService; + uploadApi: UploadApi; + nodesApi: NodesApi; - constructor(alfrescoJsApi: ApiService) { - this.api = alfrescoJsApi; + constructor(apiService: ApiService) { + this.api = apiService; + this.uploadApi = new UploadApi(apiService.getInstance()); + this.nodesApi = new NodesApi(apiService.getInstance()); } async uploadFile(fileLocation, fileName, parentFolderId): Promise { const file = fs.createReadStream(fileLocation); - return this.api.apiService.upload.uploadFile( + return this.uploadApi.uploadFile( file, '', parentFolderId, @@ -56,11 +60,11 @@ export class UploadActions { filesRequest.push(jsonItem); } - return this.api.apiService.nodes.addNode(parentFolderId, filesRequest, {}); + return this.nodesApi.createNode(parentFolderId, filesRequest, {}); } async createFolder(folderName, parentFolderId): Promise { - return this.api.apiService.node.addNode(parentFolderId, { + return this.nodesApi.createNode(parentFolderId, { name: folderName, nodeType: 'cm:folder' }, {}); @@ -69,7 +73,7 @@ export class UploadActions { async deleteFileOrFolder(nodeId) { const apiCall = async () => { try { - return this.api.apiService.node.deleteNode(nodeId, { permanent: true }); + return this.nodesApi.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 0aa03b997f8..ca0e9f6668a 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 @@ -181,7 +181,7 @@ export class ContentNodeSelectorDialogPage { try { await this.contentListPage().dataTablePage().checkRowContentIsDisplayed(name); } catch (e) { - console.error(`failed to get search result :: ${name}`); + Logger.error(`failed to get search result :: ${name}`); } await this.clickContentNodeSelectorResult(name); } diff --git a/lib/testing/src/lib/core/actions/api.service.ts b/lib/testing/src/lib/core/actions/api.service.ts index e387f4b83e4..df4a5bff1f2 100644 --- a/lib/testing/src/lib/core/actions/api.service.ts +++ b/lib/testing/src/lib/core/actions/api.service.ts @@ -15,7 +15,7 @@ * limitations under the License. */ -import { AlfrescoApiCompatibility as AlfrescoApi, AlfrescoApiConfig } from '@alfresco/js-api'; +import { AlfrescoApi, AlfrescoApiConfig } from '@alfresco/js-api'; import { browser } from 'protractor'; import { Logger } from '../utils/logger'; 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 index b857c5f75f2..79f6b1aa60b 100644 --- a/lib/testing/src/lib/core/actions/e2e-request-api.helper.ts +++ b/lib/testing/src/lib/core/actions/e2e-request-api.helper.ts @@ -117,5 +117,6 @@ export class E2eRequestApiHelper { contextRoot, responseType ); + } } 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 1702d3b1ffa..23c14f169c6 100644 --- a/lib/testing/src/lib/core/actions/identity/identity.service.ts +++ b/lib/testing/src/lib/core/actions/identity/identity.service.ts @@ -69,7 +69,7 @@ export class IdentityService { return this.api.performIdentityOperation(path, method, queryParams, postBody); } catch (error) { - Logger.error('Create User - Service error, Response: ', JSON.parse(JSON.stringify(error)).response.text); + Logger.error('Create User - Service error, Response: ', JSON.parse(JSON.stringify(error))?.response?.text); } } 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 adf89b7d1da..f94e2e7065d 100644 --- a/lib/testing/src/lib/core/actions/identity/query.service.ts +++ b/lib/testing/src/lib/core/actions/identity/query.service.ts @@ -220,7 +220,7 @@ export class QueryService { const data = await this.api.performBpmOperation(path, method, queryParams, postBody); return data.list.entries && data.list.entries.length > 0 ? data.list.entries[0].entry.id : null; } catch (error) { - Logger.error('Get Process Instance Id - Service error, Response: ', JSON.parse(JSON.stringify(error)).response.text); + Logger.error('Get Process Instance Id - Service error, Response: ', JSON.parse(JSON.stringify(error))?.response?.text); } }; @@ -246,7 +246,7 @@ export class QueryService { const data = await this.api.performBpmOperation(path, method, queryParams, postBody); return data.list.entries ?? null; } catch (error) { - Logger.error('Get Process Instances - Service error, Response: ', JSON.parse(JSON.stringify(error)).response.text); + Logger.error('Get Process Instances - Service error, Response: ', JSON.parse(JSON.stringify(error))?.response?.text); } }; diff --git a/lib/testing/src/lib/core/actions/users.actions.ts b/lib/testing/src/lib/core/actions/users.actions.ts index 7376139112d..ca2ff38e970 100644 --- a/lib/testing/src/lib/core/actions/users.actions.ts +++ b/lib/testing/src/lib/core/actions/users.actions.ts @@ -19,7 +19,14 @@ import * as path from 'path'; import * as fs from 'fs'; import { browser } from 'protractor'; -import { ImageUploadRepresentation, UserRepresentation } from '@alfresco/js-api'; +import { + UserProfileApi, + AdminUsersApi, + AdminTenantsApi, + PeopleApi, + ImageUploadRepresentation, + UserRepresentation +} from '@alfresco/js-api'; import { IdentityService } from './identity/identity.service'; import { UserModel } from '../models/user.model'; import { ApiService } from './api.service'; @@ -30,9 +37,17 @@ export class UsersActions { api: ApiService; identityService: IdentityService; - - constructor(alfrescoApi: ApiService) { - this.api = alfrescoApi; + peopleApi: PeopleApi; + adminTenantsApi: AdminTenantsApi; + adminUsersApi: AdminUsersApi; + userProfileApi: UserProfileApi; + + constructor(apiService: ApiService) { + this.api = apiService; + this.peopleApi = new PeopleApi(apiService.getInstance()); + this.adminTenantsApi = new AdminTenantsApi(apiService.getInstance()); + this.adminUsersApi = new AdminUsersApi(apiService.getInstance()); + this.userProfileApi = new UserProfileApi(apiService.getInstance()); if (this.api.apiService.isOauthConfiguration()) { this.identityService = new IdentityService(this.api); } @@ -48,7 +63,7 @@ export class UsersActions { try { if (this.api.apiService.isEcmConfiguration() || (this.api.apiService.isEcmBpmConfiguration())) { Logger.log(`Create user ECM ${user.email}`); - await this.api.apiService.core.peopleApi.addPerson({ + await this.peopleApi.createPerson({ id: user.username, email: user.email, firstName: user.firstName, @@ -108,7 +123,7 @@ export class UsersActions { } async createTenantAndUser(email?: string, firstName?: string, lastName?: string, password?: string): Promise { - const newTenant = await this.api.apiService.activiti.adminTenantsApi.createTenant(new Tenant()); + const newTenant = await this.adminTenantsApi.createTenant(new Tenant()); const user = new UserModel({ tenantId: newTenant.id, @@ -118,7 +133,7 @@ export class UsersActions { password }); - return this.api.apiService.activiti.adminUsersApi.createNewUser(user.getAPSModel()); + return this.adminUsersApi.createNewUser(user.getAPSModel()); } async createApsUser(tenantId?: number, email?: string, firstName?: string, lastName?: string, password?: string): Promise { @@ -131,13 +146,17 @@ export class UsersActions { password }); - return this.api.apiService.activiti.adminUsersApi.createNewUser(user.getAPSModel()); + return this.adminUsersApi.createNewUser(user.getAPSModel()); } async changeProfilePictureAps(fileLocation: string): Promise { const pathFile = path.join(browser.params.testConfig.main.rootPath + fileLocation); const file = fs.createReadStream(pathFile); - return this.api.apiService.activiti.profileApi.uploadProfilePicture(file); + return this.userProfileApi.uploadProfilePicture(file); + } + + async deleteTenant(tenantId: number) { + await this.adminTenantsApi.deleteTenant(tenantId); } } diff --git a/lib/testing/src/lib/core/utils/form.util.ts b/lib/testing/src/lib/core/utils/form.util.ts index c5156153ad0..1aad8de911d 100644 --- a/lib/testing/src/lib/core/utils/form.util.ts +++ b/lib/testing/src/lib/core/utils/form.util.ts @@ -16,9 +16,21 @@ */ import { browser } from 'protractor'; +import { ApiService } from '../actions/api.service'; +import { FormModelsApi, FormRepresentation } from '@alfresco/js-api'; export class FormUtil { + api: ApiService; + editorApi: FormModelsApi; + + constructor(apiService?: ApiService) { + if (apiService) { + this.api = apiService; + this.editorApi = new FormModelsApi(apiService.getInstance()); + } + } + static async setForm(value: string): Promise { await browser.executeScript( 'window.adf.setFormInEditor(`' + value + '`);' @@ -30,4 +42,13 @@ export class FormUtil { 'window.adf.setCloudFormInEditor(`' + value + '`);' ); } + + async getFormByName(name: string): Promise { + // @ts-ignore + const forms: any = await this.editorApi.getForms(); + + return forms.data.find((currentForm) => { + return currentForm.name === name; + }); + } } diff --git a/lib/testing/src/lib/core/utils/wait-actions.ts b/lib/testing/src/lib/core/utils/wait-actions.ts index cc052ed60e9..d44d487b1b8 100644 --- a/lib/testing/src/lib/core/utils/wait-actions.ts +++ b/lib/testing/src/lib/core/utils/wait-actions.ts @@ -15,7 +15,7 @@ * limitations under the License. */ -import { NodeEntry } from '@alfresco/js-api'; +import { NodeEntry, NodesApi } from '@alfresco/js-api'; import { ApiService } from '../actions/api.service'; import { ApiUtil } from '../actions/api.util'; import { Logger } from './logger'; @@ -24,8 +24,10 @@ export class WaitActions { DELAY_API_CALL = 5000; apiService: ApiService; + nodesApi: NodesApi; constructor(apiService: ApiService) { + this.nodesApi = new NodesApi(apiService.getInstance()); this.apiService = apiService; } @@ -38,7 +40,7 @@ export class WaitActions { const apiCall = async () => { try { - return this.apiService.getInstance().core.nodesApi.getNode(nodeId); + return this.nodesApi.getNode(nodeId); } catch (error) { Logger.error('Node not present'); return null; @@ -57,7 +59,7 @@ export class WaitActions { const apiCall = async () => { try { - return this.apiService.getInstance().core.nodesApi.getNode(nodeId); + return this.nodesApi.getNode(nodeId); } catch (error) { Logger.error('Node not present'); return null; diff --git a/lib/testing/src/lib/process-services-cloud/actions/tasks.service.ts b/lib/testing/src/lib/process-services-cloud/actions/tasks.service.ts index 548edb30656..a350c39f6fc 100644 --- a/lib/testing/src/lib/process-services-cloud/actions/tasks.service.ts +++ b/lib/testing/src/lib/process-services-cloud/actions/tasks.service.ts @@ -38,7 +38,7 @@ export class TasksService { return this.api.performBpmOperation(path, method, queryParams, postBody) .catch((error) => { - Logger.error('Create Task - Service error, Response: ', JSON.stringify(error.response.text)); + Logger.error('Create Task - Service error, Response: ', JSON.stringify(error?.response?.text)); }); } @@ -56,7 +56,7 @@ export class TasksService { return this.api.performBpmOperation(path, method, queryParams, postBody) .catch((error) => { - Logger.error('Create standalone Task - Service error, Response: ', JSON.stringify(error.response.text)); + Logger.error('Create standalone Task - Service error, Response: ', JSON.stringify(error?.response?.text)); }); } @@ -68,7 +68,7 @@ export class TasksService { return this.api.performBpmOperation(path, method, queryParams, postBody) .catch((error) => { - Logger.error('Complete Task - Service error, Response: ', JSON.stringify(error.response.text)); + Logger.error('Complete Task - Service error, Response: ', JSON.stringify(error?.response?.text)); }); } @@ -81,7 +81,7 @@ export class TasksService { return this.api.performBpmOperation(path, method, queryParams, postBody) .catch((error) => { - Logger.error('claim Task - Service error, Response: ', JSON.stringify(error.response.text)); + Logger.error('claim Task - Service error, Response: ', JSON.stringify(error?.response?.text)); }); } @@ -94,7 +94,7 @@ export class TasksService { return this.api.performBpmOperation(path, method, queryParams, postBody) .catch((error) => { - Logger.error('delete Task - Service error, Response: ', JSON.stringify(error.response.text)); + Logger.error('delete Task - Service error, Response: ', JSON.stringify(error?.response?.text)); }); } @@ -114,7 +114,7 @@ export class TasksService { return this.api.performBpmOperation(path, method, queryParams, postBody) .catch((error) => { - Logger.error('Get Task - Service error, Response: ', JSON.stringify(error.response.text)); + Logger.error('Get Task - Service error, Response: ', JSON.stringify(error?.response?.text)); }); } @@ -126,7 +126,7 @@ export class TasksService { const data = await this.api.performBpmOperation(path, method, queryParams, postBody) .catch((error) => { - Logger.error('Get Task Id Service error, Response: ', JSON.stringify(error.response.text)); + Logger.error('Get Task Id Service error, Response: ', JSON.stringify(error?.response?.text)); }); return data.list.entries && data.list.entries.length > 0 ? data.list.entries[0].entry.id : null; } @@ -140,7 +140,7 @@ export class TasksService { return this.api.performBpmOperation(path, method, queryParams, postBody) .catch((error) => { - Logger.error('Create sub Task - Service error, Response: ', JSON.stringify(error.response.text)); + Logger.error('Create sub Task - Service error, Response: ', JSON.stringify(error?.response?.text)); }); } diff --git a/lib/testing/src/lib/process-services/actions/applications.util.ts b/lib/testing/src/lib/process-services/actions/applications.util.ts index 4288cf474ab..ce3fb165aee 100644 --- a/lib/testing/src/lib/process-services/actions/applications.util.ts +++ b/lib/testing/src/lib/process-services/actions/applications.util.ts @@ -18,7 +18,12 @@ import { Logger } from '../../core/utils/logger'; import { browser } from 'protractor'; import { ApiService } from '../../core/actions/api.service'; -import { AppDefinitionUpdateResultRepresentation } from '@alfresco/js-api'; +import { + AppDefinitionRepresentation, + AppDefinitionsApi, + RuntimeAppDefinitionsApi, + AppDefinitionUpdateResultRepresentation +} from '@alfresco/js-api'; import * as path from 'path'; import * as fs from 'fs'; @@ -30,13 +35,17 @@ export class AppPublish { export class ApplicationsUtil { api: ApiService; + appsApi: RuntimeAppDefinitionsApi; + appDefinitionsApi: AppDefinitionsApi; - constructor(api: ApiService) { - this.api = api; + constructor(apiService: ApiService) { + this.api = apiService; + this.appsApi = new RuntimeAppDefinitionsApi(apiService.getInstance()); + this.appDefinitionsApi = new AppDefinitionsApi(apiService.getInstance()); } async getAppDefinitionId(appModelId: number): Promise { - const appDefinitions = await this.api.getInstance().activiti.appsApi.getAppDefinitions(); + const appDefinitions = await this.appsApi.getAppDefinitions(); let appDefinitionId = -1; appDefinitions.data.forEach((appDefinition) => { @@ -49,55 +58,58 @@ export class ApplicationsUtil { } async publishDeployApp(appId: number): Promise { - const publishApp = await this.api.getInstance().activiti.appsApi.publishAppDefinition(appId, new AppPublish()); + const publishApp = await this.appDefinitionsApi.publishAppDefinition(appId, new AppPublish()); - await this.api.getInstance().activiti.appsApi.deployAppDefinitions({ appDefinitions: [{ id: publishApp.appDefinition.id }] }); + await this.appsApi.deployAppDefinitions({ appDefinitions: [{ id: publishApp.appDefinition.id }] }); return publishApp; } - async importPublishDeployApp(appFileLocation: string, option = {}) { + async importPublishDeployApp(appFileLocation: string, option = {}): Promise { 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 }] }); + await this.appsApi.deployAppDefinitions({ appDefinitions: [{ id: publishApp.appDefinition.id }] }); + return appCreated; } catch (error) { Logger.error('Import Publish Deploy Application - Service error, Response: ', JSON.stringify(error)); + return {}; } } - async importNewVersionAppDefinitionPublishDeployApp(appFileLocation: string, modelId: number) { + async importNewVersionAppDefinitionPublishDeployApp(appFileLocation: string, modelId: number): Promise { 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 appCreated = await this.appDefinitionsApi.updateAppDefinition(modelId, file); - const publishApp = await this.api.getInstance().activiti.appsApi.publishAppDefinition(appCreated.id, new AppPublish()); + const publishApp = await this.appDefinitionsApi.publishAppDefinition(appCreated.id, new AppPublish()); - await this.api.getInstance().activiti.appsApi.deployAppDefinitions({ appDefinitions: [{ id: publishApp.appDefinition.id }] }); + await this.appsApi.deployAppDefinitions({ appDefinitions: [{ id: publishApp.appDefinition.id }] }); return appCreated; } - async importApplication(appFileLocation: string, options = {}): Promise { + async importApplication(appFileLocation: string, options = {}): Promise { try { const file = fs.createReadStream(appFileLocation); - return await this.api.getInstance().activiti.appsDefinitionApi.importAppDefinition(file, options); + return await this.appDefinitionsApi.importAppDefinition(file, options); } catch (error) { - Logger.error('Import Application - Service error, Response: ', JSON.parse(JSON.stringify(error)).response.text); + Logger.error('Import Application - Service error, Response: ', JSON.parse(JSON.stringify(error))?.response?.text); + return {}; } } - async getAppDefinitionByName(appName: string): Promise { + async getAppDefinitionByName(appName: string): Promise { try { - const appDefinitionsList = await this.api.getInstance().activiti.appsApi.getAppDefinitions(); - const appDefinition = appDefinitionsList.data.filter((currentApp) => { + const appDefinitionsList = await this.appsApi.getAppDefinitions(); + return appDefinitionsList.data.find((currentApp) => { return currentApp.name === appName; }); - return appDefinition; } catch (error) { - Logger.error('Get AppDefinitions - Service error, Response: ', JSON.parse(JSON.stringify(error)).response.text); + Logger.error('Get AppDefinitions - Service error, Response: ', JSON.parse(JSON.stringify(error))?.response?.text); + return {}; } } diff --git a/lib/testing/src/lib/process-services/actions/integration.service.ts b/lib/testing/src/lib/process-services/actions/integration.service.ts index 71059261d84..5030ba63266 100644 --- a/lib/testing/src/lib/process-services/actions/integration.service.ts +++ b/lib/testing/src/lib/process-services/actions/integration.service.ts @@ -16,15 +16,19 @@ */ import { ApiService } from '../../core/actions/api.service'; +import { E2eRequestApiHelper } from '../../core/actions/e2e-request-api.helper'; +import { Logger } from '../../core/utils/logger'; export class IntegrationService { api: ApiService; + requestApiHelper: E2eRequestApiHelper; - constructor(api: ApiService) { - this.api = api; + constructor(apiService: ApiService) { + this.api = apiService; + this.requestApiHelper = new E2eRequestApiHelper(apiService); } - addCSIntegration({ name, tenantId, host }): Promise { + async addCSIntegration({ name, tenantId, host }): Promise { const repository = { name, tenantId, @@ -34,12 +38,15 @@ export class IntegrationService { version: '6.1.1', authenticationType: 'basic' }; - return this.api.apiService.activiti.integrationAccountApi.apiClient.callApi('app/rest/integration/alfresco', 'POST', - {}, {}, {}, {}, repository, [], [], Object); + + try { + await this.requestApiHelper.post('activiti-app/app/rest/integration/alfresco', { bodyParam: repository }); + } catch (e) { + Logger.error(e); + } } - authenticateRepository(id: number, body: { username: string, password: string }): Promise { - return this.api.apiService.activiti.integrationAccountApi.apiClient.callApi(`app/rest/integration/alfresco/${id}/account`, 'POST', - {}, {}, {}, body, {}, [], []); + async authenticateRepository(id: number, body: { username: string, password: string }): Promise { + await this.requestApiHelper.post(`activiti-app/app/rest/integration/alfresco/${id}/account`, { bodyParam: body }); } } diff --git a/lib/testing/src/lib/process-services/actions/models.service.ts b/lib/testing/src/lib/process-services/actions/models.service.ts index d98e43c043b..3c2da17303f 100644 --- a/lib/testing/src/lib/process-services/actions/models.service.ts +++ b/lib/testing/src/lib/process-services/actions/models.service.ts @@ -16,38 +16,42 @@ */ import { Logger } from '../../core/utils/logger'; import { ApiService } from '../../core/actions/api.service'; +import { ModelsApi } from '@alfresco/js-api'; +import { ResultListDataRepresentationModelRepresentation } from '@alfresco/js-api/typings/src/api/activiti-rest-api/model/resultListDataRepresentationModelRepresentation'; export class ModelsActions { api: ApiService; + modelsApi: ModelsApi; constructor(api: ApiService) { this.api = api; + this.modelsApi = new ModelsApi(api.getInstance()); } - async deleteVersionModel(modelId) { + async deleteModel(modelId): Promise { try { - return await this.api.apiService.activiti.modelsApi.deleteModel(modelId, { cascade: false, deleteRuntimeApp : true }); + return await this.modelsApi.deleteModel(modelId, { cascade: false, deleteRuntimeApp: true }); } catch (error) { - Logger.error('Delete Model Version - Service error, Response: ', JSON.parse(JSON.stringify(error)).response.text); + Logger.error('Delete Model Version - Service error, Response: ', JSON.parse(JSON.stringify(error))?.response?.text); } } - async deleteEntireModel(modelId) { + async deleteEntireModel(modelId): Promise { try { - return await this.api.apiService.activiti.modelsApi.deleteModel(modelId, { cascade: true, deleteRuntimeApp : true }); + return await this.modelsApi.deleteModel(modelId, { cascade: true, deleteRuntimeApp: true }); } catch (error) { - Logger.error('Delete Model - Service error, Response: ', JSON.parse(JSON.stringify(error)).response.text); + Logger.error('Delete Model - Service error, Response: ', JSON.parse(JSON.stringify(error))?.response?.text); } } - async getModels(opts: any) { + async getModels(opts: any): Promise { const options = opts || {}; let models; try { - models = await this.api.apiService.activiti.modelsApi.getModels(options); + models = await this.modelsApi.getModels(options); } catch (error) { - Logger.error('Get Models - Service error, Response: ', JSON.parse(JSON.stringify(error)).response.text); + Logger.error('Get Models - Service error, Response: ', JSON.parse(JSON.stringify(error))?.response?.text); } return models; } diff --git a/lib/testing/src/lib/process-services/actions/process.util.ts b/lib/testing/src/lib/process-services/actions/process.util.ts index ab5b6f265ca..142c4430662 100644 --- a/lib/testing/src/lib/process-services/actions/process.util.ts +++ b/lib/testing/src/lib/process-services/actions/process.util.ts @@ -19,25 +19,33 @@ import { ApplicationsUtil } from './applications.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'; +import { TasksApi, ProcessInstancesApi, TaskRepresentation, ProcessDefinitionsApi } from '@alfresco/js-api'; export class ProcessUtil { api: ApiService; - - constructor(api: ApiService) { - this.api = api; + processInstancesApi: ProcessInstancesApi; + processDefinitionsApi: ProcessDefinitionsApi; + applicationsUtil: ApplicationsUtil; + tasksApi: TasksApi; + + constructor(apiService: ApiService) { + this.api = apiService; + this.processInstancesApi = new ProcessInstancesApi(apiService.getInstance()); + this.processDefinitionsApi = new ProcessDefinitionsApi(apiService.getInstance()); + this.applicationsUtil = new ApplicationsUtil(apiService); + this.tasksApi = new TasksApi(apiService.getInstance()); } async startProcessByDefinitionName(appName: string, processDefinitionName: string, processName?: string): Promise { try { - const appDefinition = await new ApplicationsUtil(this.api).getAppDefinitionByName(appName); + const appDefinition = await this.applicationsUtil.getAppDefinitionByName(appName); const processDefinition = await this.getProcessDefinitionByName(appDefinition.deploymentId, processDefinitionName); const startProcessOptions: any = { processDefinitionId: processDefinition.id, name: processName ? processName : processDefinitionName + StringUtil.generateRandomString(5).toLowerCase() }; - return this.api.apiService.activiti.processApi.startNewProcessInstance(startProcessOptions); + return this.processInstancesApi.startNewProcessInstance(startProcessOptions); } catch (error) { Logger.error('Start Process - Service error, Response: ', JSON.parse(JSON.stringify(error))); } @@ -45,7 +53,7 @@ export class ProcessUtil { async startProcessByDefinitionNameWithFormValues(appName: string, processDefinitionName: string, values: any, processName?: string): Promise { try { - const appDefinition = await new ApplicationsUtil(this.api).getAppDefinitionByName(appName); + const appDefinition = await this.applicationsUtil.getAppDefinitionByName(appName); const processDefinition = await this.getProcessDefinitionByName(appDefinition.deploymentId, processDefinitionName); @@ -55,7 +63,7 @@ export class ProcessUtil { values }; - return this.api.apiService.activiti.processApi.startNewProcessInstance(startProcessOptions); + return this.processInstancesApi.startNewProcessInstance(startProcessOptions); } catch (error) { Logger.error('Start Process - Service error, Response: ', JSON.parse(JSON.stringify(error))); } @@ -63,10 +71,10 @@ export class ProcessUtil { async startProcessOfApp(appName: string, processName?: string): Promise { try { - const appDefinition = await new ApplicationsUtil(this.api).getAppDefinitionByName(appName); - const processDefinitionList = await this.api.apiService.activiti.processApi.getProcessDefinitions({ deploymentId: appDefinition[0].deploymentId }); + const appDefinition = await this.applicationsUtil.getAppDefinitionByName(appName); + const processDefinitionList = await this.processDefinitionsApi.getProcessDefinitions({ deploymentId: appDefinition.deploymentId }); const startProcessOptions: any = { processDefinitionId: processDefinitionList.data[0].id, name: processName ? processName : StringUtil.generateRandomString(5).toLowerCase() }; - return this.api.apiService.activiti.processApi.startNewProcessInstance(startProcessOptions); + return this.processInstancesApi.startNewProcessInstance(startProcessOptions); } catch (error) { Logger.error('Start Process - Service error, Response: ', JSON.parse(JSON.stringify(error))); } @@ -74,7 +82,7 @@ export class ProcessUtil { async cancelProcessInstance(processInstance: string): Promise { try { - return this.api.apiService.activiti.processApi.deleteProcessInstance(processInstance); + return this.processInstancesApi.deleteProcessInstance(processInstance); } catch (error) { Logger.error('Cancel Process - Service error, Response: ', JSON.parse(JSON.stringify(error))); } @@ -82,7 +90,7 @@ export class ProcessUtil { async getProcessDefinitionByName(deploymentId: string, processName: string): Promise { try { - const processDefinitionList = await this.api.apiService.activiti.processApi.getProcessDefinitions({ deploymentId: deploymentId }); + const processDefinitionList = await this.processDefinitionsApi.getProcessDefinitions({ deploymentId: deploymentId }); const chosenProcess = processDefinitionList.data.find( (processDefinition) => { return processDefinition.name === processName; }); @@ -94,14 +102,14 @@ export class ProcessUtil { async getProcessInstanceByName(processInstanceName: string, processInstanceStatus?: string, maxNumberOfResults?: number): Promise { try { - return await this.api.apiService.activiti.processApi.filterProcessInstances({filter: {name: processInstanceName, state: processInstanceStatus}, size: maxNumberOfResults}); + return await this.processInstancesApi.filterProcessInstances({filter: {name: processInstanceName, state: processInstanceStatus}, size: maxNumberOfResults}); } catch (error) { Logger.error('List process instances using a filter - Service error, Response: ', JSON.parse(JSON.stringify(error))); } } async getProcessTaskId(processId: string): Promise { - const taskList = await this.api.apiService.activiti.taskApi.listTasks({}); + const taskList = await this.tasksApi.listTasks({}); let wantedtask; taskList.data.forEach((task) => { diff --git a/lib/testing/src/lib/process-services/actions/task-actions.util.ts b/lib/testing/src/lib/process-services/actions/task-actions.util.ts index e1dfcf5ab2e..b2124ebfb11 100644 --- a/lib/testing/src/lib/process-services/actions/task-actions.util.ts +++ b/lib/testing/src/lib/process-services/actions/task-actions.util.ts @@ -17,18 +17,21 @@ import { Logger } from '../../core/utils/logger'; import { ApiService } from '../../core/actions/api.service'; +import { TaskActionsApi } from '@alfresco/js-api'; export class TaskActionsUtil { api: ApiService; + taskActionsApi: TaskActionsApi; - constructor(api: ApiService) { - this.api = api; + constructor(apiService: ApiService) { + this.api = apiService; + this.taskActionsApi = new TaskActionsApi(apiService.getInstance()); } async claimTask(taskInstance: string): Promise { try { - return this.api.apiService.activiti.taskActionsApi.claimTask(taskInstance); + return this.taskActionsApi.claimTask(taskInstance); } catch (error) { Logger.error('Claim a Task - Service error, Response: ', JSON.parse(JSON.stringify(error))); } @@ -36,7 +39,7 @@ export class TaskActionsUtil { async unclaimTask(taskInstance: string): Promise { try { - return this.api.apiService.activiti.taskActionsApi.unclaimTask(taskInstance); + return this.taskActionsApi.unclaimTask(taskInstance); } catch (error) { Logger.error('Unclaim a Task - Service error, Response: ', JSON.parse(JSON.stringify(error))); } @@ -44,7 +47,7 @@ export class TaskActionsUtil { async completeTask(taskInstance: string): Promise { try { - return this.api.apiService.activiti.taskActionsApi.completeTask(taskInstance); + return this.taskActionsApi.completeTask(taskInstance); } catch (error) { Logger.error('Complete Task - Service error, Response: ', JSON.parse(JSON.stringify(error))); } diff --git a/lib/testing/src/lib/process-services/actions/task.util.ts b/lib/testing/src/lib/process-services/actions/task.util.ts index b8ff81e407f..062def99b60 100644 --- a/lib/testing/src/lib/process-services/actions/task.util.ts +++ b/lib/testing/src/lib/process-services/actions/task.util.ts @@ -17,19 +17,24 @@ import { Logger } from '../../core/utils/logger'; import { ApiService } from '../../core/actions/api.service'; -import { TaskRepresentation } from '@alfresco/js-api'; +import { TaskFormsApi, TaskRepresentation, TasksApi } from '@alfresco/js-api'; +import { StringUtil } from '../../core/utils/string.util'; export class TaskUtil { api: ApiService; + tasksApi: TasksApi; + taskFormsApi: TaskFormsApi; - constructor(api: ApiService) { - this.api = api; + constructor(apiService: ApiService) { + this.api = apiService; + this.tasksApi = new TasksApi(apiService.getInstance()); + this.taskFormsApi = new TaskFormsApi(apiService.getInstance()); } - async createStandaloneTask(taskName: string): Promise { + async createStandaloneTask(taskName: string = StringUtil.generateRandomString()): Promise { try { - return this.api.getInstance().activiti.taskApi.createNewTask(new TaskRepresentation({ name: taskName })); + return this.tasksApi.createNewTask(new TaskRepresentation({ name: taskName })); } catch (error) { Logger.error('Create Standalone Task - Service error, Response: ', JSON.parse(JSON.stringify(error))); } @@ -37,7 +42,7 @@ export class TaskUtil { async completeTaskForm(taskInstance: string): Promise { try { - return this.api.getInstance().activiti.taskApi.completeTaskForm(taskInstance, { values: { label: null } }); + return this.taskFormsApi.completeTaskForm(taskInstance, { values: { label: null } }); } catch (error) { Logger.error('Complete Task Form - Service error, Response: ', JSON.parse(JSON.stringify(error))); } @@ -45,7 +50,7 @@ export class TaskUtil { async deleteTask(taskInstance: string): Promise { try { - return this.api.apiService.activiti.taskApi.deleteTask(taskInstance); + return this.tasksApi.deleteTask(taskInstance); } catch (error) { Logger.error('Delete Task - Service error, Response: ', JSON.parse(JSON.stringify(error))); } diff --git a/lib/testing/src/lib/process-services/actions/user-filters.util.ts b/lib/testing/src/lib/process-services/actions/user-filters.util.ts index d3489fe233c..1486cf4828a 100644 --- a/lib/testing/src/lib/process-services/actions/user-filters.util.ts +++ b/lib/testing/src/lib/process-services/actions/user-filters.util.ts @@ -17,28 +17,38 @@ import { Logger } from '../../core/utils/logger'; import { ApiService } from '../../core/actions/api.service'; -import { UserFilterOrderRepresentation, UserTaskFilterRepresentation, ResultListDataRepresentationUserProcessInstanceFilterRepresentation } from '@alfresco/js-api'; +import { UserFiltersApi, UserFilterOrderRepresentation, UserTaskFilterRepresentation, ResultListDataRepresentationUserProcessInstanceFilterRepresentation } from '@alfresco/js-api'; export class UserFiltersUtil { apiService: ApiService; + userFiltersApi: UserFiltersApi; constructor(apiService: ApiService) { this.apiService = apiService; + this.userFiltersApi = new UserFiltersApi(apiService.getInstance()); } async createATaskFilter(newTaskFilterName: string, sortType?: string, stateType?: string, assignmentType?: string, iconName?: string, appId?: number): Promise { try { - return this.apiService.getInstance().activiti.userFiltersApi.createUserTaskFilter(new UserTaskFilterRepresentation( + return this.userFiltersApi.createUserTaskFilter(new UserTaskFilterRepresentation( {appId: appId, name: newTaskFilterName, icon: iconName, filter: {sort: sortType, state: stateType, assignment: assignmentType}})); } catch (error) { Logger.error('Create Task Filter - Service error, Response: ', error); } } + async createUserTaskFilter(userTaskFilterRepresentation: UserTaskFilterRepresentation): Promise { + try { + return this.userFiltersApi.createUserTaskFilter(userTaskFilterRepresentation); + } catch (error) { + Logger.error('Create Task Filter - Service error, Response: ', error); + } + } + async orderUserTaskFilters(filtersIdOrder: number[], appId?: number): Promise { try { - return this.apiService.getInstance().activiti.userFiltersApi.orderUserTaskFilters(new UserFilterOrderRepresentation({appId: appId, order: filtersIdOrder})); + return this.userFiltersApi.orderUserTaskFilters(new UserFilterOrderRepresentation({appId: appId, order: filtersIdOrder})); } catch (error) { Logger.error('Re-order the list of user task filters - Service error, Response: ', error); } @@ -46,7 +56,7 @@ export class UserFiltersUtil { async getUserTaskFilters(appId?: number): Promise { try { - return this.apiService.getInstance().activiti.userFiltersApi.getUserTaskFilters({appId: appId}); + return this.userFiltersApi.getUserTaskFilters({appId: appId}); } catch (error) { Logger.error('List task filters - Service error, Response: ', error); } @@ -54,7 +64,7 @@ export class UserFiltersUtil { async getUserProcessFilters(appId?: number): Promise { try { - return this.apiService.getInstance().activiti.userFiltersApi.getUserProcessInstanceFilters({ appId: appId }); + return this.userFiltersApi.getUserProcessInstanceFilters({ appId: appId }); } catch (error) { Logger.error('List process filters - Service error, Response: ', error); return new ResultListDataRepresentationUserProcessInstanceFilterRepresentation(); @@ -63,7 +73,7 @@ export class UserFiltersUtil { async getUserTaskFilterByName(taskFilterName: string, appId?: number): Promise { try { - const taskFiltersList = this.apiService.getInstance().activiti.userFiltersApi.getUserTaskFilters({appId: appId}); + const taskFiltersList = this.userFiltersApi.getUserTaskFilters({appId: appId}); const chosenTaskFilter = (await taskFiltersList).data.find( (taskFilter) => { return taskFilter.name === taskFilterName; }); @@ -75,7 +85,7 @@ export class UserFiltersUtil { async deleteUserTaskFilter(filterId: number): Promise { try { - return this.apiService.getInstance().activiti.userFiltersApi.deleteUserTaskFilter(filterId); + return this.userFiltersApi.deleteUserTaskFilter(filterId); } catch (error) { Logger.error('Delete a task filter - Service error, Response: ', error); } @@ -83,7 +93,7 @@ export class UserFiltersUtil { async updateUserTaskFilter(filterId: number, updatedTaskFilterName?: string, updatedSortType?: string, updatedStateType?: string, updatedAssignmentType?: string, updatedIconName?: string, appId?: number): Promise { try { - return this.apiService.getInstance().activiti.userFiltersApi.updateUserTaskFilter(filterId, new UserTaskFilterRepresentation( + return this.userFiltersApi.updateUserTaskFilter(filterId, new UserTaskFilterRepresentation( {appId: appId, name: updatedTaskFilterName, icon: updatedIconName, filter: {sort: updatedSortType, state: updatedStateType, assignment: updatedAssignmentType}})); } catch (error) { Logger.error('Update a task filter - Service error, Response: ', error); diff --git a/scripts/lint.sh b/scripts/lint.sh index 84079734fa6..4e2a5f99a9d 100755 --- a/scripts/lint.sh +++ b/scripts/lint.sh @@ -8,9 +8,15 @@ if grep "envalfresco" . -R --exclude-dir={node_modules,.history,.idea,scripts,di exit 1 fi -nx affected:lint --parallel --all --maxParallel=9 && \ -npm run lint-e2e && \ -npm run stylelint && \ -npm run spellcheck && \ -npm run license-checker && \ +echo "Lint" +nx affected:lint --parallel --all --maxParallel=9 + +echo "Style Lint" +npm run stylelint + +echo "Spell check" +npm run spellcheck + +echo "License check" +npm run license-checker npm run validate-config diff --git a/scripts/travis/unit-test/content.sh b/scripts/travis/unit-test/content.sh index 857ff183029..f0fc08c6b64 100755 --- a/scripts/travis/unit-test/content.sh +++ b/scripts/travis/unit-test/content.sh @@ -10,7 +10,7 @@ echo "================== AFFECTED_LIBS ${AFFECTED_LIBS} ===================" echo "================== content-services unit ===================" -if [[ $AFFECTED_LIBS =~ "content-services" || "${TRAVIS_EVENT_TYPE}" == "push" ]]; +if [[ $AFFECTED_LIBS =~ "content-services" || "${TRAVIS_EVENT_TYPE}" == "cron" ]]; then ng test content-services --watch=false || exit 1; fi; diff --git a/scripts/travis/unit-test/core-extension.sh b/scripts/travis/unit-test/core-extension.sh index 3d56bfc701a..fa628bd5a59 100755 --- a/scripts/travis/unit-test/core-extension.sh +++ b/scripts/travis/unit-test/core-extension.sh @@ -11,14 +11,14 @@ echo "================== AFFECTED_LIBS ${AFFECTED_LIBS} ===================" echo "================== core unit ===================" -if [[ $AFFECTED_LIBS =~ "core" || "${TRAVIS_EVENT_TYPE}" == "push" ]]; +if [[ $AFFECTED_LIBS =~ "core" || "${TRAVIS_EVENT_TYPE}" == "cron" ]]; then ng test core --watch=false || exit 1; fi; echo "================== extensions unit ===================" -if [[ $AFFECTED_LIBS =~ "extensions" || "${TRAVIS_EVENT_TYPE}" == "push" ]]; +if [[ $AFFECTED_LIBS =~ "extensions" || "${TRAVIS_EVENT_TYPE}" == "cron" ]]; then ng test extensions --watch=false || exit 1; fi; diff --git a/scripts/travis/unit-test/process-cloud.sh b/scripts/travis/unit-test/process-cloud.sh index 502b3d1b39f..92dcb0a2211 100755 --- a/scripts/travis/unit-test/process-cloud.sh +++ b/scripts/travis/unit-test/process-cloud.sh @@ -12,7 +12,7 @@ AFFECTED_LIBS="$(nx affected:libs --base=$BASE_HASH --head=$HEAD_HASH --plain || echo "================== AFFECTED_LIBS ${AFFECTED_LIBS} ===================" echo "================== process-services-cloud unit ===================" -if [[ $AFFECTED_LIBS =~ "process-services-cloud" || "${TRAVIS_EVENT_TYPE}" == "push" ]]; +if [[ $AFFECTED_LIBS =~ "process-services-cloud" || "${TRAVIS_EVENT_TYPE}" == "cron" ]]; then ng test process-services-cloud --watch=false || exit 1; fi; diff --git a/scripts/travis/unit-test/process.sh b/scripts/travis/unit-test/process.sh index 879d225ccfd..5518a0d96ab 100755 --- a/scripts/travis/unit-test/process.sh +++ b/scripts/travis/unit-test/process.sh @@ -12,13 +12,13 @@ AFFECTED_LIBS="$(nx affected:libs --base=$BASE_HASH --head=$HEAD_HASH --plain || echo "================== AFFECTED_LIBS ${AFFECTED_LIBS} ===================" echo "================== process-services unit ===================" -if [[ $AFFECTED_LIBS =~ "process-services" || "${TRAVIS_EVENT_TYPE}" == "push" ]]; +if [[ $AFFECTED_LIBS =~ "process-services" || "${TRAVIS_EVENT_TYPE}" == "cron" ]]; then ng test process-services --watch=false || exit 1; fi; echo "================== insights unit ===================" -if [[ $AFFECTED_LIBS =~ "insights" || "${TRAVIS_EVENT_TYPE}" == "push" ]]; +if [[ $AFFECTED_LIBS =~ "insights" || "${TRAVIS_EVENT_TYPE}" == "cron" ]]; then ng test insights --watch=false || exit 1; fi; diff --git a/tslint.json b/tslint.json index 054d761b394..68d5544972e 100644 --- a/tslint.json +++ b/tslint.json @@ -63,6 +63,7 @@ "no-console": [ true, "log", + "error", "debug", "info", "time",