diff --git a/.gitignore b/.gitignore index 85b3beeed0..b3eccaf018 100644 --- a/.gitignore +++ b/.gitignore @@ -23,3 +23,4 @@ e2e-output/ /protractorFailuresReport coverage/ /desktop.ini +out-tsc diff --git a/.travis.yml b/.travis.yml index 867aecc21f..5ce16b6ce0 100644 --- a/.travis.yml +++ b/.travis.yml @@ -22,7 +22,8 @@ branches: # TRAVIS_PULL_REQUEST == false means is running on dev branch and is not a PR stages: - - name: Warm Up Cache & Lint & Build Dist + - name: Warm Up Cache + - name: Lint & Build Dist - name: Unit test - name: e2e Test - name: Deploy PR @@ -41,10 +42,13 @@ before_install: jobs: include: - - stage: Warm Up Cache & Lint & Build Dist - name: Warm Up Cache & Lint & Build Dist - script: - ./scripts/travis/build/build.sh + - stage: Lint & Build Dist + name: Build Dist + script: ./scripts/travis/build/build.sh || exit 1; + - stage: Lint & Build Dist + name: Lint + script: ./scripts/lint.sh || exit 1; + - stage: Unit test name: Unit test content script: ./scripts/travis/unit-test/content.sh diff --git a/demo-shell/src/app/components/app-layout/app-layout.component.html b/demo-shell/src/app/components/app-layout/app-layout.component.html index 3dc2afb565..27a250f4a6 100644 --- a/demo-shell/src/app/components/app-layout/app-layout.component.html +++ b/demo-shell/src/app/components/app-layout/app-layout.component.html @@ -55,7 +55,7 @@ - + exit_to_app Logout diff --git a/e2e/actions/ACS/node.actions.ts b/e2e/actions/ACS/node.actions.ts index 37291abc24..cf6d22ea4a 100644 --- a/e2e/actions/ACS/node.actions.ts +++ b/e2e/actions/ACS/node.actions.ts @@ -20,8 +20,8 @@ export class NodeActions { lockNode(alfrescoJsApi, nodeId: string, allowOwner?: string) { return alfrescoJsApi.nodes.lockNode(nodeId, { - 'type': allowOwner ? 'ALLOW_OWNER_CHANGES' : 'FULL', - 'lifetime': 'PERSISTENT' + type: allowOwner ? 'ALLOW_OWNER_CHANGES' : 'FULL', + lifetime: 'PERSISTENT' }); } diff --git a/e2e/actions/drop.actions.ts b/e2e/actions/drop.actions.ts index ceb0a43f2f..0393414ab3 100644 --- a/e2e/actions/drop.actions.ts +++ b/e2e/actions/drop.actions.ts @@ -20,11 +20,11 @@ import path = require('path'); import { browser } from 'protractor'; import remote = require('selenium-webdriver/remote'); -const JS_BIND_INPUT = function (target) { +const JS_BIND_INPUT = function(target) { const input = document.createElement('input'); input.type = 'file'; input.style.display = 'none'; - input.addEventListener('change', function (event) { + input.addEventListener('change', function(event) { target.scrollIntoView(true); const rect = target.getBoundingClientRect(); @@ -32,7 +32,7 @@ const JS_BIND_INPUT = function (target) { const y = rect.top + (rect.height >> 1); const data = { files: input.files }; - ['dragenter', 'dragover', 'drop'].forEach(function (name) { + ['dragenter', 'dragover', 'drop'].forEach(function(name) { const mouseEvent: any = document.createEvent('MouseEvent'); mouseEvent.initMouseEvent(name, !0, !0, window, 0, 0, 0, x, y, !1, !1, !1, !1, 0, null); mouseEvent.dataTransfer = data; @@ -46,13 +46,13 @@ const JS_BIND_INPUT = function (target) { return input; }; -const JS_BIND_INPUT_FOLDER = function (target) { +const JS_BIND_INPUT_FOLDER = function(target) { const input: any = document.createElement('input'); input.type = 'file'; input.style.display = 'none'; input.multiple = true; input.webkitdirectory = true; - input.addEventListener('change', function (event) { + input.addEventListener('change', function(event) { target.scrollIntoView(true); const rect = target.getBoundingClientRect(); @@ -60,7 +60,7 @@ const JS_BIND_INPUT_FOLDER = function (target) { const y = rect.top + (rect.height >> 1); const data = { files: input.files }; - ['dragenter', 'dragover', 'drop'].forEach(function (name) { + ['dragenter', 'dragover', 'drop'].forEach(function(name) { const mouseEvent: any = document.createEvent('MouseEvent'); mouseEvent.initMouseEvent(name, !0, !0, window, 0, 0, 0, x, y, !1, !1, !1, !1, 0, null); mouseEvent.dataTransfer = data; @@ -76,31 +76,25 @@ const JS_BIND_INPUT_FOLDER = function (target) { export class DropActions { - dropFile(dropArea, filePath) { + async dropFile(dropArea, filePath) { browser.setFileDetector(new remote.FileDetector()); const absolutePath = path.resolve(path.join(browser.params.testConfig.main.rootPath, filePath)); fs.accessSync(absolutePath, fs.constants.F_OK); - return dropArea.getWebElement().then((element) => { - browser.executeScript(JS_BIND_INPUT, element).then((input: any) => { - input.sendKeys(absolutePath); - - }); - }); + const elem = await dropArea.getWebElement(); + const input: any = await browser.executeScript(JS_BIND_INPUT, elem); + return await input.sendKeys(absolutePath); } - dropFolder(dropArea, folderPath) { + async dropFolder(dropArea, folderPath) { browser.setFileDetector(new remote.FileDetector()); const absolutePath = path.resolve(path.join(browser.params.testConfig.main.rootPath, folderPath)); fs.accessSync(absolutePath, fs.constants.F_OK); - return dropArea.getWebElement().then((element) => { - browser.executeScript(JS_BIND_INPUT_FOLDER, element).then((input: any) => { - input.sendKeys(absolutePath); - - }); - }); + const elem = await dropArea.getWebElement(); + const input: any = await browser.executeScript(JS_BIND_INPUT_FOLDER, elem); + return await input.sendKeys(absolutePath); } } diff --git a/e2e/actions/users.actions.ts b/e2e/actions/users.actions.ts index 85cd0052f8..b53a257638 100644 --- a/e2e/actions/users.actions.ts +++ b/e2e/actions/users.actions.ts @@ -35,7 +35,7 @@ export class UsersActions { } async createApsUser(alfrescoJsApi, tenantId) { - const user = new User({ tenantId: tenantId }); + const user = new User({ tenantId }); await alfrescoJsApi.activiti.adminUsersApi.createNewUser(user); @@ -54,7 +54,7 @@ export class UsersActions { } async createApsUserWithName(alfrescoJsApi, tenantId, email, firstName, lastName) { - const user = new User({ tenantId: tenantId , email: email, firstName: firstName, lastName: lastName}); + const user = new User({ tenantId , email, firstName, lastName}); await alfrescoJsApi.activiti.adminUsersApi.createNewUser(user); diff --git a/e2e/content-services/comments/comment-component.e2e.ts b/e2e/content-services/comments/comment-component.e2e.ts index fa281e77da..5d56174cf4 100644 --- a/e2e/content-services/comments/comment-component.e2e.ts +++ b/e2e/content-services/comments/comment-component.e2e.ts @@ -29,18 +29,18 @@ import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; describe('Comment Component', () => { - const loginPage = new LoginPage(); - const contentServicesPage = new ContentServicesPage(); - const viewerPage = new ViewerPage(); - const commentsPage = new CommentsPage(); + const loginPage: LoginPage = new LoginPage(); + const contentServicesPage: ContentServicesPage = new ContentServicesPage(); + const viewerPage: ViewerPage = new ViewerPage(); + const commentsPage: CommentsPage = new CommentsPage(); const navigationBarPage = new NavigationBarPage(); - const acsUser = new AcsUserModel(); + const acsUser: AcsUserModel = new AcsUserModel(); let userFullName, nodeId; const pngFileModel = new FileModel({ - 'name': resources.Files.ADF_DOCUMENTS.PNG.file_name, - 'location': resources.Files.ADF_DOCUMENTS.PNG.file_location + name: resources.Files.ADF_DOCUMENTS.PNG.file_name, + location: resources.Files.ADF_DOCUMENTS.PNG.file_location }); this.alfrescoJsApi = new AlfrescoApi({ provider: 'ECM', @@ -60,18 +60,17 @@ describe('Comment Component', () => { test: 'Test' }; - beforeAll(async (done) => { + beforeAll(async () => { await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); await this.alfrescoJsApi.core.peopleApi.addPerson(acsUser); - done(); }); afterAll(async () => { await navigationBarPage.clickLogoutButton(); }); - beforeEach(async (done) => { + beforeEach(async () => { await this.alfrescoJsApi.login(acsUser.id, acsUser.password); const pngUploadedFile = await uploadActions.uploadFile(pngFileModel.location, pngFileModel.name, '-my-'); @@ -82,96 +81,95 @@ describe('Comment Component', () => { await loginPage.loginToContentServicesUsingUserModel(acsUser); - navigationBarPage.clickContentServicesButton(); - contentServicesPage.waitForTableBody(); + await navigationBarPage.clickContentServicesButton(); + await contentServicesPage.waitForTableBody(); - done(); }); - afterEach(async (done) => { + afterEach(async () => { await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); await uploadActions.deleteFileOrFolder(nodeId); - done(); + }); it('[C276947] Should be able to add a comment on ACS and view on ADF', async () => { await this.alfrescoJsApi.core.commentsApi.addComment(nodeId, { content: comments.test }); - viewerPage.viewFile(pngFileModel.name); - viewerPage.checkImgViewerIsDisplayed(); - viewerPage.clickInfoButton(); - viewerPage.checkInfoSideBarIsDisplayed(); + await viewerPage.viewFile(pngFileModel.name); + await viewerPage.checkImgViewerIsDisplayed(); + await viewerPage.clickInfoButton(); + await viewerPage.checkInfoSideBarIsDisplayed(); - commentsPage.checkCommentsTabIsSelected(); - commentsPage.checkCommentInputIsDisplayed(); + await commentsPage.checkCommentsTabIsSelected(); + await commentsPage.checkCommentInputIsDisplayed(); - expect(commentsPage.getTotalNumberOfComments()).toEqual('Comments (1)'); - expect(commentsPage.getMessage(0)).toEqual(comments.test); - expect(commentsPage.getUserName(0)).toEqual(userFullName); - expect(commentsPage.getTime(0)).toMatch(/(ago|few)/); + await expect(await commentsPage.getTotalNumberOfComments()).toEqual('Comments (1)'); + await expect(await commentsPage.getMessage(0)).toEqual(comments.test); + await expect(await commentsPage.getUserName(0)).toEqual(userFullName); + await expect(await commentsPage.getTime(0)).toMatch(/(ago|few)/); }); - it('[C276948] Should be able to add a comment on a file', () => { - viewerPage.viewFile(pngFileModel.name); - viewerPage.checkImgViewerIsDisplayed(); - viewerPage.clickInfoButton(); - viewerPage.checkInfoSideBarIsDisplayed(); - viewerPage.clickOnCommentsTab(); + it('[C276948] Should be able to add a comment on a file', async () => { + await viewerPage.viewFile(pngFileModel.name); + await viewerPage.checkImgViewerIsDisplayed(); + await viewerPage.clickInfoButton(); + await viewerPage.checkInfoSideBarIsDisplayed(); + await viewerPage.clickOnCommentsTab(); - commentsPage.addComment(comments.first); - commentsPage.checkUserIconIsDisplayed(0); + await commentsPage.addComment(comments.first); + await commentsPage.checkUserIconIsDisplayed(0); - expect(commentsPage.getTotalNumberOfComments()).toEqual('Comments (1)'); - expect(commentsPage.getMessage(0)).toEqual(comments.first); - expect(commentsPage.getUserName(0)).toEqual(userFullName); - expect(commentsPage.getTime(0)).toMatch(/(ago|few)/); + await expect(await commentsPage.getTotalNumberOfComments()).toEqual('Comments (1)'); + await expect(await commentsPage.getMessage(0)).toEqual(comments.first); + await expect(await commentsPage.getUserName(0)).toEqual(userFullName); + await expect(await commentsPage.getTime(0)).toMatch(/(ago|few)/); }); - it('[C280021] Should be able to add a multiline comment on a file', () => { - viewerPage.viewFile(pngFileModel.name); - viewerPage.checkImgViewerIsDisplayed(); - viewerPage.clickInfoButton(); - viewerPage.checkInfoSideBarIsDisplayed(); - viewerPage.clickOnCommentsTab(); + it('[C280021] Should be able to add a multiline comment on a file', async () => { + await viewerPage.viewFile(pngFileModel.name); + await viewerPage.checkImgViewerIsDisplayed(); + await viewerPage.clickInfoButton(); + await viewerPage.checkInfoSideBarIsDisplayed(); + await viewerPage.clickOnCommentsTab(); - commentsPage.addComment(comments.multiline); - commentsPage.checkUserIconIsDisplayed(0); + await commentsPage.addComment(comments.multiline); + await commentsPage.checkUserIconIsDisplayed(0); - expect(commentsPage.getTotalNumberOfComments()).toEqual('Comments (1)'); - expect(commentsPage.getMessage(0)).toEqual(comments.multiline); - expect(commentsPage.getUserName(0)).toEqual(userFullName); - expect(commentsPage.getTime(0)).toMatch(/(ago|few)/); + await expect(await commentsPage.getTotalNumberOfComments()).toEqual('Comments (1)'); + await expect(await commentsPage.getMessage(0)).toEqual(comments.multiline); + await expect(await commentsPage.getUserName(0)).toEqual(userFullName); + await expect(await commentsPage.getTime(0)).toMatch(/(ago|few)/); - commentsPage.addComment(comments.second); - commentsPage.checkUserIconIsDisplayed(0); + await commentsPage.addComment(comments.second); + await commentsPage.checkUserIconIsDisplayed(0); - expect(commentsPage.getTotalNumberOfComments()).toEqual('Comments (2)'); - expect(commentsPage.getMessage(0)).toEqual(comments.second); - expect(commentsPage.getUserName(0)).toEqual(userFullName); - expect(commentsPage.getTime(0)).toMatch(/(ago|few)/); + await expect(await commentsPage.getTotalNumberOfComments()).toEqual('Comments (2)'); + await expect(await commentsPage.getMessage(0)).toEqual(comments.second); + await expect(await commentsPage.getUserName(0)).toEqual(userFullName); + await expect(await commentsPage.getTime(0)).toMatch(/(ago|few)/); }); - it('[C280022] Should not be able to add an HTML or other code input into the comment input filed', () => { - viewerPage.viewFile(pngFileModel.name); - viewerPage.checkImgViewerIsDisplayed(); - viewerPage.clickInfoButton(); - viewerPage.checkInfoSideBarIsDisplayed(); - viewerPage.clickOnCommentsTab(); + it('[C280022] Should not be able to add an HTML or other code input into the comment input filed', async () => { + await viewerPage.viewFile(pngFileModel.name); + await viewerPage.checkImgViewerIsDisplayed(); + await viewerPage.clickInfoButton(); + await viewerPage.checkInfoSideBarIsDisplayed(); + await viewerPage.clickOnCommentsTab(); - commentsPage.addComment(comments.codeType); - commentsPage.checkUserIconIsDisplayed(0); + await commentsPage.addComment(comments.codeType); + await commentsPage.checkUserIconIsDisplayed(0); - expect(commentsPage.getTotalNumberOfComments()).toEqual('Comments (1)'); - expect(commentsPage.getMessage(0)).toEqual('First name: Last name:'); - expect(commentsPage.getUserName(0)).toEqual(userFullName); - expect(commentsPage.getTime(0)).toMatch(/(ago|few)/); + await expect(await commentsPage.getTotalNumberOfComments()).toEqual('Comments (1)'); + await expect(await commentsPage.getMessage(0)).toEqual('First name: Last name:'); + await expect(await commentsPage.getUserName(0)).toEqual(userFullName); + await expect(await commentsPage.getTime(0)).toMatch(/(ago|few)/); }); describe('Consumer Permissions', () => { let site, pngUploadedFile; - beforeAll(async (done) => { + beforeAll(async () => { await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); site = await this.alfrescoJsApi.core.sitesApi.createSite({ @@ -186,31 +184,29 @@ describe('Comment Component', () => { pngUploadedFile = await uploadActions.uploadFile(pngFileModel.location, pngFileModel.name, site.entry.guid); - loginPage.loginToContentServicesUsingUserModel(acsUser); + await loginPage.loginToContentServicesUsingUserModel(acsUser); - navigationBarPage.clickContentServicesButton(); + await navigationBarPage.clickContentServicesButton(); - done(); }); - afterAll((done) => { - uploadActions.deleteFileOrFolder(pngUploadedFile.entry.id); + afterAll(async () => { + await uploadActions.deleteFileOrFolder(pngUploadedFile.entry.id); - done(); }); - it('[C290147] Should NOT be able to add comments to a site file with Consumer permissions', () => { - navigationBarPage.goToSite(site); - contentServicesPage.checkAcsContainer(); + it('[C290147] Should NOT be able to add comments to a site file with Consumer permissions', async () => { + await navigationBarPage.goToSite(site); + await contentServicesPage.checkAcsContainer(); - viewerPage.viewFile(pngUploadedFile.entry.name); - viewerPage.checkImgViewerIsDisplayed(); - viewerPage.checkInfoButtonIsDisplayed(); - viewerPage.clickInfoButton(); - viewerPage.checkInfoSideBarIsDisplayed(); + await viewerPage.viewFile(pngUploadedFile.entry.name); + await viewerPage.checkImgViewerIsDisplayed(); + await viewerPage.checkInfoButtonIsDisplayed(); + await viewerPage.clickInfoButton(); + await viewerPage.checkInfoSideBarIsDisplayed(); - commentsPage.checkCommentsTabIsSelected(); - commentsPage.checkCommentInputIsNotDisplayed(); + await commentsPage.checkCommentsTabIsSelected(); + await commentsPage.checkCommentInputIsNotDisplayed(); }); }); }); diff --git a/e2e/content-services/directives/create-folder-directive.e2e.ts b/e2e/content-services/directives/create-folder-directive.e2e.ts index ad0b249651..6871af3eb9 100644 --- a/e2e/content-services/directives/create-folder-directive.e2e.ts +++ b/e2e/content-services/directives/create-folder-directive.e2e.ts @@ -24,7 +24,7 @@ import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; import { browser, Key } from 'protractor'; import { NavigationBarPage } from '../../pages/adf/navigationBarPage'; -describe('Create folder directive', function () { +describe('Create folder directive', () => { const loginPage = new LoginPage(); const contentServicesPage = new ContentServicesPage(); @@ -34,7 +34,7 @@ describe('Create folder directive', function () { const acsUser = new AcsUserModel(); const navigationBarPage = new NavigationBarPage(); - beforeAll(async (done) => { + beforeAll(async () => { this.alfrescoJsApi = new AlfrescoApi({ provider: 'ECM', hostEcm: browser.params.testConfig.adf_acs.host @@ -46,106 +46,105 @@ describe('Create folder directive', function () { await loginPage.loginToContentServicesUsingUserModel(acsUser); - contentServicesPage.goToDocumentList(); + await contentServicesPage.goToDocumentList(); - done(); }); afterAll(async () => { await navigationBarPage.clickLogoutButton(); }); - beforeEach(async (done) => { + beforeEach(async () => { await browser.actions().sendKeys(Key.ESCAPE).perform(); - done(); + }); - afterEach(async (done) => { + afterEach(async () => { await browser.actions().sendKeys(Key.ESCAPE).perform(); - done(); + }); - it('[C260154] Should not create the folder if cancel button is clicked', () => { + it('[C260154] Should not create the folder if cancel button is clicked', async () => { const folderName = 'cancelFolder'; - contentServicesPage.clickOnCreateNewFolder(); + await contentServicesPage.clickOnCreateNewFolder(); - createFolderDialog.addFolderName(folderName); - createFolderDialog.clickOnCancelButton(); + await createFolderDialog.addFolderName(folderName); + await createFolderDialog.clickOnCancelButton(); - contentServicesPage.checkContentIsNotDisplayed(folderName); + await contentServicesPage.checkContentIsNotDisplayed(folderName); }); - it('[C260155] Should enable the Create button only when a folder name is present', () => { + it('[C260155] Should enable the Create button only when a folder name is present', async () => { const folderName = 'NotEnableFolder'; - contentServicesPage.clickOnCreateNewFolder(); + await contentServicesPage.clickOnCreateNewFolder(); - createFolderDialog.checkCreateUpdateBtnIsDisabled(); + await createFolderDialog.checkCreateUpdateBtnIsDisabled(); - createFolderDialog.addFolderName(folderName); + await createFolderDialog.addFolderName(folderName); - createFolderDialog.checkCreateUpdateBtnIsEnabled(); + await createFolderDialog.checkCreateUpdateBtnIsEnabled(); }); - it('[C260156] Should not be possible create two folder with the same name', () => { + it('[C260156] Should not be possible create two folder with the same name', async () => { const folderName = 'duplicate'; - contentServicesPage.createNewFolder(folderName); + await contentServicesPage.createNewFolder(folderName); - contentServicesPage.checkContentIsDisplayed(folderName); + await contentServicesPage.checkContentIsDisplayed(folderName); - contentServicesPage.createNewFolder(folderName); + await contentServicesPage.createNewFolder(folderName); - notificationHistoryPage.checkNotifyContains('There\'s already a folder with this name. Try a different name.'); + await notificationHistoryPage.checkNotifyContains('There\'s already a folder with this name. Try a different name.'); }); - it('[C260157] Should be possible create a folder under a folder with the same name', () => { + it('[C260157] Should be possible create a folder under a folder with the same name', async () => { const folderName = 'sameSubFolder'; - contentServicesPage.createNewFolder(folderName); - contentServicesPage.checkContentIsDisplayed(folderName); + await contentServicesPage.createNewFolder(folderName); + await contentServicesPage.checkContentIsDisplayed(folderName); - contentServicesPage.doubleClickRow(folderName); + await contentServicesPage.doubleClickRow(folderName); - contentServicesPage.createNewFolder(folderName); - contentServicesPage.checkContentIsDisplayed(folderName); + await contentServicesPage.createNewFolder(folderName); + await contentServicesPage.checkContentIsDisplayed(folderName); }); - it('[C260158] Should be possible add a folder description when create a new folder', () => { + it('[C260158] Should be possible add a folder description when create a new folder', async () => { const folderName = 'folderDescription'; const description = 'this is the description'; - contentServicesPage.clickOnCreateNewFolder(); + await contentServicesPage.clickOnCreateNewFolder(); - createFolderDialog.addFolderName(folderName); - createFolderDialog.addFolderDescription(description); + await createFolderDialog.addFolderName(folderName); + await createFolderDialog.addFolderDescription(description); - createFolderDialog.clickOnCreateUpdateButton(); + await createFolderDialog.clickOnCreateUpdateButton(); - contentServicesPage.checkContentIsDisplayed(folderName); + await contentServicesPage.checkContentIsDisplayed(folderName); - contentServicesPage.metadataContent(folderName); + await contentServicesPage.metadataContent(folderName); - expect(metadataViewPage.getPropertyText('properties.cm:description')).toEqual('this is the description'); + await expect(await metadataViewPage.getPropertyText('properties.cm:description')).toEqual('this is the description'); }); - it('[C260159] Should not be possible create a folder with banned character', () => { - browser.refresh(); - contentServicesPage.clickOnCreateNewFolder(); + it('[C260159] Should not be possible create a folder with banned character', async () => { + await browser.refresh(); + await contentServicesPage.clickOnCreateNewFolder(); - createFolderDialog.addFolderName('*'); - createFolderDialog.checkCreateUpdateBtnIsDisabled(); - createFolderDialog.addFolderName('<'); - createFolderDialog.checkCreateUpdateBtnIsDisabled(); - createFolderDialog.addFolderName('>'); - createFolderDialog.checkCreateUpdateBtnIsDisabled(); - createFolderDialog.addFolderName('\\'); - createFolderDialog.checkCreateUpdateBtnIsDisabled(); - createFolderDialog.addFolderName('/'); - createFolderDialog.checkCreateUpdateBtnIsDisabled(); - createFolderDialog.addFolderName('?'); - createFolderDialog.checkCreateUpdateBtnIsDisabled(); - createFolderDialog.addFolderName(':'); - createFolderDialog.checkCreateUpdateBtnIsDisabled(); - createFolderDialog.addFolderName('|'); - createFolderDialog.checkCreateUpdateBtnIsDisabled(); + await createFolderDialog.addFolderName('*'); + await createFolderDialog.checkCreateUpdateBtnIsDisabled(); + await createFolderDialog.addFolderName('<'); + await createFolderDialog.checkCreateUpdateBtnIsDisabled(); + await createFolderDialog.addFolderName('>'); + await createFolderDialog.checkCreateUpdateBtnIsDisabled(); + await createFolderDialog.addFolderName('\\'); + await createFolderDialog.checkCreateUpdateBtnIsDisabled(); + await createFolderDialog.addFolderName('/'); + await createFolderDialog.checkCreateUpdateBtnIsDisabled(); + await createFolderDialog.addFolderName('?'); + await createFolderDialog.checkCreateUpdateBtnIsDisabled(); + await createFolderDialog.addFolderName(':'); + await createFolderDialog.checkCreateUpdateBtnIsDisabled(); + await createFolderDialog.addFolderName('|'); + await createFolderDialog.checkCreateUpdateBtnIsDisabled(); }); }); diff --git a/e2e/content-services/directives/create-library-directive.e2e.ts b/e2e/content-services/directives/create-library-directive.e2e.ts index 200e892bb1..de174e3153 100644 --- a/e2e/content-services/directives/create-library-directive.e2e.ts +++ b/e2e/content-services/directives/create-library-directive.e2e.ts @@ -26,7 +26,7 @@ import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; import { StringUtil } from '@alfresco/adf-testing'; import { NavigationBarPage } from '../../pages/adf/navigationBarPage'; -describe('Create library directive', function () { +describe('Create library directive', () => { const loginPage = new LoginPage(); const contentServicesPage = new ContentServicesPage(); @@ -44,7 +44,7 @@ describe('Create library directive', function () { const acsUser = new AcsUserModel(); - beforeAll(async (done) => { + beforeAll(async () => { this.alfrescoJsApi = new AlfrescoApi({ provider: 'ECM', hostEcm: browser.params.testConfig.adf_acs.host @@ -57,222 +57,221 @@ describe('Create library directive', function () { await loginPage.loginToContentServicesUsingUserModel(acsUser); createSite = await this.alfrescoJsApi.core.sitesApi.createSite({ - 'title': StringUtil.generateRandomString(20).toLowerCase(), - 'visibility': 'PUBLIC' + title: StringUtil.generateRandomString(20).toLowerCase(), + visibility: 'PUBLIC' }); - done(); }); afterAll(async () => { await navigationBarPage.clickLogoutButton(); }); - beforeEach((done) => { - contentServicesPage.goToDocumentList(); - contentServicesPage.openCreateLibraryDialog(); - done(); + beforeEach(async () => { + await contentServicesPage.goToDocumentList(); + await contentServicesPage.openCreateLibraryDialog(); + }); - afterEach(() => { - BrowserActions.closeMenuAndDialogs(); + afterEach(async () => { + await BrowserActions.closeMenuAndDialogs(); }); - it('[C290158] Should display the Create Library defaults', () => { - expect(createLibraryDialog.getTitle()).toMatch('Create Library'); - expect(createLibraryDialog.isNameDisplayed()).toBe(true, 'Name input field is not displayed'); - expect(createLibraryDialog.isLibraryIdDisplayed()).toBe(true, 'Library ID field is not displayed'); - expect(createLibraryDialog.isDescriptionDisplayed()).toBe(true, 'Library description is not displayed'); - expect(createLibraryDialog.isPublicDisplayed()).toBe(true, 'Public radio button is not displayed'); - expect(createLibraryDialog.isPrivateDisplayed()).toBe(true, 'Private radio button is not displayed'); - expect(createLibraryDialog.isModeratedDisplayed()).toBe(true, 'Moderated radio button is not displayed'); - expect(createLibraryDialog.isCreateEnabled()).toBe(false, 'Create button is not disabled'); - expect(createLibraryDialog.isCancelEnabled()).toBe(true, 'Cancel button is disabled'); - expect(createLibraryDialog.getSelectedRadio()).toMatch(visibility.public, 'The default visibility is not public'); + it('[C290158] Should display the Create Library defaults', async () => { + await expect(await createLibraryDialog.getTitle()).toMatch('Create Library'); + await expect(await createLibraryDialog.isNameDisplayed()).toBe(true, 'Name input field is not displayed'); + await expect(await createLibraryDialog.isLibraryIdDisplayed()).toBe(true, 'Library ID field is not displayed'); + await expect(await createLibraryDialog.isDescriptionDisplayed()).toBe(true, 'Library description is not displayed'); + await expect(await createLibraryDialog.isPublicDisplayed()).toBe(true, 'Public radio button is not displayed'); + await expect(await createLibraryDialog.isPrivateDisplayed()).toBe(true, 'Private radio button is not displayed'); + await expect(await createLibraryDialog.isModeratedDisplayed()).toBe(true, 'Moderated radio button is not displayed'); + await expect(await createLibraryDialog.isCreateEnabled()).toBe(false, 'Create button is not disabled'); + await expect(await createLibraryDialog.isCancelEnabled()).toBe(true, 'Cancel button is disabled'); + await expect(await createLibraryDialog.getSelectedRadio()).toMatch(visibility.public, 'The default visibility is not public'); }); - it('[C290159] Should close the dialog when clicking Cancel button', () => { + it('[C290159] Should close the dialog when clicking Cancel button', async () => { const libraryName = 'cancelLibrary'; - createLibraryDialog.typeLibraryName(libraryName); + await createLibraryDialog.typeLibraryName(libraryName); - createLibraryDialog.clickCancel(); + await createLibraryDialog.clickCancel(); - createLibraryDialog.waitForDialogToClose(); + await createLibraryDialog.waitForDialogToClose(); }); - it('[C290160] Should create a public library', () => { + it('[C290160] Should create a public library', async () => { const libraryName = StringUtil.generateRandomString(); const libraryDescription = StringUtil.generateRandomString(); - createLibraryDialog.typeLibraryName(libraryName); - createLibraryDialog.typeLibraryDescription(libraryDescription); - createLibraryDialog.selectPublic(); + await createLibraryDialog.typeLibraryName(libraryName); + await createLibraryDialog.typeLibraryDescription(libraryDescription); + await createLibraryDialog.selectPublic(); - expect(createLibraryDialog.getSelectedRadio()).toMatch(visibility.public, 'The visibility is not public'); + await expect(await createLibraryDialog.getSelectedRadio()).toMatch(visibility.public, 'The visibility is not public'); - createLibraryDialog.clickCreate(); - createLibraryDialog.waitForDialogToClose(); + await createLibraryDialog.clickCreate(); + await createLibraryDialog.waitForDialogToClose(); - expect(createLibraryDialog.isDialogOpen()).not.toBe(true, 'The Create Library dialog is not closed'); + await expect(await createLibraryDialog.isDialogOpen()).not.toBe(true, 'The Create Library dialog is not closed'); - customSourcesPage.navigateToCustomSources(); - customSourcesPage.selectMySitesSourceType(); - customSourcesPage.checkRowIsDisplayed(libraryName); + await customSourcesPage.navigateToCustomSources(); + await customSourcesPage.selectMySitesSourceType(); + await customSourcesPage.checkRowIsDisplayed(libraryName); - expect(customSourcesPage.getStatusCell(libraryName)).toMatch('PUBLIC', 'Wrong library status.'); + await expect(await customSourcesPage.getStatusCell(libraryName)).toMatch('PUBLIC', 'Wrong library status.'); }); - it('[C290173] Should create a private library', () => { + it('[C290173] Should create a private library', async () => { const libraryName = StringUtil.generateRandomString(); const libraryDescription = StringUtil.generateRandomString(); - createLibraryDialog.typeLibraryName(libraryName); - createLibraryDialog.typeLibraryDescription(libraryDescription); - createLibraryDialog.selectPrivate(); + await createLibraryDialog.typeLibraryName(libraryName); + await createLibraryDialog.typeLibraryDescription(libraryDescription); + await createLibraryDialog.selectPrivate(); - expect(createLibraryDialog.getSelectedRadio()).toMatch(visibility.private, 'The visibility is not private'); + await expect(await createLibraryDialog.getSelectedRadio()).toMatch(visibility.private, 'The visibility is not private'); - createLibraryDialog.clickCreate(); - createLibraryDialog.waitForDialogToClose(); + await createLibraryDialog.clickCreate(); + await createLibraryDialog.waitForDialogToClose(); - expect(createLibraryDialog.isDialogOpen()).not.toBe(true, 'The Create Library dialog is not closed'); + await expect(await createLibraryDialog.isDialogOpen()).not.toBe(true, 'The Create Library dialog is not closed'); - customSourcesPage.navigateToCustomSources(); - customSourcesPage.selectMySitesSourceType(); - customSourcesPage.checkRowIsDisplayed(libraryName); + await customSourcesPage.navigateToCustomSources(); + await customSourcesPage.selectMySitesSourceType(); + await customSourcesPage.checkRowIsDisplayed(libraryName); - expect(customSourcesPage.getStatusCell(libraryName)).toMatch('PRIVATE', 'Wrong library status.'); + await expect(await customSourcesPage.getStatusCell(libraryName)).toMatch('PRIVATE', 'Wrong library status.'); }); - it('[C290174, C290175] Should create a moderated library with a given Library ID', () => { + it('[C290174, C290175] Should create a moderated library with a given Library ID', async () => { const libraryName = StringUtil.generateRandomString(); const libraryId = StringUtil.generateRandomString(); const libraryDescription = StringUtil.generateRandomString(); - createLibraryDialog.typeLibraryName(libraryName); - createLibraryDialog.typeLibraryId(libraryId); - createLibraryDialog.typeLibraryDescription(libraryDescription); - createLibraryDialog.selectModerated(); + await createLibraryDialog.typeLibraryName(libraryName); + await createLibraryDialog.typeLibraryId(libraryId); + await createLibraryDialog.typeLibraryDescription(libraryDescription); + await createLibraryDialog.selectModerated(); - expect(createLibraryDialog.getSelectedRadio()).toMatch(visibility.moderated, 'The visibility is not moderated'); + await expect(await createLibraryDialog.getSelectedRadio()).toMatch(visibility.moderated, 'The visibility is not moderated'); - createLibraryDialog.clickCreate(); - createLibraryDialog.waitForDialogToClose(); + await createLibraryDialog.clickCreate(); + await createLibraryDialog.waitForDialogToClose(); - expect(createLibraryDialog.isDialogOpen()).not.toBe(true, 'The Create Library dialog is not closed'); + await expect(await createLibraryDialog.isDialogOpen()).not.toBe(true, 'The Create Library dialog is not closed'); - customSourcesPage.navigateToCustomSources(); - customSourcesPage.selectMySitesSourceType(); - customSourcesPage.checkRowIsDisplayed(libraryName); + await customSourcesPage.navigateToCustomSources(); + await customSourcesPage.selectMySitesSourceType(); + await customSourcesPage.checkRowIsDisplayed(libraryName); - expect(customSourcesPage.getStatusCell(libraryName)).toMatch('MODERATED', 'Wrong library status.'); + await expect(await customSourcesPage.getStatusCell(libraryName)).toMatch('MODERATED', 'Wrong library status.'); }); - it('[C290163] Should disable Create button when a mandatory field is not filled in', () => { + it('[C290163] Should disable Create button when a mandatory field is not filled in', async () => { const inputValue = StringUtil.generateRandomString(); - createLibraryDialog.typeLibraryName(inputValue); - createLibraryDialog.clearLibraryId(); - expect(createLibraryDialog.isCreateEnabled()).not.toBe(true, 'The Create button is enabled'); - createLibraryDialog.clearLibraryName(); + await createLibraryDialog.typeLibraryName(inputValue); + await createLibraryDialog.clearLibraryId(); + await expect(await createLibraryDialog.isCreateEnabled()).not.toBe(true, 'The Create button is enabled'); + await createLibraryDialog.clearLibraryName(); - createLibraryDialog.typeLibraryId(inputValue); - expect(createLibraryDialog.isCreateEnabled()).not.toBe(true, 'The Create button is enabled'); - createLibraryDialog.clearLibraryId(); + await createLibraryDialog.typeLibraryId(inputValue); + await expect(await createLibraryDialog.isCreateEnabled()).not.toBe(true, 'The Create button is enabled'); + await createLibraryDialog.clearLibraryId(); - createLibraryDialog.typeLibraryDescription(inputValue); - expect(createLibraryDialog.isCreateEnabled()).not.toBe(true, 'The Create button is enabled'); + await createLibraryDialog.typeLibraryDescription(inputValue); + await expect(await createLibraryDialog.isCreateEnabled()).not.toBe(true, 'The Create button is enabled'); }); - it('[C290164] Should auto-fill in the Library Id built from library name', () => { + it('[C290164] Should auto-fill in the Library Id built from library name', async () => { const name: string[] = ['abcd1234', 'ab cd 12 34', 'ab cd&12+34_@link/*']; const libraryId: string[] = ['abcd1234', 'ab-cd-12-34', 'ab-cd1234link']; - for (let _i = 0; _i < 3; _i++) { - createLibraryDialog.typeLibraryName(name[_i]); - expect(createLibraryDialog.getLibraryIdText()).toMatch(libraryId[_i]); - createLibraryDialog.clearLibraryName(); + for (let i = 0; i < 3; i++) { + await createLibraryDialog.typeLibraryName(name[i]); + await expect(await createLibraryDialog.getLibraryIdText()).toMatch(libraryId[i]); + await createLibraryDialog.clearLibraryName(); } }); - it('[C290176] Should not accept special characters for Library Id', () => { + it('[C290176] Should not accept special characters for Library Id', async () => { const name = 'My Library'; const libraryId: string[] = ['My New Library', 'My+New+Library123!', '<>']; - createLibraryDialog.typeLibraryName(name); + await createLibraryDialog.typeLibraryName(name); - for (let _i = 0; _i < 3; _i++) { - createLibraryDialog.typeLibraryId(libraryId[_i]); - expect(createLibraryDialog.isErrorMessageDisplayed()).toBe(true, 'Error message is not displayed'); - expect(createLibraryDialog.getErrorMessage()).toMatch('Use numbers and letters only'); + for (let i = 0; i < 3; i++) { + await createLibraryDialog.typeLibraryId(libraryId[i]); + await expect(await createLibraryDialog.isErrorMessageDisplayed()).toBe(true, 'Error message is not displayed'); + await expect(await createLibraryDialog.getErrorMessage()).toMatch('Use numbers and letters only'); } }); - it('[C291985] Should not accept less than one character name for Library name', () => { + it('[C291985] Should not accept less than 2 characters for Library name', async () => { const name = 'x'; - const libraryId = 'My New Library'; + const libraryId = 'my-library-id'; - createLibraryDialog.typeLibraryName(name); - createLibraryDialog.typeLibraryId(libraryId); - expect(createLibraryDialog.isErrorMessageDisplayed()).toBe(true, 'Error message is not displayed'); - expect(createLibraryDialog.getErrorMessage()).toMatch('Title must be at least 2 characters long'); + await createLibraryDialog.typeLibraryName(name); + await createLibraryDialog.typeLibraryId(libraryId); + await expect(await createLibraryDialog.isErrorMessageDisplayed()).toBe(true, 'Error message is not displayed'); + await expect(await createLibraryDialog.getErrorMessage()).toMatch('Title must be at least 2 characters long'); }); - it('[C291793] Should display error for Name field filled in with spaces only', () => { + it('[C291793] Should display error for Name field filled in with spaces only', async () => { const name = ' '; const libraryId = StringUtil.generateRandomString(); - createLibraryDialog.typeLibraryName(name); - createLibraryDialog.typeLibraryId(libraryId); + await createLibraryDialog.typeLibraryName(name); + await createLibraryDialog.typeLibraryId(libraryId); - expect(createLibraryDialog.isErrorMessageDisplayed()).toBe(true, 'Error message is not displayed'); - expect(createLibraryDialog.getErrorMessage()).toMatch("Library name can't contain only spaces"); + await expect(await createLibraryDialog.isErrorMessageDisplayed()).toBe(true, 'Error message is not displayed'); + await expect(await createLibraryDialog.getErrorMessage()).toMatch("Library name can't contain only spaces"); }); - it('[C290177] Should not accept a duplicate Library Id', () => { + it('[C290177] Should not accept a duplicate Library Id', async () => { const name = 'My Library'; const libraryId = StringUtil.generateRandomString(); - createLibraryDialog.typeLibraryName(name); - createLibraryDialog.typeLibraryId(libraryId); - createLibraryDialog.clickCreate(); - createLibraryDialog.waitForDialogToClose(); + await createLibraryDialog.typeLibraryName(name); + await createLibraryDialog.typeLibraryId(libraryId); + await createLibraryDialog.clickCreate(); + await createLibraryDialog.waitForDialogToClose(); - contentServicesPage.openCreateLibraryDialog(); + await contentServicesPage.openCreateLibraryDialog(); - createLibraryDialog.typeLibraryName(name); - createLibraryDialog.typeLibraryId(libraryId); - expect(createLibraryDialog.isErrorMessageDisplayed()).toBe(true, 'Error message is not displayed'); - expect(createLibraryDialog.getErrorMessage()).toMatch("This Library ID isn't available. Try a different Library ID."); + await createLibraryDialog.typeLibraryName(name); + await createLibraryDialog.typeLibraryId(libraryId); + await expect(await createLibraryDialog.isErrorMessageDisplayed()).toBe(true, 'Error message is not displayed'); + await expect(await createLibraryDialog.getErrorMessage()).toMatch("This Library ID isn't available. Try a different Library ID."); }); - it('[C290178] Should accept the same library name but different Library Ids', () => { + it('[C290178] Should accept the same library name but different Library Ids', async () => { const name = createSite.entry.title; const libraryId = StringUtil.generateRandomString(); - createLibraryDialog.typeLibraryName(name.toUpperCase()); - createLibraryDialog.typeLibraryId(libraryId); + await createLibraryDialog.typeLibraryName(name.toUpperCase()); + await createLibraryDialog.typeLibraryId(libraryId); - createLibraryDialog.waitForLibraryNameHint(); - expect(createLibraryDialog.getLibraryNameHint()).toMatch('Library name already in use', 'The library name hint is wrong'); + await createLibraryDialog.waitForLibraryNameHint(); + await expect(await createLibraryDialog.getLibraryNameHint()).toMatch('Library name already in use', 'The library name hint is wrong'); - createLibraryDialog.clickCreate(); - createLibraryDialog.waitForDialogToClose(); + await createLibraryDialog.clickCreate(); + await createLibraryDialog.waitForDialogToClose(); - expect(createLibraryDialog.isDialogOpen()).not.toBe(true, 'The Create library dialog remained open'); + await expect(await createLibraryDialog.isDialogOpen()).not.toBe(true, 'The Create library dialog remained open'); }); - it('[C290179] Should not accept more than the expected characters for input fields', () => { + it('[C290179] Should not accept more than the expected characters for input fields', async () => { const name = StringUtil.generateRandomString(257); const libraryId = StringUtil.generateRandomString(73); const libraryDescription = StringUtil.generateRandomString(513); - createLibraryDialog.typeLibraryName(name); - createLibraryDialog.typeLibraryId(libraryId); - createLibraryDialog.typeLibraryDescription(libraryDescription); + await createLibraryDialog.typeLibraryName(name); + await createLibraryDialog.typeLibraryId(libraryId); + await createLibraryDialog.typeLibraryDescription(libraryDescription); - createLibraryDialog.selectPublic(); + await createLibraryDialog.selectPublic(); - expect(createLibraryDialog.getErrorMessages(0)).toMatch('Use 256 characters or less for title'); - expect(createLibraryDialog.getErrorMessages(1)).toMatch('Use 72 characters or less for the URL name'); - expect(createLibraryDialog.getErrorMessages(2)).toMatch('Use 512 characters or less for description'); + await expect(await createLibraryDialog.getErrorMessages(0)).toMatch('Use 256 characters or less for title'); + await expect(await createLibraryDialog.getErrorMessages(1)).toMatch('Use 72 characters or less for the URL name'); + await expect(await createLibraryDialog.getErrorMessages(2)).toMatch('Use 512 characters or less for description'); }); }); diff --git a/e2e/content-services/directives/download-directive.e2e.ts b/e2e/content-services/directives/download-directive.e2e.ts index 252050ef4b..4e141763b6 100644 --- a/e2e/content-services/directives/download-directive.e2e.ts +++ b/e2e/content-services/directives/download-directive.e2e.ts @@ -35,28 +35,28 @@ describe('Version component actions', () => { const acsUser = new AcsUserModel(); const txtFileComma = new FileModel({ - 'name': 'comma,name', - 'location': resources.Files.ADF_DOCUMENTS.TXT.file_location + name: 'comma,name', + location: resources.Files.ADF_DOCUMENTS.TXT.file_location }); const txtFileModel = new FileModel({ - 'name': resources.Files.ADF_DOCUMENTS.TXT.file_name, - 'location': resources.Files.ADF_DOCUMENTS.TXT.file_location + name: resources.Files.ADF_DOCUMENTS.TXT.file_name, + location: resources.Files.ADF_DOCUMENTS.TXT.file_location }); const file0BytesModel = new FileModel({ - 'name': resources.Files.ADF_DOCUMENTS.TXT_0B.file_name, - 'location': resources.Files.ADF_DOCUMENTS.TXT_0B.file_location + name: resources.Files.ADF_DOCUMENTS.TXT_0B.file_name, + location: resources.Files.ADF_DOCUMENTS.TXT_0B.file_location }); const folderInfo = new FolderModel({ - 'name': 'myFolder', - 'location': resources.Files.ADF_DOCUMENTS.TEXT_FOLDER.folder_location + name: 'myFolder', + location: resources.Files.ADF_DOCUMENTS.TEXT_FOLDER.folder_location }); const folderSecond = new FolderModel({ - 'name': 'myrSecondFolder', - 'location': resources.Files.ADF_DOCUMENTS.TEXT_FOLDER.folder_location + name: 'myrSecondFolder', + location: resources.Files.ADF_DOCUMENTS.TEXT_FOLDER.folder_location }); this.alfrescoJsApi = new AlfrescoApi({ @@ -65,7 +65,7 @@ describe('Version component actions', () => { }); const uploadActions = new UploadActions(this.alfrescoJsApi); - beforeAll(async (done) => { + beforeAll(async () => { await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); await this.alfrescoJsApi.core.peopleApi.addPerson(acsUser); @@ -82,10 +82,9 @@ describe('Version component actions', () => { await loginPage.loginToContentServicesUsingUserModel(acsUser); - navigationBarPage.clickContentServicesButton(); - contentServicesPage.waitForTableBody(); + await navigationBarPage.clickContentServicesButton(); + await contentServicesPage.waitForTableBody(); - done(); }); afterAll(async () => { @@ -93,48 +92,48 @@ describe('Version component actions', () => { }); afterEach(async () => { - BrowserVisibility.waitUntilDialogIsClose(); + await BrowserVisibility.waitUntilDialogIsClose(); }); - it('[C260083] Download files - Different size values', () => { - contentListPage.selectRow(txtFileModel.name); - contentServicesPage.clickDownloadButton(); - FileBrowserUtil.isFileDownloaded(txtFileModel.name); - BrowserVisibility.waitUntilDialogIsClose(); + it('[C260083] Download files - Different size values', async () => { + await contentListPage.selectRow(txtFileModel.name); + await contentServicesPage.clickDownloadButton(); + await FileBrowserUtil.isFileDownloaded(txtFileModel.name); + await BrowserVisibility.waitUntilDialogIsClose(); - contentListPage.selectRow(file0BytesModel.name); - contentServicesPage.clickDownloadButton(); - FileBrowserUtil.isFileDownloaded(file0BytesModel.name); + await contentListPage.selectRow(file0BytesModel.name); + await contentServicesPage.clickDownloadButton(); + await FileBrowserUtil.isFileDownloaded(file0BytesModel.name); }); - it('[C260084] Download folder', () => { - contentListPage.selectRow(folderInfo.name); - contentServicesPage.clickDownloadButton(); - FileBrowserUtil.isFileDownloaded(folderInfo.name + '.zip'); + it('[C260084] Download folder', async () => { + await contentListPage.selectRow(folderInfo.name); + await contentServicesPage.clickDownloadButton(); + await FileBrowserUtil.isFileDownloaded(folderInfo.name + '.zip'); }); - it('[C261032] File and Folder', () => { - contentServicesPage.clickMultiSelectToggle(); - contentServicesPage.checkAcsContainer(); - contentListPage.dataTablePage().checkAllRows(); - contentServicesPage.clickDownloadButton(); - FileBrowserUtil.isFileDownloaded('archive.zip'); + it('[C261032] File and Folder', async () => { + await contentServicesPage.clickMultiSelectToggle(); + await contentServicesPage.checkAcsContainer(); + await contentListPage.dataTablePage().checkAllRows(); + await contentServicesPage.clickDownloadButton(); + await FileBrowserUtil.isFileDownloaded('archive.zip'); }); - it('[C261033] Folder and Folder', () => { - contentListPage.selectRow(folderInfo.name); - contentListPage.selectRow(folderSecond.name); + it('[C261033] Folder and Folder', async () => { + await contentListPage.selectRow(folderInfo.name); + await contentListPage.selectRow(folderSecond.name); - contentServicesPage.clickDownloadButton(); + await contentServicesPage.clickDownloadButton(); - FileBrowserUtil.isFileDownloaded('archive.zip'); - BrowserVisibility.waitUntilDialogIsClose(); + await FileBrowserUtil.isFileDownloaded('archive.zip'); + await BrowserVisibility.waitUntilDialogIsClose(); }); - it('[C277757] Download file - Comma in file name', () => { - contentListPage.selectRow(txtFileComma.name); - contentServicesPage.clickDownloadButton(); - FileBrowserUtil.isFileDownloaded(txtFileComma.name); + it('[C277757] Download file - Comma in file name', async () => { + await contentListPage.selectRow(txtFileComma.name); + await contentServicesPage.clickDownloadButton(); + await FileBrowserUtil.isFileDownloaded(txtFileComma.name); }); }); diff --git a/e2e/content-services/directives/edit-folder-directive.e2e.ts b/e2e/content-services/directives/edit-folder-directive.e2e.ts index 19f3cbc81a..424c218520 100644 --- a/e2e/content-services/directives/edit-folder-directive.e2e.ts +++ b/e2e/content-services/directives/edit-folder-directive.e2e.ts @@ -25,7 +25,7 @@ import { NavigationBarPage } from '../../pages/adf/navigationBarPage'; import { FileModel } from '../../models/ACS/fileModel'; import resources = require('../../util/resources'); -describe('Edit folder directive', function () { +describe('Edit folder directive', () => { const loginPage = new LoginPage(); const contentServicesPage = new ContentServicesPage(); @@ -41,15 +41,15 @@ describe('Edit folder directive', function () { }); const pdfFile = new FileModel({ - 'name': resources.Files.ADF_DOCUMENTS.PDF.file_name, - 'location': resources.Files.ADF_DOCUMENTS.PDF.file_location + name: resources.Files.ADF_DOCUMENTS.PDF.file_name, + location: resources.Files.ADF_DOCUMENTS.PDF.file_location }); const uploadActions = new UploadActions(this.alfrescoJsApi); const updateFolderName = StringUtil.generateRandomString(5); let editFolder, anotherFolder, filePdfNode, subFolder; - beforeAll(async (done) => { + beforeAll(async () => { await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); await this.alfrescoJsApi.core.peopleApi.addPerson(acsUser); await this.alfrescoJsApi.core.peopleApi.addPerson(anotherAcsUser); @@ -74,171 +74,173 @@ describe('Edit folder directive', function () { await loginPage.loginToContentServicesUsingUserModel(acsUser); - done(); }); - afterAll(async (done) => { + afterAll(async () => { await navigationBarPage.clickLogoutButton(); await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); await uploadActions.deleteFileOrFolder(editFolder.entry.id); await uploadActions.deleteFileOrFolder(anotherFolder.entry.id); await uploadActions.deleteFileOrFolder(filePdfNode.entry.id); - done(); + }); - beforeEach(async (done) => { - navigationBarPage.clickHomeButton(); - navigationBarPage.clickContentServicesButton(); - contentServicesPage.getContentList().dataTablePage().waitTillContentLoaded(); - done(); + beforeEach(async () => { + await navigationBarPage.clickHomeButton(); + await navigationBarPage.clickContentServicesButton(); + await contentServicesPage.getDocumentList().dataTablePage().waitTillContentLoaded(); + }); + + afterEach(async () => { + await BrowserActions.closeMenuAndDialogs(); }); it('[C260161] Update folder - Cancel button', async () => { - contentServicesPage.getContentList().dataTablePage().selectRow('Display name', editFolder.entry.name); - contentServicesPage.getContentList().dataTablePage().checkRowIsSelected('Display name', editFolder.entry.name); - contentServicesPage.clickOnEditFolder(); - editFolderDialog.checkFolderDialogIsDisplayed(); - expect(editFolderDialog.getDialogTitle()).toBe('Edit folder'); - expect(editFolderDialog.getFolderName()).toBe(editFolder.entry.name); - editFolderDialog.checkCreateUpdateBtnIsEnabled(); - editFolderDialog.checkCancelBtnIsEnabled(); - editFolderDialog.clickOnCancelButton(); - editFolderDialog.checkFolderDialogIsNotDisplayed(); + await contentServicesPage.getDocumentList().dataTablePage().selectRow('Display name', editFolder.entry.name); + await contentServicesPage.getDocumentList().dataTablePage().checkRowIsSelected('Display name', editFolder.entry.name); + await contentServicesPage.clickOnEditFolder(); + await editFolderDialog.checkFolderDialogIsDisplayed(); + await expect(await editFolderDialog.getDialogTitle()).toBe('Edit folder'); + await expect(await editFolderDialog.getFolderName()).toBe(editFolder.entry.name); + await editFolderDialog.checkCreateUpdateBtnIsEnabled(); + await editFolderDialog.checkCancelBtnIsEnabled(); + await editFolderDialog.clickOnCancelButton(); + await editFolderDialog.checkFolderDialogIsNotDisplayed(); }); it('[C260162] Update folder - Introducing letters', async () => { - contentServicesPage.getContentList().dataTablePage().checkContentIsDisplayed('Display name', editFolder.entry.name); - contentServicesPage.getContentList().dataTablePage().selectRow('Display name', editFolder.entry.name); - contentServicesPage.getContentList().dataTablePage().checkRowIsSelected('Display name', editFolder.entry.name); - expect(contentServicesPage.checkEditFolderButtonIsEnabled()).toBe(true); - contentServicesPage.clickOnEditFolder(); - editFolderDialog.checkFolderDialogIsDisplayed(); - editFolderDialog.checkCreateUpdateBtnIsEnabled(); - editFolderDialog.addFolderName(editFolder.entry.name + 'a'); - editFolderDialog.checkCreateUpdateBtnIsEnabled(); - editFolderDialog.clickOnCancelButton(); - editFolderDialog.checkFolderDialogIsNotDisplayed(); - contentServicesPage.getDocumentList().dataTablePage().checkContentIsDisplayed('Display name', editFolder.entry.name); + await contentServicesPage.getDocumentList().dataTablePage().checkContentIsDisplayed('Display name', editFolder.entry.name); + await contentServicesPage.getDocumentList().dataTablePage().selectRow('Display name', editFolder.entry.name); + await contentServicesPage.getDocumentList().dataTablePage().checkRowIsSelected('Display name', editFolder.entry.name); + await expect(await contentServicesPage.isEditFolderButtonEnabled()).toBe(true); + await contentServicesPage.clickOnEditFolder(); + await editFolderDialog.checkFolderDialogIsDisplayed(); + await editFolderDialog.checkCreateUpdateBtnIsEnabled(); + await editFolderDialog.addFolderName(editFolder.entry.name + 'a'); + await editFolderDialog.checkCreateUpdateBtnIsEnabled(); + await editFolderDialog.clickOnCancelButton(); + await editFolderDialog.checkFolderDialogIsNotDisplayed(); + await contentServicesPage.getDocumentList().dataTablePage().checkContentIsDisplayed('Display name', editFolder.entry.name); }); it('[C260163] Update folder name with an existing one', async () => { - contentServicesPage.getContentList().dataTablePage().checkContentIsDisplayed('Display name', editFolder.entry.name); - contentServicesPage.getContentList().dataTablePage().selectRow('Display name', editFolder.entry.name); - contentServicesPage.getContentList().dataTablePage().checkRowIsSelected('Display name', editFolder.entry.name); - expect(contentServicesPage.checkEditFolderButtonIsEnabled()).toBe(true); - contentServicesPage.clickOnEditFolder(); - editFolderDialog.checkFolderDialogIsDisplayed(); - editFolderDialog.checkCreateUpdateBtnIsEnabled(); - editFolderDialog.addFolderName(anotherFolder.entry.name); - editFolderDialog.checkCreateUpdateBtnIsEnabled(); - editFolderDialog.clickOnCreateUpdateButton(); - editFolderDialog.checkFolderDialogIsDisplayed(); - notificationHistoryPage.checkNotifyContains('There\'s already a folder with this name. Try a different name.'); + await contentServicesPage.getDocumentList().dataTablePage().checkContentIsDisplayed('Display name', editFolder.entry.name); + await contentServicesPage.getDocumentList().dataTablePage().selectRow('Display name', editFolder.entry.name); + await contentServicesPage.getDocumentList().dataTablePage().checkRowIsSelected('Display name', editFolder.entry.name); + await expect(await contentServicesPage.isEditFolderButtonEnabled()).toBe(true); + await contentServicesPage.clickOnEditFolder(); + await editFolderDialog.checkFolderDialogIsDisplayed(); + await editFolderDialog.checkCreateUpdateBtnIsEnabled(); + await editFolderDialog.addFolderName(anotherFolder.entry.name); + await editFolderDialog.checkCreateUpdateBtnIsEnabled(); + await editFolderDialog.clickOnCreateUpdateButton(); + await editFolderDialog.checkFolderDialogIsDisplayed(); + await notificationHistoryPage.checkNotifyContains('There\'s already a folder with this name. Try a different name.'); }); it('[C260164] Edit Folder - Unsupported characters', async () => { - contentServicesPage.getContentList().dataTablePage().checkContentIsDisplayed('Display name', editFolder.entry.name); - contentServicesPage.getContentList().dataTablePage().selectRow('Display name', editFolder.entry.name); - contentServicesPage.getContentList().dataTablePage().checkRowIsSelected('Display name', editFolder.entry.name); - contentServicesPage.clickOnEditFolder(); - editFolderDialog.checkFolderDialogIsDisplayed(); + await contentServicesPage.getDocumentList().dataTablePage().checkContentIsDisplayed('Display name', editFolder.entry.name); + await contentServicesPage.getDocumentList().dataTablePage().selectRow('Display name', editFolder.entry.name); + await contentServicesPage.getDocumentList().dataTablePage().checkRowIsSelected('Display name', editFolder.entry.name); + await contentServicesPage.clickOnEditFolder(); + await editFolderDialog.checkFolderDialogIsDisplayed(); - editFolderDialog.addFolderName('a*"<>\\/?:|'); - expect(editFolderDialog.getValidationMessage()).toBe('Folder name can\'t contain these characters * " < > \\ / ? : |'); - editFolderDialog.checkCreateUpdateBtnIsDisabled(); + await editFolderDialog.addFolderName('a*"<>\\/?:|'); + await expect(await editFolderDialog.getValidationMessage()).toBe('Folder name can\'t contain these characters * " < > \\ / ? : |'); + await editFolderDialog.checkCreateUpdateBtnIsDisabled(); - editFolderDialog.addFolderName('a.a'); - editFolderDialog.checkValidationMessageIsNotDisplayed(); - editFolderDialog.checkCreateUpdateBtnIsEnabled(); + await editFolderDialog.addFolderName('a.a'); + await editFolderDialog.checkValidationMessageIsNotDisplayed(); + await editFolderDialog.checkCreateUpdateBtnIsEnabled(); - editFolderDialog.addFolderName('a.'); - expect(editFolderDialog.getValidationMessage()).toBe('Folder name can\'t end with a period .'); - editFolderDialog.checkCreateUpdateBtnIsDisabled(); + await editFolderDialog.addFolderName('a.'); + await expect(await editFolderDialog.getValidationMessage()).toBe('Folder name can\'t end with a period .'); + await editFolderDialog.checkCreateUpdateBtnIsDisabled(); - editFolderDialog.getFolderNameField().clear(); - editFolderDialog.getFolderNameField().sendKeys(protractor.Key.SPACE); - expect(editFolderDialog.getValidationMessage()).toBe('Folder name can\'t contain only spaces'); - editFolderDialog.checkCreateUpdateBtnIsDisabled(); + await BrowserActions.clearSendKeys(editFolderDialog.getFolderNameField(), protractor.Key.SPACE); + await expect(await editFolderDialog.getValidationMessage()).toBe('Folder name can\'t contain only spaces'); + await editFolderDialog.checkCreateUpdateBtnIsDisabled(); - editFolderDialog.addFolderName(editFolder.entry.name); - editFolderDialog.addFolderDescription('a*"<>\\/?:|'); - editFolderDialog.checkValidationMessageIsNotDisplayed(); - editFolderDialog.checkCreateUpdateBtnIsEnabled(); + await editFolderDialog.addFolderName(editFolder.entry.name); + await editFolderDialog.addFolderDescription('a*"<>\\/?:|'); + await editFolderDialog.checkValidationMessageIsNotDisplayed(); + await editFolderDialog.checkCreateUpdateBtnIsEnabled(); - editFolderDialog.addFolderDescription('a.'); - editFolderDialog.checkValidationMessageIsNotDisplayed(); - editFolderDialog.checkCreateUpdateBtnIsEnabled(); + await editFolderDialog.addFolderDescription('a.'); + await editFolderDialog.checkValidationMessageIsNotDisplayed(); + await editFolderDialog.checkCreateUpdateBtnIsEnabled(); - editFolderDialog.addFolderDescription('a.a'); - editFolderDialog.checkValidationMessageIsNotDisplayed(); - editFolderDialog.checkCreateUpdateBtnIsEnabled(); + await editFolderDialog.addFolderDescription('a.a'); + await editFolderDialog.checkValidationMessageIsNotDisplayed(); + await editFolderDialog.checkCreateUpdateBtnIsEnabled(); - editFolderDialog.getFolderDescriptionField().sendKeys(protractor.Key.SPACE); - editFolderDialog.checkValidationMessageIsNotDisplayed(); - editFolderDialog.checkCreateUpdateBtnIsEnabled(); - editFolderDialog.clickOnCancelButton(); - editFolderDialog.checkFolderDialogIsNotDisplayed(); + await editFolderDialog.getFolderDescriptionField().sendKeys(protractor.Key.SPACE); + await editFolderDialog.checkValidationMessageIsNotDisplayed(); + await editFolderDialog.checkCreateUpdateBtnIsEnabled(); + await editFolderDialog.clickOnCancelButton(); + await editFolderDialog.checkFolderDialogIsNotDisplayed(); }); it('[C260166] Enable/Disable edit folder icon - when file selected', async () => { - expect(contentServicesPage.getDocumentList().dataTablePage().getNumberOfSelectedRows()).toBe(0); - expect(contentServicesPage.checkEditFolderButtonIsEnabled()).toBe(false); - contentServicesPage.getContentList().dataTablePage().checkContentIsDisplayed('Display name', filePdfNode.entry.name); - contentServicesPage.getContentList().dataTablePage().selectRow('Display name', filePdfNode.entry.name); - contentServicesPage.getContentList().dataTablePage().checkRowIsSelected('Display name', filePdfNode.entry.name); - expect(contentServicesPage.checkEditFolderButtonIsEnabled()).toBe(false); + await expect(await contentServicesPage.getDocumentList().dataTablePage().getNumberOfSelectedRows()).toBe(0); + await expect(await contentServicesPage.isEditFolderButtonEnabled()).toBe(false); + await contentServicesPage.getDocumentList().dataTablePage().checkContentIsDisplayed('Display name', filePdfNode.entry.name); + await contentServicesPage.getDocumentList().dataTablePage().selectRow('Display name', filePdfNode.entry.name); + await contentServicesPage.getDocumentList().dataTablePage().checkRowIsSelected('Display name', filePdfNode.entry.name); + await expect(await contentServicesPage.isEditFolderButtonEnabled()).toBe(false); }); it('[C260166] Enable/Disable edit folder icon - when multiple folders selected', async () => { - contentServicesPage.clickMultiSelectToggle(); - contentServicesPage.getContentList().dataTablePage().waitTillContentLoaded(); - contentServicesPage.getContentList().dataTablePage().checkAllRowsButtonIsDisplayed().checkAllRows(); - contentServicesPage.getContentList().dataTablePage().waitTillContentLoaded(); - contentServicesPage.getContentList().dataTablePage().checkRowIsChecked('Display name', editFolder.entry.name); - contentServicesPage.getContentList().dataTablePage().checkRowIsChecked('Display name', anotherFolder.entry.name); - contentServicesPage.getContentList().dataTablePage().clickCheckbox('Display name', filePdfNode.entry.name); - contentServicesPage.getContentList().dataTablePage().checkRowIsNotChecked('Display name', filePdfNode.entry.name); - expect(contentServicesPage.getContentList().dataTablePage().getNumberOfSelectedRows()).toBe(2); - expect(contentServicesPage.checkEditFolderButtonIsEnabled()).toBe(false); + await contentServicesPage.clickMultiSelectToggle(); + await contentServicesPage.getDocumentList().dataTablePage().waitTillContentLoaded(); + await contentServicesPage.getDocumentList().dataTablePage().checkAllRowsButtonIsDisplayed(); + await contentServicesPage.getDocumentList().dataTablePage().checkAllRows(); + await contentServicesPage.getDocumentList().dataTablePage().waitTillContentLoaded(); + await contentServicesPage.getDocumentList().dataTablePage().checkRowIsChecked('Display name', editFolder.entry.name); + await contentServicesPage.getDocumentList().dataTablePage().checkRowIsChecked('Display name', anotherFolder.entry.name); + await contentServicesPage.getDocumentList().dataTablePage().clickCheckbox('Display name', filePdfNode.entry.name); + await contentServicesPage.getDocumentList().dataTablePage().checkRowIsNotChecked('Display name', filePdfNode.entry.name); + await expect(await contentServicesPage.getDocumentList().dataTablePage().getNumberOfSelectedRows()).toBe(2); + await expect(await contentServicesPage.isEditFolderButtonEnabled()).toBe(false); }); it('[C260166] Enable/Disable edit folder icon - when single folder selected', async () => { - expect(contentServicesPage.getDocumentList().dataTablePage().getNumberOfSelectedRows()).toBe(0); - contentServicesPage.getContentList().dataTablePage().selectRow('Display name', editFolder.entry.name); - contentServicesPage.getContentList().dataTablePage().checkRowIsSelected('Display name', editFolder.entry.name); - expect(contentServicesPage.getContentList().dataTablePage().getNumberOfSelectedRows()).toBe(1); - expect(contentServicesPage.checkEditFolderButtonIsEnabled()).toBe(true); + await expect(await contentServicesPage.getDocumentList().dataTablePage().getNumberOfSelectedRows()).toBe(0); + await contentServicesPage.getDocumentList().dataTablePage().selectRow('Display name', editFolder.entry.name); + await contentServicesPage.getDocumentList().dataTablePage().checkRowIsSelected('Display name', editFolder.entry.name); + await expect(await contentServicesPage.getDocumentList().dataTablePage().getNumberOfSelectedRows()).toBe(1); + await expect(await contentServicesPage.isEditFolderButtonEnabled()).toBe(true); }); it('[C260165] Update folder name with non-existing one', async () => { - contentServicesPage.getContentList().dataTablePage().checkContentIsDisplayed('Display name', editFolder.entry.name); - contentServicesPage.getContentList().dataTablePage().selectRow('Display name', editFolder.entry.name); - contentServicesPage.getContentList().dataTablePage().checkRowIsSelected('Display name', editFolder.entry.name); - contentServicesPage.clickOnEditFolder(); - editFolderDialog.checkFolderDialogIsDisplayed(); - editFolderDialog.addFolderName(updateFolderName); - editFolderDialog.checkCreateUpdateBtnIsEnabled(); - editFolderDialog.clickOnCreateUpdateButton(); - editFolderDialog.checkFolderDialogIsNotDisplayed(); - contentServicesPage.getDocumentList().dataTablePage().checkContentIsDisplayed('Display name', updateFolderName); + await contentServicesPage.getDocumentList().dataTablePage().checkContentIsDisplayed('Display name', editFolder.entry.name); + await contentServicesPage.getDocumentList().dataTablePage().selectRow('Display name', editFolder.entry.name); + await contentServicesPage.getDocumentList().dataTablePage().checkRowIsSelected('Display name', editFolder.entry.name); + await contentServicesPage.clickOnEditFolder(); + await editFolderDialog.checkFolderDialogIsDisplayed(); + await editFolderDialog.addFolderName(updateFolderName); + await editFolderDialog.checkCreateUpdateBtnIsEnabled(); + await editFolderDialog.clickOnCreateUpdateButton(); + await editFolderDialog.checkFolderDialogIsNotDisplayed(); + await contentServicesPage.getDocumentList().dataTablePage().checkContentIsDisplayed('Display name', updateFolderName); }); describe('Edit Folder - no permission', () => { - beforeEach(async (done) => { - loginPage.loginToContentServicesUsingUserModel(anotherAcsUser); - BrowserActions.getUrl(browser.params.testConfig.adf.url + '/files/' + editFolder.entry.id); - contentServicesPage.getContentList().dataTablePage().waitTillContentLoaded(); - done(); + beforeEach(async () => { + await loginPage.loginToContentServicesUsingUserModel(anotherAcsUser); + await BrowserActions.getUrl(browser.params.testConfig.adf.url + '/files/' + editFolder.entry.id); + await contentServicesPage.getDocumentList().dataTablePage().waitTillContentLoaded(); + }); it('[C260167] Edit folder without permission', async () => { - contentServicesPage.getContentList().dataTablePage().checkContentIsDisplayed('Display name', subFolder.entry.name); - contentServicesPage.getContentList().dataTablePage().selectRow('Display name', subFolder.entry.name); - contentServicesPage.getContentList().dataTablePage().checkRowIsSelected('Display name', subFolder.entry.name); - expect(contentServicesPage.checkEditFolderButtonIsEnabled()).toBe(false); + await contentServicesPage.getDocumentList().dataTablePage().checkContentIsDisplayed('Display name', subFolder.entry.name); + await contentServicesPage.getDocumentList().dataTablePage().selectRow('Display name', subFolder.entry.name); + await contentServicesPage.getDocumentList().dataTablePage().checkRowIsSelected('Display name', subFolder.entry.name); + await expect(await contentServicesPage.isEditFolderButtonEnabled()).toBe(false); }); }); diff --git a/e2e/content-services/directives/favorite-directive.e2e.ts b/e2e/content-services/directives/favorite-directive.e2e.ts index 5291c6ed6a..79af6d474e 100644 --- a/e2e/content-services/directives/favorite-directive.e2e.ts +++ b/e2e/content-services/directives/favorite-directive.e2e.ts @@ -27,7 +27,7 @@ import { NavigationBarPage } from '../../pages/adf/navigationBarPage'; import { CustomSources } from '../../pages/adf/demo-shell/customSourcesPage'; import { TrashcanPage } from '../../pages/adf/trashcanPage'; -describe('Favorite directive', function () { +describe('Favorite directive', () => { const loginPage = new LoginPage(); const contentServicesPage = new ContentServicesPage(); @@ -43,14 +43,14 @@ describe('Favorite directive', function () { hostEcm: browser.params.testConfig.adf_acs.host }); const pdfFile = new FileModel({ - 'name': resources.Files.ADF_DOCUMENTS.PDF.file_name, - 'location': resources.Files.ADF_DOCUMENTS.PDF.file_location + name: resources.Files.ADF_DOCUMENTS.PDF.file_name, + location: resources.Files.ADF_DOCUMENTS.PDF.file_location }); const uploadActions = new UploadActions(this.alfrescoJsApi); let testFolder1, testFolder2, testFolder3, testFolder4, testFile; - beforeAll(async (done) => { + beforeAll(async () => { await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); await this.alfrescoJsApi.core.peopleApi.addPerson(acsUser); await this.alfrescoJsApi.login(acsUser.id, acsUser.password); @@ -62,161 +62,161 @@ describe('Favorite directive', function () { testFile = await uploadActions.uploadFile(pdfFile.location, pdfFile.name, '-my-'); await loginPage.loginToContentServicesUsingUserModel(acsUser); - contentServicesPage.goToDocumentList(); - done(); + await contentServicesPage.goToDocumentList(); + }); - afterAll(async (done) => { + afterAll(async () => { await navigationBarPage.clickLogoutButton(); await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); await uploadActions.deleteFileOrFolder(testFolder1.entry.id); await uploadActions.deleteFileOrFolder(testFolder2.entry.id); await uploadActions.deleteFileOrFolder(testFolder3.entry.id); await uploadActions.deleteFileOrFolder(testFolder4.entry.id); - done(); + }); - beforeEach(async (done) => { - navigationBarPage.clickContentServicesButton(); - contentServicesPage.getContentList().dataTablePage().waitTillContentLoaded(); - done(); + beforeEach(async () => { + await navigationBarPage.clickContentServicesButton(); + await contentServicesPage.getDocumentList().dataTablePage().waitTillContentLoaded(); + }); it('[C260247] Should be able to mark a file as favorite', async () => { - contentServicesPage.getContentList().dataTablePage().checkContentIsDisplayed('Display name', testFile.entry.name); - contentServicesPage.getContentList().dataTablePage().selectRow('Display name', testFile.entry.name); - contentServicesPage.getContentList().dataTablePage().checkRowIsSelected('Display name', testFile.entry.name); - contentServicesPage.clickOnFavoriteButton(); - contentServicesPage.checkIsMarkedFavorite(); - contentServicesPage.getContentList().dataTablePage().checkRowIsSelected('Display name', testFile.entry.name); - customSourcesPage.navigateToCustomSources(); - customSourcesPage.selectFavoritesSourceType(); - customSourcesPage.checkRowIsDisplayed(testFile.entry.name); + await contentServicesPage.getDocumentList().dataTablePage().checkContentIsDisplayed('Display name', testFile.entry.name); + await contentServicesPage.getDocumentList().dataTablePage().selectRow('Display name', testFile.entry.name); + await contentServicesPage.getDocumentList().dataTablePage().checkRowIsSelected('Display name', testFile.entry.name); + await contentServicesPage.clickOnFavoriteButton(); + await contentServicesPage.checkIsMarkedFavorite(); + await contentServicesPage.getDocumentList().dataTablePage().checkRowIsSelected('Display name', testFile.entry.name); + await customSourcesPage.navigateToCustomSources(); + await customSourcesPage.selectFavoritesSourceType(); + await customSourcesPage.checkRowIsDisplayed(testFile.entry.name); - navigationBarPage.clickContentServicesButton(); - contentServicesPage.getContentList().dataTablePage().waitTillContentLoaded(); - contentServicesPage.getContentList().dataTablePage().checkContentIsDisplayed('Display name', testFile.entry.name); - contentServicesPage.getContentList().dataTablePage().selectRow('Display name', testFile.entry.name); - contentServicesPage.getContentList().dataTablePage().checkRowIsSelected('Display name', testFile.entry.name); - contentServicesPage.clickOnFavoriteButton(); - contentServicesPage.checkIsNotMarkedFavorite(); - customSourcesPage.navigateToCustomSources(); - customSourcesPage.selectFavoritesSourceType(); - customSourcesPage.checkRowIsNotDisplayed(testFile.entry.name); + await navigationBarPage.clickContentServicesButton(); + await contentServicesPage.getDocumentList().dataTablePage().waitTillContentLoaded(); + await contentServicesPage.getDocumentList().dataTablePage().checkContentIsDisplayed('Display name', testFile.entry.name); + await contentServicesPage.getDocumentList().dataTablePage().selectRow('Display name', testFile.entry.name); + await contentServicesPage.getDocumentList().dataTablePage().checkRowIsSelected('Display name', testFile.entry.name); + await contentServicesPage.clickOnFavoriteButton(); + await contentServicesPage.checkIsNotMarkedFavorite(); + await customSourcesPage.navigateToCustomSources(); + await customSourcesPage.selectFavoritesSourceType(); + await customSourcesPage.checkRowIsNotDisplayed(testFile.entry.name); }); it('[C260249] Should be able to mark a folder as favorite', async () => { - contentServicesPage.getContentList().dataTablePage().checkContentIsDisplayed('Display name', testFolder1.entry.name); - contentServicesPage.getContentList().dataTablePage().selectRow('Display name', testFolder1.entry.name); - contentServicesPage.getContentList().dataTablePage().checkRowIsSelected('Display name', testFolder1.entry.name); - contentServicesPage.clickOnFavoriteButton(); - contentServicesPage.checkIsMarkedFavorite(); - customSourcesPage.navigateToCustomSources(); - customSourcesPage.selectFavoritesSourceType(); - customSourcesPage.checkRowIsDisplayed(testFolder1.entry.name); + await contentServicesPage.getDocumentList().dataTablePage().checkContentIsDisplayed('Display name', testFolder1.entry.name); + await contentServicesPage.getDocumentList().dataTablePage().selectRow('Display name', testFolder1.entry.name); + await contentServicesPage.getDocumentList().dataTablePage().checkRowIsSelected('Display name', testFolder1.entry.name); + await contentServicesPage.clickOnFavoriteButton(); + await contentServicesPage.checkIsMarkedFavorite(); + await customSourcesPage.navigateToCustomSources(); + await customSourcesPage.selectFavoritesSourceType(); + await customSourcesPage.checkRowIsDisplayed(testFolder1.entry.name); - navigationBarPage.clickContentServicesButton(); - contentServicesPage.getContentList().dataTablePage().waitTillContentLoaded(); - contentServicesPage.getContentList().dataTablePage().checkContentIsDisplayed('Display name', testFolder1.entry.name); - contentServicesPage.getContentList().dataTablePage().selectRow('Display name', testFolder1.entry.name); - contentServicesPage.getContentList().dataTablePage().checkRowIsSelected('Display name', testFolder1.entry.name); - contentServicesPage.clickOnFavoriteButton(); - contentServicesPage.checkIsNotMarkedFavorite(); - customSourcesPage.navigateToCustomSources(); - customSourcesPage.selectFavoritesSourceType(); - customSourcesPage.checkRowIsNotDisplayed(testFolder1.entry.name); + await navigationBarPage.clickContentServicesButton(); + await contentServicesPage.getDocumentList().dataTablePage().waitTillContentLoaded(); + await contentServicesPage.getDocumentList().dataTablePage().checkContentIsDisplayed('Display name', testFolder1.entry.name); + await contentServicesPage.getDocumentList().dataTablePage().selectRow('Display name', testFolder1.entry.name); + await contentServicesPage.getDocumentList().dataTablePage().checkRowIsSelected('Display name', testFolder1.entry.name); + await contentServicesPage.clickOnFavoriteButton(); + await contentServicesPage.checkIsNotMarkedFavorite(); + await customSourcesPage.navigateToCustomSources(); + await customSourcesPage.selectFavoritesSourceType(); + await customSourcesPage.checkRowIsNotDisplayed(testFolder1.entry.name); }); it('[C260251] Should retain the restored file as favorite', async () => { - contentServicesPage.getContentList().dataTablePage().checkContentIsDisplayed('Display name', testFile.entry.name); - contentServicesPage.getContentList().dataTablePage().selectRow('Display name', testFile.entry.name); - contentServicesPage.getContentList().dataTablePage().checkRowIsSelected('Display name', testFile.entry.name); - contentServicesPage.clickOnFavoriteButton(); - contentServicesPage.checkIsMarkedFavorite(); - contentListPage.rightClickOnRow(testFile.entry.name); - contentServicesPage.pressContextMenuActionNamed('Delete'); - contentServicesPage.checkContentIsNotDisplayed(testFile.entry.name); - customSourcesPage.navigateToCustomSources(); - customSourcesPage.selectFavoritesSourceType(); - customSourcesPage.checkRowIsNotDisplayed(testFile.entry.name); + await contentServicesPage.getDocumentList().dataTablePage().checkContentIsDisplayed('Display name', testFile.entry.name); + await contentServicesPage.getDocumentList().dataTablePage().selectRow('Display name', testFile.entry.name); + await contentServicesPage.getDocumentList().dataTablePage().checkRowIsSelected('Display name', testFile.entry.name); + await contentServicesPage.clickOnFavoriteButton(); + await contentServicesPage.checkIsMarkedFavorite(); + await contentListPage.rightClickOnRow(testFile.entry.name); + await contentServicesPage.pressContextMenuActionNamed('Delete'); + await contentServicesPage.checkContentIsNotDisplayed(testFile.entry.name); + await customSourcesPage.navigateToCustomSources(); + await customSourcesPage.selectFavoritesSourceType(); + await customSourcesPage.checkRowIsNotDisplayed(testFile.entry.name); - navigationBarPage.clickTrashcanButton(); - trashcanPage.waitForTableBody(); - expect(trashcanPage.numberOfResultsDisplayed()).toBe(1); - trashcanPage.getDocumentList().dataTablePage().clickRowByContent(testFile.entry.name); - trashcanPage.getDocumentList().dataTablePage().checkRowByContentIsSelected(testFile.entry.name); - trashcanPage.clickRestore(); - trashcanPage.checkTrashcanIsEmpty(); + await navigationBarPage.clickTrashcanButton(); + await trashcanPage.waitForTableBody(); + await expect(await trashcanPage.numberOfResultsDisplayed()).toBe(1); + await trashcanPage.getDocumentList().dataTablePage().clickRowByContent(testFile.entry.name); + await trashcanPage.getDocumentList().dataTablePage().checkRowByContentIsSelected(testFile.entry.name); + await trashcanPage.clickRestore(); + await trashcanPage.checkTrashcanIsEmpty(); - navigationBarPage.clickContentServicesButton(); - contentServicesPage.getContentList().dataTablePage().waitTillContentLoaded(); - contentServicesPage.getContentList().dataTablePage().checkContentIsDisplayed('Display name', testFile.entry.name); - contentServicesPage.getContentList().dataTablePage().selectRow('Display name', testFile.entry.name); - contentServicesPage.getContentList().dataTablePage().checkRowIsSelected('Display name', testFile.entry.name); - contentServicesPage.checkIsMarkedFavorite(); - customSourcesPage.navigateToCustomSources(); - customSourcesPage.selectFavoritesSourceType(); - customSourcesPage.checkRowIsDisplayed(testFile.entry.name); + await navigationBarPage.clickContentServicesButton(); + await contentServicesPage.getDocumentList().dataTablePage().waitTillContentLoaded(); + await contentServicesPage.getDocumentList().dataTablePage().checkContentIsDisplayed('Display name', testFile.entry.name); + await contentServicesPage.getDocumentList().dataTablePage().selectRow('Display name', testFile.entry.name); + await contentServicesPage.getDocumentList().dataTablePage().checkRowIsSelected('Display name', testFile.entry.name); + await contentServicesPage.checkIsMarkedFavorite(); + await customSourcesPage.navigateToCustomSources(); + await customSourcesPage.selectFavoritesSourceType(); + await customSourcesPage.checkRowIsDisplayed(testFile.entry.name); }); it('[C260252] Should retain the moved file as favorite', async () => { - contentServicesPage.getContentList().dataTablePage().checkContentIsDisplayed('Display name', testFile.entry.name); - contentServicesPage.getContentList().dataTablePage().selectRow('Display name', testFile.entry.name); - contentServicesPage.getContentList().dataTablePage().checkRowIsSelected('Display name', testFile.entry.name); - contentServicesPage.clickOnFavoriteButton(); - contentServicesPage.checkIsMarkedFavorite(); + await contentServicesPage.getDocumentList().dataTablePage().checkContentIsDisplayed('Display name', testFile.entry.name); + await contentServicesPage.getDocumentList().dataTablePage().selectRow('Display name', testFile.entry.name); + await contentServicesPage.getDocumentList().dataTablePage().checkRowIsSelected('Display name', testFile.entry.name); + await contentServicesPage.clickOnFavoriteButton(); + await contentServicesPage.checkIsMarkedFavorite(); - contentServicesPage.getDocumentList().rightClickOnRow(testFile.entry.name); - contentServicesPage.pressContextMenuActionNamed('Move'); - contentNodeSelector.checkDialogIsDisplayed(); - contentNodeSelector.typeIntoNodeSelectorSearchField(testFolder1.entry.name); - contentNodeSelector.clickContentNodeSelectorResult(testFolder1.entry.name); - contentNodeSelector.clickMoveCopyButton(); - contentServicesPage.checkContentIsNotDisplayed(testFile.entry.name); - contentServicesPage.doubleClickRow(testFolder1.entry.name); - contentServicesPage.checkContentIsDisplayed(testFile.entry.name); + await contentServicesPage.getDocumentList().rightClickOnRow(testFile.entry.name); + await contentServicesPage.pressContextMenuActionNamed('Move'); + await contentNodeSelector.checkDialogIsDisplayed(); + await contentNodeSelector.typeIntoNodeSelectorSearchField(testFolder1.entry.name); + await contentNodeSelector.clickContentNodeSelectorResult(testFolder1.entry.name); + await contentNodeSelector.clickMoveCopyButton(); + await contentServicesPage.checkContentIsNotDisplayed(testFile.entry.name); + await contentServicesPage.doubleClickRow(testFolder1.entry.name); + await contentServicesPage.checkContentIsDisplayed(testFile.entry.name); - contentServicesPage.getContentList().dataTablePage().selectRow('Display name', testFile.entry.name); - contentServicesPage.getContentList().dataTablePage().checkRowIsSelected('Display name', testFile.entry.name); - contentServicesPage.checkIsMarkedFavorite(); + await contentServicesPage.getDocumentList().dataTablePage().selectRow('Display name', testFile.entry.name); + await contentServicesPage.getDocumentList().dataTablePage().checkRowIsSelected('Display name', testFile.entry.name); + await contentServicesPage.checkIsMarkedFavorite(); }); it('[C217216] Should be able to mark and unmark multiple folders as favorite', async () => { - contentServicesPage.clickMultiSelectToggle(); - contentServicesPage.getContentList().dataTablePage().waitTillContentLoaded(); - contentServicesPage.getContentList().dataTablePage().clickCheckbox('Display name', testFolder1.entry.name); - contentServicesPage.getContentList().dataTablePage().clickCheckbox('Display name', testFolder2.entry.name); - contentServicesPage.getContentList().dataTablePage().clickCheckbox('Display name', testFolder3.entry.name); - contentServicesPage.getContentList().dataTablePage().checkRowIsSelected('Display name', testFolder1.entry.name); - contentServicesPage.getContentList().dataTablePage().checkRowIsSelected('Display name', testFolder2.entry.name); - contentServicesPage.getContentList().dataTablePage().checkRowIsSelected('Display name', testFolder3.entry.name); - expect(contentServicesPage.getContentList().dataTablePage().getNumberOfSelectedRows()).toBe(3); - contentServicesPage.clickOnFavoriteButton(); - contentServicesPage.checkIsMarkedFavorite(); + await contentServicesPage.clickMultiSelectToggle(); + await contentServicesPage.getDocumentList().dataTablePage().waitTillContentLoaded(); + await contentServicesPage.getDocumentList().dataTablePage().clickCheckbox('Display name', testFolder1.entry.name); + await contentServicesPage.getDocumentList().dataTablePage().clickCheckbox('Display name', testFolder2.entry.name); + await contentServicesPage.getDocumentList().dataTablePage().clickCheckbox('Display name', testFolder3.entry.name); + await contentServicesPage.getDocumentList().dataTablePage().checkRowIsSelected('Display name', testFolder1.entry.name); + await contentServicesPage.getDocumentList().dataTablePage().checkRowIsSelected('Display name', testFolder2.entry.name); + await contentServicesPage.getDocumentList().dataTablePage().checkRowIsSelected('Display name', testFolder3.entry.name); + await expect(await contentServicesPage.getDocumentList().dataTablePage().getNumberOfSelectedRows()).toBe(3); + await contentServicesPage.clickOnFavoriteButton(); + await contentServicesPage.checkIsMarkedFavorite(); - contentServicesPage.getContentList().dataTablePage().clickCheckbox('Display name', testFolder3.entry.name); - contentServicesPage.getContentList().dataTablePage().checkRowIsNotSelected('Display name', testFolder3.entry.name); - expect(contentServicesPage.getContentList().dataTablePage().getNumberOfSelectedRows()).toBe(2); + await contentServicesPage.getDocumentList().dataTablePage().clickCheckbox('Display name', testFolder3.entry.name); + await contentServicesPage.getDocumentList().dataTablePage().checkRowIsNotSelected('Display name', testFolder3.entry.name); + await expect(await contentServicesPage.getDocumentList().dataTablePage().getNumberOfSelectedRows()).toBe(2); - contentServicesPage.getContentList().dataTablePage().clickCheckbox('Display name', testFolder4.entry.name); - expect(contentServicesPage.getContentList().dataTablePage().getNumberOfSelectedRows()).toBe(3); - contentServicesPage.getContentList().dataTablePage().checkRowIsSelected('Display name', testFolder1.entry.name); - contentServicesPage.getContentList().dataTablePage().checkRowIsSelected('Display name', testFolder2.entry.name); - contentServicesPage.getContentList().dataTablePage().checkRowIsSelected('Display name', testFolder4.entry.name); - contentServicesPage.clickOnFavoriteButton(); - contentServicesPage.checkIsMarkedFavorite(); + await contentServicesPage.getDocumentList().dataTablePage().clickCheckbox('Display name', testFolder4.entry.name); + await expect(await contentServicesPage.getDocumentList().dataTablePage().getNumberOfSelectedRows()).toBe(3); + await contentServicesPage.getDocumentList().dataTablePage().checkRowIsSelected('Display name', testFolder1.entry.name); + await contentServicesPage.getDocumentList().dataTablePage().checkRowIsSelected('Display name', testFolder2.entry.name); + await contentServicesPage.getDocumentList().dataTablePage().checkRowIsSelected('Display name', testFolder4.entry.name); + await contentServicesPage.clickOnFavoriteButton(); + await contentServicesPage.checkIsMarkedFavorite(); - contentServicesPage.clickOnFavoriteButton(); - contentServicesPage.checkIsNotMarkedFavorite(); - contentServicesPage.getContentList().dataTablePage().checkAllRows(); - expect(contentServicesPage.getContentList().dataTablePage().getNumberOfSelectedRows()).toBeGreaterThanOrEqual(4); - contentServicesPage.getContentList().dataTablePage().uncheckAllRows(); - expect(contentServicesPage.getContentList().dataTablePage().getNumberOfSelectedRows()).toBe(0); + await contentServicesPage.clickOnFavoriteButton(); + await contentServicesPage.checkIsNotMarkedFavorite(); + await contentServicesPage.getDocumentList().dataTablePage().checkAllRows(); + await expect(await contentServicesPage.getDocumentList().dataTablePage().getNumberOfSelectedRows()).toBeGreaterThanOrEqual(4); + await contentServicesPage.getDocumentList().dataTablePage().uncheckAllRows(); + await expect(await contentServicesPage.getDocumentList().dataTablePage().getNumberOfSelectedRows()).toBe(0); - contentServicesPage.getContentList().dataTablePage().clickCheckbox('Display name', testFolder3.entry.name); - contentServicesPage.getContentList().dataTablePage().checkRowIsSelected('Display name', testFolder3.entry.name); - expect(contentServicesPage.getContentList().dataTablePage().getNumberOfSelectedRows()).toBe(1); - contentServicesPage.checkIsMarkedFavorite(); + await contentServicesPage.getDocumentList().dataTablePage().clickCheckbox('Display name', testFolder3.entry.name); + await contentServicesPage.getDocumentList().dataTablePage().checkRowIsSelected('Display name', testFolder3.entry.name); + await expect(await contentServicesPage.getDocumentList().dataTablePage().getNumberOfSelectedRows()).toBe(1); + await contentServicesPage.checkIsMarkedFavorite(); }); }); diff --git a/e2e/content-services/directives/restore-content-directive.e2e.ts b/e2e/content-services/directives/restore-content-directive.e2e.ts index 9b9e528e07..c6cc4b91a2 100644 --- a/e2e/content-services/directives/restore-content-directive.e2e.ts +++ b/e2e/content-services/directives/restore-content-directive.e2e.ts @@ -24,10 +24,10 @@ import { FileModel } from '../../models/ACS/fileModel'; import resources = require('../../util/resources'); import { NavigationBarPage } from '../../pages/adf/navigationBarPage'; import { TrashcanPage } from '../../pages/adf/trashcanPage'; -import { LoginPage, NotificationHistoryPage, StringUtil, UploadActions } from '@alfresco/adf-testing'; +import { LoginPage, NotificationHistoryPage, StringUtil, UploadActions, BrowserActions } from '@alfresco/adf-testing'; import { BreadCrumbPage } from '../../pages/adf/content-services/breadcrumb/breadCrumbPage'; -describe('Restore content directive', function () { +describe('Restore content directive', () => { const loginPage = new LoginPage(); const contentServicesPage = new ContentServicesPage(); @@ -44,18 +44,18 @@ describe('Restore content directive', function () { }); const pdfFileModel = new FileModel({ - 'name': resources.Files.ADF_DOCUMENTS.PDF.file_name, - 'location': resources.Files.ADF_DOCUMENTS.PDF.file_location + name: resources.Files.ADF_DOCUMENTS.PDF.file_name, + location: resources.Files.ADF_DOCUMENTS.PDF.file_location }); const testFileModel = new FileModel({ - 'name': resources.Files.ADF_DOCUMENTS.TEST.file_name, - 'location': resources.Files.ADF_DOCUMENTS.TEST.file_location + name: resources.Files.ADF_DOCUMENTS.TEST.file_name, + location: resources.Files.ADF_DOCUMENTS.TEST.file_location }); const pngFileModel = new FileModel({ - 'name': resources.Files.ADF_DOCUMENTS.PNG.file_name, - 'location': resources.Files.ADF_DOCUMENTS.PNG.file_location + name: resources.Files.ADF_DOCUMENTS.PNG.file_name, + location: resources.Files.ADF_DOCUMENTS.PNG.file_location }); const folderName = StringUtil.generateRandomString(5); @@ -64,7 +64,7 @@ describe('Restore content directive', function () { let folderWithContent, folderWithFolder, subFolder, subFile, testFile, restoreFile, publicSite, siteFolder, siteFile; - beforeAll(async (done) => { + beforeAll(async () => { await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); await this.alfrescoJsApi.core.peopleApi.addPerson(acsUser); await this.alfrescoJsApi.core.peopleApi.addPerson(anotherAcsUser); @@ -79,171 +79,163 @@ describe('Restore content directive', function () { restoreFile = await uploadActions.uploadFile(pngFileModel.location, pngFileModel.name, '-my-'); await loginPage.loginToContentServicesUsingUserModel(acsUser); - done(); }); afterAll(async () => { - await navigationBarPage.clickLogoutButton(); - await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); await uploadActions.deleteFileOrFolder(folderWithContent.entry.id); await uploadActions.deleteFileOrFolder(folderWithFolder.entry.id); - await this.alfrescoJsApi.core.sitesApi.deleteSite(publicSite.entry.id); }); - beforeEach(async (done) => { - navigationBarPage.clickContentServicesButton(); - contentServicesPage.waitForTableBody(); - done(); + beforeEach(async () => { + await BrowserActions.closeMenuAndDialogs(); + await navigationBarPage.clickContentServicesButton(); + await contentServicesPage.waitForTableBody(); }); - describe('Restore same name folders', function () { + describe('Restore same name folders', () => { - beforeAll(async (done) => { - navigationBarPage.clickContentServicesButton(); - contentServicesPage.waitForTableBody(); - contentServicesPage.checkContentIsDisplayed(folderName); - contentServicesPage.deleteContent(folderName); - contentServicesPage.checkContentIsNotDisplayed(folderName); - navigationBarPage.clickTrashcanButton(); - trashcanPage.waitForTableBody(); - trashcanPage.getDocumentList().dataTablePage().checkRowContentIsDisplayed(folderName); - done(); + beforeAll(async () => { + await navigationBarPage.clickContentServicesButton(); + await contentServicesPage.waitForTableBody(); + await contentServicesPage.checkContentIsDisplayed(folderName); + await contentServicesPage.deleteContent(folderName); + await contentServicesPage.checkContentIsNotDisplayed(folderName); + await navigationBarPage.clickTrashcanButton(); + await trashcanPage.waitForTableBody(); + await trashcanPage.getDocumentList().dataTablePage().checkRowContentIsDisplayed(folderName); }); it('[C260227] Should validate when restoring Folders with same name', async () => { await uploadActions.createFolder(folderName, '-my-'); - navigationBarPage.clickContentServicesButton(); - browser.refresh(); - contentServicesPage.waitForTableBody(); - contentServicesPage.checkContentIsDisplayed(folderName); - contentServicesPage.deleteContent(folderName); - contentServicesPage.checkContentIsNotDisplayed(folderName); - navigationBarPage.clickTrashcanButton(); - trashcanPage.waitForTableBody(); - trashcanPage.getDocumentList().dataTablePage().checkRowContentIsDisplayed(folderName); + await navigationBarPage.clickContentServicesButton(); + await browser.refresh(); + await contentServicesPage.waitForTableBody(); + await contentServicesPage.checkContentIsDisplayed(folderName); + await contentServicesPage.deleteContent(folderName); + await contentServicesPage.checkContentIsNotDisplayed(folderName); + await navigationBarPage.clickTrashcanButton(); + await trashcanPage.waitForTableBody(); + await trashcanPage.getDocumentList().dataTablePage().checkRowContentIsDisplayed(folderName); - trashcanPage.getDocumentList().dataTablePage().checkAllRows(); - trashcanPage.clickRestore(); - trashcanPage.getDocumentList().dataTablePage().checkRowContentIsDisplayed(folderName); - navigationBarPage.clickContentServicesButton(); - contentServicesPage.getContentList().dataTablePage().waitTillContentLoaded(); - contentServicesPage.checkContentIsDisplayed(folderName); + await trashcanPage.getDocumentList().dataTablePage().checkAllRows(); + await trashcanPage.clickRestore(); + await trashcanPage.getDocumentList().dataTablePage().checkRowContentIsDisplayed(folderName); + await navigationBarPage.clickContentServicesButton(); + await contentServicesPage.getDocumentList().dataTablePage().waitTillContentLoaded(); + await contentServicesPage.checkContentIsDisplayed(folderName); - notificationHistoryPage.checkNotifyContains('Can\'t restore, ' + folderName + ' item already exists'); + await notificationHistoryPage.checkNotifyContains('Can\'t restore, ' + folderName + ' item already exists'); }); }); it('[C260238] Should restore a file', async () => { - contentServicesPage.checkContentIsDisplayed(testFile.entry.name); - contentServicesPage.deleteContent(testFile.entry.name); - contentServicesPage.checkContentIsNotDisplayed(testFile.entry.name); - navigationBarPage.clickTrashcanButton(); - trashcanPage.waitForTableBody(); - trashcanPage.getDocumentList().dataTablePage().clickRowByContent(testFile.entry.name); - trashcanPage.getDocumentList().dataTablePage().checkRowByContentIsSelected(testFile.entry.name); - trashcanPage.clickRestore(); - trashcanPage.getDocumentList().dataTablePage().checkRowContentIsNotDisplayed(testFile.entry.name); + await contentServicesPage.checkContentIsDisplayed(testFile.entry.name); + await contentServicesPage.deleteContent(testFile.entry.name); + await contentServicesPage.checkContentIsNotDisplayed(testFile.entry.name); + await navigationBarPage.clickTrashcanButton(); + await trashcanPage.waitForTableBody(); + await trashcanPage.getDocumentList().dataTablePage().clickRowByContent(testFile.entry.name); + await trashcanPage.getDocumentList().dataTablePage().checkRowByContentIsSelected(testFile.entry.name); + await trashcanPage.clickRestore(); + await trashcanPage.getDocumentList().dataTablePage().checkRowContentIsNotDisplayed(testFile.entry.name); - navigationBarPage.clickContentServicesButton(); - contentServicesPage.waitForTableBody(); - contentServicesPage.checkContentIsDisplayed(testFile.entry.name); - contentServicesPage.deleteContent(testFile.entry.name); - contentServicesPage.checkContentIsNotDisplayed(testFile.entry.name); - navigationBarPage.clickTrashcanButton(); - trashcanPage.waitForTableBody(); - trashcanPage.getDocumentList().dataTablePage().checkRowContentIsDisplayed(testFile.entry.name); - notificationHistoryPage.checkNotifyContains(testFile.entry.name + ' item restored'); + await navigationBarPage.clickContentServicesButton(); + await contentServicesPage.waitForTableBody(); + await contentServicesPage.checkContentIsDisplayed(testFile.entry.name); + await contentServicesPage.deleteContent(testFile.entry.name); + await contentServicesPage.checkContentIsNotDisplayed(testFile.entry.name); + await navigationBarPage.clickTrashcanButton(); + await trashcanPage.waitForTableBody(); + await trashcanPage.getDocumentList().dataTablePage().checkRowContentIsDisplayed(testFile.entry.name); + await notificationHistoryPage.checkNotifyContains(testFile.entry.name + ' item restored'); }); it('[C260239] Should restore folder with content', async () => { - contentServicesPage.checkContentIsDisplayed(folderWithContent.entry.name); - contentServicesPage.deleteContent(folderWithContent.entry.name); - contentServicesPage.checkContentIsNotDisplayed(folderWithContent.entry.name); - navigationBarPage.clickTrashcanButton(); - trashcanPage.waitForTableBody(); - trashcanPage.getDocumentList().dataTablePage().clickRowByContent(folderWithContent.entry.name); - trashcanPage.getDocumentList().dataTablePage().checkRowByContentIsSelected(folderWithContent.entry.name); - trashcanPage.clickRestore(); - trashcanPage.getDocumentList().dataTablePage().checkRowContentIsNotDisplayed(folderWithContent.entry.name); + await contentServicesPage.checkContentIsDisplayed(folderWithContent.entry.name); + await contentServicesPage.deleteContent(folderWithContent.entry.name); + await contentServicesPage.checkContentIsNotDisplayed(folderWithContent.entry.name); + await navigationBarPage.clickTrashcanButton(); + await trashcanPage.waitForTableBody(); + await trashcanPage.getDocumentList().dataTablePage().clickRowByContent(folderWithContent.entry.name); + await trashcanPage.getDocumentList().dataTablePage().checkRowByContentIsSelected(folderWithContent.entry.name); + await trashcanPage.clickRestore(); + await trashcanPage.getDocumentList().dataTablePage().checkRowContentIsNotDisplayed(folderWithContent.entry.name); - navigationBarPage.clickContentServicesButton(); - contentServicesPage.waitForTableBody(); - contentServicesPage.checkContentIsDisplayed(folderWithContent.entry.name); - contentServicesPage.getContentList().dataTablePage().doubleClickRow('Display name', folderWithContent.entry.name); - contentServicesPage.checkContentIsDisplayed(subFile.entry.name); - notificationHistoryPage.checkNotifyContains(folderWithContent.entry.name + ' item restored'); + await navigationBarPage.clickContentServicesButton(); + await contentServicesPage.waitForTableBody(); + await contentServicesPage.checkContentIsDisplayed(folderWithContent.entry.name); + await contentServicesPage.getDocumentList().dataTablePage().doubleClickRow('Display name', folderWithContent.entry.name); + await contentServicesPage.checkContentIsDisplayed(subFile.entry.name); + await notificationHistoryPage.checkNotifyContains(folderWithContent.entry.name + ' item restored'); }); it('[C260240] Should validate restore when the original location no longer exists', async () => { - contentServicesPage.checkContentIsDisplayed(folderWithFolder.entry.name); - contentServicesPage.doubleClickRow(folderWithFolder.entry.name); - contentServicesPage.checkContentIsDisplayed(subFolder.entry.name); - contentServicesPage.deleteContent(subFolder.entry.name); - contentServicesPage.checkContentIsNotDisplayed(subFolder.entry.name); - breadCrumbPage.chooseBreadCrumb(acsUser.id); - contentServicesPage.waitForTableBody(); - contentServicesPage.checkContentIsDisplayed(folderWithFolder.entry.name); - contentServicesPage.deleteContent(folderWithFolder.entry.name); - contentServicesPage.checkContentIsNotDisplayed(folderWithFolder.entry.name); + await contentServicesPage.checkContentIsDisplayed(folderWithFolder.entry.name); + await contentServicesPage.doubleClickRow(folderWithFolder.entry.name); + await contentServicesPage.checkContentIsDisplayed(subFolder.entry.name); + await contentServicesPage.deleteContent(subFolder.entry.name); + await contentServicesPage.checkContentIsNotDisplayed(subFolder.entry.name); + await breadCrumbPage.chooseBreadCrumb(acsUser.id); + await contentServicesPage.waitForTableBody(); + await contentServicesPage.checkContentIsDisplayed(folderWithFolder.entry.name); + await contentServicesPage.deleteContent(folderWithFolder.entry.name); + await contentServicesPage.checkContentIsNotDisplayed(folderWithFolder.entry.name); - navigationBarPage.clickTrashcanButton(); - trashcanPage.waitForTableBody(); - trashcanPage.getDocumentList().dataTablePage().checkRowContentIsDisplayed(subFolder.entry.name); - trashcanPage.getDocumentList().dataTablePage().checkRowContentIsDisplayed(folderWithFolder.entry.name); - trashcanPage.getDocumentList().dataTablePage().clickRowByContent(subFolder.entry.name); - trashcanPage.getDocumentList().dataTablePage().checkRowByContentIsSelected(subFolder.entry.name); - trashcanPage.clickRestore(); - trashcanPage.getDocumentList().dataTablePage().checkRowContentIsDisplayed(subFolder.entry.name); - trashcanPage.getDocumentList().dataTablePage().checkRowContentIsDisplayed(folderWithFolder.entry.name); - trashcanPage.getDocumentList().dataTablePage().clickRowByContentCheckbox(subFolder.entry.name); - trashcanPage.getDocumentList().dataTablePage().checkRowByContentIsSelected(subFolder.entry.name); - trashcanPage.getDocumentList().dataTablePage().clickRowByContentCheckbox(folderWithFolder.entry.name); - trashcanPage.getDocumentList().dataTablePage().checkRowByContentIsSelected(folderWithFolder.entry.name); - trashcanPage.clickRestore(); - - navigationBarPage.clickContentServicesButton(); - contentServicesPage.waitForTableBody(); - contentServicesPage.checkContentIsDisplayed(folderWithFolder.entry.name); - contentServicesPage.doubleClickRow(folderWithFolder.entry.name); - contentServicesPage.checkContentIsDisplayed(subFolder.entry.name); - notificationHistoryPage.clickNotificationButton(); - notificationHistoryPage.checkNotificationIsPresent('Can\'t restore ' + subFolder.entry.name + ' item, the original location no longer exists'); - notificationHistoryPage.checkNotificationIsPresent('Restore successful'); - notificationHistoryPage.clickMarkAsRead(); + await navigationBarPage.clickTrashcanButton(); + await trashcanPage.waitForTableBody(); + await trashcanPage.getDocumentList().dataTablePage().checkRowContentIsDisplayed(subFolder.entry.name); + await trashcanPage.getDocumentList().dataTablePage().checkRowContentIsDisplayed(folderWithFolder.entry.name); + await trashcanPage.getDocumentList().dataTablePage().clickRowByContent(subFolder.entry.name); + await trashcanPage.getDocumentList().dataTablePage().checkRowByContentIsSelected(subFolder.entry.name); + await trashcanPage.clickRestore(); + await notificationHistoryPage.checkNotifyContains(`Can't restore ${subFolder.entry.name} item, the original location no longer exists`); + await trashcanPage.getDocumentList().dataTablePage().checkRowContentIsDisplayed(subFolder.entry.name); + await trashcanPage.getDocumentList().dataTablePage().checkRowContentIsDisplayed(folderWithFolder.entry.name); + await trashcanPage.getDocumentList().dataTablePage().clickRowByContentCheckbox(subFolder.entry.name); + await trashcanPage.getDocumentList().dataTablePage().checkRowByContentIsSelected(subFolder.entry.name); + await trashcanPage.getDocumentList().dataTablePage().clickRowByContentCheckbox(folderWithFolder.entry.name); + await trashcanPage.getDocumentList().dataTablePage().checkRowByContentIsSelected(folderWithFolder.entry.name); + await trashcanPage.clickRestore(); + await notificationHistoryPage.checkNotifyContains('Restore successful'); + await navigationBarPage.clickContentServicesButton(); + await contentServicesPage.waitForTableBody(); + await contentServicesPage.checkContentIsDisplayed(folderWithFolder.entry.name); + await contentServicesPage.doubleClickRow(folderWithFolder.entry.name); + await contentServicesPage.checkContentIsDisplayed(subFolder.entry.name); }); it('[C260241] Should display restore icon both for file and folder', async () => { - contentServicesPage.checkContentIsDisplayed(folderName); - contentServicesPage.checkContentIsDisplayed(restoreFile.entry.name); - contentServicesPage.deleteContent(folderName); - contentServicesPage.deleteContent(restoreFile.entry.name); - contentServicesPage.checkContentIsNotDisplayed(folderName); - contentServicesPage.checkContentIsNotDisplayed(restoreFile.entry.name); + await contentServicesPage.checkContentIsDisplayed(folderName); + await contentServicesPage.checkContentIsDisplayed(restoreFile.entry.name); + await contentServicesPage.deleteContent(folderName); + await contentServicesPage.deleteContent(restoreFile.entry.name); + await contentServicesPage.checkContentIsNotDisplayed(folderName); + await contentServicesPage.checkContentIsNotDisplayed(restoreFile.entry.name); - navigationBarPage.clickTrashcanButton(); - trashcanPage.waitForTableBody(); - trashcanPage.checkRestoreButtonIsNotDisplayed(); - trashcanPage.getDocumentList().dataTablePage().clickRowByContentCheckbox(folderName); - trashcanPage.getDocumentList().dataTablePage().checkRowByContentIsSelected(folderName); - trashcanPage.checkRestoreButtonIsDisplayed(); - trashcanPage.getDocumentList().dataTablePage().clickRowByContentCheckbox(folderName); - trashcanPage.getDocumentList().dataTablePage().checkRowByContentIsNotSelected(folderName); + await navigationBarPage.clickTrashcanButton(); + await trashcanPage.waitForTableBody(); + await trashcanPage.checkRestoreButtonIsNotDisplayed(); + await trashcanPage.getDocumentList().dataTablePage().clickRowByContentCheckbox(folderName); + await trashcanPage.getDocumentList().dataTablePage().checkRowByContentIsSelected(folderName); + await trashcanPage.checkRestoreButtonIsDisplayed(); + await trashcanPage.getDocumentList().dataTablePage().clickRowByContentCheckbox(folderName); + await trashcanPage.getDocumentList().dataTablePage().checkRowByContentIsNotSelected(folderName); - trashcanPage.getDocumentList().dataTablePage().clickRowByContentCheckbox(restoreFile.entry.name); - trashcanPage.getDocumentList().dataTablePage().checkRowByContentIsSelected(restoreFile.entry.name); - trashcanPage.checkRestoreButtonIsDisplayed(); + await trashcanPage.getDocumentList().dataTablePage().clickRowByContentCheckbox(restoreFile.entry.name); + await trashcanPage.getDocumentList().dataTablePage().checkRowByContentIsSelected(restoreFile.entry.name); + await trashcanPage.checkRestoreButtonIsDisplayed(); - trashcanPage.getDocumentList().dataTablePage().clickRowByContentCheckbox(folderName); - trashcanPage.getDocumentList().dataTablePage().checkRowByContentIsSelected(folderName); - trashcanPage.getDocumentList().dataTablePage().checkRowByContentIsSelected(restoreFile.entry.name); - trashcanPage.checkRestoreButtonIsDisplayed(); + await trashcanPage.getDocumentList().dataTablePage().clickRowByContentCheckbox(folderName); + await trashcanPage.getDocumentList().dataTablePage().checkRowByContentIsSelected(folderName); + await trashcanPage.getDocumentList().dataTablePage().checkRowByContentIsSelected(restoreFile.entry.name); + await trashcanPage.checkRestoreButtonIsDisplayed(); }); describe('Restore deleted library', () => { - beforeAll(async (done) => { + beforeAll(async () => { await this.alfrescoJsApi.login(acsUser.id, acsUser.password); const publicSiteName = `00${StringUtil.generateRandomString(5)}`; const publicSiteBody = { visibility: 'PUBLIC', title: publicSiteName }; @@ -251,25 +243,31 @@ describe('Restore content directive', function () { siteFolder = await uploadActions.createFolder(StringUtil.generateRandomString(5), publicSite.entry.guid); siteFile = await uploadActions.uploadFile(pngFileModel.location, pngFileModel.name, siteFolder.entry.id); await this.alfrescoJsApi.core.sitesApi.deleteSite(publicSite.entry.id); - done(); + }); + + afterAll(async () => { + try { + await this.alfrescoJsApi.core.sitesApi.deleteSite(publicSite.entry.id); + } catch (error) { + } }); it('[C260241] Should restore the deleted library along with contents inside', async () => { - navigationBarPage.clickTrashcanButton(); - trashcanPage.waitForTableBody(); - trashcanPage.getDocumentList().dataTablePage().checkRowContentIsDisplayed(publicSite.entry.id); - trashcanPage.getDocumentList().dataTablePage().clickRowByContentCheckbox(publicSite.entry.id); - trashcanPage.getDocumentList().dataTablePage().checkRowByContentIsSelected(publicSite.entry.id); - trashcanPage.clickRestore(); + await navigationBarPage.clickTrashcanButton(); + await trashcanPage.waitForTableBody(); + await trashcanPage.getDocumentList().dataTablePage().checkRowContentIsDisplayed(publicSite.entry.id); + await trashcanPage.getDocumentList().dataTablePage().clickRowByContentCheckbox(publicSite.entry.id); + await trashcanPage.getDocumentList().dataTablePage().checkRowByContentIsSelected(publicSite.entry.id); + await trashcanPage.clickRestore(); - navigationBarPage.clickContentServicesButton(); - contentServicesPage.waitForTableBody(); - contentServicesPage.selectSite(publicSite.entry.title); - contentServicesPage.waitForTableBody(); - contentServicesPage.checkContentIsDisplayed(siteFolder.entry.name); - contentServicesPage.doubleClickRow(siteFolder.entry.name); - contentServicesPage.checkContentIsDisplayed(siteFile.entry.name); - notificationHistoryPage.checkNotifyContains(publicSite.entry.id + ' item restored'); + await navigationBarPage.clickContentServicesButton(); + await contentServicesPage.waitForTableBody(); + await contentServicesPage.selectSite(publicSite.entry.title); + await contentServicesPage.waitForTableBody(); + await contentServicesPage.checkContentIsDisplayed(siteFolder.entry.name); + await contentServicesPage.doubleClickRow(siteFolder.entry.name); + await contentServicesPage.checkContentIsDisplayed(siteFile.entry.name); + await notificationHistoryPage.checkNotifyContains(publicSite.entry.id + ' item restored'); }); }); @@ -278,7 +276,7 @@ describe('Restore content directive', function () { let parentFolder, folderWithin, pdfFile, pngFile, mainFile, mainFolder; - beforeAll(async (done) => { + beforeAll(async () => { await this.alfrescoJsApi.login(anotherAcsUser.id, anotherAcsUser.password); await uploadActions.createFolder(folderName, '-my-'); parentFolder = await uploadActions.createFolder(StringUtil.generateRandomString(5), '-my-'); @@ -289,45 +287,43 @@ describe('Restore content directive', function () { mainFolder = await uploadActions.createFolder(StringUtil.generateRandomString(5), '-my-'); await loginPage.loginToContentServicesUsingUserModel(anotherAcsUser); - contentServicesPage.goToDocumentList(); - contentServicesPage.waitForTableBody(); - done(); + await contentServicesPage.goToDocumentList(); + await contentServicesPage.waitForTableBody(); }); - afterAll(async (done) => { + afterAll(async () => { await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); await uploadActions.deleteFileOrFolder(parentFolder.entry.id); await uploadActions.deleteFileOrFolder(mainFolder.entry.id); await uploadActions.deleteFileOrFolder(mainFile.entry.id); - done(); }); it('[C216431] Should restore hierarchy of folders', async () => { - contentServicesPage.deleteContent(parentFolder.entry.name); - contentServicesPage.deleteContent(mainFolder.entry.name); - contentServicesPage.deleteContent(mainFile.entry.name); + await contentServicesPage.deleteContent(parentFolder.entry.name); + await contentServicesPage.deleteContent(mainFolder.entry.name); + await contentServicesPage.deleteContent(mainFile.entry.name); - navigationBarPage.clickTrashcanButton(); - trashcanPage.waitForTableBody(); - trashcanPage.checkRestoreButtonIsNotDisplayed(); - trashcanPage.getDocumentList().dataTablePage().clickRowByContentCheckbox(parentFolder.entry.name); - trashcanPage.getDocumentList().dataTablePage().checkRowByContentIsSelected(parentFolder.entry.name); - trashcanPage.getDocumentList().dataTablePage().clickRowByContentCheckbox(mainFolder.entry.name); - trashcanPage.getDocumentList().dataTablePage().checkRowByContentIsSelected(mainFolder.entry.name); - trashcanPage.getDocumentList().dataTablePage().clickRowByContentCheckbox(mainFile.entry.name); - trashcanPage.getDocumentList().dataTablePage().checkRowByContentIsSelected(mainFile.entry.name); - trashcanPage.clickRestore(); + await navigationBarPage.clickTrashcanButton(); + await trashcanPage.waitForTableBody(); + await trashcanPage.checkRestoreButtonIsNotDisplayed(); + await trashcanPage.getDocumentList().dataTablePage().clickRowByContentCheckbox(parentFolder.entry.name); + await trashcanPage.getDocumentList().dataTablePage().checkRowByContentIsSelected(parentFolder.entry.name); + await trashcanPage.getDocumentList().dataTablePage().clickRowByContentCheckbox(mainFolder.entry.name); + await trashcanPage.getDocumentList().dataTablePage().checkRowByContentIsSelected(mainFolder.entry.name); + await trashcanPage.getDocumentList().dataTablePage().clickRowByContentCheckbox(mainFile.entry.name); + await trashcanPage.getDocumentList().dataTablePage().checkRowByContentIsSelected(mainFile.entry.name); + await trashcanPage.clickRestore(); - navigationBarPage.clickContentServicesButton(); - contentServicesPage.waitForTableBody(); - contentServicesPage.checkContentIsDisplayed(parentFolder.entry.name); - contentServicesPage.checkContentIsDisplayed(mainFolder.entry.name); - contentServicesPage.checkContentIsDisplayed(mainFile.entry.name); - contentServicesPage.doubleClickRow(parentFolder.entry.name); - contentServicesPage.checkContentIsDisplayed(folderWithin.entry.name); - contentServicesPage.doubleClickRow(folderWithin.entry.name); - contentServicesPage.checkContentIsDisplayed(pdfFile.entry.name); - contentServicesPage.checkContentIsDisplayed(pngFile.entry.name); + await navigationBarPage.clickContentServicesButton(); + await contentServicesPage.waitForTableBody(); + await contentServicesPage.checkContentIsDisplayed(parentFolder.entry.name); + await contentServicesPage.checkContentIsDisplayed(mainFolder.entry.name); + await contentServicesPage.checkContentIsDisplayed(mainFile.entry.name); + await contentServicesPage.doubleClickRow(parentFolder.entry.name); + await contentServicesPage.checkContentIsDisplayed(folderWithin.entry.name); + await contentServicesPage.doubleClickRow(folderWithin.entry.name); + await contentServicesPage.checkContentIsDisplayed(pdfFile.entry.name); + await contentServicesPage.checkContentIsDisplayed(pngFile.entry.name); }); }); diff --git a/e2e/content-services/document-list/document-list-actions.e2e.ts b/e2e/content-services/document-list/document-list-actions.e2e.ts index e2558eac7f..a7132b0cee 100644 --- a/e2e/content-services/document-list/document-list-actions.e2e.ts +++ b/e2e/content-services/document-list/document-list-actions.e2e.ts @@ -16,7 +16,13 @@ */ import { browser, by, element } from 'protractor'; -import { LoginPage, PaginationPage, UploadActions, StringUtil, ContentNodeSelectorDialogPage } from '@alfresco/adf-testing'; +import { + LoginPage, + PaginationPage, + UploadActions, + StringUtil, + ContentNodeSelectorDialogPage +} from '@alfresco/adf-testing'; import { ContentServicesPage } from '../../pages/adf/contentServicesPage'; import { NavigationBarPage } from '../../pages/adf/navigationBarPage'; import { AcsUserModel } from '../../models/ACS/acsUserModel'; @@ -56,12 +62,12 @@ describe('Document List Component - Actions', () => { const nrOfFiles = 5; const pdfFileModel = new FileModel({ - 'name': resources.Files.ADF_DOCUMENTS.PDF.file_name, - 'location': resources.Files.ADF_DOCUMENTS.PDF.file_location + name: resources.Files.ADF_DOCUMENTS.PDF.file_name, + location: resources.Files.ADF_DOCUMENTS.PDF.file_location }); const testFileModel = new FileModel({ - 'name': resources.Files.ADF_DOCUMENTS.TEST.file_name, - 'location': resources.Files.ADF_DOCUMENTS.TEST.file_location + name: resources.Files.ADF_DOCUMENTS.TEST.file_name, + location: resources.Files.ADF_DOCUMENTS.TEST.file_location }); const files = { @@ -69,7 +75,7 @@ describe('Document List Component - Actions', () => { extension: '.txt' }; - beforeAll(async (done) => { + beforeAll(async () => { acsUser = new AcsUserModel(); folderName = `TATSUMAKY_${StringUtil.generateRandomString(5)}_SENPOUKYAKU`; await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); @@ -85,150 +91,150 @@ describe('Document List Component - Actions', () => { await loginPage.loginToContentServicesUsingUserModel(acsUser); - browser.driver.sleep(12000); - done(); + await browser.sleep(10000); + }); afterAll(async () => { await navigationBarPage.clickLogoutButton(); }); - beforeEach(async(done) => { + beforeEach(async () => { await navigationBarPage.clickContentServicesButton(); - done(); + }); describe('File Actions', () => { - it('[C213257] Should be able to copy a file', () => { - contentServicesPage.checkContentIsDisplayed(pdfUploadedNode.entry.name); - contentServicesPage.getDocumentList().rightClickOnRow(pdfFileModel.name); - contentServicesPage.pressContextMenuActionNamed('Copy'); - contentNodeSelector.checkDialogIsDisplayed(); - contentNodeSelector.typeIntoNodeSelectorSearchField(folderName); - contentNodeSelector.clickContentNodeSelectorResult(folderName); - contentNodeSelector.clickMoveCopyButton(); - contentServicesPage.checkContentIsDisplayed(pdfFileModel.name); - contentServicesPage.doubleClickRow(uploadedFolder.entry.name); - contentServicesPage.checkContentIsDisplayed(pdfFileModel.name); + it('[C213257] Should be able to copy a file', async () => { + await contentServicesPage.checkContentIsDisplayed(pdfUploadedNode.entry.name); + await contentServicesPage.getDocumentList().rightClickOnRow(pdfFileModel.name); + await contentServicesPage.pressContextMenuActionNamed('Copy'); + await contentNodeSelector.checkDialogIsDisplayed(); + await contentNodeSelector.typeIntoNodeSelectorSearchField(folderName); + await contentNodeSelector.clickContentNodeSelectorResult(folderName); + await contentNodeSelector.clickMoveCopyButton(); + await contentServicesPage.checkContentIsDisplayed(pdfFileModel.name); + await contentServicesPage.doubleClickRow(uploadedFolder.entry.name); + await contentServicesPage.checkContentIsDisplayed(pdfFileModel.name); }); - it('[C260131] Copy - Destination picker search', () => { - contentServicesPage.checkContentIsDisplayed(pdfFileModel.name); - contentServicesPage.getDocumentList().rightClickOnRow(pdfFileModel.name); - contentServicesPage.pressContextMenuActionNamed('Copy'); - contentNodeSelector.checkDialogIsDisplayed(); - contentNodeSelector.typeIntoNodeSelectorSearchField(folderName); - contentNodeSelector.contentListPage().dataTablePage().checkCellByHighlightContent(folderName); - contentNodeSelector.clickCancelButton(); - contentNodeSelector.checkDialogIsNotDisplayed(); + it('[C260131] Copy - Destination picker search', async () => { + await contentServicesPage.checkContentIsDisplayed(pdfFileModel.name); + await contentServicesPage.getDocumentList().rightClickOnRow(pdfFileModel.name); + await contentServicesPage.pressContextMenuActionNamed('Copy'); + await contentNodeSelector.checkDialogIsDisplayed(); + await contentNodeSelector.typeIntoNodeSelectorSearchField(folderName); + await contentNodeSelector.contentListPage().dataTablePage().checkCellByHighlightContent(folderName); + await contentNodeSelector.clickCancelButton(); + await contentNodeSelector.checkDialogIsNotDisplayed(); }); - it('[C297491] Should be able to move a file', () => { - contentServicesPage.checkContentIsDisplayed(testFileModel.name); + it('[C297491] Should be able to move a file', async () => { + await contentServicesPage.checkContentIsDisplayed(testFileModel.name); - contentServicesPage.getDocumentList().rightClickOnRow(testFileModel.name); - contentServicesPage.pressContextMenuActionNamed('Move'); - contentNodeSelector.checkDialogIsDisplayed(); - contentNodeSelector.typeIntoNodeSelectorSearchField(folderName); - contentNodeSelector.clickContentNodeSelectorResult(folderName); - contentNodeSelector.clickMoveCopyButton(); - contentServicesPage.checkContentIsNotDisplayed(testFileModel.name); - contentServicesPage.doubleClickRow(uploadedFolder.entry.name); - contentServicesPage.checkContentIsDisplayed(testFileModel.name); + await contentServicesPage.getDocumentList().rightClickOnRow(testFileModel.name); + await contentServicesPage.pressContextMenuActionNamed('Move'); + await contentNodeSelector.checkDialogIsDisplayed(); + await contentNodeSelector.typeIntoNodeSelectorSearchField(folderName); + await contentNodeSelector.clickContentNodeSelectorResult(folderName); + await contentNodeSelector.clickMoveCopyButton(); + await contentServicesPage.checkContentIsNotDisplayed(testFileModel.name); + await contentServicesPage.doubleClickRow(uploadedFolder.entry.name); + await contentServicesPage.checkContentIsDisplayed(testFileModel.name); }); - it('[C260127] Move - Destination picker search', () => { - contentServicesPage.checkContentIsDisplayed(pdfFileModel.name); - contentServicesPage.getDocumentList().rightClickOnRow(pdfFileModel.name); - contentServicesPage.pressContextMenuActionNamed('Move'); - contentNodeSelector.checkDialogIsDisplayed(); - contentNodeSelector.typeIntoNodeSelectorSearchField(folderName); - contentNodeSelector.contentListPage().dataTablePage().checkCellByHighlightContent(folderName); - contentNodeSelector.clickCancelButton(); - contentNodeSelector.checkDialogIsNotDisplayed(); + it('[C260127] Move - Destination picker search', async () => { + await contentServicesPage.checkContentIsDisplayed(pdfFileModel.name); + await contentServicesPage.getDocumentList().rightClickOnRow(pdfFileModel.name); + await contentServicesPage.pressContextMenuActionNamed('Move'); + await contentNodeSelector.checkDialogIsDisplayed(); + await contentNodeSelector.typeIntoNodeSelectorSearchField(folderName); + await contentNodeSelector.contentListPage().dataTablePage().checkCellByHighlightContent(folderName); + await contentNodeSelector.clickCancelButton(); + await contentNodeSelector.checkDialogIsNotDisplayed(); }); - it('[C280561] Should be able to delete a file via dropdown menu', () => { - contentServicesPage.doubleClickRow(uploadedFolder.entry.name); + it('[C280561] Should be able to delete a file via dropdown menu', async () => { + await contentServicesPage.doubleClickRow(uploadedFolder.entry.name); - contentServicesPage.checkContentIsDisplayed(fileNames[0]); - contentServicesPage.deleteContent(fileNames[0]); - contentServicesPage.checkContentIsNotDisplayed(fileNames[0]); + await contentServicesPage.checkContentIsDisplayed(fileNames[0]); + await contentServicesPage.deleteContent(fileNames[0]); + await contentServicesPage.checkContentIsNotDisplayed(fileNames[0]); }); - it('[C280562] Only one file is deleted when multiple files are selected using dropdown menu', () => { - contentServicesPage.doubleClickRow(uploadedFolder.entry.name); + it('[C280562] Only one file is deleted when multiple files are selected using dropdown menu', async () => { + await contentServicesPage.doubleClickRow(uploadedFolder.entry.name); - contentListPage.selectRow(fileNames[1]); - contentListPage.selectRow(fileNames[2]); - contentServicesPage.deleteContent(fileNames[1]); - contentServicesPage.checkContentIsNotDisplayed(fileNames[1]); - contentServicesPage.checkContentIsDisplayed(fileNames[2]); + await contentServicesPage.getDocumentList().selectRow(fileNames[1]); + await contentServicesPage.getDocumentList().selectRow(fileNames[2]); + await contentServicesPage.deleteContent(fileNames[1]); + await contentServicesPage.checkContentIsNotDisplayed(fileNames[1]); + await contentServicesPage.checkContentIsDisplayed(fileNames[2]); }); - it('[C280565] Should be able to delete a file using context menu', () => { - contentServicesPage.doubleClickRow(uploadedFolder.entry.name); - - contentListPage.rightClickOnRow(fileNames[2]); - contentServicesPage.pressContextMenuActionNamed('Delete'); - contentServicesPage.checkContentIsNotDisplayed(fileNames[2]); + it('[C280565] Should be able to delete a file using context menu', async () => { + await contentServicesPage.doubleClickRow(uploadedFolder.entry.name); + await contentServicesPage.checkContentIsDisplayed(fileNames[2]); + await contentServicesPage.getDocumentList().rightClickOnRow(fileNames[2]); + await contentServicesPage.pressContextMenuActionNamed('Delete'); + await contentServicesPage.checkContentIsNotDisplayed(fileNames[2]); }); - it('[C280567] Only one file is deleted when multiple files are selected using context menu', () => { - contentServicesPage.doubleClickRow(uploadedFolder.entry.name); + it('[C280567] Only one file is deleted when multiple files are selected using context menu', async () => { + await contentServicesPage.doubleClickRow(uploadedFolder.entry.name); - contentListPage.selectRow(fileNames[3]); - contentListPage.selectRow(fileNames[4]); - contentListPage.rightClickOnRow(fileNames[3]); - contentServicesPage.pressContextMenuActionNamed('Delete'); - contentServicesPage.checkContentIsNotDisplayed(fileNames[3]); - contentServicesPage.checkContentIsDisplayed(fileNames[4]); + await contentServicesPage.getDocumentList().selectRow(fileNames[3]); + await contentServicesPage.getDocumentList().selectRow(fileNames[4]); + await contentServicesPage.getDocumentList().rightClickOnRow(fileNames[3]); + await contentServicesPage.pressContextMenuActionNamed('Delete'); + await contentServicesPage.checkContentIsNotDisplayed(fileNames[3]); + await contentServicesPage.checkContentIsDisplayed(fileNames[4]); }); - it('[C280566] Should be able to open context menu with right click', () => { - contentServicesPage.getDocumentList().rightClickOnRow(pdfFileModel.name); - contentServicesPage.checkContextActionIsVisible('Download'); - contentServicesPage.checkContextActionIsVisible('Copy'); - contentServicesPage.checkContextActionIsVisible('Move'); - contentServicesPage.checkContextActionIsVisible('Delete'); - contentServicesPage.checkContextActionIsVisible('Info'); - contentServicesPage.checkContextActionIsVisible('Manage versions'); - contentServicesPage.checkContextActionIsVisible('Permission'); - contentServicesPage.checkContextActionIsVisible('Lock'); - contentServicesPage.closeActionContext(); + it('[C280566] Should be able to open context menu with right click', async () => { + await contentServicesPage.getDocumentList().rightClickOnRow(pdfFileModel.name); + await contentServicesPage.checkContextActionIsVisible('Download'); + await contentServicesPage.checkContextActionIsVisible('Copy'); + await contentServicesPage.checkContextActionIsVisible('Move'); + await contentServicesPage.checkContextActionIsVisible('Delete'); + await contentServicesPage.checkContextActionIsVisible('Info'); + await contentServicesPage.checkContextActionIsVisible('Manage versions'); + await contentServicesPage.checkContextActionIsVisible('Permission'); + await contentServicesPage.checkContextActionIsVisible('Lock'); + await contentServicesPage.closeActionContext(); }); }); describe('Folder Actions', () => { - it('[C260138] Should be able to copy a folder', () => { - contentServicesPage.copyContent(folderName); - contentNodeSelector.checkDialogIsDisplayed(); - contentNodeSelector.typeIntoNodeSelectorSearchField(secondUploadedFolder.entry.name); - contentNodeSelector.clickContentNodeSelectorResult(secondUploadedFolder.entry.name); - contentNodeSelector.clickMoveCopyButton(); - contentServicesPage.checkContentIsDisplayed(folderName); - contentServicesPage.doubleClickRow(secondUploadedFolder.entry.name); - contentServicesPage.checkContentIsDisplayed(folderName); + it('[C260138] Should be able to copy a folder', async () => { + await contentServicesPage.copyContent(folderName); + await contentNodeSelector.checkDialogIsDisplayed(); + await contentNodeSelector.typeIntoNodeSelectorSearchField(secondUploadedFolder.entry.name); + await contentNodeSelector.clickContentNodeSelectorResult(secondUploadedFolder.entry.name); + await contentNodeSelector.clickMoveCopyButton(); + await contentServicesPage.checkContentIsDisplayed(folderName); + await contentServicesPage.doubleClickRow(secondUploadedFolder.entry.name); + await contentServicesPage.checkContentIsDisplayed(folderName); }); - it('[C260123] Should be able to delete a folder using context menu', () => { - contentServicesPage.deleteContent(folderName); - contentServicesPage.checkContentIsNotDisplayed(folderName); + it('[C260123] Should be able to delete a folder using context menu', async () => { + await contentServicesPage.deleteContent(folderName); + await contentServicesPage.checkContentIsNotDisplayed(folderName); }); - it('[C280568] Should be able to open context menu with right click', () => { - contentServicesPage.checkContentIsDisplayed(secondUploadedFolder.entry.name); + it('[C280568] Should be able to open context menu with right click', async () => { + await contentServicesPage.checkContentIsDisplayed(secondUploadedFolder.entry.name); - contentListPage.rightClickOnRow(secondUploadedFolder.entry.name); - contentServicesPage.checkContextActionIsVisible('Download'); - contentServicesPage.checkContextActionIsVisible('Copy'); - contentServicesPage.checkContextActionIsVisible('Move'); - contentServicesPage.checkContextActionIsVisible('Delete'); - contentServicesPage.checkContextActionIsVisible('Info'); - contentServicesPage.checkContextActionIsVisible('Permission'); + await contentServicesPage.getDocumentList().rightClickOnRow(secondUploadedFolder.entry.name); + await contentServicesPage.checkContextActionIsVisible('Download'); + await contentServicesPage.checkContextActionIsVisible('Copy'); + await contentServicesPage.checkContextActionIsVisible('Move'); + await contentServicesPage.checkContextActionIsVisible('Delete'); + await contentServicesPage.checkContextActionIsVisible('Info'); + await contentServicesPage.checkContextActionIsVisible('Permission'); }); }); @@ -236,19 +242,19 @@ describe('Document List Component - Actions', () => { describe('Folder Actions - Copy and Move', () => { - const folderModel1 = new FolderModel({'name': StringUtil.generateRandomString()}); - const folderModel2 = new FolderModel({'name': StringUtil.generateRandomString()}); - const folderModel3 = new FolderModel({'name': StringUtil.generateRandomString()}); - const folderModel4 = new FolderModel({'name': StringUtil.generateRandomString()}); - const folderModel5 = new FolderModel({'name': StringUtil.generateRandomString()}); - const folderModel6 = new FolderModel({'name': StringUtil.generateRandomString()}); + const folderModel1 = new FolderModel({ name: StringUtil.generateRandomString() }); + const folderModel2 = new FolderModel({ name: StringUtil.generateRandomString() }); + const folderModel3 = new FolderModel({ name: StringUtil.generateRandomString() }); + const folderModel4 = new FolderModel({ name: StringUtil.generateRandomString() }); + const folderModel5 = new FolderModel({ name: StringUtil.generateRandomString() }); + const folderModel6 = new FolderModel({ name: StringUtil.generateRandomString() }); let folder1, folder2, folder3, folder4, folder5, folder6; let folders; const contentServicesUser = new AcsUserModel(); - beforeAll(async (done) => { + beforeAll(async () => { await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); await this.alfrescoJsApi.core.peopleApi.addPerson(contentServicesUser); @@ -260,118 +266,117 @@ describe('Document List Component - Actions', () => { folder5 = await uploadActions.createFolder('E' + folderModel5.name, '-my-'); folder6 = await uploadActions.createFolder('F' + folderModel6.name, '-my-'); folders = [folder1, folder2, folder3, folder4, folder5, folder6]; - done(); + }); - beforeEach(async (done) => { - loginPage.loginToContentServicesUsingUserModel(contentServicesUser); - contentServicesPage.goToDocumentList(); - contentServicesPage.waitForTableBody(); - paginationPage.selectItemsPerPage('5'); - contentServicesPage.checkAcsContainer(); - contentListPage.waitForTableBody(); - done(); + beforeEach(async () => { + await loginPage.loginToContentServicesUsingUserModel(contentServicesUser); + await contentServicesPage.goToDocumentList(); + await contentServicesPage.waitForTableBody(); + await paginationPage.selectItemsPerPage('5'); + await contentServicesPage.checkAcsContainer(); + await contentListPage.waitForTableBody(); + }); - afterAll(async (done) => { + afterAll(async () => { await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); - await folders.forEach(function (folder) { - uploadActions.deleteFileOrFolder(folder.entry.id); - }); - done(); - }); - - it('[C260132] Move action on folder with - Load more', () => { - - expect(paginationPage.getCurrentItemsPerPage()).toEqual('5'); - expect(paginationPage.getPaginationRange()).toEqual('Showing 1-' + 5 + ' of ' + 6); - contentListPage.rightClickOnRow('A' + folderModel1.name); - contentServicesPage.checkContextActionIsVisible('Move'); - contentServicesPage.pressContextMenuActionNamed('Move'); - contentNodeSelector.checkDialogIsDisplayed(); - expect(contentNodeSelector.getDialogHeaderText()).toBe('Move \'' + 'A' + folderModel1.name + '\' to...'); - contentNodeSelector.checkSearchInputIsDisplayed(); - expect(contentNodeSelector.getSearchLabel()).toBe('Search'); - contentNodeSelector.checkSelectedSiteIsDisplayed('My files'); - contentNodeSelector.checkCancelButtonIsDisplayed(); - contentNodeSelector.checkMoveCopyButtonIsDisplayed(); - expect(contentNodeSelector.getMoveCopyButtonText()).toBe('MOVE'); - expect(contentNodeSelector.numberOfResultsDisplayed()).toBe(5); - infinitePaginationPage.clickLoadMoreButton(); - expect(contentNodeSelector.numberOfResultsDisplayed()).toBe(6); - infinitePaginationPage.checkLoadMoreButtonIsNotDisplayed(); - contentNodeSelector.contentListPage().dataTablePage().selectRowByContent('F' + folderModel6.name); - contentNodeSelector.contentListPage().dataTablePage().checkRowByContentIsSelected('F' + folderModel6.name); - contentNodeSelector.clickCancelButton(); - contentNodeSelector.checkDialogIsNotDisplayed(); - contentServicesPage.checkContentIsDisplayed('A' + folderModel1.name); - - contentListPage.rightClickOnRow('A' + folderModel1.name); - contentServicesPage.checkContextActionIsVisible('Move'); - contentServicesPage.pressContextMenuActionNamed('Move'); - contentNodeSelector.checkDialogIsDisplayed(); - infinitePaginationPage.clickLoadMoreButton(); - contentNodeSelector.contentListPage().dataTablePage().selectRowByContent('F' + folderModel6.name); - contentNodeSelector.contentListPage().dataTablePage().checkRowByContentIsSelected('F' + folderModel6.name); - contentNodeSelector.clickMoveCopyButton(); - contentServicesPage.checkContentIsNotDisplayed('A' + folderModel1.name); - contentServicesPage.doubleClickRow('F' + folderModel6.name); - contentServicesPage.checkContentIsDisplayed('A' + folderModel1.name); - - contentListPage.rightClickOnRow('A' + folderModel1.name); - contentServicesPage.checkContextActionIsVisible('Move'); - contentServicesPage.pressContextMenuActionNamed('Move'); - contentNodeSelector.checkDialogIsDisplayed(); - breadCrumbDropdownPage.clickParentFolder(); - breadCrumbDropdownPage.checkBreadCrumbDropdownIsDisplayed(); - breadCrumbDropdownPage.choosePath(contentServicesUser.id); - contentNodeSelector.clickMoveCopyButton(); - contentServicesPage.checkContentIsNotDisplayed('A' + folderModel1.name); - - breadCrumbPage.chooseBreadCrumb(contentServicesUser.id); - contentServicesPage.waitForTableBody(); - contentServicesPage.checkContentIsDisplayed('A' + folderModel1.name); + for (const folder of folders) { + await uploadActions.deleteFileOrFolder(folder.entry.id); + } }); - it('[C305051] Copy action on folder with - Load more', () => { + it('[C260132] Move action on folder with - Load more', async () => { + await expect(await paginationPage.getCurrentItemsPerPage()).toEqual('5'); + await expect(await paginationPage.getPaginationRange()).toEqual('Showing 1-' + 5 + ' of ' + 6); + await contentServicesPage.getDocumentList().rightClickOnRow('A' + folderModel1.name); + await contentServicesPage.checkContextActionIsVisible('Move'); + await contentServicesPage.pressContextMenuActionNamed('Move'); + await contentNodeSelector.checkDialogIsDisplayed(); + await expect(await contentNodeSelector.getDialogHeaderText()).toBe('Move \'' + 'A' + folderModel1.name + '\' to...'); + await contentNodeSelector.checkSearchInputIsDisplayed(); + await expect(await contentNodeSelector.getSearchLabel()).toBe('Search'); + await contentNodeSelector.checkSelectedSiteIsDisplayed('My files'); + await contentNodeSelector.checkCancelButtonIsDisplayed(); + await contentNodeSelector.checkMoveCopyButtonIsDisplayed(); + await expect(await contentNodeSelector.getMoveCopyButtonText()).toBe('MOVE'); + await expect(await contentNodeSelector.numberOfResultsDisplayed()).toBe(5); + await infinitePaginationPage.clickLoadMoreButton(); + await expect(await contentNodeSelector.numberOfResultsDisplayed()).toBe(6); + await infinitePaginationPage.checkLoadMoreButtonIsNotDisplayed(); + await contentNodeSelector.contentListPage().dataTablePage().selectRowByContent('F' + folderModel6.name); + await contentNodeSelector.contentListPage().dataTablePage().checkRowByContentIsSelected('F' + folderModel6.name); + await contentNodeSelector.clickCancelButton(); + await contentNodeSelector.checkDialogIsNotDisplayed(); + await contentServicesPage.checkContentIsDisplayed('A' + folderModel1.name); - expect(paginationPage.getCurrentItemsPerPage()).toEqual('5'); - expect(paginationPage.getPaginationRange()).toEqual('Showing 1-' + 5 + ' of ' + 6); - contentListPage.rightClickOnRow('A' + folderModel1.name); - contentServicesPage.checkContextActionIsVisible('Copy'); - contentServicesPage.pressContextMenuActionNamed('Copy'); - contentNodeSelector.checkDialogIsDisplayed(); - expect(contentNodeSelector.getDialogHeaderText()).toBe('Copy \'' + 'A' + folderModel1.name + '\' to...'); - contentNodeSelector.checkSearchInputIsDisplayed(); - expect(contentNodeSelector.getSearchLabel()).toBe('Search'); - contentNodeSelector.checkSelectedSiteIsDisplayed('My files'); - contentNodeSelector.checkCancelButtonIsDisplayed(); - contentNodeSelector.checkMoveCopyButtonIsDisplayed(); - expect(contentNodeSelector.getMoveCopyButtonText()).toBe('COPY'); - expect(contentNodeSelector.numberOfResultsDisplayed()).toBe(5); - infinitePaginationPage.clickLoadMoreButton(); - expect(contentNodeSelector.numberOfResultsDisplayed()).toBe(6); - infinitePaginationPage.checkLoadMoreButtonIsNotDisplayed(); - contentNodeSelector.contentListPage().dataTablePage().selectRowByContent('F' + folderModel6.name); - contentNodeSelector.contentListPage().dataTablePage().checkRowByContentIsSelected('F' + folderModel6.name); - contentNodeSelector.clickCancelButton(); - contentNodeSelector.checkDialogIsNotDisplayed(); - contentServicesPage.checkContentIsDisplayed('A' + folderModel1.name); + await contentServicesPage.getDocumentList().rightClickOnRow('A' + folderModel1.name); + await contentServicesPage.checkContextActionIsVisible('Move'); + await contentServicesPage.pressContextMenuActionNamed('Move'); + await contentNodeSelector.checkDialogIsDisplayed(); + await infinitePaginationPage.clickLoadMoreButton(); + await contentNodeSelector.contentListPage().dataTablePage().selectRowByContent('F' + folderModel6.name); + await contentNodeSelector.contentListPage().dataTablePage().checkRowByContentIsSelected('F' + folderModel6.name); + await contentNodeSelector.clickMoveCopyButton(); + await contentServicesPage.checkContentIsNotDisplayed('A' + folderModel1.name); + await contentServicesPage.doubleClickRow('F' + folderModel6.name); + await contentServicesPage.checkContentIsDisplayed('A' + folderModel1.name); - contentListPage.rightClickOnRow('A' + folderModel1.name); - contentServicesPage.checkContextActionIsVisible('Copy'); - contentServicesPage.pressContextMenuActionNamed('Copy'); - contentNodeSelector.checkDialogIsDisplayed(); - infinitePaginationPage.clickLoadMoreButton(); - contentNodeSelector.contentListPage().dataTablePage().selectRowByContent('F' + folderModel6.name); - contentNodeSelector.contentListPage().dataTablePage().checkRowByContentIsSelected('F' + folderModel6.name); - contentNodeSelector.clickMoveCopyButton(); - contentServicesPage.checkContentIsDisplayed('A' + folderModel1.name); - paginationPage.clickOnNextPage(); - contentListPage.waitForTableBody(); - contentServicesPage.doubleClickRow('F' + folderModel6.name); - contentServicesPage.checkContentIsDisplayed('A' + folderModel1.name); + await contentServicesPage.getDocumentList().rightClickOnRow('A' + folderModel1.name); + await contentServicesPage.checkContextActionIsVisible('Move'); + await contentServicesPage.pressContextMenuActionNamed('Move'); + await contentNodeSelector.checkDialogIsDisplayed(); + await breadCrumbDropdownPage.clickParentFolder(); + await breadCrumbDropdownPage.checkBreadCrumbDropdownIsDisplayed(); + await breadCrumbDropdownPage.choosePath(contentServicesUser.id); + await contentNodeSelector.clickMoveCopyButton(); + await contentServicesPage.checkContentIsNotDisplayed('A' + folderModel1.name); + + await breadCrumbPage.chooseBreadCrumb(contentServicesUser.id); + await contentServicesPage.waitForTableBody(); + await contentServicesPage.checkContentIsDisplayed('A' + folderModel1.name); + + }); + + it('[C305051] Copy action on folder with - Load more', async () => { + + await expect(await paginationPage.getCurrentItemsPerPage()).toEqual('5'); + await expect(await paginationPage.getPaginationRange()).toEqual('Showing 1-' + 5 + ' of ' + 6); + await contentServicesPage.getDocumentList().rightClickOnRow('A' + folderModel1.name); + await contentServicesPage.checkContextActionIsVisible('Copy'); + await contentServicesPage.pressContextMenuActionNamed('Copy'); + await contentNodeSelector.checkDialogIsDisplayed(); + await expect(await contentNodeSelector.getDialogHeaderText()).toBe('Copy \'' + 'A' + folderModel1.name + '\' to...'); + await contentNodeSelector.checkSearchInputIsDisplayed(); + await expect(await contentNodeSelector.getSearchLabel()).toBe('Search'); + await contentNodeSelector.checkSelectedSiteIsDisplayed('My files'); + await contentNodeSelector.checkCancelButtonIsDisplayed(); + await contentNodeSelector.checkMoveCopyButtonIsDisplayed(); + await expect(await contentNodeSelector.getMoveCopyButtonText()).toBe('COPY'); + await expect(await contentNodeSelector.numberOfResultsDisplayed()).toBe(5); + await infinitePaginationPage.clickLoadMoreButton(); + await expect(await contentNodeSelector.numberOfResultsDisplayed()).toBe(6); + await infinitePaginationPage.checkLoadMoreButtonIsNotDisplayed(); + await contentNodeSelector.contentListPage().dataTablePage().selectRowByContent('F' + folderModel6.name); + await contentNodeSelector.contentListPage().dataTablePage().checkRowByContentIsSelected('F' + folderModel6.name); + await contentNodeSelector.clickCancelButton(); + await contentNodeSelector.checkDialogIsNotDisplayed(); + await contentServicesPage.checkContentIsDisplayed('A' + folderModel1.name); + + await contentServicesPage.getDocumentList().rightClickOnRow('A' + folderModel1.name); + await contentServicesPage.checkContextActionIsVisible('Copy'); + await contentServicesPage.pressContextMenuActionNamed('Copy'); + await contentNodeSelector.checkDialogIsDisplayed(); + await infinitePaginationPage.clickLoadMoreButton(); + await contentNodeSelector.contentListPage().dataTablePage().selectRowByContent('F' + folderModel6.name); + await contentNodeSelector.contentListPage().dataTablePage().checkRowByContentIsSelected('F' + folderModel6.name); + await contentNodeSelector.clickMoveCopyButton(); + await contentServicesPage.checkContentIsDisplayed('A' + folderModel1.name); + await paginationPage.clickOnNextPage(); + await contentServicesPage.getDocumentList().waitForTableBody(); + await contentServicesPage.doubleClickRow('F' + folderModel6.name); + await contentServicesPage.checkContentIsDisplayed('A' + folderModel1.name); }); diff --git a/e2e/content-services/document-list/document-list-component.e2e.ts b/e2e/content-services/document-list/document-list-component.e2e.ts index adc08746e2..ac4785e191 100644 --- a/e2e/content-services/document-list/document-list-component.e2e.ts +++ b/e2e/content-services/document-list/document-list-component.e2e.ts @@ -38,7 +38,7 @@ describe('Document List Component', () => { let acsUser = null; let testFileNode, pdfBFileNode; - afterEach(async (done) => { + afterEach(async () => { await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); if (uploadedFolder) { await uploadActions.deleteFileOrFolder(uploadedFolder.entry.id); @@ -56,32 +56,32 @@ describe('Document List Component', () => { await uploadActions.deleteFileOrFolder(pdfBFileNode.entry.id); pdfBFileNode = null; } - done(); + }); describe('Custom Column', () => { let folderName; const pdfFileModel = new FileModel({ - 'name': resources.Files.ADF_DOCUMENTS.PDF.file_name, - 'location': resources.Files.ADF_DOCUMENTS.PDF.file_location + name: resources.Files.ADF_DOCUMENTS.PDF.file_name, + location: resources.Files.ADF_DOCUMENTS.PDF.file_location }); const docxFileModel = new FileModel({ - 'name': resources.Files.ADF_DOCUMENTS.DOCX.file_name, - 'location': resources.Files.ADF_DOCUMENTS.DOCX.file_location + name: resources.Files.ADF_DOCUMENTS.DOCX.file_name, + location: resources.Files.ADF_DOCUMENTS.DOCX.file_location }); const timeAgoFileModel = new FileModel({ - 'name': resources.Files.ADF_DOCUMENTS.TEST.file_name, - 'location': resources.Files.ADF_DOCUMENTS.TEST.file_location + name: resources.Files.ADF_DOCUMENTS.TEST.file_name, + location: resources.Files.ADF_DOCUMENTS.TEST.file_location }); const mediumFileModel = new FileModel({ - 'name': resources.Files.ADF_DOCUMENTS.PDF_B.file_name, - 'location': resources.Files.ADF_DOCUMENTS.PDF_B.file_location + name: resources.Files.ADF_DOCUMENTS.PDF_B.file_name, + location: resources.Files.ADF_DOCUMENTS.PDF_B.file_location }); let pdfUploadedNode, docxUploadedNode, timeAgoUploadedNode, mediumDateUploadedNode; - beforeAll(async (done) => { + beforeAll(async () => { acsUser = new AcsUserModel(); @@ -96,10 +96,10 @@ describe('Document List Component', () => { uploadedFolder = await uploadActions.createFolder(folderName, '-my-'); pdfUploadedNode = await uploadActions.uploadFile(pdfFileModel.location, pdfFileModel.name, '-my-'); docxUploadedNode = await uploadActions.uploadFile(docxFileModel.location, docxFileModel.name, '-my-'); - done(); + }); - afterAll(async (done) => { + afterAll(async () => { await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); if (pdfUploadedNode) { @@ -114,71 +114,71 @@ describe('Document List Component', () => { if (mediumDateUploadedNode) { await uploadActions.deleteFileOrFolder(mediumDateUploadedNode.entry.id); } - done(); + }); - beforeEach(async (done) => { + beforeEach(async () => { await loginPage.loginToContentServicesUsingUserModel(acsUser); - done(); + }); - it('[C279926] Should only display the user\'s files and folders', () => { - contentServicesPage.goToDocumentList(); - contentServicesPage.checkContentIsDisplayed(folderName); - contentServicesPage.checkContentIsDisplayed(pdfFileModel.name); - contentServicesPage.checkContentIsDisplayed(docxFileModel.name); - expect(contentServicesPage.getDocumentListRowNumber()).toBe(4); + it('[C279926] Should only display the user\'s files and folders', async () => { + await contentServicesPage.goToDocumentList(); + await contentServicesPage.checkContentIsDisplayed(folderName); + await contentServicesPage.checkContentIsDisplayed(pdfFileModel.name); + await contentServicesPage.checkContentIsDisplayed(docxFileModel.name); + await expect(await contentServicesPage.getDocumentListRowNumber()).toBe(4); }); - it('[C279927] Should display default columns', () => { - contentServicesPage.goToDocumentList(); - contentServicesPage.checkColumnNameHeader(); - contentServicesPage.checkColumnSizeHeader(); - contentServicesPage.checkColumnCreatedByHeader(); - contentServicesPage.checkColumnCreatedHeader(); + it('[C279927] Should display default columns', async () => { + await contentServicesPage.goToDocumentList(); + await contentServicesPage.checkColumnNameHeader(); + await contentServicesPage.checkColumnSizeHeader(); + await contentServicesPage.checkColumnCreatedByHeader(); + await contentServicesPage.checkColumnCreatedHeader(); }); - it('[C279928] Should be able to display date with timeAgo', async (done) => { + it('[C279928] Should be able to display date with timeAgo', async () => { await this.alfrescoJsApi.login(acsUser.id, acsUser.password); timeAgoUploadedNode = await uploadActions.uploadFile(timeAgoFileModel.location, timeAgoFileModel.name, '-my-'); - contentServicesPage.goToDocumentList(); - const dateValue = contentServicesPage.getColumnValueForRow(timeAgoFileModel.name, 'Created'); - expect(dateValue).toMatch(/(ago|few)/); - done(); + await contentServicesPage.goToDocumentList(); + const dateValue = await contentServicesPage.getColumnValueForRow(timeAgoFileModel.name, 'Created'); + await expect(dateValue).toMatch(/(ago|few)/); + }); - it('[C279929] Should be able to display the date with date type', async (done) => { + it('[C279929] Should be able to display the date with date type', async () => { await this.alfrescoJsApi.login(acsUser.id, acsUser.password); mediumDateUploadedNode = await uploadActions.uploadFile(mediumFileModel.location, mediumFileModel.name, '-my-'); const createdDate = moment(mediumDateUploadedNode.createdAt).format('ll'); - contentServicesPage.goToDocumentList(); - contentServicesPage.enableMediumTimeFormat(); - const dateValue = contentServicesPage.getColumnValueForRow(mediumFileModel.name, 'Created'); - expect(dateValue).toContain(createdDate); - done(); + await contentServicesPage.goToDocumentList(); + await contentServicesPage.enableMediumTimeFormat(); + const dateValue = await contentServicesPage.getColumnValueForRow(mediumFileModel.name, 'Created'); + await expect(dateValue).toContain(createdDate); + }); }); describe('Column Sorting', () => { const fakeFileA = new FileModel({ - 'name': 'A', - 'location': resources.Files.ADF_DOCUMENTS.TEST.file_location + name: 'A', + location: resources.Files.ADF_DOCUMENTS.TEST.file_location }); const fakeFileB = new FileModel({ - 'name': 'B', - 'location': resources.Files.ADF_DOCUMENTS.TEST.file_location + name: 'B', + location: resources.Files.ADF_DOCUMENTS.TEST.file_location }); const fakeFileC = new FileModel({ - 'name': 'C', - 'location': resources.Files.ADF_DOCUMENTS.TEST.file_location + name: 'C', + location: resources.Files.ADF_DOCUMENTS.TEST.file_location }); let fileANode, fileBNode, fileCNode; - beforeAll(async (done) => { + beforeAll(async () => { const user = new AcsUserModel(); @@ -192,12 +192,11 @@ describe('Document List Component', () => { fileCNode = await uploadActions.uploadFile(fakeFileC.location, fakeFileC.name, '-my-'); await loginPage.loginToContentServicesUsingUserModel(user); - contentServicesPage.goToDocumentList(); + await contentServicesPage.goToDocumentList(); - done(); }); - afterAll(async (done) => { + afterAll(async () => { await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); if (fileANode) { await uploadActions.deleteFileOrFolder(fileANode.entry.id); @@ -208,53 +207,53 @@ describe('Document List Component', () => { if (fileCNode) { await uploadActions.deleteFileOrFolder(fileCNode.entry.id); } - done(); + }); - it('[C260112] Should be able to sort by name (Ascending)', () => { - expect(contentServicesPage.sortAndCheckListIsOrderedByName('asc')).toBe(true, 'List is not sorted.'); + it('[C260112] Should be able to sort by name (Ascending)', async () => { + await expect(await contentServicesPage.sortAndCheckListIsOrderedByName('asc')).toBe(true, 'List is not sorted.'); }); - it('[C272770] Should be able to sort by name (Descending)', () => { - expect(contentServicesPage.sortAndCheckListIsOrderedByName('desc')).toBe(true, 'List is not sorted.'); + it('[C272770] Should be able to sort by name (Descending)', async () => { + await expect(await contentServicesPage.sortAndCheckListIsOrderedByName('desc')).toBe(true, 'List is not sorted.'); }); - it('[C272771] Should be able to sort by author (Ascending)', () => { - expect(contentServicesPage.sortAndCheckListIsOrderedByAuthor('asc')).toBe(true, 'List is not sorted.'); + it('[C272771] Should be able to sort by author (Ascending)', async () => { + await expect(await contentServicesPage.sortAndCheckListIsOrderedByAuthor('asc')).toBe(true, 'List is not sorted.'); }); - it('[C272772] Should be able to sort by author (Descending)', () => { - expect(contentServicesPage.sortAndCheckListIsOrderedByAuthor('desc')).toBe(true, 'List is not sorted.'); + it('[C272772] Should be able to sort by author (Descending)', async () => { + await expect(await contentServicesPage.sortAndCheckListIsOrderedByAuthor('desc')).toBe(true, 'List is not sorted.'); }); - it('[C272773] Should be able to sort by date (Ascending)', () => { - expect(contentServicesPage.sortAndCheckListIsOrderedByCreated('asc')).toBe(true, 'List is not sorted.'); + it('[C272773] Should be able to sort by date (Ascending)', async () => { + await expect(await contentServicesPage.sortAndCheckListIsOrderedByCreated('asc')).toBe(true, 'List is not sorted.'); }); - it('[C272774] Should be able to sort by date (Descending)', () => { - expect(contentServicesPage.sortAndCheckListIsOrderedByCreated('desc')).toBe(true, 'List is not sorted.'); + it('[C272774] Should be able to sort by date (Descending)', async () => { + await expect(await contentServicesPage.sortAndCheckListIsOrderedByCreated('desc')).toBe(true, 'List is not sorted.'); }); }); - it('[C279959] Should display empty folder state for new folders', async (done) => { + it('[C279959] Should display empty folder state for new folders', async () => { acsUser = new AcsUserModel(); const folderName = 'BANANA'; await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); await this.alfrescoJsApi.core.peopleApi.addPerson(acsUser); await loginPage.loginToContentServicesUsingUserModel(acsUser); - contentServicesPage.goToDocumentList(); - contentServicesPage.createNewFolder(folderName); - contentServicesPage.doubleClickRow(folderName); - contentServicesPage.checkEmptyFolderTextToBe('This folder is empty'); - contentServicesPage.checkEmptyFolderImageUrlToContain('/assets/images/empty_doc_lib.svg'); - done(); + await contentServicesPage.goToDocumentList(); + await contentServicesPage.createNewFolder(folderName); + await contentServicesPage.doubleClickRow(folderName); + await contentServicesPage.checkEmptyFolderTextToBe('This folder is empty'); + await contentServicesPage.checkEmptyFolderImageUrlToContain('/assets/images/empty_doc_lib.svg'); + }); - it('[C272775] Should be able to upload a file in new folder', async (done) => { + it('[C272775] Should be able to upload a file in new folder', async () => { const testFile = new FileModel({ - 'name': resources.Files.ADF_DOCUMENTS.TEST.file_name, - 'location': resources.Files.ADF_DOCUMENTS.TEST.file_location + name: resources.Files.ADF_DOCUMENTS.TEST.file_name, + location: resources.Files.ADF_DOCUMENTS.TEST.file_location }); acsUser = new AcsUserModel(); /* cspell:disable-next-line */ @@ -264,30 +263,30 @@ describe('Document List Component', () => { await this.alfrescoJsApi.login(acsUser.id, acsUser.password); uploadedFolder = await uploadActions.createFolder(folderName, '-my-'); await loginPage.loginToContentServicesUsingUserModel(acsUser); - contentServicesPage.goToDocumentList(); - contentServicesPage.checkContentIsDisplayed(uploadedFolder.entry.name); - contentServicesPage.doubleClickRow(uploadedFolder.entry.name); - contentServicesPage.uploadFile(testFile.location); - contentServicesPage.checkContentIsDisplayed(testFile.name); - done(); + await contentServicesPage.goToDocumentList(); + await contentServicesPage.checkContentIsDisplayed(uploadedFolder.entry.name); + await contentServicesPage.doubleClickRow(uploadedFolder.entry.name); + await contentServicesPage.uploadFile(testFile.location); + await contentServicesPage.checkContentIsDisplayed(testFile.name); + }); - it('[C261997] Should be able to clean Recent Files history', async (done) => { + it('[C261997] Should be able to clean Recent Files history', async () => { acsUser = new AcsUserModel(); await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); await this.alfrescoJsApi.core.peopleApi.addPerson(acsUser); await loginPage.loginToContentServicesUsingUserModel(acsUser); - contentServicesPage.clickOnContentServices(); - contentServicesPage.checkRecentFileToBeShowed(); + await contentServicesPage.clickOnContentServices(); + await contentServicesPage.checkRecentFileToBeShowed(); const icon = await contentServicesPage.getRecentFileIcon(); - expect(icon).toBe('history'); - contentServicesPage.expandRecentFiles(); - contentServicesPage.checkEmptyRecentFileIsDisplayed(); - contentServicesPage.closeRecentFiles(); - done(); + await expect(icon).toBe('history'); + await contentServicesPage.expandRecentFiles(); + await contentServicesPage.checkEmptyRecentFileIsDisplayed(); + await contentServicesPage.closeRecentFiles(); + }); - it('[C279970] Should display Islocked field for folders', async (done) => { + it('[C279970] Should display Islocked field for folders', async () => { acsUser = new AcsUserModel(); const folderNameA = `MEESEEKS_${StringUtil.generateRandomString(5)}_LOOK_AT_ME`; const folderNameB = `MEESEEKS_${StringUtil.generateRandomString(5)}_LOOK_AT_ME`; @@ -297,22 +296,22 @@ describe('Document List Component', () => { uploadedFolder = await uploadActions.createFolder(folderNameA, '-my-'); uploadedFolderExtra = await uploadActions.createFolder(folderNameB, '-my-'); await loginPage.loginToContentServicesUsingUserModel(acsUser); - contentServicesPage.goToDocumentList(); - contentServicesPage.checkContentIsDisplayed(folderNameA); - contentServicesPage.checkContentIsDisplayed(folderNameB); - contentServicesPage.checkLockIsDisplayedForElement(folderNameA); - contentServicesPage.checkLockIsDisplayedForElement(folderNameB); - done(); + await contentServicesPage.goToDocumentList(); + await contentServicesPage.checkContentIsDisplayed(folderNameA); + await contentServicesPage.checkContentIsDisplayed(folderNameB); + await contentServicesPage.checkLockIsDisplayedForElement(folderNameA); + await contentServicesPage.checkLockIsDisplayedForElement(folderNameB); + }); - it('[C269086] Should display Islocked field for files', async (done) => { + it('[C269086] Should display Islocked field for files', async () => { const testFileA = new FileModel({ - 'name': resources.Files.ADF_DOCUMENTS.TEST.file_name, - 'location': resources.Files.ADF_DOCUMENTS.TEST.file_location + name: resources.Files.ADF_DOCUMENTS.TEST.file_name, + location: resources.Files.ADF_DOCUMENTS.TEST.file_location }); const testFileB = new FileModel({ - 'name': resources.Files.ADF_DOCUMENTS.PDF_B.file_name, - 'location': resources.Files.ADF_DOCUMENTS.PDF_B.file_location + name: resources.Files.ADF_DOCUMENTS.PDF_B.file_name, + location: resources.Files.ADF_DOCUMENTS.PDF_B.file_location }); acsUser = new AcsUserModel(); await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); @@ -321,19 +320,19 @@ describe('Document List Component', () => { testFileNode = await uploadActions.uploadFile(testFileA.location, testFileA.name, '-my-'); pdfBFileNode = await uploadActions.uploadFile(testFileB.location, testFileB.name, '-my-'); await loginPage.loginToContentServicesUsingUserModel(acsUser); - contentServicesPage.goToDocumentList(); - contentServicesPage.checkContentIsDisplayed(testFileA.name); - contentServicesPage.checkContentIsDisplayed(testFileB.name); - contentServicesPage.checkLockIsDisplayedForElement(testFileA.name); - contentServicesPage.checkLockIsDisplayedForElement(testFileB.name); - done(); + await contentServicesPage.goToDocumentList(); + await contentServicesPage.checkContentIsDisplayed(testFileA.name); + await contentServicesPage.checkContentIsDisplayed(testFileB.name); + await contentServicesPage.checkLockIsDisplayedForElement(testFileA.name); + await contentServicesPage.checkLockIsDisplayedForElement(testFileB.name); + }); describe('Once uploaded 20 folders', () => { let folderCreated; - beforeAll(async (done) => { + beforeAll(async () => { acsUser = new AcsUserModel(); folderCreated = []; await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); @@ -346,22 +345,19 @@ describe('Document List Component', () => { folder = await uploadActions.createFolder(folderName, '-my-'); folderCreated.push(folder); } - done(); }); - afterAll(async (done) => { - Promise.all(folderCreated.map((folder) => - uploadActions.deleteFileOrFolder(folder.entry.id) - )).then(() => { - done(); - }); + afterAll(async () => { + for (let i = 0; i <= folderCreated.length; i++) { + await uploadActions.deleteFileOrFolder(folderCreated[i].entry.id); + } }); - it('[C277093] Should sort files with Items per page set to default', async (done) => { + it('[C277093] Should sort files with Items per page set to default', async () => { await loginPage.loginToContentServicesUsingUserModel(acsUser); - contentServicesPage.goToDocumentList(); - contentServicesPage.checkListIsSortedByNameColumn('asc'); - done(); + await contentServicesPage.goToDocumentList(); + await contentServicesPage.checkListIsSortedByNameColumn('asc'); + }); }); @@ -369,14 +365,14 @@ describe('Document List Component', () => { describe('Column Template', () => { const file0BytesModel = new FileModel({ - 'name': resources.Files.ADF_DOCUMENTS.TXT_0B.file_name, - 'location': resources.Files.ADF_DOCUMENTS.TXT_0B.file_location + name: resources.Files.ADF_DOCUMENTS.TXT_0B.file_name, + location: resources.Files.ADF_DOCUMENTS.TXT_0B.file_location }); let file; const viewer = new ViewerPage(); - beforeAll(async (done) => { + beforeAll(async () => { acsUser = new AcsUserModel(); await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); await this.alfrescoJsApi.core.peopleApi.addPerson(acsUser); @@ -384,16 +380,16 @@ describe('Document List Component', () => { file = await uploadActions.uploadFile(file0BytesModel.location, file0BytesModel.name, '-my-'); await loginPage.loginToContentServicesUsingUserModel(acsUser); - contentServicesPage.goToDocumentList() - .waitForTableBody(); - done(); + await contentServicesPage.goToDocumentList(); + await contentServicesPage.waitForTableBody(); + }); - it('[C291843] Should be able to navigate using nodes hyperlink when activated', () => { - contentServicesPage.clickHyperlinkNavigationToggle() - .checkFileHyperlinkIsEnabled(file.entry.name) - .clickFileHyperlink(file.entry.name); - viewer.checkFileIsLoaded(); + it('[C291843] Should be able to navigate using nodes hyperlink when activated', async () => { + await contentServicesPage.clickHyperlinkNavigationToggle(); + await contentServicesPage.checkFileHyperlinkIsEnabled(file.entry.name); + await contentServicesPage.clickFileHyperlink(file.entry.name); + await viewer.checkFileIsLoaded(); }); }); }); diff --git a/e2e/content-services/document-list/document-list-copy-move-actions.e2e.ts b/e2e/content-services/document-list/document-list-copy-move-actions.e2e.ts index 39fa4b7278..37161de136 100644 --- a/e2e/content-services/document-list/document-list-copy-move-actions.e2e.ts +++ b/e2e/content-services/document-list/document-list-copy-move-actions.e2e.ts @@ -50,16 +50,16 @@ describe('Document List Component', () => { let folderName, sameNameFolder; const pdfFileModel = new FileModel({ - 'name': resources.Files.ADF_DOCUMENTS.PDF.file_name, - 'location': resources.Files.ADF_DOCUMENTS.PDF.file_location + name: resources.Files.ADF_DOCUMENTS.PDF.file_name, + location: resources.Files.ADF_DOCUMENTS.PDF.file_location }); const testFileModel = new FileModel({ - 'name': resources.Files.ADF_DOCUMENTS.TEST.file_name, - 'location': resources.Files.ADF_DOCUMENTS.TEST.file_location + name: resources.Files.ADF_DOCUMENTS.TEST.file_name, + location: resources.Files.ADF_DOCUMENTS.TEST.file_location }); - beforeAll(async (done) => { + beforeAll(async () => { acsUser = new AcsUserModel(); anotherAcsUser = new AcsUserModel(); folderName = StringUtil.generateRandomString(5); @@ -90,131 +90,129 @@ describe('Document List Component', () => { } }); - browser.driver.sleep(12000); - done(); + await browser.driver.sleep(12000); + }); - afterAll(async (done) => { + afterAll(async () => { await navigationBarPage.clickLogoutButton(); - try { - await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); - await uploadActions.deleteFileOrFolder(uploadedFolder.entry.id); - await uploadActions.deleteFileOrFolder(uploadedFile.entry.id); - await uploadActions.deleteFileOrFolder(sourceFolder.entry.id); - await uploadActions.deleteFileOrFolder(destinationFolder.entry.id); - } catch (error) { - // tslint:disable-next-line:no-console - console.log('Error delete file or folder' + error); - } - done(); + await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); + await uploadActions.deleteFileOrFolder(uploadedFolder.entry.id); + await uploadActions.deleteFileOrFolder(uploadedFile.entry.id); + await uploadActions.deleteFileOrFolder(sourceFolder.entry.id); + await uploadActions.deleteFileOrFolder(destinationFolder.entry.id); + }); describe('Document List Component - Actions Move and Copy', () => { - beforeEach(async (done) => { + beforeAll(async () => { await loginPage.loginToContentServicesUsingUserModel(acsUser); - navigationBarPage.clickContentServicesButton(); - done(); }); - it('[C260128] Move - Same name file', () => { - contentServicesPage.checkContentIsDisplayed(pdfFileModel.name); - contentServicesPage.getDocumentList().rightClickOnRow(pdfFileModel.name); - contentServicesPage.pressContextMenuActionNamed('Move'); - contentNodeSelector.checkDialogIsDisplayed(); - contentNodeSelector.typeIntoNodeSelectorSearchField(folderName); - contentNodeSelector.clickContentNodeSelectorResult(folderName); - contentNodeSelector.clickMoveCopyButton(); - notificationHistoryPage.checkNotifyContains('This name is already in use, try a different name.'); + beforeEach(async () => { + await BrowserActions.closeMenuAndDialogs(); + await navigationBarPage.clickContentServicesButton(); + }); - it('[C260134] Move - folder with subfolder and file within it', () => { - contentServicesPage.checkContentIsDisplayed(destinationFolder.entry.name); - contentServicesPage.checkContentIsDisplayed(sourceFolder.entry.name); - contentServicesPage.getDocumentList().rightClickOnRow(sourceFolder.entry.name); - contentServicesPage.pressContextMenuActionNamed('Move'); - contentNodeSelector.checkDialogIsDisplayed(); - contentNodeSelector.typeIntoNodeSelectorSearchField(destinationFolder.entry.name); - contentNodeSelector.clickContentNodeSelectorResult(destinationFolder.entry.name); - contentNodeSelector.clickMoveCopyButton(); - contentServicesPage.checkContentIsNotDisplayed(sourceFolder.entry.name); - contentServicesPage.doubleClickRow(destinationFolder.entry.name); - contentServicesPage.checkContentIsDisplayed(sourceFolder.entry.name); - contentServicesPage.doubleClickRow(sourceFolder.entry.name); - contentServicesPage.checkContentIsDisplayed(subFolder.entry.name); - contentServicesPage.doubleClickRow(subFolder.entry.name); - contentServicesPage.checkContentIsDisplayed(subFile.entry.name); + it('[C260128] Move - Same name file', async () => { + await contentServicesPage.checkContentIsDisplayed(pdfFileModel.name); + await contentServicesPage.getDocumentList().rightClickOnRow(pdfFileModel.name); + await contentServicesPage.pressContextMenuActionNamed('Move'); + await contentNodeSelector.checkDialogIsDisplayed(); + await contentNodeSelector.typeIntoNodeSelectorSearchField(folderName); + await contentNodeSelector.clickContentNodeSelectorResult(folderName); + await contentNodeSelector.clickMoveCopyButton(); + await notificationHistoryPage.checkNotifyContains('This name is already in use, try a different name.'); }); - it('[C260135] Move - Same name folder', () => { - contentServicesPage.checkContentIsDisplayed(duplicateFolderName.entry.name); - contentServicesPage.getDocumentList().rightClickOnRow(duplicateFolderName.entry.name); - contentServicesPage.pressContextMenuActionNamed('Move'); - contentNodeSelector.checkDialogIsDisplayed(); - contentNodeSelector.typeIntoNodeSelectorSearchField(sourceFolder.entry.name); - contentNodeSelector.clickContentNodeSelectorResult(sourceFolder.entry.name); - contentNodeSelector.clickMoveCopyButton(); - notificationHistoryPage.checkNotifyContains('This name is already in use, try a different name.'); + it('[C260134] Move - folder with subfolder and file within it', async () => { + await contentServicesPage.checkContentIsDisplayed(destinationFolder.entry.name); + await contentServicesPage.checkContentIsDisplayed(sourceFolder.entry.name); + await contentServicesPage.getDocumentList().rightClickOnRow(sourceFolder.entry.name); + await contentServicesPage.pressContextMenuActionNamed('Move'); + await contentNodeSelector.checkDialogIsDisplayed(); + await contentNodeSelector.typeIntoNodeSelectorSearchField(destinationFolder.entry.name); + await contentNodeSelector.clickContentNodeSelectorResult(destinationFolder.entry.name); + await contentNodeSelector.clickMoveCopyButton(); + await contentServicesPage.checkContentIsNotDisplayed(sourceFolder.entry.name); + await contentServicesPage.doubleClickRow(destinationFolder.entry.name); + await contentServicesPage.checkContentIsDisplayed(sourceFolder.entry.name); + await contentServicesPage.doubleClickRow(sourceFolder.entry.name); + await contentServicesPage.checkContentIsDisplayed(subFolder.entry.name); + await contentServicesPage.doubleClickRow(subFolder.entry.name); + await contentServicesPage.checkContentIsDisplayed(subFile.entry.name); }); - it('[C260129] Copy - Same name file', () => { - contentServicesPage.checkContentIsDisplayed(pdfFileModel.name); - contentServicesPage.getDocumentList().rightClickOnRow(pdfFileModel.name); - contentServicesPage.pressContextMenuActionNamed('Copy'); - contentNodeSelector.checkDialogIsDisplayed(); - contentNodeSelector.typeIntoNodeSelectorSearchField(folderName); - contentNodeSelector.clickContentNodeSelectorResult(folderName); - contentNodeSelector.clickMoveCopyButton(); - notificationHistoryPage.checkNotifyContains('This name is already in use, try a different name.'); + it('[C260135] Move - Same name folder', async () => { + await contentServicesPage.checkContentIsDisplayed(duplicateFolderName.entry.name); + await contentServicesPage.getDocumentList().rightClickOnRow(duplicateFolderName.entry.name); + await contentServicesPage.pressContextMenuActionNamed('Move'); + await contentNodeSelector.checkDialogIsDisplayed(); + await contentNodeSelector.typeIntoNodeSelectorSearchField(sourceFolder.entry.name); + await contentNodeSelector.clickContentNodeSelectorResult(sourceFolder.entry.name); + await contentNodeSelector.clickMoveCopyButton(); + await notificationHistoryPage.checkNotifyContains('This name is already in use, try a different name.'); }); - it('[C260136] Copy - Same name folder', () => { - contentServicesPage.checkContentIsDisplayed(duplicateFolderName.entry.name); - contentServicesPage.getDocumentList().rightClickOnRow(duplicateFolderName.entry.name); - contentServicesPage.pressContextMenuActionNamed('Copy'); - contentNodeSelector.checkDialogIsDisplayed(); - contentNodeSelector.typeIntoNodeSelectorSearchField(sourceFolder.entry.name); - contentNodeSelector.clickContentNodeSelectorResult(sourceFolder.entry.name); - contentNodeSelector.clickMoveCopyButton(); - notificationHistoryPage.checkNotifyContains('This name is already in use, try a different name.'); + it('[C260129] Copy - Same name file', async () => { + await contentServicesPage.checkContentIsDisplayed(pdfFileModel.name); + await contentServicesPage.getDocumentList().rightClickOnRow(pdfFileModel.name); + await contentServicesPage.pressContextMenuActionNamed('Copy'); + await contentNodeSelector.checkDialogIsDisplayed(); + await contentNodeSelector.typeIntoNodeSelectorSearchField(folderName); + await contentNodeSelector.clickContentNodeSelectorResult(folderName); + await contentNodeSelector.clickMoveCopyButton(); + await notificationHistoryPage.checkNotifyContains('This name is already in use, try a different name.'); + }); + + it('[C260136] Copy - Same name folder', async () => { + await contentServicesPage.checkContentIsDisplayed(duplicateFolderName.entry.name); + await contentServicesPage.getDocumentList().rightClickOnRow(duplicateFolderName.entry.name); + await contentServicesPage.pressContextMenuActionNamed('Copy'); + await contentNodeSelector.checkDialogIsDisplayed(); + await contentNodeSelector.typeIntoNodeSelectorSearchField(sourceFolder.entry.name); + await contentNodeSelector.clickContentNodeSelectorResult(sourceFolder.entry.name); + await contentNodeSelector.clickMoveCopyButton(); + await notificationHistoryPage.checkNotifyContains('This name is already in use, try a different name.'); }); }); describe('Document List actionns - Move, Copy on no permission folder', () => { - beforeAll((done) => { - loginPage.loginToContentServicesUsingUserModel(anotherAcsUser); - BrowserActions.getUrl(browser.params.testConfig.adf.url + '/files/' + sourceFolder.entry.id); - contentServicesPage.getDocumentList().dataTablePage().waitTillContentLoaded(); - done(); + beforeAll(async () => { + await loginPage.loginToContentServicesUsingUserModel(anotherAcsUser); + await BrowserActions.getUrl(`${browser.params.testConfig.adf.url}/files/${sourceFolder.entry.id}`); + await contentServicesPage.getDocumentList().dataTablePage().waitTillContentLoaded(); }); - it('[C260133] Move - no permission folder', () => { - contentServicesPage.checkContentIsDisplayed(subFolder.entry.name); - contentServicesPage.getDocumentList().rightClickOnRow(subFolder.entry.name); - contentServicesPage.checkContextActionIsVisible('Move'); - expect(contentServicesPage.checkContentActionIsEnabled('Move')).toBe(false); - contentServicesPage.closeActionContext(); + it('[C260133] Move - no permission folder', async () => { + await contentServicesPage.checkContentIsDisplayed(subFolder.entry.name); + await contentServicesPage.getDocumentList().rightClickOnRow(subFolder.entry.name); + await contentServicesPage.checkContextActionIsVisible('Move'); + await expect(await contentServicesPage.isContextActionEnabled('Move')).toBe(false); + await contentServicesPage.closeActionContext(); }); - it('[C260140] Copy - No permission folder', () => { - contentServicesPage.checkContentIsDisplayed(subFolder.entry.name); - contentServicesPage.checkContentIsDisplayed(copyFolder.entry.name); - contentServicesPage.getDocumentList().rightClickOnRow(copyFolder.entry.name); - contentServicesPage.checkContextActionIsVisible('Copy'); - expect(contentServicesPage.checkContentActionIsEnabled('Copy')).toBe(true); - contentServicesPage.pressContextMenuActionNamed('Copy'); - contentNodeSelector.checkDialogIsDisplayed(); - contentNodeSelector.contentListPage().dataTablePage().checkRowContentIsDisplayed(subFolder.entry.name); - contentNodeSelector.contentListPage().dataTablePage().checkRowContentIsDisabled(subFolder.entry.name); - contentNodeSelector.clickContentNodeSelectorResult(subFolder.entry.name); - contentNodeSelector.contentListPage().dataTablePage().checkRowByContentIsSelected(subFolder.entry.name); - expect(contentNodeSelector.checkCopyMoveButtonIsEnabled()).toBe(false); - contentNodeSelector.contentListPage().dataTablePage().doubleClickRowByContent(subFolder.entry.name); - contentNodeSelector.contentListPage().dataTablePage().waitTillContentLoaded(); - contentNodeSelector.contentListPage().dataTablePage().checkRowContentIsDisplayed(subFolder2.entry.name); + it('[C260140] Copy - No permission folder', async () => { + await contentServicesPage.checkContentIsDisplayed(subFolder.entry.name); + await contentServicesPage.checkContentIsDisplayed(copyFolder.entry.name); + await contentServicesPage.getDocumentList().rightClickOnRow(copyFolder.entry.name); + await contentServicesPage.checkContextActionIsVisible('Copy'); + await expect(await contentServicesPage.isContextActionEnabled('Copy')).toBe(true); + await contentServicesPage.pressContextMenuActionNamed('Copy'); + await contentNodeSelector.checkDialogIsDisplayed(); + await contentNodeSelector.contentListPage().dataTablePage().checkRowContentIsDisplayed(subFolder.entry.name); + await contentNodeSelector.contentListPage().dataTablePage().checkRowContentIsDisabled(subFolder.entry.name); + await contentNodeSelector.clickContentNodeSelectorResult(subFolder.entry.name); + await contentNodeSelector.contentListPage().dataTablePage().checkRowByContentIsSelected(subFolder.entry.name); + await expect(await contentNodeSelector.checkCopyMoveButtonIsEnabled()).toBe(false); + await contentNodeSelector.contentListPage().dataTablePage().doubleClickRowByContent(subFolder.entry.name); + await contentNodeSelector.contentListPage().dataTablePage().waitTillContentLoaded(); + await contentNodeSelector.contentListPage().dataTablePage().checkRowContentIsDisplayed(subFolder2.entry.name); }); }); diff --git a/e2e/content-services/document-list/document-list-gallery.e2e.ts b/e2e/content-services/document-list/document-list-gallery.e2e.ts index ecc55f5b10..a28cd0fbec 100644 --- a/e2e/content-services/document-list/document-list-gallery.e2e.ts +++ b/e2e/content-services/document-list/document-list-gallery.e2e.ts @@ -34,7 +34,6 @@ describe('Document List Component', () => { }); const uploadActions = new UploadActions(this.alfrescoJsApi); let acsUser = null; - const navBar = new NavigationBarPage(); const navigationBarPage = new NavigationBarPage(); describe('Gallery View', () => { @@ -50,23 +49,23 @@ describe('Document List Component', () => { let funnyUser; const pdfFile = new FileModel({ - 'name': resources.Files.ADF_DOCUMENTS.PDF.file_name, - 'location': resources.Files.ADF_DOCUMENTS.PDF.file_location + name: resources.Files.ADF_DOCUMENTS.PDF.file_name, + location: resources.Files.ADF_DOCUMENTS.PDF.file_location }); const testFile = new FileModel({ - 'name': resources.Files.ADF_DOCUMENTS.TEST.file_name, - 'location': resources.Files.ADF_DOCUMENTS.TEST.file_location + name: resources.Files.ADF_DOCUMENTS.TEST.file_name, + location: resources.Files.ADF_DOCUMENTS.TEST.file_location }); const docxFile = new FileModel({ - 'name': resources.Files.ADF_DOCUMENTS.DOCX.file_name, - 'location': resources.Files.ADF_DOCUMENTS.DOCX.file_location + name: resources.Files.ADF_DOCUMENTS.DOCX.file_name, + location: resources.Files.ADF_DOCUMENTS.DOCX.file_location }); const folderName = `MEESEEKS_${StringUtil.generateRandomString(5)}_LOOK_AT_ME`; let filePdfNode, fileTestNode, fileDocxNode, folderNode, filePDFSubNode; - beforeAll(async (done) => { + beforeAll(async () => { acsUser = new AcsUserModel(); await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); funnyUser = await this.alfrescoJsApi.core.peopleApi.addPerson(acsUser); @@ -79,7 +78,6 @@ describe('Document List Component', () => { await loginPage.loginToContentServicesUsingUserModel(acsUser); - done(); }); afterAll(async () => { @@ -87,92 +85,94 @@ describe('Document List Component', () => { }); beforeEach(async () => { - navBar.clickHomeButton(); - contentServicesPage.goToDocumentList(); - contentServicesPage.clickGridViewButton(); - contentServicesPage.checkCardViewContainerIsDisplayed(); + await navigationBarPage.clickHomeButton(); + await contentServicesPage.goToDocumentList(); + await contentServicesPage.clickGridViewButton(); + await contentServicesPage.checkCardViewContainerIsDisplayed(); }); - it('[C280016] Should be able to choose Gallery View', () => { - expect(contentServicesPage.getCardElementShowedInPage()).toBe(4); + it('[C280016] Should be able to choose Gallery View', async () => { + await expect(await contentServicesPage.getCardElementShowedInPage()).toBe(4); }); - it('[C280023] Gallery Card should show details', () => { - expect(contentServicesPage.getDocumentCardIconForElement(folderName)).toContain('/assets/images/ft_ic_folder.svg'); - expect(contentServicesPage.getDocumentCardIconForElement(pdfFile.name)).toContain('/assets/images/ft_ic_pdf.svg'); - expect(contentServicesPage.getDocumentCardIconForElement(docxFile.name)).toContain('/assets/images/ft_ic_ms_word.svg'); - expect(contentServicesPage.getDocumentCardIconForElement(testFile.name)).toContain('/assets/images/ft_ic_document.svg'); - contentServicesPage.checkMenuIsShowedForElementIndex(0); - contentServicesPage.checkMenuIsShowedForElementIndex(1); - contentServicesPage.checkMenuIsShowedForElementIndex(2); - contentServicesPage.checkMenuIsShowedForElementIndex(3); + it('[C280023] Gallery Card should show details', async () => { + await expect(await contentServicesPage.getDocumentCardIconForElement(folderName)).toContain('/assets/images/ft_ic_folder.svg'); + await expect(await contentServicesPage.getDocumentCardIconForElement(pdfFile.name)).toContain('/assets/images/ft_ic_pdf.svg'); + await expect(await contentServicesPage.getDocumentCardIconForElement(docxFile.name)).toContain('/assets/images/ft_ic_ms_word.svg'); + await expect(await contentServicesPage.getDocumentCardIconForElement(testFile.name)).toContain('/assets/images/ft_ic_document.svg'); + await contentServicesPage.checkMenuIsShowedForElementIndex(0); + await contentServicesPage.checkMenuIsShowedForElementIndex(1); + await contentServicesPage.checkMenuIsShowedForElementIndex(2); + await contentServicesPage.checkMenuIsShowedForElementIndex(3); }); - it('[C280069] Gallery Card should show attributes', () => { - contentServicesPage.checkDocumentCardPropertyIsShowed(folderName, cardProperties.DISPLAY_NAME); - contentServicesPage.checkDocumentCardPropertyIsShowed(folderName, cardProperties.SIZE); - contentServicesPage.checkDocumentCardPropertyIsShowed(folderName, cardProperties.CREATED_BY); - contentServicesPage.checkDocumentCardPropertyIsShowed(folderName, cardProperties.CREATED); + it('[C280069] Gallery Card should show attributes', async () => { + await contentServicesPage.checkDocumentCardPropertyIsShowed(folderName, cardProperties.DISPLAY_NAME); + await contentServicesPage.checkDocumentCardPropertyIsShowed(folderName, cardProperties.SIZE); + await contentServicesPage.checkDocumentCardPropertyIsShowed(folderName, cardProperties.CREATED_BY); + await contentServicesPage.checkDocumentCardPropertyIsShowed(folderName, cardProperties.CREATED); - expect(contentServicesPage.getAttributeValueForElement(folderName, cardProperties.DISPLAY_NAME)).toBe(folderName); - expect(contentServicesPage.getAttributeValueForElement(folderName, cardProperties.CREATED_BY)).toBe(`${funnyUser.entry.firstName} ${funnyUser.entry.lastName}`); + await expect(await contentServicesPage.getAttributeValueForElement(folderName, cardProperties.DISPLAY_NAME)).toBe(folderName); + await expect(await contentServicesPage.getAttributeValueForElement(folderName, cardProperties.CREATED_BY)).toBe(`${funnyUser.entry.firstName} ${funnyUser.entry.lastName}`); - expect(contentServicesPage.getAttributeValueForElement(folderName, cardProperties.CREATED)).toMatch(/(ago|few)/); + await expect(await contentServicesPage.getAttributeValueForElement(folderName, cardProperties.CREATED)).toMatch(/(ago|few)/); - expect(contentServicesPage.getAttributeValueForElement(pdfFile.name, cardProperties.DISPLAY_NAME)).toBe(pdfFile.name); - expect(contentServicesPage.getAttributeValueForElement(pdfFile.name, cardProperties.SIZE)).toBe(`105.02 KB`); - expect(contentServicesPage.getAttributeValueForElement(pdfFile.name, cardProperties.CREATED_BY)).toBe(`${funnyUser.entry.firstName} ${funnyUser.entry.lastName}`); + await expect(await contentServicesPage.getAttributeValueForElement(pdfFile.name, cardProperties.DISPLAY_NAME)).toBe(pdfFile.name); + await expect(await contentServicesPage.getAttributeValueForElement(pdfFile.name, cardProperties.SIZE)).toBe(`105.02 KB`); + await expect(await contentServicesPage.getAttributeValueForElement(pdfFile.name, cardProperties.CREATED_BY)).toBe(`${funnyUser.entry.firstName} ${funnyUser.entry.lastName}`); - expect(contentServicesPage.getAttributeValueForElement(pdfFile.name, cardProperties.CREATED)).toMatch(/(ago|few)/); + await expect(await contentServicesPage.getAttributeValueForElement(pdfFile.name, cardProperties.CREATED)).toMatch(/(ago|few)/); - expect(contentServicesPage.getAttributeValueForElement(docxFile.name, cardProperties.DISPLAY_NAME)).toBe(docxFile.name); - expect(contentServicesPage.getAttributeValueForElement(docxFile.name, cardProperties.SIZE)).toBe(`81.05 KB`); - expect(contentServicesPage.getAttributeValueForElement(docxFile.name, cardProperties.CREATED_BY)).toBe(`${funnyUser.entry.firstName} ${funnyUser.entry.lastName}`); + await expect(await contentServicesPage.getAttributeValueForElement(docxFile.name, cardProperties.DISPLAY_NAME)).toBe(docxFile.name); + await expect(await contentServicesPage.getAttributeValueForElement(docxFile.name, cardProperties.SIZE)).toBe(`81.05 KB`); + await expect(await contentServicesPage.getAttributeValueForElement(docxFile.name, cardProperties.CREATED_BY)) + .toBe(`${funnyUser.entry.firstName} ${funnyUser.entry.lastName}`); - expect(contentServicesPage.getAttributeValueForElement(docxFile.name, cardProperties.CREATED)).toMatch(/(ago|few)/); + await expect(await contentServicesPage.getAttributeValueForElement(docxFile.name, cardProperties.CREATED)).toMatch(/(ago|few)/); - expect(contentServicesPage.getAttributeValueForElement(testFile.name, cardProperties.DISPLAY_NAME)).toBe(testFile.name); - expect(contentServicesPage.getAttributeValueForElement(testFile.name, cardProperties.SIZE)).toBe(`14 Bytes`); - expect(contentServicesPage.getAttributeValueForElement(testFile.name, cardProperties.CREATED_BY)).toBe(`${funnyUser.entry.firstName} ${funnyUser.entry.lastName}`); + await expect(await contentServicesPage.getAttributeValueForElement(testFile.name, cardProperties.DISPLAY_NAME)).toBe(testFile.name); + await expect(await contentServicesPage.getAttributeValueForElement(testFile.name, cardProperties.SIZE)).toBe(`14 Bytes`); + await expect(await contentServicesPage.getAttributeValueForElement(testFile.name, cardProperties.CREATED_BY)) + .toBe(`${funnyUser.entry.firstName} ${funnyUser.entry.lastName}`); - expect(contentServicesPage.getAttributeValueForElement(testFile.name, cardProperties.CREATED)).toMatch(/(ago|few)/); + await expect(await contentServicesPage.getAttributeValueForElement(testFile.name, cardProperties.CREATED)).toMatch(/(ago|few)/); }); - it('[C280129] Should keep Gallery View when accessing a folder', () => { - contentServicesPage.navigateToCardFolder(folderName); + it('[C280129] Should keep Gallery View when accessing a folder', async () => { + await contentServicesPage.navigateToCardFolder(folderName); - expect(contentServicesPage.getCardElementShowedInPage()).toBe(1); - expect(contentServicesPage.getDocumentCardIconForElement(pdfFile.name)).toContain('/assets/images/ft_ic_pdf.svg'); + await expect(await contentServicesPage.getCardElementShowedInPage()).toBe(1); + await expect(await contentServicesPage.getDocumentCardIconForElement(pdfFile.name)).toContain('/assets/images/ft_ic_pdf.svg'); }); - it('[C280130] Should be able to go back to List View', () => { - contentServicesPage.clickGridViewButton(); - contentServicesPage.checkAcsContainer(); - contentServicesPage.doubleClickRow(folderName); - contentServicesPage.checkRowIsDisplayed(pdfFile.name); + it('[C280130] Should be able to go back to List View', async () => { + await contentServicesPage.clickGridViewButton(); + await contentServicesPage.checkAcsContainer(); + await contentServicesPage.doubleClickRow(folderName); + await contentServicesPage.checkRowIsDisplayed(pdfFile.name); }); - it('[C261993] Should be able to sort Gallery Cards by display name', () => { - contentServicesPage.selectGridSortingFromDropdown(cardProperties.DISPLAY_NAME); - contentServicesPage.checkListIsSortedByNameColumn('asc'); + it('[C261993] Should be able to sort Gallery Cards by display name', async () => { + await contentServicesPage.selectGridSortingFromDropdown(cardProperties.DISPLAY_NAME); + await contentServicesPage.checkListIsSortedByNameColumn('asc'); }); - it('[C261994] Should be able to sort Gallery Cards by size', () => { - contentServicesPage.selectGridSortingFromDropdown(cardProperties.SIZE); - contentServicesPage.checkListIsSortedBySizeColumn('asc'); + it('[C261994] Should be able to sort Gallery Cards by size', async () => { + await contentServicesPage.selectGridSortingFromDropdown(cardProperties.SIZE); + await contentServicesPage.checkListIsSortedBySizeColumn('asc'); }); - it('[C261995] Should be able to sort Gallery Cards by author', () => { - contentServicesPage.selectGridSortingFromDropdown(cardProperties.CREATED_BY); - contentServicesPage.checkListIsSortedByAuthorColumn('asc'); + it('[C261995] Should be able to sort Gallery Cards by author', async () => { + await contentServicesPage.selectGridSortingFromDropdown(cardProperties.CREATED_BY); + await contentServicesPage.checkListIsSortedByAuthorColumn('asc'); }); - it('[C261996] Should be able to sort Gallery Cards by created date', () => { - contentServicesPage.selectGridSortingFromDropdown(cardProperties.CREATED); - contentServicesPage.checkListIsSortedByCreatedColumn('asc'); + it('[C261996] Should be able to sort Gallery Cards by created date', async () => { + await contentServicesPage.selectGridSortingFromDropdown(cardProperties.CREATED); + await contentServicesPage.checkListIsSortedByCreatedColumn('asc'); }); - afterAll(async (done) => { + afterAll(async () => { await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); if (filePdfNode) { await uploadActions.deleteFileOrFolder(filePdfNode.entry.id); @@ -189,7 +189,7 @@ describe('Document List Component', () => { if (folderNode) { await uploadActions.deleteFileOrFolder(folderNode.entry.id); } - done(); + }); }); diff --git a/e2e/content-services/document-list/document-list-pagination.e2e.ts b/e2e/content-services/document-list/document-list-pagination.e2e.ts index f730c0a5b7..895fbb3997 100644 --- a/e2e/content-services/document-list/document-list-pagination.e2e.ts +++ b/e2e/content-services/document-list/document-list-pagination.e2e.ts @@ -24,7 +24,7 @@ import { Util } from '../../util/util'; import { browser } from 'protractor'; import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; -describe('Document List - Pagination', function () { +describe('Document List - Pagination', () => { const pagination = { base: 'newFile', secondSetBase: 'secondSet', @@ -49,21 +49,21 @@ describe('Document List - Pagination', function () { const navigationBarPage = new NavigationBarPage(); const acsUser = new AcsUserModel(); - const newFolderModel = new FolderModel({ 'name': 'newFolder' }); + const newFolderModel = new FolderModel({ name: 'newFolder' }); let fileNames = []; const nrOfFiles = 20; let currentPage = 1; let secondSetOfFiles = []; const secondSetNumber = 25; - const folderTwoModel = new FolderModel({ 'name': 'folderTwo' }); - const folderThreeModel = new FolderModel({ 'name': 'folderThree' }); + const folderTwoModel = new FolderModel({ name: 'folderTwo' }); + const folderThreeModel = new FolderModel({ name: 'folderThree' }); this.alfrescoJsApi = new AlfrescoApi({ - provider: 'ECM', - hostEcm: browser.params.testConfig.adf_acs.host - }); + provider: 'ECM', + hostEcm: browser.params.testConfig.adf_acs.host + }); const uploadActions = new UploadActions(this.alfrescoJsApi); - beforeAll(async (done) => { + beforeAll(async () => { fileNames = Util.generateSequenceFiles(10, nrOfFiles + 9, pagination.base, pagination.extension); secondSetOfFiles = Util.generateSequenceFiles(10, secondSetNumber + 9, pagination.secondSetBase, pagination.extension); @@ -80,270 +80,256 @@ describe('Document List - Pagination', function () { await uploadActions.createEmptyFiles(secondSetOfFiles, folderThreeUploadedModel.entry.id); - loginPage.loginToContentServicesUsingUserModel(acsUser); + await loginPage.loginToContentServicesUsingUserModel(acsUser); - done(); }); afterAll(async () => { await navigationBarPage.clickLogoutButton(); }); - beforeEach((done) => { - contentServicesPage.goToDocumentList(); - contentServicesPage.checkAcsContainer(); - contentServicesPage.waitForTableBody(); - done(); + beforeEach(async () => { + await contentServicesPage.goToDocumentList(); + await contentServicesPage.checkAcsContainer(); + await contentServicesPage.waitForTableBody(); + }); - it('[C260062] Should use default pagination settings', () => { - contentServicesPage.doubleClickRow(newFolderModel.name); - contentServicesPage.checkAcsContainer(); - contentServicesPage.waitForTableBody(); - expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.twenty); - expect(paginationPage.getPaginationRange()).toEqual('Showing 1-' + nrOfFiles + ' of ' + nrOfFiles); - expect(contentServicesPage.numberOfResultsDisplayed()).toBe(nrOfFiles); - contentServicesPage.getAllRowsNameColumn().then(function (list) { - expect(Util.arrayContainsArray(list, fileNames)).toEqual(true); - }); - paginationPage.checkNextPageButtonIsDisabled(); - paginationPage.checkPreviousPageButtonIsDisabled(); + it('[C260062] Should use default pagination settings', async () => { + await contentServicesPage.doubleClickRow(newFolderModel.name); + await contentServicesPage.checkAcsContainer(); + await contentServicesPage.waitForTableBody(); + await expect(await paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.twenty); + await expect(await paginationPage.getPaginationRange()).toEqual('Showing 1-' + nrOfFiles + ' of ' + nrOfFiles); + await expect(await contentServicesPage.numberOfResultsDisplayed()).toBe(nrOfFiles); + const list = await contentServicesPage.getAllRowsNameColumn(); + await expect(Util.arrayContainsArray(list, fileNames)).toEqual(true); + await paginationPage.checkNextPageButtonIsDisabled(); + await paginationPage.checkPreviousPageButtonIsDisabled(); }); - it('[C274713] Should be able to set Items per page to 20', () => { - contentServicesPage.doubleClickRow(newFolderModel.name); - contentServicesPage.checkAcsContainer(); - contentServicesPage.waitForTableBody(); - paginationPage.selectItemsPerPage(itemsPerPage.twenty); - contentServicesPage.checkAcsContainer(); - contentServicesPage.waitForTableBody(); - expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.twenty); - expect(paginationPage.getPaginationRange()).toEqual('Showing 1-' + nrOfFiles + ' of ' + nrOfFiles); - expect(contentServicesPage.numberOfResultsDisplayed()).toBe(nrOfFiles); - contentServicesPage.getAllRowsNameColumn().then(function (list) { - expect(Util.arrayContainsArray(list, fileNames)).toEqual(true); - }); - paginationPage.checkNextPageButtonIsDisabled(); - paginationPage.checkPreviousPageButtonIsDisabled(); + it('[C274713] Should be able to set Items per page to 20', async () => { + await contentServicesPage.doubleClickRow(newFolderModel.name); + await contentServicesPage.checkAcsContainer(); + await contentServicesPage.waitForTableBody(); + await paginationPage.selectItemsPerPage(itemsPerPage.twenty); + await contentServicesPage.checkAcsContainer(); + await contentServicesPage.waitForTableBody(); + await expect(await paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.twenty); + await expect(await paginationPage.getPaginationRange()).toEqual('Showing 1-' + nrOfFiles + ' of ' + nrOfFiles); + await expect(await contentServicesPage.numberOfResultsDisplayed()).toBe(nrOfFiles); + const list = await contentServicesPage.getAllRowsNameColumn(); + await expect(Util.arrayContainsArray(list, fileNames)).toEqual(true); + await paginationPage.checkNextPageButtonIsDisabled(); + await paginationPage.checkPreviousPageButtonIsDisabled(); - navigationBarPage.clickLogoutButton(); - loginPage.loginToContentServicesUsingUserModel(acsUser); - contentServicesPage.goToDocumentList(); - contentServicesPage.checkAcsContainer(); - contentServicesPage.waitForTableBody(); - expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.twenty); - navigationBarPage.clickLogoutButton(); - loginPage.loginToContentServicesUsingUserModel(acsUser); + await navigationBarPage.clickLogoutButton(); + await loginPage.loginToContentServicesUsingUserModel(acsUser); + await contentServicesPage.goToDocumentList(); + await contentServicesPage.checkAcsContainer(); + await contentServicesPage.waitForTableBody(); + await expect(await paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.twenty); + await navigationBarPage.clickLogoutButton(); + await loginPage.loginToContentServicesUsingUserModel(acsUser); }); - it('[C260069] Should be able to set Items per page to 5', () => { - contentServicesPage.doubleClickRow(newFolderModel.name); - contentServicesPage.checkAcsContainer(); - contentServicesPage.waitForTableBody(); - paginationPage.selectItemsPerPage(itemsPerPage.five); - contentServicesPage.checkAcsContainer(); - contentServicesPage.waitForTableBody(); - expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.five); - expect(paginationPage.getPaginationRange()).toEqual('Showing 1-' + itemsPerPage.fiveValue * currentPage + ' of ' + nrOfFiles); - expect(contentServicesPage.numberOfResultsDisplayed()).toBe(itemsPerPage.fiveValue); - contentServicesPage.getAllRowsNameColumn().then(function (list) { - expect(Util.arrayContainsArray(list, fileNames.slice(0, 5))).toEqual(true); - }); - paginationPage.clickOnNextPage(); + it('[C260069] Should be able to set Items per page to 5', async () => { + await contentServicesPage.doubleClickRow(newFolderModel.name); + await contentServicesPage.checkAcsContainer(); + await contentServicesPage.waitForTableBody(); + await paginationPage.selectItemsPerPage(itemsPerPage.five); + await contentServicesPage.checkAcsContainer(); + await contentServicesPage.waitForTableBody(); + await expect(await paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.five); + await expect(await paginationPage.getPaginationRange()).toEqual('Showing 1-' + itemsPerPage.fiveValue * currentPage + ' of ' + nrOfFiles); + await expect(await contentServicesPage.numberOfResultsDisplayed()).toBe(itemsPerPage.fiveValue); + let list = await contentServicesPage.getAllRowsNameColumn(); + await expect(Util.arrayContainsArray(list, fileNames.slice(0, 5))).toEqual(true); + await paginationPage.clickOnNextPage(); currentPage++; - contentServicesPage.checkAcsContainer(); - contentServicesPage.waitForTableBody(); - expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.five); - expect(paginationPage.getPaginationRange()).toEqual('Showing 6-' + itemsPerPage.fiveValue * currentPage + ' of ' + nrOfFiles); - expect(contentServicesPage.numberOfResultsDisplayed()).toBe(itemsPerPage.fiveValue); - contentServicesPage.getAllRowsNameColumn().then(function (list) { - expect(Util.arrayContainsArray(list, fileNames.slice(5, 10))).toEqual(true); - }); - paginationPage.clickOnNextPage(); + await contentServicesPage.checkAcsContainer(); + await contentServicesPage.waitForTableBody(); + await expect(await paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.five); + await expect(await paginationPage.getPaginationRange()).toEqual('Showing 6-' + itemsPerPage.fiveValue * currentPage + ' of ' + nrOfFiles); + await expect(await contentServicesPage.numberOfResultsDisplayed()).toBe(itemsPerPage.fiveValue); + list = await contentServicesPage.getAllRowsNameColumn(); + await expect(Util.arrayContainsArray(list, fileNames.slice(5, 10))).toEqual(true); + await paginationPage.clickOnNextPage(); currentPage++; - contentServicesPage.checkAcsContainer(); - contentServicesPage.waitForTableBody(); - expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.five); - expect(paginationPage.getPaginationRange()).toEqual('Showing 11-' + itemsPerPage.fiveValue * currentPage + ' of ' + nrOfFiles); - expect(contentServicesPage.numberOfResultsDisplayed()).toBe(itemsPerPage.fiveValue); - contentServicesPage.getAllRowsNameColumn().then(function (list) { - expect(Util.arrayContainsArray(list, fileNames.slice(10, 15))).toEqual(true); - }); - paginationPage.clickOnNextPage(); + await contentServicesPage.checkAcsContainer(); + await contentServicesPage.waitForTableBody(); + await expect(await paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.five); + await expect(await paginationPage.getPaginationRange()).toEqual('Showing 11-' + itemsPerPage.fiveValue * currentPage + ' of ' + nrOfFiles); + await expect(await contentServicesPage.numberOfResultsDisplayed()).toBe(itemsPerPage.fiveValue); + list = await contentServicesPage.getAllRowsNameColumn(); + await expect(Util.arrayContainsArray(list, fileNames.slice(10, 15))).toEqual(true); + await paginationPage.clickOnNextPage(); currentPage++; - contentServicesPage.checkAcsContainer(); - contentServicesPage.waitForTableBody(); - expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.five); - expect(paginationPage.getPaginationRange()).toEqual('Showing 16-' + itemsPerPage.fiveValue * currentPage + ' of ' + nrOfFiles); - expect(contentServicesPage.numberOfResultsDisplayed()).toBe(itemsPerPage.fiveValue); - contentServicesPage.getAllRowsNameColumn().then(function (list) { - expect(Util.arrayContainsArray(list, fileNames.slice(15, 20))).toEqual(true); - }); + await contentServicesPage.checkAcsContainer(); + await contentServicesPage.waitForTableBody(); + await expect(await paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.five); + await expect(await paginationPage.getPaginationRange()).toEqual('Showing 16-' + itemsPerPage.fiveValue * currentPage + ' of ' + nrOfFiles); + await expect(await contentServicesPage.numberOfResultsDisplayed()).toBe(itemsPerPage.fiveValue); + list = await contentServicesPage.getAllRowsNameColumn(); + await expect(Util.arrayContainsArray(list, fileNames.slice(15, 20))).toEqual(true); - browser.refresh(); - contentServicesPage.checkAcsContainer(); - contentServicesPage.waitForTableBody(); - expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.five); - navigationBarPage.clickLogoutButton(); - loginPage.loginToContentServicesUsingUserModel(acsUser); + await browser.refresh(); + await contentServicesPage.checkAcsContainer(); + await contentServicesPage.waitForTableBody(); + await expect(await paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.five); + await navigationBarPage.clickLogoutButton(); + await loginPage.loginToContentServicesUsingUserModel(acsUser); }); - it('[C260067] Should be able to set Items per page to 10', () => { + it('[C260067] Should be able to set Items per page to 10', async () => { currentPage = 1; - contentServicesPage.doubleClickRow(newFolderModel.name); - contentServicesPage.checkAcsContainer(); - contentServicesPage.waitForTableBody(); - paginationPage.selectItemsPerPage(itemsPerPage.ten); - contentServicesPage.checkAcsContainer(); - contentServicesPage.waitForTableBody(); - expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.ten); - expect(paginationPage.getPaginationRange()).toEqual('Showing 1-' + itemsPerPage.tenValue * currentPage + ' of ' + nrOfFiles); - expect(contentServicesPage.numberOfResultsDisplayed()).toBe(itemsPerPage.tenValue); - contentServicesPage.getAllRowsNameColumn().then(function (list) { - expect(Util.arrayContainsArray(list, fileNames.slice(0, 10))).toEqual(true); - }); - paginationPage.clickOnNextPage(); + await contentServicesPage.doubleClickRow(newFolderModel.name); + await contentServicesPage.checkAcsContainer(); + await contentServicesPage.waitForTableBody(); + await paginationPage.selectItemsPerPage(itemsPerPage.ten); + await contentServicesPage.checkAcsContainer(); + await contentServicesPage.waitForTableBody(); + await expect(await paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.ten); + await expect(await paginationPage.getPaginationRange()).toEqual('Showing 1-' + itemsPerPage.tenValue * currentPage + ' of ' + nrOfFiles); + await expect(await contentServicesPage.numberOfResultsDisplayed()).toBe(itemsPerPage.tenValue); + let list = await contentServicesPage.getAllRowsNameColumn(); + await expect(Util.arrayContainsArray(list, fileNames.slice(0, 10))).toEqual(true); + await paginationPage.clickOnNextPage(); currentPage++; - contentServicesPage.checkAcsContainer(); - contentServicesPage.waitForTableBody(); - expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.ten); - expect(paginationPage.getPaginationRange()).toEqual('Showing 11-' + itemsPerPage.tenValue * currentPage + ' of ' + nrOfFiles); - expect(contentServicesPage.numberOfResultsDisplayed()).toBe(itemsPerPage.tenValue); - contentServicesPage.getAllRowsNameColumn().then(function (list) { - expect(Util.arrayContainsArray(list, fileNames.slice(10, 20))).toEqual(true); - }); + await contentServicesPage.checkAcsContainer(); + await contentServicesPage.waitForTableBody(); + await expect(await paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.ten); + await expect(await paginationPage.getPaginationRange()).toEqual('Showing 11-' + itemsPerPage.tenValue * currentPage + ' of ' + nrOfFiles); + await expect(await contentServicesPage.numberOfResultsDisplayed()).toBe(itemsPerPage.tenValue); + list = await contentServicesPage.getAllRowsNameColumn(); + await expect(Util.arrayContainsArray(list, fileNames.slice(10, 20))).toEqual(true); - browser.refresh(); - contentServicesPage.waitForTableBody(); - expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.ten); - navigationBarPage.clickLogoutButton(); - loginPage.loginToContentServicesUsingUserModel(acsUser); + await browser.refresh(); + await contentServicesPage.waitForTableBody(); + await expect(await paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.ten); + await navigationBarPage.clickLogoutButton(); + await loginPage.loginToContentServicesUsingUserModel(acsUser); currentPage = 1; }); - it('[C260065] Should be able to set Items per page to 15', () => { + it('[C260065] Should be able to set Items per page to 15', async () => { currentPage = 1; - contentServicesPage.doubleClickRow(newFolderModel.name); - contentServicesPage.checkAcsContainer(); - contentServicesPage.waitForTableBody(); - expect(contentServicesPage.getActiveBreadcrumb()).toEqual(newFolderModel.name); - paginationPage.selectItemsPerPage(itemsPerPage.fifteen); - contentServicesPage.checkAcsContainer(); - contentServicesPage.waitForTableBody(); - expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.fifteen); - expect(paginationPage.getPaginationRange()).toEqual('Showing 1-' + itemsPerPage.fifteenValue * currentPage + ' of ' + nrOfFiles); - expect(contentServicesPage.numberOfResultsDisplayed()).toBe(itemsPerPage.fifteenValue); - contentServicesPage.getAllRowsNameColumn().then(function (list) { - expect(Util.arrayContainsArray(list, fileNames.slice(0, 15))).toEqual(true); - }); + await contentServicesPage.doubleClickRow(newFolderModel.name); + await contentServicesPage.checkAcsContainer(); + await contentServicesPage.waitForTableBody(); + await expect(await contentServicesPage.getActiveBreadcrumb()).toEqual(newFolderModel.name); + await paginationPage.selectItemsPerPage(itemsPerPage.fifteen); + await contentServicesPage.checkAcsContainer(); + await contentServicesPage.waitForTableBody(); + await expect(await paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.fifteen); + await expect(await paginationPage.getPaginationRange()).toEqual('Showing 1-' + itemsPerPage.fifteenValue * currentPage + ' of ' + nrOfFiles); + await expect(await contentServicesPage.numberOfResultsDisplayed()).toBe(itemsPerPage.fifteenValue); + let list = await contentServicesPage.getAllRowsNameColumn(); + await expect(Util.arrayContainsArray(list, fileNames.slice(0, 15))).toEqual(true); currentPage++; - paginationPage.clickOnNextPage(); - contentServicesPage.checkAcsContainer(); - contentServicesPage.waitForTableBody(); - expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.fifteen); - expect(paginationPage.getPaginationRange()).toEqual('Showing 16-' + nrOfFiles + ' of ' + nrOfFiles); - expect(contentServicesPage.numberOfResultsDisplayed()).toBe(nrOfFiles - itemsPerPage.fifteenValue); - contentServicesPage.getAllRowsNameColumn().then(function (list) { - expect(Util.arrayContainsArray(list, fileNames.slice(15, 20))).toEqual(true); - }); + await paginationPage.clickOnNextPage(); + await contentServicesPage.checkAcsContainer(); + await contentServicesPage.waitForTableBody(); + await expect(await paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.fifteen); + await expect(await paginationPage.getPaginationRange()).toEqual('Showing 16-' + nrOfFiles + ' of ' + nrOfFiles); + await expect(await contentServicesPage.numberOfResultsDisplayed()).toBe(nrOfFiles - itemsPerPage.fifteenValue); + list = await contentServicesPage.getAllRowsNameColumn(); + await expect(Util.arrayContainsArray(list, fileNames.slice(15, 20))).toEqual(true); - browser.refresh(); - contentServicesPage.waitForTableBody(); - expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.fifteen); + await browser.refresh(); + await contentServicesPage.waitForTableBody(); + await expect(await paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.fifteen); }); - it('[C91320] Pagination should preserve sorting', () => { - contentServicesPage.doubleClickRow(newFolderModel.name); - contentServicesPage.checkAcsContainer(); - contentServicesPage.waitForTableBody(); - expect(contentServicesPage.getActiveBreadcrumb()).toEqual(newFolderModel.name); - paginationPage.selectItemsPerPage(itemsPerPage.twenty); - contentServicesPage.checkAcsContainer(); - contentServicesPage.waitForTableBody(); + it('[C91320] Pagination should preserve sorting', async () => { + await contentServicesPage.doubleClickRow(newFolderModel.name); + await contentServicesPage.checkAcsContainer(); + await contentServicesPage.waitForTableBody(); + await expect(await contentServicesPage.getActiveBreadcrumb()).toEqual(newFolderModel.name); + await paginationPage.selectItemsPerPage(itemsPerPage.twenty); + await contentServicesPage.checkAcsContainer(); + await contentServicesPage.waitForTableBody(); - expect(contentServicesPage.getContentList().dataTablePage().checkListIsSorted('ASC', 'Display name')); + await expect(await contentServicesPage.getDocumentList().dataTablePage().checkListIsSorted('ASC', 'Display name')); - contentServicesPage.sortByName('DESC'); - expect(contentServicesPage.getContentList().dataTablePage().checkListIsSorted('DESC', 'Display name')); + await contentServicesPage.sortByName('DESC'); + await expect(await contentServicesPage.getDocumentList().dataTablePage().checkListIsSorted('DESC', 'Display name')); - paginationPage.selectItemsPerPage(itemsPerPage.five); - contentServicesPage.checkAcsContainer(); - contentServicesPage.waitForTableBody(); - expect(contentServicesPage.getContentList().dataTablePage().checkListIsSorted('DESC', 'Display name')); + await paginationPage.selectItemsPerPage(itemsPerPage.five); + await contentServicesPage.checkAcsContainer(); + await contentServicesPage.waitForTableBody(); + await expect(await contentServicesPage.getDocumentList().dataTablePage().checkListIsSorted('DESC', 'Display name')); - paginationPage.clickOnNextPage(); - contentServicesPage.checkAcsContainer(); - contentServicesPage.waitForTableBody(); - expect(contentServicesPage.getContentList().dataTablePage().checkListIsSorted('DESC', 'Display name')); + await paginationPage.clickOnNextPage(); + await contentServicesPage.checkAcsContainer(); + await contentServicesPage.waitForTableBody(); + await expect(await contentServicesPage.getDocumentList().dataTablePage().checkListIsSorted('DESC', 'Display name')); - paginationPage.selectItemsPerPage(itemsPerPage.ten); - contentServicesPage.checkAcsContainer(); - contentServicesPage.waitForTableBody(); - expect(contentServicesPage.getContentList().dataTablePage().checkListIsSorted('DESC', 'Display name')); + await paginationPage.selectItemsPerPage(itemsPerPage.ten); + await contentServicesPage.checkAcsContainer(); + await contentServicesPage.waitForTableBody(); + await expect(await contentServicesPage.getDocumentList().dataTablePage().checkListIsSorted('DESC', 'Display name')); }); - it('[C260107] Should not display pagination bar when a folder is empty', () => { - paginationPage.selectItemsPerPage(itemsPerPage.five); - contentServicesPage.checkAcsContainer(); - contentServicesPage.waitForTableBody(); - expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.five); - contentServicesPage.doubleClickRow(newFolderModel.name); - contentServicesPage.checkAcsContainer(); - contentServicesPage.waitForTableBody(); - expect(contentServicesPage.getActiveBreadcrumb()).toEqual(newFolderModel.name); - expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.five); - contentServicesPage.createNewFolder(folderTwoModel.name).checkContentIsDisplayed(folderTwoModel.name); - contentServicesPage.doubleClickRow(folderTwoModel.name); - contentServicesPage.checkPaginationIsNotDisplayed(); + it('[C260107] Should not display pagination bar when a folder is empty', async () => { + await paginationPage.selectItemsPerPage(itemsPerPage.five); + await contentServicesPage.checkAcsContainer(); + await contentServicesPage.waitForTableBody(); + await expect(await paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.five); + await contentServicesPage.doubleClickRow(newFolderModel.name); + await contentServicesPage.checkAcsContainer(); + await contentServicesPage.waitForTableBody(); + await expect(await contentServicesPage.getActiveBreadcrumb()).toEqual(newFolderModel.name); + await expect(await paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.five); + await contentServicesPage.createNewFolder(folderTwoModel.name); + await contentServicesPage.checkContentIsDisplayed(folderTwoModel.name); + await contentServicesPage.doubleClickRow(folderTwoModel.name); + await contentServicesPage.checkPaginationIsNotDisplayed(); }); - it('[C260071] Should be able to change pagination when having 25 files', () => { + it('[C260071] Should be able to change pagination when having 25 files', async () => { currentPage = 1; - contentServicesPage.doubleClickRow(folderThreeModel.name); - contentServicesPage.checkAcsContainer(); - contentServicesPage.waitForTableBody(); - expect(contentServicesPage.getActiveBreadcrumb()).toEqual(folderThreeModel.name); - paginationPage.selectItemsPerPage(itemsPerPage.fifteen); - contentServicesPage.checkAcsContainer(); - contentServicesPage.waitForTableBody(); - expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.fifteen); - expect(paginationPage.getPaginationRange()).toEqual('Showing 1-' + itemsPerPage.fifteenValue * currentPage + ' of ' + secondSetNumber); - expect(contentServicesPage.numberOfResultsDisplayed()).toBe(itemsPerPage.fifteenValue); - contentServicesPage.getAllRowsNameColumn().then(function (list) { - expect(Util.arrayContainsArray(list, secondSetOfFiles.slice(0, 15))).toEqual(true); - }); + await contentServicesPage.doubleClickRow(folderThreeModel.name); + await contentServicesPage.checkAcsContainer(); + await contentServicesPage.waitForTableBody(); + await expect(await contentServicesPage.getActiveBreadcrumb()).toEqual(folderThreeModel.name); + await paginationPage.selectItemsPerPage(itemsPerPage.fifteen); + await contentServicesPage.checkAcsContainer(); + await contentServicesPage.waitForTableBody(); + await expect(await paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.fifteen); + await expect(await paginationPage.getPaginationRange()).toEqual('Showing 1-' + itemsPerPage.fifteenValue * currentPage + ' of ' + secondSetNumber); + await expect(await contentServicesPage.numberOfResultsDisplayed()).toBe(itemsPerPage.fifteenValue); + let list = await contentServicesPage.getAllRowsNameColumn(); + await expect(Util.arrayContainsArray(list, secondSetOfFiles.slice(0, 15))).toEqual(true); currentPage++; - paginationPage.clickOnNextPage(); - contentServicesPage.checkAcsContainer(); - contentServicesPage.waitForTableBody(); - expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.fifteen); - expect(paginationPage.getPaginationRange()).toEqual('Showing 16-' + secondSetNumber + ' of ' + secondSetNumber); - expect(contentServicesPage.numberOfResultsDisplayed()).toBe(secondSetNumber - itemsPerPage.fifteenValue); - contentServicesPage.getAllRowsNameColumn().then(function (list) { - expect(Util.arrayContainsArray(list, secondSetOfFiles.slice(15, 25))).toEqual(true); - }); + await paginationPage.clickOnNextPage(); + await contentServicesPage.checkAcsContainer(); + await contentServicesPage.waitForTableBody(); + await expect(await paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.fifteen); + await expect(await paginationPage.getPaginationRange()).toEqual('Showing 16-' + secondSetNumber + ' of ' + secondSetNumber); + await expect(await contentServicesPage.numberOfResultsDisplayed()).toBe(secondSetNumber - itemsPerPage.fifteenValue); + list = await contentServicesPage.getAllRowsNameColumn(); + await expect(Util.arrayContainsArray(list, secondSetOfFiles.slice(15, 25))).toEqual(true); currentPage = 1; - paginationPage.selectItemsPerPage(itemsPerPage.twenty); - contentServicesPage.checkAcsContainer(); - contentServicesPage.waitForTableBody(); - expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.twenty); - expect(paginationPage.getPaginationRange()).toEqual('Showing 1-' + itemsPerPage.twentyValue * currentPage + ' of ' + secondSetNumber); - expect(contentServicesPage.numberOfResultsDisplayed()).toBe(itemsPerPage.twentyValue); - contentServicesPage.getAllRowsNameColumn().then(function (list) { - expect(Util.arrayContainsArray(list, secondSetOfFiles.slice(0, 20))).toEqual(true); - }); + await paginationPage.selectItemsPerPage(itemsPerPage.twenty); + await contentServicesPage.checkAcsContainer(); + await contentServicesPage.waitForTableBody(); + await expect(await paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.twenty); + await expect(await paginationPage.getPaginationRange()).toEqual('Showing 1-' + itemsPerPage.twentyValue * currentPage + ' of ' + secondSetNumber); + await expect(await contentServicesPage.numberOfResultsDisplayed()).toBe(itemsPerPage.twentyValue); + list = await contentServicesPage.getAllRowsNameColumn(); + await expect(Util.arrayContainsArray(list, secondSetOfFiles.slice(0, 20))).toEqual(true); currentPage++; - paginationPage.clickOnNextPage(); - contentServicesPage.checkAcsContainer(); - contentServicesPage.waitForTableBody(); - expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.twenty); - expect(paginationPage.getPaginationRange()).toEqual('Showing 21-' + secondSetNumber + ' of ' + secondSetNumber); - expect(contentServicesPage.numberOfResultsDisplayed()).toBe(secondSetNumber - itemsPerPage.twentyValue); - contentServicesPage.getAllRowsNameColumn().then(function (list) { - expect(Util.arrayContainsArray(list, secondSetOfFiles.slice(20, 25))).toEqual(true); - }); + await paginationPage.clickOnNextPage(); + await contentServicesPage.checkAcsContainer(); + await contentServicesPage.waitForTableBody(); + await expect(await paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.twenty); + await expect(await paginationPage.getPaginationRange()).toEqual('Showing 21-' + secondSetNumber + ' of ' + secondSetNumber); + await expect(await contentServicesPage.numberOfResultsDisplayed()).toBe(secondSetNumber - itemsPerPage.twentyValue); + list = await contentServicesPage.getAllRowsNameColumn(); + await expect(Util.arrayContainsArray(list, secondSetOfFiles.slice(20, 25))).toEqual(true); }); }); diff --git a/e2e/content-services/document-list/document-list-permissions.e2e.ts b/e2e/content-services/document-list/document-list-permissions.e2e.ts index f2de5f475a..5411c0ffd2 100644 --- a/e2e/content-services/document-list/document-list-permissions.e2e.ts +++ b/e2e/content-services/document-list/document-list-permissions.e2e.ts @@ -40,9 +40,9 @@ describe('Document List Component', () => { }); }); - describe('Permission Message', async () => { + describe('Permission Message', () => { - beforeAll(async (done) => { + beforeAll(async () => { acsUser = new AcsUserModel(); const siteName = `PRIVATE_TEST_SITE_${StringUtil.generateRandomString(5)}`; const privateSiteBody = { visibility: 'PRIVATE', title: siteName }; @@ -55,36 +55,35 @@ describe('Document List Component', () => { await loginPage.loginToContentServicesUsingUserModel(acsUser); - done(); }); - afterAll(async (done) => { + afterAll(async () => { await navigationBarPage.clickLogoutButton(); await this.alfrescoJsApi.core.sitesApi.deleteSite(privateSite.entry.id); - navBar.openLanguageMenu(); - navBar.chooseLanguage('English'); - done(); + await navBar.openLanguageMenu(); + await navBar.chooseLanguage('English'); + }); - it('[C217334] Should display a message when accessing file without permissions', () => { - BrowserActions.getUrl(browser.params.testConfig.adf.url + '/files/' + privateSite.entry.guid); - expect(errorPage.getErrorCode()).toBe('403'); - expect(errorPage.getErrorDescription()).toBe('You\'re not allowed access to this resource on the server.'); + it('[C217334] Should display a message when accessing file without permissions', async () => { + await BrowserActions.getUrl(browser.params.testConfig.adf.url + '/files/' + privateSite.entry.guid); + await expect(await errorPage.getErrorCode()).toBe('403'); + await expect(await errorPage.getErrorDescription()).toBe('You\'re not allowed access to this resource on the server.'); }); - it('[C279924] Should display custom message when accessing a file without permissions', () => { - contentServicesPage.goToDocumentList(); - contentServicesPage.enableCustomPermissionMessage(); - BrowserActions.getUrl(browser.params.testConfig.adf.url + '/files/' + privateSite.entry.guid); - expect(errorPage.getErrorCode()).toBe('403'); + it('[C279924] Should display custom message when accessing a file without permissions', async () => { + await contentServicesPage.goToDocumentList(); + await contentServicesPage.enableCustomPermissionMessage(); + await BrowserActions.getUrl(browser.params.testConfig.adf.url + '/files/' + privateSite.entry.guid); + await expect(await errorPage.getErrorCode()).toBe('403'); }); - it('[C279925] Should display translated message when accessing a file without permissions if language is changed', () => { - navBar.openLanguageMenu(); - navBar.chooseLanguage('Italiano'); - browser.sleep(2000); - BrowserActions.getUrl(browser.params.testConfig.adf.url + '/files/' + privateSite.entry.guid); - expect(errorPage.getErrorDescription()).toBe('Accesso alla risorsa sul server non consentito.'); + it('[C279925] Should display translated message when accessing a file without permissions if language is changed', async () => { + await navBar.openLanguageMenu(); + await navBar.chooseLanguage('Italiano'); + await browser.sleep(2000); + await BrowserActions.getUrl(browser.params.testConfig.adf.url + '/files/' + privateSite.entry.guid); + await expect(await errorPage.getErrorDescription()).toBe('Accesso alla risorsa sul server non consentito.'); }); }); diff --git a/e2e/content-services/document-list/document-list-properties.e2e.ts b/e2e/content-services/document-list/document-list-properties.e2e.ts index 9b6d87d18d..a4bbbce8cb 100644 --- a/e2e/content-services/document-list/document-list-properties.e2e.ts +++ b/e2e/content-services/document-list/document-list-properties.e2e.ts @@ -29,7 +29,7 @@ describe('Document List Component - Properties', () => { const loginPage = new LoginPage(); const contentServicesPage = new ContentServicesPage(); - const navigationBarPage = new NavigationBarPage(); + const navigationBar = new NavigationBarPage(); let subFolder, parentFolder; this.alfrescoJsApi = new AlfrescoApi({ @@ -40,13 +40,13 @@ describe('Document List Component - Properties', () => { let acsUser = null; const pngFile = new FileModel({ - 'name': resources.Files.ADF_DOCUMENTS.PNG.file_name, - 'location': resources.Files.ADF_DOCUMENTS.PNG.file_location + name: resources.Files.ADF_DOCUMENTS.PNG.file_name, + location: resources.Files.ADF_DOCUMENTS.PNG.file_location }); - describe('Allow drop files property', async () => { + describe('Allow drop files property', () => { - beforeEach(async (done) => { + beforeEach(async () => { acsUser = new AcsUserModel(); await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); @@ -61,46 +61,44 @@ describe('Document List Component - Properties', () => { await loginPage.loginToContentServicesUsingUserModel(acsUser); - done(); }); - afterEach(async (done) => { + afterEach(async () => { await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); await uploadActions.deleteFileOrFolder(subFolder.entry.id); await uploadActions.deleteFileOrFolder(parentFolder.entry.id); - done(); + }); - it('[C299154] Should disallow upload content on a folder row if allowDropFiles is false', () => { - navigationBarPage.clickContentServicesButton(); - contentServicesPage.doubleClickRow(parentFolder.entry.name); + it('[C299154] Should disallow upload content on a folder row if allowDropFiles is false', async () => { + await navigationBar.clickContentServicesButton(); + await contentServicesPage.doubleClickRow(parentFolder.entry.name); - contentServicesPage.disableDropFilesInAFolder(); + await contentServicesPage.disableDropFilesInAFolder(); const dragAndDropArea = contentServicesPage.getRowByName(subFolder.entry.name); const dragAndDrop = new DropActions(); - dragAndDrop.dropFile(dragAndDropArea, pngFile.location); - - contentServicesPage.checkContentIsDisplayed(pngFile.name); - contentServicesPage.doubleClickRow(subFolder.entry.name); - contentServicesPage.checkEmptyFolderTextToBe('This folder is empty'); + await dragAndDrop.dropFile(dragAndDropArea, pngFile.location); + await contentServicesPage.checkContentIsDisplayed(pngFile.name); + await contentServicesPage.doubleClickRow(subFolder.entry.name); + await contentServicesPage.checkEmptyFolderTextToBe('This folder is empty'); }); - it('[C91319] Should allow upload content on a folder row if allowDropFiles is true', () => { - navigationBarPage.clickContentServicesButton(); - contentServicesPage.doubleClickRow(parentFolder.entry.name); + it('[C91319] Should allow upload content on a folder row if allowDropFiles is true', async () => { + await navigationBar.clickContentServicesButton(); + await contentServicesPage.doubleClickRow(parentFolder.entry.name); - contentServicesPage.enableDropFilesInAFolder(); + await contentServicesPage.enableDropFilesInAFolder(); const dragAndDropArea = contentServicesPage.getRowByName(subFolder.entry.name); const dragAndDrop = new DropActions(); - dragAndDrop.dropFile(dragAndDropArea, pngFile.location); + await dragAndDrop.dropFile(dragAndDropArea, pngFile.location); - contentServicesPage.checkContentIsNotDisplayed(pngFile.name); - contentServicesPage.doubleClickRow(subFolder.entry.name); - contentServicesPage.checkContentIsDisplayed(pngFile.name); + await contentServicesPage.checkContentIsNotDisplayed(pngFile.name); + await contentServicesPage.doubleClickRow(subFolder.entry.name); + await contentServicesPage.checkContentIsDisplayed(pngFile.name); }); }); }); diff --git a/e2e/content-services/document-list/document-list-thumbnails-tooltips.e2e.ts b/e2e/content-services/document-list/document-list-thumbnails-tooltips.e2e.ts index 0bcafdd9f5..19b783cefa 100644 --- a/e2e/content-services/document-list/document-list-thumbnails-tooltips.e2e.ts +++ b/e2e/content-services/document-list/document-list-thumbnails-tooltips.e2e.ts @@ -38,7 +38,7 @@ describe('Document List Component', () => { let testFileNode, pdfBFileNode; const navigationBarPage = new NavigationBarPage(); - afterEach(async (done) => { + afterEach(async () => { await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); if (uploadedFolder) { await uploadActions.deleteFileOrFolder(uploadedFolder.entry.id); @@ -56,29 +56,29 @@ describe('Document List Component', () => { await uploadActions.deleteFileOrFolder(pdfBFileNode.entry.id); pdfBFileNode = null; } - done(); + }); describe('Thumbnails and tooltips', () => { const pdfFile = new FileModel({ - 'name': resources.Files.ADF_DOCUMENTS.PDF.file_name, - 'location': resources.Files.ADF_DOCUMENTS.PDF.file_location + name: resources.Files.ADF_DOCUMENTS.PDF.file_name, + location: resources.Files.ADF_DOCUMENTS.PDF.file_location }); const testFile = new FileModel({ - 'name': resources.Files.ADF_DOCUMENTS.TEST.file_name, - 'location': resources.Files.ADF_DOCUMENTS.TEST.file_location + name: resources.Files.ADF_DOCUMENTS.TEST.file_name, + location: resources.Files.ADF_DOCUMENTS.TEST.file_location }); const docxFile = new FileModel({ - 'name': resources.Files.ADF_DOCUMENTS.DOCX.file_name, - 'location': resources.Files.ADF_DOCUMENTS.DOCX.file_location + name: resources.Files.ADF_DOCUMENTS.DOCX.file_name, + location: resources.Files.ADF_DOCUMENTS.DOCX.file_location }); const folderName = `MEESEEKS_${StringUtil.generateRandomString(5)}_LOOK_AT_ME`; let filePdfNode, fileTestNode, fileDocxNode, folderNode; - beforeAll(async (done) => { + beforeAll(async () => { acsUser = new AcsUserModel(); await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); @@ -90,10 +90,9 @@ describe('Document List Component', () => { fileDocxNode = await uploadActions.uploadFile(docxFile.location, docxFile.name, '-my-'); folderNode = await uploadActions.createFolder(folderName, '-my-'); - done(); }); - afterAll(async (done) => { + afterAll(async () => { await navigationBarPage.clickLogoutButton(); await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); @@ -109,52 +108,52 @@ describe('Document List Component', () => { if (folderNode) { await uploadActions.deleteFileOrFolder(folderNode.entry.id); } - done(); + }); beforeEach(async () => { await loginPage.loginToContentServicesUsingUserModel(acsUser); - contentServicesPage.goToDocumentList(); + await contentServicesPage.goToDocumentList(); }); - it('[C260108] Should display tooltip for file\'s name', () => { - expect(contentServicesPage.getContentList().getTooltip(pdfFile.name)).toEqual(pdfFile.name); + it('[C260108] Should display tooltip for file\'s name', async () => { + await expect(await contentServicesPage.getDocumentList().getTooltip(pdfFile.name)).toEqual(pdfFile.name); }); - it('[C260109] Should display tooltip for folder\'s name', () => { - expect(contentServicesPage.getContentList().getTooltip(folderName)).toEqual(folderName); + it('[C260109] Should display tooltip for folder\'s name', async () => { + await expect(await contentServicesPage.getDocumentList().getTooltip(folderName)).toEqual(folderName); }); - it('[C260119] Should have a specific thumbnail for folders', async (done) => { + it('[C260119] Should have a specific thumbnail for folders', async () => { const folderIconUrl = await contentServicesPage.getRowIconImageUrl(folderName); - expect(folderIconUrl).toContain('/assets/images/ft_ic_folder.svg'); - done(); + await expect(folderIconUrl).toContain('/assets/images/ft_ic_folder.svg'); + }); - it('[C280066] Should have a specific thumbnail PDF files', async (done) => { + it('[C280066] Should have a specific thumbnail PDF files', async () => { const fileIconUrl = await contentServicesPage.getRowIconImageUrl(pdfFile.name); - expect(fileIconUrl).toContain('/assets/images/ft_ic_pdf.svg'); - done(); + await expect(fileIconUrl).toContain('/assets/images/ft_ic_pdf.svg'); + }); - it('[C280067] Should have a specific thumbnail DOCX files', async (done) => { + it('[C280067] Should have a specific thumbnail DOCX files', async () => { const fileIconUrl = await contentServicesPage.getRowIconImageUrl(docxFile.name); - expect(fileIconUrl).toContain('/assets/images/ft_ic_ms_word.svg'); - done(); + await expect(fileIconUrl).toContain('/assets/images/ft_ic_ms_word.svg'); + }); - it('[C280068] Should have a specific thumbnail files', async (done) => { + it('[C280068] Should have a specific thumbnail files', async () => { const fileIconUrl = await contentServicesPage.getRowIconImageUrl(testFile.name); - expect(fileIconUrl).toContain('/assets/images/ft_ic_document.svg'); - done(); + await expect(fileIconUrl).toContain('/assets/images/ft_ic_document.svg'); + }); - it('[C274701] Should be able to enable thumbnails', async (done) => { - contentServicesPage.enableThumbnails(); - contentServicesPage.checkAcsContainer(); + it('[C274701] Should be able to enable thumbnails', async () => { + await contentServicesPage.enableThumbnails(); + await contentServicesPage.checkAcsContainer(); const fileIconUrl = await contentServicesPage.getRowIconImageUrl(pdfFile.name); - expect(fileIconUrl).toContain(`/versions/1/nodes/${filePdfNode.entry.id}/renditions`); - done(); + await expect(fileIconUrl).toContain(`/versions/1/nodes/${filePdfNode.entry.id}/renditions`); + }); }); diff --git a/e2e/content-services/lock-file.e2e.ts b/e2e/content-services/lock-file.e2e.ts index a2c7cd46aa..6b12386f17 100644 --- a/e2e/content-services/lock-file.e2e.ts +++ b/e2e/content-services/lock-file.e2e.ts @@ -41,18 +41,18 @@ describe('Lock File', () => { const uploadActions = new UploadActions(this.alfrescoJsApi); const pngFileModel = new FileModel({ - 'name': resources.Files.ADF_DOCUMENTS.PNG.file_name, - 'location': resources.Files.ADF_DOCUMENTS.PNG.file_location + name: resources.Files.ADF_DOCUMENTS.PNG.file_name, + location: resources.Files.ADF_DOCUMENTS.PNG.file_location }); const pngFileToLock = new FileModel({ - 'name': resources.Files.ADF_DOCUMENTS.PNG_B.file_name, - 'location': resources.Files.ADF_DOCUMENTS.PNG_B.file_location + name: resources.Files.ADF_DOCUMENTS.PNG_B.file_name, + location: resources.Files.ADF_DOCUMENTS.PNG_B.file_location }); let nodeId, site, documentLibrary, lockedFileNodeId; - beforeAll(async (done) => { + beforeAll(async () => { await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); await this.alfrescoJsApi.core.peopleApi.addPerson(adminUser); @@ -73,36 +73,32 @@ describe('Lock File', () => { id: managerUser.id, role: CONSTANTS.CS_USER_ROLES.MANAGER }); - - done(); - }); describe('Lock file interaction with the UI', () => { - beforeAll(async (done) => { + beforeAll(async () => { const pngLockedUploadedFile = await uploadActions.uploadFile(pngFileToLock.location, pngFileToLock.name, documentLibrary); lockedFileNodeId = pngLockedUploadedFile.entry.id; - done(); }); - beforeEach(async (done) => { + beforeEach(async () => { try { const pngUploadedFile = await uploadActions.uploadFile(pngFileModel.location, pngFileModel.name, documentLibrary); nodeId = pngUploadedFile.entry.id; await loginPage.loginToContentServicesUsingUserModel(adminUser); await navigationBarPage.openContentServicesFolder(documentLibrary); - contentServices.waitForTableBody(); + await contentServices.waitForTableBody(); } catch (error) { } - done(); + }); - afterEach(async (done) => { + afterEach(async () => { try { await this.alfrescoJsApi.login(adminUser.id, adminUser.password); @@ -111,10 +107,10 @@ describe('Lock File', () => { } catch (error) { } - done(); + }); - afterAll(async (done) => { + afterAll(async () => { try { await this.alfrescoJsApi.login(adminUser.id, adminUser.password); @@ -125,57 +121,57 @@ describe('Lock File', () => { } catch (error) { } - done(); + }); - it('[C286604] Should be able to open Lock file option by clicking the lock image', () => { - contentServices.lockContent(pngFileModel.name); + it('[C286604] Should be able to open Lock file option by clicking the lock image', async () => { + await contentServices.lockContent(pngFileModel.name); - lockFilePage.checkLockFileCheckboxIsDisplayed(); - lockFilePage.checkCancelButtonIsDisplayed(); - lockFilePage.checkSaveButtonIsDisplayed(); + await lockFilePage.checkLockFileCheckboxIsDisplayed(); + await lockFilePage.checkCancelButtonIsDisplayed(); + await lockFilePage.checkSaveButtonIsDisplayed(); }); - it('[C286625] Should be able to click Cancel to cancel lock file operation', () => { - contentServices.lockContent(pngFileModel.name); + it('[C286625] Should be able to click Cancel to cancel lock file operation', async () => { + await contentServices.lockContent(pngFileModel.name); - lockFilePage.checkLockFileCheckboxIsDisplayed(); - lockFilePage.clickCancelButton(); + await lockFilePage.checkLockFileCheckboxIsDisplayed(); + await lockFilePage.clickCancelButton(); - contentServices.checkUnlockedIcon(pngFileModel.name); + await contentServices.checkUnlockedIcon(pngFileModel.name); }); - it('[C286603] Should be able to click on Lock file checkbox and lock a file', () => { - contentServices.lockContent(pngFileToLock.name); + it('[C286603] Should be able to click on Lock file checkbox and lock a file', async () => { + await contentServices.lockContent(pngFileToLock.name); - lockFilePage.checkLockFileCheckboxIsDisplayed(); - lockFilePage.clickLockFileCheckbox(); - lockFilePage.clickSaveButton(); + await lockFilePage.checkLockFileCheckboxIsDisplayed(); + await lockFilePage.clickLockFileCheckbox(); + await lockFilePage.clickSaveButton(); - contentServices.checkLockedIcon(pngFileToLock.name); + await contentServices.checkLockedIcon(pngFileToLock.name); }); - it('[C286618] Should be able to uncheck Lock file checkbox and unlock a file', () => { - contentServices.lockContent(pngFileModel.name); + it('[C286618] Should be able to uncheck Lock file checkbox and unlock a file', async () => { + await contentServices.lockContent(pngFileModel.name); - lockFilePage.checkLockFileCheckboxIsDisplayed(); - lockFilePage.clickLockFileCheckbox(); - lockFilePage.clickSaveButton(); + await lockFilePage.checkLockFileCheckboxIsDisplayed(); + await lockFilePage.clickLockFileCheckbox(); + await lockFilePage.clickSaveButton(); - contentServices.checkLockedIcon(pngFileModel.name); - contentServices.lockContent(pngFileModel.name); + await contentServices.checkLockedIcon(pngFileModel.name); + await contentServices.lockContent(pngFileModel.name); - lockFilePage.clickLockFileCheckbox(); - lockFilePage.clickSaveButton(); + await lockFilePage.clickLockFileCheckbox(); + await lockFilePage.clickSaveButton(); - contentServices.checkUnlockedIcon(pngFileModel.name); + await contentServices.checkUnlockedIcon(pngFileModel.name); }); }); describe('Locked file without owner permissions', () => { - beforeEach(async (done) => { + beforeEach(async () => { const pngUploadedFile = await uploadActions.uploadFile(pngFileModel.location, pngFileModel.name, documentLibrary); nodeId = pngUploadedFile.entry.id; @@ -184,10 +180,9 @@ describe('Lock File', () => { await navigationBarPage.openContentServicesFolder(documentLibrary); - done(); }); - afterEach(async (done) => { + afterEach(async () => { await this.alfrescoJsApi.login(adminUser.id, adminUser.password); try { @@ -196,67 +191,66 @@ describe('Lock File', () => { } catch (error) { } - done(); }); it('[C286610] Should not be able to delete a locked file', async () => { - contentServices.lockContent(pngFileModel.name); + await contentServices.lockContent(pngFileModel.name); - lockFilePage.checkLockFileCheckboxIsDisplayed(); - lockFilePage.clickLockFileCheckbox(); - lockFilePage.clickSaveButton(); + await lockFilePage.checkLockFileCheckboxIsDisplayed(); + await lockFilePage.clickLockFileCheckbox(); + await lockFilePage.clickSaveButton(); try { await this.alfrescoJsApi.core.nodesApi.deleteNode(nodeId); } catch (error) { - expect(error.status).toEqual(409); + await expect(error.status).toEqual(409); } }); it('[C286611] Should not be able to rename a locked file', async () => { - contentServices.lockContent(pngFileModel.name); + await contentServices.lockContent(pngFileModel.name); - lockFilePage.checkLockFileCheckboxIsDisplayed(); - lockFilePage.clickLockFileCheckbox(); - lockFilePage.clickSaveButton(); + await lockFilePage.checkLockFileCheckboxIsDisplayed(); + await lockFilePage.clickLockFileCheckbox(); + await lockFilePage.clickSaveButton(); try { await this.alfrescoJsApi.core.nodesApi.updateNode(nodeId, { name: 'My new name' }); } catch (error) { - expect(error.status).toEqual(409); + await expect(error.status).toEqual(409); } }); it('[C286612] Should not be able to move a locked file', async () => { - contentServices.lockContent(pngFileModel.name); + await contentServices.lockContent(pngFileModel.name); - lockFilePage.checkLockFileCheckboxIsDisplayed(); - lockFilePage.clickLockFileCheckbox(); - lockFilePage.clickSaveButton(); + await lockFilePage.checkLockFileCheckboxIsDisplayed(); + await lockFilePage.clickLockFileCheckbox(); + await lockFilePage.clickSaveButton(); try { await this.alfrescoJsApi.core.nodesApi.moveNode(nodeId, { targetParentId: '-my-' }); } catch (error) { - expect(error.status).toEqual(409); + await expect(error.status).toEqual(409); } }); it('[C286613] Should not be able to update a new version on a locked file', async () => { - contentServices.lockContent(pngFileModel.name); + await contentServices.lockContent(pngFileModel.name); - lockFilePage.checkLockFileCheckboxIsDisplayed(); - lockFilePage.clickLockFileCheckbox(); - lockFilePage.clickSaveButton(); + await lockFilePage.checkLockFileCheckboxIsDisplayed(); + await lockFilePage.clickLockFileCheckbox(); + await lockFilePage.clickSaveButton(); try { await this.alfrescoJsApi.core.nodesApi.updateNodeContent(nodeId, 'NEW FILE CONTENT'); } catch (error) { - expect(error.status).toEqual(409); + await expect(error.status).toEqual(409); } }); @@ -266,27 +260,27 @@ describe('Lock File', () => { let pngFileToBeLocked; - beforeAll(async (done) => { + beforeAll(async () => { try { pngFileToBeLocked = await uploadActions.uploadFile(pngFileToLock.location, pngFileToLock.name, documentLibrary); lockedFileNodeId = pngFileToBeLocked.entry.id; } catch (error) { } - done(); + }); - beforeEach(async (done) => { + beforeEach(async () => { try { const pngUploadedFile = await uploadActions.uploadFile(pngFileModel.location, pngFileModel.name, documentLibrary); nodeId = pngUploadedFile.entry.id; await loginPage.loginToContentServicesUsingUserModel(adminUser); - navigationBarPage.openContentServicesFolder(documentLibrary); + await navigationBarPage.openContentServicesFolder(documentLibrary); } catch (error) { } - done(); + }); - afterEach(async (done) => { + afterEach(async () => { await this.alfrescoJsApi.login(adminUser.id, adminUser.password); try { @@ -294,71 +288,69 @@ describe('Lock File', () => { } catch (error) { } - done(); - }); it('[C286614] Owner of the locked file should be able to rename if Allow owner to modify is checked', async () => { - contentServices.lockContent(pngFileModel.name); + await contentServices.lockContent(pngFileModel.name); - lockFilePage.checkLockFileCheckboxIsDisplayed(); - lockFilePage.clickLockFileCheckbox(); - lockFilePage.clickAllowOwnerCheckbox(); - lockFilePage.clickSaveButton(); + await lockFilePage.checkLockFileCheckboxIsDisplayed(); + await lockFilePage.clickLockFileCheckbox(); + await lockFilePage.clickAllowOwnerCheckbox(); + await lockFilePage.clickSaveButton(); try { const response = await this.alfrescoJsApi.core.nodesApi.updateNode(nodeId, { name: 'My new name' }); - expect(response.entry.name).toEqual('My new name'); + await expect(response.entry.name).toEqual('My new name'); } catch (error) { } }); it('[C286615] Owner of the locked file should be able to update a new version if Allow owner to modify is checked', async () => { - contentServices.lockContent(pngFileModel.name); + await contentServices.lockContent(pngFileModel.name); - lockFilePage.checkLockFileCheckboxIsDisplayed(); - lockFilePage.clickLockFileCheckbox(); - lockFilePage.clickAllowOwnerCheckbox(); - lockFilePage.clickSaveButton(); + await lockFilePage.checkLockFileCheckboxIsDisplayed(); + await lockFilePage.clickLockFileCheckbox(); + await lockFilePage.clickAllowOwnerCheckbox(); + await lockFilePage.clickSaveButton(); try { const response = await this.alfrescoJsApi.core.nodesApi.updateNodeContent(nodeId, 'NEW FILE CONTENT'); - expect(response.entry.modifiedAt).toBeGreaterThan(response.entry.createdAt); + await expect(response.entry.modifiedAt).toBeGreaterThan(response.entry.createdAt); } catch (error) { } }); it('[C286616] Owner of the locked file should be able to move if Allow owner to modify is checked', async () => { - contentServices.lockContent(pngFileModel.name); + await contentServices.lockContent(pngFileModel.name); - lockFilePage.checkLockFileCheckboxIsDisplayed(); - lockFilePage.clickLockFileCheckbox(); - lockFilePage.clickAllowOwnerCheckbox(); - lockFilePage.clickSaveButton(); + await lockFilePage.checkLockFileCheckboxIsDisplayed(); + await lockFilePage.clickLockFileCheckbox(); + await lockFilePage.clickAllowOwnerCheckbox(); + await lockFilePage.clickSaveButton(); try { await this.alfrescoJsApi.core.nodesApi.moveNode(nodeId, { targetParentId: '-my-' }); const movedFile = await this.alfrescoJsApi.core.nodesApi.getNode(nodeId); - expect(movedFile.entry.parentId).not.toEqual(documentLibrary); + await expect(movedFile.entry.parentId).not.toEqual(documentLibrary); } catch (error) { } }); - it('[C286617] Owner of the locked file should be able to delete if Allow owner to modify is checked', () => { - contentServices.lockContent(pngFileToLock.name); + it('[C286617] Owner of the locked file should be able to delete if Allow owner to modify is checked', async () => { + await contentServices.lockContent(pngFileToLock.name); - lockFilePage.checkLockFileCheckboxIsDisplayed(); - lockFilePage.clickLockFileCheckbox(); - lockFilePage.clickAllowOwnerCheckbox(); - lockFilePage.clickSaveButton(); + await lockFilePage.checkLockFileCheckboxIsDisplayed(); + await lockFilePage.clickLockFileCheckbox(); + await lockFilePage.clickAllowOwnerCheckbox(); + await lockFilePage.clickSaveButton(); - contentServices.deleteContent(pngFileToBeLocked.entry.name); - contentServices.checkContentIsNotDisplayed(pngFileToBeLocked.entry.name); + await contentServices.deleteContent(pngFileToBeLocked.entry.name); + await contentServices.checkContentIsNotDisplayed(pngFileToBeLocked.entry.name); }); }); diff --git a/e2e/content-services/metadata/aspect-oriented-config.e2e.ts b/e2e/content-services/metadata/aspect-oriented-config.e2e.ts index 101312dc09..e6ee12e860 100644 --- a/e2e/content-services/metadata/aspect-oriented-config.e2e.ts +++ b/e2e/content-services/metadata/aspect-oriented-config.e2e.ts @@ -43,12 +43,12 @@ describe('Aspect oriented config', () => { const acsUser = new AcsUserModel(); const pngFileModel = new FileModel({ - 'name': resources.Files.ADF_DOCUMENTS.PNG.file_name, - 'location': resources.Files.ADF_DOCUMENTS.PNG.file_location + name: resources.Files.ADF_DOCUMENTS.PNG.file_name, + location: resources.Files.ADF_DOCUMENTS.PNG.file_location }); let uploadActions; - beforeAll(async (done) => { + beforeAll(async () => { this.alfrescoJsApi = new AlfrescoApi({ provider: 'ECM', hostEcm: browser.params.testConfig.adf_acs.host @@ -81,19 +81,18 @@ describe('Aspect oriented config', () => { aspects.entry.aspectNames.push(defaultModel.concat(':', defaultEmptyPropertiesAspect)); - await this.alfrescoJsApi.core.nodesApi.updateNode(uploadedFile.entry.id, {'aspectNames': aspects.entry.aspectNames}); + await this.alfrescoJsApi.core.nodesApi.updateNode(uploadedFile.entry.id, { aspectNames: aspects.entry.aspectNames }); - done(); }); afterAll(async () => { await navigationBarPage.clickLogoutButton(); }); - afterEach(async (done) => { - viewerPage.clickCloseButton(); - contentServicesPage.checkAcsContainer(); - done(); + afterEach(async () => { + await viewerPage.clickCloseButton(); + await contentServicesPage.checkAcsContainer(); + }); it('[C261117] Should be possible restrict the display properties of one an aspect', async () => { @@ -118,23 +117,23 @@ describe('Aspect oriented config', () => { } })); - navigationBarPage.clickContentServicesButton(); + await navigationBarPage.clickContentServicesButton(); - viewerPage.viewFile(pngFileModel.name); - viewerPage.clickInfoButton(); - viewerPage.checkInfoSideBarIsDisplayed(); - metadataViewPage.clickOnPropertiesTab(); - metadataViewPage.informationButtonIsDisplayed(); - metadataViewPage.clickOnInformationButton(); + await viewerPage.viewFile(pngFileModel.name); + await viewerPage.clickInfoButton(); + await viewerPage.checkInfoSideBarIsDisplayed(); + await metadataViewPage.clickOnPropertiesTab(); + await metadataViewPage.informationButtonIsDisplayed(); + await metadataViewPage.clickOnInformationButton(); - metadataViewPage.clickMetadataGroup('IMAGE'); - metadataViewPage.checkPropertyIsVisible('properties.exif:pixelXDimension', 'textitem'); - metadataViewPage.checkPropertyIsVisible('properties.exif:pixelYDimension', 'textitem'); - metadataViewPage.checkPropertyIsNotVisible('properties.exif:isoSpeedRatings', 'textitem'); + await metadataViewPage.clickMetadataGroup('IMAGE'); + await metadataViewPage.checkPropertyIsVisible('properties.exif:pixelXDimension', 'textitem'); + await metadataViewPage.checkPropertyIsVisible('properties.exif:pixelYDimension', 'textitem'); + await metadataViewPage.checkPropertyIsNotVisible('properties.exif:isoSpeedRatings', 'textitem'); - metadataViewPage.editIconClick(); + await metadataViewPage.editIconClick(); - metadataViewPage.checkPropertyIsVisible('properties.exif:isoSpeedRatings', 'textitem'); + await metadataViewPage.checkPropertyIsVisible('properties.exif:isoSpeedRatings', 'textitem'); }); it('[C260185] Should ignore not existing aspect when present in the configuration', async () => { @@ -149,37 +148,37 @@ describe('Aspect oriented config', () => { } })); - navigationBarPage.clickContentServicesButton(); + await navigationBarPage.clickContentServicesButton(); - viewerPage.viewFile(pngFileModel.name); - viewerPage.clickInfoButton(); - viewerPage.checkInfoSideBarIsDisplayed(); - metadataViewPage.clickOnPropertiesTab(); - metadataViewPage.informationButtonIsDisplayed(); - metadataViewPage.clickOnInformationButton(); + await viewerPage.viewFile(pngFileModel.name); + await viewerPage.clickInfoButton(); + await viewerPage.checkInfoSideBarIsDisplayed(); + await metadataViewPage.clickOnPropertiesTab(); + await metadataViewPage.informationButtonIsDisplayed(); + await metadataViewPage.clickOnInformationButton(); - metadataViewPage.checkMetadataGroupIsPresent('EXIF'); - metadataViewPage.checkMetadataGroupIsPresent('properties'); - metadataViewPage.checkMetadataGroupIsPresent('Versionable'); - metadataViewPage.checkMetadataGroupIsNotPresent('exists'); + await metadataViewPage.checkMetadataGroupIsPresent('EXIF'); + await metadataViewPage.checkMetadataGroupIsPresent('properties'); + await metadataViewPage.checkMetadataGroupIsPresent('Versionable'); + await metadataViewPage.checkMetadataGroupIsNotPresent('exists'); }); it('[C260183] Should show all the aspect if the content-metadata configuration is NOT provided', async () => { await LocalStorageUtil.setConfigField('content-metadata', '{}'); - navigationBarPage.clickContentServicesButton(); + await navigationBarPage.clickContentServicesButton(); - viewerPage.viewFile(pngFileModel.name); - viewerPage.clickInfoButton(); - viewerPage.checkInfoSideBarIsDisplayed(); - metadataViewPage.clickOnPropertiesTab(); - metadataViewPage.informationButtonIsDisplayed(); - metadataViewPage.clickOnInformationButton(); + await viewerPage.viewFile(pngFileModel.name); + await viewerPage.clickInfoButton(); + await viewerPage.checkInfoSideBarIsDisplayed(); + await metadataViewPage.clickOnPropertiesTab(); + await metadataViewPage.informationButtonIsDisplayed(); + await metadataViewPage.clickOnInformationButton(); - metadataViewPage.checkMetadataGroupIsPresent('EXIF'); - metadataViewPage.checkMetadataGroupIsPresent('properties'); - metadataViewPage.checkMetadataGroupIsPresent('Versionable'); + await metadataViewPage.checkMetadataGroupIsPresent('EXIF'); + await metadataViewPage.checkMetadataGroupIsPresent('properties'); + await metadataViewPage.checkMetadataGroupIsPresent('Versionable'); }); it('[C260182] Should show all the aspects if the default configuration contains the star symbol', async () => { @@ -190,19 +189,18 @@ describe('Aspect oriented config', () => { } })); - navigationBarPage.clickContentServicesButton(); + await navigationBarPage.clickContentServicesButton(); - viewerPage.viewFile(pngFileModel.name); - viewerPage.clickInfoButton(); - viewerPage.checkInfoSideBarIsDisplayed(); - metadataViewPage.clickOnPropertiesTab(); + await viewerPage.viewFile(pngFileModel.name); + await viewerPage.clickInfoButton(); + await viewerPage.checkInfoSideBarIsDisplayed(); + await metadataViewPage.clickOnPropertiesTab(); + await metadataViewPage.informationButtonIsDisplayed(); + await metadataViewPage.clickOnInformationButton(); - metadataViewPage.informationButtonIsDisplayed(); - metadataViewPage.clickOnInformationButton(); - - metadataViewPage.checkMetadataGroupIsPresent('EXIF'); - metadataViewPage.checkMetadataGroupIsPresent('properties'); - metadataViewPage.checkMetadataGroupIsPresent('Versionable'); + await metadataViewPage.checkMetadataGroupIsPresent('EXIF'); + await metadataViewPage.checkMetadataGroupIsPresent('properties'); + await metadataViewPage.checkMetadataGroupIsPresent('Versionable'); }); it('[C268899] Should be possible use a Translation key as Title of a metadata group', async () => { @@ -232,21 +230,21 @@ describe('Aspect oriented config', () => { ' }' + '}'); - navigationBarPage.clickContentServicesButton(); + await navigationBarPage.clickContentServicesButton(); - viewerPage.viewFile(pngFileModel.name); - viewerPage.clickInfoButton(); - viewerPage.checkInfoSideBarIsDisplayed(); - metadataViewPage.clickOnPropertiesTab(); + await viewerPage.viewFile(pngFileModel.name); + await viewerPage.clickInfoButton(); + await viewerPage.checkInfoSideBarIsDisplayed(); + await metadataViewPage.clickOnPropertiesTab(); - metadataViewPage.informationButtonIsDisplayed(); - metadataViewPage.clickOnInformationButton(); + await metadataViewPage.informationButtonIsDisplayed(); + await metadataViewPage.clickOnInformationButton(); - metadataViewPage.checkMetadataGroupIsPresent('GROUP-TITLE1-TRANSLATION-KEY'); - metadataViewPage.checkMetadataGroupIsPresent('GROUP-TITLE2-TRANSLATION-KEY'); + await metadataViewPage.checkMetadataGroupIsPresent('GROUP-TITLE1-TRANSLATION-KEY'); + await metadataViewPage.checkMetadataGroupIsPresent('GROUP-TITLE2-TRANSLATION-KEY'); - expect(metadataViewPage.getMetadataGroupTitle('GROUP-TITLE1-TRANSLATION-KEY')).toBe('CUSTOM TITLE TRANSLATION ONE'); - expect(metadataViewPage.getMetadataGroupTitle('GROUP-TITLE2-TRANSLATION-KEY')).toBe('CUSTOM TITLE TRANSLATION TWO'); + await expect(await metadataViewPage.getMetadataGroupTitle('GROUP-TITLE1-TRANSLATION-KEY')).toBe('CUSTOM TITLE TRANSLATION ONE'); + await expect(await metadataViewPage.getMetadataGroupTitle('GROUP-TITLE2-TRANSLATION-KEY')).toBe('CUSTOM TITLE TRANSLATION TWO'); }); @@ -261,23 +259,22 @@ describe('Aspect oriented config', () => { ' }' + '}'); - navigationBarPage.clickContentServicesButton(); + await navigationBarPage.clickContentServicesButton(); - viewerPage.viewFile(pngFileModel.name); - viewerPage.clickInfoButton(); - viewerPage.checkInfoSideBarIsDisplayed(); - metadataViewPage.clickOnPropertiesTab(); + await viewerPage.viewFile(pngFileModel.name); + await viewerPage.clickInfoButton(); + await viewerPage.checkInfoSideBarIsDisplayed(); + await metadataViewPage.clickOnPropertiesTab(); - check(metadataViewPage.presetSwitch); + await check(metadataViewPage.presetSwitch); - metadataViewPage.enterPresetText('custom-preset'); + await metadataViewPage.enterPresetText('custom-preset'); - metadataViewPage.informationButtonIsDisplayed(); - metadataViewPage.clickOnInformationButton(); + await metadataViewPage.informationButtonIsDisplayed(); + await metadataViewPage.clickOnInformationButton(); - metadataViewPage.checkMetadataGroupIsPresent('properties'); - metadataViewPage.checkMetadataGroupIsPresent('EXIF'); - metadataViewPage.checkMetadataGroupIsPresent('Versionable'); + await metadataViewPage.checkMetadataGroupIsPresent('properties'); + await metadataViewPage.checkMetadataGroupIsPresent('Versionable'); }); it('[C299186] The aspect without properties is not displayed', async () => { @@ -290,17 +287,17 @@ describe('Aspect oriented config', () => { ' }' + '}'); - navigationBarPage.clickContentServicesButton(); + await navigationBarPage.clickContentServicesButton(); - viewerPage.viewFile(pngFileModel.name); - viewerPage.clickInfoButton(); - viewerPage.checkInfoSideBarIsDisplayed(); - metadataViewPage.clickOnPropertiesTab(); + await viewerPage.viewFile(pngFileModel.name); + await viewerPage.clickInfoButton(); + await viewerPage.checkInfoSideBarIsDisplayed(); + await metadataViewPage.clickOnPropertiesTab(); - metadataViewPage.informationButtonIsDisplayed(); - metadataViewPage.clickOnInformationButton(); + await metadataViewPage.informationButtonIsDisplayed(); + await metadataViewPage.clickOnInformationButton(); - metadataViewPage.checkMetadataGroupIsNotPresent(emptyAspectName); + await metadataViewPage.checkMetadataGroupIsNotPresent(emptyAspectName); }); it('[C299187] The aspect with empty properties is displayed when edit', async () => { @@ -313,20 +310,20 @@ describe('Aspect oriented config', () => { ' }' + '}'); - navigationBarPage.clickContentServicesButton(); + await navigationBarPage.clickContentServicesButton(); - viewerPage.viewFile(pngFileModel.name); - viewerPage.clickInfoButton(); - viewerPage.checkInfoSideBarIsDisplayed(); - metadataViewPage.clickOnPropertiesTab(); + await viewerPage.viewFile(pngFileModel.name); + await viewerPage.clickInfoButton(); + await viewerPage.checkInfoSideBarIsDisplayed(); + await metadataViewPage.clickOnPropertiesTab(); - metadataViewPage.informationButtonIsDisplayed(); - metadataViewPage.clickOnInformationButton(); + await metadataViewPage.informationButtonIsDisplayed(); + await metadataViewPage.clickOnInformationButton(); - metadataViewPage.checkMetadataGroupIsNotPresent(aspectName); + await metadataViewPage.checkMetadataGroupIsNotPresent(aspectName); - metadataViewPage.editIconClick(); + await metadataViewPage.editIconClick(); - metadataViewPage.checkMetadataGroupIsPresent(aspectName); + await metadataViewPage.checkMetadataGroupIsPresent(aspectName); }); }); diff --git a/e2e/content-services/metadata/metadata-permissions.e2e.ts b/e2e/content-services/metadata/metadata-permissions.e2e.ts index 4ebf8846b8..c20281352d 100644 --- a/e2e/content-services/metadata/metadata-permissions.e2e.ts +++ b/e2e/content-services/metadata/metadata-permissions.e2e.ts @@ -52,8 +52,8 @@ describe('permissions', () => { let site; const pngFileModel = new FileModel({ - 'name': resources.Files.ADF_DOCUMENTS.PNG.file_name, - 'location': resources.Files.ADF_DOCUMENTS.PNG.file_location + name: resources.Files.ADF_DOCUMENTS.PNG.file_name, + location: resources.Files.ADF_DOCUMENTS.PNG.file_location }); this.alfrescoJsApi = new AlfrescoApi({ provider: 'ECM', @@ -61,7 +61,7 @@ describe('permissions', () => { }); const uploadActions = new UploadActions(this.alfrescoJsApi); - beforeAll(async (done) => { + beforeAll(async () => { await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); @@ -91,7 +91,6 @@ describe('permissions', () => { await uploadActions.uploadFile(pngFileModel.location, pngFileModel.name, site.entry.guid); - done(); }); afterAll(async () => { @@ -102,52 +101,52 @@ describe('permissions', () => { it('[C274692] Should not be possible edit metadata properties when the user is a consumer user', async () => { await loginPage.loginToContentServicesUsingUserModel(consumerUser); - navigationBarPage.openContentServicesFolder(site.entry.guid); + await navigationBarPage.openContentServicesFolder(site.entry.guid); - viewerPage.viewFile(pngFileModel.name); - viewerPage.clickInfoButton(); - viewerPage.checkInfoSideBarIsDisplayed(); - metadataViewPage.clickOnPropertiesTab(); - metadataViewPage.editIconIsNotDisplayed(); + await viewerPage.viewFile(pngFileModel.name); + await viewerPage.clickInfoButton(); + await viewerPage.checkInfoSideBarIsDisplayed(); + await metadataViewPage.clickOnPropertiesTab(); + await metadataViewPage.editIconIsNotDisplayed(); }); it('[C279971] Should be possible edit metadata properties when the user is a collaborator user', async () => { await loginPage.loginToContentServicesUsingUserModel(collaboratorUser); - navigationBarPage.openContentServicesFolder(site.entry.guid); + await navigationBarPage.openContentServicesFolder(site.entry.guid); - viewerPage.viewFile(pngFileModel.name); - viewerPage.clickInfoButton(); - viewerPage.checkInfoSideBarIsDisplayed(); - metadataViewPage.clickOnPropertiesTab(); - metadataViewPage.editIconIsDisplayed(); + await viewerPage.viewFile(pngFileModel.name); + await viewerPage.clickInfoButton(); + await viewerPage.checkInfoSideBarIsDisplayed(); + await metadataViewPage.clickOnPropertiesTab(); + await metadataViewPage.editIconIsDisplayed(); - expect(viewerPage.getActiveTab()).toEqual(METADATA.PROPERTY_TAB); + await expect(await viewerPage.getActiveTab()).toEqual(METADATA.PROPERTY_TAB); - metadataViewPage.clickOnInformationButton(); + await metadataViewPage.clickOnInformationButton(); - metadataViewPage.clickMetadataGroup('EXIF'); + await metadataViewPage.clickMetadataGroup('EXIF'); - metadataViewPage.editIconIsDisplayed(); + await metadataViewPage.editIconIsDisplayed(); }); it('[C279972] Should be possible edit metadata properties when the user is a contributor user', async () => { await loginPage.loginToContentServicesUsingUserModel(collaboratorUser); - navigationBarPage.openContentServicesFolder(site.entry.guid); + await navigationBarPage.openContentServicesFolder(site.entry.guid); - viewerPage.viewFile(pngFileModel.name); - viewerPage.clickInfoButton(); - viewerPage.checkInfoSideBarIsDisplayed(); - metadataViewPage.clickOnPropertiesTab(); - metadataViewPage.editIconIsDisplayed(); + await viewerPage.viewFile(pngFileModel.name); + await viewerPage.clickInfoButton(); + await viewerPage.checkInfoSideBarIsDisplayed(); + await metadataViewPage.clickOnPropertiesTab(); + await metadataViewPage.editIconIsDisplayed(); - expect(viewerPage.getActiveTab()).toEqual(METADATA.PROPERTY_TAB); + await expect(await viewerPage.getActiveTab()).toEqual(METADATA.PROPERTY_TAB); - metadataViewPage.clickOnInformationButton(); + await metadataViewPage.clickOnInformationButton(); - metadataViewPage.clickMetadataGroup('EXIF'); + await metadataViewPage.clickMetadataGroup('EXIF'); - metadataViewPage.editIconIsDisplayed(); + await metadataViewPage.editIconIsDisplayed(); }); }); diff --git a/e2e/content-services/metadata/metadata-properties.e2e.ts b/e2e/content-services/metadata/metadata-properties.e2e.ts index fa2813a62b..b582b8bc94 100644 --- a/e2e/content-services/metadata/metadata-properties.e2e.ts +++ b/e2e/content-services/metadata/metadata-properties.e2e.ts @@ -51,8 +51,8 @@ describe('CardView Component - properties', () => { const acsUser = new AcsUserModel(); const pngFileModel = new FileModel({ - 'name': resources.Files.ADF_DOCUMENTS.PNG.file_name, - 'location': resources.Files.ADF_DOCUMENTS.PNG.file_location + name: resources.Files.ADF_DOCUMENTS.PNG.file_name, + location: resources.Files.ADF_DOCUMENTS.PNG.file_location }); this.alfrescoJsApi = new AlfrescoApi({ provider: 'ECM', @@ -60,7 +60,7 @@ describe('CardView Component - properties', () => { }); const uploadActions = new UploadActions(this.alfrescoJsApi); - beforeAll(async (done) => { + beforeAll(async () => { await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); await this.alfrescoJsApi.core.peopleApi.addPerson(acsUser); @@ -74,139 +74,133 @@ describe('CardView Component - properties', () => { await loginPage.loginToContentServicesUsingUserModel(acsUser); - navigationBarPage.clickContentServicesButton(); - contentServicesPage.waitForTableBody(); - - done(); - }); - - afterAll(async () => { - await navigationBarPage.clickLogoutButton(); - }); - - afterEach(() => { - viewerPage.clickCloseButton(); - }); - - it('[C246516] Should show/hide the empty metadata when the property displayEmpty is true/false', () => { - viewerPage.viewFile(pngFileModel.name); - viewerPage.clickInfoButton(); - viewerPage.checkInfoSideBarIsDisplayed(); - metadataViewPage.clickOnPropertiesTab(); - metadataViewPage.editIconIsDisplayed(); - - expect(viewerPage.getActiveTab()).toEqual(METADATA.PROPERTY_TAB); - - metadataViewPage.clickOnInformationButton(); - - metadataViewPage.clickMetadataGroup('EXIF'); - - metadataViewPage.checkPropertyIsVisible('properties.exif:flash', 'boolean'); - metadataViewPage.checkPropertyIsNotVisible('properties.exif:model', 'textitem'); - - check(metadataViewPage.displayEmptySwitch); - - metadataViewPage.checkPropertyIsVisible('properties.exif:flash', 'boolean'); - metadataViewPage.checkPropertyIsVisible('properties.exif:model', 'textitem'); - }); - - it('[C260179] Should not be possible edit the basic property when readOnly is true', () => { - viewerPage.viewFile(pngFileModel.name); - viewerPage.clickInfoButton(); - viewerPage.checkInfoSideBarIsDisplayed(); - metadataViewPage.clickOnPropertiesTab(); - metadataViewPage.editIconIsDisplayed(); - - check(metadataViewPage.readonlySwitch); - - metadataViewPage.editIconIsNotDisplayed(); - }); - - it('[C268965] Should multi property allow expand multi accordion at the same time when set', () => { - viewerPage.viewFile(pngFileModel.name); - viewerPage.clickInfoButton(); - viewerPage.checkInfoSideBarIsDisplayed(); - metadataViewPage.clickOnPropertiesTab(); - - metadataViewPage.clickOnInformationButton(); - - metadataViewPage.checkMetadataGroupIsNotExpand('EXIF'); - metadataViewPage.checkMetadataGroupIsNotExpand('properties'); - - metadataViewPage.clickMetadataGroup('properties'); - - metadataViewPage.checkMetadataGroupIsNotExpand('EXIF'); - metadataViewPage.checkMetadataGroupIsExpand('properties'); - - metadataViewPage.clickMetadataGroup('EXIF'); - - metadataViewPage.checkMetadataGroupIsExpand('EXIF'); - metadataViewPage.checkMetadataGroupIsNotExpand('properties'); - - check(metadataViewPage.multiSwitch); - - metadataViewPage.clickMetadataGroup('properties'); - - metadataViewPage.checkMetadataGroupIsExpand('EXIF'); - metadataViewPage.checkMetadataGroupIsExpand('properties'); + await navigationBarPage.clickContentServicesButton(); + await contentServicesPage.waitForTableBody(); }); - it('[C280559] Should show/hide the default metadata properties when displayDefaultProperties is true/false', () => { - viewerPage.viewFile(pngFileModel.name); - viewerPage.clickInfoButton(); - viewerPage.checkInfoSideBarIsDisplayed(); - metadataViewPage.clickOnPropertiesTab(); - - uncheck(metadataViewPage.defaultPropertiesSwitch); - - metadataViewPage.checkMetadataGroupIsNotPresent('properties'); - metadataViewPage.checkMetadataGroupIsPresent('EXIF'); - metadataViewPage.checkMetadataGroupIsExpand('EXIF'); - - check(metadataViewPage.defaultPropertiesSwitch); - - metadataViewPage.checkMetadataGroupIsPresent('properties'); - metadataViewPage.checkMetadataGroupIsExpand('properties'); + afterEach(async () => { + await viewerPage.clickCloseButton(); }); - it('[C280560] Should show/hide the more properties button when displayDefaultProperties is true/false', () => { - viewerPage.viewFile(pngFileModel.name); - viewerPage.clickInfoButton(); - viewerPage.checkInfoSideBarIsDisplayed(); - metadataViewPage.clickOnPropertiesTab(); + it('[C246516] Should show/hide the empty metadata when the property displayEmpty is true/false', async () => { + await viewerPage.viewFile(pngFileModel.name); + await viewerPage.clickInfoButton(); + await viewerPage.checkInfoSideBarIsDisplayed(); + await metadataViewPage.clickOnPropertiesTab(); + await metadataViewPage.editIconIsDisplayed(); - metadataViewPage.informationButtonIsDisplayed(); + await expect(await viewerPage.getActiveTab()).toEqual(METADATA.PROPERTY_TAB); - uncheck(metadataViewPage.defaultPropertiesSwitch); + await metadataViewPage.clickOnInformationButton(); - metadataViewPage.informationButtonIsNotDisplayed(); + await metadataViewPage.clickMetadataGroup('EXIF'); + + await metadataViewPage.checkPropertyIsVisible('properties.exif:flash', 'boolean'); + await metadataViewPage.checkPropertyIsNotVisible('properties.exif:model', 'textitem'); + + await check(metadataViewPage.displayEmptySwitch); + + await metadataViewPage.checkPropertyIsVisible('properties.exif:flash', 'boolean'); + await metadataViewPage.checkPropertyIsVisible('properties.exif:model', 'textitem'); }); - it('[C307975] Should be able to choose which aspect to show expanded in the info-drawer', () => { - viewerPage.viewFile(pngFileModel.name); - viewerPage.clickInfoButton(); - viewerPage.checkInfoSideBarIsDisplayed(); - metadataViewPage.clickOnPropertiesTab(); + it('[C260179] Should not be possible edit the basic property when readOnly is true', async () => { + await viewerPage.viewFile(pngFileModel.name); + await viewerPage.clickInfoButton(); + await viewerPage.checkInfoSideBarIsDisplayed(); + await metadataViewPage.clickOnPropertiesTab(); + await metadataViewPage.editIconIsDisplayed(); - metadataViewPage.typeAspectName('EXIF'); - metadataViewPage.clickApplyAspect(); + await check(metadataViewPage.readonlySwitch); - metadataViewPage.checkMetadataGroupIsExpand('EXIF'); - metadataViewPage.checkMetadataGroupIsNotExpand('properties'); - check(metadataViewPage.displayEmptySwitch); + await metadataViewPage.editIconIsNotDisplayed(); + }); - metadataViewPage.checkPropertyIsVisible('properties.exif:flash', 'boolean'); - metadataViewPage.checkPropertyIsVisible('properties.exif:model', 'textitem'); + it('[C268965] Should multi property allow expand multi accordion at the same time when set', async () => { + await viewerPage.viewFile(pngFileModel.name); + await viewerPage.clickInfoButton(); + await viewerPage.checkInfoSideBarIsDisplayed(); + await metadataViewPage.clickOnPropertiesTab(); - metadataViewPage.typeAspectName('nonexistent'); - metadataViewPage.clickApplyAspect(); - metadataViewPage.checkMetadataGroupIsNotPresent('nonexistent'); + await metadataViewPage.clickOnInformationButton(); - metadataViewPage.typeAspectName('Properties'); - metadataViewPage.clickApplyAspect(); - metadataViewPage.checkMetadataGroupIsPresent('properties'); - metadataViewPage.checkMetadataGroupIsExpand('properties'); + await metadataViewPage.checkMetadataGroupIsNotExpand('EXIF'); + await metadataViewPage.checkMetadataGroupIsNotExpand('properties'); + await metadataViewPage.clickMetadataGroup('properties'); + + await metadataViewPage.checkMetadataGroupIsNotExpand('EXIF'); + await metadataViewPage.checkMetadataGroupIsExpand('properties'); + + await metadataViewPage.clickMetadataGroup('EXIF'); + + await metadataViewPage.checkMetadataGroupIsExpand('EXIF'); + await metadataViewPage.checkMetadataGroupIsNotExpand('properties'); + + await check(metadataViewPage.multiSwitch); + + await metadataViewPage.clickMetadataGroup('properties'); + + await metadataViewPage.checkMetadataGroupIsExpand('EXIF'); + await metadataViewPage.checkMetadataGroupIsExpand('properties'); + + }); + + it('[C280559] Should show/hide the default metadata properties when displayDefaultProperties is true/false', async () => { + await viewerPage.viewFile(pngFileModel.name); + await viewerPage.clickInfoButton(); + await viewerPage.checkInfoSideBarIsDisplayed(); + await metadataViewPage.clickOnPropertiesTab(); + + await uncheck(metadataViewPage.defaultPropertiesSwitch); + + await metadataViewPage.checkMetadataGroupIsNotPresent('properties'); + await metadataViewPage.checkMetadataGroupIsPresent('EXIF'); + await metadataViewPage.checkMetadataGroupIsExpand('EXIF'); + + await check(metadataViewPage.defaultPropertiesSwitch); + + await metadataViewPage.checkMetadataGroupIsPresent('properties'); + await metadataViewPage.checkMetadataGroupIsExpand('properties'); + }); + + it('[C280560] Should show/hide the more properties button when displayDefaultProperties is true/false', async () => { + await viewerPage.viewFile(pngFileModel.name); + await viewerPage.clickInfoButton(); + await viewerPage.checkInfoSideBarIsDisplayed(); + await metadataViewPage.clickOnPropertiesTab(); + + await metadataViewPage.informationButtonIsDisplayed(); + + await uncheck(metadataViewPage.defaultPropertiesSwitch); + + await metadataViewPage.informationButtonIsNotDisplayed(); + }); + + it('[C307975] Should be able to choose which aspect to show expanded in the info-drawer', async () => { + await viewerPage.viewFile(pngFileModel.name); + await viewerPage.clickInfoButton(); + await viewerPage.checkInfoSideBarIsDisplayed(); + await metadataViewPage.clickOnPropertiesTab(); + + await metadataViewPage.typeAspectName('EXIF'); + await metadataViewPage.clickApplyAspect(); + + await metadataViewPage.checkMetadataGroupIsExpand('EXIF'); + await metadataViewPage.checkMetadataGroupIsNotExpand('properties'); + await check(metadataViewPage.displayEmptySwitch); + + await metadataViewPage.checkPropertyIsVisible('properties.exif:flash', 'boolean'); + await metadataViewPage.checkPropertyIsVisible('properties.exif:model', 'textitem'); + + await metadataViewPage.typeAspectName('nonexistent'); + await metadataViewPage.clickApplyAspect(); + await metadataViewPage.checkMetadataGroupIsNotPresent('nonexistent'); + + await metadataViewPage.typeAspectName('Properties'); + await metadataViewPage.clickApplyAspect(); + await metadataViewPage.checkMetadataGroupIsPresent('properties'); + await metadataViewPage.checkMetadataGroupIsExpand('properties'); }); }); diff --git a/e2e/content-services/metadata/metadata-smoke-tests.e2e.ts b/e2e/content-services/metadata/metadata-smoke-tests.e2e.ts index 4fd859b654..1090fa4c13 100644 --- a/e2e/content-services/metadata/metadata-smoke-tests.e2e.ts +++ b/e2e/content-services/metadata/metadata-smoke-tests.e2e.ts @@ -56,8 +56,8 @@ describe('Metadata component', () => { const folderName = 'Metadata Folder'; const pngFileModel = new FileModel({ - 'name': resources.Files.ADF_DOCUMENTS.PNG.file_name, - 'location': resources.Files.ADF_DOCUMENTS.PNG.file_location + name: resources.Files.ADF_DOCUMENTS.PNG.file_name, + location: resources.Files.ADF_DOCUMENTS.PNG.file_location }); this.alfrescoJsApi = new AlfrescoApi({ @@ -67,21 +67,14 @@ describe('Metadata component', () => { const uploadActions = new UploadActions(this.alfrescoJsApi); - beforeAll(async (done) => { - + beforeAll(async () => { await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); - await this.alfrescoJsApi.core.peopleApi.addPerson(acsUser); - await this.alfrescoJsApi.login(acsUser.id, acsUser.password); - const pngUploadedFile = await uploadActions.uploadFile(pngFileModel.location, pngFileModel.name, '-my-'); - Object.assign(pngFileModel, pngUploadedFile.entry); - pngFileModel.update(pngUploadedFile.entry); - done(); }); afterAll(async () => { @@ -92,9 +85,8 @@ describe('Metadata component', () => { beforeAll(async () => { await loginPage.loginToContentServicesUsingUserModel(acsUser); - navigationBarPage.clickContentServicesButton(); - contentServicesPage.waitForTableBody(); - + await navigationBarPage.clickContentServicesButton(); + await contentServicesPage.waitForTableBody(); await LocalStorageUtil.setConfigField('content-metadata', JSON.stringify({ presets: { default: { @@ -104,194 +96,193 @@ describe('Metadata component', () => { })); }); - beforeEach(async (done) => { - viewerPage.viewFile(pngFileModel.name); - viewerPage.checkFileIsLoaded(); - done(); + beforeEach(async () => { + await viewerPage.viewFile(pngFileModel.name); + await viewerPage.checkFileIsLoaded(); }); - afterEach(() => { - viewerPage.clickCloseButton(); - contentServicesPage.waitForTableBody(); + afterEach(async () => { + await viewerPage.clickCloseButton(); + await contentServicesPage.waitForTableBody(); }); - it('[C245652] Should be possible to display a file\'s properties', () => { - viewerPage.clickInfoButton(); - viewerPage.checkInfoSideBarIsDisplayed(); - metadataViewPage.clickOnPropertiesTab(); + it('[C245652] Should be possible to display a file\'s properties', async () => { + await viewerPage.clickInfoButton(); + await viewerPage.checkInfoSideBarIsDisplayed(); + await metadataViewPage.clickOnPropertiesTab(); - expect(metadataViewPage.getTitle()).toEqual(METADATA.TITLE); - expect(viewerPage.getActiveTab()).toEqual(METADATA.PROPERTY_TAB); - expect(metadataViewPage.getExpandedAspectName()).toEqual(METADATA.DEFAULT_ASPECT); - expect(metadataViewPage.getName()).toEqual(pngFileModel.name); - expect(metadataViewPage.getCreator()).toEqual(pngFileModel.getCreatedByUser().displayName); - expect(metadataViewPage.getCreatedDate()).toEqual(dateFormat(pngFileModel.createdAt, METADATA.DATA_FORMAT)); - expect(metadataViewPage.getModifier()).toEqual(pngFileModel.getCreatedByUser().displayName); - expect(metadataViewPage.getModifiedDate()).toEqual(dateFormat(pngFileModel.createdAt, METADATA.DATA_FORMAT)); - expect(metadataViewPage.getMimetypeName()).toEqual(pngFileModel.getContent().mimeTypeName); - expect(metadataViewPage.getSize()).toEqual(pngFileModel.getContent().getSizeInBytes()); + await expect(await metadataViewPage.getTitle()).toEqual(METADATA.TITLE); + await expect(await viewerPage.getActiveTab()).toEqual(METADATA.PROPERTY_TAB); + await expect(await metadataViewPage.getExpandedAspectName()).toEqual(METADATA.DEFAULT_ASPECT); + await expect(await metadataViewPage.getName()).toEqual(pngFileModel.name); + await expect(await metadataViewPage.getCreator()).toEqual(pngFileModel.getCreatedByUser().displayName); + await expect(await metadataViewPage.getCreatedDate()).toEqual(dateFormat(pngFileModel.createdAt, METADATA.DATA_FORMAT)); + await expect(await metadataViewPage.getModifier()).toEqual(pngFileModel.getCreatedByUser().displayName); + await expect(await metadataViewPage.getModifiedDate()).toEqual(dateFormat(pngFileModel.createdAt, METADATA.DATA_FORMAT)); + await expect(await metadataViewPage.getMimetypeName()).toEqual(pngFileModel.getContent().mimeTypeName); + await expect(await metadataViewPage.getSize()).toEqual(pngFileModel.getContent().getSizeInBytes()); - metadataViewPage.editIconIsDisplayed(); - metadataViewPage.informationButtonIsDisplayed(); - expect(metadataViewPage.getInformationButtonText()).toEqual(METADATA.LESS_INFO_BUTTON); - expect(metadataViewPage.getInformationIconText()).toEqual(METADATA.ARROW_UP); + await metadataViewPage.editIconIsDisplayed(); + await metadataViewPage.informationButtonIsDisplayed(); + await expect(await metadataViewPage.getInformationButtonText()).toEqual(METADATA.LESS_INFO_BUTTON); + await expect(await metadataViewPage.getInformationIconText()).toEqual(METADATA.ARROW_UP); }); - it('[C272769] Should be possible to display more details when clicking on More Information button', () => { - viewerPage.clickInfoButton(); - viewerPage.checkInfoSideBarIsDisplayed(); - metadataViewPage.clickOnPropertiesTab(); - metadataViewPage.informationButtonIsDisplayed(); - metadataViewPage.clickOnInformationButton(); - expect(metadataViewPage.getInformationButtonText()).toEqual(METADATA.MORE_INFO_BUTTON); - expect(metadataViewPage.getInformationIconText()).toEqual(METADATA.ARROW_DOWN); + it('[C272769] Should be possible to display more details when clicking on More Information button', async () => { + await viewerPage.clickInfoButton(); + await viewerPage.checkInfoSideBarIsDisplayed(); + await metadataViewPage.clickOnPropertiesTab(); + await metadataViewPage.informationButtonIsDisplayed(); + await metadataViewPage.clickOnInformationButton(); + await expect(await metadataViewPage.getInformationButtonText()).toEqual(METADATA.MORE_INFO_BUTTON); + await expect(await metadataViewPage.getInformationIconText()).toEqual(METADATA.ARROW_DOWN); }); - it('[C270952] Should be possible to open/close properties using info icon', () => { - viewerPage.clickInfoButton(); - viewerPage.checkInfoSideBarIsDisplayed(); - metadataViewPage.clickOnPropertiesTab().informationButtonIsDisplayed(); - viewerPage.clickInfoButton(); - viewerPage.checkInfoSideBarIsNotDisplayed(); - viewerPage.clickInfoButton(); - viewerPage.checkInfoSideBarIsDisplayed(); - expect(viewerPage.getActiveTab()).toEqual(METADATA.COMMENTS_TAB); - metadataViewPage.clickOnPropertiesTab(); - expect(viewerPage.getActiveTab()).toEqual(METADATA.PROPERTY_TAB); - expect(metadataViewPage.getEditIconTooltip()).toEqual(METADATA.EDIT_BUTTON_TOOLTIP); + it('[C270952] Should be possible to open/close properties using info icon', async () => { + await viewerPage.clickInfoButton(); + await viewerPage.checkInfoSideBarIsDisplayed(); + await metadataViewPage.clickOnPropertiesTab(); + await metadataViewPage.informationButtonIsDisplayed(); + await viewerPage.clickInfoButton(); + await viewerPage.checkInfoSideBarIsNotDisplayed(); + await viewerPage.clickInfoButton(); + await viewerPage.checkInfoSideBarIsDisplayed(); + await expect(await viewerPage.getActiveTab()).toEqual(METADATA.COMMENTS_TAB); + await metadataViewPage.clickOnPropertiesTab(); + await expect(await viewerPage.getActiveTab()).toEqual(METADATA.PROPERTY_TAB); + await expect(await metadataViewPage.getEditIconTooltip()).toEqual(METADATA.EDIT_BUTTON_TOOLTIP); }); - it('[C245654] Should be possible edit the basic Metadata Info of a Document', () => { - viewerPage.clickInfoButton(); - viewerPage.checkInfoSideBarIsDisplayed(); - metadataViewPage.clickOnPropertiesTab(); - metadataViewPage.editIconIsDisplayed(); + it('[C245654] Should be possible edit the basic Metadata Info of a Document', async () => { + await viewerPage.clickInfoButton(); + await viewerPage.checkInfoSideBarIsDisplayed(); + await metadataViewPage.clickOnPropertiesTab(); + await metadataViewPage.editIconIsDisplayed(); - expect(viewerPage.getActiveTab()).toEqual(METADATA.PROPERTY_TAB); + await expect(await viewerPage.getActiveTab()).toEqual(METADATA.PROPERTY_TAB); - metadataViewPage.editIconClick(); - metadataViewPage.editPropertyIconIsDisplayed('name'); - metadataViewPage.editPropertyIconIsDisplayed('properties.cm:title'); - metadataViewPage.editPropertyIconIsDisplayed('properties.cm:description'); + await metadataViewPage.editIconClick(); + await metadataViewPage.editPropertyIconIsDisplayed('name'); + await metadataViewPage.editPropertyIconIsDisplayed('properties.cm:title'); + await metadataViewPage.editPropertyIconIsDisplayed('properties.cm:description'); - expect(metadataViewPage.getPropertyIconTooltip('name')).toEqual('Edit'); - expect(metadataViewPage.getPropertyIconTooltip('properties.cm:title')).toEqual('Edit'); - expect(metadataViewPage.getPropertyIconTooltip('properties.cm:description')).toEqual('Edit'); + await expect(await metadataViewPage.getPropertyIconTooltip('name')).toEqual('Edit'); + await expect(await metadataViewPage.getPropertyIconTooltip('properties.cm:title')).toEqual('Edit'); + await expect(await metadataViewPage.getPropertyIconTooltip('properties.cm:description')).toEqual('Edit'); - metadataViewPage.clickEditPropertyIcons('name'); - metadataViewPage.updatePropertyIconIsDisplayed('name'); - metadataViewPage.clearPropertyIconIsDisplayed('name'); + await metadataViewPage.clickEditPropertyIcons('name'); + await metadataViewPage.updatePropertyIconIsDisplayed('name'); + await metadataViewPage.clearPropertyIconIsDisplayed('name'); - metadataViewPage.enterPropertyText('name', 'exampleText'); - metadataViewPage.clickClearPropertyIcon('name'); - expect(metadataViewPage.getPropertyText('name')).toEqual(resources.Files.ADF_DOCUMENTS.PNG.file_name); + await metadataViewPage.enterPropertyText('name', 'exampleText'); + await metadataViewPage.clickClearPropertyIcon('name'); + await expect(await metadataViewPage.getPropertyText('name')).toEqual(resources.Files.ADF_DOCUMENTS.PNG.file_name); - metadataViewPage.clickEditPropertyIcons('name'); - metadataViewPage.enterPropertyText('name', 'exampleText.png'); - metadataViewPage.clickUpdatePropertyIcon('name'); - expect(metadataViewPage.getPropertyText('name')).toEqual('exampleText.png'); + await metadataViewPage.clickEditPropertyIcons('name'); + await metadataViewPage.enterPropertyText('name', 'exampleText.png'); + await metadataViewPage.clickUpdatePropertyIcon('name'); + await expect(await metadataViewPage.getPropertyText('name')).toEqual('exampleText.png'); - metadataViewPage.clickEditPropertyIcons('properties.cm:title'); - metadataViewPage.enterPropertyText('properties.cm:title', 'example title'); - metadataViewPage.clickUpdatePropertyIcon('properties.cm:title'); - expect(metadataViewPage.getPropertyText('properties.cm:title')).toEqual('example title'); + await metadataViewPage.clickEditPropertyIcons('properties.cm:title'); + await metadataViewPage.enterPropertyText('properties.cm:title', 'example title'); + await metadataViewPage.clickUpdatePropertyIcon('properties.cm:title'); + await expect(await metadataViewPage.getPropertyText('properties.cm:title')).toEqual('example title'); - metadataViewPage.clickEditPropertyIcons('properties.cm:description'); - metadataViewPage.enterDescriptionText('example description'); - metadataViewPage.clickUpdatePropertyIcon('properties.cm:description'); - expect(metadataViewPage.getPropertyText('properties.cm:description')).toEqual('example description'); + await metadataViewPage.clickEditPropertyIcons('properties.cm:description'); + await metadataViewPage.enterDescriptionText('example description'); + await metadataViewPage.clickUpdatePropertyIcon('properties.cm:description'); + await expect(await metadataViewPage.getPropertyText('properties.cm:description')).toEqual('example description'); - viewerPage.clickCloseButton(); - contentServicesPage.waitForTableBody(); + await viewerPage.clickCloseButton(); + await contentServicesPage.waitForTableBody(); - viewerPage.viewFile('exampleText.png'); - viewerPage.clickInfoButton(); - viewerPage.checkInfoSideBarIsDisplayed(); - metadataViewPage.clickOnPropertiesTab(); - metadataViewPage.editIconIsDisplayed(); + await viewerPage.viewFile('exampleText.png'); + await viewerPage.clickInfoButton(); + await viewerPage.checkInfoSideBarIsDisplayed(); + await metadataViewPage.clickOnPropertiesTab(); + await metadataViewPage.editIconIsDisplayed(); - expect(metadataViewPage.getPropertyText('name')).toEqual('exampleText.png'); - expect(metadataViewPage.getPropertyText('properties.cm:title')).toEqual('example title'); - expect(metadataViewPage.getPropertyText('properties.cm:description')).toEqual('example description'); + await expect(await metadataViewPage.getPropertyText('name')).toEqual('exampleText.png'); + await expect(await metadataViewPage.getPropertyText('properties.cm:title')).toEqual('example title'); + await expect(await metadataViewPage.getPropertyText('properties.cm:description')).toEqual('example description'); - metadataViewPage.editIconClick(); - metadataViewPage.clickEditPropertyIcons('name'); - metadataViewPage.enterPropertyText('name', resources.Files.ADF_DOCUMENTS.PNG.file_name); - metadataViewPage.clickUpdatePropertyIcon('name'); - expect(metadataViewPage.getPropertyText('name')).toEqual(resources.Files.ADF_DOCUMENTS.PNG.file_name); + await metadataViewPage.editIconClick(); + await metadataViewPage.clickEditPropertyIcons('name'); + await metadataViewPage.enterPropertyText('name', resources.Files.ADF_DOCUMENTS.PNG.file_name); + await metadataViewPage.clickUpdatePropertyIcon('name'); + await expect(await metadataViewPage.getPropertyText('name')).toEqual(resources.Files.ADF_DOCUMENTS.PNG.file_name); }); - it('[C260181] Should be possible edit all the metadata aspect', () => { - viewerPage.clickInfoButton(); - viewerPage.checkInfoSideBarIsDisplayed(); - metadataViewPage.clickOnPropertiesTab(); - metadataViewPage.editIconIsDisplayed(); + it('[C260181] Should be possible edit all the metadata aspect', async () => { + await viewerPage.clickInfoButton(); + await viewerPage.checkInfoSideBarIsDisplayed(); + await metadataViewPage.clickOnPropertiesTab(); + await metadataViewPage.editIconIsDisplayed(); - expect(viewerPage.getActiveTab()).toEqual(METADATA.PROPERTY_TAB); + await expect(await viewerPage.getActiveTab()).toEqual(METADATA.PROPERTY_TAB); - metadataViewPage.clickOnInformationButton(); + await metadataViewPage.clickOnInformationButton(); - metadataViewPage.clickMetadataGroup('EXIF'); + await metadataViewPage.clickMetadataGroup('EXIF'); - metadataViewPage.editIconClick(); + await metadataViewPage.editIconClick(); - metadataViewPage.clickEditPropertyIcons('properties.exif:software'); - metadataViewPage.enterPropertyText('properties.exif:software', 'test custom text software'); - metadataViewPage.clickUpdatePropertyIcon('properties.exif:software'); - expect(metadataViewPage.getPropertyText('properties.exif:software')).toEqual('test custom text software'); + await metadataViewPage.clickEditPropertyIcons('properties.exif:software'); + await metadataViewPage.enterPropertyText('properties.exif:software', 'test custom text software'); + await metadataViewPage.clickUpdatePropertyIcon('properties.exif:software'); + await expect(await metadataViewPage.getPropertyText('properties.exif:software')).toEqual('test custom text software'); - metadataViewPage.clickEditPropertyIcons('properties.exif:isoSpeedRatings'); - metadataViewPage.enterPropertyText('properties.exif:isoSpeedRatings', 'test custom text isoSpeedRatings'); - metadataViewPage.clickUpdatePropertyIcon('properties.exif:isoSpeedRatings'); - expect(metadataViewPage.getPropertyText('properties.exif:isoSpeedRatings')).toEqual('test custom text isoSpeedRatings'); + await metadataViewPage.clickEditPropertyIcons('properties.exif:isoSpeedRatings'); + await metadataViewPage.enterPropertyText('properties.exif:isoSpeedRatings', 'test custom text isoSpeedRatings'); + await metadataViewPage.clickUpdatePropertyIcon('properties.exif:isoSpeedRatings'); + await expect(await metadataViewPage.getPropertyText('properties.exif:isoSpeedRatings')).toEqual('test custom text isoSpeedRatings'); - metadataViewPage.clickEditPropertyIcons('properties.exif:fNumber'); - metadataViewPage.enterPropertyText('properties.exif:fNumber', 22); - metadataViewPage.clickUpdatePropertyIcon('properties.exif:fNumber'); - expect(metadataViewPage.getPropertyText('properties.exif:fNumber')).toEqual('22'); + await metadataViewPage.clickEditPropertyIcons('properties.exif:fNumber'); + await metadataViewPage.enterPropertyText('properties.exif:fNumber', 22); + await metadataViewPage.clickUpdatePropertyIcon('properties.exif:fNumber'); + await expect(await metadataViewPage.getPropertyText('properties.exif:fNumber')).toEqual('22'); }); }); describe('Folder metadata', () => { - beforeAll(async (done) => { + beforeAll(async () => { await uploadActions.createFolder(folderName, '-my-'); await loginPage.loginToContentServicesUsingUserModel(acsUser); - navigationBarPage.clickContentServicesButton(); - contentServicesPage.waitForTableBody(); + await navigationBarPage.clickContentServicesButton(); + await contentServicesPage.waitForTableBody(); - done(); }); - it('[C261157] Should be possible use the metadata component When the node is a Folder', () => { - contentServicesPage.metadataContent(folderName); + it('[C261157] Should be possible use the metadata component When the node is a Folder', async () => { + await contentServicesPage.metadataContent(folderName); - expect(metadataViewPage.getPropertyText('name')).toEqual(folderName); - expect(metadataViewPage.getPropertyText('createdByUser.displayName')).toEqual(acsUser.firstName + ' ' + acsUser.lastName); - BrowserActions.closeMenuAndDialogs(); + await expect(await metadataViewPage.getPropertyText('name')).toEqual(folderName); + await expect(await metadataViewPage.getPropertyText('createdByUser.displayName')).toEqual(acsUser.firstName + ' ' + acsUser.lastName); + await BrowserActions.closeMenuAndDialogs(); }); - it('[C261158] Should be possible edit the metadata When the node is a Folder', () => { - contentServicesPage.metadataContent(folderName); + it('[C261158] Should be possible edit the metadata When the node is a Folder', async () => { + await contentServicesPage.metadataContent(folderName); - metadataViewPage.editIconClick(); + await metadataViewPage.editIconClick(); - metadataViewPage.clickEditPropertyIcons('name'); - metadataViewPage.enterPropertyText('name', 'newnameFolder'); - metadataViewPage.clickClearPropertyIcon('name'); - expect(metadataViewPage.getPropertyText('name')).toEqual(folderName); + await metadataViewPage.clickEditPropertyIcons('name'); + await metadataViewPage.enterPropertyText('name', 'newnameFolder'); + await metadataViewPage.clickClearPropertyIcon('name'); + await expect(await metadataViewPage.getPropertyText('name')).toEqual(folderName); - metadataViewPage.clickEditPropertyIcons('name'); - metadataViewPage.enterPropertyText('name', 'newnameFolder'); - metadataViewPage.clickUpdatePropertyIcon('name'); - expect(metadataViewPage.getPropertyText('name')).toEqual('newnameFolder'); + await metadataViewPage.clickEditPropertyIcons('name'); + await metadataViewPage.enterPropertyText('name', 'newnameFolder'); + await metadataViewPage.clickUpdatePropertyIcon('name'); + await expect(await metadataViewPage.getPropertyText('name')).toEqual('newnameFolder'); - metadataViewPage.clickEditPropertyIcons('name'); - metadataViewPage.enterPropertyText('name', folderName); - metadataViewPage.clickUpdatePropertyIcon('name'); - expect(metadataViewPage.getPropertyText('name')).toEqual(folderName); + await metadataViewPage.clickEditPropertyIcons('name'); + await metadataViewPage.enterPropertyText('name', folderName); + await metadataViewPage.clickUpdatePropertyIcon('name'); + await expect(await metadataViewPage.getPropertyText('name')).toEqual(folderName); }); }); @@ -299,36 +290,36 @@ describe('Metadata component', () => { it('[C279960] Should show the last username modifier when modify a File', async () => { await loginPage.loginToContentServices(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); - BrowserActions.getUrl(browser.params.testConfig.adf.url + `/(overlay:files/${pngFileModel.id}/view)`); + await BrowserActions.getUrl(browser.params.testConfig.adf.url + `/(overlay:files/${pngFileModel.id}/view)`); - viewerPage.clickInfoButton(); - viewerPage.checkInfoSideBarIsDisplayed(); - metadataViewPage.clickOnPropertiesTab(); - metadataViewPage.editIconIsDisplayed(); + await viewerPage.clickInfoButton(); + await viewerPage.checkInfoSideBarIsDisplayed(); + await metadataViewPage.clickOnPropertiesTab(); + await metadataViewPage.editIconIsDisplayed(); - expect(viewerPage.getActiveTab()).toEqual(METADATA.PROPERTY_TAB); + await expect(await viewerPage.getActiveTab()).toEqual(METADATA.PROPERTY_TAB); - metadataViewPage.editIconClick(); + await metadataViewPage.editIconClick(); - metadataViewPage.clickEditPropertyIcons('properties.cm:description'); - metadataViewPage.enterDescriptionText('check author example description'); - metadataViewPage.clickUpdatePropertyIcon('properties.cm:description'); - expect(metadataViewPage.getPropertyText('properties.cm:description')).toEqual('check author example description'); + await metadataViewPage.clickEditPropertyIcons('properties.cm:description'); + await metadataViewPage.enterDescriptionText('check author example description'); + await metadataViewPage.clickUpdatePropertyIcon('properties.cm:description'); + await expect(await metadataViewPage.getPropertyText('properties.cm:description')).toEqual('check author example description'); - loginPage.loginToContentServicesUsingUserModel(acsUser); - navigationBarPage.clickContentServicesButton(); + await loginPage.loginToContentServicesUsingUserModel(acsUser); + await navigationBarPage.clickContentServicesButton(); - viewerPage.viewFile(pngFileModel.name); - viewerPage.checkFileIsLoaded(); + await viewerPage.viewFile(pngFileModel.name); + await viewerPage.checkFileIsLoaded(); - viewerPage.clickInfoButton(); - viewerPage.checkInfoSideBarIsDisplayed(); - metadataViewPage.clickOnPropertiesTab(); + await viewerPage.clickInfoButton(); + await viewerPage.checkInfoSideBarIsDisplayed(); + await metadataViewPage.clickOnPropertiesTab(); - expect(metadataViewPage.getPropertyText('modifiedByUser.displayName')).toEqual('Administrator'); + await expect(await metadataViewPage.getPropertyText('modifiedByUser.displayName')).toEqual('Administrator'); - viewerPage.clickCloseButton(); - contentServicesPage.waitForTableBody(); + await viewerPage.clickCloseButton(); + await contentServicesPage.waitForTableBody(); }); }); diff --git a/e2e/content-services/notifications-component.e2e.ts b/e2e/content-services/notifications-component.e2e.ts index bcd2721f04..e7dc193ebd 100644 --- a/e2e/content-services/notifications-component.e2e.ts +++ b/e2e/content-services/notifications-component.e2e.ts @@ -25,12 +25,12 @@ import { NavigationBarPage } from '../pages/adf/navigationBarPage'; describe('Notifications Component', () => { const loginPage = new LoginPage(); - const notificationHistoryPage = new NotificationPage(); + const notificationPage = new NotificationPage(); const navigationBarPage = new NavigationBarPage(); const acsUser = new AcsUserModel(); - beforeAll(async (done) => { + beforeAll(async () => { this.alfrescoJsApi = new AlfrescoApi({ provider: 'ECM', @@ -45,78 +45,76 @@ describe('Notifications Component', () => { await loginPage.loginToContentServicesUsingUserModel(acsUser); - notificationHistoryPage.goToNotificationsPage(); + await notificationPage.goToNotificationsPage(); - notificationHistoryPage.enterDurationField(3000); - - done(); + await notificationPage.enterDurationField(3000); }); afterAll(async () => { await navigationBarPage.clickLogoutButton(); }); - afterEach( () => { - browser.executeScript(`document.querySelector('button[data-automation-id="notification-custom-dismiss-button"]').click();`); - notificationHistoryPage.enterDurationField(3000); + afterEach(async () => { + await browser.executeScript(`document.querySelector('button[data-automation-id="notification-custom-dismiss-button"]').click();`); + await notificationPage.enterDurationField(3000); }); - it('[C279977] Should show notification when the message is not empty and button is clicked', () => { - notificationHistoryPage.enterMessageField('Notification test'); - notificationHistoryPage.clickNotificationButton(); - notificationHistoryPage.checkNotificationSnackBarIsDisplayedWithMessage('Notification test'); + it('[C279977] Should show notification when the message is not empty and button is clicked', async () => { + await notificationPage.enterMessageField('Notification test'); + await notificationPage.clickNotificationButton(); + await notificationPage.checkNotificationSnackBarIsDisplayedWithMessage('Notification test'); }); - it('[C279979] Should not show notification when the message is empty and button is clicked', () => { - notificationHistoryPage.clearMessage(); - notificationHistoryPage.clickNotificationButton(); - notificationHistoryPage.checkNotificationSnackBarIsNotDisplayed(); + it('[C279979] Should not show notification when the message is empty and button is clicked', async () => { + await notificationPage.clearMessage(); + await notificationPage.clickNotificationButton(); + await notificationPage.checkNotificationSnackBarIsNotDisplayed(); }); - it('[C279978] Should show notification with action when the message is not empty and button is clicked', () => { - notificationHistoryPage.enterMessageField('Notification test'); - notificationHistoryPage.clickActionToggle(); - notificationHistoryPage.clickNotificationButton(); - notificationHistoryPage.checkNotificationSnackBarIsDisplayedWithMessage('Notification test'); - notificationHistoryPage.clickActionButton(); - notificationHistoryPage.checkActionEvent(); - notificationHistoryPage.clickActionToggle(); + it('[C279978] Should show notification with action when the message is not empty and button is clicked', async () => { + await notificationPage.enterMessageField('Notification test'); + await notificationPage.clickActionToggle(); + await notificationPage.clickNotificationButton(); + await notificationPage.checkNotificationSnackBarIsDisplayedWithMessage('Notification test'); + await notificationPage.clickActionButton(); + await notificationPage.checkActionEvent(); + await notificationPage.clickActionToggle(); }); - it('[C279981] Should show notification with action when the message is not empty and custom configuration button is clicked', () => { - notificationHistoryPage.enterMessageField('Notification test'); - notificationHistoryPage.clickNotificationButton(); - notificationHistoryPage.checkNotificationSnackBarIsDisplayed(); + it('[C279981] Should show notification with action when the message is not empty and custom configuration button is clicked', async () => { + await notificationPage.enterMessageField('Notification test'); + await notificationPage.clickNotificationButton(); + await notificationPage.checkNotificationSnackBarIsDisplayed(); }); - it('[C279987] Should show custom notification during a limited time when a duration is added', () => { - notificationHistoryPage.enterMessageField('Notification test'); - notificationHistoryPage.enterDurationField(1000); - notificationHistoryPage.clickNotificationButton(); - notificationHistoryPage.checkNotificationSnackBarIsDisplayed(); - browser.sleep(1500); - notificationHistoryPage.checkNotificationSnackBarIsNotDisplayed(); + it('[C279987] Should show custom notification during a limited time when a duration is added', async () => { + await notificationPage.enterMessageField('Notification test'); + await notificationPage.enterDurationField(1000); + await notificationPage.clickNotificationButton(); + await notificationPage.checkNotificationSnackBarIsDisplayed(); + await browser.sleep(1500); + await notificationPage.checkNotificationSnackBarIsNotDisplayed(); }); - it('[C280000] Should show notification with action when the message is not empty and custom button is clicked', () => { - notificationHistoryPage.enterMessageField('Notification test'); - notificationHistoryPage.clickActionToggle(); - notificationHistoryPage.clickNotificationButton(); - notificationHistoryPage.checkNotificationSnackBarIsDisplayedWithMessage('Notification test'); - notificationHistoryPage.checkNotificationSnackBarIsNotDisplayed(); - notificationHistoryPage.clickNotificationButton(); - notificationHistoryPage.clickActionButton(); - notificationHistoryPage.checkActionEvent(); - notificationHistoryPage.clickActionToggle(); + it('[C280000] Should show notification with action when the message is not empty and custom button is clicked', async () => { + await notificationPage.enterMessageField('Notification test'); + await notificationPage.clickActionToggle(); + await notificationPage.clickNotificationButton(); + await notificationPage.checkNotificationSnackBarIsDisplayedWithMessage('Notification test'); + await notificationPage.checkNotificationSnackBarIsNotDisplayed(); + await notificationPage.clickNotificationButton(); + await notificationPage.clickActionButton(); + await notificationPage.checkActionEvent(); + await notificationPage.clickActionToggle(); }); - it('[C280001] Should meet configuration when a custom notification is set', () => { - notificationHistoryPage.enterMessageField('Notification test'); - notificationHistoryPage.enterDurationField(1000); - notificationHistoryPage.selectHorizontalPosition('Right'); - notificationHistoryPage.selectVerticalPosition('Top'); - notificationHistoryPage.selectDirection('Left to right'); - notificationHistoryPage.clickNotificationButton(); - expect(notificationHistoryPage.getConfigObject()).toBe('{"direction": "ltr", "duration": "1000", "horizontalPosition": "right", "verticalPosition": "top"}'); + it('[C280001] Should meet configuration when a custom notification is set', async () => { + await notificationPage.enterMessageField('Notification test'); + await notificationPage.enterDurationField(1000); + await notificationPage.selectHorizontalPosition('Right'); + await notificationPage.selectVerticalPosition('Top'); + await notificationPage.selectDirection('Left to right'); + await notificationPage.clickNotificationButton(); + await expect(await notificationPage.getConfigObject()).toBe('{"direction": "ltr", "duration": "1000", "horizontalPosition": "right", "verticalPosition": "top"}'); }); }); diff --git a/e2e/content-services/permissions/permissions-component.e2e.ts b/e2e/content-services/permissions/permissions-component.e2e.ts index 6832103591..f97e204a27 100644 --- a/e2e/content-services/permissions/permissions-component.e2e.ts +++ b/e2e/content-services/permissions/permissions-component.e2e.ts @@ -29,7 +29,7 @@ import { MetadataViewPage } from '../../pages/adf/metadataViewPage'; import { NavigationBarPage } from '../../pages/adf/navigationBarPage'; import { UploadDialog } from '../../pages/adf/dialog/uploadDialog'; -describe('Permissions Component', function () { +describe('Permissions Component', () => { this.alfrescoJsApi = new AlfrescoApi({ provider: 'ECM', @@ -44,22 +44,22 @@ describe('Permissions Component', function () { const contentList = contentServicesPage.getDocumentList(); const viewerPage = new ViewerPage(); const metadataViewPage = new MetadataViewPage(); - const notificationPage = new NotificationHistoryPage(); + const notificationHistoryPage = new NotificationHistoryPage(); const uploadDialog = new UploadDialog(); let fileOwnerUser, filePermissionUser, file; const fileModel = new FileModel({ - 'name': resources.Files.ADF_DOCUMENTS.TXT_0B.file_name, - 'location': resources.Files.ADF_DOCUMENTS.TXT_0B.file_location + name: resources.Files.ADF_DOCUMENTS.TXT_0B.file_name, + location: resources.Files.ADF_DOCUMENTS.TXT_0B.file_location }); const testFileModel = new FileModel({ - 'name': resources.Files.ADF_DOCUMENTS.TEST.file_name, - 'location': resources.Files.ADF_DOCUMENTS.TEST.file_location + name: resources.Files.ADF_DOCUMENTS.TEST.file_name, + location: resources.Files.ADF_DOCUMENTS.TEST.file_location }); const pngFileModel = new FileModel({ - 'name': resources.Files.ADF_DOCUMENTS.PNG.file_name, - 'location': resources.Files.ADF_DOCUMENTS.PNG.file_location + name: resources.Files.ADF_DOCUMENTS.PNG.file_name, + location: resources.Files.ADF_DOCUMENTS.PNG.file_location }); const groupBody = { @@ -67,11 +67,11 @@ describe('Permissions Component', function () { displayName: StringUtil.generateRandomString() }; - const roleConsumerFolderModel = new FolderModel({ 'name': 'roleConsumer' + StringUtil.generateRandomString() }); - const roleCoordinatorFolderModel = new FolderModel({ 'name': 'roleCoordinator' + StringUtil.generateRandomString() }); - const roleCollaboratorFolderModel = new FolderModel({ 'name': 'roleCollaborator' + StringUtil.generateRandomString() }); - const roleContributorFolderModel = new FolderModel({ 'name': 'roleContributor' + StringUtil.generateRandomString() }); - const roleEditorFolderModel = new FolderModel({ 'name': 'roleEditor' + StringUtil.generateRandomString() }); + const roleConsumerFolderModel = new FolderModel({ name: 'roleConsumer' + StringUtil.generateRandomString() }); + const roleCoordinatorFolderModel = new FolderModel({ name: 'roleCoordinator' + StringUtil.generateRandomString() }); + const roleCollaboratorFolderModel = new FolderModel({ name: 'roleCollaborator' + StringUtil.generateRandomString() }); + const roleContributorFolderModel = new FolderModel({ name: 'roleContributor' + StringUtil.generateRandomString() }); + const roleEditorFolderModel = new FolderModel({ name: 'roleEditor' + StringUtil.generateRandomString() }); let roleConsumerFolder, roleCoordinatorFolder, roleContributorFolder, roleCollaboratorFolder, roleEditorFolder; let folders; @@ -81,7 +81,7 @@ describe('Permissions Component', function () { const duplicateUserPermissionMessage = 'One or more of the permissions you have set is already present : authority -> ' + filePermissionUser.getId() + ' / role -> Contributor'; - beforeAll(async (done) => { + beforeAll(async () => { await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); await this.alfrescoJsApi.core.peopleApi.addPerson(fileOwnerUser); @@ -161,189 +161,150 @@ describe('Permissions Component', function () { await uploadActions.uploadFile(fileModel.location, 'RoleCollaborator' + fileModel.name, roleCollaboratorFolder.entry.id); await uploadActions.uploadFile(fileModel.location, 'RoleEditor' + fileModel.name, roleEditorFolder.entry.id); - done(); }); - afterAll(async (done) => { + afterAll(async () => { await navigationBarPage.clickLogoutButton(); await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); - await folders.forEach(function (folder) { - uploadActions.deleteFileOrFolder(folder.entry.id); + for (const folder of folders) { + await uploadActions.deleteFileOrFolder(folder.entry.id); + } - }); - - done(); }); describe('Inherit and assigning permissions', () => { - beforeEach(async (done) => { - + beforeEach(async () => { await this.alfrescoJsApi.login(fileOwnerUser.id, fileOwnerUser.password); - file = await uploadActions.uploadFile(fileModel.location, fileModel.name, '-my-'); - - loginPage.loginToContentServicesUsingUserModel(fileOwnerUser); - - contentServicesPage.goToDocumentList(); - contentServicesPage.checkContentIsDisplayed(fileModel.name); - contentServicesPage.checkSelectedSiteIsDisplayed('My files'); - contentList.rightClickOnRow(fileModel.name); - - contentServicesPage.pressContextMenuActionNamed('Permission'); - - permissionsPage.checkPermissionContainerIsDisplayed(); - - done(); + await loginPage.loginToContentServicesUsingUserModel(fileOwnerUser); + await contentServicesPage.goToDocumentList(); + await contentServicesPage.checkContentIsDisplayed(fileModel.name); + await contentServicesPage.checkSelectedSiteIsDisplayed('My files'); + await contentList.rightClickOnRow(fileModel.name); + await contentServicesPage.pressContextMenuActionNamed('Permission'); + await permissionsPage.checkPermissionContainerIsDisplayed(); }); - afterEach(async (done) => { - - await uploadActions.deleteFileOrFolder(file.entry.id); - - done(); - }); - - it('[C268974] Inherit Permission', () => { - permissionsPage.checkPermissionInheritedButtonIsDisplayed(); - expect(permissionsPage.getPermissionInheritedButtonText()).toBe('Permission Inherited'); - permissionsPage.checkPermissionsDatatableIsDisplayed(); - permissionsPage.clickPermissionInheritedButton(); - expect(permissionsPage.getPermissionInheritedButtonText()).toBe('Inherit Permission'); - permissionsPage.checkNoPermissionsIsDisplayed(); - permissionsPage.clickPermissionInheritedButton(); - expect(permissionsPage.getPermissionInheritedButtonText()).toBe('Permission Inherited'); - permissionsPage.checkPermissionsDatatableIsDisplayed(); + afterEach(async () => { + await BrowserActions.closeMenuAndDialogs(); + try { + await uploadActions.deleteFileOrFolder(file.entry.id); + } catch (error) { + } }); - it('[C286272] Should be able to see results when searching for a user', () => { - permissionsPage.checkAddPermissionButtonIsDisplayed(); - permissionsPage.clickAddPermissionButton(); - permissionsPage.checkAddPermissionDialogIsDisplayed(); - permissionsPage.checkSearchUserInputIsDisplayed(); - permissionsPage.searchUserOrGroup('a'); - permissionsPage.checkResultListIsDisplayed(); - + it('[C268974] Inherit Permission', async () => { + await permissionsPage.checkPermissionInheritedButtonIsDisplayed(); + await expect(await permissionsPage.getPermissionInheritedButtonText()).toBe('Permission Inherited'); + await permissionsPage.checkPermissionsDatatableIsDisplayed(); + await permissionsPage.clickPermissionInheritedButton(); + await expect(await permissionsPage.getPermissionInheritedButtonText()).toBe('Inherit Permission'); + await permissionsPage.checkNoPermissionsIsDisplayed(); + await permissionsPage.clickPermissionInheritedButton(); + await expect(await permissionsPage.getPermissionInheritedButtonText()).toBe('Permission Inherited'); + await permissionsPage.checkPermissionsDatatableIsDisplayed(); }); - it('[C276979] Should be able to give permissions to a group of people', () => { - permissionsPage.checkAddPermissionButtonIsDisplayed(); - permissionsPage.clickAddPermissionButton(); - permissionsPage.checkAddPermissionDialogIsDisplayed(); - permissionsPage.checkSearchUserInputIsDisplayed(); - permissionsPage.searchUserOrGroup('GROUP_' + groupBody.id); - permissionsPage.clickUserOrGroup('GROUP_' + groupBody.id); - permissionsPage.checkUserOrGroupIsAdded('GROUP_' + groupBody.id); - + it('[C286272] Should be able to see results when searching for a user', async () => { + await permissionsPage.checkAddPermissionButtonIsDisplayed(); + await permissionsPage.clickAddPermissionButton(); + await permissionsPage.checkAddPermissionDialogIsDisplayed(); + await permissionsPage.checkSearchUserInputIsDisplayed(); + await permissionsPage.searchUserOrGroup('a'); + await permissionsPage.checkResultListIsDisplayed(); }); - it('[C277100] Should display EVERYONE group in the search result set', () => { - permissionsPage.checkAddPermissionButtonIsDisplayed(); - permissionsPage.clickAddPermissionButton(); - permissionsPage.checkAddPermissionDialogIsDisplayed(); - permissionsPage.checkSearchUserInputIsDisplayed(); - permissionsPage.searchUserOrGroup(filePermissionUser.getId()); - permissionsPage.checkResultListIsDisplayed(); - permissionsPage.checkUserOrGroupIsDisplayed('EVERYONE'); - permissionsPage.searchUserOrGroup('somerandomtext'); - permissionsPage.checkResultListIsDisplayed(); - permissionsPage.checkUserOrGroupIsDisplayed('EVERYONE'); + it('[C276979] Should be able to give permissions to a group of people', async () => { + await permissionsPage.checkAddPermissionButtonIsDisplayed(); + await permissionsPage.clickAddPermissionButton(); + await permissionsPage.checkAddPermissionDialogIsDisplayed(); + await permissionsPage.checkSearchUserInputIsDisplayed(); + await permissionsPage.searchUserOrGroup('GROUP_' + groupBody.id); + await permissionsPage.clickUserOrGroup('GROUP_' + groupBody.id); + await permissionsPage.checkUserOrGroupIsAdded('GROUP_' + groupBody.id); + }); + it('[C277100] Should display EVERYONE group in the search result set', async () => { + await permissionsPage.checkAddPermissionButtonIsDisplayed(); + await permissionsPage.clickAddPermissionButton(); + await permissionsPage.checkAddPermissionDialogIsDisplayed(); + await permissionsPage.checkSearchUserInputIsDisplayed(); + await permissionsPage.searchUserOrGroup(filePermissionUser.getId()); + await permissionsPage.checkResultListIsDisplayed(); + await permissionsPage.checkUserOrGroupIsDisplayed('EVERYONE'); + await permissionsPage.searchUserOrGroup('somerandomtext'); + await permissionsPage.checkResultListIsDisplayed(); + await permissionsPage.checkUserOrGroupIsDisplayed('EVERYONE'); }); }); describe('Changing and duplicate Permissions', () => { - beforeEach(async (done) => { - + beforeEach(async () => { await this.alfrescoJsApi.login(fileOwnerUser.id, fileOwnerUser.password); - file = await uploadActions.uploadFile(fileModel.location, fileModel.name, '-my-'); - - loginPage.loginToContentServicesUsingUserModel(fileOwnerUser); - - contentServicesPage.goToDocumentList(); - contentServicesPage.checkContentIsDisplayed(fileModel.name); - contentServicesPage.checkSelectedSiteIsDisplayed('My files'); - - contentList.rightClickOnRow(fileModel.name); - - contentServicesPage.pressContextMenuActionNamed('Permission'); - - permissionsPage.checkAddPermissionButtonIsDisplayed(); - permissionsPage.clickAddPermissionButton(); - permissionsPage.checkAddPermissionDialogIsDisplayed(); - permissionsPage.checkSearchUserInputIsDisplayed(); - permissionsPage.searchUserOrGroup(filePermissionUser.getId()); - permissionsPage.clickUserOrGroup(filePermissionUser.getFirstName()); - permissionsPage.checkUserOrGroupIsAdded(filePermissionUser.getId()); - - done(); - + await loginPage.loginToContentServicesUsingUserModel(fileOwnerUser); + await contentServicesPage.goToDocumentList(); + await contentServicesPage.checkContentIsDisplayed(fileModel.name); + await contentServicesPage.checkSelectedSiteIsDisplayed('My files'); + await contentList.rightClickOnRow(fileModel.name); + await contentServicesPage.pressContextMenuActionNamed('Permission'); + await permissionsPage.checkAddPermissionButtonIsDisplayed(); + await permissionsPage.clickAddPermissionButton(); + await permissionsPage.checkAddPermissionDialogIsDisplayed(); + await permissionsPage.checkSearchUserInputIsDisplayed(); + await permissionsPage.searchUserOrGroup(filePermissionUser.getId()); + await permissionsPage.clickUserOrGroup(filePermissionUser.getFirstName()); + await permissionsPage.checkUserOrGroupIsAdded(filePermissionUser.getId()); }); - afterEach(async (done) => { + afterEach(async () => { await uploadActions.deleteFileOrFolder(file.entry.id); - done(); }); - it('[C274691] Should be able to add a new User with permission to the file and also change locally set permissions', () => { - - expect(permissionsPage.getRoleCellValue(filePermissionUser.getId())).toEqual('Contributor'); - - permissionsPage.clickRoleDropdownByUserOrGroupName(filePermissionUser.getId()); - - expect(permissionsPage.getRoleDropdownOptions().count()).toBe(5); - expect(permissionsPage.getRoleDropdownOptions().get(0).getText()).toBe('Contributor'); - expect(permissionsPage.getRoleDropdownOptions().get(1).getText()).toBe('Collaborator'); - expect(permissionsPage.getRoleDropdownOptions().get(2).getText()).toBe('Coordinator'); - expect(permissionsPage.getRoleDropdownOptions().get(3).getText()).toBe('Editor'); - expect(permissionsPage.getRoleDropdownOptions().get(4).getText()).toBe('Consumer'); - - permissionsPage.selectOption('Collaborator'); - - expect(permissionsPage.getRoleCellValue(filePermissionUser.getId())).toEqual('Collaborator'); - - permissionsPage.clickRoleDropdownByUserOrGroupName(filePermissionUser.getId()); - permissionsPage.selectOption('Coordinator'); - - expect(permissionsPage.getRoleCellValue(filePermissionUser.getId())).toEqual('Coordinator'); - - permissionsPage.clickRoleDropdownByUserOrGroupName(filePermissionUser.getId()); - permissionsPage.selectOption('Editor'); - - expect(permissionsPage.getRoleCellValue(filePermissionUser.getId())).toEqual('Editor'); - - permissionsPage.clickRoleDropdownByUserOrGroupName(filePermissionUser.getId()); - permissionsPage.selectOption('Consumer'); - - expect(permissionsPage.getRoleCellValue(filePermissionUser.getId())).toEqual('Consumer'); - + it('[C274691] Should be able to add a new User with permission to the file and also change locally set permissions', async () => { + await expect(await permissionsPage.getRoleCellValue(filePermissionUser.getId())).toEqual('Contributor'); + await permissionsPage.clickRoleDropdownByUserOrGroupName(filePermissionUser.getId()); + const roleDropdownOptions = permissionsPage.getRoleDropdownOptions(); + await expect(await roleDropdownOptions.count()).toBe(5); + await expect(await BrowserActions.getText(roleDropdownOptions.get(0))).toBe('Contributor'); + await expect(await BrowserActions.getText(roleDropdownOptions.get(1))).toBe('Collaborator'); + await expect(await BrowserActions.getText(roleDropdownOptions.get(2))).toBe('Coordinator'); + await expect(await BrowserActions.getText(roleDropdownOptions.get(3))).toBe('Editor'); + await expect(await BrowserActions.getText(roleDropdownOptions.get(4))).toBe('Consumer'); + await permissionsPage.selectOption('Collaborator'); + await expect(await permissionsPage.getRoleCellValue(filePermissionUser.getId())).toEqual('Collaborator'); + await permissionsPage.clickRoleDropdownByUserOrGroupName(filePermissionUser.getId()); + await permissionsPage.selectOption('Coordinator'); + await expect(await permissionsPage.getRoleCellValue(filePermissionUser.getId())).toEqual('Coordinator'); + await permissionsPage.clickRoleDropdownByUserOrGroupName(filePermissionUser.getId()); + await permissionsPage.selectOption('Editor'); + await expect(await permissionsPage.getRoleCellValue(filePermissionUser.getId())).toEqual('Editor'); + await permissionsPage.clickRoleDropdownByUserOrGroupName(filePermissionUser.getId()); + await permissionsPage.selectOption('Consumer'); + await expect(await permissionsPage.getRoleCellValue(filePermissionUser.getId())).toEqual('Consumer'); }); - it('[C276980] Should not be able to duplicate User or Group to the locally set permissions', () => { - expect(permissionsPage.getRoleCellValue(filePermissionUser.getId())).toEqual('Contributor'); - - permissionsPage.clickAddPermissionButton(); - permissionsPage.checkAddPermissionDialogIsDisplayed(); - permissionsPage.checkSearchUserInputIsDisplayed(); - permissionsPage.searchUserOrGroup(filePermissionUser.getId()); - permissionsPage.clickUserOrGroup(filePermissionUser.getFirstName()); - - expect(permissionsPage.getAssignPermissionErrorText()).toBe(duplicateUserPermissionMessage); + it('[C276980] Should not be able to duplicate User or Group to the locally set permissions', async () => { + await expect(await permissionsPage.getRoleCellValue(filePermissionUser.getId())).toEqual('Contributor'); + await permissionsPage.clickAddPermissionButton(); + await permissionsPage.checkAddPermissionDialogIsDisplayed(); + await permissionsPage.checkSearchUserInputIsDisplayed(); + await permissionsPage.searchUserOrGroup(filePermissionUser.getId()); + await permissionsPage.clickUserOrGroup(filePermissionUser.getFirstName()); + await notificationHistoryPage.checkNotifyContains(duplicateUserPermissionMessage); }); - it('[C276982] Should be able to remove User or Group from the locally set permissions', () => { - expect(permissionsPage.getRoleCellValue(filePermissionUser.getId())).toEqual('Contributor'); - - permissionsPage.clickDeletePermissionButton(); - permissionsPage.checkUserOrGroupIsDeleted(filePermissionUser.getId()); - + it('[C276982] Should be able to remove User or Group from the locally set permissions', async () => { + await expect(await permissionsPage.getRoleCellValue(filePermissionUser.getId())).toEqual('Contributor'); + await permissionsPage.clickDeletePermissionButton(); + await permissionsPage.checkUserOrGroupIsDeleted(filePermissionUser.getId()); }); }); @@ -351,231 +312,133 @@ describe('Permissions Component', function () { describe('Role: Consumer, Contributor, Coordinator, Collaborator, Editor, No Permissions', () => { it('[C276993] Role Consumer', async () => { - await loginPage.loginToContentServicesUsingUserModel(filePermissionUser); - - navigationBarPage.openContentServicesFolder(roleConsumerFolder.entry.id); - - contentServicesPage.checkContentIsDisplayed('RoleConsumer' + fileModel.name); - - contentList.doubleClickRow('RoleConsumer' + fileModel.name); - - viewerPage.checkFileIsLoaded(); - viewerPage.clickCloseButton(); - - contentList.waitForTableBody(); - - contentServicesPage.checkDeleteIsDisabled('RoleConsumer' + fileModel.name); - - BrowserActions.closeMenuAndDialogs(); - - contentList.checkActionMenuIsNotDisplayed(); - - contentServicesPage.metadataContent('RoleConsumer' + fileModel.name); - - notificationPage.checkNotifyContains('You don\'t have access to do this.'); - - contentServicesPage.uploadFile(fileModel.location); - - notificationPage.checkNotifyContains('You don\'t have the create permission to upload the content'); - + await navigationBarPage.openContentServicesFolder(roleConsumerFolder.entry.id); + await contentServicesPage.checkContentIsDisplayed('RoleConsumer' + fileModel.name); + await contentList.doubleClickRow('RoleConsumer' + fileModel.name); + await viewerPage.checkFileIsLoaded(); + await viewerPage.clickCloseButton(); + await contentList.waitForTableBody(); + await contentServicesPage.checkDeleteIsDisabled('RoleConsumer' + fileModel.name); + await BrowserActions.closeMenuAndDialogs(); + await contentList.checkActionMenuIsNotDisplayed(); + await contentServicesPage.metadataContent('RoleConsumer' + fileModel.name); + await notificationHistoryPage.checkNotifyContains('You don\'t have access to do this.'); + await contentServicesPage.uploadFile(fileModel.location); + await notificationHistoryPage.checkNotifyContains('You don\'t have the create permission to upload the content'); }); it('[C276996] Role Contributor', async () => { - await loginPage.loginToContentServicesUsingUserModel(filePermissionUser); - - navigationBarPage.openContentServicesFolder(roleContributorFolder.entry.id); - - contentServicesPage.checkContentIsDisplayed('RoleContributor' + fileModel.name); - - contentList.doubleClickRow('RoleContributor' + fileModel.name); - - viewerPage.checkFileIsLoaded(); - viewerPage.clickCloseButton(); - - contentList.waitForTableBody(); - - contentServicesPage.checkDeleteIsDisabled('RoleContributor' + fileModel.name); - - BrowserActions.closeMenuAndDialogs(); - - contentList.checkActionMenuIsNotDisplayed(); - - contentServicesPage.metadataContent('RoleContributor' + fileModel.name); - - notificationPage.checkNotifyContains('You don\'t have access to do this.'); - - contentServicesPage.uploadFile(testFileModel.location).checkContentIsDisplayed(testFileModel.name); - - uploadDialog.fileIsUploaded(testFileModel.name); - uploadDialog.clickOnCloseButton().dialogIsNotDisplayed(); - + await navigationBarPage.openContentServicesFolder(roleContributorFolder.entry.id); + await contentServicesPage.checkContentIsDisplayed('RoleContributor' + fileModel.name); + await contentList.doubleClickRow('RoleContributor' + fileModel.name); + await viewerPage.checkFileIsLoaded(); + await viewerPage.clickCloseButton(); + await contentList.waitForTableBody(); + await contentServicesPage.checkDeleteIsDisabled('RoleContributor' + fileModel.name); + await BrowserActions.closeMenuAndDialogs(); + await contentList.checkActionMenuIsNotDisplayed(); + await contentServicesPage.metadataContent('RoleContributor' + fileModel.name); + await notificationHistoryPage.checkNotifyContains('You don\'t have access to do this.'); + await contentServicesPage.uploadFile(testFileModel.location); + await contentServicesPage.checkContentIsDisplayed(testFileModel.name); + await uploadDialog.fileIsUploaded(testFileModel.name); + await uploadDialog.clickOnCloseButton(); + await uploadDialog.dialogIsNotDisplayed(); }); it('[C277000] Role Editor', async () => { - await loginPage.loginToContentServicesUsingUserModel(filePermissionUser); - - navigationBarPage.openContentServicesFolder(roleEditorFolder.entry.id); - - contentServicesPage.checkContentIsDisplayed('RoleEditor' + fileModel.name); - - contentList.doubleClickRow('RoleEditor' + fileModel.name); - - viewerPage.checkFileIsLoaded(); - viewerPage.clickCloseButton(); - - contentList.waitForTableBody(); - - contentServicesPage.checkDeleteIsDisabled('RoleEditor' + fileModel.name); - - BrowserActions.closeMenuAndDialogs(); - - browser.controlFlow().execute(async () => { - - contentList.checkActionMenuIsNotDisplayed(); - - contentServicesPage.metadataContent('RoleEditor' + fileModel.name); - - metadataViewPage.editIconIsDisplayed(); - - await metadataViewPage.editIconClick(); - - metadataViewPage.editPropertyIconIsDisplayed('properties.cm:title'); - metadataViewPage.clickEditPropertyIcons('properties.cm:title'); - metadataViewPage.enterPropertyText('properties.cm:title', 'newTitle1'); - - await metadataViewPage.clickUpdatePropertyIcon('properties.cm:title'); - - expect(metadataViewPage.getPropertyText('properties.cm:title')).toEqual('newTitle1'); - - metadataViewPage.clickCloseButton(); - - contentServicesPage.uploadFile(fileModel.location); - - notificationPage.checkNotifyContains('You don\'t have the create permission to upload the content'); - - }); - + await navigationBarPage.openContentServicesFolder(roleEditorFolder.entry.id); + await contentServicesPage.checkContentIsDisplayed('RoleEditor' + fileModel.name); + await contentList.doubleClickRow('RoleEditor' + fileModel.name); + await viewerPage.checkFileIsLoaded(); + await viewerPage.clickCloseButton(); + await contentList.waitForTableBody(); + await contentServicesPage.checkDeleteIsDisabled('RoleEditor' + fileModel.name); + await BrowserActions.closeMenuAndDialogs(); + await contentList.checkActionMenuIsNotDisplayed(); + await contentServicesPage.metadataContent('RoleEditor' + fileModel.name); + await metadataViewPage.editIconIsDisplayed(); + await metadataViewPage.editIconClick(); + await metadataViewPage.editPropertyIconIsDisplayed('properties.cm:title'); + await metadataViewPage.clickEditPropertyIcons('properties.cm:title'); + await metadataViewPage.enterPropertyText('properties.cm:title', 'newTitle1'); + await metadataViewPage.clickUpdatePropertyIcon('properties.cm:title'); + await expect(await metadataViewPage.getPropertyText('properties.cm:title')).toEqual('newTitle1'); + await metadataViewPage.clickCloseButton(); + await contentServicesPage.uploadFile(fileModel.location); + await notificationHistoryPage.checkNotifyContains('You don\'t have the create permission to upload the content'); }); it('[C277003] Role Collaborator', async () => { - await loginPage.loginToContentServicesUsingUserModel(filePermissionUser); - - navigationBarPage.openContentServicesFolder(roleCollaboratorFolder.entry.id); - - contentServicesPage.checkContentIsDisplayed('RoleCollaborator' + fileModel.name); - - contentList.doubleClickRow('RoleCollaborator' + fileModel.name); - - viewerPage.checkFileIsLoaded(); - viewerPage.clickCloseButton(); - - contentList.waitForTableBody(); - - contentServicesPage.checkDeleteIsDisabled('RoleCollaborator' + fileModel.name); - - BrowserActions.closeMenuAndDialogs(); - - browser.controlFlow().execute(async () => { - - contentList.checkActionMenuIsNotDisplayed(); - - contentServicesPage.metadataContent('RoleCollaborator' + fileModel.name); - - metadataViewPage.editIconIsDisplayed(); - - await metadataViewPage.editIconClick(); - - metadataViewPage.editPropertyIconIsDisplayed('properties.cm:title'); - metadataViewPage.clickEditPropertyIcons('properties.cm:title'); - metadataViewPage.enterPropertyText('properties.cm:title', 'newTitle2'); - - await metadataViewPage.clickUpdatePropertyIcon('properties.cm:title'); - - expect(metadataViewPage.getPropertyText('properties.cm:title')).toEqual('newTitle2'); - - metadataViewPage.clickCloseButton(); - - contentServicesPage.uploadFile(testFileModel.location).checkContentIsDisplayed(testFileModel.name); - - uploadDialog.fileIsUploaded(testFileModel.name); - uploadDialog.clickOnCloseButton().dialogIsNotDisplayed(); - - }); - + await navigationBarPage.openContentServicesFolder(roleCollaboratorFolder.entry.id); + await contentServicesPage.checkContentIsDisplayed('RoleCollaborator' + fileModel.name); + await contentList.doubleClickRow('RoleCollaborator' + fileModel.name); + await viewerPage.checkFileIsLoaded(); + await viewerPage.clickCloseButton(); + await contentList.waitForTableBody(); + await contentServicesPage.checkDeleteIsDisabled('RoleCollaborator' + fileModel.name); + await BrowserActions.closeMenuAndDialogs(); + await contentList.checkActionMenuIsNotDisplayed(); + await contentServicesPage.metadataContent('RoleCollaborator' + fileModel.name); + await metadataViewPage.editIconIsDisplayed(); + await metadataViewPage.editIconClick(); + await metadataViewPage.editPropertyIconIsDisplayed('properties.cm:title'); + await metadataViewPage.clickEditPropertyIcons('properties.cm:title'); + await metadataViewPage.enterPropertyText('properties.cm:title', 'newTitle2'); + await metadataViewPage.clickUpdatePropertyIcon('properties.cm:title'); + await expect(await metadataViewPage.getPropertyText('properties.cm:title')).toEqual('newTitle2'); + await metadataViewPage.clickCloseButton(); + await contentServicesPage.uploadFile(testFileModel.location); + await contentServicesPage.checkContentIsDisplayed(testFileModel.name); + await uploadDialog.fileIsUploaded(testFileModel.name); + await uploadDialog.clickOnCloseButton(); + await uploadDialog.dialogIsNotDisplayed(); }); it('[C277004] Role Coordinator', async () => { - await loginPage.loginToContentServicesUsingUserModel(filePermissionUser); - - navigationBarPage.openContentServicesFolder(roleCoordinatorFolder.entry.id); - - contentServicesPage.checkContentIsDisplayed('RoleCoordinator' + fileModel.name); - - contentList.doubleClickRow('RoleCoordinator' + fileModel.name); - - viewerPage.checkFileIsLoaded(); - viewerPage.clickCloseButton(); - - contentList.waitForTableBody(); - - contentServicesPage.metadataContent('RoleCoordinator' + fileModel.name); - - metadataViewPage.editIconIsDisplayed(); - - browser.controlFlow().execute(async () => { - - await metadataViewPage.editIconClick(); - - metadataViewPage.editPropertyIconIsDisplayed('properties.cm:title'); - metadataViewPage.clickEditPropertyIcons('properties.cm:title'); - metadataViewPage.enterPropertyText('properties.cm:title', 'newTitle3'); - - await metadataViewPage.clickUpdatePropertyIcon('properties.cm:title'); - - expect(metadataViewPage.getPropertyText('properties.cm:title')).toEqual('newTitle3'); - - metadataViewPage.clickCloseButton(); - contentServicesPage.uploadFile(pngFileModel.location).checkContentIsDisplayed(pngFileModel.name); - - uploadDialog.fileIsUploaded(pngFileModel.name); - uploadDialog.clickOnCloseButton().dialogIsNotDisplayed(); - - contentServicesPage.checkContentIsDisplayed('RoleCoordinator' + fileModel.name); - contentServicesPage.deleteContent('RoleCoordinator' + fileModel.name); - contentServicesPage.checkContentIsNotDisplayed('RoleCoordinator' + fileModel.name); - - }); - + await navigationBarPage.openContentServicesFolder(roleCoordinatorFolder.entry.id); + await contentServicesPage.checkContentIsDisplayed('RoleCoordinator' + fileModel.name); + await contentList.doubleClickRow('RoleCoordinator' + fileModel.name); + await viewerPage.checkFileIsLoaded(); + await viewerPage.clickCloseButton(); + await contentList.waitForTableBody(); + await contentServicesPage.metadataContent('RoleCoordinator' + fileModel.name); + await metadataViewPage.editIconIsDisplayed(); + await metadataViewPage.editIconClick(); + await metadataViewPage.editPropertyIconIsDisplayed('properties.cm:title'); + await metadataViewPage.clickEditPropertyIcons('properties.cm:title'); + await metadataViewPage.enterPropertyText('properties.cm:title', 'newTitle3'); + await metadataViewPage.clickUpdatePropertyIcon('properties.cm:title'); + await expect(await metadataViewPage.getPropertyText('properties.cm:title')).toEqual('newTitle3'); + await metadataViewPage.clickCloseButton(); + await contentServicesPage.uploadFile(pngFileModel.location); + await contentServicesPage.checkContentIsDisplayed(pngFileModel.name); + await uploadDialog.fileIsUploaded(pngFileModel.name); + await uploadDialog.clickOnCloseButton(); + await uploadDialog.dialogIsNotDisplayed(); + await contentServicesPage.checkContentIsDisplayed('RoleCoordinator' + fileModel.name); + await contentServicesPage.deleteContent('RoleCoordinator' + fileModel.name); + await contentServicesPage.checkContentIsNotDisplayed('RoleCoordinator' + fileModel.name); }); it('[C279881] No Permission User', async () => { - await loginPage.loginToContentServicesUsingUserModel(filePermissionUser); - - navigationBarPage.openContentServicesFolder(roleConsumerFolder.entry.id); - - contentServicesPage.checkContentIsDisplayed('RoleConsumer' + fileModel.name); - contentServicesPage.checkSelectedSiteIsDisplayed('My files'); - - contentList.rightClickOnRow('RoleConsumer' + fileModel.name); - - contentServicesPage.pressContextMenuActionNamed('Permission'); - - permissionsPage.checkPermissionInheritedButtonIsDisplayed(); - permissionsPage.checkAddPermissionButtonIsDisplayed(); - permissionsPage.clickPermissionInheritedButton(); - - notificationPage.checkNotifyContains('You are not allowed to change permissions'); - - permissionsPage.clickAddPermissionButton(); - - notificationPage.checkNotifyContains('You are not allowed to change permissions'); - + await navigationBarPage.openContentServicesFolder(roleConsumerFolder.entry.id); + await contentServicesPage.checkContentIsDisplayed('RoleConsumer' + fileModel.name); + await contentServicesPage.checkSelectedSiteIsDisplayed('My files'); + await contentList.rightClickOnRow('RoleConsumer' + fileModel.name); + await contentServicesPage.pressContextMenuActionNamed('Permission'); + await permissionsPage.checkPermissionInheritedButtonIsDisplayed(); + await permissionsPage.checkAddPermissionButtonIsDisplayed(); + await permissionsPage.clickPermissionInheritedButton(); + await notificationHistoryPage.checkNotifyContains('You are not allowed to change permissions'); + await permissionsPage.clickAddPermissionButton(); + await notificationHistoryPage.checkNotifyContains('You are not allowed to change permissions'); }); }); diff --git a/e2e/content-services/permissions/site-permissions.e2e.ts b/e2e/content-services/permissions/site-permissions.e2e.ts index f6608c6574..aae1fa9eab 100644 --- a/e2e/content-services/permissions/site-permissions.e2e.ts +++ b/e2e/content-services/permissions/site-permissions.e2e.ts @@ -29,7 +29,7 @@ import { MetadataViewPage } from '../../pages/adf/metadataViewPage'; import { UploadDialog } from '../../pages/adf/dialog/uploadDialog'; import { NavigationBarPage } from '../../pages/adf/navigationBarPage'; -describe('Permissions Component', function () { +describe('Permissions Component', () => { this.alfrescoJsApi = new AlfrescoApi({ provider: 'ECM', @@ -53,18 +53,18 @@ describe('Permissions Component', function () { let publicSite, privateSite, folderName; const fileModel = new FileModel({ - 'name': resources.Files.ADF_DOCUMENTS.TXT_0B.file_name, - 'location': resources.Files.ADF_DOCUMENTS.TXT_0B.file_location + name: resources.Files.ADF_DOCUMENTS.TXT_0B.file_name, + location: resources.Files.ADF_DOCUMENTS.TXT_0B.file_location }); const testFileModel = new FileModel({ - 'name': resources.Files.ADF_DOCUMENTS.TEST.file_name, - 'location': resources.Files.ADF_DOCUMENTS.TEST.file_location + name: resources.Files.ADF_DOCUMENTS.TEST.file_name, + location: resources.Files.ADF_DOCUMENTS.TEST.file_location }); const pngFileModel = new FileModel({ - 'name': resources.Files.ADF_DOCUMENTS.PNG.file_name, - 'location': resources.Files.ADF_DOCUMENTS.PNG.file_location + name: resources.Files.ADF_DOCUMENTS.PNG.file_name, + location: resources.Files.ADF_DOCUMENTS.PNG.file_location }); let siteFolder, privateSiteFile; @@ -76,7 +76,7 @@ describe('Permissions Component', function () { contributorUser = new AcsUserModel(); managerUser = new AcsUserModel(); - beforeAll(async (done) => { + beforeAll(async () => { await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); await this.alfrescoJsApi.core.peopleApi.addPerson(folderOwnerUser); @@ -87,7 +87,7 @@ describe('Permissions Component', function () { await this.alfrescoJsApi.core.peopleApi.addPerson(managerUser); await this.alfrescoJsApi.login(folderOwnerUser.id, folderOwnerUser.password); - browser.sleep(15000); + await browser.sleep(15000); const publicSiteName = `PUBLIC_TEST_SITE_${StringUtil.generateRandomString(5)}`; @@ -144,121 +144,125 @@ describe('Permissions Component', function () { await uploadActions.uploadFile(fileModel.location, 'Site' + fileModel.name, siteFolder.entry.id); - done(); - }); - afterAll(async (done) => { + afterAll(async () => { await navigationBarPage.clickLogoutButton(); await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); await this.alfrescoJsApi.core.sitesApi.deleteSite(publicSite.entry.id); await this.alfrescoJsApi.core.sitesApi.deleteSite(privateSite.entry.id); - done(); }); - describe('Role Site Dropdown', function () { + describe('Role Site Dropdown', () => { - beforeAll(async (done) => { + beforeAll(async () => { await loginPage.loginToContentServicesUsingUserModel(folderOwnerUser); await BrowserActions.getUrl(browser.params.testConfig.adf.url + '/files/' + publicSite.entry.guid); - done(); }); it('[C277002] Should display the Role Site dropdown', async () => { - contentServicesPage.checkContentIsDisplayed(folderName); + await contentServicesPage.checkContentIsDisplayed(folderName); - contentList.rightClickOnRow(folderName); + await contentList.rightClickOnRow(folderName); - contentServicesPage.pressContextMenuActionNamed('Permission'); + await contentServicesPage.pressContextMenuActionNamed('Permission'); - permissionsPage.checkPermissionInheritedButtonIsDisplayed(); - permissionsPage.checkAddPermissionButtonIsDisplayed(); - permissionsPage.clickAddPermissionButton(); - permissionsPage.checkAddPermissionDialogIsDisplayed(); - permissionsPage.checkSearchUserInputIsDisplayed(); + await permissionsPage.checkPermissionInheritedButtonIsDisplayed(); + await permissionsPage.checkAddPermissionButtonIsDisplayed(); - permissionsPage.searchUserOrGroup(consumerUser.getId()); - permissionsPage.clickUserOrGroup(consumerUser.getFirstName()); - permissionsPage.checkUserOrGroupIsAdded(consumerUser.getId()); + await browser.sleep(5000); - expect(permissionsPage.getRoleCellValue(consumerUser.getId())).toEqual('SiteCollaborator'); + await permissionsPage.clickAddPermissionButton(); + await permissionsPage.checkAddPermissionDialogIsDisplayed(); + await permissionsPage.checkSearchUserInputIsDisplayed(); - permissionsPage.clickRoleDropdownByUserOrGroupName(consumerUser.getId()); + await permissionsPage.searchUserOrGroup(consumerUser.getId()); - expect(permissionsPage.getRoleDropdownOptions().count()).toBe(4); - expect(permissionsPage.getRoleDropdownOptions().get(0).getText()).toBe(CONSTANTS.CS_USER_ROLES.COLLABORATOR); - expect(permissionsPage.getRoleDropdownOptions().get(1).getText()).toBe(CONSTANTS.CS_USER_ROLES.CONSUMER); - expect(permissionsPage.getRoleDropdownOptions().get(2).getText()).toBe(CONSTANTS.CS_USER_ROLES.CONTRIBUTOR); - expect(permissionsPage.getRoleDropdownOptions().get(3).getText()).toBe(CONSTANTS.CS_USER_ROLES.MANAGER); + await permissionsPage.clickUserOrGroup(consumerUser.getFirstName()); + await permissionsPage.checkUserOrGroupIsAdded(consumerUser.getId()); + + await expect(await permissionsPage.getRoleCellValue(consumerUser.getId())).toEqual('SiteCollaborator'); + + await permissionsPage.clickRoleDropdownByUserOrGroupName(consumerUser.getId()); + + const roleDropdownOptions = permissionsPage.getRoleDropdownOptions(); + + await expect(await roleDropdownOptions.count()).toBe(4); + await expect(await BrowserActions.getText(roleDropdownOptions.get(0))).toBe(CONSTANTS.CS_USER_ROLES.COLLABORATOR); + await expect(await BrowserActions.getText(roleDropdownOptions.get(1))).toBe(CONSTANTS.CS_USER_ROLES.CONSUMER); + await expect(await BrowserActions.getText(roleDropdownOptions.get(2))).toBe(CONSTANTS.CS_USER_ROLES.CONTRIBUTOR); + await expect(await BrowserActions.getText(roleDropdownOptions.get(3))).toBe(CONSTANTS.CS_USER_ROLES.MANAGER); }); }); - describe('Roles: SiteConsumer, SiteCollaborator, SiteContributor, SiteManager', function () { + describe('Roles: SiteConsumer, SiteCollaborator, SiteContributor, SiteManager', () => { it('[C276994] Role SiteConsumer', async () => { await loginPage.loginToContentServicesUsingUserModel(siteConsumerUser); - navigationBarPage.openContentServicesFolder(siteFolder.entry.id); + await navigationBarPage.openContentServicesFolder(siteFolder.entry.id); - contentServicesPage.checkContentIsDisplayed('Site' + fileModel.name); + await contentServicesPage.checkContentIsDisplayed('Site' + fileModel.name); - contentList.doubleClickRow('Site' + fileModel.name); + await contentList.doubleClickRow('Site' + fileModel.name); - viewerPage.checkFileIsLoaded(); - viewerPage.clickCloseButton(); + await viewerPage.checkFileIsLoaded(); + await viewerPage.clickCloseButton(); - contentList.waitForTableBody(); + await contentList.waitForTableBody(); - contentServicesPage.checkDeleteIsDisabled('Site' + fileModel.name); + await contentServicesPage.checkDeleteIsDisabled('Site' + fileModel.name); - BrowserActions.closeMenuAndDialogs(); + await BrowserActions.closeMenuAndDialogs(); - contentList.checkActionMenuIsNotDisplayed(); + await contentList.checkActionMenuIsNotDisplayed(); - contentServicesPage.metadataContent('Site' + fileModel.name); + await contentServicesPage.metadataContent('Site' + fileModel.name); - notificationHistoryPage.checkNotifyContains('You don\'t have access to do this.'); + await notificationHistoryPage.checkNotifyContains('You don\'t have access to do this.'); - contentServicesPage.uploadFile(fileModel.location); + await contentServicesPage.uploadFile(fileModel.location); - notificationHistoryPage.checkNotifyContains('You don\'t have the create permission to upload the content'); + await notificationHistoryPage.checkNotifyContains('You don\'t have the create permission to upload the content'); }); it('[C276997] Role SiteContributor', async () => { await loginPage.loginToContentServicesUsingUserModel(contributorUser); - navigationBarPage.openContentServicesFolder(siteFolder.entry.id); + await navigationBarPage.openContentServicesFolder(siteFolder.entry.id); - contentServicesPage.checkContentIsDisplayed('Site' + fileModel.name); + await contentServicesPage.checkContentIsDisplayed('Site' + fileModel.name); - contentList.doubleClickRow('Site' + fileModel.name); + await contentList.doubleClickRow('Site' + fileModel.name); - viewerPage.checkFileIsLoaded(); - viewerPage.clickCloseButton(); + await viewerPage.checkFileIsLoaded(); + await viewerPage.clickCloseButton(); - contentList.waitForTableBody(); + await contentList.waitForTableBody(); - contentServicesPage.checkDeleteIsDisabled('Site' + fileModel.name); + await contentServicesPage.checkDeleteIsDisabled('Site' + fileModel.name); - BrowserActions.closeMenuAndDialogs(); + await BrowserActions.closeMenuAndDialogs(); - contentList.checkActionMenuIsNotDisplayed(); + await contentList.checkActionMenuIsNotDisplayed(); - contentServicesPage.metadataContent('Site' + fileModel.name); + await contentServicesPage.metadataContent('Site' + fileModel.name); - notificationHistoryPage.checkNotifyContains('You don\'t have access to do this.'); + await notificationHistoryPage.checkNotifyContains('You don\'t have access to do this.'); - contentServicesPage.uploadFile(testFileModel.location).checkContentIsDisplayed(testFileModel.name); + await contentServicesPage.uploadFile(testFileModel.location); + await contentServicesPage.checkContentIsDisplayed(testFileModel.name); - uploadDialog.fileIsUploaded(testFileModel.name); - uploadDialog.clickOnCloseButton().dialogIsNotDisplayed(); + await uploadDialog.fileIsUploaded(testFileModel.name); + await uploadDialog.clickOnCloseButton(); + await uploadDialog.dialogIsNotDisplayed(); }); @@ -266,86 +270,81 @@ describe('Permissions Component', function () { await loginPage.loginToContentServicesUsingUserModel(collaboratorUser); - navigationBarPage.openContentServicesFolder(siteFolder.entry.id); + await navigationBarPage.openContentServicesFolder(siteFolder.entry.id); - contentServicesPage.checkContentIsDisplayed('Site' + fileModel.name); + await contentServicesPage.checkContentIsDisplayed('Site' + fileModel.name); - contentList.doubleClickRow('Site' + fileModel.name); + await contentList.doubleClickRow('Site' + fileModel.name); - viewerPage.checkFileIsLoaded(); - viewerPage.clickCloseButton(); + await viewerPage.checkFileIsLoaded(); + await viewerPage.clickCloseButton(); - contentList.waitForTableBody(); + await contentList.waitForTableBody(); - contentServicesPage.checkDeleteIsDisabled('Site' + fileModel.name); + await contentServicesPage.checkDeleteIsDisabled('Site' + fileModel.name); - BrowserActions.closeMenuAndDialogs(); + await BrowserActions.closeMenuAndDialogs(); - browser.controlFlow().execute(async () => { + await contentList.checkActionMenuIsNotDisplayed(); - contentList.checkActionMenuIsNotDisplayed(); + await contentServicesPage.metadataContent('Site' + fileModel.name); - contentServicesPage.metadataContent('Site' + fileModel.name); + await metadataViewPage.editIconIsDisplayed(); + await metadataViewPage.editIconClick(); - metadataViewPage.editIconIsDisplayed(); - await metadataViewPage.editIconClick(); + await metadataViewPage.editPropertyIconIsDisplayed('properties.cm:title'); + await metadataViewPage.clickEditPropertyIcons('properties.cm:title'); - metadataViewPage.editPropertyIconIsDisplayed('properties.cm:title'); - metadataViewPage.clickEditPropertyIcons('properties.cm:title'); + await metadataViewPage.enterPropertyText('properties.cm:title', 'newTitle'); + await metadataViewPage.clickUpdatePropertyIcon('properties.cm:title'); - metadataViewPage.enterPropertyText('properties.cm:title', 'newTitle'); - await metadataViewPage.clickUpdatePropertyIcon('properties.cm:title'); + await expect(await metadataViewPage.getPropertyText('properties.cm:title')).toEqual('newTitle'); + await metadataViewPage.clickCloseButton(); - expect(metadataViewPage.getPropertyText('properties.cm:title')).toEqual('newTitle'); - metadataViewPage.clickCloseButton(); - - contentServicesPage.uploadFile(pngFileModel.location).checkContentIsDisplayed(pngFileModel.name); - - uploadDialog.fileIsUploaded(pngFileModel.name); - uploadDialog.clickOnCloseButton().dialogIsNotDisplayed(); - - }); + await contentServicesPage.uploadFile(pngFileModel.location); + await contentServicesPage.checkContentIsDisplayed(pngFileModel.name); + await uploadDialog.fileIsUploaded(pngFileModel.name); + await uploadDialog.clickOnCloseButton(); + await uploadDialog.dialogIsNotDisplayed(); }); it('[C277006] Role SiteManager', async () => { await loginPage.loginToContentServicesUsingUserModel(managerUser); - navigationBarPage.openContentServicesFolder(siteFolder.entry.id); - contentServicesPage.checkContentIsDisplayed('Site' + fileModel.name); + await navigationBarPage.openContentServicesFolder(siteFolder.entry.id); + await contentServicesPage.checkContentIsDisplayed('Site' + fileModel.name); - contentList.doubleClickRow('Site' + fileModel.name); + await contentList.doubleClickRow('Site' + fileModel.name); - viewerPage.checkFileIsLoaded(); - viewerPage.clickCloseButton(); + await viewerPage.checkFileIsLoaded(); + await viewerPage.clickCloseButton(); - contentList.waitForTableBody(); - contentServicesPage.metadataContent('Site' + fileModel.name); + await contentList.waitForTableBody(); + await contentServicesPage.metadataContent('Site' + fileModel.name); - metadataViewPage.editIconIsDisplayed(); + await metadataViewPage.editIconIsDisplayed(); - browser.controlFlow().execute(async () => { + await metadataViewPage.editIconClick(); - await metadataViewPage.editIconClick(); + await metadataViewPage.editPropertyIconIsDisplayed('properties.cm:description'); + await metadataViewPage.clickEditPropertyIcons('properties.cm:description'); + await metadataViewPage.enterDescriptionText('newDescription'); - metadataViewPage.editPropertyIconIsDisplayed('properties.cm:description'); - metadataViewPage.clickEditPropertyIcons('properties.cm:description'); - metadataViewPage.enterDescriptionText('newDescription'); + await metadataViewPage.clickUpdatePropertyIcon('properties.cm:description'); - await metadataViewPage.clickUpdatePropertyIcon('properties.cm:description'); + await expect(await metadataViewPage.getPropertyText('properties.cm:description')).toEqual('newDescription'); - expect(metadataViewPage.getPropertyText('properties.cm:description')).toEqual('newDescription'); + await metadataViewPage.clickCloseButton(); + await contentServicesPage.uploadFile(testFileModel.location); + await contentServicesPage.checkContentIsDisplayed(testFileModel.name); - metadataViewPage.clickCloseButton(); - contentServicesPage.uploadFile(testFileModel.location).checkContentIsDisplayed(testFileModel.name); - - uploadDialog.fileIsUploaded(testFileModel.name); - uploadDialog.clickOnCloseButton().dialogIsNotDisplayed(); - - contentServicesPage.checkContentIsDisplayed('Site' + fileModel.name); - contentServicesPage.deleteContent('Site' + fileModel.name); - contentServicesPage.checkContentIsNotDisplayed('Site' + fileModel.name); - }); + await uploadDialog.fileIsUploaded(testFileModel.name); + await uploadDialog.clickOnCloseButton(); + await uploadDialog.dialogIsNotDisplayed(); + await contentServicesPage.checkContentIsDisplayed('Site' + fileModel.name); + await contentServicesPage.deleteContent('Site' + fileModel.name); + await contentServicesPage.checkContentIsNotDisplayed('Site' + fileModel.name); }); }); diff --git a/e2e/content-services/share-file/share-file.e2e.ts b/e2e/content-services/share-file/share-file.e2e.ts index c70dec04fa..d48c1cd795 100644 --- a/e2e/content-services/share-file/share-file.e2e.ts +++ b/e2e/content-services/share-file/share-file.e2e.ts @@ -48,13 +48,13 @@ describe('Share file', () => { const acsUser = new AcsUserModel(); const uploadActions = new UploadActions(this.alfrescoJsApi); const pngFileModel = new FileModel({ - 'name': resources.Files.ADF_DOCUMENTS.PNG.file_name, - 'location': resources.Files.ADF_DOCUMENTS.PNG.file_location + name: resources.Files.ADF_DOCUMENTS.PNG.file_name, + location: resources.Files.ADF_DOCUMENTS.PNG.file_location }); let nodeId; - beforeAll(async (done) => { + beforeAll(async () => { await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); await this.alfrescoJsApi.core.peopleApi.addPerson(acsUser); await this.alfrescoJsApi.login(acsUser.id, acsUser.password); @@ -67,147 +67,144 @@ describe('Share file', () => { await navigationBarPage.clickContentServicesButton(); - done(); }); - afterAll(async (done) => { + afterAll(async () => { await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); await uploadActions.deleteFileOrFolder(nodeId); - done(); + }); describe('Shared link dialog', () => { - beforeAll(() => { - contentListPage.selectRow(pngFileModel.name); + beforeAll(async () => { + await contentListPage.selectRow(pngFileModel.name); }); - afterEach(() => { - BrowserActions.closeMenuAndDialogs(); + afterEach(async () => { + await BrowserActions.closeMenuAndDialogs(); }); - it('[C286549] Should check automatically toggle button in Share dialog', () => { - contentServicesPage.clickShareButton(); - shareDialog.checkDialogIsDisplayed(); - shareDialog.shareToggleButtonIsChecked(); + it('[C286549] Should check automatically toggle button in Share dialog', async () => { + await contentServicesPage.clickShareButton(); + await shareDialog.checkDialogIsDisplayed(); + await shareDialog.shareToggleButtonIsChecked(); }); - it('[C286544] Should display notification when clicking URL copy button', () => { - contentServicesPage.clickShareButton(); - shareDialog.checkDialogIsDisplayed(); - shareDialog.clickShareLinkButton(); - notificationHistoryPage.checkNotifyContains('Link copied to the clipboard'); + it('[C286544] Should display notification when clicking URL copy button', async () => { + await contentServicesPage.clickShareButton(); + await shareDialog.checkDialogIsDisplayed(); + await shareDialog.clickShareLinkButton(); + await notificationHistoryPage.checkNotifyContains('Link copied to the clipboard'); }); - it('[C286543] Should be possible to close Share dialog', () => { - contentServicesPage.clickShareButton(); - shareDialog.checkDialogIsDisplayed(); - shareDialog.checkShareLinkIsDisplayed(); + it('[C286543] Should be possible to close Share dialog', async () => { + await contentServicesPage.clickShareButton(); + await shareDialog.checkDialogIsDisplayed(); + await shareDialog.checkShareLinkIsDisplayed(); }); - it('[C286578] Should disable today option in expiration day calendar', () => { - contentServicesPage.clickShareButton(); - shareDialog.checkDialogIsDisplayed(); - shareDialog.clickDateTimePickerButton(); - shareDialog.calendarTodayDayIsDisabled(); + it('[C286578] Should disable today option in expiration day calendar', async () => { + await contentServicesPage.clickShareButton(); + await shareDialog.checkDialogIsDisplayed(); + await shareDialog.clickDateTimePickerButton(); + await shareDialog.calendarTodayDayIsDisabled(); }); it('[C286548] Should be possible to set expiry date for link', async () => { - contentServicesPage.clickShareButton(); - shareDialog.checkDialogIsDisplayed(); - shareDialog.clickDateTimePickerButton(); - shareDialog.setDefaultDay(); - shareDialog.setDefaultHour(); - shareDialog.setDefaultMinutes(); - shareDialog.dateTimePickerDialogIsClosed(); + await contentServicesPage.clickShareButton(); + await shareDialog.checkDialogIsDisplayed(); + await shareDialog.clickDateTimePickerButton(); + await shareDialog.setDefaultDay(); + await shareDialog.setDefaultHour(); + await shareDialog.setDefaultMinutes(); + await shareDialog.dateTimePickerDialogIsClosed(); const value = await shareDialog.getExpirationDate(); - shareDialog.clickCloseButton(); - shareDialog.dialogIsClosed(); - contentServicesPage.clickShareButton(); - shareDialog.checkDialogIsDisplayed(); - shareDialog.expirationDateInputHasValue(value); - BrowserActions.closeMenuAndDialogs(); + await shareDialog.clickCloseButton(); + await shareDialog.dialogIsClosed(); + await contentServicesPage.clickShareButton(); + await shareDialog.checkDialogIsDisplayed(); + await shareDialog.expirationDateInputHasValue(value); + await BrowserActions.closeMenuAndDialogs(); }); - it('[C286578] Should disable today option in expiration day calendar', () => { - contentServicesPage.clickShareButton(); - shareDialog.checkDialogIsDisplayed(); - shareDialog.clickDateTimePickerButton(); - shareDialog.calendarTodayDayIsDisabled(); + it('[C286578] Should disable today option in expiration day calendar', async () => { + await contentServicesPage.clickShareButton(); + await shareDialog.checkDialogIsDisplayed(); + await shareDialog.clickDateTimePickerButton(); + await shareDialog.calendarTodayDayIsDisabled(); }); it('[C310329] Should be possible to set expiry date only for link', async () => { await LocalStorageUtil.setConfigField('sharedLinkDateTimePickerType', JSON.stringify('date')); - contentServicesPage.clickShareButton(); - shareDialog.checkDialogIsDisplayed(); - shareDialog.clickDateTimePickerButton(); - shareDialog.setDefaultDay(); - shareDialog.dateTimePickerDialogIsClosed(); + await contentServicesPage.clickShareButton(); + await shareDialog.checkDialogIsDisplayed(); + await shareDialog.clickDateTimePickerButton(); + await shareDialog.setDefaultDay(); + await shareDialog.dateTimePickerDialogIsClosed(); const value = await shareDialog.getExpirationDate(); - shareDialog.clickCloseButton(); - shareDialog.dialogIsClosed(); - contentServicesPage.clickShareButton(); - shareDialog.checkDialogIsDisplayed(); - shareDialog.expirationDateInputHasValue(value); - BrowserActions.closeMenuAndDialogs(); + await shareDialog.clickCloseButton(); + await shareDialog.dialogIsClosed(); + await contentServicesPage.clickShareButton(); + await shareDialog.checkDialogIsDisplayed(); + await shareDialog.expirationDateInputHasValue(value); + await BrowserActions.closeMenuAndDialogs(); }); }); describe('Shared link preview', () => { - afterEach((done) => { - loginPage.loginToContentServicesUsingUserModel(acsUser); - navigationBarPage.clickContentServicesButton(); - done(); + afterEach(async() => { + await loginPage.loginToContentServicesUsingUserModel(acsUser); + await navigationBarPage.clickContentServicesButton(); + }); - beforeAll(async (done) => { - loginPage.loginToContentServicesUsingUserModel(acsUser); + beforeAll(async () => { + await loginPage.loginToContentServicesUsingUserModel(acsUser); + await navigationBarPage.clickContentServicesButton(); + await contentServicesPage.waitForTableBody(); - navigationBarPage.clickContentServicesButton(); - contentServicesPage.waitForTableBody(); - - done(); }); it('[C286565] Should open file when logged user access shared link', async () => { - contentListPage.selectRow(pngFileModel.name); - contentServicesPage.clickShareButton(); - shareDialog.checkDialogIsDisplayed(); - shareDialog.clickShareLinkButton(); - notificationHistoryPage.checkNotifyContains('Link copied to the clipboard'); + await contentListPage.selectRow(pngFileModel.name); + await contentServicesPage.clickShareButton(); + await shareDialog.checkDialogIsDisplayed(); + await shareDialog.clickShareLinkButton(); const sharedLink = await shareDialog.getShareLink(); - BrowserActions.getUrl(sharedLink); - viewerPage.checkFileNameIsDisplayed(pngFileModel.name); + await notificationHistoryPage.checkNotifyContains('Link copied to the clipboard'); + await BrowserActions.getUrl(sharedLink); + await viewerPage.checkFileNameIsDisplayed(pngFileModel.name); }); it('[C287803] Should the URL be kept the same when opening the share dialog multiple times', async () => { - contentListPage.selectRow(pngFileModel.name); - contentServicesPage.clickShareButton(); - shareDialog.checkDialogIsDisplayed(); - shareDialog.clickShareLinkButton(); - notificationHistoryPage.checkNotifyContains('Link copied to the clipboard'); + await contentListPage.selectRow(pngFileModel.name); + await contentServicesPage.clickShareButton(); + await shareDialog.checkDialogIsDisplayed(); + await shareDialog.clickShareLinkButton(); const sharedLink = await shareDialog.getShareLink(); - shareDialog.clickCloseButton(); - contentServicesPage.clickShareButton(); - shareDialog.checkDialogIsDisplayed(); - shareDialog.clickShareLinkButton(); - notificationHistoryPage.checkNotifyContains('Link copied to the clipboard'); + await shareDialog.clickCloseButton(); + await notificationHistoryPage.checkNotifyContains('Link copied to the clipboard'); + await contentServicesPage.clickShareButton(); + await shareDialog.checkDialogIsDisplayed(); + await shareDialog.clickShareLinkButton(); const secondSharedLink = await shareDialog.getShareLink(); - expect(sharedLink).toEqual(secondSharedLink); - BrowserActions.getUrl(sharedLink); - viewerPage.checkFileNameIsDisplayed(pngFileModel.name); + await notificationHistoryPage.checkNotifyContains('Link copied to the clipboard'); + await expect(sharedLink).toEqual(secondSharedLink); + await BrowserActions.getUrl(sharedLink); + await viewerPage.checkFileNameIsDisplayed(pngFileModel.name); }); it('[C286539] Should open file when non-logged user access shared link', async () => { - contentListPage.selectRow(pngFileModel.name); - contentServicesPage.clickShareButton(); - shareDialog.checkDialogIsDisplayed(); - shareDialog.checkShareLinkIsDisplayed(); + await contentListPage.selectRow(pngFileModel.name); + await contentServicesPage.clickShareButton(); + await shareDialog.checkDialogIsDisplayed(); + await shareDialog.checkShareLinkIsDisplayed(); const sharedLink = await shareDialog.getShareLink(); - shareDialog.clickCloseButton(); - navigationBarPage.clickLogoutButton(); - BrowserActions.getUrl(sharedLink); - viewerPage.checkFileNameIsDisplayed(pngFileModel.name); + await shareDialog.clickCloseButton(); + await navigationBarPage.clickLogoutButton(); + await BrowserActions.getUrl(sharedLink); + await viewerPage.checkFileNameIsDisplayed(pngFileModel.name); }); }); }); diff --git a/e2e/content-services/share-file/unshare-file.e2e.ts b/e2e/content-services/share-file/unshare-file.e2e.ts index b2afee6303..3f96e2499c 100644 --- a/e2e/content-services/share-file/unshare-file.e2e.ts +++ b/e2e/content-services/share-file/unshare-file.e2e.ts @@ -16,7 +16,14 @@ */ import CONSTANTS = require('../../util/constants'); -import { StringUtil, BrowserActions, NotificationHistoryPage, LoginPage, ErrorPage, UploadActions } from '@alfresco/adf-testing'; +import { + StringUtil, + BrowserActions, + NotificationHistoryPage, + LoginPage, + ErrorPage, + UploadActions +} from '@alfresco/adf-testing'; import { NavigationBarPage } from '../../pages/adf/navigationBarPage'; import { ContentServicesPage } from '../../pages/adf/contentServicesPage'; import { ShareDialog } from '../../pages/adf/dialog/shareDialog'; @@ -48,11 +55,11 @@ describe('Unshare file', () => { let nodeId; let testSite; const pngFileModel = new FileModel({ - 'name': resources.Files.ADF_DOCUMENTS.PNG.file_name, - 'location': resources.Files.ADF_DOCUMENTS.PNG.file_location + name: resources.Files.ADF_DOCUMENTS.PNG.file_name, + location: resources.Files.ADF_DOCUMENTS.PNG.file_location }); - beforeAll(async (done) => { + beforeAll(async () => { const site = { title: siteName, visibility: 'PRIVATE', @@ -98,88 +105,88 @@ describe('Unshare file', () => { nodeId = pngUploadedFile.entry.id; await loginPage.loginToContentServicesUsingUserModel(acsUser); - navBar.clickContentServicesButton(); - contentServicesPage.waitForTableBody(); - done(); + await navBar.clickContentServicesButton(); + await contentServicesPage.waitForTableBody(); + }); - afterAll(async (done) => { + afterAll(async () => { await navigationBarPage.clickLogoutButton(); }); - afterEach(async (done) => { + afterEach(async () => { await browser.refresh(); - done(); + }); describe('with permission', () => { - afterAll(async (done) => { + afterAll(async () => { await uploadActions.deleteFileOrFolder(nodeId); - done(); + }); - it('[C286550] Should display unshare confirmation dialog', () => { - contentListPage.selectRow(pngFileModel.name); - contentServicesPage.clickShareButton(); - shareDialog.checkDialogIsDisplayed(); - shareDialog.clickUnShareFile(); - shareDialog.confirmationDialogIsDisplayed(); + it('[C286550] Should display unshare confirmation dialog', async () => { + await contentListPage.selectRow(pngFileModel.name); + await contentServicesPage.clickShareButton(); + await shareDialog.checkDialogIsDisplayed(); + await shareDialog.clickUnShareFile(); + await shareDialog.confirmationDialogIsDisplayed(); }); - it('[C286551] Should be able to cancel unshare action', () => { - contentListPage.selectRow(pngFileModel.name); - contentServicesPage.clickShareButton(); - shareDialog.checkDialogIsDisplayed(); - shareDialog.clickUnShareFile(); - shareDialog.confirmationDialogIsDisplayed(); - shareDialog.clickConfirmationDialogCancelButton(); - shareDialog.shareToggleButtonIsChecked(); + it('[C286551] Should be able to cancel unshare action', async () => { + await contentListPage.selectRow(pngFileModel.name); + await contentServicesPage.clickShareButton(); + await shareDialog.checkDialogIsDisplayed(); + await shareDialog.clickUnShareFile(); + await shareDialog.confirmationDialogIsDisplayed(); + await shareDialog.clickConfirmationDialogCancelButton(); + await shareDialog.shareToggleButtonIsChecked(); }); it('[C286552] Should be able to confirm unshare action', async () => { - contentListPage.selectRow(pngFileModel.name); - contentServicesPage.clickShareButton(); - shareDialog.checkDialogIsDisplayed(); - shareDialog.clickUnShareFile(); - shareDialog.confirmationDialogIsDisplayed(); - shareDialog.clickConfirmationDialogRemoveButton(); - shareDialog.dialogIsClosed(); + await contentListPage.selectRow(pngFileModel.name); + await contentServicesPage.clickShareButton(); + await shareDialog.checkDialogIsDisplayed(); + await shareDialog.clickUnShareFile(); + await shareDialog.confirmationDialogIsDisplayed(); + await shareDialog.clickConfirmationDialogRemoveButton(); + await shareDialog.dialogIsClosed(); }); it('[C280556] Should redirect to 404 when trying to access an unshared file', async () => { - contentListPage.selectRow(pngFileModel.name); - contentServicesPage.clickShareButton(); - shareDialog.checkDialogIsDisplayed(); + await contentListPage.selectRow(pngFileModel.name); + await contentServicesPage.clickShareButton(); + await shareDialog.checkDialogIsDisplayed(); const sharedLink = await shareDialog.getShareLink(); - shareDialog.clickUnShareFile(); - shareDialog.confirmationDialogIsDisplayed(); - shareDialog.clickConfirmationDialogRemoveButton(); - shareDialog.dialogIsClosed(); - BrowserActions.getUrl(sharedLink.replace(browser.params.testConfig.adf_acs.host, browser.params.testConfig.adf.host)); - errorPage.checkErrorCode(); + await shareDialog.clickUnShareFile(); + await shareDialog.confirmationDialogIsDisplayed(); + await shareDialog.clickConfirmationDialogRemoveButton(); + await shareDialog.dialogIsClosed(); + await BrowserActions.getUrl(sharedLink.replace(browser.params.testConfig.adf_acs.host, browser.params.testConfig.adf.host)); + await errorPage.checkErrorCode(); }); }); describe('without permission', () => { - afterAll(async (done) => { + afterAll(async () => { await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); await this.alfrescoJsApi.core.sitesApi.deleteSite(siteName, { permanent: true }); - done(); + }); - it('[C286555] Should NOT be able to unshare file without permission', () => { - navBar.goToSite(testSite); - contentListPage.doubleClickRow('documentLibrary'); - contentListPage.selectRow(nodeBody.name); - contentServicesPage.clickShareButton(); - shareDialog.checkDialogIsDisplayed(); - shareDialog.shareToggleButtonIsChecked(); - shareDialog.clickUnShareFile(); - shareDialog.confirmationDialogIsDisplayed(); - shareDialog.clickConfirmationDialogRemoveButton(); - shareDialog.checkDialogIsDisplayed(); - shareDialog.shareToggleButtonIsChecked(); - notificationHistoryPage.checkNotifyContains(`You don't have permission to unshare this file`); + it('[C286555] Should NOT be able to unshare file without permission', async () => { + await navBar.goToSite(testSite); + await contentListPage.doubleClickRow('documentLibrary'); + await contentListPage.selectRow(nodeBody.name); + await contentServicesPage.clickShareButton(); + await shareDialog.checkDialogIsDisplayed(); + await shareDialog.shareToggleButtonIsChecked(); + await shareDialog.clickUnShareFile(); + await shareDialog.confirmationDialogIsDisplayed(); + await shareDialog.clickConfirmationDialogRemoveButton(); + await shareDialog.checkDialogIsDisplayed(); + await shareDialog.shareToggleButtonIsChecked(); + await notificationHistoryPage.checkNotifyContains(`You don't have permission to unshare this file`); }); }); }); diff --git a/e2e/content-services/social/social.component.e2e.ts b/e2e/content-services/social/social.component.e2e.ts index 1ae79694de..08608e40de 100644 --- a/e2e/content-services/social/social.component.e2e.ts +++ b/e2e/content-services/social/social.component.e2e.ts @@ -52,7 +52,7 @@ describe('Social component', () => { 'location': resources.Files.ADF_DOCUMENTS.TXT_0B.file_location }); - beforeAll(async (done) => { + beforeAll(async () => { await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); await this.alfrescoJsApi.core.peopleApi.addPerson(componentOwner); @@ -81,13 +81,12 @@ describe('Social component', () => { } }); - done(); }); - afterAll(async (done) => { + afterAll(async () => { await navigationBarPage.clickLogoutButton(); await uploadActions.deleteFileOrFolder(emptyFile.entry.id); - done(); + }); describe('User interaction on their own components', () => { @@ -97,21 +96,21 @@ describe('Social component', () => { await navigationBarPage.clickSocialButton(); }); - it('[C203006] Should be able to like and unlike their components but not rate them,', () => { - socialPage.writeCustomNodeId(emptyFile.entry.id); - expect(socialPage.getNodeIdFieldValue()).toEqual(emptyFile.entry.id); - likePage.clickLike(); - expect(likePage.getLikeCounter()).toBe('1'); - likePage.removeHoverFromLikeButton(); - expect(likePage.getLikedIconColor()).toBe(blueLikeColor); - ratePage.rateComponent(4); - expect(ratePage.getRatingCounter()).toBe('0'); - expect(ratePage.isNotStarRated(4)); - expect(ratePage.getUnratedStarColor(4)).toBe(averageStarColor); - likePage.clickUnlike(); - expect(likePage.getLikeCounter()).toBe('0'); - likePage.removeHoverFromLikeButton(); - expect(likePage.getUnLikedIconColor()).toBe(greyLikeColor); + it('[C203006] Should be able to like and unlike their components but not rate them,', async () => { + await socialPage.writeCustomNodeId(emptyFile.entry.id); + await expect(await socialPage.getNodeIdFieldValue()).toEqual(emptyFile.entry.id); + await likePage.clickLike(); + await expect(await likePage.getLikeCounter()).toBe('1'); + await likePage.removeHoverFromLikeButton(); + await expect(await likePage.getLikedIconColor()).toBe(blueLikeColor); + await ratePage.rateComponent(4); + await expect(await ratePage.getRatingCounter()).toBe('0'); + await expect(await ratePage.isNotStarRated(4)); + await expect(await ratePage.getUnratedStarColor(4)).toBe(averageStarColor); + await likePage.clickUnlike(); + await expect(await likePage.getLikeCounter()).toBe('0'); + await likePage.removeHoverFromLikeButton(); + await expect(await likePage.getUnLikedIconColor()).toBe(greyLikeColor); }); }); @@ -123,32 +122,32 @@ describe('Social component', () => { await navigationBarPage.clickSocialButton(); }); - it('[C260324] Should be able to like and unlike a component', () => { - socialPage.writeCustomNodeId(emptyFile.entry.id); - expect(socialPage.getNodeIdFieldValue()).toEqual(emptyFile.entry.id); - expect(likePage.getLikeCounter()).toEqual('0'); - expect(likePage.getUnLikedIconColor()).toBe(greyLikeColor); - likePage.clickLike(); - expect(likePage.getLikeCounter()).toBe('1'); - likePage.removeHoverFromLikeButton(); - expect(likePage.getLikedIconColor()).toBe(blueLikeColor); - likePage.clickUnlike(); - expect(likePage.getLikeCounter()).toBe('0'); - likePage.removeHoverFromLikeButton(); - expect(likePage.getUnLikedIconColor()).toBe(greyLikeColor); + it('[C260324] Should be able to like and unlike a component', async () => { + await socialPage.writeCustomNodeId(emptyFile.entry.id); + await expect(await socialPage.getNodeIdFieldValue()).toEqual(emptyFile.entry.id); + await expect(await likePage.getLikeCounter()).toEqual('0'); + await expect(await likePage.getUnLikedIconColor()).toBe(greyLikeColor); + await likePage.clickLike(); + await expect(await likePage.getLikeCounter()).toBe('1'); + await likePage.removeHoverFromLikeButton(); + await expect(await likePage.getLikedIconColor()).toBe(blueLikeColor); + await likePage.clickUnlike(); + await expect(await likePage.getLikeCounter()).toBe('0'); + await likePage.removeHoverFromLikeButton(); + await expect(await likePage.getUnLikedIconColor()).toBe(greyLikeColor); }); - it('[C310198] Should be able to rate and unRate a component', () => { - socialPage.writeCustomNodeId(emptyFile.entry.id); - expect(socialPage.getNodeIdFieldValue()).toEqual(emptyFile.entry.id); - expect(ratePage.getRatingCounter()).toBe('0'); - ratePage.rateComponent(4); - expect(ratePage.getRatingCounter()).toBe('1'); - expect(ratePage.isStarRated(4)); - expect(ratePage.getRatedStarColor(4)).toBe(yellowRatedStarColor); - ratePage.removeRating(4); - expect(ratePage.getRatingCounter()).toBe('0'); - expect(ratePage.isNotStarRated(4)); + it('[C310198] Should be able to rate and unRate a component', async () => { + await socialPage.writeCustomNodeId(emptyFile.entry.id); + await expect(await socialPage.getNodeIdFieldValue()).toEqual(emptyFile.entry.id); + await expect(await ratePage.getRatingCounter()).toBe('0'); + await ratePage.rateComponent(4); + await expect(await ratePage.getRatingCounter()).toBe('1'); + await expect(await ratePage.isStarRated(4)); + await expect(await ratePage.getRatedStarColor(4)).toBe(yellowRatedStarColor); + await ratePage.removeRating(4); + await expect(await ratePage.getRatingCounter()).toBe('0'); + await expect(await ratePage.isNotStarRated(4)); }); }); @@ -161,48 +160,48 @@ describe('Social component', () => { }); it('[C310197] Should be able to like, unLike, display total likes', async () => { - socialPage.writeCustomNodeId(emptyFile.entry.id); - expect(socialPage.getNodeIdFieldValue()).toEqual(emptyFile.entry.id); - expect(likePage.getUnLikedIconColor()).toBe(greyLikeColor); - likePage.clickLike(); - expect(likePage.getLikeCounter()).toBe('1'); - likePage.removeHoverFromLikeButton(); - expect(likePage.getLikedIconColor()).toBe(blueLikeColor); + await socialPage.writeCustomNodeId(emptyFile.entry.id); + await expect(await socialPage.getNodeIdFieldValue()).toEqual(emptyFile.entry.id); + await expect(await likePage.getUnLikedIconColor()).toBe(greyLikeColor); + await likePage.clickLike(); + await expect(await likePage.getLikeCounter()).toBe('1'); + await likePage.removeHoverFromLikeButton(); + await expect(await likePage.getLikedIconColor()).toBe(blueLikeColor); await loginPage.loginToContentServicesUsingUserModel(secondComponentVisitor); - navigationBarPage.clickSocialButton(); - socialPage.writeCustomNodeId(emptyFile.entry.id); - expect(likePage.getUnLikedIconColor()).toBe(greyLikeColor); - likePage.clickLike(); - expect(likePage.getLikeCounter()).toEqual('2'); - likePage.removeHoverFromLikeButton(); - expect(likePage.getLikedIconColor()).toBe(blueLikeColor); - likePage.clickUnlike(); - expect(likePage.getLikeCounter()).toEqual('1'); - likePage.removeHoverFromLikeButton(); - expect(likePage.getUnLikedIconColor()).toBe(greyLikeColor); + await navigationBarPage.clickSocialButton(); + await socialPage.writeCustomNodeId(emptyFile.entry.id); + await expect(await likePage.getUnLikedIconColor()).toBe(greyLikeColor); + await likePage.clickLike(); + await expect(await likePage.getLikeCounter()).toEqual('2'); + await likePage.removeHoverFromLikeButton(); + await expect(await likePage.getLikedIconColor()).toBe(blueLikeColor); + await likePage.clickUnlike(); + await expect(await likePage.getLikeCounter()).toEqual('1'); + await likePage.removeHoverFromLikeButton(); + await expect(await likePage.getUnLikedIconColor()).toBe(greyLikeColor); }); it('[C260327] Should be able to rate, unRate, display total ratings, display average rating', async () => { - socialPage.writeCustomNodeId(emptyFile.entry.id); - expect(socialPage.getNodeIdFieldValue()).toEqual(emptyFile.entry.id); - ratePage.rateComponent(4); - expect(ratePage.getRatingCounter()).toEqual('1'); - expect(ratePage.isStarRated(4)); - expect(ratePage.getRatedStarColor(4)).toBe(yellowRatedStarColor); + await socialPage.writeCustomNodeId(emptyFile.entry.id); + await expect(await socialPage.getNodeIdFieldValue()).toEqual(emptyFile.entry.id); + await ratePage.rateComponent(4); + await expect(await ratePage.getRatingCounter()).toEqual('1'); + await expect(await ratePage.isStarRated(4)); + await expect(await ratePage.getRatedStarColor(4)).toBe(yellowRatedStarColor); await loginPage.loginToContentServicesUsingUserModel(secondComponentVisitor); - navigationBarPage.clickSocialButton(); - socialPage.writeCustomNodeId(emptyFile.entry.id); - expect(socialPage.getNodeIdFieldValue()).toEqual(emptyFile.entry.id); - expect(ratePage.getRatingCounter()).toEqual('1'); - expect(ratePage.getAverageStarColor(4)).toBe(averageStarColor); - ratePage.rateComponent(0); - expect(ratePage.getRatingCounter()).toEqual('2'); - expect(ratePage.isStarRated(2)); - ratePage.removeRating(0); - expect(ratePage.getRatingCounter()).toEqual('1'); - expect(ratePage.getAverageStarColor(4)).toBe(averageStarColor); + await navigationBarPage.clickSocialButton(); + await socialPage.writeCustomNodeId(emptyFile.entry.id); + await expect(await socialPage.getNodeIdFieldValue()).toEqual(emptyFile.entry.id); + await expect(await ratePage.getRatingCounter()).toEqual('1'); + await expect(await ratePage.getAverageStarColor(4)).toBe(averageStarColor); + await ratePage.rateComponent(0); + await expect(await ratePage.getRatingCounter()).toEqual('2'); + await expect(await ratePage.isStarRated(2)); + await ratePage.removeRating(0); + await expect(await ratePage.getRatingCounter()).toEqual('1'); + await expect(await ratePage.getAverageStarColor(4)).toBe(averageStarColor); }); }); }); diff --git a/e2e/content-services/sso/sso-download-directive-component.e2e.ts b/e2e/content-services/sso/sso-download-directive-component.e2e.ts index 8c5322d139..a2e2082700 100644 --- a/e2e/content-services/sso/sso-download-directive-component.e2e.ts +++ b/e2e/content-services/sso/sso-download-directive-component.e2e.ts @@ -18,13 +18,20 @@ import { ContentServicesPage } from '../../pages/adf/contentServicesPage'; import { browser } from 'protractor'; import { NavigationBarPage } from '../../pages/adf/navigationBarPage'; -import { ApiService, LoginSSOPage, UploadActions, IdentityService, SettingsPage, StringUtil, UserModel } from '@alfresco/adf-testing'; +import { + ApiService, + LoginSSOPage, + UploadActions, + IdentityService, + SettingsPage, + StringUtil, + UserModel, + FileBrowserUtil +} from '@alfresco/adf-testing'; import { FileModel } from '../../models/ACS/fileModel'; import { ViewerPage } from '../../pages/adf/viewerPage'; import resources = require('../../util/resources'); import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; -import * as path from 'path'; -import { Util } from '../../util/util'; describe('SSO in ADF using ACS and AIS, Download Directive, Viewer, DocumentList, implicitFlow true', () => { @@ -65,15 +72,13 @@ describe('SSO in ADF using ACS and AIS, Download Directive, Viewer, DocumentList } }); const uploadActions = new UploadActions(this.alfrescoJsApi); - const downloadedPngFile = path.join(__dirname, 'downloads', pngFileModel.name); - const downloadedMultipleFiles = path.join(__dirname, 'downloads', 'archive.zip'); const folderName = StringUtil.generateRandomString(5); const acsUser = new UserModel(); let identityService: IdentityService; describe('SSO in ADF using ACS and AIS, implicit flow set', () => { - beforeAll(async (done) => { + beforeAll(async () => { const apiService = new ApiService(browser.params.config.oauth2.clientId, browser.params.testConfig.adf_acs.host, browser.params.testConfig.adf.hostSso, 'ECM'); await apiService.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); @@ -100,12 +105,11 @@ describe('SSO in ADF using ACS and AIS, Download Directive, Viewer, DocumentList await navigationBarPage.clickContentServicesButton(); await contentServicesPage.checkAcsContainer(); - contentListPage.doubleClickRow(folderName); + await contentListPage.doubleClickRow(folderName); await contentListPage.waitForTableBody(); - done(); }); - afterAll(async (done) => { + afterAll(async () => { try { await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); await uploadActions.deleteFileOrFolder(folder.entry.id); @@ -113,62 +117,55 @@ describe('SSO in ADF using ACS and AIS, Download Directive, Viewer, DocumentList } catch (error) { } await this.alfrescoJsApi.logout(); - browser.executeScript('window.sessionStorage.clear();'); - browser.executeScript('window.localStorage.clear();'); - done(); + await browser.executeScript('window.sessionStorage.clear();'); + await browser.executeScript('window.localStorage.clear();'); }); - afterEach(async (done) => { - browser.refresh(); - contentListPage.waitForTableBody(); - done(); + afterEach(async () => { + await browser.refresh(); + await contentListPage.waitForTableBody(); }); - it('[C291936] Should be able to download a file', async (done) => { - contentListPage.selectRow(pngFileModel.name); - contentServicesPage.clickDownloadButton(); - expect(Util.fileExists(downloadedPngFile, 30)).toBe(true); - done(); + it('[C291936] Should be able to download a file', async () => { + await contentListPage.selectRow(pngFileModel.name); + await contentServicesPage.clickDownloadButton(); + await expect(await FileBrowserUtil.isFileDownloaded(pngFileModel.name)).toBe(true, `${pngFileModel.name} not downloaded`); }); - it('[C291938] Should be able to open a document', async (done) => { - contentServicesPage.doubleClickRow(firstPdfFileModel.name); - viewerPage.checkFileIsLoaded(); - viewerPage.checkFileNameIsDisplayed(firstPdfFileModel.name); - viewerPage.clickCloseButton(); - contentListPage.waitForTableBody(); - done(); + it('[C291938] Should be able to open a document', async () => { + await contentServicesPage.doubleClickRow(firstPdfFileModel.name); + await viewerPage.checkFileIsLoaded(); + await viewerPage.checkFileNameIsDisplayed(firstPdfFileModel.name); + await viewerPage.clickCloseButton(); + await contentListPage.waitForTableBody(); }); - it('[C291942] Should be able to open an image', async (done) => { - viewerPage.viewFile(pngFileModel.name); - viewerPage.checkImgViewerIsDisplayed(); - viewerPage.checkFileNameIsDisplayed(pngFileModel.name); - viewerPage.clickCloseButton(); - contentListPage.waitForTableBody(); - done(); + it('[C291942] Should be able to open an image', async () => { + await viewerPage.viewFile(pngFileModel.name); + await viewerPage.checkImgViewerIsDisplayed(); + await viewerPage.checkFileNameIsDisplayed(pngFileModel.name); + await viewerPage.clickCloseButton(); + await contentListPage.waitForTableBody(); }); - it('[C291941] Should be able to download multiple files', async (done) => { - contentServicesPage.clickMultiSelectToggle(); - contentServicesPage.checkAcsContainer(); - contentListPage.dataTablePage().checkAllRows(); - contentListPage.dataTablePage().checkRowIsChecked('Display name', pngFileModel.name); - contentListPage.dataTablePage().checkRowIsChecked('Display name', firstPdfFileModel.name); - contentServicesPage.clickDownloadButton(); - expect(Util.fileExists(downloadedMultipleFiles, 30)).toBe(true); - done(); + it('[C291941] Should be able to download multiple files', async () => { + await contentServicesPage.clickMultiSelectToggle(); + await contentServicesPage.checkAcsContainer(); + await contentListPage.dataTablePage().checkAllRows(); + await contentListPage.dataTablePage().checkRowIsChecked('Display name', pngFileModel.name); + await contentListPage.dataTablePage().checkRowIsChecked('Display name', firstPdfFileModel.name); + await contentServicesPage.clickDownloadButton(); + await expect(await FileBrowserUtil.isFileDownloaded('archive.zip')).toBe(true, `archive.zip not downloaded`); }); - it('[C291940] Should be able to view thumbnails when enabled', async (done) => { - contentServicesPage.enableThumbnails(); - contentServicesPage.checkAcsContainer(); - contentListPage.waitForTableBody(); + it('[C291940] Should be able to view thumbnails when enabled', async () => { + await contentServicesPage.enableThumbnails(); + await contentServicesPage.checkAcsContainer(); + await contentListPage.waitForTableBody(); const filePdfIconUrl = await contentServicesPage.getRowIconImageUrl(firstPdfFileModel.name); - expect(filePdfIconUrl).toContain(`/versions/1/nodes/${pdfUploadedFile.entry.id}/renditions`); + await expect(filePdfIconUrl).toContain(`/versions/1/nodes/${pdfUploadedFile.entry.id}/renditions`); const filePngIconUrl = await contentServicesPage.getRowIconImageUrl(pngFileModel.name); - expect(filePngIconUrl).toContain(`/versions/1/nodes/${pngUploadedFile.entry.id}/renditions`); - done(); + await expect(filePngIconUrl).toContain(`/versions/1/nodes/${pngUploadedFile.entry.id}/renditions`); }); }); }); diff --git a/e2e/content-services/tag-component.e2e.ts b/e2e/content-services/tag-component.e2e.ts index 26845fefeb..caa3436393 100644 --- a/e2e/content-services/tag-component.e2e.ts +++ b/e2e/content-services/tag-component.e2e.ts @@ -36,8 +36,8 @@ describe('Tag component', () => { hostEcm: browser.params.testConfig.adf_acs.host }); const uploadActions = new UploadActions(this.alfrescoJsApi); - const pdfFileModel = new FileModel({ 'name': resources.Files.ADF_DOCUMENTS.PDF.file_name }); - const deleteFile = new FileModel({ 'name': StringUtil.generateRandomString() }); + const pdfFileModel = new FileModel({ name: resources.Files.ADF_DOCUMENTS.PDF.file_name }); + const deleteFile = new FileModel({ name: StringUtil.generateRandomString() }); const sameTag = StringUtil.generateRandomString().toLowerCase(); const tagList = [ @@ -56,7 +56,7 @@ describe('Tag component', () => { const nonLatinTag = StringUtil.generateRandomStringNonLatin(); let pdfUploadedFile, nodeId; - beforeAll(async (done) => { + beforeAll(async () => { await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); @@ -77,122 +77,121 @@ describe('Tag component', () => { await this.alfrescoJsApi.core.tagsApi.addTag(nodeId, tags); await loginPage.loginToContentServicesUsingUserModel(acsUser); - - done(); }); - afterAll(async (done) => { + afterAll(async () => { await navigationBarPage.clickLogoutButton(); await uploadActions.deleteFileOrFolder(pdfUploadedFile.entry.id); - done(); }); - it('[C260374] Should NOT be possible to add a new tag without Node ID', () => { - navigationBarPage.clickTagButton(); + it('[C260374] Should NOT be possible to add a new tag without Node ID', async () => { + await navigationBarPage.clickTagButton(); - expect(tagPage.getNodeId()).toEqual(''); - expect(tagPage.getNewTagPlaceholder()).toEqual('New Tag'); - expect(tagPage.addTagButtonIsEnabled()).toEqual(false); - tagPage.checkTagListIsEmpty(); - tagPage.checkTagListByNodeIdIsEmpty(); - expect(tagPage.addNewTagInput('a').addTagButtonIsEnabled()).toEqual(false); - expect(tagPage.getNewTagInput()).toEqual('a'); + await expect(await tagPage.getNodeId()).toEqual(''); + await expect(await tagPage.getNewTagPlaceholder()).toEqual('New Tag'); + await expect(await tagPage.addTagButtonIsEnabled()).toEqual(false); + await tagPage.checkTagListIsEmpty(); + await tagPage.checkTagListByNodeIdIsEmpty(); + await tagPage.addNewTagInput('a'); + + await expect(await tagPage.addTagButtonIsEnabled()).toEqual(false); + await expect(await tagPage.getNewTagInput()).toEqual('a'); }); - it('[C268151] Should be possible to add a new tag to a Node', () => { - tagPage.insertNodeId(pdfFileModel.id); - tagPage.addTag(tagList[0]); + it('[C268151] Should be possible to add a new tag to a Node', async () => { + await tagPage.insertNodeId(pdfFileModel.id); + await tagPage.addTag(tagList[0]); - tagPage.checkTagIsDisplayedInTagList(tagList[0]); - tagPage.checkTagIsDisplayedInTagListByNodeId(tagList[0]); + await tagPage.checkTagIsDisplayedInTagList(tagList[0]); + await tagPage.checkTagIsDisplayedInTagListByNodeId(tagList[0]); }); - it('[C260377] Should NOT be possible to add a tag that already exists', () => { - tagPage.insertNodeId(pdfFileModel.id); - tagPage.addTag(sameTag); - tagPage.checkTagIsDisplayedInTagList(sameTag); - tagPage.addTag(sameTag); - expect(tagPage.getErrorMessage()).toEqual('Tag already exists'); + it('[C260377] Should NOT be possible to add a tag that already exists', async () => { + await tagPage.insertNodeId(pdfFileModel.id); + await tagPage.addTag(sameTag); + await tagPage.checkTagIsDisplayedInTagList(sameTag); + await tagPage.addTag(sameTag); + await expect(await tagPage.getErrorMessage()).toEqual('Tag already exists'); }); - it('[C91326] Should be possible to create a tag with different characters', () => { - tagPage.insertNodeId(pdfFileModel.id); + it('[C91326] Should be possible to create a tag with different characters', async () => { + await tagPage.insertNodeId(pdfFileModel.id); - tagPage.addTag(uppercaseTag + digitsTag + nonLatinTag); + await tagPage.addTag(uppercaseTag + digitsTag + nonLatinTag); - browser.driver.sleep(5000); // wait CS return tags + await browser.sleep(5000); // wait CS return tags - tagPage.checkTagIsDisplayedInTagList(uppercaseTag.toLowerCase() + digitsTag + nonLatinTag); - tagPage.checkTagIsDisplayedInTagListByNodeId(uppercaseTag.toLowerCase() + digitsTag + nonLatinTag); + await tagPage.checkTagIsDisplayedInTagList(uppercaseTag.toLowerCase() + digitsTag + nonLatinTag); + await tagPage.checkTagIsDisplayedInTagListByNodeId(uppercaseTag.toLowerCase() + digitsTag + nonLatinTag); - tagPage.checkTagIsNotDisplayedInTagList(uppercaseTag + digitsTag + nonLatinTag); + await tagPage.checkTagIsNotDisplayedInTagList(uppercaseTag + digitsTag + nonLatinTag); }); - it('[C260375] Should be possible to delete a tag', () => { + it('[C260375] Should be possible to delete a tag', async () => { const deleteTag = StringUtil.generateRandomString().toUpperCase(); - tagPage.insertNodeId(deleteFile.id); + await tagPage.insertNodeId(deleteFile.id); - tagPage.addTag(deleteTag); + await tagPage.addTag(deleteTag); - tagPage.checkTagIsDisplayedInTagList(deleteTag.toLowerCase()); - tagPage.checkTagIsDisplayedInTagListByNodeId(deleteTag.toLowerCase()); + await tagPage.checkTagIsDisplayedInTagList(deleteTag.toLowerCase()); + await tagPage.checkTagIsDisplayedInTagListByNodeId(deleteTag.toLowerCase()); - tagPage.deleteTagFromTagListByNodeId(deleteTag.toLowerCase()); + await tagPage.deleteTagFromTagListByNodeId(deleteTag.toLowerCase()); - tagPage.checkTagIsNotDisplayedInTagList(deleteTag.toLowerCase()); - tagPage.checkTagIsNotDisplayedInTagListByNodeId(deleteTag.toLowerCase()); + await tagPage.checkTagIsNotDisplayedInTagList(deleteTag.toLowerCase()); + await tagPage.checkTagIsNotDisplayedInTagListByNodeId(deleteTag.toLowerCase()); - tagPage.insertNodeId(deleteFile.id); + await tagPage.insertNodeId(deleteFile.id); - tagPage.addTag(deleteTag); + await tagPage.addTag(deleteTag); - tagPage.checkTagIsDisplayedInTagList(deleteTag.toLowerCase()); - tagPage.checkTagIsDisplayedInTagListByNodeId(deleteTag.toLowerCase()); + await tagPage.checkTagIsDisplayedInTagList(deleteTag.toLowerCase()); + await tagPage.checkTagIsDisplayedInTagListByNodeId(deleteTag.toLowerCase()); - tagPage.deleteTagFromTagList(deleteTag.toLowerCase()); + await tagPage.deleteTagFromTagList(deleteTag.toLowerCase()); - tagPage.checkTagIsNotDisplayedInTagList(deleteTag.toLowerCase()); - tagPage.checkTagIsNotDisplayedInTagListByNodeId(deleteTag.toLowerCase()); + await tagPage.checkTagIsNotDisplayedInTagList(deleteTag.toLowerCase()); + await tagPage.checkTagIsNotDisplayedInTagListByNodeId(deleteTag.toLowerCase()); }); - it('[C286290] Should be able to hide the delete option from a tag component', () => { - tagPage.insertNodeId(pdfFileModel.id); - tagPage.addTag(tagList[3]); + it('[C286290] Should be able to hide the delete option from a tag component', async () => { + await tagPage.insertNodeId(pdfFileModel.id); + await tagPage.addTag(tagList[3]); - tagPage.checkTagIsDisplayedInTagListByNodeId(tagList[3]); - tagPage.checkDeleteTagFromTagListByNodeIdIsDisplayed(tagList[3]); + await tagPage.checkTagIsDisplayedInTagListByNodeId(tagList[3]); + await tagPage.checkDeleteTagFromTagListByNodeIdIsDisplayed(tagList[3]); - tagPage.clickShowDeleteButtonSwitch(); + await tagPage.clickShowDeleteButtonSwitch(); - tagPage.checkDeleteTagFromTagListByNodeIdIsNotDisplayed(tagList[3]); + await tagPage.checkDeleteTagFromTagListByNodeIdIsNotDisplayed(tagList[3]); }); - it('[C286472] Should be able to click Show more/less button on List Tags Content Services', () => { - tagPage.insertNodeId(pdfFileModel.id); + it('[C286472] Should be able to click Show more/less button on List Tags Content Services', async () => { + await tagPage.insertNodeId(pdfFileModel.id); - tagPage.checkShowMoreButtonIsDisplayed(); - tagPage.checkShowLessButtonIsNotDisplayed(); + await tagPage.checkShowMoreButtonIsDisplayed(); + await tagPage.checkShowLessButtonIsNotDisplayed(); - expect(tagPage.checkTagsOnList()).toEqual(10); + await expect(await tagPage.checkTagsOnList()).toEqual(10); - tagPage.clickShowMoreButton(); - tagPage.checkShowLessButtonIsDisplayed(); + await tagPage.clickShowMoreButton(); + await tagPage.checkShowLessButtonIsDisplayed(); - tagPage.clickShowLessButton(); - tagPage.checkShowLessButtonIsNotDisplayed(); + await tagPage.clickShowLessButton(); + await tagPage.checkShowLessButtonIsNotDisplayed(); }); - it('[C260378] Should be possible to add multiple tags', () => { - tagPage.insertNodeId(pdfFileModel.id); - tagPage.addTag(tagList[2]); + it('[C260378] Should be possible to add multiple tags', async () => { + await tagPage.insertNodeId(pdfFileModel.id); + await tagPage.addTag(tagList[2]); - browser.driver.sleep(5000); // wait CS return tags + await browser.sleep(5000); // wait CS return tags - tagPage.checkTagListIsOrderedAscending(); - tagPage.checkTagListByNodeIdIsOrderedAscending(); - tagPage.checkTagListContentServicesIsOrderedAscending(); + await tagPage.checkTagListIsOrderedAscending(); + await tagPage.checkTagListByNodeIdIsOrderedAscending(); + await tagPage.checkTagListContentServicesIsOrderedAscending(); }); }); diff --git a/e2e/content-services/trashcan-pagination.e2e.ts b/e2e/content-services/trashcan-pagination.e2e.ts index 762377e2be..d368f46d5d 100644 --- a/e2e/content-services/trashcan-pagination.e2e.ts +++ b/e2e/content-services/trashcan-pagination.e2e.ts @@ -54,97 +54,84 @@ describe('Trashcan - Pagination', () => { const navigationBarPage = new NavigationBarPage(); const acsUser = new AcsUserModel(); - const newFolderModel = new FolderModel({ 'name': 'newFolder' }); - const nrOfFiles = 20; + const newFolderModel = new FolderModel({ name: 'newFolder' }); + const noOfFiles = 20; - beforeAll(async (done) => { + beforeAll(async () => { this.alfrescoJsApi = new AlfrescoApi({ provider: 'ECM', hostEcm: browser.params.testConfig.adf_acs.host }); const uploadActions = new UploadActions(this.alfrescoJsApi); - - const fileNames = Util.generateSequenceFiles(10, nrOfFiles + 9, pagination.base, pagination.extension); - + const fileNames = Util.generateSequenceFiles(10, noOfFiles + 9, pagination.base, pagination.extension); await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); - await this.alfrescoJsApi.core.peopleApi.addPerson(acsUser); - await this.alfrescoJsApi.login(acsUser.id, acsUser.password); - const folderUploadedModel = await uploadActions.createFolder(newFolderModel.name, '-my-'); - - const emptyFiles = await uploadActions.createEmptyFiles(fileNames, folderUploadedModel.entry.id); - await emptyFiles.list.entries.forEach(async (node) => { - await this.alfrescoJsApi.node.deleteNode(node.entry.id).then(() => { - }, () => { - this.alfrescoJsApi.node.deleteNode(node.entry.id); + const emptyFiles: any = await uploadActions.createEmptyFiles(fileNames, folderUploadedModel.entry.id); + for (const entry of emptyFiles.list.entries) { + await this.alfrescoJsApi.node.deleteNode(entry.entry.id).then(() => {}, () => { + this.alfrescoJsApi.node.deleteNode(entry.entry.id); }); - }); - + } await loginPage.loginToContentServicesUsingUserModel(acsUser); - navigationBarPage.clickTrashcanButton(); - trashcanPage.waitForTableBody(); - - done(); + await navigationBarPage.clickTrashcanButton(); + await trashcanPage.waitForTableBody(); }); - afterAll(async (done) => { + afterAll(async () => { await navigationBarPage.clickLogoutButton(); - done(); + }); - afterEach((done) => { - browser.refresh(); - trashcanPage.waitForTableBody(); - done(); + afterEach(async () => { + await browser.refresh(); + await trashcanPage.waitForTableBody(); + }); - it('[C272811] Should be able to set Items per page to 20', () => { - paginationPage.selectItemsPerPage(itemsPerPage.twenty); - - trashcanPage.waitForTableBody(); - trashcanPage.waitForPagination(); - - expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.twenty); - expect(paginationPage.getPaginationRange()).toEqual('Showing 1-' + nrOfFiles + ' of ' + nrOfFiles); - expect(trashcanPage.numberOfResultsDisplayed()).toBe(nrOfFiles); - - paginationPage.checkNextPageButtonIsDisabled(); - paginationPage.checkPreviousPageButtonIsDisabled(); + it('[C272811] Should be able to set Items per page to 20', async () => { + await paginationPage.selectItemsPerPage(itemsPerPage.twenty); + await trashcanPage.waitForTableBody(); + await trashcanPage.waitForPagination(); + await expect(await paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.twenty); + await expect(await paginationPage.getPaginationRange()).toEqual('Showing 1-' + noOfFiles + ' of ' + noOfFiles); + await expect(await trashcanPage.numberOfResultsDisplayed()).toBe(noOfFiles); + await paginationPage.checkNextPageButtonIsDisabled(); + await paginationPage.checkPreviousPageButtonIsDisabled(); }); - it('[C276742] Should be able to set Items per page to 15', () => { - paginationPage.selectItemsPerPage(itemsPerPage.fifteen); - trashcanPage.waitForTableBody(); - trashcanPage.waitForPagination(); - expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.fifteen); - expect(paginationPage.getPaginationRange()).toEqual('Showing 1-' + itemsPerPage.fifteenValue + ' of ' + nrOfFiles); - expect(trashcanPage.numberOfResultsDisplayed()).toBe(itemsPerPage.fifteenValue); - paginationPage.checkNextPageButtonIsEnabled(); - paginationPage.checkPreviousPageButtonIsDisabled(); + it('[C276742] Should be able to set Items per page to 15', async () => { + await paginationPage.selectItemsPerPage(itemsPerPage.fifteen); + await trashcanPage.waitForTableBody(); + await trashcanPage.waitForPagination(); + await expect(await paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.fifteen); + await expect(await paginationPage.getPaginationRange()).toEqual('Showing 1-' + itemsPerPage.fifteenValue + ' of ' + noOfFiles); + await expect(await trashcanPage.numberOfResultsDisplayed()).toBe(itemsPerPage.fifteenValue); + await paginationPage.checkNextPageButtonIsEnabled(); + await paginationPage.checkPreviousPageButtonIsDisabled(); }); - it('[C276743] Should be able to set Items per page to 10', () => { - paginationPage.selectItemsPerPage(itemsPerPage.ten); - trashcanPage.waitForTableBody(); - trashcanPage.waitForPagination(); - expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.ten); - expect(paginationPage.getPaginationRange()).toEqual('Showing 1-' + itemsPerPage.tenValue + ' of ' + nrOfFiles); - expect(trashcanPage.numberOfResultsDisplayed()).toBe(itemsPerPage.tenValue); - paginationPage.checkNextPageButtonIsEnabled(); - paginationPage.checkPreviousPageButtonIsDisabled(); + it('[C276743] Should be able to set Items per page to 10', async () => { + await paginationPage.selectItemsPerPage(itemsPerPage.ten); + await trashcanPage.waitForTableBody(); + await trashcanPage.waitForPagination(); + await expect(await paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.ten); + await expect(await paginationPage.getPaginationRange()).toEqual('Showing 1-' + itemsPerPage.tenValue + ' of ' + noOfFiles); + await expect(await trashcanPage.numberOfResultsDisplayed()).toBe(itemsPerPage.tenValue); + await paginationPage.checkNextPageButtonIsEnabled(); + await paginationPage.checkPreviousPageButtonIsDisabled(); }); - it('[C276744] Should be able to set Items per page to 5', () => { - paginationPage.selectItemsPerPage(itemsPerPage.five); - trashcanPage.waitForTableBody(); - trashcanPage.waitForPagination(); - expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.five); - expect(paginationPage.getPaginationRange()).toEqual('Showing 1-' + itemsPerPage.fiveValue + ' of ' + nrOfFiles); - expect(trashcanPage.numberOfResultsDisplayed()).toBe(itemsPerPage.fiveValue); - paginationPage.checkNextPageButtonIsEnabled(); - paginationPage.checkPreviousPageButtonIsDisabled(); + it('[C276744] Should be able to set Items per page to 5', async () => { + await paginationPage.selectItemsPerPage(itemsPerPage.five); + await trashcanPage.waitForTableBody(); + await trashcanPage.waitForPagination(); + await expect(await paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.five); + await expect(await paginationPage.getPaginationRange()).toEqual('Showing 1-' + itemsPerPage.fiveValue + ' of ' + noOfFiles); + await expect(await trashcanPage.numberOfResultsDisplayed()).toBe(itemsPerPage.fiveValue); + await paginationPage.checkNextPageButtonIsEnabled(); + await paginationPage.checkPreviousPageButtonIsDisabled(); }); }) ; diff --git a/e2e/content-services/tree-view-component.e2e.ts b/e2e/content-services/tree-view-component.e2e.ts index 7c26f87e7f..7b91d2f7b9 100644 --- a/e2e/content-services/tree-view-component.e2e.ts +++ b/e2e/content-services/tree-view-component.e2e.ts @@ -45,7 +45,7 @@ describe('Tree View Component', () => { document: 'MyFile' }; - beforeAll(async (done) => { + beforeAll(async () => { await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); await this.alfrescoJsApi.core.peopleApi.addPerson(acsUser); @@ -69,78 +69,75 @@ describe('Tree View Component', () => { nodeType: 'cm:content' }); - loginPage.loginToContentServicesUsingUserModel(acsUser); + await loginPage.loginToContentServicesUsingUserModel(acsUser); - navigationBarPage.clickTreeViewButton(); - - done(); + await navigationBarPage.clickTreeViewButton(); }); - afterAll(async (done) => { + afterAll(async () => { await navigationBarPage.clickLogoutButton(); await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); await uploadActions.deleteFileOrFolder(treeFolder.entry.id); await uploadActions.deleteFileOrFolder(secondTreeFolder.entry.id); - done(); }); - it('[C289972] Should be able to show folders and sub-folders of a node as a tree view', () => { - treeViewPage.checkTreeViewTitleIsDisplayed(); + it('[C289972] Should be able to show folders and sub-folders of a node as a tree view', async () => { + await treeViewPage.checkTreeViewTitleIsDisplayed(); - expect(treeViewPage.getNodeId()).toEqual(nodeNames.parentFolder); + await expect(await treeViewPage.getNodeId()).toEqual(nodeNames.parentFolder); - treeViewPage.checkNodeIsDisplayedAsClosed(nodeNames.folder); - treeViewPage.checkNodeIsDisplayedAsClosed(nodeNames.secondFolder); + await treeViewPage.checkNodeIsDisplayedAsClosed(nodeNames.folder); + await treeViewPage.checkNodeIsDisplayedAsClosed(nodeNames.secondFolder); - treeViewPage.clickNode(nodeNames.secondFolder); + await treeViewPage.clickNode(nodeNames.secondFolder); - treeViewPage.checkClickedNodeName(nodeNames.secondFolder); - treeViewPage.checkNodeIsDisplayedAsOpen(nodeNames.secondFolder); - treeViewPage.checkNodeIsDisplayedAsClosed(nodeNames.thirdFolder); + await treeViewPage.checkClickedNodeName(nodeNames.secondFolder); + await treeViewPage.checkNodeIsDisplayedAsOpen(nodeNames.secondFolder); + await treeViewPage.checkNodeIsDisplayedAsClosed(nodeNames.thirdFolder); - treeViewPage.clickNode(nodeNames.thirdFolder); + await treeViewPage.clickNode(nodeNames.thirdFolder); - treeViewPage.checkClickedNodeName(nodeNames.thirdFolder); - treeViewPage.checkNodeIsDisplayedAsOpen(nodeNames.thirdFolder); + await treeViewPage.checkClickedNodeName(nodeNames.thirdFolder); + await treeViewPage.checkNodeIsDisplayedAsOpen(nodeNames.thirdFolder); - treeViewPage.clickNode(nodeNames.secondFolder); + await treeViewPage.clickNode(nodeNames.secondFolder); - treeViewPage.checkClickedNodeName(nodeNames.secondFolder); - treeViewPage.checkNodeIsDisplayedAsClosed(nodeNames.secondFolder); - treeViewPage.checkNodeIsNotDisplayed(nodeNames.thirdFolder); + await treeViewPage.checkClickedNodeName(nodeNames.secondFolder); + await treeViewPage.checkNodeIsDisplayedAsClosed(nodeNames.secondFolder); + await treeViewPage.checkNodeIsNotDisplayed(nodeNames.thirdFolder); }); - it('[C289973] Should be able to change the default nodeId', () => { - treeViewPage.clearNodeIdInput(); + it('[C289973] Should be able to change the default nodeId', async () => { + await treeViewPage.clearNodeIdInput(); - treeViewPage.checkNoNodeIdMessageIsDisplayed(); - treeViewPage.addNodeId(secondTreeFolder.entry.id); + await treeViewPage.checkNoNodeIdMessageIsDisplayed(); + await treeViewPage.addNodeId(secondTreeFolder.entry.id); - treeViewPage.checkNodeIsDisplayedAsClosed(nodeNames.thirdFolder); + await treeViewPage.checkNodeIsDisplayedAsClosed(nodeNames.thirdFolder); - treeViewPage.addNodeId('ThisIdDoesNotExist'); - treeViewPage.checkErrorMessageIsDisplayed(); + await treeViewPage.addNodeId('ThisIdDoesNotExist'); + await treeViewPage.checkErrorMessageIsDisplayed(); - treeViewPage.addNodeId(nodeNames.parentFolder); + await treeViewPage.addNodeId(nodeNames.parentFolder); - treeViewPage.checkNodeIsDisplayedAsClosed(nodeNames.folder); - treeViewPage.checkNodeIsDisplayedAsClosed(nodeNames.secondFolder); + await treeViewPage.checkNodeIsDisplayedAsClosed(nodeNames.folder); + await treeViewPage.checkNodeIsDisplayedAsClosed(nodeNames.secondFolder); - treeViewPage.clickNode(nodeNames.secondFolder); + await treeViewPage.clickNode(nodeNames.secondFolder); - treeViewPage.checkNodeIsDisplayedAsClosed(nodeNames.thirdFolder); + await treeViewPage.checkNodeIsDisplayedAsClosed(nodeNames.thirdFolder); }); - it('[C290071] Should not be able to display files', () => { - treeViewPage.addNodeId(secondTreeFolder.entry.id); + it('[C290071] Should not be able to display files', async () => { + await treeViewPage.addNodeId(secondTreeFolder.entry.id); - treeViewPage.checkNodeIsDisplayedAsClosed(nodeNames.thirdFolder); + await treeViewPage.checkNodeIsDisplayedAsClosed(nodeNames.thirdFolder); - treeViewPage.clickNode(nodeNames.thirdFolder); + await treeViewPage.clickNode(nodeNames.thirdFolder); - expect(treeViewPage.getTotalNodes()).toEqual(1); + await expect(await treeViewPage.getTotalNodes()).toEqual(1); }); }); diff --git a/e2e/content-services/upload/cancel-upload.e2e.ts b/e2e/content-services/upload/cancel-upload.e2e.ts index 87a892d938..ad0494e7e3 100644 --- a/e2e/content-services/upload/cancel-upload.e2e.ts +++ b/e2e/content-services/upload/cancel-upload.e2e.ts @@ -26,12 +26,12 @@ import resources = require('../../util/resources'); import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; import { NavigationBarPage } from '../../pages/adf/navigationBarPage'; -describe('Upload component', () => { +describe('Upload component', async () => { this.alfrescoJsApi = new AlfrescoApi({ - provider: 'ECM', - hostEcm: browser.params.testConfig.adf_acs.host - }); + provider: 'ECM', + hostEcm: browser.params.testConfig.adf_acs.host + }); const contentServicesPage = new ContentServicesPage(); const uploadDialog = new UploadDialog(); const uploadToggles = new UploadToggles(); @@ -53,7 +53,7 @@ describe('Upload component', () => { 'location': resources.Files.ADF_DOCUMENTS.LARGE_FILE.file_location }); - beforeAll(async (done) => { + beforeAll(async () => { await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); await this.alfrescoJsApi.core.peopleApi.addPerson(acsUser); @@ -62,55 +62,57 @@ describe('Upload component', () => { await loginPage.loginToContentServicesUsingUserModel(acsUser); - contentServicesPage.goToDocumentList(); + await contentServicesPage.goToDocumentList(); const pdfUploadedFile = await uploadActions.uploadFile(firstPdfFileModel.location, firstPdfFileModel.name, '-my-'); Object.assign(firstPdfFileModel, pdfUploadedFile.entry); - done(); }); - afterAll(async (done) => { + afterAll(async () => { await navigationBarPage.clickLogoutButton(); - done(); }); - beforeEach(() => { - contentServicesPage.goToDocumentList(); + beforeEach(async () => { + await contentServicesPage.goToDocumentList(); }); - it('[C272792] Should be possible to cancel upload of a big file using row cancel icon', () => { - browser.executeScript(' setTimeout(() => {document.querySelector(\'mat-icon[class*="adf-file-uploading-row__action"]\').click();}, 3000)'); + it('[C272792] Should be possible to cancel upload of a big file using row cancel icon', async () => { + await browser.executeScript(' setTimeout(() => {document.querySelector(\'mat-icon[class*="adf-file-uploading-row__action"]\').click();}, 3000)'); - contentServicesPage.uploadFile(largeFile.location); + await contentServicesPage.uploadFile(largeFile.location); - expect(uploadDialog.getTitleText()).toEqual('Upload canceled'); - uploadDialog.clickOnCloseButton().dialogIsNotDisplayed(); - contentServicesPage.checkContentIsNotDisplayed(largeFile.name); + await expect(await uploadDialog.getTitleText()).toEqual('Upload canceled'); + await uploadDialog.clickOnCloseButton(); + await uploadDialog.dialogIsNotDisplayed(); + await contentServicesPage.checkContentIsNotDisplayed(largeFile.name); }); - it('[C287790] Should be possible to cancel upload of a big file through the cancel uploads button', () => { - browser.executeScript(' setInterval(() => {document.querySelector("#adf-upload-dialog-cancel-all").click();' + + it('[C287790] Should be possible to cancel upload of a big file through the cancel uploads button', async () => { + await browser.executeScript(' setInterval(() => {document.querySelector("#adf-upload-dialog-cancel-all").click();' + 'document.querySelector("#adf-upload-dialog-cancel").click(); }, 500)'); - contentServicesPage.uploadFile(largeFile.location); + await contentServicesPage.uploadFile(largeFile.location); - expect(uploadDialog.getTitleText()).toEqual('Upload canceled'); - uploadDialog.clickOnCloseButton().dialogIsNotDisplayed(); - contentServicesPage.checkContentIsNotDisplayed(largeFile.name); + await expect(await uploadDialog.getTitleText()).toEqual('Upload canceled'); + await uploadDialog.clickOnCloseButton(); + await uploadDialog.dialogIsNotDisplayed(); + await contentServicesPage.checkContentIsNotDisplayed(largeFile.name); }); - it('[C272793] Should be able to cancel multiple files upload', () => { - browser.executeScript(' setInterval(() => {document.querySelector("#adf-upload-dialog-cancel-all").click();' + + it('[C272793] Should be able to cancel multiple files upload', async () => { + await browser.executeScript(' setInterval(() => {document.querySelector("#adf-upload-dialog-cancel-all").click();' + 'document.querySelector("#adf-upload-dialog-cancel").click(); }, 500)'); - uploadToggles.enableMultipleFileUpload(); - contentServicesPage.uploadMultipleFile([pngFileModel.location, largeFile.location]); - expect(uploadDialog.getTitleText()).toEqual('Upload canceled'); - uploadDialog.clickOnCloseButton().dialogIsNotDisplayed(); - contentServicesPage.checkContentIsNotDisplayed(pngFileModel.name).checkContentIsNotDisplayed(largeFile.name); - uploadToggles.disableMultipleFileUpload(); + await uploadToggles.enableMultipleFileUpload(); + await contentServicesPage.uploadMultipleFile([pngFileModel.location, largeFile.location]); + await expect(await uploadDialog.getTitleText()).toEqual('Upload canceled'); + await uploadDialog.clickOnCloseButton(); + await uploadDialog.dialogIsNotDisplayed(); + await contentServicesPage.checkContentIsNotDisplayed(pngFileModel.name); + await contentServicesPage.checkContentIsNotDisplayed(largeFile.name); + await uploadToggles.disableMultipleFileUpload(); }); }); diff --git a/e2e/content-services/upload/excluded-file.e2e.ts b/e2e/content-services/upload/excluded-file.e2e.ts index 1c6cf09486..831495ebac 100644 --- a/e2e/content-services/upload/excluded-file.e2e.ts +++ b/e2e/content-services/upload/excluded-file.e2e.ts @@ -55,7 +55,7 @@ describe('Upload component - Excluded Files', () => { 'location': resources.Files.ADF_DOCUMENTS.PNG.file_location }); - beforeAll(async (done) => { + beforeAll(async () => { this.alfrescoJsApi = new AlfrescoApi({ provider: 'ECM', hostEcm: browser.params.testConfig.adf_acs.host @@ -69,42 +69,39 @@ describe('Upload component - Excluded Files', () => { await loginPage.loginToContentServicesUsingUserModel(acsUser); - contentServicesPage.goToDocumentList(); + await contentServicesPage.goToDocumentList(); - done(); }); - afterAll(async (done) => { + afterAll(async () => { await navigationBarPage.clickLogoutButton(); - done(); + }); - afterEach(async (done) => { - contentServicesPage.goToDocumentList(); + afterEach(async () => { + await contentServicesPage.goToDocumentList(); - done(); }); - it('[C279914] Should not allow upload default excluded files using D&D', () => { - contentServicesPage.checkDragAndDropDIsDisplayed(); + it('[C279914] Should not allow upload default excluded files using D&D', async () => { + await contentServicesPage.checkDragAndDropDIsDisplayed(); const dragAndDropArea = element.all(by.css('adf-upload-drag-area div')).first(); const dragAndDrop = new DropActions(); - dragAndDrop.dropFile(dragAndDropArea, iniExcludedFile.location); + await dragAndDrop.dropFile(dragAndDropArea, iniExcludedFile.location); - browser.driver.sleep(5000); + await browser.sleep(5000); - uploadDialog.dialogIsNotDisplayed(); + await uploadDialog.dialogIsNotDisplayed(); - contentServicesPage.checkContentIsNotDisplayed(iniExcludedFile.name); + await contentServicesPage.checkContentIsNotDisplayed(iniExcludedFile.name); }); - it('[C260122] Should not allow upload default excluded files using Upload button', () => { - contentServicesPage - .uploadFile(iniExcludedFile.location) - .checkContentIsNotDisplayed(iniExcludedFile.name); + it('[C260122] Should not allow upload default excluded files using Upload button', async () => { + await contentServicesPage.uploadFile(iniExcludedFile.location); + await contentServicesPage.checkContentIsNotDisplayed(iniExcludedFile.name); }); it('[C212862] Should not allow upload file excluded in the files extension of app.config.json', async () => { @@ -113,11 +110,12 @@ describe('Upload component - Excluded Files', () => { 'match-options': { 'nocase': true } })); - contentServicesPage.goToDocumentList(); + await contentServicesPage.goToDocumentList(); - contentServicesPage - .uploadFile(txtFileModel.location) - .checkContentIsNotDisplayed(txtFileModel.name); + await contentServicesPage + .uploadFile(txtFileModel.location); + + await contentServicesPage.checkContentIsNotDisplayed(txtFileModel.name); }); it('[C274688] Should extension type added as excluded and accepted not be uploaded', async () => { @@ -126,14 +124,14 @@ describe('Upload component - Excluded Files', () => { 'match-options': { 'nocase': true } })); - contentServicesPage.goToDocumentList(); + await contentServicesPage.goToDocumentList(); - uploadToggles.enableExtensionFilter(); - browser.driver.sleep(1000); - uploadToggles.addExtension('.png'); + await uploadToggles.enableExtensionFilter(); + await browser.sleep(1000); + await uploadToggles.addExtension('.png'); - contentServicesPage.uploadFile(pngFile.location); - browser.driver.sleep(1000); - contentServicesPage.checkContentIsNotDisplayed(pngFile.name); + await contentServicesPage.uploadFile(pngFile.location); + await browser.sleep(1000); + await contentServicesPage.checkContentIsNotDisplayed(pngFile.name); }); }); diff --git a/e2e/content-services/upload/upload-dialog.e2e.ts b/e2e/content-services/upload/upload-dialog.e2e.ts new file mode 100644 index 0000000000..f452ee8406 --- /dev/null +++ b/e2e/content-services/upload/upload-dialog.e2e.ts @@ -0,0 +1,185 @@ +/*! + * @license + * Copyright 2019 Alfresco Software, Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { BrowserActions, LoginPage, UploadActions } from '@alfresco/adf-testing'; +import { ContentServicesPage } from '../../pages/adf/contentServicesPage'; +import { UploadDialog } from '../../pages/adf/dialog/uploadDialog'; +import { UploadToggles } from '../../pages/adf/dialog/uploadToggles'; +import { AcsUserModel } from '../../models/ACS/acsUserModel'; +import { FileModel } from '../../models/ACS/fileModel'; +import { browser } from 'protractor'; +import resources = require('../../util/resources'); +import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; +import { VersionManagePage } from '../../pages/adf/versionManagerPage'; + +describe('Upload component', () => { + + const contentServicesPage = new ContentServicesPage(); + const uploadDialog = new UploadDialog(); + const uploadToggles = new UploadToggles(); + const loginPage = new LoginPage(); + const acsUser = new AcsUserModel(); + const versionManagePage = new VersionManagePage(); + this.alfrescoJsApi = new AlfrescoApi({ + provider: 'ECM', + hostEcm: browser.params.testConfig.adf_acs.host + }); + const uploadActions = new UploadActions(this.alfrescoJsApi); + + const firstPdfFileModel = new FileModel({ + 'name': resources.Files.ADF_DOCUMENTS.PDF_B.file_name, + 'location': resources.Files.ADF_DOCUMENTS.PDF_B.file_location + }); + const docxFileModel = new FileModel({ + 'name': resources.Files.ADF_DOCUMENTS.DOCX.file_name, + 'location': resources.Files.ADF_DOCUMENTS.DOCX.file_location + }); + const pdfFileModel = new FileModel({ + 'name': resources.Files.ADF_DOCUMENTS.PDF.file_name, + 'location': resources.Files.ADF_DOCUMENTS.PDF.file_location + }); + const pngFileModelTwo = new FileModel({ + 'name': resources.Files.ADF_DOCUMENTS.PNG_B.file_name, + 'location': resources.Files.ADF_DOCUMENTS.PNG_B.file_location + }); + const pngFileModel = new FileModel({ + 'name': resources.Files.ADF_DOCUMENTS.PNG.file_name, + 'location': resources.Files.ADF_DOCUMENTS.PNG.file_location + }); + const filesLocation = [pdfFileModel.location, docxFileModel.location, pngFileModel.location, firstPdfFileModel.location]; + const filesName = [pdfFileModel.name, docxFileModel.name, pngFileModel.name, firstPdfFileModel.name]; + + beforeAll(async () => { + + await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); + await this.alfrescoJsApi.core.peopleApi.addPerson(acsUser); + await this.alfrescoJsApi.login(acsUser.id, acsUser.password); + await loginPage.loginToContentServicesUsingUserModel(acsUser); + await contentServicesPage.goToDocumentList(); + const pdfUploadedFile = await uploadActions.uploadFile(firstPdfFileModel.location, firstPdfFileModel.name, '-my-'); + Object.assign(firstPdfFileModel, pdfUploadedFile.entry); + + }); + + beforeEach(async () => { + await contentServicesPage.goToDocumentList(); + }); + + afterEach(async () => { + const nbResults = await contentServicesPage.numberOfResultsDisplayed(); + if (nbResults > 1) { + const nodesPromise = await contentServicesPage.getElementsDisplayedId(); + for (const node of nodesPromise) { + const nodeId = await node; + await uploadActions.deleteFileOrFolder(nodeId); + } + } + + }); + + it('[C260143] Should be possible to maximize/minimize the upload dialog', async () => { + await contentServicesPage + .uploadFile(docxFileModel.location); + await contentServicesPage.checkContentIsDisplayed(docxFileModel.name); + + await uploadDialog.fileIsUploaded(docxFileModel.name); + await uploadDialog.checkCloseButtonIsDisplayed(); + await expect(await uploadDialog.numberOfCurrentFilesUploaded()).toEqual('1'); + await expect(await uploadDialog.numberOfInitialFilesUploaded()).toEqual('1'); + await uploadDialog.minimizeUploadDialog(); + await uploadDialog.dialogIsMinimized(); + await expect(await uploadDialog.numberOfCurrentFilesUploaded()).toEqual('1'); + await expect(await uploadDialog.numberOfInitialFilesUploaded()).toEqual('1'); + await uploadDialog.maximizeUploadDialog(); + await uploadDialog.dialogIsDisplayed(); + await uploadDialog.fileIsUploaded(docxFileModel.name); + await expect(await uploadDialog.numberOfCurrentFilesUploaded()).toEqual('1'); + await expect(await uploadDialog.numberOfInitialFilesUploaded()).toEqual('1'); + await uploadDialog.checkCloseButtonIsDisplayed(); + await uploadDialog.clickOnCloseButton(); + await uploadDialog.dialogIsNotDisplayed(); + }); + + it('[C291902] Should be shown upload counter display in dialog box', async () => { + await contentServicesPage + .uploadFile(docxFileModel.location); + await contentServicesPage.checkContentIsDisplayed(docxFileModel.name); + + await uploadDialog.fileIsUploaded(docxFileModel.name); + await uploadDialog.checkCloseButtonIsDisplayed(); + await expect(await uploadDialog.getTitleText()).toEqual('Uploaded 1 / 1'); + await uploadDialog.checkCloseButtonIsDisplayed(); + await uploadDialog.clickOnCloseButton(); + await uploadDialog.dialogIsNotDisplayed(); + }); + + it('[C260168] Should be possible to cancel upload using dialog icon', async () => { + await contentServicesPage.uploadFile(pdfFileModel.location); + await contentServicesPage.checkContentIsDisplayed(pdfFileModel.name); + await uploadDialog.removeUploadedFile(pdfFileModel.name); + await uploadDialog.fileIsCancelled(pdfFileModel.name); + await expect(await uploadDialog.getTitleText()).toEqual('Upload canceled'); + await uploadDialog.clickOnCloseButton(); + await uploadDialog.dialogIsNotDisplayed(); + await contentServicesPage.checkContentIsNotDisplayed(pdfFileModel.name); + }); + + it('[C260176] Should remove files from upload dialog box when closed', async () => { + await contentServicesPage.uploadFile(pngFileModelTwo.location); + await contentServicesPage.checkContentIsDisplayed(pngFileModelTwo.name); + + await uploadDialog.fileIsUploaded(pngFileModelTwo.name); + await contentServicesPage.uploadFile(pngFileModel.location); + await contentServicesPage.checkContentIsDisplayed(pngFileModel.name); + await uploadDialog.fileIsUploaded(pngFileModel.name); + await uploadDialog.fileIsUploaded(pngFileModelTwo.name); + await uploadDialog.clickOnCloseButton(); + await uploadDialog.dialogIsNotDisplayed(); + await contentServicesPage.uploadFile(pdfFileModel.location); + await contentServicesPage .checkContentIsDisplayed(pdfFileModel.name); + await uploadDialog.fileIsUploaded(pdfFileModel.name); + await uploadDialog.fileIsNotDisplayedInDialog(pngFileModel.name); + await uploadDialog.fileIsNotDisplayedInDialog(pngFileModelTwo.name); + await uploadDialog.clickOnCloseButton(); + await uploadDialog.dialogIsNotDisplayed(); + }); + + it('[C260170] Should be possible to upload multiple files', async () => { + await contentServicesPage.checkAcsContainer(); + await uploadToggles.enableMultipleFileUpload(); + await contentServicesPage.uploadMultipleFile(filesLocation); + await contentServicesPage.checkContentsAreDisplayed(filesName); + await uploadDialog.filesAreUploaded(filesName); + await expect(await uploadDialog.getTitleText()).toEqual('Uploaded 4 / 4'); + await uploadDialog.clickOnCloseButton(); + await uploadDialog.dialogIsNotDisplayed(); + await uploadToggles.disableMultipleFileUpload(); + }); + + it('[C311305] Should NOT be able to remove uploaded version', async () => { + await contentServicesPage.uploadFile(docxFileModel.location); + await uploadDialog.fileIsUploaded(docxFileModel.name); + await contentServicesPage.checkContentIsDisplayed(docxFileModel.name); + + await contentServicesPage.versionManagerContent(docxFileModel.name); + await BrowserActions.click(versionManagePage.showNewVersionButton); + await versionManagePage.uploadNewVersionFile(pngFileModel.location); + await versionManagePage.closeVersionDialog(); + await uploadDialog.removeUploadedFile(pngFileModel.name); + await contentServicesPage.checkContentIsDisplayed(pngFileModel.name); + }); +}); diff --git a/e2e/content-services/upload/upload-dialog.ts b/e2e/content-services/upload/upload-dialog.ts index 1e8aa47f30..0abb129ed1 100644 --- a/e2e/content-services/upload/upload-dialog.ts +++ b/e2e/content-services/upload/upload-dialog.ts @@ -66,28 +66,28 @@ describe('Upload component', () => { const filesLocation = [pdfFileModel.location, docxFileModel.location, pngFileModel.location, firstPdfFileModel.location]; const filesName = [pdfFileModel.name, docxFileModel.name, pngFileModel.name, firstPdfFileModel.name]; - beforeAll(async (done) => { + beforeAll(async () => { await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); await this.alfrescoJsApi.core.peopleApi.addPerson(acsUser); await this.alfrescoJsApi.login(acsUser.id, acsUser.password); await loginPage.loginToContentServicesUsingUserModel(acsUser); - contentServicesPage.goToDocumentList(); + await contentServicesPage.goToDocumentList(); const pdfUploadedFile = await uploadActions.uploadFile(firstPdfFileModel.location, firstPdfFileModel.name, '-my-'); Object.assign(firstPdfFileModel, pdfUploadedFile.entry); - done(); + }); - afterAll(async (done) => { + afterAll(async () => { await navigationBarPage.clickLogoutButton(); - done(); + }); - beforeEach(() => { - contentServicesPage.goToDocumentList(); + beforeEach(async () => { + await contentServicesPage.goToDocumentList(); }); - afterEach(async (done) => { + afterEach(async () => { const nbResults = await contentServicesPage.numberOfResultsDisplayed(); if (nbResults > 1) { const nodesPromise = await contentServicesPage.getElementsDisplayedId(); @@ -97,80 +97,99 @@ describe('Upload component', () => { await uploadActions.deleteFileOrFolder(nodeId); }); } - - done(); }); - it('[C260143] Should be possible to maximize/minimize the upload dialog', () => { - contentServicesPage - .uploadFile(docxFileModel.location) - .checkContentIsDisplayed(docxFileModel.name); + it('[C260143] Should be possible to maximize/minimize the upload dialog', async () => { + await contentServicesPage.uploadFile(docxFileModel.location); - uploadDialog.fileIsUploaded(docxFileModel.name).checkCloseButtonIsDisplayed(); - expect(uploadDialog.numberOfCurrentFilesUploaded()).toEqual('1'); - expect(uploadDialog.numberOfInitialFilesUploaded()).toEqual('1'); - uploadDialog.minimizeUploadDialog().dialogIsMinimized(); - expect(uploadDialog.numberOfCurrentFilesUploaded()).toEqual('1'); - expect(uploadDialog.numberOfInitialFilesUploaded()).toEqual('1'); - uploadDialog.maximizeUploadDialog().dialogIsDisplayed().fileIsUploaded(docxFileModel.name); - expect(uploadDialog.numberOfCurrentFilesUploaded()).toEqual('1'); - expect(uploadDialog.numberOfInitialFilesUploaded()).toEqual('1'); - uploadDialog.checkCloseButtonIsDisplayed().clickOnCloseButton().dialogIsNotDisplayed(); + await contentServicesPage.checkContentIsDisplayed(docxFileModel.name); + + await uploadDialog.fileIsUploaded(docxFileModel.name); + await uploadDialog.checkCloseButtonIsDisplayed(); + await expect(uploadDialog.numberOfCurrentFilesUploaded()).toEqual('1'); + await expect(uploadDialog.numberOfInitialFilesUploaded()).toEqual('1'); + await uploadDialog.minimizeUploadDialog(); + await uploadDialog.dialogIsMinimized(); + await expect(uploadDialog.numberOfCurrentFilesUploaded()).toEqual('1'); + await expect(uploadDialog.numberOfInitialFilesUploaded()).toEqual('1'); + await uploadDialog.maximizeUploadDialog(); + await uploadDialog.dialogIsDisplayed(); + await uploadDialog.fileIsUploaded(docxFileModel.name); + await expect(uploadDialog.numberOfCurrentFilesUploaded()).toEqual('1'); + await expect(uploadDialog.numberOfInitialFilesUploaded()).toEqual('1'); + await uploadDialog.checkCloseButtonIsDisplayed(); + await uploadDialog.clickOnCloseButton(); + await uploadDialog.dialogIsNotDisplayed(); }); - it('[C291902] Should be shown upload counter display in dialog box', () => { - contentServicesPage - .uploadFile(docxFileModel.location) - .checkContentIsDisplayed(docxFileModel.name); + it('[C291902] Should be shown upload counter display in dialog box', async () => { + await contentServicesPage + .uploadFile(docxFileModel.location); + await contentServicesPage.checkContentIsDisplayed(docxFileModel.name); - uploadDialog.fileIsUploaded(docxFileModel.name).checkCloseButtonIsDisplayed(); - expect(uploadDialog.getTitleText()).toEqual('Uploaded 1 / 1'); - uploadDialog.checkCloseButtonIsDisplayed().clickOnCloseButton().dialogIsNotDisplayed(); + await uploadDialog.fileIsUploaded(docxFileModel.name); + await uploadDialog.checkCloseButtonIsDisplayed(); + await expect(uploadDialog.getTitleText()).toEqual('Uploaded 1 / 1'); + await uploadDialog.checkCloseButtonIsDisplayed(); + await uploadDialog.clickOnCloseButton(); + await uploadDialog.dialogIsNotDisplayed(); }); - it('[C260168] Should be possible to cancel upload using dialog icon', () => { - contentServicesPage.uploadFile(pdfFileModel.location) - .checkContentIsDisplayed(pdfFileModel.name); - uploadDialog.removeUploadedFile(pdfFileModel.name).fileIsCancelled(pdfFileModel.name); - expect(uploadDialog.getTitleText()).toEqual('Upload canceled'); - uploadDialog.clickOnCloseButton().dialogIsNotDisplayed(); - contentServicesPage.checkContentIsNotDisplayed(pdfFileModel.name); + it('[C260168] Should be possible to cancel upload using dialog icon', async () => { + await contentServicesPage.uploadFile(pdfFileModel.location); + await contentServicesPage.checkContentIsDisplayed(pdfFileModel.name); + await uploadDialog.removeUploadedFile(pdfFileModel.name); + await uploadDialog.fileIsCancelled(pdfFileModel.name); + await expect(uploadDialog.getTitleText()).toEqual('Upload canceled'); + await uploadDialog.clickOnCloseButton(); + await uploadDialog.dialogIsNotDisplayed(); + await contentServicesPage.checkContentIsNotDisplayed(pdfFileModel.name); }); - it('[C260176] Should remove files from upload dialog box when closed', () => { - contentServicesPage.uploadFile(pngFileModelTwo.location).checkContentIsDisplayed(pngFileModelTwo.name); + it('[C260176] Should remove files from upload dialog box when closed', async () => { + await contentServicesPage.uploadFile(pngFileModelTwo.location); + await contentServicesPage.checkContentIsDisplayed(pngFileModelTwo.name); - uploadDialog.fileIsUploaded(pngFileModelTwo.name); - contentServicesPage.uploadFile(pngFileModel.location).checkContentIsDisplayed(pngFileModel.name); - uploadDialog.fileIsUploaded(pngFileModel.name).fileIsUploaded(pngFileModelTwo.name); - uploadDialog.clickOnCloseButton().dialogIsNotDisplayed(); - contentServicesPage.uploadFile(pdfFileModel.location).checkContentIsDisplayed(pdfFileModel.name); - uploadDialog.fileIsUploaded(pdfFileModel.name).fileIsNotDisplayedInDialog(pngFileModel.name).fileIsNotDisplayedInDialog(pngFileModelTwo.name); - uploadDialog.clickOnCloseButton().dialogIsNotDisplayed(); + await uploadDialog.fileIsUploaded(pngFileModelTwo.name); + await contentServicesPage.uploadFile(pngFileModel.location); + await contentServicesPage.checkContentIsDisplayed(pngFileModel.name); + await uploadDialog.fileIsUploaded(pngFileModel.name); + await uploadDialog.fileIsUploaded(pngFileModelTwo.name); + await uploadDialog.clickOnCloseButton(); + await uploadDialog.dialogIsNotDisplayed(); + await contentServicesPage.uploadFile(pdfFileModel.location); + await contentServicesPage.checkContentIsDisplayed(pdfFileModel.name); + await uploadDialog.fileIsUploaded(pdfFileModel.name); + await uploadDialog.fileIsNotDisplayedInDialog(pngFileModel.name); + await uploadDialog.fileIsNotDisplayedInDialog(pngFileModelTwo.name); + await uploadDialog.clickOnCloseButton(); + await uploadDialog.dialogIsNotDisplayed(); }); - it('[C260170] Should be possible to upload multiple files', () => { - contentServicesPage.checkAcsContainer(); - uploadToggles.enableMultipleFileUpload(); - contentServicesPage.uploadMultipleFile(filesLocation).checkContentsAreDisplayed(filesName); - uploadDialog.filesAreUploaded(filesName); - expect(uploadDialog.getTitleText()).toEqual('Uploaded 4 / 4'); - uploadDialog.clickOnCloseButton().dialogIsNotDisplayed(); - uploadToggles.disableMultipleFileUpload(); + it('[C260170] Should be possible to upload multiple files', async () => { + await contentServicesPage.checkAcsContainer(); + await uploadToggles.enableMultipleFileUpload(); + await contentServicesPage.uploadMultipleFile(filesLocation); + await contentServicesPage.checkContentsAreDisplayed(filesName); + await uploadDialog.filesAreUploaded(filesName); + await expect(uploadDialog.getTitleText()).toEqual('Uploaded 4 / 4'); + await uploadDialog.clickOnCloseButton(); + await uploadDialog.dialogIsNotDisplayed(); + await uploadToggles.disableMultipleFileUpload(); }); - it('[C311305] Should NOT be able to remove uploaded version', () => { - contentServicesPage.uploadFile(docxFileModel.location); - uploadDialog.fileIsUploaded(docxFileModel.name); - contentServicesPage.checkContentIsDisplayed(docxFileModel.name); + it('[C311305] Should NOT be able to remove uploaded version', async () => { + await contentServicesPage.uploadFile(docxFileModel.location); + await uploadDialog.fileIsUploaded(docxFileModel.name); + await contentServicesPage.checkContentIsDisplayed(docxFileModel.name); - contentServicesPage.versionManagerContent(docxFileModel.name); - BrowserActions.click(versionManagePage.showNewVersionButton); - versionManagePage.uploadNewVersionFile( + await contentServicesPage.versionManagerContent(docxFileModel.name); + await BrowserActions.click(versionManagePage.showNewVersionButton); + await versionManagePage.uploadNewVersionFile( pngFileModel.location ); - versionManagePage.closeVersionDialog(); - uploadDialog.removeUploadedFile(pngFileModel.name); - contentServicesPage.checkContentIsDisplayed(pngFileModel.name); + await versionManagePage.closeVersionDialog(); + await uploadDialog.removeUploadedFile(pngFileModel.name); + await contentServicesPage.checkContentIsDisplayed(pngFileModel.name); }); }); diff --git a/e2e/content-services/upload/uploader-component.e2e.ts b/e2e/content-services/upload/uploader-component.e2e.ts index e13ff024ea..b9e32b1b65 100644 --- a/e2e/content-services/upload/uploader-component.e2e.ts +++ b/e2e/content-services/upload/uploader-component.e2e.ts @@ -36,9 +36,9 @@ describe('Upload component', () => { const loginPage = new LoginPage(); const acsUser = new AcsUserModel(); this.alfrescoJsApi = new AlfrescoApi({ - provider: 'ECM', - hostEcm: browser.params.testConfig.adf_acs.host - }); + provider: 'ECM', + hostEcm: browser.params.testConfig.adf_acs.host + }); const uploadActions = new UploadActions(this.alfrescoJsApi); const navigationBarPage = new NavigationBarPage(); @@ -67,7 +67,7 @@ describe('Upload component', () => { 'location': resources.Files.ADF_DOCUMENTS.TXT_0B.file_location }); - beforeAll(async (done) => { + beforeAll(async () => { await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); @@ -75,259 +75,255 @@ describe('Upload component', () => { await this.alfrescoJsApi.login(acsUser.id, acsUser.password); - loginPage.loginToContentServicesUsingUserModel(acsUser); - - contentServicesPage.goToDocumentList(); + await loginPage.loginToContentServicesUsingUserModel(acsUser); const pdfUploadedFile = await uploadActions.uploadFile(firstPdfFileModel.location, firstPdfFileModel.name, '-my-'); Object.assign(firstPdfFileModel, pdfUploadedFile.entry); - done(); }); - afterAll(async (done) => { + afterAll(async () => { await navigationBarPage.clickLogoutButton(); - done(); }); - beforeEach(() => { - contentServicesPage.goToDocumentList(); + beforeEach(async () => { + await contentServicesPage.goToDocumentList(); }); describe('', () => { - beforeEach(() => { - contentServicesPage.goToDocumentList(); + afterEach(async () => { + const nodeList = await contentServicesPage.getElementsDisplayedId(); + for (const node of nodeList) { + try { + await uploadActions.deleteFileOrFolder(node); + } catch (error) { + } + } }); - afterEach(async (done) => { + it('[C272788] Should display upload button', async () => { + await expect(await contentServicesPage.getSingleFileButtonTooltip()).toEqual('Custom tooltip'); - contentServicesPage.getElementsDisplayedId().then((nodeList) => { - nodeList.forEach(async (currentNode) => { - await uploadActions.deleteFileOrFolder(currentNode); - }); - }); - - done(); + await contentServicesPage.checkUploadButton(); + await contentServicesPage.checkContentIsDisplayed(firstPdfFileModel.name); }); - it('[C272788] Should display upload button', () => { - expect(contentServicesPage.getSingleFileButtonTooltip()).toEqual('Custom tooltip'); + it('[C272789] Should be able to upload PDF file', async () => { + await contentServicesPage.uploadFile(pdfFileModel.location); + await contentServicesPage.checkContentIsDisplayed(pdfFileModel.name); - contentServicesPage - .checkUploadButton() - .checkContentIsDisplayed(firstPdfFileModel.name); + await uploadDialog.fileIsUploaded(pdfFileModel.name); + + await uploadDialog.clickOnCloseButton(); + await uploadDialog.dialogIsNotDisplayed(); }); - it('[C272789] Should be able to upload PDF file', () => { - contentServicesPage - .uploadFile(pdfFileModel.location) - .checkContentIsDisplayed(pdfFileModel.name); + it('[C272790] Should be able to upload text file', async () => { + await contentServicesPage.uploadFile(docxFileModel.location); + await contentServicesPage.checkContentIsDisplayed(docxFileModel.name); - uploadDialog.fileIsUploaded(pdfFileModel.name); - - uploadDialog.clickOnCloseButton().dialogIsNotDisplayed(); + await uploadDialog.fileIsUploaded(docxFileModel.name); + await uploadDialog.clickOnCloseButton(); + await uploadDialog.dialogIsNotDisplayed(); }); - it('[C272790] Should be able to upload text file', () => { - contentServicesPage - .uploadFile(docxFileModel.location) - .checkContentIsDisplayed(docxFileModel.name); + it('[C260141] Should be possible to upload PNG file', async () => { + await contentServicesPage.uploadFile(pngFileModel.location); + await contentServicesPage.checkContentIsDisplayed(pngFileModel.name); - uploadDialog.fileIsUploaded(docxFileModel.name); - uploadDialog.clickOnCloseButton().dialogIsNotDisplayed(); + await uploadDialog.fileIsUploaded(pngFileModel.name); + await uploadDialog.clickOnCloseButton(); + await uploadDialog.dialogIsNotDisplayed(); }); - it('[C260141] Should be possible to upload PNG file', () => { - contentServicesPage - .uploadFile(pngFileModel.location) - .checkContentIsDisplayed(pngFileModel.name); + it('[C260143] Should be possible to maximize/minimize the upload dialog', async () => { + await contentServicesPage.uploadFile(docxFileModel.location); + await contentServicesPage.checkContentIsDisplayed(docxFileModel.name); - uploadDialog.fileIsUploaded(pngFileModel.name); - uploadDialog.clickOnCloseButton().dialogIsNotDisplayed(); + await uploadDialog.fileIsUploaded(docxFileModel.name); + await uploadDialog.checkCloseButtonIsDisplayed(); + await expect(await uploadDialog.numberOfCurrentFilesUploaded()).toEqual('1'); + await expect(await uploadDialog.numberOfInitialFilesUploaded()).toEqual('1'); + await uploadDialog.minimizeUploadDialog(); + await uploadDialog.dialogIsMinimized(); + await expect(await uploadDialog.numberOfCurrentFilesUploaded()).toEqual('1'); + await expect(await uploadDialog.numberOfInitialFilesUploaded()).toEqual('1'); + await uploadDialog.maximizeUploadDialog(); + await uploadDialog.dialogIsDisplayed(); + await uploadDialog.fileIsUploaded(docxFileModel.name); + await expect(await uploadDialog.numberOfCurrentFilesUploaded()).toEqual('1'); + await expect(await uploadDialog.numberOfInitialFilesUploaded()).toEqual('1'); + await uploadDialog.checkCloseButtonIsDisplayed(); + await uploadDialog.clickOnCloseButton(); + await uploadDialog.dialogIsNotDisplayed(); }); - it('[C260143] Should be possible to maximize/minimize the upload dialog', () => { - contentServicesPage - .uploadFile(docxFileModel.location) - .checkContentIsDisplayed(docxFileModel.name); - - uploadDialog.fileIsUploaded(docxFileModel.name).checkCloseButtonIsDisplayed(); - expect(uploadDialog.numberOfCurrentFilesUploaded()).toEqual('1'); - expect(uploadDialog.numberOfInitialFilesUploaded()).toEqual('1'); - uploadDialog.minimizeUploadDialog().dialogIsMinimized(); - expect(uploadDialog.numberOfCurrentFilesUploaded()).toEqual('1'); - expect(uploadDialog.numberOfInitialFilesUploaded()).toEqual('1'); - uploadDialog.maximizeUploadDialog().dialogIsDisplayed().fileIsUploaded(docxFileModel.name); - expect(uploadDialog.numberOfCurrentFilesUploaded()).toEqual('1'); - expect(uploadDialog.numberOfInitialFilesUploaded()).toEqual('1'); - uploadDialog.checkCloseButtonIsDisplayed().clickOnCloseButton().dialogIsNotDisplayed(); + it('[C272794] Should display tooltip for uploading files', async () => { + await uploadToggles.enableMultipleFileUpload(); + await uploadToggles.checkMultipleFileUploadToggleIsEnabled(); + await expect(await contentServicesPage.getMultipleFileButtonTooltip()).toEqual('Custom tooltip'); + await uploadToggles.disableMultipleFileUpload(); }); - it('[C272794] Should display tooltip for uploading files', () => { - uploadToggles.enableMultipleFileUpload(); - uploadToggles.checkMultipleFileUploadToggleIsEnabled(); - - browser.driver.sleep(1000); - expect(contentServicesPage.getMultipleFileButtonTooltip()).toEqual('Custom tooltip'); - uploadToggles.disableMultipleFileUpload(); - }); - - it('[C279920] Should rename a file uploaded twice', () => { - contentServicesPage - .uploadFile(pdfFileModel.location) - .checkContentIsDisplayed(pdfFileModel.name); + it('[C279920] Should rename a file uploaded twice', async () => { + await contentServicesPage.uploadFile(pdfFileModel.location); + await contentServicesPage.checkContentIsDisplayed(pdfFileModel.name); pdfFileModel.setVersion('1'); - contentServicesPage - .uploadFile(pdfFileModel.location) - .checkContentIsDisplayed(pdfFileModel.getVersionName()); + await contentServicesPage.uploadFile(pdfFileModel.location); + await contentServicesPage.checkContentIsDisplayed(pdfFileModel.getVersionName()); - uploadDialog - .clickOnCloseButton() - .dialogIsNotDisplayed(); + await uploadDialog.clickOnCloseButton(); + await uploadDialog.dialogIsNotDisplayed(); pdfFileModel.setVersion(''); }); - it('[C260172] Should be possible to enable versioning', () => { - uploadToggles.enableVersioning(); - uploadToggles.checkVersioningToggleIsEnabled(); + it('[C260172] Should be possible to enable versioning', async () => { + await uploadToggles.enableVersioning(); + await uploadToggles.checkVersioningToggleIsEnabled(); - contentServicesPage - .uploadFile(pdfFileModel.location) - .checkContentIsDisplayed(pdfFileModel.name); + await contentServicesPage.uploadFile(pdfFileModel.location); + await contentServicesPage.checkContentIsDisplayed(pdfFileModel.name); pdfFileModel.setVersion('1'); - contentServicesPage - .uploadFile(pdfFileModel.location) - .checkContentIsDisplayed(pdfFileModel.name); + await contentServicesPage.uploadFile(pdfFileModel.location); + await contentServicesPage.checkContentIsDisplayed(pdfFileModel.name); - uploadDialog - .fileIsUploaded(pdfFileModel.name); + await uploadDialog.fileIsUploaded(pdfFileModel.name); - uploadDialog - .clickOnCloseButton() - .dialogIsNotDisplayed(); + await uploadDialog.clickOnCloseButton(); + await uploadDialog.dialogIsNotDisplayed(); - contentServicesPage - .checkContentIsNotDisplayed(pdfFileModel.getVersionName()); + await contentServicesPage.checkContentIsNotDisplayed(pdfFileModel.getVersionName()); pdfFileModel.setVersion(''); - uploadToggles.disableVersioning(); + await uploadToggles.disableVersioning(); }); - it('[C260174] Should be possible to set a max size', () => { - contentServicesPage.goToDocumentList(); - contentServicesPage.checkAcsContainer(); - uploadToggles.enableMaxSize(); - uploadToggles.checkMaxSizeToggleIsEnabled(); - uploadToggles.addMaxSize('400'); - contentServicesPage.uploadFile(fileWithSpecificSize.location); - uploadDialog.fileIsUploaded(fileWithSpecificSize.name).clickOnCloseButton().dialogIsNotDisplayed(); - contentServicesPage.deleteContent(fileWithSpecificSize.name); - contentServicesPage.checkContentIsNotDisplayed(fileWithSpecificSize.name); - uploadToggles.addMaxSize('399'); - contentServicesPage.uploadFile(fileWithSpecificSize.location); + it('[C260174] Should be possible to set a max size', async () => { + await contentServicesPage.goToDocumentList(); + await contentServicesPage.checkAcsContainer(); + await uploadToggles.enableMaxSize(); + await uploadToggles.checkMaxSizeToggleIsEnabled(); + await uploadToggles.addMaxSize('400'); + await contentServicesPage.uploadFile(fileWithSpecificSize.location); + await uploadDialog.fileIsUploaded(fileWithSpecificSize.name); + await uploadDialog.clickOnCloseButton(); + await uploadDialog.dialogIsNotDisplayed(); + await contentServicesPage.deleteContent(fileWithSpecificSize.name); + await contentServicesPage.checkContentIsNotDisplayed(fileWithSpecificSize.name); + await uploadToggles.addMaxSize('399'); + await contentServicesPage.uploadFile(fileWithSpecificSize.location); - // expect(contentServicesPage.getErrorMessage()).toEqual('File ' + fileWithSpecificSize.name + ' is larger than the allowed file size'); + // await expect(await contentServicesPage.getErrorMessage()).toEqual('File ' + fileWithSpecificSize.name + ' is larger than the allowed file size'); - contentServicesPage.checkContentIsNotDisplayed(fileWithSpecificSize.name); - uploadDialog.fileIsNotDisplayedInDialog(fileWithSpecificSize.name); - contentServicesPage.uploadFile(emptyFile.location).checkContentIsDisplayed(emptyFile.name); - uploadDialog.fileIsUploaded(emptyFile.name).clickOnCloseButton().dialogIsNotDisplayed(); + await contentServicesPage.checkContentIsNotDisplayed(fileWithSpecificSize.name); + await uploadDialog.fileIsNotDisplayedInDialog(fileWithSpecificSize.name); + await contentServicesPage.uploadFile(emptyFile.location); + await contentServicesPage.checkContentIsDisplayed(emptyFile.name); + await uploadDialog.fileIsUploaded(emptyFile.name); + await uploadDialog.clickOnCloseButton(); + await uploadDialog.dialogIsNotDisplayed(); - uploadToggles.disableMaxSize(); + await uploadToggles.disableMaxSize(); }); - it('[C272796] Should be possible to set max size to 0', () => { - contentServicesPage.goToDocumentList(); - uploadToggles.enableMaxSize(); - uploadToggles.checkMaxSizeToggleIsEnabled(); - uploadToggles.addMaxSize('0'); - contentServicesPage.uploadFile(fileWithSpecificSize.location); - // expect(contentServicesPage.getErrorMessage()).toEqual('File ' + fileWithSpecificSize.name + ' is larger than the allowed file size'); + it('[C272796] Should be possible to set max size to 0', async () => { + await contentServicesPage.goToDocumentList(); + await uploadToggles.enableMaxSize(); + await uploadToggles.checkMaxSizeToggleIsEnabled(); + await uploadToggles.addMaxSize('0'); + await contentServicesPage.uploadFile(fileWithSpecificSize.location); + // await expect(await contentServicesPage.getErrorMessage()).toEqual('File ' + fileWithSpecificSize.name + ' is larger than the allowed file size'); - uploadDialog.fileIsNotDisplayedInDialog(fileWithSpecificSize.name); - contentServicesPage.uploadFile(emptyFile.location).checkContentIsDisplayed(emptyFile.name); - uploadDialog.fileIsUploaded(emptyFile.name).clickOnCloseButton().dialogIsNotDisplayed(); + await uploadDialog.fileIsNotDisplayedInDialog(fileWithSpecificSize.name); + await contentServicesPage.uploadFile(emptyFile.location); + await contentServicesPage.checkContentIsDisplayed(emptyFile.name); + await uploadDialog.fileIsUploaded(emptyFile.name); + await uploadDialog.clickOnCloseButton(); + await uploadDialog.dialogIsNotDisplayed(); - uploadToggles.disableMaxSize(); + await uploadToggles.disableMaxSize(); }); - it('[C272797] Should be possible to set max size to 1', () => { - uploadToggles.enableMaxSize(); - uploadToggles.checkMaxSizeToggleIsEnabled(); - browser.driver.sleep(1000); - uploadToggles.addMaxSize('1'); - uploadToggles.disableMaxSize(); - contentServicesPage.uploadFile(fileWithSpecificSize.location); - uploadDialog.fileIsUploaded(fileWithSpecificSize.name).clickOnCloseButton().dialogIsNotDisplayed(); - contentServicesPage.checkContentIsDisplayed(fileWithSpecificSize.name); + it('[C272797] Should be possible to set max size to 1', async () => { + await uploadToggles.enableMaxSize(); + await uploadToggles.checkMaxSizeToggleIsEnabled(); + await browser.sleep(1000); + await uploadToggles.addMaxSize('1'); + await uploadToggles.disableMaxSize(); + await contentServicesPage.uploadFile(fileWithSpecificSize.location); + await uploadDialog.fileIsUploaded(fileWithSpecificSize.name); + await uploadDialog.clickOnCloseButton(); + await uploadDialog.dialogIsNotDisplayed(); + await contentServicesPage.checkContentIsDisplayed(fileWithSpecificSize.name); }); - it('[C91318] Should Enable/Disable upload button when change the disable property', () => { - uploadToggles.clickCheckboxDisableUpload(); - expect(contentServicesPage.uploadButtonIsEnabled()).toBeFalsy(); + it('[C91318] Should Enable/Disable upload button when change the disable property', async () => { + await uploadToggles.clickCheckboxDisableUpload(); + await expect(await contentServicesPage.uploadButtonIsEnabled()).toBe(false, 'Upload button is enabled'); - uploadToggles.clickCheckboxDisableUpload(); - expect(contentServicesPage.uploadButtonIsEnabled()).toBeTruthy(); + await uploadToggles.clickCheckboxDisableUpload(); + await expect(await contentServicesPage.uploadButtonIsEnabled()).toBe(true, 'Upload button not enabled'); }); }); - it('[C260171] Should upload only the extension filter allowed when Enable extension filter is enabled', () => { - uploadToggles.enableExtensionFilter(); - browser.driver.sleep(1000); - uploadToggles.addExtension('.docx'); - contentServicesPage.uploadFile(docxFileModel.location).checkContentIsDisplayed(docxFileModel.name); - uploadDialog.removeUploadedFile(docxFileModel.name).fileIsCancelled(docxFileModel.name); - uploadDialog.clickOnCloseButton().dialogIsNotDisplayed(); - contentServicesPage.uploadFile(pngFileModel.location).checkContentIsNotDisplayed(pngFileModel.name); - uploadDialog.dialogIsNotDisplayed(); - uploadToggles.disableExtensionFilter(); + it('[C260171] Should upload only the extension filter allowed when Enable extension filter is enabled', async () => { + await uploadToggles.enableExtensionFilter(); + await browser.sleep(1000); + await uploadToggles.addExtension('.docx'); + await contentServicesPage.uploadFile(docxFileModel.location); + await contentServicesPage.checkContentIsDisplayed(docxFileModel.name); + await uploadDialog.removeUploadedFile(docxFileModel.name); + await uploadDialog.fileIsCancelled(docxFileModel.name); + await uploadDialog.clickOnCloseButton(); + await uploadDialog.dialogIsNotDisplayed(); + await contentServicesPage.uploadFile(pngFileModel.location); + await contentServicesPage.checkContentIsNotDisplayed(pngFileModel.name); + await uploadDialog.dialogIsNotDisplayed(); + await uploadToggles.disableExtensionFilter(); }); - it('[C274687] Should upload with drag and drop only the extension filter allowed when Enable extension filter is enabled', () => { - uploadToggles.enableExtensionFilter(); - browser.driver.sleep(1000); - uploadToggles.addExtension('.docx'); + it('[C274687] Should upload with drag and drop only the extension filter allowed when Enable extension filter is enabled', async () => { + await uploadToggles.enableExtensionFilter(); + await browser.sleep(1000); + await uploadToggles.addExtension('.docx'); const dragAndDrop = new DropActions(); const dragAndDropArea = element.all(by.css('adf-upload-drag-area div')).first(); - dragAndDrop.dropFile(dragAndDropArea, docxFileModel.location); - contentServicesPage.checkContentIsDisplayed(docxFileModel.name); + await dragAndDrop.dropFile(dragAndDropArea, docxFileModel.location); + await contentServicesPage.checkContentIsDisplayed(docxFileModel.name); - uploadDialog.removeUploadedFile(docxFileModel.name).fileIsCancelled(docxFileModel.name); - uploadDialog.clickOnCloseButton().dialogIsNotDisplayed(); + await uploadDialog.removeUploadedFile(docxFileModel.name); + await uploadDialog.fileIsCancelled(docxFileModel.name); + await uploadDialog.clickOnCloseButton(); + await uploadDialog.dialogIsNotDisplayed(); - dragAndDrop.dropFile(dragAndDropArea, pngFileModel.location); - contentServicesPage.checkContentIsNotDisplayed(pngFileModel.name); - uploadDialog.dialogIsNotDisplayed(); - uploadToggles.disableExtensionFilter(); + await dragAndDrop.dropFile(dragAndDropArea, pngFileModel.location); + await contentServicesPage.checkContentIsNotDisplayed(pngFileModel.name); + await uploadDialog.dialogIsNotDisplayed(); + await uploadToggles.disableExtensionFilter(); }); it('[C291921] Should display tooltip for uploading files on a not found location', async () => { const folderName = StringUtil.generateRandomString(8); - const folderUploadedModel = await browser.controlFlow().execute(async () => { - return await uploadActions.createFolder(folderName, '-my-'); - }); + const folderUploadedModel = await uploadActions.createFolder(folderName, '-my-'); + await navigationBarPage.openContentServicesFolder(folderUploadedModel.entry.id); + await contentServicesPage.checkUploadButton(); - navigationBarPage.openContentServicesFolder(folderUploadedModel.entry.id); - contentServicesPage.checkUploadButton(); + await uploadActions.deleteFileOrFolder(folderUploadedModel.entry.id); - browser.controlFlow().execute(async () => { - await uploadActions.deleteFileOrFolder(folderUploadedModel.entry.id); - }); + await contentServicesPage.uploadFile(pdfFileModel.location); - contentServicesPage.uploadFile(pdfFileModel.location); - - uploadDialog.displayTooltip(); - expect(uploadDialog.getTooltip()).toEqual('Upload location no longer exists [404]'); + await uploadDialog.displayTooltip(); + await expect(await uploadDialog.getTooltip()).toEqual('Upload location no longer exists [404]'); }); }); diff --git a/e2e/content-services/upload/user-permission.e2e.ts b/e2e/content-services/upload/user-permission.e2e.ts index 98722e5a68..0f6aafb34d 100644 --- a/e2e/content-services/upload/user-permission.e2e.ts +++ b/e2e/content-services/upload/user-permission.e2e.ts @@ -56,14 +56,14 @@ describe('Upload - User permission', () => { 'location': resources.Files.ADF_DOCUMENTS.PDF.file_location }); - beforeAll(() => { + beforeAll(async () => { this.alfrescoJsApi = new AlfrescoApi({ provider: 'ECM', hostEcm: browser.params.testConfig.adf_acs.host }); }); - beforeEach(async (done) => { + beforeEach(async () => { acsUser = new AcsUserModel(); acsUserTwo = new AcsUserModel(); @@ -95,106 +95,99 @@ describe('Upload - User permission', () => { role: CONSTANTS.CS_USER_ROLES.MANAGER }); - done(); - }); - - afterAll(async (done) => { - await navigationBarPage.clickLogoutButton(); - done(); }); describe('Consumer permissions', () => { - beforeEach(async (done) => { - contentServicesPage.goToDocumentList(); + beforeEach(async () => { + await contentServicesPage.goToDocumentList(); - done(); }); - it('[C291921] Should display tooltip for uploading files without permissions', () => { - navigationBarPage.openContentServicesFolder(this.consumerSite.entry.guid); + it('[C291921] Should display tooltip for uploading files without permissions', async () => { + await navigationBarPage.openContentServicesFolder(this.consumerSite.entry.guid); - contentServicesPage.checkDragAndDropDIsDisplayed(); + await contentServicesPage.checkDragAndDropDIsDisplayed(); - contentServicesPage.dragAndDropFile(emptyFile.location); + await contentServicesPage.dragAndDropFile(emptyFile.location); - uploadDialog.fileIsError(emptyFile.name); + await uploadDialog.fileIsError(emptyFile.name); - uploadDialog.displayTooltip(); + await uploadDialog.displayTooltip(); - expect(uploadDialog.getTooltip()).toEqual('Insufficient permissions to upload in this location [403]'); + await expect(await uploadDialog.getTooltip()).toEqual('Insufficient permissions to upload in this location [403]'); }); - it('[C279915] Should not be allowed to upload a file in folder with consumer permissions', () => { - contentServicesPage.uploadFile(emptyFile.location).checkContentIsDisplayed(emptyFile.name); + it('[C279915] Should not be allowed to upload a file in folder with consumer permissions', async () => { + await contentServicesPage.uploadFile(emptyFile.location); + await contentServicesPage.checkContentIsDisplayed(emptyFile.name); - uploadDialog.fileIsUploaded(emptyFile.name); + await uploadDialog.fileIsUploaded(emptyFile.name); - uploadDialog.clickOnCloseButton().dialogIsNotDisplayed(); + await uploadDialog.clickOnCloseButton(); + await uploadDialog.dialogIsNotDisplayed(); - navigationBarPage.openContentServicesFolder(this.consumerSite.entry.guid); + await navigationBarPage.openContentServicesFolder(this.consumerSite.entry.guid); - browser.sleep(3000); + await browser.sleep(3000); - contentServicesPage.uploadFile(emptyFile.location); + await contentServicesPage.uploadFile(emptyFile.location); - notificationHistoryPage.checkNotifyContains('You don\'t have the create permission to upload the content'); + await notificationHistoryPage.checkNotifyContains('You don\'t have the create permission to upload the content'); }); }); describe('full permissions', () => { - beforeEach(async (done) => { - navigationBarPage.openContentServicesFolder(this.managerSite.entry.guid); + beforeEach(async () => { + await navigationBarPage.openContentServicesFolder(this.managerSite.entry.guid); - contentServicesPage.goToDocumentList(); + await contentServicesPage.goToDocumentList(); - done(); }); - it('[C279917] Should be allowed to upload a file in a folder with manager permissions', () => { - contentServicesPage.uploadFile(emptyFile.location); + it('[C279917] Should be allowed to upload a file in a folder with manager permissions', async () => { + await contentServicesPage.uploadFile(emptyFile.location); - uploadDialog.fileIsUploaded(emptyFile.name); + await uploadDialog.fileIsUploaded(emptyFile.name); }); }); describe('multiple users', () => { - beforeEach(async (done) => { - contentServicesPage.goToDocumentList(); + beforeEach(async () => { + await contentServicesPage.goToDocumentList(); - done(); }); it('[C260175] Should two different user upload files in the proper User Home', async () => { - contentServicesPage.uploadFile(emptyFile.location); + await contentServicesPage.uploadFile(emptyFile.location); - uploadDialog.fileIsUploaded(emptyFile.name); + await uploadDialog.fileIsUploaded(emptyFile.name); - contentServicesPage.checkContentIsDisplayed(emptyFile.name); + await contentServicesPage.checkContentIsDisplayed(emptyFile.name); - navigationBarPage.clickLoginButton(); + await navigationBarPage.clickLoginButton(); await loginPage.loginToContentServicesUsingUserModel(acsUserTwo); - contentServicesPage.goToDocumentList(); + await contentServicesPage.goToDocumentList(); - contentServicesPage.checkContentIsNotDisplayed(emptyFile.name); + await contentServicesPage.checkContentIsNotDisplayed(emptyFile.name); - contentServicesPage.uploadFile(pngFile.location); + await contentServicesPage.uploadFile(pngFile.location); - contentServicesPage.checkContentIsDisplayed(pngFile.name); + await contentServicesPage.checkContentIsDisplayed(pngFile.name); - navigationBarPage.clickLoginButton(); + await navigationBarPage.clickLoginButton(); await loginPage.loginToContentServicesUsingUserModel(acsUser); - contentServicesPage.goToDocumentList(); + await contentServicesPage.goToDocumentList(); - contentServicesPage.checkContentIsNotDisplayed(pngFile.name); + await contentServicesPage.checkContentIsNotDisplayed(pngFile.name); - contentServicesPage.uploadFile(pdfFile.location); + await contentServicesPage.uploadFile(pdfFile.location); - contentServicesPage.checkContentIsDisplayed(pdfFile.name); + await contentServicesPage.checkContentIsDisplayed(pdfFile.name); }); }); diff --git a/e2e/content-services/version/version-actions.e2e.ts b/e2e/content-services/version/version-actions.e2e.ts index 5f8cb72f53..2a77989bb9 100644 --- a/e2e/content-services/version/version-actions.e2e.ts +++ b/e2e/content-services/version/version-actions.e2e.ts @@ -28,10 +28,8 @@ import resources = require('../../util/resources'); import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; import { UploadActions } from '@alfresco/adf-testing'; -import { Util } from '../../util/util'; -import path = require('path'); import { NavigationBarPage } from '../../pages/adf/navigationBarPage'; -import { BrowserVisibility } from '@alfresco/adf-testing'; +import { BrowserVisibility, FileBrowserUtil, BrowserActions } from '@alfresco/adf-testing'; import { UploadDialog } from '../../pages/adf/dialog/uploadDialog'; describe('Version component actions', () => { @@ -40,6 +38,7 @@ describe('Version component actions', () => { const contentServicesPage = new ContentServicesPage(); const versionManagePage = new VersionManagePage(); const navigationBarPage = new NavigationBarPage(); + const uploadDialog = new UploadDialog(); const acsUser = new AcsUserModel(); @@ -49,8 +48,8 @@ describe('Version component actions', () => { }); const fileModelVersionTwo = new FileModel({ - 'name': resources.Files.ADF_DOCUMENTS.PNG.file_name, - 'location': resources.Files.ADF_DOCUMENTS.PNG.file_location + 'name': resources.Files.ADF_DOCUMENTS.TXT.file_name, + 'location': resources.Files.ADF_DOCUMENTS.TXT.file_location }); let uploadActions; @@ -59,122 +58,119 @@ describe('Version component actions', () => { 'location': resources.Files.ADF_DOCUMENTS.LARGE_FILE.file_location }); - beforeAll(async (done) => { + beforeAll(async () => { this.alfrescoJsApi = new AlfrescoApi({ provider: 'ECM', hostEcm: browser.params.testConfig.adf_acs.host }); uploadActions = new UploadActions(this.alfrescoJsApi); - await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); - await this.alfrescoJsApi.core.peopleApi.addPerson(acsUser); - await this.alfrescoJsApi.login(acsUser.id, acsUser.password); - const txtUploadedFile = await uploadActions.uploadFile(txtFileModel.location, txtFileModel.name, '-my-'); - Object.assign(txtFileModel, txtUploadedFile.entry); - txtFileModel.update(txtUploadedFile.entry); - await loginPage.loginToContentServicesUsingUserModel(acsUser); + await navigationBarPage.clickContentServicesButton(); + await contentServicesPage.waitForTableBody(); - navigationBarPage.clickContentServicesButton(); - contentServicesPage.waitForTableBody(); - contentServicesPage.versionManagerContent(txtFileModel.name); - - done(); }); - afterAll(async () => { - await navigationBarPage.clickLogoutButton(); + beforeEach(async () => { + await contentServicesPage.versionManagerContent(txtFileModel.name); }); - it('[C280003] Should not be possible delete a file version if there is only one version', () => { - versionManagePage.clickActionButton('1.0'); - expect(element(by.css(`[id="adf-version-list-action-delete-1.0"]`)).isEnabled()).toBe(false); - versionManagePage.closeActionsMenu(); - BrowserVisibility.waitUntilElementIsNotOnPage(element(by.css(`[id="adf-version-list-action-delete-1.0"]`))); + afterEach(async () => { + await BrowserActions.closeMenuAndDialogs(); }); - it('[C280004] Should not be possible restore the version if there is only one version', () => { - versionManagePage.clickActionButton('1.0'); - expect(element(by.css(`[id="adf-version-list-action-restore-1.0"]`)).isEnabled()).toBe(false); - versionManagePage.closeActionsMenu(); - BrowserVisibility.waitUntilElementIsNotOnPage(element(by.css(`[id="adf-version-list-action-restore-1.0"]`))); + it('[C280003] Should not be possible delete a file version if there is only one version', async () => { + await versionManagePage.clickActionButton('1.0'); + await expect(await element(by.css(`[id="adf-version-list-action-delete-1.0"]`)).isEnabled()).toBe(false); + await versionManagePage.closeActionsMenu(); + await BrowserVisibility.waitUntilElementIsNotVisible(element(by.css(`[id="adf-version-list-action-delete-1.0"]`))); }); - it('[C280005] Should be showed all the default action when you have more then one version', () => { - versionManagePage.showNewVersionButton.click(); - - versionManagePage.uploadNewVersionFile(fileModelVersionTwo.location); - - versionManagePage.clickActionButton('1.1').checkActionsArePresent('1.1'); - - versionManagePage.closeActionsMenu(); + it('[C280004] Should not be possible restore the version if there is only one version', async () => { + await versionManagePage.clickActionButton('1.0'); + await expect(await element(by.css(`[id="adf-version-list-action-restore-1.0"]`)).isEnabled()).toBe(false); + await versionManagePage.closeActionsMenu(); + await BrowserVisibility.waitUntilElementIsNotVisible(element(by.css(`[id="adf-version-list-action-restore-1.0"]`))); }); - it('[C269081] Should be possible download all the version of a file', () => { - versionManagePage.downloadFileVersion('1.0'); + it('[C280005] Should be showed all the default action when you have more then one version', async () => { + await BrowserActions.click(versionManagePage.showNewVersionButton); - expect(Util.fileExists(path.join(__dirname, 'downloads', txtFileModel.name), 20)).toBe(true); + await versionManagePage.uploadNewVersionFile(fileModelVersionTwo.location); - versionManagePage.downloadFileVersion('1.1'); + await versionManagePage.clickActionButton('1.1'); + await versionManagePage.checkActionsArePresent('1.1'); - expect(Util.fileExists(path.join(__dirname, 'downloads', fileModelVersionTwo.name), 20)).toBe(true); + await versionManagePage.closeActionsMenu(); + + await versionManagePage.closeVersionDialog(); + + await uploadDialog.clickOnCloseButton(); }); - it('[C272819] Should be possible delete a version when click on delete version action', () => { - versionManagePage.deleteFileVersion('1.1'); - - versionManagePage.clickAcceptConfirm(); - - versionManagePage.checkFileVersionNotExist('1.1'); - versionManagePage.checkFileVersionExist('1.0'); + it('[C269081] Should be possible download all the version of a file', async () => { + await versionManagePage.downloadFileVersion('1.0'); + await expect(await FileBrowserUtil.isFileDownloaded(txtFileModel.name)).toBe(true, `${txtFileModel.name} not downloaded`); + await versionManagePage.downloadFileVersion('1.1'); + await expect(await FileBrowserUtil.isFileDownloaded(fileModelVersionTwo.name)).toBe(true, `${fileModelVersionTwo.name} not downloaded`); }); - it('[C280006] Should be possible prevent a version to be deleted when click on No on the confirm dialog', () => { - versionManagePage.showNewVersionButton.click(); + it('[C272819] Should be possible delete a version when click on delete version action', async () => { + await versionManagePage.deleteFileVersion('1.1'); - versionManagePage.uploadNewVersionFile(fileModelVersionTwo.location); + await versionManagePage.clickAcceptConfirm(); - versionManagePage.checkFileVersionExist('1.1'); + await versionManagePage.checkFileVersionNotExist('1.1'); + await versionManagePage.checkFileVersionExist('1.0'); + }); - versionManagePage.deleteFileVersion('1.1'); + it('[C280006] Should be possible prevent a version to be deleted when click on No on the confirm dialog', async () => { + await BrowserActions.click(versionManagePage.showNewVersionButton); - versionManagePage.clickCancelConfirm(); + await versionManagePage.uploadNewVersionFile(fileModelVersionTwo.location); - versionManagePage.checkFileVersionExist('1.1'); - versionManagePage.checkFileVersionExist('1.0'); - versionManagePage.closeVersionDialog(); + await versionManagePage.checkFileVersionExist('1.1'); + + await versionManagePage.deleteFileVersion('1.1'); + + await versionManagePage.clickCancelConfirm(); + + await versionManagePage.checkFileVersionExist('1.1'); + await versionManagePage.checkFileVersionExist('1.0'); + await versionManagePage.closeVersionDialog(); }); it('[C280007] Should be possible to restore an old version of your file and the document list updated', async () => { - contentServicesPage.versionManagerContent(fileModelVersionTwo.name); - versionManagePage.restoreFileVersion('1.0'); - versionManagePage.checkFileVersionExist('2.0'); - versionManagePage.closeVersionDialog(); - contentServicesPage.waitForTableBody(); - contentServicesPage.checkContentIsDisplayed(txtFileModel.name); + await contentServicesPage.versionManagerContent(fileModelVersionTwo.name); + await versionManagePage.restoreFileVersion('1.0'); + await versionManagePage.checkFileVersionExist('2.0'); + await versionManagePage.closeVersionDialog(); + await contentServicesPage.waitForTableBody(); + await contentServicesPage.checkContentIsDisplayed(txtFileModel.name); }); it('[C307033] Should be possible to cancel the upload of a new version', async () => { await browser.refresh(); - contentServicesPage.versionManagerContent(txtFileModel.name); - browser.executeScript(' setTimeout(() => {document.querySelector(\'mat-icon[class*="adf-file-uploading-row__action"]\').click();}, 1000)'); + await contentServicesPage.versionManagerContent(txtFileModel.name); + await browser.executeScript(' setTimeout(() => {document.querySelector(\'mat-icon[class*="adf-file-uploading-row__action"]\').click();}, 1000)'); - versionManagePage.showNewVersionButton.click(); - versionManagePage.uploadNewVersionFile(bigFileToCancel.location); - versionManagePage.closeVersionDialog(); + await BrowserActions.click(versionManagePage.showNewVersionButton); - await expect(new UploadDialog().getTitleText()).toEqual('Upload canceled'); + await versionManagePage.uploadNewVersionFile(bigFileToCancel.location); + await versionManagePage.closeVersionDialog(); + + await expect(await uploadDialog.getTitleText()).toEqual('Upload canceled'); await browser.refresh(); - navigationBarPage.clickContentServicesButton(); + await navigationBarPage.clickContentServicesButton(); await contentServicesPage.waitForTableBody(); - contentServicesPage.checkContentIsDisplayed(txtFileModel.name); + await contentServicesPage.checkContentIsDisplayed(txtFileModel.name); }); }); diff --git a/e2e/content-services/version/version-permissions.e2e.ts b/e2e/content-services/version/version-permissions.e2e.ts index 2c807b432e..1869d9a9a2 100644 --- a/e2e/content-services/version/version-permissions.e2e.ts +++ b/e2e/content-services/version/version-permissions.e2e.ts @@ -69,7 +69,7 @@ describe('Version component permissions', () => { const uploadActions = new UploadActions(this.alfrescoJsApi); const nodeActions = new NodeActions(); - beforeAll(async (done) => { + beforeAll(async () => { await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); await this.alfrescoJsApi.core.peopleApi.addPerson(acsUser); @@ -117,8 +117,6 @@ describe('Version component permissions', () => { await this.alfrescoJsApi.login(fileCreatorUser.id, fileCreatorUser.password); await uploadActions.uploadFile(differentCreatorFile.location, differentCreatorFile.name, site.entry.guid); - - done(); }); describe('Manager', () => { @@ -128,7 +126,7 @@ describe('Version component permissions', () => { 'location': resources.Files.ADF_DOCUMENTS.PNG.file_location }); - beforeAll(async (done) => { + beforeAll(async () => { await this.alfrescoJsApi.login(managerUser.id, managerUser.password); const sameCreatorFileUploaded = await uploadActions.uploadFile(sameCreatorFile.location, sameCreatorFile.name, site.entry.guid); @@ -136,70 +134,63 @@ describe('Version component permissions', () => { await loginPage.loginToContentServicesUsingUserModel(managerUser); - navigationBarPage.openContentServicesFolder(site.entry.guid); - - done(); + await navigationBarPage.openContentServicesFolder(site.entry.guid); }); - afterAll(async (done) => { - await navigationBarPage.clickLogoutButton(); - + afterAll(async () => { await this.alfrescoJsApi.nodes.deleteNode(sameCreatorFile.id); - done(); + await navigationBarPage.clickLogoutButton(); }); - it('[C277200] should a user with Manager permission be able to upload a new version for a file with different creator', () => { - contentServices.versionManagerContent(differentCreatorFile.name); + it('[C277200] should a user with Manager permission be able to upload a new version for a file with different creator', async () => { + await contentServices.versionManagerContent(differentCreatorFile.name); - BrowserActions.click(versionManagePage.showNewVersionButton); + await BrowserActions.click(versionManagePage.showNewVersionButton); - versionManagePage.uploadNewVersionFile(newVersionFile.location); + await versionManagePage.uploadNewVersionFile(newVersionFile.location); - versionManagePage.checkFileVersionExist('1.1'); - expect(versionManagePage.getFileVersionName('1.1')).toEqual(newVersionFile.name); - expect(versionManagePage.getFileVersionDate('1.1')).not.toBeUndefined(); + await versionManagePage.checkFileVersionExist('1.1'); + await expect(await versionManagePage.getFileVersionName('1.1')).toEqual(newVersionFile.name); + await expect(await versionManagePage.getFileVersionDate('1.1')).not.toBeUndefined(); - versionManagePage.deleteFileVersion('1.1'); - versionManagePage.clickAcceptConfirm(); + await versionManagePage.deleteFileVersion('1.1'); + await versionManagePage.clickAcceptConfirm(); - versionManagePage.checkFileVersionNotExist('1.1'); + await versionManagePage.checkFileVersionNotExist('1.1'); - versionManagePage.closeVersionDialog(); + await versionManagePage.closeVersionDialog(); - uploadDialog.clickOnCloseButton(); + await uploadDialog.clickOnCloseButton(); }); - it('[C277204] Should be disabled the option for locked file', () => { - contentServices.getDocumentList().rightClickOnRow(lockFileModel.name); - const actionVersion = contentServices.checkContextActionIsVisible('Manage versions'); - expect(actionVersion.isEnabled()).toBeFalsy(); + it('[C277204] Should be disabled the option for locked file', async () => { + await contentServices.getDocumentList().rightClickOnRow(lockFileModel.name); + await expect(await contentServices.isContextActionEnabled('Manage versions')).toBe(false, 'Manage versions is enabled'); }); }); describe('Consumer', () => { - beforeAll(async (done) => { + beforeAll(async () => { await loginPage.loginToContentServicesUsingUserModel(consumerUser); - navigationBarPage.openContentServicesFolder(site.entry.guid); + await navigationBarPage.openContentServicesFolder(site.entry.guid); - done(); }); afterAll(async () => { await navigationBarPage.clickLogoutButton(); }); - it('[C277197] Should a user with Consumer permission not be able to upload a new version for a file with different creator', () => { - contentServices.versionManagerContent(differentCreatorFile.name); + it('[C277197] Should a user with Consumer permission not be able to upload a new version for a file with different creator', async () => { + await contentServices.versionManagerContent(differentCreatorFile.name); - notificationHistoryPage.checkNotifyContains(`You don't have access to do this`); + await notificationHistoryPage.checkNotifyContains(`You don't have access to do this`); }); - it('[C277201] Should a user with Consumer permission not be able to upload a new version for a locked file', () => { - contentServices.getDocumentList().rightClickOnRow(lockFileModel.name); - const actionVersion = contentServices.checkContextActionIsVisible('Manage versions'); - expect(actionVersion.isEnabled()).toBeFalsy(); + it('[C277201] Should a user with Consumer permission not be able to upload a new version for a locked file', async () => { + await contentServices.getDocumentList().rightClickOnRow(lockFileModel.name); + await expect(await contentServices.isContextActionEnabled('Manage versions')).toBe(false, 'Manage version is enabled'); }); }); @@ -210,7 +201,7 @@ describe('Version component permissions', () => { 'location': resources.Files.ADF_DOCUMENTS.PNG.file_location }); - beforeAll(async (done) => { + beforeAll(async () => { await this.alfrescoJsApi.login(contributorUser.id, contributorUser.password); const sameCreatorFileUploaded = await uploadActions.uploadFile(sameCreatorFile.location, sameCreatorFile.name, site.entry.guid); @@ -218,49 +209,45 @@ describe('Version component permissions', () => { await loginPage.loginToContentServicesUsingUserModel(contributorUser); - navigationBarPage.openContentServicesFolder(site.entry.guid); + await navigationBarPage.openContentServicesFolder(site.entry.guid); - done(); }); - afterAll(async (done) => { - await navigationBarPage.clickLogoutButton(); - + afterAll(async () => { await this.alfrescoJsApi.nodes.deleteNode(sameCreatorFile.id); - done(); + await navigationBarPage.clickLogoutButton(); }); - it('[C277177] Should a user with Contributor permission be able to upload a new version for the created file', () => { - contentServices.versionManagerContent(sameCreatorFile.name); + it('[C277177] Should a user with Contributor permission be able to upload a new version for the created file', async () => { + await contentServices.versionManagerContent(sameCreatorFile.name); - BrowserActions.click(versionManagePage.showNewVersionButton); + await BrowserActions.click(versionManagePage.showNewVersionButton); - versionManagePage.uploadNewVersionFile(newVersionFile.location); + await versionManagePage.uploadNewVersionFile(newVersionFile.location); - versionManagePage.checkFileVersionExist('1.1'); - expect(versionManagePage.getFileVersionName('1.1')).toEqual(newVersionFile.name); - expect(versionManagePage.getFileVersionDate('1.1')).not.toBeUndefined(); + await versionManagePage.checkFileVersionExist('1.1'); + await expect(await versionManagePage.getFileVersionName('1.1')).toEqual(newVersionFile.name); + await expect(await versionManagePage.getFileVersionDate('1.1')).not.toBeUndefined(); - versionManagePage.deleteFileVersion('1.1'); - versionManagePage.clickAcceptConfirm(); + await versionManagePage.deleteFileVersion('1.1'); + await versionManagePage.clickAcceptConfirm(); - versionManagePage.checkFileVersionNotExist('1.1'); + await versionManagePage.checkFileVersionNotExist('1.1'); - versionManagePage.closeVersionDialog(); + await versionManagePage.closeVersionDialog(); - uploadDialog.clickOnCloseButton(); + await uploadDialog.clickOnCloseButton(); }); - it('[C277198] Should a user with Contributor permission not be able to upload a new version for a file with different creator', () => { - contentServices.versionManagerContent(differentCreatorFile.name); + it('[C277198] Should a user with Contributor permission not be able to upload a new version for a file with different creator', async () => { + await contentServices.versionManagerContent(differentCreatorFile.name); - notificationHistoryPage.checkNotifyContains(`You don't have access to do this`); + await notificationHistoryPage.checkNotifyContains(`You don't have access to do this`); }); - it('[C277202] Should be disabled the option for a locked file', () => { - contentServices.getDocumentList().rightClickOnRow(lockFileModel.name); - const actionVersion = contentServices.checkContextActionIsVisible('Manage versions'); - expect(actionVersion.isEnabled()).toBeFalsy(); + it('[C277202] Should be disabled the option for a locked file', async () => { + await contentServices.getDocumentList().rightClickOnRow(lockFileModel.name); + await expect(await contentServices.isContextActionEnabled('Manage versions')).toBe(false, 'Manage versions is enabled'); }); }); @@ -270,7 +257,7 @@ describe('Version component permissions', () => { 'location': resources.Files.ADF_DOCUMENTS.PNG.file_location }); - beforeAll(async (done) => { + beforeAll(async () => { await this.alfrescoJsApi.login(collaboratorUser.id, collaboratorUser.password); const sameCreatorFileUploaded = await uploadActions.uploadFile(sameCreatorFile.location, sameCreatorFile.name, site.entry.guid); @@ -278,62 +265,59 @@ describe('Version component permissions', () => { await loginPage.loginToContentServicesUsingUserModel(collaboratorUser); - navigationBarPage.openContentServicesFolder(site.entry.guid); + await navigationBarPage.openContentServicesFolder(site.entry.guid); - done(); }); - afterAll(async (done) => { - await navigationBarPage.clickLogoutButton(); + afterAll(async () => { await this.alfrescoJsApi.nodes.deleteNode(sameCreatorFile.id); - done(); + await navigationBarPage.clickLogoutButton(); }); - it('[C277195] Should a user with Collaborator permission be able to upload a new version for the created file', () => { - contentServices.versionManagerContent(sameCreatorFile.name); + it('[C277195] Should a user with Collaborator permission be able to upload a new version for the created file', async () => { + await contentServices.versionManagerContent(sameCreatorFile.name); - BrowserActions.click(versionManagePage.showNewVersionButton); + await BrowserActions.click(versionManagePage.showNewVersionButton); - versionManagePage.uploadNewVersionFile(newVersionFile.location); + await versionManagePage.uploadNewVersionFile(newVersionFile.location); - versionManagePage.checkFileVersionExist('1.1'); - expect(versionManagePage.getFileVersionName('1.1')).toEqual(newVersionFile.name); - expect(versionManagePage.getFileVersionDate('1.1')).not.toBeUndefined(); + await versionManagePage.checkFileVersionExist('1.1'); + await expect(await versionManagePage.getFileVersionName('1.1')).toEqual(newVersionFile.name); + await expect(await versionManagePage.getFileVersionDate('1.1')).not.toBeUndefined(); - versionManagePage.deleteFileVersion('1.1'); - versionManagePage.clickAcceptConfirm(); + await versionManagePage.deleteFileVersion('1.1'); + await versionManagePage.clickAcceptConfirm(); - versionManagePage.checkFileVersionNotExist('1.1'); + await versionManagePage.checkFileVersionNotExist('1.1'); - versionManagePage.closeVersionDialog(); + await versionManagePage.closeVersionDialog(); - uploadDialog.clickOnCloseButton(); + await uploadDialog.clickOnCloseButton(); }); - it('[C277199] should a user with Collaborator permission be able to upload a new version for a file with different creator', () => { - contentServices.versionManagerContent(differentCreatorFile.name); + it('[C277199] should a user with Collaborator permission be able to upload a new version for a file with different creator', async () => { + await contentServices.versionManagerContent(differentCreatorFile.name); - BrowserActions.click(versionManagePage.showNewVersionButton); + await BrowserActions.click(versionManagePage.showNewVersionButton); - versionManagePage.uploadNewVersionFile(newVersionFile.location); + await versionManagePage.uploadNewVersionFile(newVersionFile.location); - versionManagePage.checkFileVersionExist('1.1'); - expect(versionManagePage.getFileVersionName('1.1')).toEqual(newVersionFile.name); - expect(versionManagePage.getFileVersionDate('1.1')).not.toBeUndefined(); + await versionManagePage.checkFileVersionExist('1.1'); + await expect(await versionManagePage.getFileVersionName('1.1')).toEqual(newVersionFile.name); + await expect(await versionManagePage.getFileVersionDate('1.1')).not.toBeUndefined(); - versionManagePage.clickActionButton('1.1'); + await versionManagePage.clickActionButton('1.1'); - expect(element(by.css(`[id="adf-version-list-action-delete-1.1"]`)).isEnabled()).toBe(false); + await expect(await element(by.css(`[id="adf-version-list-action-delete-1.1"]`)).isEnabled()).toBe(false); - versionManagePage.closeActionsMenu(); + await versionManagePage.closeActionsMenu(); - versionManagePage.closeVersionDialog(); + await versionManagePage.closeVersionDialog(); }); - it('[C277203] Should a user with Collaborator permission not be able to upload a new version for a locked file', () => { - contentServices.getDocumentList().rightClickOnRow(lockFileModel.name); - const actionVersion = contentServices.checkContextActionIsVisible('Manage versions'); - expect(actionVersion.isEnabled()).toBeFalsy(); + it('[C277203] Should a user with Collaborator permission not be able to upload a new version for a locked file', async () => { + await contentServices.getDocumentList().rightClickOnRow(lockFileModel.name); + await expect(await contentServices.isContextActionEnabled('Manage versions')).toBe(false, 'Manage versions is enabled'); }); }); diff --git a/e2e/content-services/version/version-properties.e2e.ts b/e2e/content-services/version/version-properties.e2e.ts index ea485c9c3b..b08e80da82 100644 --- a/e2e/content-services/version/version-properties.e2e.ts +++ b/e2e/content-services/version/version-properties.e2e.ts @@ -49,7 +49,7 @@ describe('Version Properties', () => { }); const uploadActions = new UploadActions(this.alfrescoJsApi); - beforeAll(async (done) => { + beforeAll(async () => { await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); @@ -65,73 +65,50 @@ describe('Version Properties', () => { await loginPage.loginToContentServicesUsingUserModel(acsUser); - navigationBarPage.clickContentServicesButton(); - contentServicesPage.waitForTableBody(); - contentServicesPage.versionManagerContent(txtFileModel.name); + await navigationBarPage.clickContentServicesButton(); + await contentServicesPage.waitForTableBody(); + await contentServicesPage.versionManagerContent(txtFileModel.name); - done(); }); - afterAll(async (done) => { - await navigationBarPage.clickLogoutButton(); - done(); + it('[C272817] Should NOT be present the download action when allowDownload property is false', async () => { + await versionManagePage.disableDownload(); + await versionManagePage.clickActionButton('1.0'); + await BrowserVisibility.waitUntilElementIsNotVisible(element(by.css(`[id="adf-version-list-action-download-1.0"]`))); + await versionManagePage.closeDisabledActionsMenu(); }); - it('[C272817] Should NOT be present the download action when allowDownload property is false', () => { - versionManagePage.disableDownload(); - - versionManagePage.clickActionButton('1.0'); - - BrowserVisibility.waitUntilElementIsNotVisible(element(by.css(`[id="adf-version-list-action-download-1.0"]`))); - - versionManagePage.closeDisabledActionsMenu(); + it('[C279992] Should be present the download action when allowDownload property is true', async () => { + await versionManagePage.enableDownload(); + await versionManagePage.clickActionButton('1.0'); + await BrowserVisibility.waitUntilElementIsVisible(element(by.css(`[id="adf-version-list-action-download-1.0"]`))); + await versionManagePage.closeActionsMenu(); }); - it('[C279992] Should be present the download action when allowDownload property is true', () => { - versionManagePage.enableDownload(); - - versionManagePage.clickActionButton('1.0'); - - BrowserVisibility.waitUntilElementIsVisible(element(by.css(`[id="adf-version-list-action-download-1.0"]`))); - - versionManagePage.closeActionsMenu(); + it('[C269085] Should show/hide comments when showComments true/false', async () => { + await versionManagePage.enableComments(); + await BrowserActions.click(versionManagePage.showNewVersionButton); + await versionManagePage.enterCommentText('Example comment text'); + await versionManagePage.uploadNewVersionFile(fileModelVersionTwo.location); + await versionManagePage.checkFileVersionExist('1.1'); + await expect(await versionManagePage.getFileVersionComment('1.1')).toEqual('Example comment text'); + await versionManagePage.disableComments(); + await BrowserVisibility.waitUntilElementIsNotVisible(element(by.css(`[id="adf-version-list-item-comment-1.1"]`))); }); - it('[C269085] Should show/hide comments when showComments true/false', () => { - versionManagePage.enableComments(); - - BrowserActions.click(versionManagePage.showNewVersionButton); - - versionManagePage.enterCommentText('Example comment text'); - versionManagePage.uploadNewVersionFile(fileModelVersionTwo.location); - - versionManagePage.checkFileVersionExist('1.1'); - expect(versionManagePage.getFileVersionComment('1.1')).toEqual('Example comment text'); - - versionManagePage.disableComments(); - - BrowserVisibility.waitUntilElementIsNotVisible(element(by.css(`[id="adf-version-list-item-comment-1.1"]`))); + it('[C277277] Should show/hide actions menu when readOnly is true/false', async () => { + await versionManagePage.disableReadOnly(); + await BrowserVisibility.waitUntilElementIsVisible(element(by.css(`[id="adf-version-list-action-menu-button-1.0"]`))); + await versionManagePage.enableReadOnly(); + await BrowserVisibility.waitUntilElementIsNotVisible(element(by.css(`[id="adf-version-list-action-menu-button-1.0"]`))); }); - it('[C277277] Should show/hide actions menu when readOnly is true/false', () => { - versionManagePage.disableReadOnly(); - - BrowserVisibility.waitUntilElementIsVisible(element(by.css(`[id="adf-version-list-action-menu-button-1.0"]`))); - - versionManagePage.enableReadOnly(); - - BrowserVisibility.waitUntilElementIsNotVisible(element(by.css(`[id="adf-version-list-action-menu-button-1.0"]`))); - }); - - it('[C279994] Should show/hide upload new version button when readOnly is true/false', () => { - versionManagePage.disableReadOnly(); - - BrowserVisibility.waitUntilElementIsVisible(versionManagePage.showNewVersionButton); - - versionManagePage.enableReadOnly(); - - BrowserVisibility.waitUntilElementIsNotVisible(versionManagePage.showNewVersionButton); - BrowserVisibility.waitUntilElementIsNotVisible(versionManagePage.uploadNewVersionButton); + it('[C279994] Should show/hide upload new version button when readOnly is true/false', async () => { + await versionManagePage.disableReadOnly(); + await BrowserVisibility.waitUntilElementIsVisible(versionManagePage.showNewVersionButton); + await versionManagePage.enableReadOnly(); + await BrowserVisibility.waitUntilElementIsNotVisible(versionManagePage.showNewVersionButton); + await BrowserVisibility.waitUntilElementIsNotVisible(versionManagePage.uploadNewVersionButton); }); }); diff --git a/e2e/content-services/version/version-smoke-tests.e2e.ts b/e2e/content-services/version/version-smoke-tests.e2e.ts index bfff41c072..bbf856fa67 100644 --- a/e2e/content-services/version/version-smoke-tests.e2e.ts +++ b/e2e/content-services/version/version-smoke-tests.e2e.ts @@ -17,7 +17,7 @@ import { browser } from 'protractor'; -import { LoginPage, UploadActions, BrowserVisibility } from '@alfresco/adf-testing'; +import { LoginPage, UploadActions, BrowserVisibility, BrowserActions } from '@alfresco/adf-testing'; import { ContentServicesPage } from '../../pages/adf/contentServicesPage'; import { VersionManagePage } from '../../pages/adf/versionManagerPage'; import { AcsUserModel } from '../../models/ACS/acsUserModel'; @@ -67,7 +67,7 @@ describe('Version component', () => { const uploadActions = new UploadActions(this.alfrescoJsApi); - beforeAll(async (done) => { + beforeAll(async () => { await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); await this.alfrescoJsApi.core.peopleApi.addPerson(acsUser); @@ -81,92 +81,82 @@ describe('Version component', () => { await loginPage.loginToContentServicesUsingUserModel(acsUser); - navigationBarPage.clickContentServicesButton(); - contentServicesPage.waitForTableBody(); - contentServicesPage.versionManagerContent(txtFileModel.name); + await navigationBarPage.clickContentServicesButton(); + await contentServicesPage.waitForTableBody(); + await contentServicesPage.versionManagerContent(txtFileModel.name); - done(); }); - afterAll(async (done) => { - await navigationBarPage.clickLogoutButton(); - done(); + it('[C272768] Should be visible the first file version when you upload a file', async () => { + await versionManagePage.checkUploadNewVersionsButtonIsDisplayed(); + + await versionManagePage.checkFileVersionExist('1.0'); + await expect(await versionManagePage.getFileVersionName('1.0')).toEqual(txtFileModel.name); + await expect(await versionManagePage.getFileVersionDate('1.0')).not.toBeUndefined(); }); - it('[C272768] Should be visible the first file version when you upload a file', () => { - versionManagePage.checkUploadNewVersionsButtonIsDisplayed(); + it('[C279995] Should show/hide the new upload file options when click on add New version/cancel button', async () => { + await BrowserActions.click(versionManagePage.showNewVersionButton); - versionManagePage.checkFileVersionExist('1.0'); - expect(versionManagePage.getFileVersionName('1.0')).toEqual(txtFileModel.name); - expect(versionManagePage.getFileVersionDate('1.0')).not.toBeUndefined(); + await BrowserVisibility.waitUntilElementIsVisible(versionManagePage.cancelButton); + await BrowserVisibility.waitUntilElementIsVisible(versionManagePage.majorRadio); + await BrowserVisibility.waitUntilElementIsVisible(versionManagePage.minorRadio); + await BrowserVisibility.waitUntilElementIsVisible(versionManagePage.cancelButton); + await BrowserVisibility.waitUntilElementIsVisible(versionManagePage.commentText); + await BrowserVisibility.waitUntilElementIsVisible(versionManagePage.uploadNewVersionButton); + + await BrowserActions.click(versionManagePage.cancelButton); + + await BrowserVisibility.waitUntilElementIsNotVisible(versionManagePage.cancelButton); + await BrowserVisibility.waitUntilElementIsNotVisible(versionManagePage.majorRadio); + await BrowserVisibility.waitUntilElementIsNotVisible(versionManagePage.minorRadio); + await BrowserVisibility.waitUntilElementIsNotVisible(versionManagePage.cancelButton); + await BrowserVisibility.waitUntilElementIsNotVisible(versionManagePage.commentText); + await BrowserVisibility.waitUntilElementIsNotVisible(versionManagePage.uploadNewVersionButton); + + await BrowserVisibility.waitUntilElementIsVisible(versionManagePage.showNewVersionButton); }); - it('[C279995] Should show/hide the new upload file options when click on add New version/cancel button', () => { - versionManagePage.showNewVersionButton.click(); + it('[C260244] Should show the version history when select a file with multiple version', async () => { + await BrowserActions.click(versionManagePage.showNewVersionButton); + await versionManagePage.uploadNewVersionFile(fileModelVersionTwo.location); - browser.driver.sleep(300); + await versionManagePage.checkFileVersionExist('1.0'); + await expect(await versionManagePage.getFileVersionName('1.0')).toEqual(txtFileModel.name); + await expect(await versionManagePage.getFileVersionDate('1.0')).not.toBeUndefined(); - BrowserVisibility.waitUntilElementIsVisible(versionManagePage.cancelButton); - BrowserVisibility.waitUntilElementIsVisible(versionManagePage.majorRadio); - BrowserVisibility.waitUntilElementIsVisible(versionManagePage.minorRadio); - BrowserVisibility.waitUntilElementIsVisible(versionManagePage.cancelButton); - BrowserVisibility.waitUntilElementIsVisible(versionManagePage.commentText); - BrowserVisibility.waitUntilElementIsVisible(versionManagePage.uploadNewVersionButton); - - versionManagePage.cancelButton.click(); - - browser.driver.sleep(300); - - BrowserVisibility.waitUntilElementIsNotVisible(versionManagePage.cancelButton); - BrowserVisibility.waitUntilElementIsNotVisible(versionManagePage.majorRadio); - BrowserVisibility.waitUntilElementIsNotVisible(versionManagePage.minorRadio); - BrowserVisibility.waitUntilElementIsNotVisible(versionManagePage.cancelButton); - BrowserVisibility.waitUntilElementIsNotVisible(versionManagePage.commentText); - BrowserVisibility.waitUntilElementIsNotVisible(versionManagePage.uploadNewVersionButton); - - BrowserVisibility.waitUntilElementIsVisible(versionManagePage.showNewVersionButton); + await versionManagePage.checkFileVersionExist('1.1'); + await expect(await versionManagePage.getFileVersionName('1.1')).toEqual(fileModelVersionTwo.name); + await expect(await versionManagePage.getFileVersionDate('1.1')).not.toBeUndefined(); }); - it('[C260244] Should show the version history when select a file with multiple version', () => { - versionManagePage.showNewVersionButton.click(); - versionManagePage.uploadNewVersionFile(fileModelVersionTwo.location); + it('[C269084] Should be possible add a comment when add a new version', async () => { + await BrowserActions.click(versionManagePage.showNewVersionButton); + await versionManagePage.enterCommentText('Example comment text'); + await versionManagePage.uploadNewVersionFile(fileModelVersionThree.location); - versionManagePage.checkFileVersionExist('1.0'); - expect(versionManagePage.getFileVersionName('1.0')).toEqual(txtFileModel.name); - expect(versionManagePage.getFileVersionDate('1.0')).not.toBeUndefined(); - - versionManagePage.checkFileVersionExist('1.1'); - expect(versionManagePage.getFileVersionName('1.1')).toEqual(fileModelVersionTwo.name); - expect(versionManagePage.getFileVersionDate('1.1')).not.toBeUndefined(); + await versionManagePage.checkFileVersionExist('1.2'); + await expect(await versionManagePage.getFileVersionName('1.2')).toEqual(fileModelVersionThree.name); + await expect(await versionManagePage.getFileVersionDate('1.2')).not.toBeUndefined(); + await expect(await versionManagePage.getFileVersionComment('1.2')).toEqual('Example comment text'); }); - it('[C269084] Should be possible add a comment when add a new version', () => { - versionManagePage.showNewVersionButton.click(); - versionManagePage.enterCommentText('Example comment text'); - versionManagePage.uploadNewVersionFile(fileModelVersionThree.location); + it('[C275719] Should be possible preview the file when you add a new version', async () => { + await BrowserActions.click(versionManagePage.showNewVersionButton); + await versionManagePage.clickMajorChange(); - versionManagePage.checkFileVersionExist('1.2'); - expect(versionManagePage.getFileVersionName('1.2')).toEqual(fileModelVersionThree.name); - expect(versionManagePage.getFileVersionDate('1.2')).not.toBeUndefined(); - expect(versionManagePage.getFileVersionComment('1.2')).toEqual('Example comment text'); - }); + await versionManagePage.uploadNewVersionFile(fileModelVersionFor.location); - it('[C275719] Should be possible preview the file when you add a new version', () => { - versionManagePage.showNewVersionButton.click(); - versionManagePage.clickMajorChange(); + await versionManagePage.checkFileVersionExist('2.0'); + await expect(await versionManagePage.getFileVersionName('2.0')).toEqual(fileModelVersionFor.name); - versionManagePage.uploadNewVersionFile(fileModelVersionFor.location); + await BrowserActions.click(versionManagePage.showNewVersionButton); + await versionManagePage.clickMinorChange(); - versionManagePage.checkFileVersionExist('2.0'); - expect(versionManagePage.getFileVersionName('2.0')).toEqual(fileModelVersionFor.name); + await versionManagePage.uploadNewVersionFile(fileModelVersionFive.location); - versionManagePage.showNewVersionButton.click(); - versionManagePage.clickMinorChange(); - - versionManagePage.uploadNewVersionFile(fileModelVersionFive.location); - - versionManagePage.checkFileVersionExist('2.1'); - expect(versionManagePage.getFileVersionName('2.1')).toEqual(fileModelVersionFive.name); + await versionManagePage.checkFileVersionExist('2.1'); + await expect(await versionManagePage.getFileVersionName('2.1')).toEqual(fileModelVersionFive.name); }); }); diff --git a/e2e/core/auth-guard/auth-guard-sso.e2e.ts b/e2e/core/auth-guard/auth-guard-sso.e2e.ts index 63555a91bd..d127109ac1 100644 --- a/e2e/core/auth-guard/auth-guard-sso.e2e.ts +++ b/e2e/core/auth-guard/auth-guard-sso.e2e.ts @@ -25,19 +25,16 @@ describe('Auth Guard SSO', () => { const errorPage = new ErrorPage(); it('[C307058] Should be redirected to 403 when user doesn\'t have permissions', async () => { - settingsPage.setProviderEcmSso(browser.params.testConfig.adf_acs.host, + await settingsPage.setProviderEcmSso(browser.params.testConfig.adf.url, browser.params.testConfig.adf.hostSso, browser.params.testConfig.adf.hostIdentity, false, true, browser.params.config.oauth2.clientId); - - browser.driver.sleep(5000); - - loginSSOPage.clickOnSSOButton(); - + await loginSSOPage.clickOnSSOButton(); await loginSSOPage.loginSSOIdentityService(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); - BrowserActions.getUrl(browser.params.testConfig.adf.url + '/cloud/simple-app'); - browser.driver.sleep(2000); - expect(errorPage.getErrorCode()).toBe('403'); + await BrowserActions.getUrl(browser.params.testConfig.adf.url + '/cloud/simple-app'); + await browser.sleep(1000); + const error = await errorPage.getErrorCode(); + await expect(error).toBe('403'); }); }); diff --git a/e2e/core/card-view/card-view-component.e2e.ts b/e2e/core/card-view/card-view-component.e2e.ts index c65b941d2f..1ee6ddde26 100644 --- a/e2e/core/card-view/card-view-component.e2e.ts +++ b/e2e/core/card-view/card-view-component.e2e.ts @@ -30,255 +30,241 @@ describe('CardView Component', () => { const cardViewPageComponent = new CardViewComponentPage(); const metadataViewPage = new MetadataViewPage(); - beforeAll(async (done) => { - loginPage.loginToContentServices(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); - navigationBarPage.clickCardViewButton(); + beforeAll(async () => { + await loginPage.loginToContentServices(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); + await navigationBarPage.clickCardViewButton(); - done(); }); afterAll(async () => { await navigationBarPage.clickLogoutButton(); }); - afterEach(() => { - cardViewPageComponent.clickOnResetButton(); + afterEach(async () => { + await cardViewPageComponent.clickOnResetButton(); }); describe('key-value pair ', () => { - it('[C279938] Should the label be present', () => { + it('[C279938] Should the label be present', async () => { const label = element(by.css('div[data-automation-id="card-key-value-pairs-label-key-value-pairs"]')); - BrowserVisibility.waitUntilElementIsPresent(label); + await BrowserVisibility.waitUntilElementIsPresent(label); }); - it('[C279898] Should be possible edit key-value pair properties', () => { - cardViewPageComponent.clickOnAddButton(); - cardViewPageComponent.setName('testName'); - cardViewPageComponent.setValue('testValue'); - cardViewPageComponent.clickOnAddButton(); - cardViewPageComponent.waitForOutput(); - expect(cardViewPageComponent.getOutputText(0)).toBe('[CardView Key-Value Pairs Item] - [{"name":"testName","value":"testValue"}]'); + it('[C279898] Should be possible edit key-value pair properties', async () => { + await cardViewPageComponent.clickOnAddButton(); + await cardViewPageComponent.setName('testName'); + await cardViewPageComponent.setValue('testValue'); + await cardViewPageComponent.clickOnAddButton(); + await cardViewPageComponent.waitForOutput(); + await expect(await cardViewPageComponent.getOutputText(0)).toBe('[CardView Key-Value Pairs Item] - [{"name":"testName","value":"testValue"}]'); - cardViewPageComponent.deletePairsValues(); + await cardViewPageComponent.deletePairsValues(); - expect(cardViewPageComponent.getOutputText(1)).toBe('[CardView Key-Value Pairs Item] - []'); + await expect(await cardViewPageComponent.getOutputText(1)).toBe('[CardView Key-Value Pairs Item] - []'); }); }); describe('SelectBox', () => { - it('[C279939] Should the label be present', () => { + it('[C279939] Should the label be present', async () => { const label = element(by.css('div[data-automation-id="card-select-label-select"]')); - BrowserVisibility.waitUntilElementIsPresent(label); + await BrowserVisibility.waitUntilElementIsPresent(label); }); - it('[C279899] Should be possible edit selectBox item', () => { - cardViewPageComponent.clickSelectBox(); - cardViewPageComponent.selectValueFromComboBox(1); + it('[C279899] Should be possible edit selectBox item', async () => { + await cardViewPageComponent.clickSelectBox(); + await cardViewPageComponent.selectValueFromComboBox(1); - expect(cardViewPageComponent.getOutputText(0)) + await expect(await cardViewPageComponent.getOutputText(0)) .toBe('[CardView Select Item] - two'); }); }); describe('Text', () => { - it('[C279937] Should the label be present', () => { + it('[C279937] Should the label be present', async () => { const label = element(by.css('div[data-automation-id="card-textitem-label-name"]')); - BrowserVisibility.waitUntilElementIsPresent(label); + await BrowserVisibility.waitUntilElementIsPresent(label); }); - it('[C279943] Should be present a default value', () => { - expect(cardViewPageComponent.getTextFieldText()).toBe('Spock'); + it('[C279943] Should be present a default value', async () => { + await expect(await cardViewPageComponent.getTextFieldText()).toBe('Spock'); }); - it('[C279934] Should be possible edit text item', () => { - cardViewPageComponent - .clickOnTextField() - .enterTextField('example') - .clickOnTextSaveIcon(); + it('[C279934] Should be possible edit text item', async () => { + await cardViewPageComponent.clickOnTextField(); + await cardViewPageComponent.enterTextField('example'); + await cardViewPageComponent.clickOnTextSaveIcon(); - expect(cardViewPageComponent.getOutputText(0)).toBe('[CardView Text Item] - example'); + await expect(await cardViewPageComponent.getOutputText(0)).toBe('[CardView Text Item] - example'); }); - it('[C279944] Should be possible undo text item modify when click on the clear button', () => { - cardViewPageComponent - .clickOnTextField() - .enterTextField('example') - .clickOnTextClearIcon(); + it('[C279944] Should be possible undo text item modify when click on the clear button', async () => { + await cardViewPageComponent.clickOnTextField(); + await cardViewPageComponent.enterTextField('example'); + await cardViewPageComponent.clickOnTextClearIcon(); - expect(cardViewPageComponent.getTextFieldText()).toBe('Spock'); + await expect(await cardViewPageComponent.getTextFieldText()).toBe('Spock'); }); }); describe('Int', () => { - it('[C279940] Should the label be present', () => { + it('[C279940] Should the label be present', async () => { const label = element(by.css('div[data-automation-id="card-textitem-label-int"]')); - BrowserVisibility.waitUntilElementIsPresent(label); + await BrowserVisibility.waitUntilElementIsPresent(label); }); - it('[C279945] Should be present a default value', () => { - expect(cardViewPageComponent.getIntFieldText()).toBe('213'); + it('[C279945] Should be present a default value', async () => { + await expect(await cardViewPageComponent.getIntFieldText()).toBe('213'); }); - it('[C279946] Should be possible edit int item', () => { - cardViewPageComponent - .clickOnIntField() - .enterIntField('99999') - .clickOnIntSaveIcon(); + it('[C279946] Should be possible edit int item', async () => { + await cardViewPageComponent.clickOnIntField(); + await cardViewPageComponent.enterIntField('99999'); + await cardViewPageComponent.clickOnIntSaveIcon(); - expect(cardViewPageComponent.getOutputText(0)).toBe('[CardView Int Item] - 99999'); + await expect(await cardViewPageComponent.getOutputText(0)).toBe('[CardView Int Item] - 99999'); }); - it('[C279947] Should not be possible add string value to the int item', () => { - cardViewPageComponent - .clickOnIntField() - .enterIntField('string value') - .clickOnIntSaveIcon(); + it('[C279947] Should not be possible add string value to the int item', async () => { + await cardViewPageComponent.clickOnIntField(); + await cardViewPageComponent.enterIntField('string value'); + await cardViewPageComponent.clickOnIntSaveIcon(); - expect(cardViewPageComponent.getErrorInt()).toBe('Use an integer format'); + await expect(await cardViewPageComponent.getErrorInt()).toBe('Use an integer format'); }); - it('[C279948] Should not be possible add float value to the int item', () => { - cardViewPageComponent - .clickOnIntField() - .enterIntField('0.22') - .clickOnIntSaveIcon(); + it('[C279948] Should not be possible add float value to the int item', async () => { + await cardViewPageComponent.clickOnIntField(); + await cardViewPageComponent.enterIntField('0.22'); + await cardViewPageComponent.clickOnIntSaveIcon(); - expect(cardViewPageComponent.getErrorInt()).toBe('Use an integer format'); + await expect(await cardViewPageComponent.getErrorInt()).toBe('Use an integer format'); }); - it('[C279949] Should not be possible have an empty value', () => { - cardViewPageComponent - .clickOnIntField() - .enterIntField(' ') - .clickOnIntSaveIcon(); + it('[C279949] Should not be possible have an empty value', async () => { + await cardViewPageComponent.clickOnIntField(); + await cardViewPageComponent.enterIntField(' '); + await cardViewPageComponent.clickOnIntSaveIcon(); - expect(cardViewPageComponent.getErrorInt()).toBe('Use an integer format'); + await expect(await cardViewPageComponent.getErrorInt()).toBe('Use an integer format'); }); - it('[C279950] Should return an error when the value is > 2147483647', () => { - cardViewPageComponent - .clickOnIntField() - .enterIntField('214748367') - .clickOnIntSaveIcon(); + it('[C279950] Should return an error when the value is > 2147483647', async () => { + await cardViewPageComponent.clickOnIntField(); + await cardViewPageComponent.enterIntField('214748367'); + await cardViewPageComponent.clickOnIntSaveIcon(); - expect(cardViewPageComponent.getOutputText(0)).toBe('[CardView Int Item] - 214748367'); + await expect(await cardViewPageComponent.getOutputText(0)).toBe('[CardView Int Item] - 214748367'); - cardViewPageComponent - .clickOnIntField() - .enterIntField('2147483648') - .clickOnIntSaveIcon(); + await cardViewPageComponent.clickOnIntField(); + await cardViewPageComponent.enterIntField('2147483648'); + await cardViewPageComponent.clickOnIntSaveIcon(); - expect(cardViewPageComponent.getErrorInt()).toBe('Use an integer format'); + await expect(await cardViewPageComponent.getErrorInt()).toBe('Use an integer format'); }); - it('[C279951] Should be possible undo item modify when click on the clear button', () => { - cardViewPageComponent - .clickOnIntField() - .enterIntField('999') - .clickOnIntClearIcon(); + it('[C279951] Should be possible undo item modify when click on the clear button', async () => { + await cardViewPageComponent.clickOnIntField(); + await cardViewPageComponent.enterIntField('999'); + await cardViewPageComponent.clickOnIntClearIcon(); - expect(cardViewPageComponent.getIntFieldText()).toBe('213'); + await expect(await cardViewPageComponent.getIntFieldText()).toBe('213'); }); }); describe('Float', () => { - it('[C279941] Should the label be present', () => { + it('[C279941] Should the label be present', async () => { const label = element(by.css('div[data-automation-id="card-textitem-label-float"]')); - BrowserVisibility.waitUntilElementIsPresent(label); + await BrowserVisibility.waitUntilElementIsPresent(label); }); - it('[C279952] Should be present a default value', () => { - expect(cardViewPageComponent.getFloatFieldText()).toBe('9.9'); + it('[C279952] Should be present a default value', async () => { + await expect(await cardViewPageComponent.getFloatFieldText()).toBe('9.9'); }); - it('[C279953] Should be possible edit float item', () => { - cardViewPageComponent - .clickOnFloatField() - .enterFloatField('77.33') - .clickOnFloatSaveIcon(); + it('[C279953] Should be possible edit float item', async () => { + await cardViewPageComponent.clickOnFloatField(); + await cardViewPageComponent.enterFloatField('77.33'); + await cardViewPageComponent.clickOnFloatSaveIcon(); - expect(cardViewPageComponent.getOutputText(0)).toBe('[CardView Float Item] - 77.33'); + await expect(await cardViewPageComponent.getOutputText(0)).toBe('[CardView Float Item] - 77.33'); }); - it('[C279954] Should not be possible add string value to the float item', () => { - cardViewPageComponent - .clickOnFloatField() - .enterFloatField('string value') - .clickOnFloatSaveIcon(); + it('[C279954] Should not be possible add string value to the float item', async () => { + await cardViewPageComponent.clickOnFloatField(); + await cardViewPageComponent.enterFloatField('string value'); + await cardViewPageComponent.clickOnFloatSaveIcon(); - expect(cardViewPageComponent.getErrorFloat()).toBe('Use a number format'); + await expect(await cardViewPageComponent.getErrorFloat()).toBe('Use a number format'); }); - it('[C279955] Should be possible undo item item modify when click on the clear button', () => { - cardViewPageComponent - .clickOnFloatField() - .enterFloatField('77.33') - .clickOnFloatClearIcon(); + it('[C279955] Should be possible undo item item modify when click on the clear button', async () => { + await cardViewPageComponent.clickOnFloatField(); + await cardViewPageComponent.enterFloatField('77.33'); + await cardViewPageComponent.clickOnFloatClearIcon(); - expect(cardViewPageComponent.getFloatFieldText()).toBe('9.9'); + await expect(await cardViewPageComponent.getFloatFieldText()).toBe('9.9'); }); - it('[C279956] Should not be possible have an empty value', () => { - cardViewPageComponent - .clickOnFloatField() - .enterFloatField(' ') - .clickOnFloatSaveIcon(); + it('[C279956] Should not be possible have an empty value', async () => { + await cardViewPageComponent.clickOnFloatField(); + await cardViewPageComponent.enterFloatField(' '); + await cardViewPageComponent.clickOnFloatSaveIcon(); - expect(cardViewPageComponent.getErrorFloat()).toBe('Use a number format'); + await expect(await cardViewPageComponent.getErrorFloat()).toBe('Use a number format'); }); }); describe('Boolean', () => { - it('[C279942] Should the label be present', () => { + it('[C279942] Should the label be present', async () => { const label = element(by.css('div[data-automation-id="card-boolean-label-boolean"]')); - BrowserVisibility.waitUntilElementIsPresent(label); + await BrowserVisibility.waitUntilElementIsPresent(label); }); - it('[C279957] Should be possible edit the checkbox value when click on it', () => { - cardViewPageComponent.checkboxClick(); + it('[C279957] Should be possible edit the checkbox value when click on it', async () => { + await cardViewPageComponent.checkboxClick(); - expect(cardViewPageComponent.getOutputText(0)).toBe('[CardView Boolean Item] - false'); + await expect(await cardViewPageComponent.getOutputText(0)).toBe('[CardView Boolean Item] - false'); - cardViewPageComponent.checkboxClick(); + await cardViewPageComponent.checkboxClick(); - expect(cardViewPageComponent.getOutputText(1)).toBe('[CardView Boolean Item] - true'); + await expect(await cardViewPageComponent.getOutputText(1)).toBe('[CardView Boolean Item] - true'); }); }); describe('Date and DateTime', () => { - it('[C279961] Should the label be present', () => { + it('[C279961] Should the label be present', async () => { const labelDate = element(by.css('div[data-automation-id="card-dateitem-label-date"]')); - BrowserVisibility.waitUntilElementIsPresent(labelDate); + await BrowserVisibility.waitUntilElementIsPresent(labelDate); const labelDatetime = element(by.css('div[data-automation-id="card-dateitem-label-datetime"]')); - BrowserVisibility.waitUntilElementIsPresent(labelDatetime); + await BrowserVisibility.waitUntilElementIsPresent(labelDatetime); }); - it('[C279962] Should be present a default value', () => { - expect(metadataViewPage.getPropertyText('date', 'date')).toEqual('12/24/83'); - expect(metadataViewPage.getPropertyText('datetime', 'datetime')).toEqual('Dec 24, 1983, 10:00'); + it('[C279962] Should be present a default value', async () => { + await expect(await metadataViewPage.getPropertyText('date', 'date')).toEqual('12/24/83'); + await expect(await metadataViewPage.getPropertyText('datetime', 'datetime')).toEqual('Dec 24, 1983, 10:00'); }); }); - it('[C279936] Should not be possible edit any parameter when editable property is false', () => { - cardViewPageComponent.disableEdit(); + it('[C279936] Should not be possible edit any parameter when editable property is false', async () => { + await cardViewPageComponent.disableEdit(); const editIconText = element(by.css('mat-icon[data-automation-id="card-textitem-edit-icon-name"]')); const editIconInt = element(by.css('mat-icon[data-automation-id="card-textitem-edit-icon-int"]')); @@ -286,10 +272,10 @@ describe('CardView Component', () => { const editIconKey = element(by.css('mat-icon[data-automation-id="card-key-value-pairs-button-key-value-pairs"]')); const editIconData = element(by.css('mat-datetimepicker-toggle')); - BrowserVisibility.waitUntilElementIsNotVisible(editIconText); - BrowserVisibility.waitUntilElementIsNotVisible(editIconInt); - BrowserVisibility.waitUntilElementIsNotVisible(editIconFloat); - BrowserVisibility.waitUntilElementIsNotVisible(editIconKey); - BrowserVisibility.waitUntilElementIsNotVisible(editIconData); + await BrowserVisibility.waitUntilElementIsNotVisible(editIconText); + await BrowserVisibility.waitUntilElementIsNotVisible(editIconInt); + await BrowserVisibility.waitUntilElementIsNotVisible(editIconFloat); + await BrowserVisibility.waitUntilElementIsNotVisible(editIconKey); + await BrowserVisibility.waitUntilElementIsNotVisible(editIconData); }); }); diff --git a/e2e/core/datatable/data-table-component-selection.e2e.ts b/e2e/core/datatable/data-table-component-selection.e2e.ts index 74c32aa723..4076a90575 100644 --- a/e2e/core/datatable/data-table-component-selection.e2e.ts +++ b/e2e/core/datatable/data-table-component-selection.e2e.ts @@ -32,7 +32,7 @@ describe('Datatable component - selection', () => { const navigationBarPage = new NavigationBarPage(); const dataTableComponent = new DataTableComponentPage(); - beforeAll(async (done) => { + beforeAll(async () => { this.alfrescoJsApi = new AlfrescoApi({ provider: 'ECM', hostEcm: browser.params.testConfig.adf_acs.host @@ -46,60 +46,59 @@ describe('Datatable component - selection', () => { await navigationBarPage.navigateToDatatable(); - done(); }); afterAll(async () => { await navigationBarPage.clickLogoutButton(); }); - it('[C213258] Should be possible change the selection modes when change the selectionMode property', () => { - dataTablePage.selectRow('2'); - dataTableComponent.checkRowIsSelected('Id', '2'); - expect(dataTablePage.getNumberOfSelectedRows()).toEqual(1); - dataTablePage.selectRow('3'); - dataTableComponent.checkRowIsSelected('Id', '3'); - expect(dataTablePage.getNumberOfSelectedRows()).toEqual(1); - dataTablePage.selectSelectionMode('Multiple'); - dataTablePage.selectRow('1'); - dataTableComponent.checkRowIsSelected('Id', '1'); - dataTablePage.selectRowWithKeyboard('3'); - dataTableComponent.checkRowIsSelected('Id', '1'); - dataTableComponent.checkRowIsSelected('Id', '3'); - dataTablePage.checkRowIsNotSelected('2'); - dataTablePage.checkRowIsNotSelected('4'); - dataTablePage.selectSelectionMode('None'); - dataTablePage.selectRow('1'); - dataTablePage.checkNoRowIsSelected(); + it('[C213258] Should be possible change the selection modes when change the selectionMode property', async () => { + await dataTablePage.selectRow('2'); + await dataTableComponent.checkRowIsSelected('Id', '2'); + await expect(await dataTablePage.getNumberOfSelectedRows()).toEqual(1); + await dataTablePage.selectRow('3'); + await dataTableComponent.checkRowIsSelected('Id', '3'); + await expect(await dataTablePage.getNumberOfSelectedRows()).toEqual(1); + await dataTablePage.selectSelectionMode('Multiple'); + await dataTablePage.selectRow('1'); + await dataTableComponent.checkRowIsSelected('Id', '1'); + await dataTablePage.selectRowWithKeyboard('3'); + await dataTableComponent.checkRowIsSelected('Id', '1'); + await dataTableComponent.checkRowIsSelected('Id', '3'); + await dataTablePage.checkRowIsNotSelected('2'); + await dataTablePage.checkRowIsNotSelected('4'); + await dataTablePage.selectSelectionMode('None'); + await dataTablePage.selectRow('1'); + await dataTablePage.checkNoRowIsSelected(); }); - it('[C260059] Should be possible select multiple row when multiselect is true', () => { - dataTablePage.clickMultiSelect(); - dataTablePage.clickCheckbox('1'); - dataTablePage.checkRowIsChecked('1'); - dataTablePage.clickCheckbox('3'); - dataTablePage.checkRowIsChecked('3'); - dataTablePage.checkRowIsNotChecked('2'); - dataTablePage.checkRowIsNotChecked('4'); - dataTablePage.clickCheckbox('3'); - dataTablePage.checkRowIsNotChecked('3'); - dataTablePage.checkRowIsChecked('1'); + it('[C260059] Should be possible select multiple row when multiselect is true', async () => { + await dataTablePage.clickMultiSelect(); + await dataTablePage.clickCheckbox('1'); + await dataTablePage.checkRowIsChecked('1'); + await dataTablePage.clickCheckbox('3'); + await dataTablePage.checkRowIsChecked('3'); + await dataTablePage.checkRowIsNotChecked('2'); + await dataTablePage.checkRowIsNotChecked('4'); + await dataTablePage.clickCheckbox('3'); + await dataTablePage.checkRowIsNotChecked('3'); + await dataTablePage.checkRowIsChecked('1'); }); - it('[C260058] Should be possible select all the rows when multiselect is true', () => { - dataTablePage.checkAllRows(); - dataTablePage.checkRowIsChecked('1'); - dataTablePage.checkRowIsChecked('2'); - dataTablePage.checkRowIsChecked('3'); - dataTablePage.checkRowIsChecked('4'); + it('[C260058] Should be possible select all the rows when multiselect is true', async () => { + await dataTablePage.checkAllRows(); + await dataTablePage.checkRowIsChecked('1'); + await dataTablePage.checkRowIsChecked('2'); + await dataTablePage.checkRowIsChecked('3'); + await dataTablePage.checkRowIsChecked('4'); }); - it('[C277262] Should be possible reset the selected row when click on the reset button', () => { - dataTablePage.checkRowIsChecked('1'); - dataTablePage.checkRowIsChecked('2'); - dataTablePage.checkRowIsChecked('3'); - dataTablePage.checkRowIsChecked('4'); - dataTablePage.clickReset(); - dataTablePage.checkNoRowIsSelected(); + it('[C277262] Should be possible reset the selected row when click on the reset button', async () => { + await dataTablePage.checkRowIsChecked('1'); + await dataTablePage.checkRowIsChecked('2'); + await dataTablePage.checkRowIsChecked('3'); + await dataTablePage.checkRowIsChecked('4'); + await dataTablePage.clickReset(); + await dataTablePage.checkNoRowIsSelected(); }); }); diff --git a/e2e/core/datatable/data-table-component.e2e.ts b/e2e/core/datatable/data-table-component.e2e.ts index 1aeff582d0..19f53b63a5 100644 --- a/e2e/core/datatable/data-table-component.e2e.ts +++ b/e2e/core/datatable/data-table-component.e2e.ts @@ -43,7 +43,7 @@ describe('Datatable component', () => { 'location': resources.Files.ADF_DOCUMENTS.PNG.file_location }); - beforeAll(async (done) => { + beforeAll(async () => { this.alfrescoJsApi = new AlfrescoApi({ provider: 'ECM', hostEcm: browser.params.testConfig.adf_acs.host @@ -55,7 +55,6 @@ describe('Datatable component', () => { await loginPage.loginToContentServicesUsingUserModel(acsUser); - done(); }); afterAll(async () => { @@ -64,151 +63,153 @@ describe('Datatable component', () => { describe('Datatable component', () => { - beforeAll(async (done) => { - navigationBarPage.navigateToDatatable(); - - done(); + beforeAll(async () => { + await navigationBarPage.navigateToDatatable(); + await dataTablePage.dataTable.waitForTableBody(); }); - beforeEach(async (done) => { - dataTablePage.clickReset(); - done(); + beforeEach(async () => { + await dataTablePage.clickReset(); }); - it('[C91314] Should be possible add new row to the table', () => { - dataTableComponent.numberOfRows().then((result) => { - dataTablePage.addRow(); - expect(dataTableComponent.numberOfRows()).toEqual(result + 1); - dataTablePage.addRow(); - expect(dataTableComponent.numberOfRows()).toEqual(result + 2); - }); + it('[C91314] Should be possible add new row to the table', async () => { + const result = await dataTableComponent.numberOfRows(); + await dataTablePage.addRow(); + await expect(await dataTableComponent.numberOfRows()).toEqual(result + 1); + await dataTablePage.addRow(); + await expect(await dataTableComponent.numberOfRows()).toEqual(result + 2); }); - it('[C260039] Should be possible replace rows', () => { - dataTablePage.replaceRows(1); + it('[C260039] Should be possible replace rows', async () => { + await dataTablePage.replaceRows(1); }); - it('[C260041] Should be possible replace columns', () => { - dataTablePage.replaceColumns(); + it('[C260041] Should be possible replace columns', async () => { + await dataTablePage.replaceColumns(); }); - it('[C277314] Should filter the table rows when the input filter is passed', () => { - dataTablePage.replaceRows(1); - dataTablePage.replaceColumns(); - expect(dataTableComponent.numberOfRows()).toEqual(4); - dataTablePage.insertFilter('Name'); - expect(dataTableComponent.numberOfRows()).toEqual(3); - dataTablePage.insertFilter('I'); - expect(dataTableComponent.numberOfRows()).toEqual(1); + it('[C277314] Should filter the table rows when the input filter is passed', async () => { + await dataTablePage.replaceRows(1); + await dataTablePage.replaceColumns(); + await expect(await dataTableComponent.numberOfRows()).toEqual(4); + await dataTablePage.insertFilter('Name'); + await expect(await dataTableComponent.numberOfRows()).toEqual(3); + await dataTablePage.insertFilter('I'); + await expect(await dataTableComponent.numberOfRows()).toEqual(1); }); }); describe('Datatable component - copyContent', () => { - beforeAll(async (done) => { - navigationBarPage.navigateToCopyContentDatatable(); - done(); + beforeAll(async () => { + await navigationBarPage.navigateToCopyContentDatatable(); + await dataTablePage.dataTable.waitForTableBody(); + }); - it('[C307037] A tooltip is displayed when mouseOver a column with copyContent set to true', () => { - dataTablePage.mouseOverIdColumn('1'); - expect(dataTablePage.getCopyContentTooltip()).toEqual('Click to copy'); - dataTablePage.mouseOverNameColumn('Name 2'); - dataTablePage.dataTable.copyContentTooltipIsNotDisplayed(); + it('[C307037] A tooltip is displayed when mouseOver a column with copyContent set to true', async () => { + await dataTablePage.mouseOverIdColumn('1'); + await expect(await dataTablePage.getCopyContentTooltip()).toEqual('Click to copy'); + await dataTablePage.mouseOverNameColumn('Name 2'); + await dataTablePage.dataTable.copyContentTooltipIsNotDisplayed(); }); - it('[C307045] No tooltip is displayed when hover over a column with copyContent set to false', () => { - dataTablePage.mouseOverNameColumn('Name 2'); - dataTablePage.dataTable.copyContentTooltipIsNotDisplayed(); - dataTablePage.clickOnNameColumn('Name 2'); - notificationHistoryPage.checkNotifyNotContains('Name 2'); + it('[C307045] No tooltip is displayed when hover over a column with copyContent set to false', async () => { + await dataTablePage.mouseOverNameColumn('Name 2'); + await dataTablePage.dataTable.copyContentTooltipIsNotDisplayed(); + await dataTablePage.clickOnNameColumn('Name 2'); + await notificationHistoryPage.checkNotifyNotContains('Name 2'); }); - it('[C307046] No tooltip is displayed when hover over a column that has default value for copyContent property', () => { - dataTablePage.mouseOverCreatedByColumn('Created One'); - dataTablePage.dataTable.copyContentTooltipIsNotDisplayed(); - dataTablePage.clickOnCreatedByColumn('Created One'); - notificationHistoryPage.checkNotifyNotContains('Created One'); + it('[C307046] No tooltip is displayed when hover over a column that has default value for copyContent property', async () => { + await dataTablePage.mouseOverCreatedByColumn('Created One'); + await dataTablePage.dataTable.copyContentTooltipIsNotDisplayed(); + await dataTablePage.clickOnCreatedByColumn('Created One'); + await notificationHistoryPage.checkNotifyNotContains('Created One'); }); - it('[C307040] A column value with copyContent set to true is copied when clicking on it', () => { - dataTablePage.mouseOverIdColumn('1'); - expect(dataTablePage.getCopyContentTooltip()).toEqual('Click to copy'); - dataTablePage.clickOnIdColumn('1'); - notificationHistoryPage.checkNotifyContains('Text copied to clipboard'); - dataTablePage.clickOnIdColumn('2'); - notificationHistoryPage.checkNotifyContains('Text copied to clipboard'); - dataTablePage.pasteClipboard(); - expect(dataTablePage.getClipboardInputText()).toEqual('2'); + it('[C307040] A column value with copyContent set to true is copied when clicking on it', async () => { + await dataTablePage.mouseOverIdColumn('1'); + await expect(await dataTablePage.getCopyContentTooltip()).toEqual('Click to copy'); + await dataTablePage.clickOnIdColumn('1'); + await notificationHistoryPage.checkNotifyContains('Text copied to clipboard'); + await dataTablePage.clickOnIdColumn('2'); + await notificationHistoryPage.checkNotifyContains('Text copied to clipboard'); + await dataTablePage.pasteClipboard(); + await expect(await dataTablePage.getClipboardInputText()).toEqual('2'); }); - it('[C307072] A tooltip is displayed when mouseOver a column with copyContent set to true', () => { - copyContentDataTablePage.mouseOverIdColumn('1'); - expect(copyContentDataTablePage.getCopyContentTooltip()).toEqual('Click to copy'); - copyContentDataTablePage.mouseOverNameColumn('First'); - copyContentDataTablePage.dataTable.copyContentTooltipIsNotDisplayed(); + it('[C307072] A tooltip is displayed when mouseOver a column with copyContent set to true', async () => { + await copyContentDataTablePage.mouseOverIdColumn('1'); + await expect(await copyContentDataTablePage.getCopyContentTooltip()).toEqual('Click to copy'); + await copyContentDataTablePage.mouseOverNameColumn('First'); + await copyContentDataTablePage.dataTable.copyContentTooltipIsNotDisplayed(); }); - it('[C307074] No tooltip is displayed when hover over a column with copyContent set to false', () => { - copyContentDataTablePage.mouseOverNameColumn('Second'); - copyContentDataTablePage.dataTable.copyContentTooltipIsNotDisplayed(); - copyContentDataTablePage.clickOnNameColumn('Second'); - notificationHistoryPage.checkNotifyNotContains('Second'); + it('[C307074] No tooltip is displayed when hover over a column with copyContent set to false', async () => { + await copyContentDataTablePage.mouseOverNameColumn('Second'); + await copyContentDataTablePage.dataTable.copyContentTooltipIsNotDisplayed(); + await copyContentDataTablePage.clickOnNameColumn('Second'); + await notificationHistoryPage.checkNotifyNotContains('Second'); }); - it('[C307075] No tooltip is displayed when hover over a column that has default value for copyContent property', () => { - copyContentDataTablePage.mouseOverCreatedByColumn('Created one'); - copyContentDataTablePage.dataTable.copyContentTooltipIsNotDisplayed(); - copyContentDataTablePage.clickOnCreatedByColumn('Created one'); - notificationHistoryPage.checkNotifyNotContains('Created One'); + it('[C307075] No tooltip is displayed when hover over a column that has default value for copyContent property', async () => { + await copyContentDataTablePage.mouseOverCreatedByColumn('Created one'); + await copyContentDataTablePage.dataTable.copyContentTooltipIsNotDisplayed(); + await copyContentDataTablePage.clickOnCreatedByColumn('Created one'); + await notificationHistoryPage.checkNotifyNotContains('Created One'); }); - it('[C307073] A column value with copyContent set to true is copied when clicking on it', () => { - copyContentDataTablePage.mouseOverIdColumn('1'); - expect(copyContentDataTablePage.getCopyContentTooltip()).toEqual('Click to copy'); - copyContentDataTablePage.clickOnIdColumn('1'); - notificationHistoryPage.checkNotifyContains('Text copied to clipboard'); - copyContentDataTablePage.clickOnIdColumn('2'); - notificationHistoryPage.checkNotifyContains('Text copied to clipboard'); - copyContentDataTablePage.pasteClipboard(); - expect(copyContentDataTablePage.getClipboardInputText()).toEqual('2'); + it('[C307073] A column value with copyContent set to true is copied when clicking on it', async () => { + await copyContentDataTablePage.mouseOverIdColumn('1'); + await expect(await copyContentDataTablePage.getCopyContentTooltip()).toEqual('Click to copy'); + await copyContentDataTablePage.clickOnIdColumn('1'); + await notificationHistoryPage.checkNotifyContains('Text copied to clipboard'); + await copyContentDataTablePage.clickOnIdColumn('2'); + await notificationHistoryPage.checkNotifyContains('Text copied to clipboard'); + await copyContentDataTablePage.pasteClipboard(); + await expect(await copyContentDataTablePage.getClipboardInputText()).toEqual('2'); }); - it('[C307100] A column value of type text and with copyContent set to true is copied when clicking on it', () => { - dataTablePage.mouseOverIdColumn('1'); - expect(dataTablePage.getCopyContentTooltip()).toEqual('Click to copy'); - dataTablePage.clickOnIdColumn('1'); - notificationHistoryPage.checkNotifyContains('Text copied to clipboard'); - dataTablePage.pasteClipboard(); - expect(dataTablePage.getClipboardInputText()).toEqual('1'); + it('[C307100] A column value of type text and with copyContent set to true is copied when clicking on it', async () => { + await dataTablePage.mouseOverIdColumn('1'); + await expect(await dataTablePage.getCopyContentTooltip()).toEqual('Click to copy'); + await dataTablePage.clickOnIdColumn('1'); + await notificationHistoryPage.checkNotifyContains('Text copied to clipboard'); + await dataTablePage.pasteClipboard(); + await expect(await dataTablePage.getClipboardInputText()).toEqual('1'); }); - it('[C307101] A column value of type json and with copyContent set to true is copied when clicking on it', () => { + it('[C307101] A column value of type json and with copyContent set to true is copied when clicking on it', async () => { const jsonValue = `{ "id": 4 }`; - copyContentDataTablePage.mouseOverJsonColumn(2); - expect(copyContentDataTablePage.getCopyContentTooltip()).toEqual('Click to copy'); - copyContentDataTablePage.clickOnJsonColumn(2); - notificationHistoryPage.checkNotifyContains('Text copied to clipboard'); - copyContentDataTablePage.pasteClipboard(); - expect(copyContentDataTablePage.getClipboardInputText()).toContain(jsonValue); + await copyContentDataTablePage.mouseOverJsonColumn(2); + await expect(await copyContentDataTablePage.getCopyContentTooltip()).toEqual('Click to copy'); + await copyContentDataTablePage.clickOnJsonColumn(2); + await notificationHistoryPage.checkNotifyContains('Text copied to clipboard'); + await copyContentDataTablePage.pasteClipboard(); + await expect(await copyContentDataTablePage.getClipboardInputText()).toContain(jsonValue); + }); + + afterAll(async () => { + await navigationBarPage.clickHomeButton(); }); }); describe('Datatable component - Drag and Drop', () => { - beforeAll(async (done) => { - navigationBarPage.navigateToDragAndDropDatatable(); - done(); + beforeAll(async () => { + await navigationBarPage.navigateToDragAndDropDatatable(); + await dragAndDropDataTablePage.dataTable.waitForTableBody(); }); - it('[C307984] Should trigger the event handling header-drop and cell-drop', () => { + it('[C307984] Should trigger the event handling header-drop and cell-drop', async () => { const dragAndDropHeader = dragAndDropDataTablePage.getDropTargetIdColumnHeader(); - dragAndDrop.dropFile(dragAndDropHeader, pngFile.location); - notificationHistoryPage.checkNotifyContains('Dropped data on [ id ] header'); + await dragAndDrop.dropFile(dragAndDropHeader, pngFile.location); + await notificationHistoryPage.checkNotifyContains('Dropped data on [ id ] header'); const dragAndDropCell = dragAndDropDataTablePage.getDropTargetIdColumnCell(1); - dragAndDrop.dropFile(dragAndDropCell, pngFile.location); - notificationHistoryPage.checkNotifyContains('Dropped data on [ id ] cell'); + await dragAndDrop.dropFile(dragAndDropCell, pngFile.location); + await notificationHistoryPage.checkNotifyContains('Dropped data on [ id ] cell'); }); }); }); diff --git a/e2e/core/error-component.e2e.ts b/e2e/core/error-component.e2e.ts index ba696c1485..6c32e6228a 100644 --- a/e2e/core/error-component.e2e.ts +++ b/e2e/core/error-component.e2e.ts @@ -28,7 +28,7 @@ describe('Error Component', () => { const errorPage = new ErrorPage(); const navigationBarPage = new NavigationBarPage(); - beforeAll(async (done) => { + beforeAll(async () => { this.alfrescoJsApi = new AlfrescoApi({ provider: 'ECM', hostEcm: browser.params.testConfig.adf_acs.host @@ -38,49 +38,47 @@ describe('Error Component', () => { await this.alfrescoJsApi.core.peopleApi.addPerson(acsUser); await loginPage.loginToContentServicesUsingUserModel(acsUser); - done(); - }); afterAll(async () => { await navigationBarPage.clickLogoutButton(); }); - it('[C277302] Should display the error 403 when access to unauthorized page - My Change', () => { - BrowserActions.getUrl(browser.params.testConfig.adf.url + '/error/403'); - expect(errorPage.getErrorCode()).toBe('403'); - expect(errorPage.getErrorTitle()).toBe('You don\'t have permission to access this server.'); - expect(errorPage.getErrorDescription()).toBe('You\'re not allowed access to this resource on the server.'); + it('[C277302] Should display the error 403 when access to unauthorized page - My Change', async () => { + await BrowserActions.getUrl(browser.params.testConfig.adf.url + '/error/403'); + await expect(await errorPage.getErrorCode()).toBe('403'); + await expect(await errorPage.getErrorTitle()).toBe('You don\'t have permission to access this server.'); + await expect(await errorPage.getErrorDescription()).toBe('You\'re not allowed access to this resource on the server.'); }); - it('[C280563] Should back home button navigate to the home page', () => { - BrowserActions.getUrl(browser.params.testConfig.adf.url + '/error/404'); + it('[C280563] Should back home button navigate to the home page', async () => { + await BrowserActions.getUrl(browser.params.testConfig.adf.url + '/error/404'); - errorPage.clickBackButton(); + await errorPage.clickBackButton(); - expect(browser.getCurrentUrl()).toBe(browser.params.testConfig.adf.url + '/'); + await expect(await browser.getCurrentUrl()).toBe(browser.params.testConfig.adf.url + '/'); }); - it('[C280564] Should secondary button by default redirect to report-issue URL', () => { - BrowserActions.getUrl(browser.params.testConfig.adf.url + '/error/403'); + it('[C280564] Should secondary button by default redirect to report-issue URL', async () => { + await BrowserActions.getUrl(browser.params.testConfig.adf.url + '/error/403'); - errorPage.clickSecondButton(); + await errorPage.clickSecondButton(); - expect(browser.getCurrentUrl()).toBe(browser.params.testConfig.adf.url + '/report-issue'); + await expect(await browser.getCurrentUrl()).toBe(browser.params.testConfig.adf.url + '/report-issue'); }); - it('[C277304] Should display the error 404 when access to not found page', () => { - BrowserActions.getUrl(browser.params.testConfig.adf.url + '/error/404'); - expect(errorPage.getErrorCode()).toBe('404'); - expect(errorPage.getErrorTitle()).toBe('An error occurred.'); - expect(errorPage.getErrorDescription()).toBe('We couldn’t find the page you were looking for.'); + it('[C277304] Should display the error 404 when access to not found page', async () => { + await BrowserActions.getUrl(browser.params.testConfig.adf.url + '/error/404'); + await expect(await errorPage.getErrorCode()).toBe('404'); + await expect(await errorPage.getErrorTitle()).toBe('An error occurred.'); + await expect(await errorPage.getErrorDescription()).toBe('We couldn’t find the page you were looking for.'); }); - it('[C307029] Should display Unknown message when error is undefined', () => { - BrowserActions.getUrl(browser.params.testConfig.adf.url + '/error/501'); - expect(errorPage.getErrorCode()).toBe('UNKNOWN'); - expect(errorPage.getErrorTitle()).toBe('We hit a problem.'); - expect(errorPage.getErrorDescription()).toBe('Looks like something went wrong.'); + it('[C307029] Should display Unknown message when error is undefined', async () => { + await BrowserActions.getUrl(browser.params.testConfig.adf.url + '/error/501'); + await expect(await errorPage.getErrorCode()).toBe('UNKNOWN'); + await expect(await errorPage.getErrorTitle()).toBe('We hit a problem.'); + await expect(await errorPage.getErrorDescription()).toBe('Looks like something went wrong.'); }); }); diff --git a/e2e/core/header-component.e2e.ts b/e2e/core/header-component.e2e.ts index 96892a2bd7..3b579646ab 100644 --- a/e2e/core/header-component.e2e.ts +++ b/e2e/core/header-component.e2e.ts @@ -46,7 +46,7 @@ describe('Header Component', () => { logo_tooltip: 'test_tooltip' }; - beforeAll(async(done) => { + beforeAll(async() => { this.alfrescoJsApi = new AlfrescoApi({ provider: 'BPM', hostBpm: browser.params.testConfig.adf_aps.host @@ -64,85 +64,83 @@ describe('Header Component', () => { await loginPage.loginToProcessServicesUsingUserModel(user); - done(); }); - beforeEach(async(done) => { - navigationBarPage.clickHeaderDataButton(); - done(); + beforeEach(async() => { + await navigationBarPage.clickHeaderDataButton(); }); - afterAll(async(done) => { + afterAll(async() => { await navigationBarPage.clickLogoutButton(); await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); await this.alfrescoJsApi.activiti.adminTenantsApi.deleteTenant(tenantId); - done(); + }); - it('[C280002] Should be able to view Header component', () => { - headerPage.checkShowMenuCheckBoxIsDisplayed(); - headerPage.checkChooseHeaderColourIsDisplayed(); - headerPage.checkHexColorInputIsDisplayed(); - headerPage.checkChangeTitleIsDisplayed(); - headerPage.checkChangeUrlPathIsDisplayed(); - headerPage.checkLogoHyperlinkInputIsDisplayed(); - headerPage.checkLogoTooltipInputIsDisplayed(); + it('[C280002] Should be able to view Header component', async () => { + await headerPage.checkShowMenuCheckBoxIsDisplayed(); + await headerPage.checkChooseHeaderColourIsDisplayed(); + await headerPage.checkHexColorInputIsDisplayed(); + await headerPage.checkChangeTitleIsDisplayed(); + await headerPage.checkChangeUrlPathIsDisplayed(); + await headerPage.checkLogoHyperlinkInputIsDisplayed(); + await headerPage.checkLogoTooltipInputIsDisplayed(); }); - it('[C279996] Should be able to show/hide menu button', () => { - headerPage.clickShowMenuButton(); - navigationBarPage.checkMenuButtonIsNotDisplayed(); - headerPage.clickShowMenuButton(); - navigationBarPage.checkMenuButtonIsDisplayed(); + it('[C279996] Should be able to show/hide menu button', async () => { + await headerPage.clickShowMenuButton(); + await navigationBarPage.checkMenuButtonIsNotDisplayed(); + await headerPage.clickShowMenuButton(); + await navigationBarPage.checkMenuButtonIsDisplayed(); }); - it('[C279999] Should be able to change the colour between primary, accent and warn', () => { - headerPage.changeHeaderColor(names.color_accent); - navigationBarPage.checkToolbarColor(names.color_accent); - headerPage.changeHeaderColor(names.color_primary); - navigationBarPage.checkToolbarColor(names.color_primary); - headerPage.changeHeaderColor(names.color_warn); - navigationBarPage.checkToolbarColor(names.color_warn); + it('[C279999] Should be able to change the colour between primary, accent and warn', async () => { + await headerPage.changeHeaderColor(names.color_accent); + await navigationBarPage.checkToolbarColor(names.color_accent); + await headerPage.changeHeaderColor(names.color_primary); + await navigationBarPage.checkToolbarColor(names.color_primary); + await headerPage.changeHeaderColor(names.color_warn); + await navigationBarPage.checkToolbarColor(names.color_warn); }); - it('[C280552] Should be able to change the colour of the header by typing a hex code', () => { - headerPage.addHexCodeColor(names.color_custom); - navigationBarPage.checkToolbarColor(names.color_custom); + it('[C280552] Should be able to change the colour of the header by typing a hex code', async () => { + await headerPage.addHexCodeColor(names.color_custom); + await navigationBarPage.checkToolbarColor(names.color_custom); }); - it('[C279997] Should be able to change the title of the app', () => { - headerPage.checkAppTitle(names.app_title_default); - headerPage.addTitle(names.app_title_custom); - headerPage.checkAppTitle(names.app_title_custom); + it('[C279997] Should be able to change the title of the app', async () => { + await headerPage.checkAppTitle(names.app_title_default); + await headerPage.addTitle(names.app_title_custom); + await headerPage.checkAppTitle(names.app_title_custom); }); - it('[C279998] Should be able to change the default logo of the app', () => { - headerPage.checkIconIsDisplayed(names.urlPath_default); - headerPage.addIcon(names.urlPath_custom); - headerPage.checkIconIsDisplayed(names.urlPath_custom); + it('[C279998] Should be able to change the default logo of the app', async () => { + await headerPage.checkIconIsDisplayed(names.urlPath_default); + await headerPage.addIcon(names.urlPath_custom); + await headerPage.checkIconIsDisplayed(names.urlPath_custom); }); - it('[C280553] Should be able to set a hyperlink to the logo', () => { - headerPage.addLogoHyperlink(names.urlPath_logo_link); - navigationBarPage.clickAppLogo(names.logo_title); - settingsPage.checkProviderDropdownIsDisplayed(); + it('[C280553] Should be able to set a hyperlink to the logo', async () => { + await headerPage.addLogoHyperlink(names.urlPath_logo_link); + await navigationBarPage.clickAppLogo(names.logo_title); + await settingsPage.checkProviderDropdownIsDisplayed(); }); - it('[C286517] Should be able to set a hyperlink to the logo text', () => { - headerPage.addLogoHyperlink(names.urlPath_logo_link); - navigationBarPage.clickAppLogoText(); - settingsPage.checkProviderDropdownIsDisplayed(); + it('[C286517] Should be able to set a hyperlink to the logo text', async () => { + await headerPage.addLogoHyperlink(names.urlPath_logo_link); + await navigationBarPage.clickAppLogoText(); + await settingsPage.checkProviderDropdownIsDisplayed(); }); - it('[C280554] Should be able to customise the tooltip-text of the logo', () => { - headerPage.addLogoTooltip(names.logo_tooltip); - navigationBarPage.checkLogoTooltip(names.logo_tooltip); + it('[C280554] Should be able to customise the tooltip-text of the logo', async () => { + await headerPage.addLogoTooltip(names.logo_tooltip); + await navigationBarPage.checkLogoTooltip(names.logo_tooltip); }); - it('[C286297] Should be able to change the position of the sidebar menu', () => { - headerPage.sideBarPositionEnd(); - headerPage.checkSidebarPositionEnd(); - headerPage.sideBarPositionStart(); - headerPage.checkSidebarPositionStart(); + it('[C286297] Should be able to change the position of the sidebar menu', async () => { + await headerPage.sideBarPositionEnd(); + await headerPage.checkSidebarPositionEnd(); + await headerPage.sideBarPositionStart(); + await headerPage.checkSidebarPositionStart(); }); }); diff --git a/e2e/core/icons-component.e2e.ts b/e2e/core/icons-component.e2e.ts index 11c2647a2c..2cff2144fc 100644 --- a/e2e/core/icons-component.e2e.ts +++ b/e2e/core/icons-component.e2e.ts @@ -23,14 +23,14 @@ import { AcsUserModel } from '../models/ACS/acsUserModel'; import { browser } from 'protractor'; import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; -describe('Universal Icon component', function () { +describe('Universal Icon component', () => { const loginPage = new LoginPage(); const acsUser = new AcsUserModel(); const navigationBarPage = new NavigationBarPage(); const iconsPage = new IconsPage(); - beforeAll(async (done) => { + beforeAll(async () => { this.alfrescoJsApi = new AlfrescoApi({ provider: 'ECM', hostEcm: browser.params.testConfig.adf_acs.host @@ -40,25 +40,21 @@ describe('Universal Icon component', function () { await this.alfrescoJsApi.core.peopleApi.addPerson(acsUser); await loginPage.loginToContentServicesUsingUserModel(acsUser); - done(); }); afterAll(async () => { await navigationBarPage.clickLogoutButton(); }); - beforeEach(async (done) => { - navigationBarPage.navigateToIconsPage(); - done(); + beforeEach(async () => { + await navigationBarPage.clickIconsButton(); + }); - it('[C291872] Should display the icons on the page', () => { - - expect(iconsPage.locateLigatureIcon('folder').isDisplayed()).toBe(true, 'Ligature icon is not displayed'); - - expect(iconsPage.locateCustomIcon('adf:move_file').isDisplayed()).toBe(true, 'Named icon is not displayed'); - - expect(iconsPage.locateCustomIcon('adf:folder').isDisplayed()).toBe(true, 'Thumbnail service icon is not displayed'); + it('[C291872] Should display the icons on the page', async () => { + await expect(await iconsPage.isLigatureIconDisplayed('folder')).toBe(true, 'Ligature icon is not displayed'); + await expect(await iconsPage.isCustomIconDisplayed('adf:move_file')).toBe(true, 'Named icon is not displayed'); + await expect(await iconsPage.isCustomIconDisplayed('adf:folder')).toBe(true, 'Thumbnail service icon is not displayed'); }); }); diff --git a/e2e/core/infinite-scrolling.e2e.ts b/e2e/core/infinite-scrolling.e2e.ts index d5c35cce79..86e90277b2 100644 --- a/e2e/core/infinite-scrolling.e2e.ts +++ b/e2e/core/infinite-scrolling.e2e.ts @@ -52,7 +52,7 @@ describe('Enable infinite scrolling', () => { extension: '.txt' }; - beforeAll(async (done) => { + beforeAll(async () => { this.alfrescoJsApi = new AlfrescoApi({ provider: 'ECM', hostEcm: browser.params.testConfig.adf_acs.host @@ -79,81 +79,80 @@ describe('Enable infinite scrolling', () => { await uploadActions.createEmptyFiles(deleteFileNames, deleteUploaded.entry.id); - done(); }); afterAll(async () => { await navigationBarPage.clickLogoutButton(); }); - beforeEach(async (done) => { - navigationBarPage.clickContentServicesButton(); - contentServicesPage.checkAcsContainer(); - done(); + beforeEach(async () => { + await navigationBarPage.clickContentServicesButton(); + await contentServicesPage.checkAcsContainer(); + }); - it('[C260484] Should be possible to enable infinite scrolling', () => { - contentServicesPage.doubleClickRow(folderModel.name); - contentServicesPage.enableInfiniteScrolling(); - infinitePaginationPage.clickLoadMoreButton(); + it('[C260484] Should be possible to enable infinite scrolling', async () => { + await contentServicesPage.doubleClickRow(folderModel.name); + await contentServicesPage.enableInfiniteScrolling(); + await infinitePaginationPage.clickLoadMoreButton(); for (let i = 0; i < nrOfFiles; i++) { - contentServicesPage.checkContentIsDisplayed(fileNames[i]); + await contentServicesPage.checkContentIsDisplayed(fileNames[i]); } }); - it('[C268165] Delete folder when infinite scrolling is enabled', () => { - contentServicesPage.doubleClickRow(deleteUploaded.entry.name); - contentServicesPage.checkAcsContainer(); - contentServicesPage.waitForTableBody(); - contentServicesPage.enableInfiniteScrolling(); - infinitePaginationPage.clickLoadMoreButton(); + it('[C268165] Delete folder when infinite scrolling is enabled', async () => { + await contentServicesPage.doubleClickRow(deleteUploaded.entry.name); + await contentServicesPage.checkAcsContainer(); + await contentServicesPage.waitForTableBody(); + await contentServicesPage.enableInfiniteScrolling(); + await infinitePaginationPage.clickLoadMoreButton(); for (let i = 0; i < nrOfDeletedFiles; i++) { - contentServicesPage.checkContentIsDisplayed(deleteFileNames[i]); + await contentServicesPage.checkContentIsDisplayed(deleteFileNames[i]); } - expect(contentServicesPage.getContentList().dataTablePage().numberOfRows()).toEqual(nrOfDeletedFiles); + await expect(await contentServicesPage.getDocumentList().dataTablePage().numberOfRows()).toEqual(nrOfDeletedFiles); - contentServicesPage.deleteContent(deleteFileNames[nrOfDeletedFiles - 1]); - contentServicesPage.checkContentIsNotDisplayed(deleteFileNames[nrOfDeletedFiles - 1]); + await contentServicesPage.deleteContent(deleteFileNames[nrOfDeletedFiles - 1]); + await contentServicesPage.checkContentIsNotDisplayed(deleteFileNames[nrOfDeletedFiles - 1]); for (let i = 0; i < nrOfDeletedFiles - 1; i++) { - contentServicesPage.checkContentIsDisplayed(deleteFileNames[i]); + await contentServicesPage.checkContentIsDisplayed(deleteFileNames[i]); } }); - it('[C299201] Should use default pagination settings for infinite pagination', () => { - navigationBarPage.clickContentServicesButton(); - contentServicesPage.checkAcsContainer(); - contentServicesPage.doubleClickRow(folderModel.name); + it('[C299201] Should use default pagination settings for infinite pagination', async () => { + await navigationBarPage.clickContentServicesButton(); + await contentServicesPage.checkAcsContainer(); + await contentServicesPage.doubleClickRow(folderModel.name); - contentServicesPage.enableInfiniteScrolling(); - expect(contentServicesPage.numberOfResultsDisplayed()).toBe(pageSize); - infinitePaginationPage.clickLoadMoreButton(); - expect(contentServicesPage.numberOfResultsDisplayed()).toBe(nrOfFiles); + await contentServicesPage.enableInfiniteScrolling(); + await expect(await contentServicesPage.numberOfResultsDisplayed()).toBe(pageSize); + await infinitePaginationPage.clickLoadMoreButton(); + await expect(await contentServicesPage.numberOfResultsDisplayed()).toBe(nrOfFiles); - infinitePaginationPage.checkLoadMoreButtonIsNotDisplayed(); + await infinitePaginationPage.checkLoadMoreButtonIsNotDisplayed(); }); - it('[C299202] Should not display load more button when all the files are already displayed', () => { - LocalStorageUtil.setUserPreference('paginationSize', '30'); + it('[C299202] Should not display load more button when all the files are already displayed', async () => { + await LocalStorageUtil.setUserPreference('paginationSize', '30'); - navigationBarPage.clickContentServicesButton(); - contentServicesPage.checkAcsContainer(); + await navigationBarPage.clickContentServicesButton(); + await contentServicesPage.checkAcsContainer(); - contentServicesPage.doubleClickRow(folderModel.name); + await contentServicesPage.doubleClickRow(folderModel.name); - contentServicesPage.enableInfiniteScrolling(); - expect(contentServicesPage.numberOfResultsDisplayed()).toBe(nrOfFiles); + await contentServicesPage.enableInfiniteScrolling(); + await expect(await contentServicesPage.numberOfResultsDisplayed()).toBe(nrOfFiles); - infinitePaginationPage.checkLoadMoreButtonIsNotDisplayed(); + await infinitePaginationPage.checkLoadMoreButtonIsNotDisplayed(); }); - it('[C299203] Should not display load more button when a folder is empty', () => { - navigationBarPage.clickContentServicesButton(); - contentServicesPage.checkAcsContainer(); + it('[C299203] Should not display load more button when a folder is empty', async () => { + await navigationBarPage.clickContentServicesButton(); + await contentServicesPage.checkAcsContainer(); - contentServicesPage.doubleClickRow(emptyFolderModel.entry.name); + await contentServicesPage.doubleClickRow(emptyFolderModel.entry.name); - infinitePaginationPage.checkLoadMoreButtonIsNotDisplayed(); + await infinitePaginationPage.checkLoadMoreButtonIsNotDisplayed(); }); }); diff --git a/e2e/core/login/login-component.e2e.ts b/e2e/core/login/login-component.e2e.ts index 8839665335..a41cf0a167 100644 --- a/e2e/core/login/login-component.e2e.ts +++ b/e2e/core/login/login-component.e2e.ts @@ -56,7 +56,7 @@ describe('Login component', () => { const invalidUsername = 'invaliduser'; const invalidPassword = 'invalidpassword'; - beforeAll(async (done) => { + beforeAll(async () => { this.alfrescoJsApi = new AlfrescoApi({ provider: 'ALL', hostEcm: browser.params.testConfig.adf_acs.host, @@ -68,218 +68,213 @@ describe('Login component', () => { await this.alfrescoJsApi.core.peopleApi.addPerson(userA); await this.alfrescoJsApi.core.peopleApi.addPerson(userB); - done(); }); it('[C276746] Should display the right information in user-info when a different users logs in', async () => { await loginPage.loginToContentServicesUsingUserModel(userA); - userInfoPage.clickUserProfile(); - expect(userInfoPage.getContentHeaderTitle()).toEqual(userA.firstName + ' ' + userA.lastName); - expect(userInfoPage.getContentEmail()).toEqual(userA.email); + await userInfoPage.clickUserProfile(); + await expect(await userInfoPage.getContentHeaderTitle()).toEqual(userA.firstName + ' ' + userA.lastName); + await expect(await userInfoPage.getContentEmail()).toEqual(userA.email); await loginPage.loginToContentServicesUsingUserModel(userB); - userInfoPage.clickUserProfile(); - expect(userInfoPage.getContentHeaderTitle()).toEqual(userB.firstName + ' ' + userB.lastName); - expect(userInfoPage.getContentEmail()).toEqual(userB.email); + await userInfoPage.clickUserProfile(); + await expect(await userInfoPage.getContentHeaderTitle()).toEqual(userB.firstName + ' ' + userB.lastName); + await expect(await userInfoPage.getContentEmail()).toEqual(userB.email); }); it('[C299206] Should redirect the user without the right access role on a forbidden page', async () => { await loginPage.loginToContentServicesUsingUserModel(userA); - navigationBarPage.navigateToProcessServicesCloudPage(); - expect(errorPage.getErrorCode()).toBe('403'); - expect(errorPage.getErrorTitle()).toBe('You don\'t have permission to access this server.'); - expect(errorPage.getErrorDescription()).toBe('You\'re not allowed access to this resource on the server.'); + await navigationBarPage.navigateToProcessServicesCloudPage(); + await expect(await errorPage.getErrorCode()).toBe('403'); + await expect(await errorPage.getErrorTitle()).toBe('You don\'t have permission to access this server.'); + await expect(await errorPage.getErrorDescription()).toBe('You\'re not allowed access to this resource on the server.'); }); - it('[C260036] Should require username', () => { - loginPage.goToLoginPage(); - loginPage.checkUsernameInactive(); - expect(loginPage.getSignInButtonIsEnabled()).toBe(false); - loginPage.enterUsername('A'); - expect(loginPage.getUsernameTooltip()).toEqual(errorMessages.username); - loginPage.clearUsername(); - expect(loginPage.getUsernameTooltip()).toEqual(errorMessages.required); - loginPage.checkUsernameHighlighted(); - expect(loginPage.getSignInButtonIsEnabled()).toBe(false); + it('[C260036] Should require username', async () => { + await loginPage.goToLoginPage(); + await loginPage.checkUsernameInactive(); + await expect(await loginPage.getSignInButtonIsEnabled()).toBe(false); + await loginPage.enterUsername('A'); + await expect(await loginPage.getUsernameTooltip()).toEqual(errorMessages.username); + await loginPage.clearUsername(); + await expect(await loginPage.getUsernameTooltip()).toEqual(errorMessages.required); + await loginPage.checkUsernameHighlighted(); + await expect(await loginPage.getSignInButtonIsEnabled()).toBe(false); }); - it('[C260043] Should require password', () => { - loginPage.goToLoginPage(); - loginPage.checkPasswordInactive(); - loginPage.checkUsernameInactive(); - loginPage.enterPassword('A'); - loginPage.checkPasswordTooltipIsNotVisible(); - loginPage.clearPassword(); - expect(loginPage.getPasswordTooltip()).toEqual(errorMessages.password); - loginPage.checkPasswordHighlighted(); - expect(loginPage.getSignInButtonIsEnabled()).toBe(false); + it('[C260043] Should require password', async () => { + await loginPage.goToLoginPage(); + await loginPage.checkPasswordInactive(); + await loginPage.checkUsernameInactive(); + await loginPage.enterPassword('A'); + await loginPage.checkPasswordTooltipIsNotVisible(); + await loginPage.clearPassword(); + await expect(await loginPage.getPasswordTooltip()).toEqual(errorMessages.password); + await loginPage.checkPasswordHighlighted(); + await expect(await loginPage.getSignInButtonIsEnabled()).toBe(false); }); - it('[C260044] Username should be at least 2 characters long', () => { - loginPage.goToLoginPage(); - expect(loginPage.getSignInButtonIsEnabled()).toBe(false); - loginPage.enterUsername('A'); - expect(loginPage.getUsernameTooltip()).toEqual(errorMessages.username); - loginPage.enterUsername('AB'); - loginPage.checkUsernameTooltipIsNotVisible(); - expect(loginPage.getSignInButtonIsEnabled()).toBe(false); - loginPage.clearUsername(); + it('[C260044] Username should be at least 2 characters long', async () => { + await loginPage.goToLoginPage(); + await expect(await loginPage.getSignInButtonIsEnabled()).toBe(false); + await loginPage.enterUsername('A'); + await expect(await loginPage.getUsernameTooltip()).toEqual(errorMessages.username); + await loginPage.enterUsername('AB'); + await loginPage.checkUsernameTooltipIsNotVisible(); + await expect(await loginPage.getSignInButtonIsEnabled()).toBe(false); + await loginPage.clearUsername(); }); - it('[C260045] Should enable login button after entering a valid username and a password', () => { - loginPage.goToLoginPage(); - loginPage.enterUsername(adminUserModel.id); - expect(loginPage.getSignInButtonIsEnabled()).toBe(false); - loginPage.enterPassword('a'); - expect(loginPage.getSignInButtonIsEnabled()).toBe(true); - loginPage.clearUsername(); - loginPage.clearPassword(); + it('[C260045] Should enable login button after entering a valid username and a password', async () => { + await loginPage.goToLoginPage(); + await loginPage.enterUsername(adminUserModel.id); + await expect(await loginPage.getSignInButtonIsEnabled()).toBe(false); + await loginPage.enterPassword('a'); + await expect(await loginPage.getSignInButtonIsEnabled()).toBe(true); + await loginPage.clearUsername(); + await loginPage.clearPassword(); }); - it('[C260046] Should NOT be possible to login with an invalid username/password', () => { - loginPage.goToLoginPage(); - expect(loginPage.getSignInButtonIsEnabled()).toBe(false); - loginPage.enterUsername('test'); - loginPage.enterPassword('test'); - expect(loginPage.getSignInButtonIsEnabled()).toBe(true); - loginPage.clickSignInButton(); - expect(loginPage.getLoginError()).toEqual(errorMessages.invalid_credentials); - loginPage.clearUsername(); - loginPage.clearPassword(); + it('[C260046] Should NOT be possible to login with an invalid username/password', async () => { + await loginPage.goToLoginPage(); + await expect(await loginPage.getSignInButtonIsEnabled()).toBe(false); + await loginPage.enterUsername('test'); + await loginPage.enterPassword('test'); + await expect(await loginPage.getSignInButtonIsEnabled()).toBe(true); + await loginPage.clickSignInButton(); + await expect(await loginPage.getLoginError()).toEqual(errorMessages.invalid_credentials); + await loginPage.clearUsername(); + await loginPage.clearPassword(); }); - it('[C260047] Password should be crypted', () => { - loginPage.goToLoginPage(); - expect(loginPage.getSignInButtonIsEnabled()).toBe(false); - loginPage.enterPassword('test'); - loginPage.showPassword(); - loginPage.getShownPassword().then(async (tooltip) => { - await expect(tooltip).toEqual('test'); - }); - loginPage.hidePassword(); - loginPage.checkPasswordIsHidden(); - loginPage.clearPassword(); + it('[C260047] Password should be crypted', async () => { + await loginPage.goToLoginPage(); + await expect(await loginPage.getSignInButtonIsEnabled()).toBe(false); + await loginPage.enterPassword('test'); + await loginPage.showPassword(); + const tooltip = await loginPage.getShownPassword(); + await expect(tooltip).toEqual('test'); + await loginPage.hidePassword(); + await loginPage.checkPasswordIsHidden(); + await loginPage.clearPassword(); }); - it('[C260048] Should be possible to enable/disable login footer', () => { - loginPage.goToLoginPage(); - loginPage.enableFooter(); - loginPage.checkRememberIsDisplayed(); - loginPage.checkNeedHelpIsDisplayed(); - loginPage.checkRegisterDisplayed(); - loginPage.disableFooter(); - loginPage.checkRememberIsNotDisplayed(); - loginPage.checkNeedHelpIsNotDisplayed(); - loginPage.checkRegisterIsNotDisplayed(); + it('[C260048] Should be possible to enable/disable login footer', async () => { + await loginPage.goToLoginPage(); + await loginPage.enableFooter(); + await loginPage.checkRememberIsDisplayed(); + await loginPage.checkNeedHelpIsDisplayed(); + await loginPage.checkRegisterDisplayed(); + await loginPage.disableFooter(); + await loginPage.checkRememberIsNotDisplayed(); + await loginPage.checkNeedHelpIsNotDisplayed(); + await loginPage.checkRegisterIsNotDisplayed(); }); - it('[C260049] Should be possible to login to Process Services with Content Services disabled', () => { - loginPage.goToLoginPage(); - expect(loginPage.getSignInButtonIsEnabled()).toBe(false); - loginPage.clickSettingsIcon(); - settingsPage.setProviderBpm(); - loginPage.login(adminUserModel.id, adminUserModel.password); - navigationBarPage.navigateToProcessServicesPage(); - processServicesPage.checkApsContainer(); - navigationBarPage.clickContentServicesButton(); - loginPage.waitForElements(); + it('[C260049] Should be possible to login to Process Services with Content Services disabled', async () => { + await loginPage.goToLoginPage(); + await expect(await loginPage.getSignInButtonIsEnabled()).toBe(false); + await loginPage.clickSettingsIcon(); + await settingsPage.setProviderBpm(); + await loginPage.login(adminUserModel.id, adminUserModel.password); + await navigationBarPage.navigateToProcessServicesPage(); + await processServicesPage.checkApsContainer(); + await navigationBarPage.clickContentServicesButton(); + await loginPage.waitForElements(); }); - it('[C260050] Should be possible to login to Content Services with Process Services disabled', () => { - loginPage.goToLoginPage(); - expect(loginPage.getSignInButtonIsEnabled()).toBe(false); - loginPage.clickSettingsIcon(); - settingsPage.setProviderEcm(); - loginPage.login(browser.params.testConfig.adf.adminUser, browser.params.testConfig.adf.adminPassword); - navigationBarPage.clickContentServicesButton(); - contentServicesPage.checkAcsContainer(); + it('[C260050] Should be possible to login to Content Services with Process Services disabled', async () => { + await loginPage.goToLoginPage(); + await expect(await loginPage.getSignInButtonIsEnabled()).toBe(false); + await loginPage.clickSettingsIcon(); + await settingsPage.setProviderEcm(); + await loginPage.login(browser.params.testConfig.adf.adminUser, browser.params.testConfig.adf.adminPassword); + await navigationBarPage.clickContentServicesButton(); + await contentServicesPage.checkAcsContainer(); }); - it('[C260051] Should be able to login to both Content Services and Process Services', () => { - loginPage.goToLoginPage(); - loginPage.clickSettingsIcon(); - settingsPage.setProviderEcmBpm(); - expect(loginPage.getSignInButtonIsEnabled()).toBe(false); - loginPage.clickSettingsIcon(); - settingsPage.setProviderEcmBpm(); - loginPage.login(adminUserModel.id, adminUserModel.password); - navigationBarPage.navigateToProcessServicesPage(); - processServicesPage.checkApsContainer(); - navigationBarPage.clickContentServicesButton(); - contentServicesPage.checkAcsContainer(); - navigationBarPage.clickLoginButton(); - loginPage.waitForElements(); + it('[C260051] Should be able to login to both Content Services and Process Services', async () => { + await loginPage.goToLoginPage(); + await loginPage.clickSettingsIcon(); + await settingsPage.setProviderEcmBpm(); + await expect(await loginPage.getSignInButtonIsEnabled()).toBe(false); + await loginPage.clickSettingsIcon(); + await settingsPage.setProviderEcmBpm(); + await loginPage.login(adminUserModel.id, adminUserModel.password); + await navigationBarPage.navigateToProcessServicesPage(); + await processServicesPage.checkApsContainer(); + await navigationBarPage.clickContentServicesButton(); + await contentServicesPage.checkAcsContainer(); + await navigationBarPage.clickLoginButton(); + await loginPage.waitForElements(); }); - it('[C277754] Should the user be redirect to the login page when the Content Service session expire', () => { - loginPage.goToLoginPage(); - loginPage.clickSettingsIcon(); - settingsPage.setProviderEcmBpm(); - loginPage.login(adminUserModel.id, adminUserModel.password); - browser.executeScript('window.localStorage.removeItem("ticket-ECM");'); - BrowserActions.getUrl(browser.params.testConfig.adf.url + '/files'); - loginPage.waitForElements(); + it('[C277754] Should the user be redirect to the login page when the Content Service session expire', async () => { + await loginPage.goToLoginPage(); + await loginPage.clickSettingsIcon(); + await settingsPage.setProviderEcmBpm(); + await loginPage.login(adminUserModel.id, adminUserModel.password); + await browser.executeScript('window.localStorage.removeItem("ticket-ECM");'); + await BrowserActions.getUrl(browser.params.testConfig.adf.url + '/files'); + await loginPage.waitForElements(); }); - it('[C279932] Should successRoute property change the landing page when the user Login', () => { - loginPage.goToLoginPage(); - loginPage.clickSettingsIcon(); - settingsPage.setProviderEcmBpm(); - loginPage.enableSuccessRouteSwitch(); - loginPage.enterSuccessRoute('activiti'); - loginPage.login(adminUserModel.id, adminUserModel.password); - processServicesPage.checkApsContainer(); + it('[C279932] Should successRoute property change the landing page when the user Login', async () => { + await loginPage.goToLoginPage(); + await loginPage.clickSettingsIcon(); + await settingsPage.setProviderEcmBpm(); + await loginPage.enableSuccessRouteSwitch(); + await loginPage.enterSuccessRoute('activiti'); + await loginPage.login(adminUserModel.id, adminUserModel.password); + await processServicesPage.checkApsContainer(); }); - it('[C279931] Should the user be redirect to the login page when the Process Service session expire', () => { - loginPage.goToLoginPage(); - loginPage.clickSettingsIcon(); - settingsPage.setProviderEcmBpm(); - loginPage.login(adminUserModel.id, adminUserModel.password); - browser.executeScript('window.localStorage.removeItem("ticket-BPM");'); - BrowserActions.getUrl(browser.params.testConfig.adf.url + '/activiti'); - loginPage.waitForElements(); + it('[C279931] Should the user be redirect to the login page when the Process Service session expire', async () => { + await loginPage.goToLoginPage(); + await loginPage.clickSettingsIcon(); + await settingsPage.setProviderEcmBpm(); + await loginPage.login(adminUserModel.id, adminUserModel.password); + await browser.executeScript('window.localStorage.removeItem("ticket-BPM");'); + await BrowserActions.getUrl(browser.params.testConfig.adf.url + '/activiti'); + await loginPage.waitForElements(); }); - it('[C279930] Should a user still be logged-in when open a new tab', () => { - loginPage.goToLoginPage(); - loginPage.clickSettingsIcon(); - settingsPage.setProviderEcmBpm(); - loginPage.login(adminUserModel.id, adminUserModel.password); + it('[C279930] Should a user still be logged-in when open a new tab', async () => { + await loginPage.goToLoginPage(); + await loginPage.clickSettingsIcon(); + await settingsPage.setProviderEcmBpm(); + await loginPage.login(adminUserModel.id, adminUserModel.password); - Util.openNewTabInBrowser(); + await Util.openNewTabInBrowser(); - browser.getAllWindowHandles().then((handles) => { - - browser.switchTo().window(handles[1]).then(() => { - BrowserActions.getUrl(browser.params.testConfig.adf.url + '/activiti'); - processServicesPage.checkApsContainer(); - BrowserActions.getUrl(browser.params.testConfig.adf.url + '/files'); - contentServicesPage.checkAcsContainer(); - }); - }); + const handles = await browser.getAllWindowHandles(); + await browser.switchTo().window(handles[1]); + await BrowserActions.getUrl(browser.params.testConfig.adf.url + '/activiti'); + await processServicesPage.checkApsContainer(); + await BrowserActions.getUrl(browser.params.testConfig.adf.url + '/files'); + await contentServicesPage.checkAcsContainer(); }); - it('[C279933] Should be possible change the login component logo when logoImageUrl is changed', () => { - loginPage.goToLoginPage(); - loginPage.clickSettingsIcon(); - settingsPage.setProviderEcmBpm(); - loginPage.enableLogoSwitch(); - loginPage.enterLogo('https://rawgit.com/Alfresco/alfresco-ng2-components/master/assets/angular2.png'); - loginPage.checkLoginImgURL(); + it('[C279933] Should be possible change the login component logo when logoImageUrl is changed', async () => { + await loginPage.goToLoginPage(); + await loginPage.clickSettingsIcon(); + await settingsPage.setProviderEcmBpm(); + await loginPage.enableLogoSwitch(); + await loginPage.enterLogo('https://rawgit.com/Alfresco/alfresco-ng2-components/master/assets/angular2.png'); + await loginPage.checkLoginImgURL(); }); - it('[C291854] Should be possible login in valid credentials', () => { - BrowserActions.getUrl(browser.params.testConfig.adf.url); - loginPage.waitForElements(); - expect(loginPage.getSignInButtonIsEnabled()).toBe(false); - loginPage.enterUsername(invalidUsername); - expect(loginPage.getSignInButtonIsEnabled()).toBe(false); - loginPage.enterPassword(invalidPassword); - expect(loginPage.getSignInButtonIsEnabled()).toBe(true); - loginPage.clickSignInButton(); - expect(loginPage.getLoginError()).toEqual(errorMessages.invalid_credentials); - loginPage.login(adminUserModel.id, adminUserModel.password); + it('[C291854] Should be possible login in valid credentials', async () => { + await BrowserActions.getUrl(browser.params.testConfig.adf.url); + await loginPage.waitForElements(); + await expect(await loginPage.getSignInButtonIsEnabled()).toBe(false); + await loginPage.enterUsername(invalidUsername); + await expect(await loginPage.getSignInButtonIsEnabled()).toBe(false); + await loginPage.enterPassword(invalidPassword); + await expect(await loginPage.getSignInButtonIsEnabled()).toBe(true); + await loginPage.clickSignInButton(); + await expect(await loginPage.getLoginError()).toEqual(errorMessages.invalid_credentials); + await loginPage.login(adminUserModel.id, adminUserModel.password); }); }); diff --git a/e2e/core/login/login-sso/login-sso-error.e2e.ts b/e2e/core/login/login-sso/login-sso-error.e2e.ts index c9b668c746..7db8469589 100644 --- a/e2e/core/login/login-sso/login-sso-error.e2e.ts +++ b/e2e/core/login/login-sso/login-sso-error.e2e.ts @@ -36,7 +36,7 @@ describe('Login component - SSO', () => { browser.params.testConfig.adf.hostIdentity, false, true, browser.params.config.oauth2.clientId); await loginSSOPage.clickOnSSOButton(); await loginSSOPage.checkLoginErrorIsDisplayed(); - expect(loginSSOPage.getLoginErrorMessage()).toContain('SSO Authentication server unreachable'); + await expect(loginSSOPage.getLoginErrorMessage()).toContain('SSO Authentication server unreachable'); }); }); diff --git a/e2e/core/login/login-sso/login-sso.e2e.ts b/e2e/core/login/login-sso/login-sso.e2e.ts index c17c891641..9cfe18d03d 100644 --- a/e2e/core/login/login-sso/login-sso.e2e.ts +++ b/e2e/core/login/login-sso/login-sso.e2e.ts @@ -15,7 +15,7 @@ * limitations under the License. */ -import { LoginSSOPage, SettingsPage, LoginPage } from '@alfresco/adf-testing'; +import { LoginSSOPage, SettingsPage, LoginPage, BrowserVisibility } from '@alfresco/adf-testing'; import { browser } from 'protractor'; import { NavigationBarPage } from '../../../pages/adf/navigationBarPage'; @@ -29,21 +29,6 @@ describe('Login component - SSO', () => { const silentLogin = false; let implicitFlow; - it('[C280665] Should be possible change the logout redirect URL', async () => { - await settingsPage.setProviderEcmSso(browser.params.testConfig.adf.url, - browser.params.testConfig.adf.hostSso, - browser.params.testConfig.adf.hostIdentity, false, true, browser.params.config.oauth2.clientId, '/login'); - await loginSSOPage.clickOnSSOButton(); - await loginSSOPage.loginSSOIdentityService(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); - await navigationBarPage.clickLogoutButton(); - - browser.sleep(2000); - - browser.getCurrentUrl().then((actualUrl) => { - expect(actualUrl).toEqual(browser.params.testConfig.adf.url + '/login'); - }); - }); - describe('Login component - SSO Grant type password (implicit flow false)', () => { it('[C299158] Should be possible to login with SSO, with grant type password (Implicit Flow false)', async () => { @@ -63,28 +48,18 @@ describe('Login component - SSO', () => { await loginPage.enterPassword(browser.params.testConfig.adf.adminPassword); await loginPage.clickSignInButton(); - let isDisplayed = false; + await BrowserVisibility.waitUntilElementIsVisible(loginPage.sidenavLayout); - browser.wait(() => { - loginPage.header.isDisplayed().then( - () => { - isDisplayed = true; - }, - () => { - isDisplayed = false; - } - ); - return isDisplayed; - }, browser.params.testConfig.main.timeout, 'Element is not visible ' + loginPage.header.locator()); }); }); describe('Login component - SSO implicit Flow', () => { - afterEach(() => { - navigationBarPage.clickLogoutButton(); - browser.executeScript('window.sessionStorage.clear();'); - browser.executeScript('window.localStorage.clear();'); + afterEach(async () => { + await navigationBarPage.clickLogoutButton(); + await browser.executeScript('window.sessionStorage.clear();'); + await browser.executeScript('window.localStorage.clear();'); + await browser.refresh(); }); it('[C261050] Should be possible login with SSO', async () => { @@ -96,7 +71,7 @@ describe('Login component - SSO', () => { }); it('[C280667] Should be redirect directly to keycloak without show the login page with silent login', async () => { - await settingsPage.setProviderEcmSso(browser.params.testConfig.adf_acs.host, + await settingsPage.setProviderEcmSso(browser.params.testConfig.adf_acs.host, browser.params.testConfig.adf.hostSso, browser.params.testConfig.adf.hostIdentity, true, true, browser.params.config.oauth2.clientId); await loginSSOPage.loginSSOIdentityService(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); diff --git a/e2e/core/login/login-sso/logout-sso.e2e.ts b/e2e/core/login/login-sso/logout-sso.e2e.ts new file mode 100644 index 0000000000..5cddbe0ddf --- /dev/null +++ b/e2e/core/login/login-sso/logout-sso.e2e.ts @@ -0,0 +1,42 @@ +/*! + * @license + * Copyright 2019 Alfresco Software, Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { LoginSSOPage, SettingsPage } from '@alfresco/adf-testing'; +import { browser } from 'protractor'; +import { NavigationBarPage } from '../../../pages/adf/navigationBarPage'; + +describe('Logout component - SSO', () => { + + const settingsPage = new SettingsPage(); + const loginSSOPage = new LoginSSOPage(); + const navigationBarPage = new NavigationBarPage(); + + it('[C280665] Should be possible change the logout redirect URL', async () => { + await settingsPage.setProviderEcmSso(browser.params.testConfig.adf.url, + browser.params.testConfig.adf.hostSso, + browser.params.testConfig.adf.hostIdentity, false, true, browser.params.config.oauth2.clientId, '/login'); + await loginSSOPage.clickOnSSOButton(); + await loginSSOPage.loginSSOIdentityService(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); + await navigationBarPage.clickLogoutButton(); + + await browser.sleep(2000); + + const actualUrl = await browser.getCurrentUrl(); + await expect(actualUrl).toEqual(browser.params.testConfig.adf.url + '/login'); + }); + +}); diff --git a/e2e/core/login/redirection.e2e.ts b/e2e/core/login/redirection.e2e.ts index 4e8cdff225..1e00ff1ece 100644 --- a/e2e/core/login/redirection.e2e.ts +++ b/e2e/core/login/redirection.e2e.ts @@ -48,7 +48,7 @@ describe('Login component - Redirect', () => { const uploadActions = new UploadActions(this.alfrescoJsApi); const logoutPage = new LogoutPage(); - beforeAll(async (done) => { + beforeAll(async () => { await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); @@ -59,118 +59,111 @@ describe('Login component - Redirect', () => { uploadedFolder = await uploadActions.createFolder('protecteFolder' + StringUtil.generateRandomString(), '-my-'); - done(); }); - it('[C213838] Should after login in CS be redirect to Login page when try to access to PS', () => { - loginPage.goToLoginPage(); - loginPage.clickSettingsIcon(); - settingsPage.setProviderEcm(); - loginPage.login(user.id, user.password); + it('[C213838] Should after login in CS be redirect to Login page when try to access to PS', async () => { + await loginPage.goToLoginPage(); + await loginPage.clickSettingsIcon(); + await settingsPage.setProviderEcm(); + await loginPage.login(user.id, user.password); - navigationBarPage.clickContentServicesButton(); - contentServicesPage.checkAcsContainer(); + await navigationBarPage.clickContentServicesButton(); + await contentServicesPage.checkAcsContainer(); - navigationBarPage.navigateToProcessServicesPage(); + await navigationBarPage.navigateToProcessServicesPage(); - loginPage.waitForElements(); + await loginPage.waitForElements(); }); - it('[C260085] Should after login in PS be redirect to Login page when try to access to CS', () => { - loginPage.goToLoginPage(); - loginPage.clickSettingsIcon(); - settingsPage.setProviderBpm(); + it('[C260085] Should after login in PS be redirect to Login page when try to access to CS', async () => { + await loginPage.goToLoginPage(); + await loginPage.clickSettingsIcon(); + await settingsPage.setProviderBpm(); - loginPage.enableSuccessRouteSwitch(); - loginPage.enterSuccessRoute('activiti'); + await loginPage.enableSuccessRouteSwitch(); + await loginPage.enterSuccessRoute('activiti'); - loginPage.login(adminUserModel.id, adminUserModel.password); + await loginPage.login(adminUserModel.id, adminUserModel.password); - navigationBarPage.navigateToProcessServicesPage(); - processServicesPage.checkApsContainer(); + await navigationBarPage.navigateToProcessServicesPage(); + await processServicesPage.checkApsContainer(); - navigationBarPage.clickContentServicesButton(); + await navigationBarPage.clickContentServicesButton(); - loginPage.waitForElements(); + await loginPage.waitForElements(); }); - it('[C260081] Should after login in BOTH not be redirect to Login page when try to access to CS or PS', () => { - loginPage.goToLoginPage(); - loginPage.clickSettingsIcon(); + it('[C260081] Should after login in BOTH not be redirect to Login page when try to access to CS or PS', async () => { + await loginPage.goToLoginPage(); + await loginPage.clickSettingsIcon(); - settingsPage.setProviderEcmBpm(); + await settingsPage.setProviderEcmBpm(); - loginPage.login(adminUserModel.id, adminUserModel.password); + await loginPage.login(adminUserModel.id, adminUserModel.password); - navigationBarPage.navigateToProcessServicesPage(); - processServicesPage.checkApsContainer(); + await navigationBarPage.navigateToProcessServicesPage(); + await processServicesPage.checkApsContainer(); - navigationBarPage.clickContentServicesButton(); - contentServicesPage.checkAcsContainer(); + await navigationBarPage.clickContentServicesButton(); + await contentServicesPage.checkAcsContainer(); }); - it('[C260088] Should be re-redirect to the request URL after login when try to access to a protect URL ', () => { - loginPage.goToLoginPage(); - loginPage.clickSettingsIcon(); - settingsPage.setProviderEcm(); - loginPage.login(user.id, user.password); + it('[C260088] Should be re-redirect to the request URL after login when try to access to a protect URL ', async () => { + await loginPage.goToLoginPage(); + await loginPage.clickSettingsIcon(); + await settingsPage.setProviderEcm(); + await loginPage.login(user.id, user.password); - navigationBarPage.openContentServicesFolder(uploadedFolder.entry.id); + await navigationBarPage.openContentServicesFolder(uploadedFolder.entry.id); - browser.getCurrentUrl().then((actualUrl) => { - expect(actualUrl).toEqual(browser.params.testConfig.adf.url + '/files/' + uploadedFolder.entry.id); - }); + let actualUrl = await browser.getCurrentUrl(); + await expect(actualUrl).toEqual(browser.params.testConfig.adf.url + '/files/' + uploadedFolder.entry.id); - contentServicesPage.waitForTableBody(); + await contentServicesPage.waitForTableBody(); - navigationBarPage.clickLogoutButton(); + await navigationBarPage.clickLogoutButton(); - logoutPage.checkLogoutSectionIsDisplayed(); + await logoutPage.checkLogoutSectionIsDisplayed(); - navigationBarPage.openContentServicesFolder(uploadedFolder.entry.id); + await navigationBarPage.openContentServicesFolder(uploadedFolder.entry.id); - loginPage.waitForElements(); + await loginPage.waitForElements(); - loginPage.login(user.id, user.password); - - browser.getCurrentUrl().then((actualUrl) => { - expect(actualUrl).toEqual(browser.params.testConfig.adf.url + '/files/' + uploadedFolder.entry.id); - }); + await loginPage.login(user.id, user.password); + actualUrl = await browser.getCurrentUrl(); + await expect(actualUrl).toEqual(browser.params.testConfig.adf.url + '/files/' + uploadedFolder.entry.id); }); - it('[C299161] Should redirect user to requested URL after reloading login page', () => { - loginPage.goToLoginPage(); - loginPage.clickSettingsIcon(); - settingsPage.setProviderEcm(); - loginPage.login(user.id, user.password); + it('[C299161] Should redirect user to requested URL after reloading login page', async () => { + await loginPage.goToLoginPage(); + await loginPage.clickSettingsIcon(); + await settingsPage.setProviderEcm(); + await loginPage.login(user.id, user.password); - navigationBarPage.openContentServicesFolder(uploadedFolder.entry.id); + await navigationBarPage.openContentServicesFolder(uploadedFolder.entry.id); - browser.getCurrentUrl().then((actualUrl) => { - expect(actualUrl).toEqual(browser.params.testConfig.adf.url + '/files/' + uploadedFolder.entry.id); - }); + const currentUrl = await browser.getCurrentUrl(); + await expect(currentUrl).toEqual(browser.params.testConfig.adf.url + '/files/' + uploadedFolder.entry.id); - contentServicesPage.waitForTableBody(); + await contentServicesPage.waitForTableBody(); - navigationBarPage.clickLogoutButton(); + await navigationBarPage.clickLogoutButton(); - logoutPage.checkLogoutSectionIsDisplayed(); + await logoutPage.checkLogoutSectionIsDisplayed(); - navigationBarPage.openContentServicesFolder(uploadedFolder.entry.id); - loginPage.waitForElements(); - browser.refresh(); - loginPage.waitForElements(); + await navigationBarPage.openContentServicesFolder(uploadedFolder.entry.id); + await loginPage.waitForElements(); + await browser.refresh(); + await loginPage.waitForElements(); - loginPage.enterUsername(user.id); - loginPage.enterPassword(user.password); - loginPage.clickSignInButton(); + await loginPage.enterUsername(user.id); + await loginPage.enterPassword(user.password); + await loginPage.clickSignInButton(); - navigationBarPage.checkMenuButtonIsDisplayed(); - - browser.getCurrentUrl().then((actualUrl) => { - expect(actualUrl).toEqual(browser.params.testConfig.adf.url + '/files/' + uploadedFolder.entry.id); - }); + await navigationBarPage.checkMenuButtonIsDisplayed(); + const actualUrl = await browser.getCurrentUrl(); + await expect(actualUrl).toEqual(browser.params.testConfig.adf.url + '/files/' + uploadedFolder.entry.id); }); }); diff --git a/e2e/core/login/remember-me.e2e.ts b/e2e/core/login/remember-me.e2e.ts index 24213ac962..53bb57fdb1 100644 --- a/e2e/core/login/remember-me.e2e.ts +++ b/e2e/core/login/remember-me.e2e.ts @@ -22,16 +22,15 @@ describe('Login component - Remember Me', () => { const settingsPage = new SettingsPage(); const loginPage = new LoginPage(); - beforeAll((done) => { - loginPage.goToLoginPage(); - loginPage.clickSettingsIcon(); - settingsPage.setProviderEcmBpm(); - done(); + beforeAll(async () => { + await loginPage.goToLoginPage(); + await loginPage.clickSettingsIcon(); + await settingsPage.setProviderEcmBpm(); }); - it('[C260501] Should Remember me checkbox not be present in the login if the property showRememberMe is false', () => { - loginPage.checkRememberIsDisplayed(); - loginPage.disableRememberMe(); - loginPage.checkRememberIsNotDisplayed(); + it('[C260501] Should Remember me checkbox not be present in the login if the property showRememberMe is false', async () => { + await loginPage.checkRememberIsDisplayed(); + await loginPage.disableRememberMe(); + await loginPage.checkRememberIsNotDisplayed(); }); }); diff --git a/e2e/core/pagination-empty-current-page.e2e.ts b/e2e/core/pagination-empty-current-page.e2e.ts index 7ff27bbeb3..22b926f2dd 100644 --- a/e2e/core/pagination-empty-current-page.e2e.ts +++ b/e2e/core/pagination-empty-current-page.e2e.ts @@ -30,7 +30,6 @@ import { UploadActions } from '@alfresco/adf-testing'; import { Util } from '../util/util'; import resources = require('../util/resources'); import { browser } from 'protractor'; -import { NavigationBarPage } from '../pages/adf/navigationBarPage'; describe('Pagination - returns to previous page when current is empty', () => { @@ -38,7 +37,6 @@ describe('Pagination - returns to previous page when current is empty', () => { const contentServicesPage = new ContentServicesPage(); const paginationPage = new PaginationPage(); const viewerPage = new ViewerPage(); - const navigationBarPage = new NavigationBarPage(); const acsUser = new AcsUserModel(); const folderModel = new FolderModel({ 'name': 'folderOne' }); @@ -67,7 +65,7 @@ describe('Pagination - returns to previous page when current is empty', () => { 'location': resources.Files.ADF_DOCUMENTS.PNG.file_location }); - beforeAll(async (done) => { + beforeAll(async () => { this.alfrescoJsApi = new AlfrescoApi({ provider: 'ECM', hostEcm: browser.params.testConfig.adf_acs.host @@ -98,79 +96,71 @@ describe('Pagination - returns to previous page when current is empty', () => { await loginPage.loginToContentServicesUsingUserModel(acsUser); - contentServicesPage.goToDocumentList(); - - done(); - }); - - afterAll(async () => { - await navigationBarPage.clickLogoutButton(); - }); - - it('[C274710] Should redirect to previous page when current is emptied', () => { - contentServicesPage.doubleClickRow(folderModel.name); - contentServicesPage.checkAcsContainer(); - contentServicesPage.waitForTableBody(); - - paginationPage.selectItemsPerPage(itemsPerPage.five); - - contentServicesPage.checkAcsContainer(); - contentServicesPage.waitForTableBody(); - - expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.five); - expect(contentServicesPage.numberOfResultsDisplayed()).toBe(itemsPerPage.fiveValue); - - contentServicesPage.getAllRowsNameColumn().then((list) => { - expect(Util.arrayContainsArray(list, fileNames.slice(0, 5))).toEqual(true); - }); - - paginationPage.clickOnNextPage(); - - contentServicesPage.checkAcsContainer(); - contentServicesPage.waitForTableBody(); - - expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.five); - - contentServicesPage.getAllRowsNameColumn().then((list) => { - expect(Util.arrayContainsArray(list, fileNames.slice(5, 6))).toEqual(true); - }); - - contentServicesPage.deleteContent(lastFile); - contentServicesPage.checkContentIsNotDisplayed(lastFile); - - expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.five); - expect(contentServicesPage.numberOfResultsDisplayed()).toBe(itemsPerPage.fiveValue); - - contentServicesPage.getAllRowsNameColumn().then((list) => { - expect(Util.arrayContainsArray(list, fileNames.slice(0, 5))).toEqual(true); - }); + await contentServicesPage.goToDocumentList(); }); - it('[C297494] Should display content when navigating to a non-empty folder not in the first page', () => { - contentServicesPage.goToDocumentList(); - contentServicesPage.doubleClickRow(parentFolderModel.name); - contentServicesPage.checkAcsContainer(); - contentServicesPage.waitForTableBody(); + it('[C274710] Should redirect to previous page when current is emptied', async () => { + await contentServicesPage.doubleClickRow(folderModel.name); + await contentServicesPage.checkAcsContainer(); + await contentServicesPage.waitForTableBody(); - paginationPage.selectItemsPerPage(itemsPerPage.five); + await paginationPage.selectItemsPerPage(itemsPerPage.five); - contentServicesPage.checkAcsContainer(); - contentServicesPage.waitForTableBody(); + await contentServicesPage.checkAcsContainer(); + await contentServicesPage.waitForTableBody(); - expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.five); - expect(contentServicesPage.numberOfResultsDisplayed()).toBe(itemsPerPage.fiveValue); + await expect(await paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.five); + await expect(await contentServicesPage.numberOfResultsDisplayed()).toBe(itemsPerPage.fiveValue); - paginationPage.clickOnNextPage(); + let list = await contentServicesPage.getAllRowsNameColumn(); + await expect(Util.arrayContainsArray(list, fileNames.slice(0, 5))).toEqual(true); - contentServicesPage.checkAcsContainer(); - contentServicesPage.waitForTableBody(); + await paginationPage.clickOnNextPage(); - contentServicesPage.doubleClickRow(lastFolderResponse.entry.name); - contentServicesPage.checkContentIsDisplayed(pngFileInfo.name); + await contentServicesPage.checkAcsContainer(); + await contentServicesPage.waitForTableBody(); - viewerPage.viewFile(pngFileUploaded.entry.name); - viewerPage.checkImgViewerIsDisplayed(); - viewerPage.clickCloseButton(); + await expect(await paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.five); + + list = await contentServicesPage.getAllRowsNameColumn(); + await expect(Util.arrayContainsArray(list, fileNames.slice(5, 6))).toEqual(true); + + await contentServicesPage.deleteContent(lastFile); + await contentServicesPage.checkContentIsNotDisplayed(lastFile); + + await expect(await paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.five); + await expect(await contentServicesPage.numberOfResultsDisplayed()).toBe(itemsPerPage.fiveValue); + + list = await contentServicesPage.getAllRowsNameColumn(); + await expect(Util.arrayContainsArray(list, fileNames.slice(0, 5))).toEqual(true); + + }); + + it('[C297494] Should display content when navigating to a non-empty folder not in the first page', async () => { + await contentServicesPage.goToDocumentList(); + await contentServicesPage.doubleClickRow(parentFolderModel.name); + await contentServicesPage.checkAcsContainer(); + await contentServicesPage.waitForTableBody(); + + await paginationPage.selectItemsPerPage(itemsPerPage.five); + + await contentServicesPage.checkAcsContainer(); + await contentServicesPage.waitForTableBody(); + + await expect(await paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.five); + await expect(await contentServicesPage.numberOfResultsDisplayed()).toBe(itemsPerPage.fiveValue); + + await paginationPage.clickOnNextPage(); + + await contentServicesPage.checkAcsContainer(); + await contentServicesPage.waitForTableBody(); + + await contentServicesPage.doubleClickRow(lastFolderResponse.entry.name); + await contentServicesPage.checkContentIsDisplayed(pngFileInfo.name); + + await viewerPage.viewFile(pngFileUploaded.entry.name); + await viewerPage.checkImgViewerIsDisplayed(); + await viewerPage.clickCloseButton(); }); }); diff --git a/e2e/core/settings-component.e2e.ts b/e2e/core/settings-component.e2e.ts index 4900537f27..bc6fd7f4b9 100644 --- a/e2e/core/settings-component.e2e.ts +++ b/e2e/core/settings-component.e2e.ts @@ -39,179 +39,182 @@ describe('Settings component', () => { }); describe('Should be able to change Urls in the Settings', () => { - beforeEach( (done) => { - settingsPage.goToSettingsPage(); - done(); - }); - - it('[C245641] Should navigate User from Settings page to Login screen', () => { - settingsPage.clickBackButton(); - loginPage.waitForElements(); - }); - - it('[C291948] Should save ALL Settings changes when User clicks Apply button', () => { - loginPage.goToLoginPage(); - loginPage.clickSettingsIcon(); - settingsPage.setProviderEcmBpm(); - loginPage.waitForElements(); - settingsPage.goToSettingsPage(); - expect(settingsPage.getSelectedOptionText()).toEqual('ALL', 'The Settings changes are not saved'); - expect(settingsPage.getBpmHostUrl()).toEqual(browser.params.testConfig.adf_aps.host, 'The BPM Settings changes are not saved'); - expect(settingsPage.getEcmHostUrl()).toEqual(browser.params.testConfig.adf_acs.host, 'The ECM Settings changes are not saved'); + beforeEach(async () => { + await settingsPage.goToSettingsPage(); }); - it('[C291949] Should have field validation for Content Services Url', () => { - settingsPage.setProvider(settingsPage.getEcmAndBpmOption(), 'ALL'); - settingsPage.clearContentServicesURL(); - settingsPage.ecmText.sendKeys(protractor.Key.TAB); - settingsPage.checkValidationMessageIsDisplayed(); - settingsPage.checkApplyButtonIsDisabled(); + it('[C245641] Should navigate User from Settings page to Login screen', async () => { + await settingsPage.clickBackButton(); + await loginPage.waitForElements(); }); - it('[C291950] Should have field validation for Process Services Url', () => { - settingsPage.setProvider(settingsPage.getEcmAndBpmOption(), 'ALL'); - settingsPage.clearProcessServicesURL(); - settingsPage.bpmText.sendKeys(protractor.Key.TAB); - settingsPage.checkValidationMessageIsDisplayed(); - settingsPage.checkApplyButtonIsDisabled(); + it('[C291948] Should save ALL Settings changes when User clicks Apply button', async () => { + await loginPage.goToLoginPage(); + await loginPage.clickSettingsIcon(); + await settingsPage.setProviderEcmBpm(); + await loginPage.waitForElements(); + await settingsPage.goToSettingsPage(); + await expect(await settingsPage.getSelectedOptionText()).toEqual('ALL', 'The Settings changes are not saved'); + await expect(await settingsPage.getBpmHostUrl()).toEqual(browser.params.testConfig.adf_aps.host, 'The BPM Settings changes are not saved'); + await expect(await settingsPage.getEcmHostUrl()).toEqual(browser.params.testConfig.adf_acs.host, 'The ECM Settings changes are not saved'); + }); - it('[C291951] Should not be able to sign in with invalid Content Services Url', () => { - settingsPage.setProvider(settingsPage.getEcmOption(), 'ECM'); - settingsPage.setContentServicesURL('http://localhost:7070'); - settingsPage.clickApply(); - loginPage.waitForElements(); - loginPage.enterUsername(adminUserModel.id); - loginPage.enterPassword(adminUserModel.password); - loginPage.clickSignInButton(); - expect(loginPage.getLoginError()).toMatch(loginError); + it('[C291949] Should have field validation for Content Services Url', async () => { + await settingsPage.setProvider(settingsPage.getEcmAndBpmOption(), 'ALL'); + await settingsPage.clearContentServicesURL(); + await settingsPage.ecmText.sendKeys(protractor.Key.TAB); + await settingsPage.checkValidationMessageIsDisplayed(); + await settingsPage.checkApplyButtonIsDisabled(); }); - it('[C291952] Should not be able to sign in with invalid Process Services Url', () => { - settingsPage.setProvider(settingsPage.getBpmOption(), 'BPM'); - settingsPage.setProcessServicesURL('http://localhost:7070'); - settingsPage.clickApply(); - loginPage.waitForElements(); - loginPage.enterUsername(adminUserModel.id); - loginPage.enterPassword(adminUserModel.password); - loginPage.clickSignInButton(); - expect(loginPage.getLoginError()).toMatch(loginError); + it('[C291950] Should have field validation for Process Services Url', async () => { + await settingsPage.setProvider(settingsPage.getEcmAndBpmOption(), 'ALL'); + await settingsPage.clearProcessServicesURL(); + await settingsPage.bpmText.sendKeys(protractor.Key.TAB); + await settingsPage.checkValidationMessageIsDisplayed(); + await settingsPage.checkApplyButtonIsDisabled(); + }); + + it('[C291951] Should not be able to sign in with invalid Content Services Url', async () => { + await settingsPage.setProvider(settingsPage.getEcmOption(), 'ECM'); + await settingsPage.setContentServicesURL('http://localhost:7070'); + await settingsPage.clickApply(); + await loginPage.waitForElements(); + await loginPage.enterUsername(adminUserModel.id); + await loginPage.enterPassword(adminUserModel.password); + await loginPage.clickSignInButton(); + await expect(await loginPage.getLoginError()).toMatch(loginError); + }); + + it('[C291952] Should not be able to sign in with invalid Process Services Url', async () => { + await settingsPage.setProvider(settingsPage.getBpmOption(), 'BPM'); + await settingsPage.setProcessServicesURL('http://localhost:7070'); + await settingsPage.clickApply(); + await loginPage.waitForElements(); + await loginPage.enterUsername(adminUserModel.id); + await loginPage.enterPassword(adminUserModel.password); + await loginPage.clickSignInButton(); + await expect(await loginPage.getLoginError()).toMatch(loginError); }); }); describe('Settings Component - Basic Authentication', () => { - beforeAll( (done) => { - settingsPage.goToSettingsPage(); - settingsPage.setProvider(settingsPage.getEcmAndBpmOption(), 'ALL'); - settingsPage.setContentServicesURL(browser.params.testConfig.adf_acs.host); - settingsPage.setProcessServicesURL(browser.params.testConfig.adf_aps.host); - settingsPage.clickApply(); - done(); + beforeAll(async () => { + await settingsPage.goToSettingsPage(); + await settingsPage.setProvider(settingsPage.getEcmAndBpmOption(), 'ALL'); + await settingsPage.setContentServicesURL(browser.params.testConfig.adf_acs.host); + await settingsPage.setProcessServicesURL(browser.params.testConfig.adf_aps.host); + await settingsPage.clickApply(); }); - beforeEach( (done) => { - loginPage.goToLoginPage(); - loginPage.clickSettingsIcon(); - settingsPage.checkProviderDropdownIsDisplayed(); - done(); + beforeEach(async () => { + await loginPage.goToLoginPage(); + await loginPage.clickSettingsIcon(); + await settingsPage.checkProviderDropdownIsDisplayed(); }); - it('[C277751] Should allow the User to login to Process Services using the BPM selection on Settings page', () => { - settingsPage.checkProviderOptions(); - settingsPage.checkBasicAuthRadioIsSelected(); - settingsPage.checkSsoRadioIsNotSelected(); - expect(settingsPage.getEcmHostUrl()).toBe(browser.params.testConfig.adf_acs.host); - expect(settingsPage.getBpmHostUrl()).toBe(browser.params.testConfig.adf_aps.host); - expect(settingsPage.getBackButton().isEnabled()).toBe(true); - expect(settingsPage.getApplyButton().isEnabled()).toBe(true); - loginPage.goToLoginPage(); - loginPage.clickSettingsIcon(); - settingsPage.checkProviderDropdownIsDisplayed(); - settingsPage.setProvider(settingsPage.getBpmOption(), 'BPM'); - settingsPage.clickBackButton(); - loginPage.waitForElements(); - loginPage.clickSettingsIcon(); - settingsPage.checkProviderDropdownIsDisplayed(); - settingsPage.setProviderBpm(); - loginPage.waitForElements(); - loginPage.enterUsername(adminUserModel.id); - loginPage.enterPassword(adminUserModel.password); - loginPage.clickSignInButton(); - navigationBarPage.navigateToProcessServicesPage(); - processServicesPage.checkApsContainer(); - processServicesPage.checkAppIsDisplayed('Task App'); - navigationBarPage.navigateToSettingsPage(); - expect(settingsPage.getSelectedOptionText()).toBe('BPM'); - settingsPage.checkBasicAuthRadioIsSelected(); - settingsPage.checkSsoRadioIsNotSelected(); - expect(settingsPage.getBpmHostUrl()).toBe(browser.params.testConfig.adf_aps.host); - expect(settingsPage.getBackButton().isEnabled()).toBe(true); - expect(settingsPage.getApplyButton().isEnabled()).toBe(true); - settingsPage.clickBackButton(); - loginPage.waitForElements(); - BrowserActions.getUrl(browser.params.testConfig.adf.url + '/activiti'); - processServicesPage.checkApsContainer(); - processServicesPage.checkAppIsDisplayed('Task App'); + it('[C277751] Should allow the User to login to Process Services using the BPM selection on Settings page', async () => { + await settingsPage.checkProviderOptions(); + await settingsPage.checkBasicAuthRadioIsSelected(); + await settingsPage.checkSsoRadioIsNotSelected(); + await expect(await settingsPage.getEcmHostUrl()).toBe(browser.params.testConfig.adf_acs.host); + await expect(await settingsPage.getBpmHostUrl()).toBe(browser.params.testConfig.adf_aps.host); + + await expect(await settingsPage.getBackButton().isEnabled()).toBe(true); + await expect(await settingsPage.getApplyButton().isEnabled()).toBe(true); + await loginPage.goToLoginPage(); + await loginPage.clickSettingsIcon(); + await settingsPage.checkProviderDropdownIsDisplayed(); + await settingsPage.setProvider(settingsPage.getBpmOption(), 'BPM'); + await settingsPage.clickBackButton(); + await loginPage.waitForElements(); + await loginPage.clickSettingsIcon(); + await settingsPage.checkProviderDropdownIsDisplayed(); + await settingsPage.setProviderBpm(); + await loginPage.waitForElements(); + await loginPage.enterUsername(adminUserModel.id); + await loginPage.enterPassword(adminUserModel.password); + await loginPage.clickSignInButton(); + await navigationBarPage.navigateToProcessServicesPage(); + await processServicesPage.checkApsContainer(); + await processServicesPage.checkAppIsDisplayed('Task App'); + await navigationBarPage.clickSettingsButton(); + await expect(await settingsPage.getSelectedOptionText()).toBe('BPM'); + + await settingsPage.checkBasicAuthRadioIsSelected(); + await settingsPage.checkSsoRadioIsNotSelected(); + await expect(await settingsPage.getBpmHostUrl()).toBe(browser.params.testConfig.adf_aps.host); + + await expect(await settingsPage.getBackButton().isEnabled()).toBe(true); + await expect(await settingsPage.getApplyButton().isEnabled()).toBe(true); + await settingsPage.clickBackButton(); + await loginPage.waitForElements(); + await BrowserActions.getUrl(browser.params.testConfig.adf.url + '/activiti'); + await processServicesPage.checkApsContainer(); + await processServicesPage.checkAppIsDisplayed('Task App'); }); - it('[C277752] Should allow the User to login to Content Services using the ECM selection on Settings page', () => { - settingsPage.setProvider(settingsPage.getEcmOption(), 'ECM'); - settingsPage.clickBackButton(); - loginPage.waitForElements(); - loginPage.clickSettingsIcon(); - settingsPage.checkProviderDropdownIsDisplayed(); - settingsPage.setProviderEcm(); - loginPage.waitForElements(); - loginPage.enterUsername(adminUserModel.id); - loginPage.enterPassword(adminUserModel.password); - loginPage.clickSignInButton(); - navigationBarPage.clickContentServicesButton(); - contentServicesPage.checkAcsContainer(); - navigationBarPage.navigateToSettingsPage(); - expect(settingsPage.getSelectedOptionText()).toBe('ECM'); - settingsPage.checkBasicAuthRadioIsSelected(); - settingsPage.checkSsoRadioIsNotSelected(); - expect(settingsPage.getEcmHostUrl()).toBe(browser.params.testConfig.adf_acs.host); - expect(settingsPage.getBackButton().isEnabled()).toBe(true); - expect(settingsPage.getApplyButton().isEnabled()).toBe(true); - settingsPage.clickBackButton(); - loginPage.waitForElements(); - BrowserActions.getUrl(browser.params.testConfig.adf.url + '/files'); - contentServicesPage.checkAcsContainer(); + it('[C277752] Should allow the User to login to Content Services using the ECM selection on Settings page', async () => { + await settingsPage.setProvider(settingsPage.getEcmOption(), 'ECM'); + await settingsPage.clickBackButton(); + await loginPage.waitForElements(); + await loginPage.clickSettingsIcon(); + await settingsPage.checkProviderDropdownIsDisplayed(); + await settingsPage.setProviderEcm(); + await loginPage.waitForElements(); + await loginPage.enterUsername(adminUserModel.id); + await loginPage.enterPassword(adminUserModel.password); + await loginPage.clickSignInButton(); + await navigationBarPage.clickContentServicesButton(); + await contentServicesPage.checkAcsContainer(); + await navigationBarPage.clickSettingsButton(); + await expect(await settingsPage.getSelectedOptionText()).toBe('ECM'); + await settingsPage.checkBasicAuthRadioIsSelected(); + await settingsPage.checkSsoRadioIsNotSelected(); + + await expect(await settingsPage.getEcmHostUrl()).toBe(browser.params.testConfig.adf_acs.host); + await expect(await settingsPage.getBackButton().isEnabled()).toBe(true); + await expect(await settingsPage.getApplyButton().isEnabled()).toBe(true); + await settingsPage.clickBackButton(); + await loginPage.waitForElements(); + await BrowserActions.getUrl(browser.params.testConfig.adf.url + '/files'); + await contentServicesPage.checkAcsContainer(); }); - it('[C277753] Should allow the User to login to both Process Services and Content Services using the ALL selection on Settings Page', () => { - settingsPage.setProvider(settingsPage.getEcmAndBpmOption(), 'ALL'); - settingsPage.clickBackButton(); - loginPage.waitForElements(); - loginPage.clickSettingsIcon(); - settingsPage.checkProviderDropdownIsDisplayed(); - settingsPage.setProviderEcmBpm(); - loginPage.waitForElements(); - loginPage.enterUsername(adminUserModel.id); - loginPage.enterPassword(adminUserModel.password); - loginPage.clickSignInButton(); - navigationBarPage.clickContentServicesButton(); - contentServicesPage.checkAcsContainer(); - navigationBarPage.navigateToProcessServicesPage(); - processServicesPage.checkApsContainer(); - processServicesPage.checkAppIsDisplayed('Task App'); - navigationBarPage.navigateToSettingsPage(); - expect(settingsPage.getSelectedOptionText()).toBe('ALL'); - settingsPage.checkBasicAuthRadioIsSelected(); - settingsPage.checkSsoRadioIsNotSelected(); - expect(settingsPage.getEcmHostUrl()).toBe(browser.params.testConfig.adf_acs.host); - expect(settingsPage.getBpmHostUrl()).toBe(browser.params.testConfig.adf_aps.host); - expect(settingsPage.getBackButton().isEnabled()).toBe(true); - expect(settingsPage.getApplyButton().isEnabled()).toBe(true); - settingsPage.clickBackButton(); - loginPage.waitForElements(); - BrowserActions.getUrl(browser.params.testConfig.adf.url + '/files'); - contentServicesPage.checkAcsContainer(); - BrowserActions.getUrl(browser.params.testConfig.adf.url + '/activiti'); - processServicesPage.checkApsContainer(); - processServicesPage.checkAppIsDisplayed('Task App'); + it('[C277753] Should allow the User to login to both Process Services and Content Services using the ALL selection on Settings Page', async () => { + await settingsPage.setProvider(settingsPage.getEcmAndBpmOption(), 'ALL'); + await settingsPage.clickBackButton(); + await loginPage.waitForElements(); + await loginPage.clickSettingsIcon(); + await settingsPage.checkProviderDropdownIsDisplayed(); + await settingsPage.setProviderEcmBpm(); + await loginPage.waitForElements(); + await loginPage.enterUsername(adminUserModel.id); + await loginPage.enterPassword(adminUserModel.password); + await loginPage.clickSignInButton(); + await navigationBarPage.clickContentServicesButton(); + await contentServicesPage.checkAcsContainer(); + await navigationBarPage.navigateToProcessServicesPage(); + await processServicesPage.checkApsContainer(); + await processServicesPage.checkAppIsDisplayed('Task App'); + await navigationBarPage.clickSettingsButton(); + await expect(await settingsPage.getSelectedOptionText()).toBe('ALL'); + await settingsPage.checkBasicAuthRadioIsSelected(); + await settingsPage.checkSsoRadioIsNotSelected(); + await expect(await settingsPage.getEcmHostUrl()).toBe(browser.params.testConfig.adf_acs.host); + await expect(await settingsPage.getBpmHostUrl()).toBe(browser.params.testConfig.adf_aps.host); + + await expect(await settingsPage.getBackButton().isEnabled()).toBe(true); + await expect(await settingsPage.getApplyButton().isEnabled()).toBe(true); + await settingsPage.clickBackButton(); + await loginPage.waitForElements(); + await BrowserActions.getUrl(browser.params.testConfig.adf.url + '/files'); + await contentServicesPage.checkAcsContainer(); + await BrowserActions.getUrl(browser.params.testConfig.adf.url + '/activiti'); + await processServicesPage.checkApsContainer(); + await processServicesPage.checkAppIsDisplayed('Task App'); }); }); }); diff --git a/e2e/core/user-info-component-cloud.e2e.ts b/e2e/core/user-info-component-cloud.e2e.ts index 27c9559f73..8a144a10d6 100644 --- a/e2e/core/user-info-component-cloud.e2e.ts +++ b/e2e/core/user-info-component-cloud.e2e.ts @@ -28,7 +28,7 @@ describe('User Info - SSO', () => { let silentLogin, identityUser; let identityService: IdentityService; - beforeAll(async (done) => { + beforeAll(async () => { const apiService = new ApiService(browser.params.config.oauth2.clientId, browser.params.testConfig.adf.url, browser.params.testConfig.adf.hostSso, 'ECM'); await apiService.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); @@ -36,15 +36,14 @@ describe('User Info - SSO', () => { identityUser = await identityService.createIdentityUser(); silentLogin = false; - settingsPage.setProviderEcmSso(browser.params.testConfig.adf.url, + await settingsPage.setProviderEcmSso(browser.params.testConfig.adf.url, browser.params.testConfig.adf.hostSso, browser.params.testConfig.adf.hostIdentity, silentLogin, true, browser.params.config.oauth2.clientId); - loginSSOPage.clickOnSSOButton(); + await loginSSOPage.clickOnSSOButton(); - loginSSOPage.loginSSOIdentityService(identityUser.email, identityUser.password); + await loginSSOPage.loginSSOIdentityService(identityUser.email, identityUser.password); - done(); }); afterAll(async () => { @@ -53,13 +52,13 @@ describe('User Info - SSO', () => { } }); - it('[C290066] Should display UserInfo when login using SSO', () => { - userInfoPage.clickUserProfile(); - expect(userInfoPage.getSsoHeaderTitle()).toEqual(identityUser.firstName + ' ' + identityUser.lastName); - expect(userInfoPage.getSsoTitle()).toEqual(identityUser.firstName + ' ' + identityUser.lastName); - expect(userInfoPage.getSsoEmail()).toEqual(identityUser.email); - userInfoPage.closeUserProfile(); - userInfoPage.dialogIsNotDisplayed(); + it('[C290066] Should display UserInfo when login using SSO', async () => { + await userInfoPage.clickUserProfile(); + await expect(await userInfoPage.getSsoHeaderTitle()).toEqual(identityUser.firstName + ' ' + identityUser.lastName); + await expect(await userInfoPage.getSsoTitle()).toEqual(identityUser.firstName + ' ' + identityUser.lastName); + await expect(await userInfoPage.getSsoEmail()).toEqual(identityUser.email); + await userInfoPage.closeUserProfile(); + await userInfoPage.dialogIsNotDisplayed(); }); }); diff --git a/e2e/core/user-info-component.e2e.ts b/e2e/core/user-info-component.e2e.ts index 0cb7f5e5d8..e65bb4a5c2 100644 --- a/e2e/core/user-info-component.e2e.ts +++ b/e2e/core/user-info-component.e2e.ts @@ -46,7 +46,7 @@ describe('User Info component', () => { 'location': resources.Files.PROFILE_IMAGES.BPM.file_location }); - beforeAll(async (done) => { + beforeAll(async () => { const users = new UsersActions(); this.alfrescoJsApi = new AlfrescoApi({ @@ -69,7 +69,6 @@ describe('User Info component', () => { await this.alfrescoJsApi.core.peopleApi.addPerson(contentUserModel); - done(); }); afterAll(async () => { @@ -79,86 +78,86 @@ describe('User Info component', () => { it('[C260111] Should display UserInfo when Process Services and Content Services are enabled', async () => { await loginPage.loginToAllUsingUserModel(contentUserModel); - userInfoPage.clickUserProfile(); + await userInfoPage.clickUserProfile(); - expect(userInfoPage.getContentHeaderTitle()).toEqual(contentUserModel.firstName + ' ' + contentUserModel.lastName); - expect(userInfoPage.getContentTitle()).toEqual(contentUserModel.firstName + ' ' + contentUserModel.lastName); - expect(userInfoPage.getContentEmail()).toEqual(contentUserModel.email); - expect(userInfoPage.getContentJobTitle()).toEqual('N/A'); + await expect(await userInfoPage.getContentHeaderTitle()).toEqual(contentUserModel.firstName + ' ' + contentUserModel.lastName); + await expect(await userInfoPage.getContentTitle()).toEqual(contentUserModel.firstName + ' ' + contentUserModel.lastName); + await expect(await userInfoPage.getContentEmail()).toEqual(contentUserModel.email); + await expect(await userInfoPage.getContentJobTitle()).toEqual('N/A'); - userInfoPage.checkInitialImage(); - userInfoPage.APSProfileImageNotDisplayed(); - userInfoPage.ACSProfileImageNotDisplayed(); - userInfoPage.clickOnContentServicesTab(); + await userInfoPage.checkInitialImage(); + await userInfoPage.APSProfileImageNotDisplayed(); + await userInfoPage.ACSProfileImageNotDisplayed(); + await userInfoPage.clickOnContentServicesTab(); - expect(userInfoPage.getContentHeaderTitle()).toEqual(contentUserModel.firstName + ' ' + contentUserModel.lastName); - expect(userInfoPage.getContentTitle()).toEqual(contentUserModel.firstName + ' ' + contentUserModel.lastName); - expect(userInfoPage.getContentEmail()).toEqual(contentUserModel.email); - expect(userInfoPage.getContentJobTitle()).toEqual('N/A'); + await expect(await userInfoPage.getContentHeaderTitle()).toEqual(contentUserModel.firstName + ' ' + contentUserModel.lastName); + await expect(await userInfoPage.getContentTitle()).toEqual(contentUserModel.firstName + ' ' + contentUserModel.lastName); + await expect(await userInfoPage.getContentEmail()).toEqual(contentUserModel.email); + await expect(await userInfoPage.getContentJobTitle()).toEqual('N/A'); - userInfoPage.checkInitialImage(); - userInfoPage.APSProfileImageNotDisplayed(); - userInfoPage.ACSProfileImageNotDisplayed(); - userInfoPage.clickOnProcessServicesTab(); - userInfoPage.checkProcessServicesTabIsSelected(); + await userInfoPage.checkInitialImage(); + await userInfoPage.APSProfileImageNotDisplayed(); + await userInfoPage.ACSProfileImageNotDisplayed(); + await userInfoPage.clickOnProcessServicesTab(); + await userInfoPage.checkProcessServicesTabIsSelected(); - expect(userInfoPage.getProcessHeaderTitle()).toEqual(contentUserModel.firstName + ' ' + contentUserModel.lastName); - expect(userInfoPage.getProcessTitle()).toEqual(contentUserModel.firstName + ' ' + processUserModel.lastName); - expect(userInfoPage.getProcessEmail()).toEqual(contentUserModel.email); + await expect(await userInfoPage.getProcessHeaderTitle()).toEqual(contentUserModel.firstName + ' ' + contentUserModel.lastName); + await expect(await userInfoPage.getProcessTitle()).toEqual(contentUserModel.firstName + ' ' + processUserModel.lastName); + await expect(await userInfoPage.getProcessEmail()).toEqual(contentUserModel.email); - userInfoPage.checkInitialImage(); - userInfoPage.APSProfileImageNotDisplayed(); - userInfoPage.ACSProfileImageNotDisplayed(); - userInfoPage.closeUserProfile(); + await userInfoPage.checkInitialImage(); + await userInfoPage.APSProfileImageNotDisplayed(); + await userInfoPage.ACSProfileImageNotDisplayed(); + await userInfoPage.closeUserProfile(); }); it('[C260113] Should display UserInfo when Content Services is enabled and Process Services is disabled', async () => { await loginPage.loginToContentServicesUsingUserModel(contentUserModel); - userInfoPage.clickUserProfile(); - userInfoPage.dialogIsDisplayed(); + await userInfoPage.clickUserProfile(); + await userInfoPage.dialogIsDisplayed(); - expect(userInfoPage.getContentHeaderTitle()).toEqual(contentUserModel.firstName + ' ' + contentUserModel.lastName); - expect(userInfoPage.getContentTitle()).toEqual(contentUserModel.firstName + ' ' + contentUserModel.lastName); - expect(userInfoPage.getContentEmail()).toEqual(contentUserModel.email); - expect(userInfoPage.getContentJobTitle()).toEqual('N/A'); + await expect(await userInfoPage.getContentHeaderTitle()).toEqual(contentUserModel.firstName + ' ' + contentUserModel.lastName); + await expect(await userInfoPage.getContentTitle()).toEqual(contentUserModel.firstName + ' ' + contentUserModel.lastName); + await expect(await userInfoPage.getContentEmail()).toEqual(contentUserModel.email); + await expect(await userInfoPage.getContentJobTitle()).toEqual('N/A'); - userInfoPage.checkInitialImage(); - userInfoPage.APSProfileImageNotDisplayed(); - userInfoPage.ACSProfileImageNotDisplayed(); - userInfoPage.closeUserProfile(); - userInfoPage.dialogIsNotDisplayed(); + await userInfoPage.checkInitialImage(); + await userInfoPage.APSProfileImageNotDisplayed(); + await userInfoPage.ACSProfileImageNotDisplayed(); + await userInfoPage.closeUserProfile(); + await userInfoPage.dialogIsNotDisplayed(); }); it('[C260115] Should display UserInfo when Process Services is enabled and Content Services is disabled', async () => { await loginPage.loginToProcessServicesUsingUserModel(contentUserModel); - userInfoPage.clickUserProfile(); + await userInfoPage.clickUserProfile(); - userInfoPage.dialogIsDisplayed(); + await userInfoPage.dialogIsDisplayed(); - expect(userInfoPage.getProcessHeaderTitle()).toEqual(processUserModel.firstName + ' ' + processUserModel.lastName); - expect(userInfoPage.getProcessTitle()).toEqual(processUserModel.firstName + ' ' + processUserModel.lastName); - expect(userInfoPage.getProcessEmail()).toEqual(processUserModel.email); + await expect(await userInfoPage.getProcessHeaderTitle()).toEqual(processUserModel.firstName + ' ' + processUserModel.lastName); + await expect(await userInfoPage.getProcessTitle()).toEqual(processUserModel.firstName + ' ' + processUserModel.lastName); + await expect(await userInfoPage.getProcessEmail()).toEqual(processUserModel.email); - userInfoPage.checkInitialImage(); - userInfoPage.APSProfileImageNotDisplayed(); - userInfoPage.ACSProfileImageNotDisplayed(); - userInfoPage.closeUserProfile(); + await userInfoPage.checkInitialImage(); + await userInfoPage.APSProfileImageNotDisplayed(); + await userInfoPage.ACSProfileImageNotDisplayed(); + await userInfoPage.closeUserProfile(); }); it('[C260117] Should display UserInfo with profile image uploaded in ACS', async () => { await PeopleAPI.updateAvatarViaAPI(contentUserModel, acsAvatarFileModel, '-me-'); - await PeopleAPI.getAvatarViaAPI(4, contentUserModel, '-me-', function () { + await PeopleAPI.getAvatarViaAPI(4, contentUserModel, '-me-', async() => { }); await loginPage.loginToContentServicesUsingUserModel(contentUserModel); - userInfoPage.clickUserProfile(); + await userInfoPage.clickUserProfile(); - userInfoPage.checkACSProfileImage(); - userInfoPage.APSProfileImageNotDisplayed(); - userInfoPage.closeUserProfile(); + await userInfoPage.checkACSProfileImage(); + await userInfoPage.APSProfileImageNotDisplayed(); + await userInfoPage.closeUserProfile(); }); it('[C260118] Should display UserInfo with profile image uploaded in APS', async () => { @@ -168,12 +167,12 @@ describe('User Info component', () => { await loginPage.loginToProcessServicesUsingUserModel(contentUserModel); - userInfoPage.clickUserProfile(); + await userInfoPage.clickUserProfile(); - userInfoPage.checkAPSProfileImage(); - userInfoPage.ACSProfileImageNotDisplayed(); - userInfoPage.initialImageNotDisplayed(); - userInfoPage.closeUserProfile(); + await userInfoPage.checkAPSProfileImage(); + await userInfoPage.ACSProfileImageNotDisplayed(); + await userInfoPage.initialImageNotDisplayed(); + await userInfoPage.closeUserProfile(); }); it('[C260120] Should not display profile image in UserInfo when deleted in ACS', async () => { @@ -181,11 +180,11 @@ describe('User Info component', () => { await loginPage.loginToContentServicesUsingUserModel(contentUserModel); - userInfoPage.clickUserProfile(); + await userInfoPage.clickUserProfile(); - userInfoPage.checkInitialImage(); - userInfoPage.APSProfileImageNotDisplayed(); - userInfoPage.ACSProfileImageNotDisplayed(); - userInfoPage.closeUserProfile(); + await userInfoPage.checkInitialImage(); + await userInfoPage.APSProfileImageNotDisplayed(); + await userInfoPage.ACSProfileImageNotDisplayed(); + await userInfoPage.closeUserProfile(); }); }); diff --git a/e2e/core/viewer/file-extensions/viewer-arcive.component.e2e.ts b/e2e/core/viewer/file-extensions/viewer-archive.component.e2e.ts similarity index 84% rename from e2e/core/viewer/file-extensions/viewer-arcive.component.e2e.ts rename to e2e/core/viewer/file-extensions/viewer-archive.component.e2e.ts index 1cfd2d7943..5632a07662 100644 --- a/e2e/core/viewer/file-extensions/viewer-arcive.component.e2e.ts +++ b/e2e/core/viewer/file-extensions/viewer-archive.component.e2e.ts @@ -47,24 +47,19 @@ describe('Viewer', () => { 'location': resources.Files.ADF_DOCUMENTS.ARCHIVE_FOLDER.folder_location }); - beforeAll(async (done) => { - + beforeAll(async () => { await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); await this.alfrescoJsApi.core.peopleApi.addPerson(acsUser); - site = await this.alfrescoJsApi.core.sitesApi.createSite({ title: StringUtil.generateRandomString(8), visibility: 'PUBLIC' }); - await this.alfrescoJsApi.core.sitesApi.addSiteMember(site.entry.id, { id: acsUser.id, role: CONSTANTS.CS_USER_ROLES.MANAGER }); - await this.alfrescoJsApi.login(acsUser.id, acsUser.password); - done(); }); afterAll(async () => { @@ -75,32 +70,28 @@ describe('Viewer', () => { let uploadedArchives; let archiveFolderUploaded; - beforeAll(async (done) => { + beforeAll(async () => { archiveFolderUploaded = await uploadActions.createFolder(archiveFolderInfo.name, '-my-'); - uploadedArchives = await uploadActions.uploadFolder(archiveFolderInfo.location, archiveFolderUploaded.entry.id); - await loginPage.loginToContentServicesUsingUserModel(acsUser); - contentServicesPage.goToDocumentList(); + await contentServicesPage.goToDocumentList(); - done(); }); - afterAll(async (done) => { + afterAll(async () => { await uploadActions.deleteFileOrFolder(archiveFolderUploaded.entry.id); - done(); + }); - it('[C260517] Should be possible to open any Archive file', () => { - contentServicesPage.doubleClickRow('archive'); - - uploadedArchives.forEach((currentFile) => { - if (currentFile.entry.name !== '.DS_Store') { - contentServicesPage.doubleClickRow(currentFile.entry.name); - viewerPage.checkFileIsLoaded(); - viewerPage.clickCloseButton(); + it('[C260517] Should be possible to open any Archive file', async () => { + await contentServicesPage.doubleClickRow('archive'); + for (const file of uploadedArchives) { + if (file.entry.name !== '.DS_Store') { + await contentServicesPage.doubleClickRow(file.entry.name); + await viewerPage.checkFileIsLoaded(); + await viewerPage.clickCloseButton(); } - }); + } }); }); diff --git a/e2e/core/viewer/file-extensions/viewer-component.e2e.ts b/e2e/core/viewer/file-extensions/viewer-component.e2e.ts index af51099397..87ed1e3d00 100644 --- a/e2e/core/viewer/file-extensions/viewer-component.e2e.ts +++ b/e2e/core/viewer/file-extensions/viewer-component.e2e.ts @@ -53,7 +53,7 @@ describe('Viewer', () => { 'location': resources.Files.ADF_DOCUMENTS.OTHER_FOLDER.folder_location }); - beforeAll(async (done) => { + beforeAll(async () => { await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); await this.alfrescoJsApi.core.peopleApi.addPerson(acsUser); @@ -70,7 +70,7 @@ describe('Viewer', () => { await this.alfrescoJsApi.login(acsUser.id, acsUser.password); pngFileUploaded = await uploadActions.uploadFile(pngFileInfo.location, pngFileInfo.name, site.entry.guid); - done(); + }); afterAll(async () => { @@ -80,14 +80,14 @@ describe('Viewer', () => { it('[C272813] Should be redirected to site when opening and closing a file in a site', async () => { await loginPage.loginToContentServicesUsingUserModel(acsUser); - navigationBarPage.goToSite(site); - contentServicesPage.checkAcsContainer(); + await navigationBarPage.goToSite(site); + await contentServicesPage.checkAcsContainer(); - viewerPage.viewFile(pngFileUploaded.entry.name); + await viewerPage.viewFile(pngFileUploaded.entry.name); - viewerPage.checkImgViewerIsDisplayed(); + await viewerPage.checkImgViewerIsDisplayed(); - viewerPage.clickCloseButton(); + await viewerPage.clickCloseButton(); }); describe('Other Folder Uploaded', () => { @@ -95,32 +95,30 @@ describe('Viewer', () => { let uploadedOthers; let otherFolderUploaded; - beforeAll(async (done) => { + beforeAll(async () => { otherFolderUploaded = await uploadActions.createFolder(otherFolderInfo.name, '-my-'); uploadedOthers = await uploadActions.uploadFolder(otherFolderInfo.location, otherFolderUploaded.entry.id); await loginPage.loginToContentServicesUsingUserModel(acsUser); - contentServicesPage.goToDocumentList(); + await contentServicesPage.goToDocumentList(); - done(); }); - afterAll(async (done) => { + afterAll(async () => { await uploadActions.deleteFileOrFolder(otherFolderUploaded.entry.id); - done(); + }); - it('[C280012] Should be possible to open any other Document supported extension', () => { - contentServicesPage.doubleClickRow('other'); - - uploadedOthers.forEach((currentFile) => { - if (currentFile.entry.name !== '.DS_Store') { - contentServicesPage.doubleClickRow(currentFile.entry.name); - viewerPage.checkFileIsLoaded(); - viewerPage.clickCloseButton(); + it('[C280012] Should be possible to open any other Document supported extension', async () => { + await contentServicesPage.doubleClickRow('other'); + for (const file of uploadedOthers) { + if (file.entry.name !== '.DS_Store') { + await contentServicesPage.doubleClickRow(file.entry.name); + await viewerPage.checkFileIsLoaded(); + await viewerPage.clickCloseButton(); } - }); + } }); }); diff --git a/e2e/core/viewer/file-extensions/viewer-excel.component.e2e.ts b/e2e/core/viewer/file-extensions/viewer-excel.component.e2e.ts index d760b79953..75da6998a8 100644 --- a/e2e/core/viewer/file-extensions/viewer-excel.component.e2e.ts +++ b/e2e/core/viewer/file-extensions/viewer-excel.component.e2e.ts @@ -24,15 +24,12 @@ import resources = require('../../../util/resources'); import { FolderModel } from '../../../models/ACS/folderModel'; import { AcsUserModel } from '../../../models/ACS/acsUserModel'; import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; -import { NavigationBarPage } from '../../../pages/adf/navigationBarPage'; describe('Viewer', () => { const viewerPage = new ViewerPage(); const loginPage = new LoginPage(); const contentServicesPage = new ContentServicesPage(); - const navigationBarPage = new NavigationBarPage(); - let site; const acsUser = new AcsUserModel(); @@ -46,7 +43,7 @@ describe('Viewer', () => { }); const uploadActions = new UploadActions(this.alfrescoJsApi); - beforeAll(async (done) => { + beforeAll(async () => { await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); await this.alfrescoJsApi.core.peopleApi.addPerson(acsUser); @@ -62,45 +59,37 @@ describe('Viewer', () => { await this.alfrescoJsApi.login(acsUser.id, acsUser.password); - done(); }); - - afterAll(async () => { - await navigationBarPage.clickLogoutButton(); - }); - describe('Excel Folder Uploaded', () => { let uploadedExcels; let excelFolderUploaded; - beforeAll(async (done) => { + beforeAll(async () => { excelFolderUploaded = await uploadActions.createFolder(excelFolderInfo.name, '-my-'); uploadedExcels = await uploadActions.uploadFolder(excelFolderInfo.location, excelFolderUploaded.entry.id); await loginPage.loginToContentServicesUsingUserModel(acsUser); - contentServicesPage.goToDocumentList(); + await contentServicesPage.goToDocumentList(); - done(); }); - afterAll(async (done) => { + afterAll(async () => { await uploadActions.deleteFileOrFolder(excelFolderUploaded.entry.id); - done(); + }); - it('[C280008] Should be possible to open any Excel file', () => { - contentServicesPage.doubleClickRow('excel'); - - uploadedExcels.forEach((currentFile) => { + it('[C280008] Should be possible to open any Excel file', async () => { + await contentServicesPage.doubleClickRow('excel'); + for (const currentFile of uploadedExcels) { if (currentFile.entry.name !== '.DS_Store') { - contentServicesPage.doubleClickRow(currentFile.entry.name); - viewerPage.checkFileIsLoaded(currentFile.entry.name); - viewerPage.clickCloseButton(); + await contentServicesPage.doubleClickRow(currentFile.entry.name); + await viewerPage.checkFileIsLoaded(currentFile.entry.name); + await viewerPage.clickCloseButton(); } - }); - }, 5 * 60 * 1000); + } + }); }); diff --git a/e2e/core/viewer/file-extensions/viewer-image.component.e2e.ts b/e2e/core/viewer/file-extensions/viewer-image.component.e2e.ts index f6b1a15a87..872fc215e3 100644 --- a/e2e/core/viewer/file-extensions/viewer-image.component.e2e.ts +++ b/e2e/core/viewer/file-extensions/viewer-image.component.e2e.ts @@ -24,15 +24,12 @@ import resources = require('../../../util/resources'); import { FolderModel } from '../../../models/ACS/folderModel'; import { AcsUserModel } from '../../../models/ACS/acsUserModel'; import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; -import { NavigationBarPage } from '../../../pages/adf/navigationBarPage'; describe('Viewer', () => { const viewerPage = new ViewerPage(); const loginPage = new LoginPage(); const contentServicesPage = new ContentServicesPage(); - const navigationBarPage = new NavigationBarPage(); - this.alfrescoJsApi = new AlfrescoApi({ provider: 'ECM', hostEcm: browser.params.testConfig.adf_acs.host @@ -51,7 +48,7 @@ describe('Viewer', () => { 'location': resources.Files.ADF_DOCUMENTS.IMG_RENDITION_FOLDER.folder_location }); - beforeAll(async (done) => { + beforeAll(async () => { await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); await this.alfrescoJsApi.core.peopleApi.addPerson(acsUser); @@ -67,11 +64,6 @@ describe('Viewer', () => { await this.alfrescoJsApi.login(acsUser.id, acsUser.password); - done(); - }); - - afterAll(async () => { - await navigationBarPage.clickLogoutButton(); }); describe('Image Folder Uploaded', () => { @@ -79,7 +71,7 @@ describe('Viewer', () => { let uploadedImages, uploadedImgRenditionFolderInfo; let imgFolderUploaded, imgFolderRenditionUploaded; - beforeAll(async (done) => { + beforeAll(async () => { imgFolderUploaded = await uploadActions.createFolder(imgFolderInfo.name, '-my-'); uploadedImages = await uploadActions.uploadFolder(imgFolderInfo.location, imgFolderUploaded.entry.id); @@ -89,37 +81,33 @@ describe('Viewer', () => { uploadedImgRenditionFolderInfo = await uploadActions.uploadFolder(imgRenditionFolderInfo.location, imgFolderRenditionUploaded.entry.id); await loginPage.loginToContentServicesUsingUserModel(acsUser); - contentServicesPage.goToDocumentList(); + await contentServicesPage.goToDocumentList(); - done(); }); - afterAll(async (done) => { + afterAll(async () => { await uploadActions.deleteFileOrFolder(imgFolderUploaded.entry.id); - done(); + }); - it('[C279966] Should be possible to open any Image supported extension', () => { - contentServicesPage.doubleClickRow('images'); - - uploadedImages.forEach((currentFile) => { - if (currentFile.entry.name !== '.DS_Store') { - contentServicesPage.doubleClickRow(currentFile.entry.name); - viewerPage.checkImgViewerIsDisplayed(); - viewerPage.clickCloseButton(); + it('[C279966] Should be possible to open any Image supported extension', async () => { + await contentServicesPage.doubleClickRow('images'); + for (const image of uploadedImages) { + if (image.entry.name !== '.DS_Store') { + await contentServicesPage.doubleClickRow(image.entry.name); + await viewerPage.checkImgViewerIsDisplayed(); + await viewerPage.clickCloseButton(); } - }); - - contentServicesPage.doubleClickRow('images-rendition'); - - uploadedImgRenditionFolderInfo.forEach((currentFile) => { - if (currentFile.entry.name !== '.DS_Store') { - contentServicesPage.doubleClickRow(currentFile.entry.name); - viewerPage.checkFileIsLoaded(); - viewerPage.clickCloseButton(); + } + await contentServicesPage.doubleClickRow('images-rendition'); + for (const item of uploadedImgRenditionFolderInfo) { + if (item.entry.name !== '.DS_Store') { + await contentServicesPage.doubleClickRow(item.entry.name); + await viewerPage.checkFileIsLoaded(); + await viewerPage.clickCloseButton(); } - }); - }, 5 * 60 * 1000); + } + }); }); diff --git a/e2e/core/viewer/file-extensions/viewer-powerpoint.component.e2e.ts b/e2e/core/viewer/file-extensions/viewer-powerpoint.component.e2e.ts index db9995caf0..1b8b307d78 100644 --- a/e2e/core/viewer/file-extensions/viewer-powerpoint.component.e2e.ts +++ b/e2e/core/viewer/file-extensions/viewer-powerpoint.component.e2e.ts @@ -24,19 +24,16 @@ import { FolderModel } from '../../../models/ACS/folderModel'; import { AcsUserModel } from '../../../models/ACS/acsUserModel'; import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; import { browser } from 'protractor'; -import { NavigationBarPage } from '../../../pages/adf/navigationBarPage'; describe('Viewer', () => { const viewerPage = new ViewerPage(); const loginPage = new LoginPage(); const contentServicesPage = new ContentServicesPage(); - const navigationBarPage = new NavigationBarPage(); - this.alfrescoJsApi = new AlfrescoApi({ - provider: 'ECM', - hostEcm: browser.params.testConfig.adf_acs.host - }); + provider: 'ECM', + hostEcm: browser.params.testConfig.adf_acs.host + }); const uploadActions = new UploadActions(this.alfrescoJsApi); let site; @@ -47,7 +44,7 @@ describe('Viewer', () => { 'location': resources.Files.ADF_DOCUMENTS.PPT_FOLDER.folder_location }); - beforeAll(async (done) => { + beforeAll(async () => { await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); await this.alfrescoJsApi.core.peopleApi.addPerson(acsUser); @@ -63,11 +60,6 @@ describe('Viewer', () => { await this.alfrescoJsApi.login(acsUser.id, acsUser.password); - done(); - }); - - afterAll(async () => { - await navigationBarPage.clickLogoutButton(); }); describe('PowerPoint Folder Uploaded', () => { @@ -75,33 +67,32 @@ describe('Viewer', () => { let uploadedPpt; let pptFolderUploaded; - beforeAll(async (done) => { + beforeAll(async () => { pptFolderUploaded = await uploadActions.createFolder(pptFolderInfo.name, '-my-'); uploadedPpt = await uploadActions.uploadFolder(pptFolderInfo.location, pptFolderUploaded.entry.id); - loginPage.loginToContentServicesUsingUserModel(acsUser); - contentServicesPage.goToDocumentList(); + await loginPage.loginToContentServicesUsingUserModel(acsUser); + await contentServicesPage.goToDocumentList(); - done(); }); - afterAll(async (done) => { + afterAll(async () => { await uploadActions.deleteFileOrFolder(pptFolderUploaded.entry.id); - done(); + }); - it('[C280009] Should be possible to open any PowerPoint file', () => { - contentServicesPage.doubleClickRow('ppt'); + it('[C280009] Should be possible to open any PowerPoint file', async () => { + await contentServicesPage.doubleClickRow('ppt'); - uploadedPpt.forEach((currentFile) => { + for (const currentFile of uploadedPpt) { if (currentFile.entry.name !== '.DS_Store') { - contentServicesPage.doubleClickRow(currentFile.entry.name); - viewerPage.checkFileIsLoaded(); - viewerPage.clickCloseButton(); + await contentServicesPage.doubleClickRow(currentFile.entry.name); + await viewerPage.checkFileIsLoaded(); + await viewerPage.clickCloseButton(); } - }); - }, 5 * 60 * 1000); + } + }); }); diff --git a/e2e/core/viewer/file-extensions/viewer-text.component.e2e.ts b/e2e/core/viewer/file-extensions/viewer-text.component.e2e.ts index bfa2b7f34e..eb4dd464c8 100644 --- a/e2e/core/viewer/file-extensions/viewer-text.component.e2e.ts +++ b/e2e/core/viewer/file-extensions/viewer-text.component.e2e.ts @@ -24,19 +24,16 @@ import resources = require('../../../util/resources'); import { FolderModel } from '../../../models/ACS/folderModel'; import { AcsUserModel } from '../../../models/ACS/acsUserModel'; import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; -import { NavigationBarPage } from '../../../pages/adf/navigationBarPage'; describe('Viewer', () => { const viewerPage = new ViewerPage(); const loginPage = new LoginPage(); const contentServicesPage = new ContentServicesPage(); - const navigationBarPage = new NavigationBarPage(); - this.alfrescoJsApi = new AlfrescoApi({ - provider: 'ECM', - hostEcm: browser.params.testConfig.adf_acs.host - }); + provider: 'ECM', + hostEcm: browser.params.testConfig.adf_acs.host + }); const uploadActions = new UploadActions(this.alfrescoJsApi); let site; const acsUser = new AcsUserModel(); @@ -46,7 +43,7 @@ describe('Viewer', () => { 'location': resources.Files.ADF_DOCUMENTS.TEXT_FOLDER.folder_location }); - beforeAll(async (done) => { + beforeAll(async () => { await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); await this.alfrescoJsApi.core.peopleApi.addPerson(acsUser); @@ -62,11 +59,6 @@ describe('Viewer', () => { await this.alfrescoJsApi.login(acsUser.id, acsUser.password); - done(); - }); - - afterAll(async () => { - await navigationBarPage.clickLogoutButton(); }); describe('Text Folder Uploaded', () => { @@ -74,32 +66,30 @@ describe('Viewer', () => { let uploadedTexts; let textFolderUploaded; - beforeAll(async (done) => { + beforeAll(async () => { textFolderUploaded = await uploadActions.createFolder(textFolderInfo.name, '-my-'); uploadedTexts = await uploadActions.uploadFolder(textFolderInfo.location, textFolderUploaded.entry.id); await loginPage.loginToContentServicesUsingUserModel(acsUser); - contentServicesPage.goToDocumentList(); + await contentServicesPage.goToDocumentList(); - done(); }); - afterAll(async (done) => { + afterAll(async () => { await uploadActions.deleteFileOrFolder(textFolderUploaded.entry.id); - done(); + }); - it('[C280010] Should be possible to open any Text file', () => { - contentServicesPage.doubleClickRow('text'); - - uploadedTexts.forEach((currentFile) => { + it('[C280010] Should be possible to open any Text file', async () => { + await contentServicesPage.doubleClickRow('text'); + for (const currentFile of uploadedTexts) { if (currentFile.entry.name !== '.DS_Store') { - contentServicesPage.doubleClickRow(currentFile.entry.name); - viewerPage.checkFileIsLoaded(); - viewerPage.clickCloseButton(); + await contentServicesPage.doubleClickRow(currentFile.entry.name); + await viewerPage.checkFileIsLoaded(); + await viewerPage.clickCloseButton(); } - }); + } }); }); diff --git a/e2e/core/viewer/file-extensions/viewer-word.component.e2e.ts b/e2e/core/viewer/file-extensions/viewer-word.component.e2e.ts index e07443245c..721283e7f5 100644 --- a/e2e/core/viewer/file-extensions/viewer-word.component.e2e.ts +++ b/e2e/core/viewer/file-extensions/viewer-word.component.e2e.ts @@ -46,7 +46,7 @@ describe('Viewer', () => { 'location': resources.Files.ADF_DOCUMENTS.WORD_FOLDER.folder_location }); - beforeAll(async (done) => { + beforeAll(async () => { await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); await this.alfrescoJsApi.core.peopleApi.addPerson(acsUser); @@ -62,7 +62,6 @@ describe('Viewer', () => { await this.alfrescoJsApi.login(acsUser.id, acsUser.password); - done(); }); afterAll(async () => { @@ -74,32 +73,30 @@ describe('Viewer', () => { let uploadedWords; let wordFolderUploaded; - beforeAll(async (done) => { + beforeAll(async () => { wordFolderUploaded = await uploadActions.createFolder(wordFolderInfo.name, '-my-'); uploadedWords = await uploadActions.uploadFolder(wordFolderInfo.location, wordFolderUploaded.entry.id); await loginPage.loginToContentServicesUsingUserModel(acsUser); - contentServicesPage.goToDocumentList(); + await contentServicesPage.goToDocumentList(); - done(); }); - afterAll(async (done) => { + afterAll(async () => { await uploadActions.deleteFileOrFolder(wordFolderUploaded.entry.id); - done(); + }); - it('[C280011] Should be possible to open any Word file', () => { - contentServicesPage.doubleClickRow('word'); - - uploadedWords.forEach((currentFile) => { + it('[C280011] Should be possible to open any Word file', async () => { + await contentServicesPage.doubleClickRow('word'); + for (const currentFile of uploadedWords) { if (currentFile.entry.name !== '.DS_Store') { - contentServicesPage.doubleClickRow(currentFile.entry.name); - viewerPage.checkFileIsLoaded(); - viewerPage.clickCloseButton(); + await contentServicesPage.doubleClickRow(currentFile.entry.name); + await viewerPage.checkFileIsLoaded(); + await viewerPage.clickCloseButton(); } - }); + } }); }); diff --git a/e2e/core/viewer/info-drawer.component.e2e.ts b/e2e/core/viewer/info-drawer.component.e2e.ts index 5e4596c347..a1c7258651 100644 --- a/e2e/core/viewer/info-drawer.component.e2e.ts +++ b/e2e/core/viewer/info-drawer.component.e2e.ts @@ -46,7 +46,7 @@ describe('Info Drawer', () => { 'location': resources.Files.ADF_DOCUMENTS.PNG.file_location }); - beforeAll(async (done) => { + beforeAll(async () => { await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); await this.alfrescoJsApi.core.peopleApi.addPerson(acsUser); @@ -63,43 +63,39 @@ describe('Info Drawer', () => { await this.alfrescoJsApi.login(acsUser.id, acsUser.password); pngFileUploaded = await uploadActions.uploadFile(pngFileInfo.location, pngFileInfo.name, site.entry.guid); - done(); + }); - afterAll(async (done) => { + afterAll(async () => { await this.alfrescoJsApi.login(acsUser.id, acsUser.password); await uploadActions.deleteFileOrFolder(pngFileUploaded.entry.id); - done(); + }); beforeEach(async() => { await loginPage.loginToContentServicesUsingUserModel(acsUser); - navigationBarPage.goToSite(site); - contentServicesPage.checkAcsContainer(); + await navigationBarPage.goToSite(site); + await contentServicesPage.checkAcsContainer(); }); - afterEach(async () => { - await navigationBarPage.clickLogoutButton(); + it('[C277251] Should display the icon when the icon property is defined', async () => { + await viewerPage.viewFile(pngFileUploaded.entry.name); + await viewerPage.clickLeftSidebarButton(); + await viewerPage.enableShowTabWithIcon(); + await viewerPage.enableShowTabWithIconAndLabel(); + await viewerPage.checkTabHasNoIcon(0); + await expect(await viewerPage.getTabIconById(1)).toBe('face'); + await expect(await viewerPage.getTabIconById(2)).toBe('comment'); }); - it('[C277251] Should display the icon when the icon property is defined', () => { - viewerPage.viewFile(pngFileUploaded.entry.name); - viewerPage.clickLeftSidebarButton(); - viewerPage.enableShowTabWithIcon(); - viewerPage.enableShowTabWithIconAndLabel(); - viewerPage.checkTabHasNoIcon(0); - expect(viewerPage.getTabIconById(1)).toBe('face'); - expect(viewerPage.getTabIconById(2)).toBe('comment'); - }); - - it('[C277252] Should display the label when the label property is defined', () => { - viewerPage.viewFile(pngFileUploaded.entry.name); - viewerPage.clickLeftSidebarButton(); - viewerPage.enableShowTabWithIcon(); - viewerPage.enableShowTabWithIconAndLabel(); - expect(viewerPage.getTabLabelById(0)).toBe('SETTINGS'); - viewerPage.checkTabHasNoLabel(1); - expect(viewerPage.getTabLabelById(2)).toBe('COMMENTS'); + it('[C277252] Should display the label when the label property is defined', async () => { + await viewerPage.viewFile(pngFileUploaded.entry.name); + await viewerPage.clickLeftSidebarButton(); + await viewerPage.enableShowTabWithIcon(); + await viewerPage.enableShowTabWithIconAndLabel(); + await expect(await viewerPage.getTabLabelById(0)).toBe('SETTINGS'); + await viewerPage.checkTabHasNoLabel(1); + await expect(await viewerPage.getTabLabelById(2)).toBe('COMMENTS'); }); }); diff --git a/e2e/core/viewer/viewer-content-services-component.e2e.ts b/e2e/core/viewer/viewer-content-services-component.e2e.ts index 48183c1728..e28dfced3f 100644 --- a/e2e/core/viewer/viewer-content-services-component.e2e.ts +++ b/e2e/core/viewer/viewer-content-services-component.e2e.ts @@ -77,7 +77,7 @@ describe('Content Services Viewer', () => { }); const uploadActions = new UploadActions(this.alfrescoJsApi); - beforeAll(async (done) => { + beforeAll(async () => { await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); @@ -108,12 +108,11 @@ describe('Content Services Viewer', () => { await loginPage.loginToContentServicesUsingUserModel(acsUser); - contentServicesPage.goToDocumentList(); + await contentServicesPage.goToDocumentList(); - done(); }); - afterAll(async (done) => { + afterAll(async () => { await uploadActions.deleteFileOrFolder(pdfFile.getId()); await uploadActions.deleteFileOrFolder(protectedFile.getId()); await uploadActions.deleteFileOrFolder(docxFile.getId()); @@ -123,294 +122,293 @@ describe('Content Services Viewer', () => { await uploadActions.deleteFileOrFolder(unsupportedFile.getId()); await navigationBarPage.clickLogoutButton(); - done(); }); - it('[C260038] Should display first page, toolbar and pagination when opening a .pdf file', () => { - contentServicesPage.checkAcsContainer(); + it('[C260038] Should display first page, toolbar and pagination when opening a .pdf file', async () => { + await contentServicesPage.checkAcsContainer(); - viewerPage.viewFile(pdfFile.name); - viewerPage.checkZoomInButtonIsDisplayed(); + await viewerPage.viewFile(pdfFile.name); + await viewerPage.checkZoomInButtonIsDisplayed(); - viewerPage.checkFileContent('1', pdfFile.firstPageText); - viewerPage.checkCloseButtonIsDisplayed(); - viewerPage.checkFileNameIsDisplayed(pdfFile.name); - viewerPage.checkFileThumbnailIsDisplayed(); - viewerPage.checkDownloadButtonIsDisplayed(); - viewerPage.checkFullScreenButtonIsDisplayed(); - viewerPage.checkInfoButtonIsDisplayed(); - viewerPage.checkPreviousPageButtonIsDisplayed(); - viewerPage.checkNextPageButtonIsDisplayed(); - viewerPage.checkPageSelectorInputIsDisplayed('1'); - viewerPage.checkPercentageIsDisplayed(); - viewerPage.checkZoomInButtonIsDisplayed(); - viewerPage.checkZoomOutButtonIsDisplayed(); - viewerPage.checkScalePageButtonIsDisplayed(); + await viewerPage.checkFileContent('1', pdfFile.firstPageText); + await viewerPage.checkCloseButtonIsDisplayed(); + await viewerPage.checkFileNameIsDisplayed(pdfFile.name); + await viewerPage.checkFileThumbnailIsDisplayed(); + await viewerPage.checkDownloadButtonIsDisplayed(); + await viewerPage.checkFullScreenButtonIsDisplayed(); + await viewerPage.checkInfoButtonIsDisplayed(); + await viewerPage.checkPreviousPageButtonIsDisplayed(); + await viewerPage.checkNextPageButtonIsDisplayed(); + await viewerPage.checkPageSelectorInputIsDisplayed('1'); + await viewerPage.checkPercentageIsDisplayed(); + await viewerPage.checkZoomInButtonIsDisplayed(); + await viewerPage.checkZoomOutButtonIsDisplayed(); + await viewerPage.checkScalePageButtonIsDisplayed(); - viewerPage.clickCloseButton(); + await viewerPage.clickCloseButton(); }); it('[C260040] Should be able to change pages and zoom when .pdf file is open', async () => { - viewerPage.viewFile(pdfFile.name); - viewerPage.checkZoomInButtonIsDisplayed(); + await viewerPage.viewFile(pdfFile.name); + await viewerPage.checkZoomInButtonIsDisplayed(); - viewerPage.checkFileContent('1', pdfFile.firstPageText); - viewerPage.clickNextPageButton(); - viewerPage.checkFileContent('2', pdfFile.secondPageText); - viewerPage.checkPageSelectorInputIsDisplayed('2'); + await viewerPage.checkFileContent('1', pdfFile.firstPageText); + await viewerPage.clickNextPageButton(); + await viewerPage.checkFileContent('2', pdfFile.secondPageText); + await viewerPage.checkPageSelectorInputIsDisplayed('2'); - viewerPage.clickPreviousPageButton(); - viewerPage.checkFileContent('1', pdfFile.firstPageText); - viewerPage.checkPageSelectorInputIsDisplayed('1'); + await viewerPage.clickPreviousPageButton(); + await viewerPage.checkFileContent('1', pdfFile.firstPageText); + await viewerPage.checkPageSelectorInputIsDisplayed('1'); - viewerPage.clearPageNumber(); - viewerPage.checkPageSelectorInputIsDisplayed(''); + await viewerPage.clearPageNumber(); + await viewerPage.checkPageSelectorInputIsDisplayed(''); const initialWidth = await viewerPage.getCanvasWidth(); const initialHeight = await viewerPage.getCanvasHeight(); - viewerPage.clickZoomInButton(); - expect(+(await viewerPage.getCanvasWidth())).toBeGreaterThan(+initialWidth); - expect(+(await viewerPage.getCanvasHeight())).toBeGreaterThan(+initialHeight); + await viewerPage.clickZoomInButton(); + await expect(+(await viewerPage.getCanvasWidth())).toBeGreaterThan(+initialWidth); + await expect(+(await viewerPage.getCanvasHeight())).toBeGreaterThan(+initialHeight); - viewerPage.clickActualSize(); - expect(+(await viewerPage.getCanvasWidth())).toEqual(+initialWidth); - expect(+(await viewerPage.getCanvasHeight())).toEqual(+initialHeight); + await viewerPage.clickActualSize(); + await expect(+(await viewerPage.getCanvasWidth())).toEqual(+initialWidth); + await expect(+(await viewerPage.getCanvasHeight())).toEqual(+initialHeight); - viewerPage.clickZoomOutButton(); - expect(+(await viewerPage.getCanvasWidth())).toBeLessThan(+initialWidth); - expect(+(await viewerPage.getCanvasHeight())).toBeLessThan(+initialHeight); + await viewerPage.clickZoomOutButton(); + await expect(+(await viewerPage.getCanvasWidth())).toBeLessThan(+initialWidth); + await expect(+(await viewerPage.getCanvasHeight())).toBeLessThan(+initialHeight); - viewerPage.clickCloseButton(); + await viewerPage.clickCloseButton(); }); - it('[C260042] Should be able to download, open full-screen and Info container from the Viewer', () => { - viewerPage.viewFile(jpgFile.name); - viewerPage.checkZoomInButtonIsDisplayed(); + it('[C260042] Should be able to download, open full-screen and Info container from the Viewer', async () => { + await viewerPage.viewFile(jpgFile.name); + await viewerPage.checkZoomInButtonIsDisplayed(); - viewerPage.checkImgContainerIsDisplayed(); + await viewerPage.checkImgContainerIsDisplayed(); - viewerPage.checkFullScreenButtonIsDisplayed(); - viewerPage.clickFullScreenButton(); + await viewerPage.checkFullScreenButtonIsDisplayed(); + await viewerPage.clickFullScreenButton(); - viewerPage.exitFullScreen(); + await viewerPage.exitFullScreen(); - viewerPage.checkDownloadButtonIsDisplayed(); - viewerPage.clickDownloadButton(); + await viewerPage.checkDownloadButtonIsDisplayed(); + await viewerPage.clickDownloadButton(); - viewerPage.clickCloseButton(); + await viewerPage.clickCloseButton(); }); - it('[C260052] Should display image, toolbar and pagination when opening a .jpg file', () => { - viewerPage.viewFile(jpgFile.name); - viewerPage.checkZoomInButtonIsDisplayed(); + it('[C260052] Should display image, toolbar and pagination when opening a .jpg file', async () => { + await viewerPage.viewFile(jpgFile.name); + await viewerPage.checkZoomInButtonIsDisplayed(); - viewerPage.checkImgContainerIsDisplayed(); + await viewerPage.checkImgContainerIsDisplayed(); - viewerPage.checkCloseButtonIsDisplayed(); - viewerPage.checkFileNameIsDisplayed(jpgFile.name); - viewerPage.checkFileThumbnailIsDisplayed(); - viewerPage.checkDownloadButtonIsDisplayed(); - viewerPage.checkFullScreenButtonIsDisplayed(); - viewerPage.checkInfoButtonIsDisplayed(); - viewerPage.checkZoomInButtonIsDisplayed(); - viewerPage.checkZoomOutButtonIsDisplayed(); - viewerPage.checkPercentageIsDisplayed(); - viewerPage.checkRotateLeftButtonIsDisplayed(); - viewerPage.checkRotateRightButtonIsDisplayed(); - viewerPage.checkScaleImgButtonIsDisplayed(); + await viewerPage.checkCloseButtonIsDisplayed(); + await viewerPage.checkFileNameIsDisplayed(jpgFile.name); + await viewerPage.checkFileThumbnailIsDisplayed(); + await viewerPage.checkDownloadButtonIsDisplayed(); + await viewerPage.checkFullScreenButtonIsDisplayed(); + await viewerPage.checkInfoButtonIsDisplayed(); + await viewerPage.checkZoomInButtonIsDisplayed(); + await viewerPage.checkZoomOutButtonIsDisplayed(); + await viewerPage.checkPercentageIsDisplayed(); + await viewerPage.checkRotateLeftButtonIsDisplayed(); + await viewerPage.checkRotateRightButtonIsDisplayed(); + await viewerPage.checkScaleImgButtonIsDisplayed(); - viewerPage.clickCloseButton(); + await viewerPage.clickCloseButton(); }); - it('[C260483] Should be able to zoom and rotate image when .jpg file is open', () => { - viewerPage.viewFile(jpgFile.name); - viewerPage.checkZoomInButtonIsDisplayed(); + it('[C260483] Should be able to zoom and rotate image when .jpg file is open', async () => { + await viewerPage.viewFile(jpgFile.name); + await viewerPage.checkZoomInButtonIsDisplayed(); - viewerPage.checkPercentageIsDisplayed(); + await viewerPage.checkPercentageIsDisplayed(); - zoom = viewerPage.getZoom(); - viewerPage.clickZoomInButton(); - viewerPage.checkZoomedIn(zoom); + zoom = await viewerPage.getZoom(); + await viewerPage.clickZoomInButton(); + await viewerPage.checkZoomedIn(zoom); - zoom = viewerPage.getZoom(); - viewerPage.clickZoomOutButton(); - viewerPage.checkZoomedOut(zoom); + zoom = await viewerPage.getZoom(); + await viewerPage.clickZoomOutButton(); + await viewerPage.checkZoomedOut(zoom); - viewerPage.clickRotateLeftButton(); - viewerPage.checkRotation('transform: scale(1, 1) rotate(-90deg) translate(0px, 0px);'); + await viewerPage.clickRotateLeftButton(); + await viewerPage.checkRotation('transform: scale(1, 1) rotate(-90deg) translate(0px, 0px);'); - viewerPage.clickScaleImgButton(); - viewerPage.checkRotation('transform: scale(1, 1) rotate(0deg) translate(0px, 0px);'); + await viewerPage.clickScaleImgButton(); + await viewerPage.checkRotation('transform: scale(1, 1) rotate(0deg) translate(0px, 0px);'); - viewerPage.clickRotateRightButton(); - viewerPage.checkRotation('transform: scale(1, 1) rotate(90deg) translate(0px, 0px);'); + await viewerPage.clickRotateRightButton(); + await viewerPage.checkRotation('transform: scale(1, 1) rotate(90deg) translate(0px, 0px);'); - viewerPage.clickCloseButton(); + await viewerPage.clickCloseButton(); }); - it('[C279922] Should display first page, toolbar and pagination when opening a .ppt file', () => { - viewerPage.viewFile(pptFile.name); - viewerPage.checkZoomInButtonIsDisplayed(); + it('[C279922] Should display first page, toolbar and pagination when opening a .ppt file', async () => { + await viewerPage.viewFile(pptFile.name); + await viewerPage.checkZoomInButtonIsDisplayed(); - viewerPage.checkFileContent('1', pptFile.firstPageText); - viewerPage.checkCloseButtonIsDisplayed(); - viewerPage.checkFileThumbnailIsDisplayed(); - viewerPage.checkFileNameIsDisplayed(pptFile.name); - viewerPage.checkDownloadButtonIsDisplayed(); - viewerPage.checkInfoButtonIsDisplayed(); - viewerPage.checkPreviousPageButtonIsDisplayed(); - viewerPage.checkNextPageButtonIsDisplayed(); - viewerPage.checkPageSelectorInputIsDisplayed('1'); - viewerPage.checkZoomInButtonIsDisplayed(); - viewerPage.checkZoomOutButtonIsDisplayed(); - viewerPage.checkScalePageButtonIsDisplayed(); + await viewerPage.checkFileContent('1', pptFile.firstPageText); + await viewerPage.checkCloseButtonIsDisplayed(); + await viewerPage.checkFileThumbnailIsDisplayed(); + await viewerPage.checkFileNameIsDisplayed(pptFile.name); + await viewerPage.checkDownloadButtonIsDisplayed(); + await viewerPage.checkInfoButtonIsDisplayed(); + await viewerPage.checkPreviousPageButtonIsDisplayed(); + await viewerPage.checkNextPageButtonIsDisplayed(); + await viewerPage.checkPageSelectorInputIsDisplayed('1'); + await viewerPage.checkZoomInButtonIsDisplayed(); + await viewerPage.checkZoomOutButtonIsDisplayed(); + await viewerPage.checkScalePageButtonIsDisplayed(); - viewerPage.clickCloseButton(); + await viewerPage.clickCloseButton(); }); - it('[C291903] Should display the buttons in order in the adf viewer toolbar', () => { - viewerPage.viewFile(pdfFile.name); - viewerPage.checkLeftSideBarIsNotDisplayed(); - viewerPage.clickLeftSidebarButton(); - viewerPage.checkLeftSideBarIsDisplayed(); - viewerPage.enableMoreActionsMenu(); - viewerPage.checkToolbarIsDisplayed(); - expect(viewerPage.getLastButtonTitle()).toEqual(viewerPage.getMoreActionsMenuTitle()); - viewerPage.clickCloseButton(); + it('[C291903] Should display the buttons in order in the adf viewer toolbar', async () => { + await viewerPage.viewFile(pdfFile.name); + await viewerPage.checkLeftSideBarIsNotDisplayed(); + await viewerPage.clickLeftSidebarButton(); + await viewerPage.checkLeftSideBarIsDisplayed(); + await viewerPage.enableMoreActionsMenu(); + await viewerPage.checkToolbarIsDisplayed(); + await expect(await viewerPage.getLastButtonTitle()).toEqual(await viewerPage.getMoreActionsMenuTitle()); + await viewerPage.clickCloseButton(); }); - it('[C260053] Should display first page, toolbar and pagination when opening a .docx file', () => { - viewerPage.viewFile(docxFile.name); - viewerPage.checkZoomInButtonIsDisplayed(); + it('[C260053] Should display first page, toolbar and pagination when opening a .docx file', async () => { + await viewerPage.viewFile(docxFile.name); + await viewerPage.checkZoomInButtonIsDisplayed(); - viewerPage.checkFileContent('1', docxFile.firstPageText); - viewerPage.checkCloseButtonIsDisplayed(); - viewerPage.checkFileThumbnailIsDisplayed(); - viewerPage.checkFileNameIsDisplayed(docxFile.name); - viewerPage.checkDownloadButtonIsDisplayed(); - viewerPage.checkInfoButtonIsDisplayed(); - viewerPage.checkPreviousPageButtonIsDisplayed(); - viewerPage.checkNextPageButtonIsDisplayed(); - viewerPage.checkPageSelectorInputIsDisplayed('1'); - viewerPage.checkZoomInButtonIsDisplayed(); - viewerPage.checkZoomOutButtonIsDisplayed(); - viewerPage.checkScalePageButtonIsDisplayed(); + await viewerPage.checkFileContent('1', docxFile.firstPageText); + await viewerPage.checkCloseButtonIsDisplayed(); + await viewerPage.checkFileThumbnailIsDisplayed(); + await viewerPage.checkFileNameIsDisplayed(docxFile.name); + await viewerPage.checkDownloadButtonIsDisplayed(); + await viewerPage.checkInfoButtonIsDisplayed(); + await viewerPage.checkPreviousPageButtonIsDisplayed(); + await viewerPage.checkNextPageButtonIsDisplayed(); + await viewerPage.checkPageSelectorInputIsDisplayed('1'); + await viewerPage.checkZoomInButtonIsDisplayed(); + await viewerPage.checkZoomOutButtonIsDisplayed(); + await viewerPage.checkScalePageButtonIsDisplayed(); - viewerPage.clickCloseButton(); + await viewerPage.clickCloseButton(); }); - it('[C260054] Should display Preview could not be loaded and viewer toolbar when opening an unsupported file', () => { - viewerPage.viewFile(unsupportedFile.name); + it('[C260054] Should display Preview could not be loaded and viewer toolbar when opening an unsupported file', async () => { + await viewerPage.viewFile(unsupportedFile.name); - viewerPage.checkCloseButtonIsDisplayed(); - viewerPage.checkFileNameIsDisplayed(unsupportedFile.name); - viewerPage.checkFileThumbnailIsDisplayed(); - viewerPage.checkDownloadButtonIsDisplayed(); - viewerPage.checkInfoButtonIsDisplayed(); + await viewerPage.checkCloseButtonIsDisplayed(); + await viewerPage.checkFileNameIsDisplayed(unsupportedFile.name); + await viewerPage.checkFileThumbnailIsDisplayed(); + await viewerPage.checkDownloadButtonIsDisplayed(); + await viewerPage.checkInfoButtonIsDisplayed(); - viewerPage.checkZoomInButtonIsNotDisplayed(); - viewerPage.checkUnknownFormatIsDisplayed(); - expect(viewerPage.getUnknownFormatMessage()).toBe('Couldn\'t load preview. Unknown format.'); + await viewerPage.checkZoomInButtonIsNotDisplayed(); + await viewerPage.checkUnknownFormatIsDisplayed(); + await expect(await viewerPage.getUnknownFormatMessage()).toBe('Couldn\'t load preview. Unknown format.'); - viewerPage.clickCloseButton(); + await viewerPage.clickCloseButton(); }); - it('[C260056] Should display video and viewer toolbar when opening a media file', () => { - viewerPage.viewFile(mp4File.name); + it('[C260056] Should display video and viewer toolbar when opening a media file', async () => { + await viewerPage.viewFile(mp4File.name); - viewerPage.checkMediaPlayerContainerIsDisplayed(); - viewerPage.checkCloseButtonIsDisplayed(); - viewerPage.checkFileThumbnailIsDisplayed(); - viewerPage.checkFileNameIsDisplayed(mp4File.name); - viewerPage.checkDownloadButtonIsDisplayed(); - viewerPage.checkInfoButtonIsDisplayed(); - viewerPage.checkFullScreenButtonIsNotDisplayed(); + await viewerPage.checkMediaPlayerContainerIsDisplayed(); + await viewerPage.checkCloseButtonIsDisplayed(); + await viewerPage.checkFileThumbnailIsDisplayed(); + await viewerPage.checkFileNameIsDisplayed(mp4File.name); + await viewerPage.checkDownloadButtonIsDisplayed(); + await viewerPage.checkInfoButtonIsDisplayed(); + await viewerPage.checkFullScreenButtonIsNotDisplayed(); - viewerPage.checkZoomInButtonIsNotDisplayed(); + await viewerPage.checkZoomInButtonIsNotDisplayed(); - viewerPage.clickCloseButton(); + await viewerPage.clickCloseButton(); }); - it('[C261123] Should be able to preview all pages and navigate to a page when using thumbnails', () => { - viewerPage.viewFile(pdfFile.name); + it('[C261123] Should be able to preview all pages and navigate to a page when using thumbnails', async () => { + await viewerPage.viewFile(pdfFile.name); - viewerPage.checkZoomInButtonIsDisplayed(); - viewerPage.checkFileContent('1', pdfFile.firstPageText); - viewerPage.checkThumbnailsBtnIsDisplayed(); - viewerPage.clickThumbnailsBtn(); + await viewerPage.checkZoomInButtonIsDisplayed(); + await viewerPage.checkFileContent('1', pdfFile.firstPageText); + await viewerPage.checkThumbnailsBtnIsDisplayed(); + await viewerPage.clickThumbnailsBtn(); - viewerPage.checkThumbnailsContentIsDisplayed(); - viewerPage.checkThumbnailsCloseIsDisplayed(); - viewerPage.checkAllThumbnailsDisplayed(pdfFile.lastPageNumber); + await viewerPage.checkThumbnailsContentIsDisplayed(); + await viewerPage.checkThumbnailsCloseIsDisplayed(); + await viewerPage.checkAllThumbnailsDisplayed(pdfFile.lastPageNumber); - viewerPage.clickSecondThumbnail(); - viewerPage.checkFileContent('2', pdfFile.secondPageText); - viewerPage.checkCurrentThumbnailIsSelected(); + await viewerPage.clickSecondThumbnail(); + await viewerPage.checkFileContent('2', pdfFile.secondPageText); + await viewerPage.checkCurrentThumbnailIsSelected(); - viewerPage.checkPreviousPageButtonIsDisplayed(); - viewerPage.clickPreviousPageButton(); - viewerPage.checkFileContent('1', pdfFile.firstPageText); - viewerPage.checkCurrentThumbnailIsSelected(); + await viewerPage.checkPreviousPageButtonIsDisplayed(); + await viewerPage.clickPreviousPageButton(); + await viewerPage.checkFileContent('1', pdfFile.firstPageText); + await viewerPage.checkCurrentThumbnailIsSelected(); - viewerPage.clickThumbnailsBtn(); - viewerPage.checkThumbnailsContentIsNotDisplayed(); - viewerPage.clickThumbnailsBtn(); - viewerPage.checkThumbnailsCloseIsDisplayed(); - viewerPage.clickThumbnailsClose(); + await viewerPage.clickThumbnailsBtn(); + await viewerPage.checkThumbnailsContentIsNotDisplayed(); + await viewerPage.clickThumbnailsBtn(); + await viewerPage.checkThumbnailsCloseIsDisplayed(); + await viewerPage.clickThumbnailsClose(); - viewerPage.clickCloseButton(); + await viewerPage.clickCloseButton(); }); - it('[C268105] Should display current thumbnail when getting to the page following the last visible thumbnail', () => { - viewerPage.viewFile(pdfFile.name); - viewerPage.checkZoomInButtonIsDisplayed(); + it('[C268105] Should display current thumbnail when getting to the page following the last visible thumbnail', async () => { + await viewerPage.viewFile(pdfFile.name); + await viewerPage.checkZoomInButtonIsDisplayed(); - viewerPage.checkFileContent('1', pdfFile.firstPageText); - viewerPage.checkThumbnailsBtnIsDisplayed(); - viewerPage.clickThumbnailsBtn(); - viewerPage.clickLastThumbnailDisplayed(); - viewerPage.checkCurrentThumbnailIsSelected(); + await viewerPage.checkFileContent('1', pdfFile.firstPageText); + await viewerPage.checkThumbnailsBtnIsDisplayed(); + await viewerPage.clickThumbnailsBtn(); + await viewerPage.clickLastThumbnailDisplayed(); + await viewerPage.checkCurrentThumbnailIsSelected(); - viewerPage.checkNextPageButtonIsDisplayed(); - viewerPage.clickNextPageButton(); - viewerPage.checkCurrentThumbnailIsSelected(); + await viewerPage.checkNextPageButtonIsDisplayed(); + await viewerPage.clickNextPageButton(); + await viewerPage.checkCurrentThumbnailIsSelected(); - viewerPage.clickCloseButton(); + await viewerPage.clickCloseButton(); }); - it('[C269109] Should not be able to open thumbnail panel before the pdf is loaded', () => { - viewerPage.viewFile(pdfFile.name); + it('[C269109] Should not be able to open thumbnail panel before the pdf is loaded', async () => { + await viewerPage.viewFile(pdfFile.name); - viewerPage.checkThumbnailsBtnIsDisabled(); + await viewerPage.checkThumbnailsBtnIsDisabled(); - viewerPage.checkCloseButtonIsDisplayed(); - viewerPage.clickCloseButton(); + await viewerPage.checkCloseButtonIsDisplayed(); + await viewerPage.clickCloseButton(); }); - it('[C268901] Should need a password when opening a protected file', () => { - viewerPage.viewFile(protectedFile.name); + it('[C268901] Should need a password when opening a protected file', async () => { + await viewerPage.viewFile(protectedFile.name); - viewerPage.checkZoomInButtonIsDisplayed(); - viewerPage.checkPasswordDialogIsDisplayed(); - viewerPage.checkPasswordSubmitDisabledIsDisplayed(); + await viewerPage.checkZoomInButtonIsDisplayed(); + await viewerPage.checkPasswordDialogIsDisplayed(); + await viewerPage.checkPasswordSubmitDisabledIsDisplayed(); - viewerPage.enterPassword('random password'); - viewerPage.clickPasswordSubmit(); - viewerPage.checkPasswordErrorIsDisplayed(); - viewerPage.checkPasswordInputIsDisplayed(); + await viewerPage.enterPassword('random password'); + await viewerPage.clickPasswordSubmit(); + await viewerPage.checkPasswordErrorIsDisplayed(); + await viewerPage.checkPasswordInputIsDisplayed(); - viewerPage.enterPassword(protectedFile.password); - viewerPage.clickPasswordSubmit(); - viewerPage.checkFileContent('1', protectedFile.firstPageText); + await viewerPage.enterPassword(protectedFile.password); + await viewerPage.clickPasswordSubmit(); + await viewerPage.checkFileContent('1', protectedFile.firstPageText); - viewerPage.clickCloseButton(); + await viewerPage.clickCloseButton(); }); - it('[C307985] Should close the viewer when password dialog is cancelled', () => { - viewerPage.viewFile(protectedFile.name); - viewerPage.checkPasswordDialogIsDisplayed(); - viewerPage.clickClosePasswordDialog(); - contentServicesPage.checkContentIsDisplayed(protectedFile.name); + it('[C307985] Should close the viewer when password dialog is cancelled', async () => { + await viewerPage.viewFile(protectedFile.name); + await viewerPage.checkPasswordDialogIsDisplayed(); + await viewerPage.clickClosePasswordDialog(); + await contentServicesPage.checkContentIsDisplayed(protectedFile.name); }); }); diff --git a/e2e/core/viewer/viewer-custom-toolbar-info-drawer.e2e.ts b/e2e/core/viewer/viewer-custom-toolbar-info-drawer.e2e.ts index 777b6fd7ef..70a64c44e5 100644 --- a/e2e/core/viewer/viewer-custom-toolbar-info-drawer.e2e.ts +++ b/e2e/core/viewer/viewer-custom-toolbar-info-drawer.e2e.ts @@ -44,7 +44,7 @@ describe('Viewer', () => { 'location': resources.Files.ADF_DOCUMENTS.TXT.file_location }); - beforeAll(async (done) => { + beforeAll(async () => { await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); await this.alfrescoJsApi.core.peopleApi.addPerson(acsUser); @@ -54,41 +54,40 @@ describe('Viewer', () => { await loginPage.loginToContentServicesUsingUserModel(acsUser); - done(); }); - afterAll(async (done) => { + afterAll(async () => { await uploadActions.deleteFileOrFolder(txtFileUploaded.entry.id); await navigationBarPage.clickLogoutButton(); - done(); + }); - beforeEach(() => { - contentServicesPage.goToDocumentList(); - contentServicesPage.doubleClickRow(txtFileUploaded.entry.name); + beforeEach(async () => { + await contentServicesPage.goToDocumentList(); + await contentServicesPage.doubleClickRow(txtFileUploaded.entry.name); }); - afterEach(() => { - viewerPage.clickCloseButton(); + afterEach(async () => { + await viewerPage.clickCloseButton(); }); - it('[C260096] Should the Viewer able to accept a customToolbar', () => { - viewerPage.clickLeftSidebarButton(); - viewerPage.checkLeftSideBarIsDisplayed(); - viewerPage.checkToolbarIsDisplayed(); - viewerPage.enableCustomToolbar(); - viewerPage.checkCustomToolbarIsDisplayed(); - viewerPage.disableCustomToolbar(); + it('[C260096] Should the Viewer able to accept a customToolbar', async () => { + await viewerPage.clickLeftSidebarButton(); + await viewerPage.checkLeftSideBarIsDisplayed(); + await viewerPage.checkToolbarIsDisplayed(); + await viewerPage.enableCustomToolbar(); + await viewerPage.checkCustomToolbarIsDisplayed(); + await viewerPage.disableCustomToolbar(); }); - it('[C260097] Should the viewer able to show a custom info-drawer when the sidebarTemplate is set', () => { - viewerPage.clickInfoButton(); - viewerPage.checkInfoSideBarIsDisplayed(); - viewerPage.clickOnTab('Comments'); - viewerPage.checkTabIsActive('Comments'); - viewerPage.clickOnTab('Properties'); - viewerPage.checkTabIsActive('Properties'); - viewerPage.clickOnTab('Versions'); - viewerPage.checkTabIsActive('Versions'); + it('[C260097] Should the viewer able to show a custom info-drawer when the sidebarTemplate is set', async () => { + await viewerPage.clickInfoButton(); + await viewerPage.checkInfoSideBarIsDisplayed(); + await viewerPage.clickOnTab('Comments'); + await viewerPage.checkTabIsActive('Comments'); + await viewerPage.clickOnTab('Properties'); + await viewerPage.checkTabIsActive('Properties'); + await viewerPage.clickOnTab('Versions'); + await viewerPage.checkTabIsActive('Versions'); }); }); diff --git a/e2e/core/viewer/viewer-extension.e2e.ts b/e2e/core/viewer/viewer-extension.e2e.ts index 349987dd4f..679c27c9c9 100644 --- a/e2e/core/viewer/viewer-extension.e2e.ts +++ b/e2e/core/viewer/viewer-extension.e2e.ts @@ -34,9 +34,9 @@ describe('Viewer', () => { const loginPage = new LoginPage(); const contentServicesPage = new ContentServicesPage(); this.alfrescoJsApi = new AlfrescoApi({ - provider: 'ECM', - hostEcm: browser.params.testConfig.adf_acs.host - }); + provider: 'ECM', + hostEcm: browser.params.testConfig.adf_acs.host + }); const uploadActions = new UploadActions(this.alfrescoJsApi); let site; const acsUser = new AcsUserModel(); @@ -48,7 +48,7 @@ describe('Viewer', () => { 'location': resources.Files.ADF_DOCUMENTS.JS.file_location }); - beforeAll(async (done) => { + beforeAll(async () => { await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); await this.alfrescoJsApi.core.peopleApi.addPerson(acsUser); @@ -69,30 +69,27 @@ describe('Viewer', () => { await loginPage.loginToContentServicesUsingUserModel(acsUser); - done(); }); - afterAll(async (done) => { + afterAll(async () => { await this.alfrescoJsApi.login(acsUser.id, acsUser.password); await uploadActions.deleteFileOrFolder(jsFileUploaded.entry.id); - await navigationBarPage.clickLogoutButton(); - done(); }); describe('Viewer extension', () => { - it('[C297698] Should be able to add an extension for code editor viewer', () => { - navigationBarPage.clickAboutButton(); + it('[C297698] Should be able to add an extension for code editor viewer', async () => { + await navigationBarPage.clickAboutButton(); - monacoExtensionPage.checkMonacoPluginIsDisplayed(); + await monacoExtensionPage.checkMonacoPluginIsDisplayed(); - navigationBarPage.clickContentServicesButton(); + await navigationBarPage.clickContentServicesButton(); - contentServicesPage.waitForTableBody(); - contentServicesPage.checkContentIsDisplayed(jsFileInfo.name); - contentServicesPage.doubleClickRow(jsFileInfo.name); + await contentServicesPage.waitForTableBody(); + await contentServicesPage.checkContentIsDisplayed(jsFileInfo.name); + await contentServicesPage.doubleClickRow(jsFileInfo.name); - viewerPage.checkCodeViewerIsDisplayed(); + await viewerPage.checkCodeViewerIsDisplayed(); }); }); }); diff --git a/e2e/core/viewer/viewer-properties.e2e.ts b/e2e/core/viewer/viewer-properties.e2e.ts index 97829f30b4..ab0f3af141 100644 --- a/e2e/core/viewer/viewer-properties.e2e.ts +++ b/e2e/core/viewer/viewer-properties.e2e.ts @@ -49,7 +49,7 @@ describe('Viewer - properties', () => { }); const uploadActions = new UploadActions(this.alfrescoJsApi); - beforeAll(async (done) => { + beforeAll(async () => { await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); await this.alfrescoJsApi.core.peopleApi.addPerson(acsUser); @@ -64,136 +64,133 @@ describe('Viewer - properties', () => { await loginPage.loginToContentServicesUsingUserModel(acsUser); - contentServicesPage.goToDocumentList(); + await contentServicesPage.goToDocumentList(); - contentServicesPage.checkAcsContainer(); + await contentServicesPage.checkAcsContainer(); - viewerPage.viewFile(pngFile.name); + await viewerPage.viewFile(pngFile.name); - viewerPage.clickLeftSidebarButton(); - viewerPage.checkLeftSideBarIsDisplayed(); + await viewerPage.clickLeftSidebarButton(); + await viewerPage.checkLeftSideBarIsDisplayed(); - done(); }); - afterAll(async (done) => { + afterAll(async () => { await uploadActions.deleteFileOrFolder(pngFile.getId()); await navigationBarPage.clickLogoutButton(); - done(); }); - it('[C260066] Should Show/Hide viewer toolbar when showToolbar is true/false', () => { - viewerPage.checkToolbarIsDisplayed(); - viewerPage.disableToolbar(); - viewerPage.checkToolbarIsNotDisplayed(); - viewerPage.enableToolbar(); + it('[C260066] Should Show/Hide viewer toolbar when showToolbar is true/false', async () => { + await viewerPage.checkToolbarIsDisplayed(); + await viewerPage.disableToolbar(); + await viewerPage.checkToolbarIsNotDisplayed(); + await viewerPage.enableToolbar(); }); - it('[C260076] Should Show/Hide back button when allowGoBack is true/false', () => { - viewerPage.checkGoBackIsDisplayed(); - viewerPage.disableGoBack(); - viewerPage.checkGoBackIsNotDisplayed(); - viewerPage.enableGoBack(); + it('[C260076] Should Show/Hide back button when allowGoBack is true/false', async () => { + await viewerPage.checkGoBackIsDisplayed(); + await viewerPage.disableGoBack(); + await viewerPage.checkGoBackIsNotDisplayed(); + await viewerPage.enableGoBack(); }); - it('[C260077] Should Show toolbar options dropdown when adf-viewer-open-with directive is used', () => { - viewerPage.checkToolbarOptionsIsNotDisplayed(); - viewerPage.enableToolbarOptions(); - viewerPage.checkToolbarOptionsIsDisplayed(); - viewerPage.disableToolbarOptions(); + it('[C260077] Should Show toolbar options dropdown when adf-viewer-open-with directive is used', async () => { + await viewerPage.checkToolbarOptionsIsNotDisplayed(); + await viewerPage.enableToolbarOptions(); + await viewerPage.checkToolbarOptionsIsDisplayed(); + await viewerPage.disableToolbarOptions(); }); - it('[C260079] Should Show/Hide download button when allowDownload is true/false', () => { - viewerPage.checkDownloadButtonDisplayed(); - viewerPage.disableDownload(); - viewerPage.checkDownloadButtonIsNotDisplayed(); - viewerPage.enableDownload(); + it('[C260079] Should Show/Hide download button when allowDownload is true/false', async () => { + await viewerPage.checkDownloadButtonDisplayed(); + await viewerPage.disableDownload(); + await viewerPage.checkDownloadButtonIsNotDisplayed(); + await viewerPage.enableDownload(); }); - it('[C260082] Should Show/Hide print button when allowPrint is true/false', () => { - viewerPage.checkPrintButtonIsDisplayed(); - viewerPage.disablePrint(); - viewerPage.checkPrintButtonIsNotDisplayed(); - viewerPage.enablePrint(); + it('[C260082] Should Show/Hide print button when allowPrint is true/false', async () => { + await viewerPage.checkPrintButtonIsDisplayed(); + await viewerPage.disablePrint(); + await viewerPage.checkPrintButtonIsNotDisplayed(); + await viewerPage.enablePrint(); }); - it('[C260092] Should show adf-viewer-toolbar-actions directive buttons when adf-viewer-toolbar-actions is used', () => { - viewerPage.checkMoreActionsDisplayed(); + it('[C260092] Should show adf-viewer-toolbar-actions directive buttons when adf-viewer-toolbar-actions is used', async () => { + await viewerPage.checkMoreActionsDisplayed(); - viewerPage.disableMoreActions(); + await viewerPage.disableMoreActions(); - viewerPage.checkMoreActionsIsNotDisplayed(); + await viewerPage.checkMoreActionsIsNotDisplayed(); - viewerPage.enableMoreActions(); + await viewerPage.enableMoreActions(); }); - it('[C260074] Should show a custom file name when displayName property is used', () => { - viewerPage.checkFileNameIsDisplayed(pngFile.name); + it('[C260074] Should show a custom file name when displayName property is used', async () => { + await viewerPage.checkFileNameIsDisplayed(pngFile.name); - viewerPage.enableCustomName(); + await viewerPage.enableCustomName(); - viewerPage.enterCustomName('test custom title'); - viewerPage.checkFileNameIsDisplayed('test custom title'); + await viewerPage.enterCustomName('test custom title'); + await viewerPage.checkFileNameIsDisplayed('test custom title'); - viewerPage.disableCustomName(); + await viewerPage.disableCustomName(); }); - it('[C260090] Should showSidebar allow right info-drawer to be shown', () => { - viewerPage.clickToggleRightSidebar(); - viewerPage.checkInfoSideBarIsDisplayed(); + it('[C260090] Should showSidebar allow right info-drawer to be shown', async () => { + await viewerPage.clickToggleRightSidebar(); + await viewerPage.checkInfoSideBarIsDisplayed(); - viewerPage.clickToggleRightSidebar(); - viewerPage.checkInfoSideBarIsNotDisplayed(); + await viewerPage.clickToggleRightSidebar(); + await viewerPage.checkInfoSideBarIsNotDisplayed(); }); - it('[C286442] Should showLeftSidebar allow left info-drawer to be shown', () => { - viewerPage.clickToggleLeftSidebar(); - viewerPage.checkLeftSideBarIsNotDisplayed(); - viewerPage.clickLeftSidebarButton(); - viewerPage.checkLeftSideBarIsDisplayed(); + it('[C286442] Should showLeftSidebar allow left info-drawer to be shown', async () => { + await viewerPage.clickToggleLeftSidebar(); + await viewerPage.checkLeftSideBarIsNotDisplayed(); + await viewerPage.clickLeftSidebarButton(); + await viewerPage.checkLeftSideBarIsDisplayed(); }); - it('[C260089] Should Show/Hide info-drawer if allowSidebar true/false', () => { - viewerPage.clickInfoButton(); + it('[C260089] Should Show/Hide info-drawer if allowSidebar true/false', async () => { + await viewerPage.clickInfoButton(); - viewerPage.checkInfoSideBarIsDisplayed(); - viewerPage.checkInfoButtonIsDisplayed(); + await viewerPage.checkInfoSideBarIsDisplayed(); + await viewerPage.checkInfoButtonIsDisplayed(); - viewerPage.disableAllowSidebar(); + await viewerPage.disableAllowSidebar(); - viewerPage.checkInfoButtonIsNotDisplayed(); - viewerPage.checkInfoSideBarIsNotDisplayed(); + await viewerPage.checkInfoButtonIsNotDisplayed(); + await viewerPage.checkInfoSideBarIsNotDisplayed(); }); - it('[C286596] Should Show/Hide left info-drawer if allowLeftSidebar true/false', () => { - viewerPage.checkLeftSideBarIsDisplayed(); - viewerPage.checkLeftSideBarButtonIsDisplayed(); + it('[C286596] Should Show/Hide left info-drawer if allowLeftSidebar true/false', async () => { + await viewerPage.checkLeftSideBarIsDisplayed(); + await viewerPage.checkLeftSideBarButtonIsDisplayed(); - viewerPage.disableAllowLeftSidebar(); + await viewerPage.disableAllowLeftSidebar(); - viewerPage.checkLeftSideBarButtonIsNotDisplayed(); - viewerPage.checkLeftSideBarIsNotDisplayed(); + await viewerPage.checkLeftSideBarButtonIsNotDisplayed(); + await viewerPage.checkLeftSideBarIsNotDisplayed(); }); - it('[C260100] Should be possible to disable Overlay viewer', () => { - viewerPage.clickCloseButton(); - navigationBarPage.scrollTo(navigationBarPage.overlayViewerButton); - navigationBarPage.clickOverlayViewerButton(); + it('[C260100] Should be possible to disable Overlay viewer', async () => { + await viewerPage.clickCloseButton(); + await navigationBarPage.clickOverlayViewerButton(); - dataTable.doubleClickRow('Name', fileForOverlay.name); - viewerPage.checkOverlayViewerIsDisplayed(); - viewerPage.clickCloseButton(); - dataTable.doubleClickRow('Name', pngFile.name); - viewerPage.checkOverlayViewerIsDisplayed(); - viewerPage.clickCloseButton(); + await dataTable.doubleClickRow('Name', fileForOverlay.name); + await viewerPage.checkOverlayViewerIsDisplayed(); + await viewerPage.clickCloseButton(); + await dataTable.doubleClickRow('Name', pngFile.name); + await viewerPage.checkOverlayViewerIsDisplayed(); + await viewerPage.clickCloseButton(); - viewerPage.disableOverlay(); - dataTable.doubleClickRow('Name', fileForOverlay.name); - viewerPage.checkImgContainerIsDisplayed(); - viewerPage.checkInlineViewerIsDisplayed(); - dataTable.doubleClickRow('Name', pngFile.name); - viewerPage.checkImgContainerIsDisplayed(); - viewerPage.checkInlineViewerIsDisplayed(); + await viewerPage.disableOverlay(); + await dataTable.doubleClickRow('Name', fileForOverlay.name); + await viewerPage.checkImgContainerIsDisplayed(); + await viewerPage.checkInlineViewerIsDisplayed(); + await dataTable.doubleClickRow('Name', pngFile.name); + await viewerPage.checkImgContainerIsDisplayed(); + await viewerPage.checkInlineViewerIsDisplayed(); }); }); diff --git a/e2e/core/viewer/viewer-share-content.ts b/e2e/core/viewer/viewer-share-content.ts index 5d9554040e..947b4cf13a 100644 --- a/e2e/core/viewer/viewer-share-content.ts +++ b/e2e/core/viewer/viewer-share-content.ts @@ -34,9 +34,9 @@ describe('Viewer', () => { const loginPage = new LoginPage(); const contentServicesPage = new ContentServicesPage(); this.alfrescoJsApi = new AlfrescoApi({ - provider: 'ECM', - hostEcm: browser.params.testConfig.adf_acs.host - }); + provider: 'ECM', + hostEcm: browser.params.testConfig.adf_acs.host + }); const uploadActions = new UploadActions(this.alfrescoJsApi); let site; const acsUser = new AcsUserModel(); @@ -56,7 +56,7 @@ describe('Viewer', () => { let pngFileShared, wordFileUploaded; - beforeAll(async (done) => { + beforeAll(async () => { await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); await this.alfrescoJsApi.core.peopleApi.addPerson(acsUser); @@ -80,49 +80,44 @@ describe('Viewer', () => { pngFileShared = await this.alfrescoJsApi.core.sharedlinksApi.addSharedLink({ 'nodeId': pngFileUploaded.entry.id }); - done(); }); - afterAll(async (done) => { + afterAll(async () => { await this.alfrescoJsApi.login(acsUser.id, acsUser.password); await uploadActions.deleteFileOrFolder(wordFileUploaded.entry.id); - await navigationBarPage.clickLogoutButton(); - done(); }); beforeEach(async () => { await loginPage.loginToContentServicesUsingUserModel(acsUser); }); - it('[C260105] Should be able to open an image file shared via API', () => { - BrowserActions.getUrl(browser.params.testConfig.adf.url + '/preview/s/' + pngFileShared.entry.id); - viewerPage.checkImgContainerIsDisplayed(); - BrowserActions.getUrl(browser.params.testConfig.adf.url); - navigationBarPage.clickLogoutButton(); - BrowserActions.getUrl(browser.params.testConfig.adf.url + '/preview/s/' + pngFileShared.entry.id); - viewerPage.checkImgContainerIsDisplayed(); + it('[C260105] Should be able to open an image file shared via API', async () => { + await BrowserActions.getUrl(browser.params.testConfig.adf.url + '/preview/s/' + pngFileShared.entry.id); + await viewerPage.checkImgContainerIsDisplayed(); + await BrowserActions.getUrl(browser.params.testConfig.adf.url); + await navigationBarPage.clickLogoutButton(); + await BrowserActions.getUrl(browser.params.testConfig.adf.url + '/preview/s/' + pngFileShared.entry.id); + await viewerPage.checkImgContainerIsDisplayed(); }); - it('[C260106] Should be able to open a Word file shared via API', () => { - navigationBarPage.clickContentServicesButton(); - contentServicesPage.waitForTableBody(); + it('[C260106] Should be able to open a Word file shared via API', async () => { + await navigationBarPage.clickContentServicesButton(); + await contentServicesPage.waitForTableBody(); - contentList.selectRow(wordFileInfo.name); - contentServicesPage.clickShareButton(); - shareDialog.checkDialogIsDisplayed(); - shareDialog.clickShareLinkButton(); - browser.controlFlow().execute(async () => { - const sharedLink = await shareDialog.getShareLink(); + await contentList.selectRow(wordFileInfo.name); + await contentServicesPage.clickShareButton(); + await shareDialog.checkDialogIsDisplayed(); + await shareDialog.clickShareLinkButton(); + const sharedLink = await shareDialog.getShareLink(); - await BrowserActions.getUrl(sharedLink); - viewerPage.checkFileIsLoaded(); - viewerPage.checkFileNameIsDisplayed(wordFileInfo.name); + await BrowserActions.getUrl(sharedLink); + await viewerPage.checkFileIsLoaded(); + await viewerPage.checkFileNameIsDisplayed(wordFileInfo.name); - await BrowserActions.getUrl(browser.params.testConfig.adf.url); - navigationBarPage.clickLogoutButton(); - await BrowserActions.getUrl(sharedLink); - viewerPage.checkFileIsLoaded(); - viewerPage.checkFileNameIsDisplayed(wordFileInfo.name); - }); + await BrowserActions.getUrl(browser.params.testConfig.adf.url); + await navigationBarPage.clickLogoutButton(); + await BrowserActions.getUrl(sharedLink); + await viewerPage.checkFileIsLoaded(); + await viewerPage.checkFileNameIsDisplayed(wordFileInfo.name); }); }); diff --git a/e2e/insights/analytics-component.e2e.ts b/e2e/insights/analytics-component.e2e.ts index 346f954515..6abbd4160a 100644 --- a/e2e/insights/analytics-component.e2e.ts +++ b/e2e/insights/analytics-component.e2e.ts @@ -36,7 +36,7 @@ describe('Analytics Smoke Test', () => { let tenantId; const reportTitle = 'New Title'; - beforeAll(async (done) => { + beforeAll(async () => { this.alfrescoJsApi = new AlfrescoApi({ provider: 'BPM', hostBpm: browser.params.testConfig.adf_aps.host @@ -53,22 +53,21 @@ describe('Analytics Smoke Test', () => { await loginPage.loginToProcessServicesUsingUserModel(procUserModel); - done(); }); - afterAll(async (done) => { + afterAll(async () => { await this.alfrescoJsApi.activiti.adminTenantsApi.deleteTenant(tenantId); - done(); + }); - it('[C260346] Should be able to change title of a report', () => { - navigationBarPage.navigateToProcessServicesPage(); - processServicesPage.checkApsContainer(); - processServicesPage.goToApp('Task App'); - processServiceTabBarPage.clickReportsButton(); - analyticsPage.checkNoReportMessage(); - analyticsPage.getReport('Process definition heat map'); - analyticsPage.changeReportTitle(reportTitle); - expect(analyticsPage.getReportTitle()).toEqual(reportTitle); + it('[C260346] Should be able to change title of a report', async () => { + await navigationBarPage.navigateToProcessServicesPage(); + await processServicesPage.checkApsContainer(); + await processServicesPage.goToApp('Task App'); + await processServiceTabBarPage.clickReportsButton(); + await analyticsPage.checkNoReportMessage(); + await analyticsPage.getReport('Process definition heat map'); + await analyticsPage.changeReportTitle(reportTitle); + await expect(await analyticsPage.getReportTitle()).toEqual(reportTitle); }); }); diff --git a/e2e/pages/adf/cardViewComponentPage.ts b/e2e/pages/adf/cardViewComponentPage.ts index 0a420099cd..0a757f8d0a 100644 --- a/e2e/pages/adf/cardViewComponentPage.ts +++ b/e2e/pages/adf/cardViewComponentPage.ts @@ -15,182 +15,163 @@ * limitations under the License. */ -import { by, element } from 'protractor'; +import { by, element, ElementFinder } from 'protractor'; import { BrowserVisibility, BrowserActions } from '@alfresco/adf-testing'; -import { ElementFinder } from 'protractor/built/element'; export class CardViewComponentPage { - addButton = element(by.className('adf-card-view__key-value-pairs__add-btn')); - keyValueRow = 'card-view__key-value-pairs__row'; + addButton: ElementFinder = element(by.className('adf-card-view__key-value-pairs__add-btn')); selectValue = 'mat-option'; - textField = element(by.css(`input[data-automation-id='card-textitem-editinput-name']`)); - intField = element(by.css(`input[data-automation-id='card-textitem-editinput-int']`)); - floatField = element(by.css(`input[data-automation-id='card-textitem-editinput-float']`)); - valueInputField = element(by.xpath(`//*[contains(@id,'input') and @placeholder='Value']`)); - nameInputField = element(by.xpath(`//*[contains(@id,'input') and @placeholder='Name']`)); - consoleLog = element(by.className('adf-console')); - deleteButton = element.all(by.className('adf-card-view__key-value-pairs__remove-btn')).first(); - select = element(by.css('mat-select[data-automation-class="select-box"]')); - checkbox = element(by.css(`mat-checkbox[data-automation-id='card-boolean-boolean']`)); - resetButton = element(by.css(`#adf-reset-card-log`)); - listContent = element(by.css('.mat-select-panel')); - editableSwitch = element(by.id('adf-toggle-editable')); + textField: ElementFinder = element(by.css(`input[data-automation-id='card-textitem-editinput-name']`)); + intField: ElementFinder = element(by.css(`input[data-automation-id='card-textitem-editinput-int']`)); + floatField: ElementFinder = element(by.css(`input[data-automation-id='card-textitem-editinput-float']`)); + valueInputField: ElementFinder = element(by.xpath(`//*[contains(@id,'input') and @placeholder='Value']`)); + nameInputField: ElementFinder = element(by.xpath(`//*[contains(@id,'input') and @placeholder='Name']`)); + consoleLog: ElementFinder = element(by.className('adf-console')); + deleteButton: ElementFinder = element.all(by.className('adf-card-view__key-value-pairs__remove-btn')).first(); + select: ElementFinder = element(by.css('mat-select[data-automation-class="select-box"]')); + checkbox: ElementFinder = element(by.css(`mat-checkbox[data-automation-id='card-boolean-boolean']`)); + resetButton: ElementFinder = element(by.css(`#adf-reset-card-log`)); + listContent: ElementFinder = element(by.css('.mat-select-panel')); + editableSwitch: ElementFinder = element(by.id('adf-toggle-editable')); - clickOnAddButton() { - BrowserActions.click(this.addButton); - return this; + async clickOnAddButton(): Promise { + await BrowserActions.click(this.addButton); } - clickOnResetButton() { - BrowserActions.click(this.resetButton); - return this; + async clickOnResetButton(): Promise { + await BrowserActions.click(this.resetButton); } - clickOnTextField() { - const toggleText = element(by.css(`div[data-automation-id='card-textitem-edit-toggle-name']`)); - BrowserActions.click(toggleText); - BrowserVisibility.waitUntilElementIsVisible(this.textField); - return this; + async clickOnTextField(): Promise { + const toggleText: ElementFinder = element(by.css(`div[data-automation-id='card-textitem-edit-toggle-name']`)); + await BrowserActions.click(toggleText); + await BrowserVisibility.waitUntilElementIsVisible(this.textField); } - clickOnTextClearIcon() { - const clearIcon = element(by.css(`mat-icon[data-automation-id="card-textitem-reset-name"]`)); - BrowserActions.click(clearIcon); + async clickOnTextClearIcon(): Promise { + const clearIcon: ElementFinder = element(by.css(`mat-icon[data-automation-id="card-textitem-reset-name"]`)); + await BrowserActions.click(clearIcon); } - clickOnTextSaveIcon() { - const saveIcon = element(by.css(`mat-icon[data-automation-id="card-textitem-update-name"]`)); - BrowserActions.click(saveIcon); + async clickOnTextSaveIcon(): Promise { + const saveIcon: ElementFinder = element(by.css(`mat-icon[data-automation-id="card-textitem-update-name"]`)); + await BrowserActions.click(saveIcon); } - getTextFieldText() { - const textField = element(by.css(`span[data-automation-id="card-textitem-value-name"]`)); + getTextFieldText(): Promise { + const textField: ElementFinder = element(by.css(`span[data-automation-id="card-textitem-value-name"]`)); return BrowserActions.getText(textField); } - enterTextField(text) { - BrowserVisibility.waitUntilElementIsVisible(this.textField); - BrowserActions.clearSendKeys(this.textField, text); - return this; + async enterTextField(text: string): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.textField); + await BrowserActions.clearSendKeys(this.textField, text); } - clickOnIntField() { - const toggleText = element(by.css('div[data-automation-id="card-textitem-edit-toggle-int"]')); - BrowserActions.click(toggleText); - BrowserVisibility.waitUntilElementIsVisible(this.intField); - return this; + async clickOnIntField(): Promise { + const toggleText: ElementFinder = element(by.css('div[data-automation-id="card-textitem-edit-toggle-int"]')); + await BrowserActions.click(toggleText); + await BrowserVisibility.waitUntilElementIsVisible(this.intField); } - clickOnIntClearIcon() { - const clearIcon = element(by.css('mat-icon[data-automation-id="card-textitem-reset-int"]')); - BrowserActions.click(clearIcon); + async clickOnIntClearIcon(): Promise { + const clearIcon: ElementFinder = element(by.css('mat-icon[data-automation-id="card-textitem-reset-int"]')); + await BrowserActions.click(clearIcon); } - clickOnIntSaveIcon() { - const saveIcon = element(by.css('mat-icon[data-automation-id="card-textitem-update-int"]')); - BrowserActions.click(saveIcon); + async clickOnIntSaveIcon(): Promise { + const saveIcon: ElementFinder = element(by.css('mat-icon[data-automation-id="card-textitem-update-int"]')); + await BrowserActions.click(saveIcon); } - enterIntField(text) { - BrowserVisibility.waitUntilElementIsVisible(this.intField); - BrowserActions.clearSendKeys(this.intField, text); - return this; + async enterIntField(text): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.intField); + await BrowserActions.clearSendKeys(this.intField, text); } - getIntFieldText() { - const textField = element(by.css('span[data-automation-id="card-textitem-value-int"]')); + getIntFieldText(): Promise { + const textField: ElementFinder = element(by.css('span[data-automation-id="card-textitem-value-int"]')); return BrowserActions.getText(textField); } - getErrorInt() { - const errorElement = element(by.css('mat-error[data-automation-id="card-textitem-error-int"]')); + getErrorInt(): Promise { + const errorElement: ElementFinder = element(by.css('mat-error[data-automation-id="card-textitem-error-int"]')); return BrowserActions.getText(errorElement); } - clickOnFloatField() { - const toggleText = element(by.css('div[data-automation-id="card-textitem-edit-toggle-float"]')); - BrowserActions.click(toggleText); - BrowserVisibility.waitUntilElementIsVisible(this.floatField); - return this; + async clickOnFloatField(): Promise { + const toggleText: ElementFinder = element(by.css('div[data-automation-id="card-textitem-edit-toggle-float"]')); + await BrowserActions.click(toggleText); + await BrowserVisibility.waitUntilElementIsVisible(this.floatField); } - clickOnFloatClearIcon() { - const clearIcon = element(by.css(`mat-icon[data-automation-id="card-textitem-reset-float"]`)); - BrowserActions.click(clearIcon); + async clickOnFloatClearIcon(): Promise { + const clearIcon: ElementFinder = element(by.css(`mat-icon[data-automation-id="card-textitem-reset-float"]`)); + await BrowserActions.click(clearIcon); } - clickOnFloatSaveIcon() { - const saveIcon = element(by.css(`mat-icon[data-automation-id="card-textitem-update-float"]`)); - BrowserActions.click(saveIcon); + async clickOnFloatSaveIcon(): Promise { + const saveIcon: ElementFinder = element(by.css(`mat-icon[data-automation-id="card-textitem-update-float"]`)); + await BrowserActions.click(saveIcon); } - enterFloatField(text) { - BrowserVisibility.waitUntilElementIsVisible(this.floatField); - BrowserActions.clearSendKeys(this.floatField, text); - return this; + async enterFloatField(text): Promise { + await BrowserActions.clearSendKeys(this.floatField, text); } - getFloatFieldText() { - const textField = element(by.css('span[data-automation-id="card-textitem-value-float"]')); + getFloatFieldText(): Promise { + const textField: ElementFinder = element(by.css('span[data-automation-id="card-textitem-value-float"]')); return BrowserActions.getText(textField); } - getErrorFloat() { - const errorElement = element(by.css('mat-error[data-automation-id="card-textitem-error-float"]')); + getErrorFloat(): Promise { + const errorElement: ElementFinder = element(by.css('mat-error[data-automation-id="card-textitem-error-float"]')); return BrowserActions.getText(errorElement); } - setName(name) { - BrowserVisibility.waitUntilElementIsVisible(this.nameInputField); - this.nameInputField.sendKeys(name); - return this; + async setName(name: string): Promise { + await BrowserActions.clearSendKeys(this.nameInputField, name); } - setValue(value) { - BrowserVisibility.waitUntilElementIsVisible(this.valueInputField); - this.valueInputField.sendKeys(value); - return this; + async setValue(value): Promise { + await BrowserActions.clearSendKeys(this.valueInputField, value); } - waitForOutput() { - BrowserVisibility.waitUntilElementIsVisible(this.consoleLog); - return this; + async waitForOutput(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.consoleLog); } - getOutputText(index) { + getOutputText(index: number): Promise { return BrowserActions.getText(this.consoleLog.all(by.css('p')).get(index)); } - deletePairsValues() { - BrowserActions.click(this.deleteButton); - return this; + async deletePairsValues(): Promise { + await BrowserActions.click(this.deleteButton); } - clickSelectBox() { - BrowserActions.click(this.select); - BrowserVisibility.waitUntilElementIsVisible(this.listContent); + async clickSelectBox(): Promise { + await BrowserActions.click(this.select); + await BrowserVisibility.waitUntilElementIsVisible(this.listContent); } - checkboxClick() { - BrowserActions.click(this.checkbox); + async checkboxClick(): Promise { + await BrowserActions.click(this.checkbox); } - selectValueFromComboBox(index) { + async selectValueFromComboBox(index): Promise { const value: ElementFinder = element.all(by.className(this.selectValue)).get(index); - BrowserActions.click(value); - return this; + await BrowserActions.click(value); } - disableEdit() { - BrowserVisibility.waitUntilElementIsVisible(this.editableSwitch); + async disableEdit(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.editableSwitch); - this.editableSwitch.getAttribute('class').then((check) => { - if (check.indexOf('mat-checked') > -1) { - this.editableSwitch.click(); - expect(this.editableSwitch.getAttribute('class')).not.toContain('mat-checked'); - } - }); + const check = await this.editableSwitch.getAttribute('class'); + if (check.indexOf('mat-checked') > -1) { + await BrowserActions.click(this.editableSwitch); + await expect(await this.editableSwitch.getAttribute('class')).not.toContain('mat-checked'); + } } } diff --git a/e2e/pages/adf/commentsPage.ts b/e2e/pages/adf/commentsPage.ts index 395620a51d..4aede471b4 100644 --- a/e2e/pages/adf/commentsPage.ts +++ b/e2e/pages/adf/commentsPage.ts @@ -15,59 +15,57 @@ * limitations under the License. */ -import { element, by } from 'protractor'; +import { element, by, ElementFinder, ElementArrayFinder } from 'protractor'; import { TabsPage } from '@alfresco/adf-testing'; import { BrowserVisibility, BrowserActions } from '@alfresco/adf-testing'; export class CommentsPage { - tabsPage = new TabsPage(); - numberOfComments = element(by.id('comment-header')); - commentUserIcon = element.all(by.id('comment-user-icon')); - commentUserName = element.all(by.id('comment-user')); - commentMessage = element.all(by.id('comment-message')); - commentTime = element.all(by.id('comment-time')); - commentInput = element(by.id('comment-input')); - addCommentButton = element(by.css("[data-automation-id='comments-input-add']")); + tabsPage: TabsPage = new TabsPage(); + numberOfComments: ElementFinder = element(by.id('comment-header')); + commentUserIcon: ElementArrayFinder = element.all(by.id('comment-user-icon')); + commentUserName: ElementArrayFinder = element.all(by.id('comment-user')); + commentMessage: ElementArrayFinder = element.all(by.id('comment-message')); + commentTime: ElementArrayFinder = element.all(by.id('comment-time')); + commentInput: ElementFinder = element(by.id('comment-input')); + addCommentButton: ElementFinder = element(by.css("[data-automation-id='comments-input-add']")); - getTotalNumberOfComments() { + async getTotalNumberOfComments(): Promise { return BrowserActions.getText(this.numberOfComments); } - checkUserIconIsDisplayed(position) { - BrowserVisibility.waitUntilElementIsVisible(this.commentUserIcon.first()); - return this.commentUserIcon.get(position); + async checkUserIconIsDisplayed(position): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.commentUserIcon.first()); } - getUserName(position) { + getUserName(position): Promise { return BrowserActions.getText(this.commentUserName.get(position)); } - getMessage(position) { + getMessage(position): Promise { return BrowserActions.getText(this.commentMessage.get(position)); } - getTime(position) { + getTime(position): Promise { return BrowserActions.getText(this.commentTime.get(position)); } - checkCommentInputIsNotDisplayed() { - BrowserVisibility.waitUntilElementIsNotVisible(this.commentInput); + async checkCommentInputIsNotDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsNotVisible(this.commentInput); } - addComment(comment) { - BrowserVisibility.waitUntilElementIsVisible(this.commentInput); - this.commentInput.sendKeys(comment); - BrowserActions.click(this.addCommentButton); + async addComment(comment): Promise { + await BrowserActions.clearSendKeys(this.commentInput, comment); + await BrowserActions.click(this.addCommentButton); } - checkCommentsTabIsSelected() { - this.tabsPage.checkTabIsSelectedByTitle('Comments'); + async checkCommentsTabIsSelected(): Promise { + await this.tabsPage.checkTabIsSelectedByTitle('Comments'); } - checkCommentInputIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.commentInput); + async checkCommentInputIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.commentInput); } } diff --git a/e2e/pages/adf/configEditorPage.ts b/e2e/pages/adf/configEditorPage.ts index f6738fd142..e2144ac042 100644 --- a/e2e/pages/adf/configEditorPage.ts +++ b/e2e/pages/adf/configEditorPage.ts @@ -15,35 +15,32 @@ * limitations under the License. */ -import { element, by, browser } from 'protractor'; +import { element, by, browser, ElementFinder } from 'protractor'; import { BrowserVisibility, BrowserActions } from '@alfresco/adf-testing'; export class ConfigEditorPage { - textField = element(by.css('#adf-form-config-editor div.overflow-guard > textarea')); + textField: ElementFinder = element(by.css('#adf-form-config-editor div.overflow-guard > textarea')); - enterConfiguration(text) { - - BrowserVisibility.waitUntilElementIsVisible(this.textField); - this.textField.sendKeys(text); - return this; + async enterConfiguration(text): Promise { + await BrowserActions.clearSendKeys(this.textField, text); } - clickSaveButton() { - const saveButton = element(by.id('adf-form-config-save')); - BrowserActions.click(saveButton); + async clickSaveButton(): Promise { + const saveButton: ElementFinder = element(by.id('adf-form-config-save')); + await BrowserActions.click(saveButton); } - clickClearButton() { - BrowserVisibility.waitUntilElementIsVisible(this.textField); - const clearButton = element(by.id('adf-form-config-clear')); - BrowserActions.click(clearButton); + async clickClearButton(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.textField); + const clearButton: ElementFinder = element(by.id('adf-form-config-clear')); + await BrowserActions.click(clearButton); } - enterBulkConfiguration(text) { - this.clickClearButton(); - BrowserVisibility.waitUntilElementIsVisible(this.textField); - browser.executeScript('this.monaco.editor.getModels()[0].setValue(`' + JSON.stringify(text) + '`)'); - this.clickSaveButton(); + async enterBulkConfiguration(text): Promise { + await this.clickClearButton(); + await BrowserVisibility.waitUntilElementIsVisible(this.textField); + await browser.executeScript('this.monaco.editor.getModels()[0].setValue(`' + JSON.stringify(text) + '`)'); + await this.clickSaveButton(); } } diff --git a/e2e/pages/adf/content-services/breadcrumb/breadCrumbDropdownPage.ts b/e2e/pages/adf/content-services/breadcrumb/breadCrumbDropdownPage.ts index caa2995796..456bd71fa8 100644 --- a/e2e/pages/adf/content-services/breadcrumb/breadCrumbDropdownPage.ts +++ b/e2e/pages/adf/content-services/breadcrumb/breadCrumbDropdownPage.ts @@ -15,32 +15,32 @@ * limitations under the License. */ -import { element, by } from 'protractor'; +import { element, by, ElementFinder } from 'protractor'; import { BrowserVisibility, BrowserActions } from '@alfresco/adf-testing'; export class BreadCrumbDropdownPage { - breadCrumb = element(by.css(`adf-dropdown-breadcrumb[data-automation-id='content-node-selector-content-breadcrumb']`)); + breadCrumb: ElementFinder = element(by.css(`adf-dropdown-breadcrumb[data-automation-id='content-node-selector-content-breadcrumb']`)); parentFolder = this.breadCrumb.element(by.css(`button[data-automation-id='dropdown-breadcrumb-trigger']`)); - breadCrumbDropdown = element(by.css(`div[class*='mat-select-panel']`)); + breadCrumbDropdown: ElementFinder = element(by.css(`div[class*='mat-select-panel']`)); currentFolder = this.breadCrumb.element(by.css(`div span[data-automation-id="current-folder"]`)); - choosePath(pathName) { + async choosePath(pathName): Promise { const path = this.breadCrumbDropdown.element(by.cssContainingText(`mat-option[data-automation-class='dropdown-breadcrumb-path-option'] span[class='mat-option-text']`, pathName)); - BrowserActions.click(path); + await BrowserActions.click(path); } - clickParentFolder() { - BrowserActions.click(this.parentFolder); + async clickParentFolder(): Promise { + await BrowserActions.click(this.parentFolder); } - checkBreadCrumbDropdownIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.breadCrumbDropdown); + async checkBreadCrumbDropdownIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.breadCrumbDropdown); } - getTextOfCurrentFolder() { + async getTextOfCurrentFolder(): Promise { return BrowserActions.getText(this.currentFolder); } } diff --git a/e2e/pages/adf/content-services/breadcrumb/breadCrumbPage.ts b/e2e/pages/adf/content-services/breadcrumb/breadCrumbPage.ts index 6a299ae746..ba863e82ef 100644 --- a/e2e/pages/adf/content-services/breadcrumb/breadCrumbPage.ts +++ b/e2e/pages/adf/content-services/breadcrumb/breadCrumbPage.ts @@ -15,16 +15,16 @@ * limitations under the License. */ -import { element, by } from 'protractor'; +import { element, by, ElementFinder } from 'protractor'; import { BrowserActions } from '@alfresco/adf-testing'; export class BreadCrumbPage { - breadCrumb = element(by.css(`adf-breadcrumb nav[data-automation-id='breadcrumb']`)); + breadCrumb: ElementFinder = element(by.css(`adf-breadcrumb nav[data-automation-id='breadcrumb']`)); - chooseBreadCrumb(breadCrumbItem) { + async chooseBreadCrumb(breadCrumbItem): Promise { const path = this.breadCrumb.element(by.css(`a[data-automation-id='breadcrumb_${breadCrumbItem}']`)); - BrowserActions.click(path); + await BrowserActions.click(path); } } diff --git a/e2e/pages/adf/content-services/treeViewPage.ts b/e2e/pages/adf/content-services/treeViewPage.ts index 3497e9fc95..228df5a2e5 100644 --- a/e2e/pages/adf/content-services/treeViewPage.ts +++ b/e2e/pages/adf/content-services/treeViewPage.ts @@ -15,76 +15,72 @@ * limitations under the License. */ -import { element, by, protractor } from 'protractor'; +import { element, by, ElementFinder, ElementArrayFinder, protractor } from 'protractor'; import { BrowserVisibility, BrowserActions } from '@alfresco/adf-testing'; export class TreeViewPage { - treeViewTitle = element(by.cssContainingText('app-tree-view div', 'TREE VIEW TEST')); - nodeIdInput = element(by.css('input[placeholder="Node Id"]')); - noNodeMessage = element(by.id('adf-tree-view-missing-node')); - nodesOnPage = element.all(by.css('mat-tree-node')); + treeViewTitle: ElementFinder = element(by.cssContainingText('app-tree-view div', 'TREE VIEW TEST')); + nodeIdInput: ElementFinder = element(by.css('input[placeholder="Node Id"]')); + noNodeMessage: ElementFinder = element(by.id('adf-tree-view-missing-node')); + nodesOnPage: ElementArrayFinder = element.all(by.css('mat-tree-node')); - checkTreeViewTitleIsDisplayed() { - return BrowserVisibility.waitUntilElementIsVisible(this.treeViewTitle); + async checkTreeViewTitleIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.treeViewTitle); } - getNodeId() { - BrowserVisibility.waitUntilElementIsVisible(this.nodeIdInput); - return this.nodeIdInput.getAttribute('value'); + async getNodeId(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.nodeIdInput); + return await this.nodeIdInput.getAttribute('value'); } - clickNode(nodeName) { - const node = element(by.css('mat-tree-node[id="' + nodeName + '-tree-child-node"] button')); - return BrowserActions.click(node); + async clickNode(nodeName): Promise { + const node: ElementFinder = element(by.css('mat-tree-node[id="' + nodeName + '-tree-child-node"] button')); + await BrowserActions.click(node); } - checkNodeIsDisplayedAsClosed(nodeName) { - const node = element(by.css('mat-tree-node[id="' + nodeName + '-tree-child-node"][aria-expanded="false"]')); - return BrowserVisibility.waitUntilElementIsVisible(node); + async checkNodeIsDisplayedAsClosed(nodeName): Promise { + const node: ElementFinder = element(by.css('mat-tree-node[id="' + nodeName + '-tree-child-node"][aria-expanded="false"]')); + await BrowserVisibility.waitUntilElementIsVisible(node); } - checkNodeIsDisplayedAsOpen(nodeName) { - const node = element(by.css('mat-tree-node[id="' + nodeName + '-tree-child-node"][aria-expanded="true"]')); - return BrowserVisibility.waitUntilElementIsVisible(node); + async checkNodeIsDisplayedAsOpen(nodeName): Promise { + const node: ElementFinder = element(by.css('mat-tree-node[id="' + nodeName + '-tree-child-node"][aria-expanded="true"]')); + await BrowserVisibility.waitUntilElementIsVisible(node); } - checkClickedNodeName(nodeName) { - const clickedNode = element(by.cssContainingText('span', ' CLICKED NODE: ' + nodeName + '')); - return BrowserVisibility.waitUntilElementIsVisible(clickedNode); + async checkClickedNodeName(nodeName): Promise { + const clickedNode: ElementFinder = element(by.cssContainingText('span', ' CLICKED NODE: ' + nodeName + '')); + await BrowserVisibility.waitUntilElementIsVisible(clickedNode); } - checkNodeIsNotDisplayed(nodeName) { - const node = element(by.id('' + nodeName + '-tree-child-node')); - return BrowserVisibility.waitUntilElementIsNotVisible(node); + async checkNodeIsNotDisplayed(nodeName): Promise { + const node: ElementFinder = element(by.id('' + nodeName + '-tree-child-node')); + await BrowserVisibility.waitUntilElementIsNotVisible(node); } - clearNodeIdInput() { - BrowserVisibility.waitUntilElementIsVisible(this.nodeIdInput); - this.nodeIdInput.getAttribute('value').then((value) => { - for (let i = value.length; i >= 0; i--) { - this.nodeIdInput.sendKeys(protractor.Key.BACK_SPACE); - } - }); + async clearNodeIdInput(): Promise { + await BrowserActions.click(this.nodeIdInput); + await BrowserActions.clearWithBackSpace(this.nodeIdInput); } - checkNoNodeIdMessageIsDisplayed() { - return BrowserVisibility.waitUntilElementIsVisible(this.noNodeMessage); + async checkNoNodeIdMessageIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.noNodeMessage); } - addNodeId(nodeId) { - BrowserActions.click(this.nodeIdInput); - this.nodeIdInput.clear(); - this.nodeIdInput.sendKeys(nodeId + ' '); - this.nodeIdInput.sendKeys(protractor.Key.BACK_SPACE); + async addNodeId(nodeId): Promise { + await BrowserActions.click(this.nodeIdInput); + await BrowserActions.clearSendKeys(this.nodeIdInput, nodeId); + await this.nodeIdInput.sendKeys('a'); + await this.nodeIdInput.sendKeys(protractor.Key.BACK_SPACE); } - checkErrorMessageIsDisplayed() { - const clickedNode = element(by.cssContainingText('span', 'An Error Occurred ')); - return BrowserVisibility.waitUntilElementIsVisible(clickedNode); + async checkErrorMessageIsDisplayed(): Promise { + const clickedNode: ElementFinder = element(by.cssContainingText('span', 'An Error Occurred ')); + await BrowserVisibility.waitUntilElementIsVisible(clickedNode); } - getTotalNodes() { - return this.nodesOnPage.count(); + async getTotalNodes() { + return await this.nodesOnPage.count(); } } diff --git a/e2e/pages/adf/contentServicesPage.ts b/e2e/pages/adf/contentServicesPage.ts index ad4856c55e..44797c087b 100644 --- a/e2e/pages/adf/contentServicesPage.ts +++ b/e2e/pages/adf/contentServicesPage.ts @@ -19,7 +19,7 @@ import { FolderDialog } from './dialog/folderDialog'; import { CreateLibraryDialog } from './dialog/createLibraryDialog'; import { FormControllersPage } from '@alfresco/adf-testing'; import { DropActions } from '../../actions/drop.actions'; -import { by, element, protractor, $$, browser } from 'protractor'; +import { by, element, protractor, $$, browser, ElementFinder } from 'protractor'; import path = require('path'); import { BrowserVisibility, DocumentListPage, BrowserActions, DateUtil } from '@alfresco/adf-testing'; @@ -35,166 +35,158 @@ export class ContentServicesPage { created: 'Created' }; - contentList = new DocumentListPage(element.all(by.css('adf-upload-drag-area adf-document-list')).first()); - formControllersPage = new FormControllersPage(); - multipleFileUploadToggle = element(by.id('adf-document-list-enable-drop-files')); - createFolderDialog = new FolderDialog(); - createLibraryDialog = new CreateLibraryDialog(); - dragAndDropAction = new DropActions(); - uploadBorder = element(by.id('document-list-container')); - contentServices = element(by.css('.adf-sidenav-link[data-automation-id="Content Services"]')); - currentFolder = element(by.css('div[class*="adf-breadcrumb-item adf-active"] div')); - createFolderButton = element(by.css('button[data-automation-id="create-new-folder"]')); - editFolderButton = element(by.css('button[data-automation-id="edit-folder"]')); - createLibraryButton = element(by.css('button[data-automation-id="create-new-library"]')); - activeBreadcrumb = element(by.css('div[class*="active"]')); + contentList: DocumentListPage = new DocumentListPage(element.all(by.css('adf-upload-drag-area adf-document-list')).first()); + formControllersPage: FormControllersPage = new FormControllersPage(); + createFolderDialog: FolderDialog = new FolderDialog(); + createLibraryDialog: CreateLibraryDialog = new CreateLibraryDialog(); + dragAndDropAction: DropActions = new DropActions(); + + multipleFileUploadToggle: ElementFinder = element(by.id('adf-document-list-enable-drop-files')); + uploadBorder: ElementFinder = element(by.id('document-list-container')); + contentServices: ElementFinder = element(by.css('.adf-sidenav-link[data-automation-id="Content Services"]')); + currentFolder: ElementFinder = element(by.css('div[class*="adf-breadcrumb-item adf-active"] div')); + createFolderButton: ElementFinder = element(by.css('button[data-automation-id="create-new-folder"]')); + editFolderButton: ElementFinder = element(by.css('button[data-automation-id="edit-folder"]')); + createLibraryButton: ElementFinder = element(by.css('button[data-automation-id="create-new-library"]')); + activeBreadcrumb: ElementFinder = element(by.css('div[class*="active"]')); tooltip = by.css('div[class*="--text adf-full-width"] span'); - uploadFileButton = element(by.css('.adf-upload-button-file-container button')); - uploadFileButtonInput = element(by.css('input[data-automation-id="upload-single-file"]')); - uploadMultipleFileButton = element(by.css('input[data-automation-id="upload-multiple-files"]')); - uploadFolderButton = element(by.css('input[data-automation-id="uploadFolder"]')); - errorSnackBar = element(by.css('simple-snack-bar[class*="mat-simple-snackbar"]')); - emptyPagination = element(by.css('adf-pagination[class*="adf-pagination__empty"]')); - dragAndDrop = element.all(by.css('adf-upload-drag-area div')).first(); - nameHeader = element(by.css('div[data-automation-id="auto_id_name"] > span')); - sizeHeader = element(by.css('div[data-automation-id="auto_id_content.sizeInBytes"] > span')); - createdByHeader = element(by.css('div[data-automation-id="auto_id_createdByUser.displayName"] > span')); - createdHeader = element(by.css('div[data-automation-id="auto_id_createdAt"] > span')); - recentFiles = element(by.css('.adf-container-recent')); - recentFilesExpanded = element(by.css('.adf-container-recent mat-expansion-panel-header.mat-expanded')); - recentFilesClosed = element(by.css('.adf-container-recent mat-expansion-panel-header')); - recentFileIcon = element(by.css('.adf-container-recent mat-expansion-panel-header mat-icon')); - documentListSpinner = element(by.css('mat-progress-spinner')); - emptyFolder = element(by.css('.adf-empty-folder-this-space-is-empty')); - emptyFolderImage = element(by.css('.adf-empty-folder-image')); - emptyRecent = element(by.css('.adf-container-recent .adf-empty-list__title')); - gridViewButton = element(by.css('button[data-automation-id="document-list-grid-view"]')); - cardViewContainer = element(by.css('div.adf-document-list-container div.adf-datatable-card')); - shareNodeButton = element(by.cssContainingText('mat-icon', ' share ')); + uploadFileButton: ElementFinder = element(by.css('.adf-upload-button-file-container button')); + uploadFileButtonInput: ElementFinder = element(by.css('input[data-automation-id="upload-single-file"]')); + uploadMultipleFileButton: ElementFinder = element(by.css('input[data-automation-id="upload-multiple-files"]')); + uploadFolderButton: ElementFinder = element(by.css('input[data-automation-id="uploadFolder"]')); + errorSnackBar: ElementFinder = element(by.css('simple-snack-bar[class*="mat-simple-snackbar"]')); + emptyPagination: ElementFinder = element(by.css('adf-pagination[class*="adf-pagination__empty"]')); + dragAndDrop: ElementFinder = element.all(by.css('adf-upload-drag-area div')).first(); + nameHeader: ElementFinder = element(by.css('div[data-automation-id="auto_id_name"] > span')); + sizeHeader: ElementFinder = element(by.css('div[data-automation-id="auto_id_content.sizeInBytes"] > span')); + createdByHeader: ElementFinder = element(by.css('div[data-automation-id="auto_id_createdByUser.displayName"] > span')); + createdHeader: ElementFinder = element(by.css('div[data-automation-id="auto_id_createdAt"] > span')); + recentFiles: ElementFinder = element(by.css('.adf-container-recent')); + recentFilesExpanded: ElementFinder = element(by.css('.adf-container-recent mat-expansion-panel-header.mat-expanded')); + recentFilesClosed: ElementFinder = element(by.css('.adf-container-recent mat-expansion-panel-header')); + recentFileIcon: ElementFinder = element(by.css('.adf-container-recent mat-expansion-panel-header mat-icon')); + emptyFolder: ElementFinder = element(by.css('.adf-empty-folder-this-space-is-empty')); + emptyFolderImage: ElementFinder = element(by.css('.adf-empty-folder-image')); + emptyRecent: ElementFinder = element(by.css('.adf-container-recent .adf-empty-list__title')); + gridViewButton: ElementFinder = element(by.css('button[data-automation-id="document-list-grid-view"]')); + cardViewContainer: ElementFinder = element(by.css('div.adf-document-list-container div.adf-datatable-card')); + shareNodeButton: ElementFinder = element(by.cssContainingText('mat-icon', ' share ')); nameColumnHeader = 'name'; createdByColumnHeader = 'createdByUser.displayName'; createdColumnHeader = 'createdAt'; - deleteContentElement = element(by.css('button[data-automation-id*="DELETE"]')); - metadataAction = element(by.css('button[data-automation-id*="METADATA"]')); - versionManagerAction = element(by.css('button[data-automation-id*="VERSIONS"]')); - moveContentElement = element(by.css('button[data-automation-id*="MOVE"]')); - copyContentElement = element(by.css('button[data-automation-id*="COPY"]')); - lockContentElement = element(by.css('button[data-automation-id="DOCUMENT_LIST.ACTIONS.LOCK"]')); - downloadContent = element(by.css('button[data-automation-id*="DOWNLOAD"]')); - siteListDropdown = element(by.css(`mat-select[data-automation-id='site-my-files-option']`)); - downloadButton = element(by.css('button[title="Download"]')); - favoriteButton = element(by.css('button[data-automation-id="favorite"]')); - markedFavorite = element(by.cssContainingText( 'button[data-automation-id="favorite"] mat-icon', 'star')); - notMarkedFavorite = element(by.cssContainingText( 'button[data-automation-id="favorite"] mat-icon', 'star_border')); - multiSelectToggle = element(by.cssContainingText('span.mat-slide-toggle-content', ' Multiselect (with checkboxes) ')); + deleteContentElement: ElementFinder = element(by.css('button[data-automation-id*="DELETE"]')); + metadataAction: ElementFinder = element(by.css('button[data-automation-id*="METADATA"]')); + versionManagerAction: ElementFinder = element(by.css('button[data-automation-id*="VERSIONS"]')); + moveContentElement: ElementFinder = element(by.css('button[data-automation-id*="MOVE"]')); + copyContentElement: ElementFinder = element(by.css('button[data-automation-id*="COPY"]')); + lockContentElement: ElementFinder = element(by.css('button[data-automation-id="DOCUMENT_LIST.ACTIONS.LOCK"]')); + downloadContent: ElementFinder = element(by.css('button[data-automation-id*="DOWNLOAD"]')); + siteListDropdown: ElementFinder = element(by.css(`mat-select[data-automation-id='site-my-files-option']`)); + downloadButton: ElementFinder = element(by.css('button[title="Download"]')); + favoriteButton: ElementFinder = element(by.css('button[data-automation-id="favorite"]')); + markedFavorite: ElementFinder = element(by.cssContainingText('button[data-automation-id="favorite"] mat-icon', 'star')); + notMarkedFavorite: ElementFinder = element(by.cssContainingText('button[data-automation-id="favorite"] mat-icon', 'star_border')); + multiSelectToggle: ElementFinder = element(by.cssContainingText('span.mat-slide-toggle-content', ' Multiselect (with checkboxes) ')); - pressContextMenuActionNamed(actionName) { - BrowserActions.clickExecuteScript(`button[data-automation-id="context-${actionName}"]`); + async pressContextMenuActionNamed(actionName): Promise { + await BrowserActions.clickExecuteScript(`button[data-automation-id="context-${actionName}"]`); } - checkContextActionIsVisible(actionName) { - const actionButton = element(by.css(`button[data-automation-id="context-${actionName}"`)); - BrowserVisibility.waitUntilElementIsVisible(actionButton); - return actionButton; + async checkContextActionIsVisible(actionName) { + const actionButton: ElementFinder = element(by.css(`button[data-automation-id="context-${actionName}"`)); + await BrowserVisibility.waitUntilElementIsVisible(actionButton); } - checkContentActionIsEnabled(actionName) { - const actionButton = element(by.css(`button[data-automation-id="context-${actionName}"`)); - BrowserVisibility.waitUntilElementIsVisible(actionButton); + async isContextActionEnabled(actionName): Promise { + const actionButton: ElementFinder = element(by.css(`button[data-automation-id="context-${actionName}"`)); + await BrowserVisibility.waitUntilElementIsVisible(actionButton); return actionButton.isEnabled(); } - getDocumentList() { + getDocumentList(): DocumentListPage { return this.contentList; } - closeActionContext() { - BrowserActions.closeMenuAndDialogs(); - return this; + async closeActionContext(): Promise { + await BrowserActions.closeMenuAndDialogs(); } - checkLockedIcon(content) { - return this.contentList.checkLockedIcon(content); + async checkLockedIcon(content): Promise { + return await this.contentList.checkLockedIcon(content); } - checkUnlockedIcon(content) { - return this.contentList.checkUnlockedIcon(content); + async checkUnlockedIcon(content): Promise { + return await this.contentList.checkUnlockedIcon(content); } - checkDeleteIsDisabled(content) { - this.contentList.clickOnActionMenu(content); - this.waitForContentOptions(); - const disabledDelete = element(by.css(`button[data-automation-id*='DELETE'][disabled='true']`)); - BrowserVisibility.waitUntilElementIsVisible(disabledDelete); + async checkDeleteIsDisabled(content): Promise { + await this.contentList.clickOnActionMenu(content); + await this.waitForContentOptions(); + const disabledDelete: ElementFinder = element(by.css(`button[data-automation-id*='DELETE'][disabled='true']`)); + await BrowserVisibility.waitUntilElementIsVisible(disabledDelete); } - deleteContent(content) { - this.contentList.clickOnActionMenu(content); - this.waitForContentOptions(); - BrowserActions.click(this.deleteContentElement); + async deleteContent(content): Promise { + await this.contentList.clickOnActionMenu(content); + await this.waitForContentOptions(); + await BrowserActions.click(this.deleteContentElement); } - metadataContent(content) { - this.contentList.clickOnActionMenu(content); - this.waitForContentOptions(); - BrowserActions.click(this.metadataAction); + async metadataContent(content): Promise { + await this.contentList.clickOnActionMenu(content); + await this.waitForContentOptions(); + await BrowserActions.click(this.metadataAction); } - versionManagerContent(content) { - this.contentList.clickOnActionMenu(content); - this.waitForContentOptions(); - BrowserActions.click(this.versionManagerAction); + async versionManagerContent(content): Promise { + await this.contentList.clickOnActionMenu(content); + await this.waitForContentOptions(); + await BrowserActions.click(this.versionManagerAction); } - copyContent(content) { - this.contentList.clickOnActionMenu(content); - BrowserActions.click(this.copyContentElement); + async copyContent(content): Promise { + await this.contentList.clickOnActionMenu(content); + await BrowserActions.click(this.copyContentElement); } - lockContent(content) { - this.contentList.clickOnActionMenu(content); - BrowserActions.click(this.lockContentElement); + async lockContent(content): Promise { + await this.contentList.clickOnActionMenu(content); + await BrowserActions.click(this.lockContentElement); } - waitForContentOptions() { - BrowserVisibility.waitUntilElementIsVisible(this.copyContentElement); - BrowserVisibility.waitUntilElementIsVisible(this.moveContentElement); - BrowserVisibility.waitUntilElementIsVisible(this.deleteContentElement); - BrowserVisibility.waitUntilElementIsVisible(this.downloadContent); + async waitForContentOptions(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.copyContentElement); + await BrowserVisibility.waitUntilElementIsVisible(this.moveContentElement); + await BrowserVisibility.waitUntilElementIsVisible(this.deleteContentElement); + await BrowserVisibility.waitUntilElementIsVisible(this.downloadContent); } - clickFileHyperlink(fileName) { + async clickFileHyperlink(fileName): Promise { const hyperlink = this.contentList.dataTablePage().getFileHyperlink(fileName); - - BrowserActions.click(hyperlink); - return this; + await BrowserActions.click(hyperlink); } - checkFileHyperlinkIsEnabled(fileName) { + async checkFileHyperlinkIsEnabled(fileName): Promise { const hyperlink = this.contentList.dataTablePage().getFileHyperlink(fileName); - BrowserVisibility.waitUntilElementIsVisible(hyperlink); - return this; + await BrowserVisibility.waitUntilElementIsVisible(hyperlink); } - clickHyperlinkNavigationToggle() { - const hyperlinkToggle = element(by.cssContainingText('.mat-slide-toggle-content', 'Hyperlink navigation')); - BrowserActions.click(hyperlinkToggle); - return this; + async clickHyperlinkNavigationToggle(): Promise { + const hyperlinkToggle: ElementFinder = element(by.cssContainingText('.mat-slide-toggle-content', 'Hyperlink navigation')); + await BrowserActions.click(hyperlinkToggle); } - enableDropFilesInAFolder() { - this.formControllersPage.enableToggle(this.multipleFileUploadToggle); - return this; + async enableDropFilesInAFolder(): Promise { + await this.formControllersPage.enableToggle(this.multipleFileUploadToggle); } - disableDropFilesInAFolder() { - browser.executeScript('arguments[0].scrollIntoView()', this.multipleFileUploadToggle); - this.formControllersPage.disableToggle(this.multipleFileUploadToggle); - return this; + async disableDropFilesInAFolder(): Promise { + await browser.executeScript('arguments[0].scrollIntoView()', this.multipleFileUploadToggle); + await this.formControllersPage.disableToggle(this.multipleFileUploadToggle); } - getElementsDisplayedId() { - return this.contentList.dataTablePage().getAllRowsColumnValues(this.columns.nodeId); + async getElementsDisplayedId() { + return await this.contentList.dataTablePage().getAllRowsColumnValues(this.columns.nodeId); } checkElementsDateSortedAsc(elements) { @@ -229,459 +221,393 @@ export class ContentServicesPage { return sorted; } - getContentList() { - return this.contentList; + async checkRecentFileToBeShowed() { + await BrowserVisibility.waitUntilElementIsVisible(this.recentFiles); } - checkRecentFileToBeShowed() { - BrowserVisibility.waitUntilElementIsVisible(this.recentFiles); + async expandRecentFiles(): Promise { + await this.checkRecentFileToBeShowed(); + await this.checkRecentFileToBeClosed(); + await BrowserActions.click(this.recentFilesClosed); + await this.checkRecentFileToBeOpened(); } - expandRecentFiles() { - this.checkRecentFileToBeShowed(); - this.checkRecentFileToBeClosed(); - BrowserActions.click(this.recentFilesClosed); - this.checkRecentFileToBeOpened(); + async closeRecentFiles(): Promise { + await this.checkRecentFileToBeShowed(); + await this.checkRecentFileToBeOpened(); + await BrowserActions.click(this.recentFilesExpanded); + await this.checkRecentFileToBeClosed(); } - closeRecentFiles() { - this.checkRecentFileToBeShowed(); - this.checkRecentFileToBeOpened(); - BrowserActions.click(this.recentFilesExpanded); - this.checkRecentFileToBeClosed(); + async checkRecentFileToBeClosed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.recentFilesClosed); } - checkRecentFileToBeClosed() { - BrowserVisibility.waitUntilElementIsVisible(this.recentFilesClosed); + async checkRecentFileToBeOpened(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.recentFilesExpanded); } - checkRecentFileToBeOpened() { - BrowserVisibility.waitUntilElementIsVisible(this.recentFilesExpanded); + async getRecentFileIcon(): Promise { + return await BrowserActions.getText(this.recentFileIcon); } - async getRecentFileIcon() { - return BrowserActions.getText(this.recentFileIcon); + async checkAcsContainer(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.uploadBorder); } - checkAcsContainer() { - return BrowserVisibility.waitUntilElementIsVisible(this.uploadBorder); - } - - async waitForTableBody() { + async waitForTableBody(): Promise { await this.contentList.waitForTableBody(); } - goToDocumentList() { + async goToDocumentList(): Promise { const navigationBarPage = new NavigationBarPage(); - navigationBarPage.clickContentServicesButton(); - return this; + await navigationBarPage.clickContentServicesButton(); } - clickOnContentServices() { - BrowserActions.click(this.contentServices); + async clickOnContentServices(): Promise { + await BrowserActions.click(this.contentServices); } - numberOfResultsDisplayed() { - return this.contentList.dataTablePage().numberOfRows(); + async numberOfResultsDisplayed(): Promise { + return await this.contentList.dataTablePage().numberOfRows(); } - currentFolderName() { - const deferred = protractor.promise.defer(); - BrowserVisibility.waitUntilElementIsVisible(this.currentFolder); - this.currentFolder.getText().then(function (result) { - deferred.fulfill(result); - }); - return deferred.promise; + async currentFolderName(): Promise { + return await BrowserActions.getText(this.currentFolder); } - getAllRowsNameColumn() { - return this.contentList.getAllRowsColumnValues(this.columns.name); + async getAllRowsNameColumn(): Promise { + return await this.contentList.getAllRowsColumnValues(this.columns.name); } - sortByName(sortOrder: string) { - return this.contentList.dataTable.sortByColumn(sortOrder, this.nameColumnHeader); + async sortByName(sortOrder: string): Promise { + await this.contentList.dataTable.sortByColumn(sortOrder, this.nameColumnHeader); } - sortByAuthor(sortOrder: string) { - return this.contentList.dataTable.sortByColumn(sortOrder, this.createdByColumnHeader); + async sortByAuthor(sortOrder: string): Promise { + await this.contentList.dataTable.sortByColumn(sortOrder, this.createdByColumnHeader); } - sortByCreated(sortOrder: string) { - return this.contentList.dataTable.sortByColumn(sortOrder, this.createdColumnHeader); + async sortByCreated(sortOrder: string): Promise { + await this.contentList.dataTable.sortByColumn(sortOrder, this.createdColumnHeader); } - sortAndCheckListIsOrderedByName(sortOrder: string) { - this.sortByName(sortOrder); - const deferred = protractor.promise.defer(); - this.checkListIsSortedByNameColumn(sortOrder).then((result) => { - deferred.fulfill(result); - }); - return deferred.promise; + async sortAndCheckListIsOrderedByName(sortOrder: string): Promise { + await this.sortByName(sortOrder); + return await this.checkListIsSortedByNameColumn(sortOrder); } - async checkListIsSortedByNameColumn(sortOrder: string) { + async checkListIsSortedByNameColumn(sortOrder: string): Promise { return await this.contentList.dataTablePage().checkListIsSorted(sortOrder, this.columns.name); } - async checkListIsSortedByCreatedColumn(sortOrder: string) { + async checkListIsSortedByCreatedColumn(sortOrder: string): Promise { return await this.contentList.dataTablePage().checkListIsSorted(sortOrder, this.columns.created); } - async checkListIsSortedByAuthorColumn(sortOrder: string) { + async checkListIsSortedByAuthorColumn(sortOrder: string): Promise { return await this.contentList.dataTablePage().checkListIsSorted(sortOrder, this.columns.createdBy); } - async checkListIsSortedBySizeColumn(sortOrder: string) { + async checkListIsSortedBySizeColumn(sortOrder: string): Promise { return await this.contentList.dataTablePage().checkListIsSorted(sortOrder, this.columns.size); } - sortAndCheckListIsOrderedByAuthor(sortOrder: string) { - this.sortByAuthor(sortOrder); - const deferred = protractor.promise.defer(); - this.checkListIsSortedByAuthorColumn(sortOrder).then((result) => { - deferred.fulfill(result); - }); - return deferred.promise; + async sortAndCheckListIsOrderedByAuthor(sortOrder: string): Promise { + await this.sortByAuthor(sortOrder); + return await this.checkListIsSortedByAuthorColumn(sortOrder); } - sortAndCheckListIsOrderedByCreated(sortOrder: string) { - this.sortByCreated(sortOrder); - const deferred = protractor.promise.defer(); - this.checkListIsSortedByCreatedColumn(sortOrder).then((result) => { - deferred.fulfill(result); - }); - return deferred.promise; + async sortAndCheckListIsOrderedByCreated(sortOrder: string): Promise { + await this.sortByCreated(sortOrder); + return await this.checkListIsSortedByCreatedColumn(sortOrder); } - doubleClickRow(nodeName) { - this.contentList.doubleClickRow(nodeName); - return this; + async doubleClickRow(nodeName): Promise { + await this.contentList.doubleClickRow(nodeName); } - clickOnCreateNewFolder() { - BrowserActions.click(this.createFolderButton); - return this; + async clickOnCreateNewFolder(): Promise { + await BrowserActions.click(this.createFolderButton); } - clickOnFavoriteButton() { - BrowserActions.click(this.favoriteButton); - return this; + async clickOnFavoriteButton(): Promise { + await BrowserActions.click(this.favoriteButton); } - checkIsMarkedFavorite() { - BrowserVisibility.waitUntilElementIsVisible(this.markedFavorite); - return this; + async checkIsMarkedFavorite(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.markedFavorite); } - checkIsNotMarkedFavorite() { - BrowserVisibility.waitUntilElementIsVisible(this.notMarkedFavorite); - return this; + async checkIsNotMarkedFavorite(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.notMarkedFavorite); } - clickOnEditFolder() { - BrowserActions.click(this.editFolderButton); - return this; + async clickOnEditFolder(): Promise { + await BrowserActions.click(this.editFolderButton); } - checkEditFolderButtonIsEnabled() { + async isEditFolderButtonEnabled(): Promise { return this.editFolderButton.isEnabled(); } - openCreateLibraryDialog() { - BrowserActions.click(this.createLibraryButton); - this.createLibraryDialog.waitForDialogToOpen(); - return this.createLibraryDialog; + async openCreateLibraryDialog(): Promise { + await BrowserActions.click(this.createLibraryButton); + await this.createLibraryDialog.waitForDialogToOpen(); } - createNewFolder(folder) { - this.clickOnCreateNewFolder(); - this.createFolderDialog.addFolderName(folder); - browser.sleep(200); - this.createFolderDialog.clickOnCreateUpdateButton(); - return this; + async createNewFolder(folder): Promise { + await this.clickOnCreateNewFolder(); + await this.createFolderDialog.addFolderName(folder); + await this.createFolderDialog.clickOnCreateUpdateButton(); } - checkContentIsDisplayed(content) { - this.contentList.dataTablePage().checkContentIsDisplayed(this.columns.name, content); - return this; + async checkContentIsDisplayed(content): Promise { + await this.contentList.dataTablePage().checkContentIsDisplayed(this.columns.name, content); } - checkContentsAreDisplayed(content) { + async checkContentsAreDisplayed(content): Promise { for (let i = 0; i < content.length; i++) { - this.checkContentIsDisplayed(content[i]); + await this.checkContentIsDisplayed(content[i]); } - return this; } - checkContentIsNotDisplayed(content) { - this.contentList.dataTablePage().checkContentIsNotDisplayed(this.columns.name, content); - return this; + async checkContentIsNotDisplayed(content): Promise { + await this.contentList.dataTablePage().checkContentIsNotDisplayed(this.columns.name, content); } - getActiveBreadcrumb() { - BrowserVisibility.waitUntilElementIsVisible(this.activeBreadcrumb); - return this.activeBreadcrumb.getAttribute('title'); + async getActiveBreadcrumb(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.activeBreadcrumb); + return await this.activeBreadcrumb.getAttribute('title'); } - uploadFile(fileLocation) { - this.checkUploadButton(); - this.uploadFileButtonInput.sendKeys(path.resolve(path.join(browser.params.testConfig.main.rootPath, fileLocation))); - this.checkUploadButton(); - return this; + async uploadFile(fileLocation): Promise { + await this.checkUploadButton(); + await this.uploadFileButtonInput.sendKeys(path.resolve(path.join(browser.params.testConfig.main.rootPath, fileLocation))); + await this.checkUploadButton(); } - uploadMultipleFile(files) { - BrowserVisibility.waitUntilElementIsVisible(this.uploadMultipleFileButton); + async uploadMultipleFile(files): Promise { + await BrowserVisibility.waitUntilElementIsPresent(this.uploadMultipleFileButton); let allFiles = path.resolve(path.join(browser.params.testConfig.main.rootPath, files[0])); for (let i = 1; i < files.length; i++) { allFiles = allFiles + '\n' + path.resolve(path.join(browser.params.testConfig.main.rootPath, files[i])); } - this.uploadMultipleFileButton.sendKeys(allFiles); - BrowserVisibility.waitUntilElementIsVisible(this.uploadMultipleFileButton); - return this; + await this.uploadMultipleFileButton.sendKeys(allFiles); + await BrowserVisibility.waitUntilElementIsPresent(this.uploadMultipleFileButton); } - uploadFolder(folder) { - BrowserVisibility.waitUntilElementIsVisible(this.uploadFolderButton); - this.uploadFolderButton.sendKeys(path.resolve(path.join(browser.params.testConfig.main.rootPath, folder))); - BrowserVisibility.waitUntilElementIsVisible(this.uploadFolderButton); - return this; + async uploadFolder(folder): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.uploadFolderButton); + await this.uploadFolderButton.sendKeys(path.resolve(path.join(browser.params.testConfig.main.rootPath, folder))); + await BrowserVisibility.waitUntilElementIsVisible(this.uploadFolderButton); } - getSingleFileButtonTooltip() { - BrowserVisibility.waitUntilElementIsVisible(this.uploadFileButton); - return this.uploadFileButtonInput.getAttribute('title'); + async getSingleFileButtonTooltip(): Promise { + await BrowserVisibility.waitUntilElementIsPresent(this.uploadFileButton); + return await this.uploadFileButtonInput.getAttribute('title'); } - getMultipleFileButtonTooltip() { - BrowserVisibility.waitUntilElementIsVisible(this.uploadMultipleFileButton); - return this.uploadMultipleFileButton.getAttribute('title'); + async getMultipleFileButtonTooltip(): Promise { + await BrowserVisibility.waitUntilElementIsPresent(this.uploadMultipleFileButton); + return await this.uploadMultipleFileButton.getAttribute('title'); } - getFolderButtonTooltip() { - BrowserVisibility.waitUntilElementIsVisible(this.uploadFolderButton); - return this.uploadFolderButton.getAttribute('title'); + async getFolderButtonTooltip(): Promise { + await BrowserVisibility.waitUntilElementIsPresent(this.uploadFolderButton); + return await this.uploadFolderButton.getAttribute('title'); } - checkUploadButton() { - BrowserVisibility.waitUntilElementIsVisible(this.uploadFileButton); - BrowserVisibility.waitUntilElementIsClickable(this.uploadFileButton); - return this; + async checkUploadButton(): Promise { + await BrowserVisibility.waitUntilElementIsClickable(this.uploadFileButton); } - uploadButtonIsEnabled() { - return this.uploadFileButton.isEnabled(); + async uploadButtonIsEnabled(): Promise { + return await this.uploadFileButton.isEnabled(); } - getErrorMessage() { - BrowserVisibility.waitUntilElementIsVisible(this.errorSnackBar); - const deferred = protractor.promise.defer(); - this.errorSnackBar.getText().then(function (text) { - deferred.fulfill(text); - }); - return deferred.promise; + async getErrorMessage(): Promise { + return BrowserActions.getText(this.errorSnackBar); } - enableInfiniteScrolling() { - const infiniteScrollButton = element(by.cssContainingText('.mat-slide-toggle-content', 'Enable Infinite Scrolling')); - BrowserActions.click(infiniteScrollButton); - return this; + async enableInfiniteScrolling(): Promise { + const infiniteScrollButton: ElementFinder = element(by.cssContainingText('.mat-slide-toggle-content', 'Enable Infinite Scrolling')); + await BrowserActions.click(infiniteScrollButton); } - enableCustomPermissionMessage() { - const customPermissionMessage = element(by.cssContainingText('.mat-slide-toggle-content', 'Enable custom permission message')); - BrowserActions.click(customPermissionMessage); - return this; + async enableCustomPermissionMessage(): Promise { + const customPermissionMessage: ElementFinder = element(by.cssContainingText('.mat-slide-toggle-content', 'Enable custom permission message')); + await BrowserActions.click(customPermissionMessage); } - enableMediumTimeFormat() { - const mediumTimeFormat = element(by.css('#enableMediumTimeFormat')); - BrowserActions.click(mediumTimeFormat); - return this; + async enableMediumTimeFormat(): Promise { + const mediumTimeFormat: ElementFinder = element(by.css('#enableMediumTimeFormat')); + await BrowserActions.click(mediumTimeFormat); } - enableThumbnails() { - const thumbnailSlide = element(by.id('adf-thumbnails-upload-switch')); - BrowserActions.click(thumbnailSlide); - return this; + async enableThumbnails(): Promise { + const thumbnailSlide: ElementFinder = element(by.id('adf-thumbnails-upload-switch')); + await BrowserActions.click(thumbnailSlide); } - checkPaginationIsNotDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.emptyPagination); + async checkPaginationIsNotDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.emptyPagination); } - getDocumentListRowNumber() { - const documentList = element(by.css('adf-upload-drag-area adf-document-list')); - BrowserVisibility.waitUntilElementIsVisible(documentList); - return $$('adf-upload-drag-area adf-document-list .adf-datatable-row').count(); + async getDocumentListRowNumber(): Promise { + const documentList: ElementFinder = element(by.css('adf-upload-drag-area adf-document-list')); + await BrowserVisibility.waitUntilElementIsVisible(documentList); + return await $$('adf-upload-drag-area adf-document-list .adf-datatable-row').count(); } - checkColumnNameHeader() { - BrowserVisibility.waitUntilElementIsVisible(this.nameHeader); + async checkColumnNameHeader(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.nameHeader); } - checkColumnSizeHeader() { - BrowserVisibility.waitUntilElementIsVisible(this.sizeHeader); + async checkColumnSizeHeader(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.sizeHeader); } - checkColumnCreatedByHeader() { - BrowserVisibility.waitUntilElementIsVisible(this.createdByHeader); + async checkColumnCreatedByHeader(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.createdByHeader); } - checkColumnCreatedHeader() { - BrowserVisibility.waitUntilElementIsVisible(this.createdHeader); + async checkColumnCreatedHeader(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.createdHeader); } - checkDragAndDropDIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.dragAndDrop); + async checkDragAndDropDIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.dragAndDrop); } - dragAndDropFile(file) { - this.checkDragAndDropDIsDisplayed(); - this.dragAndDropAction.dropFile(this.dragAndDrop, file); + async dragAndDropFile(file): Promise { + await this.checkDragAndDropDIsDisplayed(); + await this.dragAndDropAction.dropFile(this.dragAndDrop, file); } - dragAndDropFolder(folder) { - this.checkDragAndDropDIsDisplayed(); - this.dragAndDropAction.dropFolder(this.dragAndDrop, folder); + async dragAndDropFolder(folder): Promise { + await this.checkDragAndDropDIsDisplayed(); + await this.dragAndDropAction.dropFolder(this.dragAndDrop, folder); } - checkLockIsDisplayedForElement(name) { - const lockButton = element(by.css(`div.adf-datatable-cell[data-automation-id="${name}"] button`)); - BrowserVisibility.waitUntilElementIsVisible(lockButton); + async checkLockIsDisplayedForElement(name): Promise { + const lockButton: ElementFinder = element(by.css(`div.adf-datatable-cell[data-automation-id="${name}"] button`)); + await BrowserVisibility.waitUntilElementIsVisible(lockButton); } - getColumnValueForRow(file, columnName) { - return this.contentList.dataTablePage().getColumnValueForRow(this.columns.name, file, columnName); + async getColumnValueForRow(file, columnName): Promise { + return await this.contentList.dataTablePage().getColumnValueForRow(this.columns.name, file, columnName); } - async getStyleValueForRowText(rowName, styleName) { - const row = element(by.css(`div.adf-datatable-cell[data-automation-id="${rowName}"] span.adf-datatable-cell-value[title="${rowName}"]`)); - BrowserVisibility.waitUntilElementIsVisible(row); - return row.getCssValue(styleName); + async getStyleValueForRowText(rowName, styleName): Promise { + const row: ElementFinder = element(by.css(`div.adf-datatable-cell[data-automation-id="${rowName}"] span.adf-datatable-cell-value[title="${rowName}"]`)); + await BrowserVisibility.waitUntilElementIsVisible(row); + return await row.getCssValue(styleName); } - checkSpinnerIsShowed() { - BrowserVisibility.waitUntilElementIsPresent(this.documentListSpinner); + async checkEmptyFolderTextToBe(text): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.emptyFolder); + await expect(await this.emptyFolder.getText()).toContain(text); } - checkEmptyFolderTextToBe(text) { - BrowserVisibility.waitUntilElementIsVisible(this.emptyFolder); - expect(this.emptyFolder.getText()).toContain(text); + async checkEmptyFolderImageUrlToContain(url): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.emptyFolderImage); + await expect(await this.emptyFolderImage.getAttribute('src')).toContain(url); } - checkEmptyFolderImageUrlToContain(url) { - BrowserVisibility.waitUntilElementIsVisible(this.emptyFolderImage); - expect(this.emptyFolderImage.getAttribute('src')).toContain(url); + async checkEmptyRecentFileIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.emptyRecent); } - checkEmptyRecentFileIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.emptyRecent); + async getRowIconImageUrl(fileName): Promise { + const iconRow: ElementFinder = element(by.css(`.adf-document-list-container div.adf-datatable-cell[data-automation-id="${fileName}"] img`)); + await BrowserVisibility.waitUntilElementIsVisible(iconRow); + return await iconRow.getAttribute('src'); } - checkIconForRowIsDisplayed(fileName) { - const iconRow = element(by.css(`.adf-document-list-container div.adf-datatable-cell[data-automation-id="${fileName}"] img`)); - BrowserVisibility.waitUntilElementIsVisible(iconRow); - return iconRow; + async checkGridViewButtonIsVisible(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.gridViewButton); } - async getRowIconImageUrl(fileName) { - const iconRow = this.checkIconForRowIsDisplayed(fileName); - return iconRow.getAttribute('src'); + async clickGridViewButton(): Promise { + await this.checkGridViewButtonIsVisible(); + await BrowserActions.click(this.gridViewButton); } - checkGridViewButtonIsVisible() { - BrowserVisibility.waitUntilElementIsVisible(this.gridViewButton); + async checkCardViewContainerIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.cardViewContainer); } - clickGridViewButton() { - this.checkGridViewButtonIsVisible(); - BrowserActions.click(this.gridViewButton); + async getCardElementShowedInPage(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.cardViewContainer); + return $$('div.adf-document-list-container div.adf-datatable-card div.adf-cell-value img').count(); } - checkCardViewContainerIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.cardViewContainer); + async getDocumentCardIconForElement(elementName): Promise { + const elementIcon: ElementFinder = element(by.css(`.adf-document-list-container div.adf-datatable-cell[data-automation-id="${elementName}"] img`)); + return await elementIcon.getAttribute('src'); } - getCardElementShowedInPage() { - this.checkCardViewContainerIsDisplayed(); - const actualCards = $$('div.adf-document-list-container div.adf-datatable-card div.adf-cell-value img').count(); - return actualCards; + async checkDocumentCardPropertyIsShowed(elementName, propertyName): Promise { + const elementProperty: ElementFinder = element(by.css(`.adf-document-list-container div.adf-datatable-cell[data-automation-id="${elementName}"][title="${propertyName}"]`)); + await BrowserVisibility.waitUntilElementIsVisible(elementProperty); } - getDocumentCardIconForElement(elementName) { - const elementIcon = element(by.css(`.adf-document-list-container div.adf-datatable-cell[data-automation-id="${elementName}"] img`)); - return elementIcon.getAttribute('src'); - } - - checkDocumentCardPropertyIsShowed(elementName, propertyName) { - const elementProperty = element(by.css(`.adf-document-list-container div.adf-datatable-cell[data-automation-id="${elementName}"][title="${propertyName}"]`)); - BrowserVisibility.waitUntilElementIsVisible(elementProperty); - } - - getAttributeValueForElement(elementName, propertyName) { + async getAttributeValueForElement(elementName, propertyName): Promise { const elementSize = element(by.css(`.adf-document-list-container div.adf-datatable-cell[data-automation-id="${elementName}"][title="${propertyName}"] span`)); - return BrowserActions.getText(elementSize); + return await BrowserActions.getText(elementSize); } - checkMenuIsShowedForElementIndex(elementIndex) { - const elementMenu = element(by.css(`button[data-automation-id="action_menu_${elementIndex}"]`)); - BrowserVisibility.waitUntilElementIsVisible(elementMenu); + async checkMenuIsShowedForElementIndex(elementIndex): Promise { + const elementMenu: ElementFinder = element(by.css(`button[data-automation-id="action_menu_${elementIndex}"]`)); + await BrowserVisibility.waitUntilElementIsVisible(elementMenu); } - navigateToCardFolder(folderName) { - BrowserActions.closeMenuAndDialogs(); - const folderCard = element(by.css(`.adf-document-list-container div.adf-image-table-cell.adf-datatable-cell[data-automation-id="${folderName}"]`)); - folderCard.click(); - const folderSelected = element(by.css(`.adf-datatable-row.adf-is-selected div[data-automation-id="${folderName}"].adf-datatable-cell--image`)); - BrowserVisibility.waitUntilElementIsVisible(folderSelected); - browser.actions().sendKeys(protractor.Key.ENTER).perform(); + async navigateToCardFolder(folderName): Promise { + await BrowserActions.closeMenuAndDialogs(); + const folderCard: ElementFinder = element(by.css(`.adf-document-list-container div.adf-image-table-cell.adf-datatable-cell[data-automation-id="${folderName}"]`)); + await BrowserActions.click(folderCard); + const folderSelected: ElementFinder = element(by.css(`.adf-datatable-row.adf-is-selected div[data-automation-id="${folderName}"].adf-datatable-cell--image`)); + await BrowserVisibility.waitUntilElementIsVisible(folderSelected); + await browser.actions().sendKeys(protractor.Key.ENTER).perform(); } - getGridViewSortingDropdown() { - const sortingDropdown = element(by.css('mat-select[data-automation-id="grid-view-sorting"]')); - BrowserVisibility.waitUntilElementIsVisible(sortingDropdown); - return sortingDropdown; + async selectGridSortingFromDropdown(sortingChosen): Promise { + const sortingDropdown: ElementFinder = element(by.css('mat-select[data-automation-id="grid-view-sorting"]')); + await BrowserActions.click(sortingDropdown); + const optionToClick: ElementFinder = element(by.css(`mat-option[data-automation-id="grid-view-sorting-${sortingChosen}"]`)); + await BrowserActions.click(optionToClick); } - selectGridSortingFromDropdown(sortingChosen) { - BrowserActions.closeMenuAndDialogs(); - const dropdownSorting = this.getGridViewSortingDropdown(); - BrowserActions.click(dropdownSorting); - const optionToClick = element(by.css(`mat-option[data-automation-id="grid-view-sorting-${sortingChosen}"]`)); - BrowserActions.click(optionToClick); - } - - checkRowIsDisplayed(rowName) { + async checkRowIsDisplayed(rowName): Promise { const row = this.contentList.dataTablePage().getCellElementByValue(this.columns.name, rowName); - BrowserVisibility.waitUntilElementIsVisible(row); + await BrowserVisibility.waitUntilElementIsVisible(row); } - clickShareButton() { - BrowserActions.closeMenuAndDialogs(); - BrowserActions.click(this.shareNodeButton); + async clickShareButton(): Promise { + await BrowserActions.closeMenuAndDialogs(); + await BrowserActions.click(this.shareNodeButton); } - checkSelectedSiteIsDisplayed(siteName) { - BrowserVisibility.waitUntilElementIsVisible(this.siteListDropdown.element(by.cssContainingText('.mat-select-value-text span', siteName))); + async checkSelectedSiteIsDisplayed(siteName): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.siteListDropdown.element(by.cssContainingText('.mat-select-value-text span', siteName))); } - selectSite(siteName: string) { - BrowserActions.clickOnSelectDropdownOption(siteName, this.siteListDropdown); - return this; + async selectSite(siteName: string): Promise { + await BrowserActions.clickOnSelectDropdownOption(siteName, this.siteListDropdown); } - clickDownloadButton() { - BrowserActions.closeMenuAndDialogs(); - BrowserActions.click(this.downloadButton); + async clickDownloadButton(): Promise { + await BrowserActions.closeMenuAndDialogs(); + await BrowserActions.click(this.downloadButton); } - clickMultiSelectToggle() { - BrowserActions.closeMenuAndDialogs(); - BrowserActions.click(this.multiSelectToggle); + async clickMultiSelectToggle() { + await BrowserActions.closeMenuAndDialogs(); + await BrowserActions.click(this.multiSelectToggle); } - getRowByName(rowName) { + getRowByName(rowName): ElementFinder { return this.contentList.dataTable.getRow(this.columns.name, rowName); } diff --git a/e2e/pages/adf/core/headerPage.ts b/e2e/pages/adf/core/headerPage.ts index 0a9c8ea8b9..d51314cf88 100644 --- a/e2e/pages/adf/core/headerPage.ts +++ b/e2e/pages/adf/core/headerPage.ts @@ -15,117 +15,116 @@ * limitations under the License. */ -import { element, by, protractor } from 'protractor'; +import { element, by, protractor, ElementFinder } from 'protractor'; import { BrowserVisibility, BrowserActions } from '@alfresco/adf-testing'; export class HeaderPage { - checkBox = element(by.cssContainingText('.mat-checkbox-label', 'Show menu button')); - headerColor = element(by.css('option[value="primary"]')); - titleInput = element(by.css('input[name="title"]')); - iconInput = element(by.css('input[placeholder="URL path"]')); - hexColorInput = element(by.css('input[placeholder="hex color code"]')); - logoHyperlinkInput = element(by.css('input[placeholder="Redirect URL"]')); - logoTooltipInput = element(by.css('input[placeholder="Tooltip text"]')); - positionStart = element.all(by.css('mat-radio-button[value="start"]')).first(); - positionEnd = element.all(by.css('mat-radio-button[value="end"]')).first(); - sideBarPositionRight = element(by.css('mat-sidenav.mat-drawer.mat-sidenav.mat-drawer-end')); - sideBarPositionLeft = element(by.css('mat-sidenav.mat-drawer.mat-sidenav')); + checkBox: ElementFinder = element(by.cssContainingText('.mat-checkbox-label', 'Show menu button')); + headerColor: ElementFinder = element(by.css('option[value="primary"]')); + titleInput: ElementFinder = element(by.css('input[name="title"]')); + iconInput: ElementFinder = element(by.css('input[placeholder="URL path"]')); + hexColorInput: ElementFinder = element(by.css('input[placeholder="hex color code"]')); + logoHyperlinkInput: ElementFinder = element(by.css('input[placeholder="Redirect URL"]')); + logoTooltipInput: ElementFinder = element(by.css('input[placeholder="Tooltip text"]')); + positionStart: ElementFinder = element.all(by.css('mat-radio-button[value="start"]')).first(); + positionEnd: ElementFinder = element.all(by.css('mat-radio-button[value="end"]')).first(); + sideBarPositionRight: ElementFinder = element(by.css('mat-sidenav.mat-drawer.mat-sidenav.mat-drawer-end')); + sideBarPositionLeft: ElementFinder = element(by.css('mat-sidenav.mat-drawer.mat-sidenav')); - checkShowMenuCheckBoxIsDisplayed() { - return BrowserVisibility.waitUntilElementIsVisible(this.checkBox); + async checkShowMenuCheckBoxIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.checkBox); } - checkChooseHeaderColourIsDisplayed() { - return BrowserVisibility.waitUntilElementIsVisible(this.headerColor); + async checkChooseHeaderColourIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.headerColor); } - checkChangeTitleIsDisplayed() { - return BrowserVisibility.waitUntilElementIsVisible(this.titleInput); + async checkChangeTitleIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.titleInput); } - checkChangeUrlPathIsDisplayed() { - return BrowserVisibility.waitUntilElementIsVisible(this.iconInput); + async checkChangeUrlPathIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.iconInput); } - clickShowMenuButton() { - const checkBox = element(by.css('mat-checkbox')); - BrowserVisibility.waitUntilElementIsVisible(checkBox); - return checkBox.get(0).click(); + async clickShowMenuButton(): Promise { + const checkBox: ElementFinder = element(by.css('mat-checkbox')); + await BrowserActions.click(checkBox.get(0)); } - changeHeaderColor(color) { - const headerColor = element(by.css('option[value="' + color + '"]')); - BrowserActions.click(headerColor); + async changeHeaderColor(color): Promise { + const headerColor: ElementFinder = element(by.css('option[value="' + color + '"]')); + await BrowserActions.click(headerColor); } - checkAppTitle(name) { - const title = element(by.cssContainingText('.adf-app-title', name)); - return BrowserVisibility.waitUntilElementIsVisible(title); + async checkAppTitle(name): Promise { + const title: ElementFinder = element(by.cssContainingText('.adf-app-title', name)); + await BrowserVisibility.waitUntilElementIsVisible(title); } - addTitle(title) { - BrowserActions.click(this.titleInput); - this.titleInput.sendKeys(title); - this.titleInput.sendKeys(protractor.Key.ENTER); + async addTitle(title): Promise { + await BrowserActions.click(this.titleInput); + await BrowserActions.clearSendKeys(this.titleInput, title); + await this.titleInput.sendKeys(protractor.Key.ENTER); } - checkIconIsDisplayed(url) { - const icon = element(by.css('img[src="' + url + '"]')); - BrowserVisibility.waitUntilElementIsVisible(icon); + async checkIconIsDisplayed(url): Promise { + const icon: ElementFinder = element(by.css('img[src="' + url + '"]')); + await BrowserVisibility.waitUntilElementIsVisible(icon); } - addIcon(url) { - BrowserActions.click(this.iconInput); - this.iconInput.sendKeys(url); - this.iconInput.sendKeys(protractor.Key.ENTER); + async addIcon(url): Promise { + await BrowserActions.click(this.iconInput); + await BrowserActions.clearSendKeys(this.iconInput, url); + await this.iconInput.sendKeys(protractor.Key.ENTER); } - checkHexColorInputIsDisplayed() { - return BrowserVisibility.waitUntilElementIsVisible(this.hexColorInput); + async checkHexColorInputIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.hexColorInput); } - checkLogoHyperlinkInputIsDisplayed() { - return BrowserVisibility.waitUntilElementIsVisible(this.logoHyperlinkInput); + async checkLogoHyperlinkInputIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.logoHyperlinkInput); } - checkLogoTooltipInputIsDisplayed() { - return BrowserVisibility.waitUntilElementIsVisible(this.logoTooltipInput); + async checkLogoTooltipInputIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.logoTooltipInput); } - addHexCodeColor(hexCode) { - BrowserActions.click(this.hexColorInput); - this.hexColorInput.sendKeys(hexCode); - return this.hexColorInput.sendKeys(protractor.Key.ENTER); + async addHexCodeColor(hexCode): Promise { + await BrowserActions.click(this.hexColorInput); + await this.hexColorInput.sendKeys(hexCode); + await this.hexColorInput.sendKeys(protractor.Key.ENTER); } - addLogoHyperlink(hyperlink) { - BrowserActions.click(this.logoHyperlinkInput); - this.logoHyperlinkInput.sendKeys(hyperlink); - return this.logoHyperlinkInput.sendKeys(protractor.Key.ENTER); + async addLogoHyperlink(hyperlink): Promise { + await BrowserActions.click(this.logoHyperlinkInput); + await this.logoHyperlinkInput.sendKeys(hyperlink); + await this.logoHyperlinkInput.sendKeys(protractor.Key.ENTER); } - addLogoTooltip(tooltip) { - BrowserActions.click(this.logoTooltipInput); - this.logoTooltipInput.sendKeys(tooltip); - return this.logoTooltipInput.sendKeys(protractor.Key.ENTER); + async addLogoTooltip(tooltip): Promise { + await BrowserActions.click(this.logoTooltipInput); + await this.logoTooltipInput.sendKeys(tooltip); + await this.logoTooltipInput.sendKeys(protractor.Key.ENTER); } - sideBarPositionStart() { - BrowserActions.click(this.positionStart); + async sideBarPositionStart(): Promise { + await BrowserActions.click(this.positionStart); } - sideBarPositionEnd() { - BrowserActions.click(this.positionEnd); + async sideBarPositionEnd(): Promise { + await BrowserActions.click(this.positionEnd); } - checkSidebarPositionStart() { - return BrowserVisibility.waitUntilElementIsVisible(this.sideBarPositionLeft); + async checkSidebarPositionStart(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.sideBarPositionLeft); } - checkSidebarPositionEnd() { - return BrowserVisibility.waitUntilElementIsVisible(this.sideBarPositionRight); + async checkSidebarPositionEnd(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.sideBarPositionRight); } } diff --git a/e2e/pages/adf/core/infinitePaginationPage.ts b/e2e/pages/adf/core/infinitePaginationPage.ts index 3494f649e1..0549aeeef2 100644 --- a/e2e/pages/adf/core/infinitePaginationPage.ts +++ b/e2e/pages/adf/core/infinitePaginationPage.ts @@ -15,9 +15,7 @@ * limitations under the License. */ -import { element, by } from 'protractor'; -import { ElementFinder } from 'protractor/built/element'; - +import { element, by, ElementFinder } from 'protractor'; import { BrowserVisibility, BrowserActions } from '@alfresco/adf-testing'; export class InfinitePaginationPage { @@ -30,13 +28,12 @@ export class InfinitePaginationPage { this.loadMoreButton = this.rootElement.element(by.css('button[data-automation-id="adf-infinite-pagination-button"]')); } - clickLoadMoreButton() { - BrowserActions.click(this.loadMoreButton); - return this; + async clickLoadMoreButton(): Promise { + await BrowserActions.click(this.loadMoreButton); } - checkLoadMoreButtonIsNotDisplayed() { - return BrowserVisibility.waitUntilElementIsNotOnPage(this.loadMoreButton); + async checkLoadMoreButtonIsNotDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsNotVisible(this.loadMoreButton); } } diff --git a/e2e/pages/adf/demo-shell/customSourcesPage.ts b/e2e/pages/adf/demo-shell/customSourcesPage.ts index 0e61299ead..8e0706ca5c 100644 --- a/e2e/pages/adf/demo-shell/customSourcesPage.ts +++ b/e2e/pages/adf/demo-shell/customSourcesPage.ts @@ -16,7 +16,7 @@ */ import { BrowserVisibility } from '@alfresco/adf-testing'; -import { element, by } from 'protractor'; +import { element, by, ElementFinder } from 'protractor'; import { DataTableComponentPage, BrowserActions } from '@alfresco/adf-testing'; import { NavigationBarPage } from '../navigationBarPage'; @@ -38,49 +38,48 @@ const column = { export class CustomSources { - dataTable = new DataTableComponentPage(); - navigationBarPage = new NavigationBarPage(); + dataTable: DataTableComponentPage = new DataTableComponentPage(); + navigationBarPage: NavigationBarPage = new NavigationBarPage(); - toolbar = element(by.css('app-custom-sources .adf-toolbar-title')); - sourceTypeDropdown = element(by.css('div[class*="select-arrow"]>div')); + toolbar: ElementFinder = element(by.css('app-custom-sources .adf-toolbar-title')); + sourceTypeDropdown: ElementFinder = element(by.css('div[class*="select-arrow"]>div')); - getSourceType(option) { + getSourceType(option): ElementFinder { return element(by.cssContainingText('.cdk-overlay-pane span', `${option}`)); } - waitForToolbarToBeVisible() { - BrowserVisibility.waitUntilElementIsVisible(this.toolbar); - return this; + async waitForToolbarToBeVisible(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.toolbar); } - navigateToCustomSources() { - this.navigationBarPage.navigateToCustomSources(); - this.waitForToolbarToBeVisible(); + async navigateToCustomSources(): Promise { + await this.navigationBarPage.clickCustomSources(); + await this.waitForToolbarToBeVisible(); } - clickOnSourceType() { - BrowserActions.click(this.sourceTypeDropdown); + async clickOnSourceType(): Promise { + await BrowserActions.click(this.sourceTypeDropdown); } - selectMySitesSourceType() { - this.clickOnSourceType(); - BrowserActions.click(this.getSourceType(source.mySites)); + async selectMySitesSourceType(): Promise { + await this.clickOnSourceType(); + await BrowserActions.click(this.getSourceType(source.mySites)); } - selectFavoritesSourceType() { - this.clickOnSourceType(); - BrowserActions.click(this.getSourceType(source.favorites)); + async selectFavoritesSourceType(): Promise { + await this.clickOnSourceType(); + await BrowserActions.click(this.getSourceType(source.favorites)); } - checkRowIsDisplayed(rowName) { + checkRowIsDisplayed(rowName): Promise { return this.dataTable.checkContentIsDisplayed('Name', rowName); } - checkRowIsNotDisplayed(rowName) { + checkRowIsNotDisplayed(rowName): Promise { return this.dataTable.checkContentIsNotDisplayed('Name', rowName); } - getStatusCell(rowName) { + async getStatusCell(rowName): Promise { const cell = this.dataTable.getCellByRowContentAndColumn('Name', rowName, column.status); return BrowserActions.getText(cell); } diff --git a/e2e/pages/adf/demo-shell/dataTablePage.ts b/e2e/pages/adf/demo-shell/dataTablePage.ts index 582918725e..5dc6d8537a 100644 --- a/e2e/pages/adf/demo-shell/dataTablePage.ts +++ b/e2e/pages/adf/demo-shell/dataTablePage.ts @@ -15,7 +15,7 @@ * limitations under the License. */ -import { browser, by, element, protractor } from 'protractor'; +import { browser, by, element, ElementArrayFinder, ElementFinder, protractor } from 'protractor'; import { DataTableComponentPage } from '@alfresco/adf-testing'; import { BrowserVisibility, BrowserActions } from '@alfresco/adf-testing'; @@ -33,20 +33,18 @@ export class DataTablePage { defaultTable: 'datatable' }; - dataTable; - multiSelect = element(by.css(`div[data-automation-id='multiselect'] label > div[class='mat-checkbox-inner-container']`)); - reset = element(by.xpath(`//span[contains(text(),'Reset to default')]/..`)); - selectionButton = element(by.css(`div[class='mat-select-arrow']`)); - selectionDropDown = element(by.css(`div[class*='ng-trigger-transformPanel']`)); - allSelectedRows = element.all(by.css(`div[class*='is-selected']`)); - selectedRowNumber = element(by.css(`div[class*='is-selected'] div[data-automation-id*='text_']`)); - selectAll = element(by.css(`div[class*='header'] label`)); - addRowElement = element(by.xpath(`//span[contains(text(),'Add row')]/..`)); - replaceRowsElement = element(by.xpath(`//span[contains(text(),'Replace rows')]/..`)); - replaceColumnsElement = element(by.xpath(`//span[contains(text(),'Replace columns')]/..`)); - createdOnColumn = element(by.css(`div[data-automation-id='auto_id_createdOn']`)); - idColumnHeader = element(by.css(`div[data-automation-id='auto_id_id']`)); - pasteClipboardInput = element(by.css(`input[data-automation-id='paste clipboard input']`)); + dataTable: DataTableComponentPage; + multiSelect: ElementFinder = element(by.css(`div[data-automation-id='multiselect'] label > div[class='mat-checkbox-inner-container']`)); + reset: ElementFinder = element(by.xpath(`//span[contains(text(),'Reset to default')]/..`)); + allSelectedRows: ElementArrayFinder = element.all(by.css(`div[class*='is-selected']`)); + selectedRowNumber: ElementFinder = element(by.css(`div[class*='is-selected'] div[data-automation-id*='text_']`)); + selectAll: ElementFinder = element(by.css(`div[class*='header'] label`)); + addRowElement: ElementFinder = element(by.xpath(`//span[contains(text(),'Add row')]/..`)); + replaceRowsElement: ElementFinder = element(by.xpath(`//span[contains(text(),'Replace rows')]/..`)); + replaceColumnsElement: ElementFinder = element(by.xpath(`//span[contains(text(),'Replace columns')]/..`)); + createdOnColumn: ElementFinder = element(by.css(`div[data-automation-id='auto_id_createdOn']`)); + idColumnHeader: ElementFinder = element(by.css(`div[data-automation-id='auto_id_id']`)); + pasteClipboardInput: ElementFinder = element(by.css(`input[data-automation-id='paste clipboard input']`)); constructor(data?) { if (this.data[data]) { @@ -56,142 +54,141 @@ export class DataTablePage { } } - insertFilter(filterText) { - const inputFilter = element(by.css(`#adf-datatable-filter-input`)); - inputFilter.clear(); - return inputFilter.sendKeys(filterText); + async insertFilter(filterText): Promise { + const inputFilter: ElementFinder = element(by.css(`#adf-datatable-filter-input`)); + await BrowserActions.clearSendKeys(inputFilter, filterText); } - addRow() { - BrowserActions.click(this.addRowElement); + async addRow(): Promise { + await BrowserActions.click(this.addRowElement); } - replaceRows(id) { + async replaceRows(id): Promise { const rowID = this.dataTable.getCellElementByValue(this.columns.id, id); - BrowserVisibility.waitUntilElementIsVisible(rowID); - BrowserActions.click(this.replaceRowsElement); - BrowserVisibility.waitUntilElementIsNotVisible(rowID); + await BrowserVisibility.waitUntilElementIsVisible(rowID); + await BrowserActions.click(this.replaceRowsElement); + await BrowserVisibility.waitUntilElementIsNotVisible(rowID); } - replaceColumns() { - BrowserActions.click(this.replaceColumnsElement); - BrowserVisibility.waitUntilElementIsNotOnPage(this.createdOnColumn); + async replaceColumns(): Promise { + await BrowserActions.click(this.replaceColumnsElement); + await BrowserVisibility.waitUntilElementIsNotVisible(this.createdOnColumn); } - clickMultiSelect() { - BrowserActions.click(this.multiSelect); + async clickMultiSelect(): Promise { + await BrowserActions.click(this.multiSelect); } - clickReset() { - BrowserActions.click(this.reset); + async clickReset(): Promise { + await BrowserActions.click(this.reset); } - checkRowIsNotSelected(rowNumber) { + async checkRowIsNotSelected(rowNumber): Promise { const isRowSelected = this.dataTable.getCellElementByValue(this.columns.id, rowNumber) .element(by.xpath(`ancestor::div[contains(@class, 'adf-datatable-row custom-row-style ng-star-inserted is-selected')]`)); - BrowserVisibility.waitUntilElementIsNotOnPage(isRowSelected); + await BrowserVisibility.waitUntilElementIsNotVisible(isRowSelected); } - checkNoRowIsSelected() { - BrowserVisibility.waitUntilElementIsNotOnPage(this.selectedRowNumber); + async checkNoRowIsSelected(): Promise { + await BrowserVisibility.waitUntilElementIsNotVisible(this.selectedRowNumber); } - checkAllRows() { - BrowserActions.click(this.selectAll); + async checkAllRows(): Promise { + await BrowserActions.click(this.selectAll); } - checkRowIsChecked(rowNumber) { - BrowserVisibility.waitUntilElementIsVisible(this.getRowCheckbox(rowNumber)); + async checkRowIsChecked(rowNumber): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.getRowCheckbox(rowNumber)); } - checkRowIsNotChecked(rowNumber) { - BrowserVisibility.waitUntilElementIsNotOnPage(this.getRowCheckbox(rowNumber)); + async checkRowIsNotChecked(rowNumber): Promise { + await BrowserVisibility.waitUntilElementIsNotVisible(this.getRowCheckbox(rowNumber)); } - getNumberOfSelectedRows() { + async getNumberOfSelectedRows(): Promise { return this.allSelectedRows.count(); } - clickCheckbox(rowNumber) { - BrowserActions.closeMenuAndDialogs(); + async clickCheckbox(rowNumber): Promise { + await BrowserActions.closeMenuAndDialogs(); const checkbox = this.dataTable.getCellElementByValue(this.columns.id, rowNumber) .element(by.xpath(`ancestor::div[contains(@class, 'adf-datatable-row')]//mat-checkbox/label`)); - BrowserActions.click(checkbox); + await BrowserActions.click(checkbox); } - async selectRow(rowNumber) { - BrowserActions.clickExecuteScript(`div[title="${this.columns.id}"] div[data-automation-id="text_${rowNumber}"] span`); - return this; - } - - selectRowWithKeyboard(rowNumber) { + async selectRow(rowNumber): Promise { const row = this.dataTable.getCellElementByValue(this.columns.id, rowNumber); - browser.actions().sendKeys(protractor.Key.COMMAND).click(row).perform(); + await BrowserActions.click(row); } - selectSelectionMode(selectionMode) { - const selectMode = element(by.cssContainingText(`span[class='mat-option-text']`, selectionMode)); - BrowserActions.clickExecuteScript('div[class="mat-select-arrow"]'); - BrowserActions.click(selectMode); + async selectRowWithKeyboard(rowNumber): Promise { + await browser.actions().sendKeys(protractor.Key.COMMAND).perform(); + await this.selectRow(rowNumber); + await browser.actions().sendKeys(protractor.Key.NULL).perform(); } - getRowCheckbox(rowNumber) { + async selectSelectionMode(selectionMode): Promise { + const selectMode: ElementFinder = element(by.cssContainingText(`span[class='mat-option-text']`, selectionMode)); + await BrowserActions.clickExecuteScript('div[class="mat-select-arrow"]'); + await BrowserActions.click(selectMode); + } + + getRowCheckbox(rowNumber): ElementFinder { return this.dataTable.getCellElementByValue(this.columns.id, rowNumber).element(by.xpath(`ancestor::div/div/mat-checkbox[contains(@class, 'mat-checkbox-checked')]`)); } - getCopyContentTooltip() { - return this.dataTable.getCopyContentTooltip(); + async getCopyContentTooltip(): Promise { + return await this.dataTable.getCopyContentTooltip(); } - mouseOverNameColumn(name) { - return this.dataTable.mouseOverColumn(this.columns.name, name); + async mouseOverNameColumn(name): Promise { + await this.dataTable.mouseOverColumn(this.columns.name, name); } - mouseOverCreatedByColumn(name) { - return this.dataTable.mouseOverColumn(this.columns.createdBy, name); + async mouseOverCreatedByColumn(name): Promise { + await this.dataTable.mouseOverColumn(this.columns.createdBy, name); } - mouseOverIdColumn(name) { - return this.dataTable.mouseOverColumn(this.columns.id, name); + async mouseOverIdColumn(name): Promise { + await this.dataTable.mouseOverColumn(this.columns.id, name); } - mouseOverJsonColumn(rowNumber) { - return this.dataTable.mouseOverElement(this.dataTable.getCellByRowNumberAndColumnName(rowNumber - 1, this.columns.json)); + async mouseOverJsonColumn(rowNumber): Promise { + await this.dataTable.mouseOverElement(this.dataTable.getCellByRowNumberAndColumnName(rowNumber - 1, this.columns.json)); } - getDropTargetIdColumnCell(rowNumber) { + getDropTargetIdColumnCell(rowNumber): ElementFinder { return this.dataTable.getCellByRowNumberAndColumnName(rowNumber - 1, this.columns.id); } - getDropTargetIdColumnHeader() { + getDropTargetIdColumnHeader(): ElementFinder { return this.idColumnHeader; } - clickOnIdColumn(name) { - return this.dataTable.clickColumn(this.columns.id, name); + async clickOnIdColumn(name): Promise { + await this.dataTable.clickColumn(this.columns.id, name); } - clickOnJsonColumn(rowNumber) { - return BrowserActions.click(this.dataTable.getCellByRowNumberAndColumnName(rowNumber - 1, this.columns.json)); + async clickOnJsonColumn(rowNumber): Promise { + await BrowserActions.click(this.dataTable.getCellByRowNumberAndColumnName(rowNumber - 1, this.columns.json)); } - clickOnNameColumn(name) { - return this.dataTable.clickColumn(this.columns.name, name); + async clickOnNameColumn(name): Promise { + await this.dataTable.clickColumn(this.columns.name, name); } - clickOnCreatedByColumn(name) { - return this.dataTable.clickColumn(this.columns.createdBy, name); + async clickOnCreatedByColumn(name): Promise { + await this.dataTable.clickColumn(this.columns.createdBy, name); } - pasteClipboard() { - this.pasteClipboardInput.clear(); - BrowserActions.click(this.pasteClipboardInput); - this.pasteClipboardInput.sendKeys(protractor.Key.chord(protractor.Key.SHIFT, protractor.Key.INSERT)); - return this; + async pasteClipboard(): Promise { + await this.pasteClipboardInput.clear(); + await BrowserActions.click(this.pasteClipboardInput); + await this.pasteClipboardInput.sendKeys(protractor.Key.chord(protractor.Key.SHIFT, protractor.Key.INSERT)); } - getClipboardInputText() { - BrowserVisibility.waitUntilElementIsVisible(this.pasteClipboardInput); - return this.pasteClipboardInput.getAttribute('value'); + async getClipboardInputText(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.pasteClipboardInput); + return await this.pasteClipboardInput.getAttribute('value'); } } diff --git a/e2e/pages/adf/demo-shell/logoutPage.ts b/e2e/pages/adf/demo-shell/logoutPage.ts index c1bc5664b1..cbb60de956 100644 --- a/e2e/pages/adf/demo-shell/logoutPage.ts +++ b/e2e/pages/adf/demo-shell/logoutPage.ts @@ -15,14 +15,14 @@ * limitations under the License. */ -import { by, element } from 'protractor'; +import { by, element, ElementFinder } from 'protractor'; import { BrowserVisibility } from '@alfresco/adf-testing'; export class LogoutPage { - logoutSection = element(by.css('div[data-automation-id="adf-logout-section"]')); + logoutSection: ElementFinder = element(by.css('div[data-automation-id="adf-logout-section"]')); - checkLogoutSectionIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.logoutSection); + async checkLogoutSectionIsDisplayed() { + await BrowserVisibility.waitUntilElementIsVisible(this.logoutSection); } } diff --git a/e2e/pages/adf/demo-shell/monacoExtensionPage.ts b/e2e/pages/adf/demo-shell/monacoExtensionPage.ts index 7c4270bc1e..d1a54c87ac 100644 --- a/e2e/pages/adf/demo-shell/monacoExtensionPage.ts +++ b/e2e/pages/adf/demo-shell/monacoExtensionPage.ts @@ -15,14 +15,14 @@ * limitations under the License. */ -import { by, element } from 'protractor'; +import { by, element, ElementFinder } from 'protractor'; import { BrowserVisibility } from '@alfresco/adf-testing'; export class MonacoExtensionPage { - monacoPlugin = element(by.cssContainingText('mat-row > mat-cell', 'monaco plugin')); + monacoPlugin: ElementFinder = element(by.cssContainingText('mat-row > mat-cell', 'monaco plugin')); - checkMonacoPluginIsDisplayed() { - return BrowserVisibility.waitUntilElementIsVisible(this.monacoPlugin); + async checkMonacoPluginIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.monacoPlugin); } } diff --git a/e2e/pages/adf/demo-shell/process-services-cloud/cloudFormDemoPage.ts b/e2e/pages/adf/demo-shell/process-services-cloud/cloudFormDemoPage.ts index deef6a5818..653682e5c7 100644 --- a/e2e/pages/adf/demo-shell/process-services-cloud/cloudFormDemoPage.ts +++ b/e2e/pages/adf/demo-shell/process-services-cloud/cloudFormDemoPage.ts @@ -17,28 +17,28 @@ import { ConfigEditorPage } from '../../configEditorPage'; import { BrowserActions } from '@alfresco/adf-testing'; -import { by, element, browser } from 'protractor'; +import { by, element, browser, ElementFinder } from 'protractor'; export class FormCloudDemoPage { - formCloudEditor = element.all(by.css('.mat-tab-list .mat-tab-label')).get(1); - formCloudRender = element.all(by.css('.mat-tab-list .mat-tab-label')).get(0); + formCloudEditor: ElementFinder = element.all(by.css('.mat-tab-list .mat-tab-label')).get(1); + formCloudRender: ElementFinder = element.all(by.css('.mat-tab-list .mat-tab-label')).get(0); configEditorPage = new ConfigEditorPage(); - goToEditor() { - BrowserActions.click(this.formCloudEditor); + async goToEditor(): Promise { + await BrowserActions.click(this.formCloudEditor); } - goToRenderedForm() { - BrowserActions.click(this.formCloudRender); + async goToRenderedForm(): Promise { + await BrowserActions.click(this.formCloudRender); } - setConfigToEditor(text) { - this.goToEditor(); - browser.sleep(2000); - this.configEditorPage.enterBulkConfiguration(text); - this.goToRenderedForm(); - browser.sleep(2000); + async setConfigToEditor(text): Promise { + await this.goToEditor(); + await browser.sleep(2000); + await this.configEditorPage.enterBulkConfiguration(text); + await this.goToRenderedForm(); + await browser.sleep(2000); } } diff --git a/e2e/pages/adf/demo-shell/process-services-cloud/processDetailsCloudDemoPage.ts b/e2e/pages/adf/demo-shell/process-services-cloud/processDetailsCloudDemoPage.ts index f97570fcad..421e2de00f 100644 --- a/e2e/pages/adf/demo-shell/process-services-cloud/processDetailsCloudDemoPage.ts +++ b/e2e/pages/adf/demo-shell/process-services-cloud/processDetailsCloudDemoPage.ts @@ -19,15 +19,13 @@ import { DataTableComponentPage } from '@alfresco/adf-testing'; export class ProcessDetailsCloudDemoPage { - dataTable = new DataTableComponentPage(); + dataTable: DataTableComponentPage = new DataTableComponentPage(); - checkTaskIsDisplayed(taskName: string) { - this.dataTable.checkContentIsDisplayed('Name', taskName); - return this; + async checkTaskIsDisplayed(taskName: string): Promise { + await this.dataTable.checkContentIsDisplayed('Name', taskName); } - selectProcessTaskByName(taskName: string) { - this.dataTable.selectRow('Name', taskName); - return this; + async selectProcessTaskByName(taskName: string): Promise { + await this.dataTable.selectRow('Name', taskName); } } diff --git a/e2e/pages/adf/demo-shell/process-services/peopleGroupCloudComponentPage.ts b/e2e/pages/adf/demo-shell/process-services/peopleGroupCloudComponentPage.ts index 17209c10bb..aaf17adaaa 100644 --- a/e2e/pages/adf/demo-shell/process-services/peopleGroupCloudComponentPage.ts +++ b/e2e/pages/adf/demo-shell/process-services/peopleGroupCloudComponentPage.ts @@ -15,136 +15,120 @@ * limitations under the License. */ -import { by, element, protractor } from 'protractor'; +import { by, element, ElementFinder } from 'protractor'; import { BrowserVisibility, BrowserActions } from '@alfresco/adf-testing'; export class PeopleGroupCloudComponentPage { - peopleCloudSingleSelectionChecked = element(by.css('mat-radio-button[data-automation-id="adf-people-single-mode"][class*="mat-radio-checked"]')); - peopleCloudMultipleSelectionChecked = element(by.css('mat-radio-button[data-automation-id="adf-people-multiple-mode"][class*="mat-radio-checked"]')); - peopleCloudSingleSelection = element(by.css('mat-radio-button[data-automation-id="adf-people-single-mode"]')); - peopleCloudMultipleSelection = element(by.css('mat-radio-button[data-automation-id="adf-people-multiple-mode"]')); - peopleCloudFilterRole = element(by.css('mat-radio-button[data-automation-id="adf-people-filter-role"]')); - groupCloudSingleSelection = element(by.css('mat-radio-button[data-automation-id="adf-group-single-mode"]')); - groupCloudMultipleSelection = element(by.css('mat-radio-button[data-automation-id="adf-group-multiple-mode"]')); - groupCloudFilterRole = element(by.css('mat-radio-button[data-automation-id="adf-group-filter-role"]')); - peopleRoleInput = element(by.css('input[data-automation-id="adf-people-roles-input"]')); - peopleAppInput = element(by.css('input[data-automation-id="adf-people-app-input"]')); - peoplePreselect = element(by.css('input[data-automation-id="adf-people-preselect-input"]')); - groupRoleInput = element(by.css('input[data-automation-id="adf-group-roles-input"]')); - groupAppInput = element(by.css('input[data-automation-id="adf-group-app-input"]')); - peopleCloudComponentTitle = element(by.cssContainingText('mat-card-title', 'People Cloud Component')); - groupCloudComponentTitle = element(by.cssContainingText('mat-card-title', 'Groups Cloud Component')); - preselectValidation = element(by.css('mat-checkbox.adf-preselect-value')); - preselectValidationStatus = element(by.css('mat-checkbox.adf-preselect-value label input')); - peopleFilterByAppName = element(by.css('.people-control-options mat-radio-button[value="appName"]')); - groupFilterByAppName = element(by.css('.groups-control-options mat-radio-button[value="appName"]')); + peopleCloudSingleSelectionChecked: ElementFinder = element(by.css('mat-radio-button[data-automation-id="adf-people-single-mode"][class*="mat-radio-checked"]')); + peopleCloudMultipleSelectionChecked: ElementFinder = element(by.css('mat-radio-button[data-automation-id="adf-people-multiple-mode"][class*="mat-radio-checked"]')); + peopleCloudSingleSelection: ElementFinder = element(by.css('mat-radio-button[data-automation-id="adf-people-single-mode"]')); + peopleCloudMultipleSelection: ElementFinder = element(by.css('mat-radio-button[data-automation-id="adf-people-multiple-mode"]')); + peopleCloudFilterRole: ElementFinder = element(by.css('mat-radio-button[data-automation-id="adf-people-filter-role"]')); + groupCloudSingleSelection: ElementFinder = element(by.css('mat-radio-button[data-automation-id="adf-group-single-mode"]')); + groupCloudMultipleSelection: ElementFinder = element(by.css('mat-radio-button[data-automation-id="adf-group-multiple-mode"]')); + groupCloudFilterRole: ElementFinder = element(by.css('mat-radio-button[data-automation-id="adf-group-filter-role"]')); + peopleRoleInput: ElementFinder = element(by.css('input[data-automation-id="adf-people-roles-input"]')); + peopleAppInput: ElementFinder = element(by.css('input[data-automation-id="adf-people-app-input"]')); + peoplePreselect: ElementFinder = element(by.css('input[data-automation-id="adf-people-preselect-input"]')); + groupRoleInput: ElementFinder = element(by.css('input[data-automation-id="adf-group-roles-input"]')); + groupAppInput: ElementFinder = element(by.css('input[data-automation-id="adf-group-app-input"]')); + peopleCloudComponentTitle: ElementFinder = element(by.cssContainingText('mat-card-title', 'People Cloud Component')); + groupCloudComponentTitle: ElementFinder = element(by.cssContainingText('mat-card-title', 'Groups Cloud Component')); + preselectValidation: ElementFinder = element(by.css('mat-checkbox.adf-preselect-value')); + preselectValidationStatus: ElementFinder = element(by.css('mat-checkbox.adf-preselect-value label input')); + peopleFilterByAppName: ElementFinder = element(by.css('.people-control-options mat-radio-button[value="appName"]')); + groupFilterByAppName: ElementFinder = element(by.css('.groups-control-options mat-radio-button[value="appName"]')); - checkPeopleCloudComponentTitleIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.peopleCloudComponentTitle); - return this; + async checkPeopleCloudComponentTitleIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.peopleCloudComponentTitle); } - checkGroupsCloudComponentTitleIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.groupCloudComponentTitle); - return this; + async checkGroupsCloudComponentTitleIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.groupCloudComponentTitle); } - clickPeopleCloudSingleSelection() { - BrowserActions.click(this.peopleCloudSingleSelection); + async clickPeopleCloudSingleSelection(): Promise { + await BrowserActions.click(this.peopleCloudSingleSelection); } - clickPeopleCloudMultipleSelection() { - BrowserActions.click(this.peopleCloudMultipleSelection); + async clickPeopleCloudMultipleSelection(): Promise { + await BrowserActions.click(this.peopleCloudMultipleSelection); } - checkPeopleCloudSingleSelectionIsSelected() { - BrowserVisibility.waitUntilElementIsVisible(this.peopleCloudSingleSelectionChecked); + async checkPeopleCloudSingleSelectionIsSelected(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.peopleCloudSingleSelectionChecked); } - checkPeopleCloudMultipleSelectionIsSelected() { - BrowserVisibility.waitUntilElementIsVisible(this.peopleCloudMultipleSelectionChecked); + async checkPeopleCloudMultipleSelectionIsSelected(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.peopleCloudMultipleSelectionChecked); } - checkPeopleCloudFilterRole() { - BrowserVisibility.waitUntilElementIsVisible(this.peopleCloudFilterRole); + async checkPeopleCloudFilterRole(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.peopleCloudFilterRole); } - clickPeopleCloudFilterRole() { - BrowserActions.click(this.peopleCloudFilterRole); + async clickPeopleCloudFilterRole(): Promise { + await BrowserActions.click(this.peopleCloudFilterRole); } - clickGroupCloudFilterRole() { - BrowserActions.click(this.groupCloudFilterRole); + async clickGroupCloudFilterRole(): Promise { + await BrowserActions.click(this.groupCloudFilterRole); } - enterPeopleRoles(roles) { - BrowserVisibility.waitUntilElementIsVisible(this.peopleRoleInput); - this.peopleRoleInput.clear(); - this.peopleRoleInput.sendKeys(roles); - return this; + async enterPeopleRoles(roles): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.peopleRoleInput); + await BrowserActions.clearSendKeys(this.peopleRoleInput, roles); } - enterPeoplePreselect(preselect) { - BrowserVisibility.waitUntilElementIsVisible(this.peoplePreselect); - this.peoplePreselect.clear(); - this.peoplePreselect.sendKeys(preselect); - return this; + async enterPeoplePreselect(preselect): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.peoplePreselect); + await BrowserActions.clearSendKeys(this.peoplePreselect, preselect); } - clearField(locator) { - BrowserVisibility.waitUntilElementIsVisible(locator); - locator.getAttribute('value').then((result) => { - for (let i = result.length; i >= 0; i--) { - locator.sendKeys(protractor.Key.BACK_SPACE); - } - }); + async clearField(locator): Promise { + await BrowserVisibility.waitUntilElementIsVisible(locator); + await BrowserActions.clearSendKeys(locator, ''); } - clickGroupCloudSingleSelection() { - BrowserActions.click(this.groupCloudSingleSelection); + async clickGroupCloudSingleSelection(): Promise { + await BrowserActions.click(this.groupCloudSingleSelection); } - clickGroupCloudMultipleSelection() { - BrowserActions.click(this.groupCloudMultipleSelection); + async clickGroupCloudMultipleSelection(): Promise { + await BrowserActions.click(this.groupCloudMultipleSelection); } - enterGroupRoles(roles) { - BrowserVisibility.waitUntilElementIsVisible(this.groupRoleInput); - this.groupRoleInput.clear(); - this.groupRoleInput.sendKeys(roles); - return this; + async enterGroupRoles(roles): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.groupRoleInput); + await BrowserActions.clearSendKeys(this.groupRoleInput, roles); } - clickPreselectValidation() { - BrowserActions.click(this.preselectValidation); + async clickPreselectValidation(): Promise { + await BrowserActions.click(this.preselectValidation); } - getPreselectValidationStatus() { - BrowserVisibility.waitUntilElementIsVisible(this.preselectValidationStatus); + async getPreselectValidationStatus(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.preselectValidationStatus); return this.preselectValidationStatus.getAttribute('aria-checked'); } - clickPeopleFilerByApp() { - return BrowserActions.click(this.peopleFilterByAppName); + async clickPeopleFilerByApp(): Promise { + await BrowserActions.click(this.peopleFilterByAppName); } - clickGroupFilerByApp() { - return BrowserActions.click(this.groupFilterByAppName); + async clickGroupFilerByApp(): Promise { + await BrowserActions.click(this.groupFilterByAppName); } - enterPeopleAppName(appName) { - BrowserVisibility.waitUntilElementIsVisible(this.peopleAppInput); - this.peopleAppInput.clear(); - this.peopleAppInput.sendKeys(appName); - return this; + async enterPeopleAppName(appName): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.peopleAppInput); + await BrowserActions.clearSendKeys(this.peopleAppInput, appName); } - enterGroupAppName(appName) { - BrowserVisibility.waitUntilElementIsVisible(this.groupAppInput); - this.groupAppInput.clear(); - this.groupAppInput.sendKeys(appName); - return this; + async enterGroupAppName(appName): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.groupAppInput); + await BrowserActions.clearSendKeys(this.groupAppInput, appName); } } diff --git a/e2e/pages/adf/demo-shell/process-services/processCloudDemoPage.ts b/e2e/pages/adf/demo-shell/process-services/processCloudDemoPage.ts index 22ebeba01c..a259496c83 100644 --- a/e2e/pages/adf/demo-shell/process-services/processCloudDemoPage.ts +++ b/e2e/pages/adf/demo-shell/process-services/processCloudDemoPage.ts @@ -15,7 +15,7 @@ * limitations under the License. */ -import { element, by } from 'protractor'; +import { element, by, ElementFinder } from 'protractor'; import { BrowserVisibility } from '@alfresco/adf-testing'; import { ProcessFiltersCloudComponentPage, @@ -26,74 +26,71 @@ import { export class ProcessCloudDemoPage { - allProcesses = element(by.css('span[data-automation-id="all-processes_filter"]')); - runningProcesses = element(by.css('span[data-automation-id="running-processes_filter"]')); - completedProcesses = element(by.css('span[data-automation-id="completed-processes_filter"]')); - activeFilter = element(by.css("mat-list-item[class*='active'] span")); - processFilters = element(by.css("mat-expansion-panel[data-automation-id='Process Filters']")); - processFiltersList = element(by.css('adf-cloud-process-filters')); + allProcesses: ElementFinder = element(by.css('span[data-automation-id="all-processes_filter"]')); + runningProcesses: ElementFinder = element(by.css('span[data-automation-id="running-processes_filter"]')); + completedProcesses: ElementFinder = element(by.css('span[data-automation-id="completed-processes_filter"]')); + activeFilter: ElementFinder = element(by.css("mat-list-item[class*='active'] span")); + processFilters: ElementFinder = element(by.css("mat-expansion-panel[data-automation-id='Process Filters']")); + processFiltersList: ElementFinder = element(by.css('adf-cloud-process-filters')); - createButton = element(by.css('button[data-automation-id="create-button"')); - newProcessButton = element(by.css('button[data-automation-id="btn-start-process"]')); + createButton: ElementFinder = element(by.css('button[data-automation-id="create-button"')); + newProcessButton: ElementFinder = element(by.css('button[data-automation-id="btn-start-process"]')); processListCloud = new ProcessListCloudComponentPage(); editProcessFilterCloud = new EditProcessFilterCloudComponentPage(); - editProcessFilterCloudComponent() { + editProcessFilterCloudComponent(): EditProcessFilterCloudComponentPage { return this.editProcessFilterCloud; } - processListCloudComponent() { + processListCloudComponent(): ProcessListCloudComponentPage { return this.processListCloud; } - getAllRowsByIdColumn() { + getAllRowsByIdColumn(): Promise { return this.processListCloud.getAllRowsByColumn('Id'); } - allProcessesFilter() { + allProcessesFilter(): ProcessFiltersCloudComponentPage { return new ProcessFiltersCloudComponentPage(this.allProcesses); } - runningProcessesFilter() { + runningProcessesFilter(): ProcessFiltersCloudComponentPage { return new ProcessFiltersCloudComponentPage(this.runningProcesses); } - completedProcessesFilter() { + completedProcessesFilter(): ProcessFiltersCloudComponentPage { return new ProcessFiltersCloudComponentPage(this.completedProcesses); } - customProcessFilter(filterName) { + customProcessFilter(filterName): ProcessFiltersCloudComponentPage { return new ProcessFiltersCloudComponentPage(element(by.css(`span[data-automation-id="${filterName}_filter"]`))); } - getActiveFilterName() { + async getActiveFilterName(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.activeFilter); return BrowserActions.getText(this.activeFilter); } - clickOnProcessFilters() { - return BrowserActions.click(this.processFilters); + async clickOnProcessFilters(): Promise { + await BrowserActions.click(this.processFilters); } - openNewProcessForm() { - this.clickOnCreateButton(); - this.newProcessButtonIsDisplayed(); - BrowserActions.click(this.newProcessButton); - return this; + async openNewProcessForm(): Promise { + await this.clickOnCreateButton(); + await this.newProcessButtonIsDisplayed(); + await BrowserActions.click(this.newProcessButton); } - newProcessButtonIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.newProcessButton); - return this; + async newProcessButtonIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.newProcessButton); } - isProcessFiltersListVisible() { - BrowserVisibility.waitUntilElementIsVisible(this.processFiltersList); - return this; + async isProcessFiltersListVisible(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.processFiltersList); } - clickOnCreateButton() { - BrowserActions.click(this.createButton); - return this; + async clickOnCreateButton(): Promise { + await BrowserActions.click(this.createButton); } } diff --git a/e2e/pages/adf/demo-shell/process-services/processListDemoPage.ts b/e2e/pages/adf/demo-shell/process-services/processListDemoPage.ts index 3cf5f0b1f2..a10e73b6e5 100644 --- a/e2e/pages/adf/demo-shell/process-services/processListDemoPage.ts +++ b/e2e/pages/adf/demo-shell/process-services/processListDemoPage.ts @@ -17,96 +17,88 @@ import { BrowserVisibility } from '@alfresco/adf-testing'; import { DataTableComponentPage, BrowserActions } from '@alfresco/adf-testing'; -import { element, by, protractor } from 'protractor'; +import { element, by, protractor, ElementFinder } from 'protractor'; export class ProcessListDemoPage { - appIdInput = element(by.css('input[data-automation-id="app-id"]')); - resetButton = element(by.cssContainingText('button span', 'Reset')); - emptyProcessContent = element(by.css('div[class="adf-empty-content"]')); - processDefinitionInput = element(by.css('input[data-automation-id="process-definition-id"]')); - processInstanceInput = element(by.css('input[data-automation-id="process-instance-id"]')); - stateSelector = element(by.css('mat-select[data-automation-id="state"')); - sortSelector = element(by.css('mat-select[data-automation-id="sort"')); + appIdInput: ElementFinder = element(by.css('input[data-automation-id="app-id"]')); + resetButton: ElementFinder = element(by.cssContainingText('button span', 'Reset')); + emptyProcessContent: ElementFinder = element(by.css('div[class="adf-empty-content"]')); + processDefinitionInput: ElementFinder = element(by.css('input[data-automation-id="process-definition-id"]')); + processInstanceInput: ElementFinder = element(by.css('input[data-automation-id="process-instance-id"]')); + stateSelector: ElementFinder = element(by.css('mat-select[data-automation-id="state"')); + sortSelector: ElementFinder = element(by.css('mat-select[data-automation-id="sort"')); - dataTable = new DataTableComponentPage(); + dataTable: DataTableComponentPage = new DataTableComponentPage(); - getDisplayedProcessesNames() { + getDisplayedProcessesNames(): Promise { return this.dataTable.getAllRowsColumnValues('Name'); } - selectSorting(sort) { - BrowserActions.click(this.sortSelector); - const sortLocator = element(by.cssContainingText('mat-option span', sort)); - BrowserActions.click(sortLocator); - return this; + async selectSorting(sort): Promise { + await BrowserActions.click(this.sortSelector); + const sortLocator: ElementFinder = element(by.cssContainingText('mat-option span', sort)); + await BrowserActions.click(sortLocator); } - selectStateFilter(state) { - BrowserActions.click(this.stateSelector); - const stateLocator = element(by.cssContainingText('mat-option span', state)); - BrowserActions.click(stateLocator); - return this; + async selectStateFilter(state): Promise { + await BrowserActions.click(this.stateSelector); + const stateLocator: ElementFinder = element(by.cssContainingText('mat-option span', state)); + await BrowserActions.click(stateLocator); } - addAppId(appId) { - BrowserActions.click(this.appIdInput); - this.appIdInput.sendKeys(protractor.Key.ENTER); - this.appIdInput.clear(); - return this.appIdInput.sendKeys(appId); + async addAppId(appId): Promise { + await BrowserActions.click(this.appIdInput); + await this.appIdInput.sendKeys(protractor.Key.ENTER); + await this.appIdInput.clear(); + await this.appIdInput.sendKeys(appId); } - clickResetButton() { - return BrowserActions.click(this.resetButton); + async clickResetButton(): Promise { + await BrowserActions.click(this.resetButton); } - checkErrorMessageIsDisplayed(error) { - const errorMessage = element(by.cssContainingText('mat-error', error)); - BrowserVisibility.waitUntilElementIsVisible(errorMessage); + async checkErrorMessageIsDisplayed(error): Promise { + const errorMessage: ElementFinder = element(by.cssContainingText('mat-error', error)); + await BrowserVisibility.waitUntilElementIsVisible(errorMessage); } - checkNoProcessFoundIsDisplayed() { - return BrowserVisibility.waitUntilElementIsVisible(this.emptyProcessContent); + async checkNoProcessFoundIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.emptyProcessContent); } - checkProcessIsNotDisplayed(processName) { - return this.dataTable.checkContentIsNotDisplayed('Name', processName); + async checkProcessIsNotDisplayed(processName): Promise { + await this.dataTable.checkContentIsNotDisplayed('Name', processName); } - checkProcessIsDisplayed(processName) { - return this.dataTable.checkContentIsDisplayed('Name', processName); + async checkProcessIsDisplayed(processName): Promise { + await this.dataTable.checkContentIsDisplayed('Name', processName); } - checkAppIdFieldIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.appIdInput); - return this; + async checkAppIdFieldIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.appIdInput); } - checkProcessInstanceIdFieldIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.processInstanceInput); - return this; + async checkProcessInstanceIdFieldIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.processInstanceInput); } - checkStateFieldIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.stateSelector); - return this; + async checkStateFieldIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.stateSelector); } - checkSortFieldIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.sortSelector); - return this; + async checkSortFieldIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.sortSelector); } - addProcessDefinitionId(procDefinitionId) { - BrowserActions.click(this.processDefinitionInput); - this.processDefinitionInput.clear(); - return this.processDefinitionInput.sendKeys(procDefinitionId); + async addProcessDefinitionId(procDefinitionId): Promise { + await BrowserActions.click(this.processDefinitionInput); + await BrowserActions.clearSendKeys(this.processDefinitionInput, procDefinitionId); } - addProcessInstanceId(procInstanceId) { - BrowserActions.click(this.processInstanceInput); - this.processInstanceInput.clear(); - return this.processInstanceInput.sendKeys(procInstanceId); + async addProcessInstanceId(procInstanceId): Promise { + await BrowserActions.click(this.processInstanceInput); + await BrowserActions.clearSendKeys(this.processInstanceInput, procInstanceId); } } diff --git a/e2e/pages/adf/demo-shell/process-services/taskFiltersDemoPage.ts b/e2e/pages/adf/demo-shell/process-services/taskFiltersDemoPage.ts index a0c750ad4e..0ee1386090 100644 --- a/e2e/pages/adf/demo-shell/process-services/taskFiltersDemoPage.ts +++ b/e2e/pages/adf/demo-shell/process-services/taskFiltersDemoPage.ts @@ -16,22 +16,22 @@ */ import { BrowserActions } from '@alfresco/adf-testing'; -import { element, by } from 'protractor'; +import { element, by, ElementFinder } from 'protractor'; import { TaskFiltersPage } from '../../process-services/taskFiltersPage'; export class TaskFiltersDemoPage { - myTasks = element(by.css('span[data-automation-id="My Tasks_filter"]')); - queuedTask = element(by.css('span[data-automation-id="Queued Tasks_filter"]')); - completedTask = element(by.css('span[data-automation-id="Completed Tasks_filter"]')); - involvedTask = element(by.css('span[data-automation-id="Involved Tasks_filter"]')); - activeFilter = element(by.css("mat-list-item[class*='active']")); + myTasks: ElementFinder = element(by.css('span[data-automation-id="My Tasks_filter"]')); + queuedTask: ElementFinder = element(by.css('span[data-automation-id="Queued Tasks_filter"]')); + completedTask: ElementFinder = element(by.css('span[data-automation-id="Completed Tasks_filter"]')); + involvedTask: ElementFinder = element(by.css('span[data-automation-id="Involved Tasks_filter"]')); + activeFilter: ElementFinder = element(by.css("mat-list-item[class*='active']")); - myTasksFilter() { + myTasksFilter(): TaskFiltersPage { return new TaskFiltersPage(this.myTasks); } - queuedTasksFilter() { + queuedTasksFilter(): TaskFiltersPage { return new TaskFiltersPage(this.queuedTask); } @@ -39,15 +39,15 @@ export class TaskFiltersDemoPage { return new TaskFiltersPage(this.completedTask); } - involvedTasksFilter() { + involvedTasksFilter(): TaskFiltersPage { return new TaskFiltersPage(this.involvedTask); } - customTaskFilter(filterName) { + customTaskFilter(filterName): TaskFiltersPage { return new TaskFiltersPage(element(by.css(`span[data-automation-id="${filterName}_filter"]`))); } - checkActiveFilterActive () { + async checkActiveFilterActive(): Promise { return BrowserActions.getText(this.activeFilter); } diff --git a/e2e/pages/adf/demo-shell/process-services/taskListDemoPage.ts b/e2e/pages/adf/demo-shell/process-services/taskListDemoPage.ts index 43bc96a5d1..b8f57ccdb4 100644 --- a/e2e/pages/adf/demo-shell/process-services/taskListDemoPage.ts +++ b/e2e/pages/adf/demo-shell/process-services/taskListDemoPage.ts @@ -17,188 +17,153 @@ import { TasksListPage } from '../../process-services/tasksListPage'; import { PaginationPage } from '@alfresco/adf-testing'; -import { element, by } from 'protractor'; +import { element, by, ElementFinder } from 'protractor'; import { BrowserVisibility, BrowserActions } from '@alfresco/adf-testing'; export class TaskListDemoPage { taskListPage: TasksListPage = new TasksListPage(); - appId = element(by.css("input[data-automation-id='appId input']")); - itemsPerPage = element(by.css("input[data-automation-id='items per page']")); - itemsPerPageForm = element(by.css("mat-form-field[data-automation-id='items per page']")); - processDefinitionId = element(by.css("input[data-automation-id='process definition id']")); - processInstanceId = element(by.css("input[data-automation-id='process instance id']")); - page = element(by.css("input[data-automation-id='page']")); - pageForm = element(by.css("mat-form-field[data-automation-id='page']")); - taskName = element(by.css("input[data-automation-id='task name']")); - resetButton = element(by.css("div[class='adf-reset-button'] button")); - dueBefore = element(by.css("input[data-automation-id='due before']")); - dueAfter = element(by.css("input[data-automation-id='due after']")); - taskId = element(by.css("input[data-automation-id='task id']")); - stateDropDownArrow = element(by.css("mat-form-field[data-automation-id='state'] div[class*='arrow']")); - stateSelector = element(by.css("div[class*='mat-select-panel']")); - sortDropDownArrow = element(by.css("mat-form-field[data-automation-id='sort'] div[class*='arrow']")); - sortSelector = element(by.css("div[class*='mat-select-panel']")); + appId: ElementFinder = element(by.css("input[data-automation-id='appId input']")); + itemsPerPage: ElementFinder = element(by.css("input[data-automation-id='items per page']")); + itemsPerPageForm: ElementFinder = element(by.css("mat-form-field[data-automation-id='items per page']")); + processDefinitionId: ElementFinder = element(by.css("input[data-automation-id='process definition id']")); + processInstanceId: ElementFinder = element(by.css("input[data-automation-id='process instance id']")); + page: ElementFinder = element(by.css("input[data-automation-id='page']")); + pageForm: ElementFinder = element(by.css("mat-form-field[data-automation-id='page']")); + taskName: ElementFinder = element(by.css("input[data-automation-id='task name']")); + resetButton: ElementFinder = element(by.css("div[class='adf-reset-button'] button")); + dueBefore: ElementFinder = element(by.css("input[data-automation-id='due before']")); + dueAfter: ElementFinder = element(by.css("input[data-automation-id='due after']")); + taskId: ElementFinder = element(by.css("input[data-automation-id='task id']")); + stateDropDownArrow: ElementFinder = element(by.css("mat-form-field[data-automation-id='state'] div[class*='arrow']")); + stateSelector: ElementFinder = element(by.css("div[class*='mat-select-panel']")); taskList(): TasksListPage { return this.taskListPage; } - paginationPage() { + paginationPage(): PaginationPage { return new PaginationPage(); } - typeAppId(input) { - BrowserVisibility.waitUntilElementIsVisible(this.appId); - this.clearText(this.appId); - this.appId.sendKeys(input); - return this; + async typeAppId(input): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.appId); + await BrowserActions.clearSendKeys(this.appId, input); } - clickAppId() { - BrowserActions.click(this.appId); - return this; + async clickAppId(): Promise { + await BrowserActions.click(this.appId); } - getAppId() { - BrowserVisibility.waitUntilElementIsVisible(this.appId); + async getAppId(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.appId); return this.appId.getAttribute('value'); } - typeTaskId(input) { - BrowserVisibility.waitUntilElementIsVisible(this.taskId); - this.clearText(this.taskId); - this.taskId.sendKeys(input); - return this; + async typeTaskId(input): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.taskId); + await BrowserActions.clearSendKeys(this.taskId, input); } - getTaskId() { - BrowserVisibility.waitUntilElementIsVisible(this.taskId); + async getTaskId(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.taskId); return this.taskId.getAttribute('value'); } - typeTaskName(input) { - BrowserVisibility.waitUntilElementIsVisible(this.taskName); - this.clearText(this.taskName); - this.taskName.sendKeys(input); - return this; + async typeTaskName(input): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.taskName); + await BrowserActions.clearSendKeys(this.taskName, input); } - getTaskName() { - BrowserVisibility.waitUntilElementIsVisible(this.taskName); + async getTaskName(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.taskName); return this.taskName.getAttribute('value'); } - typeItemsPerPage(input) { - BrowserVisibility.waitUntilElementIsVisible(this.itemsPerPage); - this.clearText(this.itemsPerPage); - this.itemsPerPage.sendKeys(input); - return this; + async typeItemsPerPage(input): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.itemsPerPage); + await BrowserActions.clearSendKeys(this.itemsPerPage, input); } - typeProcessDefinitionId(input) { - BrowserVisibility.waitUntilElementIsVisible(this.processDefinitionId); - this.clearText(this.processDefinitionId); - this.processDefinitionId.sendKeys(input); - return this; + async typeProcessDefinitionId(input): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.processDefinitionId); + await BrowserActions.clearSendKeys(this.processDefinitionId, input); } - getProcessDefinitionId() { - BrowserVisibility.waitUntilElementIsVisible(this.processInstanceId); + async getProcessDefinitionId(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.processInstanceId); return this.processInstanceId.getAttribute('value'); } - typeProcessInstanceId(input) { - BrowserVisibility.waitUntilElementIsVisible(this.processInstanceId); - this.clearText(this.processInstanceId); - this.processInstanceId.sendKeys(input); - return this; + async typeProcessInstanceId(input): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.processInstanceId); + await BrowserActions.clearSendKeys(this.processInstanceId, input); } - getProcessInstanceId() { - BrowserVisibility.waitUntilElementIsVisible(this.processInstanceId); + async getProcessInstanceId(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.processInstanceId); return this.processInstanceId.getAttribute('value'); } - getItemsPerPageFieldErrorMessage() { - BrowserVisibility.waitUntilElementIsVisible(this.itemsPerPageForm); + async getItemsPerPageFieldErrorMessage(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.itemsPerPageForm); const errorMessage = this.itemsPerPageForm.element(by.css('mat-error')); return BrowserActions.getText(errorMessage); } - typePage(input) { - BrowserVisibility.waitUntilElementIsVisible(this.page); - this.clearText(this.page); - this.page.sendKeys(input); - return this; + async typePage(input): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.page); + await BrowserActions.clearSendKeys(this.page, input); } - getPage() { - BrowserVisibility.waitUntilElementIsVisible(this.page); + async getPage(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.page); return this.page.getAttribute('value'); } - getPageFieldErrorMessage() { - BrowserVisibility.waitUntilElementIsVisible(this.pageForm); + async getPageFieldErrorMessage(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.pageForm); const errorMessage = this.pageForm.element(by.css('mat-error')); return BrowserActions.getText(errorMessage); } - typeDueAfter(input) { - BrowserVisibility.waitUntilElementIsVisible(this.dueAfter); - this.clearText(this.dueAfter); - this.dueAfter.sendKeys(input); - return this; + async typeDueAfter(input): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.dueAfter); + await BrowserActions.clearSendKeys(this.dueAfter, input); } - typeDueBefore(input) { - BrowserVisibility.waitUntilElementIsVisible(this.dueBefore); - this.clearText(this.dueBefore); - this.dueBefore.sendKeys(input); - return this; + async typeDueBefore(input): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.dueBefore); + await BrowserActions.clearSendKeys(this.dueBefore, input); } - clearText(input) { - BrowserVisibility.waitUntilElementIsVisible(input); - return input.clear(); + async clearText(input): Promise { + await BrowserVisibility.waitUntilElementIsVisible(input); + await input.clear(); } - clickResetButton() { - BrowserActions.closeMenuAndDialogs(); - BrowserActions.click(this.resetButton); + async clickResetButton(): Promise { + await BrowserActions.closeMenuAndDialogs(); + await BrowserActions.click(this.resetButton); } - selectSort(sort) { - this.clickOnSortDropDownArrow(); + async selectState(state): Promise { + await this.clickOnStateDropDownArrow(); - const sortElement = element.all(by.cssContainingText('mat-option span', sort)).first(); - BrowserActions.click(sortElement); - return this; + const stateElement: ElementFinder = element.all(by.cssContainingText('mat-option span', state)).first(); + await BrowserActions.click(stateElement); } - clickOnSortDropDownArrow() { - BrowserActions.click(this.sortDropDownArrow); - BrowserVisibility.waitUntilElementIsVisible(this.sortSelector); + async clickOnStateDropDownArrow(): Promise { + await BrowserActions.click(this.stateDropDownArrow); + await BrowserVisibility.waitUntilElementIsVisible(this.stateSelector); } - selectState(state) { - this.clickOnStateDropDownArrow(); - - const stateElement = element.all(by.cssContainingText('mat-option span', state)).first(); - BrowserActions.click(stateElement); - return this; - } - - clickOnStateDropDownArrow() { - BrowserActions.click(this.stateDropDownArrow); - BrowserVisibility.waitUntilElementIsVisible(this.stateSelector); - } - - getAllProcessDefinitionIds() { + getAllProcessDefinitionIds(): Promise { return this.taskList().getDataTable().getAllRowsColumnValues('Process Definition Id'); } - getAllProcessInstanceIds() { + getAllProcessInstanceIds(): Promise { return this.taskList().getDataTable().getAllRowsColumnValues('Process Instance Id'); } diff --git a/e2e/pages/adf/demo-shell/process-services/tasksCloudDemoPage.ts b/e2e/pages/adf/demo-shell/process-services/tasksCloudDemoPage.ts index f4ed0a4afa..7210085316 100644 --- a/e2e/pages/adf/demo-shell/process-services/tasksCloudDemoPage.ts +++ b/e2e/pages/adf/demo-shell/process-services/tasksCloudDemoPage.ts @@ -15,7 +15,7 @@ * limitations under the License. */ -import { element, by, browser } from 'protractor'; +import { element, by, browser, ElementFinder, ElementArrayFinder } from 'protractor'; import { FormControllersPage, TaskFiltersCloudComponentPage, @@ -27,132 +27,114 @@ import { export class TasksCloudDemoPage { - myTasks = element(by.css('span[data-automation-id="my-tasks-filter"]')); - completedTasks = element(by.css('span[data-automation-id="completed-tasks-filter"]')); - activeFilter = element(by.css("mat-list-item[class*='active'] span")); + myTasks: ElementFinder = element(by.css('span[data-automation-id="my-tasks-filter"]')); + completedTasks: ElementFinder = element(by.css('span[data-automation-id="completed-tasks-filter"]')); + activeFilter: ElementFinder = element(by.css("mat-list-item[class*='active'] span")); - defaultActiveFilter = element.all(by.css('.adf-filters__entry')).first(); + defaultActiveFilter: ElementFinder = element.all(by.css('.adf-filters__entry')).first(); - createButton = element(by.css('button[data-automation-id="create-button"')); - newTaskButton = element(by.css('button[data-automation-id="btn-start-task"]')); - settingsButton = element.all(by.cssContainingText('div[class*="mat-tab-label"] .mat-tab-labels div', 'Settings')).first(); - appButton = element.all(by.cssContainingText('div[class*="mat-tab-label"] .mat-tab-labels div', 'App')).first(); - modeDropDownArrow = element(by.css('mat-form-field[data-automation-id="selectionMode"] div[class*="arrow-wrapper"]')); - modeSelector = element(by.css("div[class*='mat-select-panel']")); - displayTaskDetailsToggle = element(by.css('mat-slide-toggle[data-automation-id="taskDetailsRedirection"]')); - displayProcessDetailsToggle = element(by.css('mat-slide-toggle[data-automation-id="processDetailsRedirection"]')); - multiSelectionToggle = element(by.css('mat-slide-toggle[data-automation-id="multiSelection"]')); - testingModeToggle = element(by.css('mat-slide-toggle[data-automation-id="testingMode"]')); - selectedRows = element(by.xpath("//div[text()=' Selected rows: ']")); - noOfSelectedRows = element.all(by.xpath("//div[text()=' Selected rows: ']//li")); + createButton: ElementFinder = element(by.css('button[data-automation-id="create-button"')); + newTaskButton: ElementFinder = element(by.css('button[data-automation-id="btn-start-task"]')); + settingsButton: ElementFinder = element.all(by.cssContainingText('div[class*="mat-tab-label"] .mat-tab-labels div', 'Settings')).first(); + appButton: ElementFinder = element.all(by.cssContainingText('div[class*="mat-tab-label"] .mat-tab-labels div', 'App')).first(); + modeDropDownArrow: ElementFinder = element(by.css('mat-form-field[data-automation-id="selectionMode"] div[class*="arrow-wrapper"]')); + modeSelector: ElementFinder = element(by.css("div[class*='mat-select-panel']")); + displayTaskDetailsToggle: ElementFinder = element(by.css('mat-slide-toggle[data-automation-id="taskDetailsRedirection"]')); + displayProcessDetailsToggle: ElementFinder = element(by.css('mat-slide-toggle[data-automation-id="processDetailsRedirection"]')); + multiSelectionToggle: ElementFinder = element(by.css('mat-slide-toggle[data-automation-id="multiSelection"]')); + testingModeToggle: ElementFinder = element(by.css('mat-slide-toggle[data-automation-id="testingMode"]')); + selectedRows: ElementFinder = element(by.xpath("//div[text()=' Selected rows: ']")); + noOfSelectedRows: ElementArrayFinder = element.all(by.xpath("//div[text()=' Selected rows: ']//li")); - formControllersPage = new FormControllersPage(); + formControllersPage: FormControllersPage = new FormControllersPage(); - editTaskFilterCloud = new EditTaskFilterCloudComponentPage(); + editTaskFilterCloud: EditTaskFilterCloudComponentPage = new EditTaskFilterCloudComponentPage(); - disableDisplayTaskDetails() { - this.formControllersPage.disableToggle(this.displayTaskDetailsToggle); - return this; + async disableDisplayTaskDetails(): Promise { + await this.formControllersPage.disableToggle(this.displayTaskDetailsToggle); } - disableDisplayProcessDetails() { - this.formControllersPage.disableToggle(this.displayProcessDetailsToggle); - return this; + async disableDisplayProcessDetails(): Promise { + await this.formControllersPage.disableToggle(this.displayProcessDetailsToggle); } - enableMultiSelection() { - this.formControllersPage.enableToggle(this.multiSelectionToggle); - return this; + async enableMultiSelection(): Promise { + await this.formControllersPage.enableToggle(this.multiSelectionToggle); } - enableTestingMode() { - this.formControllersPage.enableToggle(this.testingModeToggle); - return this; + async enableTestingMode(): Promise { + await this.formControllersPage.enableToggle(this.testingModeToggle); } - taskFiltersCloudComponent(filter) { - return new TaskFiltersCloudComponentPage(filter); - } - - taskListCloudComponent() { + taskListCloudComponent(): TaskListCloudComponentPage { return new TaskListCloudComponentPage(); } - editTaskFilterCloudComponent() { + editTaskFilterCloudComponent(): EditTaskFilterCloudComponentPage { return this.editTaskFilterCloud; } - myTasksFilter() { + myTasksFilter(): TaskFiltersCloudComponentPage { return new TaskFiltersCloudComponentPage(this.myTasks); } - completedTasksFilter() { + completedTasksFilter(): TaskFiltersCloudComponentPage { return new TaskFiltersCloudComponentPage(this.completedTasks); } - getActiveFilterName() { - return BrowserActions.getText(this.activeFilter); + async getActiveFilterName(): Promise { + return await BrowserActions.getText(this.activeFilter); } - customTaskFilter(filterName) { + customTaskFilter(filterName): TaskFiltersCloudComponentPage { return new TaskFiltersCloudComponentPage(element(by.css(`span[data-automation-id="${filterName}-filter"]`))); } - openNewTaskForm() { - BrowserActions.click(this.createButton); - BrowserActions.clickExecuteScript('button[data-automation-id="btn-start-task"]'); - return this; + async openNewTaskForm(): Promise { + await BrowserActions.click(this.createButton); + await BrowserActions.clickExecuteScript('button[data-automation-id="btn-start-task"]'); } - clickOnCreateButton() { - BrowserActions.click(this.createButton); - return this; + async firstFilterIsActive(): Promise { + const value = await this.defaultActiveFilter.getAttribute('class'); + return value.includes('adf-active'); } - firstFilterIsActive() { - return this.defaultActiveFilter.getAttribute('class').then((value) => value.includes('adf-active')); + async clickSettingsButton(): Promise { + await BrowserActions.click(this.settingsButton); + await browser.sleep(400); + await BrowserVisibility.waitUntilElementIsVisible(this.multiSelectionToggle); + await BrowserVisibility.waitUntilElementIsClickable(this.modeDropDownArrow); } - clickSettingsButton() { - BrowserActions.click(this.settingsButton); - browser.driver.sleep(400); - BrowserVisibility.waitUntilElementIsVisible(this.multiSelectionToggle); - BrowserVisibility.waitUntilElementIsVisible(this.modeDropDownArrow); - BrowserVisibility.waitUntilElementIsClickable(this.modeDropDownArrow); - return this; + async clickAppButton(): Promise { + await BrowserActions.click(this.appButton); } - clickAppButton() { - BrowserActions.click(this.appButton); - return this; + async selectSelectionMode(mode): Promise { + await this.clickOnSelectionModeDropDownArrow(); + + const modeElement: ElementFinder = element.all(by.cssContainingText('mat-option span', mode)).first(); + await BrowserActions.click(modeElement); } - selectSelectionMode(mode) { - this.clickOnSelectionModeDropDownArrow(); - - const modeElement = element.all(by.cssContainingText('mat-option span', mode)).first(); - BrowserActions.click(modeElement); - return this; + async clickOnSelectionModeDropDownArrow(): Promise { + await BrowserActions.click(this.modeDropDownArrow); + await BrowserVisibility.waitUntilElementIsVisible(this.modeSelector); } - clickOnSelectionModeDropDownArrow() { - BrowserActions.click(this.modeDropDownArrow); - BrowserVisibility.waitUntilElementIsVisible(this.modeSelector); + async checkSelectedRowsIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.selectedRows); } - checkSelectedRowsIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.selectedRows); - return this; + async getNoOfSelectedRows(): Promise { + await this.checkSelectedRowsIsDisplayed(); + return await this.noOfSelectedRows.count(); } - getNoOfSelectedRows() { - this.checkSelectedRowsIsDisplayed(); - return this.noOfSelectedRows.count(); - } - - getSelectedTaskRowText(rowNo: string) { - this.checkSelectedRowsIsDisplayed(); - const row = element(by.xpath(`//div[text()=' Selected rows: ']//li[${rowNo}]`)); - return row.getText(); + async getSelectedTaskRowText(rowNo: string): Promise { + await this.checkSelectedRowsIsDisplayed(); + const row: ElementFinder = element(by.xpath(`//div[text()=' Selected rows: ']//li[${rowNo}]`)); + return await BrowserActions.getText(row); } } diff --git a/e2e/pages/adf/demo-shell/socialPage.ts b/e2e/pages/adf/demo-shell/socialPage.ts index 3c2f2b4625..35f1065601 100644 --- a/e2e/pages/adf/demo-shell/socialPage.ts +++ b/e2e/pages/adf/demo-shell/socialPage.ts @@ -15,20 +15,20 @@ * limitations under the License. */ -import { by, element } from 'protractor'; +import { by, element, ElementFinder } from 'protractor'; import { BrowserActions, BrowserVisibility } from '@alfresco/adf-testing'; export class SocialPage { - nodeIdField = element(by.css(`input[id="nodeId"]`)); + nodeIdField: ElementFinder = element(by.css(`input[id="nodeId"]`)); - getNodeIdFieldValue() { - BrowserVisibility.waitUntilElementIsVisible(this.nodeIdField); + async getNodeIdFieldValue(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.nodeIdField); return this.nodeIdField.getAttribute('value'); } - writeCustomNodeId(nodeId: string) { - return BrowserActions.clearSendKeys(this.nodeIdField, nodeId); + async writeCustomNodeId(nodeId: string): Promise { + await BrowserActions.clearSendKeys(this.nodeIdField, nodeId); } } diff --git a/e2e/pages/adf/dialog/createLibraryDialog.ts b/e2e/pages/adf/dialog/createLibraryDialog.ts index fb5032f666..3425a2fc22 100644 --- a/e2e/pages/adf/dialog/createLibraryDialog.ts +++ b/e2e/pages/adf/dialog/createLibraryDialog.ts @@ -15,143 +15,140 @@ * limitations under the License. */ -import { by, element, browser, protractor } from 'protractor'; +import { by, element, browser, protractor, ElementFinder, ElementArrayFinder } from 'protractor'; import { BrowserVisibility, BrowserActions } from '@alfresco/adf-testing'; export class CreateLibraryDialog { - libraryDialog = element(by.css('[role="dialog"]')); - libraryTitle = element(by.css('.adf-library-dialog>h2')); - libraryNameField = element(by.css('input[formcontrolname="title"]')); - libraryIdField = element(by.css('input[formcontrolname="id"]')); - libraryDescriptionField = element(by.css('textarea[formcontrolname="description"]')); - publicRadioButton = element(by.css('[data-automation-id="PUBLIC"]>label')); - privateRadioButton = element(by.css('[data-automation-id="PRIVATE"]>label')); - moderatedRadioButton = element(by.css('[data-automation-id="MODERATED"]>label')); - cancelButton = element(by.css('button[data-automation-id="cancel-library-id"]')); - createButton = element(by.css('button[data-automation-id="create-library-id"]')); - errorMessage = element(by.css('.mat-dialog-content .mat-error')); - errorMessages = element.all(by.css('.mat-dialog-content .mat-error')); - libraryNameHint = element(by.css('adf-library-dialog .mat-hint')); + libraryDialog: ElementFinder = element(by.css('[role="dialog"]')); + libraryTitle: ElementFinder = element(by.css('.adf-library-dialog>h2')); + libraryNameField: ElementFinder = element(by.css('input[formcontrolname="title"]')); + libraryIdField: ElementFinder = element(by.css('input[formcontrolname="id"]')); + libraryDescriptionField: ElementFinder = element(by.css('textarea[formcontrolname="description"]')); + publicRadioButton: ElementFinder = element(by.css('[data-automation-id="PUBLIC"]>label')); + privateRadioButton: ElementFinder = element(by.css('[data-automation-id="PRIVATE"]>label')); + moderatedRadioButton: ElementFinder = element(by.css('[data-automation-id="MODERATED"]>label')); + cancelButton: ElementFinder = element(by.css('button[data-automation-id="cancel-library-id"]')); + createButton: ElementFinder = element(by.css('button[data-automation-id="create-library-id"]')); + errorMessage: ElementFinder = element(by.css('.mat-dialog-content .mat-error')); + errorMessages: ElementArrayFinder = element.all(by.css('.mat-dialog-content .mat-error')); + libraryNameHint: ElementFinder = element(by.css('adf-library-dialog .mat-hint')); - getSelectedRadio() { - const radio = element(by.css('.mat-radio-button[class*="checked"]')); - return BrowserActions.getText(radio); + async getSelectedRadio(): Promise { + const radio: ElementFinder = element(by.css('.mat-radio-button[class*="checked"]')); + return await BrowserActions.getText(radio); } - waitForDialogToOpen() { - BrowserVisibility.waitUntilElementIsPresent(this.libraryDialog); - return this; + async waitForDialogToOpen(): Promise { + await BrowserVisibility.waitUntilElementIsPresent(this.libraryDialog); } - waitForDialogToClose() { - BrowserVisibility.waitUntilElementIsNotOnPage(this.libraryDialog); - return this; + async waitForDialogToClose(): Promise { + await BrowserVisibility.waitUntilElementIsNotPresent(this.libraryDialog); } - isDialogOpen() { - return browser.isElementPresent(this.libraryDialog); + async isDialogOpen(): Promise { + return await browser.isElementPresent(this.libraryDialog); } - getTitle() { - return BrowserActions.getText(this.libraryTitle); + async getTitle(): Promise { + return await BrowserActions.getText(this.libraryTitle); } - getLibraryIdText() { - return this.libraryIdField.getAttribute('value'); + async getLibraryIdText(): Promise { + return await this.libraryIdField.getAttribute('value'); } - isErrorMessageDisplayed() { - return this.errorMessage.isDisplayed(); + async isErrorMessageDisplayed(): Promise { + return await this.errorMessage.isDisplayed(); } - getErrorMessage() { - return BrowserActions.getText(this.errorMessage); + async getErrorMessage(): Promise { + return await BrowserActions.getText(this.errorMessage); } - getErrorMessages(position) { - return BrowserActions.getText(this.errorMessages.get(position)); + async getErrorMessages(position): Promise { + return await BrowserActions.getText(this.errorMessages.get(position)); } - waitForLibraryNameHint() { - BrowserVisibility.waitUntilElementIsVisible(this.libraryNameHint); - return this; + async waitForLibraryNameHint(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.libraryNameHint); } - getLibraryNameHint() { - return BrowserActions.getText(this.libraryNameHint); + async getLibraryNameHint(): Promise { + return await BrowserActions.getText(this.libraryNameHint); } - isNameDisplayed() { - return this.libraryNameField.isDisplayed(); + async isNameDisplayed(): Promise { + return await this.libraryNameField.isDisplayed(); } - isLibraryIdDisplayed() { - return this.libraryIdField.isDisplayed(); + async isLibraryIdDisplayed(): Promise { + return await this.libraryIdField.isDisplayed(); } - isDescriptionDisplayed() { - return this.libraryDescriptionField.isDisplayed(); + async isDescriptionDisplayed(): Promise { + return await this.libraryDescriptionField.isDisplayed(); } - isPublicDisplayed() { - return this.publicRadioButton.isDisplayed(); + async isPublicDisplayed(): Promise { + return await this.publicRadioButton.isDisplayed(); } - isModeratedDisplayed() { - return this.moderatedRadioButton.isDisplayed(); + async isModeratedDisplayed(): Promise { + return await this.moderatedRadioButton.isDisplayed(); } - isPrivateDisplayed() { - return this.privateRadioButton.isDisplayed(); + async isPrivateDisplayed(): Promise { + return await this.privateRadioButton.isDisplayed(); } - isCreateEnabled() { - return this.createButton.isEnabled(); + async isCreateEnabled(): Promise { + return await this.createButton.isEnabled(); } - isCancelEnabled() { - return this.cancelButton.isEnabled(); + async isCancelEnabled(): Promise { + return await this.cancelButton.isEnabled(); } - clickCreate() { - BrowserActions.click(this.createButton); + async clickCreate(): Promise { + await BrowserActions.click(this.createButton); } - clickCancel() { - BrowserActions.click(this.cancelButton); + async clickCancel(): Promise { + await BrowserActions.click(this.cancelButton); } - typeLibraryName(libraryName: string) { - BrowserActions.clearSendKeys(this.libraryNameField, libraryName); + async typeLibraryName(libraryName: string): Promise { + await BrowserActions.clearSendKeys(this.libraryNameField, libraryName); } - typeLibraryId(libraryId) { - BrowserActions.clearSendKeys(this.libraryIdField, libraryId); + async typeLibraryId(libraryId): Promise { + await BrowserActions.clearSendKeys(this.libraryIdField, libraryId); } - typeLibraryDescription(libraryDescription) { - BrowserActions.clearSendKeys(this.libraryDescriptionField, libraryDescription); + async typeLibraryDescription(libraryDescription): Promise { + await BrowserActions.clearSendKeys(this.libraryDescriptionField, libraryDescription); } - clearLibraryName() { - this.libraryNameField.clear(); - this.libraryNameField.sendKeys(' ', protractor.Key.CONTROL, 'a', protractor.Key.NULL, protractor.Key.BACK_SPACE); + async clearLibraryName(): Promise { + await this.libraryNameField.clear(); + await this.libraryNameField.sendKeys(' ', protractor.Key.CONTROL, 'a', protractor.Key.NULL, protractor.Key.BACK_SPACE); } - clearLibraryId() { - this.libraryIdField.clear(); - this.libraryIdField.sendKeys(' ', protractor.Key.CONTROL, 'a', protractor.Key.NULL, protractor.Key.BACK_SPACE); + async clearLibraryId(): Promise { + await this.libraryIdField.clear(); + await this.libraryIdField.sendKeys(' ', protractor.Key.CONTROL, 'a', protractor.Key.NULL, protractor.Key.BACK_SPACE); } - selectPublic() { - BrowserActions.click(this.publicRadioButton); + async selectPublic(): Promise { + await BrowserActions.click(this.publicRadioButton); } - selectPrivate() { - BrowserActions.click(this.privateRadioButton); + async selectPrivate(): Promise { + await BrowserActions.click(this.privateRadioButton); } - selectModerated() { - BrowserActions.click(this.moderatedRadioButton); + async selectModerated(): Promise { + await BrowserActions.click(this.moderatedRadioButton); } } diff --git a/e2e/pages/adf/dialog/folderDialog.ts b/e2e/pages/adf/dialog/folderDialog.ts index c4b31ddf53..fef5cb7ae5 100644 --- a/e2e/pages/adf/dialog/folderDialog.ts +++ b/e2e/pages/adf/dialog/folderDialog.ts @@ -15,87 +15,78 @@ * limitations under the License. */ -import { browser, by, element } from 'protractor'; +import { by, element, ElementFinder } from 'protractor'; import { BrowserVisibility, BrowserActions } from '@alfresco/adf-testing'; export class FolderDialog { - folderDialog = element(by.css('adf-folder-dialog')); - folderNameField = this.folderDialog.element(by.id('adf-folder-name-input')); - folderDescriptionField = this.folderDialog.element(by.id('adf-folder-description-input')); - createUpdateButton = this.folderDialog.element(by.id('adf-folder-create-button')); - cancelButton = this.folderDialog.element(by.id('adf-folder-cancel-button')); - folderTitle = this.folderDialog.element((by.css('h2.mat-dialog-title'))); - validationMessage = this.folderDialog.element(by.css('div.mat-form-field-subscript-wrapper mat-hint span')); + folderDialog: ElementFinder = element(by.css('adf-folder-dialog')); + folderNameField: ElementFinder = this.folderDialog.element(by.id('adf-folder-name-input')); + folderDescriptionField: ElementFinder = this.folderDialog.element(by.id('adf-folder-description-input')); + createUpdateButton: ElementFinder = this.folderDialog.element(by.id('adf-folder-create-button')); + cancelButton: ElementFinder = this.folderDialog.element(by.id('adf-folder-cancel-button')); + folderTitle: ElementFinder = this.folderDialog.element((by.css('h2.mat-dialog-title'))); + validationMessage: ElementFinder = this.folderDialog.element(by.css('div.mat-form-field-subscript-wrapper mat-hint span')); - getDialogTitle() { - return BrowserActions.getText(this.folderTitle); + async getDialogTitle(): Promise { + return await BrowserActions.getText(this.folderTitle); } - checkFolderDialogIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.folderDialog); - return this; + async checkFolderDialogIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.folderDialog); } - checkFolderDialogIsNotDisplayed() { - BrowserVisibility.waitUntilElementIsNotVisible(this.folderDialog); - return this; + async checkFolderDialogIsNotDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsNotVisible(this.folderDialog); } - clickOnCreateUpdateButton() { - BrowserActions.click(this.createUpdateButton); + async clickOnCreateUpdateButton(): Promise { + await BrowserActions.click(this.createUpdateButton); } - checkCreateUpdateBtnIsDisabled() { - BrowserActions.checkIsDisabled(this.createUpdateButton); - return this; + async checkCreateUpdateBtnIsDisabled(): Promise { + await BrowserActions.checkIsDisabled(this.createUpdateButton); } - checkCreateUpdateBtnIsEnabled() { - this.createUpdateButton.isEnabled(); - return this; + async clickOnCancelButton(): Promise { + await BrowserActions.click(this.cancelButton); } - checkCancelBtnIsEnabled() { - this.cancelButton.isEnabled(); - return this; + async addFolderName(folderName): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.folderNameField); + await BrowserActions.clearSendKeys(this.folderNameField, folderName); } - clickOnCancelButton() { - BrowserActions.click(this.cancelButton); + async addFolderDescription(folderDescription): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.folderDescriptionField); + await BrowserActions.clearSendKeys(this.folderDescriptionField, folderDescription); } - addFolderName(folderName) { - BrowserVisibility.waitUntilElementIsVisible(this.folderNameField); - BrowserActions.clearSendKeys(this.folderNameField, folderName); - browser.driver.sleep(500); - return this; + async getFolderName(): Promise { + return await this.folderNameField.getAttribute('value'); } - addFolderDescription(folderDescription) { - BrowserVisibility.waitUntilElementIsVisible(this.folderDescriptionField); - BrowserActions.clearSendKeys(this.folderDescriptionField, folderDescription); - return this; + async getValidationMessage(): Promise { + return await BrowserActions.getText(this.validationMessage); } - getFolderName() { - return this.folderNameField.getAttribute('value'); + async checkValidationMessageIsNotDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsNotVisible(this.validationMessage); } - getValidationMessage() { - return BrowserActions.getText(this.validationMessage); - } - - checkValidationMessageIsNotDisplayed() { - BrowserVisibility.waitUntilElementIsNotVisible(this.validationMessage); - return this; - } - - getFolderNameField() { + getFolderNameField(): ElementFinder { return this.folderNameField; } - getFolderDescriptionField() { + getFolderDescriptionField(): ElementFinder { return this.folderDescriptionField; } + async checkCreateUpdateBtnIsEnabled(): Promise { + await this.createUpdateButton.isEnabled(); + } + + async checkCancelBtnIsEnabled(): Promise { + await this.cancelButton.isEnabled(); + } + } diff --git a/e2e/pages/adf/dialog/searchDialog.ts b/e2e/pages/adf/dialog/searchDialog.ts index bed8893c82..4bd61d643d 100644 --- a/e2e/pages/adf/dialog/searchDialog.ts +++ b/e2e/pages/adf/dialog/searchDialog.ts @@ -15,102 +15,88 @@ * limitations under the License. */ -import { browser, by, element, protractor } from 'protractor'; +import { browser, by, element, ElementFinder, Locator, protractor } from 'protractor'; import { BrowserVisibility, BrowserActions } from '@alfresco/adf-testing'; export class SearchDialog { - searchIcon = element(by.css(`button[class*='adf-search-button']`)); - searchBar = element(by.css(`adf-search-control input`)); - searchBarExpanded = element(by.css(`adf-search-control mat-form-field[class*="mat-focused"] input`)); - noResultMessage = element(by.css(`p[class*='adf-search-fixed-text']`)); - rowsAuthor = by.css(`div[class='mat-list-text'] p[class*='adf-search-fixed-text']`); - completeName = by.css(`h4[class*='adf-search-fixed-text']`); - highlightName = by.css(`.adf-highlight`); - searchDialog = element(by.css(`mat-list[id='autocomplete-search-result-list']`)); + searchIcon: ElementFinder = element(by.css(`button[class*='adf-search-button']`)); + searchBar: ElementFinder = element(by.css(`adf-search-control input`)); + searchBarExpanded: ElementFinder = element(by.css(`adf-search-control mat-form-field[class*="mat-focused"] input`)); + noResultMessage: ElementFinder = element(by.css(`p[class*='adf-search-fixed-text']`)); + rowsAuthor: Locator = by.css(`div[class='mat-list-text'] p[class*='adf-search-fixed-text']`); + completeName: Locator = by.css(`h4[class*='adf-search-fixed-text']`); + highlightName: Locator = by.css(`.adf-highlight`); + searchDialog: ElementFinder = element(by.css(`mat-list[id='autocomplete-search-result-list']`)); - pressDownArrowAndEnter() { - element(by.css(`adf-search-control div input`)).sendKeys(protractor.Key.ARROW_DOWN); - return browser.actions().sendKeys(protractor.Key.ENTER).perform(); + async pressDownArrowAndEnter(): Promise { + await element(by.css(`adf-search-control div input`)).sendKeys(protractor.Key.ARROW_DOWN); + await browser.actions().sendKeys(protractor.Key.ENTER).perform(); } - clickOnSearchIcon() { - BrowserActions.click(this.searchIcon); - return this; + async clickOnSearchIcon(): Promise { + await BrowserActions.click(this.searchIcon); } - checkSearchIconIsVisible() { - BrowserVisibility.waitUntilElementIsVisible(this.searchIcon); - return this; + async checkSearchIconIsVisible(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.searchIcon); } - checkSearchBarIsVisible() { - BrowserVisibility.waitUntilElementIsVisible(this.searchBar); - return this; + async checkSearchBarIsVisible(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.searchBar); } - checkSearchBarIsNotVisible() { - BrowserVisibility.waitUntilElementIsVisible(this.searchBar); - BrowserVisibility.waitUntilElementIsNotVisible(this.searchBarExpanded); - return this; + async checkSearchBarIsNotVisible(): Promise { + await BrowserVisibility.waitUntilElementIsNotVisible(this.searchBarExpanded); } - checkNoResultMessageIsDisplayed() { - browser.driver.sleep(500); - BrowserVisibility.waitUntilElementIsVisible(this.noResultMessage); - return this; + async checkNoResultMessageIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.noResultMessage); } - checkNoResultMessageIsNotDisplayed() { - BrowserVisibility.waitUntilElementIsNotOnPage(this.noResultMessage); - return this; + async checkNoResultMessageIsNotDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsNotVisible(this.noResultMessage); } - enterText(text) { - BrowserVisibility.waitUntilElementIsVisible(this.searchBar); - BrowserActions.clickExecuteScript('adf-search-control input'); - this.searchBar.sendKeys(text); - return this; + async enterText(text): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.searchBar); + await this.searchBar.sendKeys(text); } - enterTextAndPressEnter(text) { - BrowserVisibility.waitUntilElementIsVisible(this.searchBar); - BrowserActions.clickExecuteScript('adf-search-control input'); - this.searchBar.sendKeys(text); - this.searchBar.sendKeys(protractor.Key.ENTER); - return this; + async enterTextAndPressEnter(text): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.searchBar); + await this.searchBar.sendKeys(text); + await this.searchBar.sendKeys(protractor.Key.ENTER); } - resultTableContainsRow(name) { - BrowserVisibility.waitUntilElementIsVisible(this.searchDialog); - BrowserVisibility.waitUntilElementIsVisible(this.getRowByRowName(name)); - return this; + async resultTableContainsRow(name): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.searchDialog); + await BrowserVisibility.waitUntilElementIsVisible(this.getRowByRowName(name)); } - clickOnSpecificRow(name) { - this.resultTableContainsRow(name); - this.getRowByRowName(name).click(); - return this; + async clickOnSpecificRow(name): Promise { + await this.resultTableContainsRow(name); + await BrowserActions.click(this.getRowByRowName(name)); } - getRowByRowName(name) { + getRowByRowName(name): ElementFinder { return element(by.css(`mat-list-item[data-automation-id='autocomplete_for_${name}']`)); } - getSpecificRowsHighlightName(name) { - return BrowserActions.getText(this.getRowByRowName(name).element(this.highlightName)); + async getSpecificRowsHighlightName(name): Promise { + return await BrowserActions.getText(this.getRowByRowName(name).element(this.highlightName)); } - getSpecificRowsCompleteName(name) { - return BrowserActions.getText(this.getRowByRowName(name).element(this.completeName)); + async getSpecificRowsCompleteName(name): Promise { + return await BrowserActions.getText(this.getRowByRowName(name).element(this.completeName)); } - getSpecificRowsAuthor(name) { - return BrowserActions.getText(this.getRowByRowName(name).element(this.rowsAuthor)); + async getSpecificRowsAuthor(name): Promise { + return await BrowserActions.getText(this.getRowByRowName(name).element(this.rowsAuthor)); } - clearText() { - BrowserVisibility.waitUntilElementIsVisible(this.searchBar); - return this.searchBar.clear(); + async clearText(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.searchBar); + await this.searchBar.clear(); } } diff --git a/e2e/pages/adf/dialog/shareDialog.ts b/e2e/pages/adf/dialog/shareDialog.ts index 154a792d52..f484e5290a 100644 --- a/e2e/pages/adf/dialog/shareDialog.ts +++ b/e2e/pages/adf/dialog/shareDialog.ts @@ -15,129 +15,119 @@ * limitations under the License. */ -import { element, by } from 'protractor'; +import { element, by, ElementFinder } from 'protractor'; import { BrowserVisibility, FormControllersPage, BrowserActions } from '@alfresco/adf-testing'; import moment = require('moment'); export class ShareDialog { formControllersPage = new FormControllersPage(); - shareDialog = element(by.css('adf-share-dialog')); - dialogTitle = element(by.css('[data-automation-id="adf-share-dialog-title"]')); - shareToggle = element(by.css('[data-automation-id="adf-share-toggle"] label')); - shareToggleChecked = element(by.css('mat-dialog-container mat-slide-toggle.mat-checked')); - shareToggleDisabled = element(by.css('mat-dialog-container mat-slide-toggle.mat-disabled')); - shareLink = element(by.css('[data-automation-id="adf-share-link"]')); - closeButton = element(by.css('button[data-automation-id="adf-share-dialog-close"]')); - snackBar = element(by.css('simple-snack-bar')); - copySharedLinkButton = element(by.css('.adf-input-action')); - timeDatePickerButton = element(by.css('mat-datetimepicker-toggle button')); - dayPicker = element(by.css('mat-datetimepicker-month-view')); - clockPicker = element(by.css('mat-datetimepicker-clock')); - hoursPicker = element(by.css('.mat-datetimepicker-clock-hours')); - minutePicker = element(by.css('.mat-datetimepicker-clock-minutes')); - expirationDateInput = element(by.css('input[formcontrolname="time"]')); - confirmationDialog = element(by.css('adf-confirm-dialog')); - confirmationCancelButton = element(by.id('adf-confirm-cancel')); - confirmationRemoveButton = element(by.id('adf-confirm-accept')); + shareDialog: ElementFinder = element(by.css('adf-share-dialog')); + dialogTitle: ElementFinder = element(by.css('[data-automation-id="adf-share-dialog-title"]')); + shareToggle: ElementFinder = element(by.css('[data-automation-id="adf-share-toggle"] label')); + shareToggleChecked: ElementFinder = element(by.css('mat-dialog-container mat-slide-toggle.mat-checked')); + shareLink: ElementFinder = element(by.css('[data-automation-id="adf-share-link"]')); + closeButton: ElementFinder = element(by.css('button[data-automation-id="adf-share-dialog-close"]')); + copySharedLinkButton: ElementFinder = element(by.css('.adf-input-action')); + timeDatePickerButton: ElementFinder = element(by.css('mat-datetimepicker-toggle button')); + dayPicker: ElementFinder = element(by.css('mat-datetimepicker-month-view')); + clockPicker: ElementFinder = element(by.css('mat-datetimepicker-clock')); + hoursPicker: ElementFinder = element(by.css('.mat-datetimepicker-clock-hours')); + minutePicker: ElementFinder = element(by.css('.mat-datetimepicker-clock-minutes')); + expirationDateInput: ElementFinder = element(by.css('input[formcontrolname="time"]')); + confirmationDialog: ElementFinder = element(by.css('adf-confirm-dialog')); + confirmationCancelButton: ElementFinder = element(by.id('adf-confirm-cancel')); + confirmationRemoveButton: ElementFinder = element(by.id('adf-confirm-accept')); - checkDialogIsDisplayed() { - return BrowserVisibility.waitUntilElementIsVisible(this.dialogTitle); + async checkDialogIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.dialogTitle); } - clickUnShareFile() { - this.formControllersPage.enableToggle(this.shareToggle); + async clickUnShareFile() { + await this.formControllersPage.enableToggle(this.shareToggle); } - clickConfirmationDialogCancelButton() { - BrowserActions.click(this.confirmationCancelButton); + async clickConfirmationDialogCancelButton(): Promise { + await BrowserActions.click(this.confirmationCancelButton); } - clickConfirmationDialogRemoveButton() { - BrowserActions.click(this.confirmationRemoveButton); + async clickConfirmationDialogRemoveButton(): Promise { + await BrowserActions.click(this.confirmationRemoveButton); } - checkShareLinkIsDisplayed() { - return BrowserVisibility.waitUntilElementIsVisible(this.shareLink); + async checkShareLinkIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.shareLink); } - getShareLink() { - BrowserVisibility.waitUntilElementIsVisible(this.shareLink); - return this.shareLink.getAttribute('value'); + async getShareLink(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.shareLink); + return await this.shareLink.getAttribute('value'); } - clickCloseButton() { - return BrowserActions.click(this.closeButton); - + async clickCloseButton(): Promise { + await BrowserActions.click(this.closeButton); } - clickShareLinkButton() { - return BrowserActions.click(this.copySharedLinkButton); + async clickShareLinkButton(): Promise { + await BrowserActions.click(this.copySharedLinkButton); } - shareToggleButtonIsChecked() { - BrowserVisibility.waitUntilElementIsPresent(this.shareToggleChecked); + async shareToggleButtonIsChecked(): Promise { + await BrowserVisibility.waitUntilElementIsPresent(this.shareToggleChecked); } - shareToggleButtonIsDisabled() { - BrowserVisibility.waitUntilElementIsPresent(this.shareToggleDisabled); + async dialogIsClosed(): Promise { + await BrowserVisibility.waitUntilElementIsStale(this.shareDialog); } - dialogIsClosed() { - BrowserVisibility.waitUntilElementIsStale(this.shareDialog); + async clickDateTimePickerButton(): Promise { + await BrowserActions.click(this.timeDatePickerButton); } - clickDateTimePickerButton() { - BrowserActions.click(this.timeDatePickerButton); - } - - calendarTodayDayIsDisabled() { + async calendarTodayDayIsDisabled(): Promise { const tomorrow = moment().add(1, 'days').format('D'); if (tomorrow !== '1') { - const today: any = this.dayPicker.element(by.css('.mat-datetimepicker-calendar-body-today')).getText(); - BrowserVisibility.waitUntilElementIsPresent(element(by.cssContainingText('.mat-datetimepicker-calendar-body-disabled', today))); + const today = await BrowserActions.getText(this.dayPicker.element(by.css('.mat-datetimepicker-calendar-body-today'))); + await BrowserVisibility.waitUntilElementIsPresent(element(by.cssContainingText('.mat-datetimepicker-calendar-body-disabled', today))); } } - setDefaultDay() { - BrowserVisibility.waitUntilElementIsVisible(this.dayPicker); + async setDefaultDay(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.dayPicker); const tomorrow = moment().add(1, 'days').format('LL'); - BrowserVisibility.waitUntilElementIsClickable(this.dayPicker.element(by.css(`td[aria-label="${tomorrow}"]`))); - this.dayPicker.element(by.css(`td[aria-label="${tomorrow}"]`)).click(); + await BrowserVisibility.waitUntilElementIsClickable(this.dayPicker.element(by.css(`td[aria-label="${tomorrow}"]`))); + await BrowserActions.click(this.dayPicker.element(by.css(`td[aria-label="${tomorrow}"]`))); + } - setDefaultHour() { + async setDefaultHour(): Promise { const selector = '.mat-datetimepicker-clock-cell:not(.mat-datetimepicker-clock-cell-disabled)'; - BrowserVisibility.waitUntilElementIsVisible(this.clockPicker); - BrowserVisibility.waitUntilElementIsVisible(this.hoursPicker); - this.hoursPicker.all(by.css(selector)).first().click(); + await BrowserVisibility.waitUntilElementIsVisible(this.clockPicker); + await BrowserVisibility.waitUntilElementIsVisible(this.hoursPicker); + await BrowserActions.click(this.hoursPicker.all(by.css(selector)).first()); } - setDefaultMinutes() { + async setDefaultMinutes() { const selector = '.mat-datetimepicker-clock-cell:not(.mat-datetimepicker-clock-cell-disabled)'; - BrowserVisibility.waitUntilElementIsVisible(this.minutePicker); - this.minutePicker.all(by.css(selector)).first().click(); + await BrowserVisibility.waitUntilElementIsVisible(this.minutePicker); + await BrowserActions.click(this.minutePicker.all(by.css(selector)).first()); } - dateTimePickerDialogIsClosed() { - BrowserVisibility.waitUntilElementIsStale(element(by.css('mat-datetimepicker-content'))); + async dateTimePickerDialogIsClosed(): Promise { + await BrowserVisibility.waitUntilElementIsStale(element(by.css('mat-datetimepicker-content'))); } - getExpirationDate() { - return this.expirationDateInput.getAttribute('value'); + async getExpirationDate(): Promise { + return await this.expirationDateInput.getAttribute('value'); } - expirationDateInputHasValue(value) { - BrowserVisibility.waitUntilElementHasValue(this.expirationDateInput, value); + async expirationDateInputHasValue(value): Promise { + await BrowserVisibility.waitUntilElementHasValue(this.expirationDateInput, value); } - confirmationDialogIsDisplayed() { - return BrowserVisibility.waitUntilElementIsVisible(this.confirmationDialog); - } - - confirmationDialogIsNotDisplayed() { - return BrowserVisibility.waitUntilElementIsNotVisible(this.confirmationDialog); + async confirmationDialogIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.confirmationDialog); } } diff --git a/e2e/pages/adf/dialog/uploadDialog.ts b/e2e/pages/adf/dialog/uploadDialog.ts index 230c3fd46e..9492568231 100644 --- a/e2e/pages/adf/dialog/uploadDialog.ts +++ b/e2e/pages/adf/dialog/uploadDialog.ts @@ -15,176 +15,144 @@ * limitations under the License. */ -import { element, by, protractor, browser } from 'protractor'; +import { element, by, browser, ElementFinder, Locator } from 'protractor'; import { BrowserVisibility, BrowserActions } from '@alfresco/adf-testing'; export class UploadDialog { - closeButton = element((by.css('footer[class*="upload-dialog__actions"] button[id="adf-upload-dialog-close"]'))); - dialog = element(by.css('div[id="upload-dialog"]')); - minimizedDialog = element(by.css('div[class*="upload-dialog--minimized"]')); - uploadedStatusIcon = by.css('mat-icon[class*="status--done"]'); - cancelledStatusIcon = by.css('div[class*="status--cancelled"]'); + closeButton: ElementFinder = element((by.css('footer[class*="upload-dialog__actions"] button[id="adf-upload-dialog-close"]'))); + dialog: ElementFinder = element(by.css('div[id="upload-dialog"]')); + minimizedDialog: ElementFinder = element(by.css('div[class*="upload-dialog--minimized"]')); + uploadedStatusIcon: Locator = by.css('mat-icon[class*="status--done"]'); + cancelledStatusIcon: Locator = by.css('div[class*="status--cancelled"]'); errorStatusIcon = by.css('div[class*="status--error"] mat-icon'); - errorTooltip = element(by.css('div.mat-tooltip')); + errorTooltip: ElementFinder = element(by.css('div.mat-tooltip')); rowByRowName = by.xpath('ancestor::adf-file-uploading-list-row'); - title = element(by.css('span[class*="upload-dialog__title"]')); - minimizeButton = element(by.css('mat-icon[title="Minimize"]')); - maximizeButton = element(by.css('mat-icon[title="Maximize"]')); - canUploadConfirmationTitle = element(by.css('p[class="upload-dialog__confirmation--title"]')); - canUploadConfirmationDescription = element(by.css('p[class="upload-dialog__confirmation--text"]')); - confirmationDialogNoButton = element(by.partialButtonText('No')); - confirmationDialogYesButton = element(by.partialButtonText('Yes')); - cancelUploadsElement = element((by.css('footer[class*="upload-dialog__actions"] button[id="adf-upload-dialog-cancel-all"]'))); + title: ElementFinder = element(by.css('span[class*="upload-dialog__title"]')); + minimizeButton: ElementFinder = element(by.css('mat-icon[title="Minimize"]')); + maximizeButton: ElementFinder = element(by.css('mat-icon[title="Maximize"]')); + canUploadConfirmationTitle: ElementFinder = element(by.css('p[class="upload-dialog__confirmation--title"]')); + canUploadConfirmationDescription: ElementFinder = element(by.css('p[class="upload-dialog__confirmation--text"]')); + confirmationDialogNoButton: ElementFinder = element(by.partialButtonText('No')); + confirmationDialogYesButton: ElementFinder = element(by.partialButtonText('Yes')); + cancelUploadsElement: ElementFinder = element((by.css('footer[class*="upload-dialog__actions"] button[id="adf-upload-dialog-cancel-all"]'))); - clickOnCloseButton() { - this.checkCloseButtonIsDisplayed(); - BrowserActions.click(this.closeButton); - return this; + async clickOnCloseButton(): Promise { + await this.checkCloseButtonIsDisplayed(); + await BrowserActions.clickExecuteScript('footer[class*="upload-dialog__actions"] button[id="adf-upload-dialog-close"]'); } - checkCloseButtonIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.closeButton); - return this; + async checkCloseButtonIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.closeButton); } - dialogIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.dialog); - return this; + async dialogIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.dialog); } - dialogIsMinimized() { - BrowserVisibility.waitUntilElementIsVisible(this.minimizedDialog); - return this; + async dialogIsMinimized(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.minimizedDialog); } - dialogIsNotDisplayed() { - BrowserVisibility.waitUntilElementIsNotOnPage(this.dialog); - return this; + async dialogIsNotDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsNotVisible(this.dialog); } getRowsName(content) { - const row = element.all(by.css(`div[class*='uploading-row'] span[title="${content}"]`)).first(); - BrowserVisibility.waitUntilElementIsVisible(row); + const row: ElementFinder = element.all(by.css(`div[class*='uploading-row'] span[title="${content}"]`)).first(); return row; } getRowByRowName(content) { - return this.getRowsName(content).element(this.rowByRowName); + const rows = this.getRowsName(content); + return rows.element(this.rowByRowName); } - fileIsUploaded(content) { - BrowserVisibility.waitUntilElementIsVisible(this.getRowByRowName(content).element(this.uploadedStatusIcon)); - return this; + async fileIsUploaded(content): Promise { + const row = await this.getRowByRowName(content); + await BrowserVisibility.waitUntilElementIsVisible(row.element(this.uploadedStatusIcon)); } - fileIsError(content) { - BrowserVisibility.waitUntilElementIsVisible(this.getRowByRowName(content).element(this.errorStatusIcon)); - return this; + async fileIsError(content) { + const row = await this.getRowByRowName(content); + await BrowserVisibility.waitUntilElementIsVisible(row.element(this.errorStatusIcon)); } - filesAreUploaded(content) { + async filesAreUploaded(content): Promise { for (let i = 0; i < content.length; i++) { - this.fileIsUploaded(content[i]); + await this.fileIsUploaded(content[i]); } - return this; } - fileIsNotDisplayedInDialog(content) { - BrowserVisibility.waitUntilElementIsNotVisible(element(by.css(`div[class*='uploading-row'] span[title="${content}"]`))); - return this; + async fileIsNotDisplayedInDialog(content): Promise { + await BrowserVisibility.waitUntilElementIsNotVisible(element(by.css(`div[class*='uploading-row'] span[title="${content}"]`))); } - cancelUploads() { - BrowserActions.click(this.cancelUploadsElement); - return this; + async cancelUploads(): Promise { + await BrowserActions.click(this.cancelUploadsElement); } - fileIsCancelled(content) { - BrowserVisibility.waitUntilElementIsVisible(this.getRowByRowName(content).element(this.cancelledStatusIcon)); - return this; + async fileIsCancelled(content): Promise { + const row = await this.getRowByRowName(content); + await BrowserVisibility.waitUntilElementIsVisible(row.element(this.cancelledStatusIcon)); } - removeUploadedFile(content) { - BrowserVisibility.waitUntilElementIsVisible(this.getRowByRowName(content).element(this.uploadedStatusIcon)); - this.getRowByRowName(content).element(this.uploadedStatusIcon).click(); - return this; + async removeUploadedFile(content): Promise { + const row = await this.getRowByRowName(content); + await BrowserVisibility.waitUntilElementIsVisible(row.element(this.uploadedStatusIcon)); + const elementRow = await this.getRowByRowName(content); + await BrowserActions.click(elementRow.element(this.uploadedStatusIcon)); + } - getTitleText() { - BrowserVisibility.waitUntilElementIsVisible(this.title); - const deferred = protractor.promise.defer(); - this.title.getText().then((text) => { - deferred.fulfill(text); - }); - return deferred.promise; + async getTitleText(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.title); + return await this.title.getText(); } - getConfirmationDialogTitleText() { - BrowserVisibility.waitUntilElementIsVisible(this.canUploadConfirmationTitle); - const deferred = protractor.promise.defer(); - this.canUploadConfirmationTitle.getText().then((text) => { - deferred.fulfill(text); - }); - return deferred.promise; + async getConfirmationDialogTitleText(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.canUploadConfirmationTitle); + return this.canUploadConfirmationTitle.getText(); } - getConfirmationDialogDescriptionText() { - BrowserVisibility.waitUntilElementIsVisible(this.canUploadConfirmationDescription); - const deferred = protractor.promise.defer(); - this.canUploadConfirmationDescription.getText().then((text) => { - deferred.fulfill(text); - }); - return deferred.promise; + async getConfirmationDialogDescriptionText(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.canUploadConfirmationDescription); + return this.canUploadConfirmationDescription.getText(); } - clickOnConfirmationDialogYesButton() { - BrowserActions.click(this.confirmationDialogYesButton); - return this; + async clickOnConfirmationDialogYesButton(): Promise { + await BrowserActions.click(this.confirmationDialogYesButton); } - clickOnConfirmationDialogNoButton() { - BrowserActions.click(this.confirmationDialogNoButton); - return this; + async clickOnConfirmationDialogNoButton(): Promise { + await BrowserActions.click(this.confirmationDialogNoButton); } - async checkUploadCompleted() { - return (await this.numberOfCurrentFilesUploaded()) === (await this.numberOfInitialFilesUploaded()); + async numberOfCurrentFilesUploaded(): Promise { + const text = await this.getTitleText(); + return text.split('Uploaded ')[1].split(' / ')[0]; } - numberOfCurrentFilesUploaded() { - const deferred = protractor.promise.defer(); - this.getTitleText().then((text: any) => { - deferred.fulfill(text.split('Uploaded ')[1].split(' / ')[0]); - }); - return deferred.promise; + async numberOfInitialFilesUploaded(): Promise { + const text = await this.getTitleText(); + return text.split('Uploaded ')[1].split(' / ')[1]; } - numberOfInitialFilesUploaded() { - const deferred = protractor.promise.defer(); - this.getTitleText().then((text: any) => { - deferred.fulfill(text.split('Uploaded ')[1].split(' / ')[1]); - }); - return deferred.promise; + async minimizeUploadDialog(): Promise { + await BrowserActions.click(this.minimizeButton); } - minimizeUploadDialog() { - BrowserActions.click(this.minimizeButton); - return this; + async maximizeUploadDialog(): Promise { + await BrowserActions.click(this.maximizeButton); } - maximizeUploadDialog() { - BrowserActions.click(this.maximizeButton); - return this; + async displayTooltip(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(element(this.errorStatusIcon)); + await browser.actions().mouseMove(element(this.errorStatusIcon)).perform(); } - displayTooltip() { - BrowserVisibility.waitUntilElementIsVisible(element(this.errorStatusIcon)); - browser.actions().mouseMove(element(this.errorStatusIcon)).perform(); - } - - getTooltip() { - return BrowserActions.getText(this.errorTooltip); + async getTooltip(): Promise { + return await BrowserActions.getText(this.errorTooltip); } } diff --git a/e2e/pages/adf/dialog/uploadToggles.ts b/e2e/pages/adf/dialog/uploadToggles.ts index 7b01598a3b..060eb09feb 100644 --- a/e2e/pages/adf/dialog/uploadToggles.ts +++ b/e2e/pages/adf/dialog/uploadToggles.ts @@ -15,119 +15,97 @@ * limitations under the License. */ -import { browser, by, element, protractor } from 'protractor'; -import { BrowserVisibility, FormControllersPage } from '@alfresco/adf-testing'; +import { browser, by, element, ElementFinder } from 'protractor'; +import { BrowserActions, BrowserVisibility, FormControllersPage } from '@alfresco/adf-testing'; export class UploadToggles { - formControllersPage = new FormControllersPage(); - multipleFileUploadToggle = element(by.id('adf-multiple-upload-switch')); - uploadFolderToggle = element(by.id('adf-folder-upload-switch')); - extensionFilterToggle = element(by.id('adf-extension-filter-upload-switch')); - maxSizeToggle = element(by.id('adf-max-size-filter-upload-switch')); - versioningToggle = element(by.id('adf-version-upload-switch')); - extensionAcceptedField = element(by.css('input[data-automation-id="accepted-files-type"]')); - maxSizeField = element(by.css('input[data-automation-id="max-files-size"]')); - disableUploadCheckbox = element(by.css('[id="adf-disable-upload"]')); + formControllersPage: FormControllersPage = new FormControllersPage(); + multipleFileUploadToggle: ElementFinder = element(by.id('adf-multiple-upload-switch')); + uploadFolderToggle: ElementFinder = element(by.id('adf-folder-upload-switch')); + extensionFilterToggle: ElementFinder = element(by.id('adf-extension-filter-upload-switch')); + maxSizeToggle: ElementFinder = element(by.id('adf-max-size-filter-upload-switch')); + versioningToggle: ElementFinder = element(by.id('adf-version-upload-switch')); + extensionAcceptedField: ElementFinder = element(by.css('input[data-automation-id="accepted-files-type"]')); + maxSizeField: ElementFinder = element(by.css('input[data-automation-id="max-files-size"]')); + disableUploadCheckbox: ElementFinder = element(by.css('[id="adf-disable-upload"]')); - enableMultipleFileUpload() { - browser.executeScript('arguments[0].scrollIntoView()', this.multipleFileUploadToggle); - this.formControllersPage.enableToggle(this.multipleFileUploadToggle); - return this; + async enableMultipleFileUpload(): Promise { + await browser.executeScript('arguments[0].scrollIntoView()', this.multipleFileUploadToggle); + await this.formControllersPage.enableToggle(this.multipleFileUploadToggle); } - disableMultipleFileUpload() { - this.formControllersPage.disableToggle(this.multipleFileUploadToggle); - return this; + async disableMultipleFileUpload(): Promise { + await browser.executeScript('arguments[0].scrollIntoView()', this.multipleFileUploadToggle); + await this.formControllersPage.disableToggle(this.multipleFileUploadToggle); } - enableFolderUpload() { - this.formControllersPage.enableToggle(this.uploadFolderToggle); - return this; + async enableFolderUpload(): Promise { + await this.formControllersPage.enableToggle(this.uploadFolderToggle); } - checkFolderUploadToggleIsEnabled() { - const enabledToggle = element(by.css('mat-slide-toggle[id="adf-folder-upload-switch"][class*="mat-checked"]')); - BrowserVisibility.waitUntilElementIsVisible(enabledToggle); - return this; + async checkMultipleFileUploadToggleIsEnabled(): Promise { + const enabledToggle: ElementFinder = element(by.css('mat-slide-toggle[id="adf-multiple-upload-switch"][class*="mat-checked"]')); + await BrowserVisibility.waitUntilElementIsVisible(enabledToggle); } - checkMultipleFileUploadToggleIsEnabled() { - const enabledToggle = element(by.css('mat-slide-toggle[id="adf-multiple-upload-switch"][class*="mat-checked"]')); - BrowserVisibility.waitUntilElementIsVisible(enabledToggle); - return this; + async checkMaxSizeToggleIsEnabled(): Promise { + const enabledToggle: ElementFinder = element(by.css('mat-slide-toggle[id="adf-max-size-filter-upload-switch"][class*="mat-checked"]')); + await BrowserVisibility.waitUntilElementIsVisible(enabledToggle); } - checkMaxSizeToggleIsEnabled() { - const enabledToggle = element(by.css('mat-slide-toggle[id="adf-max-size-filter-upload-switch"][class*="mat-checked"]')); - BrowserVisibility.waitUntilElementIsVisible(enabledToggle); - return this; + async checkVersioningToggleIsEnabled(): Promise { + const enabledToggle: ElementFinder = element(by.css('mat-slide-toggle[id="adf-version-upload-switch"][class*="mat-checked"]')); + await BrowserVisibility.waitUntilElementIsVisible(enabledToggle); } - checkVersioningToggleIsEnabled() { - const enabledToggle = element(by.css('mat-slide-toggle[id="adf-version-upload-switch"][class*="mat-checked"]')); - BrowserVisibility.waitUntilElementIsVisible(enabledToggle); - return this; + async disableFolderUpload(): Promise { + await this.formControllersPage.disableToggle(this.uploadFolderToggle); } - disableFolderUpload() { - this.formControllersPage.disableToggle(this.uploadFolderToggle); - return this; + async enableExtensionFilter(): Promise { + await browser.executeScript('arguments[0].scrollIntoView()', this.extensionFilterToggle); + await this.formControllersPage.enableToggle(this.extensionFilterToggle); } - enableExtensionFilter() { - browser.executeScript('arguments[0].scrollIntoView()', this.extensionFilterToggle); - this.formControllersPage.enableToggle(this.extensionFilterToggle); - return this; + async disableExtensionFilter(): Promise { + await browser.executeScript('arguments[0].scrollIntoView()', this.extensionFilterToggle); + await this.formControllersPage.disableToggle(this.extensionFilterToggle); } - disableExtensionFilter() { - browser.executeScript('arguments[0].scrollIntoView()', this.extensionFilterToggle); - this.formControllersPage.disableToggle(this.extensionFilterToggle); - return this; + async enableMaxSize(): Promise { + await this.formControllersPage.enableToggle(this.maxSizeToggle); } - enableMaxSize() { - this.formControllersPage.enableToggle(this.maxSizeToggle); - return this; + async disableMaxSize(): Promise { + await this.formControllersPage.disableToggle(this.maxSizeToggle); } - disableMaxSize() { - this.formControllersPage.disableToggle(this.maxSizeToggle); - return this; + async enableVersioning(): Promise { + await this.formControllersPage.enableToggle(this.versioningToggle); } - enableVersioning() { - this.formControllersPage.enableToggle(this.versioningToggle); - return this; + async disableVersioning(): Promise { + await this.formControllersPage.disableToggle(this.versioningToggle); } - disableVersioning() { - this.formControllersPage.disableToggle(this.versioningToggle); - return this; + async clickCheckboxDisableUpload(): Promise { + await BrowserActions.click(this.disableUploadCheckbox); } - clickCheckboxDisableUpload() { - return this.disableUploadCheckbox.click(); + async addExtension(extension): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.extensionAcceptedField); + await this.extensionAcceptedField.sendKeys(',' + extension); } - addExtension(extension) { - BrowserVisibility.waitUntilElementIsVisible(this.extensionAcceptedField); - this.extensionAcceptedField.sendKeys(',' + extension); + async addMaxSize(size): Promise { + await this.clearText(); + await this.maxSizeField.sendKeys(size); } - addMaxSize(size) { - this.clearText(); - this.maxSizeField.sendKeys(size); - } - - clearText() { - BrowserVisibility.waitUntilElementIsVisible(this.maxSizeField); - const deferred = protractor.promise.defer(); - this.maxSizeField.clear().then(() => { - this.maxSizeField.sendKeys(protractor.Key.ESCAPE); - }); - return deferred.promise; + async clearText(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.maxSizeField); + await BrowserActions.clearSendKeys(this.maxSizeField, ''); } } diff --git a/e2e/pages/adf/iconsPage.ts b/e2e/pages/adf/iconsPage.ts index 8e085d1f5c..517a2dd182 100644 --- a/e2e/pages/adf/iconsPage.ts +++ b/e2e/pages/adf/iconsPage.ts @@ -15,15 +15,33 @@ * limitations under the License. */ -import { by, element } from 'protractor'; +import { browser, by, element, ElementFinder } from 'protractor'; export class IconsPage { - locateCustomIcon(name) { + locateCustomIcon(name): ElementFinder { return element(by.css(`adf-icon[value='${name}'] svg`)); } - locateLigatureIcon(name) { + locateLigatureIcon(name): ElementFinder { return element(by.css(`adf-icon[value='${name}'] .material-icons`)); } + + async isCustomIconDisplayed(name) { + const present = await browser.isElementPresent(this.locateCustomIcon(name)); + if (present) { + return await this.locateCustomIcon(name).isDisplayed(); + } else { + return false; + } + } + + async isLigatureIconDisplayed(name) { + const present = await browser.isElementPresent(this.locateLigatureIcon(name)); + if (present) { + return await this.locateLigatureIcon(name).isDisplayed(); + } else { + return false; + } + } } diff --git a/e2e/pages/adf/lockFilePage.ts b/e2e/pages/adf/lockFilePage.ts index 4f2e80e44c..743a697c10 100644 --- a/e2e/pages/adf/lockFilePage.ts +++ b/e2e/pages/adf/lockFilePage.ts @@ -15,42 +15,42 @@ * limitations under the License. */ -import { element, by } from 'protractor'; +import { element, by, ElementFinder } from 'protractor'; import { BrowserVisibility, BrowserActions } from '@alfresco/adf-testing'; export class LockFilePage { - cancelButton = element(by.css('button[data-automation-id="lock-dialog-btn-cancel"]')); - saveButton = element(by.cssContainingText('button span', 'Save')); - lockFileCheckboxText = element(by.cssContainingText('mat-checkbox label span', ' Lock file ')); - lockFileCheckbox = element(by.css('mat-checkbox[data-automation-id="adf-lock-node-checkbox"]')); - allowOwnerCheckbox = element(by.cssContainingText('mat-checkbox[class*="adf-lock-file-name"] span', ' Allow the owner to modify this file ')); + cancelButton: ElementFinder = element(by.css('button[data-automation-id="lock-dialog-btn-cancel"]')); + saveButton: ElementFinder = element(by.cssContainingText('button span', 'Save')); + lockFileCheckboxText: ElementFinder = element(by.cssContainingText('mat-checkbox label span', ' Lock file ')); + lockFileCheckbox: ElementFinder = element(by.css('mat-checkbox[data-automation-id="adf-lock-node-checkbox"]')); + allowOwnerCheckbox: ElementFinder = element(by.cssContainingText('mat-checkbox[class*="adf-lock-file-name"] span', ' Allow the owner to modify this file ')); - checkLockFileCheckboxIsDisplayed() { - return BrowserVisibility.waitUntilElementIsVisible(this.lockFileCheckboxText); + async checkLockFileCheckboxIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.lockFileCheckboxText); } - checkCancelButtonIsDisplayed() { - return BrowserVisibility.waitUntilElementIsVisible(this.cancelButton); + async checkCancelButtonIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.cancelButton); } - checkSaveButtonIsDisplayed() { - return BrowserVisibility.waitUntilElementIsVisible(this.saveButton); + async checkSaveButtonIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.saveButton); } - clickCancelButton() { - BrowserActions.click(this.cancelButton); + async clickCancelButton(): Promise { + await BrowserActions.click(this.cancelButton); } - clickLockFileCheckbox() { - BrowserActions.click(this.lockFileCheckbox); + async clickLockFileCheckbox(): Promise { + await BrowserActions.click(this.lockFileCheckbox); } - clickSaveButton() { - BrowserActions.click(this.saveButton); + async clickSaveButton(): Promise { + await BrowserActions.click(this.saveButton); } - clickAllowOwnerCheckbox() { - BrowserActions.click(this.allowOwnerCheckbox); + async clickAllowOwnerCheckbox(): Promise { + await BrowserActions.click(this.allowOwnerCheckbox); } } diff --git a/e2e/pages/adf/metadataViewPage.ts b/e2e/pages/adf/metadataViewPage.ts index bcd881cefe..a1aed59ebf 100644 --- a/e2e/pages/adf/metadataViewPage.ts +++ b/e2e/pages/adf/metadataViewPage.ts @@ -15,256 +15,240 @@ * limitations under the License. */ -import { browser, by, element, promise } from 'protractor'; +import { by, element, ElementFinder } from 'protractor'; import { BrowserVisibility, BrowserActions } from '@alfresco/adf-testing'; export class MetadataViewPage { - title = element(by.css(`div[info-drawer-title]`)); - expandedAspect = element(by.css(`mat-expansion-panel-header[aria-expanded='true']`)); + title: ElementFinder = element(by.css(`div[info-drawer-title]`)); + expandedAspect: ElementFinder = element(by.css(`mat-expansion-panel-header[aria-expanded='true']`)); aspectTitle = by.css(`mat-panel-title`); - name = element(by.css(`span[data-automation-id='card-textitem-value-name'] span`)); - creator = element(by.css(`span[data-automation-id='card-textitem-value-createdByUser.displayName'] span`)); - createdDate = element(by.css(`span[data-automation-id='card-dateitem-createdAt'] span`)); - modifier = element(by.css(`span[data-automation-id='card-textitem-value-modifiedByUser.displayName'] span`)); - modifiedDate = element(by.css(`span[data-automation-id='card-dateitem-modifiedAt'] span`)); - mimetypeName = element(by.css(`span[data-automation-id='card-textitem-value-content.mimeTypeName']`)); - size = element(by.css(`span[data-automation-id='card-textitem-value-content.sizeInBytes']`)); - description = element(by.css(`span[data-automation-id='card-textitem-value-properties.cm:description'] span`)); - author = element(by.css(`span[data-automation-id='card-textitem-value-properties.cm:author'] span`)); - titleProperty = element(by.css(`span[data-automation-id='card-textitem-value-properties.cm:title'] span`)); - editIcon = element(by.css(`button[data-automation-id='meta-data-card-toggle-edit']`)); - informationButton = element(by.css(`button[data-automation-id='meta-data-card-toggle-expand']`)); - informationSpan = element(by.css(`span[data-automation-id='meta-data-card-toggle-expand-label']`)); - informationIcon = element(by.css(`span[data-automation-id='meta-data-card-toggle-expand-label'] ~ mat-icon`)); - displayEmptySwitch = element(by.id(`adf-metadata-empty`)); - readonlySwitch = element(by.id(`adf-metadata-readonly`)); - multiSwitch = element(by.id(`adf-metadata-multi`)); - presetSwitch = element(by.id('adf-toggle-custom-preset')); - defaultPropertiesSwitch = element(by.id('adf-metadata-default-properties')); - closeButton = element(by.cssContainingText('button.mat-button span', 'Close')); - displayAspect = element(by.css(`input[placeholder='Display Aspect']`)); - applyAspect = element(by.cssContainingText(`button span.mat-button-wrapper`, 'Apply Aspect')); + name: ElementFinder = element(by.css(`span[data-automation-id='card-textitem-value-name'] span`)); + creator: ElementFinder = element(by.css(`span[data-automation-id='card-textitem-value-createdByUser.displayName'] span`)); + createdDate: ElementFinder = element(by.css(`span[data-automation-id='card-dateitem-createdAt'] span`)); + modifier: ElementFinder = element(by.css(`span[data-automation-id='card-textitem-value-modifiedByUser.displayName'] span`)); + modifiedDate: ElementFinder = element(by.css(`span[data-automation-id='card-dateitem-modifiedAt'] span`)); + mimetypeName: ElementFinder = element(by.css(`span[data-automation-id='card-textitem-value-content.mimeTypeName']`)); + size: ElementFinder = element(by.css(`span[data-automation-id='card-textitem-value-content.sizeInBytes']`)); + description: ElementFinder = element(by.css(`span[data-automation-id='card-textitem-value-properties.cm:description'] span`)); + author: ElementFinder = element(by.css(`span[data-automation-id='card-textitem-value-properties.cm:author'] span`)); + titleProperty: ElementFinder = element(by.css(`span[data-automation-id='card-textitem-value-properties.cm:title'] span`)); + editIcon: ElementFinder = element(by.css(`button[data-automation-id='meta-data-card-toggle-edit']`)); + informationButton: ElementFinder = element(by.css(`button[data-automation-id='meta-data-card-toggle-expand']`)); + informationSpan: ElementFinder = element(by.css(`span[data-automation-id='meta-data-card-toggle-expand-label']`)); + informationIcon: ElementFinder = element(by.css(`span[data-automation-id='meta-data-card-toggle-expand-label'] ~ mat-icon`)); + displayEmptySwitch: ElementFinder = element(by.id(`adf-metadata-empty`)); + readonlySwitch: ElementFinder = element(by.id(`adf-metadata-readonly`)); + multiSwitch: ElementFinder = element(by.id(`adf-metadata-multi`)); + presetSwitch: ElementFinder = element(by.id('adf-toggle-custom-preset')); + defaultPropertiesSwitch: ElementFinder = element(by.id('adf-metadata-default-properties')); + closeButton: ElementFinder = element(by.cssContainingText('button.mat-button span', 'Close')); + displayAspect: ElementFinder = element(by.css(`input[placeholder='Display Aspect']`)); + applyAspect: ElementFinder = element(by.cssContainingText(`button span.mat-button-wrapper`, 'Apply Aspect')); - getTitle(): promise.Promise { - return BrowserActions.getText(this.title); + async getTitle(): Promise { + return await BrowserActions.getText(this.title); } - getExpandedAspectName(): promise.Promise { - return BrowserActions.getText(this.expandedAspect.element(this.aspectTitle)); + async getExpandedAspectName(): Promise { + return await BrowserActions.getText(this.expandedAspect.element(this.aspectTitle)); } - getName(): promise.Promise { - return BrowserActions.getText(this.name); + async getName(): Promise { + return await BrowserActions.getText(this.name); } - getCreator(): promise.Promise { - return BrowserActions.getText(this.creator); + async getCreator(): Promise { + return await BrowserActions.getText(this.creator); } - getCreatedDate(): promise.Promise { - return BrowserActions.getText(this.createdDate); + async getCreatedDate(): Promise { + return await BrowserActions.getText(this.createdDate); } - getModifier(): promise.Promise { - return BrowserActions.getText(this.modifier); + async getModifier(): Promise { + return await BrowserActions.getText(this.modifier); } - getModifiedDate(): promise.Promise { - return BrowserActions.getText(this.modifiedDate); + async getModifiedDate(): Promise { + return await BrowserActions.getText(this.modifiedDate); } - getMimetypeName(): promise.Promise { - return BrowserActions.getText(this.mimetypeName); + async getMimetypeName(): Promise { + return await BrowserActions.getText(this.mimetypeName); } - getSize(): promise.Promise { - return BrowserActions.getText(this.size); + async getSize(): Promise { + return await BrowserActions.getText(this.size); } - getDescription(): promise.Promise { - return BrowserActions.getText(this.description); + async getDescription(): Promise { + return await BrowserActions.getText(this.description); } - getAuthor(): promise.Promise { - return BrowserActions.getText(this.author); + async getAuthor(): Promise { + return await BrowserActions.getText(this.author); } - getTitleProperty() { - BrowserActions.getText(this.titleProperty); + async getTitleProperty(): Promise { + return await BrowserActions.getText(this.titleProperty); } - editIconIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.editIcon); + async editIconIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.editIcon); } - editIconIsNotDisplayed() { - BrowserVisibility.waitUntilElementIsNotVisible(this.editIcon); + async editIconIsNotDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsNotVisible(this.editIcon); } - editIconClick() { - BrowserActions.clickExecuteScript('button[data-automation-id="meta-data-card-toggle-edit"]'); + async editIconClick(): Promise { + await BrowserActions.clickExecuteScript('button[data-automation-id="meta-data-card-toggle-edit"]'); } - informationButtonIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.informationButton); - BrowserVisibility.waitUntilElementIsClickable(this.informationButton); + async informationButtonIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsClickable(this.informationButton); } - informationButtonIsNotDisplayed() { - BrowserVisibility.waitUntilElementIsNotVisible(this.informationButton); + async informationButtonIsNotDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsNotVisible(this.informationButton); } - clickOnInformationButton(): MetadataViewPage { - this.informationButtonIsDisplayed(); - browser.sleep(600); - BrowserActions.click(this.informationButton); - return this; + async clickOnInformationButton(): Promise { + await BrowserActions.click(this.informationButton); } - getInformationButtonText(): promise.Promise { - return BrowserActions.getText(this.informationSpan); + async getInformationButtonText(): Promise { + return await BrowserActions.getText(this.informationSpan); } - getInformationIconText(): promise.Promise { - return BrowserActions.getText(this.informationIcon); + async getInformationIconText(): Promise { + return await BrowserActions.getText(this.informationIcon); } - clickOnPropertiesTab(): MetadataViewPage { - BrowserActions.closeMenuAndDialogs(); - const propertiesTab = element(by.cssContainingText(`.adf-info-drawer-layout-content div.mat-tab-labels div .mat-tab-label-content`, `Properties`)); - BrowserActions.click(propertiesTab); - return this; + async clickOnPropertiesTab(): Promise { + const propertiesTab: ElementFinder = element(by.cssContainingText(`.adf-info-drawer-layout-content div.mat-tab-labels div .mat-tab-label-content`, `Properties`)); + await BrowserActions.click(propertiesTab); } - getEditIconTooltip(): promise.Promise { - return this.editIcon.getAttribute('title'); + async getEditIconTooltip(): Promise { + return await this.editIcon.getAttribute('title'); } - editPropertyIconIsDisplayed(propertyName: string) { - const editPropertyIcon = element(by.css('mat-icon[data-automation-id="card-textitem-edit-icon-' + propertyName + '"]')); - BrowserVisibility.waitUntilElementIsPresent(editPropertyIcon); + async editPropertyIconIsDisplayed(propertyName: string) { + const editPropertyIcon: ElementFinder = element(by.css('mat-icon[data-automation-id="card-textitem-edit-icon-' + propertyName + '"]')); + await BrowserVisibility.waitUntilElementIsPresent(editPropertyIcon); } - updatePropertyIconIsDisplayed(propertyName: string) { - const updatePropertyIcon = element(by.css('mat-icon[data-automation-id="card-textitem-update-' + propertyName + '"]')); - BrowserVisibility.waitUntilElementIsVisible(updatePropertyIcon); + async updatePropertyIconIsDisplayed(propertyName: string) { + const updatePropertyIcon: ElementFinder = element(by.css('mat-icon[data-automation-id="card-textitem-update-' + propertyName + '"]')); + await BrowserVisibility.waitUntilElementIsVisible(updatePropertyIcon); } - clickUpdatePropertyIcon(propertyName: string): promise.Promise { - const updatePropertyIcon = element(by.css('mat-icon[data-automation-id="card-textitem-update-' + propertyName + '"]')); - return BrowserActions.click(updatePropertyIcon); + async clickUpdatePropertyIcon(propertyName: string): Promise { + const updatePropertyIcon: ElementFinder = element(by.css('mat-icon[data-automation-id="card-textitem-update-' + propertyName + '"]')); + await BrowserActions.click(updatePropertyIcon); } - clickClearPropertyIcon(propertyName: string): promise.Promise { - const clearPropertyIcon = element(by.css('mat-icon[data-automation-id="card-textitem-reset-' + propertyName + '"]')); - return BrowserActions.click(clearPropertyIcon); + async clickClearPropertyIcon(propertyName: string): Promise { + const clearPropertyIcon: ElementFinder = element(by.css('mat-icon[data-automation-id="card-textitem-reset-' + propertyName + '"]')); + await BrowserActions.click(clearPropertyIcon); } - enterPropertyText(propertyName: string, text: string | number): MetadataViewPage { - const textField = element(by.css('input[data-automation-id="card-textitem-editinput-' + propertyName + '"]')); - BrowserVisibility.waitUntilElementIsVisible(textField); - textField.sendKeys(''); - textField.clear(); - textField.sendKeys(text); - return this; + async enterPropertyText(propertyName: string, text: string | number): Promise { + const textField: ElementFinder = element(by.css('input[data-automation-id="card-textitem-editinput-' + propertyName + '"]')); + await BrowserVisibility.waitUntilElementIsClickable(textField); + await BrowserActions.clearSendKeys(textField, text.toString()); } - enterPresetText(text: string): MetadataViewPage { - const presetField = element(by.css('input[data-automation-id="adf-text-custom-preset"]')); - BrowserVisibility.waitUntilElementIsVisible(presetField); - presetField.sendKeys(''); - presetField.clear(); - presetField.sendKeys(text); - const applyButton = element(by.css('button[id="adf-metadata-aplly"]')); - BrowserActions.click(applyButton); - return this; + async enterPresetText(text: string): Promise { + const presetField: ElementFinder = element(by.css('input[data-automation-id="adf-text-custom-preset"]')); + await BrowserVisibility.waitUntilElementIsVisible(presetField); + await BrowserActions.clearSendKeys(presetField, text); + const applyButton: ElementFinder = element(by.css('button[id="adf-metadata-aplly"]')); + await BrowserActions.click(applyButton); } - enterDescriptionText(text: string): MetadataViewPage { - const textField = element(by.css('textarea[data-automation-id="card-textitem-edittextarea-properties.cm:description"]')); - BrowserVisibility.waitUntilElementIsVisible(textField); - textField.sendKeys(''); - textField.clear(); - textField.sendKeys(text); - return this; + async enterDescriptionText(text: string): Promise { + const textField: ElementFinder = element(by.css('textarea[data-automation-id="card-textitem-edittextarea-properties.cm:description"]')); + await BrowserVisibility.waitUntilElementIsVisible(textField); + await BrowserActions.clearSendKeys(textField, text); } - getPropertyText(propertyName: string, type?: string): promise.Promise { + async getPropertyText(propertyName: string, type?: string): Promise { const propertyType = type || 'textitem'; - const textField = element(by.css('span[data-automation-id="card-' + propertyType + '-value-' + propertyName + '"]')); + const textField: ElementFinder = element(by.css('span[data-automation-id="card-' + propertyType + '-value-' + propertyName + '"]')); - return BrowserActions.getText(textField); + return await BrowserActions.getText(textField); } - clearPropertyIconIsDisplayed(propertyName: string) { - const clearPropertyIcon = element(by.css('mat-icon[data-automation-id="card-textitem-reset-' + propertyName + '"]')); - BrowserVisibility.waitUntilElementIsVisible(clearPropertyIcon); + async clearPropertyIconIsDisplayed(propertyName: string): Promise { + const clearPropertyIcon: ElementFinder = element(by.css('mat-icon[data-automation-id="card-textitem-reset-' + propertyName + '"]')); + await BrowserVisibility.waitUntilElementIsVisible(clearPropertyIcon); } - clickEditPropertyIcons(propertyName: string) { - const editPropertyIcon = element(by.css('mat-icon[data-automation-id="card-textitem-edit-icon-' + propertyName + '"]')); - BrowserActions.click(editPropertyIcon); + async clickEditPropertyIcons(propertyName: string): Promise { + const editPropertyIcon: ElementFinder = element(by.css('mat-icon[data-automation-id="card-textitem-edit-icon-' + propertyName + '"]')); + await BrowserActions.click(editPropertyIcon); } - getPropertyIconTooltip(propertyName: string): promise.Promise { - const editPropertyIcon = element(by.css('mat-icon[data-automation-id="card-textitem-edit-icon-' + propertyName + '"]')); - return editPropertyIcon.getAttribute('title'); + async getPropertyIconTooltip(propertyName: string): Promise { + const editPropertyIcon: ElementFinder = element(by.css('mat-icon[data-automation-id="card-textitem-edit-icon-' + propertyName + '"]')); + return await editPropertyIcon.getAttribute('title'); } - clickMetadataGroup(groupName: string) { - const group = element(by.css('mat-expansion-panel[data-automation-id="adf-metadata-group-' + groupName + '"]')); - BrowserActions.click(group); + async clickMetadataGroup(groupName: string): Promise { + const group: ElementFinder = element(by.css('mat-expansion-panel[data-automation-id="adf-metadata-group-' + groupName + '"]')); + await BrowserActions.click(group); } - checkMetadataGroupIsPresent(groupName: string): promise.Promise { - const group = element(by.css('mat-expansion-panel[data-automation-id="adf-metadata-group-' + groupName + '"]')); - return BrowserVisibility.waitUntilElementIsVisible(group); + async checkMetadataGroupIsPresent(groupName: string): Promise { + const group: ElementFinder = element(by.css('mat-expansion-panel[data-automation-id="adf-metadata-group-' + groupName + '"]')); + await BrowserVisibility.waitUntilElementIsVisible(group); } - checkMetadataGroupIsNotPresent(groupName: string): promise.Promise { - const group = element(by.css('mat-expansion-panel[data-automation-id="adf-metadata-group-' + groupName + '"]')); - return BrowserVisibility.waitUntilElementIsNotVisible(group); + async checkMetadataGroupIsNotPresent(groupName: string): Promise { + const group: ElementFinder = element(by.css('mat-expansion-panel[data-automation-id="adf-metadata-group-' + groupName + '"]')); + await BrowserVisibility.waitUntilElementIsNotVisible(group); } - checkMetadataGroupIsExpand(groupName: string) { - const group = element(by.css('mat-expansion-panel[data-automation-id="adf-metadata-group-' + groupName + '"] > mat-expansion-panel-header')); - BrowserVisibility.waitUntilElementIsVisible(group); - expect(group.getAttribute('class')).toContain('mat-expanded'); + async checkMetadataGroupIsExpand(groupName: string): Promise { + const group: ElementFinder = element(by.css('mat-expansion-panel[data-automation-id="adf-metadata-group-' + groupName + '"] > mat-expansion-panel-header')); + await BrowserVisibility.waitUntilElementIsVisible(group); + await expect(await group.getAttribute('class')).toContain('mat-expanded'); } - checkMetadataGroupIsNotExpand(groupName: string) { - const group = element(by.css('mat-expansion-panel[data-automation-id="adf-metadata-group-' + groupName + '"] > mat-expansion-panel-header')); - BrowserVisibility.waitUntilElementIsPresent(group); - expect(group.getAttribute('class')).not.toContain('mat-expanded'); + async checkMetadataGroupIsNotExpand(groupName: string): Promise { + const group: ElementFinder = element(by.css('mat-expansion-panel[data-automation-id="adf-metadata-group-' + groupName + '"] > mat-expansion-panel-header')); + await BrowserVisibility.waitUntilElementIsPresent(group); + await expect(await group.getAttribute('class')).not.toContain('mat-expanded'); } - getMetadataGroupTitle(groupName: string): promise.Promise { + async getMetadataGroupTitle(groupName: string): Promise { const group = element(by.css('mat-expansion-panel[data-automation-id="adf-metadata-group-' + groupName + '"] > mat-expansion-panel-header > span > mat-panel-title')); - return BrowserActions.getText(group); + return await BrowserActions.getText(group); } - checkPropertyIsVisible(propertyName: string, type: string) { - const property = element(by.css('div[data-automation-id="card-' + type + '-label-' + propertyName + '"]')); - BrowserVisibility.waitUntilElementIsVisible(property); + async checkPropertyIsVisible(propertyName: string, type: string): Promise { + const property: ElementFinder = element(by.css('div[data-automation-id="card-' + type + '-label-' + propertyName + '"]')); + await BrowserVisibility.waitUntilElementIsVisible(property); } - checkPropertyIsNotVisible(propertyName: string, type: string) { - const property = element(by.css('div[data-automation-id="card-' + type + '-label-' + propertyName + '"]')); - BrowserVisibility.waitUntilElementIsNotVisible(property); + async checkPropertyIsNotVisible(propertyName: string, type: string): Promise { + const property: ElementFinder = element(by.css('div[data-automation-id="card-' + type + '-label-' + propertyName + '"]')); + await BrowserVisibility.waitUntilElementIsNotVisible(property); } - clickCloseButton() { - BrowserActions.click(this.closeButton); + async clickCloseButton(): Promise { + await BrowserActions.click(this.closeButton); } - typeAspectName(aspectName) { - BrowserVisibility.waitUntilElementIsVisible(this.displayAspect); - this.displayAspect.clear(); - this.displayAspect.sendKeys(aspectName); + async typeAspectName(aspectName): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.displayAspect); + await BrowserActions.clearSendKeys(this.displayAspect, aspectName); } - clickApplyAspect() { - BrowserActions.click(this.applyAspect); + async clickApplyAspect(): Promise { + await BrowserActions.click(this.applyAspect); } } diff --git a/e2e/pages/adf/navigationBarPage.ts b/e2e/pages/adf/navigationBarPage.ts index 7cec24967e..afbf289292 100644 --- a/e2e/pages/adf/navigationBarPage.ts +++ b/e2e/pages/adf/navigationBarPage.ts @@ -23,209 +23,226 @@ import { BrowserVisibility, BrowserActions } from '@alfresco/adf-testing'; export class NavigationBarPage { - linkListContainer = element(by.css('.adf-sidenav-linklist')); - linkMenuChildrenContainer = element(by.css('.nestedMenu')); + linkListContainer: ElementFinder = element(by.css('.adf-sidenav-linklist')); + linkMenuChildrenContainer: ElementFinder = element(by.css('.nestedMenu')); dataTableNestedButton = this.linkMenuChildrenContainer.element(by.css('.adf-sidenav-link[data-automation-id="Datatable"]')); dataTableCopyContentButton = this.linkMenuChildrenContainer.element(by.css('.adf-sidenav-link[data-automation-id="Copy Content"]')); dataTableDragAndDropButton = this.linkMenuChildrenContainer.element(by.css('.adf-sidenav-link[data-automation-id="Drag and Drop"]')); - processServicesButton = element(by.css('.adf-sidenav-link[data-automation-id="Process Services"]')); processServicesNestedButton = this.linkMenuChildrenContainer.element(by.css('.adf-sidenav-link[data-automation-id="App"]')); processServicesCloudHomeButton = this.linkMenuChildrenContainer.element(by.css('.adf-sidenav-link[data-automation-id="Home"]')); - loginButton = element(by.css('.adf-sidenav-link[data-automation-id="Login"]')); - overlayViewerButton = element(by.css('.adf-sidenav-link[data-automation-id="Overlay Viewer"]')); - themeButton = element(by.css('button[data-automation-id="theme menu"]')); - themeMenuContent = element(by.css('div[class*="mat-menu-panel"]')); - logoutButton = element(by.css('.adf-sidenav-link[adf-logout]')); - cardViewButton = element(by.css('.adf-sidenav-link[data-automation-id="CardView"]')); - languageMenuButton = element(by.css('button[data-automation-id="language-menu-button"]')); - appTitle = element(by.css('.adf-app-title')); - menuButton = element(by.css('button[data-automation-id="adf-menu-icon"]')); + themeButton: ElementFinder = element(by.css('button[data-automation-id="theme menu"]')); + themeMenuContent: ElementFinder = element(by.css('div[class*="mat-menu-panel"]')); + languageMenuButton: ElementFinder = element(by.css('button[data-automation-id="language-menu-button"]')); + appTitle: ElementFinder = element(by.css('.adf-app-title')); + menuButton: ElementFinder = element(by.css('button[data-automation-id="adf-menu-icon"]')); formButton = this.linkMenuChildrenContainer.element(by.css('.adf-sidenav-link[data-automation-id="Form"]')); peopleGroupCloudButton = this.linkMenuChildrenContainer.element(by.css('.adf-sidenav-link[data-automation-id="People/Group Cloud"]')); - clickMenuButton(title) { - BrowserActions.clickExecuteScript(`.adf-sidenav-link[data-automation-id="${title}"]`); + async clickNavigationBarItem(title): Promise { + const menu = element(by.css(`.adf-sidenav-link[data-automation-id="${title}"]`)); + await BrowserActions.closeMenuAndDialogs(); + await BrowserActions.click(menu); } - async clickSocialButton() { - this.clickMenuButton('Social'); + async clickHomeButton(): Promise { + await this.clickNavigationBarItem('Home'); } - async clickTagButton() { - this.clickMenuButton('Tag'); + async clickContentServicesButton(): Promise { + await this.clickNavigationBarItem('Content Services'); } - async navigateToDatatable() { - this.clickMenuButton('Datatable'); - BrowserActions.click(this.dataTableNestedButton); + async clickCardViewButton(): Promise { + await this.clickNavigationBarItem('CardView'); } - async navigateToCopyContentDatatable() { - this.clickMenuButton('Datatable'); - BrowserActions.click(this.dataTableCopyContentButton); + async clickHeaderDataButton(): Promise { + await this.clickNavigationBarItem('Header Data'); } - async navigateToDragAndDropDatatable() { - this.clickMenuButton('Datatable'); - BrowserActions.click(this.dataTableDragAndDropButton); + async clickTaskListButton(): Promise { + await this.clickNavigationBarItem('Task List'); } - async clickContentServicesButton() { - this.clickMenuButton('Content Services'); + async clickProcessCloudButton() { + await this.clickNavigationBarItem('Process Cloud'); + await BrowserVisibility.waitUntilElementIsVisible(this.linkMenuChildrenContainer); } - async clickTaskListButton() { - this.clickMenuButton('Task List'); - } - - async clickHomeButton() { - this.clickMenuButton('Home'); - } - - async clickConfigEditorButton() { - this.clickMenuButton('Configuration Editor'); - } - - navigateToProcessServicesPage() { - this.clickMenuButton('Process Services'); - BrowserActions.click(this.processServicesNestedButton); - return new ProcessServicesPage(); - } - - navigateToProcessServicesCloudPage() { - this.clickMenuButton('Process Cloud'); - BrowserActions.click(this.processServicesCloudHomeButton); + async navigateToProcessServicesCloudPage(): Promise { + await this.clickProcessCloudButton(); + await BrowserActions.click(this.processServicesCloudHomeButton); + await BrowserVisibility.waitUntilElementIsNotPresent(this.linkMenuChildrenContainer); return new AppListCloudPage(); } - navigateToPeopleGroupCloudPage() { - this.clickMenuButton('Process Cloud'); - BrowserActions.click(this.peopleGroupCloudButton); + async navigateToFormCloudPage(): Promise { + await this.clickProcessCloudButton(); + await BrowserActions.click(this.formButton); + await BrowserVisibility.waitUntilElementIsNotPresent(this.linkMenuChildrenContainer); + } + + async navigateToPeopleGroupCloudPage(): Promise { + await this.clickProcessCloudButton(); + await BrowserActions.click(this.peopleGroupCloudButton); + await BrowserVisibility.waitUntilElementIsNotPresent(this.linkMenuChildrenContainer); return new PeopleGroupCloudComponentPage(); } - async navigateToSettingsPage() { - this.clickMenuButton('Settings'); - return new AppListCloudPage(); + async clickProcessServicesButton() { + await this.clickNavigationBarItem('Process Services'); + await BrowserVisibility.waitUntilElementIsVisible(this.linkMenuChildrenContainer); } - async clickLoginButton() { - this.clickMenuButton('Login'); + async navigateToProcessServicesPage(): Promise { + await this.clickProcessServicesButton(); + await BrowserActions.click(this.processServicesNestedButton); + await BrowserVisibility.waitUntilElementIsNotPresent(this.linkMenuChildrenContainer); + return new ProcessServicesPage(); } - async clickTrashcanButton() { - this.clickMenuButton('Trashcan'); + async navigateToProcessServicesFormPage(): Promise { + await this.clickProcessServicesButton(); + await BrowserActions.click(this.formButton); + await BrowserVisibility.waitUntilElementIsNotPresent(this.linkMenuChildrenContainer); } - async clickOverlayViewerButton() { - this.clickMenuButton('Overlay Viewer'); - return this; + async clickLoginButton(): Promise { + await this.clickNavigationBarItem('Login'); } - async clickThemeButton() { - BrowserActions.closeMenuAndDialogs(); - BrowserActions.click(this.themeButton); - BrowserVisibility.waitUntilElementIsVisible(this.themeMenuContent); + async clickTrashcanButton(): Promise { + await this.clickNavigationBarItem('Trashcan'); } - async clickOnSpecificThemeButton(themeName) { - const themeElement = element(by.css(`button[data-automation-id="${themeName}"]`)); - BrowserActions.click(themeElement); + async clickCustomSources(): Promise { + await this.clickNavigationBarItem('Custom Sources'); } - async clickLogoutButton() { - BrowserActions.closeMenuAndDialogs(); - BrowserActions.clickExecuteScript('.adf-sidenav-link[adf-logout]'); + async clickDataTable(): Promise { + await this.clickNavigationBarItem('Datatable'); + await BrowserVisibility.waitUntilElementIsVisible(this.linkMenuChildrenContainer); } - async clickCardViewButton() { - BrowserActions.closeMenuAndDialogs(); - BrowserActions.click(this.cardViewButton); + async navigateToDatatable(): Promise { + await this.clickDataTable(); + await BrowserActions.click(this.dataTableNestedButton); + await BrowserVisibility.waitUntilElementIsNotPresent(this.linkMenuChildrenContainer); } - openContentServicesFolder(folderId) { - return BrowserActions.getUrl(browser.params.testConfig.adf.url + '/files/' + folderId); + async navigateToDragAndDropDatatable(): Promise { + await this.clickDataTable(); + await BrowserActions.click(this.dataTableDragAndDropButton); + await BrowserVisibility.waitUntilElementIsNotPresent(this.linkMenuChildrenContainer); } - chooseLanguage(language) { - const buttonLanguage = element(by.xpath(`//adf-language-menu//button[contains(text(), '${language}')]`)); - BrowserActions.click(buttonLanguage); + async navigateToCopyContentDatatable(): Promise { + await this.clickDataTable(); + await BrowserActions.click(this.dataTableCopyContentButton); + await BrowserVisibility.waitUntilElementIsNotPresent(this.linkMenuChildrenContainer); } - openLanguageMenu() { - BrowserActions.click(this.languageMenuButton); - BrowserVisibility.waitUntilElementIsVisible(this.appTitle); + async clickTagButton(): Promise { + await this.clickNavigationBarItem('Tag'); } - async clickHeaderDataButton() { - this.clickMenuButton('Header Data'); + async clickSocialButton(): Promise { + await this.clickNavigationBarItem('Social'); } - async clickAboutButton() { - this.clickMenuButton('About'); + async clickSettingsButton(): Promise { + await this.clickNavigationBarItem('Settings'); } - async clickTreeViewButton() { - this.clickMenuButton('Tree View'); + async clickConfigEditorButton(): Promise { + await this.clickNavigationBarItem('Configuration Editor'); } - async navigateToIconsPage() { - this.clickMenuButton('Icons'); + async clickOverlayViewerButton(): Promise { + await this.clickNavigationBarItem('Overlay Viewer'); } - async navigateToCustomSources() { - this.clickMenuButton('Custom Sources'); + async clickTreeViewButton(): Promise { + await this.clickNavigationBarItem('Tree View'); } - checkMenuButtonIsDisplayed() { - return BrowserVisibility.waitUntilElementIsVisible(this.menuButton); + async clickIconsButton(): Promise { + await this.clickNavigationBarItem('Icons'); } - checkMenuButtonIsNotDisplayed() { - return BrowserVisibility.waitUntilElementIsNotVisible(this.menuButton); + async clickAboutButton(): Promise { + await this.clickNavigationBarItem('About'); } - checkToolbarColor(color) { - const toolbarColor = element(by.css(`mat-toolbar[class*="mat-${color}"]`)); - return BrowserVisibility.waitUntilElementIsVisible(toolbarColor); + async clickLogoutButton(): Promise { + await BrowserActions.closeMenuAndDialogs(); + await BrowserActions.clickExecuteScript('.adf-sidenav-link[adf-logout]'); } - clickAppLogo(logoTitle) { - const appLogo = element(by.css('a[title="' + logoTitle + '"]')); - BrowserActions.click(appLogo); + async clickThemeButton(): Promise { + await BrowserActions.closeMenuAndDialogs(); + await BrowserActions.click(this.themeButton); + await BrowserVisibility.waitUntilElementIsVisible(this.themeMenuContent); } - clickAppLogoText() { - BrowserActions.click(this.appTitle); + async clickOnSpecificThemeButton(themeName): Promise { + const themeElement: ElementFinder = element(by.css(`button[data-automation-id="${themeName}"]`)); + await BrowserActions.click(themeElement); + await BrowserVisibility.waitUntilElementIsNotPresent(this.linkMenuChildrenContainer); } - clickFormButton() { - BrowserActions.closeMenuAndDialogs(); - BrowserActions.click(this.processServicesButton); - BrowserActions.click(this.formButton); + async openContentServicesFolder(folderId): Promise { + await BrowserActions.getUrl(`${browser.params.testConfig.adf.url}/files/${folderId}`); } - clickFormCloudButton() { - this.clickMenuButton('Process Cloud'); - BrowserActions.click(this.formButton); + async openLanguageMenu(): Promise { + await BrowserActions.closeMenuAndDialogs(); + await BrowserActions.click(this.languageMenuButton); + await BrowserVisibility.waitUntilElementIsVisible(this.appTitle); } - checkLogoTooltip(logoTooltipTitle) { - const logoTooltip = element(by.css('a[title="' + logoTooltipTitle + '"]')); - BrowserVisibility.waitUntilElementIsVisible(logoTooltip); + async chooseLanguage(language): Promise { + const buttonLanguage: ElementFinder = element(by.xpath(`//adf-language-menu//button[contains(text(), '${language}')]`)); + await BrowserActions.click(buttonLanguage); + await BrowserVisibility.waitUntilElementIsNotPresent(this.linkMenuChildrenContainer); } - async openViewer(nodeId) { - await BrowserActions.getUrl(browser.params.testConfig.adf.url + `/files(overlay:files/${nodeId}/view`); - return this; + async checkMenuButtonIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.menuButton); } - async goToSite(site) { + async checkMenuButtonIsNotDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsNotVisible(this.menuButton); + } + + async checkToolbarColor(color): Promise { + const toolbarColor: ElementFinder = element(by.css(`mat-toolbar[class*="mat-${color}"]`)); + await BrowserVisibility.waitUntilElementIsVisible(toolbarColor); + } + + async clickAppLogo(logoTitle): Promise { + const appLogo: ElementFinder = element(by.css('a[title="' + logoTitle + '"]')); + await BrowserActions.click(appLogo); + } + + async clickAppLogoText(): Promise { + await BrowserActions.click(this.appTitle); + } + + async checkLogoTooltip(logoTooltipTitle): Promise { + const logoTooltip: ElementFinder = element(by.css('a[title="' + logoTooltipTitle + '"]')); + await BrowserVisibility.waitUntilElementIsVisible(logoTooltip); + } + + async openViewer(nodeId): Promise { + await BrowserActions.getUrl(browser.params.testConfig.adf.url + `/files(overlay:files/${nodeId}/view`); + } + + async goToSite(site): Promise { await BrowserActions.getUrl(browser.params.testConfig.adf.url + `/files/${site.entry.guid}/display/list`); } - async scrollTo(el: ElementFinder) { + async scrollTo(el: ElementFinder): Promise { await browser.executeScript(`return arguments[0].scrollTop = arguments[1].offsetTop`, this.linkListContainer.getWebElement(), el.getWebElement()); - return this; } } diff --git a/e2e/pages/adf/notificationPage.ts b/e2e/pages/adf/notificationPage.ts index 4b86cf3299..88437dc938 100644 --- a/e2e/pages/adf/notificationPage.ts +++ b/e2e/pages/adf/notificationPage.ts @@ -15,107 +15,98 @@ * limitations under the License. */ -import { element, by, protractor, browser } from 'protractor'; +import { element, by, browser, ElementFinder } from 'protractor'; import { BrowserVisibility, BrowserActions } from '@alfresco/adf-testing'; export class NotificationPage { - messageField = element(by.css('input[data-automation-id="notification-message"]')); - horizontalPosition = element(by.css('mat-select[data-automation-id="notification-horizontal-position"]')); - verticalPosition = element(by.css('mat-select[data-automation-id="notification-vertical-position"]')); - durationField = element(by.css('input[data-automation-id="notification-duration"]')); - direction = element(by.css('mat-select[data-automation-id="notification-direction"]')); - actionToggle = element(by.css('mat-slide-toggle[data-automation-id="notification-action-toggle"]')); - notificationSnackBar = element.all(by.css('simple-snack-bar')).first(); - actionOutput = element(by.css('div[data-automation-id="notification-action-output"]')); - selectionDropDown = element.all(by.css('.mat-select-panel')).first(); - notificationsPage = element(by.css('.adf-sidenav-link[data-automation-id="Notifications"]')); - notificationConfig = element(by.css('p[data-automation-id="notification-custom-object"]')); + messageField: ElementFinder = element(by.css('input[data-automation-id="notification-message"]')); + horizontalPosition: ElementFinder = element(by.css('mat-select[data-automation-id="notification-horizontal-position"]')); + verticalPosition: ElementFinder = element(by.css('mat-select[data-automation-id="notification-vertical-position"]')); + durationField: ElementFinder = element(by.css('input[data-automation-id="notification-duration"]')); + direction: ElementFinder = element(by.css('mat-select[data-automation-id="notification-direction"]')); + actionToggle: ElementFinder = element(by.css('mat-slide-toggle[data-automation-id="notification-action-toggle"]')); + notificationSnackBar: ElementFinder = element.all(by.css('simple-snack-bar')).first(); + actionOutput: ElementFinder = element(by.css('div[data-automation-id="notification-action-output"]')); + selectionDropDown: ElementFinder = element.all(by.css('.mat-select-panel')).first(); + notificationsPage: ElementFinder = element(by.css('.adf-sidenav-link[data-automation-id="Notifications"]')); + notificationConfig: ElementFinder = element(by.css('p[data-automation-id="notification-custom-object"]')); - checkNotifyContains(message) { - BrowserVisibility.waitUntilElementIsVisible(element.all(by.cssContainingText('simple-snack-bar', message)).first()); - return this; + async checkNotifyContains(message): Promise { + await BrowserVisibility.waitUntilElementIsVisible(element.all(by.cssContainingText('simple-snack-bar', message)).first()); } - goToNotificationsPage() { - BrowserActions.click(this.notificationsPage); + async goToNotificationsPage(): Promise { + await BrowserActions.click(this.notificationsPage); } - getConfigObject() { + getConfigObject(): Promise { return BrowserActions.getText(this.notificationConfig); } - checkNotificationSnackBarIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.notificationSnackBar); - return this; + async checkNotificationSnackBarIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.notificationSnackBar); } - checkNotificationSnackBarIsDisplayedWithMessage(message) { - const notificationSnackBarMessage = element(by.cssContainingText('simple-snack-bar', message)); - BrowserVisibility.waitUntilElementIsVisible(notificationSnackBarMessage); - return this; + async checkNotificationSnackBarIsDisplayedWithMessage(message): Promise { + const notificationSnackBarMessage: ElementFinder = element(by.cssContainingText('simple-snack-bar', message)); + await BrowserVisibility.waitUntilElementIsVisible(notificationSnackBarMessage); } - checkNotificationSnackBarIsNotDisplayed() { - BrowserVisibility.waitUntilElementIsNotVisible(this.notificationSnackBar); - return this; + async checkNotificationSnackBarIsNotDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsNotVisible(this.notificationSnackBar); } - enterMessageField(text) { - BrowserVisibility.waitUntilElementIsVisible(this.messageField); - this.messageField.clear(); - this.messageField.sendKeys(text); + async enterMessageField(text): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.messageField); + await BrowserActions.clearSendKeys(this.messageField, text); } - enterDurationField(time) { - BrowserVisibility.waitUntilElementIsVisible(this.durationField); - this.durationField.clear(); - this.durationField.sendKeys(time); + async enterDurationField(time): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.durationField); + await BrowserActions.clearSendKeys(this.durationField, time); } - selectHorizontalPosition(selectedItem) { - const selectItem = element(by.cssContainingText('span[class="mat-option-text"]', selectedItem)); - BrowserActions.click(this.horizontalPosition); - BrowserVisibility.waitUntilElementIsVisible(this.selectionDropDown); - BrowserActions.click(selectItem); + async selectHorizontalPosition(selectedItem): Promise { + const selectItem: ElementFinder = element(by.cssContainingText('span[class="mat-option-text"]', selectedItem)); + await BrowserActions.click(this.horizontalPosition); + await BrowserVisibility.waitUntilElementIsVisible(this.selectionDropDown); + await BrowserActions.click(selectItem); } - selectVerticalPosition(selectedItem) { - const selectItem = element(by.cssContainingText('span[class="mat-option-text"]', selectedItem)); - BrowserActions.click(this.verticalPosition); - BrowserVisibility.waitUntilElementIsVisible(this.selectionDropDown); - BrowserActions.click(selectItem); + async selectVerticalPosition(selectedItem): Promise { + const selectItem: ElementFinder = element(by.cssContainingText('span[class="mat-option-text"]', selectedItem)); + await BrowserActions.click(this.verticalPosition); + await BrowserVisibility.waitUntilElementIsVisible(this.selectionDropDown); + await BrowserActions.click(selectItem); } - selectDirection(selectedItem) { - const selectItem = element(by.cssContainingText('span[class="mat-option-text"]', selectedItem)); - BrowserActions.click(this.direction); - BrowserVisibility.waitUntilElementIsVisible(this.selectionDropDown); - BrowserActions.click(selectItem); + async selectDirection(selectedItem): Promise { + const selectItem: ElementFinder = element(by.cssContainingText('span[class="mat-option-text"]', selectedItem)); + await BrowserActions.click(this.direction); + await BrowserVisibility.waitUntilElementIsVisible(this.selectionDropDown); + await BrowserActions.click(selectItem); } - clickNotificationButton() { - const button = element(by.css('button[data-automation-id="notification-custom-config-button"]')); - BrowserActions.click(button); + async clickNotificationButton(): Promise { + const button: ElementFinder = element(by.css('button[data-automation-id="notification-custom-config-button"]')); + await BrowserActions.click(button); } - checkActionEvent() { - BrowserVisibility.waitUntilElementIsVisible(this.actionOutput); - return this; + async checkActionEvent(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.actionOutput); } - clickActionToggle() { - BrowserActions.click(this.actionToggle); + async clickActionToggle(): Promise { + await BrowserActions.click(this.actionToggle); } - clickActionButton() { - browser.executeScript(`document.querySelector("simple-snack-bar > div > button").click();`); + async clickActionButton(): Promise { + await browser.executeScript(`document.querySelector("simple-snack-bar > div > button").click();`); } - clearMessage() { - BrowserVisibility.waitUntilElementIsVisible(this.messageField); - this.messageField.clear(); - this.messageField.sendKeys('a'); - this.messageField.sendKeys(protractor.Key.BACK_SPACE); + async clearMessage(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.messageField); + await BrowserActions.clearSendKeys(this.messageField, ''); } } diff --git a/e2e/pages/adf/permissionsPage.ts b/e2e/pages/adf/permissionsPage.ts index 23019591ed..55bfa0d07f 100644 --- a/e2e/pages/adf/permissionsPage.ts +++ b/e2e/pages/adf/permissionsPage.ts @@ -15,7 +15,7 @@ * limitations under the License. */ -import { element, by } from 'protractor'; +import { element, by, ElementFinder } from 'protractor'; import { DataTableComponentPage } from '@alfresco/adf-testing'; import { BrowserVisibility, BrowserActions } from '@alfresco/adf-testing'; @@ -28,121 +28,110 @@ export class PermissionsPage { dataTableComponentPage: DataTableComponentPage = new DataTableComponentPage(); - addPermissionButton = element(by.css("button[data-automation-id='adf-add-permission-button']")); - addPermissionDialog = element(by.css('adf-add-permission-dialog')); - searchUserInput = element(by.id('searchInput')); - searchResults = element.all(by.id('adf-search-results-content')).first(); - addButton = element(by.id('add-permission-dialog-confirm-button')); - permissionInheritedButton = element.all(by.css("div[class='adf-inherit_permission_button'] button")).first(); - permissionInheritedButtonText = this.permissionInheritedButton.element(by.css('span')); - noPermissions = element(by.css('div[id="adf-no-permissions-template"]')); - roleDropdown = element(by.id('adf-select-role-permission')); - roleDropdownOptions = element.all(by.css('.mat-option-text')); - assignPermissionError = element(by.css('simple-snack-bar')); - deletePermissionButton = element(by.css(`button[data-automation-id='adf-delete-permission-button']`)); - permissionDisplayContainer = element(by.css(`div[id='adf-permission-display-container']`)); - closeButton = element(by.id('add-permission-dialog-close-button')); + addPermissionButton: ElementFinder = element(by.css("button[data-automation-id='adf-add-permission-button']")); + addPermissionDialog: ElementFinder = element(by.css('adf-add-permission-dialog')); + searchUserInput: ElementFinder = element(by.id('searchInput')); + searchResults: ElementFinder = element(by.css('#adf-add-permission-authority-results #adf-search-results-content')); + addButton: ElementFinder = element(by.id('add-permission-dialog-confirm-button')); + permissionInheritedButton: ElementFinder = element.all(by.css("div[class='adf-inherit_permission_button'] button")).first(); + noPermissions: ElementFinder = element(by.css('div[id="adf-no-permissions-template"]')); + deletePermissionButton: ElementFinder = element(by.css(`button[data-automation-id='adf-delete-permission-button']`)); + permissionDisplayContainer: ElementFinder = element(by.css(`div[id='adf-permission-display-container']`)); + closeButton: ElementFinder = element(by.id('add-permission-dialog-close-button')); - clickCloseButton() { - BrowserActions.click(this.closeButton); + async clickCloseButton(): Promise { + await BrowserActions.click(this.closeButton); } - checkAddPermissionButtonIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.addPermissionButton); + async checkAddPermissionButtonIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.addPermissionButton); } - clickAddPermissionButton() { - BrowserActions.clickExecuteScript('button[data-automation-id="adf-add-permission-button"]'); + async clickAddPermissionButton(): Promise { + await BrowserActions.clickExecuteScript('button[data-automation-id="adf-add-permission-button"]'); } - checkAddPermissionDialogIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.addPermissionDialog); + async checkAddPermissionDialogIsDisplayed() { + await BrowserVisibility.waitUntilElementIsVisible(this.addPermissionDialog); } - checkSearchUserInputIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.searchUserInput); + async checkSearchUserInputIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.searchUserInput); } - searchUserOrGroup(name) { - BrowserActions.clearSendKeys(this.searchUserInput, name); + async searchUserOrGroup(name): Promise { + await BrowserActions.clearSendKeys(this.searchUserInput, name); } - checkResultListIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.searchResults); + async checkResultListIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.searchResults); } - clickUserOrGroup(name) { - const userOrGroupName = element(by.cssContainingText('mat-list-option .mat-list-text', name)); - BrowserActions.click(userOrGroupName); - return BrowserActions.click(this.addButton); + async clickUserOrGroup(name): Promise { + const userOrGroupName: ElementFinder = element(by.cssContainingText('mat-list-option .mat-list-text', name)); + await BrowserActions.click(userOrGroupName); + await BrowserActions.click(this.addButton); } - checkUserOrGroupIsAdded(name) { - const userOrGroupName = element(by.css('div[data-automation-id="text_' + name + '"]')); - BrowserVisibility.waitUntilElementIsVisible(userOrGroupName); + async checkUserOrGroupIsAdded(name): Promise { + const userOrGroupName: ElementFinder = element(by.css('div[data-automation-id="text_' + name + '"]')); + await BrowserVisibility.waitUntilElementIsVisible(userOrGroupName); } - checkUserOrGroupIsDeleted(name) { - const userOrGroupName = element(by.css('div[data-automation-id="text_' + name + '"]')); - BrowserVisibility.waitUntilElementIsNotVisible(userOrGroupName); + async checkUserOrGroupIsDeleted(name): Promise { + const userOrGroupName: ElementFinder = element(by.css('div[data-automation-id="text_' + name + '"]')); + await BrowserVisibility.waitUntilElementIsNotVisible(userOrGroupName); } - checkPermissionInheritedButtonIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.permissionInheritedButton); + async checkPermissionInheritedButtonIsDisplayed() { + await BrowserVisibility.waitUntilElementIsVisible(this.permissionInheritedButton); } - clickPermissionInheritedButton() { - return BrowserActions.click(this.permissionInheritedButton); - + async clickPermissionInheritedButton(): Promise { + await BrowserActions.click(this.permissionInheritedButton); } - clickDeletePermissionButton() { - return BrowserActions.click(this.deletePermissionButton); + async clickDeletePermissionButton(): Promise { + await BrowserActions.click(this.deletePermissionButton); } - checkNoPermissionsIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.noPermissions); + async checkNoPermissionsIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.noPermissions); } - getPermissionInheritedButtonText() { - return BrowserActions.getText(this.permissionInheritedButton); + async getPermissionInheritedButtonText(): Promise { + return await BrowserActions.getText(this.permissionInheritedButton); } - checkPermissionsDatatableIsDisplayed() { - return new DataTableComponentPage(element(by.css('[class*="adf-datatable-permission"]'))); + async checkPermissionsDatatableIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(element(by.css('[class*="adf-datatable-permission"]'))); } - getRoleCellValue(rowName) { - const locator = new DataTableComponentPage().getCellByRowContentAndColumn('Authority ID', rowName, column.role); - return BrowserActions.getText(locator); + async getRoleCellValue(rowName): Promise { + const locator = this.dataTableComponentPage.getCellByRowContentAndColumn('Authority ID', rowName, column.role); + return await BrowserActions.getText(locator); } - clickRoleDropdownByUserOrGroupName(name) { + async clickRoleDropdownByUserOrGroupName(name): Promise { const row = this.dataTableComponentPage.getRow('Authority ID', name); - return BrowserActions.click(row.element(by.id('adf-select-role-permission'))); + await BrowserActions.click(row.element(by.id('adf-select-role-permission'))); } getRoleDropdownOptions() { - BrowserVisibility.waitUntilElementIsVisible(this.roleDropdownOptions.first()); - return this.roleDropdownOptions; + return element.all(by.css('.mat-option-text')); } - selectOption(name) { + async selectOption(name): Promise { const selectProcessDropdown = element(by.cssContainingText('.mat-option-text', name)); - BrowserActions.click(selectProcessDropdown); - return this; + await BrowserActions.click(selectProcessDropdown); } - getAssignPermissionErrorText() { - return BrowserActions.getText(this.assignPermissionError); + async checkPermissionContainerIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.permissionDisplayContainer); } - checkPermissionContainerIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.permissionDisplayContainer); - } - - checkUserOrGroupIsDisplayed(name) { - const userOrGroupName = element(by.cssContainingText('mat-list-option .mat-list-text', name)); - BrowserVisibility.waitUntilElementIsVisible(userOrGroupName); + async checkUserOrGroupIsDisplayed(name): Promise { + const userOrGroupName: ElementFinder = element(by.cssContainingText('mat-list-option .mat-list-text', name)); + await BrowserVisibility.waitUntilElementIsVisible(userOrGroupName); } } diff --git a/e2e/pages/adf/process-services/analyticsPage.ts b/e2e/pages/adf/process-services/analyticsPage.ts index e5802735db..560f3c1266 100644 --- a/e2e/pages/adf/process-services/analyticsPage.ts +++ b/e2e/pages/adf/process-services/analyticsPage.ts @@ -15,46 +15,41 @@ * limitations under the License. */ -import { element, by, protractor } from 'protractor'; +import { element, by, protractor, ElementFinder } from 'protractor'; import { BrowserVisibility, BrowserActions } from '@alfresco/adf-testing'; export class AnalyticsPage { - toolbarTitleInput = element(by.css('input[data-automation-id="reportName"]')); - toolbarTitleContainer = element(by.css('adf-toolbar-title')); - toolbarTitle = element(by.xpath('//mat-toolbar/adf-toolbar-title/div/h4')); - reportMessage = element(by.css('div[class="ng-star-inserted"] span')); + toolbarTitleInput: ElementFinder = element(by.css('input[data-automation-id="reportName"]')); + toolbarTitleContainer: ElementFinder = element(by.css('adf-toolbar-title')); + toolbarTitle: ElementFinder = element(by.xpath('//mat-toolbar/adf-toolbar-title/div/h4')); + reportMessage: ElementFinder = element(by.css('div[class="ng-star-inserted"] span')); - getReport(title) { - const reportTitle = element(by.css(`mat-icon[data-automation-id="${title}_filter"]`)); - BrowserActions.click(reportTitle); + async getReport(title): Promise { + const reportTitle: ElementFinder = element(by.css(`mat-icon[data-automation-id="${title}_filter"]`)); + await BrowserActions.click(reportTitle); } - changeReportTitle(title) { - BrowserActions.click(this.toolbarTitleContainer); - BrowserActions.click(this.toolbarTitleInput); - this.clearReportTitle(); - this.toolbarTitleInput.sendKeys(title); - this.toolbarTitleInput.sendKeys(protractor.Key.ENTER); + async changeReportTitle(title): Promise { + await BrowserActions.click(this.toolbarTitleContainer); + await BrowserActions.click(this.toolbarTitleInput); + await this.clearReportTitle(); + await this.toolbarTitleInput.sendKeys(title); + await this.toolbarTitleInput.sendKeys(protractor.Key.ENTER); } - clearReportTitle() { - BrowserVisibility.waitUntilElementIsVisible(this.toolbarTitleInput); - this.toolbarTitleInput.getAttribute('value').then((value) => { - let i; - for (i = value.length; i >= 0; i--) { - this.toolbarTitleInput.sendKeys(protractor.Key.BACK_SPACE); - } - }); - BrowserVisibility.waitUntilElementIsVisible(this.toolbarTitleInput); + async clearReportTitle(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.toolbarTitleInput); + await BrowserActions.clearSendKeys(this.toolbarTitleInput, ''); + await BrowserVisibility.waitUntilElementIsVisible(this.toolbarTitleInput); } - getReportTitle() { + async getReportTitle(): Promise { return BrowserActions.getText(this.toolbarTitle); } - checkNoReportMessage() { - BrowserVisibility.waitUntilElementIsVisible(this.reportMessage); + async checkNoReportMessage(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.reportMessage); } } diff --git a/e2e/pages/adf/process-services/attachFormPage.ts b/e2e/pages/adf/process-services/attachFormPage.ts index b7d20078d4..66ba62fcba 100644 --- a/e2e/pages/adf/process-services/attachFormPage.ts +++ b/e2e/pages/adf/process-services/attachFormPage.ts @@ -15,63 +15,62 @@ * limitations under the License. */ -import { element, by } from 'protractor'; +import { element, by, ElementFinder } from 'protractor'; import { BrowserVisibility, BrowserActions } from '@alfresco/adf-testing'; export class AttachFormPage { - noFormMessage = element(by.id('adf-no-form-message')); - attachFormButton = element(by.id('adf-no-form-attach-form-button')); - completeButton = element(by.id('adf-no-form-complete-button')); - formDropdown = element(by.id('form_id')); - cancelButton = element(by.id('adf-no-form-cancel-button')); - defaultTitle = element(by.css('mat-card-title[class="mat-card-title mat-card-title"]')); - attachFormDropdown = element(by.css("div[class='adf-attach-form-row']")); + noFormMessage: ElementFinder = element(by.id('adf-no-form-message')); + attachFormButton: ElementFinder = element(by.id('adf-no-form-attach-form-button')); + completeButton: ElementFinder = element(by.id('adf-no-form-complete-button')); + formDropdown: ElementFinder = element(by.id('form_id')); + cancelButton: ElementFinder = element(by.id('adf-no-form-cancel-button')); + defaultTitle: ElementFinder = element(by.css('mat-card-title[class="mat-card-title mat-card-title"]')); + attachFormDropdown: ElementFinder = element(by.css("div[class='adf-attach-form-row']")); - checkNoFormMessageIsDisplayed() { - return BrowserVisibility.waitUntilElementIsVisible(this.noFormMessage); + async checkNoFormMessageIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.noFormMessage); } - checkAttachFormButtonIsDisplayed() { - return BrowserVisibility.waitUntilElementIsVisible(this.attachFormButton); + async checkAttachFormButtonIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.attachFormButton); } - checkCompleteButtonIsDisplayed() { - return BrowserVisibility.waitUntilElementIsVisible(this.completeButton); + async checkCompleteButtonIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.completeButton); } - clickAttachFormButton() { - BrowserActions.click(this.attachFormButton); + async clickAttachFormButton(): Promise { + await BrowserActions.click(this.attachFormButton); } - checkDefaultFormTitleIsDisplayed(formTitle) { - this.defaultTitle.getText().then((result) => { - expect(result).toEqual(formTitle); - }); + async checkDefaultFormTitleIsDisplayed(formTitle): Promise { + const result = await BrowserActions.getText(this.defaultTitle); + await expect(result).toEqual(formTitle); } - checkFormDropdownIsDisplayed() { - return BrowserVisibility.waitUntilElementIsVisible(this.formDropdown); + async checkFormDropdownIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.formDropdown); } - checkCancelButtonIsDisplayed() { - return BrowserVisibility.waitUntilElementIsVisible(this.cancelButton); + async checkCancelButtonIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.cancelButton); } - clickAttachFormDropdown() { - BrowserActions.click(this.attachFormDropdown); + async clickAttachFormDropdown(): Promise { + await BrowserActions.click(this.attachFormDropdown); } - selectAttachFormOption(option) { - BrowserVisibility.waitUntilElementIsClickable(element(by.cssContainingText("mat-option[role='option']", option))); - return element(by.cssContainingText("mat-option[role='option']", option)).click(); + async selectAttachFormOption(option): Promise { + await BrowserVisibility.waitUntilElementIsClickable(element(by.cssContainingText("mat-option[role='option']", option))); + await BrowserActions.click(element(by.cssContainingText("mat-option[role='option']", option))); } - clickCancelButton() { - BrowserActions.click(this.cancelButton); + async clickCancelButton(): Promise { + await BrowserActions.click(this.cancelButton); } - checkAttachFormButtonIsDisabled() { - return BrowserVisibility.waitUntilElementIsVisible(element(by.css('button[id="adf-no-form-attach-form-button"][disabled]'))); + async checkAttachFormButtonIsDisabled(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(element(by.css('button[id="adf-no-form-attach-form-button"][disabled]'))); } } diff --git a/e2e/pages/adf/process-services/attachmentListPage.ts b/e2e/pages/adf/process-services/attachmentListPage.ts index 765ad371de..1dec00c999 100644 --- a/e2e/pages/adf/process-services/attachmentListPage.ts +++ b/e2e/pages/adf/process-services/attachmentListPage.ts @@ -15,7 +15,7 @@ * limitations under the License. */ -import { element, by, protractor, browser } from 'protractor'; +import { element, by, protractor, browser, ElementFinder } from 'protractor'; import path = require('path'); import remote = require('selenium-webdriver/remote'); @@ -23,77 +23,70 @@ import { BrowserVisibility, BrowserActions } from '@alfresco/adf-testing'; export class AttachmentListPage { - attachFileButton = element(by.css("input[type='file']")); - buttonMenu = element(by.css("button[data-automation-id='action_menu_0']")); - viewButton = element(by.css("button[data-automation-id*='MENU_ACTIONS.VIEW_CONTENT']")); - removeButton = element(by.css("button[data-automation-id*='MENU_ACTIONS.REMOVE_CONTENT']")); - downloadButton = element(by.css("button[data-automation-id*='MENU_ACTIONS.DOWNLOAD_CONTENT']")); - noContentContainer = element(by.css("div[class*='adf-no-content-container']")); + attachFileButton: ElementFinder = element(by.css("input[type='file']")); + buttonMenu: ElementFinder = element(by.css("button[data-automation-id='action_menu_0']")); + viewButton: ElementFinder = element(by.css("button[data-automation-id*='MENU_ACTIONS.VIEW_CONTENT']")); + removeButton: ElementFinder = element(by.css("button[data-automation-id*='MENU_ACTIONS.REMOVE_CONTENT']")); + downloadButton: ElementFinder = element(by.css("button[data-automation-id*='MENU_ACTIONS.DOWNLOAD_CONTENT']")); + noContentContainer: ElementFinder = element(by.css("div[class*='adf-no-content-container']")); - checkEmptyAttachmentList() { - BrowserVisibility.waitUntilElementIsVisible(this.noContentContainer); + async checkEmptyAttachmentList(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.noContentContainer); } - clickAttachFileButton(fileLocation) { + async clickAttachFileButton(fileLocation): Promise { browser.setFileDetector(new remote.FileDetector()); - BrowserVisibility.waitUntilElementIsVisible(this.attachFileButton); - return this.attachFileButton.sendKeys(path.resolve(path.join(browser.params.testConfig.main.rootPath, fileLocation))); + await BrowserVisibility.waitUntilElementIsPresent(this.attachFileButton); + await this.attachFileButton.sendKeys(path.resolve(path.join(browser.params.testConfig.main.rootPath, fileLocation))); } - checkFileIsAttached(name) { - const fileAttached = element.all(by.css('div[data-automation-id="' + name + '"]')).first(); - BrowserVisibility.waitUntilElementIsVisible(fileAttached); + async checkFileIsAttached(name): Promise { + const fileAttached: ElementFinder = element.all(by.css('div[data-automation-id="' + name + '"]')).first(); + await BrowserVisibility.waitUntilElementIsVisible(fileAttached); } - checkAttachFileButtonIsNotDisplayed() { - BrowserVisibility.waitUntilElementIsNotVisible(this.attachFileButton); + async checkAttachFileButtonIsNotDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsNotVisible(this.attachFileButton); } - viewFile(name) { - BrowserActions.closeMenuAndDialogs(); - BrowserVisibility.waitUntilElementIsVisible(element.all(by.css('div[data-automation-id="' + name + '"]')).first()); - element.all(by.css('div[data-automation-id="' + name + '"]')).first().click(); - BrowserActions.click(this.buttonMenu); - browser.driver.sleep(500); - BrowserActions.click(this.viewButton); - browser.driver.sleep(500); - return this; + async viewFile(name): Promise { + await BrowserActions.closeMenuAndDialogs(); + await BrowserActions.click(element.all(by.css('div[data-automation-id="' + name + '"]')).first()); + await BrowserActions.click(this.buttonMenu); + await browser.sleep(500); + await BrowserActions.click(this.viewButton); + await browser.sleep(500); } - removeFile(name) { - BrowserActions.closeMenuAndDialogs(); - BrowserVisibility.waitUntilElementIsVisible(element.all(by.css('div[data-automation-id="' + name + '"]')).first()); - element.all(by.css('div[data-automation-id="' + name + '"]')).first().click(); - BrowserActions.click(this.buttonMenu); - browser.driver.sleep(500); - BrowserActions.click(this.removeButton); - browser.driver.sleep(500); - return this; + async removeFile(name): Promise { + await BrowserActions.closeMenuAndDialogs(); + await BrowserActions.click(element.all(by.css('div[data-automation-id="' + name + '"]')).first()); + await BrowserActions.click(this.buttonMenu); + await browser.sleep(500); + await BrowserActions.click(this.removeButton); + await browser.sleep(500); } - downloadFile(name) { - BrowserActions.closeMenuAndDialogs(); - BrowserVisibility.waitUntilElementIsVisible(element.all(by.css('div[data-automation-id="' + name + '"]')).first()); - element.all(by.css('div[data-automation-id="' + name + '"]')).first().click(); - BrowserActions.click(this.buttonMenu); - browser.driver.sleep(500); - BrowserActions.click(this.downloadButton); - return this; + async downloadFile(name): Promise { + await BrowserActions.closeMenuAndDialogs(); + await BrowserActions.click(element.all(by.css('div[data-automation-id="' + name + '"]')).first()); + await BrowserActions.click(this.buttonMenu); + await browser.sleep(500); + await BrowserActions.click(this.downloadButton); } - doubleClickFile(name) { - BrowserActions.closeMenuAndDialogs(); - BrowserVisibility.waitUntilElementIsVisible(element.all(by.css('div[data-automation-id="' + name + '"]')).first()); - const fileAttached = element.all(by.css('div[data-automation-id="' + name + '"]')).first(); - BrowserActions.click(fileAttached); - browser.actions().sendKeys(protractor.Key.ENTER).perform(); + async doubleClickFile(name): Promise { + await BrowserActions.closeMenuAndDialogs(); + await BrowserVisibility.waitUntilElementIsVisible(element.all(by.css('div[data-automation-id="' + name + '"]')).first()); + const fileAttached: ElementFinder = element.all(by.css('div[data-automation-id="' + name + '"]')).first(); + await BrowserActions.click(fileAttached); + await browser.actions().sendKeys(protractor.Key.ENTER).perform(); } - checkFileIsRemoved(name) { - const fileAttached = element.all(by.css('div[data-automation-id="' + name + '"]')).first(); - BrowserVisibility.waitUntilElementIsNotVisible(fileAttached); - return this; + async checkFileIsRemoved(name): Promise { + const fileAttached: ElementFinder = element.all(by.css('div[data-automation-id="' + name + '"]')).first(); + await BrowserVisibility.waitUntilElementIsNotVisible(fileAttached); } } diff --git a/e2e/pages/adf/process-services/dialog/appSettingsToggles.ts b/e2e/pages/adf/process-services/dialog/appSettingsToggles.ts index bc02c004ce..69ec4d1aad 100644 --- a/e2e/pages/adf/process-services/dialog/appSettingsToggles.ts +++ b/e2e/pages/adf/process-services/dialog/appSettingsToggles.ts @@ -16,34 +16,30 @@ */ import { FormControllersPage } from '@alfresco/adf-testing'; -import { element, by } from 'protractor'; +import { element, by, ElementFinder } from 'protractor'; export class AppSettingsToggles { - formControllersPage = new FormControllersPage(); + formControllersPage: FormControllersPage = new FormControllersPage(); - showDetailsHeaderToggle = element(by.id('adf-show-header')); - showTaskFilterIconsToggle = element(by.id('adf-show-task-filter-icon')); - showProcessFilterIconsToggle = element(by.id('adf-show-process-filter-icon')); + showDetailsHeaderToggle: ElementFinder = element(by.id('adf-show-header')); + showTaskFilterIconsToggle: ElementFinder = element(by.id('adf-show-task-filter-icon')); + showProcessFilterIconsToggle: ElementFinder = element(by.id('adf-show-process-filter-icon')); - enableShowHeader() { - this.formControllersPage.enableToggle(this.showDetailsHeaderToggle); - return this; + async enableShowHeader(): Promise { + await this.formControllersPage.enableToggle(this.showDetailsHeaderToggle); } - disableShowHeader() { - this.formControllersPage.disableToggle(this.showDetailsHeaderToggle); - return this; + async disableShowHeader(): Promise { + await this.formControllersPage.disableToggle(this.showDetailsHeaderToggle); } - enableTaskFiltersIcon() { - this.formControllersPage.enableToggle(this.showTaskFilterIconsToggle); - return this; + async enableTaskFiltersIcon(): Promise { + await this.formControllersPage.enableToggle(this.showTaskFilterIconsToggle); } - enableProcessFiltersIcon() { - this.formControllersPage.enableToggle(this.showProcessFilterIconsToggle); - return this; + async enableProcessFiltersIcon(): Promise { + await this.formControllersPage.enableToggle(this.showProcessFilterIconsToggle); } } diff --git a/e2e/pages/adf/process-services/dialog/createChecklistDialog.ts b/e2e/pages/adf/process-services/dialog/createChecklistDialog.ts index 3597d56fd8..e387549f05 100644 --- a/e2e/pages/adf/process-services/dialog/createChecklistDialog.ts +++ b/e2e/pages/adf/process-services/dialog/createChecklistDialog.ts @@ -15,49 +15,46 @@ * limitations under the License. */ -import { element, by } from 'protractor'; +import { element, by, ElementFinder } from 'protractor'; import { BrowserVisibility, BrowserActions } from '@alfresco/adf-testing'; export class ChecklistDialog { - nameField = element(by.css('input[data-automation-id="checklist-name"]')); - addChecklistButton = element(by.css('button[id="add-check"] span')); - closeButton = element(by.css('button[id="close-check-dialog"] span')); - dialogTitle = element(by.id('add-checklist-title')); + nameField: ElementFinder = element(by.css('input[data-automation-id="checklist-name"]')); + addChecklistButton: ElementFinder = element(by.css('button[id="add-check"] span')); + closeButton: ElementFinder = element(by.css('button[id="close-check-dialog"] span')); + dialogTitle: ElementFinder = element(by.id('add-checklist-title')); - addName(name) { - BrowserVisibility.waitUntilElementIsClickable(this.nameField); - BrowserActions.clearSendKeys(this.nameField, name); - return this; + async addName(name): Promise { + await BrowserVisibility.waitUntilElementIsClickable(this.nameField); + await BrowserActions.clearSendKeys(this.nameField, name); } - clickCreateChecklistButton() { - BrowserActions.click(this.addChecklistButton); + async clickCreateChecklistButton(): Promise { + await BrowserActions.click(this.addChecklistButton); } - clickCancelButton() { - BrowserActions.click(this.closeButton); + async clickCancelButton(): Promise { + await BrowserActions.click(this.closeButton); } - getDialogTitle() { + getDialogTitle(): Promise { return BrowserActions.getText(this.dialogTitle); } - getNameFieldPlaceholder() { - BrowserVisibility.waitUntilElementIsVisible(this.nameField); + async getNameFieldPlaceholder(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.nameField); return this.nameField.getAttribute('placeholder'); } - checkCancelButtonIsEnabled() { - BrowserVisibility.waitUntilElementIsVisible(this.closeButton); - BrowserVisibility.waitUntilElementIsClickable(this.closeButton); - return this; + async checkCancelButtonIsEnabled(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.closeButton); + await BrowserVisibility.waitUntilElementIsClickable(this.closeButton); } - checkAddChecklistButtonIsEnabled() { - BrowserVisibility.waitUntilElementIsVisible(this.addChecklistButton); - BrowserVisibility.waitUntilElementIsClickable(this.addChecklistButton); - return this; + async checkAddChecklistButtonIsEnabled(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.addChecklistButton); + await BrowserVisibility.waitUntilElementIsClickable(this.addChecklistButton); } } diff --git a/e2e/pages/adf/process-services/dialog/startTaskDialog.ts b/e2e/pages/adf/process-services/dialog/startTaskDialog.ts index ed020b88c8..732ab15150 100644 --- a/e2e/pages/adf/process-services/dialog/startTaskDialog.ts +++ b/e2e/pages/adf/process-services/dialog/startTaskDialog.ts @@ -15,96 +15,86 @@ * limitations under the License. */ -import { element, by, Key } from 'protractor'; +import { element, by, Key, ElementFinder } from 'protractor'; import { BrowserVisibility, BrowserActions } from '@alfresco/adf-testing'; export class StartTaskDialog { - name = element(by.css('input[id="name_id"]')); - dueDate = element(by.css('input[id="date_id"]')); - description = element(by.css('textarea[id="description_id"]')); - assignee = element(by.css('div#people-widget-content input')); - startButton = element(by.css('button[id="button-start"]')); - startButtonEnabled = element(by.css('button[id="button-start"]:not(disabled)')); - cancelButton = element(by.css('button[id="button-cancel"]')); - formDropDown = element(by.css('mat-select[id="form_id"]')); + name: ElementFinder = element(by.css('input[id="name_id"]')); + dueDate: ElementFinder = element(by.css('input[id="date_id"]')); + description: ElementFinder = element(by.css('textarea[id="description_id"]')); + assignee: ElementFinder = element(by.css('div#people-widget-content input')); + startButton: ElementFinder = element(by.css('button[id="button-start"]')); + startButtonEnabled: ElementFinder = element(by.css('button[id="button-start"]:not(disabled)')); + cancelButton: ElementFinder = element(by.css('button[id="button-cancel"]')); + formDropDown: ElementFinder = element(by.css('mat-select[id="form_id"]')); - addName(userName) { - BrowserVisibility.waitUntilElementIsVisible(this.name); - this.name.clear(); - this.name.sendKeys(userName); - return this; + async addName(userName): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.name); + await this.name.clear(); + await this.name.sendKeys(userName); } - addDescription(userDescription) { - BrowserVisibility.waitUntilElementIsVisible(this.description); - this.description.sendKeys(userDescription); - return this; + async addDescription(userDescription): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.description); + await this.description.sendKeys(userDescription); } - addDueDate(date) { - BrowserVisibility.waitUntilElementIsVisible(this.dueDate); - this.dueDate.sendKeys(date); - return this; + async addDueDate(date): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.dueDate); + await this.dueDate.sendKeys(date); } - addAssignee(name) { - BrowserVisibility.waitUntilElementIsVisible(this.assignee); - this.assignee.sendKeys(name); - this.selectAssigneeFromList(name); - return this; + async addAssignee(name): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.assignee); + await this.assignee.sendKeys(name); + await this.selectAssigneeFromList(name); } - selectAssigneeFromList(name) { - const assigneeRow = element(by.cssContainingText('mat-option span.adf-people-label-name', name)); - BrowserActions.click(assigneeRow); - BrowserVisibility.waitUntilElementIsNotVisible(assigneeRow); - return this; + async selectAssigneeFromList(name): Promise { + const assigneeRow: ElementFinder = element(by.cssContainingText('mat-option span.adf-people-label-name', name)); + await BrowserActions.click(assigneeRow); + await BrowserVisibility.waitUntilElementIsNotVisible(assigneeRow); } - getAssignee() { - BrowserVisibility.waitUntilElementIsVisible(this.assignee); + async getAssignee(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.assignee); return this.assignee.getAttribute('placeholder'); } - addForm(form) { - BrowserActions.click(this.formDropDown); + async addForm(form): Promise { + await BrowserActions.click(this.formDropDown); return this.selectForm(form); } - selectForm(form) { - const option = element(by.cssContainingText('span[class*="mat-option-text"]', form)); - BrowserActions.click(option); - return this; + async selectForm(form): Promise { + const option: ElementFinder = element(by.cssContainingText('span[class*="mat-option-text"]', form)); + await BrowserActions.click(option); } - clickStartButton() { + async clickStartButton(): Promise { return BrowserActions.click(this.startButton); } - checkStartButtonIsEnabled() { - BrowserVisibility.waitUntilElementIsVisible(this.startButtonEnabled); - return this; + async checkStartButtonIsEnabled(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.startButtonEnabled); } - checkStartButtonIsDisabled() { - BrowserVisibility.waitUntilElementIsVisible(element(by.css('button[id="button-start"]:disabled'))); - return this; + async checkStartButtonIsDisabled(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(element(by.css('button[id="button-start"]:disabled'))); } - clickCancelButton() { - return BrowserActions.click(this.cancelButton); + async clickCancelButton(): Promise { + await BrowserActions.click(this.cancelButton); } - blur(locator) { - BrowserActions.click(locator); - locator.sendKeys(Key.TAB); - return this; + async blur(locator): Promise { + await BrowserActions.click(locator); + await locator.sendKeys(Key.TAB); } - checkValidationErrorIsDisplayed(error, elementRef = 'mat-error') { - const errorElement = element(by.cssContainingText(elementRef, error)); - BrowserVisibility.waitUntilElementIsVisible(errorElement); - return this; + async checkValidationErrorIsDisplayed(error, elementRef = 'mat-error'): Promise { + const errorElement: ElementFinder = element(by.cssContainingText(elementRef, error)); + await BrowserVisibility.waitUntilElementIsVisible(errorElement); } } diff --git a/e2e/pages/adf/process-services/filtersPage.ts b/e2e/pages/adf/process-services/filtersPage.ts index 5940bfe673..48be289bf9 100644 --- a/e2e/pages/adf/process-services/filtersPage.ts +++ b/e2e/pages/adf/process-services/filtersPage.ts @@ -15,31 +15,30 @@ * limitations under the License. */ -import { by, element } from 'protractor'; +import { by, element, ElementFinder } from 'protractor'; import { DataTableComponentPage } from '@alfresco/adf-testing'; import { BrowserActions } from '@alfresco/adf-testing'; export class FiltersPage { - activeFilter = element(by.css('mat-list-item[class*="active"]')); - dataTable = new DataTableComponentPage(); + activeFilter: ElementFinder = element(by.css('mat-list-item[class*="active"]')); + dataTable: DataTableComponentPage = new DataTableComponentPage(); - getActiveFilter() { + async getActiveFilter(): Promise { return BrowserActions.getText(this.activeFilter); } - goToFilter(filterName) { - BrowserActions.closeMenuAndDialogs(); - BrowserActions.clickExecuteScript(`span[data-automation-id="${filterName}_filter"]`); - return this; + async goToFilter(filterName): Promise { + await BrowserActions.closeMenuAndDialogs(); + await BrowserActions.clickExecuteScript(`span[data-automation-id="${filterName}_filter"]`); } - sortByName(sortOrder: string) { - this.dataTable.sortByColumn(sortOrder, 'name'); + async sortByName(sortOrder: string): Promise { + await this.dataTable.sortByColumn(sortOrder, 'name'); } - getAllRowsNameColumn() { - return this.dataTable.getAllRowsColumnValues('Name'); + async getAllRowsNameColumn() { + return await this.dataTable.getAllRowsColumnValues('Name'); } } diff --git a/e2e/pages/adf/process-services/processDetailsPage.ts b/e2e/pages/adf/process-services/processDetailsPage.ts index 44328eb13a..e847cd0d4c 100644 --- a/e2e/pages/adf/process-services/processDetailsPage.ts +++ b/e2e/pages/adf/process-services/processDetailsPage.ts @@ -15,146 +15,143 @@ * limitations under the License. */ -import { by, element, protractor } from 'protractor'; +import { by, element, ElementFinder, protractor } from 'protractor'; import { BrowserVisibility, BrowserActions } from '@alfresco/adf-testing'; export class ProcessDetailsPage { // Process Details - processTitle = element(by.css('mat-card-title[class="mat-card-title"]')); - processDetailsMessage = element(by.css('adf-process-instance-details div[class="ng-star-inserted"]')); - processStatusField = element(by.css('span[data-automation-id="card-textitem-value-status"]')); - processEndDateField = element(by.css('span[data-automation-id="card-dateitem-ended"]')); - processCategoryField = element(by.css('span[data-automation-id="card-textitem-value-category"]')); - processBusinessKeyField = element(by.css('span[data-automation-id="card-textitem-value-businessKey"]')); - processCreatedByField = element(by.css('span[data-automation-id="card-textitem-value-assignee"]')); - processCreatedField = element(by.css('span[data-automation-id="card-dateitem-created"]')); - processIdField = element(by.css('span[data-automation-id="card-textitem-value-id"]')); - processDescription = element(by.css('span[data-automation-id="card-textitem-value-description"]')); - showDiagramButtonDisabled = element(by.css('button[id="show-diagram-button"][disabled]')); - propertiesList = element(by.css('div[class="adf-property-list"]')); + processTitle: ElementFinder = element(by.css('mat-card-title[class="mat-card-title"]')); + processDetailsMessage: ElementFinder = element(by.css('adf-process-instance-details div[class="ng-star-inserted"]')); + processStatusField: ElementFinder = element(by.css('span[data-automation-id="card-textitem-value-status"]')); + processEndDateField: ElementFinder = element(by.css('span[data-automation-id="card-dateitem-ended"]')); + processCategoryField: ElementFinder = element(by.css('span[data-automation-id="card-textitem-value-category"]')); + processBusinessKeyField: ElementFinder = element(by.css('span[data-automation-id="card-textitem-value-businessKey"]')); + processCreatedByField: ElementFinder = element(by.css('span[data-automation-id="card-textitem-value-assignee"]')); + processCreatedField: ElementFinder = element(by.css('span[data-automation-id="card-dateitem-created"]')); + processIdField: ElementFinder = element(by.css('span[data-automation-id="card-textitem-value-id"]')); + processDescription: ElementFinder = element(by.css('span[data-automation-id="card-textitem-value-description"]')); + showDiagramButtonDisabled: ElementFinder = element(by.css('button[id="show-diagram-button"][disabled]')); + propertiesList: ElementFinder = element(by.css('div[class="adf-property-list"]')); // Show Diagram - showDiagramButton = element(by.id('show-diagram-button')); - diagramCanvas = element(by.css('svg[xmlns="http://www.w3.org/2000/svg"]')); - backButton = element(by.css('app-show-diagram button[class="mat-mini-fab mat-accent"]')); + showDiagramButton: ElementFinder = element(by.id('show-diagram-button')); + diagramCanvas: ElementFinder = element(by.css('svg[xmlns="http://www.w3.org/2000/svg"]')); + backButton: ElementFinder = element(by.css('app-show-diagram button[class="mat-mini-fab mat-accent"]')); // Comments - commentInput = element(by.id('comment-input')); + commentInput: ElementFinder = element(by.id('comment-input')); // Audit Log - auditLogButton = element(by.css('button[adf-process-audit]')); + auditLogButton: ElementFinder = element(by.css('button[adf-process-audit]')); // Cancel Process button - cancelProcessButton = element(by.css('div[data-automation-id="header-status"] > button')); + cancelProcessButton: ElementFinder = element(by.css('div[data-automation-id="header-status"] > button')); // Tasks - activeTask = element(by.css('div[data-automation-id="active-tasks"]')); - startForm = element(by.css('div[data-automation-id="start-form"]')); - completedTask = element(by.css('div[data-automation-id="completed-tasks"]')); - taskTitle = element(by.css('h2[class="adf-activiti-task-details__header"]')); + activeTask: ElementFinder = element(by.css('div[data-automation-id="active-tasks"]')); + startForm: ElementFinder = element(by.css('div[data-automation-id="start-form"]')); + completedTask: ElementFinder = element(by.css('div[data-automation-id="completed-tasks"]')); + taskTitle: ElementFinder = element(by.css('h2[class="adf-activiti-task-details__header"]')); - checkDetailsAreDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.processStatusField); - BrowserVisibility.waitUntilElementIsVisible(this.processEndDateField); - BrowserVisibility.waitUntilElementIsVisible(this.processCategoryField); - BrowserVisibility.waitUntilElementIsVisible(this.processBusinessKeyField); - BrowserVisibility.waitUntilElementIsVisible(this.processCreatedByField); - BrowserVisibility.waitUntilElementIsVisible(this.processCreatedField); - BrowserVisibility.waitUntilElementIsVisible(this.processIdField); - BrowserVisibility.waitUntilElementIsVisible(this.processDescription); - BrowserVisibility.waitUntilElementIsVisible(this.showDiagramButton); - BrowserVisibility.waitUntilElementIsVisible(this.activeTask); - BrowserVisibility.waitUntilElementIsVisible(this.cancelProcessButton); - BrowserVisibility.waitUntilElementIsVisible(this.commentInput); - BrowserVisibility.waitUntilElementIsVisible(this.auditLogButton); - return this; + async checkDetailsAreDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.processStatusField); + await BrowserVisibility.waitUntilElementIsVisible(this.processEndDateField); + await BrowserVisibility.waitUntilElementIsVisible(this.processCategoryField); + await BrowserVisibility.waitUntilElementIsVisible(this.processBusinessKeyField); + await BrowserVisibility.waitUntilElementIsVisible(this.processCreatedByField); + await BrowserVisibility.waitUntilElementIsVisible(this.processCreatedField); + await BrowserVisibility.waitUntilElementIsVisible(this.processIdField); + await BrowserVisibility.waitUntilElementIsVisible(this.processDescription); + await BrowserVisibility.waitUntilElementIsVisible(this.showDiagramButton); + await BrowserVisibility.waitUntilElementIsVisible(this.activeTask); + await BrowserVisibility.waitUntilElementIsVisible(this.cancelProcessButton); + await BrowserVisibility.waitUntilElementIsVisible(this.commentInput); + await BrowserVisibility.waitUntilElementIsVisible(this.auditLogButton); } - checkProcessTitleIsDisplayed() { + checkProcessTitleIsDisplayed(): Promise { return BrowserActions.getText(this.processTitle); } - checkProcessDetailsMessage() { + checkProcessDetailsMessage(): Promise { return BrowserActions.getText(this.processDetailsMessage); } - getProcessStatus() { + getProcessStatus(): Promise { return BrowserActions.getText(this.processStatusField); } - getEndDate() { + getEndDate(): Promise { return BrowserActions.getText(this.processEndDateField); } - getProcessCategory() { + getProcessCategory(): Promise { return BrowserActions.getText(this.processCategoryField); } - getBusinessKey() { + getBusinessKey(): Promise { return BrowserActions.getText(this.processBusinessKeyField); } - getCreatedBy() { + getCreatedBy(): Promise { return BrowserActions.getText(this.processCreatedByField); } - getCreated() { + getCreated(): Promise { return BrowserActions.getText(this.processCreatedField); } - getId() { + getId(): Promise { return BrowserActions.getText(this.processIdField); } - getProcessDescription() { + getProcessDescription(): Promise { return BrowserActions.getText(this.processDescription); } - clickShowDiagram() { - BrowserActions.click(this.showDiagramButton); - BrowserVisibility.waitUntilElementIsVisible(this.diagramCanvas); - BrowserActions.click(this.backButton); + async clickShowDiagram(): Promise { + await BrowserActions.click(this.showDiagramButton); + await BrowserVisibility.waitUntilElementIsVisible(this.diagramCanvas); + await BrowserActions.click(this.backButton); } - checkShowDiagramIsDisabled() { - BrowserVisibility.waitUntilElementIsVisible(this.showDiagramButtonDisabled); + async checkShowDiagramIsDisabled(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.showDiagramButtonDisabled); } - addComment(comment) { - BrowserVisibility.waitUntilElementIsVisible(this.commentInput); - this.commentInput.sendKeys(comment); - this.commentInput.sendKeys(protractor.Key.ENTER); - return this; + async addComment(comment): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.commentInput); + await this.commentInput.sendKeys(comment); + await this.commentInput.sendKeys(protractor.Key.ENTER); } - checkCommentIsDisplayed(comment) { - const commentInserted = element(by.cssContainingText('div[id="comment-message"]', comment)); - BrowserVisibility.waitUntilElementIsVisible(commentInserted); - return this; + async checkCommentIsDisplayed(comment): Promise { + const commentInserted: ElementFinder = element(by.cssContainingText('div[id="comment-message"]', comment)); + await BrowserVisibility.waitUntilElementIsVisible(commentInserted); } - clickAuditLogButton() { - BrowserActions.click(this.auditLogButton); + async clickAuditLogButton(): Promise { + await BrowserActions.click(this.auditLogButton); } - clickCancelProcessButton() { - BrowserActions.click(this.cancelProcessButton); + async clickCancelProcessButton(): Promise { + await BrowserActions.click(this.cancelProcessButton); } - clickOnActiveTask() { - return BrowserActions.click(this.activeTask); + async clickOnActiveTask(): Promise { + await BrowserActions.click(this.activeTask); } - clickOnStartForm() { - return BrowserActions.click(this.startForm); + async clickOnStartForm(): Promise { + await BrowserActions.click(this.startForm); } - clickOnCompletedTask() { - return BrowserActions.click(this.completedTask); + async clickOnCompletedTask(): Promise { + await BrowserActions.click(this.completedTask); } - checkActiveTaskTitleIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.taskTitle); + async checkActiveTaskTitleIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.taskTitle); } - checkProcessDetailsCard() { - BrowserVisibility.waitUntilElementIsVisible(this.propertiesList); + async checkProcessDetailsCard(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.propertiesList); } } diff --git a/e2e/pages/adf/process-services/processFiltersPage.ts b/e2e/pages/adf/process-services/processFiltersPage.ts index b712ccd263..01d45e0494 100644 --- a/e2e/pages/adf/process-services/processFiltersPage.ts +++ b/e2e/pages/adf/process-services/processFiltersPage.ts @@ -15,7 +15,7 @@ * limitations under the License. */ -import { element, by } from 'protractor'; +import { element, by, ElementFinder, Locator } from 'protractor'; import { StartProcessPage } from './startProcessPage'; import { DataTableComponentPage } from '@alfresco/adf-testing'; import { BrowserVisibility, BrowserActions } from '@alfresco/adf-testing'; @@ -23,74 +23,73 @@ import { BrowserVisibility, BrowserActions } from '@alfresco/adf-testing'; export class ProcessFiltersPage { dataTable = new DataTableComponentPage(); - runningFilter = element(by.css('span[data-automation-id="Running_filter"]')); - completedFilter = element(by.css('div[class="mat-list-text"] > span[data-automation-id="Completed_filter"]')); - allFilter = element(by.css('span[data-automation-id="All_filter"]')); - createProcessButton = element(by.css('.adf-processes-menu button[data-automation-id="create-button"] > span')); - newProcessButton = element(by.css('div > button[data-automation-id="btn-start-process"]')); - processesPage = element(by.css('div[class="adf-grid"] > div[class="adf-grid-item adf-processes-menu"]')); - accordionMenu = element(by.css('.adf-processes-menu mat-accordion')); - buttonWindow = element(by.css('div > button[data-automation-id="btn-start-process"] > div')); - noContentMessage = element.all(by.css('div[class="adf-empty-content__title"]')).first(); - rows = by.css('adf-process-instance-list div[class="adf-datatable-body"] div[class*="adf-datatable-row"]'); - tableBody = element.all(by.css('adf-datatable div[class="adf-datatable-body"]')).first(); - nameColumn = by.css('div[class*="adf-datatable-body"] div[class*="adf-datatable-row"] div[title="Name"] span'); - processIcon = by.xpath('ancestor::div[@class="mat-list-item-content"]/mat-icon'); + runningFilter: ElementFinder = element(by.css('span[data-automation-id="Running_filter"]')); + completedFilter: ElementFinder = element(by.css('div[class="mat-list-text"] > span[data-automation-id="Completed_filter"]')); + allFilter: ElementFinder = element(by.css('span[data-automation-id="All_filter"]')); + createProcessButton: ElementFinder = element(by.css('.adf-processes-menu button[data-automation-id="create-button"] > span')); + newProcessButton: ElementFinder = element(by.css('div > button[data-automation-id="btn-start-process"]')); + processesPage: ElementFinder = element(by.css('div[class="adf-grid"] > div[class="adf-grid-item adf-processes-menu"]')); + accordionMenu: ElementFinder = element(by.css('.adf-processes-menu mat-accordion')); + buttonWindow: ElementFinder = element(by.css('div > button[data-automation-id="btn-start-process"] > div')); + noContentMessage: ElementFinder = element.all(by.css('div[class="adf-empty-content__title"]')).first(); + rows: Locator = by.css('adf-process-instance-list div[class="adf-datatable-body"] div[class*="adf-datatable-row"]'); + tableBody: ElementFinder = element.all(by.css('adf-datatable div[class="adf-datatable-body"]')).first(); + nameColumn: Locator = by.css('div[class*="adf-datatable-body"] div[class*="adf-datatable-row"] div[title="Name"] span'); + processIcon: Locator = by.xpath('ancestor::div[@class="mat-list-item-content"]/mat-icon'); - startProcess() { - this.clickCreateProcessButton(); - this.clickNewProcessDropdown(); + async startProcess(): Promise { + await this.clickCreateProcessButton(); + await this.clickNewProcessDropdown(); return new StartProcessPage(); } - clickRunningFilterButton() { - return BrowserActions.click(this.runningFilter); - + async clickRunningFilterButton(): Promise { + await BrowserActions.click(this.runningFilter); } - clickCompletedFilterButton() { - BrowserActions.click(this.completedFilter); - expect(this.completedFilter.isEnabled()).toBe(true); + async clickCompletedFilterButton(): Promise { + await BrowserActions.click(this.completedFilter); + await expect(await this.completedFilter.isEnabled()).toBe(true); } - clickAllFilterButton() { - BrowserActions.click(this.allFilter); - expect(this.allFilter.isEnabled()).toBe(true); + async clickAllFilterButton(): Promise { + await BrowserActions.click(this.allFilter); + await expect(await this.allFilter.isEnabled()).toBe(true); } - clickCreateProcessButton() { - BrowserActions.closeMenuAndDialogs(); - BrowserVisibility.waitUntilElementIsOnPage(this.accordionMenu); - BrowserVisibility.waitUntilElementIsVisible(this.processesPage); - BrowserActions.click(this.createProcessButton); + async clickCreateProcessButton(): Promise { + await BrowserActions.closeMenuAndDialogs(); + await BrowserVisibility.waitUntilElementIsVisible(this.accordionMenu); + await BrowserVisibility.waitUntilElementIsVisible(this.processesPage); + await BrowserActions.click(this.createProcessButton); } - clickNewProcessDropdown() { - BrowserVisibility.waitUntilElementIsOnPage(this.buttonWindow); - BrowserActions.click(this.newProcessButton); + async clickNewProcessDropdown(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.buttonWindow); + await BrowserActions.click(this.newProcessButton); } - checkNoContentMessage() { - return BrowserVisibility.waitUntilElementIsVisible(this.noContentMessage); + async checkNoContentMessage(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.noContentMessage); } - selectFromProcessList(title) { - BrowserActions.closeMenuAndDialogs(); - const processName = element.all(by.css(`div[data-automation-id="text_${title}"]`)).first(); - BrowserActions.click(processName); + async selectFromProcessList(title): Promise { + await BrowserActions.closeMenuAndDialogs(); + const processName: ElementFinder = element.all(by.css(`div[data-automation-id="text_${title}"]`)).first(); + await BrowserActions.click(processName); } - checkFilterIsHighlighted(filterName) { - const processNameHighlighted = element(by.css(`mat-list-item.adf-active span[data-automation-id='${filterName}_filter']`)); - BrowserVisibility.waitUntilElementIsVisible(processNameHighlighted); + async checkFilterIsHighlighted(filterName): Promise { + const processNameHighlighted: ElementFinder = element(by.css(`mat-list-item.adf-active span[data-automation-id='${filterName}_filter']`)); + await BrowserVisibility.waitUntilElementIsVisible(processNameHighlighted); } - numberOfProcessRows() { - return element.all(this.rows).count(); + async numberOfProcessRows(): Promise { + return await element.all(this.rows).count(); } - waitForTableBody() { - BrowserVisibility.waitUntilElementIsVisible(this.tableBody); + async waitForTableBody(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.tableBody); } /** @@ -98,50 +97,48 @@ export class ProcessFiltersPage { * * @param sortOrder : 'ASC' to sort the list ascendant and 'DESC' for descendant */ - sortByName(sortOrder: string) { - this.dataTable.sortByColumn(sortOrder, 'name'); + async sortByName(sortOrder: string) { + await this.dataTable.sortByColumn(sortOrder, 'name'); } - getAllRowsNameColumn() { - return this.dataTable.getAllRowsColumnValues('Name'); + async getAllRowsNameColumn() { + return await this.dataTable.getAllRowsColumnValues('Name'); } - checkFilterIsDisplayed(name) { - const filterName = element(by.css(`span[data-automation-id='${name}_filter']`)); - return BrowserVisibility.waitUntilElementIsVisible(filterName); + async checkFilterIsDisplayed(name): Promise { + const filterName: ElementFinder = element(by.css(`span[data-automation-id='${name}_filter']`)); + await BrowserVisibility.waitUntilElementIsVisible(filterName); } - checkFilterHasNoIcon(name) { - const filterName = element(by.css(`span[data-automation-id='${name}_filter']`)); - BrowserVisibility.waitUntilElementIsVisible(filterName); - return BrowserVisibility.waitUntilElementIsNotOnPage(filterName.element(this.processIcon)); + async checkFilterHasNoIcon(name): Promise { + const filterName: ElementFinder = element(by.css(`span[data-automation-id='${name}_filter']`)); + await BrowserVisibility.waitUntilElementIsVisible(filterName); + await BrowserVisibility.waitUntilElementIsNotVisible(filterName.element(this.processIcon)); } - getFilterIcon(name) { - const filterName = element(by.css(`span[data-automation-id='${name}_filter']`)); - BrowserVisibility.waitUntilElementIsVisible(filterName); + async getFilterIcon(name): Promise { + const filterName: ElementFinder = element(by.css(`span[data-automation-id='${name}_filter']`)); + await BrowserVisibility.waitUntilElementIsVisible(filterName); const icon = filterName.element(this.processIcon); - return BrowserActions.getText(icon); + return await BrowserActions.getText(icon); } - checkFilterIsNotDisplayed(name) { - const filterName = element(by.css(`span[data-automation-id='${name}_filter']`)); - return BrowserVisibility.waitUntilElementIsNotVisible(filterName); + async checkFilterIsNotDisplayed(name): Promise { + const filterName: ElementFinder = element(by.css(`span[data-automation-id='${name}_filter']`)); + await BrowserVisibility.waitUntilElementIsNotVisible(filterName); } - checkProcessesSortedByNameAsc() { - this.getAllRowsNameColumn().then((list) => { - for (let i = 1; i < list.length; i++) { - expect(JSON.stringify(list[i]) > JSON.stringify(list[i - 1])).toEqual(true); - } - }); + async checkProcessesSortedByNameAsc(): Promise { + const list = await this.getAllRowsNameColumn(); + for (let i = 1; i < list.length; i++) { + await expect(JSON.stringify(list[i]) > JSON.stringify(list[i - 1])).toEqual(true); + } } - checkProcessesSortedByNameDesc() { - this.getAllRowsNameColumn().then((list) => { - for (let i = 1; i < list.length; i++) { - expect(JSON.stringify(list[i]) < JSON.stringify(list[i - 1])).toEqual(true); - } - }); + async checkProcessesSortedByNameDesc(): Promise { + const list = await this.getAllRowsNameColumn(); + for (let i = 1; i < list.length; i++) { + await expect(JSON.stringify(list[i]) < JSON.stringify(list[i - 1])).toEqual(true); + } } } diff --git a/e2e/pages/adf/process-services/processListPage.ts b/e2e/pages/adf/process-services/processListPage.ts index b875b1b4b4..200447e308 100644 --- a/e2e/pages/adf/process-services/processListPage.ts +++ b/e2e/pages/adf/process-services/processListPage.ts @@ -16,19 +16,19 @@ */ import { BrowserVisibility, BrowserActions } from '@alfresco/adf-testing'; -import { element, by } from 'protractor'; +import { element, by, ElementFinder } from 'protractor'; export class ProcessListPage { - processListTitle = element.all(by.css("div[class='adf-empty-content__title']")).first(); - processInstanceList = element(by.css('adf-process-instance-list')); + processListTitle: ElementFinder = element.all(by.css("div[class='adf-empty-content__title']")).first(); + processInstanceList: ElementFinder = element(by.css('adf-process-instance-list')); - checkProcessListTitleIsDisplayed() { + getDisplayedProcessListTitle(): Promise { return BrowserActions.getText(this.processListTitle); } - checkProcessListIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.processInstanceList); + async checkProcessListIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.processInstanceList); } } diff --git a/e2e/pages/adf/process-services/processServiceTabBarPage.ts b/e2e/pages/adf/process-services/processServiceTabBarPage.ts index c84d79f460..cd45010484 100644 --- a/e2e/pages/adf/process-services/processServiceTabBarPage.ts +++ b/e2e/pages/adf/process-services/processServiceTabBarPage.ts @@ -16,33 +16,33 @@ */ import { BrowserVisibility, BrowserActions } from '@alfresco/adf-testing'; -import { element, by, browser } from 'protractor'; +import { element, by, browser, ElementFinder } from 'protractor'; export class ProcessServiceTabBarPage { - tasksButton = element.all(by.cssContainingText('div[class*="mat-tab-label"] .mat-tab-labels div', 'Tasks')).first(); - processButton = element.all(by.cssContainingText('div[class*="mat-tab-label"] .mat-tab-labels div', 'Process')).first(); - reportsButton = element.all(by.cssContainingText('div[class*="mat-tab-label"] .mat-tab-labels div', 'Reports')).first(); - settingsButton = element.all(by.cssContainingText('div[class*="mat-tab-label"] .mat-tab-labels div', 'Settings')).first(); - reportsButtonSelected = element.all(by.cssContainingText('div[class*="mat-tab-label"] .mat-tab-labels div[aria-selected="true"]', 'Reports')).first(); + tasksButton: ElementFinder = element.all(by.cssContainingText('div[class*="mat-tab-label"] .mat-tab-labels div', 'Tasks')).first(); + processButton: ElementFinder = element.all(by.cssContainingText('div[class*="mat-tab-label"] .mat-tab-labels div', 'Process')).first(); + reportsButton: ElementFinder = element.all(by.cssContainingText('div[class*="mat-tab-label"] .mat-tab-labels div', 'Reports')).first(); + settingsButton: ElementFinder = element.all(by.cssContainingText('div[class*="mat-tab-label"] .mat-tab-labels div', 'Settings')).first(); + reportsButtonSelected: ElementFinder = element.all(by.cssContainingText('div[class*="mat-tab-label"] .mat-tab-labels div[aria-selected="true"]', 'Reports')).first(); - clickTasksButton() { - BrowserActions.click(this.tasksButton); - browser.sleep(700); + async clickTasksButton(): Promise { + await BrowserActions.click(this.tasksButton); + await browser.sleep(300); } - clickProcessButton() { - BrowserActions.click(this.processButton); - browser.sleep(700); + async clickProcessButton(): Promise { + await BrowserActions.click(this.processButton); + await browser.sleep(300); } - clickSettingsButton() { - BrowserActions.click(this.settingsButton); - browser.sleep(700); + async clickSettingsButton(): Promise { + await BrowserActions.click(this.settingsButton); + await browser.sleep(300); } - clickReportsButton() { - BrowserActions.click(this.reportsButton); - return BrowserVisibility.waitUntilElementIsVisible(this.reportsButtonSelected); + async clickReportsButton(): Promise { + await BrowserActions.click(this.reportsButton); + await BrowserVisibility.waitUntilElementIsVisible(this.reportsButtonSelected); } } diff --git a/e2e/pages/adf/process-services/processServicesPage.ts b/e2e/pages/adf/process-services/processServicesPage.ts index 31461ec50e..cf90798767 100644 --- a/e2e/pages/adf/process-services/processServicesPage.ts +++ b/e2e/pages/adf/process-services/processServicesPage.ts @@ -17,59 +17,60 @@ import { ProcessServiceTabBarPage } from './processServiceTabBarPage'; -import { element, by } from 'protractor'; +import { element, by, ElementFinder } from 'protractor'; import { BrowserVisibility, BrowserActions } from '@alfresco/adf-testing'; +import { __await } from 'tslib'; export class ProcessServicesPage { - apsAppsContainer = element(by.css('div[class="adf-app-listgrid ng-star-inserted"]')); - taskApp = element(by.css('mat-card[title="Task App"]')); + apsAppsContainer: ElementFinder = element(by.css('div[class="adf-app-listgrid ng-star-inserted"]')); + taskApp: ElementFinder = element(by.css('mat-card[title="Task App"]')); iconTypeLocator = by.css('mat-icon[class*="card-logo-icon"]'); descriptionLocator = by.css('mat-card-subtitle[class*="subtitle"]'); - checkApsContainer() { - BrowserVisibility.waitUntilElementIsVisible(this.apsAppsContainer); + async checkApsContainer(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.apsAppsContainer); } - goToApp(applicationName) { - const app = element(by.css('mat-card[title="' + applicationName + '"]')); - BrowserActions.click(app); + async goToApp(applicationName): Promise { + const app: ElementFinder = element(by.css('mat-card[title="' + applicationName + '"]')); + await BrowserActions.click(app); return new ProcessServiceTabBarPage(); } - goToTaskApp() { - BrowserActions.click(this.taskApp); + async goToTaskApp(): Promise { + await BrowserActions.click(this.taskApp); return new ProcessServiceTabBarPage(); } - getAppIconType(applicationName) { - const app = element(by.css('mat-card[title="' + applicationName + '"]')); - BrowserVisibility.waitUntilElementIsVisible(app); + async getAppIconType(applicationName): Promise { + const app: ElementFinder = element(by.css('mat-card[title="' + applicationName + '"]')); + await BrowserVisibility.waitUntilElementIsVisible(app); const iconType = app.element(this.iconTypeLocator); return BrowserActions.getText(iconType); } - getBackgroundColor(applicationName) { - const app = element(by.css('mat-card[title="' + applicationName + '"]')); - BrowserVisibility.waitUntilElementIsVisible(app); + async getBackgroundColor(applicationName): Promise { + const app: ElementFinder = element(by.css('mat-card[title="' + applicationName + '"]')); + await BrowserVisibility.waitUntilElementIsVisible(app); return app.getCssValue('background-color'); } - getDescription(applicationName) { - const app = element(by.css('mat-card[title="' + applicationName + '"]')); - BrowserVisibility.waitUntilElementIsVisible(app); + async getDescription(applicationName): Promise { + const app: ElementFinder = element(by.css('mat-card[title="' + applicationName + '"]')); + await BrowserVisibility.waitUntilElementIsVisible(app); const description = app.element(this.descriptionLocator); return BrowserActions.getText(description); } - checkAppIsNotDisplayed(applicationName) { - const app = element(by.css('mat-card[title="' + applicationName + '"]')); - return BrowserVisibility.waitUntilElementIsNotOnPage(app); + async checkAppIsNotDisplayed(applicationName): Promise { + const app: ElementFinder = element(by.css('mat-card[title="' + applicationName + '"]')); + await BrowserVisibility.waitUntilElementIsNotVisible(app); } - checkAppIsDisplayed(applicationName) { - const app = element(by.css('mat-card[title="' + applicationName + '"]')); - return BrowserVisibility.waitUntilElementIsVisible(app); + async checkAppIsDisplayed(applicationName): Promise { + const app: ElementFinder = element(by.css('mat-card[title="' + applicationName + '"]')); + await BrowserVisibility.waitUntilElementIsVisible(app); } } diff --git a/e2e/pages/adf/process-services/startProcessPage.ts b/e2e/pages/adf/process-services/startProcessPage.ts index cbbfc06915..4fcfbab49e 100644 --- a/e2e/pages/adf/process-services/startProcessPage.ts +++ b/e2e/pages/adf/process-services/startProcessPage.ts @@ -15,157 +15,130 @@ * limitations under the License. */ -import { by, element, Key, protractor, browser } from 'protractor'; +import { by, element, Key, protractor, browser, ElementFinder } from 'protractor'; import { BrowserVisibility, BrowserActions, FormFields } from '@alfresco/adf-testing'; export class StartProcessPage { - defaultProcessName = element(by.css('input[id="processName"]')); - processNameInput = element(by.id('processName')); - selectProcessDropdownArrow = element(by.css('button[id="adf-select-process-dropdown"]')); - cancelProcessButton = element(by.id('cancel_process')); - formStartProcessButton = element(by.css('button[data-automation-id="adf-form-start process"]')); - startProcessButton = element(by.css('button[data-automation-id="btn-start"]')); - noProcess = element(by.id('no-process-message')); - processDefinition = element(by.css('input[id="processDefinitionName"]')); - processDefinitionOptionsPanel = element(by.css('div[class*="processDefinitionOptions"]')); + defaultProcessName: ElementFinder = element(by.css('input[id="processName"]')); + processNameInput: ElementFinder = element(by.id('processName')); + selectProcessDropdownArrow: ElementFinder = element(by.css('button[id="adf-select-process-dropdown"]')); + cancelProcessButton: ElementFinder = element(by.id('cancel_process')); + formStartProcessButton: ElementFinder = element(by.css('button[data-automation-id="adf-form-start process"]')); + startProcessButton: ElementFinder = element(by.css('button[data-automation-id="btn-start"]')); + noProcess: ElementFinder = element(by.id('no-process-message')); + processDefinition: ElementFinder = element(by.css('input[id="processDefinitionName"]')); + processDefinitionOptionsPanel: ElementFinder = element(by.css('div[class*="processDefinitionOptions"]')); - checkNoProcessMessage() { - BrowserVisibility.waitUntilElementIsVisible(this.noProcess); + async checkNoProcessMessage(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.noProcess); } - pressDownArrowAndEnter() { - this.processDefinition.sendKeys(protractor.Key.ARROW_DOWN); - return browser.actions().sendKeys(protractor.Key.ENTER).perform(); + async pressDownArrowAndEnter(): Promise { + await this.processDefinition.sendKeys(protractor.Key.ARROW_DOWN); + await browser.actions().sendKeys(protractor.Key.ENTER).perform(); } - checkNoProcessDefinitionOptionIsDisplayed() { - BrowserVisibility.waitUntilElementIsNotOnPage(this.processDefinitionOptionsPanel); + async checkNoProcessDefinitionOptionIsDisplayed() { + await BrowserVisibility.waitUntilElementIsNotVisible(this.processDefinitionOptionsPanel); } - getDefaultName() { - BrowserVisibility.waitUntilElementIsVisible(this.defaultProcessName); + async getDefaultName(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.defaultProcessName); return this.defaultProcessName.getAttribute('value'); } - deleteDefaultName(name) { - BrowserVisibility.waitUntilElementIsVisible(this.processNameInput); - this.processNameInput.getAttribute('value').then((currentValue) => { - for (let i = currentValue.length; i >= 0; i--) { - if (currentValue === name) { - this.processNameInput.sendKeys(protractor.Key.BACK_SPACE); - } - } - }); + async deleteDefaultName(name) { + await BrowserVisibility.waitUntilElementIsVisible(this.processNameInput); + await BrowserActions.clearWithBackSpace(this.processNameInput); } - enterProcessName(name) { - BrowserVisibility.waitUntilElementIsVisible(this.processNameInput); - this.clearProcessName(); - this.processNameInput.sendKeys(name); + async enterProcessName(name): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.processNameInput); + await BrowserActions.clearSendKeys(this.processNameInput, name); } - clearProcessName() { - BrowserVisibility.waitUntilElementIsVisible(this.processNameInput); - this.processNameInput.clear(); + async selectFromProcessDropdown(name): Promise { + await this.clickProcessDropdownArrow(); + await this.selectOption(name); } - selectFromProcessDropdown(name) { - this.clickProcessDropdownArrow(); - return this.selectOption(name); + async clickProcessDropdownArrow(): Promise { + await BrowserActions.click(this.selectProcessDropdownArrow); } - clickProcessDropdownArrow() { - BrowserActions.click(this.selectProcessDropdownArrow); + async checkOptionIsDisplayed(name): Promise { + const selectProcessDropdown: ElementFinder = element(by.cssContainingText('.mat-option-text', name)); + await BrowserVisibility.waitUntilElementIsVisible(selectProcessDropdown); + await BrowserVisibility.waitUntilElementIsClickable(selectProcessDropdown); } - checkOptionIsDisplayed(name) { - const selectProcessDropdown = element(by.cssContainingText('.mat-option-text', name)); - BrowserVisibility.waitUntilElementIsVisible(selectProcessDropdown); - BrowserVisibility.waitUntilElementIsClickable(selectProcessDropdown); - return this; + async checkOptionIsNotDisplayed(name): Promise { + const selectProcessDropdown: ElementFinder = element(by.cssContainingText('.mat-option-text', name)); + await BrowserVisibility.waitUntilElementIsNotVisible(selectProcessDropdown); } - checkOptionIsNotDisplayed(name) { - const selectProcessDropdown = element(by.cssContainingText('.mat-option-text', name)); - BrowserVisibility.waitUntilElementIsNotOnPage(selectProcessDropdown); - return this; + async selectOption(name): Promise { + const selectProcessDropdown: ElementFinder = element(by.cssContainingText('.mat-option-text', name)); + await BrowserActions.click(selectProcessDropdown); } - selectOption(name) { - const selectProcessDropdown = element(by.cssContainingText('.mat-option-text', name)); - BrowserActions.click(selectProcessDropdown); - return this; + async typeProcessDefinition(name): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.processDefinition); + await BrowserVisibility.waitUntilElementIsClickable(this.processDefinition); + await BrowserActions.clearSendKeys(this.processDefinition, name); } - typeProcessDefinition(name) { - BrowserVisibility.waitUntilElementIsVisible(this.processDefinition); - BrowserVisibility.waitUntilElementIsClickable(this.processDefinition); - this.processDefinition.clear(); - this.processDefinition.sendKeys(name); - return this; - } - - getProcessDefinitionValue() { - BrowserVisibility.waitUntilElementIsVisible(this.processDefinition); + async getProcessDefinitionValue(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.processDefinition); return this.processDefinition.getAttribute('value'); } - clickCancelProcessButton() { - BrowserActions.click(this.cancelProcessButton); + async clickCancelProcessButton(): Promise { + await BrowserActions.click(this.cancelProcessButton); } - clickFormStartProcessButton() { - return BrowserActions.click(this.formStartProcessButton); - + async clickFormStartProcessButton(): Promise { + await BrowserActions.click(this.formStartProcessButton); } - checkStartFormProcessButtonIsEnabled() { - expect(this.formStartProcessButton.isEnabled()).toBe(true); + async checkStartFormProcessButtonIsEnabled() { + await expect(await this.formStartProcessButton.isEnabled()).toBe(true); } - checkStartProcessButtonIsEnabled() { - expect(this.startProcessButton.isEnabled()).toBe(true); + async checkStartProcessButtonIsEnabled() { + await expect(await this.startProcessButton.isEnabled()).toBe(true); } - checkStartProcessButtonIsDisabled() { - expect(this.startProcessButton.isEnabled()).toBe(false); + async checkStartProcessButtonIsDisabled() { + await expect(await this.startProcessButton.isEnabled()).toBe(false); } - clickStartProcessButton() { - return BrowserActions.click(this.startProcessButton); + async clickStartProcessButton(): Promise { + await BrowserActions.click(this.startProcessButton); } - checkSelectProcessPlaceholderIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.processDefinition); - const processPlaceholder = this.processDefinition.getAttribute('value').then(((result) => { - return result; - })); + async checkSelectProcessPlaceholderIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.processDefinition); + const processPlaceholder = await this.processDefinition.getAttribute('value'); return processPlaceholder; } - checkValidationErrorIsDisplayed(error, elementRef = 'mat-error') { - const errorElement = element(by.cssContainingText(elementRef, error)); - BrowserVisibility.waitUntilElementIsVisible(errorElement); - return this; + async checkValidationErrorIsDisplayed(error, elementRef = 'mat-error'): Promise { + const errorElement: ElementFinder = element(by.cssContainingText(elementRef, error)); + await BrowserVisibility.waitUntilElementIsVisible(errorElement); } - blur(locator) { - BrowserActions.click(locator); - locator.sendKeys(Key.TAB); - return this; + async blur(locator): Promise { + await BrowserActions.click(locator); + await locator.sendKeys(Key.TAB); } - clearField(locator) { - BrowserVisibility.waitUntilElementIsVisible(locator); - locator.getAttribute('value').then((result) => { - for (let i = result.length; i >= 0; i--) { - locator.sendKeys(protractor.Key.BACK_SPACE); - } - }); + async clearField(locator): Promise { + await BrowserActions.clearWithBackSpace(locator); } - formFields() { + formFields(): FormFields { return new FormFields(); } } diff --git a/e2e/pages/adf/process-services/taskDetailsPage.ts b/e2e/pages/adf/process-services/taskDetailsPage.ts index 0654b83023..2a1f6e8d85 100644 --- a/e2e/pages/adf/process-services/taskDetailsPage.ts +++ b/e2e/pages/adf/process-services/taskDetailsPage.ts @@ -16,7 +16,7 @@ */ import { AppSettingsToggles } from './dialog/appSettingsToggles'; -import { element, by, browser } from 'protractor'; +import { element, by, browser, ElementFinder } from 'protractor'; import { TabsPage } from '@alfresco/adf-testing'; import { BrowserVisibility, BrowserActions } from '@alfresco/adf-testing'; @@ -24,348 +24,325 @@ export class TaskDetailsPage { appSettingsTogglesClass = new AppSettingsToggles(); - formContent = element(by.css('adf-form')); - formNameField = element(by.css('span[data-automation-id*="formName"] span')); - assigneeField = element(by.css('span[data-automation-id*="assignee"] span')); - statusField = element(by.css('span[data-automation-id*="status"] span')); - categoryField = element(by.css('span[data-automation-id*="category"] span')); - parentNameField = element(by.css('span[data-automation-id*="parentName"] span')); - parentTaskIdField = element(by.css('span[data-automation-id*="parentTaskId"] span')); - durationField = element(by.css('span[data-automation-id*="duration"] span')); - endDateField = element.all(by.css('span[data-automation-id*="endDate"] span')).first(); - createdField = element(by.css('span[data-automation-id="card-dateitem-created"] span')); - idField = element.all(by.css('span[data-automation-id*="id"] span')).first(); - descriptionField = element(by.css('span[data-automation-id*="description"] span')); - dueDateField = element(by.css('span[data-automation-id*="dueDate"] span')); - activitiesTitle = element(by.css('div[class*="adf-info-drawer-layout-header-title"] div')); - commentField = element(by.id('comment-input')); - addCommentButton = element(by.css('[data-automation-id="comments-input-add"]')); - involvePeopleButton = element(by.css('div[class*="add-people"]')); - addPeopleField = element(by.css('input[data-automation-id="adf-people-search-input"]')); - addInvolvedUserButton = element(by.css('button[id="add-people"] span')); + formContent: ElementFinder = element(by.css('adf-form')); + formNameField: ElementFinder = element(by.css('span[data-automation-id*="formName"] span')); + assigneeField: ElementFinder = element(by.css('span[data-automation-id*="assignee"] span')); + statusField: ElementFinder = element(by.css('span[data-automation-id*="status"] span')); + categoryField: ElementFinder = element(by.css('span[data-automation-id*="category"] span')); + parentNameField: ElementFinder = element(by.css('span[data-automation-id*="parentName"] span')); + parentTaskIdField: ElementFinder = element(by.css('span[data-automation-id*="parentTaskId"] span')); + durationField: ElementFinder = element(by.css('span[data-automation-id*="duration"] span')); + endDateField: ElementFinder = element.all(by.css('span[data-automation-id*="endDate"] span')).first(); + createdField: ElementFinder = element(by.css('span[data-automation-id="card-dateitem-created"] span')); + idField: ElementFinder = element.all(by.css('span[data-automation-id*="id"] span')).first(); + descriptionField: ElementFinder = element(by.css('span[data-automation-id*="description"] span')); + dueDateField: ElementFinder = element(by.css('span[data-automation-id*="dueDate"] span')); + activitiesTitle: ElementFinder = element(by.css('div[class*="adf-info-drawer-layout-header-title"] div')); + commentField: ElementFinder = element(by.id('comment-input')); + addCommentButton: ElementFinder = element(by.css('[data-automation-id="comments-input-add"]')); + involvePeopleButton: ElementFinder = element(by.css('div[class*="add-people"]')); + addPeopleField: ElementFinder = element(by.css('input[data-automation-id="adf-people-search-input"]')); + addInvolvedUserButton: ElementFinder = element(by.css('button[id="add-people"] span')); emailInvolvedUser = by.xpath('following-sibling::div[@class="adf-people-email"]'); - taskDetailsInfoDrawer = element(by.tagName('adf-info-drawer')); - taskDetailsSection = element(by.css('div[data-automation-id="adf-tasks-details"]')); - taskDetailsEmptySection = element(by.css('div[data-automation-id="adf-tasks-details--empty"]')); - completeTask = element(by.css('button[id="adf-no-form-complete-button"]')); - completeFormTask = element(by.css('button[id="adf-form-complete"]')); - taskDetailsTitle = element(by.css('h2[class="adf-activiti-task-details__header"] span')); - auditLogButton = element(by.css('button[adf-task-audit]')); - noPeopleInvolved = element(by.id('no-people-label')); - cancelInvolvePeopleButton = element(by.id('close-people-search')); - involvePeopleHeader = element(by.css('div[class="adf-search-text-header"]')); - removeInvolvedPeople = element(by.css('button[data-automation-id="Remove"]')); - peopleTitle = element(by.id('people-title')); - attachFormDropdown = element(by.css('div[class="adf-attach-form-row"]')); - cancelAttachForm = element(by.id('adf-no-form-cancel-button')); - attachFormButton = element(by.id('adf-no-form-attach-form-button')); - disabledAttachFormButton = element(by.css('button[id="adf-no-form-attach-form-button"][disabled]')); - removeAttachForm = element(by.id('adf-no-form-remove-button')); - attachFormName = element(by.css('span[class="adf-form-title ng-star-inserted"]')); - emptyTaskDetails = element(by.css('adf-task-details > div > div')); + taskDetailsInfoDrawer: ElementFinder = element(by.tagName('adf-info-drawer')); + taskDetailsSection: ElementFinder = element(by.css('div[data-automation-id="adf-tasks-details"]')); + taskDetailsEmptySection: ElementFinder = element(by.css('div[data-automation-id="adf-tasks-details--empty"]')); + completeTask: ElementFinder = element(by.css('button[id="adf-no-form-complete-button"]')); + completeFormTask: ElementFinder = element(by.css('button[id="adf-form-complete"]')); + taskDetailsTitle: ElementFinder = element(by.css('h2[class="adf-activiti-task-details__header"] span')); + auditLogButton: ElementFinder = element(by.css('button[adf-task-audit]')); + noPeopleInvolved: ElementFinder = element(by.id('no-people-label')); + cancelInvolvePeopleButton: ElementFinder = element(by.id('close-people-search')); + involvePeopleHeader: ElementFinder = element(by.css('div[class="adf-search-text-header"]')); + removeInvolvedPeople: ElementFinder = element(by.css('button[data-automation-id="Remove"]')); + peopleTitle: ElementFinder = element(by.id('people-title')); + attachFormDropdown: ElementFinder = element(by.css('div[class="adf-attach-form-row"]')); + cancelAttachForm: ElementFinder = element(by.id('adf-no-form-cancel-button')); + attachFormButton: ElementFinder = element(by.id('adf-no-form-attach-form-button')); + disabledAttachFormButton: ElementFinder = element(by.css('button[id="adf-no-form-attach-form-button"][disabled]')); + removeAttachForm: ElementFinder = element(by.id('adf-no-form-remove-button')); + attachFormName: ElementFinder = element(by.css('span[class="adf-form-title ng-star-inserted"]')); + emptyTaskDetails: ElementFinder = element(by.css('adf-task-details > div > div')); - getTaskDetailsTitle() { + getTaskDetailsTitle(): Promise { return BrowserActions.getText(this.taskDetailsTitle); } - checkSelectedForm(formName) { - BrowserVisibility.waitUntilElementIsVisible(this.attachFormName); - expect(formName).toEqual(this.attachFormName.getText()); + async checkSelectedForm(formName): Promise { + const text = await BrowserActions.getText(this.attachFormName); + await expect(formName).toEqual(text); } - checkAttachFormButtonIsDisabled() { - BrowserVisibility.waitUntilElementIsVisible(this.disabledAttachFormButton); + async checkAttachFormButtonIsDisabled(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.disabledAttachFormButton); } - checkAttachFormButtonIsEnabled() { - BrowserVisibility.waitUntilElementIsClickable(this.attachFormButton); + async checkAttachFormButtonIsEnabled(): Promise { + await BrowserVisibility.waitUntilElementIsClickable(this.attachFormButton); } - checkAttachFormDropdownIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.attachFormDropdown); + async checkAttachFormDropdownIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.attachFormDropdown); } - clickAttachFormDropdown() { - return BrowserActions.click(this.attachFormDropdown); + async clickAttachFormDropdown(): Promise { + await BrowserActions.click(this.attachFormDropdown); } - selectAttachFormOption(option) { - const selectedOption = element(by.cssContainingText('mat-option[role="option"]', option)); - return BrowserActions.click(selectedOption); + async selectAttachFormOption(option): Promise { + const selectedOption: ElementFinder = element(by.cssContainingText('mat-option[role="option"]', option)); + await BrowserActions.click(selectedOption); } - checkCancelAttachFormIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.cancelAttachForm); + async checkCancelAttachFormIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.cancelAttachForm); } - noFormIsDisplayed() { - BrowserVisibility.waitUntilElementIsNotOnPage(this.formContent); - return this; + async noFormIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsNotVisible(this.formContent); } - clickCancelAttachForm() { - return BrowserActions.click(this.cancelAttachForm); + async clickCancelAttachForm(): Promise { + await BrowserActions.click(this.cancelAttachForm); } - checkRemoveAttachFormIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.removeAttachForm); + async checkRemoveAttachFormIsDisplayed() { + await BrowserVisibility.waitUntilElementIsVisible(this.removeAttachForm); } - clickRemoveAttachForm() { - return BrowserActions.click(this.removeAttachForm); + async clickRemoveAttachForm(): Promise { + await BrowserActions.click(this.removeAttachForm); } - checkAttachFormButtonIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.attachFormButton); + async checkAttachFormButtonIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.attachFormButton); } - checkAttachFormButtonIsNotDisplayed() { - BrowserVisibility.waitUntilElementIsNotOnPage(this.attachFormButton); + async checkAttachFormButtonIsNotDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsNotVisible(this.attachFormButton); } - clickAttachFormButton() { + async clickAttachFormButton(): Promise { return BrowserActions.click(this.attachFormButton); } - checkFormIsAttached(formName) { - BrowserVisibility.waitUntilElementIsVisible(this.formNameField); - this.formNameField.getText().then((attachedFormName) => { - expect(attachedFormName).toEqual(formName); - }); + async checkFormIsAttached(formName): Promise { + const attachedFormName = await BrowserActions.getText(this.formNameField); + await expect(attachedFormName).toEqual(formName); } - getFormName() { + getFormName(): Promise { return BrowserActions.getText(this.formNameField); } - clickForm() { - BrowserActions.closeMenuAndDialogs(); - BrowserActions.click(this.formNameField); + async clickForm(): Promise { + await BrowserActions.closeMenuAndDialogs(); + await BrowserActions.click(this.formNameField); } - getAssignee() { + getAssignee(): Promise { return BrowserActions.getText(this.assigneeField); } - getStatus() { + getStatus(): Promise { return BrowserActions.getText(this.statusField); } - getCategory() { + getCategory(): Promise { return BrowserActions.getText(this.categoryField); } - getParentName() { + getParentName(): Promise { return BrowserActions.getText(this.parentNameField); } - getParentTaskId() { + getParentTaskId(): Promise { return BrowserActions.getText(this.parentTaskIdField); } - getDuration() { + getDuration(): Promise { return BrowserActions.getText(this.durationField); } - getEndDate() { + getEndDate(): Promise { return BrowserActions.getText(this.endDateField); } - getCreated() { + getCreated(): Promise { return BrowserActions.getText(this.createdField); } - getId() { + getId(): Promise { return BrowserActions.getText(this.idField); } - getDescription() { + getDescription(): Promise { return BrowserActions.getText(this.descriptionField); } - getDueDate() { + getDueDate(): Promise { return BrowserActions.getText(this.dueDateField); } - getTitle() { + getTitle(): Promise { return BrowserActions.getText(this.activitiesTitle); } - selectActivityTab() { - const tabsPage = new TabsPage; - tabsPage.clickTabByTitle('Activity'); - return this; + async selectActivityTab(): Promise { + const tabsPage: TabsPage = new TabsPage; + await tabsPage.clickTabByTitle('Activity'); } - selectDetailsTab() { - const tabsPage = new TabsPage; - tabsPage.clickTabByTitle('Details'); - return this; + async selectDetailsTab(): Promise { + const tabsPage: TabsPage = new TabsPage; + await tabsPage.clickTabByTitle('Details'); } - addComment(comment) { - BrowserVisibility.waitUntilElementIsVisible(this.commentField); - this.commentField.sendKeys(comment); - BrowserActions.click(this.addCommentButton); - return this; + async addComment(comment): Promise { + await BrowserActions.clearSendKeys(this.commentField, comment); + await BrowserActions.click(this.addCommentButton); } - checkCommentIsDisplayed(comment) { - const row = element(by.cssContainingText('div[id="comment-message"]', comment)); - BrowserVisibility.waitUntilElementIsVisible(row); - return this; + async checkCommentIsDisplayed(comment): Promise { + const row: ElementFinder = element(by.cssContainingText('div[id="comment-message"]', comment)); + await BrowserVisibility.waitUntilElementIsVisible(row); } - clickInvolvePeopleButton() { - BrowserVisibility.waitUntilElementIsVisible(this.involvePeopleButton); - BrowserVisibility.waitUntilElementIsClickable(this.involvePeopleButton); - browser.actions().mouseMove(this.involvePeopleButton).perform(); - BrowserActions.click(this.involvePeopleButton); - return this; + async clickInvolvePeopleButton(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.involvePeopleButton); + await BrowserVisibility.waitUntilElementIsClickable(this.involvePeopleButton); + await browser.actions().mouseMove(this.involvePeopleButton).perform(); + await BrowserActions.click(this.involvePeopleButton); } - typeUser(user) { - BrowserVisibility.waitUntilElementIsVisible(this.addPeopleField); - this.addPeopleField.sendKeys(user); - return this; + async typeUser(user): Promise { + await BrowserActions.clearSendKeys(this.addPeopleField, user); } - selectUserToInvolve(user) { - this.getRowsUser(user).click(); - return this; + async selectUserToInvolve(user): Promise { + const row = this.getRowsUser(user); + await BrowserActions.click(row); } - checkUserIsSelected(user) { - const row = element(by.cssContainingText('div[class*="search-list-container"] div[class*="people-full-name"]', user)); - BrowserVisibility.waitUntilElementIsVisible(row); - return this; + async checkUserIsSelected(user): Promise { + const row: ElementFinder = element(by.cssContainingText('div[class*="search-list-container"] div[class*="people-full-name"]', user)); + await BrowserVisibility.waitUntilElementIsVisible(row); } - clickAddInvolvedUserButton() { - BrowserActions.click(this.addInvolvedUserButton); - return this; + async clickAddInvolvedUserButton(): Promise { + await BrowserActions.click(this.addInvolvedUserButton); } getRowsUser(user) { - const row = element(by.cssContainingText('div[class*="people-full-name"]', user)); - BrowserVisibility.waitUntilElementIsVisible(row); - return row; + return element(by.cssContainingText('div[class*="people-full-name"]', user)); } - removeInvolvedUser(user) { + async removeInvolvedUser(user): Promise { const row = this.getRowsUser(user).element(by.xpath('ancestor::div[contains(@class, "adf-datatable-row")]')); - BrowserVisibility.waitUntilElementIsVisible(row); - row.element(by.css('button[data-automation-id="action_menu_0"]')).click(); - BrowserVisibility.waitUntilElementIsVisible(this.removeInvolvedPeople); - return BrowserActions.click(this.removeInvolvedPeople); + await BrowserActions.click(row.element(by.css('button[data-automation-id="action_menu_0"]'))); + await BrowserVisibility.waitUntilElementIsVisible(this.removeInvolvedPeople); + await BrowserActions.click(this.removeInvolvedPeople); } - getInvolvedUserEmail(user) { - const email = this.getRowsUser(user).element(this.emailInvolvedUser); + async getInvolvedUserEmail(user): Promise { + const row = this.getRowsUser(user); + const email = row.element(this.emailInvolvedUser); return BrowserActions.getText(email); } - clickAuditLogButton() { - BrowserActions.click(this.auditLogButton); + async clickAuditLogButton(): Promise { + await BrowserActions.click(this.auditLogButton); } - appSettingsToggles() { + appSettingsToggles(): AppSettingsToggles { return this.appSettingsTogglesClass; } - taskInfoDrawerIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.taskDetailsInfoDrawer); + async taskInfoDrawerIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.taskDetailsInfoDrawer); } - taskInfoDrawerIsNotDisplayed() { - BrowserVisibility.waitUntilElementIsNotOnPage(this.taskDetailsInfoDrawer); + async taskInfoDrawerIsNotDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsNotVisible(this.taskDetailsInfoDrawer); } - checkNoPeopleIsInvolved() { - BrowserVisibility.waitUntilElementIsVisible(this.noPeopleInvolved); - return this; + async checkNoPeopleIsInvolved(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.noPeopleInvolved); } - clickCancelInvolvePeopleButton() { - BrowserActions.click(this.cancelInvolvePeopleButton); - return this; + async clickCancelInvolvePeopleButton(): Promise { + await BrowserActions.click(this.cancelInvolvePeopleButton); } - getInvolvePeopleHeader() { + getInvolvePeopleHeader(): Promise { return BrowserActions.getText(this.involvePeopleHeader); } - getInvolvePeoplePlaceholder() { - BrowserVisibility.waitUntilElementIsVisible(this.addPeopleField); + async getInvolvePeoplePlaceholder(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.addPeopleField); return this.addPeopleField.getAttribute('placeholder'); } - checkCancelButtonIsEnabled() { - BrowserVisibility.waitUntilElementIsVisible(this.cancelInvolvePeopleButton); - BrowserVisibility.waitUntilElementIsClickable(this.cancelInvolvePeopleButton); - return this; + async checkCancelButtonIsEnabled(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.cancelInvolvePeopleButton); + await BrowserVisibility.waitUntilElementIsClickable(this.cancelInvolvePeopleButton); } - checkAddPeopleButtonIsEnabled() { - BrowserVisibility.waitUntilElementIsVisible(this.addInvolvedUserButton); - BrowserVisibility.waitUntilElementIsClickable(this.addInvolvedUserButton); - return this; + async checkAddPeopleButtonIsEnabled(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.addInvolvedUserButton); + await BrowserVisibility.waitUntilElementIsClickable(this.addInvolvedUserButton); } - noUserIsDisplayedInSearchInvolvePeople(user) { - BrowserVisibility.waitUntilElementIsNotOnPage(element(by.cssContainingText('div[class*="people-full-name"]', user))); - return this; + async noUserIsDisplayedInSearchInvolvePeople(user): Promise { + await BrowserVisibility.waitUntilElementIsNotVisible(element(by.cssContainingText('div[class*="people-full-name"]', user))); } - getInvolvedPeopleTitle() { + getInvolvedPeopleTitle(): Promise { return BrowserActions.getText(this.peopleTitle); } - checkTaskDetailsEmpty() { + checkTaskDetailsEmpty(): Promise { return BrowserActions.getText(this.taskDetailsEmptySection); } - checkTaskDetailsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.taskDetailsSection); - BrowserVisibility.waitUntilElementIsVisible(this.formNameField); - BrowserVisibility.waitUntilElementIsVisible(this.assigneeField); - BrowserVisibility.waitUntilElementIsVisible(this.statusField); - BrowserVisibility.waitUntilElementIsVisible(this.categoryField); - BrowserVisibility.waitUntilElementIsVisible(this.parentNameField); - BrowserVisibility.waitUntilElementIsVisible(this.createdField); - BrowserVisibility.waitUntilElementIsVisible(this.idField); - BrowserVisibility.waitUntilElementIsVisible(this.descriptionField); - BrowserVisibility.waitUntilElementIsVisible(this.dueDateField); - BrowserVisibility.waitUntilElementIsVisible(this.activitiesTitle); + async checkTaskDetailsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.taskDetailsSection); + await BrowserVisibility.waitUntilElementIsVisible(this.formNameField); + await BrowserVisibility.waitUntilElementIsVisible(this.assigneeField); + await BrowserVisibility.waitUntilElementIsVisible(this.statusField); + await BrowserVisibility.waitUntilElementIsVisible(this.categoryField); + await BrowserVisibility.waitUntilElementIsVisible(this.parentNameField); + await BrowserVisibility.waitUntilElementIsVisible(this.createdField); + await BrowserVisibility.waitUntilElementIsVisible(this.idField); + await BrowserVisibility.waitUntilElementIsVisible(this.descriptionField); + await BrowserVisibility.waitUntilElementIsVisible(this.dueDateField); + await BrowserVisibility.waitUntilElementIsVisible(this.activitiesTitle); return BrowserActions.getText(this.taskDetailsSection); } - clickCompleteTask() { - return BrowserActions.click(this.completeTask); + async clickCompleteTask(): Promise { + await BrowserActions.click(this.completeTask); } - checkCompleteFormButtonIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.completeFormTask); - return this.completeFormTask; + async checkCompleteFormButtonIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.completeFormTask); } - checkCompleteTaskButtonIsEnabled() { - BrowserVisibility.waitUntilElementIsClickable(this.completeTask); - return this; + async checkCompleteTaskButtonIsEnabled(): Promise { + await BrowserVisibility.waitUntilElementIsClickable(this.completeTask); } - checkCompleteTaskButtonIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.completeTask); - return this; + async checkCompleteTaskButtonIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.completeTask); } - clickCompleteFormTask() { - return BrowserActions.click(this.completeFormTask); + async clickCompleteFormTask(): Promise { + await BrowserActions.click(this.completeFormTask); } - getEmptyTaskDetailsMessage() { + async getEmptyTaskDetailsMessage(): Promise { return BrowserActions.getText(this.emptyTaskDetails); } diff --git a/e2e/pages/adf/process-services/taskFiltersPage.ts b/e2e/pages/adf/process-services/taskFiltersPage.ts index 78fd76c412..4dade52c98 100644 --- a/e2e/pages/adf/process-services/taskFiltersPage.ts +++ b/e2e/pages/adf/process-services/taskFiltersPage.ts @@ -15,41 +15,39 @@ * limitations under the License. */ -import { by } from 'protractor'; +import { by, ElementFinder, Locator } from 'protractor'; import { BrowserVisibility, BrowserActions } from '@alfresco/adf-testing'; export class TaskFiltersPage { filter; - taskIcon = by.xpath("ancestor::div[@class='mat-list-item-content']/mat-icon"); + taskIcon: Locator = by.xpath("ancestor::div[@class='mat-list-item-content']/mat-icon"); - constructor(filter) { + constructor(filter: ElementFinder) { this.filter = filter; } - checkTaskFilterIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.filter); - return this; + async checkTaskFilterIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.filter); } - getTaskFilterIcon() { - BrowserVisibility.waitUntilElementIsVisible(this.filter); + async getTaskFilterIcon(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.filter); const icon = this.filter.element(this.taskIcon); return BrowserActions.getText(icon); } - checkTaskFilterHasNoIcon() { - BrowserVisibility.waitUntilElementIsVisible(this.filter); - BrowserVisibility.waitUntilElementIsNotOnPage(this.filter.element(this.taskIcon)); + async checkTaskFilterHasNoIcon(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.filter); + await BrowserVisibility.waitUntilElementIsNotVisible(this.filter.element(this.taskIcon)); } - clickTaskFilter() { + async clickTaskFilter(): Promise { return BrowserActions.click(this.filter); } - checkTaskFilterNotDisplayed() { - BrowserVisibility.waitUntilElementIsNotVisible(this.filter); - return this.filter; + async checkTaskFilterNotDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsNotVisible(this.filter); } } diff --git a/e2e/pages/adf/process-services/tasksListPage.ts b/e2e/pages/adf/process-services/tasksListPage.ts index 9b9ee6bf13..6e4ec379e2 100644 --- a/e2e/pages/adf/process-services/tasksListPage.ts +++ b/e2e/pages/adf/process-services/tasksListPage.ts @@ -17,48 +17,47 @@ import { BrowserVisibility, BrowserActions } from '@alfresco/adf-testing'; import { DataTableComponentPage } from '@alfresco/adf-testing'; -import { by, element } from 'protractor'; +import { by, element, ElementFinder } from 'protractor'; export class TasksListPage { - taskList = element(by.css('adf-tasklist')); - noTasksFound = element.all(by.css("div[class='adf-empty-content__title']")).first(); - dataTable = new DataTableComponentPage(this.taskList); + taskList: ElementFinder = element(by.css('adf-tasklist')); + noTasksFound: ElementFinder = element.all(by.css("div[class='adf-empty-content__title']")).first(); + dataTable: DataTableComponentPage = new DataTableComponentPage(this.taskList); getDataTable() { return this.dataTable; } - getRowsDisplayedWithSameName(taskName) { + getRowsDisplayedWithSameName(taskName): Promise { return this.dataTable.getRowsWithSameColumnValues('Name', taskName); } - checkContentIsDisplayed(taskName) { + checkContentIsDisplayed(taskName): Promise { return this.dataTable.checkContentIsDisplayed('Name', taskName); } - checkContentIsNotDisplayed(taskName) { + checkContentIsNotDisplayed(taskName): Promise { return this.dataTable.checkContentIsNotDisplayed('Name', taskName); } - checkRowIsSelected(taskName) { + checkRowIsSelected(taskName): Promise { return this.dataTable.checkRowIsSelected('Name', taskName); } - selectRow(taskName) { + selectRow(taskName): Promise { return this.dataTable.selectRow('Name', taskName); } - getAllRowsNameColumn() { + getAllRowsNameColumn(): Promise { return this.dataTable.getAllRowsColumnValues('Name'); } - checkTaskListIsLoaded() { - BrowserVisibility.waitUntilElementIsVisible(this.taskList); - return this; + async checkTaskListIsLoaded(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.taskList); } - getNoTasksFoundMessage() { + getNoTasksFoundMessage(): Promise { return BrowserActions.getText(this.noTasksFound); } diff --git a/e2e/pages/adf/process-services/tasksPage.ts b/e2e/pages/adf/process-services/tasksPage.ts index d2be62ee67..9d2aae0e0d 100644 --- a/e2e/pages/adf/process-services/tasksPage.ts +++ b/e2e/pages/adf/process-services/tasksPage.ts @@ -21,141 +21,131 @@ import { TaskDetailsPage } from './taskDetailsPage'; import { FiltersPage } from './filtersPage'; import { ChecklistDialog } from './dialog/createChecklistDialog'; import { TasksListPage } from './tasksListPage'; -import { element, by } from 'protractor'; +import { element, by, ElementFinder } from 'protractor'; import { BrowserVisibility, BrowserActions, FormFields } from '@alfresco/adf-testing'; export class TasksPage { - createButton = element(by.css('button[data-automation-id="create-button"')); - newTaskButton = element(by.css('button[data-automation-id="btn-start-task"]')); - addChecklistButton = element(by.css('button[class*="adf-add-to-checklist-button"]')); + createButton: ElementFinder = element(by.css('button[data-automation-id="create-button"')); + newTaskButton: ElementFinder = element(by.css('button[data-automation-id="btn-start-task"]')); + addChecklistButton: ElementFinder = element(by.css('button[class*="adf-add-to-checklist-button"]')); rowByRowName = by.xpath('ancestor::mat-chip'); checklistContainer = by.css('div[class*="checklist-menu"]'); taskTitle = 'h2[class="adf-activiti-task-details__header"] span'; rows = by.css('div[class*="adf-datatable-body"] div[class*="adf-datatable-row"] div[class*="adf-datatable-cell"]'); - completeButtonNoForm = element(by.id('adf-no-form-complete-button')); - checklistDialog = element(by.id('checklist-dialog')); - checklistNoMessage = element(by.id('checklist-none-message')); - numberOfChecklists = element(by.css('[data-automation-id="checklist-label"] mat-chip')); + completeButtonNoForm: ElementFinder = element(by.id('adf-no-form-complete-button')); + checklistDialog: ElementFinder = element(by.id('checklist-dialog')); + checklistNoMessage: ElementFinder = element(by.id('checklist-none-message')); + numberOfChecklists: ElementFinder = element(by.css('[data-automation-id="checklist-label"] mat-chip')); sortByName = by.css('div[data-automation-id="auto_id_name"]'); - createNewTask() { - this.clickOnCreateButton(); - BrowserActions.click(this.newTaskButton); + async createNewTask(): Promise { + await this.clickOnCreateButton(); + await BrowserActions.clickExecuteScript('button[data-automation-id="btn-start-task"]'); return new StartTaskDialog(); } - newTaskButtonIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.newTaskButton); - return this; + async newTaskButtonIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.newTaskButton); } - clickOnCreateButton() { - BrowserActions.click(this.createButton); - return this; + async clickOnCreateButton(): Promise { + await BrowserActions.click(this.createButton); } - formFields() { + formFields(): FormFields { return new FormFields(); } - taskDetails() { + taskDetails(): TaskDetailsPage { return new TaskDetailsPage(); } - filtersPage() { + filtersPage(): FiltersPage { return new FiltersPage(); } - tasksListPage() { + tasksListPage(): TasksListPage { return new TasksListPage(); } - usingCheckListDialog() { + usingCheckListDialog(): ChecklistDialog { return new ChecklistDialog(); } - clickOnAddChecklistButton() { - BrowserActions.click(this.addChecklistButton); + async clickOnAddChecklistButton(): Promise { + await BrowserActions.click(this.addChecklistButton); return new ChecklistDialog(); } getRowsName(name) { - const row = element(this.checklistContainer).element(by.cssContainingText('span', name)); - BrowserVisibility.waitUntilElementIsVisible(row); + const row: ElementFinder = element(this.checklistContainer).element(by.cssContainingText('span', name)); return row; } getChecklistByName(checklist) { - const row = this.getRowsName(checklist).element(this.rowByRowName); - BrowserVisibility.waitUntilElementIsVisible(row); + const elem = this.getRowsName(checklist); + const row = elem.element(this.rowByRowName); return row; } - checkChecklistIsDisplayed(checklist) { - BrowserVisibility.waitUntilElementIsVisible(this.getChecklistByName(checklist)); - return this; + async checkChecklistIsDisplayed(checklist): Promise { + const checklistEle = this.getChecklistByName(checklist); + await BrowserVisibility.waitUntilElementIsVisible(checklistEle); } - checkChecklistIsNotDisplayed(checklist) { - BrowserVisibility.waitUntilElementIsNotOnPage(element(this.checklistContainer).element(by.cssContainingText('span', checklist))); - return this; + async checkChecklistIsNotDisplayed(checklist): Promise { + await BrowserVisibility.waitUntilElementIsNotVisible(element(this.checklistContainer).element(by.cssContainingText('span', checklist))); } - checkTaskTitle(taskName) { - BrowserVisibility.waitUntilElementIsVisible(element(by.css(this.taskTitle))); - const title = element(by.cssContainingText(this.taskTitle, taskName)); - BrowserVisibility.waitUntilElementIsVisible(title); - return this; + async checkTaskTitle(taskName): Promise { + await BrowserVisibility.waitUntilElementIsVisible(element(by.css(this.taskTitle))); + const title: ElementFinder = element(by.cssContainingText(this.taskTitle, taskName)); + await BrowserVisibility.waitUntilElementIsVisible(title); } - completeTaskNoForm() { - BrowserActions.click(this.completeButtonNoForm); + async completeTaskNoForm(): Promise { + await BrowserActions.click(this.completeButtonNoForm); } - completeTaskNoFormNotDisplayed() { - BrowserVisibility.waitUntilElementIsNotOnPage(this.completeButtonNoForm); - return this; + async completeTaskNoFormNotDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsNotVisible(this.completeButtonNoForm); } - checkChecklistDialogIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.checklistDialog); - return this; + async checkChecklistDialogIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.checklistDialog); } - checkChecklistDialogIsNotDisplayed() { - BrowserVisibility.waitUntilElementIsNotOnPage(this.checklistDialog); - return this; + async checkChecklistDialogIsNotDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsNotVisible(this.checklistDialog); } - checkNoChecklistIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.checklistNoMessage); - return this; + async checkNoChecklistIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.checklistNoMessage); } - getNumberOfChecklists() { + getNumberOfChecklists(): Promise { return BrowserActions.getText(this.numberOfChecklists); } - removeChecklists(checklist) { - const row = this.getRowsName(checklist).element(this.rowByRowName); - BrowserVisibility.waitUntilElementIsVisible(row.element(by.css('mat-icon'))); - row.element(by.css('mat-icon')).click(); - return this; + async removeChecklists(checklist): Promise { + const elem = this.getRowsName(checklist); + const row = elem.element(this.rowByRowName); + await BrowserActions.click(row.element(by.css('mat-icon'))); } - checkChecklistsRemoveButtonIsNotDisplayed(checklist) { - const row = this.getRowsName(checklist).element(this.rowByRowName); - BrowserVisibility.waitUntilElementIsNotOnPage(row.element(by.css('mat-icon'))); - return this; + async checkChecklistsRemoveButtonIsNotDisplayed(checklist): Promise { + const elem = this.getRowsName(checklist); + const row = elem.element(this.rowByRowName); + await BrowserVisibility.waitUntilElementIsNotVisible(row.element(by.css('mat-icon'))); } - clickSortByNameAsc() { - return this.tasksListPage().getDataTable().sortByColumn('ASC', 'name'); + async clickSortByNameAsc(): Promise { + return await this.tasksListPage().getDataTable().sortByColumn('ASC', 'name'); } - clickSortByNameDesc() { - return this.tasksListPage().getDataTable().sortByColumn('DESC', 'name'); + async clickSortByNameDesc(): Promise { + return await this.tasksListPage().getDataTable().sortByColumn('DESC', 'name'); } } diff --git a/e2e/pages/adf/searchFiltersPage.ts b/e2e/pages/adf/searchFiltersPage.ts index a2cef05b6d..1c06415920 100644 --- a/e2e/pages/adf/searchFiltersPage.ts +++ b/e2e/pages/adf/searchFiltersPage.ts @@ -15,280 +15,232 @@ * limitations under the License. */ -import { element, by } from 'protractor'; +import { element, by, ElementFinder } from 'protractor'; import { BrowserVisibility, SearchCategoriesPage } from '@alfresco/adf-testing'; +import { + SearchCheckListPage, + SearchTextPage, + NumberRangeFilterPage, + DateRangeFilterPage, + SearchSliderPage, + SearchRadioPage +} from '@alfresco/adf-testing'; export class SearchFiltersPage { - searchCategoriesPage = new SearchCategoriesPage(); + searchCategoriesPage: SearchCategoriesPage = new SearchCategoriesPage(); - searchFilters = element(by.css('adf-search-filter')); - fileTypeFilter = element(by.css('mat-expansion-panel[data-automation-id="expansion-panel-SEARCH.FACET_FIELDS.TYPE"]')); - creatorFilter = element(by.css('mat-expansion-panel[data-automation-id="expansion-panel-SEARCH.FACET_FIELDS.CREATOR"]')); - fileSizeFilter = element(by.css('mat-expansion-panel[data-automation-id="expansion-panel-SEARCH.FACET_FIELDS.SIZE"]')); - nameFilter = element(by.css('mat-expansion-panel[data-automation-id="expansion-panel-Name"]')); - checkListFilter = element(by.css('mat-expansion-panel[data-automation-id="expansion-panel-Check List"]')); - createdDateRangeFilter = element(by.css('mat-expansion-panel[data-automation-id="expansion-panel-Created Date (range)"]')); - typeFilter = element(by.css('mat-expansion-panel[data-automation-id="expansion-panel-Type"]')); - sizeRangeFilter = element(by.css('mat-expansion-panel[data-automation-id="expansion-panel-Content Size (range)"]')); - sizeSliderFilter = element(by.css('mat-expansion-panel[data-automation-id="expansion-panel-Content Size"]')); - facetQueriesDefaultGroup = element(by.css('mat-expansion-panel[data-automation-id="expansion-panel-SEARCH.FACET_QUERIES.MY_FACET_QUERIES"],' + + searchFilters: ElementFinder = element(by.css('adf-search-filter')); + fileTypeFilter: ElementFinder = element(by.css('mat-expansion-panel[data-automation-id="expansion-panel-SEARCH.FACET_FIELDS.TYPE"]')); + creatorFilter: ElementFinder = element(by.css('mat-expansion-panel[data-automation-id="expansion-panel-SEARCH.FACET_FIELDS.CREATOR"]')); + fileSizeFilter: ElementFinder = element(by.css('mat-expansion-panel[data-automation-id="expansion-panel-SEARCH.FACET_FIELDS.SIZE"]')); + nameFilter: ElementFinder = element(by.css('mat-expansion-panel[data-automation-id="expansion-panel-Name"]')); + checkListFilter: ElementFinder = element(by.css('mat-expansion-panel[data-automation-id="expansion-panel-Check List"]')); + createdDateRangeFilter: ElementFinder = element(by.css('mat-expansion-panel[data-automation-id="expansion-panel-Created Date (range)"]')); + typeFilter: ElementFinder = element(by.css('mat-expansion-panel[data-automation-id="expansion-panel-Type"]')); + sizeRangeFilter: ElementFinder = element(by.css('mat-expansion-panel[data-automation-id="expansion-panel-Content Size (range)"]')); + sizeSliderFilter: ElementFinder = element(by.css('mat-expansion-panel[data-automation-id="expansion-panel-Content Size"]')); + facetQueriesDefaultGroup: ElementFinder = element(by.css('mat-expansion-panel[data-automation-id="expansion-panel-SEARCH.FACET_QUERIES.MY_FACET_QUERIES"],' + 'mat-expansion-panel[data-automation-id="expansion-panel-My facet queries"]')); - facetQueriesTypeGroup = element(by.css('mat-expansion-panel[data-automation-id="expansion-panel-Type facet queries"]')); - facetQueriesSizeGroup = element(by.css('mat-expansion-panel[data-automation-id="expansion-panel-Size facet queries"]')); - facetIntervalsByCreated = element(by.css('mat-expansion-panel[data-automation-id="expansion-panel-The Created"]')); - facetIntervalsByModified = element(by.css('mat-expansion-panel[data-automation-id="expansion-panel-TheModified"]')); + facetQueriesTypeGroup: ElementFinder = element(by.css('mat-expansion-panel[data-automation-id="expansion-panel-Type facet queries"]')); + facetQueriesSizeGroup: ElementFinder = element(by.css('mat-expansion-panel[data-automation-id="expansion-panel-Size facet queries"]')); + facetIntervalsByCreated: ElementFinder = element(by.css('mat-expansion-panel[data-automation-id="expansion-panel-The Created"]')); + facetIntervalsByModified: ElementFinder = element(by.css('mat-expansion-panel[data-automation-id="expansion-panel-TheModified"]')); - checkSearchFiltersIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.searchFilters); + async checkSearchFiltersIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.searchFilters); } - sizeRangeFilterPage() { - return this.searchCategoriesPage.numberRangeFilter(this.sizeRangeFilter); + sizeRangeFilterPage(): NumberRangeFilterPage { + return SearchCategoriesPage.numberRangeFilter(this.sizeRangeFilter); } - createdDateRangeFilterPage() { - return this.searchCategoriesPage.dateRangeFilter(this.createdDateRangeFilter); + createdDateRangeFilterPage(): DateRangeFilterPage { + return SearchCategoriesPage.dateRangeFilter(this.createdDateRangeFilter); } - textFiltersPage() { - return this.searchCategoriesPage.textFiltersPage(this.nameFilter); + textFiltersPage(): SearchTextPage { + return SearchCategoriesPage.textFiltersPage(this.nameFilter); } - checkListFiltersPage() { - return this.searchCategoriesPage.checkListFiltersPage(this.checkListFilter); + checkListFiltersPage(): SearchCheckListPage { + return SearchCategoriesPage.checkListFiltersPage(this.checkListFilter); } - creatorCheckListFiltersPage() { - return this.searchCategoriesPage.checkListFiltersPage(this.creatorFilter); + creatorCheckListFiltersPage(): SearchCheckListPage { + return SearchCategoriesPage.checkListFiltersPage(this.creatorFilter); } - fileTypeCheckListFiltersPage() { - return this.searchCategoriesPage.checkListFiltersPage(this.fileTypeFilter); + fileTypeCheckListFiltersPage(): SearchCheckListPage { + return SearchCategoriesPage.checkListFiltersPage(this.fileTypeFilter); } - checkCustomFacetFieldLabelIsDisplayed(fieldLabel) { - BrowserVisibility.waitUntilElementIsVisible(element(by.css(`mat-expansion-panel[data-automation-id="expansion-panel-${fieldLabel}"]`))); + typeFiltersPage(): SearchRadioPage { + return SearchCategoriesPage.radioFiltersPage(this.typeFilter); } - sizeSliderFilterPage() { - return this.searchCategoriesPage.sliderFilter(this.sizeSliderFilter); + async checkCustomFacetFieldLabelIsDisplayed(fieldLabel): Promise { + await BrowserVisibility.waitUntilElementIsVisible(element(by.css(`mat-expansion-panel[data-automation-id="expansion-panel-${fieldLabel}"]`))); } - checkFileTypeFilterIsDisplayed() { - this.searchCategoriesPage.checkFilterIsDisplayed(this.fileTypeFilter); - return this; + sizeSliderFilterPage(): SearchSliderPage { + return SearchCategoriesPage.sliderFilter(this.sizeSliderFilter); } - checkCreatorFilterIsDisplayed() { - this.searchCategoriesPage.checkFilterIsDisplayed(this.creatorFilter); - return this; + async checkCheckListFilterIsDisplayed(): Promise { + await this.searchCategoriesPage.checkFilterIsDisplayed(this.checkListFilter); } - checkCheckListFilterIsDisplayed() { - this.searchCategoriesPage.checkFilterIsDisplayed(this.checkListFilter); - return this; + async checkNameFilterIsExpanded(): Promise { + await this.searchCategoriesPage.checkFilterIsExpanded(this.nameFilter); } - checkNameFilterIsExpanded() { - this.searchCategoriesPage.checkFilterIsExpanded(this.nameFilter); - return this; + async checkNameFilterIsDisplayed(): Promise { + await this.searchCategoriesPage.checkFilterIsDisplayed(this.nameFilter); } - checkNameFilterIsDisplayed() { - this.searchCategoriesPage.checkFilterIsDisplayed(this.nameFilter); - return this; + async checkDefaultFacetQueryGroupIsDisplayed(): Promise { + await this.searchCategoriesPage.checkFilterIsDisplayed(this.facetQueriesDefaultGroup); } - checkDefaultFacetQueryGroupIsDisplayed() { - this.searchCategoriesPage.checkFilterIsDisplayed(this.facetQueriesDefaultGroup); - return this; + async checkTypeFacetQueryGroupIsDisplayed(): Promise { + await this.searchCategoriesPage.checkFilterIsDisplayed(this.facetQueriesTypeGroup); } - checkTypeFacetQueryGroupIsDisplayed() { - this.searchCategoriesPage.checkFilterIsDisplayed(this.facetQueriesTypeGroup); - return this; + async checkSizeFacetQueryGroupIsDisplayed(): Promise { + await this.searchCategoriesPage.checkFilterIsDisplayed(this.facetQueriesSizeGroup); } - checkSizeFacetQueryGroupIsDisplayed() { - this.searchCategoriesPage.checkFilterIsDisplayed(this.facetQueriesSizeGroup); - return this; + async checkFacetIntervalsByCreatedIsDisplayed(): Promise { + await this.searchCategoriesPage.checkFilterIsDisplayed(this.facetIntervalsByCreated); } - checkFacetIntervalsByCreatedIsDisplayed() { - this.searchCategoriesPage.checkFilterIsDisplayed(this.facetIntervalsByCreated); - return this; + async checkFacetIntervalsByModifiedIsDisplayed(): Promise { + await this.searchCategoriesPage.checkFilterIsDisplayed(this.facetIntervalsByModified); } - checkFacetIntervalsByModifiedIsDisplayed() { - this.searchCategoriesPage.checkFilterIsDisplayed(this.facetIntervalsByModified); - return this; + async isTypeFacetQueryGroupPresent(): Promise { + return await this.facetQueriesTypeGroup.isPresent(); } - isTypeFacetQueryGroupPresent() { - return this.facetQueriesTypeGroup.isPresent(); + async isSizeFacetQueryGroupPresent(): Promise { + return await this.facetQueriesSizeGroup.isPresent(); } - isSizeFacetQueryGroupPresent() { - return this.facetQueriesSizeGroup.isPresent(); + async clickCheckListFilter(): Promise { + await this.searchCategoriesPage.clickFilter(this.checkListFilter); } - clickCheckListFilter() { - this.searchCategoriesPage.clickFilter(this.checkListFilter); - return this; + async clickFileTypeListFilter(): Promise { + await this.searchCategoriesPage.clickFilter(this.fileTypeFilter); } - clickFileTypeListFilter() { - this.searchCategoriesPage.clickFilter(this.fileTypeFilter); - return this; + async clickFileSizeFilterHeader(): Promise { + await this.searchCategoriesPage.clickFilterHeader(this.fileSizeFilter); } - clickFileSizeFilterHeader() { - this.searchCategoriesPage.clickFilterHeader(this.fileSizeFilter); - return this; + async checkFileSizeFilterIsCollapsed(): Promise { + await this.searchCategoriesPage.checkFilterIsCollapsed(this.fileSizeFilter); } - checkFileSizeFilterIsCollapsed() { - this.searchCategoriesPage.checkFilterIsCollapsed(this.fileSizeFilter); - return this; + async checkFileTypeFilterIsCollapsed(): Promise { + await this.searchCategoriesPage.checkFilterIsCollapsed(this.fileTypeFilter); } - clickFileTypeFilterHeader() { - this.searchCategoriesPage.clickFilterHeader(this.fileTypeFilter); - return this; + async checkCheckListFilterIsCollapsed(): Promise { + await this.searchCategoriesPage.checkFilterIsCollapsed(this.checkListFilter); } - checkFileTypeFilterIsCollapsed() { - this.searchCategoriesPage.checkFilterIsCollapsed(this.fileTypeFilter); - return this; + async checkCheckListFilterIsExpanded(): Promise { + await this.searchCategoriesPage.checkFilterIsExpanded(this.checkListFilter); } - checkCheckListFilterIsCollapsed() { - this.searchCategoriesPage.checkFilterIsCollapsed(this.checkListFilter); + async checkCreatedRangeFilterIsDisplayed(): Promise { + await this.searchCategoriesPage.checkFilterIsDisplayed(this.createdDateRangeFilter); } - checkCheckListFilterIsExpanded() { - this.searchCategoriesPage.checkFilterIsExpanded(this.checkListFilter); - return this; + async clickCreatedRangeFilterHeader(): Promise { + await this.searchCategoriesPage.clickFilterHeader(this.createdDateRangeFilter); } - checkCreatedRangeFilterIsDisplayed() { - this.searchCategoriesPage.checkFilterIsDisplayed(this.createdDateRangeFilter); - return this; + async checkCreatedRangeFilterIsExpanded(): Promise { + await this.searchCategoriesPage.checkFilterIsExpanded(this.createdDateRangeFilter); } - clickCreatedRangeFilterHeader() { - this.searchCategoriesPage.clickFilterHeader(this.createdDateRangeFilter); - return this; + async checkTypeFilterIsDisplayed(): Promise { + await this.searchCategoriesPage.checkFilterIsDisplayed(this.typeFilter); } - checkCreatedRangeFilterIsExpanded() { - this.searchCategoriesPage.checkFilterIsExpanded(this.createdDateRangeFilter); - return this; + async checkTypeFilterIsCollapsed(): Promise { + await this.searchCategoriesPage.checkFilterIsCollapsed(this.typeFilter); } - typeFiltersPage() { - return this.searchCategoriesPage.radioFiltersPage(this.typeFilter); + async clickTypeFilterHeader(): Promise { + await this.searchCategoriesPage.clickFilterHeader(this.typeFilter); } - checkTypeFilterIsDisplayed() { - this.searchCategoriesPage.checkFilterIsDisplayed(this.typeFilter); - return this; + async checkSizeRangeFilterIsDisplayed(): Promise { + await this.searchCategoriesPage.checkFilterIsDisplayed(this.createdDateRangeFilter); } - clickTypeFilter() { - this.searchCategoriesPage.clickFilter(this.typeFilter); - return this; + async clickSizeRangeFilterHeader(): Promise { + await this.searchCategoriesPage.clickFilterHeader(this.sizeRangeFilter); } - checkTypeFilterIsCollapsed() { - this.searchCategoriesPage.checkFilterIsCollapsed(this.typeFilter); - return this; + async checkSizeRangeFilterIsExpanded(): Promise { + await this.searchCategoriesPage.checkFilterIsExpanded(this.sizeRangeFilter); } - clickTypeFilterHeader() { - this.searchCategoriesPage.clickFilterHeader(this.typeFilter); - return this; + async checkSizeRangeFilterIsCollapsed(): Promise { + await this.searchCategoriesPage.checkFilterIsCollapsed(this.sizeRangeFilter); } - checkSizeRangeFilterIsDisplayed() { - this.searchCategoriesPage.checkFilterIsDisplayed(this.createdDateRangeFilter); - return this; + async checkSizeSliderFilterIsDisplayed(): Promise { + await this.searchCategoriesPage.checkFilterIsDisplayed(this.sizeSliderFilter); } - clickSizeRangeFilterHeader() { - this.searchCategoriesPage.clickFilterHeader(this.sizeRangeFilter); - return this; + async clickSizeSliderFilterHeader(): Promise { + await this.searchCategoriesPage.clickFilterHeader(this.sizeSliderFilter); } - checkSizeRangeFilterIsExpanded() { - this.searchCategoriesPage.checkFilterIsExpanded(this.sizeRangeFilter); - return this; + async checkSizeSliderFilterIsExpanded(): Promise { + await this.searchCategoriesPage.checkFilterIsExpanded(this.sizeSliderFilter); } - checkSizeRangeFilterIsCollapsed() { - this.searchCategoriesPage.checkFilterIsCollapsed(this.sizeRangeFilter); - return this; + async checkSizeSliderFilterIsCollapsed(): Promise { + await this.searchCategoriesPage.checkFilterIsCollapsed(this.sizeSliderFilter); } - checkSizeSliderFilterIsDisplayed() { - this.searchCategoriesPage.checkFilterIsDisplayed(this.sizeSliderFilter); - return this; + async checkFacetIntervalsByCreatedIsExpanded(): Promise { + await this.searchCategoriesPage.checkFilterIsExpanded(this.facetIntervalsByCreated); } - clickSizeSliderFilterHeader() { - this.searchCategoriesPage.clickFilterHeader(this.sizeSliderFilter); - return this; + async checkFacetIntervalsByCreatedIsCollapsed(): Promise { + await this.searchCategoriesPage.checkFilterIsCollapsed(this.facetIntervalsByCreated); } - checkSizeSliderFilterIsExpanded() { - this.searchCategoriesPage.checkFilterIsExpanded(this.sizeSliderFilter); - return this; + async clickFacetIntervalsByCreatedFilterHeader(): Promise { + await this.searchCategoriesPage.clickFilterHeader(this.facetIntervalsByCreated); } - checkSizeSliderFilterIsCollapsed() { - this.searchCategoriesPage.checkFilterIsCollapsed(this.sizeSliderFilter); - return this; + async checkFacetIntervalsByModifiedIsExpanded(): Promise { + await this.searchCategoriesPage.checkFilterIsExpanded(this.facetIntervalsByModified); } - checkFacetIntervalsByCreatedIsExpanded() { - this.searchCategoriesPage.checkFilterIsExpanded(this.facetIntervalsByCreated); - return this; + async checkFacetIntervalsByModifiedIsCollapsed(): Promise { + await this.searchCategoriesPage.checkFilterIsCollapsed(this.facetIntervalsByModified); } - checkFacetIntervalsByCreatedIsCollapsed() { - this.searchCategoriesPage.checkFilterIsCollapsed(this.facetIntervalsByCreated); - return this; + async clickFacetIntervalsByModifiedFilterHeader(): Promise { + await this.searchCategoriesPage.clickFilterHeader(this.facetIntervalsByModified); } - clickFacetIntervalsByCreatedFilterHeader() { - this.searchCategoriesPage.clickFilterHeader(this.facetIntervalsByCreated); - return this; + async checkFileTypeFacetLabelIsDisplayed(fileType: string | RegExp): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.fileTypeFilter.element(by.cssContainingText('.adf-facet-label', fileType))); } - checkFacetIntervalsByModifiedIsExpanded() { - this.searchCategoriesPage.checkFilterIsExpanded(this.facetIntervalsByModified); - return this; - } - - checkFacetIntervalsByModifiedIsCollapsed() { - this.searchCategoriesPage.checkFilterIsCollapsed(this.facetIntervalsByModified); - return this; - } - - clickFacetIntervalsByModifiedFilterHeader() { - this.searchCategoriesPage.clickFilterHeader(this.facetIntervalsByModified); - return this; - } - - checkFileTypeFacetLabelIsDisplayed(fileType: string | RegExp) { - BrowserVisibility.waitUntilElementIsVisible(this.fileTypeFilter.element(by.cssContainingText('.adf-facet-label', fileType))); - return this; - } - - checkFileTypeFacetLabelIsNotDisplayed(fileType: string | RegExp) { - BrowserVisibility.waitUntilElementIsNotVisible(this.fileTypeFilter.element(by.cssContainingText('.adf-facet-label', fileType))); - return this; + async checkFileTypeFacetLabelIsNotDisplayed(fileType: string | RegExp): Promise { + await BrowserVisibility.waitUntilElementIsNotVisible(this.fileTypeFilter.element(by.cssContainingText('.adf-facet-label', fileType))); } } diff --git a/e2e/pages/adf/searchResultsPage.ts b/e2e/pages/adf/searchResultsPage.ts index a29f76831f..671ac58a53 100644 --- a/e2e/pages/adf/searchResultsPage.ts +++ b/e2e/pages/adf/searchResultsPage.ts @@ -16,85 +16,75 @@ */ import { DataTableComponentPage } from '@alfresco/adf-testing'; -import { element, by } from 'protractor'; +import { element, by, ElementFinder } from 'protractor'; import { ContentServicesPage } from './contentServicesPage'; import { BrowserVisibility, SearchSortingPickerPage } from '@alfresco/adf-testing'; export class SearchResultsPage { - noResultsMessage = element(by.css('div[class="adf-no-result-message"]')); - dataTable = new DataTableComponentPage(); - searchSortingPicker = new SearchSortingPickerPage(); - contentServices = new ContentServicesPage(); + noResultsMessage: ElementFinder = element(by.css('div[class="adf-no-result-message"]')); + dataTable: DataTableComponentPage = new DataTableComponentPage(); + searchSortingPicker: SearchSortingPickerPage = new SearchSortingPickerPage(); + contentServices: ContentServicesPage = new ContentServicesPage(); getNodeHighlight(content) { return this.dataTable.getCellByRowContentAndColumn('Display name', content, 'Search'); } - tableIsLoaded() { - this.dataTable.tableIsLoaded(); + async tableIsLoaded(): Promise { + await this.dataTable.tableIsLoaded(); } - checkContentIsDisplayed(content) { - this.dataTable.checkContentIsDisplayed('Display name', content); - return this; + async checkContentIsDisplayed(content): Promise { + await this.dataTable.checkContentIsDisplayed('Display name', content); } - numberOfResultsDisplayed() { - return this.dataTable.numberOfRows(); + async numberOfResultsDisplayed(): Promise { + return await this.dataTable.numberOfRows(); } - checkContentIsNotDisplayed(content) { - this.dataTable.checkContentIsNotDisplayed('Display name', content); - return this; + async checkContentIsNotDisplayed(content): Promise { + await this.dataTable.checkContentIsNotDisplayed('Display name', content); } - checkNoResultMessageIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.noResultsMessage); - return this; + async checkNoResultMessageIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.noResultsMessage); } - checkNoResultMessageIsNotDisplayed() { - BrowserVisibility.waitUntilElementIsNotOnPage(this.noResultsMessage); - return this; + async checkNoResultMessageIsNotDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsNotVisible(this.noResultsMessage); } - navigateToFolder(content) { - this.dataTable.doubleClickRow('Display name', content); - return this; + async navigateToFolder(content): Promise { + await this.dataTable.doubleClickRow('Display name', content); } - deleteContent(content) { - this.contentServices.deleteContent(content); + async deleteContent(content): Promise { + await this.contentServices.deleteContent(content); } - sortByName(sortOrder: string) { - this.searchSortingPicker.sortBy(sortOrder, 'Name'); + async sortByName(sortOrder: string): Promise { + await this.searchSortingPicker.sortBy(sortOrder, 'Name'); } - sortByAuthor(sortOrder: string) { - this.searchSortingPicker.sortBy(sortOrder, 'Author'); + async sortByAuthor(sortOrder: string): Promise { + await this.searchSortingPicker.sortBy(sortOrder, 'Author'); } - sortByCreated(sortOrder: string) { - this.searchSortingPicker.sortBy(sortOrder, 'Created'); + async sortByCreated(sortOrder: string): Promise { + await this.searchSortingPicker.sortBy(sortOrder, 'Created'); } - sortBySize(sortOrder: string) { - this.searchSortingPicker.sortBy(sortOrder, 'Size'); - return this; + async sortBySize(sortOrder: string): Promise { + await this.searchSortingPicker.sortBy(sortOrder, 'Size'); } - async checkListIsOrderedByNameAsc() { + async checkListIsOrderedByNameAsc(): Promise { return this.contentServices.contentList.dataTablePage().checkListIsSorted('ASC', 'Display name'); } - async checkListIsOrderedByNameDesc() { + async checkListIsOrderedByNameDesc(): Promise { return this.contentServices.contentList.dataTablePage().checkListIsSorted('DESC', 'Display name'); } - async checkListIsOrderedByAuthorAsc() { - return this.contentServices.contentList.dataTablePage().checkListIsSorted('ASC', 'Created by'); - } - } diff --git a/e2e/pages/adf/tagPage.ts b/e2e/pages/adf/tagPage.ts index 439c8c0528..7e3e39f56e 100644 --- a/e2e/pages/adf/tagPage.ts +++ b/e2e/pages/adf/tagPage.ts @@ -15,220 +15,196 @@ * limitations under the License. */ -import { element, by, protractor, browser } from 'protractor'; +import { element, by, protractor, browser, ElementFinder, ElementArrayFinder } from 'protractor'; import { BrowserVisibility, BrowserActions } from '@alfresco/adf-testing'; export class TagPage { - addTagButton = element(by.css('button[id="add-tag"]')); - insertNodeIdElement = element(by.css('input[id="nodeId"]')); - newTagInput = element(by.css('input[id="new-tag-text"]')); - tagListRow = element(by.css('adf-tag-node-actions-list mat-list-item')); - tagListByNodeIdRow = element(by.css('adf-tag-node-list mat-chip')); - errorMessage = element(by.css('mat-hint[data-automation-id="errorMessage"]')); + addTagButton: ElementFinder = element(by.css('button[id="add-tag"]')); + insertNodeIdElement: ElementFinder = element(by.css('input[id="nodeId"]')); + newTagInput: ElementFinder = element(by.css('input[id="new-tag-text"]')); + tagListRow: ElementFinder = element(by.css('adf-tag-node-actions-list mat-list-item')); + tagListByNodeIdRow: ElementFinder = element(by.css('adf-tag-node-list mat-chip')); + errorMessage: ElementFinder = element(by.css('mat-hint[data-automation-id="errorMessage"]')); tagListRowLocator = by.css('adf-tag-node-actions-list mat-list-item div'); tagListByNodeIdRowLocator = by.css('adf-tag-node-list mat-chip span'); tagListContentServicesRowLocator = by.css('div[class*="adf-list-tag"]'); - showDeleteButton = element(by.id('adf-remove-button-tag')); - showMoreButton = element(by.css('button[data-automation-id="show-more-tags"]')); - showLessButton = element(by.css('button[data-automation-id="show-fewer-tags"]')); - tagsOnPage = element.all(by.css('div[class*="adf-list-tag"]')); - confirmTag = element(by.id('adf-tag-node-send')); + showDeleteButton: ElementFinder = element(by.id('adf-remove-button-tag')); + showMoreButton: ElementFinder = element(by.css('button[data-automation-id="show-more-tags"]')); + showLessButton: ElementFinder = element(by.css('button[data-automation-id="show-fewer-tags"]')); + tagsOnPage: ElementArrayFinder = element.all(by.css('div[class*="adf-list-tag"]')); + confirmTag: ElementFinder = element(by.id('adf-tag-node-send')); - getNodeId() { - BrowserVisibility.waitUntilElementIsVisible(this.insertNodeIdElement); - return this.insertNodeIdElement.getAttribute('value'); + async getNodeId(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.insertNodeIdElement); + return await this.insertNodeIdElement.getAttribute('value'); } - insertNodeId(nodeId) { - BrowserActions.clearSendKeys(this.insertNodeIdElement, nodeId); + async insertNodeId(nodeId) { + await BrowserActions.clearSendKeys(this.insertNodeIdElement, nodeId); - browser.driver.sleep(200); - this.insertNodeIdElement.sendKeys(' '); - browser.driver.sleep(200); - this.insertNodeIdElement.sendKeys(protractor.Key.BACK_SPACE); - this.clickConfirmTag(); + await browser.sleep(200); + await this.insertNodeIdElement.sendKeys(' '); + await browser.sleep(200); + await this.insertNodeIdElement.sendKeys(protractor.Key.BACK_SPACE); + await this.clickConfirmTag(); } - addNewTagInput(tag) { - BrowserVisibility.waitUntilElementIsVisible(this.newTagInput); - BrowserActions.clearSendKeys(this.newTagInput, tag); - return this; + async addNewTagInput(tag) { + await BrowserVisibility.waitUntilElementIsVisible(this.newTagInput); + await BrowserActions.clearSendKeys(this.newTagInput, tag); } - addTag(tag) { - this.addNewTagInput(tag); - BrowserActions.click(this.addTagButton); - return this; + async addTag(tag): Promise { + await this.addNewTagInput(tag); + await BrowserActions.click(this.addTagButton); } - deleteTagFromTagListByNodeId(name) { - const deleteChip = element(by.id('tag_chips_delete_' + name)); - BrowserActions.click(deleteChip); - return this; + async deleteTagFromTagListByNodeId(name): Promise { + const deleteChip: ElementFinder = element(by.id('tag_chips_delete_' + name)); + await BrowserActions.click(deleteChip); } - deleteTagFromTagList(name) { - const deleteChip = element(by.id('tag_chips_delete_' + name)); - BrowserActions.click(deleteChip); - return this; + async deleteTagFromTagList(name): Promise { + const deleteChip: ElementFinder = element(by.id('tag_chips_delete_' + name)); + await BrowserActions.click(deleteChip); } - getNewTagInput() { - BrowserVisibility.waitUntilElementIsVisible(this.newTagInput); - return this.newTagInput.getAttribute('value'); + async getNewTagInput(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.newTagInput); + return await this.newTagInput.getAttribute('value'); } - getNewTagPlaceholder() { - BrowserVisibility.waitUntilElementIsVisible(this.newTagInput); - return this.newTagInput.getAttribute('placeholder'); + async getNewTagPlaceholder(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.newTagInput); + return await this.newTagInput.getAttribute('placeholder'); } - addTagButtonIsEnabled() { - BrowserVisibility.waitUntilElementIsVisible(this.addTagButton); - return this.addTagButton.isEnabled(); + async addTagButtonIsEnabled(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.addTagButton); + return await this.addTagButton.isEnabled(); } - checkTagIsDisplayedInTagList(tagName) { - const tag = element(by.cssContainingText('div[id*="tag_name"]', tagName)); - return BrowserVisibility.waitUntilElementIsVisible(tag); + async checkTagIsDisplayedInTagList(tagName): Promise { + const tag: ElementFinder = element(by.cssContainingText('div[id*="tag_name"]', tagName)); + await BrowserVisibility.waitUntilElementIsVisible(tag); } - checkTagIsNotDisplayedInTagList(tagName) { - const tag = element(by.cssContainingText('div[id*="tag_name"]', tagName)); - return BrowserVisibility.waitUntilElementIsNotOnPage(tag); + async checkTagIsNotDisplayedInTagList(tagName): Promise { + const tag: ElementFinder = element(by.cssContainingText('div[id*="tag_name"]', tagName)); + await BrowserVisibility.waitUntilElementIsNotVisible(tag); } - checkTagIsNotDisplayedInTagListByNodeId(tagName) { - const tag = element(by.cssContainingText('span[id*="tag_name"]', tagName)); - return BrowserVisibility.waitUntilElementIsNotOnPage(tag); + async checkTagIsNotDisplayedInTagListByNodeId(tagName): Promise { + const tag: ElementFinder = element(by.cssContainingText('span[id*="tag_name"]', tagName)); + await BrowserVisibility.waitUntilElementIsNotVisible(tag); } - checkTagIsDisplayedInTagListByNodeId(tagName) { - const tag = element(by.cssContainingText('span[id*="tag_name"]', tagName)); - return BrowserVisibility.waitUntilElementIsVisible(tag); + async checkTagIsDisplayedInTagListByNodeId(tagName): Promise { + const tag: ElementFinder = element(by.cssContainingText('span[id*="tag_name"]', tagName)); + await BrowserVisibility.waitUntilElementIsVisible(tag); } - checkTagListIsEmpty() { - BrowserVisibility.waitUntilElementIsNotOnPage(this.tagListRow); + async checkTagListIsEmpty(): Promise { + await BrowserVisibility.waitUntilElementIsNotVisible(this.tagListRow); } - checkTagListByNodeIdIsEmpty() { - return BrowserVisibility.waitUntilElementIsNotOnPage(this.tagListByNodeIdRow); + async checkTagListByNodeIdIsEmpty(): Promise { + await BrowserVisibility.waitUntilElementIsNotVisible(this.tagListByNodeIdRow); } - checkTagIsDisplayedInTagListContentServices(tagName) { - const tag = element(by.cssContainingText('div[class="adf-list-tag"][id*="tag_name"]', tagName)); - return BrowserVisibility.waitUntilElementIsVisible(tag); + async checkTagIsDisplayedInTagListContentServices(tagName): Promise { + const tag: ElementFinder = element(by.cssContainingText('div[class="adf-list-tag"][id*="tag_name"]', tagName)); + await BrowserVisibility.waitUntilElementIsVisible(tag); } - getErrorMessage() { - return BrowserActions.getText(this.errorMessage); + async getErrorMessage(): Promise { + return await BrowserActions.getText(this.errorMessage); } - checkTagListIsOrderedAscending() { - const deferred = protractor.promise.defer(); - this.checkListIsSorted(false, this.tagListRowLocator).then((result) => { - deferred.fulfill(result); - }); - return deferred.promise; + async checkTagListIsOrderedAscending(): Promise { + await this.checkListIsSorted(false, this.tagListRowLocator); } - checkTagListByNodeIdIsOrderedAscending() { - const deferred = protractor.promise.defer(); - this.checkListIsSorted(false, this.tagListByNodeIdRowLocator).then((result) => { - deferred.fulfill(result); - }); - return deferred.promise; + async checkTagListByNodeIdIsOrderedAscending(): Promise { + await this.checkListIsSorted(false, this.tagListByNodeIdRowLocator); } - checkTagListContentServicesIsOrderedAscending() { - const deferred = protractor.promise.defer(); - this.checkListIsSorted(false, this.tagListContentServicesRowLocator).then((result) => { - deferred.fulfill(result); - }); - return deferred.promise; + async checkTagListContentServicesIsOrderedAscending(): Promise { + await this.checkListIsSorted(false, this.tagListContentServicesRowLocator); } - checkListIsSorted(sortOrder, locator) { - const deferred = protractor.promise.defer(); - const tagList = element.all(locator); - BrowserVisibility.waitUntilElementIsVisible(tagList.first()); + async checkListIsSorted(sortOrder, locator): Promise { + const tagList: ElementArrayFinder = element.all(locator); + await BrowserVisibility.waitUntilElementIsVisible(tagList.first()); const initialList = []; - tagList.each(function (currentElement) { - currentElement.getText().then(function (text) { - initialList.push(text); - }); - }).then(function () { - let sortedList = initialList; - sortedList = sortedList.sort(); - if (sortOrder === false) { - sortedList = sortedList.reverse(); - } - deferred.fulfill(initialList.toString() === sortedList.toString()); + await tagList.each(async (currentElement) => { + const text = await BrowserActions.getText(currentElement); + initialList.push(text); }); - return deferred.promise; + let sortedList = initialList; + sortedList = sortedList.sort(); + if (sortOrder === false) { + sortedList = sortedList.reverse(); + } + return initialList.toString() === sortedList.toString(); } - checkDeleteTagFromTagListByNodeIdIsDisplayed(name) { - const deleteChip = element(by.id('tag_chips_delete_' + name)); - return BrowserVisibility.waitUntilElementIsVisible(deleteChip); + async checkDeleteTagFromTagListByNodeIdIsDisplayed(name): Promise { + const deleteChip: ElementFinder = element(by.id('tag_chips_delete_' + name)); + await BrowserVisibility.waitUntilElementIsVisible(deleteChip); } - checkDeleteTagFromTagListByNodeIdIsNotDisplayed(name) { - const deleteChip = element(by.id('tag_chips_delete_' + name)); - return BrowserVisibility.waitUntilElementIsNotVisible(deleteChip); + async checkDeleteTagFromTagListByNodeIdIsNotDisplayed(name): Promise { + const deleteChip: ElementFinder = element(by.id('tag_chips_delete_' + name)); + await BrowserVisibility.waitUntilElementIsNotVisible(deleteChip); } - clickShowDeleteButtonSwitch() { - BrowserActions.click(this.showDeleteButton); + async clickShowDeleteButtonSwitch(): Promise { + await BrowserActions.click(this.showDeleteButton); } - checkShowMoreButtonIsDisplayed() { - return BrowserVisibility.waitUntilElementIsVisible(this.showMoreButton); + async checkShowMoreButtonIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.showMoreButton); } - clickShowMoreButton() { - return BrowserActions.click(this.showMoreButton); + async clickShowMoreButton(): Promise { + await BrowserActions.click(this.showMoreButton); } - clickShowLessButton() { - return BrowserActions.click(this.showLessButton); + async clickShowLessButton(): Promise { + await BrowserActions.click(this.showLessButton); } - clickConfirmTag() { - return BrowserActions.click(this.confirmTag); + async clickConfirmTag(): Promise { + await BrowserActions.click(this.confirmTag); } - checkTagsOnList() { - return this.tagsOnPage.count(); + async checkTagsOnList(): Promise { + return await this.tagsOnPage.count(); } - checkShowLessButtonIsDisplayed() { - return BrowserVisibility.waitUntilElementIsVisible(this.showLessButton); + async checkShowLessButtonIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.showLessButton); } - checkShowLessButtonIsNotDisplayed() { - return BrowserVisibility.waitUntilElementIsNotVisible(this.showLessButton); + async checkShowLessButtonIsNotDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsNotVisible(this.showLessButton); } - clickShowMoreButtonUntilNotDisplayed() { - this.showMoreButton.isDisplayed().then((visible) => { - if (visible) { - BrowserActions.click(this.showMoreButton); - this.clickShowMoreButtonUntilNotDisplayed(); - } - }, () => { - }); + async clickShowMoreButtonUntilNotDisplayed(): Promise { + const visible = await this.showMoreButton.isDisplayed(); + if (visible) { + await BrowserActions.click(this.showMoreButton); + await this.clickShowMoreButtonUntilNotDisplayed(); + } } - clickShowLessButtonUntilNotDisplayed() { - this.showLessButton.isDisplayed().then((visible) => { - if (visible) { - BrowserActions.click(this.showLessButton); - this.clickShowLessButtonUntilNotDisplayed(); - } - }, () => { - }); + async clickShowLessButtonUntilNotDisplayed(): Promise { + const visible = await this.showLessButton.isDisplayed(); + if (visible) { + await BrowserActions.click(this.showLessButton); + await this.clickShowLessButtonUntilNotDisplayed(); + } } } diff --git a/e2e/pages/adf/trashcanPage.ts b/e2e/pages/adf/trashcanPage.ts index f0ee5f23eb..9c1a183e26 100644 --- a/e2e/pages/adf/trashcanPage.ts +++ b/e2e/pages/adf/trashcanPage.ts @@ -17,50 +17,47 @@ import { BrowserActions, BrowserVisibility, DocumentListPage } from '@alfresco/adf-testing'; -import { element, by } from 'protractor'; +import { element, by, ElementFinder, Locator } from 'protractor'; export class TrashcanPage { - contentList = new DocumentListPage(element(by.css('adf-document-list'))); - rows = by.css('adf-document-list div[class*="adf-datatable-body"] div[class*="adf-datatable-row"]'); - tableBody = element.all(by.css('adf-document-list div[class="adf-datatable-body"]')).first(); - pagination = element(by.css('adf-pagination')); - emptyTrashcan = element(by.css('adf-empty-content')); - restoreButton = element(by.css(`button[title='Restore']`)); + contentList: DocumentListPage = new DocumentListPage(element(by.css('adf-document-list'))); + rows: Locator = by.css('adf-document-list div[class*="adf-datatable-body"] div[class*="adf-datatable-row"]'); + tableBody: ElementFinder = element.all(by.css('adf-document-list div[class="adf-datatable-body"]')).first(); + pagination: ElementFinder = element(by.css('adf-pagination')); + emptyTrashcan: ElementFinder = element(by.css('adf-empty-content')); + restoreButton: ElementFinder = element(by.css(`button[title='Restore']`)); - numberOfResultsDisplayed() { - return element.all(this.rows).count(); + async numberOfResultsDisplayed(): Promise { + return await element.all(this.rows).count(); } - waitForTableBody() { - BrowserVisibility.waitUntilElementIsVisible(this.tableBody); + async waitForTableBody(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.tableBody); } - waitForPagination() { - BrowserVisibility.waitUntilElementIsVisible(this.pagination); + async waitForPagination(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.pagination); } - checkTrashcanIsEmpty() { - BrowserVisibility.waitUntilElementIsVisible(this.emptyTrashcan); + async checkTrashcanIsEmpty(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.emptyTrashcan); } - getDocumentList() { + getDocumentList(): DocumentListPage { return this.contentList; } - clickRestore() { - BrowserActions.click(this.restoreButton); - return this; + async clickRestore(): Promise { + await BrowserActions.click(this.restoreButton); } - checkRestoreButtonIsNotDisplayed() { - BrowserVisibility.waitUntilElementIsNotVisible(this.restoreButton); - return this; + async checkRestoreButtonIsNotDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsNotVisible(this.restoreButton); } - checkRestoreButtonIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.restoreButton); - return this; + async checkRestoreButtonIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.restoreButton); } } diff --git a/e2e/pages/adf/versionManagerPage.ts b/e2e/pages/adf/versionManagerPage.ts index d71b03bace..f50b63e5f3 100644 --- a/e2e/pages/adf/versionManagerPage.ts +++ b/e2e/pages/adf/versionManagerPage.ts @@ -16,190 +16,172 @@ */ import path = require('path'); -import remote = require('selenium-webdriver/remote'); -import { browser, by, element } from 'protractor'; +import { browser, by, element, ElementFinder } from 'protractor'; import { FormControllersPage } from '@alfresco/adf-testing'; import { BrowserVisibility, BrowserActions } from '@alfresco/adf-testing'; export class VersionManagePage { - formControllersPage = new FormControllersPage(); + formControllersPage: FormControllersPage = new FormControllersPage(); - showNewVersionButton = element(by.id('adf-show-version-upload-button')); - uploadNewVersionButton = element(by.css('adf-upload-version-button input[data-automation-id="upload-single-file"]')); - uploadNewVersionContainer = element(by.id('adf-new-version-uploader-container')); - cancelButton = element(by.id('adf-new-version-cancel')); - majorRadio = element(by.id('adf-new-version-major')); - minorRadio = element(by.id('adf-new-version-minor')); - commentText = element(by.id('adf-new-version-text-area')); - readOnlySwitch = element(by.id('adf-version-manager-switch-readonly')); - downloadSwitch = element(by.id('adf-version-manager-switch-download')); - commentsSwitch = element(by.id('adf-version-manager-switch-comments')); + showNewVersionButton: ElementFinder = element(by.id('adf-show-version-upload-button')); + uploadNewVersionInput: ElementFinder = element(by.css('adf-upload-version-button input[data-automation-id="upload-single-file"]')); + uploadNewVersionButton: ElementFinder = element(by.css('adf-upload-version-button')); + uploadNewVersionContainer: ElementFinder = element(by.id('adf-new-version-uploader-container')); + cancelButton: ElementFinder = element(by.id('adf-new-version-cancel')); + majorRadio: ElementFinder = element(by.id('adf-new-version-major')); + minorRadio: ElementFinder = element(by.id('adf-new-version-minor')); + commentText: ElementFinder = element(by.id('adf-new-version-text-area')); + readOnlySwitch: ElementFinder = element(by.id('adf-version-manager-switch-readonly')); + downloadSwitch: ElementFinder = element(by.id('adf-version-manager-switch-download')); + commentsSwitch: ElementFinder = element(by.id('adf-version-manager-switch-comments')); - checkUploadNewVersionsButtonIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.showNewVersionButton); - return this; + async checkUploadNewVersionsButtonIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.showNewVersionButton); } - checkCancelButtonIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.cancelButton); - return this; + async checkCancelButtonIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.cancelButton); } - uploadNewVersionFile(fileLocation) { - browser.setFileDetector(new remote.FileDetector()); - BrowserVisibility.waitUntilElementIsVisible(this.uploadNewVersionButton); - this.uploadNewVersionButton.sendKeys(path.resolve(path.join(browser.params.testConfig.main.rootPath, fileLocation))); - BrowserVisibility.waitUntilElementIsVisible(this.showNewVersionButton); - return this; + async uploadNewVersionFile(fileLocation): Promise { + await BrowserVisibility.waitUntilElementIsPresent(this.uploadNewVersionInput); + await this.uploadNewVersionInput.sendKeys(path.resolve(path.join(browser.params.testConfig.main.rootPath, fileLocation))); + await BrowserVisibility.waitUntilElementIsVisible(this.showNewVersionButton); } - getFileVersionName(version) { - const fileElement = element(by.css(`[id="adf-version-list-item-name-${version}"]`)); - return BrowserActions.getText(fileElement); + async getFileVersionName(version): Promise { + const fileElement: ElementFinder = element(by.css(`[id="adf-version-list-item-name-${version}"]`)); + return await BrowserActions.getText(fileElement); } - checkFileVersionExist(version) { - const fileVersion = element(by.id(`adf-version-list-item-version-${version}`)); - return BrowserVisibility.waitUntilElementIsVisible(fileVersion); + async checkFileVersionExist(version): Promise { + const fileVersion: ElementFinder = element(by.id(`adf-version-list-item-version-${version}`)); + await BrowserVisibility.waitUntilElementIsVisible(fileVersion); } - checkFileVersionNotExist(version) { - const fileVersion = element(by.id(`adf-version-list-item-version-${version}`)); - return BrowserVisibility.waitUntilElementIsNotVisible(fileVersion); + async checkFileVersionNotExist(version): Promise { + const fileVersion: ElementFinder = element(by.id(`adf-version-list-item-version-${version}`)); + await BrowserVisibility.waitUntilElementIsNotVisible(fileVersion); } - getFileVersionComment(version) { - const fileComment = element(by.id(`adf-version-list-item-comment-${version}`)); - return BrowserActions.getText(fileComment); + async getFileVersionComment(version): Promise { + const fileComment: ElementFinder = element(by.id(`adf-version-list-item-comment-${version}`)); + return await BrowserActions.getText(fileComment); } - getFileVersionDate(version) { - const fileDate = element(by.id(`adf-version-list-item-date-${version}`)); - return BrowserActions.getText(fileDate); + async getFileVersionDate(version): Promise { + const fileDate: ElementFinder = element(by.id(`adf-version-list-item-date-${version}`)); + return await BrowserActions.getText(fileDate); } - enterCommentText(text) { - BrowserActions.clearSendKeys(this.commentText, text); - - return this; + async enterCommentText(text): Promise { + await BrowserActions.clearSendKeys(this.commentText, text); } - clickMajorChange() { - const radioMajor = element(by.id(`adf-new-version-major`)); - BrowserActions.click(radioMajor); + async clickMajorChange(): Promise { + const radioMajor: ElementFinder = element(by.id(`adf-new-version-major`)); + await BrowserActions.click(radioMajor); } - clickMinorChange() { - const radioMinor = element(by.id(`adf-new-version-minor`)); - BrowserActions.click(radioMinor); + async clickMinorChange(): Promise { + const radioMinor: ElementFinder = element(by.id(`adf-new-version-minor`)); + await BrowserActions.click(radioMinor); } /** * disables readOnly */ - disableReadOnly() { - this.formControllersPage.disableToggle(this.readOnlySwitch); + async disableReadOnly(): Promise { + await this.formControllersPage.disableToggle(this.readOnlySwitch); } /** * enables readOnly */ - enableReadOnly() { - this.formControllersPage.enableToggle(this.readOnlySwitch); + async enableReadOnly(): Promise { + await this.formControllersPage.enableToggle(this.readOnlySwitch); } /** * disables download */ - disableDownload() { - this.formControllersPage.disableToggle(this.downloadSwitch); + async disableDownload(): Promise { + await this.formControllersPage.disableToggle(this.downloadSwitch); } /** * enables download */ - enableDownload() { - this.formControllersPage.enableToggle(this.downloadSwitch); + async enableDownload(): Promise { + await this.formControllersPage.enableToggle(this.downloadSwitch); } /** * * disables comments */ - disableComments() { - this.formControllersPage.disableToggle(this.commentsSwitch); + async disableComments(): Promise { + await this.formControllersPage.disableToggle(this.commentsSwitch); } /** * enables comments */ - enableComments() { - this.formControllersPage.enableToggle(this.commentsSwitch); + async enableComments(): Promise { + await this.formControllersPage.enableToggle(this.commentsSwitch); } - clickActionButton(version) { - BrowserActions.click(element(by.id(`adf-version-list-action-menu-button-${version}`))); - return this; + async clickActionButton(version): Promise { + await BrowserActions.click(element(by.id(`adf-version-list-action-menu-button-${version}`))); + await BrowserVisibility.waitUntilElementIsVisible(element(by.css('.cdk-overlay-container .mat-menu-content'))); } - clickAcceptConfirm() { - BrowserActions.click(element(by.id(`adf-confirm-accept`))); - return this; + async clickAcceptConfirm(): Promise { + await BrowserActions.click(element(by.id(`adf-confirm-accept`))); } - clickCancelConfirm() { - BrowserActions.click(element(by.id(`adf-confirm-cancel`))); - return this; + async clickCancelConfirm(): Promise { + await BrowserActions.click(element(by.id(`adf-confirm-cancel`))); } - closeActionsMenu() { - const container = element(by.css('div.cdk-overlay-backdrop.cdk-overlay-transparent-backdrop.cdk-overlay-backdrop-showing')); - BrowserActions.closeMenuAndDialogs(); - BrowserVisibility.waitUntilElementIsNotVisible(container); - return this; + async closeActionsMenu(): Promise { + await BrowserActions.closeMenuAndDialogs(); } - closeDisabledActionsMenu() { - const container = element(by.css('div.cdk-overlay-backdrop.cdk-overlay-transparent-backdrop.cdk-overlay-backdrop-showing')); - BrowserActions.closeDisabledMenu(); - BrowserVisibility.waitUntilElementIsNotVisible(container); - return this; + async closeDisabledActionsMenu(): Promise { + const container: ElementFinder = element(by.css('div.cdk-overlay-backdrop.cdk-overlay-transparent-backdrop.cdk-overlay-backdrop-showing')); + await BrowserActions.closeDisabledMenu(); + await BrowserVisibility.waitUntilElementIsNotVisible(container); } - downloadFileVersion(version) { - this.clickActionButton(version); - const downloadButton = element(by.id(`adf-version-list-action-download-${version}`)); - browser.driver.sleep(500); - BrowserActions.click(downloadButton); - return this; + async downloadFileVersion(version): Promise { + await this.clickActionButton(version); + const downloadButton: ElementFinder = element(by.id(`adf-version-list-action-download-${version}`)); + await BrowserActions.click(downloadButton); + await BrowserVisibility.waitUntilElementIsNotVisible(downloadButton); } - deleteFileVersion(version) { - this.clickActionButton(version); - const deleteButton = element(by.id(`adf-version-list-action-delete-${version}`)); - browser.driver.sleep(500); - BrowserActions.click(deleteButton); - return this; + async deleteFileVersion(version): Promise { + await this.clickActionButton(version); + const deleteButton: ElementFinder = element(by.id(`adf-version-list-action-delete-${version}`)); + await BrowserActions.click(deleteButton); } - restoreFileVersion(version) { - this.clickActionButton(version); - const restoreButton = element(by.id(`adf-version-list-action-restore-${version}`)); - BrowserVisibility.waitUntilElementIsVisible(restoreButton); - browser.driver.sleep(500); - BrowserActions.click(restoreButton); - return this; + async restoreFileVersion(version): Promise { + await this.clickActionButton(version); + const restoreButton: ElementFinder = element(by.id(`adf-version-list-action-restore-${version}`)); + await BrowserActions.click(restoreButton); } - checkActionsArePresent(version) { - BrowserVisibility.waitUntilElementIsVisible(element(by.id(`adf-version-list-action-download-${version}`))); - BrowserVisibility.waitUntilElementIsVisible(element(by.id(`adf-version-list-action-delete-${version}`))); - BrowserVisibility.waitUntilElementIsVisible(element(by.id(`adf-version-list-action-restore-${version}`))); + async checkActionsArePresent(version): Promise { + await BrowserVisibility.waitUntilElementIsVisible(element(by.id(`adf-version-list-action-download-${version}`))); + await BrowserVisibility.waitUntilElementIsVisible(element(by.id(`adf-version-list-action-delete-${version}`))); + await BrowserVisibility.waitUntilElementIsVisible(element(by.id(`adf-version-list-action-restore-${version}`))); } - closeVersionDialog() { - BrowserActions.closeMenuAndDialogs(); - BrowserVisibility.waitUntilElementIsNotOnPage(this.uploadNewVersionContainer); + async closeVersionDialog(): Promise { + await BrowserActions.closeMenuAndDialogs(); + await BrowserVisibility.waitUntilElementIsNotVisible(this.uploadNewVersionContainer); } } diff --git a/e2e/pages/adf/viewerPage.ts b/e2e/pages/adf/viewerPage.ts index 233f68ec04..223613454a 100644 --- a/e2e/pages/adf/viewerPage.ts +++ b/e2e/pages/adf/viewerPage.ts @@ -15,666 +15,619 @@ * limitations under the License. */ -import { TabsPage } from '@alfresco/adf-testing'; -import { FormControllersPage } from '@alfresco/adf-testing'; -import { element, by, browser, protractor } from 'protractor'; -import { BrowserVisibility, BrowserActions } from '@alfresco/adf-testing'; +import { TabsPage, FormControllersPage, BrowserVisibility, BrowserActions } from '@alfresco/adf-testing'; +import { element, by, browser, protractor, ElementFinder } from 'protractor'; export class ViewerPage { - tabsPage = new TabsPage(); - formControllersPage = new FormControllersPage(); + tabsPage: TabsPage = new TabsPage(); + formControllersPage: FormControllersPage = new FormControllersPage(); - closeButton = element(by.css('button[data-automation-id="adf-toolbar-back"]')); - fileName = element(by.id('adf-viewer-display-name')); - infoButton = element(by.css('button[data-automation-id="adf-toolbar-sidebar"]')); - leftSideBarButton = element(by.css('button[data-automation-id="adf-toolbar-left-sidebar"]')); - previousPageButton = element(by.id('viewer-previous-page-button')); - nextPageButton = element(by.id('viewer-next-page-button')); - zoomInButton = element(by.id('viewer-zoom-in-button')); - zoomOutButton = element(by.id('viewer-zoom-out-button')); - scalePageButton = element(by.id('viewer-scale-page-button')); - fullScreenButton = element(by.css('button[data-automation-id="adf-toolbar-fullscreen"]')); - rotateLeft = element(by.css('button[id="viewer-rotate-left-button"]')); - rotateRight = element(by.css('button[id="viewer-rotate-right-button"]')); - scaleImg = element(by.css('button[id="viewer-reset-button"]')); - fileThumbnail = element(by.css('img[data-automation-id="adf-file-thumbnail"]')); - pageSelectorInput = element(by.css('input[data-automation-id="adf-page-selector"]')); - imgContainer = element(by.css('div[data-automation-id="adf-image-container"]')); - mediaContainer = element(by.css('adf-media-player[class="adf-media-player ng-star-inserted"]')); - percentage = element(by.css('div[data-automation-id="adf-page-scale"')); - thumbnailsBtn = element(by.css('button[data-automation-id="adf-thumbnails-button"]')); - thumbnailsContent = element(by.css('div[data-automation-id="adf-thumbnails-content"]')); - thumbnailsClose = element(by.css('button[data-automation-id="adf-thumbnails-close"]')); - secondThumbnail = element(by.css('adf-pdf-thumb > img[title="Page 2"')); - lastThumbnailDisplayed = element.all(by.css('adf-pdf-thumb')).last(); - passwordDialog = element(by.css('adf-pdf-viewer-password-dialog')); - passwordSubmit = element(by.css('button[data-automation-id="adf-password-dialog-submit"]')); - passwordDialogClose = element(by.css('button[data-automation-id="adf-password-dialog-close"]')); - passwordSubmitDisabled = element(by.css('button[data-automation-id="adf-password-dialog-submit"][disabled]')); - passwordInput = element(by.css('input[data-automation-id="adf-password-dialog-input"]')); - passwordError = element(by.css('mat-error[data-automation-id="adf-password-dialog-error"]')); - infoSideBar = element(by.id('adf-right-sidebar')); - leftSideBar = element(by.id('adf-left-sidebar')); - viewer = element(by.css('adf-viewer')); - pdfViewer = element(by.css('adf-pdf-viewer')); - imgViewer = element(by.css('adf-img-viewer')); - activeTab = element(by.css('div[class*="mat-tab-label-active"]')); - toolbarSwitch = element(by.id('adf-switch-toolbar')); - toolbar = element(by.id('adf-viewer-toolbar')); - lastButton = element.all(by.css('#adf-viewer-toolbar mat-toolbar > button[data-automation-id*="adf-toolbar-"]')).last(); - goBackSwitch = element(by.id('adf-switch-goback')); - canvasLayer = element.all(by.css('div[class="canvasWrapper"] > canvas')).first(); + closeButton: ElementFinder = element(by.css('button[data-automation-id="adf-toolbar-back"]')); + fileName: ElementFinder = element(by.id('adf-viewer-display-name')); + infoButton: ElementFinder = element(by.css('button[data-automation-id="adf-toolbar-sidebar"]')); + leftSideBarButton: ElementFinder = element(by.css('button[data-automation-id="adf-toolbar-left-sidebar"]')); + previousPageButton: ElementFinder = element(by.id('viewer-previous-page-button')); + nextPageButton: ElementFinder = element(by.id('viewer-next-page-button')); + zoomInButton: ElementFinder = element(by.id('viewer-zoom-in-button')); + zoomOutButton: ElementFinder = element(by.id('viewer-zoom-out-button')); + scalePageButton: ElementFinder = element(by.id('viewer-scale-page-button')); + fullScreenButton: ElementFinder = element(by.css('button[data-automation-id="adf-toolbar-fullscreen"]')); + rotateLeft: ElementFinder = element(by.css('button[id="viewer-rotate-left-button"]')); + rotateRight: ElementFinder = element(by.css('button[id="viewer-rotate-right-button"]')); + scaleImg: ElementFinder = element(by.css('button[id="viewer-reset-button"]')); + fileThumbnail: ElementFinder = element(by.css('img[data-automation-id="adf-file-thumbnail"]')); + pageSelectorInput: ElementFinder = element(by.css('input[data-automation-id="adf-page-selector"]')); + imgContainer: ElementFinder = element(by.css('div[data-automation-id="adf-image-container"]')); + mediaContainer: ElementFinder = element(by.css('adf-media-player[class="adf-media-player ng-star-inserted"]')); + percentage: ElementFinder = element(by.css('div[data-automation-id="adf-page-scale"')); + thumbnailsBtn: ElementFinder = element(by.css('button[data-automation-id="adf-thumbnails-button"]')); + thumbnailsContent: ElementFinder = element(by.css('div[data-automation-id="adf-thumbnails-content"]')); + thumbnailsClose: ElementFinder = element(by.css('button[data-automation-id="adf-thumbnails-close"]')); + secondThumbnail: ElementFinder = element(by.css('adf-pdf-thumb > img[title="Page 2"')); + lastThumbnailDisplayed: ElementFinder = element.all(by.css('adf-pdf-thumb')).last(); + passwordDialog: ElementFinder = element(by.css('adf-pdf-viewer-password-dialog')); + passwordSubmit: ElementFinder = element(by.css('button[data-automation-id="adf-password-dialog-submit"]')); + passwordDialogClose: ElementFinder = element(by.css('button[data-automation-id="adf-password-dialog-close"]')); + passwordSubmitDisabled: ElementFinder = element(by.css('button[data-automation-id="adf-password-dialog-submit"][disabled]')); + passwordInput: ElementFinder = element(by.css('input[data-automation-id="adf-password-dialog-input"]')); + passwordError: ElementFinder = element(by.css('mat-error[data-automation-id="adf-password-dialog-error"]')); + infoSideBar: ElementFinder = element(by.id('adf-right-sidebar')); + leftSideBar: ElementFinder = element(by.id('adf-left-sidebar')); + viewer: ElementFinder = element(by.css('adf-viewer')); + pdfViewer: ElementFinder = element(by.css('adf-pdf-viewer')); + imgViewer: ElementFinder = element(by.css('adf-img-viewer')); + activeTab: ElementFinder = element(by.css('div[class*="mat-tab-label-active"]')); + toolbarSwitch: ElementFinder = element(by.id('adf-switch-toolbar')); + toolbar: ElementFinder = element(by.id('adf-viewer-toolbar')); + lastButton: ElementFinder = element.all(by.css('#adf-viewer-toolbar mat-toolbar > button[data-automation-id*="adf-toolbar-"]')).last(); + goBackSwitch: ElementFinder = element(by.id('adf-switch-goback')); + canvasLayer: ElementFinder = element.all(by.css('div[class="canvasWrapper"] > canvas')).first(); - openWithSwitch = element(by.id('adf-switch-openwith')); - openWith = element(by.id('adf-viewer-openwith')); + openWithSwitch: ElementFinder = element(by.id('adf-switch-openwith')); + openWith: ElementFinder = element(by.id('adf-viewer-openwith')); - moreActionsMenuSwitch = element(by.id('adf-switch-moreactionsmenu')); - moreActionsMenu = element(by.css('button[data-automation-id="adf-toolbar-more-actions"]')); + moreActionsMenuSwitch: ElementFinder = element(by.id('adf-switch-moreactionsmenu')); + moreActionsMenu: ElementFinder = element(by.css('button[data-automation-id="adf-toolbar-more-actions"]')); - customNameSwitch = element(by.id('adf-switch-custoname')); - customToolbarToggle = element(by.id('adf-toggle-custom-toolbar')); - customToolbar = element(by.css('adf-viewer-toolbar[data-automation-id="adf-viewer-custom-toolbar"]')); + customNameSwitch: ElementFinder = element(by.id('adf-switch-custoname')); + customToolbarToggle: ElementFinder = element(by.id('adf-toggle-custom-toolbar')); + customToolbar: ElementFinder = element(by.css('adf-viewer-toolbar[data-automation-id="adf-viewer-custom-toolbar"]')); - showRightSidebarSwitch = element(by.id('adf-switch-showrightsidebar')); - showLeftSidebarSwitch = element(by.id('adf-switch-showleftsidebar')); + showRightSidebarSwitch: ElementFinder = element(by.id('adf-switch-showrightsidebar')); + showLeftSidebarSwitch: ElementFinder = element(by.id('adf-switch-showleftsidebar')); - moreActionsSwitch = element(by.id('adf-switch-moreactions')); - pdfPageLoaded = element(by.css('[data-page-number="1"][data-loaded="true"], adf-img-viewer, adf-txt-viewer')); + moreActionsSwitch: ElementFinder = element(by.id('adf-switch-moreactions')); + pdfPageLoaded: ElementFinder = element(by.css('[data-page-number="1"][data-loaded="true"], adf-img-viewer, adf-txt-viewer')); - downloadSwitch = element(by.id('adf-switch-download')); - downloadButton = element(by.id('adf-viewer-download')); + downloadSwitch: ElementFinder = element(by.id('adf-switch-download')); + downloadButton: ElementFinder = element(by.id('adf-viewer-download')); - printSwitch = element(by.id('adf-switch-print')); - printButton = element(by.id('adf-viewer-print')); + printSwitch: ElementFinder = element(by.id('adf-switch-print')); + printButton: ElementFinder = element(by.id('adf-viewer-print')); - allowSidebarSwitch = element(by.id('adf-switch-allowsidebar')); - allowLeftSidebarSwitch = element(by.id('adf-switch-allowLeftSidebar')); + allowSidebarSwitch: ElementFinder = element(by.id('adf-switch-allowsidebar')); + allowLeftSidebarSwitch: ElementFinder = element(by.id('adf-switch-allowLeftSidebar')); - uploadButton = element(by.id('adf-viewer-upload')); - timeButton = element(by.id('adf-viewer-time')); - bugButton = element(by.id('adf-viewer-bug')); + uploadButton: ElementFinder = element(by.id('adf-viewer-upload')); + timeButton: ElementFinder = element(by.id('adf-viewer-time')); + bugButton: ElementFinder = element(by.id('adf-viewer-bug')); - codeViewer = element(by.id('adf-monaco-file-editor')); - moveRightChevron = element(by.css('.mat-tab-header-pagination-after .mat-tab-header-pagination-chevron')); + codeViewer: ElementFinder = element(by.id('adf-monaco-file-editor')); - showTabWithIconSwitch = element(by.id('adf-tab-with-icon')); - showTabWithIconAndLabelSwitch = element(by.id('adf-icon-and-label-tab')); - unknownFormat = element(by.css(`adf-viewer-unknown-format .adf-viewer__unknown-format-view`)); + showTabWithIconSwitch: ElementFinder = element(by.id('adf-tab-with-icon')); + showTabWithIconAndLabelSwitch: ElementFinder = element(by.id('adf-icon-and-label-tab')); + unknownFormat: ElementFinder = element(by.css(`adf-viewer-unknown-format .adf-viewer__unknown-format-view`)); - checkCodeViewerIsDisplayed() { - return BrowserVisibility.waitUntilElementIsVisible(this.codeViewer); + async checkCodeViewerIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.codeViewer); } - viewFile(fileName) { - BrowserActions.closeMenuAndDialogs(); - const fileView = element.all(by.css(`#document-list-container div[data-automation-id="${fileName}"]`)).first(); - BrowserActions.click(fileView); - browser.actions().sendKeys(protractor.Key.ENTER).perform(); + async viewFile(fileName): Promise { + const fileView: ElementFinder = element.all(by.css(`#document-list-container div[data-automation-id="${fileName}"]`)).first(); + await BrowserActions.click(fileView); + await browser.actions().sendKeys(protractor.Key.ENTER).perform(); } - clearPageNumber() { - BrowserVisibility.waitUntilElementIsVisible(this.pageSelectorInput); - this.pageSelectorInput.clear(); - this.pageSelectorInput.sendKeys(protractor.Key.ENTER); + async clearPageNumber(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.pageSelectorInput); + await BrowserActions.clearSendKeys(this.pageSelectorInput, protractor.Key.ENTER); } - getZoom() { - return BrowserActions.getText(this.percentage); + async getZoom(): Promise { + return await BrowserActions.getText(this.percentage); } - getCanvasWidth() { - return this.canvasLayer.getAttribute(`width`); + async getCanvasWidth(): Promise { + return await this.canvasLayer.getAttribute(`width`); } - getCanvasHeight() { - return this.canvasLayer.getAttribute(`height`); + async getCanvasHeight(): Promise { + return await this.canvasLayer.getAttribute(`height`); } - getDisplayedFileName() { - BrowserVisibility.waitUntilElementIsVisible(this.fileName); - return this.fileName.getText(); + async getDisplayedFileName(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.fileName); + return await BrowserActions.getText(this.fileName); } - exitFullScreen() { + async exitFullScreen(): Promise { const jsCode = 'document.exitFullscreen?document.exitFullscreen():document.webkitExitFullscreen&&document.webkitExitFullscreen();'; - browser.executeScript(jsCode); + await browser.executeScript(jsCode); } - enterPassword(password) { - BrowserVisibility.waitUntilElementIsVisible(this.passwordInput); - this.passwordInput.clear(); - this.passwordInput.sendKeys(password); + async enterPassword(password): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.passwordInput); + await BrowserActions.clearSendKeys(this.passwordInput, password); } - checkFileIsLoaded(fileName?: string) { - BrowserVisibility.waitUntilElementIsVisible(this.pdfPageLoaded, 30000, `not loaded ${fileName}`); + async checkFileIsLoaded(fileName?: string): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.pdfPageLoaded, 30000, `${fileName} not loaded`); } - clickClosePasswordDialog() { - BrowserVisibility.waitUntilElementIsVisible(this.passwordDialogClose); - this.passwordDialogClose.click(); + async clickClosePasswordDialog(): Promise { + await BrowserActions.click(this.passwordDialogClose); } - checkImgViewerIsDisplayed() { - BrowserVisibility.waitUntilElementIsOnPage(this.imgViewer); + async checkImgViewerIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.imgViewer); } - checkPasswordErrorIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.passwordError); + async checkPasswordErrorIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.passwordError); } - checkPasswordInputIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.passwordInput); + async checkPasswordInputIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.passwordInput); } - checkPasswordSubmitDisabledIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.passwordSubmitDisabled); + async checkPasswordSubmitDisabledIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.passwordSubmitDisabled); } - checkPasswordDialogIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.passwordDialog); + async checkPasswordDialogIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.passwordDialog); } - checkAllThumbnailsDisplayed(nbPages) { + async checkAllThumbnailsDisplayed(nbPages): Promise { const defaultThumbnailHeight = 143; - expect(this.thumbnailsContent.getAttribute('style')).toEqual('height: ' + nbPages * defaultThumbnailHeight + 'px; transform: translate(-50%, 0px);'); + await expect(await this.thumbnailsContent.getAttribute('style')).toEqual('height: ' + nbPages * defaultThumbnailHeight + 'px; transform: translate(-50%, 0px);'); } - checkCurrentThumbnailIsSelected() { - const selectedThumbnail = element(by.css('adf-pdf-thumb[class="adf-pdf-thumbnails__thumb ng-star-inserted adf-pdf-thumbnails__thumb--selected"] > img')); - this.pageSelectorInput.getAttribute('value').then((pageNumber) => { - browser.controlFlow().execute(async () => { - expect('Page ' + pageNumber).toEqual(await selectedThumbnail.getAttribute('title')); - }); - }); + async checkCurrentThumbnailIsSelected(): Promise { + const selectedThumbnail: ElementFinder = element(by.css('adf-pdf-thumb[class="adf-pdf-thumbnails__thumb ng-star-inserted adf-pdf-thumbnails__thumb--selected"] > img')); + const pageNumber = await this.pageSelectorInput.getAttribute('value'); + + await expect('Page ' + pageNumber).toEqual(await selectedThumbnail.getAttribute('title')); } - checkThumbnailsCloseIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.thumbnailsClose); + async checkThumbnailsCloseIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.thumbnailsClose); } - checkThumbnailsBtnIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.thumbnailsBtn); + async checkThumbnailsBtnIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.thumbnailsBtn); } - checkThumbnailsBtnIsDisabled() { - BrowserVisibility.waitUntilElementIsVisible(element(by.css('button[data-automation-id="adf-thumbnails-button"]:disabled'))); - return this; + async checkThumbnailsBtnIsDisabled(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(element(by.css('button[data-automation-id="adf-thumbnails-button"]:disabled'))); } - checkThumbnailsContentIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.thumbnailsContent); + async checkThumbnailsContentIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.thumbnailsContent); } - checkThumbnailsContentIsNotDisplayed() { - BrowserVisibility.waitUntilElementIsNotVisible(this.thumbnailsContent); + async checkThumbnailsContentIsNotDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsNotVisible(this.thumbnailsContent); } - checkCloseButtonIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.closeButton); + async checkCloseButtonIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.closeButton); } - getLastButtonTitle() { - return this.lastButton.getAttribute('title'); + async getLastButtonTitle(): Promise { + return await this.lastButton.getAttribute('title'); } - getMoreActionsMenuTitle() { - return this.moreActionsMenu.getAttribute('title'); + async getMoreActionsMenuTitle(): Promise { + return await this.moreActionsMenu.getAttribute('title'); } - checkDownloadButtonIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.downloadButton); + async checkDownloadButtonIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.downloadButton); } - checkInfoButtonIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.infoButton); + async checkInfoButtonIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.infoButton); } - checkInfoButtonIsNotDisplayed() { - BrowserVisibility.waitUntilElementIsNotVisible(this.infoButton); + async checkInfoButtonIsNotDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsNotVisible(this.infoButton); } - checkFileThumbnailIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.fileThumbnail); + async checkFileThumbnailIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.fileThumbnail); } - checkFileNameIsDisplayed(file) { - BrowserVisibility.waitUntilElementIsVisible(this.fileName); - expect(this.fileName.getText()).toEqual(file); + async checkFileNameIsDisplayed(file): Promise { + await expect(await BrowserActions.getText(this.fileName)).toEqual(file); } - checkPreviousPageButtonIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.previousPageButton); + async checkPreviousPageButtonIsDisplayed() { + await BrowserVisibility.waitUntilElementIsVisible(this.previousPageButton); } - checkNextPageButtonIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.nextPageButton); + async checkNextPageButtonIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.nextPageButton); } - checkZoomInButtonIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.zoomInButton); + async checkZoomInButtonIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.zoomInButton); } - checkZoomInButtonIsNotDisplayed() { - BrowserVisibility.waitUntilElementIsNotVisible(this.zoomInButton); + async checkZoomInButtonIsNotDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsNotVisible(this.zoomInButton); } - checkZoomOutButtonIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.zoomOutButton); + async checkZoomOutButtonIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.zoomOutButton); } - checkScalePageButtonIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.scalePageButton); + async checkScalePageButtonIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.scalePageButton); } - checkPageSelectorInputIsDisplayed(checkNumber) { - BrowserVisibility.waitUntilElementIsVisible(this.pageSelectorInput); - this.pageSelectorInput.getAttribute('value').then((pageNumber) => { - expect(pageNumber).toEqual(checkNumber); - }); + async checkPageSelectorInputIsDisplayed(checkNumber): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.pageSelectorInput); + await expect(await this.pageSelectorInput.getAttribute('value')).toEqual(checkNumber); } - checkImgContainerIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.imgContainer); + async checkImgContainerIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.imgContainer); } - checkMediaPlayerContainerIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.mediaContainer); + async checkMediaPlayerContainerIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.mediaContainer); } - async checkFileContent(pageNumber, text) { + async checkFileContent(pageNumber: string, text: string): Promise { const allPages = this.canvasLayer; - const pageLoaded = element.all(by.css('div[data-page-number="' + pageNumber + '"][data-loaded="true"]')).first(); - const textLayerLoaded = element.all(by.css('div[data-page-number="' + pageNumber + '"] div[class="textLayer"]')).first(); - const specificText = element.all(by.cssContainingText('div[data-page-number="' + pageNumber + '"] div[class="textLayer"]', text)).first(); + const pageLoaded: ElementFinder = element.all(by.css('div[data-page-number="' + pageNumber + '"][data-loaded="true"]')).first(); + const textLayerLoaded: ElementFinder = element.all(by.css('div[data-page-number="' + pageNumber + '"] div[class="textLayer"]')).first(); + const specificText: ElementFinder = element.all(by.cssContainingText('div[data-page-number="' + pageNumber + '"] div[class="textLayer"]', text)).first(); - BrowserVisibility.waitUntilElementIsVisible(allPages); - BrowserVisibility.waitUntilElementIsVisible(pageLoaded); - BrowserVisibility.waitUntilElementIsVisible(textLayerLoaded); - BrowserVisibility.waitUntilElementIsVisible(specificText); + await BrowserVisibility.waitUntilElementIsVisible(allPages); + await BrowserVisibility.waitUntilElementIsVisible(pageLoaded); + await BrowserVisibility.waitUntilElementIsVisible(textLayerLoaded); + await BrowserVisibility.waitUntilElementIsVisible(specificText); } - checkFullScreenButtonIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.fullScreenButton); + async checkFullScreenButtonIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.fullScreenButton); } - checkFullScreenButtonIsNotDisplayed() { - BrowserVisibility.waitUntilElementIsNotVisible(this.fullScreenButton); + async checkFullScreenButtonIsNotDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsNotVisible(this.fullScreenButton); } - checkPercentageIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.percentage); + async checkPercentageIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.percentage); } - checkZoomedIn(zoom) { - expect(this.percentage.getText()).toBeGreaterThan(zoom); + async checkZoomedIn(zoom): Promise { + await expect(await BrowserActions.getText(this.percentage)).toBeGreaterThan(zoom); } - checkZoomedOut(zoom) { - expect(this.percentage.getText()).toBeLessThan(zoom); + async checkZoomedOut(zoom): Promise { + await expect(await BrowserActions.getText(this.percentage)).toBeLessThan(zoom); } - checkRotateLeftButtonIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.rotateLeft); + async checkRotateLeftButtonIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.rotateLeft); } - checkRotateRightButtonIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.rotateRight); + async checkRotateRightButtonIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.rotateRight); } - checkScaleImgButtonIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.scaleImg); + async checkScaleImgButtonIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.scaleImg); } - checkRotation(text) { - const rotation = this.imgContainer.getAttribute('style'); - expect(rotation).toEqual(text); + async checkRotation(text): Promise { + const rotation = await this.imgContainer.getAttribute('style'); + await expect(rotation).toEqual(text); } - checkInfoSideBarIsNotDisplayed() { - BrowserVisibility.waitUntilElementIsNotVisible(this.infoSideBar); + async checkInfoSideBarIsNotDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsNotVisible(this.infoSideBar); } - checkInfoSideBarIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.infoSideBar); + async checkInfoSideBarIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.infoSideBar); } - checkLeftSideBarButtonIsNotDisplayed() { - BrowserVisibility.waitUntilElementIsNotOnPage(this.leftSideBarButton); + async checkLeftSideBarButtonIsNotDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsNotVisible(this.leftSideBarButton); } - checkLeftSideBarButtonIsDisplayed() { - BrowserVisibility.waitUntilElementIsOnPage(this.leftSideBarButton); + async checkLeftSideBarButtonIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.leftSideBarButton); } - clickInfoButton() { - BrowserActions.clickExecuteScript('button[data-automation-id="adf-toolbar-sidebar"]'); + async clickInfoButton(): Promise { + await BrowserActions.clickExecuteScript('button[data-automation-id="adf-toolbar-sidebar"]'); } - clickOnTab(tabName) { - this.tabsPage.clickTabByTitle(tabName); - return this; + async clickOnTab(tabName): Promise { + await this.tabsPage.clickTabByTitle(tabName); } - checkTabIsActive(tabName) { - const tab = element(by.cssContainingText('.adf-info-drawer-layout-content div.mat-tab-labels div.mat-tab-label-active .mat-tab-label-content', tabName)); - BrowserVisibility.waitUntilElementIsVisible(tab); - return this; + async checkTabIsActive(tabName): Promise { + const tab: ElementFinder = element(by.cssContainingText('.adf-info-drawer-layout-content div.mat-tab-labels div.mat-tab-label-active .mat-tab-label-content', tabName)); + await BrowserVisibility.waitUntilElementIsVisible(tab); } - clickLeftSidebarButton() { - BrowserActions.click(this.leftSideBarButton); + async clickLeftSidebarButton(): Promise { + await BrowserActions.click(this.leftSideBarButton); } - checkLeftSideBarIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.leftSideBar); + async checkLeftSideBarIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.leftSideBar); } - checkLeftSideBarIsNotDisplayed() { - BrowserVisibility.waitUntilElementIsNotOnPage(this.leftSideBar); + async checkLeftSideBarIsNotDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsNotVisible(this.leftSideBar); } - clickPasswordSubmit() { - BrowserActions.click(this.passwordSubmit); + async clickPasswordSubmit(): Promise { + await BrowserActions.click(this.passwordSubmit); } - clickSecondThumbnail() { - BrowserActions.click(this.secondThumbnail); + async clickSecondThumbnail(): Promise { + await BrowserActions.click(this.secondThumbnail); } - clickLastThumbnailDisplayed() { - BrowserActions.click(this.lastThumbnailDisplayed); + async clickLastThumbnailDisplayed(): Promise { + await BrowserActions.click(this.lastThumbnailDisplayed); } - clickThumbnailsClose() { - BrowserActions.click(this.thumbnailsClose); + async clickThumbnailsClose(): Promise { + await BrowserActions.click(this.thumbnailsClose); } - clickThumbnailsBtn() { - BrowserActions.click(this.thumbnailsBtn); + async clickThumbnailsBtn(): Promise { + await BrowserActions.click(this.thumbnailsBtn); } - clickScaleImgButton() { - BrowserActions.click(this.scaleImg); + async clickScaleImgButton(): Promise { + await BrowserActions.click(this.scaleImg); } - clickDownloadButton() { - BrowserActions.click(this.downloadButton); + async clickDownloadButton(): Promise { + await BrowserActions.click(this.downloadButton); } - clickCloseButton() { - BrowserActions.clickExecuteScript('button[data-automation-id="adf-toolbar-back"]'); + async clickCloseButton(): Promise { + await BrowserActions.click(this.closeButton); } - clickPreviousPageButton() { - BrowserActions.click(this.previousPageButton); + async clickPreviousPageButton(): Promise { + await BrowserActions.click(this.previousPageButton); } - clickNextPageButton() { - BrowserActions.click(this.nextPageButton); + async clickNextPageButton(): Promise { + await BrowserActions.click(this.nextPageButton); } - clickZoomInButton() { - BrowserActions.click(this.zoomInButton); + async clickZoomInButton(): Promise { + await BrowserActions.click(this.zoomInButton); } - clickZoomOutButton() { - BrowserActions.click(this.zoomOutButton); + async clickZoomOutButton(): Promise { + await BrowserActions.click(this.zoomOutButton); } - clickActualSize() { - BrowserActions.click(this.scalePageButton); + async clickActualSize(): Promise { + await BrowserActions.click(this.scalePageButton); } - clickFullScreenButton() { - BrowserActions.click(this.fullScreenButton); + async clickFullScreenButton(): Promise { + await BrowserActions.click(this.fullScreenButton); } - clickRotateLeftButton() { - BrowserActions.click(this.rotateLeft); + async clickRotateLeftButton(): Promise { + await BrowserActions.click(this.rotateLeft); } - clickRotateRightButton() { - BrowserActions.click(this.rotateRight); + async clickRotateRightButton(): Promise { + await BrowserActions.click(this.rotateRight); } - getActiveTab() { - return BrowserActions.getText(this.activeTab); + async getActiveTab(): Promise { + return await BrowserActions.getText(this.activeTab); } - clickOnCommentsTab() { - this.tabsPage.clickTabByTitle('Comments'); - return this; + async clickOnCommentsTab(): Promise { + await this.tabsPage.clickTabByTitle('Comments'); } - disableToolbar() { - this.formControllersPage.disableToggle(this.toolbarSwitch); + async disableToolbar(): Promise { + await this.formControllersPage.disableToggle(this.toolbarSwitch); } - enableToolbar() { - this.formControllersPage.enableToggle(this.toolbarSwitch); + async enableToolbar(): Promise { + await this.formControllersPage.enableToggle(this.toolbarSwitch); } - checkToolbarIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.toolbar); - return this; + async checkToolbarIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.toolbar); } - checkToolbarIsNotDisplayed() { - BrowserVisibility.waitUntilElementIsNotVisible(this.toolbar); - return this; + async checkToolbarIsNotDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsNotVisible(this.toolbar); } - disableGoBack() { - this.formControllersPage.disableToggle(this.goBackSwitch); + async disableGoBack(): Promise { + await this.formControllersPage.disableToggle(this.goBackSwitch); } - enableGoBack() { - this.formControllersPage.enableToggle(this.goBackSwitch); + async enableGoBack(): Promise { + await this.formControllersPage.enableToggle(this.goBackSwitch); } - checkGoBackIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.closeButton); - return this; + async checkGoBackIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.closeButton); } - checkGoBackIsNotDisplayed() { - BrowserVisibility.waitUntilElementIsNotVisible(this.closeButton); - return this; + async checkGoBackIsNotDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsNotVisible(this.closeButton); } - disableToolbarOptions() { - this.formControllersPage.disableToggle(this.openWithSwitch); + async disableToolbarOptions(): Promise { + await this.formControllersPage.disableToggle(this.openWithSwitch); } - enableToolbarOptions() { - this.formControllersPage.enableToggle(this.openWithSwitch); + async enableToolbarOptions() { + await this.formControllersPage.enableToggle(this.openWithSwitch); } - checkToolbarOptionsIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.openWith); - return this; + async checkToolbarOptionsIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.openWith); } - checkToolbarOptionsIsNotDisplayed() { - BrowserVisibility.waitUntilElementIsNotVisible(this.openWith); - return this; + async checkToolbarOptionsIsNotDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsNotVisible(this.openWith); } - disableDownload() { - this.formControllersPage.disableToggle(this.downloadSwitch); + async disableDownload(): Promise { + await this.formControllersPage.disableToggle(this.downloadSwitch); } - enableDownload() { - this.formControllersPage.enableToggle(this.openWithSwitch); + async enableDownload(): Promise { + await this.formControllersPage.enableToggle(this.openWithSwitch); } - disableShowTabWithIcon() { - this.formControllersPage.disableToggle(this.showTabWithIconSwitch); + async enableShowTabWithIcon(): Promise { + await browser.executeScript('arguments[0].scrollIntoView()', this.showTabWithIconSwitch); + await this.formControllersPage.enableToggle(this.showTabWithIconSwitch); } - enableShowTabWithIcon() { - browser.executeScript('arguments[0].scrollIntoView()', this.showTabWithIconSwitch); - this.formControllersPage.enableToggle(this.showTabWithIconSwitch); + async enableShowTabWithIconAndLabel(): Promise { + await this.formControllersPage.enableToggle(this.showTabWithIconAndLabelSwitch); } - disableShowTabWithIconAndLabel() { - this.formControllersPage.disableToggle(this.showTabWithIconAndLabelSwitch); + async checkDownloadButtonDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.downloadButton); } - enableShowTabWithIconAndLabel() { - this.formControllersPage.enableToggle(this.showTabWithIconAndLabelSwitch); + async checkDownloadButtonIsNotDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsNotVisible(this.downloadButton); } - checkDownloadButtonDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.downloadButton); - return this; + async disablePrint(): Promise { + await this.formControllersPage.disableToggle(this.printSwitch); } - checkDownloadButtonIsNotDisplayed() { - BrowserVisibility.waitUntilElementIsNotVisible(this.downloadButton); - return this; + async enablePrint(): Promise { + await this.formControllersPage.enableToggle(this.printSwitch); } - disablePrint() { - this.formControllersPage.disableToggle(this.printSwitch); + async checkPrintButtonIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.printButton); } - enablePrint() { - this.formControllersPage.enableToggle(this.printSwitch); + async checkPrintButtonIsNotDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsNotVisible(this.printButton); } - checkPrintButtonIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.printButton); - return this; + async disableAllowSidebar(): Promise { + await this.formControllersPage.disableToggle(this.allowSidebarSwitch); } - checkPrintButtonIsNotDisplayed() { - BrowserVisibility.waitUntilElementIsNotVisible(this.printButton); - return this; + async disableAllowLeftSidebar(): Promise { + await browser.executeScript('arguments[0].scrollIntoView()', this.allowLeftSidebarSwitch); + await this.formControllersPage.disableToggle(this.allowLeftSidebarSwitch); } - disableAllowSidebar() { - this.formControllersPage.disableToggle(this.allowSidebarSwitch); + async checkMoreActionsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.bugButton); + await BrowserVisibility.waitUntilElementIsVisible(this.timeButton); + await BrowserVisibility.waitUntilElementIsVisible(this.uploadButton); } - disableAllowLeftSidebar() { - browser.executeScript('arguments[0].scrollIntoView()', this.allowLeftSidebarSwitch); - this.formControllersPage.disableToggle(this.allowLeftSidebarSwitch); + async checkMoreActionsIsNotDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsNotVisible(this.bugButton); + await BrowserVisibility.waitUntilElementIsNotVisible(this.timeButton); + await BrowserVisibility.waitUntilElementIsNotVisible(this.uploadButton); } - checkMoreActionsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.bugButton); - BrowserVisibility.waitUntilElementIsVisible(this.timeButton); - BrowserVisibility.waitUntilElementIsVisible(this.uploadButton); - return this; + async disableMoreActions(): Promise { + await this.formControllersPage.disableToggle(this.moreActionsSwitch); } - checkMoreActionsIsNotDisplayed() { - BrowserVisibility.waitUntilElementIsNotVisible(this.bugButton); - BrowserVisibility.waitUntilElementIsNotVisible(this.timeButton); - BrowserVisibility.waitUntilElementIsNotVisible(this.uploadButton); - return this; + async enableMoreActions(): Promise { + await this.formControllersPage.enableToggle(this.moreActionsSwitch); } - disableMoreActions() { - this.formControllersPage.disableToggle(this.moreActionsSwitch); + async enableMoreActionsMenu(): Promise { + await this.formControllersPage.enableToggle(this.moreActionsMenuSwitch); } - enableMoreActions() { - this.formControllersPage.enableToggle(this.moreActionsSwitch); + async disableCustomToolbar(): Promise { + await browser.executeScript('arguments[0].scrollIntoView()', this.customToolbarToggle); + await this.formControllersPage.disableToggle(this.customToolbarToggle); } - enableMoreActionsMenu() { - this.formControllersPage.enableToggle(this.moreActionsMenuSwitch); + async enableCustomToolbar(): Promise { + await browser.executeScript('arguments[0].scrollIntoView()', this.customToolbarToggle); + await this.formControllersPage.enableToggle(this.customToolbarToggle); } - disableCustomToolbar() { - browser.executeScript('arguments[0].scrollIntoView()', this.customToolbarToggle); - this.formControllersPage.disableToggle(this.customToolbarToggle); - return this; + async checkCustomToolbarIsDisplayed() { + await BrowserVisibility.waitUntilElementIsVisible(this.customToolbar); } - enableCustomToolbar() { - browser.executeScript('arguments[0].scrollIntoView()', this.customToolbarToggle); - this.formControllersPage.enableToggle(this.customToolbarToggle); - return this; + async disableCustomName(): Promise { + await this.formControllersPage.disableToggle(this.customNameSwitch); } - checkCustomToolbarIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.customToolbar); - return this; + async enableCustomName(): Promise { + await this.formControllersPage.enableToggle(this.customNameSwitch); } - disableCustomName() { - this.formControllersPage.disableToggle(this.customNameSwitch); + async clickToggleRightSidebar(): Promise { + await BrowserActions.click(this.showRightSidebarSwitch); } - enableCustomName() { - this.formControllersPage.enableToggle(this.customNameSwitch); + async clickToggleLeftSidebar(): Promise { + await BrowserActions.click(this.showLeftSidebarSwitch); } - clickToggleRightSidebar() { - BrowserActions.click(this.showRightSidebarSwitch); + async enterCustomName(text: string): Promise { + const textField: ElementFinder = element(by.css('input[data-automation-id="adf-text-custom-name"]')); + await BrowserVisibility.waitUntilElementIsVisible(textField); + await BrowserActions.clearSendKeys(textField, text); } - clickToggleLeftSidebar() { - BrowserActions.click(this.showLeftSidebarSwitch); + async disableOverlay(): Promise { + await this.formControllersPage.disableToggle(element(by.id('adf-viewer-overlay'))); } - enterCustomName(text) { - const textField = element(by.css('input[data-automation-id="adf-text-custom-name"]')); - BrowserVisibility.waitUntilElementIsVisible(textField); - textField.sendKeys(''); - textField.clear(); - textField.sendKeys(text); - return this; + async checkOverlayViewerIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.viewer.element(by.css('div[class*="adf-viewer-overlay-container"]'))); } - disableOverlay() { - this.formControllersPage.disableToggle(element(by.id('adf-viewer-overlay'))); - return this; + async checkInlineViewerIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.viewer.element(by.css('div[class*="adf-viewer-inline-container"]'))); } - checkOverlayViewerIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.viewer.element(by.css('div[class*="adf-viewer-overlay-container"]'))); - return this; + async checkTabHasNoIcon(index: number): Promise { + const tab: ElementFinder = element(by.css(`div[id="mat-tab-label-1-${index}"] div[class="mat-tab-label-content"] mat-icon`)); + await BrowserVisibility.waitUntilElementIsNotVisible(tab); } - checkInlineViewerIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.viewer.element(by.css('div[class*="adf-viewer-inline-container"]'))); - return this; + async checkTabHasNoLabel(index: number): Promise { + const tab: ElementFinder = element(by.css(`div[id="mat-tab-label-1-${index}"] div[class="mat-tab-label-content"] span`)); + await BrowserVisibility.waitUntilElementIsNotVisible(tab); } - checkTabHasNoIcon(index: number) { - const tab = element(by.css(`div[id="mat-tab-label-1-${index}"] div[class="mat-tab-label-content"] mat-icon`)); - BrowserVisibility.waitUntilElementIsNotVisible(tab); - return this; + async getTabLabelById(index: number): Promise { + const tab: ElementFinder = element(by.css(`div[id="mat-tab-label-1-${index}"] div[class="mat-tab-label-content"] span`)); + return await BrowserActions.getText(tab); } - checkTabHasNoLabel(index: number) { - const tab = element(by.css(`div[id="mat-tab-label-1-${index}"] div[class="mat-tab-label-content"] span`)); - BrowserVisibility.waitUntilElementIsNotVisible(tab); - return this; + async getTabIconById(index: number): Promise { + const tab: ElementFinder = element(by.css(`div[id="mat-tab-label-1-${index}"] div[class="mat-tab-label-content"] mat-icon`)); + return await BrowserActions.getText(tab); } - getTabLabelById(index: number) { - const tab = element(by.css(`div[id="mat-tab-label-1-${index}"] div[class="mat-tab-label-content"] span`)); - return BrowserActions.getText(tab); + async checkUnknownFormatIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.unknownFormat); } - getTabIconById(index: number) { - const tab = element(by.css(`div[id="mat-tab-label-1-${index}"] div[class="mat-tab-label-content"] mat-icon`)); - return BrowserActions.getText(tab); - } - - checkUnknownFormatIsDisplayed() { - return BrowserVisibility.waitUntilElementIsVisible(this.unknownFormat); - } - - getUnknownFormatMessage() { + async getUnknownFormatMessage(): Promise { const unknownFormatLabel = this.unknownFormat.element(by.css(`.label`)); - return BrowserActions.getText(unknownFormatLabel); + return await BrowserActions.getText(unknownFormatLabel); } } diff --git a/e2e/process-services-cloud/apps-section-cloud.e2e.ts b/e2e/process-services-cloud/apps-section-cloud.e2e.ts index 465f1e61db..8b0283ee10 100644 --- a/e2e/process-services-cloud/apps-section-cloud.e2e.ts +++ b/e2e/process-services-cloud/apps-section-cloud.e2e.ts @@ -16,7 +16,14 @@ */ import { browser } from 'protractor'; -import { ApiService, IdentityService, LoginSSOPage, SettingsPage, LocalStorageUtil, ApplicationsService } from '@alfresco/adf-testing'; +import { + ApiService, + IdentityService, + LoginSSOPage, + SettingsPage, + LocalStorageUtil, + ApplicationsService +} from '@alfresco/adf-testing'; import { AppListCloudPage } from '@alfresco/adf-testing'; import { NavigationBarPage } from '../pages/adf/navigationBarPage'; import resources = require('../util/resources'); @@ -35,7 +42,7 @@ describe('Applications list', () => { let applications; const apiService = new ApiService(browser.params.config.oauth2.clientId, browser.params.config.bpmHost, browser.params.config.oauth2.host, 'BPM'); - beforeAll(async (done) => { + beforeAll(async () => { await apiService.login(browser.params.identityAdmin.email, browser.params.identityAdmin.password); identityService = new IdentityService(apiService); testUser = await identityService.createIdentityUserWithRole(apiService, [identityService.ROLES.APS_USER, identityService.ROLES.APS_DEVOPS_USER]); @@ -48,39 +55,37 @@ describe('Applications list', () => { applicationsService = new ApplicationsService(apiService); applications = await applicationsService.getApplicationsByStatus('RUNNING'); - applications.list.entries.forEach(async (app) => { + applications.list.entries.forEach(app => { appNames.push(app.entry.name.toLowerCase()); }); await LocalStorageUtil.setConfigField('alfresco-deployed-apps', '[]'); - done(); }); - afterAll(async(done) => { + afterAll(async () => { await apiService.login(browser.params.identityAdmin.email, browser.params.identityAdmin.password); await identityService.deleteIdentityUser(testUser.idIdentityService); - done(); + }); it('[C310373] Should all the app with running state be displayed on dashboard when alfresco-deployed-apps is not used in config file', async () => { - navigationBarPage.navigateToProcessServicesCloudPage(); - appListCloudPage.checkApsContainer(); + await navigationBarPage.navigateToProcessServicesCloudPage(); + await appListCloudPage.checkApsContainer(); - appListCloudPage.getNameOfTheApplications().then((list) => { - expect(JSON.stringify(list) === JSON.stringify(appNames)).toEqual(true); - }); + const list = await appListCloudPage.getNameOfTheApplications(); + await expect(JSON.stringify(list)).toEqual(JSON.stringify(appNames)); }); - it('[C289910] Should the app be displayed on dashboard when is deployed on APS', () => { - browser.refresh(); - navigationBarPage.navigateToProcessServicesCloudPage(); - appListCloudPage.checkApsContainer(); + it('[C289910] Should the app be displayed on dashboard when is deployed on APS', async () => { + await browser.refresh(); + await navigationBarPage.navigateToProcessServicesCloudPage(); + await appListCloudPage.checkApsContainer(); - appListCloudPage.checkAppIsDisplayed(simpleApp); - appListCloudPage.checkAppIsDisplayed(resources.ACTIVITI7_APPS.CANDIDATE_BASE_APP.name); - appListCloudPage.checkAppIsDisplayed(resources.ACTIVITI7_APPS.SUB_PROCESS_APP.name); + await appListCloudPage.checkAppIsDisplayed(simpleApp); + await appListCloudPage.checkAppIsDisplayed(resources.ACTIVITI7_APPS.CANDIDATE_BASE_APP.name); + await appListCloudPage.checkAppIsDisplayed(resources.ACTIVITI7_APPS.SUB_PROCESS_APP.name); - expect(appListCloudPage.countAllApps()).toEqual(3); + await expect(await appListCloudPage.countAllApps()).toEqual(3); }); }); diff --git a/e2e/process-services-cloud/edit-process-filters-component.e2e.ts b/e2e/process-services-cloud/edit-process-filters-component.e2e.ts index 6af8babdfe..8f8596e9f7 100644 --- a/e2e/process-services-cloud/edit-process-filters-component.e2e.ts +++ b/e2e/process-services-cloud/edit-process-filters-component.e2e.ts @@ -39,7 +39,7 @@ describe('Edit process filters cloud', () => { let testUser, groupInfo; const apiService = new ApiService(browser.params.config.oauth2.clientId, browser.params.config.bpmHost, browser.params.config.oauth2.host, 'BPM'); - beforeAll(async (done) => { + beforeAll(async () => { await apiService.login(browser.params.identityAdmin.email, browser.params.identityAdmin.password); identityService = new IdentityService(apiService); groupIdentityService = new GroupIdentityService(apiService); @@ -52,191 +52,207 @@ describe('Edit process filters cloud', () => { browser.params.config.oauth2.host, browser.params.config.identityHost); await loginSSOPage.loginSSOIdentityService(testUser.email, testUser.password); - done(); + }); - afterAll(async(done) => { + afterAll(async () => { await apiService.login(browser.params.identityAdmin.email, browser.params.identityAdmin.password); await identityService.deleteIdentityUser(testUser.idIdentityService); - done(); + }); - beforeEach(() => { - navigationBarPage.navigateToProcessServicesCloudPage(); - appListCloudComponent.checkApsContainer(); - appListCloudComponent.goToApp(simpleApp); - tasksCloudDemoPage.taskListCloudComponent().checkTaskListIsLoaded(); - processCloudDemoPage.clickOnProcessFilters(); - processCloudDemoPage.editProcessFilterCloudComponent().clickCustomiseFilterHeader().checkCustomiseFilterHeaderIsExpanded(); + beforeEach(async () => { + await navigationBarPage.navigateToProcessServicesCloudPage(); + await appListCloudComponent.checkApsContainer(); + await appListCloudComponent.goToApp(simpleApp); + await tasksCloudDemoPage.taskListCloudComponent().checkTaskListIsLoaded(); + await processCloudDemoPage.clickOnProcessFilters(); + const editProcessFilterCloud = processCloudDemoPage.editProcessFilterCloudComponent(); + await editProcessFilterCloud.clickCustomiseFilterHeader(); + await editProcessFilterCloud.checkCustomiseFilterHeaderIsExpanded(); }); - afterEach(() => { - processCloudDemoPage.allProcessesFilter().clickProcessFilter(); + afterEach(async () => { + await processCloudDemoPage.allProcessesFilter().clickProcessFilter(); }); - it('[C291804] Delete Save and Save as actions should be displayed when clicking on custom filter header', () => { - processCloudDemoPage.allProcessesFilter().clickProcessFilter(); - processCloudDemoPage.allProcessesFilter().checkProcessFilterIsDisplayed(); - expect(processCloudDemoPage.getActiveFilterName()).toBe('All Processes'); - processCloudDemoPage.editProcessFilterCloudComponent().checkSaveButtonIsDisplayed().checkSaveAsButtonIsDisplayed() - .checkDeleteButtonIsDisplayed(); - expect(processCloudDemoPage.editProcessFilterCloudComponent().checkSaveButtonIsEnabled()).toEqual(false); - expect(processCloudDemoPage.editProcessFilterCloudComponent().checkSaveAsButtonIsEnabled()).toEqual(false); - expect(processCloudDemoPage.editProcessFilterCloudComponent().checkDeleteButtonIsEnabled()).toEqual(true); - processCloudDemoPage.editProcessFilterCloudComponent().clickCustomiseFilterHeader(); + it('[C291804] Delete Save and Save as actions should be displayed when clicking on custom filter header', async () => { + await processCloudDemoPage.allProcessesFilter().clickProcessFilter(); + await processCloudDemoPage.allProcessesFilter().checkProcessFilterIsDisplayed(); + await expect(await processCloudDemoPage.getActiveFilterName()).toBe('All Processes'); + await processCloudDemoPage.editProcessFilterCloudComponent().checkSaveButtonIsDisplayed(); + await processCloudDemoPage.editProcessFilterCloudComponent().checkSaveAsButtonIsDisplayed(); + await processCloudDemoPage.editProcessFilterCloudComponent().checkDeleteButtonIsDisplayed(); + await expect(await processCloudDemoPage.editProcessFilterCloudComponent().checkSaveButtonIsEnabled()).toEqual(false); + await expect(await processCloudDemoPage.editProcessFilterCloudComponent().checkSaveAsButtonIsEnabled()).toEqual(false); + await expect(await processCloudDemoPage.editProcessFilterCloudComponent().checkDeleteButtonIsEnabled()).toEqual(true); + await processCloudDemoPage.editProcessFilterCloudComponent().clickCustomiseFilterHeader(); }); - it('[C291805] New process filter is added when clicking Save As button', () => { - processCloudDemoPage.allProcessesFilter().clickProcessFilter(); + it('[C291805] New process filter is added when clicking Save As button', async () => { + await processCloudDemoPage.allProcessesFilter().clickProcessFilter(); - processCloudDemoPage.editProcessFilterCloudComponent().setSortFilterDropDown('Id'); - processCloudDemoPage.allProcessesFilter().checkProcessFilterIsDisplayed(); + await processCloudDemoPage.editProcessFilterCloudComponent().setSortFilterDropDown('Id'); + await processCloudDemoPage.allProcessesFilter().checkProcessFilterIsDisplayed(); - processCloudDemoPage.editProcessFilterCloudComponent().clickSaveAsButton(); - processCloudDemoPage.editProcessFilterCloudComponent().editProcessFilterDialog().setFilterName('New').clickOnSaveButton(); + await processCloudDemoPage.editProcessFilterCloudComponent().clickSaveAsButton(); + await processCloudDemoPage.editProcessFilterCloudComponent().editProcessFilterDialog().setFilterName('New'); + await processCloudDemoPage.editProcessFilterCloudComponent().editProcessFilterDialog().clickOnSaveButton(); - browser.driver.sleep(1000); + await browser.driver.sleep(1000); - expect(processCloudDemoPage.getActiveFilterName()).toBe('New'); - processCloudDemoPage.editProcessFilterCloudComponent().clickCustomiseFilterHeader(); - expect(processCloudDemoPage.editProcessFilterCloudComponent().checkSaveButtonIsEnabled()).toEqual(false); - expect(processCloudDemoPage.editProcessFilterCloudComponent().getSortFilterDropDownValue()).toEqual('Id'); - expect(processCloudDemoPage.editProcessFilterCloudComponent().checkSaveAsButtonIsEnabled()).toEqual(false); - expect(processCloudDemoPage.editProcessFilterCloudComponent().checkDeleteButtonIsEnabled()).toEqual(true); - processCloudDemoPage.allProcessesFilter().clickProcessFilter(); - expect(processCloudDemoPage.editProcessFilterCloudComponent().getSortFilterDropDownValue()).toEqual('StartDate'); - processCloudDemoPage.customProcessFilter('custom-new').clickProcessFilter(); - expect(processCloudDemoPage.editProcessFilterCloudComponent().getSortFilterDropDownValue()).toEqual('Id'); - processCloudDemoPage.editProcessFilterCloudComponent().clickDeleteButton(); + await expect(await processCloudDemoPage.getActiveFilterName()).toBe('New'); + await processCloudDemoPage.editProcessFilterCloudComponent().clickCustomiseFilterHeader(); + await expect(await processCloudDemoPage.editProcessFilterCloudComponent().checkSaveButtonIsEnabled()).toEqual(false); + await expect(await processCloudDemoPage.editProcessFilterCloudComponent().getSortFilterDropDownValue()).toEqual('Id'); + await expect(await processCloudDemoPage.editProcessFilterCloudComponent().checkSaveAsButtonIsEnabled()).toEqual(false); + await expect(await processCloudDemoPage.editProcessFilterCloudComponent().checkDeleteButtonIsEnabled()).toEqual(true); + await processCloudDemoPage.allProcessesFilter().clickProcessFilter(); + await expect(await processCloudDemoPage.editProcessFilterCloudComponent().getSortFilterDropDownValue()).toEqual('StartDate'); + await processCloudDemoPage.customProcessFilter('custom-new').clickProcessFilter(); + await expect(await processCloudDemoPage.editProcessFilterCloudComponent().getSortFilterDropDownValue()).toEqual('Id'); + await processCloudDemoPage.editProcessFilterCloudComponent().clickDeleteButton(); }); - it('[C291806] Two process filters with same name can be created when clicking the Save As button', () => { - processCloudDemoPage.allProcessesFilter().clickProcessFilter(); + it('[C291806] Two process filters with same name can be created when clicking the Save As button', async () => { + await processCloudDemoPage.allProcessesFilter().clickProcessFilter(); - processCloudDemoPage.editProcessFilterCloudComponent().setSortFilterDropDown('Id'); - processCloudDemoPage.editProcessFilterCloudComponent().clickSaveAsButton(); - processCloudDemoPage.editProcessFilterCloudComponent().editProcessFilterDialog().setFilterName('New').clickOnSaveButton(); + await processCloudDemoPage.editProcessFilterCloudComponent().setSortFilterDropDown('Id'); + await processCloudDemoPage.editProcessFilterCloudComponent().clickSaveAsButton(); + await processCloudDemoPage.editProcessFilterCloudComponent().editProcessFilterDialog().setFilterName('New'); + await processCloudDemoPage.editProcessFilterCloudComponent().editProcessFilterDialog().clickOnSaveButton(); - browser.driver.sleep(1000); + await browser.driver.sleep(1000); - processCloudDemoPage.editProcessFilterCloudComponent().clickCustomiseFilterHeader().checkCustomiseFilterHeaderIsExpanded(); - expect(processCloudDemoPage.getActiveFilterName()).toBe('New'); - expect(processCloudDemoPage.editProcessFilterCloudComponent().getSortFilterDropDownValue()).toEqual('Id'); - processCloudDemoPage.editProcessFilterCloudComponent().setSortFilterDropDown('Name'); - expect(processCloudDemoPage.editProcessFilterCloudComponent().getSortFilterDropDownValue()).toEqual('Name'); - processCloudDemoPage.editProcessFilterCloudComponent().clickSaveAsButton().setFilterName('New').clickOnSaveButton(); - processCloudDemoPage.editProcessFilterCloudComponent().clickCustomiseFilterHeader().checkCustomiseFilterHeaderIsExpanded(); + await processCloudDemoPage.editProcessFilterCloudComponent().clickCustomiseFilterHeader(); + await processCloudDemoPage.editProcessFilterCloudComponent().checkCustomiseFilterHeaderIsExpanded(); + await expect(await processCloudDemoPage.getActiveFilterName()).toBe('New'); + await expect(await processCloudDemoPage.editProcessFilterCloudComponent().getSortFilterDropDownValue()).toEqual('Id'); + await processCloudDemoPage.editProcessFilterCloudComponent().setSortFilterDropDown('Name'); + await expect(await processCloudDemoPage.editProcessFilterCloudComponent().getSortFilterDropDownValue()).toEqual('Name'); + await processCloudDemoPage.editProcessFilterCloudComponent().clickSaveAsButton(); - browser.driver.sleep(1000); + await processCloudDemoPage.editProcessFilterCloudComponent().editProcessFilterDialog().setFilterName('New'); + await processCloudDemoPage.editProcessFilterCloudComponent().editProcessFilterDialog().clickOnSaveButton(); + await processCloudDemoPage.editProcessFilterCloudComponent().clickCustomiseFilterHeader(); + await processCloudDemoPage.editProcessFilterCloudComponent().checkCustomiseFilterHeaderIsExpanded(); - expect(processCloudDemoPage.getActiveFilterName()).toBe('New'); - expect(processCloudDemoPage.editProcessFilterCloudComponent().getSortFilterDropDownValue()).toEqual('Name'); - processCloudDemoPage.editProcessFilterCloudComponent().clickDeleteButton(); + await browser.driver.sleep(1000); - browser.driver.sleep(1000); + await expect(await processCloudDemoPage.getActiveFilterName()).toBe('New'); + await expect(await processCloudDemoPage.editProcessFilterCloudComponent().getSortFilterDropDownValue()).toEqual('Name'); + await processCloudDemoPage.editProcessFilterCloudComponent().clickDeleteButton(); - processCloudDemoPage.customProcessFilter('custom-new').clickProcessFilter(); - processCloudDemoPage.editProcessFilterCloudComponent().clickCustomiseFilterHeader().checkCustomiseFilterHeaderIsExpanded(); - expect(processCloudDemoPage.editProcessFilterCloudComponent().getSortFilterDropDownValue()).toEqual('Id'); - processCloudDemoPage.editProcessFilterCloudComponent().clickDeleteButton(); + await browser.driver.sleep(1000); + + await processCloudDemoPage.customProcessFilter('custom-new').clickProcessFilter(); + await processCloudDemoPage.editProcessFilterCloudComponent().clickCustomiseFilterHeader(); + await processCloudDemoPage.editProcessFilterCloudComponent().checkCustomiseFilterHeaderIsExpanded(); + await expect(await processCloudDemoPage.editProcessFilterCloudComponent().getSortFilterDropDownValue()).toEqual('Id'); + await processCloudDemoPage.editProcessFilterCloudComponent().clickDeleteButton(); }); - it('[C291807] A process filter is overrided when clicking on save button', () => { - processCloudDemoPage.allProcessesFilter().clickProcessFilter(); + it('[C291807] A process filter is overrided when clicking on save button', async () => { + await processCloudDemoPage.allProcessesFilter().clickProcessFilter(); - processCloudDemoPage.editProcessFilterCloudComponent().setSortFilterDropDown('Id'); - processCloudDemoPage.allProcessesFilter().checkProcessFilterIsDisplayed(); - processCloudDemoPage.editProcessFilterCloudComponent().clickSaveAsButton(); - processCloudDemoPage.editProcessFilterCloudComponent().editProcessFilterDialog().setFilterName('New').clickOnSaveButton(); + await processCloudDemoPage.editProcessFilterCloudComponent().setSortFilterDropDown('Id'); + await processCloudDemoPage.allProcessesFilter().checkProcessFilterIsDisplayed(); + await processCloudDemoPage.editProcessFilterCloudComponent().clickSaveAsButton(); + await processCloudDemoPage.editProcessFilterCloudComponent().editProcessFilterDialog().setFilterName('New'); + await processCloudDemoPage.editProcessFilterCloudComponent().editProcessFilterDialog().clickOnSaveButton(); - browser.driver.sleep(1000); + await browser.driver.sleep(1000); - expect(processCloudDemoPage.getActiveFilterName()).toBe('New'); - processCloudDemoPage.editProcessFilterCloudComponent().clickCustomiseFilterHeader().checkCustomiseFilterHeaderIsExpanded(); - expect(processCloudDemoPage.editProcessFilterCloudComponent().getSortFilterDropDownValue()).toEqual('Id'); - processCloudDemoPage.editProcessFilterCloudComponent().setSortFilterDropDown('Name'); - expect(processCloudDemoPage.editProcessFilterCloudComponent().getSortFilterDropDownValue()).toEqual('Name'); - processCloudDemoPage.editProcessFilterCloudComponent().clickSaveButton(); - processCloudDemoPage.editProcessFilterCloudComponent().clickCustomiseFilterHeader().checkCustomiseFilterHeaderIsExpanded(); + await expect(await processCloudDemoPage.getActiveFilterName()).toBe('New'); + await processCloudDemoPage.editProcessFilterCloudComponent().clickCustomiseFilterHeader(); + await processCloudDemoPage.editProcessFilterCloudComponent().checkCustomiseFilterHeaderIsExpanded(); + await expect(await processCloudDemoPage.editProcessFilterCloudComponent().getSortFilterDropDownValue()).toEqual('Id'); + await processCloudDemoPage.editProcessFilterCloudComponent().setSortFilterDropDown('Name'); + await expect(await processCloudDemoPage.editProcessFilterCloudComponent().getSortFilterDropDownValue()).toEqual('Name'); + await processCloudDemoPage.editProcessFilterCloudComponent().clickSaveButton(); + await processCloudDemoPage.editProcessFilterCloudComponent().clickCustomiseFilterHeader(); + await processCloudDemoPage.editProcessFilterCloudComponent().checkCustomiseFilterHeaderIsExpanded(); - browser.driver.sleep(1000); + await browser.driver.sleep(1000); - expect(processCloudDemoPage.getActiveFilterName()).toBe('New'); - expect(processCloudDemoPage.editProcessFilterCloudComponent().getSortFilterDropDownValue()).toEqual('Name'); - processCloudDemoPage.editProcessFilterCloudComponent().clickDeleteButton(); + await expect(await processCloudDemoPage.getActiveFilterName()).toBe('New'); + await expect(await processCloudDemoPage.editProcessFilterCloudComponent().getSortFilterDropDownValue()).toEqual('Name'); + await processCloudDemoPage.editProcessFilterCloudComponent().clickDeleteButton(); }); - it('[C291808] A process filter is deleted when clicking on delete button', () => { - processCloudDemoPage.allProcessesFilter().clickProcessFilter(); + it('[C291808] A process filter is deleted when clicking on delete button', async () => { + await processCloudDemoPage.allProcessesFilter().clickProcessFilter(); - processCloudDemoPage.editProcessFilterCloudComponent().setSortFilterDropDown('Id'); - processCloudDemoPage.allProcessesFilter().checkProcessFilterIsDisplayed(); - processCloudDemoPage.editProcessFilterCloudComponent().clickSaveAsButton(); - processCloudDemoPage.editProcessFilterCloudComponent().editProcessFilterDialog().setFilterName('New').clickOnSaveButton(); + await processCloudDemoPage.editProcessFilterCloudComponent().setSortFilterDropDown('Id'); + await processCloudDemoPage.allProcessesFilter().checkProcessFilterIsDisplayed(); + await processCloudDemoPage.editProcessFilterCloudComponent().clickSaveAsButton(); + await processCloudDemoPage.editProcessFilterCloudComponent().editProcessFilterDialog().setFilterName('New'); - browser.driver.sleep(1000); + await browser.driver.sleep(1000); - processCloudDemoPage.editProcessFilterCloudComponent().clickCustomiseFilterHeader(); - expect(processCloudDemoPage.getActiveFilterName()).toBe('New'); + await processCloudDemoPage.editProcessFilterCloudComponent().editProcessFilterDialog().clickOnSaveButton(); + await processCloudDemoPage.editProcessFilterCloudComponent().clickCustomiseFilterHeader(); + await expect(await processCloudDemoPage.getActiveFilterName()).toBe('New'); + await expect(await processCloudDemoPage.editProcessFilterCloudComponent().getSortFilterDropDownValue()).toEqual('Id'); + await processCloudDemoPage.editProcessFilterCloudComponent().clickDeleteButton(); - expect(processCloudDemoPage.editProcessFilterCloudComponent().getSortFilterDropDownValue()).toEqual('Id'); - processCloudDemoPage.editProcessFilterCloudComponent().clickDeleteButton(); + await browser.driver.sleep(1000); - browser.driver.sleep(1000); - - expect(processCloudDemoPage.getActiveFilterName()).toBe('All Processes'); - processCloudDemoPage.customProcessFilter('New').checkProcessFilterNotDisplayed(); + await expect(await processCloudDemoPage.getActiveFilterName()).toBe('All Processes'); + await processCloudDemoPage.customProcessFilter('New').checkProcessFilterNotDisplayed(); }); - it('[C291810] Process filter should not be created when process filter dialog is closed', () => { - processCloudDemoPage.allProcessesFilter().clickProcessFilter(); + it('[C291810] Process filter should not be created when process filter dialog is closed', async () => { + await processCloudDemoPage.allProcessesFilter().clickProcessFilter(); - processCloudDemoPage.editProcessFilterCloudComponent().setSortFilterDropDown('Id'); - processCloudDemoPage.allProcessesFilter().checkProcessFilterIsDisplayed(); - processCloudDemoPage.editProcessFilterCloudComponent().clickSaveAsButton(); - processCloudDemoPage.editProcessFilterCloudComponent().editProcessFilterDialog().setFilterName('Cancel'); - expect(processCloudDemoPage.editProcessFilterCloudComponent().editProcessFilterDialog().getFilterName()).toEqual('Cancel'); - processCloudDemoPage.editProcessFilterCloudComponent().editProcessFilterDialog().clickOnCancelButton(); - processCloudDemoPage.customProcessFilter('Cancel').checkProcessFilterNotDisplayed(); - expect(processCloudDemoPage.getActiveFilterName()).toEqual('All Processes'); - processCloudDemoPage.runningProcessesFilter().clickProcessFilter(); - expect(processCloudDemoPage.getActiveFilterName()).toEqual('Running Processes'); - processCloudDemoPage.editProcessFilterCloudComponent().clickCustomiseFilterHeader(); - processCloudDemoPage.allProcessesFilter().clickProcessFilter(); - expect(processCloudDemoPage.getActiveFilterName()).toEqual('All Processes'); - expect(processCloudDemoPage.editProcessFilterCloudComponent().getSortFilterDropDownValue()).toEqual('StartDate'); - processCloudDemoPage.editProcessFilterCloudComponent().clickCustomiseFilterHeader(); + await processCloudDemoPage.editProcessFilterCloudComponent().setSortFilterDropDown('Id'); + await processCloudDemoPage.allProcessesFilter().checkProcessFilterIsDisplayed(); + await processCloudDemoPage.editProcessFilterCloudComponent().clickSaveAsButton(); + await processCloudDemoPage.editProcessFilterCloudComponent().editProcessFilterDialog().setFilterName('Cancel'); + await expect(await processCloudDemoPage.editProcessFilterCloudComponent().editProcessFilterDialog().getFilterName()).toEqual('Cancel'); + await processCloudDemoPage.editProcessFilterCloudComponent().editProcessFilterDialog().clickOnCancelButton(); + await processCloudDemoPage.customProcessFilter('Cancel').checkProcessFilterNotDisplayed(); + await expect(await processCloudDemoPage.getActiveFilterName()).toEqual('All Processes'); + await processCloudDemoPage.runningProcessesFilter().clickProcessFilter(); + await expect(await processCloudDemoPage.getActiveFilterName()).toEqual('Running Processes'); + await processCloudDemoPage.editProcessFilterCloudComponent().clickCustomiseFilterHeader(); + await processCloudDemoPage.allProcessesFilter().clickProcessFilter(); + await expect(await processCloudDemoPage.getActiveFilterName()).toEqual('All Processes'); + await expect(await processCloudDemoPage.editProcessFilterCloudComponent().getSortFilterDropDownValue()).toEqual('StartDate'); + await processCloudDemoPage.editProcessFilterCloudComponent().clickCustomiseFilterHeader(); }); - it('[C291811] Save button of process filter dialog should be disabled when process name is empty', () => { - processCloudDemoPage.allProcessesFilter().clickProcessFilter(); + it('[C291811] Save button of process filter dialog should be disabled when process name is empty', async () => { + await processCloudDemoPage.allProcessesFilter().clickProcessFilter(); - processCloudDemoPage.editProcessFilterCloudComponent().setSortFilterDropDown('Id'); - processCloudDemoPage.allProcessesFilter().checkProcessFilterIsDisplayed(); - processCloudDemoPage.editProcessFilterCloudComponent().clickSaveAsButton(); - processCloudDemoPage.editProcessFilterCloudComponent().editProcessFilterDialog().clearFilterName(); - expect(processCloudDemoPage.editProcessFilterCloudComponent().editProcessFilterDialog().getFilterName()).toEqual(''); - expect(processCloudDemoPage.editProcessFilterCloudComponent().editProcessFilterDialog().checkSaveButtonIsEnabled()).toEqual(false); - expect(processCloudDemoPage.editProcessFilterCloudComponent().editProcessFilterDialog().checkCancelButtonIsEnabled()).toEqual(true); - processCloudDemoPage.editProcessFilterCloudComponent().editProcessFilterDialog().clickOnCancelButton(); + await processCloudDemoPage.editProcessFilterCloudComponent().setSortFilterDropDown('Id'); + await processCloudDemoPage.allProcessesFilter().checkProcessFilterIsDisplayed(); + await processCloudDemoPage.editProcessFilterCloudComponent().clickSaveAsButton(); + await processCloudDemoPage.editProcessFilterCloudComponent().editProcessFilterDialog().clearFilterName(); - processCloudDemoPage.editProcessFilterCloudComponent().clickCustomiseFilterHeader().checkCustomiseFilterHeaderIsExpanded(); - processCloudDemoPage.editProcessFilterCloudComponent().setSortFilterDropDown('StartDate'); - expect(processCloudDemoPage.editProcessFilterCloudComponent().getSortFilterDropDownValue()).toEqual('StartDate'); - processCloudDemoPage.editProcessFilterCloudComponent().clickSaveButton(); + await expect(await processCloudDemoPage.editProcessFilterCloudComponent().editProcessFilterDialog().getFilterName()).toEqual(''); + await expect(await processCloudDemoPage.editProcessFilterCloudComponent().editProcessFilterDialog().checkSaveButtonIsEnabled()).toEqual(false); + await expect(await processCloudDemoPage.editProcessFilterCloudComponent().editProcessFilterDialog().checkCancelButtonIsEnabled()).toEqual(true); + await processCloudDemoPage.editProcessFilterCloudComponent().editProcessFilterDialog().clickOnCancelButton(); + + await processCloudDemoPage.editProcessFilterCloudComponent().clickCustomiseFilterHeader(); + await processCloudDemoPage.editProcessFilterCloudComponent().checkCustomiseFilterHeaderIsExpanded(); + await processCloudDemoPage.editProcessFilterCloudComponent().setSortFilterDropDown('StartDate'); + await expect(await processCloudDemoPage.editProcessFilterCloudComponent().getSortFilterDropDownValue()).toEqual('StartDate'); + await processCloudDemoPage.editProcessFilterCloudComponent().clickSaveButton(); }); - it('[C291809] Process filter dialog is displayed when clicking on Save As button', () => { - processCloudDemoPage.allProcessesFilter().clickProcessFilter(); + it('[C291809] Process filter dialog is displayed when clicking on Save As button', async () => { + await processCloudDemoPage.allProcessesFilter().clickProcessFilter(); - processCloudDemoPage.editProcessFilterCloudComponent().setSortFilterDropDown('Name'); - processCloudDemoPage.allProcessesFilter().checkProcessFilterIsDisplayed(); - processCloudDemoPage.editProcessFilterCloudComponent().clickSaveAsButton(); - expect(processCloudDemoPage.editProcessFilterCloudComponent().editProcessFilterDialog().checkCancelButtonIsEnabled()).toEqual(true); - expect(processCloudDemoPage.editProcessFilterCloudComponent().editProcessFilterDialog().checkSaveButtonIsEnabled()).toEqual(true); - expect(processCloudDemoPage.editProcessFilterCloudComponent().editProcessFilterDialog().getTitle()).toEqual('Save filter as'); - expect(processCloudDemoPage.editProcessFilterCloudComponent().editProcessFilterDialog().getFilterName()).toEqual('All Processes'); - processCloudDemoPage.editProcessFilterCloudComponent().editProcessFilterDialog().clickOnCancelButton(); + await processCloudDemoPage.editProcessFilterCloudComponent().setSortFilterDropDown('Name'); + await processCloudDemoPage.allProcessesFilter().checkProcessFilterIsDisplayed(); + await processCloudDemoPage.editProcessFilterCloudComponent().clickSaveAsButton(); + await expect(await processCloudDemoPage.editProcessFilterCloudComponent().editProcessFilterDialog().checkCancelButtonIsEnabled()).toEqual(true); + await expect(await processCloudDemoPage.editProcessFilterCloudComponent().editProcessFilterDialog().checkSaveButtonIsEnabled()).toEqual(true); + await expect(await processCloudDemoPage.editProcessFilterCloudComponent().editProcessFilterDialog().getTitle()).toEqual('Save filter as'); + await expect(await processCloudDemoPage.editProcessFilterCloudComponent().editProcessFilterDialog().getFilterName()).toEqual('All Processes'); + await processCloudDemoPage.editProcessFilterCloudComponent().editProcessFilterDialog().clickOnCancelButton(); }); }); diff --git a/e2e/process-services-cloud/edit-task-filters-component.e2e.ts b/e2e/process-services-cloud/edit-task-filters-component.e2e.ts index 19c30632c2..df195c1425 100644 --- a/e2e/process-services-cloud/edit-task-filters-component.e2e.ts +++ b/e2e/process-services-cloud/edit-task-filters-component.e2e.ts @@ -16,7 +16,16 @@ */ import { browser } from 'protractor'; -import { AppListCloudPage, StringUtil, ApiService, LoginSSOPage, TasksService, SettingsPage, IdentityService, GroupIdentityService } from '@alfresco/adf-testing'; +import { + AppListCloudPage, + StringUtil, + ApiService, + LoginSSOPage, + TasksService, + SettingsPage, + IdentityService, + GroupIdentityService +} from '@alfresco/adf-testing'; import { NavigationBarPage } from '../pages/adf/navigationBarPage'; import { TasksCloudDemoPage } from '../pages/adf/demo-shell/process-services/tasksCloudDemoPage'; @@ -37,9 +46,10 @@ describe('Edit task filters cloud', () => { const apiService = new ApiService(browser.params.config.oauth2.clientId, browser.params.config.bpmHost, browser.params.config.oauth2.host, 'BPM'); const simpleApp = resources.ACTIVITI7_APPS.SIMPLE_APP.name; - const completedTaskName = StringUtil.generateRandomString(), assignedTaskName = StringUtil.generateRandomString(); + const completedTaskName = StringUtil.generateRandomString(), + assignedTaskName = StringUtil.generateRandomString(); - beforeAll(async (done) => { + beforeAll(async () => { await apiService.login(browser.params.identityAdmin.email, browser.params.identityAdmin.password); identityService = new IdentityService(apiService); groupIdentityService = new GroupIdentityService(apiService); @@ -58,192 +68,229 @@ describe('Edit task filters cloud', () => { browser.params.config.oauth2.host, browser.params.config.identityHost); await loginSSOPage.loginSSOIdentityService(testUser.email, testUser.password); - done(); }); - afterAll(async(done) => { + afterAll(async () => { await apiService.login(browser.params.identityAdmin.email, browser.params.identityAdmin.password); await identityService.deleteIdentityUser(testUser.idIdentityService); - done(); }); - beforeEach(() => { - navigationBarPage.navigateToProcessServicesCloudPage(); - appListCloudComponent.checkApsContainer(); - appListCloudComponent.goToApp(simpleApp); + beforeEach(async () => { + await navigationBarPage.navigateToProcessServicesCloudPage(); + await appListCloudComponent.checkApsContainer(); + await appListCloudComponent.goToApp(simpleApp); }); - afterEach((done) => { - tasksCloudDemoPage.myTasksFilter().clickTaskFilter(); - done(); + afterEach(async () => { + await tasksCloudDemoPage.myTasksFilter().clickTaskFilter(); }); - it('[C291785] All the filters property should be set up accordingly with the Query Param', () => { - tasksCloudDemoPage.editTaskFilterCloudComponent().clickCustomiseFilterHeader(); - tasksCloudDemoPage.myTasksFilter().checkTaskFilterIsDisplayed(); - expect(tasksCloudDemoPage.getActiveFilterName()).toBe('My Tasks'); - expect(tasksCloudDemoPage.editTaskFilterCloudComponent().getStatusFilterDropDownValue()).toEqual('ASSIGNED'); - expect(tasksCloudDemoPage.editTaskFilterCloudComponent().getSortFilterDropDownValue()).toEqual('CreatedDate'); - expect(tasksCloudDemoPage.editTaskFilterCloudComponent().getOrderFilterDropDownValue()).toEqual('DESC'); - tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(assignedTaskName); - tasksCloudDemoPage.taskListCloudComponent().checkContentIsNotDisplayedByName(completedTaskName); + it('[C291785] All the filters property should be set up accordingly with the Query Param', async () => { + await tasksCloudDemoPage.editTaskFilterCloudComponent().clickCustomiseFilterHeader(); + await tasksCloudDemoPage.myTasksFilter().checkTaskFilterIsDisplayed(); + await expect(await tasksCloudDemoPage.getActiveFilterName()).toBe('My Tasks'); + await expect(await tasksCloudDemoPage.editTaskFilterCloudComponent().getStatusFilterDropDownValue()).toEqual('ASSIGNED'); + await expect(await tasksCloudDemoPage.editTaskFilterCloudComponent().getSortFilterDropDownValue()).toEqual('CreatedDate'); + await expect(await tasksCloudDemoPage.editTaskFilterCloudComponent().getOrderFilterDropDownValue()).toEqual('DESC'); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(assignedTaskName); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsNotDisplayedByName(completedTaskName); - tasksCloudDemoPage.completedTasksFilter().clickTaskFilter(); - expect(tasksCloudDemoPage.getActiveFilterName()).toBe('Completed Tasks'); - expect(tasksCloudDemoPage.editTaskFilterCloudComponent().getStatusFilterDropDownValue()).toEqual('COMPLETED'); - expect(tasksCloudDemoPage.editTaskFilterCloudComponent().getSortFilterDropDownValue()).toEqual('CreatedDate'); - expect(tasksCloudDemoPage.editTaskFilterCloudComponent().getOrderFilterDropDownValue()).toEqual('DESC'); - tasksCloudDemoPage.taskListCloudComponent().checkContentIsNotDisplayedByName(assignedTaskName); - tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(completedTaskName); - tasksCloudDemoPage.editTaskFilterCloudComponent().clickCustomiseFilterHeader(); + await tasksCloudDemoPage.completedTasksFilter().clickTaskFilter(); + await expect(await tasksCloudDemoPage.getActiveFilterName()).toBe('Completed Tasks'); + await expect(await tasksCloudDemoPage.editTaskFilterCloudComponent().getStatusFilterDropDownValue()).toEqual('COMPLETED'); + await expect(await tasksCloudDemoPage.editTaskFilterCloudComponent().getSortFilterDropDownValue()).toEqual('CreatedDate'); + await expect(await tasksCloudDemoPage.editTaskFilterCloudComponent().getOrderFilterDropDownValue()).toEqual('DESC'); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsNotDisplayedByName(assignedTaskName); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(completedTaskName); + await tasksCloudDemoPage.editTaskFilterCloudComponent().clickCustomiseFilterHeader(); }); - it('[C306896] Delete Save and Save as actions should be displayed when clicking on custom filter header', () => { - tasksCloudDemoPage.myTasksFilter().clickTaskFilter(); - tasksCloudDemoPage.editTaskFilterCloudComponent().clickCustomiseFilterHeader(); - tasksCloudDemoPage.myTasksFilter().checkTaskFilterIsDisplayed(); - expect(tasksCloudDemoPage.getActiveFilterName()).toBe('My Tasks'); - tasksCloudDemoPage.editTaskFilterCloudComponent().checkSaveButtonIsDisplayed().checkSaveAsButtonIsDisplayed() - .checkDeleteButtonIsDisplayed(); - expect(tasksCloudDemoPage.editTaskFilterCloudComponent().checkSaveButtonIsEnabled()).toEqual(false); - expect(tasksCloudDemoPage.editTaskFilterCloudComponent().checkSaveAsButtonIsEnabled()).toEqual(false); - expect(tasksCloudDemoPage.editTaskFilterCloudComponent().checkDeleteButtonIsEnabled()).toEqual(true); - tasksCloudDemoPage.editTaskFilterCloudComponent().clickCustomiseFilterHeader(); + it('[C306896] Delete Save and Save as actions should be displayed when clicking on custom filter header', async () => { + await tasksCloudDemoPage.myTasksFilter().clickTaskFilter(); + await tasksCloudDemoPage.editTaskFilterCloudComponent().clickCustomiseFilterHeader(); + await tasksCloudDemoPage.myTasksFilter().checkTaskFilterIsDisplayed(); + await expect(await tasksCloudDemoPage.getActiveFilterName()).toBe('My Tasks'); + const editTaskFilterCloudComponent = tasksCloudDemoPage.editTaskFilterCloudComponent(); + + await editTaskFilterCloudComponent.checkSaveButtonIsDisplayed(); + await editTaskFilterCloudComponent.checkSaveAsButtonIsDisplayed(); + await editTaskFilterCloudComponent.checkDeleteButtonIsDisplayed(); + + await expect(await tasksCloudDemoPage.editTaskFilterCloudComponent().checkSaveButtonIsEnabled()).toEqual(false); + await expect(await tasksCloudDemoPage.editTaskFilterCloudComponent().checkSaveAsButtonIsEnabled()).toEqual(false); + await expect(await tasksCloudDemoPage.editTaskFilterCloudComponent().checkDeleteButtonIsEnabled()).toEqual(true); + await tasksCloudDemoPage.editTaskFilterCloudComponent().clickCustomiseFilterHeader(); }); - it('[C291795] New filter is added when clicking Save As button', () => { - tasksCloudDemoPage.myTasksFilter().clickTaskFilter(); - tasksCloudDemoPage.editTaskFilterCloudComponent().clickCustomiseFilterHeader().setSortFilterDropDown('Id'); - tasksCloudDemoPage.myTasksFilter().checkTaskFilterIsDisplayed(); + it('[C291795] New filter is added when clicking Save As button', async () => { + await tasksCloudDemoPage.myTasksFilter().clickTaskFilter(); - tasksCloudDemoPage.editTaskFilterCloudComponent().clickSaveAsButton(); - tasksCloudDemoPage.editTaskFilterCloudComponent().editTaskFilterDialog().setFilterName('New').clickOnSaveButton(); + const editTaskFilterCloudComponent = tasksCloudDemoPage.editTaskFilterCloudComponent(); + await editTaskFilterCloudComponent.clickCustomiseFilterHeader(); + await editTaskFilterCloudComponent.setSortFilterDropDown('Id'); - browser.driver.sleep(1000); - expect(tasksCloudDemoPage.getActiveFilterName()).toBe('New'); - tasksCloudDemoPage.editTaskFilterCloudComponent().clickCustomiseFilterHeader(); - expect(tasksCloudDemoPage.editTaskFilterCloudComponent().checkSaveButtonIsEnabled()).toEqual(false); - expect(tasksCloudDemoPage.editTaskFilterCloudComponent().getSortFilterDropDownValue()).toEqual('Id'); - expect(tasksCloudDemoPage.editTaskFilterCloudComponent().checkSaveAsButtonIsEnabled()).toEqual(false); - expect(tasksCloudDemoPage.editTaskFilterCloudComponent().checkDeleteButtonIsEnabled()).toEqual(true); - tasksCloudDemoPage.myTasksFilter().clickTaskFilter(); - expect(tasksCloudDemoPage.editTaskFilterCloudComponent().getSortFilterDropDownValue()).toEqual('CreatedDate'); - tasksCloudDemoPage.customTaskFilter('custom-new').clickTaskFilter(); - expect(tasksCloudDemoPage.editTaskFilterCloudComponent().getSortFilterDropDownValue()).toEqual('Id'); - tasksCloudDemoPage.editTaskFilterCloudComponent().clickDeleteButton(); + await tasksCloudDemoPage.myTasksFilter().checkTaskFilterIsDisplayed(); + + await tasksCloudDemoPage.editTaskFilterCloudComponent().clickSaveAsButton(); + + const editTaskFilterDialog = tasksCloudDemoPage.editTaskFilterCloudComponent().editTaskFilterDialog(); + await editTaskFilterDialog.setFilterName('New'); + await editTaskFilterDialog.clickOnSaveButton(); + + await expect(await tasksCloudDemoPage.getActiveFilterName()).toBe('New'); + await tasksCloudDemoPage.editTaskFilterCloudComponent().clickCustomiseFilterHeader(); + await expect(await tasksCloudDemoPage.editTaskFilterCloudComponent().checkSaveButtonIsEnabled()).toEqual(false); + await expect(await tasksCloudDemoPage.editTaskFilterCloudComponent().getSortFilterDropDownValue()).toEqual('Id'); + await expect(await tasksCloudDemoPage.editTaskFilterCloudComponent().checkSaveAsButtonIsEnabled()).toEqual(false); + await expect(await tasksCloudDemoPage.editTaskFilterCloudComponent().checkDeleteButtonIsEnabled()).toEqual(true); + await tasksCloudDemoPage.myTasksFilter().clickTaskFilter(); + await expect(await tasksCloudDemoPage.editTaskFilterCloudComponent().getSortFilterDropDownValue()).toEqual('CreatedDate'); + await tasksCloudDemoPage.customTaskFilter('custom-new').clickTaskFilter(); + await expect(await tasksCloudDemoPage.editTaskFilterCloudComponent().getSortFilterDropDownValue()).toEqual('Id'); + await tasksCloudDemoPage.editTaskFilterCloudComponent().clickDeleteButton(); }); - it('[C291796] Two filters with same name can be created when clicking the Save As button', () => { - tasksCloudDemoPage.myTasksFilter().clickTaskFilter(); - tasksCloudDemoPage.editTaskFilterCloudComponent().clickCustomiseFilterHeader().setSortFilterDropDown('Id'); - tasksCloudDemoPage.myTasksFilter().checkTaskFilterIsDisplayed(); + it('[C291796] Two filters with same name can be created when clicking the Save As button', async () => { + await tasksCloudDemoPage.myTasksFilter().clickTaskFilter(); - tasksCloudDemoPage.editTaskFilterCloudComponent().clickSaveAsButton(); - tasksCloudDemoPage.editTaskFilterCloudComponent().editTaskFilterDialog().setFilterName('New').clickOnSaveButton(); + const editTaskFilterCloudComponent = tasksCloudDemoPage.editTaskFilterCloudComponent(); + await editTaskFilterCloudComponent.clickCustomiseFilterHeader(); + await editTaskFilterCloudComponent.setSortFilterDropDown('Id'); - browser.driver.sleep(1000); - expect(tasksCloudDemoPage.getActiveFilterName()).toBe('New'); - tasksCloudDemoPage.editTaskFilterCloudComponent().clickCustomiseFilterHeader(); - expect(tasksCloudDemoPage.editTaskFilterCloudComponent().getSortFilterDropDownValue()).toEqual('Id'); - tasksCloudDemoPage.editTaskFilterCloudComponent().setSortFilterDropDown('Priority'); - tasksCloudDemoPage.editTaskFilterCloudComponent().clickSaveAsButton(); - tasksCloudDemoPage.editTaskFilterCloudComponent().editTaskFilterDialog().setFilterName('New').clickOnSaveButton(); + await tasksCloudDemoPage.myTasksFilter().checkTaskFilterIsDisplayed(); - browser.driver.sleep(1000); - expect(tasksCloudDemoPage.getActiveFilterName()).toBe('New'); - tasksCloudDemoPage.editTaskFilterCloudComponent().clickCustomiseFilterHeader(); - expect(tasksCloudDemoPage.editTaskFilterCloudComponent().getSortFilterDropDownValue()).toEqual('Priority'); - tasksCloudDemoPage.editTaskFilterCloudComponent().clickDeleteButton(); - tasksCloudDemoPage.customTaskFilter('custom-new').clickTaskFilter(); - browser.driver.sleep(1000); - tasksCloudDemoPage.editTaskFilterCloudComponent().clickCustomiseFilterHeader(); - expect(tasksCloudDemoPage.editTaskFilterCloudComponent().getSortFilterDropDownValue()).toEqual('Id'); - tasksCloudDemoPage.editTaskFilterCloudComponent().clickDeleteButton(); + await tasksCloudDemoPage.editTaskFilterCloudComponent().clickSaveAsButton(); + + const editTaskFilterDialog = editTaskFilterCloudComponent.editTaskFilterDialog(); + await editTaskFilterDialog.setFilterName('New'); + await editTaskFilterDialog.clickOnSaveButton(); + + await expect(await tasksCloudDemoPage.getActiveFilterName()).toBe('New'); + await tasksCloudDemoPage.editTaskFilterCloudComponent().clickCustomiseFilterHeader(); + + await expect(await tasksCloudDemoPage.editTaskFilterCloudComponent().getSortFilterDropDownValue()).toEqual('Id'); + await tasksCloudDemoPage.editTaskFilterCloudComponent().setSortFilterDropDown('Priority'); + await tasksCloudDemoPage.editTaskFilterCloudComponent().clickSaveAsButton(); + await tasksCloudDemoPage.editTaskFilterCloudComponent().editTaskFilterDialog().setFilterName('New'); + await tasksCloudDemoPage.editTaskFilterCloudComponent().editTaskFilterDialog().clickOnSaveButton(); + + await expect(await tasksCloudDemoPage.getActiveFilterName()).toBe('New'); + await tasksCloudDemoPage.editTaskFilterCloudComponent().clickCustomiseFilterHeader(); + await expect(await tasksCloudDemoPage.editTaskFilterCloudComponent().getSortFilterDropDownValue()).toEqual('Priority'); + await tasksCloudDemoPage.editTaskFilterCloudComponent().clickDeleteButton(); + await tasksCloudDemoPage.customTaskFilter('custom-new').clickTaskFilter(); + + await tasksCloudDemoPage.editTaskFilterCloudComponent().clickCustomiseFilterHeader(); + await expect(await tasksCloudDemoPage.editTaskFilterCloudComponent().getSortFilterDropDownValue()).toEqual('Id'); + await tasksCloudDemoPage.editTaskFilterCloudComponent().clickDeleteButton(); }); - it('[C291797] A filter is overrided when clicking on save button', () => { - tasksCloudDemoPage.myTasksFilter().clickTaskFilter(); - tasksCloudDemoPage.editTaskFilterCloudComponent().clickCustomiseFilterHeader().setSortFilterDropDown('Id'); - tasksCloudDemoPage.myTasksFilter().checkTaskFilterIsDisplayed(); - tasksCloudDemoPage.editTaskFilterCloudComponent().clickSaveAsButton(); - tasksCloudDemoPage.editTaskFilterCloudComponent().editTaskFilterDialog().setFilterName('New').clickOnSaveButton(); + it('[C291797] A filter is overrided when clicking on save button', async () => { + await tasksCloudDemoPage.myTasksFilter().clickTaskFilter(); - browser.driver.sleep(1000); - expect(tasksCloudDemoPage.getActiveFilterName()).toBe('New'); - tasksCloudDemoPage.editTaskFilterCloudComponent().clickCustomiseFilterHeader(); - expect(tasksCloudDemoPage.editTaskFilterCloudComponent().getSortFilterDropDownValue()).toEqual('Id'); - tasksCloudDemoPage.editTaskFilterCloudComponent().setSortFilterDropDown('Name'); - tasksCloudDemoPage.editTaskFilterCloudComponent().clickSaveButton(); - tasksCloudDemoPage.editTaskFilterCloudComponent().clickCustomiseFilterHeader(); + const editTaskFilterCloudComponent = tasksCloudDemoPage.editTaskFilterCloudComponent(); + await editTaskFilterCloudComponent.clickCustomiseFilterHeader(); + await editTaskFilterCloudComponent.setSortFilterDropDown('Id'); - browser.driver.sleep(1000); - expect(tasksCloudDemoPage.getActiveFilterName()).toBe('New'); - expect(tasksCloudDemoPage.editTaskFilterCloudComponent().getSortFilterDropDownValue()).toEqual('Name'); - tasksCloudDemoPage.editTaskFilterCloudComponent().clickDeleteButton(); + await tasksCloudDemoPage.myTasksFilter().checkTaskFilterIsDisplayed(); + await tasksCloudDemoPage.editTaskFilterCloudComponent().clickSaveAsButton(); + + const editTaskFilterDialog = await tasksCloudDemoPage.editTaskFilterCloudComponent().editTaskFilterDialog(); + await editTaskFilterDialog.setFilterName('New'); + await editTaskFilterDialog.clickOnSaveButton(); + + await expect(await tasksCloudDemoPage.getActiveFilterName()).toBe('New'); + await tasksCloudDemoPage.editTaskFilterCloudComponent().clickCustomiseFilterHeader(); + await expect(await tasksCloudDemoPage.editTaskFilterCloudComponent().getSortFilterDropDownValue()).toEqual('Id'); + await tasksCloudDemoPage.editTaskFilterCloudComponent().setSortFilterDropDown('Name'); + await tasksCloudDemoPage.editTaskFilterCloudComponent().clickSaveButton(); + await tasksCloudDemoPage.editTaskFilterCloudComponent().clickCustomiseFilterHeader(); + + await expect(await tasksCloudDemoPage.getActiveFilterName()).toBe('New'); + await expect(await tasksCloudDemoPage.editTaskFilterCloudComponent().getSortFilterDropDownValue()).toEqual('Name'); + await tasksCloudDemoPage.editTaskFilterCloudComponent().clickDeleteButton(); }); - it('[C291798] A filter is deleted when clicking on delete button', () => { - tasksCloudDemoPage.myTasksFilter().clickTaskFilter(); - tasksCloudDemoPage.editTaskFilterCloudComponent().clickCustomiseFilterHeader().setSortFilterDropDown('Id'); - tasksCloudDemoPage.myTasksFilter().checkTaskFilterIsDisplayed(); - tasksCloudDemoPage.editTaskFilterCloudComponent().clickSaveAsButton(); - tasksCloudDemoPage.editTaskFilterCloudComponent().editTaskFilterDialog().setFilterName('New').clickOnSaveButton(); + it('[C291798] A filter is deleted when clicking on delete button', async () => { + await tasksCloudDemoPage.myTasksFilter().clickTaskFilter(); - browser.driver.sleep(1000); + const editTaskFilterCloudComponent = tasksCloudDemoPage.editTaskFilterCloudComponent(); + await editTaskFilterCloudComponent.clickCustomiseFilterHeader(); + await editTaskFilterCloudComponent.setSortFilterDropDown('Id'); - expect(tasksCloudDemoPage.getActiveFilterName()).toBe('New'); - tasksCloudDemoPage.editTaskFilterCloudComponent().clickCustomiseFilterHeader(); - expect(tasksCloudDemoPage.editTaskFilterCloudComponent().getSortFilterDropDownValue()).toEqual('Id'); - tasksCloudDemoPage.editTaskFilterCloudComponent().clickDeleteButton(); + await tasksCloudDemoPage.myTasksFilter().checkTaskFilterIsDisplayed(); + await tasksCloudDemoPage.editTaskFilterCloudComponent().clickSaveAsButton(); - browser.driver.sleep(1000); + const editTaskFilterDialog = await tasksCloudDemoPage.editTaskFilterCloudComponent().editTaskFilterDialog(); + await editTaskFilterDialog.setFilterName('New'); + await editTaskFilterDialog.clickOnSaveButton(); - expect(tasksCloudDemoPage.getActiveFilterName()).toBe('My Tasks'); - tasksCloudDemoPage.customTaskFilter('New').checkTaskFilterNotDisplayed(); + await expect(await tasksCloudDemoPage.getActiveFilterName()).toBe('New'); + await tasksCloudDemoPage.editTaskFilterCloudComponent().clickCustomiseFilterHeader(); + await expect(await tasksCloudDemoPage.editTaskFilterCloudComponent().getSortFilterDropDownValue()).toEqual('Id'); + await tasksCloudDemoPage.editTaskFilterCloudComponent().clickDeleteButton(); + + await expect(await tasksCloudDemoPage.getActiveFilterName()).toBe('My Tasks'); + await tasksCloudDemoPage.customTaskFilter('New').checkTaskFilterNotDisplayed(); }); - it('[C291800] Task filter should not be created when task filter dialog is closed', () => { - tasksCloudDemoPage.myTasksFilter().clickTaskFilter(); - tasksCloudDemoPage.editTaskFilterCloudComponent().clickCustomiseFilterHeader().setSortFilterDropDown('Priority'); - expect(tasksCloudDemoPage.editTaskFilterCloudComponent().getSortFilterDropDownValue()).toEqual('Priority'); - tasksCloudDemoPage.editTaskFilterCloudComponent().clickSaveAsButton(); - expect(tasksCloudDemoPage.editTaskFilterCloudComponent().editTaskFilterDialog().getFilterName()).toEqual('My Tasks'); - tasksCloudDemoPage.editTaskFilterCloudComponent().editTaskFilterDialog().setFilterName('Cancel'); - expect(tasksCloudDemoPage.editTaskFilterCloudComponent().editTaskFilterDialog().getFilterName()).toEqual('Cancel'); - tasksCloudDemoPage.editTaskFilterCloudComponent().editTaskFilterDialog().clickOnCancelButton(); - tasksCloudDemoPage.customTaskFilter('Cancel').checkTaskFilterNotDisplayed(); - expect(tasksCloudDemoPage.getActiveFilterName()).toEqual('My Tasks'); - tasksCloudDemoPage.completedTasksFilter().clickTaskFilter(); - tasksCloudDemoPage.myTasksFilter().clickTaskFilter(); - tasksCloudDemoPage.editTaskFilterCloudComponent().clickCustomiseFilterHeader(); - expect(tasksCloudDemoPage.getActiveFilterName()).toBe('My Tasks'); - expect(tasksCloudDemoPage.editTaskFilterCloudComponent().getSortFilterDropDownValue()).toEqual('CreatedDate'); - tasksCloudDemoPage.editTaskFilterCloudComponent().clickCustomiseFilterHeader(); + it('[C291800] Task filter should not be created when task filter dialog is closed', async () => { + await tasksCloudDemoPage.myTasksFilter().clickTaskFilter(); + + const editTaskFilterCloudComponent = tasksCloudDemoPage.editTaskFilterCloudComponent(); + await editTaskFilterCloudComponent.clickCustomiseFilterHeader(); + await editTaskFilterCloudComponent.setSortFilterDropDown('Priority'); + + await expect(await tasksCloudDemoPage.editTaskFilterCloudComponent().getSortFilterDropDownValue()).toEqual('Priority'); + await tasksCloudDemoPage.editTaskFilterCloudComponent().clickSaveAsButton(); + await expect(await tasksCloudDemoPage.editTaskFilterCloudComponent().editTaskFilterDialog().getFilterName()).toEqual('My Tasks'); + await tasksCloudDemoPage.editTaskFilterCloudComponent().editTaskFilterDialog().setFilterName('Cancel'); + await expect(await tasksCloudDemoPage.editTaskFilterCloudComponent().editTaskFilterDialog().getFilterName()).toEqual('Cancel'); + await tasksCloudDemoPage.editTaskFilterCloudComponent().editTaskFilterDialog().clickOnCancelButton(); + await tasksCloudDemoPage.customTaskFilter('Cancel').checkTaskFilterNotDisplayed(); + await expect(await tasksCloudDemoPage.getActiveFilterName()).toEqual('My Tasks'); + await tasksCloudDemoPage.completedTasksFilter().clickTaskFilter(); + await tasksCloudDemoPage.myTasksFilter().clickTaskFilter(); + await tasksCloudDemoPage.editTaskFilterCloudComponent().clickCustomiseFilterHeader(); + await expect(await tasksCloudDemoPage.getActiveFilterName()).toBe('My Tasks'); + await expect(await tasksCloudDemoPage.editTaskFilterCloudComponent().getSortFilterDropDownValue()).toEqual('CreatedDate'); + await tasksCloudDemoPage.editTaskFilterCloudComponent().clickCustomiseFilterHeader(); }); - it('[C291801] Save button of task filter dialog should be disabled when task name is empty', () => { - tasksCloudDemoPage.myTasksFilter().clickTaskFilter(); - tasksCloudDemoPage.editTaskFilterCloudComponent().clickCustomiseFilterHeader().setSortFilterDropDown('Id'); - expect(tasksCloudDemoPage.editTaskFilterCloudComponent().getSortFilterDropDownValue()).toEqual('Id'); - tasksCloudDemoPage.editTaskFilterCloudComponent().clickSaveAsButton(); - expect(tasksCloudDemoPage.editTaskFilterCloudComponent().editTaskFilterDialog().getFilterName()).toEqual('My Tasks'); - tasksCloudDemoPage.editTaskFilterCloudComponent().editTaskFilterDialog().clearFilterName(); - expect(tasksCloudDemoPage.editTaskFilterCloudComponent().editTaskFilterDialog().getFilterName()).toEqual(''); - expect(tasksCloudDemoPage.editTaskFilterCloudComponent().editTaskFilterDialog().checkSaveButtonIsEnabled()).toEqual(false); - expect(tasksCloudDemoPage.editTaskFilterCloudComponent().editTaskFilterDialog().checkCancelButtonIsEnabled()).toEqual(true); - tasksCloudDemoPage.editTaskFilterCloudComponent().editTaskFilterDialog().clickOnCancelButton(); + it('[C291801] Save button of task filter dialog should be disabled when task name is empty', async () => { + await tasksCloudDemoPage.myTasksFilter().clickTaskFilter(); + + const editTaskFilterCloudComponent = tasksCloudDemoPage.editTaskFilterCloudComponent(); + await editTaskFilterCloudComponent.clickCustomiseFilterHeader(); + await editTaskFilterCloudComponent.setSortFilterDropDown('Id'); + + await expect(await tasksCloudDemoPage.editTaskFilterCloudComponent().getSortFilterDropDownValue()).toEqual('Id'); + await tasksCloudDemoPage.editTaskFilterCloudComponent().clickSaveAsButton(); + + await expect(await tasksCloudDemoPage.editTaskFilterCloudComponent().editTaskFilterDialog().getFilterName()).toEqual('My Tasks'); + + const tasksCloud = tasksCloudDemoPage.editTaskFilterCloudComponent(); + await tasksCloud.editTaskFilterDialog().clearFilterName(); + + await expect(await tasksCloudDemoPage.editTaskFilterCloudComponent().editTaskFilterDialog().getFilterName()).toEqual(''); + + await expect(await tasksCloudDemoPage.editTaskFilterCloudComponent().editTaskFilterDialog().checkSaveButtonIsEnabled()).toEqual(false); + await expect(await tasksCloudDemoPage.editTaskFilterCloudComponent().editTaskFilterDialog().checkCancelButtonIsEnabled()).toEqual(true); + await tasksCloudDemoPage.editTaskFilterCloudComponent().editTaskFilterDialog().clickOnCancelButton(); }); - it('[C291799] Task filter dialog is displayed when clicking on Save As button', () => { - tasksCloudDemoPage.myTasksFilter().clickTaskFilter(); - tasksCloudDemoPage.editTaskFilterCloudComponent().clickCustomiseFilterHeader().setSortFilterDropDown('Id'); - expect(tasksCloudDemoPage.editTaskFilterCloudComponent().getSortFilterDropDownValue()).toEqual('Id'); - tasksCloudDemoPage.editTaskFilterCloudComponent().clickSaveAsButton(); - expect(tasksCloudDemoPage.editTaskFilterCloudComponent().editTaskFilterDialog().checkSaveButtonIsEnabled()).toEqual(true); - expect(tasksCloudDemoPage.editTaskFilterCloudComponent().editTaskFilterDialog().checkCancelButtonIsEnabled()).toEqual(true); - expect(tasksCloudDemoPage.editTaskFilterCloudComponent().editTaskFilterDialog().getTitle()).toEqual('Save filter as'); - expect(tasksCloudDemoPage.editTaskFilterCloudComponent().editTaskFilterDialog().getFilterName()).toEqual('My Tasks'); - tasksCloudDemoPage.editTaskFilterCloudComponent().editTaskFilterDialog().clickOnCancelButton(); + it('[C291799] Task filter dialog is displayed when clicking on Save As button', async () => { + await tasksCloudDemoPage.myTasksFilter().clickTaskFilter(); + const tasksCloud = tasksCloudDemoPage.editTaskFilterCloudComponent(); + await tasksCloud.clickCustomiseFilterHeader(); + await tasksCloud.setSortFilterDropDown('Id'); + await expect(await tasksCloudDemoPage.editTaskFilterCloudComponent().getSortFilterDropDownValue()).toEqual('Id'); + await tasksCloudDemoPage.editTaskFilterCloudComponent().clickSaveAsButton(); + await expect(await tasksCloudDemoPage.editTaskFilterCloudComponent().editTaskFilterDialog().checkSaveButtonIsEnabled()).toEqual(true); + await expect(await tasksCloudDemoPage.editTaskFilterCloudComponent().editTaskFilterDialog().checkCancelButtonIsEnabled()).toEqual(true); + await expect(await tasksCloudDemoPage.editTaskFilterCloudComponent().editTaskFilterDialog().getTitle()).toEqual('Save filter as'); + await expect(await tasksCloudDemoPage.editTaskFilterCloudComponent().editTaskFilterDialog().getFilterName()).toEqual('My Tasks'); + await tasksCloudDemoPage.editTaskFilterCloudComponent().editTaskFilterDialog().clickOnCancelButton(); }); }); diff --git a/e2e/process-services-cloud/form-field/dropdown-widget.e2e.ts b/e2e/process-services-cloud/form-field/dropdown-widget.e2e.ts index be21a04dd6..34a39d2f3b 100644 --- a/e2e/process-services-cloud/form-field/dropdown-widget.e2e.ts +++ b/e2e/process-services-cloud/form-field/dropdown-widget.e2e.ts @@ -16,8 +16,19 @@ */ import { - TasksService, QueryService, ProcessDefinitionsService, ProcessInstancesService, - LoginSSOPage, ApiService, SettingsPage, IdentityService, GroupIdentityService, Widget, NotificationHistoryPage, TaskHeaderCloudPage, TaskFormCloudComponent + TasksService, + QueryService, + ProcessDefinitionsService, + ProcessInstancesService, + LoginSSOPage, + ApiService, + SettingsPage, + IdentityService, + GroupIdentityService, + Widget, + NotificationHistoryPage, + TaskHeaderCloudPage, + TaskFormCloudComponent } from '@alfresco/adf-testing'; import { NavigationBarPage } from '../../pages/adf/navigationBarPage'; import { TasksCloudDemoPage } from '../../pages/adf/demo-shell/process-services/tasksCloudDemoPage'; @@ -51,7 +62,7 @@ describe('Form Field Component - Dropdown Widget', () => { let runningProcessInstance, testUser, groupInfo, tasklist, task; const simpleApp = resources.ACTIVITI7_APPS.SIMPLE_APP.name; - beforeAll(async (done) => { + beforeAll(async () => { await apiService.login(browser.params.identityAdmin.email, browser.params.identityAdmin.password); identityService = new IdentityService(apiService); @@ -72,7 +83,7 @@ describe('Form Field Component - Dropdown Widget', () => { runningProcessInstance = await processInstancesService.createProcessInstance(processDefinition.entry.key, simpleApp); queryService = new QueryService(apiService); - await browser.driver.sleep(4000); // eventual consistency query + await browser.sleep(4000); // eventual consistency query tasklist = await queryService.getProcessInstanceTasks(runningProcessInstance.entry.id, simpleApp); task = await tasklist.list.entries[0]; tasksService = new TasksService(apiService); @@ -83,46 +94,48 @@ describe('Form Field Component - Dropdown Widget', () => { browser.params.config.oauth2.host, browser.params.config.identityHost); await loginSSOPage.loginSSOIdentityService(testUser.email, testUser.password); - done(); + }); - afterAll(async (done) => { + afterAll(async () => { await apiService.login(browser.params.identityAdmin.email, browser.params.identityAdmin.password); await identityService.deleteIdentityUser(testUser.idIdentityService); - done(); + }); - beforeEach(() => { - navigationBarPage.navigateToProcessServicesCloudPage(); - appListCloudComponent.checkApsContainer(); - appListCloudComponent.goToApp(simpleApp); + beforeEach(async () => { + await navigationBarPage.navigateToProcessServicesCloudPage(); + await appListCloudComponent.checkApsContainer(); + await appListCloudComponent.goToApp(simpleApp); - identityService.deleteIdentityUser(testUser.idIdentityService); + await identityService.deleteIdentityUser(testUser.idIdentityService); }); it('[C290069] Should be able to read rest service dropdown options, save and complete the task form', async () => { - tasksCloudDemoPage.myTasksFilter().clickTaskFilter(); - tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(task.entry.name); - tasksCloudDemoPage.taskListCloudComponent().selectRow(task.entry.name); - taskHeaderCloudPage.checkTaskPropertyListIsDisplayed(); - taskFormCloudComponent.formFields().checkFormIsDisplayed(); - taskFormCloudComponent.formFields().checkWidgetIsVisible('Dropdown097maj'); - dropdown.selectOption('Clementine Bauch', 'dropdown-cloud-widget mat-select'); - expect(dropdown.getSelectedOptionText('Dropdown097maj')).toBe('Clementine Bauch'); - taskFormCloudComponent.checkSaveButtonIsDisplayed().clickSaveButton(); - expect(dropdown.getSelectedOptionText('Dropdown097maj')).toBe('Clementine Bauch'); - taskFormCloudComponent.checkCompleteButtonIsDisplayed().clickCompleteButton(); - expect(tasksCloudDemoPage.getActiveFilterName()).toBe('My Tasks'); - tasksCloudDemoPage.taskListCloudComponent().checkContentIsNotDisplayedByName(task.entry.name); - notificationHistoryPage.checkNotifyContains('Task has been saved successfully'); + await tasksCloudDemoPage.myTasksFilter().clickTaskFilter(); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(task.entry.name); + await tasksCloudDemoPage.taskListCloudComponent().selectRow(task.entry.name); + await taskHeaderCloudPage.checkTaskPropertyListIsDisplayed(); + await taskFormCloudComponent.formFields().checkFormIsDisplayed(); + await taskFormCloudComponent.formFields().checkWidgetIsVisible('Dropdown097maj'); + await dropdown.selectOption('Clementine Bauch', 'dropdown-cloud-widget mat-select'); + await expect(await dropdown.getSelectedOptionText('Dropdown097maj')).toBe('Clementine Bauch'); + await taskFormCloudComponent.checkSaveButtonIsDisplayed(); + await taskFormCloudComponent.clickSaveButton(); + await expect(await dropdown.getSelectedOptionText('Dropdown097maj')).toBe('Clementine Bauch'); + await taskFormCloudComponent.checkCompleteButtonIsDisplayed(); + await taskFormCloudComponent.clickCompleteButton(); + await expect(await tasksCloudDemoPage.getActiveFilterName()).toBe('My Tasks'); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsNotDisplayedByName(task.entry.name); + await notificationHistoryPage.checkNotifyContains('Task has been saved successfully'); - tasksCloudDemoPage.completedTasksFilter().clickTaskFilter(); - tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(task.entry.name); - tasksCloudDemoPage.taskListCloudComponent().selectRow(task.entry.name); - taskFormCloudComponent.formFields().checkFormIsDisplayed(); - taskFormCloudComponent.formFields().checkWidgetIsVisible('Dropdown097maj'); - expect(dropdown.getSelectedOptionText('Dropdown097maj')).toBe('Clementine Bauch'); - taskFormCloudComponent.checkCompleteButtonIsNotDisplayed(); + await tasksCloudDemoPage.completedTasksFilter().clickTaskFilter(); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(task.entry.name); + await tasksCloudDemoPage.taskListCloudComponent().selectRow(task.entry.name); + await taskFormCloudComponent.formFields().checkFormIsDisplayed(); + await taskFormCloudComponent.formFields().checkWidgetIsVisible('Dropdown097maj'); + await expect(await dropdown.getSelectedOptionText('Dropdown097maj')).toBe('Clementine Bauch'); + await taskFormCloudComponent.checkCompleteButtonIsNotDisplayed(); }); }); diff --git a/e2e/process-services-cloud/form-field/visibility-condition.e2e.ts b/e2e/process-services-cloud/form-field/visibility-condition.e2e.ts index 1073e31b0b..fc836923ee 100644 --- a/e2e/process-services-cloud/form-field/visibility-condition.e2e.ts +++ b/e2e/process-services-cloud/form-field/visibility-condition.e2e.ts @@ -54,7 +54,7 @@ describe('Visibility conditions - cloud', () => { checkboxVariableVariable: 'CheckboxVariableVariable' }; - beforeAll(async (done) => { + beforeAll(async () => { this.alfrescoJsApi = new AlfrescoApi({ provider: 'BPM', hostBpm: browser.params.testConfig.adf_aps.host @@ -66,100 +66,98 @@ describe('Visibility conditions - cloud', () => { browser.params.config.identityHost); await loginSSOPage.loginSSOIdentityService(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); - navigationBarPage.clickFormCloudButton(); + await navigationBarPage.navigateToFormCloudPage(); - formCloudDemoPage.setConfigToEditor(checkboxVisibilityFormJson); - - done(); + await formCloudDemoPage.setConfigToEditor(checkboxVisibilityFormJson); }); - it('[C309647] Should be able to see Checkbox widget when visibility condition refers to another field with specific value', () => { + it('[C309647] Should be able to see Checkbox widget when visibility condition refers to another field with specific value', async () => { - widget.textWidget().isWidgetVisible(widgets.textOneId); - widget.checkboxWidget().isCheckboxHidden(checkbox.checkboxFieldValue); - widget.textWidget().setValue(widgets.textOneId, value.displayCheckbox); - widget.checkboxWidget().isCheckboxDisplayed(checkbox.checkboxFieldValue); + await widget.textWidget().isWidgetVisible(widgets.textOneId); + await widget.checkboxWidget().isCheckboxHidden(checkbox.checkboxFieldValue); + await widget.textWidget().setValue(widgets.textOneId, value.displayCheckbox); + await widget.checkboxWidget().isCheckboxDisplayed(checkbox.checkboxFieldValue); - widget.textWidget().setValue(widgets.textOneId, value.notDisplayCheckbox); - widget.checkboxWidget().isCheckboxHidden(checkbox.checkboxFieldValue); + await widget.textWidget().setValue(widgets.textOneId, value.notDisplayCheckbox); + await widget.checkboxWidget().isCheckboxHidden(checkbox.checkboxFieldValue); }); - it('[C309648] Should be able to see Checkbox widget when visibility condition refers to a form variable and a field', () => { + it('[C309648] Should be able to see Checkbox widget when visibility condition refers to a form variable and a field', async () => { - widget.textWidget().isWidgetVisible(widgets.textOneId); - widget.checkboxWidget().isCheckboxHidden(checkbox.checkboxVariableField); + await widget.textWidget().isWidgetVisible(widgets.textOneId); + await widget.checkboxWidget().isCheckboxHidden(checkbox.checkboxVariableField); - widget.textWidget().setValue(widgets.textOneId, value.displayCheckbox); - widget.checkboxWidget().isCheckboxDisplayed(checkbox.checkboxVariableField); + await widget.textWidget().setValue(widgets.textOneId, value.displayCheckbox); + await widget.checkboxWidget().isCheckboxDisplayed(checkbox.checkboxVariableField); - widget.textWidget().setValue(widgets.textOneId, value.notDisplayCheckbox); - widget.checkboxWidget().isCheckboxHidden(checkbox.checkboxVariableField); + await widget.textWidget().setValue(widgets.textOneId, value.notDisplayCheckbox); + await widget.checkboxWidget().isCheckboxHidden(checkbox.checkboxVariableField); }); - it('[C309649] Should be able to see Checkbox widget when visibility condition refers to a field and a form variable', () => { + it('[C309649] Should be able to see Checkbox widget when visibility condition refers to a field and a form variable', async () => { - widget.textWidget().isWidgetVisible(widgets.textOneId); - widget.checkboxWidget().isCheckboxHidden(checkbox.checkboxFieldVariable); + await widget.textWidget().isWidgetVisible(widgets.textOneId); + await widget.checkboxWidget().isCheckboxHidden(checkbox.checkboxFieldVariable); - widget.textWidget().setValue(widgets.textOneId, value.displayCheckbox); - expect(widget.checkboxWidget().isCheckboxDisplayed(checkbox.checkboxFieldVariable)).toBe(true); + await widget.textWidget().setValue(widgets.textOneId, value.displayCheckbox); + await widget.checkboxWidget().isCheckboxDisplayed(checkbox.checkboxFieldVariable); - widget.textWidget().setValue(widgets.textOneId, value.notDisplayCheckbox); - widget.checkboxWidget().isCheckboxHidden(checkbox.checkboxFieldVariable); + await widget.textWidget().setValue(widgets.textOneId, value.notDisplayCheckbox); + await widget.checkboxWidget().isCheckboxHidden(checkbox.checkboxFieldVariable); }); - it('[C311425] Should be able to see Checkbox widget when visibility condition refers to a field and another field', () => { + it('[C311425] Should be able to see Checkbox widget when visibility condition refers to a field and another field', async () => { - widget.textWidget().isWidgetVisible(widgets.textOneId); - widget.textWidget().isWidgetVisible(widgets.textTwoId); - widget.checkboxWidget().isCheckboxHidden(checkbox.checkboxFieldField); + await widget.textWidget().isWidgetVisible(widgets.textOneId); + await widget.textWidget().isWidgetVisible(widgets.textTwoId); + await widget.checkboxWidget().isCheckboxHidden(checkbox.checkboxFieldField); - widget.textWidget().setValue(widgets.textOneId, value.displayCheckbox); - widget.checkboxWidget().isCheckboxHidden(checkbox.checkboxFieldField); + await widget.textWidget().setValue(widgets.textOneId, value.displayCheckbox); + await widget.checkboxWidget().isCheckboxHidden(checkbox.checkboxFieldField); - widget.textWidget().setValue(widgets.textTwoId, value.displayCheckbox); - widget.checkboxWidget().isCheckboxDisplayed(checkbox.checkboxFieldField); + await widget.textWidget().setValue(widgets.textTwoId, value.displayCheckbox); + await widget.checkboxWidget().isCheckboxDisplayed(checkbox.checkboxFieldField); - widget.textWidget().setValue(widgets.textOneId, value.notDisplayCheckbox); - widget.checkboxWidget().isCheckboxHidden(checkbox.checkboxFieldField); + await widget.textWidget().setValue(widgets.textOneId, value.notDisplayCheckbox); + await widget.checkboxWidget().isCheckboxHidden(checkbox.checkboxFieldField); }); - it('[C311424] Should be able to see Checkbox widget when visibility condition refers to a variable with specific value', () => { - formCloudDemoPage.setConfigToEditor(checkboxVisibilityFormJson); + it('[C311424] Should be able to see Checkbox widget when visibility condition refers to a variable with specific value', async () => { + await formCloudDemoPage.setConfigToEditor(checkboxVisibilityFormJson); - widget.checkboxWidget().isCheckboxDisplayed(checkbox.checkboxVariableValue); + await widget.checkboxWidget().isCheckboxDisplayed(checkbox.checkboxVariableValue); visibleCheckbox = checkboxVisibilityFormJson; visibleCheckbox.formRepresentation.formDefinition.variables[0].value = value.notDisplayCheckbox; - formCloudDemoPage.setConfigToEditor(visibleCheckbox); + await formCloudDemoPage.setConfigToEditor(visibleCheckbox); - widget.checkboxWidget().isCheckboxHidden(checkbox.checkboxVariableValue); + await widget.checkboxWidget().isCheckboxHidden(checkbox.checkboxVariableValue); visibleCheckbox = checkboxVisibilityFormJson; visibleCheckbox.formRepresentation.formDefinition.variables[0].value = value.displayCheckbox; - formCloudDemoPage.setConfigToEditor(visibleCheckbox); + await formCloudDemoPage.setConfigToEditor(visibleCheckbox); }); - it('[C311426] Should be able to see Checkbox widget when visibility condition refers to form variable and another form variable', () => { - formCloudDemoPage.setConfigToEditor(checkboxVisibilityFormJson); + it('[C311426] Should be able to see Checkbox widget when visibility condition refers to form variable and another form variable', async () => { + await formCloudDemoPage.setConfigToEditor(checkboxVisibilityFormJson); - widget.checkboxWidget().isCheckboxDisplayed(checkbox.checkboxVariableVariable); + await widget.checkboxWidget().isCheckboxDisplayed(checkbox.checkboxVariableVariable); visibleCheckbox = checkboxVisibilityFormJson; visibleCheckbox.formRepresentation.formDefinition.variables[0].value = value.notDisplayCheckbox; - formCloudDemoPage.setConfigToEditor(visibleCheckbox); + await formCloudDemoPage.setConfigToEditor(visibleCheckbox); - widget.checkboxWidget().isCheckboxHidden(checkbox.checkboxVariableVariable); + await widget.checkboxWidget().isCheckboxHidden(checkbox.checkboxVariableVariable); visibleCheckbox = checkboxVisibilityFormJson; visibleCheckbox.formRepresentation.formDefinition.variables[1].value = value.notDisplayCheckbox; - formCloudDemoPage.setConfigToEditor(visibleCheckbox); + await formCloudDemoPage.setConfigToEditor(visibleCheckbox); - widget.checkboxWidget().isCheckboxDisplayed(checkbox.checkboxVariableVariable); + await widget.checkboxWidget().isCheckboxDisplayed(checkbox.checkboxVariableVariable); visibleCheckbox = checkboxVisibilityFormJson; visibleCheckbox.formRepresentation.formDefinition.variables[0].value = value.displayCheckbox; visibleCheckbox.formRepresentation.formDefinition.variables[1].value = value.displayCheckbox; - formCloudDemoPage.setConfigToEditor(visibleCheckbox); + await formCloudDemoPage.setConfigToEditor(visibleCheckbox); }); }); diff --git a/e2e/process-services-cloud/people-group-cloud-component.e2e.ts b/e2e/process-services-cloud/people-group-cloud-component.e2e.ts index bf69634306..6c0396876a 100644 --- a/e2e/process-services-cloud/people-group-cloud-component.e2e.ts +++ b/e2e/process-services-cloud/people-group-cloud-component.e2e.ts @@ -53,7 +53,7 @@ describe('People Groups Cloud Component', () => { let groups = []; let clientId; - beforeAll(async (done) => { + beforeAll(async () => { await apiService.login(browser.params.identityAdmin.email, browser.params.identityAdmin.password); @@ -92,211 +92,212 @@ describe('People Groups Cloud Component', () => { browser.params.config.oauth2.host, browser.params.config.identityHost); await loginSSOPage.loginSSOIdentityService(testUser.email, testUser.password); - done(); + }); - afterAll(async (done) => { + afterAll(async () => { await apiService.login(browser.params.identityAdmin.email, browser.params.identityAdmin.password); - users.forEach(async (user) => { + for (const user of users) { await identityService.deleteIdentityUser(user); - }); - - groups.forEach(async (group) => { + } + for (const group of groups) { await groupIdentityService.deleteIdentityGroup(group); - }); + } - done(); }); beforeEach(async () => { + await navigationBarPage.navigateToPeopleGroupCloudPage(); + await peopleGroupCloudComponentPage.checkGroupsCloudComponentTitleIsDisplayed(); + await peopleGroupCloudComponentPage.checkPeopleCloudComponentTitleIsDisplayed(); + }); + + afterEach(async () => { await browser.refresh(); - navigationBarPage.navigateToPeopleGroupCloudPage(); - peopleGroupCloudComponentPage.checkGroupsCloudComponentTitleIsDisplayed(); - peopleGroupCloudComponentPage.checkPeopleCloudComponentTitleIsDisplayed(); }); describe('[C297674] Should be able to add filtering to People Cloud Component', () => { - beforeEach(() => { - peopleGroupCloudComponentPage.clickPeopleCloudMultipleSelection(); - peopleGroupCloudComponentPage.checkPeopleCloudMultipleSelectionIsSelected(); - peopleGroupCloudComponentPage.clickPeopleCloudFilterRole(); - peopleGroupCloudComponentPage.checkPeopleCloudFilterRole(); + beforeEach(async () => { + await peopleGroupCloudComponentPage.clickPeopleCloudMultipleSelection(); + await peopleGroupCloudComponentPage.checkPeopleCloudMultipleSelectionIsSelected(); + await peopleGroupCloudComponentPage.clickPeopleCloudFilterRole(); + await peopleGroupCloudComponentPage.checkPeopleCloudFilterRole(); }); - it('No role filtering', () => { - peopleCloudComponent.searchAssignee(noRoleUser.lastName); - peopleCloudComponent.checkUserIsDisplayed(`${noRoleUser.firstName} ${noRoleUser.lastName}`); - peopleCloudComponent.searchAssignee(apsUser.lastName); - peopleCloudComponent.checkUserIsDisplayed(`${apsUser.firstName} ${apsUser.lastName}`); - peopleCloudComponent.searchAssignee(activitiUser.lastName); - peopleCloudComponent.checkUserIsDisplayed(`${activitiUser.firstName} ${activitiUser.lastName}`); + it('No role filtering', async () => { + await peopleCloudComponent.searchAssignee(noRoleUser.lastName); + await peopleCloudComponent.checkUserIsDisplayed(`${noRoleUser.firstName} ${noRoleUser.lastName}`); + await peopleCloudComponent.searchAssignee(apsUser.lastName); + await peopleCloudComponent.checkUserIsDisplayed(`${apsUser.firstName} ${apsUser.lastName}`); + await peopleCloudComponent.searchAssignee(activitiUser.lastName); + await peopleCloudComponent.checkUserIsDisplayed(`${activitiUser.firstName} ${activitiUser.lastName}`); }); - it('One role filtering', () => { - peopleGroupCloudComponentPage.enterPeopleRoles(`["${identityService.ROLES.APS_USER}"]`); - peopleCloudComponent.searchAssignee(apsUser.lastName); - peopleCloudComponent.checkUserIsDisplayed(`${apsUser.firstName} ${apsUser.lastName}`); - peopleCloudComponent.searchAssignee(activitiUser.lastName); - peopleCloudComponent.checkUserIsNotDisplayed(`${activitiUser.firstName} ${activitiUser.lastName}`); - peopleCloudComponent.searchAssignee(noRoleUser.lastName); - peopleCloudComponent.checkUserIsNotDisplayed(`${noRoleUser.firstName} ${noRoleUser.lastName}`); + it('One role filtering', async () => { + await peopleGroupCloudComponentPage.enterPeopleRoles(`["${identityService.ROLES.APS_USER}"]`); + await peopleCloudComponent.searchAssignee(apsUser.lastName); + await peopleCloudComponent.checkUserIsDisplayed(`${apsUser.firstName} ${apsUser.lastName}`); + await peopleCloudComponent.searchAssignee(activitiUser.lastName); + await peopleCloudComponent.checkUserIsNotDisplayed(`${activitiUser.firstName} ${activitiUser.lastName}`); + await peopleCloudComponent.searchAssignee(noRoleUser.lastName); + await peopleCloudComponent.checkUserIsNotDisplayed(`${noRoleUser.firstName} ${noRoleUser.lastName}`); }); - it('Multiple roles filtering', () => { - peopleGroupCloudComponentPage.enterPeopleRoles(`["${identityService.ROLES.APS_USER}", "${identityService.ROLES.ACTIVITI_USER}"]`); - peopleCloudComponent.searchAssignee(apsUser.lastName); - peopleCloudComponent.checkUserIsDisplayed(`${apsUser.firstName} ${apsUser.lastName}`); - peopleCloudComponent.searchAssignee(activitiUser.lastName); - peopleCloudComponent.checkUserIsDisplayed(`${activitiUser.firstName} ${activitiUser.lastName}`); - peopleCloudComponent.searchAssignee(noRoleUser.lastName); - peopleCloudComponent.checkUserIsNotDisplayed(`${noRoleUser.firstName} ${noRoleUser.lastName}`); + it('Multiple roles filtering', async () => { + await peopleGroupCloudComponentPage.enterPeopleRoles(`["${identityService.ROLES.APS_USER}", "${identityService.ROLES.ACTIVITI_USER}"]`); + await peopleCloudComponent.searchAssignee(apsUser.lastName); + await peopleCloudComponent.checkUserIsDisplayed(`${apsUser.firstName} ${apsUser.lastName}`); + await peopleCloudComponent.searchAssignee(activitiUser.lastName); + await peopleCloudComponent.checkUserIsDisplayed(`${activitiUser.firstName} ${activitiUser.lastName}`); + await peopleCloudComponent.searchAssignee(noRoleUser.lastName); + await peopleCloudComponent.checkUserIsNotDisplayed(`${noRoleUser.firstName} ${noRoleUser.lastName}`); }); }); describe('[C309674] Should be able to add filtering to Group Cloud Component', () => { - beforeEach(() => { - peopleGroupCloudComponentPage.clickGroupCloudMultipleSelection(); - peopleGroupCloudComponentPage.clickGroupCloudFilterRole(); + beforeEach(async () => { + await peopleGroupCloudComponentPage.clickGroupCloudMultipleSelection(); + await peopleGroupCloudComponentPage.clickGroupCloudFilterRole(); }); - it('No role filtering', () => { - peopleGroupCloudComponentPage.clearField(peopleGroupCloudComponentPage.groupRoleInput); - groupCloudComponentPage.searchGroups(groupNoRole.name); - groupCloudComponentPage.checkGroupIsDisplayed(groupNoRole.name); - groupCloudComponentPage.searchGroups(groupActiviti.name); - groupCloudComponentPage.checkGroupIsDisplayed(groupActiviti.name); - groupCloudComponentPage.searchGroups(groupAps.name); - groupCloudComponentPage.checkGroupIsDisplayed(groupAps.name); + it('No role filtering', async () => { + await peopleGroupCloudComponentPage.clearField(peopleGroupCloudComponentPage.groupRoleInput); + await groupCloudComponentPage.searchGroups(groupNoRole.name); + await groupCloudComponentPage.checkGroupIsDisplayed(groupNoRole.name); + await groupCloudComponentPage.searchGroups(groupActiviti.name); + await groupCloudComponentPage.checkGroupIsDisplayed(groupActiviti.name); + await groupCloudComponentPage.searchGroups(groupAps.name); + await groupCloudComponentPage.checkGroupIsDisplayed(groupAps.name); }); - it('One role filtering', () => { - peopleGroupCloudComponentPage.enterGroupRoles(`["${identityService.ROLES.APS_ADMIN}"]`); - groupCloudComponentPage.searchGroups(groupAps.name); - groupCloudComponentPage.checkGroupIsDisplayed(groupAps.name); - groupCloudComponentPage.searchGroups(groupActiviti.name); - groupCloudComponentPage.checkGroupIsNotDisplayed(groupActiviti.name); - groupCloudComponentPage.searchGroups(groupNoRole.name); - groupCloudComponentPage.checkGroupIsNotDisplayed(groupNoRole.name); + it('One role filtering', async () => { + await peopleGroupCloudComponentPage.enterGroupRoles(`["${identityService.ROLES.APS_ADMIN}"]`); + await groupCloudComponentPage.searchGroups(groupAps.name); + await groupCloudComponentPage.checkGroupIsDisplayed(groupAps.name); + await groupCloudComponentPage.searchGroups(groupActiviti.name); + await groupCloudComponentPage.checkGroupIsNotDisplayed(groupActiviti.name); + await groupCloudComponentPage.searchGroups(groupNoRole.name); + await groupCloudComponentPage.checkGroupIsNotDisplayed(groupNoRole.name); }); - it('[C309996] Should be able to filter groups based on composite roles Activit_Admin', () => { - peopleGroupCloudComponentPage.enterGroupRoles(`["${identityService.ROLES.ACTIVITI_ADMIN}"]`); - groupCloudComponentPage.searchGroups(groupActiviti.name); - groupCloudComponentPage.checkGroupIsDisplayed(groupActiviti.name); - groupCloudComponentPage.searchGroups(groupNoRole.name); - groupCloudComponentPage.checkGroupIsNotDisplayed(groupNoRole.name); - groupCloudComponentPage.searchGroups(groupAps.name); - groupCloudComponentPage.checkGroupIsDisplayed(groupAps.name); + it('[C309996] Should be able to filter groups based on composite roles Activit_Admin', async () => { + await peopleGroupCloudComponentPage.enterGroupRoles(`["${identityService.ROLES.ACTIVITI_ADMIN}"]`); + await groupCloudComponentPage.searchGroups(groupActiviti.name); + await groupCloudComponentPage.checkGroupIsDisplayed(groupActiviti.name); + await groupCloudComponentPage.searchGroups(groupNoRole.name); + await groupCloudComponentPage.checkGroupIsNotDisplayed(groupNoRole.name); + await groupCloudComponentPage.searchGroups(groupAps.name); + await groupCloudComponentPage.checkGroupIsDisplayed(groupAps.name); }); - it('[C309996] Should be able to filter groups based on composite roles Aps_User', () => { - peopleGroupCloudComponentPage.enterGroupRoles(`["${identityService.ROLES.APS_USER}"]`); - groupCloudComponentPage.searchGroups(groupActiviti.name); - groupCloudComponentPage.checkGroupIsNotDisplayed(groupActiviti.name); - groupCloudComponentPage.searchGroups(groupNoRole.name); - groupCloudComponentPage.checkGroupIsNotDisplayed(groupNoRole.name); - groupCloudComponentPage.searchGroups(groupAps.name); - groupCloudComponentPage.checkGroupIsDisplayed(groupAps.name); + it('[C309996] Should be able to filter groups based on composite roles Aps_User', async () => { + await peopleGroupCloudComponentPage.enterGroupRoles(`["${identityService.ROLES.APS_USER}"]`); + await groupCloudComponentPage.searchGroups(groupActiviti.name); + await groupCloudComponentPage.checkGroupIsNotDisplayed(groupActiviti.name); + await groupCloudComponentPage.searchGroups(groupNoRole.name); + await groupCloudComponentPage.checkGroupIsNotDisplayed(groupNoRole.name); + await groupCloudComponentPage.searchGroups(groupAps.name); + await groupCloudComponentPage.checkGroupIsDisplayed(groupAps.name); }); - it('[C309996] Should be able to filter groups based on composite roles Activiti_User', () => { - peopleGroupCloudComponentPage.enterGroupRoles(`["${identityService.ROLES.ACTIVITI_USER}"]`); - groupCloudComponentPage.searchGroups(groupActiviti.name); - groupCloudComponentPage.checkGroupIsNotDisplayed(groupActiviti.name); - groupCloudComponentPage.searchGroups(groupNoRole.name); - groupCloudComponentPage.checkGroupIsNotDisplayed(groupNoRole.name); - groupCloudComponentPage.searchGroups(groupAps.name); - groupCloudComponentPage.checkGroupIsDisplayed(groupAps.name); + it('[C309996] Should be able to filter groups based on composite roles Activiti_User', async () => { + await peopleGroupCloudComponentPage.enterGroupRoles(`["${identityService.ROLES.ACTIVITI_USER}"]`); + await groupCloudComponentPage.searchGroups(groupActiviti.name); + await groupCloudComponentPage.checkGroupIsNotDisplayed(groupActiviti.name); + await groupCloudComponentPage.searchGroups(groupNoRole.name); + await groupCloudComponentPage.checkGroupIsNotDisplayed(groupNoRole.name); + await groupCloudComponentPage.searchGroups(groupAps.name); + await groupCloudComponentPage.checkGroupIsDisplayed(groupAps.name); }); - it('Multiple roles filtering', () => { - peopleGroupCloudComponentPage.enterGroupRoles(`["${identityService.ROLES.APS_ADMIN}", "${identityService.ROLES.ACTIVITI_ADMIN}"]`); - groupCloudComponentPage.searchGroups(groupActiviti.name); - groupCloudComponentPage.checkGroupIsDisplayed(groupActiviti.name); - groupCloudComponentPage.searchGroups(groupAps.name); - groupCloudComponentPage.checkGroupIsDisplayed(groupAps.name); - groupCloudComponentPage.searchGroups(groupNoRole.name); - groupCloudComponentPage.checkGroupIsNotDisplayed(groupNoRole.name); + it('Multiple roles filtering', async () => { + await peopleGroupCloudComponentPage.enterGroupRoles(`["${identityService.ROLES.APS_ADMIN}", "${identityService.ROLES.ACTIVITI_ADMIN}"]`); + await groupCloudComponentPage.searchGroups(groupActiviti.name); + await groupCloudComponentPage.checkGroupIsDisplayed(groupActiviti.name); + await groupCloudComponentPage.searchGroups(groupAps.name); + await groupCloudComponentPage.checkGroupIsDisplayed(groupAps.name); + await groupCloudComponentPage.searchGroups(groupNoRole.name); + await groupCloudComponentPage.checkGroupIsNotDisplayed(groupNoRole.name); }); }); - it('[C305033] Should fetch the preselect users based on the Validate flag set to True in Single mode selection', () => { + it('[C305033] Should fetch the preselect users based on the Validate flag set to True in Single mode selection', async () => { - peopleGroupCloudComponentPage.clickPeopleCloudSingleSelection(); - peopleGroupCloudComponentPage.checkPeopleCloudSingleSelectionIsSelected(); - peopleGroupCloudComponentPage.clickPreselectValidation(); - expect(peopleGroupCloudComponentPage.getPreselectValidationStatus()).toBe('true'); + await peopleGroupCloudComponentPage.clickPeopleCloudSingleSelection(); + await peopleGroupCloudComponentPage.checkPeopleCloudSingleSelectionIsSelected(); + await peopleGroupCloudComponentPage.clickPreselectValidation(); + await expect(await peopleGroupCloudComponentPage.getPreselectValidationStatus()).toBe('true'); - peopleGroupCloudComponentPage.enterPeoplePreselect('[{"id":"12345","username":"someUsername","email":"someEmail"}]'); - expect(peopleCloudComponent.getAssigneeFieldContent()).toBe(''); + await peopleGroupCloudComponentPage.enterPeoplePreselect('[{"id":"12345","username":"someUsername","email":"someEmail"}]'); + await expect(await peopleCloudComponent.getAssigneeFieldContent()).toBe(''); - expect(peopleGroupCloudComponentPage.getPreselectValidationStatus()).toBe('true'); - peopleGroupCloudComponentPage.enterPeoplePreselect(`[{"id":"${noRoleUser.idIdentityService}"}]`); - expect(peopleCloudComponent.getAssigneeFieldContent()).toBe(`${noRoleUser.firstName} ${noRoleUser.lastName}`); + await expect(await peopleGroupCloudComponentPage.getPreselectValidationStatus()).toBe('true'); + await peopleGroupCloudComponentPage.enterPeoplePreselect(`[{"id":"${noRoleUser.idIdentityService}"}]`); + await expect(await peopleCloudComponent.getAssigneeFieldContent()).toBe(`${noRoleUser.firstName} ${noRoleUser.lastName}`); - peopleGroupCloudComponentPage.enterPeoplePreselect(`[{"email":"${apsUser.email}"}]`); - expect(peopleCloudComponent.getAssigneeFieldContent()).toBe(`${apsUser.firstName} ${apsUser.lastName}`); + await peopleGroupCloudComponentPage.enterPeoplePreselect(`[{"email":"${apsUser.email}"}]`); + await expect(await peopleCloudComponent.getAssigneeFieldContent()).toBe(`${apsUser.firstName} ${apsUser.lastName}`); - peopleGroupCloudComponentPage.enterPeoplePreselect(`[{"username":"${activitiUser.username}"}]`); - expect(peopleCloudComponent.getAssigneeFieldContent()).toBe(`${activitiUser.firstName} ${activitiUser.lastName}`); + await peopleGroupCloudComponentPage.enterPeoplePreselect(`[{"username":"${activitiUser.username}"}]`); + await expect(await peopleCloudComponent.getAssigneeFieldContent()).toBe(`${activitiUser.firstName} ${activitiUser.lastName}`); }); - it('[C309676] Should fetch the preselect users based on the Validate flag set to True in Multiple mode selection', () => { + it('[C309676] Should fetch the preselect users based on the Validate flag set to True in Multiple mode selection', async () => { - peopleGroupCloudComponentPage.clickPeopleCloudMultipleSelection(); - peopleGroupCloudComponentPage.checkPeopleCloudMultipleSelectionIsSelected(); - peopleGroupCloudComponentPage.clickPreselectValidation(); - expect(peopleGroupCloudComponentPage.getPreselectValidationStatus()).toBe('true'); + await peopleGroupCloudComponentPage.clickPeopleCloudMultipleSelection(); + await peopleGroupCloudComponentPage.checkPeopleCloudMultipleSelectionIsSelected(); + await peopleGroupCloudComponentPage.clickPreselectValidation(); + await expect(await peopleGroupCloudComponentPage.getPreselectValidationStatus()).toBe('true'); - peopleGroupCloudComponentPage.enterPeoplePreselect(`[{"id":"${apsUser.idIdentityService}"},{"id":"${activitiUser.idIdentityService}"},` + + await peopleGroupCloudComponentPage.enterPeoplePreselect(`[{"id":"${apsUser.idIdentityService}"},{"id":"${activitiUser.idIdentityService}"},` + `{"id":"${noRoleUser.idIdentityService}"}]`); - peopleCloudComponent.checkSelectedPeople(`${apsUser.firstName} ${apsUser.lastName}`); - peopleCloudComponent.checkSelectedPeople(`${activitiUser.firstName} ${activitiUser.lastName}`); - peopleCloudComponent.checkSelectedPeople(`${noRoleUser.firstName} ${noRoleUser.lastName}`); + await peopleCloudComponent.checkSelectedPeople(`${apsUser.firstName} ${apsUser.lastName}`); + await peopleCloudComponent.checkSelectedPeople(`${activitiUser.firstName} ${activitiUser.lastName}`); + await peopleCloudComponent.checkSelectedPeople(`${noRoleUser.firstName} ${noRoleUser.lastName}`); - peopleGroupCloudComponentPage.enterPeoplePreselect(`[{"email":"${apsUser.email}"},{"email":"${activitiUser.email}"},{"email":"${noRoleUser.email}"}]`); - peopleCloudComponent.checkSelectedPeople(`${apsUser.firstName} ${apsUser.lastName}`); - peopleCloudComponent.checkSelectedPeople(`${activitiUser.firstName} ${activitiUser.lastName}`); - peopleCloudComponent.checkSelectedPeople(`${noRoleUser.firstName} ${noRoleUser.lastName}`); + await peopleGroupCloudComponentPage.enterPeoplePreselect(`[{"email":"${apsUser.email}"},{"email":"${activitiUser.email}"},{"email":"${noRoleUser.email}"}]`); + await peopleCloudComponent.checkSelectedPeople(`${apsUser.firstName} ${apsUser.lastName}`); + await peopleCloudComponent.checkSelectedPeople(`${activitiUser.firstName} ${activitiUser.lastName}`); + await peopleCloudComponent.checkSelectedPeople(`${noRoleUser.firstName} ${noRoleUser.lastName}`); - peopleGroupCloudComponentPage.enterPeoplePreselect(`[{"username":"${apsUser.username}"},{"username":"${activitiUser.username}"},` + + await peopleGroupCloudComponentPage.enterPeoplePreselect(`[{"username":"${apsUser.username}"},{"username":"${activitiUser.username}"},` + `{"username":"${noRoleUser.username}"}]`); - peopleCloudComponent.checkSelectedPeople(`${apsUser.firstName} ${apsUser.lastName}`); - peopleCloudComponent.checkSelectedPeople(`${activitiUser.firstName} ${activitiUser.lastName}`); - peopleCloudComponent.checkSelectedPeople(`${noRoleUser.firstName} ${noRoleUser.lastName}`); + await peopleCloudComponent.checkSelectedPeople(`${apsUser.firstName} ${apsUser.lastName}`); + await peopleCloudComponent.checkSelectedPeople(`${activitiUser.firstName} ${activitiUser.lastName}`); + await peopleCloudComponent.checkSelectedPeople(`${noRoleUser.firstName} ${noRoleUser.lastName}`); - peopleCloudComponent.searchAssigneeToExisting(noRoleUser.lastName); - peopleCloudComponent.checkUserIsNotDisplayed(`${noRoleUser.firstName} ${noRoleUser.lastName}`); + await peopleCloudComponent.searchAssigneeToExisting(noRoleUser.lastName); + await peopleCloudComponent.checkUserIsNotDisplayed(`${noRoleUser.firstName} ${noRoleUser.lastName}`); }); - it('[C309677] Should populate the Users without any validation when the Preselect flag is set to false', () => { - peopleGroupCloudComponentPage.clickPeopleCloudMultipleSelection(); - peopleGroupCloudComponentPage.checkPeopleCloudMultipleSelectionIsSelected(); - expect(peopleGroupCloudComponentPage.getPreselectValidationStatus()).toBe('false'); + it('[C309677] Should populate the Users without any validation when the Preselect flag is set to false', async () => { + await peopleGroupCloudComponentPage.clickPeopleCloudMultipleSelection(); + await peopleGroupCloudComponentPage.checkPeopleCloudMultipleSelectionIsSelected(); + await expect(await peopleGroupCloudComponentPage.getPreselectValidationStatus()).toBe('false'); - peopleGroupCloudComponentPage.enterPeoplePreselect( + await peopleGroupCloudComponentPage.enterPeoplePreselect( `[{"id":"TestId1","firstName":"TestFirstName1","lastName":"TestLastName1"},` + `{"id":"TestId2","firstName":"TestFirstName2","lastName":"TestLastName2"},` + `{"id":"TestId3","firstName":"TestFirstName3","lastName":"TestLastName3"}]`); - peopleCloudComponent.checkSelectedPeople('TestFirstName1 TestLastName1'); - peopleCloudComponent.checkSelectedPeople('TestFirstName2 TestLastName2'); - peopleCloudComponent.checkSelectedPeople('TestFirstName3 TestLastName3'); + await peopleCloudComponent.checkSelectedPeople('TestFirstName1 TestLastName1'); + await peopleCloudComponent.checkSelectedPeople('TestFirstName2 TestLastName2'); + await peopleCloudComponent.checkSelectedPeople('TestFirstName3 TestLastName3'); }); - it('[C309678] Should not fetch the preselect users when mandatory parameters Id, Email and username are missing', () => { - peopleGroupCloudComponentPage.clickPeopleCloudMultipleSelection(); - peopleGroupCloudComponentPage.checkPeopleCloudMultipleSelectionIsSelected(); - peopleGroupCloudComponentPage.clickPreselectValidation(); - expect(peopleGroupCloudComponentPage.getPreselectValidationStatus()).toBe('true'); + it('[C309678] Should not fetch the preselect users when mandatory parameters Id, Email and username are missing', async () => { + await peopleGroupCloudComponentPage.clickPeopleCloudMultipleSelection(); + await peopleGroupCloudComponentPage.checkPeopleCloudMultipleSelectionIsSelected(); + await peopleGroupCloudComponentPage.clickPreselectValidation(); + await expect(await peopleGroupCloudComponentPage.getPreselectValidationStatus()).toBe('true'); - peopleGroupCloudComponentPage.enterPeoplePreselect(`[{"firstName":"${apsUser.firstName}","lastName":"${apsUser.lastName},"` + + await peopleGroupCloudComponentPage.enterPeoplePreselect(`[{"firstName":"${apsUser.firstName}","lastName":"${apsUser.lastName},"` + `{"firstName":"${activitiUser.firstName}","lastName":"${activitiUser.lastName}",{"firstName":"${noRoleUser.firstName}","lastName":"${noRoleUser.lastName}"]`); - browser.sleep(200); - expect(peopleCloudComponent.getAssigneeFieldContent()).toBe(''); + await browser.sleep(200); + await expect(await peopleCloudComponent.getAssigneeFieldContent()).toBe(''); }); }); diff --git a/e2e/process-services-cloud/people-group-cloud-filter-component.e2e.ts b/e2e/process-services-cloud/people-group-cloud-filter-component.e2e.ts index ffeacbb601..8d61e293d6 100644 --- a/e2e/process-services-cloud/people-group-cloud-filter-component.e2e.ts +++ b/e2e/process-services-cloud/people-group-cloud-filter-component.e2e.ts @@ -52,7 +52,7 @@ describe('People Groups Cloud Component', () => { let groups = []; let clientId; - beforeAll(async (done) => { + beforeAll(async () => { await apiService.login(browser.params.identityAdmin.email, browser.params.identityAdmin.password); identityService = new IdentityService(apiService); @@ -87,7 +87,7 @@ describe('People Groups Cloud Component', () => { browser.params.config.oauth2.host, browser.params.config.identityHost); await loginSSOPage.loginSSOIdentityService(testUser.email, testUser.password); - done(); + }); afterAll(async () => { @@ -105,71 +105,71 @@ describe('People Groups Cloud Component', () => { }); - beforeEach(() => { - navigationBarPage.navigateToPeopleGroupCloudPage(); - peopleGroupCloudComponentPage.checkGroupsCloudComponentTitleIsDisplayed(); - peopleGroupCloudComponentPage.checkPeopleCloudComponentTitleIsDisplayed(); + beforeEach(async () => { + await navigationBarPage.navigateToPeopleGroupCloudPage(); + await peopleGroupCloudComponentPage.checkGroupsCloudComponentTitleIsDisplayed(); + await peopleGroupCloudComponentPage.checkPeopleCloudComponentTitleIsDisplayed(); }); - afterEach(() => { - browser.refresh(); + afterEach(async () => { + await browser.refresh(); }); - it('[C305041] Should filter the People Single Selection with the Application name filter', () => { - peopleGroupCloudComponentPage.checkPeopleCloudSingleSelectionIsSelected(); - peopleGroupCloudComponentPage.clickPeopleFilerByApp(); - peopleGroupCloudComponentPage.enterPeopleAppName(resources.ACTIVITI7_APPS.SIMPLE_APP.name); - peopleCloudComponent.searchAssignee(`${activitiUser.firstName}`); - peopleCloudComponent.checkUserIsDisplayed(`${activitiUser.firstName}` + ' ' + `${activitiUser.lastName}`); - peopleCloudComponent.selectAssigneeFromList(`${activitiUser.firstName}` + ' ' + `${activitiUser.lastName}`); - browser.sleep(100); - expect(peopleCloudComponent.getAssigneeFieldContent()).toBe(`${activitiUser.firstName}` + ' ' + `${activitiUser.lastName}`); + it('[C305041] Should filter the People Single Selection with the Application name filter', async () => { + await peopleGroupCloudComponentPage.checkPeopleCloudSingleSelectionIsSelected(); + await peopleGroupCloudComponentPage.clickPeopleFilerByApp(); + await peopleGroupCloudComponentPage.enterPeopleAppName(resources.ACTIVITI7_APPS.SIMPLE_APP.name); + await peopleCloudComponent.searchAssignee(`${activitiUser.firstName}`); + await peopleCloudComponent.checkUserIsDisplayed(`${activitiUser.firstName}` + ' ' + `${activitiUser.lastName}`); + await peopleCloudComponent.selectAssigneeFromList(`${activitiUser.firstName}` + ' ' + `${activitiUser.lastName}`); + await browser.sleep(100); + await expect(await peopleCloudComponent.getAssigneeFieldContent()).toBe(`${activitiUser.firstName}` + ' ' + `${activitiUser.lastName}`); }); - it('[C305041] Should filter the People Multiple Selection with the Application name filter', () => { - peopleGroupCloudComponentPage.clickPeopleCloudMultipleSelection(); - peopleGroupCloudComponentPage.clickPeopleFilerByApp(); - peopleGroupCloudComponentPage.enterPeopleAppName(resources.ACTIVITI7_APPS.SIMPLE_APP.name); - peopleCloudComponent.searchAssignee(`${apsUser.firstName}`); - peopleCloudComponent.checkUserIsDisplayed(`${apsUser.firstName}` + ' ' + `${apsUser.lastName}`); - peopleCloudComponent.selectAssigneeFromList(`${apsUser.firstName}` + ' ' + `${apsUser.lastName}`); - peopleCloudComponent.checkSelectedPeople(`${apsUser.firstName}` + ' ' + `${apsUser.lastName}`); + it('[C305041] Should filter the People Multiple Selection with the Application name filter', async () => { + await peopleGroupCloudComponentPage.clickPeopleCloudMultipleSelection(); + await peopleGroupCloudComponentPage.clickPeopleFilerByApp(); + await peopleGroupCloudComponentPage.enterPeopleAppName(resources.ACTIVITI7_APPS.SIMPLE_APP.name); + await peopleCloudComponent.searchAssignee(`${apsUser.firstName}`); + await peopleCloudComponent.checkUserIsDisplayed(`${apsUser.firstName}` + ' ' + `${apsUser.lastName}`); + await peopleCloudComponent.selectAssigneeFromList(`${apsUser.firstName}` + ' ' + `${apsUser.lastName}`); + await peopleCloudComponent.checkSelectedPeople(`${apsUser.firstName}` + ' ' + `${apsUser.lastName}`); - peopleCloudComponent.searchAssigneeToExisting(`${activitiUser.firstName}`); - peopleCloudComponent.checkUserIsDisplayed(`${activitiUser.firstName}` + ' ' + `${activitiUser.lastName}`); - peopleCloudComponent.selectAssigneeFromList(`${activitiUser.firstName}` + ' ' + `${activitiUser.lastName}`); - peopleCloudComponent.checkSelectedPeople(`${activitiUser.firstName}` + ' ' + `${activitiUser.lastName}`); + await peopleCloudComponent.searchAssigneeToExisting(`${activitiUser.firstName}`); + await peopleCloudComponent.checkUserIsDisplayed(`${activitiUser.firstName}` + ' ' + `${activitiUser.lastName}`); + await peopleCloudComponent.selectAssigneeFromList(`${activitiUser.firstName}` + ' ' + `${activitiUser.lastName}`); + await peopleCloudComponent.checkSelectedPeople(`${activitiUser.firstName}` + ' ' + `${activitiUser.lastName}`); - peopleCloudComponent.searchAssigneeToExisting(`${noRoleUser.firstName}`); - peopleCloudComponent.checkUserIsNotDisplayed(`${noRoleUser.firstName}` + ' ' + `${noRoleUser.lastName}`); + await peopleCloudComponent.searchAssigneeToExisting(`${noRoleUser.firstName}`); + await peopleCloudComponent.checkUserIsNotDisplayed(`${noRoleUser.firstName}` + ' ' + `${noRoleUser.lastName}`); }); - it('[C305041] Should filter the Groups Single Selection with the Application name filter', () => { - peopleGroupCloudComponentPage.clickGroupCloudSingleSelection(); - peopleGroupCloudComponentPage.clickGroupFilerByApp(); - peopleGroupCloudComponentPage.enterGroupAppName(resources.ACTIVITI7_APPS.SIMPLE_APP.name); - groupCloudComponentPage.searchGroups(`${groupActiviti.name}`); - groupCloudComponentPage.checkGroupIsDisplayed(`${groupActiviti.name}`); - groupCloudComponentPage.selectGroupFromList(`${groupActiviti.name}`); - expect(groupCloudComponentPage.getGroupsFieldContent()).toBe(`${groupActiviti.name}`); + it('[C305041] Should filter the Groups Single Selection with the Application name filter', async () => { + await peopleGroupCloudComponentPage.clickGroupCloudSingleSelection(); + await peopleGroupCloudComponentPage.clickGroupFilerByApp(); + await peopleGroupCloudComponentPage.enterGroupAppName(resources.ACTIVITI7_APPS.SIMPLE_APP.name); + await groupCloudComponentPage.searchGroups(`${groupActiviti.name}`); + await groupCloudComponentPage.checkGroupIsDisplayed(`${groupActiviti.name}`); + await groupCloudComponentPage.selectGroupFromList(`${groupActiviti.name}`); + await expect(await groupCloudComponentPage.getGroupsFieldContent()).toBe(`${groupActiviti.name}`); }); - it('[C305041] Should filter the Groups Multiple Selection with the Application name filter', () => { - peopleGroupCloudComponentPage.clickGroupCloudMultipleSelection(); - peopleGroupCloudComponentPage.clickGroupFilerByApp(); - peopleGroupCloudComponentPage.enterGroupAppName(resources.ACTIVITI7_APPS.SIMPLE_APP.name); - groupCloudComponentPage.searchGroups(`${groupAps.name}`); - groupCloudComponentPage.checkGroupIsDisplayed(`${groupAps.name}`); - groupCloudComponentPage.selectGroupFromList(`${groupAps.name}`); - groupCloudComponentPage.checkSelectedGroup(`${groupAps.name}`); + it('[C305041] Should filter the Groups Multiple Selection with the Application name filter', async () => { + await peopleGroupCloudComponentPage.clickGroupCloudMultipleSelection(); + await peopleGroupCloudComponentPage.clickGroupFilerByApp(); + await peopleGroupCloudComponentPage.enterGroupAppName(resources.ACTIVITI7_APPS.SIMPLE_APP.name); + await groupCloudComponentPage.searchGroups(`${groupAps.name}`); + await groupCloudComponentPage.checkGroupIsDisplayed(`${groupAps.name}`); + await groupCloudComponentPage.selectGroupFromList(`${groupAps.name}`); + await groupCloudComponentPage.checkSelectedGroup(`${groupAps.name}`); - groupCloudComponentPage.searchGroupsToExisting(`${groupActiviti.name}`); - groupCloudComponentPage.checkGroupIsDisplayed(`${groupActiviti.name}`); - groupCloudComponentPage.selectGroupFromList(`${groupActiviti.name}`); - groupCloudComponentPage.checkSelectedGroup(`${groupActiviti.name}`); + await groupCloudComponentPage.searchGroupsToExisting(`${groupActiviti.name}`); + await groupCloudComponentPage.checkGroupIsDisplayed(`${groupActiviti.name}`); + await groupCloudComponentPage.selectGroupFromList(`${groupActiviti.name}`); + await groupCloudComponentPage.checkSelectedGroup(`${groupActiviti.name}`); - groupCloudComponentPage.searchGroupsToExisting(`${groupNoRole.name}`); - groupCloudComponentPage.checkGroupIsNotDisplayed(`${groupNoRole.name}`); + await groupCloudComponentPage.searchGroupsToExisting(`${groupNoRole.name}`); + await groupCloudComponentPage.checkGroupIsNotDisplayed(`${groupNoRole.name}`); }); }); diff --git a/e2e/process-services-cloud/process-custom-filters.e2e.ts b/e2e/process-services-cloud/process-custom-filters.e2e.ts index 04452998af..9ef9d16628 100644 --- a/e2e/process-services-cloud/process-custom-filters.e2e.ts +++ b/e2e/process-services-cloud/process-custom-filters.e2e.ts @@ -57,7 +57,7 @@ describe('Process list cloud', () => { anotherProcessInstance; const candidateBaseApp = resources.ACTIVITI7_APPS.CANDIDATE_BASE_APP.name; - beforeAll(async (done) => { + beforeAll(async () => { await apiService.login(browser.params.identityAdmin.email, browser.params.identityAdmin.password); identityService = new IdentityService(apiService); @@ -99,7 +99,7 @@ describe('Process list cloud', () => { }); queryService = new QueryService(apiService); - await browser.driver.sleep(4000); // eventual consistency query + await browser.sleep(4000); // eventual consistency query const task = await queryService.getProcessInstanceTasks(completedProcess.entry.id, candidateBaseApp); tasksService = new TasksService(apiService); const claimedTask = await tasksService.claimTask(task.list.entries[0].entry.id, candidateBaseApp); @@ -112,183 +112,227 @@ describe('Process list cloud', () => { await loginSSOPage.loginSSOIdentityService(testUser.email, testUser.password); await LocalStorageUtil.setConfigField('adf-edit-process-filter', JSON.stringify(editProcessFilterConfigFile)); await LocalStorageUtil.setConfigField('adf-cloud-process-list', JSON.stringify(processListCloudConfigFile)); - done(); + }); - afterAll(async (done) => { + afterAll(async () => { + await processInstancesService.deleteProcessInstance(anotherProcessInstance.entry.id, candidateBaseApp); + await apiService.login(browser.params.identityAdmin.email, browser.params.identityAdmin.password); await identityService.deleteIdentityUser(testUser.idIdentityService); - await processInstancesService.deleteProcessInstance(anotherProcessInstance.id, candidateBaseApp); - done(); }); - beforeEach(() => { - navigationBarPage.navigateToProcessServicesCloudPage(); - appListCloudComponent.checkApsContainer(); - appListCloudComponent.goToApp(candidateBaseApp); - tasksCloudDemoPage.taskListCloudComponent().checkTaskListIsLoaded(); - processCloudDemoPage.clickOnProcessFilters(); + beforeEach(async () => { + await navigationBarPage.navigateToProcessServicesCloudPage(); + await appListCloudComponent.checkApsContainer(); + await appListCloudComponent.goToApp(candidateBaseApp); + await tasksCloudDemoPage.taskListCloudComponent().checkTaskListIsLoaded(); + await processCloudDemoPage.clickOnProcessFilters(); }); it('[C290069] Should display processes ordered by name when Name is selected from sort dropdown', async () => { - processCloudDemoPage.editProcessFilterCloudComponent().clickCustomiseFilterHeader().setStatusFilterDropDown('RUNNING') - .setSortFilterDropDown('Name').setOrderFilterDropDown('ASC'); + const editProcessFilterCloudComponent = processCloudDemoPage.editProcessFilterCloudComponent(); + await editProcessFilterCloudComponent.clickCustomiseFilterHeader(); + await editProcessFilterCloudComponent.setStatusFilterDropDown('RUNNING'); + await editProcessFilterCloudComponent.setSortFilterDropDown('Name'); + await editProcessFilterCloudComponent.setOrderFilterDropDown('ASC'); - expect(processCloudDemoPage.processListCloudComponent().getDataTable().checkListIsSorted('ASC', 'Name')).toBe(true); + await expect(await processCloudDemoPage.processListCloudComponent().getDataTable().checkListIsSorted('ASC', 'Name')).toBe(true); - processCloudDemoPage.editProcessFilterCloudComponent().setOrderFilterDropDown('DESC'); + await processCloudDemoPage.editProcessFilterCloudComponent().setOrderFilterDropDown('DESC'); - expect(processCloudDemoPage.processListCloudComponent().getDataTable().checkListIsSorted('DESC', 'Name')).toBe(true); + await expect(await processCloudDemoPage.processListCloudComponent().getDataTable().checkListIsSorted('DESC', 'Name')).toBe(true); }); it('[C291783] Should display processes ordered by id when Id is selected from sort dropdown', async () => { - processCloudDemoPage.editProcessFilterCloudComponent().clickCustomiseFilterHeader().setStatusFilterDropDown('RUNNING') - .setSortFilterDropDown('Id').setOrderFilterDropDown('ASC'); - expect(processCloudDemoPage.processListCloudComponent().getDataTable().checkListIsSorted('ASC', 'Id')).toBe(true); + const editProcessFilterCloudComponent = processCloudDemoPage.editProcessFilterCloudComponent(); + await editProcessFilterCloudComponent.clickCustomiseFilterHeader(); + await editProcessFilterCloudComponent.setStatusFilterDropDown('RUNNING'); + await editProcessFilterCloudComponent.setSortFilterDropDown('Id'); + await editProcessFilterCloudComponent.setOrderFilterDropDown('ASC'); - processCloudDemoPage.editProcessFilterCloudComponent().setOrderFilterDropDown('DESC'); - expect(processCloudDemoPage.processListCloudComponent().getDataTable().checkListIsSorted('DESC', 'Id')).toBe(true); + await expect(await processCloudDemoPage.processListCloudComponent().getDataTable().checkListIsSorted('ASC', 'Id')).toBe(true); + + await processCloudDemoPage.editProcessFilterCloudComponent().setOrderFilterDropDown('DESC'); + await expect(await processCloudDemoPage.processListCloudComponent().getDataTable().checkListIsSorted('DESC', 'Id')).toBe(true); }); it('[C305054] Should display processes ordered by status when Status is selected from sort dropdown', async () => { - processCloudDemoPage.editProcessFilterCloudComponent().clickCustomiseFilterHeader().setStatusFilterDropDown('ALL') - .setSortFilterDropDown('Status').setOrderFilterDropDown('ASC'); - expect(processCloudDemoPage.processListCloudComponent().getDataTable().checkListIsSorted('ASC', 'Status')).toBe(true); + const editProcessFilterCloudComponent = processCloudDemoPage.editProcessFilterCloudComponent(); + await editProcessFilterCloudComponent.clickCustomiseFilterHeader(); + await editProcessFilterCloudComponent.setStatusFilterDropDown('ALL'); + await editProcessFilterCloudComponent.setSortFilterDropDown('Status'); + await editProcessFilterCloudComponent.setOrderFilterDropDown('ASC'); - processCloudDemoPage.editProcessFilterCloudComponent().setOrderFilterDropDown('DESC'); - expect(processCloudDemoPage.processListCloudComponent().getDataTable().checkListIsSorted('DESC', 'Status')).toBe(true); + await expect(await processCloudDemoPage.processListCloudComponent().getDataTable().checkListIsSorted('ASC', 'Status')).toBe(true); + + await processCloudDemoPage.editProcessFilterCloudComponent().setOrderFilterDropDown('DESC'); + await expect(await processCloudDemoPage.processListCloudComponent().getDataTable().checkListIsSorted('DESC', 'Status')).toBe(true); }); it('[C305054] Should display processes ordered by initiator when Initiator is selected from sort dropdown', async () => { - processCloudDemoPage.editProcessFilterCloudComponent().clickCustomiseFilterHeader().setStatusFilterDropDown('ALL') - .setSortFilterDropDown('Initiator').setOrderFilterDropDown('ASC'); - expect(processCloudDemoPage.processListCloudComponent().getDataTable().checkListIsSorted('ASC', 'Initiator')).toBe(true); + const editProcessFilterCloudComponent = processCloudDemoPage.editProcessFilterCloudComponent(); + await editProcessFilterCloudComponent.clickCustomiseFilterHeader(); + await editProcessFilterCloudComponent.setStatusFilterDropDown('ALL'); + await editProcessFilterCloudComponent.setSortFilterDropDown('Initiator'); + await editProcessFilterCloudComponent.setOrderFilterDropDown('ASC'); - processCloudDemoPage.editProcessFilterCloudComponent().setOrderFilterDropDown('DESC'); - expect(processCloudDemoPage.processListCloudComponent().getDataTable().checkListIsSorted('DESC', 'Initiator')).toBe(true); + await expect(await processCloudDemoPage.processListCloudComponent().getDataTable().checkListIsSorted('ASC', 'Initiator')).toBe(true); + + await processCloudDemoPage.editProcessFilterCloudComponent().setOrderFilterDropDown('DESC'); + await expect(await processCloudDemoPage.processListCloudComponent().getDataTable().checkListIsSorted('DESC', 'Initiator')).toBe(true); }); it('[C305054] Should display processes ordered by processdefinitionid date when ProcessDefinitionId is selected from sort dropdown', async () => { - processCloudDemoPage.editProcessFilterCloudComponent().clickCustomiseFilterHeader().setStatusFilterDropDown('ALL') - .setSortFilterDropDown('ProcessDefinitionId').setOrderFilterDropDown('ASC'); - expect(processCloudDemoPage.processListCloudComponent().getDataTable().checkListIsSorted('ASC', 'Process Definition Id')).toBe(true); + const editProcessFilterCloudComponent = processCloudDemoPage.editProcessFilterCloudComponent(); + await editProcessFilterCloudComponent.clickCustomiseFilterHeader(); + await editProcessFilterCloudComponent.setStatusFilterDropDown('ALL'); + await editProcessFilterCloudComponent.setSortFilterDropDown('ProcessDefinitionId'); + await editProcessFilterCloudComponent.setOrderFilterDropDown('ASC'); - processCloudDemoPage.editProcessFilterCloudComponent().setOrderFilterDropDown('DESC'); - expect(processCloudDemoPage.processListCloudComponent().getDataTable().checkListIsSorted('DESC', 'Process Definition Id')).toBe(true); + await expect(await processCloudDemoPage.processListCloudComponent().getDataTable().checkListIsSorted('ASC', 'Process Definition Id')).toBe(true); + + await processCloudDemoPage.editProcessFilterCloudComponent().setOrderFilterDropDown('DESC'); + await expect(await processCloudDemoPage.processListCloudComponent().getDataTable().checkListIsSorted('DESC', 'Process Definition Id')).toBe(true); }); it('[C305054] Should display processes ordered by processdefinitionkey date when ProcessDefinitionKey is selected from sort dropdown', async () => { - processCloudDemoPage.editProcessFilterCloudComponent().clickCustomiseFilterHeader().setStatusFilterDropDown('ALL') - .setSortFilterDropDown('ProcessDefinitionKey').setOrderFilterDropDown('ASC'); - expect(processCloudDemoPage.processListCloudComponent().getDataTable().checkListIsSorted('ASC', 'Process Definition Key')).toBe(true); + const editProcessFilterCloudComponent = processCloudDemoPage.editProcessFilterCloudComponent(); + await editProcessFilterCloudComponent.clickCustomiseFilterHeader(); + await editProcessFilterCloudComponent.setStatusFilterDropDown('ALL'); + await editProcessFilterCloudComponent.setSortFilterDropDown('ProcessDefinitionKey'); + await editProcessFilterCloudComponent.setOrderFilterDropDown('ASC'); - processCloudDemoPage.editProcessFilterCloudComponent().setOrderFilterDropDown('DESC'); - expect(processCloudDemoPage.processListCloudComponent().getDataTable().checkListIsSorted('DESC', 'Process Definition Key')).toBe(true); + await expect(await processCloudDemoPage.processListCloudComponent().getDataTable().checkListIsSorted('ASC', 'Process Definition Key')).toBe(true); + + await processCloudDemoPage.editProcessFilterCloudComponent().setOrderFilterDropDown('DESC'); + await expect(await processCloudDemoPage.processListCloudComponent().getDataTable().checkListIsSorted('DESC', 'Process Definition Key')).toBe(true); }); it('[C305054] Should display processes ordered by last modified date when Last Modified is selected from sort dropdown', async () => { - processCloudDemoPage.editProcessFilterCloudComponent().clickCustomiseFilterHeader().setStatusFilterDropDown('ALL') - .setSortFilterDropDown('LastModified').setOrderFilterDropDown('ASC'); - expect(processCloudDemoPage.processListCloudComponent().getDataTable().checkListIsSorted('ASC', 'Last Modified')).toBe(true); + const editProcessFilterCloudComponent = processCloudDemoPage.editProcessFilterCloudComponent(); + await editProcessFilterCloudComponent.clickCustomiseFilterHeader(); + await editProcessFilterCloudComponent.setStatusFilterDropDown('ALL'); + await editProcessFilterCloudComponent.setSortFilterDropDown('LastModified'); + await editProcessFilterCloudComponent.setOrderFilterDropDown('ASC'); - processCloudDemoPage.editProcessFilterCloudComponent().setOrderFilterDropDown('DESC'); - expect(processCloudDemoPage.processListCloudComponent().getDataTable().checkListIsSorted('DESC', 'Last Modified')).toBe(true); + await expect(await processCloudDemoPage.processListCloudComponent().getDataTable().checkListIsSorted('ASC', 'Last Modified')).toBe(true); + + await processCloudDemoPage.editProcessFilterCloudComponent().setOrderFilterDropDown('DESC'); + await expect(await processCloudDemoPage.processListCloudComponent().getDataTable().checkListIsSorted('DESC', 'Last Modified')).toBe(true); }); it('[C305054] Should display processes ordered by business key date when BusinessKey is selected from sort dropdown', async () => { - processCloudDemoPage.editProcessFilterCloudComponent().clickCustomiseFilterHeader().setStatusFilterDropDown('ALL') - .setSortFilterDropDown('BusinessKey').setOrderFilterDropDown('ASC'); - expect(processCloudDemoPage.processListCloudComponent().getDataTable().checkListIsSorted('ASC', 'Business Key')).toBe(true); + const editProcessFilterCloudComponent = processCloudDemoPage.editProcessFilterCloudComponent(); + await editProcessFilterCloudComponent.clickCustomiseFilterHeader(); + await editProcessFilterCloudComponent.setStatusFilterDropDown('ALL'); + await editProcessFilterCloudComponent.setSortFilterDropDown('BusinessKey'); + await editProcessFilterCloudComponent.setOrderFilterDropDown('ASC'); - processCloudDemoPage.editProcessFilterCloudComponent().setOrderFilterDropDown('DESC'); - expect(processCloudDemoPage.processListCloudComponent().getDataTable().checkListIsSorted('DESC', 'Business Key')).toBe(true); + await expect(await processCloudDemoPage.processListCloudComponent().getDataTable().checkListIsSorted('ASC', 'Business Key')).toBe(true); + + await processCloudDemoPage.editProcessFilterCloudComponent().setOrderFilterDropDown('DESC'); + await expect(await processCloudDemoPage.processListCloudComponent().getDataTable().checkListIsSorted('DESC', 'Business Key')).toBe(true); }); it('[C305054] Should display the actions filters Save, SaveAs and Delete', async () => { - processCloudDemoPage.allProcessesFilter().clickProcessFilter(); - processCloudDemoPage.allProcessesFilter().checkProcessFilterIsDisplayed(); - expect(processCloudDemoPage.getActiveFilterName()).toBe('All Processes'); - processCloudDemoPage.editProcessFilterCloudComponent().clickCustomiseFilterHeader(); - processCloudDemoPage.editProcessFilterCloudComponent().checkSaveButtonIsDisplayed().checkSaveAsButtonIsDisplayed() - .checkDeleteButtonIsDisplayed(); + await processCloudDemoPage.allProcessesFilter().clickProcessFilter(); + await processCloudDemoPage.allProcessesFilter().checkProcessFilterIsDisplayed(); + await expect(await processCloudDemoPage.getActiveFilterName()).toBe('All Processes'); + await processCloudDemoPage.editProcessFilterCloudComponent().clickCustomiseFilterHeader(); + + const editProcessFilterCloudComponent = processCloudDemoPage.editProcessFilterCloudComponent(); + + await editProcessFilterCloudComponent.checkSaveButtonIsDisplayed(); + await editProcessFilterCloudComponent.checkSaveAsButtonIsDisplayed(); + await editProcessFilterCloudComponent.checkDeleteButtonIsDisplayed(); }); it('[C297697] The value of the filter should be preserved when saving it', async () => { - processCloudDemoPage.editProcessFilterCloudComponent().clickCustomiseFilterHeader() - .setProcessInstanceId(completedProcess.entry.id); + await processCloudDemoPage.editProcessFilterCloudComponent().clickCustomiseFilterHeader(); + await processCloudDemoPage.editProcessFilterCloudComponent().setProcessInstanceId(completedProcess.entry.id); - processCloudDemoPage.editProcessFilterCloudComponent().clickSaveAsButton(); - processCloudDemoPage.editProcessFilterCloudComponent().editProcessFilterDialog().setFilterName('New').clickOnSaveButton(); - expect(processCloudDemoPage.getActiveFilterName()).toBe('New'); + await processCloudDemoPage.editProcessFilterCloudComponent().clickSaveAsButton(); + await processCloudDemoPage.editProcessFilterCloudComponent().editProcessFilterDialog().setFilterName('New'); + await processCloudDemoPage.editProcessFilterCloudComponent().editProcessFilterDialog().clickOnSaveButton(); - processCloudDemoPage.processListCloudComponent().checkContentIsDisplayedById(completedProcess.entry.id); - expect(processCloudDemoPage.processListCloudComponent().getDataTable().numberOfRows()).toBe(1); + await expect(await processCloudDemoPage.getActiveFilterName()).toBe('New'); - processCloudDemoPage.editProcessFilterCloudComponent().clickCustomiseFilterHeader(); - expect(processCloudDemoPage.editProcessFilterCloudComponent().getProcessInstanceId()).toEqual(completedProcess.entry.id); + await processCloudDemoPage.processListCloudComponent().checkContentIsDisplayedById(completedProcess.entry.id); + await expect(await processCloudDemoPage.processListCloudComponent().getDataTable().numberOfRows()).toBe(1); + + await processCloudDemoPage.editProcessFilterCloudComponent().clickCustomiseFilterHeader(); + + await expect(await processCloudDemoPage.editProcessFilterCloudComponent().getProcessInstanceId()).toEqual(completedProcess.entry.id); }); it('[C297646] Should display the filter dropdown fine , after switching between saved filters', async () => { + await processCloudDemoPage.editProcessFilterCloudComponent().clickCustomiseFilterHeader(); + noOfApps = await processCloudDemoPage.editProcessFilterCloudComponent().getNumberOfAppNameOptions(); - noOfApps = processCloudDemoPage.editProcessFilterCloudComponent().clickCustomiseFilterHeader().getNumberOfAppNameOptions(); - expect(processCloudDemoPage.editProcessFilterCloudComponent().checkAppNamesAreUnique()).toBe(true); - BrowserActions.closeMenuAndDialogs(); - processCloudDemoPage.editProcessFilterCloudComponent().setStatusFilterDropDown('RUNNING') - .setAppNameDropDown(candidateBaseApp).setProcessInstanceId(runningProcessInstance.entry.id); + await expect(await processCloudDemoPage.editProcessFilterCloudComponent().checkAppNamesAreUnique()).toBe(true); + await BrowserActions.closeMenuAndDialogs(); + await processCloudDemoPage.editProcessFilterCloudComponent().setStatusFilterDropDown('RUNNING'); + await processCloudDemoPage.editProcessFilterCloudComponent().setAppNameDropDown(candidateBaseApp); + await processCloudDemoPage.editProcessFilterCloudComponent().setProcessInstanceId(runningProcessInstance.entry.id); - processCloudDemoPage.processListCloudComponent().checkContentIsDisplayedById(runningProcessInstance.entry.id); - expect(processCloudDemoPage.editProcessFilterCloudComponent().getNumberOfAppNameOptions()).toBe(noOfApps); - expect(processCloudDemoPage.editProcessFilterCloudComponent().checkAppNamesAreUnique()).toBe(true); - BrowserActions.closeMenuAndDialogs(); + await processCloudDemoPage.processListCloudComponent().checkContentIsDisplayedById(runningProcessInstance.entry.id); + await expect(await processCloudDemoPage.editProcessFilterCloudComponent().getNumberOfAppNameOptions()).toBe(noOfApps); + await expect(await processCloudDemoPage.editProcessFilterCloudComponent().checkAppNamesAreUnique()).toBe(true); + await BrowserActions.closeMenuAndDialogs(); - processCloudDemoPage.editProcessFilterCloudComponent().clickSaveAsButton(); - processCloudDemoPage.editProcessFilterCloudComponent().editProcessFilterDialog().setFilterName('SavedFilter').clickOnSaveButton(); - expect(processCloudDemoPage.getActiveFilterName()).toBe('SavedFilter'); + await processCloudDemoPage.editProcessFilterCloudComponent().clickSaveAsButton(); + await processCloudDemoPage.editProcessFilterCloudComponent().editProcessFilterDialog().setFilterName('SavedFilter'); + await processCloudDemoPage.editProcessFilterCloudComponent().editProcessFilterDialog().clickOnSaveButton(); + await expect(await processCloudDemoPage.getActiveFilterName()).toBe('SavedFilter'); - processCloudDemoPage.editProcessFilterCloudComponent().clickCustomiseFilterHeader(); - expect(processCloudDemoPage.editProcessFilterCloudComponent().getProcessInstanceId()).toEqual(runningProcessInstance.entry.id); + await processCloudDemoPage.editProcessFilterCloudComponent().clickCustomiseFilterHeader(); + await expect(await processCloudDemoPage.editProcessFilterCloudComponent().getProcessInstanceId()).toEqual(runningProcessInstance.entry.id); - processCloudDemoPage.editProcessFilterCloudComponent().setStatusFilterDropDown('RUNNING') - .setAppNameDropDown(candidateBaseApp).setProcessInstanceId(switchProcessInstance.entry.id); + await processCloudDemoPage.editProcessFilterCloudComponent().setStatusFilterDropDown('RUNNING'); + await processCloudDemoPage.editProcessFilterCloudComponent().setAppNameDropDown(candidateBaseApp); + await processCloudDemoPage.editProcessFilterCloudComponent().setProcessInstanceId(switchProcessInstance.entry.id); - processCloudDemoPage.processListCloudComponent().checkContentIsDisplayedById(switchProcessInstance.entry.id); - processCloudDemoPage.editProcessFilterCloudComponent().clickSaveAsButton(); - processCloudDemoPage.editProcessFilterCloudComponent().editProcessFilterDialog().setFilterName('SwitchFilter').clickOnSaveButton(); - expect(processCloudDemoPage.getActiveFilterName()).toBe('SwitchFilter'); + await processCloudDemoPage.processListCloudComponent().checkContentIsDisplayedById(switchProcessInstance.entry.id); + await processCloudDemoPage.editProcessFilterCloudComponent().clickSaveAsButton(); + await processCloudDemoPage.editProcessFilterCloudComponent().editProcessFilterDialog().setFilterName('SwitchFilter'); + await processCloudDemoPage.editProcessFilterCloudComponent().editProcessFilterDialog().clickOnSaveButton(); + await expect(await processCloudDemoPage.getActiveFilterName()).toBe('SwitchFilter'); - processCloudDemoPage.editProcessFilterCloudComponent().clickCustomiseFilterHeader(); - expect(processCloudDemoPage.editProcessFilterCloudComponent().getProcessInstanceId()).toEqual(switchProcessInstance.entry.id); - expect(processCloudDemoPage.editProcessFilterCloudComponent().getNumberOfAppNameOptions()).toBe(noOfApps); - expect(processCloudDemoPage.editProcessFilterCloudComponent().checkAppNamesAreUnique()).toBe(true); - BrowserActions.closeMenuAndDialogs(); + await processCloudDemoPage.editProcessFilterCloudComponent().clickCustomiseFilterHeader(); + await expect(await processCloudDemoPage.editProcessFilterCloudComponent().getProcessInstanceId()).toEqual(switchProcessInstance.entry.id); + await expect(await processCloudDemoPage.editProcessFilterCloudComponent().getNumberOfAppNameOptions()).toBe(noOfApps); + await expect(await processCloudDemoPage.editProcessFilterCloudComponent().checkAppNamesAreUnique()).toBe(true); + await BrowserActions.closeMenuAndDialogs(); }); describe('Process List - Check Action Filters', () => { - beforeEach(async (done) => { + beforeEach(async () => { await LocalStorageUtil.setConfigField('adf-edit-process-filter', JSON.stringify({ 'actions': [ 'save', 'saveAs' ] })); - navigationBarPage.navigateToProcessServicesCloudPage(); - appListCloudComponent.checkApsContainer(); - appListCloudComponent.goToApp(candidateBaseApp); - tasksCloudDemoPage.taskListCloudComponent().checkTaskListIsLoaded(); - processCloudDemoPage.clickOnProcessFilters(); - done(); + await navigationBarPage.navigateToProcessServicesCloudPage(); + await appListCloudComponent.checkApsContainer(); + await appListCloudComponent.goToApp(candidateBaseApp); + await tasksCloudDemoPage.taskListCloudComponent().checkTaskListIsLoaded(); + await processCloudDemoPage.clickOnProcessFilters(); + }); it('[C305054] Should display the actions filters Save and SaveAs, Delete button is not displayed', async () => { - processCloudDemoPage.allProcessesFilter().clickProcessFilter(); - processCloudDemoPage.allProcessesFilter().checkProcessFilterIsDisplayed(); - expect(processCloudDemoPage.getActiveFilterName()).toBe('All Processes'); - processCloudDemoPage.editProcessFilterCloudComponent().clickCustomiseFilterHeader(); - processCloudDemoPage.editProcessFilterCloudComponent().checkSaveButtonIsDisplayed().checkSaveAsButtonIsDisplayed() - .checkDeleteButtonIsNotDisplayed(); + await processCloudDemoPage.allProcessesFilter().clickProcessFilter(); + await processCloudDemoPage.allProcessesFilter().checkProcessFilterIsDisplayed(); + await expect(await processCloudDemoPage.getActiveFilterName()).toBe('All Processes'); + await processCloudDemoPage.editProcessFilterCloudComponent().clickCustomiseFilterHeader(); + await processCloudDemoPage.editProcessFilterCloudComponent().checkSaveButtonIsDisplayed(); + await processCloudDemoPage.editProcessFilterCloudComponent().checkSaveAsButtonIsDisplayed(); + await processCloudDemoPage.editProcessFilterCloudComponent().checkDeleteButtonIsNotDisplayed(); }); }); diff --git a/e2e/process-services-cloud/process-filter-results.e2e.ts b/e2e/process-services-cloud/process-filter-results.e2e.ts index 89fbe65a4d..9ac309813d 100644 --- a/e2e/process-services-cloud/process-filter-results.e2e.ts +++ b/e2e/process-services-cloud/process-filter-results.e2e.ts @@ -63,7 +63,7 @@ describe('Process filters cloud', () => { const candidateBaseApp = resources.ACTIVITI7_APPS.CANDIDATE_BASE_APP.name; const simpleApp = resources.ACTIVITI7_APPS.SIMPLE_APP.name; - beforeAll(async (done) => { + beforeAll(async () => { await apiService.login(browser.params.identityAdmin.email, browser.params.identityAdmin.password); identityService = new IdentityService(apiService); @@ -116,7 +116,7 @@ describe('Process filters cloud', () => { }); queryService = new QueryService(apiService); - await browser.driver.sleep(4000); // eventual consistency query + await browser.sleep(4000); // eventual consistency query const task = await queryService.getProcessInstanceTasks(completedProcess.entry.id, candidateBaseApp); tasksService = new TasksService(apiService); const claimedTask = await tasksService.claimTask(task.list.entries[0].entry.id, candidateBaseApp); @@ -129,10 +129,10 @@ describe('Process filters cloud', () => { await loginSSOPage.loginSSOIdentityService(testUser.email, testUser.password); await LocalStorageUtil.setConfigField('adf-edit-process-filter', JSON.stringify(editProcessFilterConfigFile)); await LocalStorageUtil.setConfigField('adf-cloud-process-list', JSON.stringify(processListCloudConfigFile)); - done(); + }); - afterAll(async (done) => { + afterAll(async () => { await processInstancesService.deleteProcessInstance(runningProcessInstance.entry.id, candidateBaseApp); await processInstancesService.deleteProcessInstance(anotherProcessInstance.entry.id, candidateBaseApp); await processInstancesService.deleteProcessInstance(suspendProcessInstance.entry.id, candidateBaseApp); @@ -144,166 +144,195 @@ describe('Process filters cloud', () => { await identityService.deleteIdentityUser(testUser.idIdentityService); await identityService.deleteIdentityUser(anotherUser.idIdentityService); - done(); + }); - beforeEach(() => { - navigationBarPage.navigateToProcessServicesCloudPage(); - appListCloudComponent.checkApsContainer(); - appListCloudComponent.goToApp(candidateBaseApp); - tasksCloudDemoPage.taskListCloudComponent().checkTaskListIsLoaded(); - processCloudDemoPage.clickOnProcessFilters(); + beforeEach(async () => { + await navigationBarPage.navigateToProcessServicesCloudPage(); + await appListCloudComponent.checkApsContainer(); + await appListCloudComponent.goToApp(candidateBaseApp); + await tasksCloudDemoPage.taskListCloudComponent().checkTaskListIsLoaded(); + await processCloudDemoPage.clickOnProcessFilters(); }); it('[C306887] Should be able to filter by appName', async () => { - processCloudDemoPage.editProcessFilterCloudComponent().clickCustomiseFilterHeader().setAppNameDropDown(candidateBaseApp).setProperty('initiator', testUser.username); - processCloudDemoPage.processListCloudComponent().getDataTable().waitTillContentLoaded(); - processCloudDemoPage.processListCloudComponent().checkContentIsDisplayedByName(runningProcessInstance.entry.name); - processCloudDemoPage.processListCloudComponent().checkContentIsNotDisplayedByName(differentAppUserProcessInstance.entry.name); + await processCloudDemoPage.editProcessFilterCloudComponent().clickCustomiseFilterHeader(); + await processCloudDemoPage.editProcessFilterCloudComponent().setAppNameDropDown(candidateBaseApp); + await processCloudDemoPage.editProcessFilterCloudComponent().setProperty('initiator', testUser.username); + + await processCloudDemoPage.processListCloudComponent().getDataTable().waitTillContentLoaded(); + await processCloudDemoPage.processListCloudComponent().checkContentIsDisplayedByName(runningProcessInstance.entry.name); + await processCloudDemoPage.processListCloudComponent().checkContentIsNotDisplayedByName(differentAppUserProcessInstance.entry.name); }); it('[C306889] Should be able to see "No process found" when using an app with no processes in the appName field', async () => { - processCloudDemoPage.editProcessFilterCloudComponent().clickCustomiseFilterHeader().setAppNameDropDown('subprocessapp').setProperty('initiator', testUser.username); - processCloudDemoPage.processListCloudComponent().getDataTable().waitTillContentLoaded(); - expect(processListPage.checkProcessListTitleIsDisplayed()).toEqual('No Processes Found'); + await processCloudDemoPage.editProcessFilterCloudComponent().clickCustomiseFilterHeader(); + await processCloudDemoPage.editProcessFilterCloudComponent().setAppNameDropDown('subprocessapp'); + await processCloudDemoPage.editProcessFilterCloudComponent().setProperty('initiator', testUser.username); + + await processCloudDemoPage.processListCloudComponent().getDataTable().waitTillContentLoaded(); + await expect(await processListPage.getDisplayedProcessListTitle()).toEqual('No Processes Found'); }); it('[C306890] Should be able to filter by initiator', async () => { - processCloudDemoPage.editProcessFilterCloudComponent().clickCustomiseFilterHeader().setProperty('initiator', testUser.username); - processCloudDemoPage.processListCloudComponent().getDataTable().waitTillContentLoaded(); - processCloudDemoPage.processListCloudComponent().checkContentIsDisplayedByName(runningProcessInstance.entry.name); - processCloudDemoPage.processListCloudComponent().checkContentIsNotDisplayedByName(differentAppUserProcessInstance.entry.name); + await processCloudDemoPage.editProcessFilterCloudComponent().clickCustomiseFilterHeader(); + await processCloudDemoPage.editProcessFilterCloudComponent().setProperty('initiator', testUser.username); + + await processCloudDemoPage.processListCloudComponent().getDataTable().waitTillContentLoaded(); + await processCloudDemoPage.processListCloudComponent().checkContentIsDisplayedByName(runningProcessInstance.entry.name); + await processCloudDemoPage.processListCloudComponent().checkContentIsNotDisplayedByName(differentAppUserProcessInstance.entry.name); }); it('[C306891] Should be able to see "No process found" when providing an initiator whitout processes', async () => { - processCloudDemoPage.editProcessFilterCloudComponent().clickCustomiseFilterHeader().setProperty('initiator', anotherUser.username); - processCloudDemoPage.processListCloudComponent().getDataTable().waitTillContentLoaded(); - expect(processListPage.checkProcessListTitleIsDisplayed()).toEqual('No Processes Found'); + await processCloudDemoPage.editProcessFilterCloudComponent().clickCustomiseFilterHeader(); + await processCloudDemoPage.editProcessFilterCloudComponent().setProperty('initiator', anotherUser.username); + + await processCloudDemoPage.processListCloudComponent().getDataTable().waitTillContentLoaded(); + await expect(await processListPage.getDisplayedProcessListTitle()).toEqual('No Processes Found'); }); it('[C311315] Should be able to filter by process definition id', async () => { - processCloudDemoPage.editProcessFilterCloudComponent().clickCustomiseFilterHeader().setProperty('processDefinitionId', processDefinition.entry.id); - processCloudDemoPage.processListCloudComponent().getDataTable().waitTillContentLoaded(); - processCloudDemoPage.processListCloudComponent().checkContentIsDisplayedByName(runningProcessInstance.entry.name); + await processCloudDemoPage.editProcessFilterCloudComponent().clickCustomiseFilterHeader(); + await processCloudDemoPage.editProcessFilterCloudComponent().setProperty('processDefinitionId', processDefinition.entry.id); - processCloudDemoPage.editProcessFilterCloudComponent().setProperty('processDefinitionId', anotherProcessDefinition.entry.id); - processCloudDemoPage.processListCloudComponent().getDataTable().waitTillContentLoaded(); - processCloudDemoPage.processListCloudComponent().checkContentIsDisplayedByName(anotherProcessInstance.entry.name); - processCloudDemoPage.processListCloudComponent().checkContentIsNotDisplayedByName(runningProcessInstance.entry.name); + await processCloudDemoPage.processListCloudComponent().getDataTable().waitTillContentLoaded(); + await processCloudDemoPage.processListCloudComponent().checkContentIsDisplayedByName(runningProcessInstance.entry.name); + + await processCloudDemoPage.editProcessFilterCloudComponent().setProperty('processDefinitionId', anotherProcessDefinition.entry.id); + await processCloudDemoPage.processListCloudComponent().getDataTable().waitTillContentLoaded(); + await processCloudDemoPage.processListCloudComponent().checkContentIsDisplayedByName(anotherProcessInstance.entry.name); + await processCloudDemoPage.processListCloudComponent().checkContentIsNotDisplayedByName(runningProcessInstance.entry.name); }); it('[C311316] Should be able to filter by process definition key', async () => { - processCloudDemoPage.editProcessFilterCloudComponent().clickCustomiseFilterHeader().setProperty('processDefinitionKey', processDefinition.entry.key); - processCloudDemoPage.processListCloudComponent().getDataTable().waitTillContentLoaded(); - processCloudDemoPage.processListCloudComponent().checkContentIsDisplayedByName(runningProcessInstance.entry.name); + await processCloudDemoPage.editProcessFilterCloudComponent().clickCustomiseFilterHeader(); + await processCloudDemoPage.editProcessFilterCloudComponent().setProperty('processDefinitionKey', processDefinition.entry.key); + await processCloudDemoPage.processListCloudComponent().getDataTable().waitTillContentLoaded(); + await processCloudDemoPage.processListCloudComponent().checkContentIsDisplayedByName(runningProcessInstance.entry.name); - processCloudDemoPage.editProcessFilterCloudComponent().setProperty('processDefinitionKey', anotherProcessDefinition.entry.key); - processCloudDemoPage.processListCloudComponent().getDataTable().waitTillContentLoaded(); - processCloudDemoPage.processListCloudComponent().checkContentIsDisplayedByName(anotherProcessInstance.entry.name); - processCloudDemoPage.processListCloudComponent().checkContentIsNotDisplayedByName(runningProcessInstance.entry.name); + await processCloudDemoPage.editProcessFilterCloudComponent().setProperty('processDefinitionKey', anotherProcessDefinition.entry.key); + await processCloudDemoPage.processListCloudComponent().getDataTable().waitTillContentLoaded(); + await processCloudDemoPage.processListCloudComponent().checkContentIsDisplayedByName(anotherProcessInstance.entry.name); + await processCloudDemoPage.processListCloudComponent().checkContentIsNotDisplayedByName(runningProcessInstance.entry.name); }); it('[C311317] Should be able to filter by process instance id', async () => { - processCloudDemoPage.editProcessFilterCloudComponent().clickCustomiseFilterHeader().setProperty('processInstanceId', runningProcessInstance.entry.id); - processCloudDemoPage.processListCloudComponent().getDataTable().waitTillContentLoaded(); - processCloudDemoPage.processListCloudComponent().checkContentIsDisplayedByName(runningProcessInstance.entry.name); - expect(processCloudDemoPage.processListCloudComponent().getDataTable().getNumberOfRows()).toBe(1); + await processCloudDemoPage.editProcessFilterCloudComponent().clickCustomiseFilterHeader(); + await processCloudDemoPage.editProcessFilterCloudComponent().setProperty('processInstanceId', runningProcessInstance.entry.id); + await processCloudDemoPage.processListCloudComponent().getDataTable().waitTillContentLoaded(); + await processCloudDemoPage.processListCloudComponent().checkContentIsDisplayedByName(runningProcessInstance.entry.name); - processCloudDemoPage.editProcessFilterCloudComponent().setProperty('processInstanceId', anotherProcessInstance.entry.id); - processCloudDemoPage.processListCloudComponent().getDataTable().waitTillContentLoaded(); - processCloudDemoPage.processListCloudComponent().checkContentIsDisplayedByName(anotherProcessInstance.entry.name); - processCloudDemoPage.processListCloudComponent().checkContentIsNotDisplayedByName(runningProcessInstance.entry.name); - expect(processCloudDemoPage.processListCloudComponent().getDataTable().getNumberOfRows()).toBe(1); + await browser.driver.sleep(1000); + await expect(await processCloudDemoPage.processListCloudComponent().getDataTable().getNumberOfRows()).toBe(1); + + await processCloudDemoPage.editProcessFilterCloudComponent().setProperty('processInstanceId', anotherProcessInstance.entry.id); + await processCloudDemoPage.processListCloudComponent().getDataTable().waitTillContentLoaded(); + await processCloudDemoPage.processListCloudComponent().checkContentIsDisplayedByName(anotherProcessInstance.entry.name); + await processCloudDemoPage.processListCloudComponent().checkContentIsNotDisplayedByName(runningProcessInstance.entry.name); + await expect(await processCloudDemoPage.processListCloudComponent().getDataTable().getNumberOfRows()).toBe(1); }); it('[C311321] Should be able to filter by process name', async () => { - processCloudDemoPage.editProcessFilterCloudComponent().clickCustomiseFilterHeader().setProperty('processName', runningProcessInstance.entry.name); - processCloudDemoPage.processListCloudComponent().getDataTable().waitTillContentLoaded(); - processCloudDemoPage.processListCloudComponent().checkContentIsDisplayedByName(runningProcessInstance.entry.name); + await processCloudDemoPage.editProcessFilterCloudComponent().clickCustomiseFilterHeader(); + await processCloudDemoPage.editProcessFilterCloudComponent().setProperty('processName', runningProcessInstance.entry.name); + await processCloudDemoPage.processListCloudComponent().getDataTable().waitTillContentLoaded(); + await processCloudDemoPage.processListCloudComponent().checkContentIsDisplayedByName(runningProcessInstance.entry.name); - processCloudDemoPage.editProcessFilterCloudComponent().setProperty('processName', anotherProcessInstance.entry.name); - processCloudDemoPage.processListCloudComponent().getDataTable().waitTillContentLoaded(); - processCloudDemoPage.processListCloudComponent().checkContentIsDisplayedByName(anotherProcessInstance.entry.name); - processCloudDemoPage.processListCloudComponent().checkContentIsNotDisplayedByName(runningProcessInstance.entry.name); + await processCloudDemoPage.editProcessFilterCloudComponent().setProperty('processName', anotherProcessInstance.entry.name); + await processCloudDemoPage.processListCloudComponent().getDataTable().waitTillContentLoaded(); + await processCloudDemoPage.processListCloudComponent().checkContentIsDisplayedByName(anotherProcessInstance.entry.name); + await processCloudDemoPage.processListCloudComponent().checkContentIsNotDisplayedByName(runningProcessInstance.entry.name); }); it('[C306892] Should be able to filter by process status - Running', async () => { - processCloudDemoPage.editProcessFilterCloudComponent().clickCustomiseFilterHeader().setStatusFilterDropDown('RUNNING'); - processCloudDemoPage.processListCloudComponent().getDataTable().waitTillContentLoaded(); - processCloudDemoPage.processListCloudComponent().checkContentIsDisplayedByName(runningProcessInstance.entry.name); - processCloudDemoPage.processListCloudComponent().checkContentIsNotDisplayedByName(suspendProcessInstance.entry.name); - processCloudDemoPage.processListCloudComponent().checkContentIsDisplayedByName(anotherProcessInstance.entry.name); - processCloudDemoPage.processListCloudComponent().checkContentIsNotDisplayedByName(completedProcess.entry.name); + await processCloudDemoPage.editProcessFilterCloudComponent().clickCustomiseFilterHeader(); + await processCloudDemoPage.editProcessFilterCloudComponent().setStatusFilterDropDown('RUNNING'); + await processCloudDemoPage.processListCloudComponent().getDataTable().waitTillContentLoaded(); + await processCloudDemoPage.processListCloudComponent().checkContentIsDisplayedByName(runningProcessInstance.entry.name); + await processCloudDemoPage.processListCloudComponent().checkContentIsNotDisplayedByName(suspendProcessInstance.entry.name); + await processCloudDemoPage.processListCloudComponent().checkContentIsDisplayedByName(anotherProcessInstance.entry.name); + await processCloudDemoPage.processListCloudComponent().checkContentIsNotDisplayedByName(completedProcess.entry.name); }); it('[C306892] Should be able to filter by process status - Completed', async () => { - processCloudDemoPage.editProcessFilterCloudComponent().clickCustomiseFilterHeader().setStatusFilterDropDown('COMPLETED'); - processCloudDemoPage.processListCloudComponent().getDataTable().waitTillContentLoaded(); - processCloudDemoPage.processListCloudComponent().checkContentIsDisplayedByName(completedProcess.entry.name); - processCloudDemoPage.processListCloudComponent().checkContentIsNotDisplayedByName(runningProcessInstance.entry.name); - processCloudDemoPage.processListCloudComponent().checkContentIsNotDisplayedByName(suspendProcessInstance.entry.name); - processCloudDemoPage.processListCloudComponent().checkContentIsNotDisplayedByName(anotherProcessInstance.entry.name); + await processCloudDemoPage.editProcessFilterCloudComponent().clickCustomiseFilterHeader(); + await processCloudDemoPage.editProcessFilterCloudComponent().setStatusFilterDropDown('COMPLETED'); + await processCloudDemoPage.processListCloudComponent().getDataTable().waitTillContentLoaded(); + await processCloudDemoPage.processListCloudComponent().checkContentIsDisplayedByName(completedProcess.entry.name); + await processCloudDemoPage.processListCloudComponent().checkContentIsNotDisplayedByName(runningProcessInstance.entry.name); + await processCloudDemoPage.processListCloudComponent().checkContentIsNotDisplayedByName(suspendProcessInstance.entry.name); + await processCloudDemoPage.processListCloudComponent().checkContentIsNotDisplayedByName(anotherProcessInstance.entry.name); }); it('[C306892] Should be able to filter by process status - Suspended', async () => { - processCloudDemoPage.editProcessFilterCloudComponent().clickCustomiseFilterHeader().setStatusFilterDropDown('SUSPENDED'); - processCloudDemoPage.processListCloudComponent().getDataTable().waitTillContentLoaded(); - processCloudDemoPage.processListCloudComponent().checkContentIsDisplayedByName(suspendProcessInstance.entry.name); - processCloudDemoPage.processListCloudComponent().checkContentIsNotDisplayedByName(runningProcessInstance.entry.name); - processCloudDemoPage.processListCloudComponent().checkContentIsNotDisplayedByName(anotherProcessInstance.entry.name); - processCloudDemoPage.processListCloudComponent().checkContentIsNotDisplayedByName(completedProcess.entry.name); + await processCloudDemoPage.editProcessFilterCloudComponent().clickCustomiseFilterHeader(); + await processCloudDemoPage.editProcessFilterCloudComponent().setStatusFilterDropDown('SUSPENDED'); + + await processCloudDemoPage.processListCloudComponent().getDataTable().waitTillContentLoaded(); + await processCloudDemoPage.processListCloudComponent().checkContentIsDisplayedByName(suspendProcessInstance.entry.name); + await processCloudDemoPage.processListCloudComponent().checkContentIsNotDisplayedByName(runningProcessInstance.entry.name); + await processCloudDemoPage.processListCloudComponent().checkContentIsNotDisplayedByName(anotherProcessInstance.entry.name); + await processCloudDemoPage.processListCloudComponent().checkContentIsNotDisplayedByName(completedProcess.entry.name); }); it('[C306892] Should be able to filter by process status - All', async () => { - processCloudDemoPage.editProcessFilterCloudComponent().clickCustomiseFilterHeader().setStatusFilterDropDown('ALL'); - processCloudDemoPage.processListCloudComponent().getDataTable().waitTillContentLoaded(); - processCloudDemoPage.processListCloudComponent().checkContentIsDisplayedByName(runningProcessInstance.entry.name); - processCloudDemoPage.processListCloudComponent().checkContentIsDisplayedByName(anotherProcessInstance.entry.name); - processCloudDemoPage.processListCloudComponent().checkContentIsDisplayedByName(suspendProcessInstance.entry.name); - processCloudDemoPage.processListCloudComponent().checkContentIsDisplayedByName(completedProcess.entry.name); + await processCloudDemoPage.editProcessFilterCloudComponent().clickCustomiseFilterHeader(); + await processCloudDemoPage.editProcessFilterCloudComponent().setStatusFilterDropDown('ALL'); + await processCloudDemoPage.processListCloudComponent().getDataTable().waitTillContentLoaded(); + await processCloudDemoPage.processListCloudComponent().checkContentIsDisplayedByName(runningProcessInstance.entry.name); + await processCloudDemoPage.processListCloudComponent().checkContentIsDisplayedByName(anotherProcessInstance.entry.name); + await processCloudDemoPage.processListCloudComponent().checkContentIsDisplayedByName(suspendProcessInstance.entry.name); + await processCloudDemoPage.processListCloudComponent().checkContentIsDisplayedByName(completedProcess.entry.name); }); it('[C311318] Should be able to filter by lastModifiedFrom - displays record when date = currentDate', async () => { - processCloudDemoPage.editProcessFilterCloudComponent().clickCustomiseFilterHeader().setProperty('lastModifiedFrom', currentDate); - processCloudDemoPage.processListCloudComponent().getDataTable().waitTillContentLoaded(); - processCloudDemoPage.processListCloudComponent().checkContentIsDisplayedByName(runningProcessInstance.entry.name); + await processCloudDemoPage.editProcessFilterCloudComponent().clickCustomiseFilterHeader(); + await processCloudDemoPage.editProcessFilterCloudComponent().setProperty('lastModifiedFrom', currentDate); + await processCloudDemoPage.processListCloudComponent().getDataTable().waitTillContentLoaded(); + await processCloudDemoPage.processListCloudComponent().checkContentIsDisplayedByName(runningProcessInstance.entry.name); }); it('[C311318] Should be able to filter by lastModifiedFrom - displays record when date = beforeDate', async () => { - processCloudDemoPage.editProcessFilterCloudComponent().clickCustomiseFilterHeader().setProperty('lastModifiedFrom', beforeDate); - processCloudDemoPage.processListCloudComponent().getDataTable().waitTillContentLoaded(); - processCloudDemoPage.processListCloudComponent().checkContentIsDisplayedByName(runningProcessInstance.entry.name); + await processCloudDemoPage.editProcessFilterCloudComponent().clickCustomiseFilterHeader(); + await processCloudDemoPage.editProcessFilterCloudComponent().setProperty('lastModifiedFrom', beforeDate); + await processCloudDemoPage.processListCloudComponent().getDataTable().waitTillContentLoaded(); + await processCloudDemoPage.processListCloudComponent().checkContentIsDisplayedByName(runningProcessInstance.entry.name); }); it('[C311318] Should be able to filter by lastModifiedFrom - does not display record when date = afterDate', async () => { - processCloudDemoPage.editProcessFilterCloudComponent().clickCustomiseFilterHeader().setProperty('lastModifiedFrom', afterDate); - processCloudDemoPage.processListCloudComponent().getDataTable().waitTillContentLoaded(); - processCloudDemoPage.processListCloudComponent().checkContentIsNotDisplayedByName(runningProcessInstance.entry.name); + await processCloudDemoPage.editProcessFilterCloudComponent().clickCustomiseFilterHeader(); + await processCloudDemoPage.editProcessFilterCloudComponent().setProperty('lastModifiedFrom', afterDate); + await processCloudDemoPage.processListCloudComponent().getDataTable().waitTillContentLoaded(); + await processCloudDemoPage.processListCloudComponent().checkContentIsNotDisplayedByName(runningProcessInstance.entry.name); }); it('[C311319] Should be able to filter by lastModifiedTo - displays record when date = currentDate', async () => { - processCloudDemoPage.editProcessFilterCloudComponent().clickCustomiseFilterHeader().setProperty('lastModifiedTo', currentDate); - processCloudDemoPage.processListCloudComponent().getDataTable().waitTillContentLoaded(); - processCloudDemoPage.processListCloudComponent().checkContentIsDisplayedByName(runningProcessInstance.entry.name); + await processCloudDemoPage.editProcessFilterCloudComponent().clickCustomiseFilterHeader(); + await processCloudDemoPage.editProcessFilterCloudComponent().setProperty('lastModifiedTo', currentDate); + await processCloudDemoPage.processListCloudComponent().getDataTable().waitTillContentLoaded(); + await processCloudDemoPage.processListCloudComponent().checkContentIsDisplayedByName(runningProcessInstance.entry.name); }); it('[C311319] Should be able to filter by lastModifiedTo - does not display record when date = beforeDate', async () => { - processCloudDemoPage.editProcessFilterCloudComponent().clickCustomiseFilterHeader().setProperty('lastModifiedTo', beforeDate); - processCloudDemoPage.processListCloudComponent().getDataTable().waitTillContentLoaded(); - processCloudDemoPage.processListCloudComponent().checkContentIsNotDisplayedByName(runningProcessInstance.entry.name); + await processCloudDemoPage.editProcessFilterCloudComponent().clickCustomiseFilterHeader(); + await processCloudDemoPage.editProcessFilterCloudComponent().setProperty('lastModifiedTo', beforeDate); + await processCloudDemoPage.processListCloudComponent().getDataTable().waitTillContentLoaded(); + await processCloudDemoPage.processListCloudComponent().checkContentIsNotDisplayedByName(runningProcessInstance.entry.name); }); it('[C311319] Should be able to filter by lastModifiedTo - displays record when date = afterDate', async () => { - processCloudDemoPage.editProcessFilterCloudComponent().clickCustomiseFilterHeader().setProperty('lastModifiedTo', afterDate); - processCloudDemoPage.processListCloudComponent().getDataTable().waitTillContentLoaded(); - processCloudDemoPage.processListCloudComponent().checkContentIsDisplayedByName(runningProcessInstance.entry.name); + await processCloudDemoPage.editProcessFilterCloudComponent().clickCustomiseFilterHeader(); + await processCloudDemoPage.editProcessFilterCloudComponent().setProperty('lastModifiedTo', afterDate); + await processCloudDemoPage.processListCloudComponent().getDataTable().waitTillContentLoaded(); + await processCloudDemoPage.processListCloudComponent().checkContentIsDisplayedByName(runningProcessInstance.entry.name); }); - it('[C311319] Should not display any processes when the lastModifiedFrom and lastModifiedTo are set to a future date', () => { - processCloudDemoPage.editProcessFilterCloudComponent().clickCustomiseFilterHeader().setProperty('lastModifiedFrom', afterDate); - processCloudDemoPage.editProcessFilterCloudComponent().setProperty('lastModifiedTo', afterDate); - processCloudDemoPage.processListCloudComponent().getDataTable().waitTillContentLoaded(); - expect(processListPage.checkProcessListTitleIsDisplayed()).toEqual('No Processes Found'); + it('[C311319] Should not display any processes when the lastModifiedFrom and lastModifiedTo are set to a future date', async () => { + await processCloudDemoPage.editProcessFilterCloudComponent().clickCustomiseFilterHeader(); + await processCloudDemoPage.editProcessFilterCloudComponent().setProperty('lastModifiedFrom', afterDate); + await processCloudDemoPage.editProcessFilterCloudComponent().setProperty('lastModifiedTo', afterDate); + await processCloudDemoPage.processListCloudComponent().getDataTable().waitTillContentLoaded(); + await expect(await processListPage.getDisplayedProcessListTitle()).toEqual('No Processes Found'); }); }); diff --git a/e2e/process-services-cloud/process-filters-cloud.e2e.ts b/e2e/process-services-cloud/process-filters-cloud.e2e.ts index ebaf31278c..b3dc44ba75 100644 --- a/e2e/process-services-cloud/process-filters-cloud.e2e.ts +++ b/e2e/process-services-cloud/process-filters-cloud.e2e.ts @@ -57,7 +57,7 @@ describe('Process filters cloud', () => { let runningProcess, completedProcess, testUser, groupInfo; const candidateBaseApp = resources.ACTIVITI7_APPS.CANDIDATE_BASE_APP.name; - beforeAll(async (done) => { + beforeAll(async () => { await apiService.login(browser.params.identityAdmin.email, browser.params.identityAdmin.password); identityService = new IdentityService(apiService); groupIdentityService = new GroupIdentityService(apiService); @@ -77,7 +77,7 @@ describe('Process filters cloud', () => { completedProcess = await processInstancesService.createProcessInstance(processDefinition.entry.key, candidateBaseApp); queryService = new QueryService(apiService); - await browser.driver.sleep(4000); // eventual consistency query + await browser.sleep(4000); // eventual consistency query const task = await queryService.getProcessInstanceTasks(completedProcess.entry.id, candidateBaseApp); tasksService = new TasksService(apiService); const claimedTask = await tasksService.claimTask(task.list.entries[0].entry.id, candidateBaseApp); @@ -88,62 +88,62 @@ describe('Process filters cloud', () => { browser.params.config.oauth2.host, browser.params.config.identityHost); await loginSSOPage.loginSSOIdentityService(testUser.email, testUser.password); - done(); + }, 5 * 60 * 1000); - afterAll(async (done) => { + afterAll(async () => { await apiService.login(browser.params.identityAdmin.email, browser.params.identityAdmin.password); await identityService.deleteIdentityUser(testUser.idIdentityService); - done(); + }); - beforeEach((done) => { - navigationBarPage.navigateToProcessServicesCloudPage(); - appListCloudComponent.checkApsContainer(); - appListCloudComponent.goToApp(candidateBaseApp); - tasksCloudDemoPage.taskListCloudComponent().checkTaskListIsLoaded(); - processCloudDemoPage.clickOnProcessFilters(); - done(); + beforeEach(async() => { + await navigationBarPage.navigateToProcessServicesCloudPage(); + await appListCloudComponent.checkApsContainer(); + await appListCloudComponent.goToApp(candidateBaseApp); + await tasksCloudDemoPage.taskListCloudComponent().checkTaskListIsLoaded(); + await processCloudDemoPage.clickOnProcessFilters(); + }); - it('[C290021] Should be able to view default filters', () => { - processCloudDemoPage.completedProcessesFilter().checkProcessFilterIsDisplayed(); - processCloudDemoPage.runningProcessesFilter().checkProcessFilterIsDisplayed(); - processCloudDemoPage.allProcessesFilter().checkProcessFilterIsDisplayed(); + it('[C290021] Should be able to view default filters', async () => { + await processCloudDemoPage.completedProcessesFilter().checkProcessFilterIsDisplayed(); + await processCloudDemoPage.runningProcessesFilter().checkProcessFilterIsDisplayed(); + await processCloudDemoPage.allProcessesFilter().checkProcessFilterIsDisplayed(); }); - it('[C290043] Should display process in Running Processes List when process is started', () => { - processCloudDemoPage.runningProcessesFilter().clickProcessFilter(); - processCloudDemoPage.runningProcessesFilter().checkProcessFilterIsDisplayed(); - expect(processCloudDemoPage.getActiveFilterName()).toBe('Running Processes'); - processCloudDemoPage.processListCloudComponent().checkContentIsDisplayedById(runningProcess.entry.id); + it('[C290043] Should display process in Running Processes List when process is started', async () => { + await processCloudDemoPage.runningProcessesFilter().clickProcessFilter(); + await processCloudDemoPage.runningProcessesFilter().checkProcessFilterIsDisplayed(); + await expect(await processCloudDemoPage.getActiveFilterName()).toBe('Running Processes'); + await processCloudDemoPage.processListCloudComponent().checkContentIsDisplayedById(runningProcess.entry.id); - processCloudDemoPage.completedProcessesFilter().clickProcessFilter(); - processCloudDemoPage.completedProcessesFilter().checkProcessFilterIsDisplayed(); - expect(processCloudDemoPage.getActiveFilterName()).toBe('Completed Processes'); - processCloudDemoPage.processListCloudComponent().checkContentIsNotDisplayedById(runningProcess.entry.id); + await processCloudDemoPage.completedProcessesFilter().clickProcessFilter(); + await processCloudDemoPage.completedProcessesFilter().checkProcessFilterIsDisplayed(); + await expect(await processCloudDemoPage.getActiveFilterName()).toBe('Completed Processes'); + await processCloudDemoPage.processListCloudComponent().checkContentIsNotDisplayedById(runningProcess.entry.id); - processCloudDemoPage.allProcessesFilter().clickProcessFilter(); - processCloudDemoPage.allProcessesFilter().checkProcessFilterIsDisplayed(); - expect(processCloudDemoPage.getActiveFilterName()).toBe('All Processes'); - processCloudDemoPage.processListCloudComponent().checkContentIsDisplayedById(runningProcess.entry.id); + await processCloudDemoPage.allProcessesFilter().clickProcessFilter(); + await processCloudDemoPage.allProcessesFilter().checkProcessFilterIsDisplayed(); + await expect(await processCloudDemoPage.getActiveFilterName()).toBe('All Processes'); + await processCloudDemoPage.processListCloudComponent().checkContentIsDisplayedById(runningProcess.entry.id); }); - it('[C290044] Should display process in Completed Processes List when process is completed', () => { - processCloudDemoPage.runningProcessesFilter().clickProcessFilter(); - processCloudDemoPage.runningProcessesFilter().checkProcessFilterIsDisplayed(); - expect(processCloudDemoPage.getActiveFilterName()).toBe('Running Processes'); - processCloudDemoPage.processListCloudComponent().checkContentIsNotDisplayedById(completedProcess.entry.id); + it('[C290044] Should display process in Completed Processes List when process is completed', async () => { + await processCloudDemoPage.runningProcessesFilter().clickProcessFilter(); + await processCloudDemoPage.runningProcessesFilter().checkProcessFilterIsDisplayed(); + await expect(await processCloudDemoPage.getActiveFilterName()).toBe('Running Processes'); + await processCloudDemoPage.processListCloudComponent().checkContentIsNotDisplayedById(completedProcess.entry.id); - processCloudDemoPage.completedProcessesFilter().clickProcessFilter(); - processCloudDemoPage.completedProcessesFilter().checkProcessFilterIsDisplayed(); - expect(processCloudDemoPage.getActiveFilterName()).toBe('Completed Processes'); - processCloudDemoPage.processListCloudComponent().checkContentIsDisplayedById(completedProcess.entry.id); + await processCloudDemoPage.completedProcessesFilter().clickProcessFilter(); + await processCloudDemoPage.completedProcessesFilter().checkProcessFilterIsDisplayed(); + await expect(await processCloudDemoPage.getActiveFilterName()).toBe('Completed Processes'); + await processCloudDemoPage.processListCloudComponent().checkContentIsDisplayedById(completedProcess.entry.id); - processCloudDemoPage.allProcessesFilter().clickProcessFilter(); - processCloudDemoPage.allProcessesFilter().checkProcessFilterIsDisplayed(); - expect(processCloudDemoPage.getActiveFilterName()).toBe('All Processes'); - processCloudDemoPage.processListCloudComponent().checkContentIsDisplayedById(completedProcess.entry.id); + await processCloudDemoPage.allProcessesFilter().clickProcessFilter(); + await processCloudDemoPage.allProcessesFilter().checkProcessFilterIsDisplayed(); + await expect(await processCloudDemoPage.getActiveFilterName()).toBe('All Processes'); + await processCloudDemoPage.processListCloudComponent().checkContentIsDisplayedById(completedProcess.entry.id); }); }); diff --git a/e2e/process-services-cloud/process-header-cloud.e2e.ts b/e2e/process-services-cloud/process-header-cloud.e2e.ts index af9ce23c23..6219227fac 100644 --- a/e2e/process-services-cloud/process-header-cloud.e2e.ts +++ b/e2e/process-services-cloud/process-header-cloud.e2e.ts @@ -68,7 +68,7 @@ describe('Process Header cloud component', () => { let runningProcess, runningCreatedDate, parentCompleteProcess, childCompleteProcess, completedCreatedDate; - beforeAll(async (done) => { + beforeAll(async () => { await apiService.login(browser.params.identityAdmin.email, browser.params.identityAdmin.password); identityService = new IdentityService(apiService); @@ -101,63 +101,63 @@ describe('Process Header cloud component', () => { browser.params.config.oauth2.host, browser.params.config.identityHost); await loginSSOPage.loginSSOIdentityService(testUser.email, testUser.password); - done(); + }); - afterAll(async(done) => { + afterAll(async() => { await apiService.login(browser.params.identityAdmin.email, browser.params.identityAdmin.password); await identityService.deleteIdentityUser(testUser.idIdentityService); - done(); + }); - beforeEach(() => { - navigationBarPage.navigateToProcessServicesCloudPage(); - appListCloudComponent.checkApsContainer(); + beforeEach(async () => { + await navigationBarPage.navigateToProcessServicesCloudPage(); + await appListCloudComponent.checkApsContainer(); }); - it('[C305010] Should display process details for running process', () => { - appListCloudComponent.goToApp(simpleApp); - tasksCloudDemoPage.taskListCloudComponent().checkTaskListIsLoaded(); - processCloudDemoPage.clickOnProcessFilters(); + it('[C305010] Should display process details for running process', async () => { + await appListCloudComponent.goToApp(simpleApp); + await tasksCloudDemoPage.taskListCloudComponent().checkTaskListIsLoaded(); + await processCloudDemoPage.clickOnProcessFilters(); - processCloudDemoPage.runningProcessesFilter().checkProcessFilterIsDisplayed(); - processCloudDemoPage.runningProcessesFilter().clickProcessFilter(); - expect(processCloudDemoPage.getActiveFilterName()).toBe('Running Processes'); - processCloudDemoPage.processListCloudComponent().checkContentIsDisplayedByName(runningProcess.entry.name); + await processCloudDemoPage.runningProcessesFilter().checkProcessFilterIsDisplayed(); + await processCloudDemoPage.runningProcessesFilter().clickProcessFilter(); + await expect(await processCloudDemoPage.getActiveFilterName()).toBe('Running Processes'); + await processCloudDemoPage.processListCloudComponent().checkContentIsDisplayedByName(runningProcess.entry.name); - processCloudDemoPage.processListCloudComponent().checkProcessListIsLoaded(); - processCloudDemoPage.processListCloudComponent().selectRow(runningProcess.entry.name); - expect(processHeaderCloudPage.getId()).toEqual(runningProcess.entry.id); - expect(processHeaderCloudPage.getName()).toEqual(runningProcess.entry.name); - expect(processHeaderCloudPage.getStatus()).toEqual(runningProcess.entry.status); - expect(processHeaderCloudPage.getInitiator()).toEqual(runningProcess.entry.initiator); - expect(processHeaderCloudPage.getStartDate()).toEqual(runningCreatedDate); - expect(processHeaderCloudPage.getParentId()).toEqual(CONSTANTS.PROCESS_DETAILS.NO_PARENT); - expect(processHeaderCloudPage.getBusinessKey()).toEqual(runningProcess.entry.businessKey); - expect(processHeaderCloudPage.getLastModified()).toEqual(runningCreatedDate); + await processCloudDemoPage.processListCloudComponent().checkProcessListIsLoaded(); + await processCloudDemoPage.processListCloudComponent().selectRow(runningProcess.entry.name); + await expect(await processHeaderCloudPage.getId()).toEqual(runningProcess.entry.id); + await expect(await processHeaderCloudPage.getName()).toEqual(runningProcess.entry.name); + await expect(await processHeaderCloudPage.getStatus()).toEqual(runningProcess.entry.status); + await expect(await processHeaderCloudPage.getInitiator()).toEqual(runningProcess.entry.initiator); + await expect(await processHeaderCloudPage.getStartDate()).toEqual(runningCreatedDate); + await expect(await processHeaderCloudPage.getParentId()).toEqual(CONSTANTS.PROCESS_DETAILS.NO_PARENT); + await expect(await processHeaderCloudPage.getBusinessKey()).toEqual(runningProcess.entry.businessKey); + await expect(await processHeaderCloudPage.getLastModified()).toEqual(runningCreatedDate); }); - it('[C305008] Should display process details for completed process', () => { - appListCloudComponent.goToApp(subProcessApp); - tasksCloudDemoPage.taskListCloudComponent().checkTaskListIsLoaded(); - processCloudDemoPage.clickOnProcessFilters(); + it('[C305008] Should display process details for completed process', async () => { + await appListCloudComponent.goToApp(subProcessApp); + await tasksCloudDemoPage.taskListCloudComponent().checkTaskListIsLoaded(); + await processCloudDemoPage.clickOnProcessFilters(); - processCloudDemoPage.completedProcessesFilter().checkProcessFilterIsDisplayed(); - processCloudDemoPage.completedProcessesFilter().clickProcessFilter(); - expect(processCloudDemoPage.getActiveFilterName()).toBe('Completed Processes'); - processCloudDemoPage.processListCloudComponent().checkContentIsDisplayedByName(childCompleteProcess.entry.name); + await processCloudDemoPage.completedProcessesFilter().checkProcessFilterIsDisplayed(); + await processCloudDemoPage.completedProcessesFilter().clickProcessFilter(); + await expect(await processCloudDemoPage.getActiveFilterName()).toBe('Completed Processes'); + await processCloudDemoPage.processListCloudComponent().checkContentIsDisplayedByName(childCompleteProcess.entry.name); - processCloudDemoPage.processListCloudComponent().checkProcessListIsLoaded(); - processCloudDemoPage.processListCloudComponent().selectRowById(childCompleteProcess.entry.id); + await processCloudDemoPage.processListCloudComponent().checkProcessListIsLoaded(); + await processCloudDemoPage.processListCloudComponent().selectRowById(childCompleteProcess.entry.id); - expect(processHeaderCloudPage.getId()).toEqual(childCompleteProcess.entry.id); - expect(processHeaderCloudPage.getName()).toEqual(CONSTANTS.PROCESS_DETAILS.NO_NAME); - expect(processHeaderCloudPage.getStatus()).toEqual(childCompleteProcess.entry.status); - expect(processHeaderCloudPage.getInitiator()).toEqual(childCompleteProcess.entry.initiator); - expect(processHeaderCloudPage.getStartDate()).toEqual(completedCreatedDate); - expect(processHeaderCloudPage.getParentId()).toEqual(childCompleteProcess.entry.parentId); - expect(processHeaderCloudPage.getBusinessKey()).toEqual(CONSTANTS.PROCESS_DETAILS.NO_BUSINESS_KEY); - expect(processHeaderCloudPage.getLastModified()).toEqual(completedCreatedDate); + await expect(await processHeaderCloudPage.getId()).toEqual(childCompleteProcess.entry.id); + await expect(await processHeaderCloudPage.getName()).toEqual(CONSTANTS.PROCESS_DETAILS.NO_NAME); + await expect(await processHeaderCloudPage.getStatus()).toEqual(childCompleteProcess.entry.status); + await expect(await processHeaderCloudPage.getInitiator()).toEqual(childCompleteProcess.entry.initiator); + await expect(await processHeaderCloudPage.getStartDate()).toEqual(completedCreatedDate); + await expect(await processHeaderCloudPage.getParentId()).toEqual(childCompleteProcess.entry.parentId); + await expect(await processHeaderCloudPage.getBusinessKey()).toEqual(CONSTANTS.PROCESS_DETAILS.NO_BUSINESS_KEY); + await expect(await processHeaderCloudPage.getLastModified()).toEqual(completedCreatedDate); }); }); diff --git a/e2e/process-services-cloud/process-list-cloud-component.e2e.ts b/e2e/process-services-cloud/process-list-cloud-component.e2e.ts index 1c082a0ae9..17263352ac 100644 --- a/e2e/process-services-cloud/process-list-cloud-component.e2e.ts +++ b/e2e/process-services-cloud/process-list-cloud-component.e2e.ts @@ -51,7 +51,7 @@ describe('Process list cloud', () => { let jsonFile; let runningProcess; - beforeAll(async (done) => { + beforeAll(async () => { await apiService.login(browser.params.identityAdmin.email, browser.params.identityAdmin.password); identityService = new IdentityService(apiService); groupIdentityService = new GroupIdentityService(apiService); @@ -73,46 +73,46 @@ describe('Process list cloud', () => { browser.params.config.oauth2.host, browser.params.config.identityHost); await loginSSOPage.loginSSOIdentityService(testUser.email, testUser.password); - done(); + }); - afterAll(async (done) => { + afterAll(async () => { await apiService.login(browser.params.identityAdmin.email, browser.params.identityAdmin.password); await identityService.deleteIdentityUser(testUser.idIdentityService); - done(); + }); - beforeEach(async (done) => { + beforeEach(async () => { const processListCloudConfiguration = new ProcessListCloudConfiguration(); jsonFile = processListCloudConfiguration.getConfiguration(); await LocalStorageUtil.setConfigField('adf-cloud-process-list', JSON.stringify(jsonFile)); - navigationBarPage.navigateToProcessServicesCloudPage(); - appListCloudComponent.checkApsContainer(); - appListCloudComponent.goToApp(candidateBaseApp); - processCloudDemoPage.clickOnProcessFilters(); - processCloudDemoPage.runningProcessesFilter().checkProcessFilterIsDisplayed(); - processCloudDemoPage.runningProcessesFilter().clickProcessFilter(); - expect(processCloudDemoPage.getActiveFilterName()).toBe('Running Processes'); - processCloudDemoPage.processListCloudComponent().checkProcessListIsLoaded(); - processCloudDemoPage.processListCloudComponent().checkContentIsDisplayedById(runningProcess.entry.id); - done(); + await navigationBarPage.navigateToProcessServicesCloudPage(); + await appListCloudComponent.checkApsContainer(); + await appListCloudComponent.goToApp(candidateBaseApp); + await processCloudDemoPage.clickOnProcessFilters(); + await processCloudDemoPage.runningProcessesFilter().checkProcessFilterIsDisplayed(); + await processCloudDemoPage.runningProcessesFilter().clickProcessFilter(); + await expect(await processCloudDemoPage.getActiveFilterName()).toBe('Running Processes'); + await processCloudDemoPage.processListCloudComponent().checkProcessListIsLoaded(); + await processCloudDemoPage.processListCloudComponent().checkContentIsDisplayedById(runningProcess.entry.id); + }); it('[C291997] Should be able to change the default columns', async () => { - expect(processCloudDemoPage.processListCloudComponent().getDataTable().getNumberOfColumns()).toBe(10); - processCloudDemoPage.processListCloudComponent().getDataTable().checkColumnIsDisplayed('id'); - processCloudDemoPage.processListCloudComponent().getDataTable().checkColumnIsDisplayed('name'); - processCloudDemoPage.processListCloudComponent().getDataTable().checkColumnIsDisplayed('status'); - processCloudDemoPage.processListCloudComponent().getDataTable().checkColumnIsDisplayed('startDate'); - processCloudDemoPage.processListCloudComponent().getDataTable().checkColumnIsDisplayed('appName'); - processCloudDemoPage.processListCloudComponent().getDataTable().checkColumnIsDisplayed('businessKey'); - processCloudDemoPage.processListCloudComponent().getDataTable().checkColumnIsDisplayed('initiator'); - processCloudDemoPage.processListCloudComponent().getDataTable().checkColumnIsDisplayed('lastModified'); - processCloudDemoPage.processListCloudComponent().getDataTable().checkColumnIsDisplayed('processDefinitionId'); - processCloudDemoPage.processListCloudComponent().getDataTable().checkColumnIsDisplayed('processDefinitionKey'); + await expect(await processCloudDemoPage.processListCloudComponent().getDataTable().getNumberOfColumns()).toBe(10); + await processCloudDemoPage.processListCloudComponent().getDataTable().checkColumnIsDisplayed('id'); + await processCloudDemoPage.processListCloudComponent().getDataTable().checkColumnIsDisplayed('name'); + await processCloudDemoPage.processListCloudComponent().getDataTable().checkColumnIsDisplayed('status'); + await processCloudDemoPage.processListCloudComponent().getDataTable().checkColumnIsDisplayed('startDate'); + await processCloudDemoPage.processListCloudComponent().getDataTable().checkColumnIsDisplayed('appName'); + await processCloudDemoPage.processListCloudComponent().getDataTable().checkColumnIsDisplayed('businessKey'); + await processCloudDemoPage.processListCloudComponent().getDataTable().checkColumnIsDisplayed('initiator'); + await processCloudDemoPage.processListCloudComponent().getDataTable().checkColumnIsDisplayed('lastModified'); + await processCloudDemoPage.processListCloudComponent().getDataTable().checkColumnIsDisplayed('processDefinitionId'); + await processCloudDemoPage.processListCloudComponent().getDataTable().checkColumnIsDisplayed('processDefinitionKey'); }); diff --git a/e2e/process-services-cloud/process-list-selection-cloud.e2e.ts b/e2e/process-services-cloud/process-list-selection-cloud.e2e.ts index 3de28281db..ae74abe637 100644 --- a/e2e/process-services-cloud/process-list-selection-cloud.e2e.ts +++ b/e2e/process-services-cloud/process-list-selection-cloud.e2e.ts @@ -47,7 +47,7 @@ describe('Process list cloud', () => { const noOfProcesses = 3; const processInstances = []; - beforeAll(async (done) => { + beforeAll(async () => { await apiService.login(browser.params.identityAdmin.email, browser.params.identityAdmin.password); identityService = new IdentityService(apiService); @@ -73,97 +73,105 @@ describe('Process list cloud', () => { browser.params.config.identityHost); await loginSSOPage.loginSSOIdentityService(testUser.email, testUser.password); - done(); }); - afterAll(async(done) => { + afterAll(async() => { await apiService.login(browser.params.identityAdmin.email, browser.params.identityAdmin.password); await identityService.deleteIdentityUser(testUser.idIdentityService); - done(); + }); - beforeEach(() => { - navigationBarPage.navigateToProcessServicesCloudPage(); - expect(processInstances.length).toEqual(noOfProcesses, 'Wrong preconditions'); - appListCloudComponent.checkApsContainer(); - appListCloudComponent.goToApp(simpleApp); - processCloudDemoPage.clickOnProcessFilters(); - processCloudDemoPage.runningProcessesFilter().clickProcessFilter(); - expect(processCloudDemoPage.getActiveFilterName()).toBe('Running Processes'); - tasksCloudDemoPage.clickSettingsButton().disableDisplayProcessDetails(); - tasksCloudDemoPage.clickAppButton(); + beforeEach(async () => { + await navigationBarPage.navigateToProcessServicesCloudPage(); + await expect(processInstances.length).toEqual(noOfProcesses, 'Wrong preconditions'); + await appListCloudComponent.checkApsContainer(); + await appListCloudComponent.goToApp(simpleApp); + await processCloudDemoPage.clickOnProcessFilters(); + await processCloudDemoPage.runningProcessesFilter().clickProcessFilter(); + await expect(await processCloudDemoPage.getActiveFilterName()).toBe('Running Processes'); + await tasksCloudDemoPage.clickSettingsButton(); + await tasksCloudDemoPage.disableDisplayProcessDetails(); + await tasksCloudDemoPage.clickAppButton(); }); - it('[C297469] Should NOT be able to select a process when settings are set to None', () => { - tasksCloudDemoPage.clickSettingsButton().selectSelectionMode('None'); - tasksCloudDemoPage.clickAppButton(); - processCloudDemoPage.isProcessFiltersListVisible(); - expect(processCloudDemoPage.getActiveFilterName()).toEqual('Running Processes'); + it('[C297469] Should NOT be able to select a process when settings are set to None', async () => { + await tasksCloudDemoPage.clickSettingsButton(); + await tasksCloudDemoPage.selectSelectionMode('None'); + await tasksCloudDemoPage.clickAppButton(); + await processCloudDemoPage.isProcessFiltersListVisible(); + await expect(await processCloudDemoPage.getActiveFilterName()).toEqual('Running Processes'); - processCloudDemoPage.processListCloudComponent().selectRowById(processInstances[0]); - processCloudDemoPage.processListCloudComponent().getDataTable().checkNoRowIsSelected(); + await processCloudDemoPage.processListCloudComponent().selectRowById(processInstances[0]); + await processCloudDemoPage.processListCloudComponent().getDataTable().checkNoRowIsSelected(); }); - it('[C297468] Should be able to select only one process when settings are set to Single', () => { - tasksCloudDemoPage.clickSettingsButton().selectSelectionMode('Single'); - tasksCloudDemoPage.clickAppButton(); - processCloudDemoPage.isProcessFiltersListVisible(); - expect(processCloudDemoPage.getActiveFilterName()).toEqual('Running Processes'); + it('[C297468] Should be able to select only one process when settings are set to Single', async () => { + await tasksCloudDemoPage.clickSettingsButton(); + await tasksCloudDemoPage.selectSelectionMode('Single'); + await tasksCloudDemoPage.clickAppButton(); + await processCloudDemoPage.isProcessFiltersListVisible(); + await expect(await processCloudDemoPage.getActiveFilterName()).toEqual('Running Processes'); - processCloudDemoPage.processListCloudComponent().selectRowById(processInstances[0]); - processCloudDemoPage.processListCloudComponent().checkRowIsSelectedById(processInstances[0]); - expect(processCloudDemoPage.processListCloudComponent().getDataTable().getNumberOfSelectedRows()).toEqual(1); - processCloudDemoPage.processListCloudComponent().selectRowById(processInstances[1]); - processCloudDemoPage.processListCloudComponent().checkRowIsSelectedById(processInstances[1]); - expect(processCloudDemoPage.processListCloudComponent().getDataTable().getNumberOfSelectedRows()).toEqual(1); + await processCloudDemoPage.processListCloudComponent().selectRowById(processInstances[0]); + await processCloudDemoPage.processListCloudComponent().checkRowIsSelectedById(processInstances[0]); + await expect(await processCloudDemoPage.processListCloudComponent().getDataTable().getNumberOfSelectedRows()).toEqual(1); + await processCloudDemoPage.processListCloudComponent().selectRowById(processInstances[1]); + await processCloudDemoPage.processListCloudComponent().checkRowIsSelectedById(processInstances[1]); + await expect(await processCloudDemoPage.processListCloudComponent().getDataTable().getNumberOfSelectedRows()).toEqual(1); }); - it('[C297470] Should be able to select multiple processes using keyboard', () => { - tasksCloudDemoPage.clickSettingsButton().selectSelectionMode('Multiple'); - tasksCloudDemoPage.clickAppButton(); - processCloudDemoPage.isProcessFiltersListVisible(); - expect(processCloudDemoPage.getActiveFilterName()).toEqual('Running Processes'); + it('[C297470] Should be able to select multiple processes using keyboard', async () => { + await tasksCloudDemoPage.clickSettingsButton(); + await tasksCloudDemoPage.selectSelectionMode('Multiple'); + await tasksCloudDemoPage.clickAppButton(); + await processCloudDemoPage.isProcessFiltersListVisible(); + await expect(await processCloudDemoPage.getActiveFilterName()).toEqual('Running Processes'); - processCloudDemoPage.processListCloudComponent().selectRowById(processInstances[0]); - processCloudDemoPage.processListCloudComponent().checkRowIsSelectedById(processInstances[0]); - processCloudDemoPage.processListCloudComponent().selectRowWithKeyboard(processInstances[1]); - processCloudDemoPage.processListCloudComponent().checkRowIsSelectedById(processInstances[0]); - processCloudDemoPage.processListCloudComponent().checkRowIsSelectedById(processInstances[1]); - processCloudDemoPage.processListCloudComponent().checkRowIsNotSelectedById(processInstances[2]); - expect(processCloudDemoPage.processListCloudComponent().getDataTable().getNumberOfSelectedRows()).toEqual(2); + await processCloudDemoPage.processListCloudComponent().selectRowById(processInstances[0]); + await processCloudDemoPage.processListCloudComponent().checkRowIsSelectedById(processInstances[0]); + await processCloudDemoPage.processListCloudComponent().selectRowWithKeyboard(processInstances[1]); + await processCloudDemoPage.processListCloudComponent().checkRowIsSelectedById(processInstances[0]); + await processCloudDemoPage.processListCloudComponent().checkRowIsSelectedById(processInstances[1]); + await processCloudDemoPage.processListCloudComponent().checkRowIsNotSelectedById(processInstances[2]); + await expect(await processCloudDemoPage.processListCloudComponent().getDataTable().getNumberOfSelectedRows()).toEqual(2); }); - it('[C297465] Should be able to select multiple processes using checkboxes', () => { - tasksCloudDemoPage.clickSettingsButton().enableMultiSelection(); - tasksCloudDemoPage.clickAppButton(); - processCloudDemoPage.isProcessFiltersListVisible(); - expect(processCloudDemoPage.getActiveFilterName()).toEqual('Running Processes'); + it('[C297465] Should be able to select multiple processes using checkboxes', async () => { + await tasksCloudDemoPage.clickSettingsButton(); + await tasksCloudDemoPage.enableMultiSelection(); + await tasksCloudDemoPage.clickAppButton(); + await processCloudDemoPage.isProcessFiltersListVisible(); + await expect(await processCloudDemoPage.getActiveFilterName()).toEqual('Running Processes'); - processCloudDemoPage.processListCloudComponent().checkCheckboxById(processInstances[0]); - processCloudDemoPage.processListCloudComponent().checkRowIsCheckedById(processInstances[0]); - processCloudDemoPage.processListCloudComponent().checkCheckboxById(processInstances[1]); - processCloudDemoPage.processListCloudComponent().checkRowIsCheckedById(processInstances[1]); - processCloudDemoPage.processListCloudComponent().checkRowIsNotCheckedById(processInstances[2]); - processCloudDemoPage.processListCloudComponent().checkCheckboxById(processInstances[1]); - processCloudDemoPage.processListCloudComponent().checkRowIsNotCheckedById(processInstances[1]); - processCloudDemoPage.processListCloudComponent().checkRowIsCheckedById(processInstances[0]); + await processCloudDemoPage.processListCloudComponent().checkCheckboxById(processInstances[0]); + await processCloudDemoPage.processListCloudComponent().checkRowIsCheckedById(processInstances[0]); + await processCloudDemoPage.processListCloudComponent().checkCheckboxById(processInstances[1]); + await processCloudDemoPage.processListCloudComponent().checkRowIsCheckedById(processInstances[1]); + await processCloudDemoPage.processListCloudComponent().checkRowIsNotCheckedById(processInstances[2]); + await processCloudDemoPage.processListCloudComponent().checkCheckboxById(processInstances[1]); + await processCloudDemoPage.processListCloudComponent().checkRowIsNotCheckedById(processInstances[1]); + await processCloudDemoPage.processListCloudComponent().checkRowIsCheckedById(processInstances[0]); }); - it('[C299125] Should be possible to select all the rows when multiselect is true', () => { - tasksCloudDemoPage.clickSettingsButton().enableMultiSelection(); - tasksCloudDemoPage.clickAppButton(); - processCloudDemoPage.isProcessFiltersListVisible(); - expect(processCloudDemoPage.getActiveFilterName()).toEqual('Running Processes'); + it('[C299125] Should be possible to select all the rows when multiselect is true', async () => { + await tasksCloudDemoPage.clickSettingsButton(); + await tasksCloudDemoPage.enableMultiSelection(); + await tasksCloudDemoPage.clickAppButton(); + await processCloudDemoPage.isProcessFiltersListVisible(); + await expect(await processCloudDemoPage.getActiveFilterName()).toEqual('Running Processes'); - processCloudDemoPage.processListCloudComponent().getDataTable().checkAllRowsButtonIsDisplayed().checkAllRows(); - processCloudDemoPage.processListCloudComponent().checkRowIsCheckedById(processInstances[0]); - processCloudDemoPage.processListCloudComponent().checkRowIsCheckedById(processInstances[1]); - processCloudDemoPage.processListCloudComponent().checkRowIsCheckedById(processInstances[2]); + await processCloudDemoPage.processListCloudComponent().getDataTable().checkAllRowsButtonIsDisplayed(); + await processCloudDemoPage.processListCloudComponent().getDataTable().checkAllRows(); + await processCloudDemoPage.processListCloudComponent().checkRowIsCheckedById(processInstances[0]); + await processCloudDemoPage.processListCloudComponent().checkRowIsCheckedById(processInstances[1]); + await processCloudDemoPage.processListCloudComponent().checkRowIsCheckedById(processInstances[2]); - processCloudDemoPage.processListCloudComponent().getDataTable().checkAllRowsButtonIsDisplayed().uncheckAllRows(); - processCloudDemoPage.processListCloudComponent().checkRowIsNotCheckedById(processInstances[0]); - processCloudDemoPage.processListCloudComponent().checkRowIsNotCheckedById(processInstances[1]); - processCloudDemoPage.processListCloudComponent().checkRowIsNotCheckedById(processInstances[2]); + await processCloudDemoPage.processListCloudComponent().getDataTable().checkAllRowsButtonIsDisplayed(); + await processCloudDemoPage.processListCloudComponent().getDataTable().uncheckAllRows(); + + await processCloudDemoPage.processListCloudComponent().checkRowIsNotCheckedById(processInstances[0]); + await processCloudDemoPage.processListCloudComponent().checkRowIsNotCheckedById(processInstances[1]); + await processCloudDemoPage.processListCloudComponent().checkRowIsNotCheckedById(processInstances[2]); }); }); diff --git a/e2e/process-services-cloud/start-process-cloud.e2e.ts b/e2e/process-services-cloud/start-process-cloud.e2e.ts index ce5a45a8cf..f083d1e15b 100644 --- a/e2e/process-services-cloud/start-process-cloud.e2e.ts +++ b/e2e/process-services-cloud/start-process-cloud.e2e.ts @@ -17,10 +17,10 @@ import { ApiService, GroupIdentityService, IdentityService, LoginSSOPage, SettingsPage } from '@alfresco/adf-testing'; import { AppListCloudPage, StartProcessCloudPage } from '@alfresco/adf-testing'; -import { browser } from 'protractor'; +import { browser, protractor } from 'protractor'; import { NavigationBarPage } from '../pages/adf/navigationBarPage'; import { ProcessCloudDemoPage } from '../pages/adf/demo-shell/process-services/processCloudDemoPage'; -import { StringUtil } from '@alfresco/adf-testing'; +import { StringUtil, BrowserActions } from '@alfresco/adf-testing'; import resources = require('../util/resources'); describe('Start Process', () => { @@ -46,7 +46,7 @@ describe('Start Process', () => { let groupIdentityService: GroupIdentityService; let testUser, groupInfo; - beforeAll(async (done) => { + beforeAll(async () => { await apiService.login(browser.params.identityAdmin.email, browser.params.identityAdmin.password); identityService = new IdentityService(apiService); groupIdentityService = new GroupIdentityService(apiService); @@ -59,59 +59,61 @@ describe('Start Process', () => { browser.params.config.identityHost); await loginSSOPage.loginSSOIdentityService(testUser.email, testUser.password); - navigationBarPage.navigateToProcessServicesCloudPage(); - appListCloudComponent.checkApsContainer(); - done(); + await navigationBarPage.navigateToProcessServicesCloudPage(); + await appListCloudComponent.checkApsContainer(); + }); - afterAll(async(done) => { + afterAll(async () => { await apiService.login(browser.params.identityAdmin.email, browser.params.identityAdmin.password); await identityService.deleteIdentityUser(testUser.idIdentityService); - done(); + }); - afterEach((done) => { - navigationBarPage.navigateToProcessServicesCloudPage(); - appListCloudComponent.checkApsContainer(); - done(); + afterEach(async () => { + await navigationBarPage.navigateToProcessServicesCloudPage(); + await appListCloudComponent.checkApsContainer(); }); - it('[C291857] Should be possible to cancel a process', () => { - appListCloudComponent.checkAppIsDisplayed(simpleApp); - appListCloudComponent.goToApp(simpleApp); - processCloudDemoPage.openNewProcessForm(); - startProcessPage.clearField(startProcessPage.processNameInput); - startProcessPage.blur(startProcessPage.processNameInput); - startProcessPage.checkValidationErrorIsDisplayed(requiredError); - expect(startProcessPage.checkStartProcessButtonIsEnabled()).toBe(false); - startProcessPage.clickCancelProcessButton(); + it('[C291857] Should be possible to cancel a process', async () => { + await appListCloudComponent.checkAppIsDisplayed(simpleApp); + await appListCloudComponent.goToApp(simpleApp); + await processCloudDemoPage.openNewProcessForm(); + await startProcessPage.clearField(startProcessPage.processNameInput); + await browser.actions().sendKeys(protractor.Key.ENTER).perform(); + + await startProcessPage.checkValidationErrorIsDisplayed(requiredError); + await expect(await startProcessPage.checkStartProcessButtonIsEnabled()).toBe(false); + + await BrowserActions.closeMenuAndDialogs(); + await startProcessPage.clickCancelProcessButton(); }); - it('[C291842] Should be displayed an error message if process name exceed 255 characters', () => { - appListCloudComponent.checkAppIsDisplayed(simpleApp); - appListCloudComponent.goToApp(simpleApp); - processCloudDemoPage.openNewProcessForm(); - startProcessPage.enterProcessName(processName255Characters); - expect(startProcessPage.checkStartProcessButtonIsEnabled()).toBe(true); + it('[C291842] Should be displayed an error message if process name exceed 255 characters', async () => { + await appListCloudComponent.checkAppIsDisplayed(simpleApp); + await appListCloudComponent.goToApp(simpleApp); + await processCloudDemoPage.openNewProcessForm(); + await startProcessPage.enterProcessName(processName255Characters); + await expect(await startProcessPage.checkStartProcessButtonIsEnabled()).toBe(true); - startProcessPage.enterProcessName(processNameBiggerThen255Characters); - startProcessPage.blur(startProcessPage.processNameInput); - startProcessPage.checkValidationErrorIsDisplayed(lengthValidationError); - expect(startProcessPage.checkStartProcessButtonIsEnabled()).toBe(false); + await startProcessPage.enterProcessName(processNameBiggerThen255Characters); + await startProcessPage.checkValidationErrorIsDisplayed(lengthValidationError); + await expect(await startProcessPage.checkStartProcessButtonIsEnabled()).toBe(false); }); - it('[C291860] Should be able to start a process', () => { - appListCloudComponent.checkAppIsDisplayed(simpleApp); - appListCloudComponent.goToApp(simpleApp); - processCloudDemoPage.openNewProcessForm(); - startProcessPage.clearField(startProcessPage.processNameInput); - startProcessPage.enterProcessName(processName); - expect(startProcessPage.checkStartProcessButtonIsEnabled()).toBe(true); - startProcessPage.clickStartProcessButton(); + it('[C291860] Should be able to start a process', async () => { + await appListCloudComponent.checkAppIsDisplayed(simpleApp); + await appListCloudComponent.goToApp(simpleApp); + await processCloudDemoPage.openNewProcessForm(); + await startProcessPage.clearField(startProcessPage.processNameInput); + await startProcessPage.enterProcessName(processName); + await expect(await startProcessPage.checkStartProcessButtonIsEnabled()).toBe(true); + await startProcessPage.clickStartProcessButton(); + await processCloudDemoPage.clickOnProcessFilters(); - processCloudDemoPage.runningProcessesFilter().clickProcessFilter(); - expect(processCloudDemoPage.getActiveFilterName()).toBe('Running Processes'); - processCloudDemoPage.processListCloudComponent().checkContentIsDisplayedByName(processName); + await processCloudDemoPage.runningProcessesFilter().clickProcessFilter(); + await expect(await processCloudDemoPage.getActiveFilterName()).toBe('Running Processes'); + await processCloudDemoPage.processListCloudComponent().checkContentIsDisplayedByName(processName); }); diff --git a/e2e/process-services-cloud/start-task-form-cloud.e2e.ts b/e2e/process-services-cloud/start-task-form-cloud.e2e.ts index bcbc5a80d3..8c886264fd 100644 --- a/e2e/process-services-cloud/start-task-form-cloud.e2e.ts +++ b/e2e/process-services-cloud/start-task-form-cloud.e2e.ts @@ -15,7 +15,7 @@ * limitations under the License. */ -import { browser } from 'protractor'; +import { browser, protractor } from 'protractor'; import { NavigationBarPage } from '../pages/adf/navigationBarPage'; import { TasksCloudDemoPage } from '../pages/adf/demo-shell/process-services/tasksCloudDemoPage'; import { @@ -101,8 +101,7 @@ describe('Start Task Form', () => { const folderName = StringUtil.generateRandomString(5); let uploadedFolder; - beforeAll(async (done) => { - + beforeAll(async () => { await apiService.login(browser.params.identityAdmin.email, browser.params.identityAdmin.password); identityService = new IdentityService(apiService); @@ -166,136 +165,140 @@ describe('Start Task Form', () => { browser.params.config.oauth2.clientId); await loginSSOPage.loginSSOIdentityService(testUser.email, testUser.password); await LocalStorageUtil.setConfigField('adf-cloud-start-process', JSON.stringify(startProcessCloudConfig)); - done(); }); - afterAll(async (done) => { - await this.alfrescoJsApi.login(browser.params.identityAdmin.email, browser.params.identityAdmin.password); + afterAll(async () => { await uploadActions.deleteFileOrFolder(uploadedFolder.entry.id); await apiService.login(testUser.email, testUser.password); const tasksService = new TasksService(apiService); const standAloneTaskId = await tasksService.getTaskId(standaloneTaskName, candidateBaseApp); await tasksService.deleteTask(standAloneTaskId, candidateBaseApp); + + await apiService.login(browser.params.identityAdmin.email, browser.params.identityAdmin.password); await identityService.deleteIdentityUser(testUser.idIdentityService); - done(); }); describe('StandaloneTask with form', () => { - beforeEach(() => { - navigationBarPage.navigateToProcessServicesCloudPage(); - appListCloudComponent.checkApsContainer(); - appListCloudComponent.checkAppIsDisplayed(candidateBaseApp); - appListCloudComponent.goToApp(candidateBaseApp); - tasksCloudDemoPage.taskListCloudComponent().getDataTable().waitForTableBody(); + beforeEach(async () => { + await navigationBarPage.navigateToProcessServicesCloudPage(); + await appListCloudComponent.checkApsContainer(); + await appListCloudComponent.checkAppIsDisplayed(candidateBaseApp); + await appListCloudComponent.goToApp(candidateBaseApp); + await tasksCloudDemoPage.taskListCloudComponent().getDataTable().waitForTableBody(); }); - it('[C307976] Should be able to start and save a task with a form', () => { - tasksCloudDemoPage.openNewTaskForm(); - startTask.checkFormIsDisplayed(); - startTask.addName(standaloneTaskName); - startTask.selectFormDefinition('StartEventForm'); - startTask.clickStartButton(); - tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(standaloneTaskName); - tasksCloudDemoPage.taskListCloudComponent().selectRow(standaloneTaskName); - taskFormCloudComponent.formFields().checkFormIsDisplayed(); - taskFormCloudComponent.formFields().checkWidgetIsVisible('FirstName'); - taskFormCloudComponent.formFields().checkWidgetIsVisible('Number07vyx9'); - widget.textWidget().setValue('FirstName', 'sample'); - widget.numberWidget().setFieldValue('Number07vyx9', 26); - taskFormCloudComponent.checkSaveButtonIsDisplayed().clickSaveButton(); - expect(widget.textWidget().getFieldValue('FirstName')).toBe('sample'); - expect(widget.numberWidget().getFieldValue('Number07vyx9')).toBe('26'); + it('[C307976] Should be able to start and save a task with a form', async () => { + await tasksCloudDemoPage.openNewTaskForm(); + await startTask.checkFormIsDisplayed(); + await startTask.addName(standaloneTaskName); + await startTask.selectFormDefinition('StartEventForm'); + await startTask.clickStartButton(); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(standaloneTaskName); + await tasksCloudDemoPage.taskListCloudComponent().selectRow(standaloneTaskName); + await taskFormCloudComponent.formFields().checkFormIsDisplayed(); + await taskFormCloudComponent.formFields().checkWidgetIsVisible('FirstName'); + await taskFormCloudComponent.formFields().checkWidgetIsVisible('Number07vyx9'); + await widget.textWidget().setValue('FirstName', 'sample'); + await widget.numberWidget().setFieldValue('Number07vyx9', 26); + await taskFormCloudComponent.checkSaveButtonIsDisplayed(); + await taskFormCloudComponent.clickSaveButton(); + await expect(await widget.textWidget().getFieldValue('FirstName')).toBe('sample'); + await expect(await widget.numberWidget().getFieldValue('Number07vyx9')).toBe('26'); - navigationBarPage.navigateToProcessServicesCloudPage(); - appListCloudComponent.checkApsContainer(); - appListCloudComponent.checkAppIsDisplayed(candidateBaseApp); - appListCloudComponent.goToApp(candidateBaseApp); - tasksCloudDemoPage.taskListCloudComponent().getDataTable().waitForTableBody(); + await navigationBarPage.navigateToProcessServicesCloudPage(); + await appListCloudComponent.checkApsContainer(); + await appListCloudComponent.checkAppIsDisplayed(candidateBaseApp); + await appListCloudComponent.goToApp(candidateBaseApp); + await tasksCloudDemoPage.taskListCloudComponent().getDataTable().waitForTableBody(); - expect(tasksCloudDemoPage.getActiveFilterName()).toBe('My Tasks'); - tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(standaloneTaskName); - tasksCloudDemoPage.taskListCloudComponent().selectRow(standaloneTaskName); - taskFormCloudComponent.formFields().checkFormIsDisplayed(); - expect(widget.textWidget().getFieldValue('FirstName')).toBe('sample'); - expect(widget.numberWidget().getFieldValue('Number07vyx9')).toBe('26'); - taskFormCloudComponent.checkCompleteButtonIsDisplayed(); + await expect(await tasksCloudDemoPage.getActiveFilterName()).toBe('My Tasks'); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(standaloneTaskName); + await tasksCloudDemoPage.taskListCloudComponent().selectRow(standaloneTaskName); + await taskFormCloudComponent.formFields().checkFormIsDisplayed(); + await expect(await widget.textWidget().getFieldValue('FirstName')).toBe('sample'); + await expect(await widget.numberWidget().getFieldValue('Number07vyx9')).toBe('26'); + await taskFormCloudComponent.checkCompleteButtonIsDisplayed(); }); - it('[C311428] Should display the Standalone forms based on the flag set', () => { - tasksCloudDemoPage.openNewTaskForm(); - startTask.checkFormIsDisplayed(); - startTask.checkFormDefinitionIsNotDisplayed('UploadFileForm'); - startTask.checkFormDefinitionIsDisplayed('StartEventForm'); - startTask.checkFormDefinitionIsDisplayed('FormToTestValidations'); + it('[C311428] Should display the Standalone forms based on the flag set', async () => { + await tasksCloudDemoPage.openNewTaskForm(); + await startTask.checkFormIsDisplayed(); + await startTask.checkFormDefinitionIsNotDisplayed('UploadFileForm'); + await startTask.checkFormDefinitionIsDisplayed('StartEventForm'); + await startTask.checkFormDefinitionIsDisplayed('FormToTestValidations'); }); }); - describe('Start a process with a start event form', () => { + describe('Start a process with a start event form', async () => { - beforeEach(() => { - navigationBarPage.navigateToProcessServicesCloudPage(); - appListCloudComponent.checkApsContainer(); - appListCloudComponent.checkAppIsDisplayed(candidateBaseApp); - appListCloudComponent.goToApp(candidateBaseApp); - processCloudDemoPage.openNewProcessForm(); - startProcessPage.clearField(startProcessPage.processNameInput); - startProcessPage.enterProcessName(startEventFormProcess); - startProcessPage.selectFromProcessDropdown('processwithstarteventform'); - startProcessPage.formFields().checkFormIsDisplayed(); + beforeEach(async () => { + await navigationBarPage.navigateToProcessServicesCloudPage(); + await appListCloudComponent.checkApsContainer(); + await appListCloudComponent.checkAppIsDisplayed(candidateBaseApp); + await appListCloudComponent.goToApp(candidateBaseApp); + await processCloudDemoPage.openNewProcessForm(); + await startProcessPage.clearField(startProcessPage.processNameInput); + await startProcessPage.enterProcessName(startEventFormProcess); + await startProcessPage.selectFromProcessDropdown('processwithstarteventform'); + await startProcessPage.formFields().checkFormIsDisplayed(); }); it('[C311277] Should be able to start a process with a start event form - default values', async () => { - - expect(widget.textWidget().getFieldValue('FirstName')).toBe('sample name'); - expect(widget.numberWidget().getFieldValue('Number07vyx9')).toBe('17'); + await expect(await widget.textWidget().getFieldValue('FirstName')).toBe('sample name'); + await expect(await widget.numberWidget().getFieldValue('Number07vyx9')).toBe('17'); }); it('[C311277] Should be able to start a process with a start event form - form validation', async () => { + await expect(await widget.textWidget().getErrorMessage('FirstName')).toContain('Enter no more than 10 characters'); + await expect(await startProcessPage.checkStartProcessButtonIsEnabled()).toBe(false); - expect(widget.textWidget().getErrorMessage('FirstName')).toBe('Enter no more than 10 characters'); - expect(startProcessPage.checkStartProcessButtonIsEnabled()).toBe(false); - - widget.textWidget().setValue('FirstName', 'Sam'); - expect(widget.textWidget().getErrorMessage('FirstName')).toBe('Enter at least 5 characters'); - expect(startProcessPage.checkStartProcessButtonIsEnabled()).toBe(false); - widget.numberWidget().setFieldValue('Number07vyx9', 9); - expect(widget.numberWidget().getErrorMessage('Number07vyx9')).toBe('Can\'t be less than 10'); - expect(startProcessPage.checkStartProcessButtonIsEnabled()).toBe(false); - widget.numberWidget().setFieldValue('Number07vyx9', 99999); - expect(widget.numberWidget().getErrorMessage('Number07vyx9')).toBe('Can\'t be greater than 1,000'); - expect(startProcessPage.checkStartProcessButtonIsEnabled()).toBe(false); + await widget.textWidget().setValue('FirstName', 'Sam'); + await expect(await widget.textWidget().getErrorMessage('FirstName')).toContain('Enter at least 5 characters'); + await expect(await startProcessPage.checkStartProcessButtonIsEnabled()).toBe(false); + await widget.numberWidget().setFieldValue('Number07vyx9', 9); + await expect(await widget.numberWidget().getErrorMessage('Number07vyx9')).toContain('Can\'t be less than 10'); + await expect(await startProcessPage.checkStartProcessButtonIsEnabled()).toBe(false); + await widget.numberWidget().setFieldValue('Number07vyx9', 99999); + await expect(await widget.numberWidget().getErrorMessage('Number07vyx9')).toContain('Can\'t be greater than 1,000'); + await expect(await startProcessPage.checkStartProcessButtonIsEnabled()).toBe(false); }); it('[C311277] Should be able to start a process with a start event form - claim and complete the process', async () => { + await widget.textWidget().setValue('FirstName', 'Sample'); + await widget.numberWidget().setFieldValue('Number07vyx9', 100); + await expect(await startProcessPage.checkStartProcessButtonIsEnabled()).toBe(true); + await startProcessPage.clickStartProcessButton(); + await processCloudDemoPage.runningProcessesFilter().clickProcessFilter(); + await expect(await processCloudDemoPage.getActiveFilterName()).toBe('Running Processes'); + await processCloudDemoPage.editProcessFilterCloudComponent().clickCustomiseFilterHeader(); + await processCloudDemoPage.editProcessFilterCloudComponent().setProperty('processName', startEventFormProcess); - widget.textWidget().setValue('FirstName', 'Sample'); - widget.numberWidget().setFieldValue('Number07vyx9', 100); - expect(startProcessPage.checkStartProcessButtonIsEnabled()).toBe(true); - startProcessPage.clickStartProcessButton(); - processCloudDemoPage.clickOnProcessFilters(); - processCloudDemoPage.runningProcessesFilter().clickProcessFilter(); - expect(processCloudDemoPage.getActiveFilterName()).toBe('Running Processes'); - processCloudDemoPage.editProcessFilterCloudComponent().clickCustomiseFilterHeader().setProperty('processName', startEventFormProcess); - processCloudDemoPage.processListCloudComponent().getDataTable().waitTillContentLoaded(); - processCloudDemoPage.processListCloudComponent().checkContentIsDisplayedByName(startEventFormProcess); + await browser.sleep(1000); - processCloudDemoPage.processListCloudComponent().getDataTable().selectRow('Name', startEventFormProcess); - processDetailsCloudDemoPage.checkTaskIsDisplayed('StartEventFormTask'); + await processCloudDemoPage.processListCloudComponent().getDataTable().waitTillContentLoaded(); + await processCloudDemoPage.processListCloudComponent().checkContentIsDisplayedByName(startEventFormProcess); + + await processCloudDemoPage.processListCloudComponent().getDataTable().selectRow('Name', startEventFormProcess); + await browser.actions().sendKeys(protractor.Key.ENTER).perform(); + + await processDetailsCloudDemoPage.checkTaskIsDisplayed('StartEventFormTask'); const processId = await processHeaderCloud.getId(); - processDetailsCloudDemoPage.selectProcessTaskByName('StartEventFormTask'); - taskFormCloudComponent.clickClaimButton(); + await processDetailsCloudDemoPage.selectProcessTaskByName('StartEventFormTask'); + await taskFormCloudComponent.clickClaimButton(); const taskId = await taskHeaderCloudPage.getId(); - taskFormCloudComponent.checkCompleteButtonIsDisplayed().clickCompleteButton(); - expect(tasksCloudDemoPage.getActiveFilterName()).toBe('My Tasks'); - tasksCloudDemoPage.taskListCloudComponent().checkContentIsNotDisplayedById(taskId); + await taskFormCloudComponent.checkCompleteButtonIsDisplayed(); + await taskFormCloudComponent.clickCompleteButton(); + await expect(await tasksCloudDemoPage.getActiveFilterName()).toBe('My Tasks'); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsNotDisplayedById(taskId); - tasksCloudDemoPage.completedTasksFilter().clickTaskFilter(); - tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedById(taskId); - processCloudDemoPage.clickOnProcessFilters(); - processCloudDemoPage.completedProcessesFilter().clickProcessFilter(); - processCloudDemoPage.processListCloudComponent().checkContentIsDisplayedById(processId); + await tasksCloudDemoPage.completedTasksFilter().clickTaskFilter(); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedById(taskId); + + await processCloudDemoPage.clickOnProcessFilters(); + await processCloudDemoPage.completedProcessesFilter().clickProcessFilter(); + await processCloudDemoPage.processListCloudComponent().checkContentIsDisplayedById(processId); }); @@ -303,200 +306,200 @@ describe('Start Task Form', () => { describe('Attach content to process-cloud task form using upload widget', async () => { - beforeEach(async (done) => { - navigationBarPage.navigateToProcessServicesCloudPage(); - appListCloudComponent.checkApsContainer(); - appListCloudComponent.checkAppIsDisplayed(candidateBaseApp); - appListCloudComponent.goToApp(candidateBaseApp); - processCloudDemoPage.clickOnProcessFilters(); - processCloudDemoPage.runningProcessesFilter().clickProcessFilter(); - processCloudDemoPage.processListCloudComponent().checkProcessListIsLoaded(); - done(); + beforeEach(async () => { + await navigationBarPage.navigateToProcessServicesCloudPage(); + await appListCloudComponent.checkApsContainer(); + await appListCloudComponent.checkAppIsDisplayed(candidateBaseApp); + await appListCloudComponent.goToApp(candidateBaseApp); + await processCloudDemoPage.clickOnProcessFilters(); + await processCloudDemoPage.runningProcessesFilter().clickProcessFilter(); + await processCloudDemoPage.processListCloudComponent().checkProcessListIsLoaded(); }); it('[C310358] Should be able to attach a file to a form from local', async () => { - processCloudDemoPage.processListCloudComponent().checkContentIsDisplayedByName(uploadLocalFileProcess.entry.name); - processCloudDemoPage.processListCloudComponent().getDataTable().selectRow('Name', uploadLocalFileProcess.entry.name); - processDetailsCloudDemoPage.checkTaskIsDisplayed('UploadFileTask'); - processDetailsCloudDemoPage.selectProcessTaskByName('UploadFileTask'); - taskFormCloudComponent.clickClaimButton(); + await processCloudDemoPage.processListCloudComponent().checkContentIsDisplayedByName(uploadLocalFileProcess.entry.name); + await processCloudDemoPage.processListCloudComponent().getDataTable().selectRow('Name', uploadLocalFileProcess.entry.name); + await processDetailsCloudDemoPage.checkTaskIsDisplayed('UploadFileTask'); + await processDetailsCloudDemoPage.selectProcessTaskByName('UploadFileTask'); + await taskFormCloudComponent.clickClaimButton(); - const localFileWidget = widget.attachFileWidgetCloud('Attachlocalfile'); - browser.sleep(5000); - localFileWidget.attachLocalFile(pdfFile.location); - localFileWidget.checkFileIsAttached(pdfFile.name); - localFileWidget.removeFile(pdfFile.name); - localFileWidget.checkFileIsNotAttached(pdfFile.name); + const localFileWidget = await widget.attachFileWidgetCloud('Attachlocalfile'); + await browser.sleep(5000); + await localFileWidget.attachLocalFile(pdfFile.location); + await localFileWidget.checkFileIsAttached(pdfFile.name); + await localFileWidget.removeFile(pdfFile.name); + await localFileWidget.checkFileIsNotAttached(pdfFile.name); }); it('[C311285] Should be able to attach a file to a form from acs repository', async () => { - processCloudDemoPage.processListCloudComponent().checkContentIsDisplayedByName(uploadContentFileProcess.entry.name); - processCloudDemoPage.processListCloudComponent().getDataTable().selectRow('Name', uploadContentFileProcess.entry.name); - processDetailsCloudDemoPage.checkTaskIsDisplayed('UploadFileTask'); - processDetailsCloudDemoPage.selectProcessTaskByName('UploadFileTask'); - taskFormCloudComponent.clickClaimButton(); + await processCloudDemoPage.processListCloudComponent().checkContentIsDisplayedByName(uploadContentFileProcess.entry.name); + await processCloudDemoPage.processListCloudComponent().getDataTable().selectRow('Name', uploadContentFileProcess.entry.name); + await processDetailsCloudDemoPage.checkTaskIsDisplayed('UploadFileTask'); + await processDetailsCloudDemoPage.selectProcessTaskByName('UploadFileTask'); + await taskFormCloudComponent.clickClaimButton(); - const contentFileWidget = widget.attachFileWidgetCloud('Attachsinglecontentfile'); - contentFileWidget.clickAttachContentFile('Attachsinglecontentfile'); - contentNodeSelectorDialogPage.checkDialogIsDisplayed(); - contentNodeSelectorDialogPage.contentListPage().dataTablePage().doubleClickRowByContent(folderName); - contentNodeSelectorDialogPage.contentListPage().dataTablePage().waitTillContentLoaded(); - contentNodeSelectorDialogPage.contentListPage().dataTablePage().clickRowByContent(testFileModel.name); - contentNodeSelectorDialogPage.contentListPage().dataTablePage().checkRowByContentIsSelected(testFileModel.name); + const contentFileWidget = await widget.attachFileWidgetCloud('Attachsinglecontentfile'); + await contentFileWidget.clickAttachContentFile('Attachsinglecontentfile'); + await contentNodeSelectorDialogPage.checkDialogIsDisplayed(); + await contentNodeSelectorDialogPage.contentListPage().dataTablePage().doubleClickRowByContent(folderName); + await contentNodeSelectorDialogPage.contentListPage().dataTablePage().waitTillContentLoaded(); + await contentNodeSelectorDialogPage.contentListPage().dataTablePage().clickRowByContent(testFileModel.name); + await contentNodeSelectorDialogPage.contentListPage().dataTablePage().checkRowByContentIsSelected(testFileModel.name); - contentNodeSelectorDialogPage.clickMoveCopyButton(); - contentNodeSelectorDialogPage.checkDialogIsNotDisplayed(); + await contentNodeSelectorDialogPage.clickMoveCopyButton(); + await contentNodeSelectorDialogPage.checkDialogIsNotDisplayed(); - contentFileWidget.checkFileIsAttached(testFileModel.name); - contentFileWidget.removeFile(testFileModel.name); - contentFileWidget.checkFileIsNotAttached(testFileModel.name); - contentFileWidget.checkUploadContentButtonIsDisplayed('Attachsinglecontentfile'); + await contentFileWidget.checkFileIsAttached(testFileModel.name); + await contentFileWidget.removeFile(testFileModel.name); + await contentFileWidget.checkFileIsNotAttached(testFileModel.name); + await contentFileWidget.checkUploadContentButtonIsDisplayed('Attachsinglecontentfile'); }); it('[C311287] Content node selector default location when attaching a file to a form from acs repository', async () => { - processCloudDemoPage.processListCloudComponent().checkContentIsDisplayedByName(uploadDefaultFileProcess.entry.name); - processCloudDemoPage.processListCloudComponent().getDataTable().selectRow('Name', uploadDefaultFileProcess.entry.name); - processDetailsCloudDemoPage.checkTaskIsDisplayed('UploadFileTask'); - processDetailsCloudDemoPage.selectProcessTaskByName('UploadFileTask'); - taskFormCloudComponent.clickClaimButton(); + await processCloudDemoPage.processListCloudComponent().checkContentIsDisplayedByName(uploadDefaultFileProcess.entry.name); + await processCloudDemoPage.processListCloudComponent().getDataTable().selectRow('Name', uploadDefaultFileProcess.entry.name); + await processDetailsCloudDemoPage.checkTaskIsDisplayed('UploadFileTask'); + await processDetailsCloudDemoPage.selectProcessTaskByName('UploadFileTask'); + await taskFormCloudComponent.clickClaimButton(); - const contentFileWidget = widget.attachFileWidgetCloud('Attachsinglecontentfile'); - contentFileWidget.clickAttachContentFile('Attachsinglecontentfile'); - contentNodeSelectorDialogPage.checkDialogIsDisplayed(); - expect(breadCrumbDropdownPage.getTextOfCurrentFolder()).toBe(testUser.username); - contentNodeSelectorDialogPage.contentListPage().dataTablePage().waitTillContentLoaded(); - contentNodeSelectorDialogPage.contentListPage().dataTablePage().checkRowContentIsDisplayed(folderName); - expect(contentNodeSelectorDialogPage.checkCancelButtonIsEnabled()).toBe(true); - expect(contentNodeSelectorDialogPage.checkCopyMoveButtonIsEnabled()).toBe(false); + const contentFileWidget = await widget.attachFileWidgetCloud('Attachsinglecontentfile'); + await contentFileWidget.clickAttachContentFile('Attachsinglecontentfile'); + await contentNodeSelectorDialogPage.checkDialogIsDisplayed(); + await expect(await breadCrumbDropdownPage.getTextOfCurrentFolder()).toBe(testUser.username); + await contentNodeSelectorDialogPage.contentListPage().dataTablePage().waitTillContentLoaded(); + await contentNodeSelectorDialogPage.contentListPage().dataTablePage().checkRowContentIsDisplayed(folderName); + await expect(await contentNodeSelectorDialogPage.checkCancelButtonIsEnabled()).toBe(true); + await expect(await contentNodeSelectorDialogPage.checkCopyMoveButtonIsEnabled()).toBe(false); - contentNodeSelectorDialogPage.contentListPage().dataTablePage().clickRowByContent(folderName); - contentNodeSelectorDialogPage.contentListPage().dataTablePage().checkRowByContentIsSelected(folderName); - expect(contentNodeSelectorDialogPage.checkCancelButtonIsEnabled()).toBe(true); - expect(contentNodeSelectorDialogPage.checkCopyMoveButtonIsEnabled()).toBe(false); - contentNodeSelectorDialogPage.clickCancelButton(); - contentNodeSelectorDialogPage.checkDialogIsNotDisplayed(); + await contentNodeSelectorDialogPage.contentListPage().dataTablePage().clickRowByContent(folderName); + await contentNodeSelectorDialogPage.contentListPage().dataTablePage().checkRowByContentIsSelected(folderName); + await expect(await contentNodeSelectorDialogPage.checkCancelButtonIsEnabled()).toBe(true); + await expect(await contentNodeSelectorDialogPage.checkCopyMoveButtonIsEnabled()).toBe(false); + await contentNodeSelectorDialogPage.clickCancelButton(); + await contentNodeSelectorDialogPage.checkDialogIsNotDisplayed(); }); it('[C311288] No file should be attached when canceling the content node selector', async () => { - processCloudDemoPage.processListCloudComponent().checkContentIsDisplayedByName(cancelUploadFileProcess.entry.name); - processCloudDemoPage.processListCloudComponent().getDataTable().selectRow('Name', cancelUploadFileProcess.entry.name); - processDetailsCloudDemoPage.checkTaskIsDisplayed('UploadFileTask'); - processDetailsCloudDemoPage.selectProcessTaskByName('UploadFileTask'); - taskFormCloudComponent.clickClaimButton(); + await processCloudDemoPage.processListCloudComponent().checkContentIsDisplayedByName(cancelUploadFileProcess.entry.name); + await processCloudDemoPage.processListCloudComponent().getDataTable().selectRow('Name', cancelUploadFileProcess.entry.name); + await processDetailsCloudDemoPage.checkTaskIsDisplayed('UploadFileTask'); + await processDetailsCloudDemoPage.selectProcessTaskByName('UploadFileTask'); + await taskFormCloudComponent.clickClaimButton(); - const contentFileWidget = widget.attachFileWidgetCloud('Attachsinglecontentfile'); - contentFileWidget.clickAttachContentFile('Attachsinglecontentfile'); - contentNodeSelectorDialogPage.checkDialogIsDisplayed(); - contentNodeSelectorDialogPage.contentListPage().dataTablePage().waitTillContentLoaded(); - contentNodeSelectorDialogPage.contentListPage().dataTablePage().checkRowContentIsDisplayed(folderName); - contentNodeSelectorDialogPage.contentListPage().dataTablePage().doubleClickRowByContent(folderName); - contentNodeSelectorDialogPage.contentListPage().dataTablePage().waitTillContentLoaded(); - contentNodeSelectorDialogPage.contentListPage().dataTablePage().clickRowByContent(testFileModel.name); - contentNodeSelectorDialogPage.contentListPage().dataTablePage().checkRowByContentIsSelected(testFileModel.name); + const contentFileWidget = await widget.attachFileWidgetCloud('Attachsinglecontentfile'); + await contentFileWidget.clickAttachContentFile('Attachsinglecontentfile'); + await contentNodeSelectorDialogPage.checkDialogIsDisplayed(); + await contentNodeSelectorDialogPage.contentListPage().dataTablePage().waitTillContentLoaded(); + await contentNodeSelectorDialogPage.contentListPage().dataTablePage().checkRowContentIsDisplayed(folderName); + await contentNodeSelectorDialogPage.contentListPage().dataTablePage().doubleClickRowByContent(folderName); + await contentNodeSelectorDialogPage.contentListPage().dataTablePage().waitTillContentLoaded(); + await contentNodeSelectorDialogPage.contentListPage().dataTablePage().clickRowByContent(testFileModel.name); + await contentNodeSelectorDialogPage.contentListPage().dataTablePage().checkRowByContentIsSelected(testFileModel.name); - contentNodeSelectorDialogPage.clickCancelButton(); - contentNodeSelectorDialogPage.checkDialogIsNotDisplayed(); - contentFileWidget.checkFileIsNotAttached(testFileModel.name); + await contentNodeSelectorDialogPage.clickCancelButton(); + await contentNodeSelectorDialogPage.checkDialogIsNotDisplayed(); + await contentFileWidget.checkFileIsNotAttached(testFileModel.name); }); it('[C311289] Should be able to attach single file', async () => { - processCloudDemoPage.processListCloudComponent().checkContentIsDisplayedByName(uploadContentFileProcess.entry.name); - processCloudDemoPage.processListCloudComponent().getDataTable().selectRow('Name', uploadContentFileProcess.entry.name); - processDetailsCloudDemoPage.checkTaskIsDisplayed('UploadFileTask'); - processDetailsCloudDemoPage.selectProcessTaskByName('UploadFileTask'); + await processCloudDemoPage.processListCloudComponent().checkContentIsDisplayedByName(uploadContentFileProcess.entry.name); + await processCloudDemoPage.processListCloudComponent().getDataTable().selectRow('Name', uploadContentFileProcess.entry.name); + await processDetailsCloudDemoPage.checkTaskIsDisplayed('UploadFileTask'); + await processDetailsCloudDemoPage.selectProcessTaskByName('UploadFileTask'); - const contentFileWidget = widget.attachFileWidgetCloud('Attachsinglecontentfile'); - contentFileWidget.clickAttachContentFile('Attachsinglecontentfile'); - contentNodeSelectorDialogPage.checkDialogIsDisplayed(); - contentNodeSelectorDialogPage.contentListPage().dataTablePage().doubleClickRowByContent(folderName); - contentNodeSelectorDialogPage.contentListPage().dataTablePage().waitTillContentLoaded(); - contentNodeSelectorDialogPage.contentListPage().dataTablePage().clickRowByContent(testFileModel.name); - contentNodeSelectorDialogPage.contentListPage().dataTablePage().checkRowByContentIsSelected(testFileModel.name); + const contentFileWidget = await widget.attachFileWidgetCloud('Attachsinglecontentfile'); + await contentFileWidget.clickAttachContentFile('Attachsinglecontentfile'); + await contentNodeSelectorDialogPage.checkDialogIsDisplayed(); + await contentNodeSelectorDialogPage.contentListPage().dataTablePage().doubleClickRowByContent(folderName); + await contentNodeSelectorDialogPage.contentListPage().dataTablePage().waitTillContentLoaded(); + await contentNodeSelectorDialogPage.contentListPage().dataTablePage().clickRowByContent(testFileModel.name); + await contentNodeSelectorDialogPage.contentListPage().dataTablePage().checkRowByContentIsSelected(testFileModel.name); - contentNodeSelectorDialogPage.clickMoveCopyButton(); - contentNodeSelectorDialogPage.checkDialogIsNotDisplayed(); + await contentNodeSelectorDialogPage.clickMoveCopyButton(); + await contentNodeSelectorDialogPage.checkDialogIsNotDisplayed(); - contentFileWidget.checkFileIsAttached(testFileModel.name); - contentFileWidget.checkUploadContentButtonIsNotDisplayed('Attachsinglecontentfile'); + await contentFileWidget.checkFileIsAttached(testFileModel.name); + await contentFileWidget.checkUploadContentButtonIsNotDisplayed('Attachsinglecontentfile'); }); it('[C311292] Attached file is not displayed anymore after release if the form is not saved', async () => { - processCloudDemoPage.processListCloudComponent().checkContentIsDisplayedByName(uploadContentFileProcess.entry.name); - processCloudDemoPage.processListCloudComponent().getDataTable().selectRow('Name', uploadContentFileProcess.entry.name); - processDetailsCloudDemoPage.checkTaskIsDisplayed('UploadFileTask'); - processDetailsCloudDemoPage.selectProcessTaskByName('UploadFileTask'); + await processCloudDemoPage.processListCloudComponent().checkContentIsDisplayedByName(uploadContentFileProcess.entry.name); + await processCloudDemoPage.processListCloudComponent().getDataTable().selectRow('Name', uploadContentFileProcess.entry.name); + await processDetailsCloudDemoPage.checkTaskIsDisplayed('UploadFileTask'); + await processDetailsCloudDemoPage.selectProcessTaskByName('UploadFileTask'); - const contentFileWidget = widget.attachFileWidgetCloud('Attachsinglecontentfile'); - contentFileWidget.clickAttachContentFile('Attachsinglecontentfile'); - contentNodeSelectorDialogPage.checkDialogIsDisplayed(); - contentNodeSelectorDialogPage.contentListPage().dataTablePage().doubleClickRowByContent(folderName); - contentNodeSelectorDialogPage.contentListPage().dataTablePage().waitTillContentLoaded(); - contentNodeSelectorDialogPage.contentListPage().dataTablePage().clickRowByContent(testFileModel.name); - contentNodeSelectorDialogPage.contentListPage().dataTablePage().checkRowByContentIsSelected(testFileModel.name); + const contentFileWidget = await widget.attachFileWidgetCloud('Attachsinglecontentfile'); + await contentFileWidget.clickAttachContentFile('Attachsinglecontentfile'); + await contentNodeSelectorDialogPage.checkDialogIsDisplayed(); + await contentNodeSelectorDialogPage.contentListPage().dataTablePage().doubleClickRowByContent(folderName); + await contentNodeSelectorDialogPage.contentListPage().dataTablePage().waitTillContentLoaded(); + await contentNodeSelectorDialogPage.contentListPage().dataTablePage().clickRowByContent(testFileModel.name); + await contentNodeSelectorDialogPage.contentListPage().dataTablePage().checkRowByContentIsSelected(testFileModel.name); - contentNodeSelectorDialogPage.clickMoveCopyButton(); - contentNodeSelectorDialogPage.checkDialogIsNotDisplayed(); + await contentNodeSelectorDialogPage.clickMoveCopyButton(); + await contentNodeSelectorDialogPage.checkDialogIsNotDisplayed(); - contentFileWidget.checkFileIsAttached(testFileModel.name); - contentFileWidget.checkUploadContentButtonIsNotDisplayed('Attachsinglecontentfile'); - taskFormCloudComponent.clickReleaseButton(); - taskFormCloudComponent.clickClaimButton(); - contentFileWidget.checkFileIsNotAttached(testFileModel.name); - contentFileWidget.checkUploadContentButtonIsDisplayed('Attachsinglecontentfile'); + await contentFileWidget.checkFileIsAttached(testFileModel.name); + await contentFileWidget.checkUploadContentButtonIsNotDisplayed('Attachsinglecontentfile'); + await taskFormCloudComponent.clickReleaseButton(); + await taskFormCloudComponent.clickClaimButton(); + await contentFileWidget.checkFileIsNotAttached(testFileModel.name); + await contentFileWidget.checkUploadContentButtonIsDisplayed('Attachsinglecontentfile'); }); it('[C311293] Attached file is displayed after release if the form was saved', async () => { - processCloudDemoPage.processListCloudComponent().checkContentIsDisplayedByName(uploadContentFileProcess.entry.name); - processCloudDemoPage.processListCloudComponent().getDataTable().selectRow('Name', uploadContentFileProcess.entry.name); - processDetailsCloudDemoPage.checkTaskIsDisplayed('UploadFileTask'); - processDetailsCloudDemoPage.selectProcessTaskByName('UploadFileTask'); + await processCloudDemoPage.processListCloudComponent().checkContentIsDisplayedByName(uploadContentFileProcess.entry.name); + await processCloudDemoPage.processListCloudComponent().getDataTable().selectRow('Name', uploadContentFileProcess.entry.name); + await processDetailsCloudDemoPage.checkTaskIsDisplayed('UploadFileTask'); + await processDetailsCloudDemoPage.selectProcessTaskByName('UploadFileTask'); - const contentFileWidget = widget.attachFileWidgetCloud('Attachsinglecontentfile'); - contentFileWidget.clickAttachContentFile('Attachsinglecontentfile'); - contentNodeSelectorDialogPage.checkDialogIsDisplayed(); - contentNodeSelectorDialogPage.contentListPage().dataTablePage().doubleClickRowByContent(folderName); - contentNodeSelectorDialogPage.contentListPage().dataTablePage().waitTillContentLoaded(); - contentNodeSelectorDialogPage.contentListPage().dataTablePage().clickRowByContent(testFileModel.name); - contentNodeSelectorDialogPage.contentListPage().dataTablePage().checkRowByContentIsSelected(testFileModel.name); - contentNodeSelectorDialogPage.clickMoveCopyButton(); - contentNodeSelectorDialogPage.checkDialogIsNotDisplayed(); - contentFileWidget.checkFileIsAttached(testFileModel.name); - contentFileWidget.checkUploadContentButtonIsNotDisplayed('Attachsinglecontentfile'); - taskFormCloudComponent.clickSaveButton(); - taskFormCloudComponent.clickReleaseButton(); - taskFormCloudComponent.clickClaimButton(); - contentFileWidget.checkFileIsAttached(testFileModel.name); - contentFileWidget.checkUploadContentButtonIsNotDisplayed('Attachsinglecontentfile'); + const contentFileWidget = await widget.attachFileWidgetCloud('Attachsinglecontentfile'); + await contentFileWidget.clickAttachContentFile('Attachsinglecontentfile'); + await contentNodeSelectorDialogPage.checkDialogIsDisplayed(); + await contentNodeSelectorDialogPage.contentListPage().dataTablePage().doubleClickRowByContent(folderName); + await contentNodeSelectorDialogPage.contentListPage().dataTablePage().waitTillContentLoaded(); + await contentNodeSelectorDialogPage.contentListPage().dataTablePage().clickRowByContent(testFileModel.name); + await contentNodeSelectorDialogPage.contentListPage().dataTablePage().checkRowByContentIsSelected(testFileModel.name); + await contentNodeSelectorDialogPage.clickMoveCopyButton(); + await contentNodeSelectorDialogPage.checkDialogIsNotDisplayed(); + await contentFileWidget.checkFileIsAttached(testFileModel.name); + await contentFileWidget.checkUploadContentButtonIsNotDisplayed('Attachsinglecontentfile'); + await taskFormCloudComponent.clickSaveButton(); + await taskFormCloudComponent.clickReleaseButton(); + await taskFormCloudComponent.clickClaimButton(); + await contentFileWidget.checkFileIsAttached(testFileModel.name); + await contentFileWidget.checkUploadContentButtonIsNotDisplayed('Attachsinglecontentfile'); }); it('[C311295] Attached file is displayed after complete', async () => { - processCloudDemoPage.processListCloudComponent().checkContentIsDisplayedByName(completeUploadFileProcess.entry.name); - processCloudDemoPage.processListCloudComponent().getDataTable().selectRow('Name', completeUploadFileProcess.entry.name); - processDetailsCloudDemoPage.checkTaskIsDisplayed('UploadFileTask'); - processDetailsCloudDemoPage.selectProcessTaskByName('UploadFileTask'); - taskFormCloudComponent.clickClaimButton(); + await processCloudDemoPage.processListCloudComponent().checkContentIsDisplayedByName(completeUploadFileProcess.entry.name); + await processCloudDemoPage.processListCloudComponent().getDataTable().selectRow('Name', completeUploadFileProcess.entry.name); + await processDetailsCloudDemoPage.checkTaskIsDisplayed('UploadFileTask'); + await processDetailsCloudDemoPage.selectProcessTaskByName('UploadFileTask'); + await taskFormCloudComponent.clickClaimButton(); - const contentFileWidget = widget.attachFileWidgetCloud('Attachsinglecontentfile'); - contentFileWidget.clickAttachContentFile('Attachsinglecontentfile'); - contentNodeSelectorDialogPage.checkDialogIsDisplayed(); - contentNodeSelectorDialogPage.contentListPage().dataTablePage().doubleClickRowByContent(folderName); - contentNodeSelectorDialogPage.contentListPage().dataTablePage().waitTillContentLoaded(); - contentNodeSelectorDialogPage.contentListPage().dataTablePage().clickRowByContent(testFileModel.name); - contentNodeSelectorDialogPage.contentListPage().dataTablePage().checkRowByContentIsSelected(testFileModel.name); - contentNodeSelectorDialogPage.clickMoveCopyButton(); - contentNodeSelectorDialogPage.checkDialogIsNotDisplayed(); - contentFileWidget.checkFileIsAttached(testFileModel.name); - contentFileWidget.checkUploadContentButtonIsNotDisplayed('Attachsinglecontentfile'); + const contentFileWidget = await widget.attachFileWidgetCloud('Attachsinglecontentfile'); + await contentFileWidget.clickAttachContentFile('Attachsinglecontentfile'); + await contentNodeSelectorDialogPage.checkDialogIsDisplayed(); + await contentNodeSelectorDialogPage.contentListPage().dataTablePage().doubleClickRowByContent(folderName); + await contentNodeSelectorDialogPage.contentListPage().dataTablePage().waitTillContentLoaded(); + await contentNodeSelectorDialogPage.contentListPage().dataTablePage().clickRowByContent(testFileModel.name); + await contentNodeSelectorDialogPage.contentListPage().dataTablePage().checkRowByContentIsSelected(testFileModel.name); + await contentNodeSelectorDialogPage.clickMoveCopyButton(); + await contentNodeSelectorDialogPage.checkDialogIsNotDisplayed(); + await contentFileWidget.checkFileIsAttached(testFileModel.name); + await contentFileWidget.checkUploadContentButtonIsNotDisplayed('Attachsinglecontentfile'); const taskId = await taskHeaderCloudPage.getId(); - taskFormCloudComponent.checkCompleteButtonIsDisplayed().clickCompleteButton(); - expect(tasksCloudDemoPage.getActiveFilterName()).toBe('My Tasks'); - tasksCloudDemoPage.taskListCloudComponent().checkContentIsNotDisplayedById(taskId); + await taskFormCloudComponent.checkCompleteButtonIsDisplayed(); + await taskFormCloudComponent.clickCompleteButton(); + await expect(await tasksCloudDemoPage.getActiveFilterName()).toBe('My Tasks'); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsNotDisplayedById(taskId); - tasksCloudDemoPage.completedTasksFilter().clickTaskFilter(); - tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedById(taskId); - tasksCloudDemoPage.taskListCloudComponent().selectRowByTaskId(taskId); - contentFileWidget.checkFileIsAttached(testFileModel.name); - contentFileWidget.checkUploadContentButtonIsNotDisplayed('Attachsinglecontentfile'); + await tasksCloudDemoPage.completedTasksFilter().clickTaskFilter(); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedById(taskId); + await tasksCloudDemoPage.taskListCloudComponent().selectRowByTaskId(taskId); + await contentFileWidget.checkFileIsAttached(testFileModel.name); + await contentFileWidget.checkUploadContentButtonIsNotDisplayed('Attachsinglecontentfile'); }); }); }); diff --git a/e2e/process-services-cloud/start-task/start-task-custom-app-cloud.e2e.ts b/e2e/process-services-cloud/start-task/start-task-custom-app-cloud.e2e.ts index 5aeafc8bf0..2bc52a086a 100644 --- a/e2e/process-services-cloud/start-task/start-task-custom-app-cloud.e2e.ts +++ b/e2e/process-services-cloud/start-task/start-task-custom-app-cloud.e2e.ts @@ -62,7 +62,7 @@ describe('Start Task', () => { let identityService: IdentityService; let groupIdentityService: GroupIdentityService; - beforeAll(async (done) => { + beforeAll(async () => { await apiService.login(browser.params.identityAdmin.email, browser.params.identityAdmin.password); identityService = new IdentityService(apiService); @@ -80,11 +80,10 @@ describe('Start Task', () => { browser.params.config.oauth2.host, browser.params.config.identityHost); await loginSSOPage.loginSSOIdentityService(testUser.email, testUser.password); - done(); + }); - afterAll(async (done) => { - await apiService.login(browser.params.identityAdmin.email, browser.params.identityAdmin.password); + afterAll(async () => { const tasksService = new TasksService(apiService); const tasks = [standaloneTaskName, unassignedTaskName, reassignTaskName]; @@ -94,136 +93,148 @@ describe('Start Task', () => { await tasksService.deleteTask(taskId, simpleApp); } } + + await apiService.login(browser.params.identityAdmin.email, browser.params.identityAdmin.password); await identityService.deleteIdentityUser(activitiUser.idIdentityService); await identityService.deleteIdentityUser(apsUser.idIdentityService); await identityService.deleteIdentityUser(testUser.idIdentityService); - done(); + }); - beforeEach(() => { - navigationBarPage.navigateToProcessServicesCloudPage(); - appListCloudComponent.checkApsContainer(); - appListCloudComponent.checkAppIsDisplayed(simpleApp); - appListCloudComponent.goToApp(simpleApp); - tasksCloudDemoPage.taskListCloudComponent().getDataTable().waitForTableBody(); + beforeEach(async () => { + await navigationBarPage.navigateToProcessServicesCloudPage(); + await appListCloudComponent.checkApsContainer(); + await appListCloudComponent.checkAppIsDisplayed(simpleApp); + await appListCloudComponent.goToApp(simpleApp); + await tasksCloudDemoPage.taskListCloudComponent().getDataTable().waitForTableBody(); }); - it('[C297675] Should create a task unassigned when assignee field is empty in Start Task form', () => { - tasksCloudDemoPage.openNewTaskForm(); - startTask.checkFormIsDisplayed(); - peopleCloudComponent.clearAssignee(); - startTask.addName(unassignedTaskName); - startTask.clickStartButton(); - tasksCloudDemoPage.editTaskFilterCloudComponent() - .clickCustomiseFilterHeader() - .clearAssignee() - .setStatusFilterDropDown('CREATED'); - tasksCloudDemoPage.taskListCloudComponent().getDataTable().waitForTableBody(); - tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(unassignedTaskName); - const taskId = tasksCloudDemoPage.taskListCloudComponent().getIdCellValue(unassignedTaskName); - tasksCloudDemoPage.taskListCloudComponent().selectRow(unassignedTaskName); - taskHeaderCloudPage.checkTaskPropertyListIsDisplayed(); - expect(taskHeaderCloudPage.getId()).toBe(taskId); - expect(taskHeaderCloudPage.getAssignee()).toBe('No assignee'); + it('[C297675] Should create a task unassigned when assignee field is empty in Start Task form', async () => { + await tasksCloudDemoPage.openNewTaskForm(); + await startTask.checkFormIsDisplayed(); + await peopleCloudComponent.clearAssignee(); + await startTask.addName(unassignedTaskName); + await startTask.clickStartButton(); + await tasksCloudDemoPage.editTaskFilterCloudComponent(); + await tasksCloudDemoPage.editTaskFilterCloudComponent().clickCustomiseFilterHeader(); + await tasksCloudDemoPage.editTaskFilterCloudComponent().clearAssignee(); + await tasksCloudDemoPage.editTaskFilterCloudComponent().setStatusFilterDropDown('CREATED'); + await tasksCloudDemoPage.taskListCloudComponent().getDataTable().waitForTableBody(); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(unassignedTaskName); + const taskId = await tasksCloudDemoPage.taskListCloudComponent().getIdCellValue(unassignedTaskName); + await tasksCloudDemoPage.taskListCloudComponent().selectRow(unassignedTaskName); + await taskHeaderCloudPage.checkTaskPropertyListIsDisplayed(); + await expect(await taskHeaderCloudPage.getId()).toBe(taskId); + await expect(await taskHeaderCloudPage.getAssignee()).toBe('No assignee'); }); - it('[C291956] Should be able to create a new standalone task without assignee', () => { - tasksCloudDemoPage.openNewTaskForm(); - startTask.checkFormIsDisplayed(); - expect(peopleCloudComponent.getAssignee()).toContain(testUser.firstName, 'does not contain Admin'); - startTask.addName(unassignedTaskName); - startTask.clickStartButton(); - startTask.checkStartButtonIsEnabled(); - tasksCloudDemoPage.editTaskFilterCloudComponent() - .clickCustomiseFilterHeader() - .setStatusFilterDropDown('CREATED') - .clearAssignee(); - tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(unassignedTaskName); + it('[C291956] Should be able to create a new standalone task without assignee', async () => { + await tasksCloudDemoPage.openNewTaskForm(); + await startTask.checkFormIsDisplayed(); + await expect(await peopleCloudComponent.getAssignee()).toContain(testUser.firstName, 'does not contain Admin'); + await startTask.addName(unassignedTaskName); + await startTask.clickStartButton(); + await startTask.checkStartButtonIsEnabled(); + await tasksCloudDemoPage.editTaskFilterCloudComponent(); + await tasksCloudDemoPage.editTaskFilterCloudComponent().clickCustomiseFilterHeader(); + await tasksCloudDemoPage.editTaskFilterCloudComponent().setStatusFilterDropDown('CREATED'); + await tasksCloudDemoPage.editTaskFilterCloudComponent().clearAssignee(); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(unassignedTaskName); }); - it('[C290166] Should be possible to cancel a task', () => { - tasksCloudDemoPage.openNewTaskForm(); - startTask.checkFormIsDisplayed(); - startTask.checkStartButtonIsDisabled() - .blur(startTask.name) - .checkValidationErrorIsDisplayed(requiredError); - startTask.addName(standaloneTaskName) - .addDescription('descriptions') - .addDueDate('12/12/2018'); - startTask.checkStartButtonIsEnabled(); - startTask.clickCancelButton(); - tasksCloudDemoPage.taskListCloudComponent().checkContentIsNotDisplayedByName(standaloneTaskName); + it('[C290166] Should be possible to cancel a task', async () => { + await tasksCloudDemoPage.openNewTaskForm(); + await startTask.checkFormIsDisplayed(); + await startTask.checkStartButtonIsDisabled(); + await startTask.blur(await startTask.name); + await startTask.checkValidationErrorIsDisplayed(requiredError); + await startTask.addName(standaloneTaskName); + await startTask.addDescription('descriptions'); + await startTask .addDueDate('12/12/2018'); + await startTask.checkStartButtonIsEnabled(); + await startTask.clickCancelButton(); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsNotDisplayedByName(standaloneTaskName); }); - it('[C290180] Should be able to create a new standalone task', () => { - tasksCloudDemoPage.openNewTaskForm(); - startTask.checkFormIsDisplayed(); - startTask.addName(standaloneTaskName) - .addDescription('descriptions') - .addDueDate('12/12/2018') - .addPriority('50') - .clickStartButton(); - tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(standaloneTaskName); + it('[C290180] Should be able to create a new standalone task', async () => { + await tasksCloudDemoPage.openNewTaskForm(); + await startTask.checkFormIsDisplayed(); + await startTask.addName(standaloneTaskName); + await startTask.addDescription('descriptions'); + await startTask.addDueDate('12/12/2018'); + await startTask.addPriority('50'); + await startTask.clickStartButton(); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(standaloneTaskName); }); - it('[C290181] Should be displayed an error message if task name exceed 255 characters', () => { - tasksCloudDemoPage.openNewTaskForm(); - startTask.checkFormIsDisplayed(); - startTask.addName(taskName255Characters) - .checkStartButtonIsEnabled(); - startTask.addName(taskNameBiggerThen255Characters) - .blur(startTask.name) - .checkValidationErrorIsDisplayed(lengthValidationError) - .checkStartButtonIsDisabled() - .clickCancelButton(); + it('[C290181] Should be displayed an error message if task name exceed 255 characters', async () => { + await tasksCloudDemoPage.openNewTaskForm(); + await startTask.checkFormIsDisplayed(); + await startTask.addName(taskName255Characters); + await startTask.checkStartButtonIsEnabled(); + await startTask.addName(taskNameBiggerThen255Characters); + await startTask.blur(await startTask.name); + await startTask.checkValidationErrorIsDisplayed(lengthValidationError); + await startTask.checkStartButtonIsDisabled(); + await startTask.clickCancelButton(); }); - it('[C291774] Should be displayed an error message if the date is invalid', () => { - tasksCloudDemoPage.openNewTaskForm(); - startTask.addDueDate('12/12/2018') - .checkStartButtonIsEnabled(); - startTask.addDueDate('invalid date') - .blur(startTask.dueDate) - .validateDate(dateValidationError) - .checkStartButtonIsDisabled() - .clickCancelButton(); + it('[C291774] Should be displayed an error message if the date is invalid', async () => { + await tasksCloudDemoPage.openNewTaskForm(); + await startTask.addDueDate('12/12/2018'); + await startTask.checkStartButtonIsEnabled(); + await startTask.addDueDate('invalid date'); + await startTask.blur(await startTask.dueDate); + await startTask.validateDate(dateValidationError); + await startTask.checkStartButtonIsDisabled(); + await startTask.clickCancelButton(); }); - it('[C290182] Should be possible to assign the task to another user', () => { - tasksCloudDemoPage.openNewTaskForm(); - startTask.checkFormIsDisplayed(); - startTask.addName(standaloneTaskName); - peopleCloudComponent.searchAssigneeAndSelect(`${activitiUser.firstName} ${activitiUser.lastName}`); - startTask.checkStartButtonIsEnabled(); - startTask.clickStartButton(); - tasksCloudDemoPage.myTasksFilter().clickTaskFilter(); - expect(tasksCloudDemoPage.getActiveFilterName()).toBe('My Tasks'); - tasksCloudDemoPage.taskListCloudComponent().checkContentIsNotDisplayedByName(standaloneTaskName); + it('[C290182] Should be possible to assign the task to another user', async () => { + await tasksCloudDemoPage.openNewTaskForm(); + await startTask.checkFormIsDisplayed(); + await startTask.addName(standaloneTaskName); + await peopleCloudComponent.searchAssigneeAndSelect(`${activitiUser.firstName} ${activitiUser.lastName}`); + + await startTask.checkStartButtonIsEnabled(); + await startTask.clickStartButton(); + + await browser.driver.sleep(1000); + + await tasksCloudDemoPage.myTasksFilter().clickTaskFilter(); + + await expect(await tasksCloudDemoPage.getActiveFilterName()).toBe('My Tasks'); }); - it('[C291953] Assignee field should display the logged user as default', () => { - tasksCloudDemoPage.openNewTaskForm(); - startTask.checkFormIsDisplayed(); - expect(peopleCloudComponent.getAssignee()).toContain(testUser.firstName, 'does not contain Admin'); - startTask.clickCancelButton(); + it('[C291953] Assignee field should display the logged user as default', async () => { + await tasksCloudDemoPage.openNewTaskForm(); + await startTask.checkFormIsDisplayed(); + await expect(await peopleCloudComponent.getAssignee()).toContain(testUser.firstName, 'does not contain Admin'); + await startTask.clickCancelButton(); }); - it('[C305050] Should be able to reassign the removed user when starting a new task', () => { - tasksCloudDemoPage.openNewTaskForm(); - startTask.checkFormIsDisplayed(); - startTask.addName(reassignTaskName); - expect(peopleCloudComponent.getAssignee()).toBe(`${testUser.firstName} ${testUser.lastName}`); - peopleCloudComponent.searchAssignee(apsUser.username); - peopleCloudComponent.checkUserIsDisplayed(`${apsUser.firstName} ${apsUser.lastName}`); - peopleCloudComponent.selectAssigneeFromList(`${apsUser.firstName} ${apsUser.lastName}`); - startTask.clickStartButton(); - tasksCloudDemoPage.editTaskFilterCloudComponent() - .clickCustomiseFilterHeader() - .clearAssignee() - .setStatusFilterDropDown('ALL'); - tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(reassignTaskName); - tasksCloudDemoPage.taskListCloudComponent().selectRow(reassignTaskName); - expect(taskHeaderCloudPage.getAssignee()).toBe(apsUser.username); + it('[C305050] Should be able to reassign the removed user when starting a new task', async () => { + await tasksCloudDemoPage.openNewTaskForm(); + await startTask.checkFormIsDisplayed(); + await startTask.addName(reassignTaskName); + + await expect(await peopleCloudComponent.getAssignee()).toBe(`${testUser.firstName} ${testUser.lastName}`); + await peopleCloudComponent.searchAssignee(apsUser.username); + await peopleCloudComponent.checkUserIsDisplayed(`${apsUser.firstName} ${apsUser.lastName}`); + await peopleCloudComponent.selectAssigneeFromList(`${apsUser.firstName} ${apsUser.lastName}`); + await startTask.clickStartButton(); + + await tasksCloudDemoPage.editTaskFilterCloudComponent().clickCustomiseFilterHeader(); + await tasksCloudDemoPage.editTaskFilterCloudComponent().clearAssignee(); + await tasksCloudDemoPage.editTaskFilterCloudComponent().setStatusFilterDropDown('ALL'); + + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(reassignTaskName); + + await browser.driver.sleep(1000); + + await tasksCloudDemoPage.taskListCloudComponent().selectRow(reassignTaskName); + + await expect(await taskHeaderCloudPage.getAssignee()).toBe(apsUser.username); }); }); diff --git a/e2e/process-services-cloud/start-task/start-task-group-cloud.e2e.ts b/e2e/process-services-cloud/start-task/start-task-group-cloud.e2e.ts index 2ceb80de4a..161cfbcd4b 100644 --- a/e2e/process-services-cloud/start-task/start-task-group-cloud.e2e.ts +++ b/e2e/process-services-cloud/start-task/start-task-group-cloud.e2e.ts @@ -56,7 +56,7 @@ describe('Start Task - Group Cloud Component', () => { let identityService: IdentityService; let groupIdentityService: GroupIdentityService; - beforeAll(async (done) => { + beforeAll(async () => { await apiService.login(browser.params.identityAdmin.email, browser.params.identityAdmin.password); identityService = new IdentityService(apiService); @@ -79,10 +79,9 @@ describe('Start Task - Group Cloud Component', () => { browser.params.config.oauth2.host, browser.params.config.identityHost); - done(); }); - afterAll(async (done) => { + afterAll(async () => { await apiService.login(browser.params.identityAdmin.email, browser.params.identityAdmin.password); const tasksService = new TasksService(apiService); @@ -95,117 +94,113 @@ describe('Start Task - Group Cloud Component', () => { await identityService.deleteIdentityUser(apsUser.idIdentityService); await identityService.deleteIdentityUser(testUser.idIdentityService); - done(); }); beforeEach(async () => { await loginSSOPage.loginSSOIdentityService(testUser.email, testUser.password); - navigationBarPage.navigateToProcessServicesCloudPage(); - appListCloudComponent.checkApsContainer(); - appListCloudComponent.checkAppIsDisplayed(simpleApp); - appListCloudComponent.goToApp(simpleApp); - tasksCloudDemoPage.taskListCloudComponent().getDataTable().waitForTableBody(); - tasksCloudDemoPage.openNewTaskForm(); - startTask.checkFormIsDisplayed(); + await navigationBarPage.navigateToProcessServicesCloudPage(); + await appListCloudComponent.checkApsContainer(); + await appListCloudComponent.checkAppIsDisplayed(simpleApp); + await appListCloudComponent.goToApp(simpleApp); + await tasksCloudDemoPage.taskListCloudComponent().getDataTable().waitForTableBody(); + await tasksCloudDemoPage.openNewTaskForm(); + await startTask.checkFormIsDisplayed(); }); - afterEach(() => { - navigationBarPage.clickLogoutButton(); + afterEach(async () => { + await navigationBarPage.clickLogoutButton(); }); it('[C291954] Should be able to select/delete an group for a standalone task', async () => { - peopleCloudComponent.clearAssignee(); + await peopleCloudComponent.clearAssignee(); - groupCloud.searchGroups(testGroup.name); + await groupCloud.searchGroups(testGroup.name); + await groupCloud.checkGroupIsDisplayed(testGroup.name); + await groupCloud.selectGroupFromList(testGroup.name); + await groupCloud.checkSelectedGroup(testGroup.name); - groupCloud.checkGroupIsDisplayed(testGroup.name); - groupCloud.selectGroupFromList(testGroup.name); - groupCloud.checkSelectedGroup(testGroup.name); + await groupCloud.searchGroups(hrGroup.name); + await groupCloud.checkGroupIsDisplayed(hrGroup.name); + await groupCloud.selectGroupFromList(hrGroup.name); + await groupCloud.checkSelectedGroup(hrGroup.name); - groupCloud.searchGroups(hrGroup.name); - groupCloud.checkGroupIsDisplayed(hrGroup.name); - groupCloud.selectGroupFromList(hrGroup.name); - groupCloud.checkSelectedGroup(hrGroup.name); + await groupCloud.removeSelectedGroup(testGroup.name); + await groupCloud.checkGroupNotSelected(testGroup.name); - groupCloud.removeSelectedGroup(testGroup.name); - groupCloud.checkGroupNotSelected(testGroup.name); + await startTask.addName(oneGroupTaskName); + await startTask.clickStartButton(); - startTask.addName(oneGroupTaskName); - startTask.clickStartButton(); - - navigationBarPage.clickLogoutButton(); + await navigationBarPage.clickLogoutButton(); await loginSSOPage.loginSSOIdentityService(apsUser.email, apsUser.password); - navigationBarPage.navigateToProcessServicesCloudPage(); - appListCloudComponent.checkApsContainer(); - appListCloudComponent.checkAppIsDisplayed(simpleApp); - appListCloudComponent.goToApp(simpleApp); - tasksCloudDemoPage.taskListCloudComponent().getDataTable().waitForTableBody(); + await navigationBarPage.navigateToProcessServicesCloudPage(); + await appListCloudComponent.checkApsContainer(); + await appListCloudComponent.checkAppIsDisplayed(simpleApp); + await appListCloudComponent.goToApp(simpleApp); + await tasksCloudDemoPage.taskListCloudComponent().getDataTable().waitForTableBody(); - tasksCloudDemoPage.editTaskFilterCloudComponent() - .clickCustomiseFilterHeader() - .clearAssignee() - .setStatusFilterDropDown('CREATED'); + await tasksCloudDemoPage.editTaskFilterCloudComponent().clickCustomiseFilterHeader(); + await tasksCloudDemoPage.editTaskFilterCloudComponent().clearAssignee(); + await tasksCloudDemoPage.editTaskFilterCloudComponent().setStatusFilterDropDown('CREATED'); - tasksCloudDemoPage.taskListCloudComponent().getDataTable().waitForTableBody(); - tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(oneGroupTaskName); + await tasksCloudDemoPage.taskListCloudComponent().getDataTable().waitForTableBody(); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(oneGroupTaskName); }); it('[C291955] Should be able to select multiple groups when the selection mode=multiple', async () => { - peopleCloudComponent.clearAssignee(); + await peopleCloudComponent.clearAssignee(); - groupCloud.searchGroups(testGroup.name); - groupCloud.checkGroupIsDisplayed(testGroup.name); - groupCloud.selectGroupFromList(testGroup.name); - groupCloud.checkSelectedGroup(testGroup.name); + await groupCloud.searchGroups(testGroup.name); + await groupCloud.checkGroupIsDisplayed(testGroup.name); + await groupCloud.selectGroupFromList(testGroup.name); + await groupCloud.checkSelectedGroup(testGroup.name); - groupCloud.searchGroups(hrGroup.name); - groupCloud.checkGroupIsDisplayed(hrGroup.name); - groupCloud.selectGroupFromList(hrGroup.name); - groupCloud.checkSelectedGroup(hrGroup.name); + await groupCloud.searchGroups(hrGroup.name); + await groupCloud.checkGroupIsDisplayed(hrGroup.name); + await groupCloud.selectGroupFromList(hrGroup.name); + await groupCloud.checkSelectedGroup(hrGroup.name); - startTask.addName(bothGroupsTaskName); - startTask.clickStartButton(); + await startTask.addName(bothGroupsTaskName); + await startTask.clickStartButton(); - navigationBarPage.clickLogoutButton(); + await navigationBarPage.clickLogoutButton(); await loginSSOPage.loginSSOIdentityService(apsUser.email, apsUser.password); - navigationBarPage.navigateToProcessServicesCloudPage(); - appListCloudComponent.checkApsContainer(); - appListCloudComponent.checkAppIsDisplayed(simpleApp); - appListCloudComponent.goToApp(simpleApp); - tasksCloudDemoPage.taskListCloudComponent().getDataTable().waitForTableBody(); + await navigationBarPage.navigateToProcessServicesCloudPage(); + await appListCloudComponent.checkApsContainer(); + await appListCloudComponent.checkAppIsDisplayed(simpleApp); + await appListCloudComponent.goToApp(simpleApp); + await tasksCloudDemoPage.taskListCloudComponent().getDataTable().waitForTableBody(); - tasksCloudDemoPage.editTaskFilterCloudComponent() - .clickCustomiseFilterHeader() - .clearAssignee() - .setStatusFilterDropDown('CREATED'); + await tasksCloudDemoPage.editTaskFilterCloudComponent().clickCustomiseFilterHeader(); + await tasksCloudDemoPage.editTaskFilterCloudComponent().clearAssignee(); + await tasksCloudDemoPage.editTaskFilterCloudComponent().setStatusFilterDropDown('CREATED'); - tasksCloudDemoPage.taskListCloudComponent().getDataTable().waitForTableBody(); - tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(bothGroupsTaskName); + await tasksCloudDemoPage.taskListCloudComponent().getDataTable().waitForTableBody(); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(bothGroupsTaskName); }); - it('[C291993] Should NOT be able to find a group already selected', () => { - groupCloud.searchGroups(testGroup.name); - groupCloud.checkGroupIsDisplayed(testGroup.name); - groupCloud.selectGroupFromList(testGroup.name); - groupCloud.checkSelectedGroup(testGroup.name); + it('[C291993] Should NOT be able to find a group already selected', async () => { + await groupCloud.searchGroups(testGroup.name); + await groupCloud.checkGroupIsDisplayed(testGroup.name); + await groupCloud.selectGroupFromList(testGroup.name); + await groupCloud.checkSelectedGroup(testGroup.name); - groupCloud.searchGroups(testGroup.name); - groupCloud.checkGroupIsNotDisplayed(testGroup.name); + await groupCloud.searchGroups(testGroup.name); + await groupCloud.checkGroupIsNotDisplayed(testGroup.name); }); it('[C291995] Should be able to add a group previously removed', async () => { - groupCloud.searchGroups(testGroup.name); - groupCloud.checkGroupIsDisplayed(testGroup.name); - groupCloud.selectGroupFromList(testGroup.name); - groupCloud.checkSelectedGroup(testGroup.name); + await groupCloud.searchGroups(testGroup.name); + await groupCloud.checkGroupIsDisplayed(testGroup.name); + await groupCloud.selectGroupFromList(testGroup.name); + await groupCloud.checkSelectedGroup(testGroup.name); - groupCloud.removeSelectedGroup(testGroup.name); - groupCloud.checkGroupNotSelected(testGroup.name); + await groupCloud.removeSelectedGroup(testGroup.name); + await groupCloud.checkGroupNotSelected(testGroup.name); - groupCloud.searchGroups(testGroup.name); - groupCloud.checkGroupIsDisplayed(testGroup.name); - groupCloud.selectGroupFromList(testGroup.name); - groupCloud.checkSelectedGroup(testGroup.name); + await groupCloud.searchGroups(testGroup.name); + await groupCloud.checkGroupIsDisplayed(testGroup.name); + await groupCloud.selectGroupFromList(testGroup.name); + await groupCloud.checkSelectedGroup(testGroup.name); }); }); diff --git a/e2e/process-services-cloud/task-filters-cloud.e2e.ts b/e2e/process-services-cloud/task-filters-cloud.e2e.ts index 4051b67501..5989387f04 100644 --- a/e2e/process-services-cloud/task-filters-cloud.e2e.ts +++ b/e2e/process-services-cloud/task-filters-cloud.e2e.ts @@ -38,7 +38,7 @@ describe('Task filters cloud', () => { const newTask = StringUtil.generateRandomString(5), completedTask = StringUtil.generateRandomString(5); const simpleApp = resources.ACTIVITI7_APPS.SIMPLE_APP.name; - beforeAll(async(done) => { + beforeAll(async() => { await apiService.login(browser.params.identityAdmin.email, browser.params.identityAdmin.password); identityService = new IdentityService(apiService); @@ -53,24 +53,24 @@ describe('Task filters cloud', () => { browser.params.config.oauth2.host, browser.params.config.identityHost); await loginSSOPage.loginSSOIdentityService(testUser.email, testUser.password); - done(); + }); - afterAll(async(done) => { + afterAll(async() => { await apiService.login(browser.params.identityAdmin.email, browser.params.identityAdmin.password); await identityService.deleteIdentityUser(testUser.idIdentityService); - done(); + }); - beforeEach(() => { - navigationBarPage.navigateToProcessServicesCloudPage(); - appListCloudComponent.checkApsContainer(); - appListCloudComponent.goToApp(simpleApp); + beforeEach(async () => { + await navigationBarPage.navigateToProcessServicesCloudPage(); + await appListCloudComponent.checkApsContainer(); + await appListCloudComponent.goToApp(simpleApp); }); - it('[C290011] Should display default filters when an app is deployed', () => { - tasksCloudDemoPage.myTasksFilter().checkTaskFilterIsDisplayed(); - tasksCloudDemoPage.completedTasksFilter().checkTaskFilterIsDisplayed(); + it('[C290011] Should display default filters when an app is deployed', async () => { + await tasksCloudDemoPage.myTasksFilter().checkTaskFilterIsDisplayed(); + await tasksCloudDemoPage.completedTasksFilter().checkTaskFilterIsDisplayed(); }); it('[C290009] Should display default filters and created task', async () => { @@ -79,14 +79,14 @@ describe('Task filters cloud', () => { const task = await tasksService.createStandaloneTask(newTask, simpleApp); await tasksService.claimTask(task.entry.id, simpleApp); - tasksCloudDemoPage.completedTasksFilter().clickTaskFilter(); - expect(tasksCloudDemoPage.getActiveFilterName()).toBe('Completed Tasks'); - tasksCloudDemoPage.taskListCloudComponent().checkContentIsNotDisplayedByName(newTask); + await tasksCloudDemoPage.completedTasksFilter().clickTaskFilter(); + await expect(await tasksCloudDemoPage.getActiveFilterName()).toBe('Completed Tasks'); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsNotDisplayedByName(newTask); - tasksCloudDemoPage.myTasksFilter().clickTaskFilter(); - expect(tasksCloudDemoPage.getActiveFilterName()).toBe('My Tasks'); + await tasksCloudDemoPage.myTasksFilter().clickTaskFilter(); + await expect(await tasksCloudDemoPage.getActiveFilterName()).toBe('My Tasks'); - tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(newTask); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(newTask); }); it('[C289955] Should display task in Complete Tasks List when task is completed', async () => { @@ -96,19 +96,19 @@ describe('Task filters cloud', () => { await tasksService.claimTask(toBeCompletedTask.entry.id, simpleApp); await tasksService.completeTask(toBeCompletedTask.entry.id, simpleApp); - tasksCloudDemoPage.myTasksFilter().clickTaskFilter(); - expect(tasksCloudDemoPage.getActiveFilterName()).toBe('My Tasks'); - tasksCloudDemoPage.taskListCloudComponent().checkContentIsNotDisplayedByName(completedTask); + await tasksCloudDemoPage.myTasksFilter().clickTaskFilter(); + await expect(await tasksCloudDemoPage.getActiveFilterName()).toBe('My Tasks'); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsNotDisplayedByName(completedTask); - tasksCloudDemoPage.completedTasksFilter().clickTaskFilter(); - expect(tasksCloudDemoPage.getActiveFilterName()).toBe('Completed Tasks'); + await tasksCloudDemoPage.completedTasksFilter().clickTaskFilter(); + await expect(await tasksCloudDemoPage.getActiveFilterName()).toBe('Completed Tasks'); - tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(completedTask); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(completedTask); }); - it('[C291792] Should select the first task filter from the list as default', () => { + it('[C291792] Should select the first task filter from the list as default', async () => { - expect(tasksCloudDemoPage.firstFilterIsActive()).toBe(true); + await expect(await tasksCloudDemoPage.firstFilterIsActive()).toBe(true); }); }); diff --git a/e2e/process-services-cloud/task-form-cloud-component.e2e.ts b/e2e/process-services-cloud/task-form-cloud-component.e2e.ts index 0846840b5f..06c984704d 100644 --- a/e2e/process-services-cloud/task-form-cloud-component.e2e.ts +++ b/e2e/process-services-cloud/task-form-cloud-component.e2e.ts @@ -27,7 +27,7 @@ import { SettingsPage, TaskHeaderCloudPage, TaskFormCloudComponent, - Widget, IdentityService + Widget, IdentityService, GroupIdentityService } from '@alfresco/adf-testing'; import { NavigationBarPage } from '../pages/adf/navigationBarPage'; import { TasksCloudDemoPage } from '../pages/adf/demo-shell/process-services/tasksCloudDemoPage'; @@ -50,21 +50,29 @@ describe('Task form cloud component', () => { let processDefinitionService: ProcessDefinitionsService; let processInstancesService: ProcessInstancesService; let identityService: IdentityService; + let groupIdentityService: GroupIdentityService; let completedTask, createdTask, assigneeTask, toBeCompletedTask, formValidationsTask, testUser; const candidateBaseApp = resources.ACTIVITI7_APPS.CANDIDATE_BASE_APP.name; const completedTaskName = StringUtil.generateRandomString(), assignedTaskName = StringUtil.generateRandomString(); - beforeAll(async (done) => { + beforeAll(async () => { const apiService = new ApiService(browser.params.config.oauth2.clientId, browser.params.config.bpmHost, browser.params.config.oauth2.host, browser.params.config.providers); await apiService.login(browser.params.identityAdmin.email, browser.params.identityAdmin.password); identityService = new IdentityService(apiService); + groupIdentityService = new GroupIdentityService(apiService); + testUser = await identityService.createIdentityUserWithRole(apiService, [identityService.ROLES.APS_USER]); + + const groupInfo = await groupIdentityService.getGroupInfoByGroupName('hr'); + await identityService.addUserToGroup(testUser.idIdentityService, groupInfo.id); await apiService.login(testUser.email, testUser.password); tasksService = new TasksService(apiService); + createdTask = await tasksService.createStandaloneTask(StringUtil.generateRandomString(), candidateBaseApp); + assigneeTask = await tasksService.createStandaloneTask(StringUtil.generateRandomString(), candidateBaseApp); await tasksService.claimTask(assigneeTask.entry.id, candidateBaseApp); @@ -92,157 +100,161 @@ describe('Task form cloud component', () => { browser.params.config.oauth2.host, browser.params.config.identityHost); await loginSSOPage.loginSSOIdentityService(testUser.email, testUser.password); - done(); + }, 5 * 60 * 1000); - afterAll(async (done) => { + afterAll(async () => { try { await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); await identityService.deleteIdentityUser(testUser.id); } catch (error) { } await this.alfrescoJsApi.logout(); - browser.executeScript('window.sessionStorage.clear();'); - browser.executeScript('window.localStorage.clear();'); - done(); + await browser.executeScript('window.sessionStorage.clear();'); + await browser.executeScript('window.localStorage.clear();'); }); it('[C307032] Should display the appropriate title for the unclaim option of a Task', async () => { - navigationBarPage.navigateToProcessServicesCloudPage(); - appListCloudComponent.checkApsContainer(); - appListCloudComponent.goToApp(candidateBaseApp); + await navigationBarPage.navigateToProcessServicesCloudPage(); + await appListCloudComponent.checkApsContainer(); + await appListCloudComponent.goToApp(candidateBaseApp); await tasksCloudDemoPage.myTasksFilter().clickTaskFilter(); - tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(assigneeTask.entry.name); - tasksCloudDemoPage.taskListCloudComponent().selectRow(assigneeTask.entry.name); - expect(taskFormCloudComponent.getReleaseButtonText()).toBe('RELEASE'); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(assigneeTask.entry.name); + await tasksCloudDemoPage.taskListCloudComponent().selectRow(assigneeTask.entry.name); + await expect(await taskFormCloudComponent.getReleaseButtonText()).toBe('RELEASE'); }); it('[C310142] Empty content is displayed when having a task without form', async () => { - navigationBarPage.navigateToProcessServicesCloudPage(); - appListCloudComponent.checkApsContainer(); - appListCloudComponent.goToApp(candidateBaseApp); + await navigationBarPage.navigateToProcessServicesCloudPage(); + await appListCloudComponent.checkApsContainer(); + await appListCloudComponent.goToApp(candidateBaseApp); await tasksCloudDemoPage.myTasksFilter().clickTaskFilter(); - tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(assigneeTask.entry.name); - tasksCloudDemoPage.taskListCloudComponent().selectRow(assigneeTask.entry.name); - taskFormCloudComponent.checkFormIsNotDisplayed(); - expect(taskFormCloudComponent.getFormTitle()).toBe(assigneeTask.entry.name); - taskFormCloudComponent.checkFormContentIsEmpty(); - expect(taskFormCloudComponent.getEmptyFormContentTitle()).toBe(`No form available`); - expect(taskFormCloudComponent.getEmptyFormContentSubtitle()).toBe(`Attach a form that can be viewed later`); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(assigneeTask.entry.name); + await tasksCloudDemoPage.taskListCloudComponent().selectRow(assigneeTask.entry.name); + await taskFormCloudComponent.checkFormIsNotDisplayed(); + await expect(await taskFormCloudComponent.getFormTitle()).toBe(assigneeTask.entry.name); + await taskFormCloudComponent.checkFormContentIsEmpty(); + await expect(await taskFormCloudComponent.getEmptyFormContentTitle()).toBe(`No form available`); + await expect(await taskFormCloudComponent.getEmptyFormContentSubtitle()).toBe(`Attach a form that can be viewed later`); }); it('[C310199] Should not be able to complete a task when required field is empty or invalid data is added to a field', async () => { - navigationBarPage.navigateToProcessServicesCloudPage(); - appListCloudComponent.checkApsContainer(); - appListCloudComponent.goToApp(candidateBaseApp); + await navigationBarPage.navigateToProcessServicesCloudPage(); + await appListCloudComponent.checkApsContainer(); + await appListCloudComponent.goToApp(candidateBaseApp); await tasksCloudDemoPage.myTasksFilter().clickTaskFilter(); - tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(formValidationsTask.entry.name); - tasksCloudDemoPage.taskListCloudComponent().selectRow(formValidationsTask.entry.name); - taskFormCloudComponent.checkFormIsDisplayed(); - taskFormCloudComponent.formFields().checkFormIsDisplayed(); - taskFormCloudComponent.formFields().checkWidgetIsVisible('Text0tma8h'); - taskFormCloudComponent.formFields().checkWidgetIsVisible('Date0m1moq'); - taskFormCloudComponent.formFields().checkWidgetIsVisible('Number0klykr'); - taskFormCloudComponent.formFields().checkWidgetIsVisible('Amount0mtp1h'); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(formValidationsTask.entry.name); + await tasksCloudDemoPage.taskListCloudComponent().selectRow(formValidationsTask.entry.name); + await taskFormCloudComponent.checkFormIsDisplayed(); + await taskFormCloudComponent.formFields().checkFormIsDisplayed(); + await taskFormCloudComponent.formFields().checkWidgetIsVisible('Text0tma8h'); + await taskFormCloudComponent.formFields().checkWidgetIsVisible('Date0m1moq'); + await taskFormCloudComponent.formFields().checkWidgetIsVisible('Number0klykr'); + await taskFormCloudComponent.formFields().checkWidgetIsVisible('Amount0mtp1h'); - expect(taskFormCloudComponent.getCompleteButton().isEnabled()).toBe(false); - widget.textWidget().setValue('Text0tma8h', 'Some random text'); - expect(taskFormCloudComponent.getCompleteButton().isEnabled()).toBe(true); + await expect(await (await taskFormCloudComponent.getCompleteButton()).isEnabled()).toBe(false); + await widget.textWidget().setValue('Text0tma8h', 'Some random text'); + await expect(await (await taskFormCloudComponent.getCompleteButton()).isEnabled()).toBe(true); - widget.dateWidget().setDateInput('Date0m1moq', 'invalid date'); + await widget.dateWidget().setDateInput('Date0m1moq', 'invalid date'); await browser.actions().sendKeys(protractor.Key.ENTER).perform(); - expect(taskFormCloudComponent.getCompleteButton().isEnabled()).toBe(false); + await expect(await (await taskFormCloudComponent.getCompleteButton()).isEnabled()).toBe(false); - widget.dateWidget().setDateInput('Date0m1moq', '20-10-2018'); + await widget.dateWidget().setDateInput('Date0m1moq', '20-10-2018'); await browser.actions().sendKeys(protractor.Key.ENTER).perform(); - expect(taskFormCloudComponent.getCompleteButton().isEnabled()).toBe(true); + await expect(await (await taskFormCloudComponent.getCompleteButton()).isEnabled()).toBe(true); - widget.numberWidget().setFieldValue('Number0klykr', 'invalid number'); - expect(taskFormCloudComponent.getCompleteButton().isEnabled()).toBe(false); + await widget.numberWidget().setFieldValue('Number0klykr', 'invalid number'); + await expect(await (await taskFormCloudComponent.getCompleteButton()).isEnabled()).toBe(false); - widget.numberWidget().setFieldValue('Number0klykr', '26'); - expect(taskFormCloudComponent.getCompleteButton().isEnabled()).toBe(true); + await widget.numberWidget().setFieldValue('Number0klykr', '26'); + await expect(await (await taskFormCloudComponent.getCompleteButton()).isEnabled()).toBe(true); - widget.amountWidget().setFieldValue('Amount0mtp1h', 'invalid amount'); - expect(taskFormCloudComponent.getCompleteButton().isEnabled()).toBe(false); + await widget.amountWidget().setFieldValue('Amount0mtp1h', 'invalid amount'); + await expect(await (await taskFormCloudComponent.getCompleteButton()).isEnabled()).toBe(false); - widget.amountWidget().setFieldValue('Amount0mtp1h', '660'); - expect(taskFormCloudComponent.getCompleteButton().isEnabled()).toBe(true); + await widget.amountWidget().setFieldValue('Amount0mtp1h', '660'); + await expect(await (await taskFormCloudComponent.getCompleteButton()).isEnabled()).toBe(true); }); describe('Complete task - cloud directive', () => { - beforeEach((done) => { - navigationBarPage.navigateToProcessServicesCloudPage(); - appListCloudComponent.checkApsContainer(); - appListCloudComponent.goToApp(candidateBaseApp); - done(); + beforeEach(async () => { + await navigationBarPage.navigateToProcessServicesCloudPage(); + await appListCloudComponent.checkApsContainer(); + await appListCloudComponent.goToApp(candidateBaseApp); + }); it('[C307093] Complete button is not displayed when the task is already completed', async () => { await tasksCloudDemoPage.completedTasksFilter().clickTaskFilter(); - expect(tasksCloudDemoPage.getActiveFilterName()).toBe('Completed Tasks'); - tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(completedTaskName); - tasksCloudDemoPage.taskListCloudComponent().selectRow(completedTaskName); - taskHeaderCloudPage.checkTaskPropertyListIsDisplayed(); - taskFormCloudComponent.checkCompleteButtonIsNotDisplayed(); + await expect(await tasksCloudDemoPage.getActiveFilterName()).toBe('Completed Tasks'); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(completedTaskName); + await tasksCloudDemoPage.taskListCloudComponent().selectRow(completedTaskName); + await taskHeaderCloudPage.checkTaskPropertyListIsDisplayed(); + await taskFormCloudComponent.checkCompleteButtonIsNotDisplayed(); }); it('[C307095] Task can not be completed by owner user', async () => { await tasksCloudDemoPage.myTasksFilter().clickTaskFilter(); - expect(tasksCloudDemoPage.getActiveFilterName()).toBe('My Tasks'); + await expect(await tasksCloudDemoPage.getActiveFilterName()).toBe('My Tasks'); await tasksCloudDemoPage.editTaskFilterCloudComponent().clickCustomiseFilterHeader(); - browser.driver.sleep(1000); - tasksCloudDemoPage.editTaskFilterCloudComponent().clearAssignee().setStatusFilterDropDown('CREATED'); - tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(createdTask.entry.name); - tasksCloudDemoPage.taskListCloudComponent().selectRow(createdTask.entry.name); - taskHeaderCloudPage.checkTaskPropertyListIsDisplayed(); - taskFormCloudComponent.checkCompleteButtonIsNotDisplayed(); + await browser.driver.sleep(1000); + + await tasksCloudDemoPage.editTaskFilterCloudComponent().clearAssignee(); + await tasksCloudDemoPage.editTaskFilterCloudComponent().setStatusFilterDropDown('CREATED'); + + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(createdTask.entry.name); + await tasksCloudDemoPage.taskListCloudComponent().selectRow(createdTask.entry.name); + await taskHeaderCloudPage.checkTaskPropertyListIsDisplayed(); + await taskFormCloudComponent.checkCompleteButtonIsNotDisplayed(); }); it('[C307110] Task list is displayed after clicking on Cancel button', async () => { await tasksCloudDemoPage.myTasksFilter().clickTaskFilter(); - expect(tasksCloudDemoPage.getActiveFilterName()).toBe('My Tasks'); + await expect(await tasksCloudDemoPage.getActiveFilterName()).toBe('My Tasks'); - tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(assigneeTask.entry.name); - tasksCloudDemoPage.taskListCloudComponent().selectRow(assigneeTask.entry.name); - taskHeaderCloudPage.checkTaskPropertyListIsDisplayed(); - taskFormCloudComponent.clickCancelButton(); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(assigneeTask.entry.name); + await tasksCloudDemoPage.taskListCloudComponent().selectRow(assigneeTask.entry.name); + await taskHeaderCloudPage.checkTaskPropertyListIsDisplayed(); + await taskFormCloudComponent.clickCancelButton(); - expect(tasksCloudDemoPage.getActiveFilterName()).toBe('My Tasks'); - tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(assigneeTask.entry.name); + await expect(await tasksCloudDemoPage.getActiveFilterName()).toBe('My Tasks'); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(assigneeTask.entry.name); }); it('[C307094] Standalone Task can be completed by a user that is owner and assignee', async () => { await tasksCloudDemoPage.myTasksFilter().clickTaskFilter(); - expect(tasksCloudDemoPage.getActiveFilterName()).toBe('My Tasks'); + await expect(await tasksCloudDemoPage.getActiveFilterName()).toBe('My Tasks'); - tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(toBeCompletedTask.entry.name); - tasksCloudDemoPage.taskListCloudComponent().selectRow(toBeCompletedTask.entry.name); - taskHeaderCloudPage.checkTaskPropertyListIsDisplayed(); - taskFormCloudComponent.checkCompleteButtonIsDisplayed().clickCompleteButton(); - tasksCloudDemoPage.taskListCloudComponent().checkContentIsNotDisplayedByName(toBeCompletedTask.entry.name); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(toBeCompletedTask.entry.name); + await tasksCloudDemoPage.taskListCloudComponent().selectRow(toBeCompletedTask.entry.name); + await taskHeaderCloudPage.checkTaskPropertyListIsDisplayed(); + await taskFormCloudComponent.checkCompleteButtonIsDisplayed(); + await taskFormCloudComponent.clickCompleteButton(); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsNotDisplayedByName(toBeCompletedTask.entry.name); await tasksCloudDemoPage.completedTasksFilter().clickTaskFilter(); - tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(toBeCompletedTask.entry.name); - taskFormCloudComponent.checkCompleteButtonIsNotDisplayed(); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(toBeCompletedTask.entry.name); + await taskFormCloudComponent.checkCompleteButtonIsNotDisplayed(); }); - it('[C307111] Task of a process can be completed by a user that is owner and assignee', () => { - tasksCloudDemoPage.myTasksFilter().clickTaskFilter(); - expect(tasksCloudDemoPage.getActiveFilterName()).toBe('My Tasks'); + it('[C307111] Task of a process can be completed by a user that is owner and assignee', async () => { + await tasksCloudDemoPage.myTasksFilter().clickTaskFilter(); + await expect(await tasksCloudDemoPage.getActiveFilterName()).toBe('My Tasks'); - tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(completedTask.entry.name); - tasksCloudDemoPage.taskListCloudComponent().selectRow(completedTask.entry.name); - taskHeaderCloudPage.checkTaskPropertyListIsDisplayed(); - taskFormCloudComponent.checkCompleteButtonIsDisplayed().clickCompleteButton(); - tasksCloudDemoPage.taskListCloudComponent().checkContentIsNotDisplayedByName(completedTask.entry.name); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(completedTask.entry.name); + await tasksCloudDemoPage.taskListCloudComponent().selectRow(completedTask.entry.name); + await taskHeaderCloudPage.checkTaskPropertyListIsDisplayed(); + await taskFormCloudComponent.checkCompleteButtonIsDisplayed(); + await taskFormCloudComponent.clickCompleteButton(); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsNotDisplayedByName(completedTask.entry.name); - tasksCloudDemoPage.completedTasksFilter().clickTaskFilter(); - tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(completedTask.entry.name); - taskFormCloudComponent.checkCompleteButtonIsNotDisplayed(); + await tasksCloudDemoPage.completedTasksFilter().clickTaskFilter(); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(completedTask.entry.name); + await taskFormCloudComponent.checkCompleteButtonIsNotDisplayed(); }); }); diff --git a/e2e/process-services-cloud/task-header-cloud.e2e.ts b/e2e/process-services-cloud/task-header-cloud.e2e.ts index 1354ed6338..dcf620d549 100644 --- a/e2e/process-services-cloud/task-header-cloud.e2e.ts +++ b/e2e/process-services-cloud/task-header-cloud.e2e.ts @@ -55,7 +55,7 @@ describe('Task Header cloud component', () => { let identityService: IdentityService; let groupIdentityService: GroupIdentityService; - beforeAll(async (done) => { + beforeAll(async () => { await apiService.login(browser.params.identityAdmin.email, browser.params.identityAdmin.password); identityService = new IdentityService(apiService); groupIdentityService = new GroupIdentityService(apiService); @@ -91,82 +91,77 @@ describe('Task Header cloud component', () => { browser.params.config.oauth2.host, browser.params.config.identityHost); await loginSSOPage.loginSSOIdentityService(testUser.email, testUser.password); - done(); + }); - afterAll(async (done) => { + afterAll(async () => { await apiService.login(browser.params.identityAdmin.email, browser.params.identityAdmin.password); await identityService.deleteIdentityUser(testUser.idIdentityService); - done(); }); - beforeEach(() => { - navigationBarPage.navigateToProcessServicesCloudPage(); - appListCloudComponent.checkApsContainer(); - appListCloudComponent.goToApp(simpleApp); + beforeEach(async () => { + await navigationBarPage.navigateToProcessServicesCloudPage(); + await appListCloudComponent.checkApsContainer(); + await appListCloudComponent.goToApp(simpleApp); }); - it('[C291943] Should display task details for assigned task', () => { - tasksCloudDemoPage.myTasksFilter().clickTaskFilter(); - tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(basicCreatedTaskName); - tasksCloudDemoPage.taskListCloudComponent().selectRow(basicCreatedTaskName); - expect(taskHeaderCloudPage.getId()).toEqual(basicCreatedTask.entry.id); - expect(taskHeaderCloudPage.getDescription()) + it('[C291943] Should display task details for assigned task', async () => { + await tasksCloudDemoPage.myTasksFilter().clickTaskFilter(); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(basicCreatedTaskName); + await tasksCloudDemoPage.taskListCloudComponent().selectRow(basicCreatedTaskName); + await expect(await taskHeaderCloudPage.getId()).toEqual(basicCreatedTask.entry.id); + await expect(await taskHeaderCloudPage.getDescription()) .toEqual(basicCreatedTask.entry.description === null ? CONSTANTS.TASK_DETAILS.NO_DESCRIPTION : basicCreatedTask.entry.description); - expect(taskHeaderCloudPage.getStatus()).toEqual(basicCreatedTask.entry.status); - expect(taskHeaderCloudPage.getPriority()).toEqual(basicCreatedTask.entry.priority === 0 ? '' : basicCreatedTask.entry.priority.toString()); - expect(taskHeaderCloudPage.getCategory()).toEqual(!basicCreatedTask.entry.category ? + await expect(await taskHeaderCloudPage.getStatus()).toEqual(basicCreatedTask.entry.status); + await expect(await taskHeaderCloudPage.getPriority()).toEqual(basicCreatedTask.entry.priority === 0 ? '' : basicCreatedTask.entry.priority.toString()); + await expect(await taskHeaderCloudPage.getCategory()).toEqual(!basicCreatedTask.entry.category ? CONSTANTS.TASK_DETAILS.NO_CATEGORY : basicCreatedTask.entry.category); - expect(taskHeaderCloudPage.getDueDate()).toEqual(basicCreatedTask.entry.dueDate === null ? + await expect(await taskHeaderCloudPage.getDueDate()).toEqual(basicCreatedTask.entry.dueDate === null ? CONSTANTS.TASK_DETAILS.NO_DATE : basicCreatedDate); - expect(taskHeaderCloudPage.getEndDate()).toEqual(''); - expect(taskHeaderCloudPage.getCreated()).toEqual(basicCreatedDate); - expect(taskHeaderCloudPage.getAssignee()).toEqual(basicCreatedTask.entry.assignee === null ? '' : basicCreatedTask.entry.assignee); - expect(taskHeaderCloudPage.getParentName()).toEqual(CONSTANTS.TASK_DETAILS.NO_PARENT); - expect(taskHeaderCloudPage.getParentTaskId()) - .toEqual(basicCreatedTask.entry.parentTaskId === null ? '' : basicCreatedTask.entry.parentTaskId); + await expect(await taskHeaderCloudPage.getEndDate()).toEqual(''); + await expect(await taskHeaderCloudPage.getCreated()).toEqual(basicCreatedDate); + await expect(await taskHeaderCloudPage.getAssignee()).toEqual(basicCreatedTask.entry.assignee === null ? '' : basicCreatedTask.entry.assignee); + await expect(await taskHeaderCloudPage.getParentName()).toEqual(CONSTANTS.TASK_DETAILS.NO_PARENT); }); - it('[C291944] Should display task details for completed task', () => { - tasksCloudDemoPage.myTasksFilter().clickTaskFilter(); - tasksCloudDemoPage.completedTasksFilter().clickTaskFilter(); - tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(completedTaskName); - tasksCloudDemoPage.taskListCloudComponent().selectRow(completedTaskName); - expect(taskHeaderCloudPage.getId()).toEqual(completedTask.entry.id); - expect(taskHeaderCloudPage.getDescription()) + it('[C291944] Should display task details for completed task', async () => { + await tasksCloudDemoPage.myTasksFilter().clickTaskFilter(); + await tasksCloudDemoPage.completedTasksFilter().clickTaskFilter(); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(completedTaskName); + await tasksCloudDemoPage.taskListCloudComponent().selectRow(completedTaskName); + await expect(await taskHeaderCloudPage.getId()).toEqual(completedTask.entry.id); + await expect(await taskHeaderCloudPage.getDescription()) .toEqual(completedTask.entry.description === null ? CONSTANTS.TASK_DETAILS.NO_DESCRIPTION : completedTask.entry.description); - expect(taskHeaderCloudPage.getStatus()).toEqual(completedTask.entry.status); - expect(taskHeaderCloudPage.getPriority()).toEqual(completedTask.entry.priority === '0' ? '' : completedTask.entry.priority.toString()); - expect(taskHeaderCloudPage.getCategory()).toEqual(!completedTask.entry.category ? + await expect(await taskHeaderCloudPage.getStatus()).toEqual(completedTask.entry.status); + await expect(await taskHeaderCloudPage.getPriority()).toEqual(completedTask.entry.priority === '0' ? '' : completedTask.entry.priority.toString()); + await expect(await taskHeaderCloudPage.getCategory()).toEqual(!completedTask.entry.category ? CONSTANTS.TASK_DETAILS.NO_CATEGORY : completedTask.entry.category); - expect(taskHeaderCloudPage.getDueDate()).toEqual(completedTask.entry.dueDate === null ? + await expect(await taskHeaderCloudPage.getDueDate()).toEqual(completedTask.entry.dueDate === null ? CONSTANTS.TASK_DETAILS.NO_DATE : completedCreatedDate); - expect(taskHeaderCloudPage.getEndDate()).toEqual(completedEndDate); - expect(taskHeaderCloudPage.getCreated()).toEqual(completedCreatedDate); - expect(taskHeaderCloudPage.getAssignee()).toEqual(completedTask.entry.assignee === null ? '' : completedTask.entry.assignee); - expect(taskHeaderCloudPage.getParentName()).toEqual(CONSTANTS.TASK_DETAILS.NO_PARENT); - expect(taskHeaderCloudPage.getParentTaskId()) - .toEqual(completedTask.entry.parentTaskId === null ? '' : completedTask.entry.parentTaskId); + await expect(await taskHeaderCloudPage.getEndDate()).toEqual(completedEndDate); + await expect(await taskHeaderCloudPage.getCreated()).toEqual(completedCreatedDate); + await expect(await taskHeaderCloudPage.getAssignee()).toEqual(completedTask.entry.assignee === null ? '' : completedTask.entry.assignee); + await expect(await taskHeaderCloudPage.getParentName()).toEqual(CONSTANTS.TASK_DETAILS.NO_PARENT); }); - it('[C291945] Should Parent Name and Parent Id not be empty in task details for sub task', () => { - tasksCloudDemoPage.myTasksFilter().clickTaskFilter(); - tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(subTask.entry.name); - tasksCloudDemoPage.taskListCloudComponent().selectRow(subTask.entry.name); - expect(taskHeaderCloudPage.getId()).toEqual(subTask.entry.id); - expect(taskHeaderCloudPage.getDescription()) + it('[C291945] Should Parent Name and Parent Id not be empty in task details for sub task', async () => { + await tasksCloudDemoPage.myTasksFilter().clickTaskFilter(); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(subTask.entry.name); + await tasksCloudDemoPage.taskListCloudComponent().selectRow(subTask.entry.name); + await expect(await taskHeaderCloudPage.getId()).toEqual(subTask.entry.id); + await expect(await taskHeaderCloudPage.getDescription()) .toEqual(subTask.entry.description === null ? CONSTANTS.TASK_DETAILS.NO_DESCRIPTION : subTask.entry.description); - expect(taskHeaderCloudPage.getStatus()).toEqual(subTask.entry.status); - expect(taskHeaderCloudPage.getPriority()).toEqual(subTask.entry.priority === 0 ? '' : subTask.entry.priority.toString()); - expect(taskHeaderCloudPage.getCategory()).toEqual(!subTask.entry.category ? + await expect(await taskHeaderCloudPage.getStatus()).toEqual(subTask.entry.status); + await expect(await taskHeaderCloudPage.getPriority()).toEqual(subTask.entry.priority === 0 ? '' : subTask.entry.priority.toString()); + await expect(await taskHeaderCloudPage.getCategory()).toEqual(!subTask.entry.category ? CONSTANTS.TASK_DETAILS.NO_CATEGORY : subTask.entry.category); - expect(taskHeaderCloudPage.getDueDate()).toEqual(subTask.entry.dueDate === null ? + await expect(await taskHeaderCloudPage.getDueDate()).toEqual(subTask.entry.dueDate === null ? CONSTANTS.TASK_DETAILS.NO_DATE : subTaskCreatedDate); - expect(taskHeaderCloudPage.getEndDate()).toEqual(''); - expect(taskHeaderCloudPage.getCreated()).toEqual(subTaskCreatedDate); - expect(taskHeaderCloudPage.getAssignee()).toEqual(subTask.entry.assignee === null ? '' : subTask.entry.assignee); - expect(taskHeaderCloudPage.getParentName()).toEqual(basicCreatedTask.entry.name); - expect(taskHeaderCloudPage.getParentTaskId()) + await expect(await taskHeaderCloudPage.getEndDate()).toEqual(''); + await expect(await taskHeaderCloudPage.getCreated()).toEqual(subTaskCreatedDate); + await expect(await taskHeaderCloudPage.getAssignee()).toEqual(subTask.entry.assignee === null ? '' : subTask.entry.assignee); + await expect(await taskHeaderCloudPage.getParentName()).toEqual(basicCreatedTask.entry.name); + await expect(await taskHeaderCloudPage.getParentTaskId()) .toEqual(subTask.entry.parentTaskId === null ? '' : subTask.entry.parentTaskId); }); @@ -177,18 +172,18 @@ describe('Task Header cloud component', () => { '"defaultDateTimeFormat": "M/d/yy, h:mm a",' + '"defaultLocale": "uk"' + '}'); - navigationBarPage.navigateToProcessServicesCloudPage(); - appListCloudComponent.checkApsContainer(); - appListCloudComponent.goToApp(simpleApp); + await navigationBarPage.navigateToProcessServicesCloudPage(); + await appListCloudComponent.checkApsContainer(); + await appListCloudComponent.goToApp(simpleApp); }); - it('[C311280] Should pick up the default date format from the app configuration', () => { - tasksCloudDemoPage.myTasksFilter().clickTaskFilter(); - tasksCloudDemoPage.completedTasksFilter().clickTaskFilter(); - tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(completedTaskName); - tasksCloudDemoPage.taskListCloudComponent().selectRow(completedTaskName); - taskHeaderCloudPage.checkTaskPropertyListIsDisplayed(); - expect(taskHeaderCloudPage.getCreated()).toEqual(defaultDate); + it('[C311280] Should pick up the default date format from the app configuration', async () => { + await tasksCloudDemoPage.myTasksFilter().clickTaskFilter(); + await tasksCloudDemoPage.completedTasksFilter().clickTaskFilter(); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(completedTaskName); + await tasksCloudDemoPage.taskListCloudComponent().selectRow(completedTaskName); + await taskHeaderCloudPage.checkTaskPropertyListIsDisplayed(); + await expect(await taskHeaderCloudPage.getCreated()).toEqual(defaultDate); }); }); }); diff --git a/e2e/process-services-cloud/task-list-properties.e2e.ts b/e2e/process-services-cloud/task-list-properties.e2e.ts index ea5545c113..3bd9e34cd8 100644 --- a/e2e/process-services-cloud/task-list-properties.e2e.ts +++ b/e2e/process-services-cloud/task-list-properties.e2e.ts @@ -56,7 +56,7 @@ describe('Edit task filters and task list properties', () => { const currentDate = DateUtil.formatDate('DD/MM/YYYY'); const afterDate = moment().add(1, 'days').format('DD/MM/YYYY'); - beforeAll(async (done) => { + beforeAll(async () => { await apiService.login(browser.params.identityAdmin.email, browser.params.identityAdmin.password); identityService = new IdentityService(apiService); @@ -138,7 +138,6 @@ describe('Edit task filters and task list properties', () => { 'delete' ] })); - done(); }, 5 * 60 * 1000); afterAll(async (done) => { @@ -149,326 +148,348 @@ describe('Edit task filters and task list properties', () => { describe('Edit task filters and task list properties - filter properties', () => { - beforeEach(() => { - navigationBarPage.navigateToProcessServicesCloudPage(); - appListCloudComponent.checkApsContainer(); - appListCloudComponent.goToApp(simpleApp); - tasksCloudDemoPage.editTaskFilterCloudComponent().clickCustomiseFilterHeader(); - tasksCloudDemoPage.myTasksFilter().checkTaskFilterIsDisplayed(); + beforeEach(async () => { + await navigationBarPage.navigateToProcessServicesCloudPage(); + await appListCloudComponent.checkApsContainer(); + await appListCloudComponent.goToApp(simpleApp); + await tasksCloudDemoPage.editTaskFilterCloudComponent().clickCustomiseFilterHeader(); + await tasksCloudDemoPage.myTasksFilter().checkTaskFilterIsDisplayed(); }); - it('[C292004] Filter by appName', () => { - tasksCloudDemoPage.myTasksFilter().checkTaskFilterIsDisplayed(); - expect(tasksCloudDemoPage.getActiveFilterName()).toBe('My Tasks'); + it('[C292004] Filter by appName', async () => { + await tasksCloudDemoPage.myTasksFilter().checkTaskFilterIsDisplayed(); + await expect(await tasksCloudDemoPage.getActiveFilterName()).toBe('My Tasks'); - expect(tasksCloudDemoPage.editTaskFilterCloudComponent().getAppNameDropDownValue()).toEqual(simpleApp); + await expect(await tasksCloudDemoPage.editTaskFilterCloudComponent().getAppNameDropDownValue()).toEqual(simpleApp); - tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(createdTask.entry.name); - tasksCloudDemoPage.taskListCloudComponent().checkContentIsNotDisplayedByName(notDisplayedTask.entry.name); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(createdTask.entry.name); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsNotDisplayedByName(notDisplayedTask.entry.name); - tasksCloudDemoPage.editTaskFilterCloudComponent().setAppNameDropDown(candidateBaseApp); - expect(tasksCloudDemoPage.editTaskFilterCloudComponent().getAppNameDropDownValue()).toEqual(candidateBaseApp); + await tasksCloudDemoPage.editTaskFilterCloudComponent().setAppNameDropDown(candidateBaseApp); + await expect(await tasksCloudDemoPage.editTaskFilterCloudComponent().getAppNameDropDownValue()).toEqual(candidateBaseApp); - tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(notDisplayedTask.entry.name); - tasksCloudDemoPage.taskListCloudComponent().checkContentIsNotDisplayedByName(createdTask.entry.name); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(notDisplayedTask.entry.name); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsNotDisplayedByName(createdTask.entry.name); }); - it('[C291906] Should be able to see only the task with specific taskId when typing it in the task Id field', () => { - tasksCloudDemoPage.myTasksFilter().checkTaskFilterIsDisplayed(); - expect(tasksCloudDemoPage.getActiveFilterName()).toBe('My Tasks'); + it('[C291906] Should be able to see only the task with specific taskId when typing it in the task Id field', async () => { + await tasksCloudDemoPage.myTasksFilter().checkTaskFilterIsDisplayed(); + await expect(await tasksCloudDemoPage.getActiveFilterName()).toBe('My Tasks'); - tasksCloudDemoPage.editTaskFilterCloudComponent().setId(createdTask.entry.id); - expect(tasksCloudDemoPage.editTaskFilterCloudComponent().getId()).toEqual(createdTask.entry.id); - tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedById(createdTask.entry.id); - tasksCloudDemoPage.taskListCloudComponent().getRowsWithSameId(createdTask.entry.id).then((list) => { - expect(list.length).toEqual(1); + await tasksCloudDemoPage.editTaskFilterCloudComponent().setId(createdTask.entry.id); + await expect(await tasksCloudDemoPage.editTaskFilterCloudComponent().getId()).toEqual(createdTask.entry.id); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedById(createdTask.entry.id); + await tasksCloudDemoPage.taskListCloudComponent().getRowsWithSameId(createdTask.entry.id).then(async (list) => { + await expect(list.length).toEqual(1); }); }); - it('[C291907] Should be able to see No tasks found when typing an invalid task id', () => { - tasksCloudDemoPage.myTasksFilter().checkTaskFilterIsDisplayed(); - expect(tasksCloudDemoPage.getActiveFilterName()).toBe('My Tasks'); + it('[C291907] Should be able to see No tasks found when typing an invalid task id', async () => { + await tasksCloudDemoPage.myTasksFilter().checkTaskFilterIsDisplayed(); + await expect(await tasksCloudDemoPage.getActiveFilterName()).toBe('My Tasks'); - tasksCloudDemoPage.editTaskFilterCloudComponent().setId('invalidId'); - expect(tasksCloudDemoPage.editTaskFilterCloudComponent().getId()).toEqual('invalidId'); + await tasksCloudDemoPage.editTaskFilterCloudComponent().setId('invalidId'); + await expect(await tasksCloudDemoPage.editTaskFilterCloudComponent().getId()).toEqual('invalidId'); - expect(tasksCloudDemoPage.taskListCloudComponent().getNoTasksFoundMessage()).toEqual(noTasksFoundMessage); + await expect(await tasksCloudDemoPage.taskListCloudComponent().getNoTasksFoundMessage()).toEqual(noTasksFoundMessage); }); - it('[C297476] Filter by taskName', () => { - tasksCloudDemoPage.myTasksFilter().checkTaskFilterIsDisplayed(); - expect(tasksCloudDemoPage.getActiveFilterName()).toBe('My Tasks'); + it('[C297476] Filter by taskName', async () => { + await tasksCloudDemoPage.myTasksFilter().checkTaskFilterIsDisplayed(); + await expect(await tasksCloudDemoPage.getActiveFilterName()).toBe('My Tasks'); - tasksCloudDemoPage.editTaskFilterCloudComponent().setTaskName(createdTask.entry.name); - expect(tasksCloudDemoPage.editTaskFilterCloudComponent().getTaskName()).toEqual(createdTask.entry.name); - tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(createdTask.entry.name); - tasksCloudDemoPage.taskListCloudComponent().getRowsWithSameName(createdTask.entry.name).then((list) => { - expect(list.length).toEqual(1); + await tasksCloudDemoPage.editTaskFilterCloudComponent().setTaskName(createdTask.entry.name); + await expect(await tasksCloudDemoPage.editTaskFilterCloudComponent().getTaskName()).toEqual(createdTask.entry.name); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(createdTask.entry.name); + await tasksCloudDemoPage.taskListCloudComponent().getRowsWithSameName(createdTask.entry.name).then(async (list) => { + await expect(list.length).toEqual(1); }); }); - it('[C297613] Should be able to see No tasks found when typing a task name that does not exist', () => { - tasksCloudDemoPage.myTasksFilter().checkTaskFilterIsDisplayed(); - expect(tasksCloudDemoPage.getActiveFilterName()).toBe('My Tasks'); + it('[C297613] Should be able to see No tasks found when typing a task name that does not exist', async () => { + await tasksCloudDemoPage.myTasksFilter().checkTaskFilterIsDisplayed(); + await expect(await tasksCloudDemoPage.getActiveFilterName()).toBe('My Tasks'); - tasksCloudDemoPage.editTaskFilterCloudComponent().setTaskName('invalidName'); - expect(tasksCloudDemoPage.editTaskFilterCloudComponent().getTaskName()).toEqual('invalidName'); + await tasksCloudDemoPage.editTaskFilterCloudComponent().setTaskName('invalidName'); + await expect(await tasksCloudDemoPage.editTaskFilterCloudComponent().getTaskName()).toEqual('invalidName'); - expect(tasksCloudDemoPage.taskListCloudComponent().getNoTasksFoundMessage()).toEqual(noTasksFoundMessage); + await expect(await tasksCloudDemoPage.taskListCloudComponent().getNoTasksFoundMessage()).toEqual(noTasksFoundMessage); }); - it('[C297480] Should be able to see only tasks that are part of a specific process when processInstanceId is set', () => { - tasksCloudDemoPage.myTasksFilter().checkTaskFilterIsDisplayed(); - expect(tasksCloudDemoPage.getActiveFilterName()).toBe('My Tasks'); + it('[C297480] Should be able to see only tasks that are part of a specific process when processInstanceId is set', async () => { + await tasksCloudDemoPage.myTasksFilter().checkTaskFilterIsDisplayed(); + await expect(await tasksCloudDemoPage.getActiveFilterName()).toBe('My Tasks'); - tasksCloudDemoPage.editTaskFilterCloudComponent().setProcessInstanceId(processInstance.entry.id) - .setStatusFilterDropDown('ALL').clearAssignee(); + await tasksCloudDemoPage.editTaskFilterCloudComponent().setProcessInstanceId(processInstance.entry.id); + await tasksCloudDemoPage.editTaskFilterCloudComponent().setStatusFilterDropDown('ALL'); + await tasksCloudDemoPage.editTaskFilterCloudComponent().clearAssignee(); - browser.sleep(1000); - - expect(tasksCloudDemoPage.taskListCloudComponent().getDataTable().getNumberOfRows()).toBe(1); - - tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByProcessInstanceId(processInstance.entry.id); + await expect(await tasksCloudDemoPage.taskListCloudComponent().getDataTable().getNumberOfRows()).toBe(1); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByProcessInstanceId(processInstance.entry.id); }); - it('[C297684] Should be able to see No tasks found when typing an invalid processInstanceId', () => { - tasksCloudDemoPage.myTasksFilter().checkTaskFilterIsDisplayed(); - expect(tasksCloudDemoPage.getActiveFilterName()).toBe('My Tasks'); + it('[C297684] Should be able to see No tasks found when typing an invalid processInstanceId', async () => { + await tasksCloudDemoPage.myTasksFilter().checkTaskFilterIsDisplayed(); + await expect(await tasksCloudDemoPage.getActiveFilterName()).toBe('My Tasks'); - tasksCloudDemoPage.editTaskFilterCloudComponent().setProcessInstanceId('invalidTaskId'); + await tasksCloudDemoPage.editTaskFilterCloudComponent().setProcessInstanceId('invalidTaskId'); - expect(tasksCloudDemoPage.taskListCloudComponent().getNoTasksFoundMessage()).toEqual(noTasksFoundMessage); + await expect(await tasksCloudDemoPage.taskListCloudComponent().getNoTasksFoundMessage()).toEqual(noTasksFoundMessage); }); - it('[C297478] Should be able to see only tasks that are assigned to a specific user when assignee is set', () => { - tasksCloudDemoPage.myTasksFilter().checkTaskFilterIsDisplayed(); - expect(tasksCloudDemoPage.getActiveFilterName()).toBe('My Tasks'); + it('[C297478] Should be able to see only tasks that are assigned to a specific user when assignee is set', async () => { + await tasksCloudDemoPage.myTasksFilter().checkTaskFilterIsDisplayed(); + await expect(await tasksCloudDemoPage.getActiveFilterName()).toBe('My Tasks'); - tasksCloudDemoPage.editTaskFilterCloudComponent().setAssignee('admin.adf'); + await tasksCloudDemoPage.editTaskFilterCloudComponent().setAssignee('admin.adf'); - tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(createdTask.entry.name); - tasksCloudDemoPage.taskListCloudComponent().checkContentIsNotDisplayedByName(notAssigned.entry.name); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(createdTask.entry.name); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsNotDisplayedByName(notAssigned.entry.name); }); - it('[C297686] Should be able to see No tasks found when typing an invalid user to assignee field', () => { - tasksCloudDemoPage.myTasksFilter().checkTaskFilterIsDisplayed(); - expect(tasksCloudDemoPage.getActiveFilterName()).toBe('My Tasks'); + it('[C297686] Should be able to see No tasks found when typing an invalid user to assignee field', async () => { + await tasksCloudDemoPage.myTasksFilter().checkTaskFilterIsDisplayed(); + await expect(await tasksCloudDemoPage.getActiveFilterName()).toBe('My Tasks'); - tasksCloudDemoPage.editTaskFilterCloudComponent().setAssignee('invalid'); + await tasksCloudDemoPage.editTaskFilterCloudComponent().setAssignee('invalid'); - expect(tasksCloudDemoPage.taskListCloudComponent().getNoTasksFoundMessage()).toEqual(noTasksFoundMessage); + await expect(await tasksCloudDemoPage.taskListCloudComponent().getNoTasksFoundMessage()).toEqual(noTasksFoundMessage); }); - it('[C297482] Should be able to see only tasks with specific priority when priority is set', () => { - tasksCloudDemoPage.myTasksFilter().checkTaskFilterIsDisplayed(); - expect(tasksCloudDemoPage.getActiveFilterName()).toBe('My Tasks'); + it('[C297482] Should be able to see only tasks with specific priority when priority is set', async () => { + await tasksCloudDemoPage.myTasksFilter().checkTaskFilterIsDisplayed(); + await expect(await tasksCloudDemoPage.getActiveFilterName()).toBe('My Tasks'); - tasksCloudDemoPage.editTaskFilterCloudComponent().setPriority(priority); + await tasksCloudDemoPage.editTaskFilterCloudComponent().setPriority(priority); - tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(priorityTask.entry.name); - tasksCloudDemoPage.taskListCloudComponent().checkContentIsNotDisplayedByName(createdTask.entry.name); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(priorityTask.entry.name); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsNotDisplayedByName(createdTask.entry.name); }); - it('[C297687] Should be able to see No tasks found when typing unused value for priority field', () => { - tasksCloudDemoPage.myTasksFilter().checkTaskFilterIsDisplayed(); - expect(tasksCloudDemoPage.getActiveFilterName()).toBe('My Tasks'); - tasksCloudDemoPage.editTaskFilterCloudComponent().setPriority('87650'); + it('[C297687] Should be able to see No tasks found when typing unused value for priority field', async () => { + await tasksCloudDemoPage.myTasksFilter().checkTaskFilterIsDisplayed(); + await expect(await tasksCloudDemoPage.getActiveFilterName()).toBe('My Tasks'); + await tasksCloudDemoPage.editTaskFilterCloudComponent().setPriority('87650'); - expect(tasksCloudDemoPage.taskListCloudComponent().getNoTasksFoundMessage()).toEqual(noTasksFoundMessage); + await expect(await tasksCloudDemoPage.taskListCloudComponent().getNoTasksFoundMessage()).toEqual(noTasksFoundMessage); }); - it('[C297481] Should be able to see only tasks with specific parentTaskId when parentTaskId is set', () => { - tasksCloudDemoPage.myTasksFilter().checkTaskFilterIsDisplayed(); - expect(tasksCloudDemoPage.getActiveFilterName()).toBe('My Tasks'); + it('[C297481] Should be able to see only tasks with specific parentTaskId when parentTaskId is set', async () => { + await tasksCloudDemoPage.myTasksFilter().checkTaskFilterIsDisplayed(); + await expect(await tasksCloudDemoPage.getActiveFilterName()).toBe('My Tasks'); - tasksCloudDemoPage.editTaskFilterCloudComponent().setParentTaskId(subTask.entry.parentTaskId); + await tasksCloudDemoPage.editTaskFilterCloudComponent().setParentTaskId(subTask.entry.parentTaskId); - tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(subTask.entry.name); - tasksCloudDemoPage.taskListCloudComponent().checkContentIsNotDisplayedByName(createdTask.entry.name); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(subTask.entry.name); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsNotDisplayedByName(createdTask.entry.name); }); - it('[C297486] Filter by Owner', () => { - tasksCloudDemoPage.myTasksFilter().checkTaskFilterIsDisplayed(); - expect(tasksCloudDemoPage.getActiveFilterName()).toBe('My Tasks'); + it('[C297486] Filter by Owner', async () => { + await tasksCloudDemoPage.myTasksFilter().checkTaskFilterIsDisplayed(); + await expect(await tasksCloudDemoPage.getActiveFilterName()).toBe('My Tasks'); - tasksCloudDemoPage.editTaskFilterCloudComponent().setStatusFilterDropDown('ALL').clearAssignee().setOwner(testUser.username); + await tasksCloudDemoPage.editTaskFilterCloudComponent().setStatusFilterDropDown('ALL'); + await tasksCloudDemoPage.editTaskFilterCloudComponent().clearAssignee(); + await tasksCloudDemoPage.editTaskFilterCloudComponent().setOwner(testUser.username); - tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(notAssigned.entry.name); - tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(createdTask.entry.name); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(notAssigned.entry.name); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(createdTask.entry.name); - tasksCloudDemoPage.editTaskFilterCloudComponent().setOwner('invalid'); + await tasksCloudDemoPage.editTaskFilterCloudComponent().setOwner('invalid'); - expect(tasksCloudDemoPage.taskListCloudComponent().getNoTasksFoundMessage()).toEqual(noTasksFoundMessage); + await expect(await tasksCloudDemoPage.taskListCloudComponent().getNoTasksFoundMessage()).toEqual(noTasksFoundMessage); }); - it('[C297484] Task is displayed when typing into lastModifiedFrom field a date before the task CreatedDate', () => { - tasksCloudDemoPage.myTasksFilter().checkTaskFilterIsDisplayed(); - expect(tasksCloudDemoPage.getActiveFilterName()).toBe('My Tasks'); + it('[C297484] Task is displayed when typing into lastModifiedFrom field a date before the task CreatedDate', async() => { + await tasksCloudDemoPage.myTasksFilter().checkTaskFilterIsDisplayed(); + await expect(await tasksCloudDemoPage.getActiveFilterName()).toBe('My Tasks'); - tasksCloudDemoPage.editTaskFilterCloudComponent().setLastModifiedFrom(beforeDate); - tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(createdTask.entry.name); + await tasksCloudDemoPage.editTaskFilterCloudComponent().setLastModifiedFrom(beforeDate); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(createdTask.entry.name); - tasksCloudDemoPage.editTaskFilterCloudComponent().setLastModifiedTo(afterDate); - tasksCloudDemoPage.taskListCloudComponent().checkContentIsNotDisplayedByName(createdTask.entry.name); + await tasksCloudDemoPage.editTaskFilterCloudComponent().setLastModifiedTo(afterDate); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsNotDisplayedByName(createdTask.entry.name); }); - it('[C297689] Task is not displayed when typing into lastModifiedFrom field the same date as tasks CreatedDate', () => { - tasksCloudDemoPage.myTasksFilter().checkTaskFilterIsDisplayed(); - expect(tasksCloudDemoPage.getActiveFilterName()).toBe('My Tasks'); + it('[C297689] Task is not displayed when typing into lastModifiedFrom field the same date as tasks CreatedDate', async () => { + await tasksCloudDemoPage.myTasksFilter().checkTaskFilterIsDisplayed(); + await expect(await tasksCloudDemoPage.getActiveFilterName()).toBe('My Tasks'); - tasksCloudDemoPage.editTaskFilterCloudComponent().setLastModifiedFrom(currentDate); - tasksCloudDemoPage.taskListCloudComponent().checkContentIsNotDisplayedByName(createdTask.entry.name); + await tasksCloudDemoPage.editTaskFilterCloudComponent().setLastModifiedFrom(currentDate); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsNotDisplayedByName(createdTask.entry.name); }); - it('[C297485] Task is displayed when typing into lastModifiedTo field a date after the task CreatedDate', () => { - tasksCloudDemoPage.myTasksFilter().checkTaskFilterIsDisplayed(); - expect(tasksCloudDemoPage.getActiveFilterName()).toBe('My Tasks'); + it('[C297485] Task is displayed when typing into lastModifiedTo field a date after the task CreatedDate', async () => { + await tasksCloudDemoPage.myTasksFilter().checkTaskFilterIsDisplayed(); + await expect(await tasksCloudDemoPage.getActiveFilterName()).toBe('My Tasks'); - tasksCloudDemoPage.editTaskFilterCloudComponent().setLastModifiedFrom(afterDate); - tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(createdTask.entry.name); + await tasksCloudDemoPage.editTaskFilterCloudComponent().setLastModifiedFrom(afterDate); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(createdTask.entry.name); - tasksCloudDemoPage.editTaskFilterCloudComponent().setLastModifiedTo(beforeDate); - tasksCloudDemoPage.taskListCloudComponent().checkContentIsNotDisplayedByName(createdTask.entry.name); + await tasksCloudDemoPage.editTaskFilterCloudComponent().setLastModifiedTo(beforeDate); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsNotDisplayedByName(createdTask.entry.name); }); - it('[C297690] Task is not displayed when typing into lastModifiedTo field the same date as tasks CreatedDate', () => { - tasksCloudDemoPage.myTasksFilter().checkTaskFilterIsDisplayed(); - expect(tasksCloudDemoPage.getActiveFilterName()).toBe('My Tasks'); + it('[C297690] Task is not displayed when typing into lastModifiedTo field the same date as tasks CreatedDate', async () => { + await tasksCloudDemoPage.myTasksFilter().checkTaskFilterIsDisplayed(); + await expect(await tasksCloudDemoPage.getActiveFilterName()).toBe('My Tasks'); - tasksCloudDemoPage.editTaskFilterCloudComponent().setLastModifiedTo(currentDate); - tasksCloudDemoPage.taskListCloudComponent().checkContentIsNotDisplayedByName(createdTask.entry.name); + await tasksCloudDemoPage.editTaskFilterCloudComponent().setLastModifiedTo(currentDate); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsNotDisplayedByName(createdTask.entry.name); }); it('[C297691] Task is not displayed when typing into lastModifiedFrom field a date before the task due date ' + - 'and into lastModifiedTo a date before task due date', () => { + 'and into lastModifiedTo a date before task due date', async () => { - tasksCloudDemoPage.myTasksFilter().checkTaskFilterIsDisplayed(); - expect(tasksCloudDemoPage.getActiveFilterName()).toBe('My Tasks'); + await tasksCloudDemoPage.myTasksFilter().checkTaskFilterIsDisplayed(); + await expect(await tasksCloudDemoPage.getActiveFilterName()).toBe('My Tasks'); - tasksCloudDemoPage.editTaskFilterCloudComponent().setLastModifiedFrom(beforeDate); - tasksCloudDemoPage.editTaskFilterCloudComponent().setLastModifiedTo(beforeDate); - tasksCloudDemoPage.editTaskFilterCloudComponent().setTaskName(createdTask.entry.name); - expect(tasksCloudDemoPage.taskListCloudComponent().getNoTasksFoundMessage()).toEqual(noTasksFoundMessage); + await tasksCloudDemoPage.editTaskFilterCloudComponent().setLastModifiedFrom(beforeDate); + await tasksCloudDemoPage.editTaskFilterCloudComponent().setLastModifiedTo(beforeDate); + await tasksCloudDemoPage.editTaskFilterCloudComponent().setTaskName(createdTask.entry.name); + await expect(await tasksCloudDemoPage.taskListCloudComponent().getNoTasksFoundMessage()).toEqual(noTasksFoundMessage); }); it('[C297692] Task is displayed when typing into lastModifiedFrom field a date before the tasks due date ' + - 'and into lastModifiedTo a date after', () => { + 'and into lastModifiedTo a date after', async () => { - tasksCloudDemoPage.myTasksFilter().checkTaskFilterIsDisplayed(); - expect(tasksCloudDemoPage.getActiveFilterName()).toBe('My Tasks'); + await tasksCloudDemoPage.myTasksFilter().checkTaskFilterIsDisplayed(); + await expect(await tasksCloudDemoPage.getActiveFilterName()).toBe('My Tasks'); - tasksCloudDemoPage.editTaskFilterCloudComponent().setLastModifiedFrom(beforeDate); - tasksCloudDemoPage.editTaskFilterCloudComponent().setLastModifiedTo(afterDate); - tasksCloudDemoPage.editTaskFilterCloudComponent().setTaskName(createdTask.entry.name); - tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(createdTask.entry.name); + await tasksCloudDemoPage.editTaskFilterCloudComponent().setLastModifiedFrom(beforeDate); + await tasksCloudDemoPage.editTaskFilterCloudComponent().setLastModifiedTo(afterDate); + await tasksCloudDemoPage.editTaskFilterCloudComponent().setTaskName(createdTask.entry.name); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(createdTask.entry.name); }); it('[C297693] Task is not displayed when typing into lastModifiedFrom field a date after the tasks due date ' + - 'and into lastModifiedTo a date after', () => { + 'and into lastModifiedTo a date after', async () => { - tasksCloudDemoPage.myTasksFilter().checkTaskFilterIsDisplayed(); - expect(tasksCloudDemoPage.getActiveFilterName()).toBe('My Tasks'); + await tasksCloudDemoPage.myTasksFilter().checkTaskFilterIsDisplayed(); + await expect(await tasksCloudDemoPage.getActiveFilterName()).toBe('My Tasks'); - tasksCloudDemoPage.editTaskFilterCloudComponent().setLastModifiedFrom(afterDate); - tasksCloudDemoPage.editTaskFilterCloudComponent().setLastModifiedTo(afterDate); - expect(tasksCloudDemoPage.taskListCloudComponent().getNoTasksFoundMessage()).toEqual(noTasksFoundMessage); + await tasksCloudDemoPage.editTaskFilterCloudComponent().setLastModifiedFrom(afterDate); + await tasksCloudDemoPage.editTaskFilterCloudComponent().setLastModifiedTo(afterDate); + await expect(await tasksCloudDemoPage.taskListCloudComponent().getNoTasksFoundMessage()).toEqual(noTasksFoundMessage); }); }); describe('Edit task filters and task list properties - sort properties', () => { - beforeEach((done) => { - navigationBarPage.navigateToProcessServicesCloudPage(); - appListCloudComponent.checkApsContainer(); - appListCloudComponent.goToApp(simpleApp); - tasksCloudDemoPage.editTaskFilterCloudComponent().clickCustomiseFilterHeader(); - tasksCloudDemoPage.myTasksFilter().checkTaskFilterIsDisplayed(); - done(); - }); - - it('[C306901] Should display tasks sorted by task name when taskName is selected from sort dropdown', () => { - tasksCloudDemoPage.editTaskFilterCloudComponent().setStatusFilterDropDown('ASSIGNED') - .setSortFilterDropDown('Name').setOrderFilterDropDown('ASC'); - expect(tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkListIsSorted('ASC', 'Name')).toBe(true); - - tasksCloudDemoPage.editTaskFilterCloudComponent().setOrderFilterDropDown('DESC'); - expect(tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkListIsSorted('DESC', 'Name')).toBe(true); + beforeEach(async () => { + await navigationBarPage.navigateToProcessServicesCloudPage(); + await appListCloudComponent.checkApsContainer(); + await appListCloudComponent.goToApp(simpleApp); + await tasksCloudDemoPage.editTaskFilterCloudComponent().clickCustomiseFilterHeader(); + await tasksCloudDemoPage.myTasksFilter().checkTaskFilterIsDisplayed(); }); - it('[C290156] Should display tasks ordered by id when Id is selected from sort dropdown', () => { - tasksCloudDemoPage.editTaskFilterCloudComponent().setStatusFilterDropDown('ASSIGNED') - .setSortFilterDropDown('Id').setOrderFilterDropDown('ASC'); - expect(tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkListIsSorted('ASC', 'Id')).toBe(true); + it('[C306901] Should display tasks sorted by task name when taskName is selected from sort dropdown', async () => { + await tasksCloudDemoPage.editTaskFilterCloudComponent().setStatusFilterDropDown('ASSIGNED'); + await tasksCloudDemoPage.editTaskFilterCloudComponent().setSortFilterDropDown('Name'); + await tasksCloudDemoPage.editTaskFilterCloudComponent().setOrderFilterDropDown('ASC'); - tasksCloudDemoPage.editTaskFilterCloudComponent().setOrderFilterDropDown('DESC'); - expect(tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkListIsSorted('DESC', 'Id')).toBe(true); + await expect(await tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkListIsSorted('ASC', 'Name')).toBe(true); + + await tasksCloudDemoPage.editTaskFilterCloudComponent().setOrderFilterDropDown('DESC'); + await expect(await tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkListIsSorted('DESC', 'Name')).toBe(true); }); - it('[C306903] Should display tasks sorted by processDefinitionId when processDefinitionId is selected from sort dropdown', () => { - tasksCloudDemoPage.editTaskFilterCloudComponent().setStatusFilterDropDown('ASSIGNED') - .setSortFilterDropDown('ProcessDefinitionId').setOrderFilterDropDown('ASC'); - expect(tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkListIsSorted('ASC', 'ProcessDefinitionId')).toBe(true); + it('[C290156] Should display tasks ordered by id when Id is selected from sort dropdown', async () => { + await tasksCloudDemoPage.editTaskFilterCloudComponent().setStatusFilterDropDown('ASSIGNED'); + await tasksCloudDemoPage.editTaskFilterCloudComponent().setSortFilterDropDown('Id'); + await tasksCloudDemoPage.editTaskFilterCloudComponent().setOrderFilterDropDown('ASC'); - tasksCloudDemoPage.editTaskFilterCloudComponent().setOrderFilterDropDown('DESC'); - expect(tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkListIsSorted('DESC', 'ProcessDefinitionId')).toBe(true); - }); + await expect(await tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkListIsSorted('ASC', 'Id')).toBe(true); - it('[C306905] Should display tasks sorted by processInstanceId when processInstanceId is selected from sort dropdown', () => { - tasksCloudDemoPage.editTaskFilterCloudComponent().setStatusFilterDropDown('ASSIGNED') - .setSortFilterDropDown('ProcessInstanceId').setOrderFilterDropDown('ASC'); - expect(tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkListIsSorted('ASC', 'ProcessInstanceId')).toBe(true); - - tasksCloudDemoPage.editTaskFilterCloudComponent().setOrderFilterDropDown('DESC'); - expect(tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkListIsSorted('DESC', 'ProcessInstanceId')).toBe(true); - }); - - it('[C306907] Should display tasks sorted by assignee when assignee is selected from sort dropdown', () => { - tasksCloudDemoPage.editTaskFilterCloudComponent().clearAssignee().setStatusFilterDropDown('ALL') - .setSortFilterDropDown('Assignee').setOrderFilterDropDown('ASC'); - expect(tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkListIsSorted('ASC', 'Assignee')).toBe(true); - - tasksCloudDemoPage.editTaskFilterCloudComponent().setOrderFilterDropDown('DESC'); - expect(tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkListIsSorted('DESC', 'Assignee')).toBe(true); - }); - - it('[C306911] Should display tasks sorted by parentTaskId when parentTaskId is selected from sort dropdown', () => { - tasksCloudDemoPage.editTaskFilterCloudComponent().clearAssignee().setStatusFilterDropDown('ALL') - .setSortFilterDropDown('ParentTaskId').setOrderFilterDropDown('ASC'); - expect(tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkListIsSorted('ASC', 'ParentTaskId')).toBe(true); - - tasksCloudDemoPage.editTaskFilterCloudComponent().setOrderFilterDropDown('DESC'); - expect(tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkListIsSorted('DESC', 'ParentTaskId')).toBe(true); - }); - - it('[C290087] Should display tasks ordered by priority when Priority is selected from sort dropdown', () => { - tasksCloudDemoPage.editTaskFilterCloudComponent().clearAssignee().setStatusFilterDropDown('ALL') - .setSortFilterDropDown('Priority').setOrderFilterDropDown('ASC'); - expect(tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkListIsSorted('ASC', 'Priority')).toBe(true); - - tasksCloudDemoPage.editTaskFilterCloudComponent().setOrderFilterDropDown('DESC'); - expect(tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkListIsSorted('DESC', 'Priority')).toBe(true); + await tasksCloudDemoPage.editTaskFilterCloudComponent().setOrderFilterDropDown('DESC'); + await expect(await tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkListIsSorted('DESC', 'Id')).toBe(true); }); - it('[C307114] Should display tasks sorted by standAlone when standAlone is selected from sort dropdown', () => { - tasksCloudDemoPage.editTaskFilterCloudComponent().clearAssignee().setStatusFilterDropDown('ALL') - .setSortFilterDropDown('StandAlone').setOrderFilterDropDown('ASC'); - expect(tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkListIsSorted('ASC', 'StandAlone')).toBe(true); + it('[C306903] Should display tasks sorted by processDefinitionId when processDefinitionId is selected from sort dropdown', async () => { + await tasksCloudDemoPage.editTaskFilterCloudComponent().setStatusFilterDropDown('ASSIGNED'); + await tasksCloudDemoPage.editTaskFilterCloudComponent().setSortFilterDropDown('ProcessDefinitionId'); + await tasksCloudDemoPage.editTaskFilterCloudComponent().setOrderFilterDropDown('ASC'); + await expect(await tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkListIsSorted('ASC', 'ProcessDefinitionId')).toBe(true); - tasksCloudDemoPage.editTaskFilterCloudComponent().setOrderFilterDropDown('DESC'); - expect(tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkListIsSorted('DESC', 'StandAlone')).toBe(true); + await tasksCloudDemoPage.editTaskFilterCloudComponent().setOrderFilterDropDown('DESC'); + await expect(await tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkListIsSorted('DESC', 'ProcessDefinitionId')).toBe(true); }); - it('[C307115] Should display tasks sorted by owner when owner is selected from sort dropdown', () => { - tasksCloudDemoPage.editTaskFilterCloudComponent().clearAssignee().setStatusFilterDropDown('ALL') - .setSortFilterDropDown('Owner').setOrderFilterDropDown('ASC'); - expect(tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkListIsSorted('ASC', 'Owner')).toBe(true); + it('[C306905] Should display tasks sorted by processInstanceId when processInstanceId is selected from sort dropdown', async () => { + await tasksCloudDemoPage.editTaskFilterCloudComponent().setStatusFilterDropDown('ASSIGNED'); + await tasksCloudDemoPage.editTaskFilterCloudComponent().setSortFilterDropDown('ProcessInstanceId'); + await tasksCloudDemoPage.editTaskFilterCloudComponent().setOrderFilterDropDown('ASC'); - tasksCloudDemoPage.editTaskFilterCloudComponent().setOrderFilterDropDown('DESC'); - expect(tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkListIsSorted('DESC', 'Owner')).toBe(true); + await expect(await tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkListIsSorted('ASC', 'ProcessInstanceId')).toBe(true); + + await tasksCloudDemoPage.editTaskFilterCloudComponent().setOrderFilterDropDown('DESC'); + await expect(await tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkListIsSorted('DESC', 'ProcessInstanceId')).toBe(true); + }); + + it('[C306907] Should display tasks sorted by assignee when assignee is selected from sort dropdown', async () => { + await tasksCloudDemoPage.editTaskFilterCloudComponent().clearAssignee(); + await tasksCloudDemoPage.editTaskFilterCloudComponent().setStatusFilterDropDown('ALL'); + await tasksCloudDemoPage.editTaskFilterCloudComponent().setSortFilterDropDown('Assignee'); + await tasksCloudDemoPage.editTaskFilterCloudComponent().setOrderFilterDropDown('ASC'); + + await expect(await tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkListIsSorted('ASC', 'Assignee')).toBe(true); + + await tasksCloudDemoPage.editTaskFilterCloudComponent().setOrderFilterDropDown('DESC'); + await expect(await tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkListIsSorted('DESC', 'Assignee')).toBe(true); + }); + + it('[C306911] Should display tasks sorted by parentTaskId when parentTaskId is selected from sort dropdown', async () => { + await tasksCloudDemoPage.editTaskFilterCloudComponent().clearAssignee(); + await tasksCloudDemoPage.editTaskFilterCloudComponent().setStatusFilterDropDown('ALL'); + await tasksCloudDemoPage.editTaskFilterCloudComponent().setSortFilterDropDown('ParentTaskId'); + await tasksCloudDemoPage.editTaskFilterCloudComponent().setOrderFilterDropDown('ASC'); + + await expect(await tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkListIsSorted('ASC', 'ParentTaskId')).toBe(true); + + await tasksCloudDemoPage.editTaskFilterCloudComponent().setOrderFilterDropDown('DESC'); + await expect(await tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkListIsSorted('DESC', 'ParentTaskId')).toBe(true); + }); + + it('[C290087] Should display tasks ordered by priority when Priority is selected from sort dropdown', async () => { + await tasksCloudDemoPage.editTaskFilterCloudComponent().clearAssignee(); + await tasksCloudDemoPage.editTaskFilterCloudComponent().setStatusFilterDropDown('ALL'); + await tasksCloudDemoPage.editTaskFilterCloudComponent().setSortFilterDropDown('Priority'); + await tasksCloudDemoPage.editTaskFilterCloudComponent().setOrderFilterDropDown('ASC'); + + await expect(await tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkListIsSorted('ASC', 'Priority')).toBe(true); + + await tasksCloudDemoPage.editTaskFilterCloudComponent().setOrderFilterDropDown('DESC'); + await expect(await tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkListIsSorted('DESC', 'Priority')).toBe(true); + + }); + + it('[C307114] Should display tasks sorted by standAlone when standAlone is selected from sort dropdown', async () => { + await tasksCloudDemoPage.editTaskFilterCloudComponent().clearAssignee(); + await tasksCloudDemoPage.editTaskFilterCloudComponent().setStatusFilterDropDown('ALL'); + await tasksCloudDemoPage.editTaskFilterCloudComponent().setSortFilterDropDown('StandAlone'); + await tasksCloudDemoPage.editTaskFilterCloudComponent().setOrderFilterDropDown('ASC'); + + await expect(await tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkListIsSorted('ASC', 'StandAlone')).toBe(true); + + await tasksCloudDemoPage.editTaskFilterCloudComponent().setOrderFilterDropDown('DESC'); + await expect(await tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkListIsSorted('DESC', 'StandAlone')).toBe(true); + }); + + it('[C307115] Should display tasks sorted by owner when owner is selected from sort dropdown', async () => { + await tasksCloudDemoPage.editTaskFilterCloudComponent().clearAssignee(); + await tasksCloudDemoPage.editTaskFilterCloudComponent().setStatusFilterDropDown('ALL'); + await tasksCloudDemoPage.editTaskFilterCloudComponent().setSortFilterDropDown('Owner'); + await tasksCloudDemoPage.editTaskFilterCloudComponent().setOrderFilterDropDown('ASC'); + + await expect(await tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkListIsSorted('ASC', 'Owner')).toBe(true); + + await tasksCloudDemoPage.editTaskFilterCloudComponent().setOrderFilterDropDown('DESC'); + await expect(await tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkListIsSorted('DESC', 'Owner')).toBe(true); }); }); diff --git a/e2e/process-services-cloud/task-list-selection.e2e.ts b/e2e/process-services-cloud/task-list-selection.e2e.ts index 03e9d743a0..d4c99cd00e 100644 --- a/e2e/process-services-cloud/task-list-selection.e2e.ts +++ b/e2e/process-services-cloud/task-list-selection.e2e.ts @@ -46,7 +46,7 @@ describe('Task list cloud - selection', () => { let response, testUser, groupInfo; const tasks = []; - beforeAll(async (done) => { + beforeAll(async () => { await apiService.login(browser.params.identityAdmin.email, browser.params.identityAdmin.password); identityService = new IdentityService(apiService); groupIdentityService = new GroupIdentityService(apiService); @@ -69,118 +69,130 @@ describe('Task list cloud - selection', () => { browser.params.config.oauth2.host, browser.params.config.identityHost); await loginSSOPage.loginSSOIdentityService(testUser.email, testUser.password); - done(); + }); - afterAll(async(done) => { + afterAll(async() => { await apiService.login(browser.params.identityAdmin.email, browser.params.identityAdmin.password); await identityService.deleteIdentityUser(testUser.idIdentityService); - done(); + }); - beforeEach(() => { - navigationBarPage.navigateToProcessServicesCloudPage(); - appListCloudComponent.checkApsContainer(); - appListCloudComponent.goToApp(simpleApp); - tasksCloudDemoPage.myTasksFilter().checkTaskFilterIsDisplayed(); - tasksCloudDemoPage.clickSettingsButton().disableDisplayTaskDetails(); - tasksCloudDemoPage.clickAppButton(); + beforeEach(async () => { + await navigationBarPage.navigateToProcessServicesCloudPage(); + await appListCloudComponent.checkApsContainer(); + await appListCloudComponent.goToApp(simpleApp); + await tasksCloudDemoPage.myTasksFilter().checkTaskFilterIsDisplayed(); + await tasksCloudDemoPage.clickSettingsButton(); + await tasksCloudDemoPage.disableDisplayTaskDetails(); + await tasksCloudDemoPage.clickAppButton(); }); - it('[C291914] Should not be able to select any row when selection mode is set to None', () => { - tasksCloudDemoPage.clickSettingsButton().selectSelectionMode('None'); - tasksCloudDemoPage.clickSettingsButton().disableDisplayTaskDetails(); - tasksCloudDemoPage.clickAppButton(); - tasksCloudDemoPage.taskListCloudComponent().getDataTable().waitForTableBody(); + it('[C291914] Should not be able to select any row when selection mode is set to None', async () => { + await tasksCloudDemoPage.clickSettingsButton(); + await tasksCloudDemoPage.selectSelectionMode('None'); + await tasksCloudDemoPage.clickSettingsButton(); + await tasksCloudDemoPage.disableDisplayTaskDetails(); + await tasksCloudDemoPage.clickAppButton(); + await tasksCloudDemoPage.taskListCloudComponent().getDataTable().waitForTableBody(); - tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(tasks[0]); - tasksCloudDemoPage.taskListCloudComponent().selectRow(tasks[0]); - tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkNoRowIsSelected(); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(tasks[0]); + await tasksCloudDemoPage.taskListCloudComponent().selectRow(tasks[0]); + await tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkNoRowIsSelected(); }); - it('[C291918] Should be able to select only one row when selection mode is set to Single', () => { - tasksCloudDemoPage.clickSettingsButton().selectSelectionMode('Single'); - tasksCloudDemoPage.clickSettingsButton().disableDisplayTaskDetails(); - tasksCloudDemoPage.clickAppButton(); - tasksCloudDemoPage.taskListCloudComponent().getDataTable().waitForTableBody(); + it('[C291918] Should be able to select only one row when selection mode is set to Single', async () => { + await tasksCloudDemoPage.clickSettingsButton(); + await tasksCloudDemoPage.selectSelectionMode('Single'); + await tasksCloudDemoPage.clickSettingsButton(); + await tasksCloudDemoPage.disableDisplayTaskDetails(); + await tasksCloudDemoPage.clickAppButton(); + await tasksCloudDemoPage.taskListCloudComponent().getDataTable().waitForTableBody(); - tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(tasks[0]); - tasksCloudDemoPage.taskListCloudComponent().selectRow(tasks[0]); - tasksCloudDemoPage.taskListCloudComponent().checkRowIsSelected(tasks[0]); - expect(tasksCloudDemoPage.taskListCloudComponent().getDataTable().getNumberOfSelectedRows()).toEqual(1); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(tasks[0]); + await tasksCloudDemoPage.taskListCloudComponent().selectRow(tasks[0]); + await tasksCloudDemoPage.taskListCloudComponent().checkRowIsSelected(tasks[0]); + await expect(await tasksCloudDemoPage.taskListCloudComponent().getDataTable().getNumberOfSelectedRows()).toEqual(1); - tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(tasks[1]); - tasksCloudDemoPage.taskListCloudComponent().selectRow(tasks[1]); - tasksCloudDemoPage.taskListCloudComponent().checkRowIsSelected(tasks[1]); - expect(tasksCloudDemoPage.taskListCloudComponent().getDataTable().getNumberOfSelectedRows()).toEqual(1); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(tasks[1]); + await tasksCloudDemoPage.taskListCloudComponent().selectRow(tasks[1]); + await tasksCloudDemoPage.taskListCloudComponent().checkRowIsSelected(tasks[1]); + await expect(await tasksCloudDemoPage.taskListCloudComponent().getDataTable().getNumberOfSelectedRows()).toEqual(1); }); - it('[C291919] Should be able to select only one row when selection mode is set to Multiple', () => { - tasksCloudDemoPage.clickSettingsButton().selectSelectionMode('Multiple'); - tasksCloudDemoPage.clickSettingsButton().disableDisplayTaskDetails(); - tasksCloudDemoPage.clickAppButton(); - tasksCloudDemoPage.taskListCloudComponent().getDataTable().waitForTableBody(); + it('[C291919] Should be able to select only one row when selection mode is set to Multiple', async () => { + await tasksCloudDemoPage.clickSettingsButton(); + await tasksCloudDemoPage.selectSelectionMode('Multiple'); + await tasksCloudDemoPage.clickSettingsButton(); + await tasksCloudDemoPage.disableDisplayTaskDetails(); + await tasksCloudDemoPage.clickAppButton(); + await tasksCloudDemoPage.taskListCloudComponent().getDataTable().waitForTableBody(); - tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(tasks[0]); - tasksCloudDemoPage.taskListCloudComponent().selectRow(tasks[0]); - tasksCloudDemoPage.taskListCloudComponent().checkRowIsSelected(tasks[0]); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(tasks[0]); + await tasksCloudDemoPage.taskListCloudComponent().selectRow(tasks[0]); + await tasksCloudDemoPage.taskListCloudComponent().checkRowIsSelected(tasks[0]); - tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(tasks[1]); - tasksCloudDemoPage.taskListCloudComponent().selectRowWithKeyboard(tasks[1]); - tasksCloudDemoPage.taskListCloudComponent().checkRowIsSelected(tasks[0]); - tasksCloudDemoPage.taskListCloudComponent().checkRowIsSelected(tasks[1]); - tasksCloudDemoPage.taskListCloudComponent().checkRowIsNotSelected(tasks[2]); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(tasks[1]); + await tasksCloudDemoPage.taskListCloudComponent().selectRowWithKeyboard(tasks[1]); + await tasksCloudDemoPage.taskListCloudComponent().checkRowIsSelected(tasks[0]); + await tasksCloudDemoPage.taskListCloudComponent().checkRowIsSelected(tasks[1]); + await tasksCloudDemoPage.taskListCloudComponent().checkRowIsNotSelected(tasks[2]); }); - it('[C291916] Should be able to select multiple row when multiselect is true', () => { - tasksCloudDemoPage.clickSettingsButton().enableMultiSelection(); - tasksCloudDemoPage.clickSettingsButton().disableDisplayTaskDetails(); - tasksCloudDemoPage.clickAppButton(); - tasksCloudDemoPage.taskListCloudComponent().getDataTable().waitForTableBody(); + it('[C291916] Should be able to select multiple row when multiselect is true', async () => { + await tasksCloudDemoPage.clickSettingsButton(); + await tasksCloudDemoPage.enableMultiSelection(); + await tasksCloudDemoPage.clickSettingsButton(); + await tasksCloudDemoPage.disableDisplayTaskDetails(); + await tasksCloudDemoPage.clickAppButton(); + await tasksCloudDemoPage.taskListCloudComponent().getDataTable().waitForTableBody(); - tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(tasks[0]); - tasksCloudDemoPage.taskListCloudComponent().clickCheckbox(tasks[0]); - tasksCloudDemoPage.taskListCloudComponent().checkRowIsChecked(tasks[0]); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(tasks[0]); + await tasksCloudDemoPage.taskListCloudComponent().clickCheckbox(tasks[0]); + await tasksCloudDemoPage.taskListCloudComponent().checkRowIsChecked(tasks[0]); - tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(tasks[1]); - tasksCloudDemoPage.taskListCloudComponent().clickCheckbox(tasks[1]); - tasksCloudDemoPage.taskListCloudComponent().checkRowIsChecked(tasks[1]); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(tasks[1]); + await tasksCloudDemoPage.taskListCloudComponent().clickCheckbox(tasks[1]); + await tasksCloudDemoPage.taskListCloudComponent().checkRowIsChecked(tasks[1]); - tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(tasks[2]); - tasksCloudDemoPage.taskListCloudComponent().checkRowIsNotChecked(tasks[2]); - tasksCloudDemoPage.taskListCloudComponent().clickCheckbox(tasks[1]); - tasksCloudDemoPage.taskListCloudComponent().checkRowIsNotChecked(tasks[1]); - tasksCloudDemoPage.taskListCloudComponent().checkRowIsChecked(tasks[0]); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(tasks[2]); + await tasksCloudDemoPage.taskListCloudComponent().checkRowIsNotChecked(tasks[2]); + await tasksCloudDemoPage.taskListCloudComponent().clickCheckbox(tasks[1]); + await tasksCloudDemoPage.taskListCloudComponent().checkRowIsNotChecked(tasks[1]); + await tasksCloudDemoPage.taskListCloudComponent().checkRowIsChecked(tasks[0]); }); - it('[C291915] Should be possible select all the rows when multiselect is true', () => { - tasksCloudDemoPage.clickSettingsButton().enableMultiSelection(); - tasksCloudDemoPage.clickSettingsButton().disableDisplayTaskDetails(); - tasksCloudDemoPage.clickAppButton(); - tasksCloudDemoPage.taskListCloudComponent().getDataTable().waitForTableBody(); + it('[C291915] Should be possible select all the rows when multiselect is true', async () => { + await tasksCloudDemoPage.clickSettingsButton(); + await tasksCloudDemoPage.enableMultiSelection(); + await tasksCloudDemoPage.clickSettingsButton(); + await tasksCloudDemoPage.disableDisplayTaskDetails(); + await tasksCloudDemoPage.clickAppButton(); + await tasksCloudDemoPage.taskListCloudComponent().getDataTable().waitForTableBody(); - tasksCloudDemoPage.taskListCloudComponent().getDataTable() - .checkAllRowsButtonIsDisplayed() - .checkAllRows(); - tasksCloudDemoPage.taskListCloudComponent().checkRowIsChecked(tasks[0]); - tasksCloudDemoPage.taskListCloudComponent().clickCheckbox(tasks[1]); - tasksCloudDemoPage.taskListCloudComponent().checkRowIsChecked(tasks[2]); + await tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkAllRowsButtonIsDisplayed(); + await tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkAllRows(); + await tasksCloudDemoPage.taskListCloudComponent().checkRowIsChecked(tasks[0]); + await tasksCloudDemoPage.taskListCloudComponent().clickCheckbox(tasks[1]); + await tasksCloudDemoPage.taskListCloudComponent().checkRowIsChecked(tasks[2]); }); - it('[C297472] Should be able to see selected tasks with Multiselection and Testing switched on', () => { - tasksCloudDemoPage.clickSettingsButton().enableMultiSelection(); - tasksCloudDemoPage.clickSettingsButton().enableTestingMode(); - tasksCloudDemoPage.clickAppButton(); - tasksCloudDemoPage.taskListCloudComponent().getDataTable().waitForTableBody(); + it('[C297472] Should be able to see selected tasks with Multiselection and Testing switched on', async () => { + await tasksCloudDemoPage.clickSettingsButton(); + await tasksCloudDemoPage.enableMultiSelection(); + await tasksCloudDemoPage.clickSettingsButton(); + await tasksCloudDemoPage.enableTestingMode(); + await tasksCloudDemoPage.clickAppButton(); + await tasksCloudDemoPage.taskListCloudComponent().getDataTable().waitForTableBody(); - tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(tasks[0]); - tasksCloudDemoPage.taskListCloudComponent().clickCheckbox(tasks[0]); - tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(tasks[1]); - tasksCloudDemoPage.taskListCloudComponent().clickCheckbox(tasks[1]); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(tasks[0]); + await tasksCloudDemoPage.taskListCloudComponent().clickCheckbox(tasks[0]); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(tasks[1]); + await tasksCloudDemoPage.taskListCloudComponent().clickCheckbox(tasks[1]); - expect(tasksCloudDemoPage.getNoOfSelectedRows()).toBe(2); - expect(tasksCloudDemoPage.getSelectedTaskRowText('1')).toBe(tasks[0]); - expect(tasksCloudDemoPage.getSelectedTaskRowText('2')).toBe(tasks[1]); + await expect(await tasksCloudDemoPage.getNoOfSelectedRows()).toBe(2); + await expect(await tasksCloudDemoPage.getSelectedTaskRowText('1')).toBe(tasks[0]); + await expect(await tasksCloudDemoPage.getSelectedTaskRowText('2')).toBe(tasks[1]); }); }); diff --git a/e2e/process-services-cloud/tasks-custom-filters.e2e.ts b/e2e/process-services-cloud/tasks-custom-filters.e2e.ts index 019a01fb25..b689817bee 100644 --- a/e2e/process-services-cloud/tasks-custom-filters.e2e.ts +++ b/e2e/process-services-cloud/tasks-custom-filters.e2e.ts @@ -60,7 +60,7 @@ describe('Task filters cloud', () => { let priority = 30; const nrOfTasks = 3; - beforeAll(async (done) => { + beforeAll(async () => { await apiService.login(browser.params.identityAdmin.email, browser.params.identityAdmin.password); identityService = new IdentityService(apiService); groupIdentityService = new GroupIdentityService(apiService); @@ -93,7 +93,7 @@ describe('Task filters cloud', () => { queryService = new QueryService(apiService); - await browser.driver.sleep(4000); // eventual consistency query + await browser.sleep(4000); // eventual consistency query await queryService.getProcessInstanceTasks(secondProcessInstance.entry.id, simpleApp); await processInstancesService.suspendProcessInstance(processInstance.entry.id, simpleApp); await processInstancesService.deleteProcessInstance(secondProcessInstance.entry.id, simpleApp); @@ -104,67 +104,73 @@ describe('Task filters cloud', () => { browser.params.config.oauth2.host, browser.params.config.identityHost); await loginSSOPage.loginSSOIdentityService(testUser.email, testUser.password); - done(); - }, 5 * 60 * 1000 ); - afterAll(async(done) => { + }, 5 * 60 * 1000); + + afterAll(async () => { await apiService.login(browser.params.identityAdmin.email, browser.params.identityAdmin.password); await identityService.deleteIdentityUser(testUser.idIdentityService); - done(); + }, 60000); - beforeEach(async (done) => { + beforeEach(async () => { await navigationBarPage.navigateToProcessServicesCloudPage(); - appListCloudComponent.checkApsContainer(); + await appListCloudComponent.checkApsContainer(); await appListCloudComponent.goToApp(simpleApp); - tasksCloudDemoPage.taskListCloudComponent().getDataTable().waitForTableBody(); - done(); + await tasksCloudDemoPage.taskListCloudComponent().getDataTable().waitForTableBody(); + }); - it('[C290045] Should display only tasks with Assigned status when Assigned is selected from status dropdown', () => { - tasksCloudDemoPage.editTaskFilterCloudComponent().clickCustomiseFilterHeader().setStatusFilterDropDown('ASSIGNED'); + it('[C290045] Should display only tasks with Assigned status when Assigned is selected from status dropdown', async () => { + await tasksCloudDemoPage.editTaskFilterCloudComponent().clickCustomiseFilterHeader(); + await tasksCloudDemoPage.editTaskFilterCloudComponent().setStatusFilterDropDown('ASSIGNED'); - tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(assignedTaskName); - tasksCloudDemoPage.taskListCloudComponent().checkContentIsNotDisplayedByName(createdTaskName); - tasksCloudDemoPage.taskListCloudComponent().checkContentIsNotDisplayedByName(completedTaskName); - tasksCloudDemoPage.taskListCloudComponent().checkContentIsNotDisplayedByName(deletedTaskName); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(assignedTaskName); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsNotDisplayedByName(createdTaskName); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsNotDisplayedByName(completedTaskName); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsNotDisplayedByName(deletedTaskName); }); - it('[C290061] Should display only tasks with Completed status when Completed is selected from status dropdown', () => { - tasksCloudDemoPage.editTaskFilterCloudComponent() - .clickCustomiseFilterHeader() - .setStatusFilterDropDown('COMPLETED'); + it('[C290061] Should display only tasks with Completed status when Completed is selected from status dropdown', async () => { + await tasksCloudDemoPage.editTaskFilterCloudComponent().clickCustomiseFilterHeader(); + await tasksCloudDemoPage.editTaskFilterCloudComponent().setStatusFilterDropDown('COMPLETED'); - tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(completedTaskName); - tasksCloudDemoPage.taskListCloudComponent().checkContentIsNotDisplayedByName(assignedTaskName); - tasksCloudDemoPage.taskListCloudComponent().checkContentIsNotDisplayedByName(createdTaskName); - tasksCloudDemoPage.taskListCloudComponent().checkContentIsNotDisplayedByName(deletedTaskName); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(completedTaskName); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsNotDisplayedByName(assignedTaskName); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsNotDisplayedByName(createdTaskName); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsNotDisplayedByName(deletedTaskName); }); - it('[C290139] Should display only tasks with all statuses when All is selected from status dropdown', () => { - tasksCloudDemoPage.editTaskFilterCloudComponent().clickCustomiseFilterHeader().clearAssignee() - .setStatusFilterDropDown('ALL'); + it('[C290139] Should display only tasks with all statuses when All is selected from status dropdown', async () => { + await tasksCloudDemoPage.editTaskFilterCloudComponent().clickCustomiseFilterHeader(); + await tasksCloudDemoPage.editTaskFilterCloudComponent().clearAssignee(); + await tasksCloudDemoPage.editTaskFilterCloudComponent().setStatusFilterDropDown('ALL'); - tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(deletedTaskName); - tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(assignedTaskName); - tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(createdTaskName); - tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(completedTaskName); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(deletedTaskName); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(assignedTaskName); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(createdTaskName); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(completedTaskName); }); - it('[C290060] Should display only tasks with Created status when Created is selected from status dropdown', () => { - tasksCloudDemoPage.editTaskFilterCloudComponent().clickCustomiseFilterHeader().clearAssignee().setStatusFilterDropDown('CREATED'); - tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(createdTaskName); - tasksCloudDemoPage.taskListCloudComponent().checkContentIsNotDisplayedByName(assignedTaskName); - tasksCloudDemoPage.taskListCloudComponent().checkContentIsNotDisplayedByName(completedTaskName); - tasksCloudDemoPage.taskListCloudComponent().checkContentIsNotDisplayedByName(deletedTaskName); + it('[C290060] Should display only tasks with Created status when Created is selected from status dropdown', async () => { + await tasksCloudDemoPage.editTaskFilterCloudComponent().clickCustomiseFilterHeader(); + await tasksCloudDemoPage.editTaskFilterCloudComponent().clearAssignee(); + await tasksCloudDemoPage.editTaskFilterCloudComponent().setStatusFilterDropDown('CREATED'); + + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(createdTaskName); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsNotDisplayedByName(assignedTaskName); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsNotDisplayedByName(completedTaskName); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsNotDisplayedByName(deletedTaskName); }); - it('[C290155] Should display only tasks with Cancelled status when Cancelled is selected from status dropdown', () => { - tasksCloudDemoPage.editTaskFilterCloudComponent().clickCustomiseFilterHeader().clearAssignee().setStatusFilterDropDown('CANCELLED'); - tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(deletedTaskName); - tasksCloudDemoPage.taskListCloudComponent().checkContentIsNotDisplayedByName(assignedTaskName); - tasksCloudDemoPage.taskListCloudComponent().checkContentIsNotDisplayedByName(completedTaskName); - tasksCloudDemoPage.taskListCloudComponent().checkContentIsNotDisplayedByName(createdTaskName); + it('[C290155] Should display only tasks with Cancelled status when Cancelled is selected from status dropdown', async () => { + await tasksCloudDemoPage.editTaskFilterCloudComponent().clickCustomiseFilterHeader(); + await tasksCloudDemoPage.editTaskFilterCloudComponent().clearAssignee(); + await tasksCloudDemoPage.editTaskFilterCloudComponent().setStatusFilterDropDown('CANCELLED'); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(deletedTaskName); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsNotDisplayedByName(assignedTaskName); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsNotDisplayedByName(completedTaskName); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsNotDisplayedByName(createdTaskName); }); }); }); diff --git a/e2e/process-services/apps-section.e2e.ts b/e2e/process-services/apps-section.e2e.ts index b95110d82a..771da22d71 100644 --- a/e2e/process-services/apps-section.e2e.ts +++ b/e2e/process-services/apps-section.e2e.ts @@ -41,7 +41,7 @@ describe('Modify applications', () => { const modelActions = new ModelsActions(); let firstApp, appVersionToBeDeleted; - beforeAll(async (done) => { + beforeAll(async () => { const users = new UsersActions(); this.alfrescoJsApi = new AlfrescoApi({ @@ -60,117 +60,111 @@ describe('Modify applications', () => { await loginPage.loginToProcessServicesUsingUserModel(user); - done(); }); - it('[C260198] Should the app be displayed on dashboard when is deployed on APS', () => { - navigationBarPage.navigateToProcessServicesPage(); + it('[C260198] Should the app be displayed on dashboard when is deployed on APS', async () => { + await navigationBarPage.navigateToProcessServicesPage(); - processServicesPage.checkApsContainer(); + await processServicesPage.checkApsContainer(); - expect(processServicesPage.getAppIconType(app.title)).toEqual(CONSTANTS.APP_ICON.UNIT); - expect(processServicesPage.getBackgroundColor(app.title)).toEqual(CONSTANTS.APP_COLOR.BLUE); - expect(processServicesPage.getDescription(app.title)).toEqual(app.description); + await expect(await processServicesPage.getAppIconType(app.title)).toEqual(CONSTANTS.APP_ICON.UNIT); + await expect(await processServicesPage.getBackgroundColor(app.title)).toEqual(CONSTANTS.APP_COLOR.BLUE); + await expect(await processServicesPage.getDescription(app.title)).toEqual(app.description); }); - it('[C260213] Should a new version of the app be displayed on dashboard when is replaced by importing another app in APS', () => { - navigationBarPage.navigateToProcessServicesPage(); + it('[C260213] Should a new version of the app be displayed on dashboard when is replaced by importing another app in APS', async () => { + await navigationBarPage.navigateToProcessServicesPage(); - processServicesPage.checkApsContainer(); + await processServicesPage.checkApsContainer(); - expect(processServicesPage.getAppIconType(app.title)).toEqual(CONSTANTS.APP_ICON.UNIT); - expect(processServicesPage.getBackgroundColor(app.title)).toEqual(CONSTANTS.APP_COLOR.BLUE); - expect(processServicesPage.getDescription(app.title)).toEqual(app.description); + await expect(await processServicesPage.getAppIconType(app.title)).toEqual(CONSTANTS.APP_ICON.UNIT); + await expect(await processServicesPage.getBackgroundColor(app.title)).toEqual(CONSTANTS.APP_COLOR.BLUE); + await expect(await processServicesPage.getDescription(app.title)).toEqual(app.description); - browser.controlFlow().execute(() => { - return apps.importNewVersionAppDefinitionPublishDeployApp(this.alfrescoJsApi, replacingApp.file_location, firstApp.id); - }); + await apps.importNewVersionAppDefinitionPublishDeployApp(this.alfrescoJsApi, replacingApp.file_location, firstApp.id); - navigationBarPage.clickHomeButton(); - navigationBarPage.navigateToProcessServicesPage(); + await navigationBarPage.clickHomeButton(); + await navigationBarPage.navigateToProcessServicesPage(); - processServicesPage.checkApsContainer(); + await processServicesPage.checkApsContainer(); - expect(processServicesPage.getAppIconType(app.title)).toEqual(CONSTANTS.APP_ICON.FAVORITE); - expect(processServicesPage.getBackgroundColor(app.title)).toEqual(CONSTANTS.APP_COLOR.GREY); - expect(processServicesPage.getDescription(app.title)).toEqual(app.description); + await expect(await processServicesPage.getAppIconType(app.title)).toEqual(CONSTANTS.APP_ICON.FAVORITE); + await expect(await processServicesPage.getBackgroundColor(app.title)).toEqual(CONSTANTS.APP_COLOR.GREY); + await expect(await processServicesPage.getDescription(app.title)).toEqual(app.description); }); it('[C260220] Should the app not be displayed on dashboard after it was deleted in APS', async () => { - navigationBarPage.navigateToProcessServicesPage(); + await navigationBarPage.navigateToProcessServicesPage(); - processServicesPage.checkApsContainer(); + await processServicesPage.checkApsContainer(); - processServicesPage.checkAppIsDisplayed(app.title); + await processServicesPage.checkAppIsDisplayed(app.title); - browser.controlFlow().execute(() => { - return modelActions.deleteEntireModel(this.alfrescoJsApi, firstApp.id); - }); + await modelActions.deleteEntireModel(this.alfrescoJsApi, firstApp.id); + await navigationBarPage.clickHomeButton(); + await navigationBarPage.navigateToProcessServicesPage(); - navigationBarPage.clickHomeButton(); - navigationBarPage.navigateToProcessServicesPage(); - - processServicesPage.checkApsContainer(); - processServicesPage.checkAppIsNotDisplayed(app.title); + await processServicesPage.checkApsContainer(); + await processServicesPage.checkAppIsNotDisplayed(app.title); }); it('[C260215] Should the penultimate version of an app be displayed on dashboard when the last version is deleted in APS', async () => { - navigationBarPage.navigateToProcessServicesPage(); + await navigationBarPage.navigateToProcessServicesPage(); - processServicesPage.checkApsContainer(); + await processServicesPage.checkApsContainer(); - processServicesPage.checkAppIsDisplayed(appToBeDeleted.title); - expect(processServicesPage.getBackgroundColor(appToBeDeleted.title)).toEqual(CONSTANTS.APP_COLOR.ORANGE); + await processServicesPage.checkAppIsDisplayed(appToBeDeleted.title); + await expect(await processServicesPage.getBackgroundColor(appToBeDeleted.title)).toEqual(CONSTANTS.APP_COLOR.ORANGE); - browser.controlFlow().execute(() => { - return apps.importNewVersionAppDefinitionPublishDeployApp(this.alfrescoJsApi, replacingApp.file_location, appVersionToBeDeleted.id); - }); + await apps.importNewVersionAppDefinitionPublishDeployApp(this.alfrescoJsApi, replacingApp.file_location, appVersionToBeDeleted.id); - navigationBarPage.clickHomeButton(); - navigationBarPage.navigateToProcessServicesPage(); + await navigationBarPage.clickHomeButton(); + await navigationBarPage.navigateToProcessServicesPage(); - processServicesPage.getBackgroundColor(appToBeDeleted.title); + await processServicesPage.getBackgroundColor(appToBeDeleted.title); - expect(processServicesPage.getBackgroundColor(appToBeDeleted.title)).toEqual(CONSTANTS.APP_COLOR.GREY); + await expect(await processServicesPage.getBackgroundColor(appToBeDeleted.title)).toEqual(CONSTANTS.APP_COLOR.GREY); - browser.controlFlow().execute(async () => { - await modelActions.deleteVersionModel(this.alfrescoJsApi, appVersionToBeDeleted.id); - await modelActions.deleteVersionModel(this.alfrescoJsApi, appVersionToBeDeleted.id); - await apps.publishDeployApp(this.alfrescoJsApi, appVersionToBeDeleted.id); - }); + await modelActions.deleteVersionModel(this.alfrescoJsApi, appVersionToBeDeleted.id); + await modelActions.deleteVersionModel(this.alfrescoJsApi, appVersionToBeDeleted.id); + await apps.publishDeployApp(this.alfrescoJsApi, appVersionToBeDeleted.id); - navigationBarPage.clickHomeButton(); - navigationBarPage.navigateToProcessServicesPage(); + await navigationBarPage.clickHomeButton(); + await navigationBarPage.navigateToProcessServicesPage(); - processServicesPage.checkApsContainer(); - processServicesPage.checkAppIsDisplayed(appToBeDeleted.title); - expect(processServicesPage.getBackgroundColor(appToBeDeleted.title)).toEqual(CONSTANTS.APP_COLOR.ORANGE); + await processServicesPage.checkApsContainer(); + await processServicesPage.checkAppIsDisplayed(appToBeDeleted.title); + await expect(await processServicesPage.getBackgroundColor(appToBeDeleted.title)).toEqual(CONSTANTS.APP_COLOR.ORANGE); }); it('[C260207] Should the app be updated when is edited in APS', async () => { const newDescription = 'new description'; - navigationBarPage.navigateToProcessServicesPage(); - processServicesPage.checkApsContainer(); + await navigationBarPage.navigateToProcessServicesPage(); + await processServicesPage.checkApsContainer(); - expect(processServicesPage.getAppIconType(appToBeDeleted.title)).toEqual(CONSTANTS.APP_ICON.USER); - expect(processServicesPage.getBackgroundColor(appToBeDeleted.title)).toEqual(CONSTANTS.APP_COLOR.ORANGE); - expect(processServicesPage.getDescription(appToBeDeleted.title)).toEqual(appToBeDeleted.description); + await expect(await processServicesPage.getAppIconType(appToBeDeleted.title)).toEqual(CONSTANTS.APP_ICON.USER); + await expect(await processServicesPage.getBackgroundColor(appToBeDeleted.title)).toEqual(CONSTANTS.APP_COLOR.ORANGE); + await expect(await processServicesPage.getDescription(appToBeDeleted.title)).toEqual(appToBeDeleted.description); - const appDefinition = {'appDefinition': {'id': appVersionToBeDeleted.id, 'name': appToBeDeleted.title, - 'description': newDescription, 'definition': {'models': [firstApp.definition.models[0]], 'theme': 'theme-4', - 'icon': 'glyphicon-user'}}, 'publish': true}; + const appDefinition = { + 'appDefinition': { + 'id': appVersionToBeDeleted.id, 'name': appToBeDeleted.title, + 'description': newDescription, 'definition': { + 'models': [firstApp.definition.models[0]], 'theme': 'theme-4', + 'icon': 'glyphicon-user' + } + }, 'publish': true + }; - browser.controlFlow().execute(async () => { - await this.alfrescoJsApi.activiti.appsApi.updateAppDefinition(appVersionToBeDeleted.id, appDefinition); - }); + await this.alfrescoJsApi.activiti.appsApi.updateAppDefinition(appVersionToBeDeleted.id, appDefinition); - navigationBarPage.clickHomeButton(); - navigationBarPage.navigateToProcessServicesPage(); + await navigationBarPage.clickHomeButton(); + await navigationBarPage.navigateToProcessServicesPage(); - expect(processServicesPage.getDescription(appToBeDeleted.title)).toEqual(newDescription); - expect(processServicesPage.getBackgroundColor(appToBeDeleted.title)).toEqual(CONSTANTS.APP_COLOR.RED); - expect(processServicesPage.getAppIconType(appToBeDeleted.title)).toEqual(CONSTANTS.APP_ICON.USER); + await expect(await processServicesPage.getDescription(appToBeDeleted.title)).toEqual(newDescription); + await expect(await processServicesPage.getBackgroundColor(appToBeDeleted.title)).toEqual(CONSTANTS.APP_COLOR.RED); + await expect(await processServicesPage.getAppIconType(appToBeDeleted.title)).toEqual(CONSTANTS.APP_ICON.USER); }); }); diff --git a/e2e/process-services/attach-file-widget.e2e.ts b/e2e/process-services/attach-file-widget.e2e.ts index 2f48b2f101..741ac4b30c 100644 --- a/e2e/process-services/attach-file-widget.e2e.ts +++ b/e2e/process-services/attach-file-widget.e2e.ts @@ -45,7 +45,7 @@ describe('Start Task - Task App', () => { const pdfFile = new FileModel({ 'name': resources.Files.ADF_DOCUMENTS.PDF.file_name }); const appFields = app.form_fields; - beforeAll(async (done) => { + beforeAll(async () => { const users = new UsersActions(); const apps = new AppsActions(); @@ -64,10 +64,9 @@ describe('Start Task - Task App', () => { await loginPage.loginToProcessServicesUsingUserModel(processUserModel); - done(); }); - afterAll(async (done) => { + afterAll(async () => { this.alfrescoJsApi = new AlfrescoApi({ provider: 'BPM', hostBpm: browser.params.testConfig.adf_aps.host @@ -77,28 +76,26 @@ describe('Start Task - Task App', () => { await this.alfrescoJsApi.activiti.adminTenantsApi.deleteTenant(processUserModel.tenantId); - done(); }); - it('[C274690] Should be able to open a file attached to a start form', () => { - navigationBarPage.navigateToProcessServicesPage().goToTaskApp().clickTasksButton(); + it('[C274690] Should be able to open a file attached to a start form', async () => { + await (await (await navigationBarPage.navigateToProcessServicesPage()).goToTaskApp()).clickTasksButton(); - taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); + await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); - taskPage - .createNewTask() - .addName('View file') - .addForm(app.formName) - .clickStartButton(); + const newTask = await taskPage.createNewTask(); + await newTask.addName('View file'); + await newTask.addForm(app.formName); + await newTask.clickStartButton(); - widget.attachFileWidget().attachFile(appFields.attachFile_id, browser.params.testConfig.main.rootPath + pdfFile.location); - widget.attachFileWidget().checkFileIsAttached(appFields.attachFile_id, pdfFile.name); + await widget.attachFileWidget().attachFile(appFields.attachFile_id, browser.params.testConfig.main.rootPath + pdfFile.location); + await widget.attachFileWidget().checkFileIsAttached(appFields.attachFile_id, pdfFile.name); - widget.attachFileWidget().viewFile(pdfFile.name); - viewerPage.checkFileContent('1', pdfFile.firstPageText); - viewerPage.checkCloseButtonIsDisplayed(); - viewerPage.clickCloseButton(); - taskPage.tasksListPage().checkContentIsDisplayed('View file'); + await widget.attachFileWidget().viewFile(pdfFile.name); + await viewerPage.checkFileContent('1', pdfFile.firstPageText); + await viewerPage.checkCloseButtonIsDisplayed(); + await viewerPage.clickCloseButton(); + await taskPage.tasksListPage().checkContentIsDisplayed('View file'); }); }); diff --git a/e2e/process-services/attach-form-component.e2e.ts b/e2e/process-services/attach-form-component.e2e.ts index b16f0bd73c..052cc67b46 100644 --- a/e2e/process-services/attach-form-component.e2e.ts +++ b/e2e/process-services/attach-form-component.e2e.ts @@ -50,7 +50,7 @@ describe('Attach Form Component', () => { formFieldValue: 'Test value' }; - beforeAll(async (done) => { + beforeAll(async () => { this.alfrescoJsApi = new AlfrescoApi({ provider: 'BPM', @@ -76,64 +76,63 @@ describe('Attach Form Component', () => { await loginPage.loginToProcessServicesUsingUserModel(user); - done(); }); - afterAll(async (done) => { + afterAll(async () => { await this.alfrescoJsApi.activiti.modelsApi.deleteModel(appId); await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); await this.alfrescoJsApi.activiti.adminTenantsApi.deleteTenant(tenantId); - done(); + }); - it('[C280047] Should be able to view the attach-form component after creating a standalone task', () => { - navigationBarPage.navigateToProcessServicesPage().goToTaskApp().clickTasksButton(); + it('[C280047] Should be able to view the attach-form component after creating a standalone task', async () => { + await (await (await navigationBarPage.navigateToProcessServicesPage()).goToTaskApp()).clickTasksButton(); - taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); - taskPage.tasksListPage().selectRow(testNames.taskName); + await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); + await taskPage.tasksListPage().selectRow(testNames.taskName); - attachFormPage.checkNoFormMessageIsDisplayed(); - attachFormPage.checkAttachFormButtonIsDisplayed(); - attachFormPage.checkCompleteButtonIsDisplayed(); + await attachFormPage.checkNoFormMessageIsDisplayed(); + await attachFormPage.checkAttachFormButtonIsDisplayed(); + await attachFormPage.checkCompleteButtonIsDisplayed(); }); - it('[C280048] Should be able to view the attach-form component after clicking cancel button', () => { - navigationBarPage.navigateToProcessServicesPage().goToTaskApp().clickTasksButton(); + it('[C280048] Should be able to view the attach-form component after clicking cancel button', async () => { + await (await (await navigationBarPage.navigateToProcessServicesPage()).goToTaskApp()).clickTasksButton(); - taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); - taskPage.tasksListPage().selectRow(testNames.taskName); + await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); + await taskPage.tasksListPage().selectRow(testNames.taskName); - attachFormPage.clickAttachFormButton(); - attachFormPage.checkDefaultFormTitleIsDisplayed(testNames.formTitle); - attachFormPage.checkFormDropdownIsDisplayed(); - attachFormPage.checkCancelButtonIsDisplayed(); - attachFormPage.checkAttachFormButtonIsDisabled(); - attachFormPage.clickAttachFormDropdown(); - attachFormPage.selectAttachFormOption(testNames.formName); + await attachFormPage.clickAttachFormButton(); + await attachFormPage.checkDefaultFormTitleIsDisplayed(testNames.formTitle); + await attachFormPage.checkFormDropdownIsDisplayed(); + await attachFormPage.checkCancelButtonIsDisplayed(); + await attachFormPage.checkAttachFormButtonIsDisabled(); + await attachFormPage.clickAttachFormDropdown(); + await attachFormPage.selectAttachFormOption(testNames.formName); - formFields.checkWidgetIsReadOnlyMode(testNames.widgetTitle); + await formFields.checkWidgetIsReadOnlyMode(testNames.widgetTitle); - attachFormPage.clickCancelButton(); - attachFormPage.checkAttachFormButtonIsDisplayed(); + await attachFormPage.clickCancelButton(); + await attachFormPage.checkAttachFormButtonIsDisplayed(); }); - it('[C280017] Should be able to attach a form on a standalone task and complete', () => { - navigationBarPage.navigateToProcessServicesPage().goToTaskApp().clickTasksButton(); + it('[C280017] Should be able to attach a form on a standalone task and complete', async () => { + await (await (await navigationBarPage.navigateToProcessServicesPage()).goToTaskApp()).clickTasksButton(); - taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); - taskPage.tasksListPage().selectRow(testNames.taskName); + await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); + await taskPage.tasksListPage().selectRow(testNames.taskName); - attachFormPage.clickAttachFormButton(); - attachFormPage.clickAttachFormDropdown(); - attachFormPage.selectAttachFormOption(testNames.formName); - attachFormPage.clickAttachFormButton(); + await attachFormPage.clickAttachFormButton(); + await attachFormPage.clickAttachFormDropdown(); + await attachFormPage.selectAttachFormOption(testNames.formName); + await attachFormPage.clickAttachFormButton(); - formFields.setFieldValue(by.id, formTextField, testNames.formFieldValue); - formFields.completeForm(); + await formFields.setFieldValue(by.id, formTextField, testNames.formFieldValue); + await formFields.completeForm(); - taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.COMPLETED_TASKS); - taskPage.tasksListPage().selectRow(testNames.taskName); + await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.COMPLETED_TASKS); + await taskPage.tasksListPage().selectRow(testNames.taskName); - expect(formFields.getFieldValue(formTextField)).toEqual(testNames.formFieldValue); + await expect(await formFields.getFieldValue(formTextField)).toEqual(testNames.formFieldValue); }); }); diff --git a/e2e/process-services/checklist-component.e2e.ts b/e2e/process-services/checklist-component.e2e.ts index a2fb2baf8f..4f3094e1a8 100644 --- a/e2e/process-services/checklist-component.e2e.ts +++ b/e2e/process-services/checklist-component.e2e.ts @@ -48,7 +48,7 @@ describe('Checklist component', () => { const removeChecklist = ['removeFirstRunningChecklist', 'removeSecondRunningChecklist', 'removeFirstCompletedChecklist', 'removeSecondCompletedChecklist']; const hierarchyChecklist = ['checklistOne', 'checklistTwo', 'checklistOneChild', 'checklistTwoChild']; - beforeAll(async (done) => { + beforeAll(async () => { const users = new UsersActions(); this.alfrescoJsApi = new AlfrescoApi({ @@ -75,124 +75,137 @@ describe('Checklist component', () => { await loginPage.loginToProcessServicesUsingUserModel(processUserModel); - done(); }); - beforeEach(async (done) => { - navigationBarPage.clickHomeButton(); - navigationBarPage.navigateToProcessServicesPage(); - processServices.goToTaskApp().clickTasksButton(); - taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); - done(); + beforeEach(async () => { + await navigationBarPage.clickHomeButton(); + await navigationBarPage.navigateToProcessServicesPage(); + await (await processServices.goToTaskApp()).clickTasksButton(); + await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); + }); - it('[C279976] Should no checklist be created when no title is typed', () => { - taskPage.tasksListPage().checkContentIsDisplayed(tasks[0]); - taskPage.tasksListPage().selectRow(tasks[0]); + it('[C279976] Should no checklist be created when no title is typed', async () => { + await taskPage.tasksListPage().checkContentIsDisplayed(tasks[0]); + await taskPage.tasksListPage().selectRow(tasks[0]); - taskPage.clickOnAddChecklistButton().clickCreateChecklistButton(); - taskPage.checkChecklistDialogIsNotDisplayed().checkNoChecklistIsDisplayed(); - expect(taskPage.getNumberOfChecklists()).toEqual('0'); + await (await taskPage.clickOnAddChecklistButton()).clickCreateChecklistButton(); + await taskPage.checkChecklistDialogIsNotDisplayed(); + await taskPage.checkNoChecklistIsDisplayed(); + await expect(await taskPage.getNumberOfChecklists()).toEqual('0'); }); - it('[C279975] Should no checklist be created when clicking on Cancel button on checklist dialog', () => { - taskPage.tasksListPage().checkContentIsDisplayed(tasks[0]); - taskPage.tasksListPage().selectRow(tasks[0]); + it('[C279975] Should no checklist be created when clicking on Cancel button on checklist dialog', async () => { + await taskPage.tasksListPage().checkContentIsDisplayed(tasks[0]); + await taskPage.tasksListPage().selectRow(tasks[0]); - taskPage.clickOnAddChecklistButton().addName(checklists[0]).clickCancelButton(); - taskPage.checkChecklistDialogIsNotDisplayed().checkNoChecklistIsDisplayed(); - expect(taskPage.getNumberOfChecklists()).toEqual('0'); + await (await taskPage.clickOnAddChecklistButton()).addName(checklists[0]); + await checklistDialog.clickCancelButton(); + await taskPage.checkChecklistDialogIsNotDisplayed(); + await taskPage.checkNoChecklistIsDisplayed(); + await expect(await taskPage.getNumberOfChecklists()).toEqual('0'); }); - it('[C261025] Should Checklist dialog be displayed when clicking on add checklist button', () => { - taskPage.tasksListPage().checkContentIsDisplayed(tasks[0]); - taskPage.tasksListPage().selectRow(tasks[0]); + it('[C261025] Should Checklist dialog be displayed when clicking on add checklist button', async () => { + await taskPage.tasksListPage().checkContentIsDisplayed(tasks[0]); + await taskPage.tasksListPage().selectRow(tasks[0]); - taskPage.clickOnAddChecklistButton(); - taskPage.checkChecklistDialogIsDisplayed(); - expect(taskPage.usingCheckListDialog().getDialogTitle()).toEqual('New Check'); - expect(taskPage.usingCheckListDialog().getNameFieldPlaceholder()).toEqual('Name'); - taskPage.usingCheckListDialog().checkAddChecklistButtonIsEnabled().checkCancelButtonIsEnabled(); - taskPage.usingCheckListDialog().clickCancelButton(); + await (await taskPage.clickOnAddChecklistButton()); + await taskPage.checkChecklistDialogIsDisplayed(); + await expect(await taskPage.usingCheckListDialog().getDialogTitle()).toEqual('New Check'); + await expect(await taskPage.usingCheckListDialog().getNameFieldPlaceholder()).toEqual('Name'); + await taskPage.usingCheckListDialog().checkAddChecklistButtonIsEnabled(); + await checklistDialog.checkCancelButtonIsEnabled(); + await taskPage.usingCheckListDialog().clickCancelButton(); }); - it('[C261026] Should Checklist number increase when a new checklist is added', () => { - taskPage.tasksListPage().checkContentIsDisplayed(tasks[1]); - taskPage.tasksListPage().selectRow(tasks[1]); + it('[C261026] Should Checklist number increase when a new checklist is added', async () => { + await taskPage.tasksListPage().checkContentIsDisplayed(tasks[1]); + await taskPage.tasksListPage().selectRow(tasks[1]); - taskPage.clickOnAddChecklistButton().addName(checklists[2]).clickCreateChecklistButton(); - taskPage.checkChecklistIsDisplayed(checklists[2]); - expect(taskPage.getNumberOfChecklists()).toEqual('1'); + await (await taskPage.clickOnAddChecklistButton()).addName(checklists[2]); + await checklistDialog.clickCreateChecklistButton(); + await taskPage.checkChecklistIsDisplayed(checklists[2]); + await expect(await taskPage.getNumberOfChecklists()).toEqual('1'); - taskPage.clickOnAddChecklistButton().addName(checklists[3]).clickCreateChecklistButton(); - taskPage.checkChecklistIsDisplayed(checklists[3]); - taskPage.checkChecklistIsDisplayed(checklists[2]); - expect(taskPage.getNumberOfChecklists()).toEqual('2'); + await (await taskPage.clickOnAddChecklistButton()).addName(checklists[3]); + await checklistDialog.clickCreateChecklistButton(); + await taskPage.checkChecklistIsDisplayed(checklists[3]); + await taskPage.checkChecklistIsDisplayed(checklists[2]); + await expect(await taskPage.getNumberOfChecklists()).toEqual('2'); }); - it('[C279980] Should checklist be removed when clicking on remove button', () => { - taskPage.tasksListPage().checkContentIsDisplayed(tasks[2]); - taskPage.tasksListPage().selectRow(tasks[2]); + it('[C279980] Should checklist be removed when clicking on remove button', async () => { + await taskPage.tasksListPage().checkContentIsDisplayed(tasks[2]); + await taskPage.tasksListPage().selectRow(tasks[2]); - taskPage.clickOnAddChecklistButton(); - taskPage.checkChecklistDialogIsDisplayed(); - checklistDialog.addName(removeChecklist[0]).clickCreateChecklistButton(); - taskPage.checkChecklistIsDisplayed(removeChecklist[0]); + await (await taskPage.clickOnAddChecklistButton()); + await taskPage.checkChecklistDialogIsDisplayed(); + await checklistDialog.addName(removeChecklist[0]); + await checklistDialog.clickCreateChecklistButton(); + await taskPage.checkChecklistIsDisplayed(removeChecklist[0]); - taskPage.clickOnAddChecklistButton().addName(removeChecklist[1]).clickCreateChecklistButton(); - taskPage.checkChecklistIsDisplayed(removeChecklist[1]); + await (await taskPage.clickOnAddChecklistButton()).addName(removeChecklist[1]); + await checklistDialog.clickCreateChecklistButton(); + await taskPage.checkChecklistIsDisplayed(removeChecklist[1]); - taskPage.removeChecklists(removeChecklist[1]); - taskPage.checkChecklistIsDisplayed(removeChecklist[0]); - taskPage.checkChecklistIsNotDisplayed(removeChecklist[1]); + await taskPage.removeChecklists(removeChecklist[1]); + await taskPage.checkChecklistIsDisplayed(removeChecklist[0]); + await taskPage.checkChecklistIsNotDisplayed(removeChecklist[1]); }); - it('[C261027] Should not be able to remove a completed Checklist when clicking on remove button', () => { - taskPage.tasksListPage().checkContentIsDisplayed(tasks[3]); - taskPage.tasksListPage().selectRow(tasks[3]); + it('[C261027] Should not be able to remove a completed Checklist when clicking on remove button', async () => { + await taskPage.tasksListPage().checkContentIsDisplayed(tasks[3]); + await taskPage.tasksListPage().selectRow(tasks[3]); - taskPage.clickOnAddChecklistButton().addName(removeChecklist[2]).clickCreateChecklistButton(); - taskPage.checkChecklistIsDisplayed(removeChecklist[2]); + await (await taskPage.clickOnAddChecklistButton()).addName(removeChecklist[2]); + await checklistDialog.clickCreateChecklistButton(); + await taskPage.checkChecklistIsDisplayed(removeChecklist[2]); - taskPage.clickOnAddChecklistButton().addName(removeChecklist[3]).clickCreateChecklistButton(); - taskPage.checkChecklistIsDisplayed(removeChecklist[3]); + await (await taskPage.clickOnAddChecklistButton()).addName(removeChecklist[3]); + await checklistDialog.clickCreateChecklistButton(); + await taskPage.checkChecklistIsDisplayed(removeChecklist[3]); - taskPage.tasksListPage().selectRow(removeChecklist[3]); - taskPage.completeTaskNoForm(); - taskPage.tasksListPage().checkContentIsNotDisplayed(removeChecklist[3]); + await taskPage.tasksListPage().selectRow(removeChecklist[3]); + await taskPage.completeTaskNoForm(); + await taskPage.tasksListPage().checkContentIsNotDisplayed(removeChecklist[3]); - taskPage.tasksListPage().selectRow(tasks[3]); - taskPage.checkChecklistIsDisplayed(removeChecklist[2]); - taskPage.checkChecklistIsDisplayed(removeChecklist[3]); - expect(taskPage.getNumberOfChecklists()).toEqual('2'); + await taskPage.tasksListPage().selectRow(tasks[3]); + await taskPage.checkChecklistIsDisplayed(removeChecklist[2]); + await taskPage.checkChecklistIsDisplayed(removeChecklist[3]); + await expect(await taskPage.getNumberOfChecklists()).toEqual('2'); - taskPage.checkChecklistsRemoveButtonIsNotDisplayed(removeChecklist[3]); + await taskPage.checkChecklistsRemoveButtonIsNotDisplayed(removeChecklist[3]); }); - it('[C261028] Should all checklists of a task be completed when the task is completed', () => { - taskPage.tasksListPage().checkContentIsDisplayed(tasks[4]); - taskPage.tasksListPage().selectRow(tasks[4]); + it('[C261028] Should all checklists of a task be completed when the task is completed', async () => { + await taskPage.tasksListPage().checkContentIsDisplayed(tasks[4]); + await taskPage.tasksListPage().selectRow(tasks[4]); - taskPage.clickOnAddChecklistButton().addName(hierarchyChecklist[0]).clickCreateChecklistButton(); - taskPage.clickOnAddChecklistButton().addName(hierarchyChecklist[1]).clickCreateChecklistButton(); + await (await taskPage.clickOnAddChecklistButton()).addName(hierarchyChecklist[0]); + await checklistDialog.clickCreateChecklistButton(); + await (await taskPage.clickOnAddChecklistButton()).addName(hierarchyChecklist[1]); + await checklistDialog.clickCreateChecklistButton(); - taskPage.tasksListPage().selectRow(hierarchyChecklist[0]); - taskPage.clickOnAddChecklistButton().addName(hierarchyChecklist[2]).clickCreateChecklistButton(); - taskPage.checkChecklistIsDisplayed(hierarchyChecklist[2]); + await taskPage.tasksListPage().selectRow(hierarchyChecklist[0]); + await (await taskPage.clickOnAddChecklistButton()).addName(hierarchyChecklist[2]); + await checklistDialog.clickCreateChecklistButton(); + await taskPage.checkChecklistIsDisplayed(hierarchyChecklist[2]); - taskPage.tasksListPage().selectRow(hierarchyChecklist[1]); - taskPage.clickOnAddChecklistButton().addName(hierarchyChecklist[3]).clickCreateChecklistButton(); - taskPage.checkChecklistIsDisplayed(hierarchyChecklist[3]); + await taskPage.tasksListPage().selectRow(hierarchyChecklist[1]); + await (await taskPage.clickOnAddChecklistButton()).addName(hierarchyChecklist[3]); + await checklistDialog.clickCreateChecklistButton(); + await taskPage.checkChecklistIsDisplayed(hierarchyChecklist[3]); - taskPage.tasksListPage().selectRow(tasks[4]); - taskPage.completeTaskNoForm(); + await taskPage.tasksListPage().selectRow(tasks[4]); + await taskPage.completeTaskNoForm(); - taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.COMPLETED_TASKS); - taskPage.tasksListPage().checkContentIsDisplayed(tasks[4]); - taskPage.tasksListPage().checkContentIsDisplayed(hierarchyChecklist[0]); - taskPage.tasksListPage().checkContentIsDisplayed(hierarchyChecklist[1]); - taskPage.tasksListPage().checkContentIsDisplayed(hierarchyChecklist[2]); - taskPage.tasksListPage().checkContentIsDisplayed(hierarchyChecklist[3]); + await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.COMPLETED_TASKS); + await taskPage.tasksListPage().checkContentIsDisplayed(tasks[4]); + await taskPage.tasksListPage().checkContentIsDisplayed(hierarchyChecklist[0]); + await taskPage.tasksListPage().checkContentIsDisplayed(hierarchyChecklist[1]); + await taskPage.tasksListPage().checkContentIsDisplayed(hierarchyChecklist[2]); + await taskPage.tasksListPage().checkContentIsDisplayed(hierarchyChecklist[3]); }); }); diff --git a/e2e/process-services/comment-component-processes.e2e.ts b/e2e/process-services/comment-component-processes.e2e.ts index e5e534262c..c718d407c8 100644 --- a/e2e/process-services/comment-component-processes.e2e.ts +++ b/e2e/process-services/comment-component-processes.e2e.ts @@ -35,117 +35,95 @@ describe('Comment component for Processes', () => { const navigationBarPage = new NavigationBarPage(); const app = resources.Files.SIMPLE_APP_WITH_USER_FORM; - let user, tenantId, appId, processInstanceId, comment, taskComment, addedComment; + let user, tenantId, appId, processInstanceId, addedComment; - beforeAll(async(done) => { - this.alfrescoJsApi = new AlfrescoApi({ + beforeAll(async () => { + this.alfrescoJsApi = new AlfrescoApi({ provider: 'BPM', hostBpm: browser.params.testConfig.adf_aps.host }); - const apps = new AppsActions(); - const users = new UsersActions(); - - await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); - - user = await users.createTenantAndUser(this.alfrescoJsApi); - - tenantId = user.tenantId; - - await this.alfrescoJsApi.login(user.email, user.password); - - const importedApp = await apps.importPublishDeployApp(this.alfrescoJsApi, app.file_location); - appId = importedApp.id; - - const processWithComment = await apps.startProcess(this.alfrescoJsApi, 'Task App', 'Comment APS'); - processInstanceId = processWithComment.id; - - await loginPage.loginToProcessServicesUsingUserModel(user); - - done(); - }); - - afterAll(async(done) => { - await this.alfrescoJsApi.activiti.modelsApi.deleteModel(appId); + const apps = new AppsActions(); + const users = new UsersActions(); await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); + user = await users.createTenantAndUser(this.alfrescoJsApi); + + tenantId = user.tenantId; + + await this.alfrescoJsApi.login(user.email, user.password); + + const importedApp = await apps.importPublishDeployApp(this.alfrescoJsApi, app.file_location); + appId = importedApp.id; + + const processWithComment = await apps.startProcess(this.alfrescoJsApi, 'Task App', 'Comment APS'); + processInstanceId = processWithComment.id; + + await loginPage.loginToProcessServicesUsingUserModel(user); + + }); + + afterAll(async () => { + await this.alfrescoJsApi.activiti.modelsApi.deleteModel(appId); + await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); await this.alfrescoJsApi.activiti.adminTenantsApi.deleteTenant(tenantId); - done(); }); - it('[C260464] Should be able to add a comment on APS and check on ADF', () => { - browser.controlFlow().execute(async() => { - comment = {message: 'HELLO'}; + it('[C260464] Should be able to add a comment on APS and check on ADF', async () => { + await this.alfrescoJsApi.activiti.commentsApi.addProcessInstanceComment({ message: 'HELLO' }, processInstanceId); - await this.alfrescoJsApi.activiti.commentsApi.addProcessInstanceComment(comment, processInstanceId); - }); + await (await (await navigationBarPage.navigateToProcessServicesPage()).goToTaskApp()).clickProcessButton(); - navigationBarPage.navigateToProcessServicesPage().goToTaskApp().clickProcessButton(); + await processFiltersPage.clickRunningFilterButton(); + await processFiltersPage.selectFromProcessList('Comment APS'); - processFiltersPage.clickRunningFilterButton(); - processFiltersPage.selectFromProcessList('Comment APS'); + addedComment = await this.alfrescoJsApi.activiti.commentsApi.getProcessInstanceComments(processInstanceId, { 'latestFirst': true }); - browser.controlFlow().execute(async() => { - addedComment = await this.alfrescoJsApi.activiti.commentsApi.getProcessInstanceComments(processInstanceId, {'latestFirst': true}); + await commentsPage.checkUserIconIsDisplayed(0); - commentsPage.checkUserIconIsDisplayed(0); - - expect(commentsPage.getTotalNumberOfComments()).toEqual('Comments (' + addedComment.total + ')'); - expect(commentsPage.getMessage(0)).toEqual(addedComment.data[0].message); - expect(commentsPage.getUserName(0)).toEqual(addedComment.data[0].createdBy.firstName + ' ' + addedComment.data[0].createdBy.lastName); - expect(commentsPage.getTime(0)).toMatch(/(ago|few)/); - }); + await expect(await commentsPage.getTotalNumberOfComments()).toEqual('Comments (' + addedComment.total + ')'); + await expect(await commentsPage.getMessage(0)).toEqual(addedComment.data[0].message); + await expect(await commentsPage.getUserName(0)).toEqual(addedComment.data[0].createdBy.firstName + ' ' + addedComment.data[0].createdBy.lastName); + await expect(await commentsPage.getTime(0)).toMatch(/(ago|few)/); }); - it('[C260465] Should not be able to view process comment on included task', () => { - browser.controlFlow().execute(async() => { - comment = {message: 'GOODBYE'}; + it('[C260465] Should not be able to view process comment on included task', async () => { + await this.alfrescoJsApi.activiti.commentsApi.addProcessInstanceComment({ message: 'GOODBYE' }, processInstanceId); - await this.alfrescoJsApi.activiti.commentsApi.addProcessInstanceComment(comment, processInstanceId); - }); + await (await (await navigationBarPage.navigateToProcessServicesPage()).goToTaskApp()).clickProcessButton(); - navigationBarPage.navigateToProcessServicesPage().goToTaskApp().clickProcessButton(); + await processFiltersPage.clickRunningFilterButton(); + await processFiltersPage.selectFromProcessList('Comment APS'); - processFiltersPage.clickRunningFilterButton(); - processFiltersPage.selectFromProcessList('Comment APS'); + const taskQuery = await this.alfrescoJsApi.activiti.taskApi.listTasks({ processInstanceId: processInstanceId }); - browser.controlFlow().execute(async() => { - const taskQuery = await this.alfrescoJsApi.activiti.taskApi.listTasks({processInstanceId: processInstanceId}); + const taskId = taskQuery.data[0].id; - const taskId = taskQuery.data[0].id; - - const taskComments = await this.alfrescoJsApi.activiti.commentsApi.getTaskComments(taskId, {'latestFirst': true}); - expect(taskComments.total).toEqual(0); - }); + const taskComments = await this.alfrescoJsApi.activiti.commentsApi.getTaskComments(taskId, { 'latestFirst': true }); + await expect(await taskComments.total).toEqual(0); }); - it('[C260466] Should be able to display comments from Task on the related Process', () => { - browser.controlFlow().execute(async() => { - const taskQuery = await this.alfrescoJsApi.activiti.taskApi.listTasks({processInstanceId: processInstanceId}); + it('[C260466] Should be able to display comments from Task on the related Process', async () => { + const taskQuery = await this.alfrescoJsApi.activiti.taskApi.listTasks({ processInstanceId: processInstanceId }); - const taskId = taskQuery.data[0].id; + const taskId = taskQuery.data[0].id; - taskComment = {message: 'Task Comment'}; + await this.alfrescoJsApi.activiti.taskApi.addTaskComment({ message: 'Task Comment' }, taskId); - await this.alfrescoJsApi.activiti.taskApi.addTaskComment(taskComment, taskId); - }); + await (await (await navigationBarPage.navigateToProcessServicesPage()).goToTaskApp()).clickProcessButton(); - navigationBarPage.navigateToProcessServicesPage().goToTaskApp().clickProcessButton(); + await processFiltersPage.clickRunningFilterButton(); + await processFiltersPage.selectFromProcessList('Comment APS'); - processFiltersPage.clickRunningFilterButton(); - processFiltersPage.selectFromProcessList('Comment APS'); + const addedTaskComment = await this.alfrescoJsApi.activiti.commentsApi.getProcessInstanceComments(processInstanceId, { 'latestFirst': true }); - browser.controlFlow().execute(async() => { - const addedTaskComment = await this.alfrescoJsApi.activiti.commentsApi.getProcessInstanceComments(processInstanceId, {'latestFirst': true}); + await commentsPage.checkUserIconIsDisplayed(0); - commentsPage.checkUserIconIsDisplayed(0); - - expect(commentsPage.getTotalNumberOfComments()).toEqual('Comments (' + addedTaskComment.total + ')'); - expect(commentsPage.getMessage(0)).toEqual(addedTaskComment.data[0].message); - expect(commentsPage.getUserName(0)).toEqual(addedTaskComment.data[0].createdBy.firstName + ' ' + addedTaskComment.data[0].createdBy.lastName); - expect(commentsPage.getTime(0)).toMatch(/(ago|few)/); - }); + await expect(await commentsPage.getTotalNumberOfComments()).toEqual('Comments (' + addedTaskComment.total + ')'); + await expect(await commentsPage.getMessage(0)).toEqual(addedTaskComment.data[0].message); + await expect(await commentsPage.getUserName(0)).toEqual(addedTaskComment.data[0].createdBy.firstName + ' ' + addedTaskComment.data[0].createdBy.lastName); + await expect(await commentsPage.getTime(0)).toMatch(/(ago|few)/); }); }); diff --git a/e2e/process-services/comment-component-tasks.e2e.ts b/e2e/process-services/comment-component-tasks.e2e.ts index be312480ef..bb221a3a85 100644 --- a/e2e/process-services/comment-component-tasks.e2e.ts +++ b/e2e/process-services/comment-component-tasks.e2e.ts @@ -45,7 +45,7 @@ describe('Comment component for Processes', () => { multiple_users: 'Test Comment multiple users' }; - beforeAll(async (done) => { + beforeAll(async () => { this.alfrescoJsApi = new AlfrescoApi({ provider: 'BPM', @@ -70,106 +70,97 @@ describe('Comment component for Processes', () => { await loginPage.loginToProcessServicesUsingUserModel(user); - done(); }); - afterAll(async (done) => { + afterAll(async () => { await this.alfrescoJsApi.activiti.modelsApi.deleteModel(appId); await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); await this.alfrescoJsApi.activiti.adminTenantsApi.deleteTenant(tenantId); - done(); + }); - it('[C260237] Should not be able to add a comment on a completed task', () => { - browser.controlFlow().execute(async () => { - const newTask = await this.alfrescoJsApi.activiti.taskApi.createNewTask({ name: taskName.completed_task }); + it('[C260237] Should not be able to add a comment on a completed task', async () => { + const newTask = await this.alfrescoJsApi.activiti.taskApi.createNewTask({ name: taskName.completed_task }); - const taskId = newTask.id; + const taskId = newTask.id; - this.alfrescoJsApi.activiti.taskActionsApi.completeTask(taskId); - }); + await this.alfrescoJsApi.activiti.taskActionsApi.completeTask(taskId); - navigationBarPage.navigateToProcessServicesPage().goToTaskApp().clickTasksButton(); + await (await (await navigationBarPage.navigateToProcessServicesPage()).goToTaskApp()).clickTasksButton(); - taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.COMPLETED_TASKS); - taskPage.tasksListPage().selectRow(taskName.completed_task); + await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.COMPLETED_TASKS); + await taskPage.tasksListPage().selectRow(taskName.completed_task); - commentsPage.checkCommentInputIsNotDisplayed(); + await commentsPage.checkCommentInputIsNotDisplayed(); }); - it('[C212864] Should be able to add multiple comments on a single task using different users', () => { - browser.controlFlow().execute(async () => { - const newTask = await this.alfrescoJsApi.activiti.taskApi.createNewTask({ name: taskName.multiple_users }); + it('[C212864] Should be able to add multiple comments on a single task using different users', async () => { + const newTask = await this.alfrescoJsApi.activiti.taskApi.createNewTask({ name: taskName.multiple_users }); - newTaskId = newTask.id; + newTaskId = newTask.id; - await this.alfrescoJsApi.activiti.taskApi.involveUser(newTaskId, { email: secondUser.email }); + await this.alfrescoJsApi.activiti.taskApi.involveUser(newTaskId, { email: secondUser.email }); - const taskComment = { message: 'Task Comment' }; - const secondTaskComment = { message: 'Second Task Comment' }; + const taskComment = { message: 'Task Comment' }; + const secondTaskComment = { message: 'Second Task Comment' }; - await this.alfrescoJsApi.activiti.taskApi.addTaskComment(taskComment, newTaskId); - await this.alfrescoJsApi.activiti.taskApi.addTaskComment(secondTaskComment, newTaskId); - }); + await this.alfrescoJsApi.activiti.taskApi.addTaskComment(taskComment, newTaskId); + await this.alfrescoJsApi.activiti.taskApi.addTaskComment(secondTaskComment, newTaskId); - navigationBarPage.navigateToProcessServicesPage().goToTaskApp().clickTasksButton(); + await (await (await navigationBarPage.navigateToProcessServicesPage()).goToTaskApp()).clickTasksButton(); - taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); - taskPage.tasksListPage().selectRow(taskName.multiple_users); - taskPage.taskDetails().selectActivityTab(); + await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); + await taskPage.tasksListPage().selectRow(taskName.multiple_users); + await taskPage.taskDetails().selectActivityTab(); - browser.controlFlow().execute(async () => { - const totalComments = await this.alfrescoJsApi.activiti.taskApi.getTaskComments(newTaskId, { 'latestFirst': true }); + const totalCommentsLatest = await this.alfrescoJsApi.activiti.taskApi.getTaskComments(newTaskId, { 'latestFirst': true }); - const thirdTaskComment = { message: 'Third Task Comment' }; + const thirdTaskComment = { message: 'Third Task Comment' }; - await commentsPage.checkUserIconIsDisplayed(0); - await commentsPage.checkUserIconIsDisplayed(1); + await commentsPage.checkUserIconIsDisplayed(0); + await commentsPage.checkUserIconIsDisplayed(1); - await expect(commentsPage.getTotalNumberOfComments()).toEqual('Comments (' + totalComments.total + ')'); + await expect(await commentsPage.getTotalNumberOfComments()).toEqual('Comments (' + totalCommentsLatest.total + ')'); - await expect(commentsPage.getMessage(0)).toEqual(totalComments.data[0].message); - await expect(commentsPage.getMessage(1)).toEqual(totalComments.data[1].message); + await expect(await commentsPage.getMessage(0)).toEqual(totalCommentsLatest.data[0].message); + await expect(await commentsPage.getMessage(1)).toEqual(totalCommentsLatest.data[1].message); - await expect(commentsPage.getUserName(0)).toEqual(totalComments.data[0].createdBy.firstName + ' ' + totalComments.data[0].createdBy.lastName); - await expect(commentsPage.getUserName(1)).toEqual(totalComments.data[1].createdBy.firstName + ' ' + totalComments.data[1].createdBy.lastName); + await expect(await commentsPage.getUserName(0)).toEqual(totalCommentsLatest.data[0].createdBy.firstName + ' ' + totalCommentsLatest.data[0].createdBy.lastName); + await expect(await commentsPage.getUserName(1)).toEqual(totalCommentsLatest.data[1].createdBy.firstName + ' ' + totalCommentsLatest.data[1].createdBy.lastName); - await expect(commentsPage.getTime(0)).toMatch(/(ago|few)/); - await expect(commentsPage.getTime(1)).toMatch(/(ago|few)/); + await expect(await commentsPage.getTime(0)).toMatch(/(ago|few)/); + await expect(await commentsPage.getTime(1)).toMatch(/(ago|few)/); - await loginPage.loginToProcessServicesUsingUserModel(secondUser); + await loginPage.loginToProcessServicesUsingUserModel(secondUser); - await this.alfrescoJsApi.activiti.taskApi.addTaskComment(thirdTaskComment, newTaskId); - }); + await this.alfrescoJsApi.activiti.taskApi.addTaskComment(thirdTaskComment, newTaskId); - navigationBarPage.navigateToProcessServicesPage().goToTaskApp().clickTasksButton(); + await (await (await navigationBarPage.navigateToProcessServicesPage()).goToTaskApp()).clickTasksButton(); - taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.INV_TASKS); - taskPage.tasksListPage().selectRow(taskName.multiple_users); - taskPage.taskDetails().selectActivityTab(); + await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.INV_TASKS); + await taskPage.tasksListPage().selectRow(taskName.multiple_users); + await taskPage.taskDetails().selectActivityTab(); - browser.controlFlow().execute(async () => { - const totalComments = await this.alfrescoJsApi.activiti.taskApi.getTaskComments(newTaskId, { 'latestFirst': true }); + const totalComments = await this.alfrescoJsApi.activiti.taskApi.getTaskComments(newTaskId, { 'latestFirst': true }); - await commentsPage.checkUserIconIsDisplayed(0); - await commentsPage.checkUserIconIsDisplayed(1); - await commentsPage.checkUserIconIsDisplayed(2); + await commentsPage.checkUserIconIsDisplayed(0); + await commentsPage.checkUserIconIsDisplayed(1); + await commentsPage.checkUserIconIsDisplayed(2); - await expect(commentsPage.getTotalNumberOfComments()).toEqual('Comments (' + totalComments.total + ')'); + await expect(await commentsPage.getTotalNumberOfComments()).toEqual('Comments (' + totalComments.total + ')'); - await expect(commentsPage.getMessage(0)).toEqual(totalComments.data[0].message); - await expect(commentsPage.getMessage(1)).toEqual(totalComments.data[1].message); - await expect(commentsPage.getMessage(2)).toEqual(totalComments.data[2].message); + await expect(await commentsPage.getMessage(0)).toEqual(totalComments.data[0].message); + await expect(await commentsPage.getMessage(1)).toEqual(totalComments.data[1].message); + await expect(await commentsPage.getMessage(2)).toEqual(totalComments.data[2].message); - await expect(commentsPage.getUserName(0)).toEqual(totalComments.data[0].createdBy.firstName + ' ' + totalComments.data[0].createdBy.lastName); - await expect(commentsPage.getUserName(1)).toEqual(totalComments.data[1].createdBy.firstName + ' ' + totalComments.data[1].createdBy.lastName); - await expect(commentsPage.getUserName(2)).toEqual(totalComments.data[2].createdBy.firstName + ' ' + totalComments.data[2].createdBy.lastName); + await expect(await commentsPage.getUserName(0)).toEqual(totalComments.data[0].createdBy.firstName + ' ' + totalComments.data[0].createdBy.lastName); + await expect(await commentsPage.getUserName(1)).toEqual(totalComments.data[1].createdBy.firstName + ' ' + totalComments.data[1].createdBy.lastName); + await expect(await commentsPage.getUserName(2)).toEqual(totalComments.data[2].createdBy.firstName + ' ' + totalComments.data[2].createdBy.lastName); - await expect(commentsPage.getTime(0)).toMatch(/(ago|few)/); - await expect(commentsPage.getTime(1)).toMatch(/(ago|few)/); - await expect(commentsPage.getTime(2)).toMatch(/(ago|few)/); - }); + await expect(await commentsPage.getTime(0)).toMatch(/(ago|few)/); + await expect(await commentsPage.getTime(1)).toMatch(/(ago|few)/); + await expect(await commentsPage.getTime(2)).toMatch(/(ago|few)/); }); }); diff --git a/e2e/process-services/custom-process-filters-sorting.e2e.ts b/e2e/process-services/custom-process-filters-sorting.e2e.ts index 801c7b8445..1b9e908c83 100644 --- a/e2e/process-services/custom-process-filters-sorting.e2e.ts +++ b/e2e/process-services/custom-process-filters-sorting.e2e.ts @@ -51,16 +51,15 @@ describe('Sorting for process filters', () => { completed_least_recently: 'Completed - Least recently' }; - beforeAll(async (done) => { + beforeAll(async () => { this.alfrescoJsApi = new AlfrescoApi({ provider: 'BPM', hostBpm: browser.params.testConfig.adf_aps.host }); - done(); }); - beforeEach(async (done) => { + beforeEach(async () => { const users = new UsersActions(); await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); @@ -75,298 +74,240 @@ describe('Sorting for process filters', () => { await loginPage.loginToProcessServicesUsingUserModel(user); - done(); }); - afterEach(async (done) => { + afterEach(async () => { await this.alfrescoJsApi.activiti.modelsApi.deleteModel(appId); await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); await this.alfrescoJsApi.activiti.adminTenantsApi.deleteTenant(tenantId); - done(); }); it('[C260476] Should be able to create a filter on APS for running processes - Oldest first and check on ADF', async () => { - await browser.controlFlow().execute(async () => { - await this.alfrescoJsApi.activiti.userFiltersApi.createUserProcessInstanceFilter({ - 'appId': null, 'name': processFilter.running_old_first, 'icon': 'glyphicon-random', - 'filter': { 'sort': 'created-asc', 'name': '', 'state': 'running' } - }); - await apps.startProcess(this.alfrescoJsApi, 'Task App', 'Process 1'); - await apps.startProcess(this.alfrescoJsApi, 'Task App', 'Process 2'); - await apps.startProcess(this.alfrescoJsApi, 'Task App', 'Process 3'); + await this.alfrescoJsApi.activiti.userFiltersApi.createUserProcessInstanceFilter({ + 'appId': null, 'name': processFilter.running_old_first, 'icon': 'glyphicon-random', + 'filter': { 'sort': 'created-asc', 'name': '', 'state': 'running' } }); + await apps.startProcess(this.alfrescoJsApi, 'Task App', 'Process 1'); + await apps.startProcess(this.alfrescoJsApi, 'Task App', 'Process 2'); + await apps.startProcess(this.alfrescoJsApi, 'Task App', 'Process 3'); - navigationBarPage - .navigateToProcessServicesPage() - .goToTaskApp() - .clickProcessButton(); - processFiltersPage.checkFilterIsDisplayed(processFilter.running_old_first); - filtersPage.goToFilter(processFilter.running_old_first); - await browser.controlFlow().execute(async () => { - processesQuery = await this.alfrescoJsApi.activiti.processApi.getProcessInstances({ - 'processDefinitionId': null, 'appDefinitionId': null, 'state': 'running', 'sort': 'created-asc' - }); - expect(processesQuery.data[0].name).toEqual('Process 1'); - expect(processesQuery.data[1].name).toEqual('Process 2'); - expect(processesQuery.data[2].name).toEqual('Process 3'); + await (await (await navigationBarPage.navigateToProcessServicesPage()).goToTaskApp()).clickProcessButton(); + + await processFiltersPage.checkFilterIsDisplayed(processFilter.running_old_first); + await filtersPage.goToFilter(processFilter.running_old_first); + processesQuery = await this.alfrescoJsApi.activiti.processApi.getProcessInstances({ + 'processDefinitionId': null, 'appDefinitionId': null, 'state': 'running', 'sort': 'created-asc' }); + await expect(processesQuery.data[0].name).toEqual('Process 1'); + await expect(processesQuery.data[1].name).toEqual('Process 2'); + await expect(processesQuery.data[2].name).toEqual('Process 3'); }); it('[C260477] Should be able to create a filter on APS for completed processes - Oldest first and check on ADF', async () => { - await browser.controlFlow().execute(async () => { - await this.alfrescoJsApi.activiti.userFiltersApi.createUserProcessInstanceFilter({ - 'appId': null, 'name': processFilter.completed_old_first, 'icon': 'glyphicon-random', - 'filter': { 'sort': 'created-asc', 'name': '', 'state': 'completed' } - }); - - const firstProc = await apps.startProcess(this.alfrescoJsApi, 'Task App', 'Process 1'); - const secondProc = await apps.startProcess(this.alfrescoJsApi, 'Task App', 'Process 2'); - const thirdProc = await apps.startProcess(this.alfrescoJsApi, 'Task App', 'Process 3'); - - await this.alfrescoJsApi.activiti.processInstancesApi.deleteProcessInstance(firstProc.id); - await this.alfrescoJsApi.activiti.processInstancesApi.deleteProcessInstance(secondProc.id); - await this.alfrescoJsApi.activiti.processInstancesApi.deleteProcessInstance(thirdProc.id); + await this.alfrescoJsApi.activiti.userFiltersApi.createUserProcessInstanceFilter({ + 'appId': null, 'name': processFilter.completed_old_first, 'icon': 'glyphicon-random', + 'filter': { 'sort': 'created-asc', 'name': '', 'state': 'completed' } }); - navigationBarPage - .navigateToProcessServicesPage() - .goToTaskApp() - .clickProcessButton(); + const firstProc = await apps.startProcess(this.alfrescoJsApi, 'Task App', 'Process 1'); + const secondProc = await apps.startProcess(this.alfrescoJsApi, 'Task App', 'Process 2'); + const thirdProc = await apps.startProcess(this.alfrescoJsApi, 'Task App', 'Process 3'); - processFiltersPage.checkFilterIsDisplayed(processFilter.completed_old_first); + await this.alfrescoJsApi.activiti.processInstancesApi.deleteProcessInstance(firstProc.id); + await this.alfrescoJsApi.activiti.processInstancesApi.deleteProcessInstance(secondProc.id); + await this.alfrescoJsApi.activiti.processInstancesApi.deleteProcessInstance(thirdProc.id); - filtersPage.goToFilter(processFilter.completed_old_first); + await (await (await navigationBarPage.navigateToProcessServicesPage()).goToTaskApp()).clickProcessButton(); - await browser.controlFlow().execute(async () => { - processesQuery = await this.alfrescoJsApi.activiti.processApi.getProcessInstances({ - 'processDefinitionId': null, 'appDefinitionId': null, 'state': 'completed', 'sort': 'created-asc' - }); - expect(processesQuery.data[0].name).toEqual('Process 1'); - expect(processesQuery.data[1].name).toEqual('Process 2'); - expect(processesQuery.data[2].name).toEqual('Process 3'); + await processFiltersPage.checkFilterIsDisplayed(processFilter.completed_old_first); + + await filtersPage.goToFilter(processFilter.completed_old_first); + + processesQuery = await this.alfrescoJsApi.activiti.processApi.getProcessInstances({ + 'processDefinitionId': null, 'appDefinitionId': null, 'state': 'completed', 'sort': 'created-asc' }); + await expect(processesQuery.data[0].name).toEqual('Process 1'); + await expect(processesQuery.data[1].name).toEqual('Process 2'); + await expect(processesQuery.data[2].name).toEqual('Process 3'); }); it('[C260478] Should be able to create a filter on APS for all processes - Oldest first and check on ADF', async () => { - await browser.controlFlow().execute(async () => { - await this.alfrescoJsApi.activiti.userFiltersApi.createUserProcessInstanceFilter({ - 'appId': null, 'name': processFilter.all_old_first, 'icon': 'glyphicon-random', - 'filter': { 'sort': 'created-asc', 'name': '', 'state': 'all' } - }); - - await apps.startProcess(this.alfrescoJsApi, 'Task App', 'Process 1'); - await apps.startProcess(this.alfrescoJsApi, 'Task App', 'Process 2'); - await apps.startProcess(this.alfrescoJsApi, 'Task App', 'Process 3'); - - const firstProc = await apps.startProcess(this.alfrescoJsApi, 'Task App', 'Process 4'); - const secondProc = await apps.startProcess(this.alfrescoJsApi, 'Task App', 'Process 5'); - const thirdProc = await apps.startProcess(this.alfrescoJsApi, 'Task App', 'Process 6'); - - await this.alfrescoJsApi.activiti.processInstancesApi.deleteProcessInstance(firstProc.id); - await this.alfrescoJsApi.activiti.processInstancesApi.deleteProcessInstance(secondProc.id); - await this.alfrescoJsApi.activiti.processInstancesApi.deleteProcessInstance(thirdProc.id); + await this.alfrescoJsApi.activiti.userFiltersApi.createUserProcessInstanceFilter({ + 'appId': null, 'name': processFilter.all_old_first, 'icon': 'glyphicon-random', + 'filter': { 'sort': 'created-asc', 'name': '', 'state': 'all' } }); - navigationBarPage - .navigateToProcessServicesPage() - .goToTaskApp() - .clickProcessButton(); + await apps.startProcess(this.alfrescoJsApi, 'Task App', 'Process 1'); + await apps.startProcess(this.alfrescoJsApi, 'Task App', 'Process 2'); + await apps.startProcess(this.alfrescoJsApi, 'Task App', 'Process 3'); - processFiltersPage.checkFilterIsDisplayed(processFilter.all_old_first); + const firstProc = await apps.startProcess(this.alfrescoJsApi, 'Task App', 'Process 4'); + const secondProc = await apps.startProcess(this.alfrescoJsApi, 'Task App', 'Process 5'); + const thirdProc = await apps.startProcess(this.alfrescoJsApi, 'Task App', 'Process 6'); - filtersPage.goToFilter(processFilter.all_old_first); + await this.alfrescoJsApi.activiti.processInstancesApi.deleteProcessInstance(firstProc.id); + await this.alfrescoJsApi.activiti.processInstancesApi.deleteProcessInstance(secondProc.id); + await this.alfrescoJsApi.activiti.processInstancesApi.deleteProcessInstance(thirdProc.id); - await browser.controlFlow().execute(async () => { - processesQuery = await this.alfrescoJsApi.activiti.processApi.getProcessInstances({ - 'processDefinitionId': null, 'appDefinitionId': null, 'state': 'all', 'sort': 'created-asc' - }); - expect(processesQuery.data[0].name).toEqual('Process 1'); - expect(processesQuery.data[1].name).toEqual('Process 2'); - expect(processesQuery.data[2].name).toEqual('Process 3'); - expect(processesQuery.data[3].name).toEqual('Process 4'); - expect(processesQuery.data[4].name).toEqual('Process 5'); - expect(processesQuery.data[5].name).toEqual('Process 6'); + await (await (await navigationBarPage.navigateToProcessServicesPage()).goToTaskApp()).clickProcessButton(); + + await processFiltersPage.checkFilterIsDisplayed(processFilter.all_old_first); + + await filtersPage.goToFilter(processFilter.all_old_first); + + processesQuery = await this.alfrescoJsApi.activiti.processApi.getProcessInstances({ + 'processDefinitionId': null, 'appDefinitionId': null, 'state': 'all', 'sort': 'created-asc' }); + await expect(processesQuery.data[0].name).toEqual('Process 1'); + await expect(processesQuery.data[1].name).toEqual('Process 2'); + await expect(processesQuery.data[2].name).toEqual('Process 3'); + await expect(processesQuery.data[3].name).toEqual('Process 4'); + await expect(processesQuery.data[4].name).toEqual('Process 5'); + await expect(processesQuery.data[5].name).toEqual('Process 6'); }); it('[C260479] Should be able to create a filter on APS for running processes - Newest first and check on ADF', async () => { - await browser.controlFlow().execute(async () => { - await this.alfrescoJsApi.activiti.userFiltersApi.createUserProcessInstanceFilter({ - 'appId': null, 'name': processFilter.running_new_first, 'icon': 'glyphicon-random', - 'filter': { 'sort': 'created-desc', 'name': '', 'state': 'running' } - }); - - await apps.startProcess(this.alfrescoJsApi, 'Task App', 'Process 1'); - await apps.startProcess(this.alfrescoJsApi, 'Task App', 'Process 2'); - await apps.startProcess(this.alfrescoJsApi, 'Task App', 'Process 3'); + await this.alfrescoJsApi.activiti.userFiltersApi.createUserProcessInstanceFilter({ + 'appId': null, 'name': processFilter.running_new_first, 'icon': 'glyphicon-random', + 'filter': { 'sort': 'created-desc', 'name': '', 'state': 'running' } }); - navigationBarPage - .navigateToProcessServicesPage() - .goToTaskApp() - .clickProcessButton(); + await apps.startProcess(this.alfrescoJsApi, 'Task App', 'Process 1'); + await apps.startProcess(this.alfrescoJsApi, 'Task App', 'Process 2'); + await apps.startProcess(this.alfrescoJsApi, 'Task App', 'Process 3'); - processFiltersPage.checkFilterIsDisplayed(processFilter.running_new_first); + await (await (await navigationBarPage.navigateToProcessServicesPage()).goToTaskApp()).clickProcessButton(); - filtersPage.goToFilter(processFilter.running_new_first); + await processFiltersPage.checkFilterIsDisplayed(processFilter.running_new_first); - await browser.controlFlow().execute(async () => { - processesQuery = await this.alfrescoJsApi.activiti.processApi.getProcessInstances({ - 'processDefinitionId': null, 'appDefinitionId': null, 'state': 'running', 'sort': 'created-desc' - }); - expect(processesQuery.data[0].name).toEqual('Process 3'); - expect(processesQuery.data[1].name).toEqual('Process 2'); - expect(processesQuery.data[2].name).toEqual('Process 1'); + await filtersPage.goToFilter(processFilter.running_new_first); + + processesQuery = await this.alfrescoJsApi.activiti.processApi.getProcessInstances({ + 'processDefinitionId': null, 'appDefinitionId': null, 'state': 'running', 'sort': 'created-desc' }); + await expect(processesQuery.data[0].name).toEqual('Process 3'); + await expect(processesQuery.data[1].name).toEqual('Process 2'); + await expect(processesQuery.data[2].name).toEqual('Process 1'); }); it('[C260480] Should be able to create a filter on APS for completed processes - Newest first and check on ADF', async () => { - await browser.controlFlow().execute(async () => { - await this.alfrescoJsApi.activiti.userFiltersApi.createUserProcessInstanceFilter({ - 'appId': null, 'name': processFilter.completed_new_first, 'icon': 'glyphicon-random', - 'filter': { 'sort': 'created-desc', 'name': '', 'state': 'completed' } - }); - - const firstProc = await apps.startProcess(this.alfrescoJsApi, 'Task App', 'Process 1'); - const secondProc = await apps.startProcess(this.alfrescoJsApi, 'Task App', 'Process 2'); - const thirdProc = await apps.startProcess(this.alfrescoJsApi, 'Task App', 'Process 3'); - - await this.alfrescoJsApi.activiti.processInstancesApi.deleteProcessInstance(firstProc.id); - await this.alfrescoJsApi.activiti.processInstancesApi.deleteProcessInstance(secondProc.id); - await this.alfrescoJsApi.activiti.processInstancesApi.deleteProcessInstance(thirdProc.id); + await this.alfrescoJsApi.activiti.userFiltersApi.createUserProcessInstanceFilter({ + 'appId': null, 'name': processFilter.completed_new_first, 'icon': 'glyphicon-random', + 'filter': { 'sort': 'created-desc', 'name': '', 'state': 'completed' } }); - navigationBarPage - .navigateToProcessServicesPage() - .goToTaskApp() - .clickProcessButton(); + const firstProc = await apps.startProcess(this.alfrescoJsApi, 'Task App', 'Process 1'); + const secondProc = await apps.startProcess(this.alfrescoJsApi, 'Task App', 'Process 2'); + const thirdProc = await apps.startProcess(this.alfrescoJsApi, 'Task App', 'Process 3'); - processFiltersPage.checkFilterIsDisplayed(processFilter.completed_new_first); + await this.alfrescoJsApi.activiti.processInstancesApi.deleteProcessInstance(firstProc.id); + await this.alfrescoJsApi.activiti.processInstancesApi.deleteProcessInstance(secondProc.id); + await this.alfrescoJsApi.activiti.processInstancesApi.deleteProcessInstance(thirdProc.id); - filtersPage.goToFilter(processFilter.completed_new_first); + await (await (await navigationBarPage.navigateToProcessServicesPage()).goToTaskApp()).clickProcessButton(); - await browser.controlFlow().execute(async () => { - processesQuery = await this.alfrescoJsApi.activiti.processApi.getProcessInstances({ - 'processDefinitionId': null, 'appDefinitionId': null, 'state': 'completed', 'sort': 'created-desc' - }); - expect(processesQuery.data[0].name).toEqual('Process 3'); - expect(processesQuery.data[1].name).toEqual('Process 2'); - expect(processesQuery.data[2].name).toEqual('Process 1'); + await processFiltersPage.checkFilterIsDisplayed(processFilter.completed_new_first); + + await filtersPage.goToFilter(processFilter.completed_new_first); + processesQuery = await this.alfrescoJsApi.activiti.processApi.getProcessInstances({ + 'processDefinitionId': null, 'appDefinitionId': null, 'state': 'completed', 'sort': 'created-desc' }); + await expect(processesQuery.data[0].name).toEqual('Process 3'); + await expect(processesQuery.data[1].name).toEqual('Process 2'); + await expect(processesQuery.data[2].name).toEqual('Process 1'); }); it('[C260481] Should be able to create a filter on APS for all processes - Newest first and check on ADF', async () => { - await browser.controlFlow().execute(async () => { - await this.alfrescoJsApi.activiti.userFiltersApi.createUserProcessInstanceFilter({ - 'appId': null, 'name': processFilter.all_new_first, 'icon': 'glyphicon-random', - 'filter': { 'sort': 'created-desc', 'name': '', 'state': 'all' } - }); - - await apps.startProcess(this.alfrescoJsApi, 'Task App', 'Process 1'); - await apps.startProcess(this.alfrescoJsApi, 'Task App', 'Process 2'); - await apps.startProcess(this.alfrescoJsApi, 'Task App', 'Process 3'); - - const firstProc = await apps.startProcess(this.alfrescoJsApi, 'Task App', 'Process 4'); - const secondProc = await apps.startProcess(this.alfrescoJsApi, 'Task App', 'Process 5'); - const thirdProc = await apps.startProcess(this.alfrescoJsApi, 'Task App', 'Process 6'); - - await this.alfrescoJsApi.activiti.processInstancesApi.deleteProcessInstance(firstProc.id); - await this.alfrescoJsApi.activiti.processInstancesApi.deleteProcessInstance(secondProc.id); - await this.alfrescoJsApi.activiti.processInstancesApi.deleteProcessInstance(thirdProc.id); + await this.alfrescoJsApi.activiti.userFiltersApi.createUserProcessInstanceFilter({ + 'appId': null, 'name': processFilter.all_new_first, 'icon': 'glyphicon-random', + 'filter': { 'sort': 'created-desc', 'name': '', 'state': 'all' } }); - navigationBarPage - .navigateToProcessServicesPage() - .goToTaskApp() - .clickProcessButton(); + await apps.startProcess(this.alfrescoJsApi, 'Task App', 'Process 1'); + await apps.startProcess(this.alfrescoJsApi, 'Task App', 'Process 2'); + await apps.startProcess(this.alfrescoJsApi, 'Task App', 'Process 3'); - processFiltersPage.checkFilterIsDisplayed(processFilter.all_new_first); + const firstProc = await apps.startProcess(this.alfrescoJsApi, 'Task App', 'Process 4'); + const secondProc = await apps.startProcess(this.alfrescoJsApi, 'Task App', 'Process 5'); + const thirdProc = await apps.startProcess(this.alfrescoJsApi, 'Task App', 'Process 6'); - filtersPage.goToFilter(processFilter.all_new_first); + await this.alfrescoJsApi.activiti.processInstancesApi.deleteProcessInstance(firstProc.id); + await this.alfrescoJsApi.activiti.processInstancesApi.deleteProcessInstance(secondProc.id); + await this.alfrescoJsApi.activiti.processInstancesApi.deleteProcessInstance(thirdProc.id); - await browser.controlFlow().execute(async () => { - processesQuery = await this.alfrescoJsApi.activiti.processApi.getProcessInstances({ - 'processDefinitionId': null, 'appDefinitionId': null, 'state': 'all', 'sort': 'created-desc' - }); - expect(processesQuery.data[0].name).toEqual('Process 6'); - expect(processesQuery.data[1].name).toEqual('Process 5'); - expect(processesQuery.data[2].name).toEqual('Process 4'); - expect(processesQuery.data[3].name).toEqual('Process 3'); - expect(processesQuery.data[4].name).toEqual('Process 2'); - expect(processesQuery.data[5].name).toEqual('Process 1'); + await (await (await navigationBarPage.navigateToProcessServicesPage()).goToTaskApp()).clickProcessButton(); + + await processFiltersPage.checkFilterIsDisplayed(processFilter.all_new_first); + + await filtersPage.goToFilter(processFilter.all_new_first); + + processesQuery = await this.alfrescoJsApi.activiti.processApi.getProcessInstances({ + 'processDefinitionId': null, 'appDefinitionId': null, 'state': 'all', 'sort': 'created-desc' }); + await expect(processesQuery.data[0].name).toEqual('Process 6'); + await expect(processesQuery.data[1].name).toEqual('Process 5'); + await expect(processesQuery.data[2].name).toEqual('Process 4'); + await expect(processesQuery.data[3].name).toEqual('Process 3'); + await expect(processesQuery.data[4].name).toEqual('Process 2'); + await expect(processesQuery.data[5].name).toEqual('Process 1'); }); it('[C272815] Should be able to create a filter on APS for completed processes - Completed most recently and check on ADF', async () => { - await browser.controlFlow().execute(async () => { - await this.alfrescoJsApi.activiti.userFiltersApi.createUserProcessInstanceFilter({ - 'appId': null, 'name': processFilter.completed_most_recently, 'icon': 'glyphicon-random', - 'filter': { 'sort': 'ended-asc', 'name': '', 'state': 'completed' } - }); - - const firstProc = await apps.startProcess(this.alfrescoJsApi, 'Task App', 'Process 1'); - const secondProc = await apps.startProcess(this.alfrescoJsApi, 'Task App', 'Process 2'); - const thirdProc = await apps.startProcess(this.alfrescoJsApi, 'Task App', 'Process 3'); - - await this.alfrescoJsApi.activiti.processInstancesApi.deleteProcessInstance(secondProc.id); - await this.alfrescoJsApi.activiti.processInstancesApi.deleteProcessInstance(firstProc.id); - await this.alfrescoJsApi.activiti.processInstancesApi.deleteProcessInstance(thirdProc.id); + await this.alfrescoJsApi.activiti.userFiltersApi.createUserProcessInstanceFilter({ + 'appId': null, 'name': processFilter.completed_most_recently, 'icon': 'glyphicon-random', + 'filter': { 'sort': 'ended-asc', 'name': '', 'state': 'completed' } }); - navigationBarPage - .navigateToProcessServicesPage() - .goToTaskApp() - .clickProcessButton(); + const firstProc = await apps.startProcess(this.alfrescoJsApi, 'Task App', 'Process 1'); + const secondProc = await apps.startProcess(this.alfrescoJsApi, 'Task App', 'Process 2'); + const thirdProc = await apps.startProcess(this.alfrescoJsApi, 'Task App', 'Process 3'); - processFiltersPage.checkFilterIsDisplayed(processFilter.completed_most_recently); + await this.alfrescoJsApi.activiti.processInstancesApi.deleteProcessInstance(secondProc.id); + await this.alfrescoJsApi.activiti.processInstancesApi.deleteProcessInstance(firstProc.id); + await this.alfrescoJsApi.activiti.processInstancesApi.deleteProcessInstance(thirdProc.id); - filtersPage.goToFilter(processFilter.completed_most_recently); + await (await (await navigationBarPage.navigateToProcessServicesPage()).goToTaskApp()).clickProcessButton(); - await browser.controlFlow().execute(async () => { - processesQuery = await this.alfrescoJsApi.activiti.processApi.getProcessInstances({ - 'processDefinitionId': null, 'appDefinitionId': null, 'state': 'completed', 'sort': 'ended-asc' - }); - expect(processesQuery.data[0].name).toEqual('Process 2'); - expect(processesQuery.data[1].name).toEqual('Process 1'); - expect(processesQuery.data[2].name).toEqual('Process 3'); + await processFiltersPage.checkFilterIsDisplayed(processFilter.completed_most_recently); + + await filtersPage.goToFilter(processFilter.completed_most_recently); + + processesQuery = await this.alfrescoJsApi.activiti.processApi.getProcessInstances({ + 'processDefinitionId': null, 'appDefinitionId': null, 'state': 'completed', 'sort': 'ended-asc' }); + await expect(processesQuery.data[0].name).toEqual('Process 2'); + await expect(processesQuery.data[1].name).toEqual('Process 1'); + await expect(processesQuery.data[2].name).toEqual('Process 3'); }); it('[C272816] Should be able to create a filter on APS for completed processes - Completed least recently and check on ADF', async () => { - await browser.controlFlow().execute(async () => { - await this.alfrescoJsApi.activiti.userFiltersApi.createUserProcessInstanceFilter({ - 'appId': null, 'name': processFilter.completed_least_recently, 'icon': 'glyphicon-random', - 'filter': { 'sort': 'ended-desc', 'name': '', 'state': 'completed' } - }); - - const firstProc = await apps.startProcess(this.alfrescoJsApi, 'Task App', 'Process 1'); - const secondProc = await apps.startProcess(this.alfrescoJsApi, 'Task App', 'Process 2'); - const thirdProc = await apps.startProcess(this.alfrescoJsApi, 'Task App', 'Process 3'); - - await this.alfrescoJsApi.activiti.processInstancesApi.deleteProcessInstance(secondProc.id); - await this.alfrescoJsApi.activiti.processInstancesApi.deleteProcessInstance(firstProc.id); - await this.alfrescoJsApi.activiti.processInstancesApi.deleteProcessInstance(thirdProc.id); + await this.alfrescoJsApi.activiti.userFiltersApi.createUserProcessInstanceFilter({ + 'appId': null, 'name': processFilter.completed_least_recently, 'icon': 'glyphicon-random', + 'filter': { 'sort': 'ended-desc', 'name': '', 'state': 'completed' } }); - navigationBarPage - .navigateToProcessServicesPage() - .goToTaskApp() - .clickProcessButton(); + const firstProc = await apps.startProcess(this.alfrescoJsApi, 'Task App', 'Process 1'); + const secondProc = await apps.startProcess(this.alfrescoJsApi, 'Task App', 'Process 2'); + const thirdProc = await apps.startProcess(this.alfrescoJsApi, 'Task App', 'Process 3'); - processFiltersPage.checkFilterIsDisplayed(processFilter.completed_least_recently); + await this.alfrescoJsApi.activiti.processInstancesApi.deleteProcessInstance(secondProc.id); + await this.alfrescoJsApi.activiti.processInstancesApi.deleteProcessInstance(firstProc.id); + await this.alfrescoJsApi.activiti.processInstancesApi.deleteProcessInstance(thirdProc.id); - filtersPage.goToFilter(processFilter.completed_least_recently); + await (await (await navigationBarPage.navigateToProcessServicesPage()).goToTaskApp()).clickProcessButton(); - await browser.controlFlow().execute(async () => { - processesQuery = await this.alfrescoJsApi.activiti.processApi.getProcessInstances({ - 'processDefinitionId': null, 'appDefinitionId': null, 'state': 'completed', 'sort': 'ended-desc' - }); - expect(processesQuery.data[0].name).toEqual('Process 3'); - expect(processesQuery.data[1].name).toEqual('Process 1'); - expect(processesQuery.data[2].name).toEqual('Process 2'); + await processFiltersPage.checkFilterIsDisplayed(processFilter.completed_least_recently); + + await filtersPage.goToFilter(processFilter.completed_least_recently); + + processesQuery = await this.alfrescoJsApi.activiti.processApi.getProcessInstances({ + 'processDefinitionId': null, 'appDefinitionId': null, 'state': 'completed', 'sort': 'ended-desc' }); + await expect(processesQuery.data[0].name).toEqual('Process 3'); + await expect(processesQuery.data[1].name).toEqual('Process 1'); + await expect(processesQuery.data[2].name).toEqual('Process 2'); }); }); diff --git a/e2e/process-services/custom-process-filters.e2e.ts b/e2e/process-services/custom-process-filters.e2e.ts index 2cbb0a5d15..72ceeec023 100644 --- a/e2e/process-services/custom-process-filters.e2e.ts +++ b/e2e/process-services/custom-process-filters.e2e.ts @@ -47,7 +47,7 @@ describe('New Process Filters', () => { deleted: 'To delete' }; - beforeAll(async (done) => { + beforeAll(async () => { const users = new UsersActions(); this.alfrescoJsApi = new AlfrescoApi({ @@ -65,161 +65,132 @@ describe('New Process Filters', () => { await loginPage.loginToProcessServicesUsingUserModel(user); - done(); }); - afterAll(async (done) => { + afterAll(async () => { await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); await this.alfrescoJsApi.activiti.adminTenantsApi.deleteTenant(tenantId); - done(); + }); it('[C279965] Should be able to view default filters on ADF', async () => { - navigationBarPage.navigateToProcessServicesPage() - .goToTaskApp() - .clickProcessButton(); + await (await (await navigationBarPage.navigateToProcessServicesPage()).goToTaskApp()).clickProcessButton(); - processFiltersPage.checkFilterIsDisplayed(processFilter.running); - processFiltersPage.checkFilterIsDisplayed(processFilter.all); - processFiltersPage.checkFilterIsDisplayed(processFilter.completed); + await processFiltersPage.checkFilterIsDisplayed(processFilter.running); + await processFiltersPage.checkFilterIsDisplayed(processFilter.all); + await processFiltersPage.checkFilterIsDisplayed(processFilter.completed); }); it('[C260473] Should be able to create a new filter on APS and display it on ADF', async () => { - browser.controlFlow().execute(async () => { - customProcessFilter = await this.alfrescoJsApi.activiti.userFiltersApi.createUserProcessInstanceFilter({ - 'appId': null, - 'name': processFilter.new_filter, - 'icon': 'glyphicon-random', - 'filter': { 'sort': 'created-desc', 'name': '', 'state': 'running' } - }); - - filterId = customProcessFilter.id; - - return customProcessFilter; + customProcessFilter = await this.alfrescoJsApi.activiti.userFiltersApi.createUserProcessInstanceFilter({ + 'appId': null, + 'name': processFilter.new_filter, + 'icon': 'glyphicon-random', + 'filter': { 'sort': 'created-desc', 'name': '', 'state': 'running' } }); - navigationBarPage.navigateToProcessServicesPage() - .goToTaskApp() - .clickProcessButton(); + filterId = customProcessFilter.id; - processFiltersPage.checkFilterIsDisplayed(processFilter.new_filter); + await (await (await navigationBarPage.navigateToProcessServicesPage()).goToTaskApp()).clickProcessButton(); + + await processFiltersPage.checkFilterIsDisplayed(processFilter.new_filter); }); it('[C286450] Should display the process filter icon when a custom filter is added', async () => { - browser.controlFlow().execute(async () => { - customProcessFilter = await this.alfrescoJsApi.activiti.userFiltersApi.createUserProcessInstanceFilter({ - 'appId': null, - 'name': processFilter.new_icon, - 'icon': 'glyphicon-cloud', - 'filter': { 'sort': 'created-desc', 'name': '', 'state': 'running' } - }); - - filterId = customProcessFilter.id; - - return customProcessFilter; + customProcessFilter = await this.alfrescoJsApi.activiti.userFiltersApi.createUserProcessInstanceFilter({ + 'appId': null, + 'name': processFilter.new_icon, + 'icon': 'glyphicon-cloud', + 'filter': { 'sort': 'created-desc', 'name': '', 'state': 'running' } }); - navigationBarPage.navigateToProcessServicesPage().goToTaskApp().clickProcessButton(); + filterId = customProcessFilter.id; - processFiltersPage.checkFilterIsDisplayed(processFilter.new_icon); + await (await (await navigationBarPage.navigateToProcessServicesPage()).goToTaskApp()).clickProcessButton(); - processServiceTabBarPage.clickSettingsButton(); - appSettingsToggles.enableProcessFiltersIcon(); - processServiceTabBarPage.clickProcessButton(); + await processFiltersPage.checkFilterIsDisplayed(processFilter.new_icon); - processFiltersPage.checkFilterIsDisplayed(processFilter.new_icon); - expect(processFiltersPage.getFilterIcon(processFilter.new_icon)).toEqual('cloud'); + await processServiceTabBarPage.clickSettingsButton(); + await appSettingsToggles.enableProcessFiltersIcon(); + await processServiceTabBarPage.clickProcessButton(); + + await processFiltersPage.checkFilterIsDisplayed(processFilter.new_icon); + await expect(await processFiltersPage.getFilterIcon(processFilter.new_icon)).toEqual('cloud'); }); it('[C260474] Should be able to edit a filter on APS and check it on ADF', async () => { - browser.controlFlow().execute(() => { - return this.alfrescoJsApi.activiti.userFiltersApi.updateUserProcessInstanceFilter(filterId, { - 'appId': null, - 'name': processFilter.edited, - 'icon': 'glyphicon-random', - 'filter': { 'sort': 'created-desc', 'name': '', 'state': 'running' } - }); + this.alfrescoJsApi.activiti.userFiltersApi.updateUserProcessInstanceFilter(filterId, { + 'appId': null, + 'name': processFilter.edited, + 'icon': 'glyphicon-random', + 'filter': { 'sort': 'created-desc', 'name': '', 'state': 'running' } }); - navigationBarPage.navigateToProcessServicesPage() - .goToTaskApp() - .clickProcessButton(); + await (await (await navigationBarPage.navigateToProcessServicesPage()).goToTaskApp()).clickProcessButton(); - processFiltersPage.checkFilterIsDisplayed(processFilter.edited); + await processFiltersPage.checkFilterIsDisplayed(processFilter.edited); }); it('[C286451] Should display changes on a process filter when this filter icon is edited', async () => { - browser.controlFlow().execute(async () => { - customProcessFilter = await this.alfrescoJsApi.activiti.userFiltersApi.createUserProcessInstanceFilter({ - 'appId': null, - 'name': processFilter.edit_icon, - 'icon': 'glyphicon-random', - 'filter': { 'sort': 'created-desc', 'name': '', 'state': 'running' } - }); - - filterId = customProcessFilter.id; - - return customProcessFilter; + customProcessFilter = await this.alfrescoJsApi.activiti.userFiltersApi.createUserProcessInstanceFilter({ + 'appId': null, + 'name': processFilter.edit_icon, + 'icon': 'glyphicon-random', + 'filter': { 'sort': 'created-desc', 'name': '', 'state': 'running' } }); - navigationBarPage.navigateToProcessServicesPage().goToTaskApp().clickProcessButton(); + filterId = customProcessFilter.id; - processFiltersPage.checkFilterIsDisplayed(processFilter.edit_icon); + await (await (await navigationBarPage.navigateToProcessServicesPage()).goToTaskApp()).clickProcessButton(); - browser.controlFlow().execute(() => { - return this.alfrescoJsApi.activiti.userFiltersApi.updateUserProcessInstanceFilter(filterId, { - 'appId': null, - 'name': processFilter.edit_icon, - 'icon': 'glyphicon-cloud', - 'filter': { 'sort': 'created-desc', 'name': '', 'state': 'running' } - }); + await processFiltersPage.checkFilterIsDisplayed(processFilter.edit_icon); + + await this.alfrescoJsApi.activiti.userFiltersApi.updateUserProcessInstanceFilter(filterId, { + 'appId': null, + 'name': processFilter.edit_icon, + 'icon': 'glyphicon-cloud', + 'filter': { 'sort': 'created-desc', 'name': '', 'state': 'running' } }); - navigationBarPage.navigateToProcessServicesPage().goToTaskApp().clickProcessButton(); + await (await (await navigationBarPage.navigateToProcessServicesPage()).goToTaskApp()).clickProcessButton(); - processFiltersPage.checkFilterIsDisplayed(processFilter.edit_icon); + await processFiltersPage.checkFilterIsDisplayed(processFilter.edit_icon); - processServiceTabBarPage.clickSettingsButton(); - appSettingsToggles.enableProcessFiltersIcon(); - processServiceTabBarPage.clickProcessButton(); + await processServiceTabBarPage.clickSettingsButton(); + await appSettingsToggles.enableProcessFiltersIcon(); + await processServiceTabBarPage.clickProcessButton(); - processFiltersPage.checkFilterIsDisplayed(processFilter.edit_icon); - expect(processFiltersPage.getFilterIcon(processFilter.edit_icon)).toEqual('cloud'); + await processFiltersPage.checkFilterIsDisplayed(processFilter.edit_icon); + await expect(await processFiltersPage.getFilterIcon(processFilter.edit_icon)).toEqual('cloud'); }); it('[C286452] Should display process filter icons only when showIcon property is set on true', async () => { - navigationBarPage.navigateToProcessServicesPage().goToTaskApp().clickProcessButton(); - processFiltersPage.checkFilterHasNoIcon(processFilter.all); + await (await (await navigationBarPage.navigateToProcessServicesPage()).goToTaskApp()).clickProcessButton(); + await processFiltersPage.checkFilterHasNoIcon(processFilter.all); - processServiceTabBarPage.clickSettingsButton(); - appSettingsToggles.enableProcessFiltersIcon(); - processServiceTabBarPage.clickProcessButton(); + await processServiceTabBarPage.clickSettingsButton(); + await appSettingsToggles.enableProcessFiltersIcon(); + await processServiceTabBarPage.clickProcessButton(); - processFiltersPage.checkFilterIsDisplayed(processFilter.all); - expect(processFiltersPage.getFilterIcon(processFilter.all)).toEqual('dashboard'); + await processFiltersPage.checkFilterIsDisplayed(processFilter.all); + await expect(await processFiltersPage.getFilterIcon(processFilter.all)).toEqual('dashboard'); }); it('[C260475] Should be able to delete a filter on APS and check it on ADF', async () => { - browser.controlFlow().execute(async () => { - customProcessFilter = await this.alfrescoJsApi.activiti.userFiltersApi.createUserProcessInstanceFilter({ - 'appId': null, - 'name': processFilter.deleted, - 'icon': 'glyphicon-random', - 'filter': { 'sort': 'created-desc', 'name': '', 'state': 'running' } - }); - - filterId = customProcessFilter.id; - - return customProcessFilter; + customProcessFilter = await this.alfrescoJsApi.activiti.userFiltersApi.createUserProcessInstanceFilter({ + 'appId': null, + 'name': processFilter.deleted, + 'icon': 'glyphicon-random', + 'filter': { 'sort': 'created-desc', 'name': '', 'state': 'running' } }); - browser.controlFlow().execute(() => { - return this.alfrescoJsApi.activiti.userFiltersApi.deleteUserProcessInstanceFilter(filterId); - }); + filterId = customProcessFilter.id; - navigationBarPage.navigateToProcessServicesPage().goToTaskApp().clickProcessButton(); + await this.alfrescoJsApi.activiti.userFiltersApi.deleteUserProcessInstanceFilter(filterId); - processFiltersPage.checkFilterIsNotDisplayed(processFilter.deleted); + await (await (await navigationBarPage.navigateToProcessServicesPage()).goToTaskApp()).clickProcessButton(); + + await processFiltersPage.checkFilterIsNotDisplayed(processFilter.deleted); }); }); diff --git a/e2e/process-services/custom-tasks-filters.e2e.ts b/e2e/process-services/custom-tasks-filters.e2e.ts index 3b8391b93d..38b5365679 100644 --- a/e2e/process-services/custom-tasks-filters.e2e.ts +++ b/e2e/process-services/custom-tasks-filters.e2e.ts @@ -72,7 +72,7 @@ describe('Start Task - Custom App', () => { default: '25' }; - beforeAll(async (done) => { + beforeAll(async () => { const apps = new AppsActions(); const appsRuntime = new AppsRuntimeActions(); const users = new UsersActions(); @@ -122,375 +122,380 @@ describe('Start Task - Custom App', () => { await loginPage.loginToProcessServicesUsingUserModel(processUserModel); - done(); }); describe('', () => { beforeEach(async () => { - navigationBarPage.clickTaskListButton(); - taskListSinglePage.clickResetButton(); + await navigationBarPage.clickTaskListButton(); + await taskListSinglePage.clickResetButton(); }); - it('[C286362] Default pagination settings on task list', () => { - expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.twenty); - expect(paginationPage.getPaginationRange()).toEqual('Showing 1-' + nrOfTasks + ' of ' + nrOfTasks); - expect(taskListSinglePage.taskList().getDataTable().numberOfRows()).toBe(nrOfTasks); - taskListSinglePage.taskList().getAllRowsNameColumn().then(function (list) { - expect(Util.arrayContainsArray(list, allTasksName)).toEqual(true); + it('[C286362] Default pagination settings on task list', async () => { + await expect(await paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.twenty); + await expect(await paginationPage.getPaginationRange()).toEqual('Showing 1-' + nrOfTasks + ' of ' + nrOfTasks); + await expect(await taskListSinglePage.taskList().getDataTable().numberOfRows()).toBe(nrOfTasks); + + await taskListSinglePage.taskList().getAllRowsNameColumn().then(async (list) => { + await expect(Util.arrayContainsArray(list, allTasksName)).toEqual(true); }); - expect(paginationPage.getCurrentPage()).toEqual('Page 1'); - expect(paginationPage.getTotalPages()).toEqual('of 1'); - paginationPage.checkPageSelectorIsNotDisplayed(); - paginationPage.checkNextPageButtonIsDisabled(); - paginationPage.checkPreviousPageButtonIsDisabled(); + + await expect(await paginationPage.getCurrentPage()).toEqual('Page 1'); + await expect(await paginationPage.getTotalPages()).toEqual('of 1'); + await paginationPage.checkPageSelectorIsNotDisplayed(); + await paginationPage.checkNextPageButtonIsDisabled(); + await paginationPage.checkPreviousPageButtonIsDisabled(); }); - it('[C286367] 20 Items per page', function () { - taskListSinglePage.typeItemsPerPage(itemsPerPage.twentyValue); - taskListSinglePage.taskList().getDataTable().waitForTableBody(); - expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.twenty); - expect(paginationPage.getPaginationRange()).toEqual('Showing 1-' + nrOfTasks + ' of ' + nrOfTasks); - expect(taskListSinglePage.taskList().getDataTable().numberOfRows()).toBe(nrOfTasks); - taskListSinglePage.taskList().getAllRowsNameColumn().then(function (list) { - expect(Util.arrayContainsArray(list, allTasksName)).toEqual(true); + it('[C286367] 20 Items per page', async () => { + await taskListSinglePage.typeItemsPerPage(itemsPerPage.twentyValue); + await taskListSinglePage.taskList().getDataTable().waitForTableBody(); + await expect(await paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.twenty); + await expect(await paginationPage.getPaginationRange()).toEqual('Showing 1-' + nrOfTasks + ' of ' + nrOfTasks); + await expect(await taskListSinglePage.taskList().getDataTable().numberOfRows()).toBe(nrOfTasks); + + await taskListSinglePage.taskList().getAllRowsNameColumn().then(async (list) => { + await expect(Util.arrayContainsArray(list, allTasksName)).toEqual(true); }); - paginationPage.checkNextPageButtonIsDisabled(); - paginationPage.checkPreviousPageButtonIsDisabled(); + await paginationPage.checkNextPageButtonIsDisabled(); + await paginationPage.checkPreviousPageButtonIsDisabled(); }); - it('[C286365] 5 Items per page', function () { - taskListSinglePage.typeItemsPerPage(itemsPerPage.fiveValue); - taskListSinglePage.taskList().getDataTable().waitForTableBody(); - expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.five); - expect(paginationPage.getPaginationRange()).toEqual('Showing 1-' + itemsPerPage.fiveValue * currentPage + ' of ' + nrOfTasks); - expect(taskListSinglePage.taskList().getDataTable().numberOfRows()).toBe(itemsPerPage.fiveValue); - taskListSinglePage.taskList().getAllRowsNameColumn().then(function (list) { - expect(Util.arrayContainsArray(list, allTasksName.slice(0, 5))).toEqual(true); + it('[C286365] 5 Items per page', async () => { + await taskListSinglePage.typeItemsPerPage(itemsPerPage.fiveValue); + await taskListSinglePage.taskList().getDataTable().waitForTableBody(); + await expect(await paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.five); + await expect(await paginationPage.getPaginationRange()).toEqual('Showing 1-' + itemsPerPage.fiveValue * currentPage + ' of ' + nrOfTasks); + await expect(await taskListSinglePage.taskList().getDataTable().numberOfRows()).toBe(itemsPerPage.fiveValue); + + await taskListSinglePage.taskList().getAllRowsNameColumn().then(async (list) => { + await expect(Util.arrayContainsArray(list, allTasksName.slice(0, 5))).toEqual(true); }); - paginationPage.clickOnNextPage(); + await paginationPage.clickOnNextPage(); currentPage++; - taskListSinglePage.taskList().getDataTable().waitForTableBody(); - expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.five); - expect(paginationPage.getPaginationRange()).toEqual('Showing 6-' + itemsPerPage.fiveValue * currentPage + ' of ' + nrOfTasks); - expect(taskListSinglePage.taskList().getDataTable().numberOfRows()).toBe(itemsPerPage.fiveValue); - taskListSinglePage.taskList().getAllRowsNameColumn().then(function (list) { - expect(Util.arrayContainsArray(list, allTasksName.slice(5, 10))).toEqual(true); + await taskListSinglePage.taskList().getDataTable().waitForTableBody(); + await expect(await paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.five); + await expect(await paginationPage.getPaginationRange()).toEqual('Showing 6-' + itemsPerPage.fiveValue * currentPage + ' of ' + nrOfTasks); + await expect(await taskListSinglePage.taskList().getDataTable().numberOfRows()).toBe(itemsPerPage.fiveValue); + + await taskListSinglePage.taskList().getAllRowsNameColumn().then(async (list) => { + await expect(Util.arrayContainsArray(list, allTasksName.slice(5, 10))).toEqual(true); }); - paginationPage.clickOnNextPage(); + await paginationPage.clickOnNextPage(); currentPage++; - taskListSinglePage.taskList().getDataTable().waitForTableBody(); - expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.five); - expect(paginationPage.getPaginationRange()).toEqual('Showing 11-' + itemsPerPage.fiveValue * currentPage + ' of ' + nrOfTasks); - expect(taskListSinglePage.taskList().getDataTable().numberOfRows()).toBe(itemsPerPage.fiveValue); - taskListSinglePage.taskList().getAllRowsNameColumn().then(function (list) { - expect(Util.arrayContainsArray(list, allTasksName.slice(10, 15))).toEqual(true); + await taskListSinglePage.taskList().getDataTable().waitForTableBody(); + await expect(await paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.five); + await expect(await paginationPage.getPaginationRange()).toEqual('Showing 11-' + itemsPerPage.fiveValue * currentPage + ' of ' + nrOfTasks); + await expect(await taskListSinglePage.taskList().getDataTable().numberOfRows()).toBe(itemsPerPage.fiveValue); + + await taskListSinglePage.taskList().getAllRowsNameColumn().then(async (list) => { + await expect(Util.arrayContainsArray(list, allTasksName.slice(10, 15))).toEqual(true); }); - paginationPage.clickOnNextPage(); + await paginationPage.clickOnNextPage(); currentPage++; - taskListSinglePage.taskList().getDataTable().waitForTableBody(); - expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.five); - expect(paginationPage.getPaginationRange()).toEqual('Showing 16-' + itemsPerPage.fiveValue * currentPage + ' of ' + nrOfTasks); - expect(taskListSinglePage.taskList().getDataTable().numberOfRows()).toBe(itemsPerPage.fiveValue); - taskListSinglePage.taskList().getAllRowsNameColumn().then(function (list) { - expect(Util.arrayContainsArray(list, allTasksName.slice(15, 20))).toEqual(true); + await taskListSinglePage.taskList().getDataTable().waitForTableBody(); + await expect(await paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.five); + await expect(await paginationPage.getPaginationRange()).toEqual('Showing 16-' + itemsPerPage.fiveValue * currentPage + ' of ' + nrOfTasks); + await expect(await taskListSinglePage.taskList().getDataTable().numberOfRows()).toBe(itemsPerPage.fiveValue); + await taskListSinglePage.taskList().getAllRowsNameColumn().then(async (list) => { + await expect(Util.arrayContainsArray(list, allTasksName.slice(15, 20))).toEqual(true); }); }); - it('[C286364] 10 Items per page', function () { + it('[C286364] 10 Items per page', async () => { currentPage = 1; - taskListSinglePage.typeItemsPerPage(itemsPerPage.tenValue); - taskListSinglePage.taskList().getDataTable().waitForTableBody(); - expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.ten); - expect(paginationPage.getPaginationRange()).toEqual('Showing 1-' + itemsPerPage.tenValue * currentPage + ' of ' + nrOfTasks); - expect(taskListSinglePage.taskList().getDataTable().numberOfRows()).toBe(itemsPerPage.tenValue); - taskListSinglePage.taskList().getAllRowsNameColumn().then(function (list) { - expect(Util.arrayContainsArray(list, allTasksName.slice(0, 10))).toEqual(true); + await taskListSinglePage.typeItemsPerPage(itemsPerPage.tenValue); + await taskListSinglePage.taskList().getDataTable().waitForTableBody(); + await expect(await paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.ten); + await expect(await paginationPage.getPaginationRange()).toEqual('Showing 1-' + itemsPerPage.tenValue * currentPage + ' of ' + nrOfTasks); + await expect(await taskListSinglePage.taskList().getDataTable().numberOfRows()).toBe(itemsPerPage.tenValue); + await taskListSinglePage.taskList().getAllRowsNameColumn().then(async (list) => { + await expect(Util.arrayContainsArray(list, allTasksName.slice(0, 10))).toEqual(true); }); - paginationPage.clickOnNextPage(); + await paginationPage.clickOnNextPage(); currentPage++; - taskListSinglePage.taskList().getDataTable().waitForTableBody(); - expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.ten); - expect(paginationPage.getPaginationRange()).toEqual('Showing 11-' + itemsPerPage.tenValue * currentPage + ' of ' + nrOfTasks); - expect(taskListSinglePage.taskList().getDataTable().numberOfRows()).toBe(itemsPerPage.tenValue); - taskListSinglePage.taskList().getAllRowsNameColumn().then(function (list) { - expect(Util.arrayContainsArray(list, allTasksName.slice(10, 20))).toEqual(true); + await taskListSinglePage.taskList().getDataTable().waitForTableBody(); + await expect(await paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.ten); + await expect(await paginationPage.getPaginationRange()).toEqual('Showing 11-' + itemsPerPage.tenValue * currentPage + ' of ' + nrOfTasks); + await expect(await taskListSinglePage.taskList().getDataTable().numberOfRows()).toBe(itemsPerPage.tenValue); + await taskListSinglePage.taskList().getAllRowsNameColumn().then(async (list) => { + await expect(Util.arrayContainsArray(list, allTasksName.slice(10, 20))).toEqual(true); }); }); - it('[C286363] 15 Items per page', function () { + it('[C286363] 15 Items per page', async () => { currentPage = 1; - taskListSinglePage.typeItemsPerPage(itemsPerPage.fifteenValue); - taskListSinglePage.taskList().getDataTable().waitForTableBody(); - expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.fifteen); - expect(paginationPage.getPaginationRange()).toEqual('Showing 1-' + itemsPerPage.fifteenValue * currentPage + ' of ' + nrOfTasks); - expect(taskListSinglePage.taskList().getDataTable().numberOfRows()).toBe(itemsPerPage.fifteenValue); - taskListSinglePage.taskList().getAllRowsNameColumn().then(function (list) { - expect(Util.arrayContainsArray(list, allTasksName.slice(0, 15))).toEqual(true); + await taskListSinglePage.typeItemsPerPage(itemsPerPage.fifteenValue); + await taskListSinglePage.taskList().getDataTable().waitForTableBody(); + await expect(await paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.fifteen); + await expect(await paginationPage.getPaginationRange()).toEqual('Showing 1-' + itemsPerPage.fifteenValue * currentPage + ' of ' + nrOfTasks); + await expect(await taskListSinglePage.taskList().getDataTable().numberOfRows()).toBe(itemsPerPage.fifteenValue); + await taskListSinglePage.taskList().getAllRowsNameColumn().then(async (list) => { + await expect(Util.arrayContainsArray(list, allTasksName.slice(0, 15))).toEqual(true); }); currentPage++; - paginationPage.clickOnNextPage(); - taskListSinglePage.taskList().getDataTable().waitForTableBody(); - expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.fifteen); - expect(paginationPage.getPaginationRange()).toEqual('Showing 16-' + nrOfTasks + ' of ' + nrOfTasks); - expect(taskListSinglePage.taskList().getDataTable().numberOfRows()).toBe(nrOfTasks - itemsPerPage.fifteenValue); - taskListSinglePage.taskList().getAllRowsNameColumn().then(function (list) { - expect(Util.arrayContainsArray(list, allTasksName.slice(15, 20))).toEqual(true); + await paginationPage.clickOnNextPage(); + await taskListSinglePage.taskList().getDataTable().waitForTableBody(); + await expect(await paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.fifteen); + await expect(await paginationPage.getPaginationRange()).toEqual('Showing 16-' + nrOfTasks + ' of ' + nrOfTasks); + await expect(await taskListSinglePage.taskList().getDataTable().numberOfRows()).toBe(nrOfTasks - itemsPerPage.fifteenValue); + await taskListSinglePage.taskList().getAllRowsNameColumn().then(async (list) => { + await expect(Util.arrayContainsArray(list, allTasksName.slice(15, 20))).toEqual(true); }); }); - it('[C286366] Pagination is not displayed when no task is displayed', function () { - taskListSinglePage.typeAppId(secondAppRuntime.id); - expect(taskListSinglePage.getAppId()).toEqual(secondAppRuntime.id.toString()); + it('[C286366] Pagination is not displayed when no task is displayed', async () => { + await taskListSinglePage.typeAppId(secondAppRuntime.id); + await expect(await taskListSinglePage.getAppId()).toEqual(secondAppRuntime.id.toString()); - taskListSinglePage.paginationPage().checkPaginationIsNotDisplayed(); + await taskListSinglePage.paginationPage().checkPaginationIsNotDisplayed(); }); - it('[C286406] Invalid values for items per page', function () { - taskListSinglePage.typeItemsPerPage('0').clickAppId(); - expect(taskListSinglePage.getItemsPerPageFieldErrorMessage()).toEqual('Value must be greater than or equal to 1'); + it('[C286406] Invalid values for items per page', async () => { + await taskListSinglePage.typeItemsPerPage('0'); + await taskListSinglePage.clickAppId(); + await expect(await taskListSinglePage.getItemsPerPageFieldErrorMessage()).toEqual('Value must be greater than or equal to 1'); }); - it('[C286404] Navigate using page field', function () { + it('[C286404] Navigate using page field', async () => { currentPage = 1; - taskListSinglePage.typeItemsPerPage(itemsPerPage.fiveValue); - taskListSinglePage.typePage(currentPage); - taskListSinglePage.taskList().getDataTable().waitForTableBody(); - expect(paginationPage.getCurrentPage()).toEqual('Page ' + currentPage); - expect(paginationPage.getTotalPages()).toEqual(totalNrOfPages); - paginationPage.checkPageSelectorIsDisplayed(); - expect(taskListSinglePage.taskList().getDataTable().numberOfRows()).toBe(itemsPerPage.fiveValue); - taskListSinglePage.taskList().getAllRowsNameColumn().then(function (list) { - expect(Util.arrayContainsArray(list, allTasksName.slice(0, 5))).toEqual(true); + await taskListSinglePage.typeItemsPerPage(itemsPerPage.fiveValue); + await taskListSinglePage.typePage(currentPage); + await taskListSinglePage.taskList().getDataTable().waitForTableBody(); + await expect(await paginationPage.getCurrentPage()).toEqual('Page ' + currentPage); + await expect(await paginationPage.getTotalPages()).toEqual(totalNrOfPages); + await paginationPage.checkPageSelectorIsDisplayed(); + await expect(await taskListSinglePage.taskList().getDataTable().numberOfRows()).toBe(itemsPerPage.fiveValue); + await taskListSinglePage.taskList().getAllRowsNameColumn().then(async (list) => { + await expect(Util.arrayContainsArray(list, allTasksName.slice(0, 5))).toEqual(true); }); currentPage++; - taskListSinglePage.typePage(currentPage); - taskListSinglePage.taskList().getDataTable().waitForTableBody(); - expect(paginationPage.getCurrentPage()).toEqual('Page ' + currentPage); - expect(paginationPage.getTotalPages()).toEqual(totalNrOfPages); - paginationPage.checkPageSelectorIsDisplayed(); - expect(taskListSinglePage.taskList().getDataTable().numberOfRows()).toBe(itemsPerPage.fiveValue); - taskListSinglePage.taskList().getAllRowsNameColumn().then(function (list) { - expect(Util.arrayContainsArray(list, allTasksName.slice(5, 10))).toEqual(true); + await taskListSinglePage.typePage(currentPage); + await taskListSinglePage.taskList().getDataTable().waitForTableBody(); + await expect(await paginationPage.getCurrentPage()).toEqual('Page ' + currentPage); + await expect(await paginationPage.getTotalPages()).toEqual(totalNrOfPages); + await paginationPage.checkPageSelectorIsDisplayed(); + await expect(await taskListSinglePage.taskList().getDataTable().numberOfRows()).toBe(itemsPerPage.fiveValue); + await taskListSinglePage.taskList().getAllRowsNameColumn().then(async (list) => { + await expect(Util.arrayContainsArray(list, allTasksName.slice(5, 10))).toEqual(true); }); currentPage++; - taskListSinglePage.typePage(currentPage); - taskListSinglePage.taskList().getDataTable().waitForTableBody(); - expect(paginationPage.getCurrentPage()).toEqual('Page ' + currentPage); - expect(paginationPage.getTotalPages()).toEqual(totalNrOfPages); - paginationPage.checkPageSelectorIsDisplayed(); - expect(taskListSinglePage.taskList().getDataTable().numberOfRows()).toBe(itemsPerPage.fiveValue); - taskListSinglePage.taskList().getAllRowsNameColumn().then(function (list) { - expect(Util.arrayContainsArray(list, allTasksName.slice(10, 15))).toEqual(true); + await taskListSinglePage.typePage(currentPage); + await taskListSinglePage.taskList().getDataTable().waitForTableBody(); + await expect(await paginationPage.getCurrentPage()).toEqual('Page ' + currentPage); + await expect(await paginationPage.getTotalPages()).toEqual(totalNrOfPages); + await paginationPage.checkPageSelectorIsDisplayed(); + await expect(await taskListSinglePage.taskList().getDataTable().numberOfRows()).toBe(itemsPerPage.fiveValue); + await taskListSinglePage.taskList().getAllRowsNameColumn().then(async (list) => { + await expect(Util.arrayContainsArray(list, allTasksName.slice(10, 15))).toEqual(true); }); currentPage++; - taskListSinglePage.typePage(currentPage); - taskListSinglePage.taskList().getDataTable().waitForTableBody(); - expect(paginationPage.getCurrentPage()).toEqual('Page ' + currentPage); - expect(paginationPage.getTotalPages()).toEqual(totalNrOfPages); - paginationPage.checkPageSelectorIsDisplayed(); - expect(taskListSinglePage.taskList().getDataTable().numberOfRows()).toBe(itemsPerPage.fiveValue); - taskListSinglePage.taskList().getAllRowsNameColumn().then(function (list) { - expect(Util.arrayContainsArray(list, allTasksName.slice(15, 20))).toEqual(true); + await taskListSinglePage.typePage(currentPage); + await taskListSinglePage.taskList().getDataTable().waitForTableBody(); + await expect(await paginationPage.getCurrentPage()).toEqual('Page ' + currentPage); + await expect(await paginationPage.getTotalPages()).toEqual(totalNrOfPages); + await paginationPage.checkPageSelectorIsDisplayed(); + await expect(await taskListSinglePage.taskList().getDataTable().numberOfRows()).toBe(itemsPerPage.fiveValue); + await taskListSinglePage.taskList().getAllRowsNameColumn().then(async (list) => { + await expect(Util.arrayContainsArray(list, allTasksName.slice(15, 20))).toEqual(true); }); }); - it('[C286405] Type invalid values to page field', function () { - taskListSinglePage.typePage('0').clickAppId(); - expect(taskListSinglePage.getPageFieldErrorMessage()).toEqual('Value must be greater than or equal to 1'); + it('[C286405] Type invalid values to page field', async () => { + await taskListSinglePage.typePage('0'); + await taskListSinglePage.clickAppId(); + await expect(await taskListSinglePage.getPageFieldErrorMessage()).toEqual('Value must be greater than or equal to 1'); - taskListSinglePage.clickResetButton(); - taskListSinglePage.typePage('2'); - taskListSinglePage.paginationPage().checkPaginationIsNotDisplayed(); + await taskListSinglePage.clickResetButton(); + await taskListSinglePage.typePage('2'); + await taskListSinglePage.paginationPage().checkPaginationIsNotDisplayed(); }); - it('[C286413] Task is displayed when typing into dueAfter field a date before the tasks due date', function () { - taskListSinglePage.typeDueAfter(beforeDate); - taskListSinglePage.taskList().checkContentIsDisplayed(paginationTasksName[0]); - expect(taskListSinglePage.taskList().getDataTable().numberOfRows()).toBe(1); + it('[C286413] Task is displayed when typing into dueAfter field a date before the tasks due date', async () => { + await taskListSinglePage.typeDueAfter(beforeDate); + await taskListSinglePage.taskList().checkContentIsDisplayed(paginationTasksName[0]); + await expect(await taskListSinglePage.taskList().getDataTable().numberOfRows()).toBe(1); }); - it('[C286414] Task is not displayed when typing into dueAfter field a date after the task due date', function () { - taskListSinglePage.typeDueAfter(afterDate); - taskListSinglePage.paginationPage().checkPaginationIsNotDisplayed(); + it('[C286414] Task is not displayed when typing into dueAfter field a date after the task due date', async () => { + await taskListSinglePage.typeDueAfter(afterDate); + await taskListSinglePage.paginationPage().checkPaginationIsNotDisplayed(); }); - it('[C286415] Task is not displayed when typing into dueAfter field the same date as tasks due date', function () { - taskListSinglePage.typeDueAfter(currentDate); - taskListSinglePage.paginationPage().checkPaginationIsNotDisplayed(); + it('[C286415] Task is not displayed when typing into dueAfter field the same date as tasks due date', async () => { + await taskListSinglePage.typeDueAfter(currentDate); + await taskListSinglePage.paginationPage().checkPaginationIsNotDisplayed(); }); - it('[C286424] Task is not displayed when typing into dueBefore field a date before the tasks due date', function () { - taskListSinglePage.typeDueBefore(beforeDate); - taskListSinglePage.paginationPage().checkPaginationIsNotDisplayed(); + it('[C286424] Task is not displayed when typing into dueBefore field a date before the tasks due date', async () => { + await taskListSinglePage.typeDueBefore(beforeDate); + await taskListSinglePage.paginationPage().checkPaginationIsNotDisplayed(); }); - it('[C286425] Task is displayed when typing into dueBefore field a date after the task due date', function () { - taskListSinglePage.typeDueBefore(afterDate); - taskListSinglePage.taskList().checkContentIsDisplayed(paginationTasksName[0]); - expect(taskListSinglePage.taskList().getDataTable().numberOfRows()).toBe(1); + it('[C286425] Task is displayed when typing into dueBefore field a date after the task due date', async () => { + await taskListSinglePage.typeDueBefore(afterDate); + await taskListSinglePage.taskList().checkContentIsDisplayed(paginationTasksName[0]); + await expect(await taskListSinglePage.taskList().getDataTable().numberOfRows()).toBe(1); }); - it('[C286426] Task is not displayed when typing into dueBefore field the same date as tasks due date', function () { - taskListSinglePage.typeDueBefore(currentDate); - taskListSinglePage.paginationPage().checkPaginationIsNotDisplayed(); + it('[C286426] Task is not displayed when typing into dueBefore field the same date as tasks due date', async () => { + await taskListSinglePage.typeDueBefore(currentDate); + await taskListSinglePage.paginationPage().checkPaginationIsNotDisplayed(); }); - it('[C286428] Task is not displayed when typing into dueAfter field a date before the task due date and into dueBefore a date before task due date', function () { - taskListSinglePage.typeDueBefore(beforeDate); - taskListSinglePage.typeDueAfter(beforeDate); - taskListSinglePage.paginationPage().checkPaginationIsNotDisplayed(); + it('[C286428] Task is not displayed when typing into dueAfter field a date before the task due date and into dueBefore a date before task due date', async () => { + await taskListSinglePage.typeDueBefore(beforeDate); + await taskListSinglePage.typeDueAfter(beforeDate); + await taskListSinglePage.paginationPage().checkPaginationIsNotDisplayed(); }); - it('[C286427] Task is displayed when typing into dueAfter field a date before the tasks due date and into dueBefore a date after', function () { - taskListSinglePage.typeDueBefore(afterDate); - taskListSinglePage.typeDueAfter(beforeDate); - taskListSinglePage.taskList().checkContentIsDisplayed(paginationTasksName[0]); - expect(taskListSinglePage.taskList().getDataTable().numberOfRows()).toBe(1); + it('[C286427] Task is displayed when typing into dueAfter field a date before the tasks due date and into dueBefore a date after', async () => { + await taskListSinglePage.typeDueBefore(afterDate); + await taskListSinglePage.typeDueAfter(beforeDate); + await taskListSinglePage.taskList().checkContentIsDisplayed(paginationTasksName[0]); + await expect(await taskListSinglePage.taskList().getDataTable().numberOfRows()).toBe(1); }); - it('[C286429] Task is not displayed when typing into dueAfter field a date after the tasks due date and into dueBefore a date after', function () { - taskListSinglePage.typeDueBefore(afterDate); - taskListSinglePage.typeDueAfter(afterDate); - taskListSinglePage.paginationPage().checkPaginationIsNotDisplayed(); + it('[C286429] Task is not displayed when typing into dueAfter field a date after the tasks due date and into dueBefore a date after', async () => { + await taskListSinglePage.typeDueBefore(afterDate); + await taskListSinglePage.typeDueAfter(afterDate); + await taskListSinglePage.paginationPage().checkPaginationIsNotDisplayed(); }); - it('[C280515] Should be able to see only the tasks of a specific app when typing the apps id in the appId field', () => { - taskListSinglePage.typeAppId(appRuntime.id); - expect(taskListSinglePage.getAppId()).toEqual(appRuntime.id.toString()); + it('[C280515] Should be able to see only the tasks of a specific app when typing the apps id in the appId field', async () => { + await taskListSinglePage.typeAppId(appRuntime.id); + await expect(await taskListSinglePage.getAppId()).toEqual(appRuntime.id.toString()); - taskListSinglePage.taskList().checkContentIsDisplayed(app.taskName); - taskListSinglePage.taskList().checkContentIsDisplayed(app.taskName); - taskListSinglePage.taskList().checkContentIsNotDisplayed(paginationTasksName[13]); + await taskListSinglePage.taskList().checkContentIsDisplayed(app.taskName); + await taskListSinglePage.taskList().checkContentIsDisplayed(app.taskName); + await taskListSinglePage.taskList().checkContentIsNotDisplayed(paginationTasksName[13]); }); - it('[C280569] Should be able to see No tasks found when typing an invalid appId', () => { - taskListSinglePage.typeAppId(invalidAppId); - expect(taskListSinglePage.getAppId()).toEqual(invalidAppId.toString()); + it('[C280569] Should be able to see No tasks found when typing an invalid appId', async () => { + await taskListSinglePage.typeAppId(invalidAppId); + await expect(await taskListSinglePage.getAppId()).toEqual(invalidAppId.toString()); - expect(taskListSinglePage.taskList().getNoTasksFoundMessage()).toEqual(noTasksFoundMessage); + await expect(await taskListSinglePage.taskList().getNoTasksFoundMessage()).toEqual(noTasksFoundMessage); }); - it('[C280570] Should be able to see only the tasks with specific name when typing the name in the task name field', () => { - taskListSinglePage.typeTaskName(paginationTasksName[13]); - expect(taskListSinglePage.getTaskName()).toEqual(paginationTasksName[13]); + it('[C280570] Should be able to see only the tasks with specific name when typing the name in the task name field', async () => { + await taskListSinglePage.typeTaskName(paginationTasksName[13]); + await expect(await taskListSinglePage.getTaskName()).toEqual(paginationTasksName[13]); - taskListSinglePage.taskList().checkContentIsDisplayed(paginationTasksName[13]); - taskListSinglePage.taskList().getRowsDisplayedWithSameName(paginationTasksName[13]).then((list) => { - expect(list.length).toEqual(2); + await taskListSinglePage.taskList().checkContentIsDisplayed(paginationTasksName[13]); + await expect((await taskListSinglePage.taskList().getRowsDisplayedWithSameName(paginationTasksName[13])).length).toBe(2); + }); + + it('[C280571] Should be able to see No tasks found when typing a task name that does not exist', async () => { + await taskListSinglePage.typeTaskName(invalidName); + await expect(await taskListSinglePage.getTaskName()).toEqual(invalidName); + + await expect(await taskListSinglePage.taskList().getNoTasksFoundMessage()).toEqual(noTasksFoundMessage); + }); + + it('[C280629] Should be able to see only the task with specific taskId when typing it in the task Id field', async () => { + await taskListSinglePage.typeTaskId(taskWithDueDate.id); + await expect(await taskListSinglePage.getTaskId()).toEqual(taskWithDueDate.id); + + await taskListSinglePage.taskList().checkContentIsDisplayed(taskWithDueDate.name); + await expect(await taskListSinglePage.taskList().getDataTable().numberOfRows()).toBe(1); + }); + + it('[C280630] Should be able to see No tasks found when typing an invalid taskId', async () => { + await taskListSinglePage.typeTaskId(invalidTaskId); + await expect(await taskListSinglePage.getTaskId()).toEqual(invalidTaskId); + + await expect(await taskListSinglePage.taskList().getNoTasksFoundMessage()).toEqual(noTasksFoundMessage); + }); + + it('[C286589] Should be able to see only completed tasks when choosing Completed from state drop down', async () => { + await taskListSinglePage.selectState('Completed'); + + await taskListSinglePage.taskList().checkContentIsDisplayed(completedTasks[0].name); + await taskListSinglePage.taskList().checkContentIsDisplayed(completedTasks[1].name); + await taskListSinglePage.taskList().checkContentIsDisplayed(completedTasks[2].name); + await expect(await taskListSinglePage.taskList().getDataTable().numberOfRows()).toBe(3); + }); + + it('[C286597] Should be able to see only running tasks when choosing Active from state drop down', async () => { + await taskListSinglePage.selectState('Active'); + + await taskListSinglePage.taskList().checkContentIsNotDisplayed(completedTasks[0].name); + await taskListSinglePage.taskList().checkContentIsNotDisplayed(completedTasks[1].name); + await taskListSinglePage.taskList().checkContentIsNotDisplayed(completedTasks[2].name); + await taskListSinglePage.taskList().getAllRowsNameColumn().then(async (list) => { + await expect(Util.arrayContainsArray(list, allTasksName)).toEqual(true); }); + await expect(await taskListSinglePage.taskList().getDataTable().numberOfRows()).toBe(20); }); - it('[C280571] Should be able to see No tasks found when typing a task name that does not exist', () => { - taskListSinglePage.typeTaskName(invalidName); - expect(taskListSinglePage.getTaskName()).toEqual(invalidName); + it('[C286598] Should be able to see all tasks when choosing All from state drop down', async () => { + await taskListSinglePage.selectState('All'); - expect(taskListSinglePage.taskList().getNoTasksFoundMessage()).toEqual(noTasksFoundMessage); - }); - - it('[C280629] Should be able to see only the task with specific taskId when typing it in the task Id field', () => { - taskListSinglePage.typeTaskId(taskWithDueDate.id); - expect(taskListSinglePage.getTaskId()).toEqual(taskWithDueDate.id); - - taskListSinglePage.taskList().checkContentIsDisplayed(taskWithDueDate.name); - expect(taskListSinglePage.taskList().getDataTable().numberOfRows()).toBe(1); - }); - - it('[C280630] Should be able to see No tasks found when typing an invalid taskId', () => { - taskListSinglePage.typeTaskId(invalidTaskId); - expect(taskListSinglePage.getTaskId()).toEqual(invalidTaskId); - - expect(taskListSinglePage.taskList().getNoTasksFoundMessage()).toEqual(noTasksFoundMessage); - }); - - it('[C286589] Should be able to see only completed tasks when choosing Completed from state drop down', () => { - taskListSinglePage.selectState('Completed'); - - taskListSinglePage.taskList().checkContentIsDisplayed(completedTasks[0].name); - taskListSinglePage.taskList().checkContentIsDisplayed(completedTasks[1].name); - taskListSinglePage.taskList().checkContentIsDisplayed(completedTasks[2].name); - expect(taskListSinglePage.taskList().getDataTable().numberOfRows()).toBe(3); - }); - - it('[C286597] Should be able to see only running tasks when choosing Active from state drop down', () => { - taskListSinglePage.selectState('Active'); - - taskListSinglePage.taskList().checkContentIsNotDisplayed(completedTasks[0].name); - taskListSinglePage.taskList().checkContentIsNotDisplayed(completedTasks[1].name); - taskListSinglePage.taskList().checkContentIsNotDisplayed(completedTasks[2].name); - taskListSinglePage.taskList().getAllRowsNameColumn().then(function (list) { - expect(Util.arrayContainsArray(list, allTasksName)).toEqual(true); + await taskListSinglePage.taskList().checkContentIsDisplayed(completedTasks[0].name); + await taskListSinglePage.taskList().checkContentIsDisplayed(completedTasks[1].name); + await taskListSinglePage.taskList().checkContentIsDisplayed(completedTasks[2].name); + await taskListSinglePage.taskList().getAllRowsNameColumn().then(async (list) => { + await expect(Util.arrayContainsArray(list, allTasksName)).toEqual(true); }); - expect(taskListSinglePage.taskList().getDataTable().numberOfRows()).toBe(20); - }); - - it('[C286598] Should be able to see all tasks when choosing All from state drop down', () => { - taskListSinglePage.selectState('All'); - - taskListSinglePage.taskList().checkContentIsDisplayed(completedTasks[0].name); - taskListSinglePage.taskList().checkContentIsDisplayed(completedTasks[1].name); - taskListSinglePage.taskList().checkContentIsDisplayed(completedTasks[2].name); - taskListSinglePage.taskList().getAllRowsNameColumn().then(function (list) { - expect(Util.arrayContainsArray(list, allTasksName)).toEqual(true); - }); - expect(taskListSinglePage.taskList().getDataTable().numberOfRows()).toBe(23); + await expect(await taskListSinglePage.taskList().getDataTable().numberOfRows()).toBe(23); }); }); - it('[C286622] Should be able to see only tasks that are part of a specific process when processDefinitionId is set', () => { + it('[C286622] Should be able to see only tasks that are part of a specific process when processDefinitionId is set', async () => { const processDefinitionIds = [processDefinitionId.processDefinitionId, processDefinitionId.processDefinitionId, processDefinitionId.processDefinitionId, processDefinitionId.processDefinitionId]; - navigationBarPage.clickTaskListButton(); - taskListSinglePage.clickResetButton(); + await navigationBarPage.clickTaskListButton(); + await taskListSinglePage.clickResetButton(); - taskListSinglePage.typeProcessDefinitionId(processDefinitionId.processDefinitionId); + await taskListSinglePage.typeProcessDefinitionId(processDefinitionId.processDefinitionId); - expect(taskListSinglePage.taskList().getDataTable().numberOfRows()).toBe(4); - taskListSinglePage.getAllProcessDefinitionIds().then(function (list) { - expect(Util.arrayContainsArray(list, processDefinitionIds)).toEqual(true); + await expect(await taskListSinglePage.taskList().getDataTable().numberOfRows()).toBe(4); + await taskListSinglePage.getAllProcessDefinitionIds().then(async (list) => { + await expect(Util.arrayContainsArray(list, processDefinitionIds)).toEqual(true); }); }); - it('[C286623] Should be able to see No tasks found when typing an invalid processDefinitionId', () => { - navigationBarPage.clickTaskListButton(); - taskListSinglePage.clickResetButton(); + it('[C286623] Should be able to see No tasks found when typing an invalid processDefinitionId', async () => { + await navigationBarPage.clickTaskListButton(); + await taskListSinglePage.clickResetButton(); - taskListSinglePage.typeProcessDefinitionId(invalidTaskId); + await taskListSinglePage.typeProcessDefinitionId(invalidTaskId); - expect(taskListSinglePage.taskList().getNoTasksFoundMessage()).toEqual(noTasksFoundMessage); + await expect(await taskListSinglePage.taskList().getNoTasksFoundMessage()).toEqual(noTasksFoundMessage); }); - it('[C286622] Should be able to see only tasks that are part of a specific process when processInstanceId is set', () => { + it('[C286622] Should be able to see only tasks that are part of a specific process when processInstanceId is set', async () => { const processInstanceIds = [processDefinitionId.id]; - navigationBarPage.clickTaskListButton(); - taskListSinglePage.clickResetButton(); + await navigationBarPage.clickTaskListButton(); + await taskListSinglePage.clickResetButton(); - taskListSinglePage.typeProcessInstanceId(processDefinitionId.id); - expect(taskListSinglePage.getProcessInstanceId()).toEqual(processDefinitionId.id); + await taskListSinglePage.typeProcessInstanceId(processDefinitionId.id); + await expect(await taskListSinglePage.getProcessInstanceId()).toEqual(processDefinitionId.id); - expect(taskListSinglePage.taskList().getDataTable().numberOfRows()).toBe(1); - taskListSinglePage.getAllProcessInstanceIds().then(function (list) { - expect(Util.arrayContainsArray(list, processInstanceIds)).toEqual(true); + await expect(await taskListSinglePage.taskList().getDataTable().numberOfRows()).toBe(1); + await taskListSinglePage.getAllProcessInstanceIds().then(async (list) => { + await expect(Util.arrayContainsArray(list, processInstanceIds)).toEqual(true); }); }); - it('[C286623] Should be able to see No tasks found when typing an invalid processInstanceId', () => { - navigationBarPage.clickTaskListButton(); - taskListSinglePage.clickResetButton(); + it('[C286623] Should be able to see No tasks found when typing an invalid processInstanceId', async () => { + await navigationBarPage.clickTaskListButton(); + await taskListSinglePage.clickResetButton(); - taskListSinglePage.typeProcessInstanceId(invalidTaskId); - expect(taskListSinglePage.getProcessInstanceId()).toEqual(invalidTaskId); + await taskListSinglePage.typeProcessInstanceId(invalidTaskId); + await expect(await taskListSinglePage.getProcessInstanceId()).toEqual(invalidTaskId); - expect(taskListSinglePage.taskList().getNoTasksFoundMessage()).toEqual(noTasksFoundMessage); + await expect(await taskListSinglePage.taskList().getNoTasksFoundMessage()).toEqual(noTasksFoundMessage); }); }); diff --git a/e2e/process-services/dynamic-table-date-picker.e2e.ts b/e2e/process-services/dynamic-table-date-picker.e2e.ts index 40c0e711ba..1145a8a773 100644 --- a/e2e/process-services/dynamic-table-date-picker.e2e.ts +++ b/e2e/process-services/dynamic-table-date-picker.e2e.ts @@ -37,7 +37,7 @@ describe('Dynamic Table', () => { const widget = new Widget(); let user, tenantId, appId, apps, users; - beforeAll(async (done) => { + beforeAll(async () => { this.alfrescoJsApi = new AlfrescoApi({ provider: 'BPM', hostBpm: browser.params.testConfig.adf_aps.host @@ -52,15 +52,13 @@ describe('Dynamic Table', () => { tenantId = user.tenantId; - done(); }); - afterAll(async (done) => { + afterAll(async () => { await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); await this.alfrescoJsApi.activiti.adminTenantsApi.deleteTenant(tenantId); - done(); }); describe('Date Picker', () => { @@ -77,67 +75,63 @@ describe('Dynamic Table', () => { const currentDate = DateUtil.formatDate('DD-MM-YYYY'); const rowPosition = 0; - beforeAll(async (done) => { + beforeAll(async () => { await this.alfrescoJsApi.login(user.email, user.password); const importedApp = await apps.importPublishDeployApp(this.alfrescoJsApi, app.file_location); appId = importedApp.id; await loginPage.loginToProcessServicesUsingUserModel(user); - - done(); }); - afterAll(async (done) => { + afterAll(async () => { await this.alfrescoJsApi.login(user.email, user.password); await this.alfrescoJsApi.activiti.modelsApi.deleteModel(appId); - - done(); }); - beforeEach(() => { - navigationBarPage.navigateToProcessServicesPage().goToTaskApp().clickProcessButton(); + beforeEach(async () => { + await (await (await navigationBarPage.navigateToProcessServicesPage()).goToTaskApp()).clickProcessButton(); - processServiceTabBarPage.clickProcessButton(); + await processServiceTabBarPage.clickProcessButton(); - processFiltersPage.clickCreateProcessButton(); - processFiltersPage.clickNewProcessDropdown(); + await processFiltersPage.clickCreateProcessButton(); + await processFiltersPage.clickNewProcessDropdown(); }); - it('[C286277] Should have a datepicker and a mask for DateTime field', () => { - widget.dynamicTable().clickAddButton(); - widget.dynamicTable().clickColumnDateTime(); + it('[C286277] Should have a datepicker and a mask for DateTime field', async () => { + await widget.dynamicTable().clickAddButton(); + await widget.dynamicTable().clickColumnDateTime(); - expect(widget.dynamicTable().addRandomStringOnDateTime(randomText.wrongDateTime)).toBe(''); + await expect(await widget.dynamicTable().addRandomStringOnDateTime(randomText.wrongDateTime)).toBe(''); }); - it('[C286279] Should be able to save row with Date field', () => { - widget.dynamicTable().clickAddButton(); - widget.dynamicTable().addRandomStringOnDate(randomText.wrongDate); - widget.dynamicTable().clickSaveButton(); - expect(widget.dynamicTable().checkErrorMessage()).toBe(randomText.error); + it('[C286279] Should be able to save row with Date field', async () => { + await widget.dynamicTable().clickAddButton(); + await widget.dynamicTable().addRandomStringOnDate(randomText.wrongDate); + await widget.dynamicTable().clickSaveButton(); + await expect(await widget.dynamicTable().checkErrorMessage()).toBe(randomText.error); - widget.dynamicTable().clickDateWidget(); - datePicker.selectTodayDate() - .checkDatePickerIsNotDisplayed(); - widget.dynamicTable().clickSaveButton(); - widget.dynamicTable().getTableRow(rowPosition); - expect(widget.dynamicTable().getTableCellText(rowPosition, 1)).toBe(currentDate); + await widget.dynamicTable().clickDateWidget(); + await datePicker.selectTodayDate(); + await datePicker.checkDatePickerIsNotDisplayed(); + await widget.dynamicTable().clickSaveButton(); + await widget.dynamicTable().getTableRow(rowPosition); + await expect(await widget.dynamicTable().getTableCellText(rowPosition, 1)).toBe(currentDate); }); - it('[C311456] Should be able to delete date that is not mandatory and save the Dynamic Table', () => { - widget.dynamicTable().clickAddButton(); - widget.dynamicTable().clickSaveButton(); - expect(widget.dynamicTable().checkErrorMessage()).toBe(randomText.requiredError); + it('[C311456] Should be able to delete date that is not mandatory and save the Dynamic Table', async () => { + await widget.dynamicTable().clickAddButton(); + await widget.dynamicTable().clickSaveButton(); + await expect(await widget.dynamicTable().checkErrorMessage()).toBe(randomText.requiredError); - widget.dynamicTable().clickDateWidget(); - datePicker.selectTodayDate() - .checkDatePickerIsNotDisplayed(); - widget.dynamicTable().clickSaveButton(); - widget.dynamicTable().getTableRow(rowPosition); - expect(widget.dynamicTable().getTableCellText(rowPosition, 1)).toBe(currentDate); - expect(widget.dynamicTable().getTableCellText(rowPosition, 2)).toBe(''); + await widget.dynamicTable().clickDateWidget(); + await datePicker.selectTodayDate(); + await datePicker.checkDatePickerIsNotDisplayed(); + await widget.dynamicTable().clickSaveButton(); + await widget.dynamicTable().getTableRow(rowPosition); + await expect(await widget.dynamicTable().getTableCellText(rowPosition, 1)).toBe(currentDate); + await expect(await widget.dynamicTable().getTableCellText(rowPosition, 2)).toBe(''); }); }); @@ -145,7 +139,7 @@ describe('Dynamic Table', () => { const app = resources.Files.APP_DYNAMIC_TABLE_DROPDOWN; const dropdown = widget.dropdown(); - beforeAll(async (done) => { + beforeAll(async () => { await this.alfrescoJsApi.login(user.email, user.password); @@ -154,32 +148,30 @@ describe('Dynamic Table', () => { await loginPage.loginToProcessServicesUsingUserModel(user); - done(); }); - afterAll(async (done) => { + afterAll(async () => { await this.alfrescoJsApi.login(user.email, user.password); await this.alfrescoJsApi.activiti.modelsApi.deleteModel(appId); - done(); }); - beforeEach(() => { - navigationBarPage.navigateToProcessServicesPage().goToApp(app.title).clickProcessButton(); + beforeEach(async () => { + await (await (await navigationBarPage.navigateToProcessServicesPage()).goToApp(app.title)).clickProcessButton(); - processServiceTabBarPage.clickProcessButton(); + await processServiceTabBarPage.clickProcessButton(); - processFiltersPage.clickCreateProcessButton(); - processFiltersPage.clickNewProcessDropdown(); + await processFiltersPage.clickCreateProcessButton(); + await processFiltersPage.clickNewProcessDropdown(); }); - it('[C286519] Should be able to save row with required dropdown column', () => { + it('[C286519] Should be able to save row with required dropdown column', async () => { const dropdownOption = 'Option 1'; - widget.dynamicTable().clickAddButton(); - dropdown.selectOption(dropdownOption); - widget.dynamicTable().clickSaveButton(); - widget.dynamicTable().checkItemIsPresent(dropdownOption); + await widget.dynamicTable().clickAddButton(); + await dropdown.selectOption(dropdownOption); + await widget.dynamicTable().clickSaveButton(); + await widget.dynamicTable().checkItemIsPresent(dropdownOption); }); }); diff --git a/e2e/process-services/empty-process-list-component.e2e.ts b/e2e/process-services/empty-process-list-component.e2e.ts index 7c76cf703d..25423d4c8f 100644 --- a/e2e/process-services/empty-process-list-component.e2e.ts +++ b/e2e/process-services/empty-process-list-component.e2e.ts @@ -44,7 +44,7 @@ describe('Empty Process List Test', () => { let user; - beforeAll(async (done) => { + beforeAll(async () => { const apps = new AppsActions(); const users = new UsersActions(); @@ -63,35 +63,35 @@ describe('Empty Process List Test', () => { await apps.importPublishDeployApp(this.alfrescoJsApi, appB.file_location); await loginPage.loginToProcessServicesUsingUserModel(user); - done(); + }); - it('[C260494] Should add process to list when a process is created', () => { - navigationBarPage.navigateToProcessServicesPage(); - processServicesPage.checkApsContainer(); - processServicesPage.goToApp(appA.title).clickProcessButton(); - expect(processListPage.checkProcessListTitleIsDisplayed()).toEqual('No Processes Found'); - expect(processDetailsPage.checkProcessDetailsMessage()).toEqual('No process details found'); + it('[C260494] Should add process to list when a process is created', async () => { + await navigationBarPage.navigateToProcessServicesPage(); + await processServicesPage.checkApsContainer(); + await (await processServicesPage.goToApp(appA.title)).clickProcessButton(); + await expect(await processListPage.getDisplayedProcessListTitle()).toEqual('No Processes Found'); + await expect(await processDetailsPage.checkProcessDetailsMessage()).toEqual('No process details found'); - processFiltersPage.clickCreateProcessButton(); - processFiltersPage.clickNewProcessDropdown(); - startProcessPage.selectFromProcessDropdown(appA.process_wse_name); - startProcessPage.clickStartProcessButton(); - expect(processFiltersPage.numberOfProcessRows()).toEqual(1); + await processFiltersPage.clickCreateProcessButton(); + await processFiltersPage.clickNewProcessDropdown(); + await startProcessPage.selectFromProcessDropdown(appA.process_wse_name); + await startProcessPage.clickStartProcessButton(); + await expect(await processFiltersPage.numberOfProcessRows()).toEqual(1); - processDetailsPage.checkProcessDetailsCard(); - navigationBarPage.navigateToProcessServicesPage(); - processServicesPage.checkApsContainer(); - processServicesPage.goToApp(appB.title).clickProcessButton(); - expect(processListPage.checkProcessListTitleIsDisplayed()).toEqual('No Processes Found'); - expect(processDetailsPage.checkProcessDetailsMessage()).toEqual('No process details found'); + await processDetailsPage.checkProcessDetailsCard(); + await navigationBarPage.navigateToProcessServicesPage(); + await processServicesPage.checkApsContainer(); + await (await processServicesPage.goToApp(appB.title)).clickProcessButton(); + await expect(await processListPage.getDisplayedProcessListTitle()).toEqual('No Processes Found'); + await expect(await processDetailsPage.checkProcessDetailsMessage()).toEqual('No process details found'); - processFiltersPage.clickCreateProcessButton(); - processFiltersPage.clickNewProcessDropdown(); - startProcessPage.selectFromProcessDropdown(appB.processName); - startProcessPage.clickStartProcessButton(); - expect(processFiltersPage.numberOfProcessRows()).toEqual(1); - processDetailsPage.checkProcessDetailsCard(); + await processFiltersPage.clickCreateProcessButton(); + await processFiltersPage.clickNewProcessDropdown(); + await startProcessPage.selectFromProcessDropdown(appB.processName); + await startProcessPage.clickStartProcessButton(); + await expect(await processFiltersPage.numberOfProcessRows()).toEqual(1); + await processDetailsPage.checkProcessDetailsCard(); }); }); diff --git a/e2e/process-services/form-component.e2e.ts b/e2e/process-services/form-component.e2e.ts index 0c2f3dcc63..37041ead30 100644 --- a/e2e/process-services/form-component.e2e.ts +++ b/e2e/process-services/form-component.e2e.ts @@ -47,7 +47,7 @@ describe('Form Component', () => { errorLabel: 'Error Label4' }; - beforeAll(async (done) => { + beforeAll(async () => { this.alfrescoJsApi = new AlfrescoApi({ provider: 'BPM', hostBpm: browser.params.testConfig.adf_aps.host @@ -65,43 +65,41 @@ describe('Form Component', () => { await loginPage.loginToProcessServicesUsingUserModel(user); - navigationBarPage.clickFormButton(); - - done(); + await navigationBarPage.navigateToProcessServicesFormPage(); }); - afterAll(async (done) => { + afterAll(async () => { await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); await this.alfrescoJsApi.activiti.adminTenantsApi.deleteTenant(tenantId); - - done(); }); - it('[C286505] Should be able to display errors under the Error Log section', () => { - widget.numberWidget().getNumberFieldLabel(fields.numberWidgetId); - widget.numberWidget().setFieldValue(fields.numberWidgetId, message.test); - formPage.checkErrorMessageForWidgetIsDisplayed(message.warningNumberAndAmount); - formPage.checkErrorLogMessage(message.errorLogNumber); + it('[C286505] Should be able to display errors under the Error Log section', async () => { + await widget.numberWidget().getNumberFieldLabel(fields.numberWidgetId); + await widget.numberWidget().setFieldValue(fields.numberWidgetId, message.test); + await formPage.checkErrorMessageForWidgetIsDisplayed(message.warningNumberAndAmount); + await formPage.checkErrorLogMessage(message.errorLogNumber); - widget.dateWidget().checkLabelIsVisible(fields.dateWidgetId); - widget.dateWidget().setDateInput(fields.dateWidgetId, message.test); - formPage.saveForm(); - formPage.checkErrorMessageForWidgetIsDisplayed(message.warningDate); - formPage.checkErrorLogMessage(message.errorLogDate); + await widget.dateWidget().checkLabelIsVisible(fields.dateWidgetId); + await widget.dateWidget().setDateInput(fields.dateWidgetId, message.test); - widget.amountWidget().getAmountFieldLabel(fields.amountWidgetId); - widget.amountWidget().setFieldValue(fields.amountWidgetId, message.test); - formPage.checkErrorMessageForWidgetIsDisplayed(message.warningNumberAndAmount); - formPage.checkErrorLogMessage(message.errorLogAmount); + await formPage.saveForm(); + await formPage.checkErrorMessageForWidgetIsDisplayed(message.warningDate); + await formPage.checkErrorLogMessage(message.errorLogDate); - widget.amountWidget().removeFromAmountWidget(fields.amountWidgetId); - formPage.checkErrorMessageIsNotDisplayed(message.errorLogAmount); + await widget.amountWidget().getAmountFieldLabel(fields.amountWidgetId); + await widget.amountWidget().setFieldValue(fields.amountWidgetId, message.test); + await formPage.checkErrorMessageForWidgetIsDisplayed(message.warningNumberAndAmount); + await formPage.checkErrorLogMessage(message.errorLogAmount); + + await widget.amountWidget().removeFromAmountWidget(fields.amountWidgetId); + await formPage.checkErrorMessageIsNotDisplayed(message.errorLogAmount); + + await widget.dateWidget().clearDateInput(fields.dateWidgetId); + await widget.numberWidget().clearFieldValue(fields.numberWidgetId); + await formPage.checkErrorMessageForWidgetIsNotDisplayed(message.warningDate); + await formPage.checkErrorMessageIsNotDisplayed(message.errorLogDate); + await formPage.checkErrorLogMessage(message.errorLabel); - widget.dateWidget().clearDateInput(fields.dateWidgetId); - widget.numberWidget().clearFieldValue(fields.numberWidgetId); - formPage.checkErrorMessageForWidgetIsNotDisplayed(message.warningDate); - formPage.checkErrorMessageIsNotDisplayed(message.errorLogDate); - formPage.checkErrorLogMessage(message.errorLabel); }); }); diff --git a/e2e/process-services/form-people-widget.e2e.ts b/e2e/process-services/form-people-widget.e2e.ts index 9d80da1ec1..c6de170e9b 100644 --- a/e2e/process-services/form-people-widget.e2e.ts +++ b/e2e/process-services/form-people-widget.e2e.ts @@ -20,7 +20,6 @@ import { ProcessFiltersPage } from '../pages/adf/process-services/processFilters import { StartProcessPage } from '../pages/adf/process-services/startProcessPage'; import { ProcessDetailsPage } from '../pages/adf/process-services/processDetailsPage'; import { TaskDetailsPage } from '../pages/adf/process-services/taskDetailsPage'; -import { ProcessServiceTabBarPage } from '../pages/adf/process-services/processServiceTabBarPage'; import { NavigationBarPage } from '../pages/adf/navigationBarPage'; import resources = require('../util/resources'); @@ -29,6 +28,7 @@ import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; import { AppsActions } from '../actions/APS/apps.actions'; import { UsersActions } from '../actions/users.actions'; import { browser } from 'protractor'; +import { ProcessServiceTabBarPage } from '../pages/adf/process-services/processServiceTabBarPage'; describe('Form widgets - People', () => { @@ -44,7 +44,7 @@ describe('Form widgets - People', () => { const taskDetails = new TaskDetailsPage(); const processServiceTabBarPage = new ProcessServiceTabBarPage(); - beforeAll(async (done) => { + beforeAll(async () => { const users = new UsersActions(); const appsActions = new AppsActions(); @@ -63,62 +63,53 @@ describe('Form widgets - People', () => { await loginPage.loginToProcessServicesUsingUserModel(processUserModel); - done(); }); - afterAll(async (done) => { + afterAll(async () => { await alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); await alfrescoJsApi.activiti.adminTenantsApi.deleteTenant(processUserModel.tenantId); - done(); }); - beforeEach(() => { - new NavigationBarPage().navigateToProcessServicesPage().goToApp(appModel.name) - .clickProcessButton(); - processFiltersPage.clickCreateProcessButton(); - processFiltersPage.clickNewProcessDropdown(); + beforeEach(async () => { + await (await (await new NavigationBarPage().navigateToProcessServicesPage()).goToApp(appModel.name)).clickProcessButton(); + await processFiltersPage.clickCreateProcessButton(); + await processFiltersPage.clickNewProcessDropdown(); - widget.peopleWidget().checkPeopleFieldIsDisplayed(); - widget.peopleWidget().fillPeopleField(processUserModel.firstName); - widget.peopleWidget().selectUserFromDropdown(); + await widget.peopleWidget().checkPeopleFieldIsDisplayed(); + await widget.peopleWidget().fillPeopleField(processUserModel.firstName); + await widget.peopleWidget().selectUserFromDropdown(); }); it('[C286577] Should be able to start a process with people widget', async () => { + await startProcess.clickFormStartProcessButton(); + await processDetailsPage.clickOnActiveTask(); - startProcess.clickFormStartProcessButton(); - processDetailsPage.clickOnActiveTask(); - - browser.controlFlow().execute(async () => { - const taskId = await taskDetails.getId(); - const taskForm = await alfrescoJsApi.activiti.taskApi.getTaskForm(taskId); - const userEmail = taskForm['fields'][0].fields['1'][0].value.email; - expect(userEmail).toEqual(processUserModel.email); - }); + const taskId = await taskDetails.getId(); + const taskForm = await alfrescoJsApi.activiti.taskApi.getTaskForm(taskId); + const userEmail = taskForm['fields'][0].fields['1'][0].value.email; + await expect(userEmail).toEqual(processUserModel.email); }); it('[C286576] Should be able to see user in completed task', async () => { + await startProcess.enterProcessName(app.processName); + await startProcess.clickFormStartProcessButton(); - startProcess.enterProcessName(app.processName); - startProcess.clickFormStartProcessButton(); + await processDetailsPage.clickOnActiveTask(); + await taskDetails.checkCompleteFormButtonIsDisplayed(); + await taskDetails.clickCompleteFormTask(); - processDetailsPage.clickOnActiveTask(); - taskDetails.checkCompleteFormButtonIsDisplayed(); - taskDetails.clickCompleteFormTask(); + await processServiceTabBarPage.clickProcessButton(); + await processFiltersPage.clickCompletedFilterButton(); + await processFiltersPage.selectFromProcessList(app.processName); - processServiceTabBarPage.clickProcessButton(); - processFiltersPage.clickCompletedFilterButton(); - processFiltersPage.selectFromProcessList(app.processName); + await processDetailsPage.clickOnCompletedTask(); - processDetailsPage.clickOnCompletedTask(); - - browser.controlFlow().execute(async () => { - const taskId = await taskDetails.getId(); - const taskForm = await alfrescoJsApi.activiti.taskApi.getTaskForm(taskId); - const userEmail = taskForm['fields'][0].fields['1'][0].value.email; - expect(userEmail).toEqual(processUserModel.email); - }); + const taskId = await taskDetails.getId(); + const taskForm = await alfrescoJsApi.activiti.taskApi.getTaskForm(taskId); + const userEmail = taskForm['fields'][0].fields['1'][0].value.email; + await expect(userEmail).toEqual(processUserModel.email); }); }); diff --git a/e2e/process-services/form-widgets-component.e2e.ts b/e2e/process-services/form-widgets-component.e2e.ts index 684695eca5..f344006c1b 100644 --- a/e2e/process-services/form-widgets-component.e2e.ts +++ b/e2e/process-services/form-widgets-component.e2e.ts @@ -45,7 +45,7 @@ describe('Form widgets', () => { const app = resources.Files.WIDGETS_SMOKE_TEST; const appFields = app.form_fields; - beforeAll(async (done) => { + beforeAll(async () => { const users = new UsersActions(); const appsActions = new AppsActions(); @@ -64,132 +64,135 @@ describe('Form widgets', () => { await loginPage.loginToProcessServicesUsingUserModel(processUserModel); - new NavigationBarPage().navigateToProcessServicesPage().goToApp(appModel.name); + await (await new NavigationBarPage().navigateToProcessServicesPage()).goToApp(appModel.name); - taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); - taskPage.createNewTask().addName(newTask).addDescription('Description').addForm(app.formName).clickStartButton(); + await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); + const task = await taskPage.createNewTask(); + await task.addName(newTask); + await task.addDescription('Description'); + await task.addForm(app.formName); + await task.clickStartButton(); - taskPage.tasksListPage().checkContentIsDisplayed(newTask); - taskPage.formFields().checkFormIsDisplayed(); - expect(taskPage.taskDetails().getTitle()).toEqual('Activities'); + await taskPage.tasksListPage().checkContentIsDisplayed(newTask); + await taskPage.formFields().checkFormIsDisplayed(); + await expect(await taskPage.taskDetails().getTitle()).toEqual('Activities'); - const response = await taskPage.taskDetails().getId(); + const response = await taskPage.taskDetails().getId(); const formDefinition = await alfrescoJsApi.activiti.taskFormsApi.getTaskForm(response); formInstance.setFields(formDefinition.fields); formInstance.setAllWidgets(formDefinition.fields); - done(); }); - afterAll(async (done) => { + afterAll(async () => { await alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); await alfrescoJsApi.activiti.adminTenantsApi.deleteTenant(processUserModel.tenantId); - done(); }); - it('[C272778] Should display text and multi-line in form', () => { - expect(taskPage.formFields().getFieldLabel(appFields.text_id)) + it('[C272778] Should display text and multi-line in form', async () => { + await expect(await taskPage.formFields().getFieldLabel(appFields.text_id)) .toEqual(formInstance.getWidgetBy('id', appFields.text_id).name); - expect(taskPage.formFields().getFieldValue(appFields.text_id)) + await expect(await taskPage.formFields().getFieldValue(appFields.text_id)) .toEqual(formInstance.getWidgetBy('id', appFields.text_id).value || ''); - expect(widget.multilineTextWidget().getFieldValue(appFields.multiline_id)) + await expect(await widget.multilineTextWidget().getFieldValue(appFields.multiline_id)) .toEqual(formInstance.getWidgetBy('id', appFields.multiline_id).value || ''); - expect(taskPage.formFields().getFieldLabel(appFields.multiline_id)) + await expect(await taskPage.formFields().getFieldLabel(appFields.multiline_id)) .toEqual(formInstance.getWidgetBy('id', appFields.multiline_id).name); }); - it('[C272779] Should display number and amount in form', () => { - expect(taskPage.formFields().getFieldValue(appFields.number_id)) + it('[C272779] Should display number and amount in form', async () => { + await expect(await taskPage.formFields().getFieldValue(appFields.number_id)) .toEqual(formInstance.getWidgetBy('id', appFields.number_id).value || ''); - expect(taskPage.formFields().getFieldLabel(appFields.number_id)) + await expect(await taskPage.formFields().getFieldLabel(appFields.number_id)) .toEqual(formInstance.getWidgetBy('id', appFields.number_id).name); - expect(taskPage.formFields().getFieldValue(appFields.amount_id)) + await expect(await taskPage.formFields().getFieldValue(appFields.amount_id)) .toEqual(formInstance.getWidgetBy('id', appFields.amount_id).value || ''); - expect(taskPage.formFields().getFieldLabel(appFields.amount_id)) + await expect(await taskPage.formFields().getFieldLabel(appFields.amount_id)) .toEqual(formInstance.getWidgetBy('id', appFields.amount_id).name); }); - it('[C272780] Should display attach file and attach folder in form', () => { - expect(taskPage.formFields().getFieldLabel(appFields.attachFolder_id)) + it('[C272780] Should display attach file and attach folder in form', async () => { + await expect(await taskPage.formFields().getFieldLabel(appFields.attachFolder_id)) .toEqual(formInstance.getWidgetBy('id', appFields.attachFolder_id).name); - expect(taskPage.formFields().getFieldLabel(appFields.attachFile_id)) + await expect(await taskPage.formFields().getFieldLabel(appFields.attachFile_id)) .toEqual(formInstance.getWidgetBy('id', appFields.attachFile_id).name); }); - it('[C272781] Should display date and date & time in form', () => { - expect(taskPage.formFields().getFieldLabel(appFields.date_id)) + it('[C272781] Should display date and date & time in form', async () => { + await expect(await taskPage.formFields().getFieldLabel(appFields.date_id)) .toContain(formInstance.getWidgetBy('id', appFields.date_id).name); - expect(taskPage.formFields().getFieldValue(appFields.date_id)) + await expect(await taskPage.formFields().getFieldValue(appFields.date_id)) .toEqual(formInstance.getWidgetBy('id', appFields.date_id).value || ''); - expect(taskPage.formFields().getFieldLabel(appFields.dateTime_id)) + await expect(await taskPage.formFields().getFieldLabel(appFields.dateTime_id)) .toContain(formInstance.getWidgetBy('id', appFields.dateTime_id).name); - expect(taskPage.formFields().getFieldValue(appFields.dateTime_id)) + await expect(await taskPage.formFields().getFieldValue(appFields.dateTime_id)) .toEqual(formInstance.getWidgetBy('id', appFields.dateTime_id).value || ''); }); - it('[C272782] Should display people and group in form', () => { - expect(taskPage.formFields().getFieldValue(appFields.people_id)) + it('[C272782] Should display people and group in form', async () => { + await expect(await taskPage.formFields().getFieldValue(appFields.people_id)) .toEqual(formInstance.getWidgetBy('id', appFields.people_id).value || ''); - expect(taskPage.formFields().getFieldLabel(appFields.people_id)) + await expect(await taskPage.formFields().getFieldLabel(appFields.people_id)) .toEqual(formInstance.getWidgetBy('id', appFields.people_id).name); - expect(taskPage.formFields().getFieldValue(appFields.group_id)) + await expect(await taskPage.formFields().getFieldValue(appFields.group_id)) .toEqual(formInstance.getWidgetBy('id', appFields.group_id).value || ''); - expect(taskPage.formFields().getFieldLabel(appFields.group_id)) + await expect(await taskPage.formFields().getFieldLabel(appFields.group_id)) .toEqual(formInstance.getWidgetBy('id', appFields.group_id).name); }); - it('[C272783] Should display displayText and displayValue in form', () => { - expect(widget.displayTextWidget().getFieldLabel(appFields.displayText_id)) + it('[C272783] Should display displayText and displayValue in form', async () => { + + await expect(await widget.displayTextWidget().getFieldLabel(appFields.displayText_id)) .toEqual(formInstance.getWidgetBy('id', appFields.displayText_id).value); - expect(widget.displayValueWidget().getFieldLabel(appFields.displayValue_id)) + await expect(await widget.displayValueWidget().getFieldLabel(appFields.displayValue_id)) .toEqual(formInstance.getWidgetBy('id', appFields.displayValue_id).value || 'Display value' || ''); - expect(widget.displayValueWidget().getFieldValue(appFields.displayValue_id)) + await expect(await widget.displayValueWidget().getFieldValue(appFields.displayValue_id)) .toEqual(formInstance.getWidgetBy('id', appFields.displayValue_id).value || ''); }); - it('[C272784] Should display typeahead and header in form', () => { - expect(widget.headerWidget().getFieldLabel(appFields.header_id)) + it('[C272784] Should display typeahead and header in form', async () => { + await expect(await widget.headerWidget().getFieldLabel(appFields.header_id)) .toEqual(formInstance.getWidgetBy('id', appFields.header_id).name); - expect(taskPage.formFields().getFieldValue(appFields.typeAhead_id)) + await expect(await taskPage.formFields().getFieldValue(appFields.typeAhead_id)) .toEqual(formInstance.getWidgetBy('id', appFields.typeAhead_id).value || ''); - expect(taskPage.formFields().getFieldLabel(appFields.typeAhead_id)) + await expect(await taskPage.formFields().getFieldLabel(appFields.typeAhead_id)) .toEqual(formInstance.getWidgetBy('id', appFields.typeAhead_id).name); }); - it('[C272785] Should display checkbox and radio button in form', () => { + it('[C272785] Should display checkbox and radio button in form', async () => { const radioOption = 1; - expect(taskPage.formFields().getFieldLabel(appFields.checkbox_id)) + await expect(await taskPage.formFields().getFieldLabel(appFields.checkbox_id)) .toContain(formInstance.getWidgetBy('id', appFields.checkbox_id).name); - expect(taskPage.formFields().getFieldLabel(appFields.radioButtons_id)) + await expect(await taskPage.formFields().getFieldLabel(appFields.radioButtons_id)) .toContain(formInstance.getWidgetBy('id', appFields.radioButtons_id).name); - expect(widget.radioWidget().getSpecificOptionLabel(appFields.radioButtons_id, radioOption)) + await expect(await widget.radioWidget().getSpecificOptionLabel(appFields.radioButtons_id, radioOption)) .toContain(formInstance.getWidgetBy('id', appFields.radioButtons_id).options[radioOption - 1].name); }); - it('[C268149] Should display hyperlink, dropdown and dynamic table in form', () => { + it('[C268149] Should display hyperlink, dropdown and dynamic table in form', async () => { - expect(widget.hyperlink().getFieldText(appFields.hyperlink_id)) + await expect(await widget.hyperlink().getFieldText(appFields.hyperlink_id)) .toEqual(formInstance.getWidgetBy('id', appFields.hyperlink_id).hyperlinkUrl || ''); - expect(taskPage.formFields().getFieldLabel(appFields.hyperlink_id)) + await expect(await taskPage.formFields().getFieldLabel(appFields.hyperlink_id)) .toEqual(formInstance.getWidgetBy('id', appFields.hyperlink_id).name); - expect(taskPage.formFields().getFieldLabel(appFields.dropdown_id)) + await expect(await taskPage.formFields().getFieldLabel(appFields.dropdown_id)) .toContain(formInstance.getWidgetBy('id', appFields.dropdown_id).name); - expect(widget.dropdown().getSelectedOptionText(appFields.dropdown_id)) + await expect(widget.dropdown().getSelectedOptionText(appFields.dropdown_id)) .toContain(formInstance.getWidgetBy('id', appFields.dropdown_id).value); - expect(widget.dynamicTable().getFieldLabel(appFields.dynamicTable_id)) + await expect(await widget.dynamicTable().getFieldLabel(appFields.dynamicTable_id)) .toContain(formInstance.getWidgetBy('id', appFields.dynamicTable_id).name); - expect(widget.dynamicTable().getColumnName(appFields.dynamicTable_id)) + await expect(await widget.dynamicTable().getColumnName(appFields.dynamicTable_id)) .toContain(formInstance.getWidgetBy('id', appFields.dynamicTable_id).columnDefinitions[0].name); }); @@ -202,7 +205,7 @@ describe('Form widgets', () => { let deployedApp, process; const appFields = app.form_fields; - beforeAll(async (done) => { + beforeAll(async () => { const users = new UsersActions(); alfrescoJsApi = new AlfrescoApi({ @@ -223,36 +226,37 @@ describe('Form widgets', () => { }); process = await appsActions.startProcess(alfrescoJsApi, appModel, app.processName); await loginPage.loginToProcessServicesUsingUserModel(processUserModel); - done(); + }); - beforeEach(async() => { + beforeEach(async () => { const urlToNavigateTo = `${browser.params.testConfig.adf.url}/activiti/apps/${deployedApp.id}/tasks/`; await BrowserActions.getUrl(urlToNavigateTo); - taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); - taskPage.formFields().checkFormIsDisplayed(); + await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); + await taskPage.formFields().checkFormIsDisplayed(); }); - afterAll(async (done) => { + afterAll(async () => { await alfrescoJsApi.activiti.processApi.deleteProcessInstance(process.id); await alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); await alfrescoJsApi.activiti.adminTenantsApi.deleteTenant(processUserModel.tenantId); - done(); + }); - it('[C260405] Value fields configured with process variables', () => { - taskPage.formFields().checkFormIsDisplayed(); - expect(taskPage.taskDetails().getTitle()).toEqual('Activities'); + it('[C260405] Value fields configured with process variables', async () => { + await taskPage.formFields().checkFormIsDisplayed(); + await expect(await taskPage.taskDetails().getTitle()).toEqual('Activities'); - taskPage.formFields().setValueInInputById('label', 'value 1').completeForm(); + await taskPage.formFields().setValueInInputById('label', 'value 1'); + await taskPage.formFields().completeForm(); /* cspell:disable-next-line */ - taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.COMPLETED_TASKS); + await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.COMPLETED_TASKS); - expect(widget.displayTextWidget().getFieldText(appFields.displayText_id)) + await expect(await widget.displayTextWidget().getFieldText(appFields.displayText_id)) .toContain('value 1'); - expect(widget.textWidget().getFieldValue(appFields.text_id)) + await expect(await widget.textWidget().getFieldValue(appFields.text_id)) .toEqual('value 1'); - expect(widget.displayValueWidget().getFieldValue(appFields.displayValue_id)) + await expect(await widget.displayValueWidget().getFieldValue(appFields.displayValue_id)) .toEqual('value 1'); }); }); diff --git a/e2e/process-services/pagination-processlist-addingProcesses.e2e.ts b/e2e/process-services/pagination-processlist-addingProcesses.e2e.ts index 12837df662..eb559a0aa1 100644 --- a/e2e/process-services/pagination-processlist-addingProcesses.e2e.ts +++ b/e2e/process-services/pagination-processlist-addingProcesses.e2e.ts @@ -48,7 +48,7 @@ describe('Process List - Pagination when adding processes', () => { const apps = new AppsActions(); let resultApp; - beforeAll(async (done) => { + beforeAll(async () => { const users = new UsersActions(); this.alfrescoJsApi = new AlfrescoApi({ @@ -70,9 +70,8 @@ describe('Process List - Pagination when adding processes', () => { await loginPage.loginToProcessServicesUsingUserModel(processUserModel); - await new NavigationBarPage().navigateToProcessServicesPage().goToTaskApp().clickProcessButton(); + await (await (await new NavigationBarPage().navigateToProcessServicesPage()).goToTaskApp()).clickProcessButton(); - done(); }); it('[C261046] Should keep Items per page after adding processes', async () => { @@ -81,34 +80,32 @@ describe('Process List - Pagination when adding processes', () => { totalPages = 2; page = 1; - paginationPage.selectItemsPerPage(itemsPerPage.fifteen); - processDetailsPage.checkProcessTitleIsDisplayed(); - processFiltersPage.waitForTableBody(); + await paginationPage.selectItemsPerPage(itemsPerPage.fifteen); + await processDetailsPage.checkProcessTitleIsDisplayed(); + await processFiltersPage.waitForTableBody(); - expect(paginationPage.getCurrentPage()).toEqual('Page ' + page); - expect(paginationPage.getTotalPages()).toEqual('of ' + totalPages); - expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.fifteen); - expect(paginationPage.getPaginationRange()).toEqual('Showing 1-' + itemsPerPage.fifteenValue * page + ' of ' + (nrOfProcesses - 5)); - expect(processFiltersPage.numberOfProcessRows()).toBe(itemsPerPage.fifteenValue); - paginationPage.checkNextPageButtonIsEnabled(); - paginationPage.checkPreviousPageButtonIsDisabled(); + await expect(await paginationPage.getCurrentPage()).toEqual('Page ' + page); + await expect(await paginationPage.getTotalPages()).toEqual('of ' + totalPages); + await expect(await paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.fifteen); + await expect(await paginationPage.getPaginationRange()).toEqual('Showing 1-' + itemsPerPage.fifteenValue * page + ' of ' + (nrOfProcesses - 5)); + await expect(await processFiltersPage.numberOfProcessRows()).toBe(itemsPerPage.fifteenValue); + await paginationPage.checkNextPageButtonIsEnabled(); + await paginationPage.checkPreviousPageButtonIsDisabled(); - browser.controlFlow().execute(async () => { - for (i; i < nrOfProcesses; i++) { - await apps.startProcess(this.alfrescoJsApi, resultApp); - } - }); + for (i; i < nrOfProcesses; i++) { + await apps.startProcess(this.alfrescoJsApi, resultApp); + } page++; - paginationPage.clickOnNextPage(); - processDetailsPage.checkProcessTitleIsDisplayed(); - processFiltersPage.waitForTableBody(); - expect(paginationPage.getCurrentPage()).toEqual('Page ' + page); - expect(paginationPage.getTotalPages()).toEqual('of ' + totalPages); - expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.fifteen); - expect(paginationPage.getPaginationRange()).toEqual('Showing 16-' + nrOfProcesses + ' of ' + nrOfProcesses); - expect(processFiltersPage.numberOfProcessRows()).toBe(nrOfProcesses - itemsPerPage.fifteenValue); - paginationPage.checkNextPageButtonIsDisabled(); - paginationPage.checkPreviousPageButtonIsEnabled(); + await paginationPage.clickOnNextPage(); + await processDetailsPage.checkProcessTitleIsDisplayed(); + await processFiltersPage.waitForTableBody(); + await expect(await paginationPage.getCurrentPage()).toEqual('Page ' + page); + await expect(await paginationPage.getTotalPages()).toEqual('of ' + totalPages); + await expect(await paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.fifteen); + await expect(await paginationPage.getPaginationRange()).toEqual('Showing 16-' + nrOfProcesses + ' of ' + nrOfProcesses); + await expect(await processFiltersPage.numberOfProcessRows()).toBe(nrOfProcesses - itemsPerPage.fifteenValue); + await paginationPage.checkNextPageButtonIsDisabled(); + await paginationPage.checkPreviousPageButtonIsEnabled(); }); }); diff --git a/e2e/process-services/pagination-tasklist-addingTasks.e2e.ts b/e2e/process-services/pagination-tasklist-addingTasks.e2e.ts index 0d3d2f09b9..829ddbb7e8 100644 --- a/e2e/process-services/pagination-tasklist-addingTasks.e2e.ts +++ b/e2e/process-services/pagination-tasklist-addingTasks.e2e.ts @@ -50,7 +50,7 @@ describe('Items per page set to 15 and adding of tasks', () => { fifteenValue: 15 }; - beforeAll(async (done) => { + beforeAll(async () => { const users = new UsersActions(); this.alfrescoJsApi = new AlfrescoApi({ @@ -72,34 +72,32 @@ describe('Items per page set to 15 and adding of tasks', () => { await loginPage.loginToProcessServicesUsingUserModel(processUserModel); - done(); }); - it('[C260306] Items per page set to 15 and adding of tasks', () => { - new NavigationBarPage().navigateToProcessServicesPage().goToTaskApp(); - taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.INV_TASKS); - paginationPage.selectItemsPerPage(itemsPerPage.fifteen); - expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.fifteen); - expect(paginationPage.getCurrentPage()).toEqual('Page ' + currentPage); - expect(paginationPage.getTotalPages()).toEqual('of ' + totalPages); - expect(paginationPage.getPaginationRange()).toEqual('Showing 1-' + itemsPerPage.fifteenValue + ' of ' + (nrOfTasks - 5)); - expect(taskPage.tasksListPage().getDataTable().numberOfRows()).toBe(itemsPerPage.fifteenValue); + it('[C260306] Items per page set to 15 and adding of tasks', async () => { + await (await new NavigationBarPage().navigateToProcessServicesPage()).goToTaskApp(); - browser.controlFlow().execute(async () => { - for (i; i < nrOfTasks; i++) { - await apps.startProcess(this.alfrescoJsApi, resultApp); - } - }); + await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.INV_TASKS); + await paginationPage.selectItemsPerPage(itemsPerPage.fifteen); + await expect(await paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.fifteen); + await expect(await paginationPage.getCurrentPage()).toEqual('Page ' + currentPage); + await expect(await paginationPage.getTotalPages()).toEqual('of ' + totalPages); + await expect(await paginationPage.getPaginationRange()).toEqual('Showing 1-' + itemsPerPage.fifteenValue + ' of ' + (nrOfTasks - 5)); + await expect(await taskPage.tasksListPage().getDataTable().numberOfRows()).toBe(itemsPerPage.fifteenValue); + + for (i; i < nrOfTasks; i++) { + await apps.startProcess(this.alfrescoJsApi, resultApp); + } currentPage++; - paginationPage.clickOnNextPage(); - expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.fifteen); - expect(paginationPage.getCurrentPage()).toEqual('Page ' + currentPage); - expect(paginationPage.getTotalPages()).toEqual('of ' + totalPages); - expect(paginationPage.getPaginationRange()).toEqual('Showing 16-' + nrOfTasks + ' of ' + nrOfTasks); - expect(taskPage.tasksListPage().getDataTable().numberOfRows()).toBe(nrOfTasks - itemsPerPage.fifteenValue); - paginationPage.checkNextPageButtonIsDisabled(); - paginationPage.checkPreviousPageButtonIsEnabled(); + await paginationPage.clickOnNextPage(); + await expect(await paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.fifteen); + await expect(await paginationPage.getCurrentPage()).toEqual('Page ' + currentPage); + await expect(await paginationPage.getTotalPages()).toEqual('of ' + totalPages); + await expect(await paginationPage.getPaginationRange()).toEqual('Showing 16-' + nrOfTasks + ' of ' + nrOfTasks); + await expect(await taskPage.tasksListPage().getDataTable().numberOfRows()).toBe(nrOfTasks - itemsPerPage.fifteenValue); + await paginationPage.checkNextPageButtonIsDisabled(); + await paginationPage.checkPreviousPageButtonIsEnabled(); }); }); diff --git a/e2e/process-services/people-component.e2e.ts b/e2e/process-services/people-component.e2e.ts index 4bd549dc53..929a6e4e19 100644 --- a/e2e/process-services/people-component.e2e.ts +++ b/e2e/process-services/people-component.e2e.ts @@ -44,7 +44,7 @@ describe('People component', () => { const tasks = ['no people involved task', 'remove people task', 'can not complete task', 'multiple users', 'completed filter']; - beforeAll(async (done) => { + beforeAll(async () => { const users = new UsersActions(); this.alfrescoJsApi = new AlfrescoApi({ @@ -75,151 +75,166 @@ describe('People component', () => { await this.alfrescoJsApi.activiti.taskApi.createNewTask({ name: tasks[3] }); await this.alfrescoJsApi.activiti.taskApi.createNewTask({ name: tasks[4] }); - done(); }); - beforeEach(async (done) => { + beforeEach(async () => { await loginPage.loginToProcessServicesUsingUserModel(processUserModel); - navigationBarPage.navigateToProcessServicesPage(); - processServices.goToTaskApp().clickTasksButton(); - taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); - done(); + await navigationBarPage.navigateToProcessServicesPage(); + await (await processServices.goToTaskApp()).clickTasksButton(); + await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); + }); - it('[C279989] Should no people be involved when no user is typed', () => { - taskPage.tasksListPage().checkContentIsDisplayed(tasks[0]); - taskPage.tasksListPage().selectRow(tasks[0]); + it('[C279989] Should no people be involved when no user is typed', async () => { + await taskPage.tasksListPage().checkContentIsDisplayed(tasks[0]); + await taskPage.tasksListPage().selectRow(tasks[0]); - taskPage.taskDetails().clickInvolvePeopleButton(); - taskPage.taskDetails().clickAddInvolvedUserButton(); - taskPage.taskDetails().checkNoPeopleIsInvolved(); + await taskPage.taskDetails().clickInvolvePeopleButton(); + await taskPage.taskDetails().clickAddInvolvedUserButton(); + await taskPage.taskDetails().checkNoPeopleIsInvolved(); }); - it('[C279990] Should no people be involved when clicking on Cancel button', () => { - taskPage.tasksListPage().checkContentIsDisplayed(tasks[0]); - taskPage.tasksListPage().selectRow(tasks[0]); + it('[C279990] Should no people be involved when clicking on Cancel button', async () => { + await taskPage.tasksListPage().checkContentIsDisplayed(tasks[0]); + await taskPage.tasksListPage().selectRow(tasks[0]); - taskPage.taskDetails().clickInvolvePeopleButton() - .typeUser(assigneeUserModel.firstName + ' ' + assigneeUserModel.lastName) - .selectUserToInvolve(assigneeUserModel.firstName + ' ' + assigneeUserModel.lastName) - .checkUserIsSelected(assigneeUserModel.firstName + ' ' + assigneeUserModel.lastName); - taskPage.taskDetails().clickCancelInvolvePeopleButton(); - taskPage.taskDetails().checkNoPeopleIsInvolved(); + const taskDetails = await taskPage.taskDetails(); + + await taskDetails.clickInvolvePeopleButton(); + await taskDetails.typeUser(assigneeUserModel.firstName + ' ' + assigneeUserModel.lastName); + await taskDetails.selectUserToInvolve(assigneeUserModel.firstName + ' ' + assigneeUserModel.lastName); + await taskDetails.checkUserIsSelected(assigneeUserModel.firstName + ' ' + assigneeUserModel.lastName); + + await taskPage.taskDetails().clickCancelInvolvePeopleButton(); + await taskPage.taskDetails().checkNoPeopleIsInvolved(); }); - it('[C261029] Should People dialog be displayed when clicking on add people button', () => { - taskPage.tasksListPage().checkContentIsDisplayed(tasks[0]); - taskPage.tasksListPage().selectRow(tasks[0]); + it('[C261029] Should People dialog be displayed when clicking on add people button', async () => { + await taskPage.tasksListPage().checkContentIsDisplayed(tasks[0]); + await taskPage.tasksListPage().selectRow(tasks[0]); - taskPage.taskDetails().clickInvolvePeopleButton(); - expect(taskPage.taskDetails().getInvolvePeopleHeader()).toEqual('Add people and groups'); - expect(taskPage.taskDetails().getInvolvePeoplePlaceholder()).toEqual('Search user'); - taskPage.taskDetails().checkAddPeopleButtonIsEnabled().checkCancelButtonIsEnabled(); - taskPage.taskDetails().clickCancelInvolvePeopleButton(); + const taskDetails = await taskPage.taskDetails(); + + await taskDetails.clickInvolvePeopleButton(); + await expect(await taskPage.taskDetails().getInvolvePeopleHeader()).toEqual('Add people and groups'); + await expect(await taskPage.taskDetails().getInvolvePeoplePlaceholder()).toEqual('Search user'); + + await taskDetails.checkAddPeopleButtonIsEnabled(); + await taskDetails.checkCancelButtonIsEnabled(); + await taskDetails.clickCancelInvolvePeopleButton(); }); - it('[C279991] Should not be able to involve a user when is the creator of the task', () => { - taskPage.tasksListPage().checkContentIsDisplayed(tasks[0]); - taskPage.tasksListPage().selectRow(tasks[0]); + it('[C279991] Should not be able to involve a user when is the creator of the task', async () => { + await taskPage.tasksListPage().checkContentIsDisplayed(tasks[0]); + await taskPage.tasksListPage().selectRow(tasks[0]); - taskPage.taskDetails().clickInvolvePeopleButton() - .typeUser(processUserModel.firstName + ' ' + processUserModel.lastName) - .noUserIsDisplayedInSearchInvolvePeople(processUserModel.firstName + ' ' + processUserModel.lastName); - taskPage.taskDetails().clickAddInvolvedUserButton(); - taskPage.taskDetails().checkNoPeopleIsInvolved(); + const taskDetails = await taskPage.taskDetails(); + await taskDetails.clickInvolvePeopleButton(); + await taskDetails.typeUser(processUserModel.firstName + ' ' + processUserModel.lastName); + await taskDetails.noUserIsDisplayedInSearchInvolvePeople(processUserModel.firstName + ' ' + processUserModel.lastName); + await taskPage.taskDetails().clickAddInvolvedUserButton(); + await taskPage.taskDetails().checkNoPeopleIsInvolved(); }); - it('[C261030] Should involved user be removed when clicking on remove button', () => { - taskPage.tasksListPage().checkContentIsDisplayed(tasks[0]); - taskPage.tasksListPage().selectRow(tasks[0]); + it('[C261030] Should involved user be removed when clicking on remove button', async () => { + await taskPage.tasksListPage().checkContentIsDisplayed(tasks[0]); + await taskPage.tasksListPage().selectRow(tasks[0]); - taskPage.taskDetails().clickInvolvePeopleButton() - .typeUser(assigneeUserModel.firstName + ' ' + assigneeUserModel.lastName) - .selectUserToInvolve(assigneeUserModel.firstName + ' ' + assigneeUserModel.lastName) - .checkUserIsSelected(assigneeUserModel.firstName + ' ' + assigneeUserModel.lastName); - taskPage.taskDetails().clickAddInvolvedUserButton(); + const taskDetails = await taskPage.taskDetails(); + await taskDetails.clickInvolvePeopleButton(); + await taskDetails.typeUser(assigneeUserModel.firstName + ' ' + assigneeUserModel.lastName); + await taskDetails.selectUserToInvolve(assigneeUserModel.firstName + ' ' + assigneeUserModel.lastName); + await taskDetails.checkUserIsSelected(assigneeUserModel.firstName + ' ' + assigneeUserModel.lastName); - expect(taskPage.taskDetails().getInvolvedUserEmail(assigneeUserModel.firstName + ' ' + assigneeUserModel.lastName)) + await taskPage.taskDetails().clickAddInvolvedUserButton(); + + await expect(await taskPage.taskDetails().getInvolvedUserEmail(assigneeUserModel.firstName + ' ' + assigneeUserModel.lastName)) .toEqual(assigneeUserModel.email); - taskPage.taskDetails().removeInvolvedUser(assigneeUserModel.firstName + ' ' + assigneeUserModel.lastName); - taskPage.taskDetails().checkNoPeopleIsInvolved(); + await taskPage.taskDetails().removeInvolvedUser(assigneeUserModel.firstName + ' ' + assigneeUserModel.lastName); + await taskPage.taskDetails().checkNoPeopleIsInvolved(); }); it('[C280013] Should not be able to complete a task by a involved user', async () => { - taskPage.tasksListPage().checkContentIsDisplayed(tasks[1]); - taskPage.tasksListPage().selectRow(tasks[1]); + await taskPage.tasksListPage().checkContentIsDisplayed(tasks[1]); + await taskPage.tasksListPage().selectRow(tasks[1]); - taskPage.taskDetails().clickInvolvePeopleButton() - .typeUser(assigneeUserModel.firstName + ' ' + assigneeUserModel.lastName) - .selectUserToInvolve(assigneeUserModel.firstName + ' ' + assigneeUserModel.lastName) - .checkUserIsSelected(assigneeUserModel.firstName + ' ' + assigneeUserModel.lastName); - taskPage.taskDetails().clickAddInvolvedUserButton(); + const taskDetails = await taskPage.taskDetails(); + await taskDetails.clickInvolvePeopleButton(); + await taskDetails.typeUser(assigneeUserModel.firstName + ' ' + assigneeUserModel.lastName); + await taskDetails.selectUserToInvolve(assigneeUserModel.firstName + ' ' + assigneeUserModel.lastName); + await taskDetails.checkUserIsSelected(assigneeUserModel.firstName + ' ' + assigneeUserModel.lastName); + await taskPage.taskDetails().clickAddInvolvedUserButton(); - expect(taskPage.taskDetails().getInvolvedUserEmail(assigneeUserModel.firstName + ' ' + assigneeUserModel.lastName)) + await expect(await taskPage.taskDetails().getInvolvedUserEmail(assigneeUserModel.firstName + ' ' + assigneeUserModel.lastName)) .toEqual(assigneeUserModel.email); await loginPage.loginToProcessServicesUsingUserModel(assigneeUserModel); - navigationBarPage.navigateToProcessServicesPage().goToTaskApp().clickTasksButton(); - taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.INV_TASKS); - taskPage.tasksListPage().checkContentIsDisplayed(tasks[1]); - taskPage.tasksListPage().selectRow(tasks[1]); + await (await (await navigationBarPage.navigateToProcessServicesPage()).goToTaskApp()).clickTasksButton(); + await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.INV_TASKS); + await taskPage.tasksListPage().checkContentIsDisplayed(tasks[1]); + await taskPage.tasksListPage().selectRow(tasks[1]); - taskPage.completeTaskNoFormNotDisplayed(); + await taskPage.completeTaskNoFormNotDisplayed(); }); - it('[C261031] Should be able to involve multiple users to a task', () => { - taskPage.tasksListPage().checkContentIsDisplayed(tasks[2]); - taskPage.tasksListPage().selectRow(tasks[2]); + it('[C261031] Should be able to involve multiple users to a task', async () => { + await taskPage.tasksListPage().checkContentIsDisplayed(tasks[2]); + await taskPage.tasksListPage().selectRow(tasks[2]); - taskPage.taskDetails().clickInvolvePeopleButton() - .typeUser(assigneeUserModel.firstName + ' ' + assigneeUserModel.lastName) - .selectUserToInvolve(assigneeUserModel.firstName + ' ' + assigneeUserModel.lastName) - .checkUserIsSelected(assigneeUserModel.firstName + ' ' + assigneeUserModel.lastName); - taskPage.taskDetails().clickAddInvolvedUserButton(); + const taskDetails = await taskPage.taskDetails(); + await taskPage.taskDetails().clickInvolvePeopleButton(); + await taskDetails.typeUser(assigneeUserModel.firstName + ' ' + assigneeUserModel.lastName); + await taskDetails.selectUserToInvolve(assigneeUserModel.firstName + ' ' + assigneeUserModel.lastName); + await taskDetails.checkUserIsSelected(assigneeUserModel.firstName + ' ' + assigneeUserModel.lastName); + await taskPage.taskDetails().clickAddInvolvedUserButton(); - expect(taskPage.taskDetails().getInvolvedUserEmail(assigneeUserModel.firstName + ' ' + assigneeUserModel.lastName)) + await expect(await taskPage.taskDetails().getInvolvedUserEmail(assigneeUserModel.firstName + ' ' + assigneeUserModel.lastName)) .toEqual(assigneeUserModel.email); - expect(taskPage.taskDetails().getInvolvedPeopleTitle()).toEqual(peopleTitle + '(1)'); + await expect(await taskPage.taskDetails().getInvolvedPeopleTitle()).toEqual(peopleTitle + '(1)'); - taskPage.taskDetails().clickInvolvePeopleButton() - .typeUser(secondAssigneeUserModel.firstName + ' ' + secondAssigneeUserModel.lastName) - .selectUserToInvolve(secondAssigneeUserModel.firstName + ' ' + secondAssigneeUserModel.lastName) - .checkUserIsSelected(secondAssigneeUserModel.firstName + ' ' + secondAssigneeUserModel.lastName); - taskPage.taskDetails().clickAddInvolvedUserButton(); + const taskDetails2 = await taskPage.taskDetails(); + await taskDetails2.clickInvolvePeopleButton(); + await taskDetails2.typeUser(secondAssigneeUserModel.firstName + ' ' + secondAssigneeUserModel.lastName); + await taskDetails2.selectUserToInvolve(secondAssigneeUserModel.firstName + ' ' + secondAssigneeUserModel.lastName); + await taskDetails2.checkUserIsSelected(secondAssigneeUserModel.firstName + ' ' + secondAssigneeUserModel.lastName); - expect(taskPage.taskDetails().getInvolvedUserEmail(secondAssigneeUserModel.firstName + ' ' + secondAssigneeUserModel.lastName)) + await taskPage.taskDetails().clickAddInvolvedUserButton(); + + await expect(await taskPage.taskDetails().getInvolvedUserEmail(secondAssigneeUserModel.firstName + ' ' + secondAssigneeUserModel.lastName)) .toEqual(secondAssigneeUserModel.email); - expect(taskPage.taskDetails().getInvolvedPeopleTitle()).toEqual(peopleTitle + '(2)'); + await expect(await taskPage.taskDetails().getInvolvedPeopleTitle()).toEqual(peopleTitle + '(2)'); }); it('[C280014] Should involved user see the task in completed filters when the task is completed', async () => { - taskPage.tasksListPage().checkContentIsDisplayed(tasks[3]); - taskPage.tasksListPage().selectRow(tasks[3]); + await taskPage.tasksListPage().checkContentIsDisplayed(tasks[3]); + await taskPage.tasksListPage().selectRow(tasks[3]); - taskPage.taskDetails().clickInvolvePeopleButton() - .typeUser(assigneeUserModel.firstName + ' ' + assigneeUserModel.lastName) - .selectUserToInvolve(assigneeUserModel.firstName + ' ' + assigneeUserModel.lastName) - .checkUserIsSelected(assigneeUserModel.firstName + ' ' + assigneeUserModel.lastName); - taskPage.taskDetails().clickAddInvolvedUserButton(); + const taskDetails = await taskPage.taskDetails(); + await taskDetails.clickInvolvePeopleButton(); + await taskDetails.typeUser(assigneeUserModel.firstName + ' ' + assigneeUserModel.lastName); + await taskDetails.selectUserToInvolve(assigneeUserModel.firstName + ' ' + assigneeUserModel.lastName); + await taskDetails.checkUserIsSelected(assigneeUserModel.firstName + ' ' + assigneeUserModel.lastName); - expect(taskPage.taskDetails().getInvolvedUserEmail(assigneeUserModel.firstName + ' ' + assigneeUserModel.lastName)) + await taskPage.taskDetails().clickAddInvolvedUserButton(); + + await expect(await taskPage.taskDetails().getInvolvedUserEmail(assigneeUserModel.firstName + ' ' + assigneeUserModel.lastName)) .toEqual(assigneeUserModel.email); - taskPage.completeTaskNoForm(); - taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.COMPLETED_TASKS); - taskPage.tasksListPage().selectRow(tasks[3]); - expect(taskPage.taskDetails().getInvolvedUserEmail(assigneeUserModel.firstName + ' ' + assigneeUserModel.lastName)) + await taskPage.completeTaskNoForm(); + await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.COMPLETED_TASKS); + await taskPage.tasksListPage().selectRow(tasks[3]); + await expect(await taskPage.taskDetails().getInvolvedUserEmail(assigneeUserModel.firstName + ' ' + assigneeUserModel.lastName)) .toEqual(assigneeUserModel.email); await loginPage.loginToProcessServicesUsingUserModel(assigneeUserModel); - navigationBarPage.navigateToProcessServicesPage().goToTaskApp().clickTasksButton(); - taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.COMPLETED_TASKS); - taskPage.tasksListPage().checkContentIsDisplayed(tasks[3]); - taskPage.tasksListPage().selectRow(tasks[3]); + await (await (await navigationBarPage.navigateToProcessServicesPage()).goToTaskApp()).clickTasksButton(); + await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.COMPLETED_TASKS); + await taskPage.tasksListPage().checkContentIsDisplayed(tasks[3]); + await taskPage.tasksListPage().selectRow(tasks[3]); - taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.INV_TASKS); - taskPage.tasksListPage().checkContentIsNotDisplayed(tasks[3]); + await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.INV_TASKS); + await taskPage.tasksListPage().checkContentIsNotDisplayed(tasks[3]); }); }); diff --git a/e2e/process-services/process-attachmentList-actionMenu.e2e.ts b/e2e/process-services/process-attachmentList-actionMenu.e2e.ts index 9c3df57f3e..ee57e7adc8 100644 --- a/e2e/process-services/process-attachmentList-actionMenu.e2e.ts +++ b/e2e/process-services/process-attachmentList-actionMenu.e2e.ts @@ -15,7 +15,7 @@ * limitations under the License. */ -import { LoginPage } from '@alfresco/adf-testing'; +import { LoginPage, FileBrowserUtil } from '@alfresco/adf-testing'; import { ProcessFiltersPage } from '../pages/adf/process-services/processFiltersPage'; import { ProcessDetailsPage } from '../pages/adf/process-services/processDetailsPage'; import { AttachmentListPage } from '../pages/adf/process-services/attachmentListPage'; @@ -23,9 +23,6 @@ import { ViewerPage } from '../pages/adf/viewerPage'; import { NavigationBarPage } from '../pages/adf/navigationBarPage'; import resources = require('../util/resources'); -import { Util } from '../util/util'; - -import path = require('path'); import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; import { UsersActions } from '../actions/users.actions'; @@ -47,7 +44,7 @@ describe('Attachment list action menu for processes', () => { name: resources.Files.ADF_DOCUMENTS.PNG.file_name }); - const downloadedPngFile = path.join(__dirname, 'downloads', pngFile.name); + const downloadedPngFile = pngFile.name; let tenantId, appId; const processName = { active: 'Active Process', @@ -57,7 +54,7 @@ describe('Attachment list action menu for processes', () => { dragDrop: 'Drag and Drop' }; - beforeAll(async (done) => { + beforeAll(async () => { const apps = new AppsActions(); const users = new UsersActions(); @@ -85,107 +82,106 @@ describe('Attachment list action menu for processes', () => { await loginPage.loginToProcessServicesUsingUserModel(user); - done(); }); - afterAll(async (done) => { + afterAll(async () => { await this.alfrescoJsApi.activiti.modelsApi.deleteModel(appId); await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); await this.alfrescoJsApi.activiti.adminTenantsApi.deleteTenant(tenantId); - done(); + }); - it('[C260228] Should be able to access options of a file attached to an active process', () => { - navigationBarPage.navigateToProcessServicesPage().goToApp(app.title).clickProcessButton(); + it('[C260228] Should be able to access options of a file attached to an active process', async () => { + await (await (await navigationBarPage.navigateToProcessServicesPage()).goToApp(app.title)).clickProcessButton(); - processFiltersPage.selectFromProcessList(processName.active); + await processFiltersPage.selectFromProcessList(processName.active); - processDetailsPage.checkProcessTitleIsDisplayed(); + await processDetailsPage.checkProcessTitleIsDisplayed(); - attachmentListPage.clickAttachFileButton(pngFile.location); - attachmentListPage.viewFile(pngFile.name); + await attachmentListPage.clickAttachFileButton(pngFile.location); + await attachmentListPage.viewFile(pngFile.name); - viewerPage.checkFileNameIsDisplayed(pngFile.name); - viewerPage.clickCloseButton(); + await viewerPage.checkFileNameIsDisplayed(pngFile.name); + await viewerPage.clickCloseButton(); - processFiltersPage.clickRunningFilterButton(); - processFiltersPage.selectFromProcessList(processName.active); + await processFiltersPage.clickRunningFilterButton(); + await processFiltersPage.selectFromProcessList(processName.active); - attachmentListPage.doubleClickFile(pngFile.name); + await attachmentListPage.doubleClickFile(pngFile.name); - viewerPage.checkFileNameIsDisplayed(pngFile.name); - viewerPage.clickCloseButton(); + await viewerPage.checkFileNameIsDisplayed(pngFile.name); + await viewerPage.clickCloseButton(); - processFiltersPage.clickRunningFilterButton(); - processFiltersPage.selectFromProcessList(processName.active); + await processFiltersPage.clickRunningFilterButton(); + await processFiltersPage.selectFromProcessList(processName.active); - attachmentListPage.downloadFile(pngFile.name); + await attachmentListPage.downloadFile(pngFile.name); - browser.driver.sleep(1000); + await browser.sleep(1000); - expect(Util.fileExists(downloadedPngFile, 30)).toBe(true); + await expect(await FileBrowserUtil.isFileDownloaded(downloadedPngFile)).toBe(true); - attachmentListPage.removeFile(pngFile.name); - attachmentListPage.checkFileIsRemoved(pngFile.name); + await attachmentListPage.removeFile(pngFile.name); + await attachmentListPage.checkFileIsRemoved(pngFile.name); }); - it('[C279886] Should be able to access options of a file attached to a completed process', () => { - navigationBarPage.navigateToProcessServicesPage().goToApp(app.title).clickProcessButton(); + it('[C279886] Should be able to access options of a file attached to a completed process', async () => { + await (await (await navigationBarPage.navigateToProcessServicesPage()).goToApp(app.title)).clickProcessButton(); - processFiltersPage.clickRunningFilterButton(); - processFiltersPage.selectFromProcessList(processName.completed); + await processFiltersPage.clickRunningFilterButton(); + await processFiltersPage.selectFromProcessList(processName.completed); - processDetailsPage.checkProcessTitleIsDisplayed(); + await processDetailsPage.checkProcessTitleIsDisplayed(); - attachmentListPage.clickAttachFileButton(pngFile.location); + await attachmentListPage.clickAttachFileButton(pngFile.location); - processDetailsPage.clickCancelProcessButton(); - processFiltersPage.clickCompletedFilterButton(); + await processDetailsPage.clickCancelProcessButton(); + await processFiltersPage.clickCompletedFilterButton(); - processDetailsPage.checkProcessTitleIsDisplayed(); + await processDetailsPage.checkProcessTitleIsDisplayed(); - attachmentListPage.checkAttachFileButtonIsNotDisplayed(); - attachmentListPage.viewFile(pngFile.name); + await attachmentListPage.checkAttachFileButtonIsNotDisplayed(); + await attachmentListPage.viewFile(pngFile.name); - viewerPage.checkFileNameIsDisplayed(pngFile.name); - viewerPage.clickCloseButton(); + await viewerPage.checkFileNameIsDisplayed(pngFile.name); + await viewerPage.clickCloseButton(); - processFiltersPage.clickCompletedFilterButton(); + await processFiltersPage.clickCompletedFilterButton(); - attachmentListPage.downloadFile(pngFile.name); + await attachmentListPage.downloadFile(pngFile.name); - browser.driver.sleep(1000); + await browser.sleep(1000); - expect(Util.fileExists(downloadedPngFile, 30)).toBe(true); + await expect(await FileBrowserUtil.isFileDownloaded(downloadedPngFile)).toBe(true); - attachmentListPage.removeFile(pngFile.name); - attachmentListPage.checkFileIsRemoved(pngFile.name); + await attachmentListPage.removeFile(pngFile.name); + await attachmentListPage.checkFileIsRemoved(pngFile.name); }); - it('[C277296] Should allow upload file when clicking on \'add\' icon', () => { - navigationBarPage.navigateToProcessServicesPage().goToTaskApp().clickProcessButton(); + it('[C277296] Should allow upload file when clicking on \'add\' icon', async () => { + await (await (await navigationBarPage.navigateToProcessServicesPage()).goToTaskApp()).clickProcessButton(); - processFiltersPage.clickRunningFilterButton(); - processFiltersPage.selectFromProcessList(processName.taskApp); + await processFiltersPage.clickRunningFilterButton(); + await processFiltersPage.selectFromProcessList(processName.taskApp); - processDetailsPage.checkProcessTitleIsDisplayed(); + await processDetailsPage.checkProcessTitleIsDisplayed(); - attachmentListPage.clickAttachFileButton(pngFile.location); - attachmentListPage.checkFileIsAttached(pngFile.name); + await attachmentListPage.clickAttachFileButton(pngFile.location); + await attachmentListPage.checkFileIsAttached(pngFile.name); }); - it('[C260235] Should empty list component be displayed when no file is attached', () => { - navigationBarPage.navigateToProcessServicesPage().goToTaskApp().clickProcessButton(); + it('[C260235] Should empty list component be displayed when no file is attached', async () => { + await (await (await navigationBarPage.navigateToProcessServicesPage()).goToTaskApp()).clickProcessButton(); - processFiltersPage.clickRunningFilterButton(); - processFiltersPage.selectFromProcessList(processName.emptyList); + await processFiltersPage.clickRunningFilterButton(); + await processFiltersPage.selectFromProcessList(processName.emptyList); - attachmentListPage.checkEmptyAttachmentList(); - attachmentListPage.clickAttachFileButton(pngFile.location); - attachmentListPage.checkFileIsAttached(pngFile.name); - attachmentListPage.removeFile(pngFile.name); - attachmentListPage.checkFileIsRemoved(pngFile.name); - attachmentListPage.checkEmptyAttachmentList(); + await attachmentListPage.checkEmptyAttachmentList(); + await attachmentListPage.clickAttachFileButton(pngFile.location); + await attachmentListPage.checkFileIsAttached(pngFile.name); + await attachmentListPage.removeFile(pngFile.name); + await attachmentListPage.checkFileIsRemoved(pngFile.name); + await attachmentListPage.checkEmptyAttachmentList(); }); }); diff --git a/e2e/process-services/process-filters-component.e2e.ts b/e2e/process-services/process-filters-component.e2e.ts index 6916daf542..52a223caf8 100644 --- a/e2e/process-services/process-filters-component.e2e.ts +++ b/e2e/process-services/process-filters-component.e2e.ts @@ -56,7 +56,7 @@ describe('Process Filters Test', () => { completed: 'Completed' }; - beforeAll(async (done) => { + beforeAll(async () => { const apps = new AppsActions(); const users = new UsersActions(); @@ -75,67 +75,66 @@ describe('Process Filters Test', () => { await loginPage.loginToProcessServicesUsingUserModel(user); - done(); }); beforeEach(async () => { - navigationBarPage.navigateToProcessServicesPage(); - processServicesPage.checkApsContainer(); + await navigationBarPage.navigateToProcessServicesPage(); + await processServicesPage.checkApsContainer(); }); - it('[C260387] Should the running process be displayed when clicking on Running filter', () => { - processServicesPage.goToApp(app.title); - processServiceTabBarPage.clickProcessButton(); - processListPage.checkProcessListIsDisplayed(); + it('[C260387] Should the running process be displayed when clicking on Running filter', async () => { + await processServicesPage.goToApp(app.title); + await processServiceTabBarPage.clickProcessButton(); + await processListPage.checkProcessListIsDisplayed(); - processFiltersPage.clickCreateProcessButton(); - processFiltersPage.clickNewProcessDropdown(); + await processFiltersPage.clickCreateProcessButton(); + await processFiltersPage.clickNewProcessDropdown(); - startProcessPage.enterProcessName(processTitle.completed); - startProcessPage.selectFromProcessDropdown(app.process_title); - startProcessPage.clickFormStartProcessButton(); + await startProcessPage.enterProcessName(processTitle.completed); + await startProcessPage.selectFromProcessDropdown(app.process_title); + await startProcessPage.clickFormStartProcessButton(); - processDetailsPage.clickCancelProcessButton(); - navigationBarPage.navigateToProcessServicesPage(); + await processDetailsPage.clickCancelProcessButton(); + await navigationBarPage.navigateToProcessServicesPage(); - processServicesPage.goToApp(app.title); + await processServicesPage.goToApp(app.title); - processServiceTabBarPage.clickProcessButton(); + await processServiceTabBarPage.clickProcessButton(); - processFiltersPage.clickCreateProcessButton(); - processFiltersPage.clickNewProcessDropdown(); + await processFiltersPage.clickCreateProcessButton(); + await processFiltersPage.clickNewProcessDropdown(); - startProcessPage.enterProcessName(processTitle.running); - startProcessPage.selectFromProcessDropdown(app.process_title); - startProcessPage.clickFormStartProcessButton(); + await startProcessPage.enterProcessName(processTitle.running); + await startProcessPage.selectFromProcessDropdown(app.process_title); + await startProcessPage.clickFormStartProcessButton(); - processFiltersPage.checkFilterIsHighlighted(processFilter.running); - processFiltersPage.selectFromProcessList(processTitle.running); + await processFiltersPage.checkFilterIsHighlighted(processFilter.running); + await processFiltersPage.selectFromProcessList(processTitle.running); - processDetailsPage.checkProcessDetailsCard(); + await processDetailsPage.checkProcessDetailsCard(); }); - it('[C280063] Should both the new created process and a completed one to be displayed when clicking on All filter', () => { - processServicesPage.goToApp(app.title); - processServiceTabBarPage.clickProcessButton(); - processListPage.checkProcessListIsDisplayed(); + it('[C280063] Should both the new created process and a completed one to be displayed when clicking on All filter', async () => { + await processServicesPage.goToApp(app.title); + await processServiceTabBarPage.clickProcessButton(); + await processListPage.checkProcessListIsDisplayed(); - processFiltersPage.clickAllFilterButton(); - processFiltersPage.checkFilterIsHighlighted(processFilter.all); - processFiltersPage.selectFromProcessList(processTitle.running); - processFiltersPage.selectFromProcessList(processTitle.completed); - processDetailsPage.checkProcessDetailsCard(); + await processFiltersPage.clickAllFilterButton(); + await processFiltersPage.checkFilterIsHighlighted(processFilter.all); + await processFiltersPage.selectFromProcessList(processTitle.running); + await processFiltersPage.selectFromProcessList(processTitle.completed); + await processDetailsPage.checkProcessDetailsCard(); }); - it('[C280064] Should the completed process be displayed when clicking on Completed filter', () => { - processServicesPage.goToApp(app.title); - processServiceTabBarPage.clickProcessButton(); - processListPage.checkProcessListIsDisplayed(); + it('[C280064] Should the completed process be displayed when clicking on Completed filter', async () => { + await processServicesPage.goToApp(app.title); + await processServiceTabBarPage.clickProcessButton(); + await processListPage.checkProcessListIsDisplayed(); - processFiltersPage.clickCompletedFilterButton(); - processFiltersPage.checkFilterIsHighlighted(processFilter.completed); - processFiltersPage.selectFromProcessList(processTitle.completed); - processDetailsPage.checkProcessDetailsCard(); + await processFiltersPage.clickCompletedFilterButton(); + await processFiltersPage.checkFilterIsHighlighted(processFilter.completed); + await processFiltersPage.selectFromProcessList(processTitle.completed); + await processDetailsPage.checkProcessDetailsCard(); }); it('[C280407] Should be able to access the filters with URL', async () => { @@ -143,30 +142,27 @@ describe('Process Filters Test', () => { const defaultFiltersNumber = 3; let deployedApp, processFilterUrl; - const taskAppFilters = await browser.controlFlow().execute(async() => { + const appDefinitions = await this.alfrescoJsApi.activiti.appsApi.getAppDefinitions(); - const appDefinitions = await this.alfrescoJsApi.activiti.appsApi.getAppDefinitions(); + deployedApp = appDefinitions.data.find((currentApp) => { - deployedApp = appDefinitions.data.find((currentApp) => { - - return currentApp.modelId === appModel.id; - }); - - processFilterUrl = browser.params.testConfig.adf.url + '/activiti/apps/' + deployedApp.id + '/processes/'; - - return this.alfrescoJsApi.activiti.userFiltersApi.getUserProcessInstanceFilters({appId: deployedApp.id}); + return currentApp.modelId === appModel.id; }); - processServicesPage.goToApp(app.title); - processServiceTabBarPage.clickProcessButton(); - processListPage.checkProcessListIsDisplayed(); + processFilterUrl = browser.params.testConfig.adf.url + '/activiti/apps/' + deployedApp.id + '/processes/'; - expect(taskAppFilters.size).toBe(defaultFiltersNumber); + const taskAppFilters = await this.alfrescoJsApi.activiti.userFiltersApi.getUserProcessInstanceFilters({ appId: deployedApp.id }); - taskAppFilters.data.forEach((filter) => { - BrowserActions.getUrl(processFilterUrl + filter.id); - processListPage.checkProcessListIsDisplayed(); - processFiltersPage.checkFilterIsHighlighted(filter.name); - }); + await processServicesPage.goToApp(app.title); + await processServiceTabBarPage.clickProcessButton(); + await processListPage.checkProcessListIsDisplayed(); + + await expect(taskAppFilters.size).toBe(defaultFiltersNumber); + + for (const filter of taskAppFilters) { + await BrowserActions.getUrl(processFilterUrl + filter.id); + await processListPage.checkProcessListIsDisplayed(); + await processFiltersPage.checkFilterIsHighlighted(filter.name); + } }); }); diff --git a/e2e/process-services/process-instance-details.e2e.ts b/e2e/process-services/process-instance-details.e2e.ts index d8f44ec9ad..ab3ae6dc6f 100644 --- a/e2e/process-services/process-instance-details.e2e.ts +++ b/e2e/process-services/process-instance-details.e2e.ts @@ -42,7 +42,7 @@ describe('Process Instance Details', () => { const app = resources.Files.SIMPLE_APP_WITH_USER_FORM; const PROCESS_DATE_FORMAT = 'mmm d, yyyy'; - beforeAll(async (done) => { + beforeAll(async () => { const apps = new AppsActions(); const users = new UsersActions(); @@ -62,30 +62,26 @@ describe('Process Instance Details', () => { await loginPage.loginToProcessServicesUsingUserModel(user); - navigationBarPage.navigateToProcessServicesPage(); - processServicesPage.checkApsContainer(); - processServicesPage.goToApp(app.title); - processServiceTabBarPage.clickProcessButton(); - processListPage.checkProcessListIsDisplayed(); + await navigationBarPage.navigateToProcessServicesPage(); + await processServicesPage.checkApsContainer(); + await processServicesPage.goToApp(app.title); + await processServiceTabBarPage.clickProcessButton(); + await processListPage.checkProcessListIsDisplayed(); process = await this.alfrescoJsApi.activiti.processApi.getProcessInstance(processModel.id); - done(); }); - afterAll(async (done) => { + afterAll(async () => { await this.alfrescoJsApi.activiti.modelsApi.deleteModel(appModel.id); - await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); - await this.alfrescoJsApi.activiti.adminTenantsApi.deleteTenant(user.tenantId); - done(); }); - it('[C307031] Should display the created date in the default format', () => { - processDetailsPage.checkDetailsAreDisplayed(); - expect(processDetailsPage.getCreated()).toEqual(dateFormat(process.started, PROCESS_DATE_FORMAT)); + it('[C307031] Should display the created date in the default format', async () => { + await processDetailsPage.checkDetailsAreDisplayed(); + await expect(await processDetailsPage.getCreated()).toEqual(dateFormat(process.started, PROCESS_DATE_FORMAT)); }); }); diff --git a/e2e/process-services/processList-component.e2e.ts b/e2e/process-services/processList-component.e2e.ts index 62b1aee1e0..3073e2796d 100644 --- a/e2e/process-services/processList-component.e2e.ts +++ b/e2e/process-services/processList-component.e2e.ts @@ -51,7 +51,7 @@ describe('Process List Test', () => { let appWithDateFieldId; let procWithDate, completedProcWithDate, completedProcWithUserWidget; - beforeAll(async (done) => { + beforeAll(async () => { const apps = new AppsActions(); const users = new UsersActions(); @@ -81,15 +81,14 @@ describe('Process List Test', () => { const procWithDateTaskId = await apps.getProcessTaskId(this.alfrescoJsApi, completedProcWithDate.id); const procWithUserWidgetTaskId = await apps.getProcessTaskId(this.alfrescoJsApi, completedProcWithUserWidget.id); - await this.alfrescoJsApi.activiti.taskApi.completeTaskForm(procWithDateTaskId, {values: {label: null }}); - await this.alfrescoJsApi.activiti.taskFormsApi.completeTaskForm(procWithUserWidgetTaskId, {values: {label: null }}); + await this.alfrescoJsApi.activiti.taskApi.completeTaskForm(procWithDateTaskId.toString(), { values: { label: null } }); + await this.alfrescoJsApi.activiti.taskFormsApi.completeTaskForm(procWithUserWidgetTaskId.toString(), { values: { label: null } }); await loginPage.loginToProcessServicesUsingUserModel(user); - done(); }); - afterAll(async (done) => { + afterAll(async () => { await this.alfrescoJsApi.activiti.modelsApi.deleteModel(appDateModel.id); await this.alfrescoJsApi.activiti.modelsApi.deleteModel(appUserWidgetModel.id); @@ -97,97 +96,95 @@ describe('Process List Test', () => { await this.alfrescoJsApi.activiti.adminTenantsApi.deleteTenant(user.tenantId); - done(); }); - beforeEach((done) => { - BrowserActions.getUrl(browser.params.testConfig.adf.url + '/process-list'); - done(); + beforeEach(async () => { + await BrowserActions.getUrl(browser.params.testConfig.adf.url + '/process-list'); + }); - it('[C286638] Should display all process by default', () => { - processListDemoPage.checkAppIdFieldIsDisplayed() - .checkProcessInstanceIdFieldIsDisplayed() - .checkProcessInstanceIdFieldIsDisplayed() - .checkSortFieldIsDisplayed() - .checkStateFieldIsDisplayed(); + it('[C286638] Should display all process by default', async () => { + await processListDemoPage.checkAppIdFieldIsDisplayed(); + await processListDemoPage.checkProcessInstanceIdFieldIsDisplayed(); + await processListDemoPage.checkProcessInstanceIdFieldIsDisplayed(); + await processListDemoPage.checkSortFieldIsDisplayed(); + await processListDemoPage.checkStateFieldIsDisplayed(); }); - it('[C282006] Should be able to filter processes with App ID', () => { - processListDemoPage.addAppId('a'); + it('[C282006] Should be able to filter processes with App ID', async () => { + await processListDemoPage.addAppId('a'); - processListDemoPage.checkErrorMessageIsDisplayed(errorMessages.appIdNumber); - processListDemoPage.clickResetButton(); + await processListDemoPage.checkErrorMessageIsDisplayed(errorMessages.appIdNumber); + await processListDemoPage.clickResetButton(); - processListDemoPage.addAppId('12345'); + await processListDemoPage.addAppId('12345'); - processListDemoPage.checkNoProcessFoundIsDisplayed(); + await processListDemoPage.checkNoProcessFoundIsDisplayed(); - processListDemoPage.addAppId(appWithDateFieldId); + await processListDemoPage.addAppId(appWithDateFieldId); - processListDemoPage.checkProcessIsDisplayed(processName.procWithDate); - processListDemoPage.checkProcessIsDisplayed(processName.completedProcWithDate); + await processListDemoPage.checkProcessIsDisplayed(processName.procWithDate); + await processListDemoPage.checkProcessIsDisplayed(processName.completedProcWithDate); - processListDemoPage.checkProcessIsNotDisplayed(processName.procWithUserWidget); - processListDemoPage.checkProcessIsNotDisplayed(processName.completedProcWithUserWidget); + await processListDemoPage.checkProcessIsNotDisplayed(processName.procWithUserWidget); + await processListDemoPage.checkProcessIsNotDisplayed(processName.completedProcWithUserWidget); }); - it('[C282015] Should be able to filter by Process Definition ID', () => { - processListDemoPage.addProcessDefinitionId(procWithDate.processDefinitionId); + it('[C282015] Should be able to filter by Process Definition ID', async () => { + await processListDemoPage.addProcessDefinitionId(procWithDate.processDefinitionId); - processListDemoPage.checkProcessIsDisplayed(processName.procWithDate); - processListDemoPage.checkProcessIsDisplayed(processName.completedProcWithDate); + await processListDemoPage.checkProcessIsDisplayed(processName.procWithDate); + await processListDemoPage.checkProcessIsDisplayed(processName.completedProcWithDate); - processListDemoPage.checkProcessIsNotDisplayed(processName.procWithUserWidget); - processListDemoPage.checkProcessIsNotDisplayed(processName.completedProcWithUserWidget); + await processListDemoPage.checkProcessIsNotDisplayed(processName.procWithUserWidget); + await processListDemoPage.checkProcessIsNotDisplayed(processName.completedProcWithUserWidget); }); - it('[C282016] Should be able to filter by Process Instance ID', () => { - processListDemoPage.addProcessInstanceId(procWithDate.id); + it('[C282016] Should be able to filter by Process Instance ID', async () => { + await processListDemoPage.addProcessInstanceId(procWithDate.id); - processListDemoPage.checkProcessIsDisplayed(processName.procWithDate); + await processListDemoPage.checkProcessIsDisplayed(processName.procWithDate); - processListDemoPage.checkProcessIsNotDisplayed(processName.completedProcWithDate); - processListDemoPage.checkProcessIsNotDisplayed(processName.procWithUserWidget); - processListDemoPage.checkProcessIsNotDisplayed(processName.completedProcWithUserWidget); + await processListDemoPage.checkProcessIsNotDisplayed(processName.completedProcWithDate); + await processListDemoPage.checkProcessIsNotDisplayed(processName.procWithUserWidget); + await processListDemoPage.checkProcessIsNotDisplayed(processName.completedProcWithUserWidget); }); - it('[C282017] Should be able to filter by Status', () => { - processListDemoPage.selectStateFilter('Active'); + it('[C282017] Should be able to filter by Status', async () => { + await processListDemoPage.selectStateFilter('Active'); - processListDemoPage.checkProcessIsNotDisplayed(processName.completedProcWithDate); - processListDemoPage.checkProcessIsNotDisplayed(processName.completedProcWithUserWidget); + await processListDemoPage.checkProcessIsNotDisplayed(processName.completedProcWithDate); + await processListDemoPage.checkProcessIsNotDisplayed(processName.completedProcWithUserWidget); - processListDemoPage.checkProcessIsDisplayed(processName.procWithDate); - processListDemoPage.checkProcessIsDisplayed(processName.procWithUserWidget); + await processListDemoPage.checkProcessIsDisplayed(processName.procWithDate); + await processListDemoPage.checkProcessIsDisplayed(processName.procWithUserWidget); - processListDemoPage.selectStateFilter('Completed'); + await processListDemoPage.selectStateFilter('Completed'); - processListDemoPage.checkProcessIsDisplayed(processName.completedProcWithDate); - processListDemoPage.checkProcessIsDisplayed(processName.completedProcWithUserWidget); + await processListDemoPage.checkProcessIsDisplayed(processName.completedProcWithDate); + await processListDemoPage.checkProcessIsDisplayed(processName.completedProcWithUserWidget); - processListDemoPage.checkProcessIsNotDisplayed(processName.procWithDate); - processListDemoPage.checkProcessIsNotDisplayed(processName.procWithUserWidget); + await processListDemoPage.checkProcessIsNotDisplayed(processName.procWithDate); + await processListDemoPage.checkProcessIsNotDisplayed(processName.procWithUserWidget); - processListDemoPage.selectStateFilter('All'); + await processListDemoPage.selectStateFilter('All'); - processListDemoPage.checkProcessIsDisplayed(processName.completedProcWithDate); - processListDemoPage.checkProcessIsDisplayed(processName.completedProcWithUserWidget); - processListDemoPage.checkProcessIsDisplayed(processName.procWithDate); - processListDemoPage.checkProcessIsDisplayed(processName.procWithUserWidget); + await processListDemoPage.checkProcessIsDisplayed(processName.completedProcWithDate); + await processListDemoPage.checkProcessIsDisplayed(processName.completedProcWithUserWidget); + await processListDemoPage.checkProcessIsDisplayed(processName.procWithDate); + await processListDemoPage.checkProcessIsDisplayed(processName.procWithUserWidget); }); - it('[C282010] Should be able to sort by creation date', () => { - processListDemoPage.selectSorting('asc'); + it('[C282010] Should be able to sort by creation date', async () => { + await processListDemoPage.selectSorting('asc'); - processListDemoPage.getDisplayedProcessesNames().then((sortedProcessList) => { - expect(JSON.stringify(processList) === JSON.stringify(sortedProcessList)).toBe(true); - }); + const sortedProcessListNamesAsc = await processListDemoPage.getDisplayedProcessesNames(); - processListDemoPage.selectSorting('desc'); + await expect(JSON.stringify(processList) === JSON.stringify(sortedProcessListNamesAsc)).toBe(true); - processListDemoPage.getDisplayedProcessesNames().then((sortedProcessList) => { - expect(JSON.stringify(processList.reverse()) === JSON.stringify(sortedProcessList)).toBe(true); - }); + await processListDemoPage.selectSorting('desc'); + + const sortedProcessListNamesDesc = await processListDemoPage.getDisplayedProcessesNames(); + await expect(JSON.stringify(processList.reverse()) === JSON.stringify(sortedProcessListNamesDesc)).toBe(true); }); }); diff --git a/e2e/process-services/processlist-pagination.e2e.ts b/e2e/process-services/processlist-pagination.e2e.ts index 39fcd92f7e..7ffce461ca 100644 --- a/e2e/process-services/processlist-pagination.e2e.ts +++ b/e2e/process-services/processlist-pagination.e2e.ts @@ -28,7 +28,7 @@ import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; import { AppsActions } from '../actions/APS/apps.actions'; import { UsersActions } from '../actions/users.actions'; -describe('Process List - Pagination', function () { +describe('Process List - Pagination', () => { const itemsPerPage = { five: '5', @@ -57,7 +57,7 @@ describe('Process List - Pagination', function () { let totalPages; const processNameBase = 'process'; - beforeAll(async (done) => { + beforeAll(async () => { const apps = new AppsActions(); const users = new UsersActions(); @@ -76,21 +76,20 @@ describe('Process List - Pagination', function () { await loginPage.loginToProcessServicesUsingUserModel(processUserModel); - done(); }); - describe('Empty processes', function () { + describe('Empty processes', () => { - it('[C280015] Should show empty content message an no pagination when no process are present', function () { - navigationBarPage.navigateToProcessServicesPage().goToTaskApp().clickProcessButton(); - processFiltersPage.checkNoContentMessage(); - paginationPage.checkPaginationIsNotDisplayed(); + it('[C280015] Should show empty content message an no pagination when no process are present', async() => { + await (await (await navigationBarPage.navigateToProcessServicesPage()).goToTaskApp()).clickProcessButton(); + await processFiltersPage.checkNoContentMessage(); + await paginationPage.checkPaginationIsNotDisplayed(); }); }); - describe('With processes Pagination', function () { + describe('With processes Pagination', () => { - beforeAll(async (done) => { + beforeAll(async () => { const apps = new AppsActions(); this.alfrescoJsApi = new AlfrescoApi({ @@ -104,304 +103,303 @@ describe('Process List - Pagination', function () { await apps.startProcess(this.alfrescoJsApi, deployedTestApp, processNameBase + (i < 10 ? `0${i}` : i)); } - done(); }); - beforeEach(async (done) => { - await navigationBarPage.navigateToProcessServicesPage().goToTaskApp().clickProcessButton(); - done(); + beforeEach(async () => { + await (await (await navigationBarPage.navigateToProcessServicesPage()).goToTaskApp()).clickProcessButton(); + }); - it('[C261042] Should display default pagination', function () { + it('[C261042] Should display default pagination', async() => { page = 1; totalPages = 1; - processFiltersPage.clickRunningFilterButton(); - processFiltersPage.checkFilterIsHighlighted(processFilterRunning); - processDetailsPage.checkProcessTitleIsDisplayed(); - processFiltersPage.waitForTableBody(); - expect(paginationPage.getCurrentPage()).toEqual('Page ' + page); - expect(paginationPage.getTotalPages()).toEqual('of ' + totalPages); + await processFiltersPage.clickRunningFilterButton(); + await processFiltersPage.checkFilterIsHighlighted(processFilterRunning); + await processDetailsPage.checkProcessTitleIsDisplayed(); + await processFiltersPage.waitForTableBody(); + await expect(await paginationPage.getCurrentPage()).toEqual('Page ' + page); + await expect(await paginationPage.getTotalPages()).toEqual('of ' + totalPages); - expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.twenty); - expect(paginationPage.getPaginationRange()).toEqual('Showing 1-' + nrOfProcesses + ' of ' + nrOfProcesses); - expect(processFiltersPage.numberOfProcessRows()).toBe(nrOfProcesses); - paginationPage.checkNextPageButtonIsDisabled(); - paginationPage.checkPreviousPageButtonIsDisabled(); + await expect(await paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.twenty); + await expect(await paginationPage.getPaginationRange()).toEqual('Showing 1-' + nrOfProcesses + ' of ' + nrOfProcesses); + await expect(await processFiltersPage.numberOfProcessRows()).toBe(nrOfProcesses); + await paginationPage.checkNextPageButtonIsDisabled(); + await paginationPage.checkPreviousPageButtonIsDisabled(); }); - it('[C261043] Should be possible to Items per page to 15', function () { + it('[C261043] Should be possible to Items per page to 15', async() => { page = 1; totalPages = 2; - processFiltersPage.clickRunningFilterButton(); - processFiltersPage.checkFilterIsHighlighted(processFilterRunning); - processDetailsPage.checkProcessTitleIsDisplayed(); - processFiltersPage.waitForTableBody(); - paginationPage.selectItemsPerPage(itemsPerPage.fifteen); - processDetailsPage.checkProcessTitleIsDisplayed(); - processFiltersPage.waitForTableBody(); - expect(paginationPage.getCurrentPage()).toEqual('Page ' + page); - expect(paginationPage.getTotalPages()).toEqual('of ' + totalPages); - expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.fifteen); - expect(paginationPage.getPaginationRange()).toEqual('Showing 1-' + itemsPerPage.fifteenValue * page + ' of ' + nrOfProcesses); - expect(processFiltersPage.numberOfProcessRows()).toBe(itemsPerPage.fifteenValue); - paginationPage.checkNextPageButtonIsEnabled(); - paginationPage.checkPreviousPageButtonIsDisabled(); + await processFiltersPage.clickRunningFilterButton(); + await processFiltersPage.checkFilterIsHighlighted(processFilterRunning); + await processDetailsPage.checkProcessTitleIsDisplayed(); + await processFiltersPage.waitForTableBody(); + await paginationPage.selectItemsPerPage(itemsPerPage.fifteen); + await processDetailsPage.checkProcessTitleIsDisplayed(); + await processFiltersPage.waitForTableBody(); + await expect(await paginationPage.getCurrentPage()).toEqual('Page ' + page); + await expect(await paginationPage.getTotalPages()).toEqual('of ' + totalPages); + await expect(await paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.fifteen); + await expect(await paginationPage.getPaginationRange()).toEqual('Showing 1-' + itemsPerPage.fifteenValue * page + ' of ' + nrOfProcesses); + await expect(await processFiltersPage.numberOfProcessRows()).toBe(itemsPerPage.fifteenValue); + await paginationPage.checkNextPageButtonIsEnabled(); + await paginationPage.checkPreviousPageButtonIsDisabled(); page++; - paginationPage.clickOnNextPage(); - processDetailsPage.checkProcessTitleIsDisplayed(); - processFiltersPage.waitForTableBody(); - expect(paginationPage.getCurrentPage()).toEqual('Page ' + page); - expect(paginationPage.getTotalPages()).toEqual('of ' + totalPages); - expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.fifteen); - expect(paginationPage.getPaginationRange()).toEqual('Showing 16-' + nrOfProcesses + ' of ' + nrOfProcesses); - expect(processFiltersPage.numberOfProcessRows()).toBe(nrOfProcesses - itemsPerPage.fifteenValue); - paginationPage.checkNextPageButtonIsDisabled(); - paginationPage.checkPreviousPageButtonIsEnabled(); + await paginationPage.clickOnNextPage(); + await processDetailsPage.checkProcessTitleIsDisplayed(); + await processFiltersPage.waitForTableBody(); + await expect(await paginationPage.getCurrentPage()).toEqual('Page ' + page); + await expect(await paginationPage.getTotalPages()).toEqual('of ' + totalPages); + await expect(await paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.fifteen); + await expect(await paginationPage.getPaginationRange()).toEqual('Showing 16-' + nrOfProcesses + ' of ' + nrOfProcesses); + await expect(await processFiltersPage.numberOfProcessRows()).toBe(nrOfProcesses - itemsPerPage.fifteenValue); + await paginationPage.checkNextPageButtonIsDisabled(); + await paginationPage.checkPreviousPageButtonIsEnabled(); page = 1; - navigationBarPage.navigateToProcessServicesPage().goToTaskApp().clickProcessButton(); - processFiltersPage.clickRunningFilterButton(); - processFiltersPage.checkFilterIsHighlighted(processFilterRunning); - processDetailsPage.checkProcessTitleIsDisplayed(); - processFiltersPage.waitForTableBody(); - expect(paginationPage.getCurrentPage()).toEqual('Page ' + page); - expect(paginationPage.getTotalPages()).toEqual('of ' + totalPages); - expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.fifteen); + await (await (await navigationBarPage.navigateToProcessServicesPage()).goToTaskApp()).clickProcessButton(); + await processFiltersPage.clickRunningFilterButton(); + await processFiltersPage.checkFilterIsHighlighted(processFilterRunning); + await processDetailsPage.checkProcessTitleIsDisplayed(); + await processFiltersPage.waitForTableBody(); + await expect(await paginationPage.getCurrentPage()).toEqual('Page ' + page); + await expect(await paginationPage.getTotalPages()).toEqual('of ' + totalPages); + await expect(await paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.fifteen); }); - it('[C261044] Should be possible to Items per page to 10', function () { + it('[C261044] Should be possible to Items per page to 10', async() => { page = 1; totalPages = 2; - processFiltersPage.clickRunningFilterButton(); - processFiltersPage.checkFilterIsHighlighted(processFilterRunning); - processDetailsPage.checkProcessTitleIsDisplayed(); - processFiltersPage.waitForTableBody(); - paginationPage.selectItemsPerPage(itemsPerPage.ten); - processDetailsPage.checkProcessTitleIsDisplayed(); - processFiltersPage.waitForTableBody(); - expect(paginationPage.getCurrentPage()).toEqual('Page ' + page); - expect(paginationPage.getTotalPages()).toEqual('of ' + totalPages); - expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.ten); - expect(paginationPage.getPaginationRange()).toEqual('Showing 1-' + itemsPerPage.tenValue * page + ' of ' + nrOfProcesses); - expect(processFiltersPage.numberOfProcessRows()).toBe(itemsPerPage.tenValue); - paginationPage.checkNextPageButtonIsEnabled(); - paginationPage.checkPreviousPageButtonIsDisabled(); + await processFiltersPage.clickRunningFilterButton(); + await processFiltersPage.checkFilterIsHighlighted(processFilterRunning); + await processDetailsPage.checkProcessTitleIsDisplayed(); + await processFiltersPage.waitForTableBody(); + await paginationPage.selectItemsPerPage(itemsPerPage.ten); + await processDetailsPage.checkProcessTitleIsDisplayed(); + await processFiltersPage.waitForTableBody(); + await expect(await paginationPage.getCurrentPage()).toEqual('Page ' + page); + await expect(await paginationPage.getTotalPages()).toEqual('of ' + totalPages); + await expect(await paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.ten); + await expect(await paginationPage.getPaginationRange()).toEqual('Showing 1-' + itemsPerPage.tenValue * page + ' of ' + nrOfProcesses); + await expect(await processFiltersPage.numberOfProcessRows()).toBe(itemsPerPage.tenValue); + await paginationPage.checkNextPageButtonIsEnabled(); + await paginationPage.checkPreviousPageButtonIsDisabled(); page++; - paginationPage.clickOnNextPage(); - processDetailsPage.checkProcessTitleIsDisplayed(); - processFiltersPage.waitForTableBody(); - expect(paginationPage.getCurrentPage()).toEqual('Page ' + page); - expect(paginationPage.getTotalPages()).toEqual('of ' + totalPages); - expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.ten); - expect(paginationPage.getPaginationRange()).toEqual('Showing 11-' + nrOfProcesses + ' of ' + nrOfProcesses); - expect(processFiltersPage.numberOfProcessRows()).toBe(itemsPerPage.tenValue); - paginationPage.checkNextPageButtonIsDisabled(); - paginationPage.checkPreviousPageButtonIsEnabled(); + await paginationPage.clickOnNextPage(); + await processDetailsPage.checkProcessTitleIsDisplayed(); + await processFiltersPage.waitForTableBody(); + await expect(await paginationPage.getCurrentPage()).toEqual('Page ' + page); + await expect(await paginationPage.getTotalPages()).toEqual('of ' + totalPages); + await expect(await paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.ten); + await expect(await paginationPage.getPaginationRange()).toEqual('Showing 11-' + nrOfProcesses + ' of ' + nrOfProcesses); + await expect(await processFiltersPage.numberOfProcessRows()).toBe(itemsPerPage.tenValue); + await paginationPage.checkNextPageButtonIsDisabled(); + await paginationPage.checkPreviousPageButtonIsEnabled(); page = 1; - navigationBarPage.navigateToProcessServicesPage().goToTaskApp().clickProcessButton(); - processFiltersPage.clickRunningFilterButton(); - processFiltersPage.checkFilterIsHighlighted(processFilterRunning); - processDetailsPage.checkProcessTitleIsDisplayed(); - processFiltersPage.waitForTableBody(); - expect(paginationPage.getCurrentPage()).toEqual('Page ' + page); - expect(paginationPage.getTotalPages()).toEqual('of ' + totalPages); - expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.ten); + await (await (await navigationBarPage.navigateToProcessServicesPage()).goToTaskApp()).clickProcessButton(); + await processFiltersPage.clickRunningFilterButton(); + await processFiltersPage.checkFilterIsHighlighted(processFilterRunning); + await processDetailsPage.checkProcessTitleIsDisplayed(); + await processFiltersPage.waitForTableBody(); + await expect(await paginationPage.getCurrentPage()).toEqual('Page ' + page); + await expect(await paginationPage.getTotalPages()).toEqual('of ' + totalPages); + await expect(await paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.ten); }); - it('[C261047] Should be possible to Items per page to 20', function () { + it('[C261047] Should be possible to Items per page to 20', async() => { page = 1; totalPages = 1; - processFiltersPage.clickRunningFilterButton(); - processFiltersPage.checkFilterIsHighlighted(processFilterRunning); - processDetailsPage.checkProcessTitleIsDisplayed(); - processFiltersPage.waitForTableBody(); - paginationPage.selectItemsPerPage(itemsPerPage.twenty); - processDetailsPage.checkProcessTitleIsDisplayed(); - processFiltersPage.waitForTableBody(); - expect(paginationPage.getCurrentPage()).toEqual('Page ' + page); - expect(paginationPage.getTotalPages()).toEqual('of ' + totalPages); - expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.twenty); - expect(paginationPage.getPaginationRange()).toEqual('Showing 1-' + nrOfProcesses + ' of ' + nrOfProcesses); - expect(processFiltersPage.numberOfProcessRows()).toBe(nrOfProcesses); - paginationPage.checkNextPageButtonIsDisabled(); - paginationPage.checkPreviousPageButtonIsDisabled(); + await processFiltersPage.clickRunningFilterButton(); + await processFiltersPage.checkFilterIsHighlighted(processFilterRunning); + await processDetailsPage.checkProcessTitleIsDisplayed(); + await processFiltersPage.waitForTableBody(); + await paginationPage.selectItemsPerPage(itemsPerPage.twenty); + await processDetailsPage.checkProcessTitleIsDisplayed(); + await processFiltersPage.waitForTableBody(); + await expect(await paginationPage.getCurrentPage()).toEqual('Page ' + page); + await expect(await paginationPage.getTotalPages()).toEqual('of ' + totalPages); + await expect(await paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.twenty); + await expect(await paginationPage.getPaginationRange()).toEqual('Showing 1-' + nrOfProcesses + ' of ' + nrOfProcesses); + await expect(await processFiltersPage.numberOfProcessRows()).toBe(nrOfProcesses); + await paginationPage.checkNextPageButtonIsDisabled(); + await paginationPage.checkPreviousPageButtonIsDisabled(); - navigationBarPage.navigateToProcessServicesPage().goToTaskApp().clickProcessButton(); - processFiltersPage.clickRunningFilterButton(); - processFiltersPage.checkFilterIsHighlighted(processFilterRunning); - processDetailsPage.checkProcessTitleIsDisplayed(); - processFiltersPage.waitForTableBody(); - expect(paginationPage.getCurrentPage()).toEqual('Page ' + page); - expect(paginationPage.getTotalPages()).toEqual('of ' + totalPages); - expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.twenty); + await (await (await navigationBarPage.navigateToProcessServicesPage()).goToTaskApp()).clickProcessButton(); + await processFiltersPage.clickRunningFilterButton(); + await processFiltersPage.checkFilterIsHighlighted(processFilterRunning); + await processDetailsPage.checkProcessTitleIsDisplayed(); + await processFiltersPage.waitForTableBody(); + await expect(await paginationPage.getCurrentPage()).toEqual('Page ' + page); + await expect(await paginationPage.getTotalPages()).toEqual('of ' + totalPages); + await expect(await paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.twenty); }); - it('[C261045] Should be possible to Items per page to 5', function () { + it('[C261045] Should be possible to Items per page to 5', async() => { let showing; page = 1; totalPages = 4; - processFiltersPage.clickRunningFilterButton(); - processFiltersPage.checkFilterIsHighlighted(processFilterRunning); - processDetailsPage.checkProcessTitleIsDisplayed(); - processFiltersPage.waitForTableBody(); - paginationPage.selectItemsPerPage(itemsPerPage.five); - processDetailsPage.checkProcessTitleIsDisplayed(); - processFiltersPage.waitForTableBody(); - expect(paginationPage.getCurrentPage()).toEqual('Page ' + page); - expect(paginationPage.getTotalPages()).toEqual('of ' + totalPages); - expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.five); + await processFiltersPage.clickRunningFilterButton(); + await processFiltersPage.checkFilterIsHighlighted(processFilterRunning); + await processDetailsPage.checkProcessTitleIsDisplayed(); + await processFiltersPage.waitForTableBody(); + await paginationPage.selectItemsPerPage(itemsPerPage.five); + await processDetailsPage.checkProcessTitleIsDisplayed(); + await processFiltersPage.waitForTableBody(); + await expect(await paginationPage.getCurrentPage()).toEqual('Page ' + page); + await expect(await paginationPage.getTotalPages()).toEqual('of ' + totalPages); + await expect(await paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.five); showing = (itemsPerPage.fiveValue * page); - expect(paginationPage.getPaginationRange()).toEqual('Showing 1-' + showing + ' of ' + nrOfProcesses); - expect(processFiltersPage.numberOfProcessRows()).toBe(itemsPerPage.fiveValue); - paginationPage.checkNextPageButtonIsEnabled(); - paginationPage.checkPreviousPageButtonIsDisabled(); + await expect(await paginationPage.getPaginationRange()).toEqual('Showing 1-' + showing + ' of ' + nrOfProcesses); + await expect(await processFiltersPage.numberOfProcessRows()).toBe(itemsPerPage.fiveValue); + await paginationPage.checkNextPageButtonIsEnabled(); + await paginationPage.checkPreviousPageButtonIsDisabled(); page++; - paginationPage.clickOnNextPage(); - processDetailsPage.checkProcessTitleIsDisplayed(); - processFiltersPage.waitForTableBody(); - expect(paginationPage.getCurrentPage()).toEqual('Page ' + page); - expect(paginationPage.getTotalPages()).toEqual('of ' + totalPages); - expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.five); + await paginationPage.clickOnNextPage(); + await processDetailsPage.checkProcessTitleIsDisplayed(); + await processFiltersPage.waitForTableBody(); + await expect(await paginationPage.getCurrentPage()).toEqual('Page ' + page); + await expect(await paginationPage.getTotalPages()).toEqual('of ' + totalPages); + await expect(await paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.five); showing = (itemsPerPage.fiveValue * page); - expect(paginationPage.getPaginationRange()).toEqual('Showing 6-' + showing + ' of ' + nrOfProcesses); - expect(processFiltersPage.numberOfProcessRows()).toBe(itemsPerPage.fiveValue); - paginationPage.checkNextPageButtonIsEnabled(); - paginationPage.checkPreviousPageButtonIsEnabled(); + await expect(await paginationPage.getPaginationRange()).toEqual('Showing 6-' + showing + ' of ' + nrOfProcesses); + await expect(await processFiltersPage.numberOfProcessRows()).toBe(itemsPerPage.fiveValue); + await paginationPage.checkNextPageButtonIsEnabled(); + await paginationPage.checkPreviousPageButtonIsEnabled(); page++; - paginationPage.clickOnNextPage(); - processDetailsPage.checkProcessTitleIsDisplayed(); - processFiltersPage.waitForTableBody(); - expect(paginationPage.getCurrentPage()).toEqual('Page ' + page); - expect(paginationPage.getTotalPages()).toEqual('of ' + totalPages); - expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.five); + await paginationPage.clickOnNextPage(); + await processDetailsPage.checkProcessTitleIsDisplayed(); + await processFiltersPage.waitForTableBody(); + await expect(await paginationPage.getCurrentPage()).toEqual('Page ' + page); + await expect(await paginationPage.getTotalPages()).toEqual('of ' + totalPages); + await expect(await paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.five); showing = (itemsPerPage.fiveValue * page); - expect(paginationPage.getPaginationRange()).toEqual('Showing 11-' + showing + ' of ' + nrOfProcesses); - expect(processFiltersPage.numberOfProcessRows()).toBe(itemsPerPage.fiveValue); - paginationPage.checkNextPageButtonIsEnabled(); - paginationPage.checkPreviousPageButtonIsEnabled(); + await expect(await paginationPage.getPaginationRange()).toEqual('Showing 11-' + showing + ' of ' + nrOfProcesses); + await expect(await processFiltersPage.numberOfProcessRows()).toBe(itemsPerPage.fiveValue); + await paginationPage.checkNextPageButtonIsEnabled(); + await paginationPage.checkPreviousPageButtonIsEnabled(); page++; - paginationPage.clickOnNextPage(); - processDetailsPage.checkProcessTitleIsDisplayed(); - processFiltersPage.waitForTableBody(); - expect(paginationPage.getCurrentPage()).toEqual('Page ' + page); - expect(paginationPage.getTotalPages()).toEqual('of ' + totalPages); - expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.five); + await paginationPage.clickOnNextPage(); + await processDetailsPage.checkProcessTitleIsDisplayed(); + await processFiltersPage.waitForTableBody(); + await expect(await paginationPage.getCurrentPage()).toEqual('Page ' + page); + await expect(await paginationPage.getTotalPages()).toEqual('of ' + totalPages); + await expect(await paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.five); showing = (itemsPerPage.fiveValue * page); - expect(paginationPage.getPaginationRange()).toEqual('Showing 16-' + showing + ' of ' + nrOfProcesses); - expect(processFiltersPage.numberOfProcessRows()).toBe(itemsPerPage.fiveValue); - paginationPage.checkNextPageButtonIsDisabled(); - paginationPage.checkPreviousPageButtonIsEnabled(); + await expect(await paginationPage.getPaginationRange()).toEqual('Showing 16-' + showing + ' of ' + nrOfProcesses); + await expect(await processFiltersPage.numberOfProcessRows()).toBe(itemsPerPage.fiveValue); + await paginationPage.checkNextPageButtonIsDisabled(); + await paginationPage.checkPreviousPageButtonIsEnabled(); page = 1; - navigationBarPage.navigateToProcessServicesPage().goToTaskApp().clickProcessButton(); - processFiltersPage.clickRunningFilterButton(); - processFiltersPage.checkFilterIsHighlighted(processFilterRunning); - processDetailsPage.checkProcessTitleIsDisplayed(); - processFiltersPage.waitForTableBody(); - expect(paginationPage.getCurrentPage()).toEqual('Page ' + page); - expect(paginationPage.getTotalPages()).toEqual('of ' + totalPages); - expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.five); + await (await (await navigationBarPage.navigateToProcessServicesPage()).goToTaskApp()).clickProcessButton(); + await processFiltersPage.clickRunningFilterButton(); + await processFiltersPage.checkFilterIsHighlighted(processFilterRunning); + await processDetailsPage.checkProcessTitleIsDisplayed(); + await processFiltersPage.waitForTableBody(); + await expect(await paginationPage.getCurrentPage()).toEqual('Page ' + page); + await expect(await paginationPage.getTotalPages()).toEqual('of ' + totalPages); + await expect(await paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.five); }); - it('[C261049] Should be possible to open page number dropdown', function () { + it('[C261049] Should be possible to open page number dropdown', async() => { let showing; page = 1; totalPages = 2; - processFiltersPage.clickRunningFilterButton(); - processDetailsPage.checkProcessTitleIsDisplayed(); - processFiltersPage.waitForTableBody(); - paginationPage.selectItemsPerPage(itemsPerPage.ten); - processDetailsPage.checkProcessTitleIsDisplayed(); - processFiltersPage.waitForTableBody(); - expect(paginationPage.getCurrentPage()).toEqual('Page ' + page); - expect(paginationPage.getTotalPages()).toEqual('of ' + totalPages); - expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.ten); + await processFiltersPage.clickRunningFilterButton(); + await processDetailsPage.checkProcessTitleIsDisplayed(); + await processFiltersPage.waitForTableBody(); + await paginationPage.selectItemsPerPage(itemsPerPage.ten); + await processDetailsPage.checkProcessTitleIsDisplayed(); + await processFiltersPage.waitForTableBody(); + await expect(await paginationPage.getCurrentPage()).toEqual('Page ' + page); + await expect(await paginationPage.getTotalPages()).toEqual('of ' + totalPages); + await expect(await paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.ten); showing = (itemsPerPage.tenValue * page); - expect(paginationPage.getPaginationRange()).toEqual('Showing 1-' + showing + ' of ' + nrOfProcesses); - expect(processFiltersPage.numberOfProcessRows()).toBe(itemsPerPage.tenValue); - paginationPage.checkNextPageButtonIsEnabled(); - paginationPage.checkPreviousPageButtonIsDisabled(); + await expect(await paginationPage.getPaginationRange()).toEqual('Showing 1-' + showing + ' of ' + nrOfProcesses); + await expect(await processFiltersPage.numberOfProcessRows()).toBe(itemsPerPage.tenValue); + await paginationPage.checkNextPageButtonIsEnabled(); + await paginationPage.checkPreviousPageButtonIsDisabled(); - paginationPage.clickOnPageDropdown(); - expect(paginationPage.getPageDropdownOptions()).toEqual(['1', '2']); + await paginationPage.clickOnPageDropdown(); + await expect(await paginationPage.getPageDropdownOptions()).toEqual(['1', '2']); page = 2; - paginationPage.clickOnPageDropdownOption('2'); - processDetailsPage.checkProcessTitleIsDisplayed(); - processFiltersPage.waitForTableBody(); - expect(paginationPage.getCurrentPage()).toEqual('Page ' + page); - expect(paginationPage.getTotalPages()).toEqual('of ' + totalPages); - expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.ten); + await paginationPage.clickOnPageDropdownOption('2'); + await processDetailsPage.checkProcessTitleIsDisplayed(); + await processFiltersPage.waitForTableBody(); + await expect(await paginationPage.getCurrentPage()).toEqual('Page ' + page); + await expect(await paginationPage.getTotalPages()).toEqual('of ' + totalPages); + await expect(await paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.ten); showing = (itemsPerPage.tenValue * page); - expect(paginationPage.getPaginationRange()).toEqual('Showing 11-' + showing + ' of ' + nrOfProcesses); - expect(processFiltersPage.numberOfProcessRows()).toBe(itemsPerPage.tenValue); - paginationPage.checkNextPageButtonIsDisabled(); - paginationPage.checkPreviousPageButtonIsEnabled(); + await expect(await paginationPage.getPaginationRange()).toEqual('Showing 11-' + showing + ' of ' + nrOfProcesses); + await expect(await processFiltersPage.numberOfProcessRows()).toBe(itemsPerPage.tenValue); + await paginationPage.checkNextPageButtonIsDisabled(); + await paginationPage.checkPreviousPageButtonIsEnabled(); - paginationPage.clickOnPageDropdown(); - expect(paginationPage.getPageDropdownOptions()).toEqual(['1', '2']); + await paginationPage.clickOnPageDropdown(); + await expect(await paginationPage.getPageDropdownOptions()).toEqual(['1', '2']); page = 1; - paginationPage.clickOnPageDropdownOption('1'); - processDetailsPage.checkProcessTitleIsDisplayed(); - processFiltersPage.waitForTableBody(); - expect(paginationPage.getCurrentPage()).toEqual('Page ' + page); - expect(paginationPage.getTotalPages()).toEqual('of ' + totalPages); - expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.ten); + await paginationPage.clickOnPageDropdownOption('1'); + await processDetailsPage.checkProcessTitleIsDisplayed(); + await processFiltersPage.waitForTableBody(); + await expect(await paginationPage.getCurrentPage()).toEqual('Page ' + page); + await expect(await paginationPage.getTotalPages()).toEqual('of ' + totalPages); + await expect(await paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.ten); showing = (itemsPerPage.tenValue * page); - expect(paginationPage.getPaginationRange()).toEqual('Showing 1-' + showing + ' of ' + nrOfProcesses); - expect(processFiltersPage.numberOfProcessRows()).toBe(itemsPerPage.tenValue); - paginationPage.checkNextPageButtonIsEnabled(); - paginationPage.checkPreviousPageButtonIsDisabled(); + await expect(await paginationPage.getPaginationRange()).toEqual('Showing 1-' + showing + ' of ' + nrOfProcesses); + await expect(await processFiltersPage.numberOfProcessRows()).toBe(itemsPerPage.tenValue); + await paginationPage.checkNextPageButtonIsEnabled(); + await paginationPage.checkPreviousPageButtonIsDisabled(); }); - it('[C261048] Should be possible to sort processes by name', function () { - processFiltersPage.clickRunningFilterButton(); - processFiltersPage.checkFilterIsHighlighted(processFilterRunning); - processDetailsPage.checkProcessTitleIsDisplayed(); - processFiltersPage.waitForTableBody(); + it('[C261048] Should be possible to sort processes by name', async() => { + await processFiltersPage.clickRunningFilterButton(); + await processFiltersPage.checkFilterIsHighlighted(processFilterRunning); + await processDetailsPage.checkProcessTitleIsDisplayed(); + await processFiltersPage.waitForTableBody(); - paginationPage.selectItemsPerPage(itemsPerPage.twenty); - processDetailsPage.checkProcessTitleIsDisplayed(); - processFiltersPage.waitForTableBody(); + await paginationPage.selectItemsPerPage(itemsPerPage.twenty); + await processDetailsPage.checkProcessTitleIsDisplayed(); + await processFiltersPage.waitForTableBody(); - processFiltersPage.sortByName('ASC'); - processFiltersPage.waitForTableBody(); - processFiltersPage.checkProcessesSortedByNameAsc(); + await processFiltersPage.sortByName('ASC'); + await processFiltersPage.waitForTableBody(); + await processFiltersPage.checkProcessesSortedByNameAsc(); - processFiltersPage.sortByName('DESC'); - processFiltersPage.waitForTableBody(); - processFiltersPage.checkProcessesSortedByNameDesc(); + await processFiltersPage.sortByName('DESC'); + await processFiltersPage.waitForTableBody(); + await processFiltersPage.checkProcessesSortedByNameDesc(); }); - it('[C286260] Should keep sorting when changing \'Items per page\'', function () { - processFiltersPage.clickRunningFilterButton(); - processFiltersPage.checkFilterIsHighlighted(processFilterRunning); - processDetailsPage.checkProcessTitleIsDisplayed(); - processFiltersPage.waitForTableBody(); + it('[C286260] Should keep sorting when changing \'Items per page\'', async() => { + await processFiltersPage.clickRunningFilterButton(); + await processFiltersPage.checkFilterIsHighlighted(processFilterRunning); + await processDetailsPage.checkProcessTitleIsDisplayed(); + await processFiltersPage.waitForTableBody(); - paginationPage.selectItemsPerPage(itemsPerPage.twenty); - processDetailsPage.checkProcessTitleIsDisplayed(); - processFiltersPage.waitForTableBody(); + await paginationPage.selectItemsPerPage(itemsPerPage.twenty); + await processDetailsPage.checkProcessTitleIsDisplayed(); + await processFiltersPage.waitForTableBody(); - processFiltersPage.sortByName('ASC'); - processFiltersPage.waitForTableBody(); - processFiltersPage.checkProcessesSortedByNameAsc(); + await processFiltersPage.sortByName('ASC'); + await processFiltersPage.waitForTableBody(); + await processFiltersPage.checkProcessesSortedByNameAsc(); - paginationPage.selectItemsPerPage(itemsPerPage.five); - processFiltersPage.waitForTableBody(); - processFiltersPage.checkProcessesSortedByNameAsc(); + await paginationPage.selectItemsPerPage(itemsPerPage.five); + await processFiltersPage.waitForTableBody(); + await processFiltersPage.checkProcessesSortedByNameAsc(); }); }); }); diff --git a/e2e/process-services/sort-tasklist-pagination.e2e.ts b/e2e/process-services/sort-tasklist-pagination.e2e.ts index c5ce48227a..8bf4ee05f3 100644 --- a/e2e/process-services/sort-tasklist-pagination.e2e.ts +++ b/e2e/process-services/sort-tasklist-pagination.e2e.ts @@ -51,7 +51,7 @@ describe('Task List Pagination - Sorting', () => { twentyValue: 20 }; - beforeAll(async (done) => { + beforeAll(async () => { const apps = new AppsActions(); const users = new UsersActions(); @@ -69,29 +69,28 @@ describe('Task List Pagination - Sorting', () => { await apps.importPublishDeployApp(this.alfrescoJsApi, app.file_location); for (let i = 0; i < nrOfTasks; i++) { - this.alfrescoJsApi.activiti.taskApi.createNewTask({name: taskNames[i]}); + await this.alfrescoJsApi.activiti.taskApi.createNewTask({ name: taskNames[i] }); } await loginPage.loginToProcessServicesUsingUserModel(processUserModel); - done(); }); - it('[C260308] Should be possible to sort tasks by name', () => { - new NavigationBarPage().navigateToProcessServicesPage().goToTaskApp(); - taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.INV_TASKS); - taskPage.tasksListPage().getDataTable().waitForTableBody(); - paginationPage.selectItemsPerPage(itemsPerPage.twenty); - taskPage.tasksListPage().getDataTable().waitForTableBody(); - taskPage.filtersPage().sortByName('ASC'); - taskPage.tasksListPage().getDataTable().waitForTableBody(); - taskPage.filtersPage().getAllRowsNameColumn().then(function (list) { - expect(JSON.stringify(list) === JSON.stringify(taskNames)).toEqual(true); + it('[C260308] Should be possible to sort tasks by name', async () => { + await (await new NavigationBarPage().navigateToProcessServicesPage()).goToTaskApp(); + await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.INV_TASKS); + await taskPage.tasksListPage().getDataTable().waitForTableBody(); + await paginationPage.selectItemsPerPage(itemsPerPage.twenty); + await taskPage.tasksListPage().getDataTable().waitForTableBody(); + await taskPage.filtersPage().sortByName('ASC'); + await taskPage.tasksListPage().getDataTable().waitForTableBody(); + await taskPage.filtersPage().getAllRowsNameColumn().then(async (list) => { + await expect(JSON.stringify(list) === JSON.stringify(taskNames)).toEqual(true); }); - taskPage.filtersPage().sortByName('DESC'); - taskPage.filtersPage().getAllRowsNameColumn().then(function (list) { + await taskPage.filtersPage().sortByName('DESC'); + await taskPage.filtersPage().getAllRowsNameColumn().then(async (list) => { taskNames.reverse(); - expect(JSON.stringify(list) === JSON.stringify(taskNames)).toEqual(true); + await expect(JSON.stringify(list) === JSON.stringify(taskNames)).toEqual(true); }); }); diff --git a/e2e/process-services/standalone-task.e2e.ts b/e2e/process-services/standalone-task.e2e.ts index 5a54ea840e..916d84f083 100644 --- a/e2e/process-services/standalone-task.e2e.ts +++ b/e2e/process-services/standalone-task.e2e.ts @@ -43,7 +43,7 @@ describe('Start Task - Task App', () => { const tasks = ['Standalone task', 'Completed standalone task', 'Add a form', 'Remove form']; const noFormMessage = 'No forms attached'; - beforeAll(async (done) => { + beforeAll(async () => { const users = new UsersActions(); this.alfrescoJsApi = new AlfrescoApi({ @@ -66,69 +66,82 @@ describe('Start Task - Task App', () => { await loginPage.loginToProcessServicesUsingUserModel(processUserModel); - done(); }); - beforeEach(async (done) => { - navigationBarPage.navigateToProcessServicesPage().goToTaskApp().clickTasksButton(); - taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); + beforeEach(async () => { + await (await (await navigationBarPage.navigateToProcessServicesPage()).goToTaskApp()).clickTasksButton(); + await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); - done(); }); - it('[C260421] Should a standalone task be displayed when creating a new task without form', () => { + it('[C260421] Should a standalone task be displayed when creating a new task without form', async () => { - taskPage.createNewTask().addName(tasks[0]).clickStartButton(); - taskPage.tasksListPage().checkContentIsDisplayed(tasks[0]); - taskPage.taskDetails().noFormIsDisplayed(); - taskPage.taskDetails().checkCompleteTaskButtonIsDisplayed().checkCompleteTaskButtonIsEnabled(); - taskPage.taskDetails().checkAttachFormButtonIsDisplayed(); - taskPage.taskDetails().checkAttachFormButtonIsEnabled(); - expect(taskPage.taskDetails().getFormName()).toEqual(CONSTANTS.TASK_DETAILS.NO_FORM); - expect(taskPage.formFields().getNoFormMessage()).toEqual(noFormMessage); + const task = await taskPage.createNewTask(); + await task.addName(tasks[0]); + await task.clickStartButton(); + await taskPage.tasksListPage().checkContentIsDisplayed(tasks[0]); + await taskPage.taskDetails().noFormIsDisplayed(); + + const taskDetails = await taskPage.taskDetails(); + await taskDetails.checkCompleteTaskButtonIsDisplayed(); + await taskDetails.checkCompleteTaskButtonIsEnabled(); + await taskPage.taskDetails().checkAttachFormButtonIsDisplayed(); + await taskPage.taskDetails().checkAttachFormButtonIsEnabled(); + await expect(await taskPage.taskDetails().getFormName()).toEqual(CONSTANTS.TASK_DETAILS.NO_FORM); + await expect(await taskPage.formFields().getNoFormMessage()).toEqual(noFormMessage); }); - it('[C268910] Should a standalone task be displayed in completed tasks when completing it', () => { - taskPage.createNewTask().addName(tasks[1]).clickStartButton(); - taskPage.tasksListPage().checkContentIsDisplayed(tasks[1]); - taskPage.formFields().noFormIsDisplayed(); + it('[C268910] Should a standalone task be displayed in completed tasks when completing it', async () => { + const task = await taskPage.createNewTask(); + await task.addName(tasks[1]); + await task.clickStartButton(); + await taskPage.tasksListPage().checkContentIsDisplayed(tasks[1]); + await taskPage.formFields().noFormIsDisplayed(); - taskPage.completeTaskNoForm(); - taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.COMPLETED_TASKS); - taskPage.tasksListPage().selectRow(tasks[1]); - expect(taskPage.formFields().getCompletedTaskNoFormMessage()).toEqual('Task ' + tasks[1] + ' completed'); + await taskPage.completeTaskNoForm(); + await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.COMPLETED_TASKS); + await taskPage.tasksListPage().selectRow(tasks[1]); + await expect(await taskPage.formFields().getCompletedTaskNoFormMessage()).toEqual('Task ' + tasks[1] + ' completed'); - taskPage.formFields().noFormIsDisplayed(); - expect(taskPage.taskDetails().getFormName()).toEqual(CONSTANTS.TASK_DETAILS.NO_FORM); + await taskPage.formFields().noFormIsDisplayed(); + await expect(await taskPage.taskDetails().getFormName()).toEqual(CONSTANTS.TASK_DETAILS.NO_FORM); }); - it('[C268911] Should allow adding a form to a standalone task when clicking on Add form button', () => { - taskPage.createNewTask().addName(tasks[2]).clickStartButton(); - taskPage.tasksListPage().checkContentIsDisplayed(tasks[2]); - taskPage.formFields().noFormIsDisplayed(); + it('[C268911] Should allow adding a form to a standalone task when clicking on Add form button', async () => { + const task = await taskPage.createNewTask(); + await task.addName(tasks[2]); + await task.clickStartButton(); - taskPage.formFields().clickOnAttachFormButton().selectForm(app.formName).clickOnAttachFormButton(); - expect(taskPage.taskDetails().getFormName()).toEqual(app.formName); + await taskPage.tasksListPage().checkContentIsDisplayed(tasks[2]); + await taskPage.formFields().noFormIsDisplayed(); + + const formFields = await taskPage.formFields(); + await formFields.clickOnAttachFormButton(); + await formFields.selectForm(app.formName); + await formFields.clickOnAttachFormButton(); + + await expect(await taskPage.taskDetails().getFormName()).toEqual(app.formName); }); - it('[C268912] Should a standalone task be displayed when removing the form from APS', () => { - taskPage.createNewTask().addName(tasks[3]).addForm(app.formName).clickStartButton(); + it('[C268912] Should a standalone task be displayed when removing the form from APS', async () => { + const task = await taskPage.createNewTask(); + await task.addName(tasks[3]); + await task.addForm(app.formName); + await task.clickStartButton(); - taskPage.tasksListPage().checkContentIsDisplayed(tasks[3]); - expect(taskPage.taskDetails().getFormName()).toEqual(app.formName); + await taskPage.tasksListPage().checkContentIsDisplayed(tasks[3]); + await expect(await taskPage.taskDetails().getFormName()).toEqual(app.formName); - browser.controlFlow().execute(async () => { - const listOfTasks = await this.alfrescoJsApi.activiti.taskApi.listTasks(new Task({ sort: 'created-desc' })); - await this.alfrescoJsApi.activiti.taskApi.removeForm(listOfTasks.data[0].id); - }); + const listOfTasks = await this.alfrescoJsApi.activiti.taskApi.listTasks(new Task({ sort: 'created-desc' })); + await this.alfrescoJsApi.activiti.taskApi.removeForm(listOfTasks.data[0].id); - browser.refresh(); - taskPage.tasksListPage().checkContentIsDisplayed(tasks[3]); - taskPage.checkTaskTitle(tasks[3]); + await browser.refresh(); + await taskPage.tasksListPage().checkContentIsDisplayed(tasks[3]); + await taskPage.checkTaskTitle(tasks[3]); - taskPage.formFields().noFormIsDisplayed(); - expect(taskPage.taskDetails().getFormName()).toEqual(CONSTANTS.TASK_DETAILS.NO_FORM); - expect(taskPage.formFields().getNoFormMessage()).toEqual(noFormMessage); + await taskPage.formFields().noFormIsDisplayed(); + await expect(await taskPage.taskDetails().getFormName()).toEqual(CONSTANTS.TASK_DETAILS.NO_FORM); + await expect(await taskPage.formFields().getNoFormMessage()).toEqual(noFormMessage); }); }); diff --git a/e2e/process-services/start-process-component.e2e.ts b/e2e/process-services/start-process-component.e2e.ts index 7e8c8dc545..f7924eb2c0 100644 --- a/e2e/process-services/start-process-component.e2e.ts +++ b/e2e/process-services/start-process-component.e2e.ts @@ -15,10 +15,9 @@ * limitations under the License. */ -import { Util } from '../util/util'; import resources = require('../util/resources'); import CONSTANTS = require('../util/constants'); -import { LoginPage, StartProcessDialog, Widget } from '@alfresco/adf-testing'; +import { LoginPage, StartProcessDialog, Widget, FileBrowserUtil } from '@alfresco/adf-testing'; import { NavigationBarPage } from '../pages/adf/navigationBarPage'; import { ProcessServicesPage } from '../pages/adf/process-services/processServicesPage'; import { StartProcessPage } from '../pages/adf/process-services/startProcessPage'; @@ -36,7 +35,6 @@ import { FileModel } from '../models/ACS/fileModel'; import dateFormat = require('dateformat'); import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; -import path = require('path'); import { StringUtil } from '@alfresco/adf-testing'; describe('Start Process Component', () => { @@ -61,14 +59,14 @@ describe('Start Process Component', () => { const processNameBiggerThen255Characters = StringUtil.generateRandomString(256); const lengthValidationError = 'Length exceeded, 255 characters max.'; - const auditLogFile = path.join('../e2e/download/', 'Audit.pdf'); + const auditLogFile = 'Audit.pdf'; const jpgFile = new FileModel({ 'location': resources.Files.ADF_DOCUMENTS.JPG.file_location, 'name': resources.Files.ADF_DOCUMENTS.JPG.file_name }); - beforeAll(async (done) => { + beforeAll(async () => { this.alfrescoJsApi = new AlfrescoApi({ provider: 'BPM', hostBpm: browser.params.testConfig.adf_aps.host @@ -99,37 +97,29 @@ describe('Start Process Component', () => { dateFormAppCreated = await apps.importPublishDeployApp(this.alfrescoJsApiUserTwo, dateFormApp.file_location); appId = appCreated.id; - - done(); - }); - afterAll(async (done) => { + afterAll(async () => { await this.alfrescoJsApiUserTwo.activiti.modelsApi.deleteModel(appId); - await this.alfrescoJsApiUserTwo.activiti.modelsApi.deleteModel(simpleAppCreated.id); - await this.alfrescoJsApiUserTwo.activiti.modelsApi.deleteModel(dateFormAppCreated.id); - await this.alfrescoJsApi.activiti.adminTenantsApi.deleteTenant(tenantId); - - done(); }); describe(' Once logged with user without apps', () => { beforeEach(async () => { await loginPage.loginToProcessServicesUsingUserModel(procUserModel); - navigationBarPage.navigateToProcessServicesPage(); - processServicesPage.checkApsContainer(); + await navigationBarPage.navigateToProcessServicesPage(); + await processServicesPage.checkApsContainer(); }); - it('[C260458] Should NOT be able to start a process without process model', () => { - processServicesPage.goToApp('Task App'); - processServiceTabBarPage.clickProcessButton(); - processFiltersPage.clickCreateProcessButton(); - processFiltersPage.clickNewProcessDropdown(); - startProcessPage.checkNoProcessMessage(); + it('[C260458] Should NOT be able to start a process without process model', async () => { + await processServicesPage.goToApp('Task App'); + await processServiceTabBarPage.clickProcessButton(); + await processFiltersPage.clickCreateProcessButton(); + await processFiltersPage.clickNewProcessDropdown(); + await startProcessPage.checkNoProcessMessage(); }); }); @@ -140,338 +130,339 @@ describe('Start Process Component', () => { }); beforeEach(async () => { - navigationBarPage.navigateToProcessServicesPage(); - processServicesPage.checkApsContainer(); + await navigationBarPage.navigateToProcessServicesPage(); + await processServicesPage.checkApsContainer(); }); - it('[C260441] Should display start process form and default name when creating a new process', () => { - processServicesPage.goToApp('Task App'); - processServiceTabBarPage.clickProcessButton(); - processFiltersPage.clickCreateProcessButton(); - processFiltersPage.clickNewProcessDropdown(); - expect(startProcessPage.getDefaultName()).toEqual('My Default Name'); + it('[C260441] Should display start process form and default name when creating a new process', async () => { + await processServicesPage.goToApp('Task App'); + await processServiceTabBarPage.clickProcessButton(); + await processFiltersPage.clickCreateProcessButton(); + await processFiltersPage.clickNewProcessDropdown(); + await expect(await startProcessPage.getDefaultName()).toEqual('My Default Name'); }); - it('[C260445] Should require process definition and be possible to click cancel button', () => { - processServicesPage.goToApp('Task App'); - processServiceTabBarPage.clickProcessButton(); - processFiltersPage.clickCreateProcessButton(); - processFiltersPage.clickNewProcessDropdown(); - startProcessPage.enterProcessName(''); - browser.actions().sendKeys('v\b\b').perform(); // clear doesn't trigger the validator - startProcessPage.checkStartProcessButtonIsDisabled(); - startProcessPage.clickCancelProcessButton(); - processFiltersPage.checkNoContentMessage(); + it('[C260445] Should require process definition and be possible to click cancel button', async () => { + await processServicesPage.goToApp('Task App'); + await processServiceTabBarPage.clickProcessButton(); + await processFiltersPage.clickCreateProcessButton(); + await processFiltersPage.clickNewProcessDropdown(); + await startProcessPage.enterProcessName(''); + await browser.actions().sendKeys('v\b\b').perform(); // clear doesn't trigger the validator + await startProcessPage.checkStartProcessButtonIsDisabled(); + await startProcessPage.clickCancelProcessButton(); + await processFiltersPage.checkNoContentMessage(); }); - it('[C260444] Should require process name', () => { - processServicesPage.goToApp(app.title); + it('[C260444] Should require process name', async () => { + await processServicesPage.goToApp(app.title); - processServiceTabBarPage.clickProcessButton(); + await processServiceTabBarPage.clickProcessButton(); - processFiltersPage.clickCreateProcessButton(); - processFiltersPage.clickNewProcessDropdown(); + await processFiltersPage.clickCreateProcessButton(); + await processFiltersPage.clickNewProcessDropdown(); - startProcessPage.selectFromProcessDropdown(processModelWithoutSe); - startProcessPage.deleteDefaultName('My Default Name'); - startProcessPage.checkStartProcessButtonIsDisabled(); - startProcessPage.clickProcessDropdownArrow(); - startProcessPage.checkOptionIsDisplayed(processModelWithSe); - startProcessPage.checkOptionIsDisplayed(processModelWithoutSe); + await startProcessPage.selectFromProcessDropdown(processModelWithoutSe); + await startProcessPage.deleteDefaultName('My Default Name'); + + await browser.sleep(1000); + + await startProcessPage.checkStartProcessButtonIsDisabled(); + await startProcessPage.clickProcessDropdownArrow(); + await startProcessPage.checkOptionIsDisplayed(processModelWithSe); + await startProcessPage.checkOptionIsDisplayed(processModelWithoutSe); }); - it('[C260443] Should be possible to start a process without start event', () => { - processServicesPage.goToApp(app.title); + it('[C260443] Should be possible to start a process without start event', async () => { + await processServicesPage.goToApp(app.title); - processServiceTabBarPage.clickProcessButton(); + await processServiceTabBarPage.clickProcessButton(); - processFiltersPage.clickCreateProcessButton(); - processFiltersPage.clickNewProcessDropdown(); + await processFiltersPage.clickCreateProcessButton(); + await processFiltersPage.clickNewProcessDropdown(); - expect(startProcessPage.checkSelectProcessPlaceholderIsDisplayed()).toBe(''); + await expect(await startProcessPage.checkSelectProcessPlaceholderIsDisplayed()).toBe(''); - startProcessPage.selectFromProcessDropdown(processModelWithoutSe); + await startProcessPage.selectFromProcessDropdown(processModelWithoutSe); - expect(startProcessPage.getDefaultName()).toEqual('My Default Name'); + await expect(await startProcessPage.getDefaultName()).toEqual('My Default Name'); - startProcessPage.checkStartProcessButtonIsEnabled(); + await startProcessPage.checkStartProcessButtonIsEnabled(); }); - it('[C260449] Should be possible to start a process with start event', () => { - processServicesPage.goToApp(app.title); - processServiceTabBarPage.clickProcessButton(); - processFiltersPage.clickCreateProcessButton(); - processFiltersPage.clickNewProcessDropdown(); - startProcessPage.enterProcessName('Test'); - startProcessPage.selectFromProcessDropdown(processModelWithSe); - startProcessPage.clickFormStartProcessButton(); - processDetailsPage.checkDetailsAreDisplayed(); - browser.controlFlow().execute(async () => { - const processId = await processDetailsPage.getId(); - await this.alfrescoJsApi.activiti.processApi.getProcessInstance(processId).then(function (response) { - expect(processDetailsPage.getProcessStatus()).toEqual(CONSTANTS.PROCESS_STATUS.RUNNING); - expect(processDetailsPage.getEndDate()).toEqual(CONSTANTS.PROCESS_END_DATE); - expect(processDetailsPage.getProcessCategory()).toEqual(CONSTANTS.PROCESS_CATEGORY); - expect(processDetailsPage.getBusinessKey()).toEqual(CONSTANTS.PROCESS_BUSINESS_KEY); - expect(processDetailsPage.getCreatedBy()).toEqual(`${response.startedBy.firstName} ${response.startedBy.lastName}`); - expect(processDetailsPage.getCreated()).toEqual(dateFormat(CONSTANTS.PROCESS_DATE_FORMAT)); - expect(processDetailsPage.getId()).toEqual(response.id); - expect(processDetailsPage.getProcessDescription()).toEqual(CONSTANTS.PROCESS_DESCRIPTION); - expect(processDetailsPage.checkProcessTitleIsDisplayed()).toEqual(response.name); - }); - }); + it('[C260449] Should be possible to start a process with start event', async () => { + await processServicesPage.goToApp(app.title); + await processServiceTabBarPage.clickProcessButton(); + await processFiltersPage.clickCreateProcessButton(); + await processFiltersPage.clickNewProcessDropdown(); + await startProcessPage.enterProcessName('Test'); + await startProcessPage.selectFromProcessDropdown(processModelWithSe); + await startProcessPage.clickFormStartProcessButton(); + await processDetailsPage.checkDetailsAreDisplayed(); + const processId = await processDetailsPage.getId(); + const response = await this.alfrescoJsApi.activiti.processApi.getProcessInstance(processId); + + await expect(await processDetailsPage.getProcessStatus()).toEqual(CONSTANTS.PROCESS_STATUS.RUNNING); + await expect(await processDetailsPage.getEndDate()).toEqual(CONSTANTS.PROCESS_END_DATE); + await expect(await processDetailsPage.getProcessCategory()).toEqual(CONSTANTS.PROCESS_CATEGORY); + await expect(await processDetailsPage.getBusinessKey()).toEqual(CONSTANTS.PROCESS_BUSINESS_KEY); + await expect(await processDetailsPage.getCreatedBy()).toEqual(`${response.startedBy.firstName} ${response.startedBy.lastName}`); + await expect(await processDetailsPage.getCreated()).toEqual(dateFormat(CONSTANTS.PROCESS_DATE_FORMAT)); + await expect(await processDetailsPage.getId()).toEqual(response.id); + await expect(await processDetailsPage.getProcessDescription()).toEqual(CONSTANTS.PROCESS_DESCRIPTION); + await expect(await processDetailsPage.checkProcessTitleIsDisplayed()).toEqual(response.name); }); - it('[C286503] Should NOT display any process definition when typing a non-existent one', () => { - processServicesPage.goToApp(app.title); - processServiceTabBarPage.clickProcessButton(); - processFiltersPage.clickCreateProcessButton(); - processFiltersPage.clickNewProcessDropdown(); - startProcessPage.typeProcessDefinition('nonexistent'); - startProcessPage.checkNoProcessDefinitionOptionIsDisplayed(); - startProcessPage.checkStartProcessButtonIsDisabled(); + it('[C286503] Should NOT display any process definition when typing a non-existent one', async () => { + await processServicesPage.goToApp(app.title); + await processServiceTabBarPage.clickProcessButton(); + await processFiltersPage.clickCreateProcessButton(); + await processFiltersPage.clickNewProcessDropdown(); + await startProcessPage.typeProcessDefinition('nonexistent'); + await startProcessPage.checkNoProcessDefinitionOptionIsDisplayed(); + await startProcessPage.checkStartProcessButtonIsDisabled(); }); - it('[C286504] Should display proper options when typing a part of existent process definitions', () => { - processServicesPage.goToApp(app.title); - processServiceTabBarPage.clickProcessButton(); - processFiltersPage.clickCreateProcessButton(); - processFiltersPage.clickNewProcessDropdown(); - startProcessPage.typeProcessDefinition('process'); - startProcessPage.checkOptionIsDisplayed(processModelWithoutSe); - startProcessPage.checkOptionIsDisplayed(processModelWithSe); - startProcessPage.selectOption(processModelWithoutSe); - startProcessPage.checkStartProcessButtonIsEnabled(); + it('[C286504] Should display proper options when typing a part of existent process definitions', async () => { + await processServicesPage.goToApp(app.title); + await processServiceTabBarPage.clickProcessButton(); + await processFiltersPage.clickCreateProcessButton(); + await processFiltersPage.clickNewProcessDropdown(); + await startProcessPage.typeProcessDefinition('process'); + await startProcessPage.checkOptionIsDisplayed(processModelWithoutSe); + await startProcessPage.checkOptionIsDisplayed(processModelWithSe); + await startProcessPage.selectOption(processModelWithoutSe); + await startProcessPage.checkStartProcessButtonIsEnabled(); }); - it('[C286508] Should display only one option when typing an existent process definition', () => { - processServicesPage.goToApp(app.title); - processServiceTabBarPage.clickProcessButton(); - processFiltersPage.clickCreateProcessButton(); - processFiltersPage.clickNewProcessDropdown(); - startProcessPage.typeProcessDefinition(processModelWithoutSe); - startProcessPage.checkOptionIsDisplayed(processModelWithoutSe); - startProcessPage.checkOptionIsNotDisplayed(processModelWithSe); - startProcessPage.selectOption(processModelWithoutSe); - startProcessPage.checkStartProcessButtonIsEnabled(); + it('[C286508] Should display only one option when typing an existent process definition', async () => { + await processServicesPage.goToApp(app.title); + await processServiceTabBarPage.clickProcessButton(); + await processFiltersPage.clickCreateProcessButton(); + await processFiltersPage.clickNewProcessDropdown(); + await startProcessPage.typeProcessDefinition(processModelWithoutSe); + await startProcessPage.checkOptionIsDisplayed(processModelWithoutSe); + await startProcessPage.checkOptionIsNotDisplayed(processModelWithSe); + await startProcessPage.selectOption(processModelWithoutSe); + await startProcessPage.checkStartProcessButtonIsEnabled(); }); - it('[C286509] Should select automatically the processDefinition when the app contains only one', () => { - processServicesPage.goToApp(simpleApp.title); - processServiceTabBarPage.clickProcessButton(); - processFiltersPage.clickCreateProcessButton(); - processFiltersPage.clickNewProcessDropdown(); - expect(startProcessPage.getProcessDefinitionValue()).toBe(simpleApp.title); - startProcessPage.checkStartProcessButtonIsEnabled(); + it('[C286509] Should select automatically the processDefinition when the app contains only one', async () => { + await processServicesPage.goToApp(simpleApp.title); + await processServiceTabBarPage.clickProcessButton(); + await processFiltersPage.clickCreateProcessButton(); + await processFiltersPage.clickNewProcessDropdown(); + await expect(await startProcessPage.getProcessDefinitionValue()).toBe(simpleApp.title); + await startProcessPage.checkStartProcessButtonIsEnabled(); }); - it('[C286511] Should be able to type the process definition and start a process', () => { - processServicesPage.goToApp(app.title); - processServiceTabBarPage.clickProcessButton(); - processFiltersPage.clickCreateProcessButton(); - processFiltersPage.clickNewProcessDropdown(); - startProcessPage.enterProcessName('Type'); - startProcessPage.typeProcessDefinition(processModelWithoutSe); - startProcessPage.selectOption(processModelWithoutSe); - startProcessPage.checkStartProcessButtonIsEnabled(); - expect(startProcessPage.getProcessDefinitionValue()).toBe(processModelWithoutSe); - startProcessPage.clickStartProcessButton(); - processFiltersPage.clickRunningFilterButton(); - processFiltersPage.selectFromProcessList('Type'); + it('[C286511] Should be able to type the process definition and start a process', async () => { + await processServicesPage.goToApp(app.title); + await processServiceTabBarPage.clickProcessButton(); + await processFiltersPage.clickCreateProcessButton(); + await processFiltersPage.clickNewProcessDropdown(); + await startProcessPage.enterProcessName('Type'); + await startProcessPage.typeProcessDefinition(processModelWithoutSe); + await startProcessPage.selectOption(processModelWithoutSe); + await startProcessPage.checkStartProcessButtonIsEnabled(); + await expect(await startProcessPage.getProcessDefinitionValue()).toBe(processModelWithoutSe); + await startProcessPage.clickStartProcessButton(); + await processFiltersPage.clickRunningFilterButton(); + await processFiltersPage.selectFromProcessList('Type'); }); - it('[C286513] Should be able to use down arrow key when navigating throw suggestions', () => { - processServicesPage.goToApp(app.title); - processServiceTabBarPage.clickProcessButton(); - processFiltersPage.clickCreateProcessButton(); - processFiltersPage.clickNewProcessDropdown(); - startProcessPage.typeProcessDefinition('process'); + it('[C286513] Should be able to use down arrow key when navigating throw suggestions', async () => { + await processServicesPage.goToApp(app.title); + await processServiceTabBarPage.clickProcessButton(); + await processFiltersPage.clickCreateProcessButton(); + await processFiltersPage.clickNewProcessDropdown(); + await startProcessPage.typeProcessDefinition('process'); - startProcessPage.pressDownArrowAndEnter(); - expect(startProcessPage.getProcessDefinitionValue()).toBe(processModelWithoutSe); + await startProcessPage.pressDownArrowAndEnter(); + await expect(await startProcessPage.getProcessDefinitionValue()).toBe(processModelWithoutSe); }); - it('[C286514] Should the process definition input be cleared when clicking on options drop down ', () => { - processServicesPage.goToApp(app.title); - processServiceTabBarPage.clickProcessButton(); - processFiltersPage.clickCreateProcessButton(); - processFiltersPage.clickNewProcessDropdown(); - startProcessPage.typeProcessDefinition('process'); - startProcessPage.selectOption(processModelWithoutSe); - expect(startProcessPage.getProcessDefinitionValue()).toBe(processModelWithoutSe); - startProcessPage.clickProcessDropdownArrow(); + it('[C286514] Should the process definition input be cleared when clicking on options drop down ', async () => { + await processServicesPage.goToApp(app.title); + await processServiceTabBarPage.clickProcessButton(); + await processFiltersPage.clickCreateProcessButton(); + await processFiltersPage.clickNewProcessDropdown(); + await startProcessPage.typeProcessDefinition('process'); + await startProcessPage.selectOption(processModelWithoutSe); + await expect(await startProcessPage.getProcessDefinitionValue()).toBe(processModelWithoutSe); + await startProcessPage.clickProcessDropdownArrow(); - expect(startProcessPage.getProcessDefinitionValue()).toBe(''); + await expect(await startProcessPage.getProcessDefinitionValue()).toBe(''); }); - it('[C260453] Should be possible to add a comment on an active process', () => { - processServicesPage.goToApp(app.title); - processServiceTabBarPage.clickProcessButton(); - processFiltersPage.clickCreateProcessButton(); - processFiltersPage.clickNewProcessDropdown(); - startProcessPage.enterProcessName('Comment Process'); - startProcessPage.selectFromProcessDropdown(processModelWithSe); - startProcessPage.clickFormStartProcessButton(); - processFiltersPage.clickRunningFilterButton(); - processFiltersPage.selectFromProcessList('Comment Process'); - processDetailsPage.addComment('comment1'); - processDetailsPage.checkCommentIsDisplayed('comment1'); + it('[C260453] Should be possible to add a comment on an active process', async () => { + await processServicesPage.goToApp(app.title); + await processServiceTabBarPage.clickProcessButton(); + await processFiltersPage.clickCreateProcessButton(); + await processFiltersPage.clickNewProcessDropdown(); + await startProcessPage.enterProcessName('Comment Process'); + await startProcessPage.selectFromProcessDropdown(processModelWithSe); + await startProcessPage.clickFormStartProcessButton(); + await processFiltersPage.clickRunningFilterButton(); + await processFiltersPage.selectFromProcessList('Comment Process'); + await processDetailsPage.addComment('comment1'); + await processDetailsPage.checkCommentIsDisplayed('comment1'); }); - it('[C260454] Should be possible to download audit log file', () => { - processServicesPage.goToApp(app.title); - processServiceTabBarPage.clickProcessButton(); - processFiltersPage.clickCreateProcessButton(); - processFiltersPage.clickNewProcessDropdown(); - startProcessPage.enterProcessName('Audit Log'); - startProcessPage.selectFromProcessDropdown(processModelWithSe); - startProcessPage.clickFormStartProcessButton(); - processFiltersPage.clickRunningFilterButton(); - processFiltersPage.selectFromProcessList('Audit Log'); - processDetailsPage.clickAuditLogButton(); + it('[C260454] Should be possible to download audit log file', async () => { + await processServicesPage.goToApp(app.title); + await processServiceTabBarPage.clickProcessButton(); + await processFiltersPage.clickCreateProcessButton(); + await processFiltersPage.clickNewProcessDropdown(); + await startProcessPage.enterProcessName('Audit Log'); + await startProcessPage.selectFromProcessDropdown(processModelWithSe); + await startProcessPage.clickFormStartProcessButton(); + await processFiltersPage.clickRunningFilterButton(); + await processFiltersPage.selectFromProcessList('Audit Log'); + await processDetailsPage.clickAuditLogButton(); - expect(Util.fileExists(auditLogFile, 15)).toBe(true); + await expect(await FileBrowserUtil.isFileDownloaded(auditLogFile)).toBe(true); }); - it('Should be able to attach a file using the button', () => { - processServicesPage.goToApp(app.title); + it('Should be able to attach a file using the button', async () => { + await processServicesPage.goToApp(app.title); - processServiceTabBarPage.clickProcessButton(); + await processServiceTabBarPage.clickProcessButton(); - processFiltersPage.clickCreateProcessButton(); - processFiltersPage.clickNewProcessDropdown(); + await processFiltersPage.clickCreateProcessButton(); + await processFiltersPage.clickNewProcessDropdown(); - startProcessPage.enterProcessName('Attach File'); - startProcessPage.selectFromProcessDropdown(processModelWithSe); - startProcessPage.clickFormStartProcessButton(); + await startProcessPage.enterProcessName('Attach File'); + await startProcessPage.selectFromProcessDropdown(processModelWithSe); + await startProcessPage.clickFormStartProcessButton(); - processFiltersPage.clickRunningFilterButton(); - processFiltersPage.selectFromProcessList('Attach File'); + await processFiltersPage.clickRunningFilterButton(); + await processFiltersPage.selectFromProcessList('Attach File'); - attachmentListPage.clickAttachFileButton(jpgFile.location); - attachmentListPage.checkFileIsAttached(jpgFile.name); + await attachmentListPage.clickAttachFileButton(jpgFile.location); + await attachmentListPage.checkFileIsAttached(jpgFile.name); }); - it('[C260451] Should be possible to display process diagram', () => { - processServicesPage.goToApp(app.title); + it('[C260451] Should be possible to display process diagram', async () => { + await processServicesPage.goToApp(app.title); - processServiceTabBarPage.clickProcessButton(); + await processServiceTabBarPage.clickProcessButton(); - processFiltersPage.clickCreateProcessButton(); - processFiltersPage.clickNewProcessDropdown(); + await processFiltersPage.clickCreateProcessButton(); + await processFiltersPage.clickNewProcessDropdown(); - startProcessPage.enterProcessName('Show Diagram'); - startProcessPage.selectFromProcessDropdown(processModelWithSe); - startProcessPage.clickFormStartProcessButton(); + await startProcessPage.enterProcessName('Show Diagram'); + await startProcessPage.selectFromProcessDropdown(processModelWithSe); + await startProcessPage.clickFormStartProcessButton(); - processFiltersPage.clickRunningFilterButton(); - processFiltersPage.selectFromProcessList('Show Diagram'); + await processFiltersPage.clickRunningFilterButton(); + await processFiltersPage.selectFromProcessList('Show Diagram'); - processDetailsPage.clickShowDiagram(); + await processDetailsPage.clickShowDiagram(); }); - it('[C260452] Should redirect user when clicking on active/completed task', () => { - processServicesPage.goToApp(app.title); - processServiceTabBarPage.clickProcessButton(); - processFiltersPage.clickCreateProcessButton(); - processFiltersPage.clickNewProcessDropdown(); - startProcessPage.enterProcessName('Active Task'); - startProcessPage.selectFromProcessDropdown(processModelWithSe); - startProcessPage.clickFormStartProcessButton(); - processFiltersPage.clickRunningFilterButton(); - processFiltersPage.selectFromProcessList('Active Task'); - processDetailsPage.clickOnActiveTask(); - processDetailsPage.checkActiveTaskTitleIsDisplayed(); + it('[C260452] Should redirect user when clicking on active/completed task', async () => { + await processServicesPage.goToApp(app.title); + await processServiceTabBarPage.clickProcessButton(); + await processFiltersPage.clickCreateProcessButton(); + await processFiltersPage.clickNewProcessDropdown(); + await startProcessPage.enterProcessName('Active Task'); + await startProcessPage.selectFromProcessDropdown(processModelWithSe); + await startProcessPage.clickFormStartProcessButton(); + await processFiltersPage.clickRunningFilterButton(); + await processFiltersPage.selectFromProcessList('Active Task'); + await processDetailsPage.clickOnActiveTask(); + await processDetailsPage.checkActiveTaskTitleIsDisplayed(); }); it('[C260457] Should display process in Completed when cancelled', async () => { await loginPage.loginToProcessServicesUsingUserModel(secondProcUserModel); - navigationBarPage.navigateToProcessServicesPage(); - processServicesPage.checkApsContainer(); - processServicesPage.goToApp(app.title); - processServiceTabBarPage.clickProcessButton(); - processFiltersPage.clickCreateProcessButton(); - processFiltersPage.clickNewProcessDropdown(); - startProcessPage.enterProcessName('Cancel Process'); - startProcessPage.selectFromProcessDropdown(processModelWithSe); - startProcessPage.clickFormStartProcessButton(); - processFiltersPage.clickRunningFilterButton(); - processFiltersPage.selectFromProcessList('Cancel Process'); - processDetailsPage.clickCancelProcessButton(); - processFiltersPage.clickCompletedFilterButton(); - processFiltersPage.selectFromProcessList('Cancel Process'); - processDetailsPage.checkShowDiagramIsDisabled(); + await navigationBarPage.navigateToProcessServicesPage(); + await processServicesPage.checkApsContainer(); + await processServicesPage.goToApp(app.title); + await processServiceTabBarPage.clickProcessButton(); + await processFiltersPage.clickCreateProcessButton(); + await processFiltersPage.clickNewProcessDropdown(); + await startProcessPage.enterProcessName('Cancel Process'); + await startProcessPage.selectFromProcessDropdown(processModelWithSe); + await startProcessPage.clickFormStartProcessButton(); + await processFiltersPage.clickRunningFilterButton(); + await processFiltersPage.selectFromProcessList('Cancel Process'); + await processDetailsPage.clickCancelProcessButton(); + await processFiltersPage.clickCompletedFilterButton(); + await processFiltersPage.selectFromProcessList('Cancel Process'); + await processDetailsPage.checkShowDiagramIsDisabled(); }); - it('[C260461] Should be possible to add a comment on a completed/canceled process', () => { - processServicesPage.goToApp(app.title); - processServiceTabBarPage.clickProcessButton(); - processFiltersPage.clickCreateProcessButton(); - processFiltersPage.clickNewProcessDropdown(); - startProcessPage.enterProcessName('Comment Process 2'); - startProcessPage.selectFromProcessDropdown(processModelWithSe); - startProcessPage.clickFormStartProcessButton(); - processFiltersPage.clickRunningFilterButton(); - processFiltersPage.selectFromProcessList('Comment Process 2'); - processDetailsPage.clickCancelProcessButton(); - processFiltersPage.clickCompletedFilterButton(); - processFiltersPage.selectFromProcessList('Comment Process 2'); - processDetailsPage.addComment('goodbye'); - processDetailsPage.checkCommentIsDisplayed('goodbye'); + it('[C260461] Should be possible to add a comment on a completed/canceled process', async () => { + await processServicesPage.goToApp(app.title); + await processServiceTabBarPage.clickProcessButton(); + await processFiltersPage.clickCreateProcessButton(); + await processFiltersPage.clickNewProcessDropdown(); + await startProcessPage.enterProcessName('Comment Process 2'); + await startProcessPage.selectFromProcessDropdown(processModelWithSe); + await startProcessPage.clickFormStartProcessButton(); + await processFiltersPage.clickRunningFilterButton(); + await processFiltersPage.selectFromProcessList('Comment Process 2'); + await processDetailsPage.clickCancelProcessButton(); + await processFiltersPage.clickCompletedFilterButton(); + await processFiltersPage.selectFromProcessList('Comment Process 2'); + await processDetailsPage.addComment('goodbye'); + await processDetailsPage.checkCommentIsDisplayed('goodbye'); }); - it('[C260467] Should NOT be possible to attach a file on a completed process', () => { - processServicesPage.goToApp(app.title); - processServiceTabBarPage.clickProcessButton(); - processFiltersPage.clickCreateProcessButton(); - processFiltersPage.clickNewProcessDropdown(); - startProcessPage.enterProcessName('File'); - startProcessPage.selectFromProcessDropdown(processModelWithSe); - startProcessPage.clickFormStartProcessButton(); - processFiltersPage.clickRunningFilterButton(); - processFiltersPage.selectFromProcessList('File'); - processDetailsPage.clickCancelProcessButton(); - processFiltersPage.clickCompletedFilterButton(); - processFiltersPage.selectFromProcessList('File'); - attachmentListPage.checkAttachFileButtonIsNotDisplayed(); + it('[C260467] Should NOT be possible to attach a file on a completed process', async () => { + await processServicesPage.goToApp(app.title); + await processServiceTabBarPage.clickProcessButton(); + await processFiltersPage.clickCreateProcessButton(); + await processFiltersPage.clickNewProcessDropdown(); + await startProcessPage.enterProcessName('File'); + await startProcessPage.selectFromProcessDropdown(processModelWithSe); + await startProcessPage.clickFormStartProcessButton(); + await processFiltersPage.clickRunningFilterButton(); + await processFiltersPage.selectFromProcessList('File'); + await processDetailsPage.clickCancelProcessButton(); + await processFiltersPage.clickCompletedFilterButton(); + await processFiltersPage.selectFromProcessList('File'); + await attachmentListPage.checkAttachFileButtonIsNotDisplayed(); }); - it('[C291781] Should be displayed an error message if process name exceed 255 characters', () => { - processServicesPage.goToApp(app.title); + it('[C291781] Should be displayed an error message if process name exceed 255 characters', async () => { + await processServicesPage.goToApp(app.title); - processServiceTabBarPage.clickProcessButton(); + await processServiceTabBarPage.clickProcessButton(); - processFiltersPage.clickCreateProcessButton(); - processFiltersPage.clickNewProcessDropdown(); + await processFiltersPage.clickCreateProcessButton(); + await processFiltersPage.clickNewProcessDropdown(); - startProcessPage.enterProcessName(processName255Characters); - startProcessPage.selectFromProcessDropdown(processModelWithoutSe); - startProcessPage.checkStartProcessButtonIsEnabled(); + await startProcessPage.enterProcessName(processName255Characters); + await startProcessPage.selectFromProcessDropdown(processModelWithoutSe); + await startProcessPage.checkStartProcessButtonIsEnabled(); - startProcessPage.enterProcessName(processNameBiggerThen255Characters); - startProcessPage.checkValidationErrorIsDisplayed(lengthValidationError); - startProcessPage.checkStartProcessButtonIsDisabled(); + await startProcessPage.enterProcessName(processNameBiggerThen255Characters); + await startProcessPage.checkValidationErrorIsDisplayed(lengthValidationError); + await startProcessPage.checkStartProcessButtonIsDisabled(); }); - it('[C261039] Advanced date time widget', () => { - processServicesPage.goToApp(dateFormApp.title); - processServiceTabBarPage.clickProcessButton(); - processFiltersPage.clickCreateProcessButton(); - processFiltersPage.clickNewProcessDropdown(); - startProcessPage.enterProcessName('DateFormProcess'); - startProcessPage.formFields().checkWidgetIsVisible('testdate'); - widget.dateWidget().setDateInput('testdate', '15-7-2019'); - startProcessPage.checkStartFormProcessButtonIsEnabled(); - startProcessPage.clickFormStartProcessButton(); + it('[C261039] Advanced date time widget', async () => { + await processServicesPage.goToApp(dateFormApp.title); + await processServiceTabBarPage.clickProcessButton(); + await processFiltersPage.clickCreateProcessButton(); + await processFiltersPage.clickNewProcessDropdown(); + await startProcessPage.enterProcessName('DateFormProcess'); + await startProcessPage.formFields().checkWidgetIsVisible('testdate'); + await widget.dateWidget().setDateInput('testdate', '15-7-2019'); + await startProcessPage.checkStartFormProcessButtonIsEnabled(); + await startProcessPage.clickFormStartProcessButton(); - processFiltersPage.clickRunningFilterButton(); - processFiltersPage.selectFromProcessList('DateFormProcess'); - processDetailsPage.clickOnStartForm(); - startProcessDialog.checkStartProcessDialogIsDisplayed(); - expect(startProcessDialog.getTitle()).toBe('Start Form'); - expect(widget.dateWidget().getDateInput('testdate')).toBe('15-7-2019'); - startProcessDialog.clickCloseButton(); - startProcessDialog.checkStartProcessDialogIsNotDisplayed(); + await processFiltersPage.clickRunningFilterButton(); + await processFiltersPage.selectFromProcessList('DateFormProcess'); + await processDetailsPage.clickOnStartForm(); + await startProcessDialog.checkStartProcessDialogIsDisplayed(); + await expect(await startProcessDialog.getTitle()).toBe('Start Form'); + await expect(await (await widget.dateWidget()).getDateInput('testdate')).toBe('15-7-2019'); + await startProcessDialog.clickCloseButton(); + await startProcessDialog.checkStartProcessDialogIsNotDisplayed(); }); }); }); diff --git a/e2e/process-services/start-task-custom-app.e2e.ts b/e2e/process-services/start-task-custom-app.e2e.ts index 563343e040..87817a0f23 100644 --- a/e2e/process-services/start-task-custom-app.e2e.ts +++ b/e2e/process-services/start-task-custom-app.e2e.ts @@ -57,7 +57,7 @@ describe('Start Task - Custom App', () => { 'name': resources.Files.ADF_DOCUMENTS.PNG.file_name }); - beforeAll(async (done) => { + beforeAll(async () => { const apps = new AppsActions(); const users = new UsersActions(); @@ -80,206 +80,191 @@ describe('Start Task - Custom App', () => { await loginPage.loginToProcessServicesUsingUserModel(processUserModel); - done(); }); - it('[C263942] Should be possible to modify a task', () => { - navigationBarPage.navigateToProcessServicesPage() - .goToApp(appModel.name) - .clickTasksButton(); + it('[C263942] Should be possible to modify a task', async () => { + await (await (await navigationBarPage.navigateToProcessServicesPage()).goToApp(appModel.name)).clickTasksButton(); - taskPage + await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); + + const task = await taskPage.createNewTask(); + await task.addName(tasks[0]); + await task.addForm(app.formName); + await task.clickStartButton(); + + await taskPage + .tasksListPage() + .checkContentIsDisplayed(tasks[0]); + + const taskDetails = await taskPage.taskDetails(); + + await taskDetails.clickInvolvePeopleButton(); + await taskDetails.typeUser(assigneeUserModel.firstName + ' ' + assigneeUserModel.lastName); + await taskDetails.selectUserToInvolve(assigneeUserModel.firstName + ' ' + assigneeUserModel.lastName); + await taskDetails.checkUserIsSelected(assigneeUserModel.firstName + ' ' + assigneeUserModel.lastName); + + await taskDetails.clickAddInvolvedUserButton(); + + await expect(await taskPage.taskDetails().getInvolvedUserEmail(assigneeUserModel.firstName + ' ' + assigneeUserModel.lastName) + ).toEqual(assigneeUserModel.email); + + await taskDetails.selectActivityTab(); + await taskDetails.addComment(firstComment); + await taskDetails.checkCommentIsDisplayed(firstComment); + + const checklistDialog = await taskPage.clickOnAddChecklistButton(); + await checklistDialog.addName(firstChecklist); + await checklistDialog.clickCreateChecklistButton(); + + await taskPage + .checkChecklistIsDisplayed(firstChecklist); + + await taskPage + .taskDetails() + .selectDetailsTab(); + }); + + it('[C263947] Should be able to start a task without form', async () => { + await (await (await navigationBarPage.navigateToProcessServicesPage()).goToApp(appModel.name)).clickTasksButton(); + + await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); + + await taskPage .filtersPage() .goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); - taskPage - .createNewTask() - .addName(tasks[0]) - .addForm(app.formName).clickStartButton() - .then(() => { - taskPage - .tasksListPage() - .checkContentIsDisplayed(tasks[0]); + const task = await taskPage.createNewTask(); - taskPage - .taskDetails() - .clickInvolvePeopleButton() - .typeUser(assigneeUserModel.firstName + ' ' + assigneeUserModel.lastName) - .selectUserToInvolve(assigneeUserModel.firstName + ' ' + assigneeUserModel.lastName) - .checkUserIsSelected(assigneeUserModel.firstName + ' ' + assigneeUserModel.lastName); + await task.addName(tasks[2]); + await task.clickStartButton(); - taskPage - .taskDetails() - .clickAddInvolvedUserButton(); - - expect(taskPage.taskDetails().getInvolvedUserEmail(assigneeUserModel.firstName + ' ' + assigneeUserModel.lastName)).toEqual(assigneeUserModel.email); - - taskPage - .taskDetails() - .selectActivityTab() - .addComment(firstComment) - .checkCommentIsDisplayed(firstComment); - - taskPage - .clickOnAddChecklistButton() - .addName(firstChecklist) - .clickCreateChecklistButton(); - - taskPage - .checkChecklistIsDisplayed(firstChecklist); - - taskPage - .taskDetails() - .selectDetailsTab(); - }); - }); - - it('[C263947] Should be able to start a task without form', () => { - navigationBarPage.navigateToProcessServicesPage() - .goToApp(appModel.name) - .clickTasksButton(); - - taskPage - .filtersPage() - .goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); - - taskPage - .createNewTask() - .addName(tasks[2]) - .clickStartButton(); - - taskPage + await taskPage .tasksListPage() .checkContentIsDisplayed(tasks[2]); - taskPage + await taskPage .formFields() .noFormIsDisplayed(); - expect(taskPage.taskDetails().getFormName()).toEqual(CONSTANTS.TASK_DETAILS.NO_FORM); + await expect(await taskPage.taskDetails().getFormName()).toEqual(CONSTANTS.TASK_DETAILS.NO_FORM); }); - it('[C263948] Should be possible to cancel a task', () => { - navigationBarPage.navigateToProcessServicesPage() - .goToApp(appModel.name) - .clickTasksButton(); + it('[C263948] Should be possible to cancel a task', async () => { + await (await (await navigationBarPage.navigateToProcessServicesPage()).goToApp(appModel.name)).clickTasksButton(); - taskPage - .filtersPage() - .goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); + await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); - taskPage - .createNewTask() - .addName(tasks[3]) - .checkStartButtonIsEnabled() - .clickCancelButton(); + const task = await taskPage.createNewTask(); + await task.addName(tasks[3]); + await task.checkStartButtonIsEnabled(); + await task.clickCancelButton(); - taskPage.tasksListPage() - .checkContentIsNotDisplayed(tasks[3]); + await taskPage.tasksListPage().checkContentIsNotDisplayed(tasks[3]); - expect(taskPage.filtersPage().getActiveFilter()).toEqual(CONSTANTS.TASK_FILTERS.MY_TASKS); + await expect(await taskPage.filtersPage().getActiveFilter()).toEqual(CONSTANTS.TASK_FILTERS.MY_TASKS); }); - it('[C263949] Should be possible to save filled form', () => { - navigationBarPage.navigateToProcessServicesPage().goToApp(appModel.name).clickTasksButton(); - taskPage.filtersPage() + it('[C263949] Should be possible to save filled form', async () => { + await (await (await navigationBarPage.navigateToProcessServicesPage()).goToApp(appModel.name)).clickTasksButton(); + await taskPage.filtersPage() .goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); - taskPage.createNewTask() - .addForm(app.formName) - .addName(tasks[4]) - .clickStartButton(); + const task = await taskPage.createNewTask(); - taskPage + await task.addForm(app.formName); + await task.addName(tasks[4]); + await task.clickStartButton(); + + await taskPage .tasksListPage() .checkContentIsDisplayed(tasks[4]); - expect(taskPage.formFields() - .setFieldValue(by.id, formTextField, formFieldValue) - .getFieldValue(formTextField)).toEqual(formFieldValue); + await taskPage.formFields() + .setFieldValue(by.id, formTextField, formFieldValue); - taskPage + await taskPage .formFields() - .refreshForm() - .checkFieldValue(by.id, formTextField, ''); + .refreshForm(); - taskPage + await taskPage + .formFields().checkFieldValue(by.id, formTextField, ''); + + await taskPage .tasksListPage() .checkContentIsDisplayed(tasks[4]); - taskPage + await taskPage .formFields() - .setFieldValue(by.id, formTextField, formFieldValue) - .checkFieldValue(by.id, formTextField, formFieldValue); + .setFieldValue(by.id, formTextField, formFieldValue); - taskPage + await taskPage.formFields().checkFieldValue(by.id, formTextField, formFieldValue); + + await taskPage .formFields() - .saveForm() - .checkFieldValue(by.id, formTextField, formFieldValue); + .saveForm(); + + await taskPage.formFields().checkFieldValue(by.id, formTextField, formFieldValue); }); - it('[C263951] Should be possible to assign a user', () => { - navigationBarPage.navigateToProcessServicesPage().goToApp(appModel.name).clickTasksButton(); - taskPage - .filtersPage() - .goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); + it('[C263951] Should be possible to assign a user', async () => { + await (await (await navigationBarPage.navigateToProcessServicesPage()).goToApp(appModel.name)).clickTasksButton(); + await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); - taskPage - .createNewTask() - .addName(tasks[5]) - .addAssignee(assigneeUserModel.firstName) - .clickStartButton(); + const task = await taskPage.createNewTask(); + await task.addName(tasks[5]); + await task.addAssignee(assigneeUserModel.firstName); + await task.clickStartButton(); - taskPage + await taskPage .tasksListPage() .checkTaskListIsLoaded(); - taskPage + await taskPage .tasksListPage() .getDataTable().waitForTableBody(); - taskPage - .filtersPage() + await taskPage.filtersPage() .goToFilter(CONSTANTS.TASK_FILTERS.INV_TASKS); - taskPage.tasksListPage() + await taskPage.tasksListPage() .checkContentIsDisplayed(tasks[5]); - taskPage.tasksListPage().selectRow(tasks[5]); + await taskPage.tasksListPage().selectRow(tasks[5]); - taskPage.checkTaskTitle(tasks[5]); + await taskPage.checkTaskTitle(tasks[5]); - expect(taskPage.taskDetails().getAssignee()).toEqual(assigneeUserModel.firstName + ' ' + assigneeUserModel.lastName); + await expect(await taskPage.taskDetails().getAssignee()).toEqual(assigneeUserModel.firstName + ' ' + assigneeUserModel.lastName); }); - it('Attach a file', () => { - navigationBarPage.navigateToProcessServicesPage().goToApp(appModel.name).clickTasksButton(); - taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); - taskPage - .createNewTask() - .addName(tasks[6]) - .clickStartButton(); + it('Attach a file', async () => { + await (await (await navigationBarPage.navigateToProcessServicesPage()).goToApp(appModel.name)).clickTasksButton(); + await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); + const task = await taskPage.createNewTask(); + await task.addName(tasks[6]); + await task.clickStartButton(); - attachmentListPage.clickAttachFileButton(pngFile.location); - attachmentListPage.checkFileIsAttached(pngFile.name); + await attachmentListPage.clickAttachFileButton(pngFile.location); + await attachmentListPage.checkFileIsAttached(pngFile.name); }); - it('[C263945] Should Information box be hidden when showHeaderContent property is set on false on custom app', () => { - navigationBarPage.navigateToProcessServicesPage().goToApp(appModel.name).clickTasksButton(); - taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); - taskPage.createNewTask().addName(showHeaderTask).clickStartButton(); - taskPage.tasksListPage().checkContentIsDisplayed(showHeaderTask); + it('[C263945] Should Information box be hidden when showHeaderContent property is set on false on custom app', async () => { + await (await (await navigationBarPage.navigateToProcessServicesPage()).goToApp(appModel.name)).clickTasksButton(); + await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); + const task = await taskPage.createNewTask(); + await task.addName(showHeaderTask); + await task.clickStartButton(); + await taskPage.tasksListPage().checkContentIsDisplayed(showHeaderTask); - processServiceTabBarPage.clickSettingsButton(); - taskPage.taskDetails().appSettingsToggles().disableShowHeader(); - processServiceTabBarPage.clickTasksButton(); + await processServiceTabBarPage.clickSettingsButton(); + await taskPage.taskDetails().appSettingsToggles().disableShowHeader(); + await processServiceTabBarPage.clickTasksButton(); - taskPage.taskDetails().taskInfoDrawerIsNotDisplayed(); + await taskPage.taskDetails().taskInfoDrawerIsNotDisplayed(); - processServiceTabBarPage.clickSettingsButton(); - taskPage.taskDetails().appSettingsToggles().enableShowHeader(); - processServiceTabBarPage.clickTasksButton(); + await processServiceTabBarPage.clickSettingsButton(); + await taskPage.taskDetails().appSettingsToggles().enableShowHeader(); + await processServiceTabBarPage.clickTasksButton(); - taskPage.taskDetails().taskInfoDrawerIsDisplayed(); + await taskPage.taskDetails().taskInfoDrawerIsDisplayed(); }); }); diff --git a/e2e/process-services/start-task-task-app.e2e.ts b/e2e/process-services/start-task-task-app.e2e.ts index 8aaa6288bc..4f21d9e4f5 100644 --- a/e2e/process-services/start-task-task-app.e2e.ts +++ b/e2e/process-services/start-task-task-app.e2e.ts @@ -36,6 +36,7 @@ import { UsersActions } from '../actions/users.actions'; import { StringUtil } from '@alfresco/adf-testing'; import fs = require('fs'); import path = require('path'); +import { ChecklistDialog } from '../pages/adf/process-services/dialog/createChecklistDialog'; describe('Start Task - Task App', () => { @@ -60,7 +61,7 @@ describe('Start Task - Task App', () => { 'name': resources.Files.ADF_DOCUMENTS.JPG.file_name }); - beforeAll(async (done) => { + beforeAll(async () => { const users = new UsersActions(); this.alfrescoJsApi = new AlfrescoApi({ @@ -87,97 +88,125 @@ describe('Start Task - Task App', () => { await loginPage.loginToProcessServicesUsingUserModel(processUserModel); - done(); }); - beforeEach(async (done) => { - navigationBarPage.navigateToProcessServicesPage().goToTaskApp(); - taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); + beforeEach(async () => { + await (await navigationBarPage.navigateToProcessServicesPage()).goToTaskApp(); + await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); - done(); }); - it('[C260383] Should be possible to modify a task', () => { - taskPage.createNewTask().addName(tasks[0]) - .addForm(app.formName).clickStartButton(); - taskPage.tasksListPage().checkContentIsDisplayed(tasks[0]); - taskPage.taskDetails().clickInvolvePeopleButton() - .typeUser(assigneeUserModel.firstName + ' ' + assigneeUserModel.lastName) - .selectUserToInvolve(assigneeUserModel.firstName + ' ' + assigneeUserModel.lastName) - .checkUserIsSelected(assigneeUserModel.firstName + ' ' + assigneeUserModel.lastName); - taskPage.taskDetails().clickAddInvolvedUserButton(); - expect(taskPage.taskDetails().getInvolvedUserEmail(assigneeUserModel.firstName + ' ' + assigneeUserModel.lastName)) + it('[C260383] Should be possible to modify a task', async () => { + const task = await taskPage.createNewTask(); + await task.addName(tasks[0]); + await task.addForm(app.formName); + await task.clickStartButton(); + await taskPage.tasksListPage().checkContentIsDisplayed(tasks[0]); + const taskDetails = await taskPage.taskDetails(); + await taskDetails.clickInvolvePeopleButton(); + await taskDetails.typeUser(assigneeUserModel.firstName + ' ' + assigneeUserModel.lastName); + await taskDetails.selectUserToInvolve(assigneeUserModel.firstName + ' ' + assigneeUserModel.lastName); + await taskDetails.checkUserIsSelected(assigneeUserModel.firstName + ' ' + assigneeUserModel.lastName); + + await taskPage.taskDetails().clickAddInvolvedUserButton(); + + await expect(await taskPage.taskDetails().getInvolvedUserEmail(assigneeUserModel.firstName + ' ' + assigneeUserModel.lastName)) .toEqual(assigneeUserModel.email); - taskPage.taskDetails().selectActivityTab().addComment(firstComment) - .checkCommentIsDisplayed(firstComment); - taskPage.clickOnAddChecklistButton().addName(firstChecklist).clickCreateChecklistButton(); - taskPage.checkChecklistIsDisplayed(firstChecklist); - taskPage.taskDetails().selectDetailsTab(); + + await taskDetails.selectActivityTab(); + await taskDetails.addComment(firstComment); + await taskDetails.checkCommentIsDisplayed(firstComment); + + await (await taskPage.clickOnAddChecklistButton()).addName(firstChecklist); + + const checklistDialog = new ChecklistDialog(); + await checklistDialog.clickCreateChecklistButton(); + + await taskPage.checkChecklistIsDisplayed(firstChecklist); + await taskPage.taskDetails().selectDetailsTab(); }); - it('[C260422] Should be possible to cancel a task', () => { - taskPage.createNewTask().addName(tasks[3]) - .checkStartButtonIsEnabled().clickCancelButton(); - taskPage.tasksListPage().checkContentIsNotDisplayed(tasks[3]); - expect(taskPage.filtersPage().getActiveFilter()).toEqual(CONSTANTS.TASK_FILTERS.MY_TASKS); + it('[C260422] Should be possible to cancel a task', async () => { + const task = await taskPage.createNewTask(); + + await task.addName(tasks[3]); + await task.checkStartButtonIsEnabled(); + await task.clickCancelButton(); + + await taskPage.tasksListPage().checkContentIsNotDisplayed(tasks[3]); + await expect(await taskPage.filtersPage().getActiveFilter()).toEqual(CONSTANTS.TASK_FILTERS.MY_TASKS); }); - it('[C260423] Should be possible to save filled form', () => { - taskPage.createNewTask() - .addForm(app.formName).addName(tasks[4]).clickStartButton(); - taskPage.tasksListPage().checkContentIsDisplayed(tasks[4]); - expect(taskPage.formFields().setFieldValue(by.id, formTextField, formFieldValue) - .getFieldValue(formTextField)).toEqual(formFieldValue); - taskPage.formFields().refreshForm().checkFieldValue(by.id, formTextField, ''); - taskPage.tasksListPage().checkContentIsDisplayed(tasks[4]); - taskPage.formFields().setFieldValue(by.id, formTextField, formFieldValue) - .checkFieldValue(by.id, formTextField, formFieldValue); - taskPage.formFields().saveForm().checkFieldValue(by.id, formTextField, formFieldValue); + it('[C260423] Should be possible to save filled form', async () => { + const task = await taskPage.createNewTask(); + await task.addForm(app.formName); + await task.addName(tasks[4]); + await task.clickStartButton(); + + await taskPage.tasksListPage().checkContentIsDisplayed(tasks[4]); + + const formFields = await taskPage.formFields(); + await formFields.setFieldValue(by.id, formTextField, formFieldValue); + + await formFields.refreshForm(); + await formFields.checkFieldValue(by.id, formTextField, ''); + await taskPage.tasksListPage().checkContentIsDisplayed(tasks[4]); + + await formFields.setFieldValue(by.id, formTextField, formFieldValue); + await formFields.checkFieldValue(by.id, formTextField, formFieldValue); + + await taskPage.formFields().saveForm(); + await formFields.checkFieldValue(by.id, formTextField, formFieldValue); }); - it('[C260425] Should be possible to assign a user', () => { - taskPage.createNewTask() - .addName(tasks[5]) - .addAssignee(assigneeUserModel.firstName) - .clickStartButton(); + it('[C260425] Should be possible to assign a user', async () => { + const task = await taskPage.createNewTask(); + await task.addName(tasks[5]); + await task.addAssignee(assigneeUserModel.firstName); + await task.clickStartButton(); - taskPage.tasksListPage().checkTaskListIsLoaded(); - taskPage.tasksListPage().getDataTable().waitForTableBody(); - taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.INV_TASKS); - taskPage.tasksListPage().checkContentIsDisplayed(tasks[5]); - taskPage.tasksListPage().selectRow(tasks[5]); - taskPage.checkTaskTitle(tasks[5]); - expect(taskPage.taskDetails().getAssignee()).toEqual(assigneeUserModel.firstName + ' ' + assigneeUserModel.lastName); + await taskPage.tasksListPage().checkTaskListIsLoaded(); + await taskPage.tasksListPage().getDataTable().waitForTableBody(); + await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.INV_TASKS); + await taskPage.tasksListPage().checkContentIsDisplayed(tasks[5]); + await taskPage.tasksListPage().selectRow(tasks[5]); + await taskPage.checkTaskTitle(tasks[5]); + await expect(await taskPage.taskDetails().getAssignee()).toEqual(assigneeUserModel.firstName + ' ' + assigneeUserModel.lastName); }); - it('Attach a file', () => { - taskPage.createNewTask().addName(tasks[6]).clickStartButton(); - attachmentListPage.clickAttachFileButton(jpgFile.location); - attachmentListPage.checkFileIsAttached(jpgFile.name); + it('Attach a file', async () => { + const startTaskDialog = await taskPage.createNewTask(); + await startTaskDialog.addName(tasks[6]); + await startTaskDialog.clickStartButton(); + await attachmentListPage.clickAttachFileButton(jpgFile.location); + await attachmentListPage.checkFileIsAttached(jpgFile.name); }); - it('[C260420] Should Information box be hidden when showHeaderContent property is set on false', () => { - taskPage.tasksListPage().checkContentIsDisplayed(showHeaderTask); + it('[C260420] Should Information box be hidden when showHeaderContent property is set on false', async () => { + await taskPage.tasksListPage().checkContentIsDisplayed(showHeaderTask); - processServiceTabBarPage.clickSettingsButton(); - taskPage.taskDetails().appSettingsToggles().disableShowHeader(); - processServiceTabBarPage.clickTasksButton(); + await processServiceTabBarPage.clickSettingsButton(); + await taskPage.taskDetails().appSettingsToggles().disableShowHeader(); + await processServiceTabBarPage.clickTasksButton(); - taskPage.taskDetails().taskInfoDrawerIsNotDisplayed(); + await taskPage.taskDetails().taskInfoDrawerIsNotDisplayed(); - processServiceTabBarPage.clickSettingsButton(); - taskPage.taskDetails().appSettingsToggles().enableShowHeader(); - processServiceTabBarPage.clickTasksButton(); + await processServiceTabBarPage.clickSettingsButton(); + await taskPage.taskDetails().appSettingsToggles().enableShowHeader(); + await processServiceTabBarPage.clickTasksButton(); - taskPage.taskDetails().taskInfoDrawerIsDisplayed(); + await taskPage.taskDetails().taskInfoDrawerIsDisplayed(); }); - it('[C291780] Should be displayed an error message if task name exceed 255 characters', () => { - const startDialog = taskPage.createNewTask().addName(taskName255Characters).checkStartButtonIsEnabled(); - startDialog.addName(taskNameBiggerThen255Characters) - .blur(startDialog.name) - .checkValidationErrorIsDisplayed(lengthValidationError) - .checkStartButtonIsDisabled(); + it('[C291780] Should be displayed an error message if task name exceed 255 characters', async () => { + const startDialog = await taskPage.createNewTask(); + await startDialog.addName(taskName255Characters); + + await startDialog.checkStartButtonIsEnabled(); + await startDialog.addName(taskNameBiggerThen255Characters); + await startDialog.blur(startDialog.name); + await startDialog.checkValidationErrorIsDisplayed(lengthValidationError); + await startDialog.checkStartButtonIsDisabled(); }); diff --git a/e2e/process-services/task-attachmentList-actionMenu.e2e.ts b/e2e/process-services/task-attachmentList-actionMenu.e2e.ts index 4a0d1154a9..b2f5cd1035 100644 --- a/e2e/process-services/task-attachmentList-actionMenu.e2e.ts +++ b/e2e/process-services/task-attachmentList-actionMenu.e2e.ts @@ -17,7 +17,7 @@ import { browser } from 'protractor'; -import { LoginPage } from '@alfresco/adf-testing'; +import { LoginPage, FileBrowserUtil } from '@alfresco/adf-testing'; import { NavigationBarPage } from '../pages/adf/navigationBarPage'; import { TasksPage } from '../pages/adf/process-services/tasksPage'; import { AttachmentListPage } from '../pages/adf/process-services/attachmentListPage'; @@ -26,7 +26,6 @@ import { ViewerPage } from '../pages/adf/viewerPage'; import CONSTANTS = require('../util/constants'); import resources = require('../util/resources'); -import { Util } from '../util/util'; import path = require('path'); import fs = require('fs'); @@ -48,7 +47,7 @@ describe('Attachment list action menu for tasks', () => { location: resources.Files.ADF_DOCUMENTS.PNG.file_location, name: resources.Files.ADF_DOCUMENTS.PNG.file_name }); - const downloadedPngFile = path.join(__dirname, 'downloads', pngFile.name); + const downloadedPngFile = pngFile.name; let tenantId, appId, relatedContent, relatedContentId; const taskName = { active: 'Active Task', @@ -57,7 +56,7 @@ describe('Attachment list action menu for tasks', () => { emptyList: 'Empty List' }; - beforeAll(async(done) => { + beforeAll(async () => { const apps = new AppsActions(); const users = new UsersActions(); @@ -79,126 +78,126 @@ describe('Attachment list action menu for tasks', () => { await loginPage.loginToProcessServicesUsingUserModel(user); - done(); }); - afterAll(async(done) => { + afterAll(async () => { await this.alfrescoJsApi.activiti.modelsApi.deleteModel(appId); await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); await this.alfrescoJsApi.activiti.adminTenantsApi.deleteTenant(tenantId); - done(); + }); - it('[C277311] Should be able to View /Download /Remove from Attachment List on an active task', () => { - navigationBarPage.navigateToProcessServicesPage().goToApp(app.title).clickTasksButton(); + it('[C277311] Should be able to View /Download /Remove from Attachment List on an active task', async () => { + await (await (await navigationBarPage.navigateToProcessServicesPage()).goToApp(app.title)).clickTasksButton(); - taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); - taskPage.createNewTask().addName(taskName.active).clickStartButton(); + await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); + const task = await taskPage.createNewTask(); + await task.addName(taskName.active); + await task.clickStartButton(); - attachmentListPage.clickAttachFileButton(pngFile.location); - attachmentListPage.viewFile(pngFile.name); + await attachmentListPage.clickAttachFileButton(pngFile.location); + await attachmentListPage.viewFile(pngFile.name); - viewerPage.checkFileNameIsDisplayed(pngFile.name); - viewerPage.clickCloseButton(); + await viewerPage.checkFileNameIsDisplayed(pngFile.name); + await viewerPage.clickCloseButton(); - attachmentListPage.doubleClickFile(pngFile.name); + await attachmentListPage.doubleClickFile(pngFile.name); - viewerPage.checkFileNameIsDisplayed(pngFile.name); - viewerPage.clickCloseButton(); + await viewerPage.checkFileNameIsDisplayed(pngFile.name); + await viewerPage.clickCloseButton(); - attachmentListPage.downloadFile(pngFile.name); + await attachmentListPage.downloadFile(pngFile.name); - browser.driver.sleep(1000); + await browser.sleep(1000); - expect(Util.fileExists(downloadedPngFile, 30)).toBe(true); + await expect(await FileBrowserUtil.isFileDownloaded(downloadedPngFile)).toBe(true); - attachmentListPage.removeFile(pngFile.name); - attachmentListPage.checkFileIsRemoved(pngFile.name); + await attachmentListPage.removeFile(pngFile.name); + await attachmentListPage.checkFileIsRemoved(pngFile.name); }); - it('[C260236] Should be able to View /Download /Remove from Attachment List on a completed task', () => { - navigationBarPage.navigateToProcessServicesPage().goToApp(app.title).clickTasksButton(); + it('[C260236] Should be able to View /Download /Remove from Attachment List on a completed task', async () => { + await (await (await navigationBarPage.navigateToProcessServicesPage()).goToApp(app.title)).clickTasksButton(); - taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); - taskPage.createNewTask().addName(taskName.completed).clickStartButton(); + await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); + const task = await taskPage.createNewTask(); + await task.addName(taskName.completed); + await task.clickStartButton(); - attachmentListPage.clickAttachFileButton(pngFile.location); - attachmentListPage.checkFileIsAttached(pngFile.name); + await attachmentListPage.clickAttachFileButton(pngFile.location); + await attachmentListPage.checkFileIsAttached(pngFile.name); - taskPage.completeTaskNoForm(); - taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.COMPLETED_TASKS); - taskPage.tasksListPage().selectRow(taskName.completed); + await taskPage.completeTaskNoForm(); + await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.COMPLETED_TASKS); + await taskPage.tasksListPage().selectRow(taskName.completed); - attachmentListPage.checkAttachFileButtonIsNotDisplayed(); - attachmentListPage.viewFile(pngFile.name); + await attachmentListPage.checkAttachFileButtonIsNotDisplayed(); + await attachmentListPage.viewFile(pngFile.name); - viewerPage.checkFileNameIsDisplayed(pngFile.name); - viewerPage.clickCloseButton(); + await viewerPage.checkFileNameIsDisplayed(pngFile.name); + await viewerPage.clickCloseButton(); - attachmentListPage.downloadFile(pngFile.name); + await attachmentListPage.downloadFile(pngFile.name); - browser.driver.sleep(1000); + await browser.sleep(1000); - expect(Util.fileExists(downloadedPngFile, 30)).toBe(true); + await expect(await FileBrowserUtil.isFileDownloaded(downloadedPngFile)).toBe(true); - attachmentListPage.removeFile(pngFile.name); - attachmentListPage.checkFileIsRemoved(pngFile.name); + await attachmentListPage.removeFile(pngFile.name); + await attachmentListPage.checkFileIsRemoved(pngFile.name); }); - it('[C260225] Should be able to upload a file in the Attachment list on Task App', () => { - navigationBarPage.navigateToProcessServicesPage().goToTaskApp().clickTasksButton(); + it('[C260225] Should be able to upload a file in the Attachment list on Task App', async () => { + await (await (await navigationBarPage.navigateToProcessServicesPage()).goToApp(app.title)).clickTasksButton(); - taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); - taskPage.createNewTask().addName(taskName.taskApp).clickStartButton(); + await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); + const task = await taskPage.createNewTask(); + await task.addName(taskName.taskApp); + await task.clickStartButton(); - attachmentListPage.clickAttachFileButton(pngFile.location); - attachmentListPage.checkFileIsAttached(pngFile.name); + await attachmentListPage.clickAttachFileButton(pngFile.location); + await attachmentListPage.checkFileIsAttached(pngFile.name); }); - it('[C279884] Should be able to view the empty attachment list for tasks', () => { - navigationBarPage.navigateToProcessServicesPage().goToTaskApp().clickTasksButton(); + it('[C279884] Should be able to view the empty attachment list for tasks', async () => { + await (await (await navigationBarPage.navigateToProcessServicesPage()).goToTaskApp()).clickTasksButton(); - taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); - taskPage.createNewTask().addName(taskName.emptyList).clickStartButton(); + await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); + const task = await taskPage.createNewTask(); + await task.addName(taskName.emptyList); + await task.clickStartButton(); - attachmentListPage.checkEmptyAttachmentList(); - attachmentListPage.clickAttachFileButton(pngFile.location); - attachmentListPage.checkFileIsAttached(pngFile.name); - attachmentListPage.removeFile(pngFile.name); - attachmentListPage.checkFileIsRemoved(pngFile.name); - attachmentListPage.checkEmptyAttachmentList(); + await attachmentListPage.checkEmptyAttachmentList(); + await attachmentListPage.clickAttachFileButton(pngFile.location); + await attachmentListPage.checkFileIsAttached(pngFile.name); + await attachmentListPage.removeFile(pngFile.name); + await attachmentListPage.checkFileIsRemoved(pngFile.name); + await attachmentListPage.checkEmptyAttachmentList(); }); - it('[C260234] Should be able to attache a file on a task on APS and check on ADF', () => { - browser.controlFlow().execute(async() => { - const newTask = await this.alfrescoJsApi.activiti.taskApi.createNewTask({name: 'SHARE KNOWLEDGE'}); + it('[C260234] Should be able to attache a file on a task on APS and check on ADF', async () => { + const newTask = await this.alfrescoJsApi.activiti.taskApi.createNewTask({ name: 'SHARE KNOWLEDGE' }); + const newTaskId = newTask.id; + const filePath = path.join(browser.params.testConfig.main.rootPath + pngFile.location); + const file = fs.createReadStream(filePath); - const newTaskId = newTask.id; + relatedContent = await this.alfrescoJsApi.activiti.contentApi.createRelatedContentOnTask(newTaskId, file, { 'isRelatedContent': true }); + relatedContentId = relatedContent.id; - const filePath = path.join(browser.params.testConfig.main.rootPath + pngFile.location); + await (await (await navigationBarPage.navigateToProcessServicesPage()).goToTaskApp()).clickTasksButton(); - const file = fs.createReadStream(filePath); + await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); + await taskPage.tasksListPage().selectRow('SHARE KNOWLEDGE'); - relatedContent = await this.alfrescoJsApi.activiti.contentApi.createRelatedContentOnTask(newTaskId, file, {'isRelatedContent': true}); - relatedContentId = relatedContent.id; - }); + await attachmentListPage.checkFileIsAttached(pngFile.name); - navigationBarPage.navigateToProcessServicesPage().goToTaskApp().clickTasksButton(); + await this.alfrescoJsApi.activiti.contentApi.deleteContent(relatedContentId); - taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); - taskPage.tasksListPage().selectRow('SHARE KNOWLEDGE'); + await (await (await navigationBarPage.navigateToProcessServicesPage()).goToTaskApp()).clickTasksButton(); - attachmentListPage.checkFileIsAttached(pngFile.name); + await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); + await taskPage.tasksListPage().selectRow('SHARE KNOWLEDGE'); - browser.controlFlow().execute(async() => { - await this.alfrescoJsApi.activiti.contentApi.deleteContent(relatedContentId); - }); - - navigationBarPage.navigateToProcessServicesPage().goToTaskApp().clickTasksButton(); - - taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); - taskPage.tasksListPage().selectRow('SHARE KNOWLEDGE'); - - attachmentListPage.checkEmptyAttachmentList(); + await attachmentListPage.checkEmptyAttachmentList(); }); }); diff --git a/e2e/process-services/task-audit.e2e.ts b/e2e/process-services/task-audit.e2e.ts index e953dec8fc..fa3ee81651 100644 --- a/e2e/process-services/task-audit.e2e.ts +++ b/e2e/process-services/task-audit.e2e.ts @@ -15,7 +15,7 @@ * limitations under the License. */ -import { LoginPage, BrowserActions } from '@alfresco/adf-testing'; +import { LoginPage, BrowserActions, FileBrowserUtil } from '@alfresco/adf-testing'; import { TasksPage } from '../pages/adf/process-services/tasksPage'; import { ProcessServicesPage } from '../pages/adf/process-services/processServicesPage'; @@ -30,9 +30,6 @@ import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; import { UsersActions } from '../actions/users.actions'; import { AppsActions } from '../actions/APS/apps.actions'; -import path = require('path'); -import { Util } from '../util/util'; - describe('Task Audit', () => { const loginPage = new LoginPage(); @@ -43,10 +40,9 @@ describe('Task Audit', () => { const taskTaskApp = 'Audit task task app'; const taskCustomApp = 'Audit task custom app'; const taskCompleteCustomApp = 'Audit completed task custom app'; - const auditLogFile = path.join('./e2e/download/', 'Audit.pdf'); - let appModel; + const auditLogFile = 'Audit.pdf'; - beforeAll(async (done) => { + beforeAll(async () => { const users = new UsersActions(); const apps = new AppsActions(); @@ -63,70 +59,75 @@ describe('Task Audit', () => { await this.alfrescoJsApi.login(processUserModel.email, processUserModel.password); - this.alfrescoJsApi.activiti.taskApi.createNewTask({name: taskTaskApp}); + this.alfrescoJsApi.activiti.taskApi.createNewTask({ name: taskTaskApp }); - appModel = await apps.importPublishDeployApp(this.alfrescoJsApi, app.file_location); + await apps.importPublishDeployApp(this.alfrescoJsApi, app.file_location); await loginPage.loginToProcessServicesUsingUserModel(processUserModel); - done(); }); - beforeEach(async (done) => { + beforeEach(async () => { await BrowserActions.getUrl(browser.params.testConfig.adf.url + '/activiti'); - done(); + }); - it('[C260386] Should Audit file be downloaded when clicking on Task Audit log icon on a standalone running task', () => { - processServices.goToTaskApp().clickTasksButton(); - taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); - taskPage.tasksListPage().checkContentIsDisplayed(taskTaskApp); + it('[C260386] Should Audit file be downloaded when clicking on Task Audit log icon on a standalone running task', async () => { + await (await processServices.goToTaskApp()).clickTasksButton(); - taskPage.taskDetails().clickAuditLogButton(); - expect(Util.fileExists(auditLogFile, 10)).toBe(true); + await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); + await taskPage.tasksListPage().checkContentIsDisplayed(taskTaskApp); + + await taskPage.taskDetails().clickAuditLogButton(); + await expect(await FileBrowserUtil.isFileDownloaded(auditLogFile)).toBe(true); }); - it('[C260389] Should Audit file be downloaded when clicking on Task Audit log icon on a standalone completed task', () => { - processServices.goToTaskApp().clickTasksButton(); - taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); - taskPage.tasksListPage().checkContentIsDisplayed(taskTaskApp); + it('[C260389] Should Audit file be downloaded when clicking on Task Audit log icon on a standalone completed task', async () => { + await (await processServices.goToTaskApp()).clickTasksButton(); - taskPage.completeTaskNoForm(); - taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.COMPLETED_TASKS); - taskPage.tasksListPage().selectRow(taskTaskApp); - expect(taskPage.formFields().getCompletedTaskNoFormMessage()).toEqual('Task ' + taskTaskApp + ' completed'); + await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); + await taskPage.tasksListPage().checkContentIsDisplayed(taskTaskApp); - taskPage.taskDetails().clickAuditLogButton(); - expect(Util.fileExists(auditLogFile, 20)).toBe(true); + await taskPage.completeTaskNoForm(); + await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.COMPLETED_TASKS); + await taskPage.tasksListPage().selectRow(taskTaskApp); + await expect(await taskPage.formFields().getCompletedTaskNoFormMessage()).toEqual('Task ' + taskTaskApp + ' completed'); + + await taskPage.taskDetails().clickAuditLogButton(); + await expect(await FileBrowserUtil.isFileDownloaded(auditLogFile)).toBe(true); }); - it('[C263944] Should Audit file be downloaded when clicking on Task Audit log icon on a custom app standalone completed task', () => { - processServices.goToTaskApp().clickTasksButton(); + it('[C263944] Should Audit file be downloaded when clicking on Task Audit log icon on a custom app standalone completed task', async () => { + await (await processServices.goToTaskApp()).clickTasksButton(); - taskPage.createNewTask().addName(taskCompleteCustomApp).clickStartButton(); + const task = await taskPage.createNewTask(); + await task.addName(taskCompleteCustomApp); + await task.clickStartButton(); - taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); - taskPage.tasksListPage().checkContentIsDisplayed(taskCompleteCustomApp); + await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); + await taskPage.tasksListPage().checkContentIsDisplayed(taskCompleteCustomApp); - taskPage.completeTaskNoForm(); - taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.COMPLETED_TASKS); - taskPage.tasksListPage().selectRow(taskCompleteCustomApp); - expect(taskPage.formFields().getCompletedTaskNoFormMessage()).toEqual('Task ' + taskCompleteCustomApp + ' completed'); + await taskPage.completeTaskNoForm(); + await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.COMPLETED_TASKS); + await taskPage.tasksListPage().selectRow(taskCompleteCustomApp); + await expect(await taskPage.formFields().getCompletedTaskNoFormMessage()).toEqual('Task ' + taskCompleteCustomApp + ' completed'); - taskPage.taskDetails().clickAuditLogButton(); - expect(Util.fileExists(auditLogFile, 20)).toBe(true); + await taskPage.taskDetails().clickAuditLogButton(); + await expect(await FileBrowserUtil.isFileDownloaded(auditLogFile)).toBe(true); }); - it('[C263943] Should Audit file be downloaded when clicking on Task Audit log icon on a custom app standalone running task', () => { - processServices.goToApp(appModel.name).clickTasksButton(); + it('[C263943] Should Audit file be downloaded when clicking on Task Audit log icon on a custom app standalone running task', async () => { + await (await processServices.goToTaskApp()).clickTasksButton(); - taskPage.createNewTask().addName(taskCustomApp).clickStartButton(); + const task = await taskPage.createNewTask(); + await task.addName(taskCustomApp); + await task.clickStartButton(); - taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); - taskPage.tasksListPage().checkContentIsDisplayed(taskCustomApp); + await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); + await taskPage.tasksListPage().checkContentIsDisplayed(taskCustomApp); - taskPage.taskDetails().clickAuditLogButton(); - expect(Util.fileExists(auditLogFile, 10)).toBe(true); + await taskPage.taskDetails().clickAuditLogButton(); + await expect(await FileBrowserUtil.isFileDownloaded(auditLogFile)).toBe(true); }); }); diff --git a/e2e/process-services/task-details-form.e2e.ts b/e2e/process-services/task-details-form.e2e.ts index 732c5c1a20..1cd90ad561 100644 --- a/e2e/process-services/task-details-form.e2e.ts +++ b/e2e/process-services/task-details-form.e2e.ts @@ -38,7 +38,7 @@ describe('Task Details - Form', () => { const filtersPage = new FiltersPage(); let task, otherTask, user, newForm, attachedForm, otherAttachedForm; - beforeAll(async (done) => { + beforeAll(async () => { const users = new UsersActions(); const attachedFormModel = { 'name': StringUtil.generateRandomString(), @@ -53,7 +53,12 @@ describe('Task Details - Form', () => { 'modelType': 2, 'stencilSet': 0 }; - const newFormModel = { 'name': StringUtil.generateRandomString(), 'description': '', 'modelType': 2, 'stencilSet': 0 }; + const newFormModel = { + 'name': StringUtil.generateRandomString(), + 'description': '', + 'modelType': 2, + 'stencilSet': 0 + }; this.alfrescoJsApi = new AlfrescoApi({ provider: 'BPM', @@ -80,10 +85,9 @@ describe('Task Details - Form', () => { await loginPage.loginToProcessServicesUsingUserModel(user); - done(); }); - beforeEach(async (done) => { + beforeEach(async () => { const taskModel = new StandaloneTask(); const emptyTask = await this.alfrescoJsApi.activiti.taskApi.createNewTask(taskModel); @@ -92,64 +96,63 @@ describe('Task Details - Form', () => { task = await this.alfrescoJsApi.activiti.taskApi.getTask(emptyTask.id); - new NavigationBarPage().navigateToProcessServicesPage().goToTaskApp(); - tasksListPage.checkTaskListIsLoaded(); - filtersPage.goToFilter('Involved Tasks'); - tasksListPage.checkTaskListIsLoaded(); + await (await new NavigationBarPage().navigateToProcessServicesPage()).goToTaskApp(); + await tasksListPage.checkTaskListIsLoaded(); + await filtersPage.goToFilter('Involved Tasks'); + await tasksListPage.checkTaskListIsLoaded(); - done(); }); - it('[C280018] Should be able to change the form in a task', () => { - tasksListPage.selectRow(task.name); - taskDetailsPage.clickForm(); + it('[C280018] Should be able to change the form in a task', async () => { + await tasksListPage.selectRow(task.name); + await taskDetailsPage.clickForm(); - taskDetailsPage.checkAttachFormDropdownIsDisplayed(); - taskDetailsPage.checkAttachFormButtonIsDisabled(); + await taskDetailsPage.checkAttachFormDropdownIsDisplayed(); + await taskDetailsPage.checkAttachFormButtonIsDisabled(); - taskDetailsPage.clickAttachFormDropdown(); + await taskDetailsPage.clickAttachFormDropdown(); - taskDetailsPage.selectAttachFormOption(newForm.name); - taskDetailsPage.checkSelectedForm(newForm.name); - taskDetailsPage.checkAttachFormButtonIsEnabled(); + await taskDetailsPage.selectAttachFormOption(newForm.name); + await taskDetailsPage.checkSelectedForm(newForm.name); + await taskDetailsPage.checkAttachFormButtonIsEnabled(); - taskDetailsPage.checkCancelAttachFormIsDisplayed(); - taskDetailsPage.clickCancelAttachForm(); + await taskDetailsPage.checkCancelAttachFormIsDisplayed(); + await taskDetailsPage.clickCancelAttachForm(); - taskDetailsPage.checkFormIsAttached(attachedForm.name); + await taskDetailsPage.checkFormIsAttached(attachedForm.name); - taskDetailsPage.clickForm(); + await taskDetailsPage.clickForm(); - taskDetailsPage.checkAttachFormDropdownIsDisplayed(); - taskDetailsPage.clickAttachFormDropdown(); + await taskDetailsPage.checkAttachFormDropdownIsDisplayed(); + await taskDetailsPage.clickAttachFormDropdown(); - taskDetailsPage.selectAttachFormOption(newForm.name); + await taskDetailsPage.selectAttachFormOption(newForm.name); - taskDetailsPage.checkAttachFormButtonIsDisplayed(); - taskDetailsPage.clickAttachFormButton(); + await taskDetailsPage.checkAttachFormButtonIsDisplayed(); + await taskDetailsPage.clickAttachFormButton(); - taskDetailsPage.checkFormIsAttached(newForm.name); + await taskDetailsPage.checkFormIsAttached(newForm.name); }); - it('[C280019] Should be able to remove the form form a task', () => { - tasksListPage.selectRow(task.name); - taskDetailsPage.clickForm(); + it('[C280019] Should be able to remove the form form a task', async () => { + await tasksListPage.selectRow(task.name); + await taskDetailsPage.clickForm(); - taskDetailsPage.checkRemoveAttachFormIsDisplayed(); - taskDetailsPage.clickRemoveAttachForm(); + await taskDetailsPage.checkRemoveAttachFormIsDisplayed(); + await taskDetailsPage.clickRemoveAttachForm(); - taskDetailsPage.checkFormIsAttached('No form'); + await taskDetailsPage.checkFormIsAttached('No form'); - expect(taskDetailsPage.getFormName()).toEqual(CONSTANTS.TASK_DETAILS.NO_FORM); + await expect(await taskDetailsPage.getFormName()).toEqual(CONSTANTS.TASK_DETAILS.NO_FORM); }); - it('[C280557] Should display task details when selecting another task while the Attach Form dialog is displayed', () => { - tasksListPage.selectRow(task.name); - taskDetailsPage.clickForm(); + it('[C280557] Should display task details when selecting another task while the Attach Form dialog is displayed', async () => { + await tasksListPage.selectRow(task.name); + await taskDetailsPage.clickForm(); - taskDetailsPage.checkRemoveAttachFormIsDisplayed(); + await taskDetailsPage.checkRemoveAttachFormIsDisplayed(); - tasksListPage.selectRow(otherTask.name); - taskDetailsPage.checkFormIsAttached(otherAttachedForm.name); + await tasksListPage.selectRow(otherTask.name); + await taskDetailsPage.checkFormIsAttached(otherAttachedForm.name); }); }); diff --git a/e2e/process-services/task-details-no-form.e2e.ts b/e2e/process-services/task-details-no-form.e2e.ts index a87425636e..cb01c7308a 100644 --- a/e2e/process-services/task-details-no-form.e2e.ts +++ b/e2e/process-services/task-details-no-form.e2e.ts @@ -41,7 +41,7 @@ describe('Task Details - No form', () => { const apps = new AppsActions(); let importedApp; - beforeAll(async (done) => { + beforeAll(async () => { const users = new UsersActions(); this.alfrescoJsApi = new AlfrescoApi({ @@ -63,20 +63,20 @@ describe('Task Details - No form', () => { await loginPage.loginToProcessServicesUsingUserModel(processUserModel); - done(); }); - it('[C289311] Should attach form and complete buttons to be displayed when no form is attached', () => { - navigationBarPage.navigateToProcessServicesPage().goToTaskApp().clickTasksButton(); - taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); + it('[C289311] Should attach form and complete buttons to be displayed when no form is attached', async () => { + await (await (await navigationBarPage.navigateToProcessServicesPage()).goToTaskApp()).clickTasksButton(); + await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); - taskPage.tasksListPage().checkContentIsDisplayed(app.taskName); - taskPage.tasksListPage().selectRow(app.taskName); - taskPage.taskDetails().noFormIsDisplayed(); - taskPage.taskDetails().checkCompleteTaskButtonIsDisplayed().checkCompleteTaskButtonIsEnabled(); - taskPage.taskDetails().checkAttachFormButtonIsNotDisplayed(); - expect(taskPage.taskDetails().getFormName()).toEqual(CONSTANTS.TASK_DETAILS.NO_FORM); - expect(taskPage.formFields().getNoFormMessage()).toEqual(noFormMessage); + await taskPage.tasksListPage().checkContentIsDisplayed(app.taskName); + await taskPage.tasksListPage().selectRow(app.taskName); + await taskPage.taskDetails().noFormIsDisplayed(); + await taskPage.taskDetails().checkCompleteTaskButtonIsDisplayed(); + await taskPage.taskDetails().checkCompleteTaskButtonIsEnabled(); + await taskPage.taskDetails().checkAttachFormButtonIsNotDisplayed(); + await expect(await taskPage.taskDetails().getFormName()).toEqual(CONSTANTS.TASK_DETAILS.NO_FORM); + await expect(await taskPage.formFields().getNoFormMessage()).toEqual(noFormMessage); }); diff --git a/e2e/process-services/task-details.e2e.ts b/e2e/process-services/task-details.e2e.ts index 7e0b50a557..c70af27caa 100644 --- a/e2e/process-services/task-details.e2e.ts +++ b/e2e/process-services/task-details.e2e.ts @@ -45,7 +45,7 @@ describe('Task Details component', () => { const loginPage = new LoginPage(); const taskPage = new TasksPage(); - beforeAll(async (done) => { + beforeAll(async () => { const users = new UsersActions(); apps = new AppsActions(); @@ -66,272 +66,255 @@ describe('Task Details component', () => { await loginPage.loginToProcessServicesUsingUserModel(processUserModel); - done(); }); - beforeEach(async (done) => { + beforeEach(async () => { await BrowserActions.getUrl(browser.params.testConfig.adf.url + '/activiti'); - done(); }); it('[C260506] Should display task details for standalone task - Task App', async () => { - processServices.goToTaskApp().clickTasksButton(); - taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); - taskPage.createNewTask() - .addName(tasks[1]) - .addDescription('Description') - .addForm(app.formName) - .clickStartButton(); - expect(taskPage.taskDetails().getTitle()).toEqual('Activities'); + await (await processServices.goToTaskApp()).clickTasksButton(); - const allTasks = await browser.controlFlow().execute(async () => { - return this.alfrescoJsApi.activiti.taskApi.listTasks(new Task({ sort: 'created-desc' })); - }); + await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); + const task = await taskPage.createNewTask(); + await task.addName(tasks[1]); + await task.addDescription('Description'); + await task.addForm(app.formName); + await task.clickStartButton(); + + await expect(await taskPage.taskDetails().getTitle()).toEqual('Activities'); + + const allTasks = await this.alfrescoJsApi.activiti.taskApi.listTasks(new Task({ sort: 'created-desc' })); const taskModel = new TaskModel(allTasks.data[0]); - taskPage.tasksListPage().checkContentIsDisplayed(taskModel.getName()); - expect(taskPage.taskDetails().getCreated()).toEqual(dateFormat(taskModel.getCreated(), TASK_DATE_FORMAT)); - expect(taskPage.taskDetails().getId()).toEqual(taskModel.getId()); - expect(taskPage.taskDetails().getDescription()).toEqual(taskModel.getDescription()); - expect(taskPage.taskDetails().getAssignee()).toEqual(taskModel.getAssignee().getEntireName()); - expect(taskPage.taskDetails().getCategory()).toEqual(CONSTANTS.TASK_DETAILS.NO_CATEGORY); - expect(taskPage.taskDetails().getDueDate()).toEqual(CONSTANTS.TASK_DETAILS.NO_DATE); - expect(taskPage.taskDetails().getParentName()).toEqual(CONSTANTS.TASK_DETAILS.NO_PARENT); - expect(taskPage.taskDetails().getParentTaskId()).toEqual(''); - expect(taskPage.taskDetails().getDuration()).toEqual(''); - expect(taskPage.taskDetails().getEndDate()).toEqual(''); - expect(taskPage.taskDetails().getStatus()).toEqual(CONSTANTS.TASK_STATUS.RUNNING); - - const taskForm = await browser.controlFlow().execute(async () => { - return await this.alfrescoJsApi.activiti.taskFormsApi.getTaskForm(allTasks.data[0].id); - }); + await taskPage.tasksListPage().checkContentIsDisplayed(taskModel.getName()); + await expect(await taskPage.taskDetails().getCreated()).toEqual(dateFormat(taskModel.getCreated(), TASK_DATE_FORMAT)); + await expect(await taskPage.taskDetails().getId()).toEqual(taskModel.getId()); + await expect(await taskPage.taskDetails().getDescription()).toEqual(taskModel.getDescription()); + await expect(await taskPage.taskDetails().getAssignee()).toEqual(taskModel.getAssignee().getEntireName()); + await expect(await taskPage.taskDetails().getCategory()).toEqual(CONSTANTS.TASK_DETAILS.NO_CATEGORY); + await expect(await taskPage.taskDetails().getDueDate()).toEqual(CONSTANTS.TASK_DETAILS.NO_DATE); + await expect(await taskPage.taskDetails().getParentName()).toEqual(CONSTANTS.TASK_DETAILS.NO_PARENT); + await expect(await taskPage.taskDetails().getParentTaskId()).toEqual(''); + await expect(await taskPage.taskDetails().getDuration()).toEqual(''); + await expect(await taskPage.taskDetails().getEndDate()).toEqual(''); + await expect(await taskPage.taskDetails().getStatus()).toEqual(CONSTANTS.TASK_STATUS.RUNNING); + const taskForm = await this.alfrescoJsApi.activiti.taskFormsApi.getTaskForm(allTasks.data[0].id); formModel = new FormModel(taskForm); - expect(taskPage.taskDetails().getFormName()).toEqual(formModel.getName()); + await expect(await taskPage.taskDetails().getFormName()).toEqual(formModel.getName()); }); it('[C263946] Should display task details for standalone task - Custom App', async () => { - processServices.goToApp(appModel.name).clickTasksButton(); - taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); - taskPage.createNewTask() - .addName(tasks[1]) - .addDescription('Description') - .addForm(app.formName) - .clickStartButton(); - expect(taskPage.taskDetails().getTitle()).toEqual('Activities'); + await (await processServices.goToTaskApp()).clickTasksButton(); - const allTasks = await browser.controlFlow().execute(async () => { - return this.alfrescoJsApi.activiti.taskApi.listTasks(new Task({ sort: 'created-desc' })); - }); + await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); + const task = await taskPage.createNewTask(); + await task.addName(tasks[1]); + await task.addDescription('Description'); + await task.addForm(app.formName); + await task.clickStartButton(); + + await expect(await taskPage.taskDetails().getTitle()).toEqual('Activities'); + + const allTasks = await this.alfrescoJsApi.activiti.taskApi.listTasks(new Task({ sort: 'created-desc' })); const taskModel = new TaskModel(allTasks.data[0]); - taskPage.tasksListPage().checkContentIsDisplayed(taskModel.getName()); + await taskPage.tasksListPage().checkContentIsDisplayed(taskModel.getName()); - expect(taskPage.taskDetails().getCreated()).toEqual(dateFormat(taskModel.getCreated(), TASK_DATE_FORMAT)); - expect(taskPage.taskDetails().getId()).toEqual(taskModel.getId()); - expect(taskPage.taskDetails().getDescription()).toEqual(taskModel.getDescription()); - expect(taskPage.taskDetails().getAssignee()).toEqual(taskModel.getAssignee().getEntireName()); - expect(taskPage.taskDetails().getCategory()).toEqual(taskModel.getCategory()); - expect(taskPage.taskDetails().getDueDate()).toEqual(CONSTANTS.TASK_DETAILS.NO_DATE); - expect(taskPage.taskDetails().getParentName()).toEqual(CONSTANTS.TASK_DETAILS.NO_PARENT); - expect(taskPage.taskDetails().getDuration()).toEqual('' ); - expect(taskPage.taskDetails().getEndDate()).toEqual(''); - expect(taskPage.taskDetails().getParentTaskId()).toEqual(''); - expect(taskPage.taskDetails().getStatus()).toEqual(CONSTANTS.TASK_STATUS.RUNNING); + await expect(await taskPage.taskDetails().getCreated()).toEqual(dateFormat(taskModel.getCreated(), TASK_DATE_FORMAT)); + await expect(await taskPage.taskDetails().getId()).toEqual(taskModel.getId()); + await expect(await taskPage.taskDetails().getDescription()).toEqual(taskModel.getDescription()); + await expect(await taskPage.taskDetails().getAssignee()).toEqual(taskModel.getAssignee().getEntireName()); - const taskForm = await browser.controlFlow().execute(async () => { - return await this.alfrescoJsApi.activiti.taskFormsApi.getTaskForm(allTasks.data[0].id); - }); + await expect(await taskPage.taskDetails().getCategory()).toEqual(CONSTANTS.TASK_DETAILS.NO_CATEGORY); + await expect(await taskPage.taskDetails().getDueDate()).toEqual(CONSTANTS.TASK_DETAILS.NO_DATE); + await expect(await taskPage.taskDetails().getParentName()).toEqual(CONSTANTS.TASK_DETAILS.NO_PARENT); + await expect(await taskPage.taskDetails().getDuration()).toEqual(''); + await expect(await taskPage.taskDetails().getEndDate()).toEqual(''); + await expect(await taskPage.taskDetails().getParentTaskId()).toEqual(''); + await expect(await taskPage.taskDetails().getStatus()).toEqual(CONSTANTS.TASK_STATUS.RUNNING); + + const taskForm = await this.alfrescoJsApi.activiti.taskFormsApi.getTaskForm(allTasks.data[0].id); formModel = new FormModel(taskForm); - expect(taskPage.taskDetails().getFormName()).toEqual(formModel.getName()); + await expect(await taskPage.taskDetails().getFormName()).toEqual(formModel.getName()); }); it('[C286706] Should display task details for task - Task App', async () => { - browser.controlFlow().execute(async () => { - await apps.startProcess(this.alfrescoJsApi, appModel); - }); + await apps.startProcess(this.alfrescoJsApi, appModel); - processServices.goToTaskApp().clickTasksButton(); - taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); + await (await processServices.goToTaskApp()).clickTasksButton(); - expect(taskPage.taskDetails().getTitle()).toEqual('Activities'); + await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); - const allTasks = await browser.controlFlow().execute(async () => { - return await this.alfrescoJsApi.activiti.taskApi.listTasks(new Task({sort: 'created-desc'})); - }); + await expect(await taskPage.taskDetails().getTitle()).toEqual('Activities'); + + const allTasks = await this.alfrescoJsApi.activiti.taskApi.listTasks(new Task({ sort: 'created-desc' })); const taskModel = new TaskModel(allTasks.data[0]); - taskPage.tasksListPage().checkContentIsDisplayed(taskModel.getName()); - expect(taskPage.taskDetails().getCreated()).toEqual(dateFormat(taskModel.getCreated(), TASK_DATE_FORMAT)); - expect(taskPage.taskDetails().getId()).toEqual(taskModel.getId()); - expect(taskPage.taskDetails().getDescription()).toEqual(CONSTANTS.TASK_DETAILS.NO_DESCRIPTION); - expect(taskPage.taskDetails().getAssignee()).toEqual(taskModel.getAssignee().getEntireName()); - expect(taskPage.taskDetails().getCategory()).toEqual(CONSTANTS.TASK_DETAILS.NO_CATEGORY); - expect(taskPage.taskDetails().getDueDate()).toEqual(CONSTANTS.TASK_DETAILS.NO_DATE); - expect(taskPage.taskDetails().getParentName()).toEqual(appModel.definition.models[0].name); - expect(taskPage.taskDetails().getDuration()).toEqual('' ); - expect(taskPage.taskDetails().getEndDate()).toEqual(''); - expect(taskPage.taskDetails().getParentTaskId()).toEqual(''); - expect(taskPage.taskDetails().getStatus()).toEqual(CONSTANTS.TASK_STATUS.RUNNING); + await taskPage.tasksListPage().checkContentIsDisplayed(taskModel.getName()); + await expect(await taskPage.taskDetails().getCreated()).toEqual(dateFormat(taskModel.getCreated(), TASK_DATE_FORMAT)); + await expect(await taskPage.taskDetails().getId()).toEqual(taskModel.getId()); + await expect(await taskPage.taskDetails().getDescription()).toEqual(CONSTANTS.TASK_DETAILS.NO_DESCRIPTION); + await expect(await taskPage.taskDetails().getAssignee()).toEqual(taskModel.getAssignee().getEntireName()); + await expect(await taskPage.taskDetails().getCategory()).toEqual(CONSTANTS.TASK_DETAILS.NO_CATEGORY); + await expect(await taskPage.taskDetails().getDueDate()).toEqual(CONSTANTS.TASK_DETAILS.NO_DATE); + await expect(await taskPage.taskDetails().getParentName()).toEqual(appModel.definition.models[0].name); + await expect(await taskPage.taskDetails().getDuration()).toEqual(''); + await expect(await taskPage.taskDetails().getEndDate()).toEqual(''); + await expect(await taskPage.taskDetails().getParentTaskId()).toEqual(''); + await expect(await taskPage.taskDetails().getStatus()).toEqual(CONSTANTS.TASK_STATUS.RUNNING); - const taskForm = await browser.controlFlow().execute(async () => { - return await this.alfrescoJsApi.activiti.taskFormsApi.getTaskForm(allTasks.data[0].id); - }); + const taskForm = await this.alfrescoJsApi.activiti.taskFormsApi.getTaskForm(allTasks.data[0].id); formModel = new FormModel(taskForm); - expect(taskPage.taskDetails().getFormName()) + await expect(await taskPage.taskDetails().getFormName()) .toEqual(formModel.getName() === null ? CONSTANTS.TASK_DETAILS.NO_FORM : formModel.getName()); }); it('[C286705] Should display task details for task - Custom App', async () => { - browser.controlFlow().execute(async () => { - await apps.startProcess(this.alfrescoJsApi, appModel); - }); + await apps.startProcess(this.alfrescoJsApi, appModel); - processServices.goToApp(appModel.name).clickTasksButton(); - taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); + await (await processServices.goToTaskApp()).clickTasksButton(); - expect(taskPage.taskDetails().getTitle()).toEqual('Activities'); + await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); - const allTasks = await browser.controlFlow().execute(async () => { - return await this.alfrescoJsApi.activiti.taskApi.listTasks(new Task({sort: 'created-desc'})); - }); + await expect(await taskPage.taskDetails().getTitle()).toEqual('Activities'); + + const allTasks = await this.alfrescoJsApi.activiti.taskApi.listTasks(new Task({ sort: 'created-desc' })); const taskModel = new TaskModel(allTasks.data[0]); - taskPage.tasksListPage().checkContentIsDisplayed(taskModel.getName()); - expect(taskPage.taskDetails().getCreated()).toEqual(dateFormat(taskModel.getCreated(), TASK_DATE_FORMAT)); - expect(taskPage.taskDetails().getId()).toEqual(taskModel.getId()); - expect(taskPage.taskDetails().getDescription()).toEqual(CONSTANTS.TASK_DETAILS.NO_DESCRIPTION); - expect(taskPage.taskDetails().getAssignee()).toEqual(taskModel.getAssignee().getEntireName()); - expect(taskPage.taskDetails().getCategory()).toEqual(CONSTANTS.TASK_DETAILS.NO_CATEGORY); - expect(taskPage.taskDetails().getDueDate()).toEqual(CONSTANTS.TASK_DETAILS.NO_DATE); - expect(taskPage.taskDetails().getParentName()).toEqual(appModel.definition.models[0].name); - expect(taskPage.taskDetails().getDuration()).toEqual('' ); - expect(taskPage.taskDetails().getEndDate()).toEqual(''); - expect(taskPage.taskDetails().getParentTaskId()).toEqual(''); - expect(taskPage.taskDetails().getStatus()).toEqual(CONSTANTS.TASK_STATUS.RUNNING); + await taskPage.tasksListPage().checkContentIsDisplayed(taskModel.getName()); + await expect(await taskPage.taskDetails().getCreated()).toEqual(dateFormat(taskModel.getCreated(), TASK_DATE_FORMAT)); + await expect(await taskPage.taskDetails().getId()).toEqual(taskModel.getId()); + await expect(await taskPage.taskDetails().getDescription()).toEqual(CONSTANTS.TASK_DETAILS.NO_DESCRIPTION); + await expect(await taskPage.taskDetails().getAssignee()).toEqual(taskModel.getAssignee().getEntireName()); + await expect(await taskPage.taskDetails().getCategory()).toEqual(CONSTANTS.TASK_DETAILS.NO_CATEGORY); + await expect(await taskPage.taskDetails().getDueDate()).toEqual(CONSTANTS.TASK_DETAILS.NO_DATE); + await expect(await taskPage.taskDetails().getParentName()).toEqual(appModel.definition.models[0].name); + await expect(await taskPage.taskDetails().getDuration()).toEqual(''); + await expect(await taskPage.taskDetails().getEndDate()).toEqual(''); + await expect(await taskPage.taskDetails().getParentTaskId()).toEqual(''); + await expect(await taskPage.taskDetails().getStatus()).toEqual(CONSTANTS.TASK_STATUS.RUNNING); - const taskForm = await browser.controlFlow().execute(async () => { - return await this.alfrescoJsApi.activiti.taskFormsApi.getTaskForm(allTasks.data[0].id); - }); + const taskForm = await this.alfrescoJsApi.activiti.taskFormsApi.getTaskForm(allTasks.data[0].id); formModel = new FormModel(taskForm); - expect(taskPage.taskDetails().getFormName()) + await expect(await taskPage.taskDetails().getFormName()) .toEqual(formModel.getName() === null ? CONSTANTS.TASK_DETAILS.NO_FORM : formModel.getName()); }); - it('[C286708] Should display task details for subtask - Task App', async() => { + it('[C286708] Should display task details for subtask - Task App', async () => { const taskName = 'TaskAppSubtask'; const checklistName = 'TaskAppChecklist'; - browser.controlFlow().execute(async () => { - await this.alfrescoJsApi.activiti.taskApi.createNewTask({'name': taskName}); - }); + await this.alfrescoJsApi.activiti.taskApi.createNewTask({ 'name': taskName }); - processServices.goToTaskApp().clickTasksButton(); - taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); - taskPage.tasksListPage().checkContentIsDisplayed(taskName); - taskPage.tasksListPage().selectRow(taskName); + await (await processServices.goToTaskApp()).clickTasksButton(); - taskPage.clickOnAddChecklistButton().addName(checklistName).clickCreateChecklistButton(); - taskPage.checkChecklistIsDisplayed(checklistName); + await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); + await taskPage.tasksListPage().checkContentIsDisplayed(taskName); + await taskPage.tasksListPage().selectRow(taskName); - taskPage.tasksListPage().checkContentIsDisplayed(checklistName); - taskPage.tasksListPage().selectRow(checklistName); + const dialog = await taskPage.clickOnAddChecklistButton(); + await dialog.addName(checklistName); + await dialog.clickCreateChecklistButton(); - const allTasks = await browser.controlFlow().execute(async () => { - return this.alfrescoJsApi.activiti.taskApi.listTasks(new Task({ sort: 'created-desc' })); - }); + await taskPage.checkChecklistIsDisplayed(checklistName); + + await taskPage.tasksListPage().checkContentIsDisplayed(checklistName); + await taskPage.tasksListPage().selectRow(checklistName); + + const allTasks = await this.alfrescoJsApi.activiti.taskApi.listTasks(new Task({ sort: 'created-desc' })); const taskModel = new TaskModel(allTasks.data[0]); - taskPage.tasksListPage().checkContentIsDisplayed(taskModel.getName()); - expect(taskPage.taskDetails().getCreated()).toEqual(dateFormat(taskModel.getCreated(), TASK_DATE_FORMAT)); - expect(taskPage.taskDetails().getId()).toEqual(taskModel.getId()); - expect(taskPage.taskDetails().getDescription()).toEqual(CONSTANTS.TASK_DETAILS.NO_DESCRIPTION); - expect(taskPage.taskDetails().getAssignee()).toEqual(taskModel.getAssignee().getEntireName()); - expect(taskPage.taskDetails().getCategory()).toEqual(CONSTANTS.TASK_DETAILS.NO_CATEGORY); - expect(taskPage.taskDetails().getDueDate()).toEqual(CONSTANTS.TASK_DETAILS.NO_DATE); - expect(taskPage.taskDetails().getParentName()).toEqual(CONSTANTS.TASK_DETAILS.NO_PARENT); - expect(taskPage.taskDetails().getDuration()).toEqual(''); - expect(taskPage.taskDetails().getEndDate()).toEqual(''); - expect(taskPage.taskDetails().getParentTaskId()).toEqual(taskModel.getParentTaskId()); - expect(taskPage.taskDetails().getStatus()).toEqual(CONSTANTS.TASK_STATUS.RUNNING); + await taskPage.tasksListPage().checkContentIsDisplayed(taskModel.getName()); + await expect(await taskPage.taskDetails().getCreated()).toEqual(dateFormat(taskModel.getCreated(), TASK_DATE_FORMAT)); + await expect(await taskPage.taskDetails().getId()).toEqual(taskModel.getId()); + await expect(await taskPage.taskDetails().getDescription()).toEqual(CONSTANTS.TASK_DETAILS.NO_DESCRIPTION); + await expect(await taskPage.taskDetails().getAssignee()).toEqual(taskModel.getAssignee().getEntireName()); + await expect(await taskPage.taskDetails().getCategory()).toEqual(CONSTANTS.TASK_DETAILS.NO_CATEGORY); + await expect(await taskPage.taskDetails().getDueDate()).toEqual(CONSTANTS.TASK_DETAILS.NO_DATE); + await expect(await taskPage.taskDetails().getParentName()).toEqual(CONSTANTS.TASK_DETAILS.NO_PARENT); + await expect(await taskPage.taskDetails().getDuration()).toEqual(''); + await expect(await taskPage.taskDetails().getEndDate()).toEqual(''); + await expect(await taskPage.taskDetails().getParentTaskId()).toEqual(taskModel.getParentTaskId()); + await expect(await taskPage.taskDetails().getStatus()).toEqual(CONSTANTS.TASK_STATUS.RUNNING); }); - it('[C286707] Should display task details for subtask - Custom App', async() => { + it('[C286707] Should display task details for subtask - Custom App', async () => { const checklistName = 'CustomAppChecklist'; - browser.controlFlow().execute(async () => { - await apps.startProcess(this.alfrescoJsApi, appModel); - }); + await apps.startProcess(this.alfrescoJsApi, appModel); - processServices.goToApp(appModel.name).clickTasksButton(); - taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); + await (await processServices.goToTaskApp()).clickTasksButton(); - expect(taskPage.taskDetails().getTitle()).toEqual('Activities'); + await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); - taskPage.clickOnAddChecklistButton().addName(checklistName).clickCreateChecklistButton(); - taskPage.checkChecklistIsDisplayed(checklistName); + await expect(await taskPage.taskDetails().getTitle()).toEqual('Activities'); - taskPage.tasksListPage().checkContentIsDisplayed(checklistName); - taskPage.tasksListPage().selectRow(checklistName); + const dialog = await taskPage.clickOnAddChecklistButton(); + await dialog.addName(checklistName); + await dialog.clickCreateChecklistButton(); - const allTasks = await browser.controlFlow().execute(async () => { - return this.alfrescoJsApi.activiti.taskApi.listTasks(new Task({ sort: 'created-desc' })); - }); + await taskPage.checkChecklistIsDisplayed(checklistName); + + await taskPage.tasksListPage().checkContentIsDisplayed(checklistName); + await taskPage.tasksListPage().selectRow(checklistName); + + const allTasks = await this.alfrescoJsApi.activiti.taskApi.listTasks(new Task({ sort: 'created-desc' })); const taskModel = new TaskModel(allTasks.data[0]); - taskPage.tasksListPage().checkContentIsDisplayed(taskModel.getName()); - expect(taskPage.taskDetails().getCreated()).toEqual(dateFormat(taskModel.getCreated(), TASK_DATE_FORMAT)); - expect(taskPage.taskDetails().getId()).toEqual(taskModel.getId()); - expect(taskPage.taskDetails().getDescription()).toEqual(CONSTANTS.TASK_DETAILS.NO_DESCRIPTION); - expect(taskPage.taskDetails().getAssignee()).toEqual(taskModel.getAssignee().getEntireName()); - expect(taskPage.taskDetails().getCategory()).toEqual(taskModel.getCategory()); - expect(taskPage.taskDetails().getDueDate()).toEqual(CONSTANTS.TASK_DETAILS.NO_DATE); - expect(taskPage.taskDetails().getParentName()).toEqual(CONSTANTS.TASK_DETAILS.NO_PARENT); - expect(taskPage.taskDetails().getDuration()).toEqual(''); - expect(taskPage.taskDetails().getEndDate()).toEqual(''); - expect(taskPage.taskDetails().getParentTaskId()).toEqual(taskModel.getParentTaskId()); - expect(taskPage.taskDetails().getStatus()).toEqual(CONSTANTS.TASK_STATUS.RUNNING); + await taskPage.tasksListPage().checkContentIsDisplayed(taskModel.getName()); + await expect(await taskPage.taskDetails().getCreated()).toEqual(dateFormat(taskModel.getCreated(), TASK_DATE_FORMAT)); + await expect(await taskPage.taskDetails().getId()).toEqual(taskModel.getId()); + await expect(await taskPage.taskDetails().getDescription()).toEqual(CONSTANTS.TASK_DETAILS.NO_DESCRIPTION); + await expect(await taskPage.taskDetails().getAssignee()).toEqual(taskModel.getAssignee().getEntireName()); + await expect(await taskPage.taskDetails().getCategory()).toEqual(taskModel.getCategory()); + await expect(await taskPage.taskDetails().getDueDate()).toEqual(CONSTANTS.TASK_DETAILS.NO_DATE); + await expect(await taskPage.taskDetails().getParentName()).toEqual(CONSTANTS.TASK_DETAILS.NO_PARENT); + await expect(await taskPage.taskDetails().getDuration()).toEqual(''); + await expect(await taskPage.taskDetails().getEndDate()).toEqual(''); + await expect(await taskPage.taskDetails().getParentTaskId()).toEqual(taskModel.getParentTaskId()); + await expect(await taskPage.taskDetails().getStatus()).toEqual(CONSTANTS.TASK_STATUS.RUNNING); }); - it('[C286709] Should display task details for completed task - Task App', async() => { + it('[C286709] Should display task details for completed task - Task App', async () => { const taskName = 'TaskAppCompleted'; - const taskId = await browser.controlFlow().execute(async () => { - return this.alfrescoJsApi.activiti.taskApi.createNewTask({'name': taskName}); - }); + const taskId = await this.alfrescoJsApi.activiti.taskApi.createNewTask({ 'name': taskName }); - processServices.goToTaskApp().clickTasksButton(); - taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); - taskPage.tasksListPage().checkContentIsDisplayed(taskName).selectRow('Name', taskName); + await (await processServices.goToTaskApp()).clickTasksButton(); - taskPage.completeTaskNoForm(); - taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.COMPLETED_TASKS); - taskPage.tasksListPage().selectRow(taskName); + await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); - const getTaskResponse = await browser.controlFlow().execute(async () => { - return this.alfrescoJsApi.activiti.taskApi.getTask(taskId.id); - }); + await taskPage.tasksListPage().checkContentIsDisplayed(taskName); + await taskPage.tasksListPage().selectRow(taskName); + + await taskPage.completeTaskNoForm(); + await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.COMPLETED_TASKS); + await taskPage.tasksListPage().selectRow(taskName); + + const getTaskResponse = await this.alfrescoJsApi.activiti.taskApi.getTask(taskId.id); const taskModel = new TaskModel(getTaskResponse); - taskPage.tasksListPage().checkContentIsDisplayed(taskModel.getName()); - expect(taskPage.taskDetails().getCreated()).toEqual(dateFormat(taskModel.getCreated(), TASK_DATE_FORMAT)); - expect(taskPage.taskDetails().getId()).toEqual(taskModel.getId()); - expect(taskPage.taskDetails().getDescription()).toEqual(CONSTANTS.TASK_DETAILS.NO_DESCRIPTION); - expect(taskPage.taskDetails().getAssignee()).toEqual(taskModel.getAssignee().getEntireName()); - expect(taskPage.taskDetails().getCategory()).toEqual(CONSTANTS.TASK_DETAILS.NO_CATEGORY); - expect(taskPage.taskDetails().getDueDate()).toEqual(CONSTANTS.TASK_DETAILS.NO_DATE); - expect(taskPage.taskDetails().getParentName()).toEqual(CONSTANTS.TASK_DETAILS.NO_PARENT); - expect(taskPage.taskDetails().getDuration()).toEqual(taskPage.taskDetails().getDuration()); - expect(taskPage.taskDetails().getEndDate()).toEqual(taskPage.taskDetails().getEndDate()); - expect(taskPage.taskDetails().getParentTaskId()).toEqual(''); - expect(taskPage.taskDetails().getStatus()).toEqual(CONSTANTS.TASK_STATUS.COMPLETED); + await taskPage.tasksListPage().checkContentIsDisplayed(taskModel.getName()); + await expect(await taskPage.taskDetails().getCreated()).toEqual(dateFormat(taskModel.getCreated(), TASK_DATE_FORMAT)); + await expect(await taskPage.taskDetails().getId()).toEqual(taskModel.getId()); + await expect(await taskPage.taskDetails().getDescription()).toEqual(CONSTANTS.TASK_DETAILS.NO_DESCRIPTION); + await expect(await taskPage.taskDetails().getAssignee()).toEqual(taskModel.getAssignee().getEntireName()); + await expect(await taskPage.taskDetails().getCategory()).toEqual(CONSTANTS.TASK_DETAILS.NO_CATEGORY); + await expect(await taskPage.taskDetails().getDueDate()).toEqual(CONSTANTS.TASK_DETAILS.NO_DATE); + await expect(await taskPage.taskDetails().getParentName()).toEqual(CONSTANTS.TASK_DETAILS.NO_PARENT); + await expect(await taskPage.taskDetails().getDuration()).toEqual(await taskPage.taskDetails().getDuration()); + await expect(await taskPage.taskDetails().getEndDate()).toEqual(await taskPage.taskDetails().getEndDate()); + await expect(await taskPage.taskDetails().getParentTaskId()).toEqual(''); + await expect(await taskPage.taskDetails().getStatus()).toEqual(CONSTANTS.TASK_STATUS.COMPLETED); }); }); diff --git a/e2e/process-services/task-filters-component.e2e.ts b/e2e/process-services/task-filters-component.e2e.ts index 09facf5077..b352ed13f0 100644 --- a/e2e/process-services/task-filters-component.e2e.ts +++ b/e2e/process-services/task-filters-component.e2e.ts @@ -47,17 +47,16 @@ describe('Task', () => { const app = resources.Files.APP_WITH_DATE_FIELD_FORM; let appId, tenantId; - beforeAll(async (done) => { + beforeAll(async () => { this.alfrescoJsApi = new AlfrescoApi({ provider: 'BPM', hostBpm: browser.params.testConfig.adf_aps.host }); - done(); }); - beforeEach(async (done) => { + beforeEach(async () => { const apps = new AppsActions(); const users = new UsersActions(); @@ -76,15 +75,14 @@ describe('Task', () => { await loginPage.loginToProcessServicesUsingUserModel(user); - navigationBarPage.navigateToProcessServicesPage(); + await navigationBarPage.navigateToProcessServicesPage(); - processServicesPage.checkApsContainer(); - processServicesPage.goToApp(app.title); + await processServicesPage.checkApsContainer(); + await processServicesPage.goToApp(app.title); - done(); }); - afterEach(async (done) => { + afterEach(async () => { await this.alfrescoJsApi.activiti.modelsApi.deleteModel(appId); @@ -92,109 +90,127 @@ describe('Task', () => { await this.alfrescoJsApi.activiti.adminTenantsApi.deleteTenant(tenantId); - done(); }); - it('[C279967] Should display default filters when an app is deployed', () => { - taskFiltersDemoPage.involvedTasksFilter().checkTaskFilterIsDisplayed(); - taskFiltersDemoPage.myTasksFilter().checkTaskFilterIsDisplayed(); - taskFiltersDemoPage.queuedTasksFilter().checkTaskFilterIsDisplayed(); - taskFiltersDemoPage.completedTasksFilter().checkTaskFilterIsDisplayed(); + it('[C279967] Should display default filters when an app is deployed', async () => { + await taskFiltersDemoPage.involvedTasksFilter().checkTaskFilterIsDisplayed(); + await taskFiltersDemoPage.myTasksFilter().checkTaskFilterIsDisplayed(); + await taskFiltersDemoPage.queuedTasksFilter().checkTaskFilterIsDisplayed(); + await taskFiltersDemoPage.completedTasksFilter().checkTaskFilterIsDisplayed(); }); - it('[C260330] Should display Task Filter List when app is in Task Tab', () => { - tasksPage.createNewTask().addName('Test').clickStartButton(); - taskFiltersDemoPage.myTasksFilter().clickTaskFilter(); - tasksListPage.checkContentIsDisplayed('Test'); - expect(taskFiltersDemoPage.checkActiveFilterActive()).toBe('My Tasks'); - expect(taskDetailsPage.checkTaskDetailsDisplayed()).toBeDefined(); + it('[C260330] Should display Task Filter List when app is in Task Tab', async () => { + const task = await tasksPage.createNewTask(); + await task.addName('Test'); + await task.clickStartButton(); + await taskFiltersDemoPage.myTasksFilter().clickTaskFilter(); + await tasksListPage.checkContentIsDisplayed('Test'); + await expect(await taskFiltersDemoPage.checkActiveFilterActive()).toBe('My Tasks'); + await expect(await taskDetailsPage.checkTaskDetailsDisplayed()).toBeDefined(); - taskFiltersDemoPage.queuedTasksFilter().clickTaskFilter(); - expect(taskFiltersDemoPage.checkActiveFilterActive()).toBe('Queued Tasks'); - tasksListPage.checkContentIsNotDisplayed('Test'); - expect(taskDetailsPage.checkTaskDetailsEmpty()).toBeDefined(); + await taskFiltersDemoPage.queuedTasksFilter().clickTaskFilter(); + await expect(await taskFiltersDemoPage.checkActiveFilterActive()).toBe('Queued Tasks'); + await tasksListPage.checkContentIsNotDisplayed('Test'); + await expect(await taskDetailsPage.checkTaskDetailsEmpty()).toBeDefined(); - taskFiltersDemoPage.involvedTasksFilter().clickTaskFilter(); - expect(taskFiltersDemoPage.checkActiveFilterActive()).toBe('Involved Tasks'); - tasksListPage.checkContentIsDisplayed('Test'); - expect(taskDetailsPage.checkTaskDetailsDisplayed()).toBeDefined(); + await taskFiltersDemoPage.involvedTasksFilter().clickTaskFilter(); + await expect(await taskFiltersDemoPage.checkActiveFilterActive()).toBe('Involved Tasks'); + await tasksListPage.checkContentIsDisplayed('Test'); + await expect(await taskDetailsPage.checkTaskDetailsDisplayed()).toBeDefined(); - taskFiltersDemoPage.completedTasksFilter().clickTaskFilter(); - expect(taskFiltersDemoPage.checkActiveFilterActive()).toBe('Completed Tasks'); - tasksListPage.checkContentIsNotDisplayed('Test'); - expect(taskDetailsPage.checkTaskDetailsEmpty()).toBeDefined(); + await taskFiltersDemoPage.completedTasksFilter().clickTaskFilter(); + await expect(await taskFiltersDemoPage.checkActiveFilterActive()).toBe('Completed Tasks'); + await tasksListPage.checkContentIsNotDisplayed('Test'); + await expect(await taskDetailsPage.checkTaskDetailsEmpty()).toBeDefined(); }); - it('[C260348] Should display task in Complete Tasks List when task is completed', () => { - expect(taskFiltersDemoPage.myTasksFilter().checkTaskFilterIsDisplayed()).toBeDefined(); - expect(taskFiltersDemoPage.queuedTasksFilter().checkTaskFilterIsDisplayed()).toBeDefined(); - expect(taskFiltersDemoPage.involvedTasksFilter().checkTaskFilterIsDisplayed()).toBeDefined(); - expect(taskFiltersDemoPage.completedTasksFilter().checkTaskFilterIsDisplayed).toBeDefined(); + it('[C260348] Should display task in Complete Tasks List when task is completed', async () => { + await taskFiltersDemoPage.myTasksFilter().checkTaskFilterIsDisplayed(); + await taskFiltersDemoPage.queuedTasksFilter().checkTaskFilterIsDisplayed(); + await taskFiltersDemoPage.involvedTasksFilter().checkTaskFilterIsDisplayed(); + await taskFiltersDemoPage.completedTasksFilter().checkTaskFilterIsDisplayed(); - expect(taskFiltersDemoPage.myTasksFilter().checkTaskFilterIsDisplayed()).toBeDefined(); - expect(taskFiltersDemoPage.queuedTasksFilter().checkTaskFilterIsDisplayed()).toBeDefined(); - expect(taskFiltersDemoPage.involvedTasksFilter().checkTaskFilterIsDisplayed).toBeDefined(); - expect(taskFiltersDemoPage.completedTasksFilter().checkTaskFilterIsDisplayed).toBeDefined(); + await taskFiltersDemoPage.myTasksFilter().checkTaskFilterIsDisplayed(); + await taskFiltersDemoPage.queuedTasksFilter().checkTaskFilterIsDisplayed(); + await taskFiltersDemoPage.involvedTasksFilter().checkTaskFilterIsDisplayed(); + await taskFiltersDemoPage.completedTasksFilter().checkTaskFilterIsDisplayed(); - tasksPage.createNewTask().addName('Test').clickStartButton(); - taskFiltersDemoPage.myTasksFilter().clickTaskFilter(); - tasksListPage.checkContentIsDisplayed('Test'); - expect(taskFiltersDemoPage.checkActiveFilterActive()).toBe('My Tasks'); - expect(taskDetailsPage.checkTaskDetailsDisplayed()).toBeDefined(); + const task = await tasksPage.createNewTask(); + await task.addName('Test'); + await task.clickStartButton(); + await taskFiltersDemoPage.myTasksFilter().clickTaskFilter(); + await tasksListPage.checkContentIsDisplayed('Test'); + await expect(await taskFiltersDemoPage.checkActiveFilterActive()).toBe('My Tasks'); + await expect(await taskDetailsPage.checkTaskDetailsDisplayed()).toBeDefined(); - taskFiltersDemoPage.queuedTasksFilter().clickTaskFilter(); - expect(taskFiltersDemoPage.checkActiveFilterActive()).toBe('Queued Tasks'); - expect(tasksListPage.getNoTasksFoundMessage()).toBe('No Tasks Found'); - expect(taskDetailsPage.getEmptyTaskDetailsMessage()).toBe('No task details found'); + await taskFiltersDemoPage.queuedTasksFilter().clickTaskFilter(); + await expect(await taskFiltersDemoPage.checkActiveFilterActive()).toBe('Queued Tasks'); + await expect(await tasksListPage.getNoTasksFoundMessage()).toBe('No Tasks Found'); + await expect(await taskDetailsPage.getEmptyTaskDetailsMessage()).toBe('No task details found'); - taskFiltersDemoPage.involvedTasksFilter().clickTaskFilter(); - expect(taskFiltersDemoPage.checkActiveFilterActive()).toBe('Involved Tasks'); - tasksListPage.checkContentIsDisplayed('Test'); - expect(taskDetailsPage.checkTaskDetailsDisplayed()).toBeDefined(); + await taskFiltersDemoPage.involvedTasksFilter().clickTaskFilter(); + await expect(await taskFiltersDemoPage.checkActiveFilterActive()).toBe('Involved Tasks'); + await tasksListPage.checkContentIsDisplayed('Test'); + await expect(await taskDetailsPage.checkTaskDetailsDisplayed()).toBeDefined(); - taskFiltersDemoPage.completedTasksFilter().clickTaskFilter(); - expect(taskFiltersDemoPage.checkActiveFilterActive()).toBe('Completed Tasks'); - expect(tasksListPage.getNoTasksFoundMessage()).toBe('No Tasks Found'); - expect(taskDetailsPage.getEmptyTaskDetailsMessage()).toBe('No task details found'); + await taskFiltersDemoPage.completedTasksFilter().clickTaskFilter(); + await expect(await taskFiltersDemoPage.checkActiveFilterActive()).toBe('Completed Tasks'); + await expect(await tasksListPage.getNoTasksFoundMessage()).toBe('No Tasks Found'); + await expect(await taskDetailsPage.getEmptyTaskDetailsMessage()).toBe('No task details found'); }); - it('[C260349] Should sort task by name when Name sorting is clicked', () => { - tasksPage.createNewTask().addName('Test1').clickStartButton(); - taskDetailsPage.clickCompleteTask(); - tasksPage.createNewTask().addName('Test2').clickStartButton(); - taskDetailsPage.clickCompleteTask(); - tasksPage.createNewTask().addName('Test3').clickStartButton(); + it('[C260349] Should sort task by name when Name sorting is clicked', async () => { + const task = await tasksPage.createNewTask(); + await task.addName('Test1'); + await task.clickStartButton(); - tasksPage.createNewTask().addName('Test4').clickStartButton(); - tasksListPage.checkContentIsDisplayed('Test4'); - tasksListPage.checkRowIsSelected('Test4'); - tasksListPage.checkContentIsDisplayed('Test3'); - taskDetailsPage.checkTaskDetailsDisplayed(); + await taskDetailsPage.clickCompleteTask(); - tasksPage.clickSortByNameAsc(); - expect(tasksListPage.getDataTable().contentInPosition(1)).toBe('Test3'); - tasksPage.clickSortByNameDesc(); - expect(tasksListPage.getDataTable().contentInPosition(1)).toBe('Test4'); + const task2 = await tasksPage.createNewTask(); + await task2.addName('Test2'); + await task2.clickStartButton(); - taskFiltersDemoPage.completedTasksFilter().clickTaskFilter(); - tasksListPage.checkContentIsDisplayed('Test1'); - tasksListPage.checkContentIsDisplayed('Test2'); - expect(tasksListPage.getDataTable().contentInPosition(1)).toBe('Test2'); + await taskDetailsPage.clickCompleteTask(); - tasksPage.clickSortByNameAsc(); - expect(tasksListPage.getDataTable().contentInPosition(1)).toBe('Test1'); + const task3 = await tasksPage.createNewTask(); + await task3.addName('Test3'); + await task3.clickStartButton(); - taskFiltersDemoPage.involvedTasksFilter().clickTaskFilter(); - tasksListPage.checkContentIsDisplayed('Test3'); - tasksListPage.checkContentIsDisplayed('Test4'); + const task4 = await tasksPage.createNewTask(); + await task4.addName('Test4'); + await task4.clickStartButton(); + + await tasksListPage.checkContentIsDisplayed('Test4'); + await tasksListPage.checkRowIsSelected('Test4'); + await tasksListPage.checkContentIsDisplayed('Test3'); + await taskDetailsPage.checkTaskDetailsDisplayed(); + + await tasksPage.clickSortByNameAsc(); + await expect(await tasksListPage.getDataTable().contentInPosition(1)).toBe('Test3'); + await tasksPage.clickSortByNameDesc(); + await expect(await tasksListPage.getDataTable().contentInPosition(1)).toBe('Test4'); + + await taskFiltersDemoPage.completedTasksFilter().clickTaskFilter(); + await tasksListPage.checkContentIsDisplayed('Test1'); + await tasksListPage.checkContentIsDisplayed('Test2'); + await expect(await tasksListPage.getDataTable().contentInPosition(1)).toBe('Test2'); + + await tasksPage.clickSortByNameAsc(); + await expect(await tasksListPage.getDataTable().contentInPosition(1)).toBe('Test1'); + + await taskFiltersDemoPage.involvedTasksFilter().clickTaskFilter(); + await tasksListPage.checkContentIsDisplayed('Test3'); + await tasksListPage.checkContentIsDisplayed('Test4'); }); - it('[C277264] Should display task filter results when task filter is selected', () => { - tasksPage.createNewTask().addName('Test').clickStartButton(); + it('[C277264] Should display task filter results when task filter is selected', async () => { + const task = await tasksPage.createNewTask(); + await task.addName('Test'); + await task.clickStartButton(); - taskFiltersDemoPage.myTasksFilter().clickTaskFilter(); - tasksListPage.checkContentIsDisplayed('Test'); - expect(taskDetailsPage.getTaskDetailsTitle()).toBe('Test'); + await taskFiltersDemoPage.myTasksFilter().clickTaskFilter(); + await tasksListPage.checkContentIsDisplayed('Test'); + await expect(await taskDetailsPage.getTaskDetailsTitle()).toBe('Test'); }); }); @@ -215,7 +231,7 @@ describe('Task', () => { const app = resources.Files.APP_WITH_PROCESSES; - beforeAll(async (done) => { + beforeAll(async () => { const apps = new AppsActions(); const users = new UsersActions(); @@ -240,186 +256,64 @@ describe('Task', () => { await loginPage.loginToProcessServicesUsingUserModel(user); - done(); - }); beforeEach(async () => { - navigationBarPage.navigateToProcessServicesPage(); - processServicesPage.checkApsContainer(); - processServicesPage.goToApp(app.title); + await navigationBarPage.navigateToProcessServicesPage(); + await processServicesPage.checkApsContainer(); + await processServicesPage.goToApp(app.title); }); - it('[C260350] Should display a new filter when a filter is added', () => { - browser.controlFlow().execute(async () => { - const newFilter: any = new UserProcessInstanceFilterRepresentation(); - newFilter.name = 'New Task Filter'; - newFilter.appId = appId; - newFilter.icon = 'glyphicon-filter'; - newFilter.filter = { sort: 'created-desc', state: 'completed', assignment: 'involved' }; + it('[C260350] Should display a new filter when a filter is added', async () => { + const newFilter: any = new UserProcessInstanceFilterRepresentation(); + newFilter.name = 'New Task Filter'; + newFilter.appId = appId; + newFilter.icon = 'glyphicon-filter'; + newFilter.filter = { sort: 'created-desc', state: 'completed', assignment: 'involved' }; - const result = await this.alfrescoJsApi.activiti.userFiltersApi.createUserTaskFilter(newFilter); + const result = await this.alfrescoJsApi.activiti.userFiltersApi.createUserTaskFilter(newFilter); - taskFilterId = result.id; - return result; - }); + taskFilterId = result.id; - browser.refresh(); + await browser.refresh(); - taskFiltersDemoPage.customTaskFilter('New Task Filter').checkTaskFilterIsDisplayed(); + await taskFiltersDemoPage.customTaskFilter('New Task Filter').checkTaskFilterIsDisplayed(); - browser.controlFlow().execute(() => { - const result = this.alfrescoJsApi.activiti.userFiltersApi.deleteUserTaskFilter(taskFilterId); - return result; - }); + await this.alfrescoJsApi.activiti.userFiltersApi.deleteUserTaskFilter(taskFilterId); }); - it('[C286447] Should display the task filter icon when a custom filter is added', () => { - browser.controlFlow().execute(async () => { - const newFilter: any = new UserProcessInstanceFilterRepresentation(); - newFilter.name = 'New Task Filter with icon'; - newFilter.appId = appId; - newFilter.icon = 'glyphicon-cloud'; - newFilter.filter = { sort: 'created-desc', state: 'completed', assignment: 'involved' }; + it('[C286447] Should display the task filter icon when a custom filter is added', async () => { + const newFilter: any = new UserProcessInstanceFilterRepresentation(); + newFilter.name = 'New Task Filter with icon'; + newFilter.appId = appId; + newFilter.icon = 'glyphicon-cloud'; + newFilter.filter = { sort: 'created-desc', state: 'completed', assignment: 'involved' }; - const result = await this.alfrescoJsApi.activiti.userFiltersApi.createUserTaskFilter(newFilter); + const result = await this.alfrescoJsApi.activiti.userFiltersApi.createUserTaskFilter(newFilter); - taskFilterId = result.id; - return result; - }); + taskFilterId = result.id; - browser.refresh(); - processServiceTabBarPage.clickSettingsButton(); - browser.sleep(500); - appSettingsToggles.enableTaskFiltersIcon(); - processServiceTabBarPage.clickTasksButton(); + await browser.refresh(); + await processServiceTabBarPage.clickSettingsButton(); + await browser.sleep(500); + await appSettingsToggles.enableTaskFiltersIcon(); + await processServiceTabBarPage.clickTasksButton(); - taskFiltersDemoPage.customTaskFilter('New Task Filter with icon').checkTaskFilterIsDisplayed(); - expect(taskFiltersDemoPage.customTaskFilter('New Task Filter with icon').getTaskFilterIcon()).toEqual('cloud'); + await taskFiltersDemoPage.customTaskFilter('New Task Filter with icon').checkTaskFilterIsDisplayed(); + await expect(await taskFiltersDemoPage.customTaskFilter('New Task Filter with icon').getTaskFilterIcon()).toEqual('cloud'); - browser.controlFlow().execute(() => { - const result = this.alfrescoJsApi.activiti.userFiltersApi.deleteUserTaskFilter(taskFilterId); - return result; - }); + await this.alfrescoJsApi.activiti.userFiltersApi.deleteUserTaskFilter(taskFilterId); }); - it('[C286449] Should display task filter icons only when showIcon property is set on true', () => { - taskFiltersDemoPage.myTasksFilter().checkTaskFilterHasNoIcon(); + it('[C286449] Should display task filter icons only when showIcon property is set on true', async () => { + await taskFiltersDemoPage.myTasksFilter().checkTaskFilterHasNoIcon(); - processServiceTabBarPage.clickSettingsButton(); - appSettingsToggles.enableTaskFiltersIcon(); - processServiceTabBarPage.clickTasksButton(); + await processServiceTabBarPage.clickSettingsButton(); + await appSettingsToggles.enableTaskFiltersIcon(); + await processServiceTabBarPage.clickTasksButton(); - taskFiltersDemoPage.myTasksFilter().checkTaskFilterIsDisplayed(); - expect(taskFiltersDemoPage.myTasksFilter().getTaskFilterIcon()).toEqual('inbox'); - }); - - it('[C260353] Should display changes on a filter when this filter is edited', () => { - browser.controlFlow().execute(async () => { - const newFilter: any = new UserProcessInstanceFilterRepresentation(); - newFilter.name = 'New Task Filter'; - newFilter.appId = appId; - newFilter.icon = 'glyphicon-filter'; - newFilter.filter = { sort: 'created-desc', state: 'completed', assignment: 'involved' }; - - const result = await this.alfrescoJsApi.activiti.userFiltersApi.createUserTaskFilter(newFilter); - - taskFilterId = result.id; - return result; - }); - - browser.refresh(); - - taskFiltersDemoPage.customTaskFilter('New Task Filter').checkTaskFilterIsDisplayed(); - - browser.controlFlow().execute(() => { - const newFilter: any = new UserProcessInstanceFilterRepresentation(); - newFilter.name = 'Task Filter Edited'; - newFilter.appId = appId; - newFilter.icon = 'glyphicon-filter'; - newFilter.filter = { sort: 'created-desc', state: 'completed', assignment: 'involved' }; - - const result = this.alfrescoJsApi.activiti.userFiltersApi.updateUserTaskFilter(taskFilterId, newFilter); - return result; - }); - - browser.refresh(); - - taskFiltersDemoPage.customTaskFilter('Task Filter Edited').checkTaskFilterIsDisplayed(); - - browser.controlFlow().execute(() => { - const result = this.alfrescoJsApi.activiti.userFiltersApi.deleteUserTaskFilter(taskFilterId); - return result; - }); - }); - - it('[C286448] Should display changes on a task filter when this filter icon is edited', () => { - browser.controlFlow().execute(async () => { - const newFilter: any = new UserProcessInstanceFilterRepresentation(); - newFilter.name = 'Task Filter Edited icon'; - newFilter.appId = appId; - newFilter.icon = 'glyphicon-filter'; - newFilter.filter = { sort: 'created-desc', state: 'completed', assignment: 'involved' }; - - const result = await this.alfrescoJsApi.activiti.userFiltersApi.createUserTaskFilter(newFilter); - - taskFilterId = result.id; - return result; - }); - - browser.refresh(); - - taskFiltersDemoPage.customTaskFilter('Task Filter Edited icon').checkTaskFilterIsDisplayed(); - - browser.controlFlow().execute(() => { - const newFilter: any = new UserProcessInstanceFilterRepresentation(); - newFilter.name = 'Task Filter Edited icon'; - newFilter.appId = appId; - newFilter.icon = 'glyphicon-cloud'; - newFilter.filter = { sort: 'created-desc', state: 'completed', assignment: 'involved' }; - - const result = this.alfrescoJsApi.activiti.userFiltersApi.updateUserTaskFilter(taskFilterId, newFilter); - return result; - }); - - browser.refresh(); - processServiceTabBarPage.clickSettingsButton(); - - browser.sleep(500); - - appSettingsToggles.enableTaskFiltersIcon(); - processServiceTabBarPage.clickTasksButton(); - - taskFiltersDemoPage.customTaskFilter('Task Filter Edited icon').checkTaskFilterIsDisplayed(); - expect(taskFiltersDemoPage.customTaskFilter('Task Filter Edited icon').getTaskFilterIcon()).toEqual('cloud'); - }); - - it('[C260354] Should not display task filter when this filter is deleted', () => { - browser.controlFlow().execute(async () => { - const newFilter: any = new UserProcessInstanceFilterRepresentation(); - newFilter.name = 'New Task Filter'; - newFilter.appId = appId; - newFilter.icon = 'glyphicon-filter'; - newFilter.filter = { sort: 'created-desc', state: 'completed', assignment: 'involved' }; - - const result = await this.alfrescoJsApi.activiti.userFiltersApi.createUserTaskFilter(newFilter); - - taskFilterId = result.id; - return result; - }); - - browser.refresh(); - - taskFiltersDemoPage.customTaskFilter('New Task Filter').checkTaskFilterIsDisplayed(); - - browser.controlFlow().execute(() => { - const result = this.alfrescoJsApi.activiti.userFiltersApi.deleteUserTaskFilter(taskFilterId); - return result; - }); - - browser.refresh(); - - taskFiltersDemoPage.customTaskFilter('New Task Filter').checkTaskFilterNotDisplayed(); + await taskFiltersDemoPage.myTasksFilter().checkTaskFilterIsDisplayed(); + await expect(await taskFiltersDemoPage.myTasksFilter().getTaskFilterIcon()).toEqual('inbox'); }); }); diff --git a/e2e/process-services/task-filters-sorting.e2e.ts b/e2e/process-services/task-filters-sorting.e2e.ts index 53934db797..8c5858959f 100644 --- a/e2e/process-services/task-filters-sorting.e2e.ts +++ b/e2e/process-services/task-filters-sorting.e2e.ts @@ -53,7 +53,7 @@ describe('Task Filters Sorting', () => { { name: 'Task 5', dueDate: '02/01/2019' }, { name: 'Task 6', dueDate: '03/01/2019' }]; - beforeAll(async (done) => { + beforeAll(async () => { const apps = new AppsActions(); const users = new UsersActions(); @@ -78,202 +78,190 @@ describe('Task Filters Sorting', () => { await loginPage.loginToProcessServicesUsingUserModel(user); - navigationBarPage.navigateToProcessServicesPage(); - processServicesPage.checkApsContainer(); - processServicesPage.goToApp(app.title); + await navigationBarPage.navigateToProcessServicesPage(); + await processServicesPage.checkApsContainer(); + await processServicesPage.goToApp(app.title); - tasksPage.createNewTask().addName(tasks[0].name).addDueDate(tasks[0].dueDate).clickStartButton(); - taskDetailsPage.clickCompleteTask(); + const task = await tasksPage.createNewTask(); + await task.addName(tasks[0].name); + await task.addDueDate(tasks[0].dueDate); + await task.clickStartButton(); - tasksPage.createNewTask().addName(tasks[1].name).addDueDate(tasks[1].dueDate).clickStartButton(); - taskDetailsPage.clickCompleteTask(); + await taskDetailsPage.clickCompleteTask(); - tasksPage.createNewTask().addName(tasks[2].name).addDueDate(tasks[2].dueDate).clickStartButton(); - taskDetailsPage.clickCompleteTask(); + const task2 = await tasksPage.createNewTask(); - tasksPage.createNewTask().addName(tasks[3].name).addDueDate(tasks[3].dueDate).clickStartButton(); - tasksPage.createNewTask().addName(tasks[4].name).addDueDate(tasks[4].dueDate).clickStartButton(); - tasksPage.createNewTask().addName(tasks[5].name).addDueDate(tasks[5].dueDate).clickStartButton(); + await task2.addName(tasks[1].name); + await task2.addDueDate(tasks[1].dueDate); + await task2.clickStartButton(); + await taskDetailsPage.clickCompleteTask(); - done(); + const task3 = await tasksPage.createNewTask(); + await task3.addName(tasks[2].name); + await task3.addDueDate(tasks[2].dueDate); + await task3.clickStartButton(); + await taskDetailsPage.clickCompleteTask(); + + const task4 = await tasksPage.createNewTask(); + await task4.addName(tasks[3].name); + await task4.addDueDate(tasks[3].dueDate); + await task4.clickStartButton(); + + const task5 = await tasksPage.createNewTask(); + await task5.addName(tasks[4].name); + await task5.addDueDate(tasks[4].dueDate); + await task5.clickStartButton(); + + const task6 = await tasksPage.createNewTask(); + await task6.addName(tasks[5].name); + await task6.addDueDate(tasks[5].dueDate); + await task6.clickStartButton(); }); - it('[C277254] Should display tasks under new filter from newest to oldest when they are completed', () => { - browser.controlFlow().execute(async () => { - const newFilter: any = new UserProcessInstanceFilterRepresentation(); - newFilter.name = 'Newest first'; - newFilter.appId = appId; - newFilter.icon = 'glyphicon-filter'; - newFilter.filter = { sort: 'created-desc', state: 'completed', assignment: 'involved' }; + it('[C277254] Should display tasks under new filter from newest to oldest when they are completed', async () => { + const newFilter: any = new UserProcessInstanceFilterRepresentation(); + newFilter.name = 'Newest first'; + newFilter.appId = appId; + newFilter.icon = 'glyphicon-filter'; + newFilter.filter = { sort: 'created-desc', state: 'completed', assignment: 'involved' }; - const result = await this.alfrescoJsApi.activiti.userFiltersApi.createUserTaskFilter(newFilter); + await this.alfrescoJsApi.activiti.userFiltersApi.createUserTaskFilter(newFilter); - return result; - }); + await browser.refresh(); - browser.refresh(); + await taskFiltersDemoPage.customTaskFilter('Newest first').clickTaskFilter(); - taskFiltersDemoPage.customTaskFilter('Newest first').clickTaskFilter(); - - expect(tasksListPage.getDataTable().contentInPosition(1)).toBe(tasks[2].name); - expect(tasksListPage.getDataTable().contentInPosition(2)).toBe(tasks[1].name); - expect(tasksListPage.getDataTable().contentInPosition(3)).toBe(tasks[0].name); + await expect(await tasksListPage.getDataTable().contentInPosition(1)).toBe(tasks[2].name); + await expect(await tasksListPage.getDataTable().contentInPosition(2)).toBe(tasks[1].name); + await expect(await tasksListPage.getDataTable().contentInPosition(3)).toBe(tasks[0].name); }); - it('[C277255] Should display tasks under new filter from oldest to newest when they are completed', () => { - browser.controlFlow().execute(async () => { - const newFilter: any = new UserProcessInstanceFilterRepresentation(); - newFilter.name = 'Newest last'; - newFilter.appId = appId; - newFilter.icon = 'glyphicon-filter'; - newFilter.filter = { sort: 'created-asc', state: 'completed', assignment: 'involved' }; + it('[C277255] Should display tasks under new filter from oldest to newest when they are completed', async () => { + const newFilter: any = new UserProcessInstanceFilterRepresentation(); + newFilter.name = 'Newest last'; + newFilter.appId = appId; + newFilter.icon = 'glyphicon-filter'; + newFilter.filter = { sort: 'created-asc', state: 'completed', assignment: 'involved' }; - const result = await this.alfrescoJsApi.activiti.userFiltersApi.createUserTaskFilter(newFilter); + await this.alfrescoJsApi.activiti.userFiltersApi.createUserTaskFilter(newFilter); - return result; - }); + await browser.refresh(); - browser.refresh(); + await taskFiltersDemoPage.customTaskFilter('Newest last').clickTaskFilter(); - taskFiltersDemoPage.customTaskFilter('Newest last').clickTaskFilter(); - - expect(tasksListPage.getDataTable().contentInPosition(1)).toBe(tasks[0].name); - expect(tasksListPage.getDataTable().contentInPosition(2)).toBe(tasks[1].name); - expect(tasksListPage.getDataTable().contentInPosition(3)).toBe(tasks[2].name); + await expect(await tasksListPage.getDataTable().contentInPosition(1)).toBe(tasks[0].name); + await expect(await tasksListPage.getDataTable().contentInPosition(2)).toBe(tasks[1].name); + await expect(await tasksListPage.getDataTable().contentInPosition(3)).toBe(tasks[2].name); }); - it('[C277256] Should display tasks under new filter from closest due date to farthest when they are completed', () => { - browser.controlFlow().execute(async () => { - const newFilter: any = new UserProcessInstanceFilterRepresentation(); - newFilter.name = 'Due first'; - newFilter.appId = appId; - newFilter.icon = 'glyphicon-filter'; - newFilter.filter = { sort: 'due-desc', state: 'completed', assignment: 'involved' }; + it('[C277256] Should display tasks under new filter from closest due date to farthest when they are completed', async () => { + const newFilter: any = new UserProcessInstanceFilterRepresentation(); + newFilter.name = 'Due first'; + newFilter.appId = appId; + newFilter.icon = 'glyphicon-filter'; + newFilter.filter = { sort: 'due-desc', state: 'completed', assignment: 'involved' }; - const result = await this.alfrescoJsApi.activiti.userFiltersApi.createUserTaskFilter(newFilter); + await this.alfrescoJsApi.activiti.userFiltersApi.createUserTaskFilter(newFilter); - return result; - }); + await browser.refresh(); - browser.refresh(); + await taskFiltersDemoPage.customTaskFilter('Due first').clickTaskFilter(); - taskFiltersDemoPage.customTaskFilter('Due first').clickTaskFilter(); - - expect(tasksListPage.getDataTable().contentInPosition(1)).toBe(tasks[2].name); - expect(tasksListPage.getDataTable().contentInPosition(2)).toBe(tasks[1].name); - expect(tasksListPage.getDataTable().contentInPosition(3)).toBe(tasks[0].name); + await expect(await tasksListPage.getDataTable().contentInPosition(1)).toBe(tasks[2].name); + await expect(await tasksListPage.getDataTable().contentInPosition(2)).toBe(tasks[1].name); + await expect(await tasksListPage.getDataTable().contentInPosition(3)).toBe(tasks[0].name); }); - it('[C277257] Should display tasks under new filter from farthest due date to closest when they are completed', () => { - browser.controlFlow().execute(async () => { - const newFilter: any = new UserProcessInstanceFilterRepresentation(); - newFilter.name = 'Due last'; - newFilter.appId = appId; - newFilter.icon = 'glyphicon-filter'; - newFilter.filter = { sort: 'due-asc', state: 'completed', assignment: 'involved' }; + it('[C277257] Should display tasks under new filter from farthest due date to closest when they are completed', async () => { + const newFilter: any = new UserProcessInstanceFilterRepresentation(); + newFilter.name = 'Due last'; + newFilter.appId = appId; + newFilter.icon = 'glyphicon-filter'; + newFilter.filter = { sort: 'due-asc', state: 'completed', assignment: 'involved' }; - const result = await this.alfrescoJsApi.activiti.userFiltersApi.createUserTaskFilter(newFilter); + await this.alfrescoJsApi.activiti.userFiltersApi.createUserTaskFilter(newFilter); - return result; - }); + await browser.refresh(); - browser.refresh(); + await taskFiltersDemoPage.customTaskFilter('Due last').clickTaskFilter(); - taskFiltersDemoPage.customTaskFilter('Due last').clickTaskFilter(); - - expect(tasksListPage.getDataTable().contentInPosition(1)).toBe(tasks[0].name); - expect(tasksListPage.getDataTable().contentInPosition(2)).toBe(tasks[1].name); - expect(tasksListPage.getDataTable().contentInPosition(3)).toBe(tasks[2].name); + await expect(await tasksListPage.getDataTable().contentInPosition(1)).toBe(tasks[0].name); + await expect(await tasksListPage.getDataTable().contentInPosition(2)).toBe(tasks[1].name); + await expect(await tasksListPage.getDataTable().contentInPosition(3)).toBe(tasks[2].name); }); - it('[C277258] Should display tasks under new filter from newest to oldest when they are open ', () => { - browser.controlFlow().execute(async () => { - const newFilter: any = new UserProcessInstanceFilterRepresentation(); - newFilter.name = 'Newest first Open'; - newFilter.appId = appId; - newFilter.icon = 'glyphicon-filter'; - newFilter.filter = { sort: 'created-desc', state: 'open', assignment: 'involved' }; + it('[C277258] Should display tasks under new filter from newest to oldest when they are open ', async () => { + const newFilter: any = new UserProcessInstanceFilterRepresentation(); + newFilter.name = 'Newest first Open'; + newFilter.appId = appId; + newFilter.icon = 'glyphicon-filter'; + newFilter.filter = { sort: 'created-desc', state: 'open', assignment: 'involved' }; - const result = await this.alfrescoJsApi.activiti.userFiltersApi.createUserTaskFilter(newFilter); + await this.alfrescoJsApi.activiti.userFiltersApi.createUserTaskFilter(newFilter); - return result; - }); + await browser.refresh(); - browser.refresh(); + await taskFiltersDemoPage.customTaskFilter('Newest first Open').clickTaskFilter(); - taskFiltersDemoPage.customTaskFilter('Newest first Open').clickTaskFilter(); - - expect(tasksListPage.getDataTable().contentInPosition(1)).toBe(tasks[5].name); - expect(tasksListPage.getDataTable().contentInPosition(2)).toBe(tasks[4].name); - expect(tasksListPage.getDataTable().contentInPosition(3)).toBe(tasks[3].name); + await expect(await tasksListPage.getDataTable().contentInPosition(1)).toBe(tasks[5].name); + await expect(await tasksListPage.getDataTable().contentInPosition(2)).toBe(tasks[4].name); + await expect(await tasksListPage.getDataTable().contentInPosition(3)).toBe(tasks[3].name); }); - it('[C277259] Should display tasks under new filter from oldest to newest when they are open', () => { - browser.controlFlow().execute(async () => { - const newFilter: any = new UserProcessInstanceFilterRepresentation(); - newFilter.name = 'Newest last Open'; - newFilter.appId = appId; - newFilter.icon = 'glyphicon-filter'; - newFilter.filter = { sort: 'created-asc', state: 'open', assignment: 'involved' }; + it('[C277259] Should display tasks under new filter from oldest to newest when they are open', async () => { + const newFilter: any = new UserProcessInstanceFilterRepresentation(); + newFilter.name = 'Newest last Open'; + newFilter.appId = appId; + newFilter.icon = 'glyphicon-filter'; + newFilter.filter = { sort: 'created-asc', state: 'open', assignment: 'involved' }; - const result = await this.alfrescoJsApi.activiti.userFiltersApi.createUserTaskFilter(newFilter); + await this.alfrescoJsApi.activiti.userFiltersApi.createUserTaskFilter(newFilter); - return result; - }); + await browser.refresh(); - browser.refresh(); + await taskFiltersDemoPage.customTaskFilter('Newest last Open').clickTaskFilter(); - taskFiltersDemoPage.customTaskFilter('Newest last Open').clickTaskFilter(); - - expect(tasksListPage.getDataTable().contentInPosition(1)).toBe(tasks[3].name); - expect(tasksListPage.getDataTable().contentInPosition(2)).toBe(tasks[4].name); - expect(tasksListPage.getDataTable().contentInPosition(3)).toBe(tasks[5].name); + await expect(await tasksListPage.getDataTable().contentInPosition(1)).toBe(tasks[3].name); + await expect(await tasksListPage.getDataTable().contentInPosition(2)).toBe(tasks[4].name); + await expect(await tasksListPage.getDataTable().contentInPosition(3)).toBe(tasks[5].name); }); - it('[C277260] Should display tasks under new filter from closest due date to farthest when they are open', () => { - browser.controlFlow().execute(async () => { - const newFilter: any = new UserProcessInstanceFilterRepresentation(); - newFilter.name = 'Due first Open'; - newFilter.appId = appId; - newFilter.icon = 'glyphicon-filter'; - newFilter.filter = { sort: 'due-desc', state: 'open', assignment: 'involved' }; + it('[C277260] Should display tasks under new filter from closest due date to farthest when they are open', async () => { + const newFilter: any = new UserProcessInstanceFilterRepresentation(); + newFilter.name = 'Due first Open'; + newFilter.appId = appId; + newFilter.icon = 'glyphicon-filter'; + newFilter.filter = { sort: 'due-desc', state: 'open', assignment: 'involved' }; - const result = await this.alfrescoJsApi.activiti.userFiltersApi.createUserTaskFilter(newFilter); + await this.alfrescoJsApi.activiti.userFiltersApi.createUserTaskFilter(newFilter); - return result; - }); + await browser.refresh(); - browser.refresh(); + await taskFiltersDemoPage.customTaskFilter('Due first Open').clickTaskFilter(); - taskFiltersDemoPage.customTaskFilter('Due first Open').clickTaskFilter(); - - expect(tasksListPage.getDataTable().contentInPosition(1)).toBe(tasks[5].name); - expect(tasksListPage.getDataTable().contentInPosition(2)).toBe(tasks[4].name); - expect(tasksListPage.getDataTable().contentInPosition(3)).toBe(tasks[3].name); + await expect(await tasksListPage.getDataTable().contentInPosition(1)).toBe(tasks[5].name); + await expect(await tasksListPage.getDataTable().contentInPosition(2)).toBe(tasks[4].name); + await expect(await tasksListPage.getDataTable().contentInPosition(3)).toBe(tasks[3].name); }); - it('[C277261] Should display tasks under new filter from farthest due date to closest when they are open', () => { - browser.controlFlow().execute(async () => { - const newFilter: any = new UserProcessInstanceFilterRepresentation(); - newFilter.name = 'Due last Open'; - newFilter.appId = appId; - newFilter.icon = 'glyphicon-filter'; - newFilter.filter = { sort: 'due-asc', state: 'open', assignment: 'involved' }; + it('[C277261] Should display tasks under new filter from farthest due date to closest when they are open', async () => { + const newFilter: any = new UserProcessInstanceFilterRepresentation(); + newFilter.name = 'Due last Open'; + newFilter.appId = appId; + newFilter.icon = 'glyphicon-filter'; + newFilter.filter = { sort: 'due-asc', state: 'open', assignment: 'involved' }; - const result = await this.alfrescoJsApi.activiti.userFiltersApi.createUserTaskFilter(newFilter); + await this.alfrescoJsApi.activiti.userFiltersApi.createUserTaskFilter(newFilter); - return result; - }); + await browser.refresh(); - browser.refresh(); + await taskFiltersDemoPage.customTaskFilter('Due last Open').clickTaskFilter(); - taskFiltersDemoPage.customTaskFilter('Due last Open').clickTaskFilter(); - - expect(tasksListPage.getDataTable().contentInPosition(1)).toBe(tasks[3].name); - expect(tasksListPage.getDataTable().contentInPosition(2)).toBe(tasks[4].name); - expect(tasksListPage.getDataTable().contentInPosition(3)).toBe(tasks[5].name); + await expect(await tasksListPage.getDataTable().contentInPosition(1)).toBe(tasks[3].name); + await expect(await tasksListPage.getDataTable().contentInPosition(2)).toBe(tasks[4].name); + await expect(await tasksListPage.getDataTable().contentInPosition(3)).toBe(tasks[5].name); }); }); diff --git a/e2e/process-services/task-list-pagination.e2e.ts b/e2e/process-services/task-list-pagination.e2e.ts index 54bced062d..586378d93a 100644 --- a/e2e/process-services/task-list-pagination.e2e.ts +++ b/e2e/process-services/task-list-pagination.e2e.ts @@ -54,7 +54,7 @@ describe('Task List Pagination', () => { default: '20' }; - beforeAll(async (done) => { + beforeAll(async () => { const apps = new AppsActions(); const users = new UsersActions(); @@ -78,131 +78,130 @@ describe('Task List Pagination', () => { await loginPage.loginToProcessServicesUsingUserModel(processUserModel); - done(); }); - it('[C260301] Should display default pagination', () => { - navigationBarPage.navigateToProcessServicesPage().goToTaskApp(); - expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.default); - expect(paginationPage.getPaginationRange()).toEqual('Showing 1-' + nrOfTasks + ' of ' + nrOfTasks); - expect(taskPage.tasksListPage().getDataTable().numberOfRows()).toBe(nrOfTasks); - paginationPage.checkNextPageButtonIsDisabled(); - paginationPage.checkPreviousPageButtonIsDisabled(); - paginationPage.selectItemsPerPage(itemsPerPage.twenty); - expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.twenty); - expect(paginationPage.getPaginationRange()).toEqual('Showing 1-' + nrOfTasks + ' of ' + nrOfTasks); + it('[C260301] Should display default pagination', async () => { + await (await navigationBarPage.navigateToProcessServicesPage()).goToTaskApp(); + await expect(await paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.default); + await expect(await paginationPage.getPaginationRange()).toEqual('Showing 1-' + nrOfTasks + ' of ' + nrOfTasks); + await expect(await taskPage.tasksListPage().getDataTable().numberOfRows()).toBe(nrOfTasks); + await paginationPage.checkNextPageButtonIsDisabled(); + await paginationPage.checkPreviousPageButtonIsDisabled(); + await paginationPage.selectItemsPerPage(itemsPerPage.twenty); + await expect(await paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.twenty); + await expect(await paginationPage.getPaginationRange()).toEqual('Showing 1-' + nrOfTasks + ' of ' + nrOfTasks); }); - it('[C260304] Should be possible to set Items per page to 5', () => { - navigationBarPage.navigateToProcessServicesPage().goToTaskApp(); - taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.INV_TASKS); - paginationPage.selectItemsPerPage(itemsPerPage.five); - expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.five); - expect(paginationPage.getPaginationRange()).toEqual('Showing 1-' + itemsPerPage.fiveValue + ' of ' + nrOfTasks); - expect(taskPage.tasksListPage().getDataTable().numberOfRows()).toBe(itemsPerPage.fiveValue); - paginationPage.clickOnNextPage(); + it('[C260304] Should be possible to set Items per page to 5', async () => { + await (await navigationBarPage.navigateToProcessServicesPage()).goToTaskApp(); + await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.INV_TASKS); + await paginationPage.selectItemsPerPage(itemsPerPage.five); + await expect(await paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.five); + await expect(await paginationPage.getPaginationRange()).toEqual('Showing 1-' + itemsPerPage.fiveValue + ' of ' + nrOfTasks); + await expect(await taskPage.tasksListPage().getDataTable().numberOfRows()).toBe(itemsPerPage.fiveValue); + await paginationPage.clickOnNextPage(); currentPage++; - expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.five); - expect(paginationPage.getPaginationRange()).toEqual('Showing 6-' + itemsPerPage.fiveValue * currentPage + ' of ' + nrOfTasks); - expect(taskPage.tasksListPage().getDataTable().numberOfRows()).toBe(itemsPerPage.fiveValue); - paginationPage.clickOnNextPage(); + await expect(await paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.five); + await expect(await paginationPage.getPaginationRange()).toEqual('Showing 6-' + itemsPerPage.fiveValue * currentPage + ' of ' + nrOfTasks); + await expect(await taskPage.tasksListPage().getDataTable().numberOfRows()).toBe(itemsPerPage.fiveValue); + await paginationPage.clickOnNextPage(); currentPage++; - expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.five); - expect(paginationPage.getPaginationRange()).toEqual('Showing 11-' + itemsPerPage.fiveValue * currentPage + ' of ' + nrOfTasks); - expect(taskPage.tasksListPage().getDataTable().numberOfRows()).toBe(itemsPerPage.fiveValue); - paginationPage.clickOnNextPage(); + await expect(await paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.five); + await expect(await paginationPage.getPaginationRange()).toEqual('Showing 11-' + itemsPerPage.fiveValue * currentPage + ' of ' + nrOfTasks); + await expect(await taskPage.tasksListPage().getDataTable().numberOfRows()).toBe(itemsPerPage.fiveValue); + await paginationPage.clickOnNextPage(); currentPage++; - expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.five); - expect(paginationPage.getPaginationRange()).toEqual('Showing 16-' + itemsPerPage.fiveValue * currentPage + ' of ' + nrOfTasks); - expect(taskPage.tasksListPage().getDataTable().numberOfRows()).toBe(itemsPerPage.fiveValue); + await expect(await paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.five); + await expect(await paginationPage.getPaginationRange()).toEqual('Showing 16-' + itemsPerPage.fiveValue * currentPage + ' of ' + nrOfTasks); + await expect(await taskPage.tasksListPage().getDataTable().numberOfRows()).toBe(itemsPerPage.fiveValue); - navigationBarPage.navigateToProcessServicesPage().goToTaskApp(); - taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.INV_TASKS); - expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.five); + await (await navigationBarPage.navigateToProcessServicesPage()).goToTaskApp(); + await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.INV_TASKS); + await expect(await paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.five); }); - it('[C260303] Should be possible to set Items per page to 10', () => { - navigationBarPage.navigateToProcessServicesPage().goToTaskApp(); - taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.INV_TASKS); - paginationPage.selectItemsPerPage(itemsPerPage.ten); - expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.ten); - expect(paginationPage.getPaginationRange()).toEqual('Showing 1-' + itemsPerPage.tenValue + ' of ' + nrOfTasks); - expect(taskPage.tasksListPage().getDataTable().numberOfRows()).toBe(itemsPerPage.tenValue); - paginationPage.clickOnNextPage(); - expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.ten); - expect(paginationPage.getPaginationRange()).toEqual('Showing 11-' + itemsPerPage.twentyValue + ' of ' + nrOfTasks); - expect(taskPage.tasksListPage().getDataTable().numberOfRows()).toBe(itemsPerPage.tenValue); + it('[C260303] Should be possible to set Items per page to 10', async () => { + await (await navigationBarPage.navigateToProcessServicesPage()).goToTaskApp(); + await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.INV_TASKS); + await paginationPage.selectItemsPerPage(itemsPerPage.ten); + await expect(await paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.ten); + await expect(await paginationPage.getPaginationRange()).toEqual('Showing 1-' + itemsPerPage.tenValue + ' of ' + nrOfTasks); + await expect(await taskPage.tasksListPage().getDataTable().numberOfRows()).toBe(itemsPerPage.tenValue); + await paginationPage.clickOnNextPage(); + await expect(await paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.ten); + await expect(await paginationPage.getPaginationRange()).toEqual('Showing 11-' + itemsPerPage.twentyValue + ' of ' + nrOfTasks); + await expect(await taskPage.tasksListPage().getDataTable().numberOfRows()).toBe(itemsPerPage.tenValue); - navigationBarPage.navigateToProcessServicesPage().goToTaskApp(); - taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.INV_TASKS); - expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.ten); + await (await navigationBarPage.navigateToProcessServicesPage()).goToTaskApp(); + await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.INV_TASKS); + await expect(await paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.ten); }); - it('[C260302] Should be possible to set Items per page to 15', () => { - navigationBarPage.navigateToProcessServicesPage().goToTaskApp(); - taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.INV_TASKS); - paginationPage.selectItemsPerPage(itemsPerPage.fifteen); - expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.fifteen); - expect(paginationPage.getPaginationRange()).toEqual('Showing 1-' + itemsPerPage.fifteenValue + ' of ' + nrOfTasks); - expect(taskPage.tasksListPage().getDataTable().numberOfRows()).toBe(itemsPerPage.fifteenValue); - paginationPage.clickOnNextPage(); - expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.fifteen); - expect(paginationPage.getPaginationRange()).toEqual('Showing 16-' + itemsPerPage.twentyValue + ' of ' + nrOfTasks); - expect(taskPage.tasksListPage().getDataTable().numberOfRows()).toBe(itemsPerPage.fiveValue); + it('[C260302] Should be possible to set Items per page to 15', async () => { + await (await navigationBarPage.navigateToProcessServicesPage()).goToTaskApp(); + await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.INV_TASKS); + await paginationPage.selectItemsPerPage(itemsPerPage.fifteen); + await expect(await paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.fifteen); + await expect(await paginationPage.getPaginationRange()).toEqual('Showing 1-' + itemsPerPage.fifteenValue + ' of ' + nrOfTasks); + await expect(await taskPage.tasksListPage().getDataTable().numberOfRows()).toBe(itemsPerPage.fifteenValue); + await paginationPage.clickOnNextPage(); + await expect(await paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.fifteen); + await expect(await paginationPage.getPaginationRange()).toEqual('Showing 16-' + itemsPerPage.twentyValue + ' of ' + nrOfTasks); + await expect(await taskPage.tasksListPage().getDataTable().numberOfRows()).toBe(itemsPerPage.fiveValue); - navigationBarPage.navigateToProcessServicesPage().goToTaskApp(); - taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.INV_TASKS); - expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.fifteen); + await (await navigationBarPage.navigateToProcessServicesPage()).goToTaskApp(); + await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.INV_TASKS); + await expect(await paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.fifteen); }); - it('[C261006] Should be possible to navigate to a page with page number dropdown', () => { + it('[C261006] Should be possible to navigate to a page with page number dropdown', async () => { currentPage = 1; totalPages = 2; - navigationBarPage.navigateToProcessServicesPage().goToTaskApp(); - taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.INV_TASKS); - taskPage.tasksListPage().getDataTable().waitForTableBody(); - paginationPage.selectItemsPerPage(itemsPerPage.ten); - taskPage.tasksListPage().getDataTable().waitForTableBody(); - expect(paginationPage.getCurrentPage()).toEqual('Page ' + currentPage); - expect(paginationPage.getTotalPages()).toEqual('of ' + totalPages); - expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.ten); - expect(paginationPage.getPaginationRange()).toEqual('Showing 1-' + itemsPerPage.tenValue * currentPage + ' of ' + nrOfTasks); - expect(taskPage.tasksListPage().getDataTable().numberOfRows()).toBe(itemsPerPage.tenValue); - paginationPage.checkNextPageButtonIsEnabled(); - paginationPage.checkPreviousPageButtonIsDisabled(); + await (await navigationBarPage.navigateToProcessServicesPage()).goToTaskApp(); + await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.INV_TASKS); + await taskPage.tasksListPage().getDataTable().waitForTableBody(); + await paginationPage.selectItemsPerPage(itemsPerPage.ten); + await taskPage.tasksListPage().getDataTable().waitForTableBody(); + await expect(await paginationPage.getCurrentPage()).toEqual('Page ' + currentPage); + await expect(await paginationPage.getTotalPages()).toEqual('of ' + totalPages); + await expect(await paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.ten); + await expect(await paginationPage.getPaginationRange()).toEqual('Showing 1-' + itemsPerPage.tenValue * currentPage + ' of ' + nrOfTasks); + await expect(await taskPage.tasksListPage().getDataTable().numberOfRows()).toBe(itemsPerPage.tenValue); + await paginationPage.checkNextPageButtonIsEnabled(); + await paginationPage.checkPreviousPageButtonIsDisabled(); - paginationPage.clickOnPageDropdown(); - expect(paginationPage.getPageDropdownOptions()).toEqual(['1', '2']); + await paginationPage.clickOnPageDropdown(); + await expect(await paginationPage.getPageDropdownOptions()).toEqual(['1', '2']); currentPage = 2; - paginationPage.clickOnPageDropdownOption('2'); - taskPage.tasksListPage().getDataTable().waitForTableBody(); - expect(paginationPage.getCurrentPage()).toEqual('Page ' + currentPage); - expect(paginationPage.getTotalPages()).toEqual('of ' + totalPages); - expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.ten); - expect(paginationPage.getPaginationRange()).toEqual('Showing 11-' + itemsPerPage.tenValue * currentPage + ' of ' + nrOfTasks); - expect(taskPage.tasksListPage().getDataTable().numberOfRows()).toBe(itemsPerPage.tenValue); - paginationPage.checkNextPageButtonIsDisabled(); - paginationPage.checkPreviousPageButtonIsEnabled(); + await paginationPage.clickOnPageDropdownOption('2'); + await taskPage.tasksListPage().getDataTable().waitForTableBody(); + await expect(await paginationPage.getCurrentPage()).toEqual('Page ' + currentPage); + await expect(await paginationPage.getTotalPages()).toEqual('of ' + totalPages); + await expect(await paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.ten); + await expect(await paginationPage.getPaginationRange()).toEqual('Showing 11-' + itemsPerPage.tenValue * currentPage + ' of ' + nrOfTasks); + await expect(await taskPage.tasksListPage().getDataTable().numberOfRows()).toBe(itemsPerPage.tenValue); + await paginationPage.checkNextPageButtonIsDisabled(); + await paginationPage.checkPreviousPageButtonIsEnabled(); - paginationPage.clickOnPageDropdown(); - expect(paginationPage.getPageDropdownOptions()).toEqual(['1', '2']); + await paginationPage.clickOnPageDropdown(); + await expect(await paginationPage.getPageDropdownOptions()).toEqual(['1', '2']); currentPage = 1; - paginationPage.clickOnPageDropdownOption('1'); - taskPage.tasksListPage().getDataTable().waitForTableBody(); - expect(paginationPage.getCurrentPage()).toEqual('Page ' + currentPage); - expect(paginationPage.getTotalPages()).toEqual('of ' + totalPages); - expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.ten); - expect(paginationPage.getPaginationRange()).toEqual('Showing 1-' + itemsPerPage.tenValue * currentPage + ' of ' + nrOfTasks); - expect(taskPage.tasksListPage().getDataTable().numberOfRows()).toBe(itemsPerPage.tenValue); - paginationPage.checkNextPageButtonIsEnabled(); - paginationPage.checkPreviousPageButtonIsDisabled(); + await paginationPage.clickOnPageDropdownOption('1'); + await taskPage.tasksListPage().getDataTable().waitForTableBody(); + await expect(await paginationPage.getCurrentPage()).toEqual('Page ' + currentPage); + await expect(await paginationPage.getTotalPages()).toEqual('of ' + totalPages); + await expect(await paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.ten); + await expect(await paginationPage.getPaginationRange()).toEqual('Showing 1-' + itemsPerPage.tenValue * currentPage + ' of ' + nrOfTasks); + await expect(await taskPage.tasksListPage().getDataTable().numberOfRows()).toBe(itemsPerPage.tenValue); + await paginationPage.checkNextPageButtonIsEnabled(); + await paginationPage.checkPreviousPageButtonIsDisabled(); }); it('Pagination in an empty task list', async () => { await loginPage.loginToProcessServicesUsingUserModel(processUserModelEmpty); - navigationBarPage.navigateToProcessServicesPage().goToTaskApp(); - paginationPage.checkPaginationIsNotDisplayed(); + await (await navigationBarPage.navigateToProcessServicesPage()).goToTaskApp(); + await paginationPage.checkPaginationIsNotDisplayed(); }); }); diff --git a/e2e/process-services/widgets/amount-widget.e2e.ts b/e2e/process-services/widgets/amount-widget.e2e.ts index b1e50d5ee1..8260de9a8a 100644 --- a/e2e/process-services/widgets/amount-widget.e2e.ts +++ b/e2e/process-services/widgets/amount-widget.e2e.ts @@ -38,7 +38,7 @@ describe('Amount Widget', () => { const app = resources.Files.WIDGET_CHECK_APP.AMOUNT; let deployedApp, process; - beforeAll(async (done) => { + beforeAll(async () => { const users = new UsersActions(); alfrescoJsApi = new AlfrescoApi({ @@ -59,44 +59,44 @@ describe('Amount Widget', () => { }); process = await appsActions.startProcess(alfrescoJsApi, appModel, app.processName); await loginPage.loginToProcessServicesUsingUserModel(processUserModel); - done(); + }); - beforeEach(async () => { + beforeEach(async() => { const urlToNavigateTo = `${browser.params.testConfig.adf.url}/activiti/apps/${deployedApp.id}/tasks/`; await BrowserActions.getUrl(urlToNavigateTo); - taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); - taskPage.formFields().checkFormIsDisplayed(); + await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); + await taskPage.formFields().checkFormIsDisplayed(); }); - afterAll(async (done) => { + afterAll(async () => { await alfrescoJsApi.activiti.processApi.deleteProcessInstance(process.id); await alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); await alfrescoJsApi.activiti.adminTenantsApi.deleteTenant(processUserModel.tenantId); - done(); + }); - it('[C274703] Should be possible to set general, advance and visibility properties for Amount Widget', () => { - taskPage.formFields().checkWidgetIsHidden(app.FIELD.amount_input_id); - widget.checkboxWidget().clickCheckboxInput(app.FIELD.checkbox_id); - taskPage.formFields().checkWidgetIsVisible(app.FIELD.amount_input_id); + it('[C274703] Should be possible to set general, advance and visibility properties for Amount Widget', async () => { + await taskPage.formFields().checkWidgetIsHidden(app.FIELD.amount_input_id); + await widget.checkboxWidget().clickCheckboxInput(app.FIELD.checkbox_id); + await taskPage.formFields().checkWidgetIsVisible(app.FIELD.amount_input_id); - expect(taskPage.formFields().isCompleteFormButtonDisabled()).toBeTruthy(); - expect(widget.amountWidget().getAmountFieldLabel(app.FIELD.amount_input_id)).toContain('Amount'); - expect(widget.amountWidget().getPlaceholder(app.FIELD.amount_input_id)).toContain('Type amount'); - expect(widget.amountWidget().getAmountFieldCurrency(app.FIELD.amount_input_id)).toBe('$'); + await expect(await taskPage.formFields().isCompleteFormButtonDisabled()).toBeTruthy(); + await expect(await widget.amountWidget().getAmountFieldLabel(app.FIELD.amount_input_id)).toContain('Amount'); + await expect(await widget.amountWidget().getPlaceholder(app.FIELD.amount_input_id)).toContain('Type amount'); + await expect(await widget.amountWidget().getAmountFieldCurrency(app.FIELD.amount_input_id)).toBe('$'); - widget.amountWidget().setFieldValue(app.FIELD.amount_input_id, 4); - expect(widget.amountWidget().getErrorMessage(app.FIELD.amount_input_id)).toBe('Can\'t be less than 5'); - expect(taskPage.formFields().isCompleteFormButtonDisabled()).toBeTruthy(); - widget.amountWidget().clearFieldValue(app.FIELD.amount_input_id); + await widget.amountWidget().setFieldValue(app.FIELD.amount_input_id, 4); + await expect(await widget.amountWidget().getErrorMessage(app.FIELD.amount_input_id)).toBe('Can\'t be less than 5'); + await expect(await taskPage.formFields().isCompleteFormButtonDisabled()).toBeTruthy(); + await widget.amountWidget().clearFieldValue(app.FIELD.amount_input_id); - widget.amountWidget().setFieldValue(app.FIELD.amount_input_id, 101); - expect(widget.amountWidget().getErrorMessage(app.FIELD.amount_input_id)).toBe('Can\'t be greater than 100'); - expect(taskPage.formFields().isCompleteFormButtonDisabled()).toBeTruthy(); - widget.amountWidget().clearFieldValue(app.FIELD.amount_input_id); + await widget.amountWidget().setFieldValue(app.FIELD.amount_input_id, 101); + await expect(await widget.amountWidget().getErrorMessage(app.FIELD.amount_input_id)).toBe('Can\'t be greater than 100'); + await expect(await taskPage.formFields().isCompleteFormButtonDisabled()).toBeTruthy(); + await widget.amountWidget().clearFieldValue(app.FIELD.amount_input_id); - widget.amountWidget().setFieldValue(app.FIELD.amount_input_id, 6); - expect(taskPage.formFields().isCompleteFormButtonDisabled()).toBeFalsy(); + await widget.amountWidget().setFieldValue(app.FIELD.amount_input_id, 6); + await expect(await taskPage.formFields().isCompleteFormButtonDisabled()).toBeFalsy(); }); }); diff --git a/e2e/process-services/widgets/attach-folder-widget.e2e.ts b/e2e/process-services/widgets/attach-folder-widget.e2e.ts index 140425ba55..bab81c9b82 100644 --- a/e2e/process-services/widgets/attach-folder-widget.e2e.ts +++ b/e2e/process-services/widgets/attach-folder-widget.e2e.ts @@ -35,7 +35,7 @@ describe('Attach Folder widget', () => { const app = resources.Files.WIDGET_CHECK_APP.ATTACH_FOLDER; let deployedApp, process; - beforeAll(async (done) => { + beforeAll(async () => { const users = new UsersActions(); alfrescoJsApi = new AlfrescoApi({ @@ -56,28 +56,28 @@ describe('Attach Folder widget', () => { }); process = await appsActions.startProcess(alfrescoJsApi, appModel, app.processName); await loginPage.loginToProcessServicesUsingUserModel(processUserModel); - done(); + }); beforeEach(async () => { const urlToNavigateTo = `${browser.params.testConfig.adf.url}/activiti/apps/${deployedApp.id}/tasks/`; await BrowserActions.getUrl(urlToNavigateTo); - taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); - taskPage.formFields().checkFormIsDisplayed(); + await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); + await taskPage.formFields().checkFormIsDisplayed(); }); - afterAll(async (done) => { + afterAll(async () => { await alfrescoJsApi.activiti.processApi.deleteProcessInstance(process.id); await alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); await alfrescoJsApi.activiti.adminTenantsApi.deleteTenant(processUserModel.tenantId); - done(); + }); - it('[C276745] Should be possible to set visibility properties for Attach Folder Widget', () => { - taskPage.formFields().checkWidgetIsHidden(app.FIELD.upload_button_id); - widget.checkboxWidget().clickCheckboxInput(app.FIELD.checkbox_id); - taskPage.formFields().checkWidgetIsVisible(app.FIELD.upload_button_id); + it('[C276745] Should be possible to set visibility properties for Attach Folder Widget', async () => { + await taskPage.formFields().checkWidgetIsHidden(app.FIELD.upload_button_id); + await widget.checkboxWidget().clickCheckboxInput(app.FIELD.checkbox_id); + await taskPage.formFields().checkWidgetIsVisible(app.FIELD.upload_button_id); - expect(taskPage.formFields().isCompleteFormButtonDisabled()).toBeTruthy(); + await expect(await taskPage.formFields().isCompleteFormButtonDisabled()).toBeTruthy(); }); }); diff --git a/e2e/process-services/widgets/checkbox-widget.e2e.ts b/e2e/process-services/widgets/checkbox-widget.e2e.ts index 16ab4905a3..8113e4b434 100644 --- a/e2e/process-services/widgets/checkbox-widget.e2e.ts +++ b/e2e/process-services/widgets/checkbox-widget.e2e.ts @@ -36,7 +36,7 @@ describe('Checkbox Widget', () => { const app = resources.Files.WIDGET_CHECK_APP.CHECKBOX; let deployedApp, process; - beforeAll(async (done) => { + beforeAll(async () => { const users = new UsersActions(); alfrescoJsApi = new AlfrescoApi({ @@ -57,34 +57,34 @@ describe('Checkbox Widget', () => { }); process = await appsActions.startProcess(alfrescoJsApi, appModel, app.processName); await loginPage.loginToProcessServicesUsingUserModel(processUserModel); - done(); + }); beforeEach(async () => { const urlToNavigateTo = `${browser.params.testConfig.adf.url}/activiti/apps/${deployedApp.id}/tasks/`; await BrowserActions.getUrl(urlToNavigateTo); - taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); - taskPage.formFields().checkFormIsDisplayed(); + await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); + await taskPage.formFields().checkFormIsDisplayed(); }); - afterAll(async (done) => { + afterAll(async () => { await alfrescoJsApi.activiti.processApi.deleteProcessInstance(process.id); await alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); await alfrescoJsApi.activiti.adminTenantsApi.deleteTenant(processUserModel.tenantId); - done(); + }); - it('[C268554] Should be able to set general settings for Checkbox widget ', () => { - taskPage.formFields().setValueInInputById(app.FIELD.number_input_id, 2); - expect(widget.checkboxWidget().getCheckboxLabel()).toContain(app.FIELD.checkbox_label); - expect(taskPage.formFields().isCompleteFormButtonDisabled()).toBeTruthy(); - widget.checkboxWidget().clickCheckboxInput(app.FIELD.checkbox_input_id); - expect(taskPage.formFields().isCompleteFormButtonDisabled()).toBeFalsy(); + it('[C268554] Should be able to set general settings for Checkbox widget ', async () => { + await taskPage.formFields().setValueInInputById(app.FIELD.number_input_id, 2); + await expect(await widget.checkboxWidget().getCheckboxLabel()).toContain(app.FIELD.checkbox_label); + await expect(await taskPage.formFields().isCompleteFormButtonDisabled()).toBeTruthy(); + await widget.checkboxWidget().clickCheckboxInput(app.FIELD.checkbox_input_id); + await expect(await taskPage.formFields().isCompleteFormButtonDisabled()).toBeFalsy(); }); - it('[C272812] Should be able to set visibility settings for Checkbox widget', () => { - widget.checkboxWidget().isCheckboxHidden(app.FIELD.checkbox_field_id); - taskPage.formFields().setValueInInputById(app.FIELD.number_input_id, 2); - widget.checkboxWidget().isCheckboxDisplayed(app.FIELD.checkbox_field_id); + it('[C272812] Should be able to set visibility settings for Checkbox widget', async () => { + await widget.checkboxWidget().isCheckboxHidden(app.FIELD.checkbox_field_id); + await taskPage.formFields().setValueInInputById(app.FIELD.number_input_id, 2); + await widget.checkboxWidget().isCheckboxDisplayed(app.FIELD.checkbox_field_id); }); }); diff --git a/e2e/process-services/widgets/date-time-widget.e2e.ts b/e2e/process-services/widgets/date-time-widget.e2e.ts index 27ccbaad31..4db843973f 100644 --- a/e2e/process-services/widgets/date-time-widget.e2e.ts +++ b/e2e/process-services/widgets/date-time-widget.e2e.ts @@ -36,7 +36,7 @@ describe('Date and time widget', () => { const app = resources.Files.WIDGET_CHECK_APP.DATETIME; let deployedApp, process; - beforeAll(async (done) => { + beforeAll(async () => { const users = new UsersActions(); alfrescoJsApi = new AlfrescoApi({ @@ -57,48 +57,54 @@ describe('Date and time widget', () => { }); process = await appsActions.startProcess(alfrescoJsApi, appModel, app.processName); await loginPage.loginToProcessServicesUsingUserModel(processUserModel); - done(); + }); beforeEach(async () => { const urlToNavigateTo = `${browser.params.testConfig.adf.url}/activiti/apps/${deployedApp.id}/tasks/`; await BrowserActions.getUrl(urlToNavigateTo); - taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); - taskPage.formFields().checkFormIsDisplayed(); + await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); + await taskPage.formFields().checkFormIsDisplayed(); }); - afterAll(async (done) => { + afterAll(async () => { await alfrescoJsApi.activiti.processApi.deleteProcessInstance(process.id); await alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); await alfrescoJsApi.activiti.adminTenantsApi.deleteTenant(processUserModel.tenantId); - done(); }); - it('[C268818] Should be able to set general settings for Date Time widget', () => { - expect(widget.dateTimeWidget().getDateTimeLabel(app.FIELD.date_time_input)).toContain('Date'); - expect(taskPage.formFields().isCompleteFormButtonDisabled()).toBeTruthy(); + it('[C268818] Should be able to set general settings for Date Time widget', async () => { + await expect(await widget.dateTimeWidget().getDateTimeLabel(app.FIELD.date_time_input)).toContain('Date'); + await expect(await taskPage.formFields().isCompleteFormButtonDisabled()).toBeTruthy(); - widget.dateTimeWidget().openDatepicker(app.FIELD.date_time_input); - widget.dateTimeWidget().selectDay('10'); - widget.dateTimeWidget().selectHour('8'); - widget.dateTimeWidget().selectMinute('30'); - expect(taskPage.formFields().isCompleteFormButtonDisabled()).toBeFalsy(); + await widget.dateTimeWidget().openDatepicker(app.FIELD.date_time_input); + await widget.dateTimeWidget().selectDay('10'); + await widget.dateTimeWidget().selectHour('8'); + await widget.dateTimeWidget().selectMinute('30'); + await expect(await taskPage.formFields().isCompleteFormButtonDisabled()).toBeFalsy(); - expect(widget.dateTimeWidget().getPlaceholder(app.FIELD.date_time_between_input)).toBe('Choose anything...'); + await expect(await widget.dateTimeWidget().getPlaceholder(app.FIELD.date_time_between_input)).toBe('Choose anything...'); }); - it('[C268819] Should be able to set advanced settings for Date Time widget ', () => { - widget.dateTimeWidget().openDatepicker(app.FIELD.date_time_between_input); - widget.dateTimeWidget().closeDataTimeWidget(); - widget.dateTimeWidget().setDateTimeInput(app.FIELD.date_time_between_input, '20-03-17 07:30 PM'); - taskPage.formFields().saveForm(); - expect(widget.dateTimeWidget().getErrorMessage(app.FIELD.date_time_between_input)).toContain('Can\'t be less than'); + it('[C268819] Should be able to set advanced settings for Date Time widget ', async () => { + await widget.dateTimeWidget().openDatepicker(app.FIELD.date_time_between_input); + await widget.dateTimeWidget().closeDataTimeWidget(); - widget.dateTimeWidget().openDatepicker(app.FIELD.date_time_between_input); - widget.dateTimeWidget().closeDataTimeWidget(); - widget.dateTimeWidget().removeFromDatetimeWidget(app.FIELD.date_time_between_input); - widget.dateTimeWidget().setDateTimeInput(app.FIELD.date_time_between_input, '20-03-19 07:30 PM'); - taskPage.formFields().saveForm(); - expect(widget.dateTimeWidget().getErrorMessage(app.FIELD.date_time_between_input)).toContain('Can\'t be greater than'); + await widget.dateTimeWidget().setDateTimeInput(app.FIELD.date_time_between_input, '20-03-17 07:30 PM'); + await taskPage.formFields().saveForm(); + await expect(await widget.dateTimeWidget().getErrorMessage(app.FIELD.date_time_between_input)).toContain('Can\'t be less than'); + + await widget.dateTimeWidget().openDatepicker(app.FIELD.date_time_between_input); + await widget.dateTimeWidget().closeDataTimeWidget(); + await widget.dateTimeWidget().removeFromDatetimeWidget(app.FIELD.date_time_between_input); + + await browser.refresh(); + + await widget.dateTimeWidget().setDateTimeInput(app.FIELD.date_time_between_input, '20-03-19 07:30 PM'); + await widget.dateTimeWidget().closeDataTimeWidget(); + + await taskPage.formFields().saveForm(); + + await expect(await widget.dateTimeWidget().getErrorMessage(app.FIELD.date_time_between_input)).toContain('Can\'t be greater than'); }); }); diff --git a/e2e/process-services/widgets/date-widget.e2e.ts b/e2e/process-services/widgets/date-widget.e2e.ts index cc89574479..69d31dae96 100644 --- a/e2e/process-services/widgets/date-widget.e2e.ts +++ b/e2e/process-services/widgets/date-widget.e2e.ts @@ -36,7 +36,7 @@ describe('Date widget', () => { const app = resources.Files.WIDGET_CHECK_APP.DATE; let deployedApp, process; - beforeAll(async (done) => { + beforeAll(async () => { const users = new UsersActions(); alfrescoJsApi = new AlfrescoApi({ @@ -57,38 +57,38 @@ describe('Date widget', () => { }); process = await appsActions.startProcess(alfrescoJsApi, appModel, app.processName); await loginPage.loginToProcessServicesUsingUserModel(processUserModel); - done(); + }); beforeEach(async () => { const urlToNavigateTo = `${browser.params.testConfig.adf.url}/activiti/apps/${deployedApp.id}/tasks/`; await BrowserActions.getUrl(urlToNavigateTo); - taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); - taskPage.formFields().checkFormIsDisplayed(); + await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); + await taskPage.formFields().checkFormIsDisplayed(); }); - afterAll(async (done) => { + afterAll(async () => { await alfrescoJsApi.activiti.processApi.deleteProcessInstance(process.id); await alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); await alfrescoJsApi.activiti.adminTenantsApi.deleteTenant(processUserModel.tenantId); - done(); + }); - it('[C268814] Should be able to set general settings for Date widget', () => { - expect(widget.dateWidget().getDateLabel(app.FIELD.date_input)).toContain('Date'); - expect(taskPage.formFields().isCompleteFormButtonDisabled()).toBeTruthy(); - widget.dateWidget().setDateInput(app.FIELD.date_input, '20-10-2018'); - taskPage.formFields().saveForm(); - expect(taskPage.formFields().isCompleteFormButtonDisabled()).toBeFalsy(); + it('[C268814] Should be able to set general settings for Date widget', async () => { + await expect(await widget.dateWidget().getDateLabel(app.FIELD.date_input)).toContain('Date'); + await expect(await taskPage.formFields().isCompleteFormButtonDisabled()).toBeTruthy(); + await widget.dateWidget().setDateInput(app.FIELD.date_input, '20-10-2018'); + await taskPage.formFields().saveForm(); + await expect(await taskPage.formFields().isCompleteFormButtonDisabled()).toBeFalsy(); }); - it('[C277234] Should be able to set advanced settings for Date widget ', () => { - widget.dateWidget().setDateInput(app.FIELD.date_between_input, '20-10-2017'); - taskPage.formFields().saveForm(); - expect(widget.dateWidget().getErrorMessage(app.FIELD.date_between_input)).toBe('Can\'t be less than 1-10-2018'); - widget.dateWidget().clearDateInput(app.FIELD.date_between_input); - widget.dateWidget().setDateInput(app.FIELD.date_between_input, '20-10-2019'); - taskPage.formFields().saveForm(); - expect(widget.dateWidget().getErrorMessage(app.FIELD.date_between_input)).toBe('Can\'t be greater than 31-10-2018'); + it('[C277234] Should be able to set advanced settings for Date widget ', async () => { + await widget.dateWidget().setDateInput(app.FIELD.date_between_input, '20-10-2017'); + await taskPage.formFields().saveForm(); + await expect(await widget.dateWidget().getErrorMessage(app.FIELD.date_between_input)).toBe('Can\'t be less than 1-10-2018'); + await widget.dateWidget().clearDateInput(app.FIELD.date_between_input); + await widget.dateWidget().setDateInput(app.FIELD.date_between_input, '20-10-2019'); + await taskPage.formFields().saveForm(); + await expect(await widget.dateWidget().getErrorMessage(app.FIELD.date_between_input)).toBe('Can\'t be greater than 31-10-2018'); }); }); diff --git a/e2e/process-services/widgets/document-template-widget.e2e.ts b/e2e/process-services/widgets/document-template-widget.e2e.ts index e28d38b3ed..bde5e20c97 100644 --- a/e2e/process-services/widgets/document-template-widget.e2e.ts +++ b/e2e/process-services/widgets/document-template-widget.e2e.ts @@ -36,7 +36,7 @@ describe('Document Template widget', () => { const app = resources.Files.FILE_FORM_ADF; let deployedApp, process; - beforeAll(async (done) => { + beforeAll(async () => { const users = new UsersActions(); alfrescoJsApi = new AlfrescoApi({ @@ -57,25 +57,25 @@ describe('Document Template widget', () => { }); process = await appsActions.startProcess(alfrescoJsApi, appModel, app.processName); await loginPage.loginToProcessServicesUsingUserModel(processUserModel); - done(); + }); beforeEach(async () => { const urlToNavigateTo = `${browser.params.testConfig.adf.url}/activiti/apps/${deployedApp.id}/tasks/`; await BrowserActions.getUrl(urlToNavigateTo); - taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); - taskPage.formFields().checkFormIsDisplayed(); + await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); + await taskPage.formFields().checkFormIsDisplayed(); }); - afterAll(async (done) => { + afterAll(async () => { await alfrescoJsApi.activiti.processApi.deleteProcessInstance(process.id); await alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); await alfrescoJsApi.activiti.adminTenantsApi.deleteTenant(processUserModel.tenantId); - done(); + }); - it('[C260406] should check that the template contains assigned file ', () => { - expect(widget.containerWidget().getFieldText(app.form_fields.container_id)) + it('[C260406] should check that the template contains assigned file ', async () => { + await expect(await widget.containerWidget().getFieldText(app.form_fields.container_id)) .toEqual(app.attached_file); }); }); diff --git a/e2e/process-services/widgets/dropdown-widget.e2e.ts b/e2e/process-services/widgets/dropdown-widget.e2e.ts index 0fe797ccc1..a29dea6705 100644 --- a/e2e/process-services/widgets/dropdown-widget.e2e.ts +++ b/e2e/process-services/widgets/dropdown-widget.e2e.ts @@ -36,7 +36,7 @@ describe('Dropdown widget', () => { const app = resources.Files.WIDGET_CHECK_APP.DROPDOWN; let deployedApp, process; - beforeAll(async (done) => { + beforeAll(async () => { const users = new UsersActions(); alfrescoJsApi = new AlfrescoApi({ @@ -57,42 +57,41 @@ describe('Dropdown widget', () => { }); process = await appsActions.startProcess(alfrescoJsApi, appModel, app.processName); await loginPage.loginToProcessServicesUsingUserModel(processUserModel); - done(); + }); beforeEach(async () => { const urlToNavigateTo = `${browser.params.testConfig.adf.url}/activiti/apps/${deployedApp.id}/tasks/`; await BrowserActions.getUrl(urlToNavigateTo); - taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); - taskPage.formFields().checkFormIsDisplayed(); + await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); + await taskPage.formFields().checkFormIsDisplayed(); }); - afterAll(async (done) => { + afterAll(async () => { await alfrescoJsApi.activiti.processApi.deleteProcessInstance(process.id); await alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); await alfrescoJsApi.activiti.adminTenantsApi.deleteTenant(processUserModel.tenantId); - done(); }); - it('[C269051] Should be possible to set general and options properties for Dropdown widget ', () => { - expect(taskPage.formFields().isCompleteFormButtonDisabled()).toBeTruthy(); + it('[C269051] Should be possible to set general and options properties for Dropdown widget ', async () => { + await expect(await taskPage.formFields().isCompleteFormButtonDisabled()).toBeTruthy(); - widget.dropdown().selectOption('Happy'); - expect(widget.dropdown().getSelectedOptionText(app.FIELD.general_dropdown)).toContain('Happy'); - expect(taskPage.formFields().isCompleteFormButtonDisabled()).toBeFalsy(); + await widget.dropdown().selectOption('Happy'); + await expect(await widget.dropdown().getSelectedOptionText(app.FIELD.general_dropdown)).toContain('Happy'); + await expect(await taskPage.formFields().isCompleteFormButtonDisabled()).toBeFalsy(); - widget.dropdown().selectOption('Choose one'); - expect(widget.dropdown().getSelectedOptionText(app.FIELD.general_dropdown)).toContain('Choose one'); - expect(taskPage.formFields().isCompleteFormButtonDisabled()).toBeTruthy(); + await widget.dropdown().selectOption('Choose one'); + await expect(await widget.dropdown().getSelectedOptionText(app.FIELD.general_dropdown)).toContain('Choose one'); + await expect(await taskPage.formFields().isCompleteFormButtonDisabled()).toBeTruthy(); - widget.dropdown().selectOption('Sad'); - expect(widget.dropdown().getSelectedOptionText(app.FIELD.general_dropdown)).toContain('Sad'); - expect(taskPage.formFields().isCompleteFormButtonDisabled()).toBeFalsy(); + await widget.dropdown().selectOption('Sad'); + await expect(await widget.dropdown().getSelectedOptionText(app.FIELD.general_dropdown)).toContain('Sad'); + await expect(await taskPage.formFields().isCompleteFormButtonDisabled()).toBeFalsy(); }); - it('[C269052] Should be possible to set visibility properties for Dropdown widget', () => { - taskPage.formFields().checkWidgetIsHidden(app.FIELD.dropdown_visible); - widget.checkboxWidget().clickCheckboxInput(app.FIELD.checkbox_id); - taskPage.formFields().checkWidgetIsVisible(app.FIELD.dropdown_visible); + it('[C269052] Should be possible to set visibility properties for Dropdown widget', async () => { + await taskPage.formFields().checkWidgetIsHidden(app.FIELD.dropdown_visible); + await widget.checkboxWidget().clickCheckboxInput(app.FIELD.checkbox_id); + await taskPage.formFields().checkWidgetIsVisible(app.FIELD.dropdown_visible); }); }); diff --git a/e2e/process-services/widgets/dynamic-table-widget.e2e.ts b/e2e/process-services/widgets/dynamic-table-widget.e2e.ts index 91d1386601..f853534f78 100644 --- a/e2e/process-services/widgets/dynamic-table-widget.e2e.ts +++ b/e2e/process-services/widgets/dynamic-table-widget.e2e.ts @@ -38,7 +38,7 @@ describe('Dynamic Table widget ', () => { describe('with Date Time Widget App', () => { const app = resources.Files.WIDGET_CHECK_APP.DYNAMIC_TABLE; - beforeAll(async (done) => { + beforeAll(async () => { const users = new UsersActions(); alfrescoJsApi = new AlfrescoApi({ @@ -59,39 +59,39 @@ describe('Dynamic Table widget ', () => { }); process = await appsActions.startProcess(alfrescoJsApi, appModel, app.processName); await loginPage.loginToProcessServicesUsingUserModel(processUserModel); - done(); + }); beforeEach(async () => { const urlToNavigateTo = `${browser.params.testConfig.adf.url}/activiti/apps/${deployedApp.id}/tasks/`; await BrowserActions.getUrl(urlToNavigateTo); - taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); - taskPage.formFields().checkFormIsDisplayed(); + await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); + await taskPage.formFields().checkFormIsDisplayed(); }); - afterAll(async (done) => { + afterAll(async () => { await alfrescoJsApi.activiti.processApi.deleteProcessInstance(process.id); await alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); await alfrescoJsApi.activiti.adminTenantsApi.deleteTenant(processUserModel.tenantId); - done(); + }); - it('[C276729] Should be possible to set visibility properties for Dynamic Table', () => { - taskPage.formFields().checkWidgetIsHidden(app.FIELD.dynamic_table_age_id); - widget.checkboxWidget().clickCheckboxInput(app.FIELD.checkbox_id); - taskPage.formFields().checkWidgetIsVisible(app.FIELD.dynamic_table_age_id); + it('[C276729] Should be possible to set visibility properties for Dynamic Table', async () => { + await taskPage.formFields().checkWidgetIsHidden(app.FIELD.dynamic_table_age_id); + await widget.checkboxWidget().clickCheckboxInput(app.FIELD.checkbox_id); + await taskPage.formFields().checkWidgetIsVisible(app.FIELD.dynamic_table_age_id); }); - it('[C279349] Should be able to have a Date Time widget in a Dynamic Table widget', () => { - widget.dynamicTable().clickAddButton(); - widget.dateTimeWidget().openDatepicker(app.FIELD.dateTime_input_id); - widget.dateTimeWidget().selectDay('10'); - widget.dateTimeWidget().selectHour('8'); - widget.dateTimeWidget().selectMinute('30'); - widget.dateTimeWidget().clearDateTimeInput(app.FIELD.dateTime_input_id); + it('[C279349] Should be able to have a Date Time widget in a Dynamic Table widget', async () => { + await widget.dynamicTable().clickAddButton(); + await widget.dateTimeWidget().openDatepicker(app.FIELD.dateTime_input_id); + await widget.dateTimeWidget().selectDay('10'); + await widget.dateTimeWidget().selectHour('8'); + await widget.dateTimeWidget().selectMinute('30'); + await widget.dateTimeWidget().clearDateTimeInput(app.FIELD.dateTime_input_id); - widget.dynamicTable().clickSaveButton(); - widget.dynamicTable().getTableRow(0); + await widget.dynamicTable().clickSaveButton(); + await widget.dynamicTable().getTableRow(0); }); }); @@ -99,7 +99,7 @@ describe('Dynamic Table widget ', () => { const app = resources.Files.WIDGET_CHECK_APP.DYNAMIC_TABLE_USERS; - beforeAll(async (done) => { + beforeAll(async () => { const users = new UsersActions(); alfrescoJsApi = new AlfrescoApi({ @@ -120,45 +120,45 @@ describe('Dynamic Table widget ', () => { }); process = await appsActions.startProcess(alfrescoJsApi, appModel, app.processName); await loginPage.loginToProcessServicesUsingUserModel(processUserModel); - done(); + }); - beforeEach(() => { + beforeEach(async () => { const urlToNavigateTo = `${browser.params.testConfig.adf.url}/activiti/apps/${deployedApp.id}/tasks/`; - BrowserActions.getUrl(urlToNavigateTo); - taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); - taskPage.formFields().checkFormIsDisplayed(); + await BrowserActions.getUrl(urlToNavigateTo); + await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); + await taskPage.formFields().checkFormIsDisplayed(); }); - afterAll(async (done) => { + afterAll(async () => { await alfrescoJsApi.activiti.processApi.deleteProcessInstance(process.id); await alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); await alfrescoJsApi.activiti.adminTenantsApi.deleteTenant(processUserModel.tenantId); - done(); + }); - it('[C260407] Should be able to add/delete/update row in Dynamic Table widget', () => { + it('[C260407] Should be able to add/delete/update row in Dynamic Table widget', async () => { - widget.dynamicTable().clickAddRow(); - widget.dynamicTable().setDatatableInput('User1'); - widget.dynamicTable().clickSaveButton(); - expect(widget.dynamicTable().getTableRowText(0)).toEqual('User1'); + await widget.dynamicTable().clickAddRow(); + await widget.dynamicTable().setDatatableInput('User1'); + await widget.dynamicTable().clickSaveButton(); + await expect(await widget.dynamicTable().getTableRowText(0)).toEqual('User1'); - widget.dynamicTable().clickTableRow(0); - widget.dynamicTable().clickEditButton(); - widget.dynamicTable().setDatatableInput('User2'); - widget.dynamicTable().clickCancelButton(); - expect(widget.dynamicTable().getTableRowText(0)).toEqual('User1'); + await widget.dynamicTable().clickTableRow(0); + await widget.dynamicTable().clickEditButton(); + await widget.dynamicTable().setDatatableInput('User2'); + await widget.dynamicTable().clickCancelButton(); + await expect(await widget.dynamicTable().getTableRowText(0)).toEqual('User1'); - widget.dynamicTable().clickEditButton(); - widget.dynamicTable().setDatatableInput('User2'); - widget.dynamicTable().clickSaveButton(); - expect(widget.dynamicTable().getTableRowText(0)).toEqual('User2'); + await widget.dynamicTable().clickEditButton(); + await widget.dynamicTable().setDatatableInput('User2'); + await widget.dynamicTable().clickSaveButton(); + await expect(await widget.dynamicTable().getTableRowText(0)).toEqual('User2'); - widget.dynamicTable().clickAddRow(); - widget.dynamicTable().setDatatableInput('User3'); - widget.dynamicTable().clickCancelButton(); - widget.dynamicTable().checkTableRowIsNotVisible(1); + await widget.dynamicTable().clickAddRow(); + await widget.dynamicTable().setDatatableInput('User3'); + await widget.dynamicTable().clickCancelButton(); + await widget.dynamicTable().checkTableRowIsNotVisible(1); }); }); diff --git a/e2e/process-services/widgets/header-widget.e2e.ts b/e2e/process-services/widgets/header-widget.e2e.ts index 3cf29761dd..043a07e752 100644 --- a/e2e/process-services/widgets/header-widget.e2e.ts +++ b/e2e/process-services/widgets/header-widget.e2e.ts @@ -24,7 +24,7 @@ import CONSTANTS = require('../../util/constants'); import { browser } from 'protractor'; import resources = require('../../util/resources'); -describe('Header widget', () => { +describe('Header widget', async () => { const loginPage = new LoginPage(); let processUserModel; @@ -36,7 +36,7 @@ describe('Header widget', () => { const app = resources.Files.WIDGET_CHECK_APP.HEADER; let deployedApp, process; - beforeAll(async (done) => { + beforeAll(async () => { const users = new UsersActions(); alfrescoJsApi = new AlfrescoApi({ @@ -57,29 +57,29 @@ describe('Header widget', () => { }); process = await appsActions.startProcess(alfrescoJsApi, appModel, app.processName); await loginPage.loginToProcessServicesUsingUserModel(processUserModel); - done(); + }); beforeEach(async () => { const urlToNavigateTo = `${browser.params.testConfig.adf.url}/activiti/apps/${deployedApp.id}/tasks/`; await BrowserActions.getUrl(urlToNavigateTo); - taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); - taskPage.formFields().checkFormIsDisplayed(); + await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); + await taskPage.formFields().checkFormIsDisplayed(); }); - afterAll(async (done) => { + afterAll(async () => { await alfrescoJsApi.activiti.processApi.deleteProcessInstance(process.id); await alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); await alfrescoJsApi.activiti.adminTenantsApi.deleteTenant(processUserModel.tenantId); - done(); + }); - it('[C276737] Should be able to set general and visibility properties for Header widget', () => { - taskPage.formFields().checkWidgetIsHidden(app.FIELD.header_id); - widget.checkboxWidget().clickCheckboxInput(app.FIELD.checkbox_id); - taskPage.formFields().checkWidgetIsVisible(app.FIELD.header_id); + it('[C276737] Should be able to set general and visibility properties for Header widget', async () => { + await taskPage.formFields().checkWidgetIsHidden(app.FIELD.header_id); + await widget.checkboxWidget().clickCheckboxInput(app.FIELD.checkbox_id); + await taskPage.formFields().checkWidgetIsVisible(app.FIELD.header_id); - expect(widget.headerWidget().getFieldLabel(app.FIELD.header_id)).toBe('Header'); - expect(taskPage.formFields().isCompleteFormButtonDisabled()).toBeFalsy(); + await expect(await widget.headerWidget().getFieldLabel(app.FIELD.header_id)).toBe('Header'); + await expect(await taskPage.formFields().isCompleteFormButtonDisabled()).toBeFalsy(); }); }); diff --git a/e2e/process-services/widgets/hyperlink-widget.e2e.ts b/e2e/process-services/widgets/hyperlink-widget.e2e.ts index 801e7368c8..065f53170e 100644 --- a/e2e/process-services/widgets/hyperlink-widget.e2e.ts +++ b/e2e/process-services/widgets/hyperlink-widget.e2e.ts @@ -36,7 +36,7 @@ describe('Hyperlink widget', () => { const app = resources.Files.WIDGET_CHECK_APP.HYPERLINK; let deployedApp, process; - beforeAll(async (done) => { + beforeAll(async () => { const users = new UsersActions(); alfrescoJsApi = new AlfrescoApi({ @@ -57,29 +57,29 @@ describe('Hyperlink widget', () => { }); process = await appsActions.startProcess(alfrescoJsApi, appModel, app.processName); await loginPage.loginToProcessServicesUsingUserModel(processUserModel); - done(); + }); beforeEach(async () => { const urlToNavigateTo = `${browser.params.testConfig.adf.url}/activiti/apps/${deployedApp.id}/tasks/`; await BrowserActions.getUrl(urlToNavigateTo); - taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); - taskPage.formFields().checkFormIsDisplayed(); + await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); + await taskPage.formFields().checkFormIsDisplayed(); }); - afterAll(async (done) => { + afterAll(async () => { await alfrescoJsApi.activiti.processApi.deleteProcessInstance(process.id); await alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); await alfrescoJsApi.activiti.adminTenantsApi.deleteTenant(processUserModel.tenantId); - done(); + }); - it('[C276728] Should be able to set visibility properties for Hyperlink widget', () => { - taskPage.formFields().checkWidgetIsHidden(app.FIELD.hyperlink_id); - widget.checkboxWidget().clickCheckboxInput(app.FIELD.checkbox_id); - taskPage.formFields().checkWidgetIsVisible(app.FIELD.hyperlink_id); + it('[C276728] Should be able to set visibility properties for Hyperlink widget', async () => { + await taskPage.formFields().checkWidgetIsHidden(app.FIELD.hyperlink_id); + await widget.checkboxWidget().clickCheckboxInput(app.FIELD.checkbox_id); + await taskPage.formFields().checkWidgetIsVisible(app.FIELD.hyperlink_id); - expect(widget.hyperlink().getFieldLabel(app.FIELD.hyperlink_id)).toBe('Hyperlink'); - expect(widget.hyperlink().getFieldText(app.FIELD.hyperlink_id)).toBe('https://www.google.com/'); + await expect(await widget.hyperlink().getFieldLabel(app.FIELD.hyperlink_id)).toBe('Hyperlink'); + await expect(await widget.hyperlink().getFieldText(app.FIELD.hyperlink_id)).toBe('https://www.google.com/'); }); }); diff --git a/e2e/process-services/widgets/multi-line-widget.e2e.ts b/e2e/process-services/widgets/multi-line-widget.e2e.ts index c70d60aab5..132b033542 100644 --- a/e2e/process-services/widgets/multi-line-widget.e2e.ts +++ b/e2e/process-services/widgets/multi-line-widget.e2e.ts @@ -36,7 +36,7 @@ describe('Multi-line Widget', () => { const app = resources.Files.WIDGET_CHECK_APP.MULTILINE_TEXT; let deployedApp, process; - beforeAll(async (done) => { + beforeAll(async () => { const users = new UsersActions(); alfrescoJsApi = new AlfrescoApi({ @@ -57,53 +57,53 @@ describe('Multi-line Widget', () => { }); process = await appsActions.startProcess(alfrescoJsApi, appModel, app.processName); await loginPage.loginToProcessServicesUsingUserModel(processUserModel); - done(); + }); beforeEach(async () => { const urlToNavigateTo = `${browser.params.testConfig.adf.url}/activiti/apps/${deployedApp.id}/tasks/`; await BrowserActions.getUrl(urlToNavigateTo); - taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); - taskPage.formFields().checkFormIsDisplayed(); + await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); + await taskPage.formFields().checkFormIsDisplayed(); }); - afterAll(async (done) => { + afterAll(async () => { await alfrescoJsApi.activiti.processApi.deleteProcessInstance(process.id); await alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); await alfrescoJsApi.activiti.adminTenantsApi.deleteTenant(processUserModel.tenantId); - done(); + }); - it('[C268182] Should be able to set general properties for Multi-line Text Widget', () => { - const label = widget.multilineTextWidget().getFieldLabel(app.FIELD.multiSimple); - expect(label).toBe('multiSimple*'); - expect(taskPage.formFields().isCompleteFormButtonDisabled()).toBeTruthy(); - const placeHolder = widget.multilineTextWidget().getFieldPlaceHolder(app.FIELD.multiSimple); - expect(placeHolder).toBe('Type something...'); - widget.multilineTextWidget().setValue(app.FIELD.multiSimple, 'TEST'); - expect(taskPage.formFields().isCompleteFormButtonDisabled()).toBeFalsy(); + it('[C268182] Should be able to set general properties for Multi-line Text Widget', async () => { + const label = await widget.multilineTextWidget().getFieldLabel(app.FIELD.multiSimple); + await expect(label).toBe('multiSimple*'); + await expect(await taskPage.formFields().isCompleteFormButtonDisabled()).toBeTruthy(); + const placeHolder = await widget.multilineTextWidget().getFieldPlaceHolder(app.FIELD.multiSimple); + await expect(placeHolder).toBe('Type something...'); + await widget.multilineTextWidget().setValue(app.FIELD.multiSimple, 'TEST'); + await expect(await taskPage.formFields().isCompleteFormButtonDisabled()).toBeFalsy(); }); it('[C268184] Should be able to set advanced properties for Multi-line Text Widget', async () => { - widget.multilineTextWidget().setValue(app.FIELD.multiMinMax, 'A'); - expect(widget.multilineTextWidget().getErrorMessage(app.FIELD.multiMinMax)).toBe('Enter at least 4 characters'); - expect(taskPage.formFields().isCompleteFormButtonDisabled()).toBeTruthy(); - widget.multilineTextWidget().setValue(app.FIELD.multiMinMax, 'AAAAAAAAAAA'); - expect(widget.multilineTextWidget().getErrorMessage(app.FIELD.multiMinMax)).toBe('Enter no more than 10 characters'); - expect(taskPage.formFields().isCompleteFormButtonDisabled()).toBeTruthy(); - widget.multilineTextWidget().setValue(app.FIELD.multiMinMax, 'AAAA'); + await widget.multilineTextWidget().setValue(app.FIELD.multiMinMax, 'A'); + await expect(await widget.multilineTextWidget().getErrorMessage(app.FIELD.multiMinMax)).toContain('Enter at least 4 characters'); + await expect(await taskPage.formFields().isCompleteFormButtonDisabled()).toBeTruthy(); + await widget.multilineTextWidget().setValue(app.FIELD.multiMinMax, 'AAAAAAAAAAA'); + await expect(await widget.multilineTextWidget().getErrorMessage(app.FIELD.multiMinMax)).toContain('Enter no more than 10 characters'); + await expect(await taskPage.formFields().isCompleteFormButtonDisabled()).toBeTruthy(); + await widget.multilineTextWidget().setValue(app.FIELD.multiMinMax, 'AAAA'); - widget.multilineTextWidget().setValue(app.FIELD.multiSimple, 'TEST'); - widget.multilineTextWidget().setValue(app.FIELD.multiRegexp, '3'); - expect(taskPage.formFields().isCompleteFormButtonDisabled()).toBeTruthy(); - expect(widget.multilineTextWidget().getErrorMessage(app.FIELD.multiRegexp)).toBe('Enter a different value'); - widget.multilineTextWidget().setValue(app.FIELD.multiRegexp, 'TE'); - expect(taskPage.formFields().isCompleteFormButtonDisabled()).toBeFalsy(); + await widget.multilineTextWidget().setValue(app.FIELD.multiSimple, 'TEST'); + await widget.multilineTextWidget().setValue(app.FIELD.multiRegexp, '3'); + await expect(await taskPage.formFields().isCompleteFormButtonDisabled()).toBeTruthy(); + await expect(await widget.multilineTextWidget().getErrorMessage(app.FIELD.multiRegexp)).toContain('Enter a different value'); + await widget.multilineTextWidget().setValue(app.FIELD.multiRegexp, 'TE'); + await expect(await taskPage.formFields().isCompleteFormButtonDisabled()).toBeFalsy(); }); it('[C268232] Should be able to set visibility properties for Multi-line Text Widget', async () => { - widget.textWidget().isWidgetNotVisible(app.FIELD.multiVisible); - widget.textWidget().setValue(app.FIELD.showMultiHidden, '1'); - widget.textWidget().isWidgetVisible(app.FIELD.multiVisible); + await widget.textWidget().isWidgetNotVisible(app.FIELD.multiVisible); + await widget.textWidget().setValue(app.FIELD.showMultiHidden, '1'); + await widget.textWidget().isWidgetVisible(app.FIELD.multiVisible); }); }); diff --git a/e2e/process-services/widgets/number-widget.e2e.ts b/e2e/process-services/widgets/number-widget.e2e.ts index dbcd5bb7ce..d175709c62 100644 --- a/e2e/process-services/widgets/number-widget.e2e.ts +++ b/e2e/process-services/widgets/number-widget.e2e.ts @@ -37,7 +37,7 @@ describe('Number widget', () => { const app = resources.Files.WIDGET_CHECK_APP.NUMBER; let deployedApp, process; - beforeAll(async (done) => { + beforeAll(async () => { const users = new UsersActions(); alfrescoJsApi = new AlfrescoApi({ @@ -58,50 +58,50 @@ describe('Number widget', () => { }); process = await appsActions.startProcess(alfrescoJsApi, appModel, app.processName); await loginPage.loginToProcessServicesUsingUserModel(processUserModel); - done(); + }); - beforeEach(async() => { + beforeEach(async () => { const urlToNavigateTo = `${browser.params.testConfig.adf.url}/activiti/apps/${deployedApp.id}/tasks/`; await BrowserActions.getUrl(urlToNavigateTo); - taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); - taskPage.formFields().checkFormIsDisplayed(); + await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); + await taskPage.formFields().checkFormIsDisplayed(); }); - afterAll(async (done) => { + afterAll(async () => { await alfrescoJsApi.activiti.processApi.deleteProcessInstance(process.id); await alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); await alfrescoJsApi.activiti.adminTenantsApi.deleteTenant(processUserModel.tenantId); - done(); + }); - it('[C269111] Should be able to set general properties for Number Widget', () => { - expect(taskPage.formFields().isCompleteFormButtonDisabled()).toBeTruthy(); - expect(widget.numberWidget().getNumberFieldLabel(app.FIELD.number_general)).toContain('Number General'); - expect(widget.numberWidget().getPlaceholder(app.FIELD.number_general)).toContain('Type a number'); + it('[C269111] Should be able to set general properties for Number Widget', async () => { + await expect(await taskPage.formFields().isCompleteFormButtonDisabled()).toBeTruthy(); + await expect(await widget.numberWidget().getNumberFieldLabel(app.FIELD.number_general)).toContain('Number General'); + await expect(await widget.numberWidget().getPlaceholder(app.FIELD.number_general)).toContain('Type a number'); - widget.numberWidget().setFieldValue(app.FIELD.number_general, 2); - expect(taskPage.formFields().isCompleteFormButtonDisabled()).toBeFalsy(); + await widget.numberWidget().setFieldValue(app.FIELD.number_general, 2); + await expect(await taskPage.formFields().isCompleteFormButtonDisabled()).toBeFalsy(); }); - it('[C274702] Should be able to set advanced and visibility properties for Number Widget', () => { - widget.numberWidget().setFieldValue(app.FIELD.number_general, 2); + it('[C274702] Should be able to set advanced and visibility properties for Number Widget', async () => { + await widget.numberWidget().setFieldValue(app.FIELD.number_general, 2); - taskPage.formFields().checkWidgetIsHidden(app.FIELD.number_visible); - widget.checkboxWidget().clickCheckboxInput(app.FIELD.checkbox_id); - taskPage.formFields().checkWidgetIsVisible(app.FIELD.number_visible); + await taskPage.formFields().checkWidgetIsHidden(app.FIELD.number_visible); + await widget.checkboxWidget().clickCheckboxInput(app.FIELD.checkbox_id); + await taskPage.formFields().checkWidgetIsVisible(app.FIELD.number_visible); - widget.numberWidget().setFieldValue(app.FIELD.number_visible, 2); - expect(widget.numberWidget().getErrorMessage(app.FIELD.number_visible)).toBe('Can\'t be less than 3'); - expect(taskPage.formFields().isCompleteFormButtonDisabled()).toBeTruthy(); - widget.numberWidget().clearFieldValue(app.FIELD.number_visible); + await widget.numberWidget().setFieldValue(app.FIELD.number_visible, 2); + await expect(await widget.numberWidget().getErrorMessage(app.FIELD.number_visible)).toBe('Can\'t be less than 3'); + await expect(await taskPage.formFields().isCompleteFormButtonDisabled()).toBeTruthy(); + await widget.numberWidget().clearFieldValue(app.FIELD.number_visible); - widget.numberWidget().setFieldValue(app.FIELD.number_visible, 101); - expect(widget.numberWidget().getErrorMessage(app.FIELD.number_visible)).toBe('Can\'t be greater than 100'); - expect(taskPage.formFields().isCompleteFormButtonDisabled()).toBeTruthy(); - widget.numberWidget().clearFieldValue(app.FIELD.number_visible); + await widget.numberWidget().setFieldValue(app.FIELD.number_visible, 101); + await expect(await widget.numberWidget().getErrorMessage(app.FIELD.number_visible)).toBe('Can\'t be greater than 100'); + await expect(await taskPage.formFields().isCompleteFormButtonDisabled()).toBeTruthy(); + await widget.numberWidget().clearFieldValue(app.FIELD.number_visible); - widget.numberWidget().setFieldValue(app.FIELD.number_visible, 4); - expect(taskPage.formFields().isCompleteFormButtonDisabled()).toBeFalsy(); + await widget.numberWidget().setFieldValue(app.FIELD.number_visible, 4); + await expect(await taskPage.formFields().isCompleteFormButtonDisabled()).toBeFalsy(); }); }); diff --git a/e2e/process-services/widgets/people-widget.e2e.ts b/e2e/process-services/widgets/people-widget.e2e.ts index 6f6a047890..037f7f749b 100644 --- a/e2e/process-services/widgets/people-widget.e2e.ts +++ b/e2e/process-services/widgets/people-widget.e2e.ts @@ -36,7 +36,7 @@ describe('People widget', () => { const app = resources.Files.WIDGET_CHECK_APP.ADD_PEOPLE; let deployedApp, process; - beforeAll(async (done) => { + beforeAll(async () => { const users = new UsersActions(); alfrescoJsApi = new AlfrescoApi({ @@ -57,44 +57,44 @@ describe('People widget', () => { }); process = await appsActions.startProcess(alfrescoJsApi, appModel, app.processName); await loginPage.loginToProcessServicesUsingUserModel(processUserModel); - done(); + }); - beforeEach(async() => { + beforeEach(async () => { const urlToNavigateTo = `${browser.params.testConfig.adf.url}/activiti/apps/${deployedApp.id}/tasks/`; await BrowserActions.getUrl(urlToNavigateTo); - taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); - taskPage.formFields().checkFormIsDisplayed(); + await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); + await taskPage.formFields().checkFormIsDisplayed(); }); - afterAll(async (done) => { + afterAll(async () => { await alfrescoJsApi.activiti.processApi.deleteProcessInstance(process.id); await alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); await alfrescoJsApi.activiti.adminTenantsApi.deleteTenant(processUserModel.tenantId); - done(); + }); - it('[C260435] Should select user from People Widget', () => { - taskPage.formFields().checkWidgetIsHidden(app.FIELD.widget_id); - widget.checkboxWidget().clickCheckboxInput(app.FIELD.checkbox_id); - taskPage.formFields().checkWidgetIsVisible(app.FIELD.widget_id); + it('[C260435] Should select user from People Widget', async () => { + await taskPage.formFields().checkWidgetIsHidden(app.FIELD.widget_id); + await widget.checkboxWidget().clickCheckboxInput(app.FIELD.checkbox_id); + await taskPage.formFields().checkWidgetIsVisible(app.FIELD.widget_id); const admin = processUserModel.firstName + ' ' + processUserModel.lastName; - widget.peopleWidget().insertUser(app.FIELD.widget_id, admin.charAt(0)); - widget.peopleWidget().checkDropDownListIsDisplayed(); - widget.peopleWidget().checkUserIsListed(admin); - widget.peopleWidget().selectUserFromDropDown(admin); + await widget.peopleWidget().insertUser(app.FIELD.widget_id, admin.charAt(0)); + await widget.peopleWidget().checkDropDownListIsDisplayed(); + await widget.peopleWidget().checkUserIsListed(admin); + await widget.peopleWidget().selectUserFromDropDown(admin); }); - it('[C274707] Should be possible to set visibility properties for People Widget', () => { - taskPage.formFields().checkWidgetIsHidden(app.FIELD.widget_id); - widget.checkboxWidget().clickCheckboxInput(app.FIELD.checkbox_id); - taskPage.formFields().checkWidgetIsVisible(app.FIELD.widget_id); + it('[C274707] Should be possible to set visibility properties for People Widget', async () => { + await taskPage.formFields().checkWidgetIsHidden(app.FIELD.widget_id); + await widget.checkboxWidget().clickCheckboxInput(app.FIELD.checkbox_id); + await taskPage.formFields().checkWidgetIsVisible(app.FIELD.widget_id); const admin = processUserModel.firstName + ' ' + processUserModel.lastName; - widget.peopleWidget().insertUser(app.FIELD.widget_id, admin.charAt(0)); - widget.peopleWidget().checkDropDownListIsDisplayed(); - widget.peopleWidget().checkUserIsListed(admin); - widget.peopleWidget().selectUserFromDropDown(admin); + await widget.peopleWidget().insertUser(app.FIELD.widget_id, admin.charAt(0)); + await widget.peopleWidget().checkDropDownListIsDisplayed(); + await widget.peopleWidget().checkUserIsListed(admin); + await widget.peopleWidget().selectUserFromDropDown(admin); }); }); diff --git a/e2e/process-services/widgets/radio-buttons-widget.e2e.ts b/e2e/process-services/widgets/radio-buttons-widget.e2e.ts index 64e2103e5d..4d005cffef 100644 --- a/e2e/process-services/widgets/radio-buttons-widget.e2e.ts +++ b/e2e/process-services/widgets/radio-buttons-widget.e2e.ts @@ -36,7 +36,7 @@ describe('Radio Buttons Widget', () => { const app = resources.Files.WIDGET_CHECK_APP.RADIO_BUTTONS; let deployedApp, process; - beforeAll(async (done) => { + beforeAll(async () => { const users = new UsersActions(); alfrescoJsApi = new AlfrescoApi({ @@ -59,35 +59,34 @@ describe('Radio Buttons Widget', () => { process = await appsActions.startProcess(alfrescoJsApi, appModel, app.processName); await loginPage.loginToProcessServicesUsingUserModel(processUserModel); - done(); }); beforeEach(async () => { const urlToNavigateTo = `${browser.params.testConfig.adf.url}/activiti/apps/${deployedApp.id}/tasks/`; await BrowserActions.getUrl(urlToNavigateTo); - taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); - taskPage.formFields().checkFormIsDisplayed(); + await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); + await taskPage.formFields().checkFormIsDisplayed(); }); - afterAll(async (done) => { + afterAll(async () => { await alfrescoJsApi.activiti.processApi.deleteProcessInstance(process.id); await alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); await alfrescoJsApi.activiti.adminTenantsApi.deleteTenant(processUserModel.tenantId); - done(); + }); - it('[C277316] Should display empty radio buttons when no preselection is configured', () => { - widget.checkboxWidget().clickCheckboxInput(app.FIELD.checkbox_id); - widget.radioWidget().isSelectionClean(app.FIELD.radio_buttons_id); + it('[C277316] Should display empty radio buttons when no preselection is configured', async () => { + await widget.checkboxWidget().clickCheckboxInput(app.FIELD.checkbox_id); + await widget.radioWidget().isSelectionClean(app.FIELD.radio_buttons_id); }); - it('[C274704] Should be able to set visibility properties for Radio Button widget', () => { - taskPage.formFields().checkWidgetIsHidden(app.FIELD.radio_buttons_id); - expect(taskPage.formFields().isCompleteFormButtonDisabled()).toBeTruthy(); + it('[C274704] Should be able to set visibility properties for Radio Button widget', async () => { + await taskPage.formFields().checkWidgetIsHidden(app.FIELD.radio_buttons_id); + await expect(await taskPage.formFields().isCompleteFormButtonDisabled()).toBeTruthy(); - widget.checkboxWidget().clickCheckboxInput(app.FIELD.checkbox_id); - expect(widget.radioWidget().getRadioWidgetLabel(app.FIELD.radio_buttons_id)).toContain('Radio posts'); - widget.radioWidget().selectOption(app.FIELD.radio_buttons_id, 1); - expect(taskPage.formFields().isCompleteFormButtonDisabled()).toBeFalsy(); + await widget.checkboxWidget().clickCheckboxInput(app.FIELD.checkbox_id); + await expect(await widget.radioWidget().getRadioWidgetLabel(app.FIELD.radio_buttons_id)).toContain('Radio posts'); + await widget.radioWidget().selectOption(app.FIELD.radio_buttons_id, 1); + await expect(await taskPage.formFields().isCompleteFormButtonDisabled()).toBeFalsy(); }); }); diff --git a/e2e/process-services/widgets/text-widget.e2e.ts b/e2e/process-services/widgets/text-widget.e2e.ts index e1015e6c48..ee7b363255 100644 --- a/e2e/process-services/widgets/text-widget.e2e.ts +++ b/e2e/process-services/widgets/text-widget.e2e.ts @@ -36,7 +36,7 @@ describe('Text widget', () => { const app = resources.Files.WIDGET_CHECK_APP.TEXT; let deployedApp, process; - beforeAll(async (done) => { + beforeAll(async () => { const users = new UsersActions(); alfrescoJsApi = new AlfrescoApi({ @@ -57,64 +57,64 @@ describe('Text widget', () => { }); process = await appsActions.startProcess(alfrescoJsApi, appModel, app.processName); await loginPage.loginToProcessServicesUsingUserModel(processUserModel); - done(); + }); beforeEach(async () => { const urlToNavigateTo = `${browser.params.testConfig.adf.url}/activiti/apps/${deployedApp.id}/tasks/`; await BrowserActions.getUrl(urlToNavigateTo); - taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); - taskPage.formFields().checkFormIsDisplayed(); + await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); + await taskPage.formFields().checkFormIsDisplayed(); }); - afterAll(async (done) => { + afterAll(async () => { await alfrescoJsApi.activiti.processApi.deleteProcessInstance(process.id); await alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); await alfrescoJsApi.activiti.adminTenantsApi.deleteTenant(processUserModel.tenantId); - done(); + }); it('[C268157] Should be able to set general properties for Text widget', async () => { - const label = widget.textWidget().getFieldLabel(app.FIELD.simpleText); - expect(label).toBe('textSimple*'); - expect(taskPage.formFields().isCompleteFormButtonDisabled()).toBeTruthy(); - const placeHolder = widget.textWidget().getFieldPlaceHolder(app.FIELD.simpleText); - expect(placeHolder).toBe('Type something...'); - widget.textWidget().setValue(app.FIELD.simpleText, 'TEST'); - expect(taskPage.formFields().isCompleteFormButtonDisabled()).toBeFalsy(); + const label = await widget.textWidget().getFieldLabel(app.FIELD.simpleText); + await expect(label).toBe('textSimple*'); + await expect(await taskPage.formFields().isCompleteFormButtonDisabled()).toBeTruthy(); + const placeHolder = await widget.textWidget().getFieldPlaceHolder(app.FIELD.simpleText); + await expect(placeHolder).toBe('Type something...'); + await widget.textWidget().setValue(app.FIELD.simpleText, 'TEST'); + await expect(await taskPage.formFields().isCompleteFormButtonDisabled()).toBeFalsy(); }); it('[C268170] Min-max length properties', async () => { - widget.textWidget().setValue(app.FIELD.textMinMax, 'A'); - expect(widget.textWidget().getErrorMessage(app.FIELD.textMinMax)).toBe('Enter at least 4 characters'); - expect(taskPage.formFields().isCompleteFormButtonDisabled()).toBeTruthy(); - widget.textWidget().setValue(app.FIELD.textMinMax, 'AAAAAAAAAAA'); - expect(widget.textWidget().getErrorMessage(app.FIELD.textMinMax)).toBe('Enter no more than 10 characters'); - expect(taskPage.formFields().isCompleteFormButtonDisabled()).toBeTruthy(); + await widget.textWidget().setValue(app.FIELD.textMinMax, 'A'); + await expect(await widget.textWidget().getErrorMessage(app.FIELD.textMinMax)).toContain('Enter at least 4 characters'); + await expect(await taskPage.formFields().isCompleteFormButtonDisabled()).toBeTruthy(); + await widget.textWidget().setValue(app.FIELD.textMinMax, 'AAAAAAAAAAA'); + await expect(await widget.textWidget().getErrorMessage(app.FIELD.textMinMax)).toContain('Enter no more than 10 characters'); + await expect(await taskPage.formFields().isCompleteFormButtonDisabled()).toBeTruthy(); }); it('[C268171] Input mask reversed checkbox properties', async () => { - widget.textWidget().setValue(app.FIELD.textMask, '18951523'); - expect(widget.textWidget().getFieldValue(app.FIELD.textMask)).toBe('1895-1523'); + await widget.textWidget().setValue(app.FIELD.textMask, '18951523'); + await expect(await widget.textWidget().getFieldValue(app.FIELD.textMask)).toBe('1895-1523'); }); it('[C268171] Input mask reversed checkbox properties', async () => { - widget.textWidget().setValue(app.FIELD.textMaskReversed, '1234567899'); - expect(widget.textWidget().getFieldValue(app.FIELD.textMaskReversed)).toBe('3456-7899'); + await widget.textWidget().setValue(app.FIELD.textMaskReversed, '1234567899'); + await expect(await widget.textWidget().getFieldValue(app.FIELD.textMaskReversed)).toBe('3456-7899'); }); it('[C268177] Should be able to set Regex Pattern property for Text widget', async () => { - widget.textWidget().setValue(app.FIELD.simpleText, 'TEST'); - widget.textWidget().setValue(app.FIELD.textRegexp, 'T'); - expect(taskPage.formFields().isCompleteFormButtonDisabled()).toBeTruthy(); - expect(widget.textWidget().getErrorMessage(app.FIELD.textRegexp)).toBe('Enter a different value'); - widget.textWidget().setValue(app.FIELD.textRegexp, 'TE'); - expect(taskPage.formFields().isCompleteFormButtonDisabled()).toBeFalsy(); + await widget.textWidget().setValue(app.FIELD.simpleText, 'TEST'); + await widget.textWidget().setValue(app.FIELD.textRegexp, 'T'); + await expect(await taskPage.formFields().isCompleteFormButtonDisabled()).toBeTruthy(); + await expect(await widget.textWidget().getErrorMessage(app.FIELD.textRegexp)).toContain('Enter a different value'); + await widget.textWidget().setValue(app.FIELD.textRegexp, 'TE'); + await expect(await taskPage.formFields().isCompleteFormButtonDisabled()).toBeFalsy(); }); it('[C274712] Should be able to set visibility properties for Text widget ', async () => { - widget.textWidget().isWidgetNotVisible(app.FIELD.textHidden); - widget.textWidget().setValue(app.FIELD.showHiddenText, '1'); - widget.textWidget().isWidgetVisible(app.FIELD.textHidden); + await widget.textWidget().isWidgetNotVisible(app.FIELD.textHidden); + await widget.textWidget().setValue(app.FIELD.showHiddenText, '1'); + await widget.textWidget().isWidgetVisible(app.FIELD.textHidden); }); }); diff --git a/e2e/process-services/widgets/widget-visibility-condition.e2e.ts b/e2e/process-services/widgets/widget-visibility-condition.e2e.ts index aa3fc7981a..f88130e69b 100644 --- a/e2e/process-services/widgets/widget-visibility-condition.e2e.ts +++ b/e2e/process-services/widgets/widget-visibility-condition.e2e.ts @@ -59,7 +59,7 @@ describe('Process-Services - Visibility conditions', () => { const app = resources.Files.WIDGET_CHECK_APP.VISIBILITY; let deployedApp, process; - beforeAll(async (done) => { + beforeAll(async () => { const users = new UsersActions(); alfrescoJsApi = new AlfrescoApi({ @@ -80,73 +80,69 @@ describe('Process-Services - Visibility conditions', () => { }); process = await appsActions.startProcess(alfrescoJsApi, appModel, app.processName); await loginPage.loginToProcessServicesUsingUserModel(processUserModel); - done(); }); beforeEach(async () => { const urlToNavigateTo = `${browser.params.testConfig.adf.url}/activiti/apps/${deployedApp.id}/tasks/`; await BrowserActions.getUrl(urlToNavigateTo); - taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); - taskPage.formFields().checkFormIsDisplayed(); + await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); + await taskPage.formFields().checkFormIsDisplayed(); }); - afterAll(async (done) => { + afterAll(async () => { await alfrescoJsApi.activiti.processApi.deleteProcessInstance(process.id); await alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); await alfrescoJsApi.activiti.adminTenantsApi.deleteTenant(processUserModel.tenantId); - done(); }); - it('[C309647] Should be able to see Checkbox widget when visibility condition refers to another field with specific value', () => { - - expect(widget.textWidget().isWidgetVisible(widgets.textOneId)).toBe(true); - expect(widget.checkboxWidget().isCheckboxHidden(checkbox.checkboxFieldValue)).toBe(true); - widget.textWidget().setValue(widgets.textOneId, value.displayCheckbox); - expect(widget.checkboxWidget().isCheckboxDisplayed(checkbox.checkboxFieldValue)).toBe(true); + it('[C309647] Should be able to see Checkbox widget when visibility condition refers to another field with specific value', async () => { + await widget.textWidget().isWidgetVisible(widgets.textOneId); + await widget.checkboxWidget().isCheckboxHidden(checkbox.checkboxFieldValue); + await widget.textWidget().setValue(widgets.textOneId, value.displayCheckbox); + await widget.checkboxWidget().isCheckboxDisplayed(checkbox.checkboxFieldValue); }); - it('[C309648] Should be able to see Checkbox widget when visibility condition refers to a form variable and a field', () => { + it('[C309648] Should be able to see Checkbox widget when visibility condition refers to a form variable and a field', async () => { - widget.textWidget().isWidgetVisible(widgets.textOneId); - expect(widget.checkboxWidget().isCheckboxHidden(checkbox.checkboxVariableField)).toBe(true); + await widget.textWidget().isWidgetVisible(widgets.textOneId); + await widget.checkboxWidget().isCheckboxHidden(checkbox.checkboxVariableField); - widget.textWidget().setValue(widgets.textOneId, value.showVariableFieldCheckbox); - expect(widget.checkboxWidget().isCheckboxDisplayed(checkbox.checkboxVariableField)).toBe(true); + await widget.textWidget().setValue(widgets.textOneId, value.showVariableFieldCheckbox); + await widget.checkboxWidget().isCheckboxDisplayed(checkbox.checkboxVariableField); - widget.textWidget().setValue(widgets.textOneId, value.notDisplayCheckbox); - expect(widget.checkboxWidget().isCheckboxHidden(checkbox.checkboxVariableField)).toBe(true); + await widget.textWidget().setValue(widgets.textOneId, value.notDisplayCheckbox); + await widget.checkboxWidget().isCheckboxHidden(checkbox.checkboxVariableField); }); - it('[C309649] Should be able to see Checkbox widget when visibility condition refers to a field and a form variable', () => { + it('[C309649] Should be able to see Checkbox widget when visibility condition refers to a field and a form variable', async () => { - widget.textWidget().isWidgetVisible(widgets.textOneId); - expect(widget.checkboxWidget().isCheckboxHidden(checkbox.checkboxFieldVariable)).toBe(true); + await widget.textWidget().isWidgetVisible(widgets.textOneId); + await widget.checkboxWidget().isCheckboxHidden(checkbox.checkboxFieldVariable); - widget.textWidget().setValue(widgets.textOneId, value.displayFieldVariableCheckbox); - expect(widget.checkboxWidget().isCheckboxDisplayed(checkbox.checkboxFieldVariable)).toBe(true); + await widget.textWidget().setValue(widgets.textOneId, value.displayFieldVariableCheckbox); + await widget.checkboxWidget().isCheckboxDisplayed(checkbox.checkboxFieldVariable); - widget.textWidget().setValue(widgets.textOneId, value.notDisplayCheckbox); - widget.checkboxWidget().isCheckboxHidden(checkbox.checkboxFieldVariable); + await widget.textWidget().setValue(widgets.textOneId, value.notDisplayCheckbox); + await widget.checkboxWidget().isCheckboxHidden(checkbox.checkboxFieldVariable); }); - it('[C311425] Should be able to see Checkbox widget when visibility condition refers to a field and another field', () => { + it('[C311425] Should be able to see Checkbox widget when visibility condition refers to a field and another field', async () => { - widget.textWidget().isWidgetVisible(widgets.textOneId); - expect(widget.checkboxWidget().isCheckboxDisplayed(checkbox.checkboxFieldField)).toBe(true); - widget.textWidget().setValue(widgets.textOneId, value.displayCheckbox); + await widget.textWidget().isWidgetVisible(widgets.textOneId); + await widget.checkboxWidget().isCheckboxHidden(checkbox.checkboxFieldField); + await widget.textWidget().setValue(widgets.textOneId, value.displayCheckbox); - expect(widget.checkboxWidget().isCheckboxHidden(checkbox.checkboxFieldField)).toBe(true); + await widget.checkboxWidget().isCheckboxHidden(checkbox.checkboxFieldField); - widget.textWidget().setValue(widgets.textTwoId, value.displayCheckbox); - - expect(widget.checkboxWidget().isCheckboxDisplayed(checkbox.checkboxFieldField)).toBe(true); + await widget.textWidget().setValue(widgets.textTwoId, value.displayCheckbox); + await widget.checkboxWidget().isCheckboxDisplayed(checkbox.checkboxFieldField); }); - it('[C311424] Should be able to see Checkbox widget when visibility condition refers to a variable with specific value', () => { - expect(widget.checkboxWidget().isCheckboxDisplayed(checkbox.checkboxVariableValue)).toBe(true); + it('[C311424] Should be able to see Checkbox widget when visibility condition refers to a variable with specific value', async () => { + await widget.checkboxWidget().isCheckboxDisplayed(checkbox.checkboxVariableValue); }); - it('[C311426] Should be able to see Checkbox widget when visibility condition refers to form variable and another form variable', () => { - expect(widget.checkboxWidget().isCheckboxDisplayed(checkbox.checkboxVariableVariable)).toBe(true); + it('[C311426] Should be able to see Checkbox widget when visibility condition refers to form variable and another form variable', async () => { + await widget.checkboxWidget().isCheckboxDisplayed(checkbox.checkboxVariableVariable); }); }); diff --git a/e2e/protractor/override-jasmine.js b/e2e/protractor/override-jasmine.js index 125ffec3d1..4f8e2bcf4e 100644 --- a/e2e/protractor/override-jasmine.js +++ b/e2e/protractor/override-jasmine.js @@ -15,18 +15,17 @@ function beforeAllRewrite() { } catch (e) { // tslint:disable-next-line:no-console console.log('Error Before all second attempt fail all' + JSON.stringify(error)); - expect(true).toBe(false); + await expect(true).toBe(false); } } done(); - return; }; originalBeforeAll(wrapClbk, timeout); }; -}; +} function afterAllRewrite() { @@ -43,13 +42,12 @@ function afterAllRewrite() { } done(); - return; }; originalAfterAll(wrapClbk, timeout); }; -}; +} function beforeEachAllRewrite() { @@ -63,17 +61,15 @@ function beforeEachAllRewrite() { } catch (error) { // tslint:disable-next-line:no-console console.log('Error before Each' + JSON.stringify(error)); - expect(true).toBe(false); } done(); - return; }; originalBeforeEach(wrapClbk, timeout); }; -}; +} function afterEachAllRewrite() { @@ -87,17 +83,15 @@ function afterEachAllRewrite() { } catch (error) { // tslint:disable-next-line:no-console console.log('Error After each' + JSON.stringify(error)); - } done(); - return; }; originalAfterEach(wrapClbk, timeout); }; -}; +} function sleep(delay) { var start = new Date().getTime(); diff --git a/e2e/protractor/save-remote.js b/e2e/protractor/save-remote.js index adb66ad231..5170f68678 100644 --- a/e2e/protractor/save-remote.js +++ b/e2e/protractor/save-remote.js @@ -1,4 +1,7 @@ const htmlReporter = require('protractor-html-reporter-2'); +const fs = require('fs'); +const rimraf = require('rimraf'); +const path = require('path'); function buildNumber() { let buildNumber = process.env.TRAVIS_BUILD_NUMBER; @@ -143,8 +146,24 @@ async function saveReport(alfrescoJsApi, retryCount) { }); } +async function cleanReportFolder() { + let reportsFolder = `${projectRoot}/e2e-output/junit-report/`; + + fs.exists(reportsFolder, function (exists, error) { + if (exists) { + rimraf(reportsFolder, function (err) { + }); + } + + if (error) { + console.error('[ERROR] fs', error); + } + }); +} + module.exports = { uploadScreenshot: uploadScreenshot, uploadReport: uploadReport, + cleanReportFolder: cleanReportFolder, saveReport: saveReport }; diff --git a/e2e/resources/activiti7/candidatebaseapp.zip b/e2e/resources/activiti7/candidatebaseapp.zip index 7e5703449a..1ab528888e 100644 Binary files a/e2e/resources/activiti7/candidatebaseapp.zip and b/e2e/resources/activiti7/candidatebaseapp.zip differ diff --git a/e2e/search/components/search-checkList.e2e.ts b/e2e/search/components/search-checkList.e2e.ts index 3926b767e3..81e3d724de 100644 --- a/e2e/search/components/search-checkList.e2e.ts +++ b/e2e/search/components/search-checkList.e2e.ts @@ -54,7 +54,7 @@ describe('Search Checklist Component', () => { let createdFile, createdFolder; - beforeAll(async (done) => { + beforeAll(async () => { await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); await this.alfrescoJsApi.core.peopleApi.addPerson(acsUser); @@ -64,16 +64,18 @@ describe('Search Checklist Component', () => { createdFolder = await this.alfrescoJsApi.nodes.addNode('-my-', { name: nodeNames.folder, nodeType: 'cm:folder' }); createdFile = await this.alfrescoJsApi.nodes.addNode('-my-', { name: nodeNames.document, nodeType: 'cm:content' }); - await browser.driver.sleep(15000); + await browser.sleep(15000); await loginPage.loginToContentServicesUsingUserModel(acsUser); - BrowserActions.getUrl(browser.params.testConfig.adf.url + '/search;q=' + randomName + ''); - - done(); }); - afterAll(async (done) => { + beforeEach(async () => { + await navigationBarPage.clickContentServicesButton(); + await BrowserActions.getUrl(`${browser.params.testConfig.adf.url}/search;q=${randomName}`); + }); + + afterAll(async () => { await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); await uploadActions.deleteFileOrFolder(createdFile.entry.id); @@ -81,45 +83,44 @@ describe('Search Checklist Component', () => { await navigationBarPage.clickLogoutButton(); - done(); }); - it('[C276991] Should be able to click between options and Clear All button', () => { - searchFiltersPage.checkCheckListFilterIsDisplayed(); - searchFiltersPage.checkCheckListFilterIsCollapsed(); - searchFiltersPage.clickCheckListFilter(); + it('[C276991] Should be able to click between options and Clear All button', async() => { + await searchFiltersPage.checkCheckListFilterIsDisplayed(); + await searchFiltersPage.checkCheckListFilterIsCollapsed(); + await searchFiltersPage.clickCheckListFilter(); - searchFiltersPage.checkListFiltersPage().checkCheckListOptionIsDisplayed(filterType.folder); - searchFiltersPage.checkListFiltersPage().checkCheckListOptionIsDisplayed(filterType.document); - searchFiltersPage.checkListFiltersPage().checkClearAllButtonIsDisplayed(); - searchFiltersPage.checkListFiltersPage().checkCheckListOptionIsNotSelected(filterType.folder); - searchFiltersPage.checkListFiltersPage().checkCheckListOptionIsNotSelected(filterType.document); - searchFiltersPage.checkListFiltersPage().clickCheckListOption(filterType.folder); - searchFiltersPage.checkListFiltersPage().checkCheckListOptionIsSelected(filterType.folder); + await searchFiltersPage.checkListFiltersPage().checkCheckListOptionIsDisplayed(filterType.folder); + await searchFiltersPage.checkListFiltersPage().checkCheckListOptionIsDisplayed(filterType.document); + await searchFiltersPage.checkListFiltersPage().checkClearAllButtonIsDisplayed(); + await searchFiltersPage.checkListFiltersPage().checkCheckListOptionIsNotSelected(filterType.folder); + await searchFiltersPage.checkListFiltersPage().checkCheckListOptionIsNotSelected(filterType.document); + await searchFiltersPage.checkListFiltersPage().clickCheckListOption(filterType.folder); + await searchFiltersPage.checkListFiltersPage().checkCheckListOptionIsSelected(filterType.folder); - searchResults.checkContentIsDisplayed(nodeNames.folder); - searchResults.checkContentIsNotDisplayed(nodeNames.document); + await searchResults.checkContentIsDisplayed(nodeNames.folder); + await searchResults.checkContentIsNotDisplayed(nodeNames.document); - searchFiltersPage.checkListFiltersPage().clickClearAllButton(); - searchFiltersPage.checkListFiltersPage().checkCheckListOptionIsNotSelected(filterType.folder); + await searchFiltersPage.checkListFiltersPage().clickClearAllButton(); + await searchFiltersPage.checkListFiltersPage().checkCheckListOptionIsNotSelected(filterType.folder); - searchResults.checkContentIsDisplayed(nodeNames.folder); - searchResults.checkContentIsDisplayed(nodeNames.document); + await searchResults.checkContentIsDisplayed(nodeNames.folder); + await searchResults.checkContentIsDisplayed(nodeNames.document); - searchFiltersPage.checkListFiltersPage().clickCheckListOption(filterType.folder); - searchFiltersPage.checkListFiltersPage().clickCheckListOption(filterType.document); - searchFiltersPage.checkListFiltersPage().checkCheckListOptionIsSelected(filterType.folder); - searchFiltersPage.checkListFiltersPage().checkCheckListOptionIsSelected(filterType.document); + await searchFiltersPage.checkListFiltersPage().clickCheckListOption(filterType.folder); + await searchFiltersPage.checkListFiltersPage().clickCheckListOption(filterType.document); + await searchFiltersPage.checkListFiltersPage().checkCheckListOptionIsSelected(filterType.folder); + await searchFiltersPage.checkListFiltersPage().checkCheckListOptionIsSelected(filterType.document); - searchResults.checkContentIsDisplayed(nodeNames.folder); - searchResults.checkContentIsDisplayed(nodeNames.document); + await searchResults.checkContentIsDisplayed(nodeNames.folder); + await searchResults.checkContentIsDisplayed(nodeNames.document); - searchFiltersPage.checkListFiltersPage().clickCheckListOption(filterType.folder); - searchFiltersPage.checkListFiltersPage().checkCheckListOptionIsSelected(filterType.document); - searchFiltersPage.checkListFiltersPage().checkCheckListOptionIsNotSelected(filterType.folder); + await searchFiltersPage.checkListFiltersPage().clickCheckListOption(filterType.folder); + await searchFiltersPage.checkListFiltersPage().checkCheckListOptionIsSelected(filterType.document); + await searchFiltersPage.checkListFiltersPage().checkCheckListOptionIsNotSelected(filterType.folder); - searchResults.checkContentIsDisplayed(nodeNames.document); - searchResults.checkContentIsNotDisplayed(nodeNames.folder); + await searchResults.checkContentIsDisplayed(nodeNames.document); + await searchResults.checkContentIsNotDisplayed(nodeNames.folder); }); describe('configuration change', () => { @@ -130,7 +131,7 @@ describe('Search Checklist Component', () => { }); it('[C277143] Should be able to click show more/less button with pageSize set as default', async () => { - navigationBarPage.clickContentServicesButton(); + await navigationBarPage.clickContentServicesButton(); for (let numberOfOptions = 0; numberOfOptions < 8; numberOfOptions++) { jsonFile.categories[1].component.settings.options.push({ @@ -140,32 +141,33 @@ describe('Search Checklist Component', () => { } await LocalStorageUtil.setConfigField('search', JSON.stringify(jsonFile)); - browser.sleep(2000); - searchDialog.clickOnSearchIcon().checkSearchBarIsVisible().enterTextAndPressEnter(randomName); - searchFiltersPage.clickCheckListFilter(); + await searchDialog.clickOnSearchIcon(); + await searchDialog.checkSearchBarIsVisible(); + await searchDialog.enterTextAndPressEnter(randomName); + await searchFiltersPage.clickCheckListFilter(); - expect(searchFiltersPage.checkListFiltersPage().getCheckListOptionsNumberOnPage()).toBe(5); + await expect(await searchFiltersPage.checkListFiltersPage().getCheckListOptionsNumberOnPage()).toBe(5); - searchFiltersPage.checkListFiltersPage().checkShowMoreButtonIsDisplayed(); - searchFiltersPage.checkListFiltersPage().checkShowLessButtonIsNotDisplayed(); + await searchFiltersPage.checkListFiltersPage().checkShowMoreButtonIsDisplayed(); + await searchFiltersPage.checkListFiltersPage().checkShowLessButtonIsNotDisplayed(); - searchFiltersPage.checkListFiltersPage().clickShowMoreButton(); + await searchFiltersPage.checkListFiltersPage().clickShowMoreButton(); - expect(searchFiltersPage.checkListFiltersPage().getCheckListOptionsNumberOnPage()).toBe(10); + await expect(await searchFiltersPage.checkListFiltersPage().getCheckListOptionsNumberOnPage()).toBe(10); - searchFiltersPage.checkListFiltersPage().checkShowMoreButtonIsNotDisplayed(); - searchFiltersPage.checkListFiltersPage().checkShowLessButtonIsDisplayed(); + await searchFiltersPage.checkListFiltersPage().checkShowMoreButtonIsNotDisplayed(); + await searchFiltersPage.checkListFiltersPage().checkShowLessButtonIsDisplayed(); - searchFiltersPage.checkListFiltersPage().clickShowLessButton(); + await searchFiltersPage.checkListFiltersPage().clickShowLessButton(); - expect(searchFiltersPage.checkListFiltersPage().getCheckListOptionsNumberOnPage()).toBe(5); + await expect(await searchFiltersPage.checkListFiltersPage().getCheckListOptionsNumberOnPage()).toBe(5); - searchFiltersPage.checkListFiltersPage().checkShowMoreButtonIsDisplayed(); - searchFiltersPage.checkListFiltersPage().checkShowLessButtonIsNotDisplayed(); + await searchFiltersPage.checkListFiltersPage().checkShowMoreButtonIsDisplayed(); + await searchFiltersPage.checkListFiltersPage().checkShowLessButtonIsNotDisplayed(); }); it('[C277144] Should be able to click show more/less button with pageSize set with a custom value', async () => { - navigationBarPage.clickContentServicesButton(); + await navigationBarPage.clickContentServicesButton(); jsonFile.categories[1].component.settings.pageSize = 10; @@ -178,41 +180,47 @@ describe('Search Checklist Component', () => { await LocalStorageUtil.setConfigField('search', JSON.stringify(jsonFile)); - searchDialog.clickOnSearchIcon().checkSearchBarIsVisible().enterTextAndPressEnter(randomName); - searchFiltersPage.clickCheckListFilter(); + await searchDialog.clickOnSearchIcon(); + await searchDialog.checkSearchBarIsVisible(); + await searchDialog.enterTextAndPressEnter(randomName); + await searchFiltersPage.clickCheckListFilter(); - expect(searchFiltersPage.checkListFiltersPage().getCheckListOptionsNumberOnPage()).toBe(10); + await expect(await searchFiltersPage.checkListFiltersPage().getCheckListOptionsNumberOnPage()).toBe(10); - searchFiltersPage.checkListFiltersPage().checkShowMoreButtonIsNotDisplayed(); + await searchFiltersPage.checkListFiltersPage().checkShowMoreButtonIsNotDisplayed(); - navigationBarPage.clickContentServicesButton(); + await navigationBarPage.clickContentServicesButton(); jsonFile.categories[1].component.settings.pageSize = 11; await LocalStorageUtil.setConfigField('search', JSON.stringify(jsonFile)); - searchDialog.clickOnSearchIcon().checkSearchBarIsVisible().enterTextAndPressEnter(randomName); - searchFiltersPage.clickCheckListFilter(); + await searchDialog.clickOnSearchIcon(); + await searchDialog.checkSearchBarIsVisible(); + await searchDialog.enterTextAndPressEnter(randomName); + await searchFiltersPage.clickCheckListFilter(); - expect(searchFiltersPage.checkListFiltersPage().getCheckListOptionsNumberOnPage()).toBe(10); + await expect(await searchFiltersPage.checkListFiltersPage().getCheckListOptionsNumberOnPage()).toBe(10); - searchFiltersPage.checkListFiltersPage().checkShowMoreButtonIsNotDisplayed(); + await searchFiltersPage.checkListFiltersPage().checkShowMoreButtonIsNotDisplayed(); - navigationBarPage.clickContentServicesButton(); + await navigationBarPage.clickContentServicesButton(); jsonFile.categories[1].component.settings.pageSize = 9; await LocalStorageUtil.setConfigField('search', JSON.stringify(jsonFile)); - searchDialog.clickOnSearchIcon().checkSearchBarIsVisible().enterTextAndPressEnter(randomName); - searchFiltersPage.clickCheckListFilter(); + await searchDialog.clickOnSearchIcon(); + await searchDialog.checkSearchBarIsVisible(); + await searchDialog.enterTextAndPressEnter(randomName); + await searchFiltersPage.clickCheckListFilter(); - expect(searchFiltersPage.checkListFiltersPage().getCheckListOptionsNumberOnPage()).toBe(9); + await expect(await searchFiltersPage.checkListFiltersPage().getCheckListOptionsNumberOnPage()).toBe(9); - searchFiltersPage.checkListFiltersPage().checkShowMoreButtonIsDisplayed(); + await searchFiltersPage.checkListFiltersPage().checkShowMoreButtonIsDisplayed(); }); it('[C277145] Should be able to click show more/less button with pageSize set to zero', async () => { - navigationBarPage.clickContentServicesButton(); + await navigationBarPage.clickContentServicesButton(); jsonFile.categories[1].component.settings.pageSize = 0; @@ -225,41 +233,45 @@ describe('Search Checklist Component', () => { await LocalStorageUtil.setConfigField('search', JSON.stringify(jsonFile)); - searchDialog.clickOnSearchIcon().checkSearchBarIsVisible().enterTextAndPressEnter(randomName); - searchFiltersPage.clickCheckListFilter(); + await searchDialog.clickOnSearchIcon(); + await searchDialog.checkSearchBarIsVisible(); + await searchDialog.enterTextAndPressEnter(randomName); + await searchFiltersPage.clickCheckListFilter(); - expect(searchFiltersPage.checkListFiltersPage().getCheckListOptionsNumberOnPage()).toBe(5); + await expect(await searchFiltersPage.checkListFiltersPage().getCheckListOptionsNumberOnPage()).toBe(5); - searchFiltersPage.checkListFiltersPage().checkShowMoreButtonIsDisplayed(); - searchFiltersPage.checkListFiltersPage().checkShowLessButtonIsNotDisplayed(); + await searchFiltersPage.checkListFiltersPage().checkShowMoreButtonIsDisplayed(); + await searchFiltersPage.checkListFiltersPage().checkShowLessButtonIsNotDisplayed(); - searchFiltersPage.checkListFiltersPage().clickShowMoreButton(); + await searchFiltersPage.checkListFiltersPage().clickShowMoreButton(); - expect(searchFiltersPage.checkListFiltersPage().getCheckListOptionsNumberOnPage()).toBe(10); + await expect(await searchFiltersPage.checkListFiltersPage().getCheckListOptionsNumberOnPage()).toBe(10); - searchFiltersPage.checkListFiltersPage().checkShowMoreButtonIsNotDisplayed(); - searchFiltersPage.checkListFiltersPage().checkShowLessButtonIsDisplayed(); + await searchFiltersPage.checkListFiltersPage().checkShowMoreButtonIsNotDisplayed(); + await searchFiltersPage.checkListFiltersPage().checkShowLessButtonIsDisplayed(); - navigationBarPage.clickContentServicesButton(); + await navigationBarPage.clickContentServicesButton(); delete jsonFile.categories[1].component.settings.pageSize; await LocalStorageUtil.setConfigField('search', JSON.stringify(jsonFile)); - searchDialog.clickOnSearchIcon().checkSearchBarIsVisible().enterTextAndPressEnter(randomName); - searchFiltersPage.clickCheckListFilter(); + await searchDialog.clickOnSearchIcon(); + await searchDialog.checkSearchBarIsVisible(); + await searchDialog.enterTextAndPressEnter(randomName); + await searchFiltersPage.clickCheckListFilter(); - expect(searchFiltersPage.checkListFiltersPage().getCheckListOptionsNumberOnPage()).toBe(5); + await expect(await searchFiltersPage.checkListFiltersPage().getCheckListOptionsNumberOnPage()).toBe(5); - searchFiltersPage.checkListFiltersPage().checkShowMoreButtonIsDisplayed(); - searchFiltersPage.checkListFiltersPage().checkShowLessButtonIsNotDisplayed(); + await searchFiltersPage.checkListFiltersPage().checkShowMoreButtonIsDisplayed(); + await searchFiltersPage.checkListFiltersPage().checkShowLessButtonIsNotDisplayed(); - searchFiltersPage.checkListFiltersPage().clickShowMoreButton(); + await searchFiltersPage.checkListFiltersPage().clickShowMoreButton(); - expect(searchFiltersPage.checkListFiltersPage().getCheckListOptionsNumberOnPage()).toBe(10); + await expect(await searchFiltersPage.checkListFiltersPage().getCheckListOptionsNumberOnPage()).toBe(10); - searchFiltersPage.checkListFiltersPage().checkShowMoreButtonIsNotDisplayed(); - searchFiltersPage.checkListFiltersPage().checkShowLessButtonIsDisplayed(); + await searchFiltersPage.checkListFiltersPage().checkShowMoreButtonIsNotDisplayed(); + await searchFiltersPage.checkListFiltersPage().checkShowLessButtonIsDisplayed(); }); }); @@ -272,36 +284,37 @@ describe('Search Checklist Component', () => { jsonFile = SearchConfiguration.getConfiguration(); }); - beforeAll(async (done) => { + beforeAll(async () => { await loginPage.loginToContentServicesUsingUserModel(acsUser); - done(); }); it('[C277018] Should be able to change the operator', async () => { - navigationBarPage.clickContentServicesButton(); + await navigationBarPage.clickContentServicesButton(); jsonFile.categories[1].component.settings.operator = 'AND'; await LocalStorageUtil.setConfigField('search', JSON.stringify(jsonFile)); - searchDialog.clickOnSearchIcon().checkSearchBarIsVisible().enterTextAndPressEnter(randomName); - searchFiltersPage.clickCheckListFilter(); + await searchDialog.clickOnSearchIcon(); + await searchDialog.checkSearchBarIsVisible(); + await searchDialog.enterTextAndPressEnter(randomName); + await searchFiltersPage.clickCheckListFilter(); - searchFiltersPage.checkListFiltersPage().clickCheckListOption(filterType.folder); - searchFiltersPage.checkListFiltersPage().checkCheckListOptionIsSelected(filterType.folder); + await searchFiltersPage.checkListFiltersPage().clickCheckListOption(filterType.folder); + await searchFiltersPage.checkListFiltersPage().checkCheckListOptionIsSelected(filterType.folder); - searchResults.checkContentIsDisplayed(nodeNames.folder); - searchResults.checkContentIsNotDisplayed(nodeNames.document); + await searchResults.checkContentIsDisplayed(nodeNames.folder); + await searchResults.checkContentIsNotDisplayed(nodeNames.document); - searchFiltersPage.checkListFiltersPage().clickCheckListOption(filterType.document); + await searchFiltersPage.checkListFiltersPage().clickCheckListOption(filterType.document); - searchResults.checkContentIsNotDisplayed(nodeNames.folder); - searchResults.checkContentIsNotDisplayed(nodeNames.document); + await searchResults.checkContentIsNotDisplayed(nodeNames.folder); + await searchResults.checkContentIsNotDisplayed(nodeNames.document); }); it('[C277019] Should be able to add new properties with different types', async () => { - navigationBarPage.clickContentServicesButton(); + await navigationBarPage.clickContentServicesButton(); jsonFile.categories[1].component.settings.options.push({ 'name': filterType.custom, @@ -310,23 +323,25 @@ describe('Search Checklist Component', () => { await LocalStorageUtil.setConfigField('search', JSON.stringify(jsonFile)); - searchDialog.clickOnSearchIcon().checkSearchBarIsVisible().enterTextAndPressEnter(randomName); - searchFiltersPage.clickCheckListFilter(); + await searchDialog.clickOnSearchIcon(); + await searchDialog.checkSearchBarIsVisible(); + await searchDialog.enterTextAndPressEnter(randomName); + await searchFiltersPage.clickCheckListFilter(); - searchFiltersPage.checkListFiltersPage().checkCheckListOptionIsDisplayed(filterType.folder); - searchFiltersPage.checkListFiltersPage().checkCheckListOptionIsDisplayed(filterType.document); - searchFiltersPage.checkListFiltersPage().checkCheckListOptionIsDisplayed(filterType.custom); + await searchFiltersPage.checkListFiltersPage().checkCheckListOptionIsDisplayed(filterType.folder); + await searchFiltersPage.checkListFiltersPage().checkCheckListOptionIsDisplayed(filterType.document); + await searchFiltersPage.checkListFiltersPage().checkCheckListOptionIsDisplayed(filterType.custom); - searchFiltersPage.checkListFiltersPage().clickCheckListOption(filterType.custom); + await searchFiltersPage.checkListFiltersPage().clickCheckListOption(filterType.custom); - searchResults.checkContentIsNotDisplayed(nodeNames.folder); - searchResults.checkContentIsNotDisplayed(nodeNames.document); + await searchResults.checkContentIsNotDisplayed(nodeNames.folder); + await searchResults.checkContentIsNotDisplayed(nodeNames.document); - searchFiltersPage.checkListFiltersPage().clickCheckListOption(filterType.document); - searchFiltersPage.checkListFiltersPage().clickCheckListOption(filterType.folder); + await searchFiltersPage.checkListFiltersPage().clickCheckListOption(filterType.document); + await searchFiltersPage.checkListFiltersPage().clickCheckListOption(filterType.folder); - searchResults.checkContentIsDisplayed(nodeNames.folder); - searchResults.checkContentIsDisplayed(nodeNames.document); + await searchResults.checkContentIsDisplayed(nodeNames.folder); + await searchResults.checkContentIsDisplayed(nodeNames.document); }); }); diff --git a/e2e/search/components/search-date-range.e2e.ts b/e2e/search/components/search-date-range.e2e.ts index 8ad22fefa1..e00c33f575 100644 --- a/e2e/search/components/search-date-range.e2e.ts +++ b/e2e/search/components/search-date-range.e2e.ts @@ -34,182 +34,178 @@ describe('Search Date Range Filter', () => { const dateRangeFilter = searchFilters.createdDateRangeFilterPage(); const searchResults = new SearchResultsPage(); const datePicker = new DatePickerPage(); - const navigationBarPage = new NavigationBarPage(); + const navigationBar = new NavigationBarPage(); const dataTable = new DataTableComponentPage(); - beforeAll(async (done) => { + beforeAll(async () => { this.alfrescoJsApi = new AlfrescoApi({ provider: 'ECM', hostEcm: browser.params.testConfig.adf_acs.host }); - loginPage.loginToContentServices(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); + await loginPage.loginToContentServices(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); - searchDialog.checkSearchIconIsVisible() - .clickOnSearchIcon() - .enterTextAndPressEnter('*'); + await searchDialog.checkSearchIconIsVisible(); + await searchDialog.clickOnSearchIcon(); + await searchDialog.enterTextAndPressEnter('*'); - done(); }); - beforeEach(() => { - searchFilters.checkCreatedRangeFilterIsDisplayed() - .clickCreatedRangeFilterHeader() - .checkCreatedRangeFilterIsExpanded(); + beforeEach(async () => { + await searchFilters.checkCreatedRangeFilterIsDisplayed(); + await searchFilters.clickCreatedRangeFilterHeader(); + await searchFilters.checkCreatedRangeFilterIsExpanded(); }); - afterEach(async (done) => { + afterEach(async () => { await browser.refresh(); - done(); + }); - it('[C277106] Should display default values for Date Range widget', () => { - dateRangeFilter.checkFromFieldIsDisplayed() - .checkFromDateToggleIsDisplayed() - .checkToFieldIsDisplayed() - .checkToDateToggleIsDisplayed() - .checkApplyButtonIsDisplayed() - .checkApplyButtonIsDisabled() - .checkClearButtonIsDisplayed(); + it('[C277106] Should display default values for Date Range widget', async () => { + await dateRangeFilter.checkFromFieldIsDisplayed(); + await dateRangeFilter.checkFromDateToggleIsDisplayed(); + await dateRangeFilter.checkToFieldIsDisplayed(); + await dateRangeFilter.checkToDateToggleIsDisplayed(); + await dateRangeFilter.checkApplyButtonIsDisplayed(); + await dateRangeFilter.checkApplyButtonIsDisabled(); + await dateRangeFilter.checkClearButtonIsDisplayed(); }); - it('[C277104] Should be able to set dates using date pickers', () => { - dateRangeFilter.checkFromDateToggleIsDisplayed().openFromDatePicker() - .selectTodayDate(); - browser.controlFlow().execute(async () => { - await expect(dateRangeFilter.getFromDate()).toEqual(dateRangeFilter.getFromCalendarSelectedDate()); - }); + it('[C277104] Should be able to set dates using date pickers', async () => { + await dateRangeFilter.checkFromDateToggleIsDisplayed(); + const fromDatePicker = await dateRangeFilter.openFromDatePicker(); + await fromDatePicker.selectTodayDate(); + await expect(await dateRangeFilter.getFromDate()).toEqual(await dateRangeFilter.getFromCalendarSelectedDate()); }); - it('[C277105] Should be able to type a date', () => { + it('[C277105] Should be able to type a date', async () => { const date = '01-May-18'; - dateRangeFilter.putFromDate(date); - browser.controlFlow().execute(async () => { - await expect(dateRangeFilter.getFromCalendarSelectedDate()).toEqual(dateRangeFilter.getFromDate()); - }); + await dateRangeFilter.putFromDate(date); + await expect(await dateRangeFilter.getFromCalendarSelectedDate()).toEqual(await dateRangeFilter.getFromDate()); }); - it('[C277119] FROM and TO dates should depend on each other', () => { - dateRangeFilter.checkFromDateToggleIsDisplayed().openFromDatePicker() - .checkDatesAfterDateAreDisabled(new Date()) - .closeDatePicker(); + it('[C277119] FROM and TO dates should depend on each other', async () => { + await dateRangeFilter.checkFromDateToggleIsDisplayed(); + const fromDatePicker = await dateRangeFilter.openFromDatePicker(); + await fromDatePicker.checkDatesAfterDateAreDisabled(new Date()); + await fromDatePicker.closeDatePicker(); - dateRangeFilter.checkToDateToggleIsDisplayed().openToDatePicker() - .checkDatesAfterDateAreDisabled(new Date()) - .closeDatePicker(); + await dateRangeFilter.checkToDateToggleIsDisplayed(); + let datePickerTo = await dateRangeFilter.openToDatePicker(); - dateRangeFilter.checkFromDateToggleIsDisplayed().openFromDatePicker() - .selectTodayDate() - .checkDatePickerIsNotDisplayed(); + await datePickerTo.checkDatesAfterDateAreDisabled(new Date()); + await datePickerTo.closeDatePicker(); - dateRangeFilter.checkToDateToggleIsDisplayed().openToDatePicker() - .checkDatesBeforeDateAreDisabled(new Date()) - .checkDatesAfterDateAreDisabled(new Date()); + await dateRangeFilter.checkFromDateToggleIsDisplayed(); + const datePickerFrom = await dateRangeFilter.openFromDatePicker(); + await datePickerFrom.selectTodayDate(); + await datePickerFrom.checkDatePickerIsNotDisplayed(); + + await dateRangeFilter.checkToDateToggleIsDisplayed(); + datePickerTo = await dateRangeFilter.openToDatePicker(); + await datePickerTo.checkDatesBeforeDateAreDisabled(new Date()); + await datePickerTo.checkDatesAfterDateAreDisabled(new Date()); }); - it('[C277107] Should be able to apply a date range', () => { - let fromDate, toDate; - dateRangeFilter.checkFromDateToggleIsDisplayed().openFromDatePicker() - .selectTodayDate() - .checkDatePickerIsNotDisplayed(); - dateRangeFilter.getFromDate().then((date) => { - fromDate = DateUtil.formatDate('DD-MM-YY', DateUtil.parse(date, 'DD-MMM-YY')); - }); + it('[C277107] Should be able to apply a date range', async () => { + await dateRangeFilter.checkFromDateToggleIsDisplayed(); + const datePickerToday = await dateRangeFilter.openFromDatePicker(); + await datePickerToday.selectTodayDate(); + await datePickerToday.checkDatePickerIsNotDisplayed(); + let fromDate = await dateRangeFilter.getFromDate(); + fromDate = DateUtil.formatDate('DD-MM-YY', DateUtil.parse(fromDate, 'DD-MMM-YY')); - dateRangeFilter.checkApplyButtonIsDisabled(); + await dateRangeFilter.checkApplyButtonIsDisabled(); - dateRangeFilter.checkToDateToggleIsDisplayed().openToDatePicker() - .selectTodayDate() - .checkDatePickerIsNotDisplayed(); - dateRangeFilter.getToDate().then((date) => { - toDate = DateUtil.formatDate('DD-MM-YY', DateUtil.parse(date, 'DD-MMM-YY'), 1); - }); + await dateRangeFilter.checkToDateToggleIsDisplayed(); + const toDatePicker = await dateRangeFilter.openToDatePicker(); - dateRangeFilter.checkApplyButtonIsEnabled() - .clickApplyButton(); + await toDatePicker.selectTodayDate(); + await toDatePicker.checkDatePickerIsNotDisplayed(); + let toDate = await dateRangeFilter.getToDate(); + toDate = DateUtil.formatDate('DD-MM-YY', DateUtil.parse(toDate, 'DD-MMM-YY'), 1); - searchResults.sortByCreated('ASC'); + await dateRangeFilter.checkApplyButtonIsEnabled(); + await dateRangeFilter.clickApplyButton(); - browser.controlFlow().execute(async () => { - const results = await dataTable.geCellElementDetail('Created'); - for (const currentResult of results) { + await searchResults.sortByCreated('ASC'); - currentResult.getAttribute('title').then(async (currentDate) => { - const currentDateFormatted = DateUtil.parse(currentDate, 'MMM DD, YYYY, h:mm:ss a'); + const results: any = dataTable.geCellElementDetail('Created'); + for (const currentResult of results) { - await expect(currentDateFormatted <= DateUtil.parse(toDate, 'DD-MM-YY')).toBe(true); - await expect(currentDateFormatted >= DateUtil.parse(fromDate, 'DD-MM-YY')).toBe(true); - }); + const currentDate = currentResult.getAttribute('title'); + const currentDateFormatted = DateUtil.parse(currentDate, 'MMM DD, YYYY, h:mm:ss a'); - } - }); + await expect(currentDateFormatted <= DateUtil.parse(toDate, 'DD-MM-YY')).toBe(true); + await expect(currentDateFormatted >= DateUtil.parse(fromDate, 'DD-MM-YY')).toBe(true); + } }); - it('[C277108] Should display a warning message when user doesn\'t set the date range at all', () => { - dateRangeFilter.checkFromFieldIsDisplayed() - .clickFromField() - .clickToField() - .checkFromErrorMessageIsDisplayed('Required value') - .clickFromField() - .checkToErrorMessageIsDisplayed('Required value'); + it('[C277108] Should display a warning message when user doesn\'t set the date range at all', async () => { + await dateRangeFilter.checkFromFieldIsDisplayed(); + await dateRangeFilter.clickFromField(); + await dateRangeFilter.clickToField(); + await dateRangeFilter.checkFromErrorMessageIsDisplayed('Required value'); + await dateRangeFilter.clickFromField(); + await dateRangeFilter.checkToErrorMessageIsDisplayed('Required value'); }); - it('[C277114] Should display warning message if user doesn\'t set the date range properly', () => { + it('[C277114] Should display warning message if user doesn\'t set the date range properly', async () => { const toDate = '01-May-18'; const fromDate = '16-May-18'; - dateRangeFilter.checkToFieldIsDisplayed() - .putToDate(toDate) - .checkFromFieldIsDisplayed() - .putFromDate(fromDate) - .clickFromField() - .checkToErrorMessageIsDisplayed('No days selected.'); + await dateRangeFilter.checkToFieldIsDisplayed(); + await dateRangeFilter.putToDate(toDate); + await dateRangeFilter.checkFromFieldIsDisplayed(); + await dateRangeFilter.putFromDate(fromDate); + await dateRangeFilter.clickFromField(); + await dateRangeFilter.checkToErrorMessageIsDisplayed('No days selected.'); }); - it('[C277115] Should display warning message if user types a date later than today\'s date', () => { - dateRangeFilter.checkFromFieldIsDisplayed() - .putFromDate(DateUtil.formatDate('DD-MMM-YY', new Date(), 1)) - .checkFromErrorMessageIsDisplayed('The date is beyond the maximum date.'); + it('[C277115] Should display warning message if user types a date later than today\'s date', async () => { + await dateRangeFilter.checkFromFieldIsDisplayed(); + await dateRangeFilter.putFromDate(DateUtil.formatDate('DD-MMM-YY', new Date(), 1)); + await dateRangeFilter.checkFromErrorMessageIsDisplayed('The date is beyond the maximum date.'); }); - it('[C277108] Should display a warning message when user doesn\'t set the date range at all', () => { - dateRangeFilter.checkFromFieldIsDisplayed() - .putFromDate('Wrong Format') - .clickToField() - .checkFromErrorMessageIsDisplayed('Invalid date. The date must be in the format \'DD-MMM-YY\'') - .putFromDate('01-May-18') - .checkFromErrorMessageIsNotDisplayed(); + it('[C277108] Should display a warning message when user doesn\'t set the date range at all', async () => { + await dateRangeFilter.checkFromFieldIsDisplayed(); + await dateRangeFilter.putFromDate('Wrong Format'); + await dateRangeFilter.clickToField(); + await dateRangeFilter.checkFromErrorMessageIsDisplayed('Invalid date. The date must be in the format \'DD-MMM-YY\''); + await dateRangeFilter.putFromDate('01-May-18'); + await dateRangeFilter.checkFromErrorMessageIsNotDisplayed(); }); describe('configuration change', () => { let jsonFile; - beforeAll(() => { + beforeAll(async () => { jsonFile = SearchConfiguration.getConfiguration(); }); it('[C277117] Should be able to change date format', async () => { - navigationBarPage.clickContentServicesButton(); + await navigationBar.clickContentServicesButton(); jsonFile.categories[4].component.settings.dateFormat = 'MM-DD-YY'; await LocalStorageUtil.setConfigField('search', JSON.stringify(jsonFile)); - searchDialog.clickOnSearchIcon().enterTextAndPressEnter('*'); - searchFilters.checkCreatedRangeFilterIsDisplayed() - .clickCreatedRangeFilterHeader() - .checkCreatedRangeFilterIsExpanded(); - dateRangeFilter.checkFromFieldIsDisplayed() - .openFromDatePicker(); + await searchDialog.clickOnSearchIcon(); + await searchDialog.enterTextAndPressEnter('*'); + await searchFilters.checkCreatedRangeFilterIsDisplayed(); + await searchFilters.clickCreatedRangeFilterHeader(); + await searchFilters.checkCreatedRangeFilterIsExpanded(); + await dateRangeFilter.checkFromFieldIsDisplayed(); + await dateRangeFilter.openFromDatePicker(); const todayDate = DateUtil.formatDate('MM-DD-YY'); - datePicker.selectTodayDate(); + await datePicker.selectTodayDate(); - browser.controlFlow().execute(async () => { - await expect(dateRangeFilter.getFromDate()).toEqual(todayDate); - }); + await expect(await dateRangeFilter.getFromDate()).toEqual(todayDate); }); }); }); diff --git a/e2e/search/components/search-number-range.e2e.ts b/e2e/search/components/search-number-range.e2e.ts index 73dedbf24c..f60b1edbda 100644 --- a/e2e/search/components/search-number-range.e2e.ts +++ b/e2e/search/components/search-number-range.e2e.ts @@ -56,7 +56,7 @@ describe('Search Number Range Filter', () => { }); const uploadActions = new UploadActions(this.alfrescoJsApi); - beforeAll(async (done) => { + beforeAll(async () => { await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); @@ -66,322 +66,318 @@ describe('Search Number Range Filter', () => { file2Bytes = await uploadActions.uploadFile(file2BytesModel.location, file2BytesModel.name, '-my-'); file0Bytes = await uploadActions.uploadFile(file0BytesModel.location, file0BytesModel.name, '-my-'); - await browser.driver.sleep(15000); + await browser.sleep(15000); - loginPage.loginToContentServices(acsUser.id, acsUser.password); + await loginPage.loginToContentServices(acsUser.id, acsUser.password); - searchDialog.checkSearchIconIsVisible() - .clickOnSearchIcon() - .enterTextAndPressEnter('*'); + await searchDialog.checkSearchIconIsVisible(); + await searchDialog.clickOnSearchIcon(); + await searchDialog.enterTextAndPressEnter('*'); - done(); }); - afterAll(async (done) => { + afterAll(async () => { await this.alfrescoJsApi.login(acsUser.id, acsUser.password); await uploadActions.deleteFileOrFolder(file2Bytes.entry.id); await uploadActions.deleteFileOrFolder(file0Bytes.entry.id); await navigationBarPage.clickLogoutButton(); - done(); }); - beforeEach(() => { - searchFilters.checkSizeRangeFilterIsDisplayed() - .clickSizeRangeFilterHeader() - .checkSizeRangeFilterIsExpanded(); + beforeEach(async () => { + await searchFilters.checkSizeRangeFilterIsDisplayed(); + await searchFilters.clickSizeRangeFilterHeader(); + await searchFilters.checkSizeRangeFilterIsExpanded(); }); - afterEach(async (done) => { + afterEach(async () => { await browser.refresh(); - done(); + }); - it('[C276921] Should display default values for Number Range widget', () => { - sizeRangeFilter.checkFromFieldIsDisplayed() - .checkToFieldIsDisplayed() - .checkApplyButtonIsDisplayed() - .checkClearButtonIsDisplayed(); + it('[C276921] Should display default values for Number Range widget', async () => { + await sizeRangeFilter.checkFromFieldIsDisplayed(); + await sizeRangeFilter.checkToFieldIsDisplayed(); + await sizeRangeFilter.checkApplyButtonIsDisplayed(); + await sizeRangeFilter.checkClearButtonIsDisplayed(); - expect(sizeRangeFilter.checkApplyButtonIsEnabled()).toBe(false); + await expect(await sizeRangeFilter.checkApplyButtonIsEnabled()).toBe(false); }); - it('[C276922] Should be keep value when Number Range widget is collapsed', () => { + it('[C276922] Should be keep value when Number Range widget is collapsed', async () => { const size = 5; - sizeRangeFilter.putFromNumber(size); - sizeRangeFilter.putToNumber(size); - searchFilters.clickSizeRangeFilterHeader() - .checkSizeRangeFilterIsCollapsed() - .clickSizeRangeFilterHeader() - .checkSizeRangeFilterIsExpanded(); - expect(sizeRangeFilter.getFromNumber()).toEqual(`${size}`); - expect(sizeRangeFilter.getToNumber()).toEqual(`${size}`); + await sizeRangeFilter.putFromNumber(size); + await sizeRangeFilter.putToNumber(size); + await searchFilters.clickSizeRangeFilterHeader(); + await searchFilters.checkSizeRangeFilterIsCollapsed(); + await searchFilters.clickSizeRangeFilterHeader(); + await searchFilters.checkSizeRangeFilterIsExpanded(); + await expect(await sizeRangeFilter.getFromNumber()).toEqual(`${size}`); + await expect(await sizeRangeFilter.getToNumber()).toEqual(`${size}`); }); - it('[C276924] Should display error message when input had an invalid format', () => { - sizeRangeFilter.checkFromFieldIsDisplayed() - .putFromNumber('a').putToNumber('A') - .checkFromErrorInvalidIsDisplayed().checkToErrorInvalidIsDisplayed(); + it('[C276924] Should display error message when input had an invalid format', async () => { + await sizeRangeFilter.checkFromFieldIsDisplayed(); + await sizeRangeFilter.putFromNumber('a'); + await sizeRangeFilter.putToNumber('A'); + await sizeRangeFilter.checkFromErrorInvalidIsDisplayed(); + await sizeRangeFilter.checkToErrorInvalidIsDisplayed(); - expect(sizeRangeFilter.getFromErrorInvalid()).toEqual('Invalid Format'); - expect(sizeRangeFilter.getToErrorInvalid()).toEqual('Invalid Format'); - expect(sizeRangeFilter.checkApplyButtonIsEnabled()).toBe(false); + await expect(await sizeRangeFilter.getFromErrorInvalid()).toEqual('Invalid Format'); + await expect(await sizeRangeFilter.getToErrorInvalid()).toEqual('Invalid Format'); + await expect(await sizeRangeFilter.checkApplyButtonIsEnabled()).toBe(false); - sizeRangeFilter.putFromNumber('@').putToNumber('£') - .checkFromErrorInvalidIsDisplayed().checkToErrorInvalidIsDisplayed(); - expect(sizeRangeFilter.getFromErrorInvalid()).toEqual('Invalid Format'); - expect(sizeRangeFilter.getToErrorInvalid()).toEqual('Invalid Format'); - expect(sizeRangeFilter.checkApplyButtonIsEnabled()).toBe(false); + await sizeRangeFilter.putFromNumber('@'); + await sizeRangeFilter.putToNumber('£'); + await sizeRangeFilter.checkFromErrorInvalidIsDisplayed(); + await sizeRangeFilter.checkToErrorInvalidIsDisplayed(); + await expect(await sizeRangeFilter.getFromErrorInvalid()).toEqual('Invalid Format'); + await expect(await sizeRangeFilter.getToErrorInvalid()).toEqual('Invalid Format'); + await expect(await sizeRangeFilter.checkApplyButtonIsEnabled()).toBe(false); - sizeRangeFilter.putFromNumber('4.5').putToNumber('4,5') - .checkFromErrorInvalidIsDisplayed().checkToErrorInvalidIsDisplayed(); - expect(sizeRangeFilter.getFromErrorInvalid()).toEqual('Invalid Format'); - expect(sizeRangeFilter.getToErrorInvalid()).toEqual('Invalid Format'); - expect(sizeRangeFilter.checkApplyButtonIsEnabled()).toBe(false); + await sizeRangeFilter.putFromNumber('4.5'); + await sizeRangeFilter.putToNumber('4,5'); + await sizeRangeFilter.checkFromErrorInvalidIsDisplayed(); + await sizeRangeFilter.checkToErrorInvalidIsDisplayed(); + await expect(await sizeRangeFilter.getFromErrorInvalid()).toEqual('Invalid Format'); + await expect(await sizeRangeFilter.getToErrorInvalid()).toEqual('Invalid Format'); + await expect(await sizeRangeFilter.checkApplyButtonIsEnabled()).toBe(false); - sizeRangeFilter.putFromNumber('01').putToNumber('-1'); - expect(sizeRangeFilter.getFromErrorInvalid()).toEqual('Invalid Format'); - expect(sizeRangeFilter.getToErrorInvalid()).toEqual('Invalid Format'); - expect(sizeRangeFilter.checkApplyButtonIsEnabled()).toBe(false); + await sizeRangeFilter.putFromNumber('01'); + await sizeRangeFilter.putToNumber('-1'); + await expect(await sizeRangeFilter.getFromErrorInvalid()).toEqual('Invalid Format'); + await expect(await sizeRangeFilter.getToErrorInvalid()).toEqual('Invalid Format'); + await expect(await sizeRangeFilter.checkApplyButtonIsEnabled()).toBe(false); - sizeRangeFilter.clearFromField().clearToField() - .checkFromErrorRequiredIsDisplayed().checkToErrorRequiredIsDisplayed(); - expect(sizeRangeFilter.getFromErrorRequired()).toEqual('Required value'); - expect(sizeRangeFilter.getToErrorRequired()).toEqual('Required value'); - expect(sizeRangeFilter.checkApplyButtonIsEnabled()).toBe(false); + await sizeRangeFilter.clearFromField(); + await sizeRangeFilter.clearToField(); + await sizeRangeFilter.checkFromErrorRequiredIsDisplayed(); + await sizeRangeFilter.checkToErrorRequiredIsDisplayed(); + await expect(await sizeRangeFilter.getFromErrorRequired()).toEqual('Required value'); + await expect(await sizeRangeFilter.getToErrorRequired()).toEqual('Required value'); + await expect(await sizeRangeFilter.checkApplyButtonIsEnabled()).toBe(false); }); - it('[C276943] Should be able to put a big value in To field', () => { + it('[C276943] Should be able to put a big value in To field', async () => { const toSize = 999999999; const fromSize = 0; - sizeRangeFilter.checkToFieldIsDisplayed() - .putToNumber(toSize) - .putFromNumber(fromSize); + await sizeRangeFilter.checkToFieldIsDisplayed(); + await sizeRangeFilter.putToNumber(toSize); + await sizeRangeFilter.putFromNumber(fromSize); - expect(sizeRangeFilter.checkApplyButtonIsEnabled()).toBe(true); + await expect(await sizeRangeFilter.checkApplyButtonIsEnabled()).toBe(true); - sizeRangeFilter.clickApplyButton(); - searchResults.tableIsLoaded(); - searchResults.sortBySize('DESC'); + await sizeRangeFilter.clickApplyButton(); + await searchResults.tableIsLoaded(); + await searchResults.sortBySize('DESC'); - browser.controlFlow().execute(async () => { - const results = await dataTable.geCellElementDetail('Size'); - for (const currentResult of results) { - try { - const currentSize = await currentResult.getAttribute('title'); - if (currentSize && currentSize.trim() !== '') { - await expect(parseInt(currentSize, 10) <= toSize).toBe(true); - } - } catch (e) { + const results: any = dataTable.geCellElementDetail('Size'); + for (const currentResult of results) { + try { + const currentSize = await currentResult.getAttribute('title'); + if (currentSize && currentSize.trim() !== '') { + await expect(parseInt(currentSize, 10) <= toSize).toBe(true); } + } catch (e) { } - }); + } }); - it('[C276944] Should be able to filter by name when size range filter is applied', () => { - const nameFilter = searchFilters.textFiltersPage(); + it('[C276944] Should be able to filter by name when size range filter is applied', async () => { + const nameFilter = await searchFilters.textFiltersPage(); const toSize = 40; const fromSize = 0; - searchFilters.checkNameFilterIsDisplayed() - .checkNameFilterIsExpanded(); - nameFilter.searchByName('*'); + await searchFilters.checkNameFilterIsDisplayed(); + await searchFilters.checkNameFilterIsExpanded(); + await nameFilter.searchByName('*'); - sizeRangeFilter.checkFromFieldIsDisplayed() - .putFromNumber(fromSize) - .putToNumber(toSize); + await sizeRangeFilter.checkFromFieldIsDisplayed(); + await sizeRangeFilter.putFromNumber(fromSize); + await sizeRangeFilter.putToNumber(toSize); - expect(sizeRangeFilter.checkApplyButtonIsEnabled()).toBe(true); + await expect(await sizeRangeFilter.checkApplyButtonIsEnabled()).toBe(true); - sizeRangeFilter.clickApplyButton(); - searchResults.sortBySize('DESC'); + await sizeRangeFilter.clickApplyButton(); + await searchResults.sortBySize('DESC'); - browser.controlFlow().execute(async () => { - const results = await dataTable.geCellElementDetail('Size'); - for (const currentResult of results) { - try { - const currentSize = await currentResult.getAttribute('title'); - if (currentSize && currentSize.trim() !== '') { - await expect(parseInt(currentSize, 10) <= toSize).toBe(true); - } - } catch (e) { + const results: any = dataTable.geCellElementDetail('Size'); + for (const currentResult of results) { + try { + const currentSize = await currentResult.getAttribute('title'); + if (currentSize && currentSize.trim() !== '') { + await expect(parseInt(currentSize, 10) <= toSize).toBe(true); } + } catch (e) { } - }); + } - searchFilters.checkNameFilterIsDisplayed() - .checkNameFilterIsExpanded(); - nameFilter.searchByName('z*'); - searchResults.sortBySize('DESC'); + await searchFilters.checkNameFilterIsDisplayed(); + await searchFilters.checkNameFilterIsExpanded(); + await nameFilter.searchByName('z*'); + await searchResults.sortBySize('DESC'); - browser.controlFlow().execute(async () => { - const results = await dataTable.geCellElementDetail('Size'); - for (const currentResult of results) { - try { - const currentSize = await currentResult.getAttribute('title'); - if (currentSize && currentSize.trim() !== '') { - await expect(parseInt(currentSize, 10) <= toSize).toBe(true); - } - } catch (e) { + const resultsSize: any = dataTable.geCellElementDetail('Size'); + for (const currentResult of resultsSize) { + try { + const currentSize = await currentResult.getAttribute('title'); + if (currentSize && currentSize.trim() !== '') { + await expect(parseInt(currentSize, 10) <= toSize).toBe(true); } + } catch (e) { } - }); + } - browser.controlFlow().execute(async () => { - const results = await dataTable.geCellElementDetail('Display name'); - for (const currentResult of results) { - try { - const name = await currentResult.getAttribute('title'); - if (name && name.trim() !== '') { - await expect(/z*/i.test(name)).toBe(true); - } - } catch (e) { + const resultsDisplay: any = dataTable.geCellElementDetail('Display name'); + for (const currentResult of resultsDisplay) { + try { + const name = await currentResult.getAttribute('title'); + if (name && name.trim() !== '') { + await expect(/z*/i.test(name)).toBe(true); } + } catch (e) { } - }); + } }); - it('[C276951] Should not display folders when Size range is applied', () => { - sizeRangeFilter.checkToFieldIsDisplayed() - .putToNumber(99999999) - .putFromNumber(0); - expect(sizeRangeFilter.checkApplyButtonIsEnabled()).toBe(true); + it('[C276951] Should not display folders when Size range is applied', async () => { + await sizeRangeFilter.checkToFieldIsDisplayed(); + await sizeRangeFilter.putToNumber(99999999); + await sizeRangeFilter.putFromNumber(0); + await expect(await sizeRangeFilter.checkApplyButtonIsEnabled()).toBe(true); - sizeRangeFilter.clickApplyButton(); - searchResults.tableIsLoaded(); - searchFilters.checkCheckListFilterIsDisplayed(); - searchFilters.clickCheckListFilter(); - searchFilters.checkCheckListFilterIsExpanded(); + await sizeRangeFilter.clickApplyButton(); + await searchResults.tableIsLoaded(); + await searchFilters.checkCheckListFilterIsDisplayed(); + await searchFilters.clickCheckListFilter(); + await searchFilters.checkCheckListFilterIsExpanded(); - searchFilters.checkListFiltersPage() - .clickCheckListOption('Folder'); + await searchFilters.checkListFiltersPage().clickCheckListOption('Folder'); - searchResults.tableIsLoaded(); - searchResults.checkNoResultMessageIsDisplayed(); + await searchResults.tableIsLoaded(); + await searchResults.checkNoResultMessageIsDisplayed(); }); - it('[C276952] Should only display empty files when size range is set from 0 to 1', () => { - sizeRangeFilter.checkToFieldIsDisplayed() - .putToNumber(1) - .putFromNumber(0); - expect(sizeRangeFilter.checkApplyButtonIsEnabled()).toBe(true); + it('[C276952] Should only display empty files when size range is set from 0 to 1', async () => { + await sizeRangeFilter.checkToFieldIsDisplayed(); + await sizeRangeFilter.putToNumber(1); + await sizeRangeFilter.putFromNumber(0); + await expect(await sizeRangeFilter.checkApplyButtonIsEnabled()).toBe(true); - sizeRangeFilter.clickApplyButton(); - searchResults.tableIsLoaded(); - searchResults.sortBySize('DESC'); + await sizeRangeFilter.clickApplyButton(); + await searchResults.tableIsLoaded(); + await searchResults.sortBySize('DESC'); - browser.controlFlow().execute(async () => { - const results = await dataTable.geCellElementDetail('Size'); - for (const currentResult of results) { - try { - const currentSize = await currentResult.getAttribute('title'); - if (currentSize && currentSize.trim() !== '') { - await expect(currentSize === '0').toBe(true); - } - } catch (e) { + const results: any = dataTable.geCellElementDetail('Size'); + for (const currentResult of results) { + try { + const currentSize = await currentResult.getAttribute('title'); + if (currentSize && currentSize.trim() !== '') { + await expect(currentSize === '0').toBe(true); } + } catch (e) { } - }); - + } }); - it('[C277092] Should disable apply button when from field value equal/is bigger than to field value', () => { - sizeRangeFilter.checkFromFieldIsDisplayed() - .putFromNumber(10); - expect(sizeRangeFilter.checkApplyButtonIsEnabled()).toBe(false); + it('[C277092] Should disable apply button when from field value equal/is bigger than to field value', async () => { + await sizeRangeFilter.checkFromFieldIsDisplayed(); + await sizeRangeFilter.putFromNumber(10); + await expect(await sizeRangeFilter.checkApplyButtonIsEnabled()).toBe(false); - sizeRangeFilter.putToNumber('5'); - expect(sizeRangeFilter.checkApplyButtonIsEnabled()).toBe(false); + await sizeRangeFilter.putToNumber('5'); + await expect(await sizeRangeFilter.checkApplyButtonIsEnabled()).toBe(false); - sizeRangeFilter.putToNumber('10'); - expect(sizeRangeFilter.checkApplyButtonIsEnabled()).toBe(false); + await sizeRangeFilter.putToNumber('10'); + await expect(await sizeRangeFilter.checkApplyButtonIsEnabled()).toBe(false); }); - it('[C289930] Should be able to clear values in number range fields', () => { - sizeRangeFilter.checkFromFieldIsDisplayed().checkClearButtonIsDisplayed().checkNoErrorMessageIsDisplayed() - .clickClearButton().checkNoErrorMessageIsDisplayed() - .putFromNumber(0).putToNumber(1).clickClearButton(); + it('[C289930] Should be able to clear values in number range fields', async () => { + await sizeRangeFilter.checkFromFieldIsDisplayed(); + await sizeRangeFilter.checkClearButtonIsDisplayed(); + await sizeRangeFilter.checkNoErrorMessageIsDisplayed(); + await sizeRangeFilter.clickClearButton(); + await sizeRangeFilter.checkNoErrorMessageIsDisplayed(); + await sizeRangeFilter.putFromNumber(0); + await sizeRangeFilter.putToNumber(1); + await sizeRangeFilter.clickClearButton(); - expect(sizeRangeFilter.getFromNumber()).toEqual(''); - expect(sizeRangeFilter.getToNumber()).toEqual(''); + await expect(await sizeRangeFilter.getFromNumber()).toEqual(''); + await expect(await sizeRangeFilter.getToNumber()).toEqual(''); - sizeRangeFilter.putFromNumber(0).putToNumber(1).clickApplyButton(); - searchResults.sortBySize('DESC'); + await sizeRangeFilter.putFromNumber(0); + await sizeRangeFilter.putToNumber(1); + await sizeRangeFilter.clickApplyButton(); + await searchResults.sortBySize('DESC'); - browser.controlFlow().execute(async () => { - const results = await dataTable.geCellElementDetail('Size'); - for (const currentResult of results) { - try { - - const currentSize = await currentResult.getAttribute('title'); - if (currentSize && currentSize.trim() !== '') { - await expect(parseInt(currentSize, 10) <= 1000).toBe(true); - } - } catch (e) { + const results: any = dataTable.geCellElementDetail('Size'); + for (const currentResult of results) { + try { + const currentSize = await currentResult.getAttribute('title'); + if (currentSize && currentSize.trim() !== '') { + await expect(parseInt(currentSize, 10) <= 1000).toBe(true); } + } catch (e) { } - }); + } - sizeRangeFilter.clickClearButton(); + await sizeRangeFilter.clickClearButton(); - expect(sizeRangeFilter.getFromNumber()).toEqual(''); - expect(sizeRangeFilter.getToNumber()).toEqual(''); + await expect(await sizeRangeFilter.getFromNumber()).toEqual(''); + await expect(await sizeRangeFilter.getToNumber()).toEqual(''); - browser.controlFlow().execute(async () => { - const results = await dataTable.geCellElementDetail('Size'); - for (const currentResult of results) { - try { - - const currentSize = await currentResult.getAttribute('title'); - if (currentSize && currentSize.trim() !== '') { - await expect(parseInt(currentSize, 10) >= 1000).toBe(true); - } - } catch (e) { + const resultsSize: any = dataTable.geCellElementDetail('Size'); + for (const currentResult of resultsSize) { + try { + const currentSize = await currentResult.getAttribute('title'); + if (currentSize && currentSize.trim() !== '') { + await expect(parseInt(currentSize, 10) >= 1000).toBe(true); } + } catch (e) { } - }); + } }); - it('[C277137] Number Range should be inclusive', () => { - sizeRangeFilter.checkToFieldIsDisplayed() - .putToNumber(2) - .putFromNumber(1); - expect(sizeRangeFilter.checkApplyButtonIsEnabled()).toBe(true); + it('[C277137] Number Range should be inclusive', async () => { + await sizeRangeFilter.checkToFieldIsDisplayed(); + await sizeRangeFilter.putToNumber(2); + await sizeRangeFilter.putFromNumber(1); + await expect(await sizeRangeFilter.checkApplyButtonIsEnabled()).toBe(true); - sizeRangeFilter.clickApplyButton(); + await sizeRangeFilter.clickApplyButton(); - searchResults.tableIsLoaded(); - searchResults.checkContentIsDisplayed(file2BytesModel.name); + await searchResults.tableIsLoaded(); + await searchResults.checkContentIsDisplayed(file2BytesModel.name); - sizeRangeFilter.checkToFieldIsDisplayed() - .putToNumber(1) - .putFromNumber(0); - expect(sizeRangeFilter.checkApplyButtonIsEnabled()).toBe(true); + await sizeRangeFilter.checkToFieldIsDisplayed(); + await sizeRangeFilter.putToNumber(1); + await sizeRangeFilter.putFromNumber(0); + await expect(await sizeRangeFilter.checkApplyButtonIsEnabled()).toBe(true); - sizeRangeFilter.clickApplyButton(); + await sizeRangeFilter.clickApplyButton(); - searchResults.tableIsLoaded(); - searchResults.checkContentIsNotDisplayed(file2BytesModel.name); + await searchResults.tableIsLoaded(); + await searchResults.checkContentIsNotDisplayed(file2BytesModel.name); - sizeRangeFilter.checkToFieldIsDisplayed() - .putToNumber(3) - .putFromNumber(2); - expect(sizeRangeFilter.checkApplyButtonIsEnabled()).toBe(true); + await sizeRangeFilter.checkToFieldIsDisplayed(); + await sizeRangeFilter.putToNumber(3); + await sizeRangeFilter.putFromNumber(2); + await expect(await sizeRangeFilter.checkApplyButtonIsEnabled()).toBe(true); - sizeRangeFilter.clickApplyButton(); + await sizeRangeFilter.clickApplyButton(); - searchResults.tableIsLoaded(); - searchResults.checkContentIsDisplayed(file2BytesModel.name); + await searchResults.tableIsLoaded(); + await searchResults.checkContentIsDisplayed(file2BytesModel.name); - sizeRangeFilter.checkToFieldIsDisplayed() - .putToNumber(4) - .putFromNumber(3); - expect(sizeRangeFilter.checkApplyButtonIsEnabled()).toBe(true); + await sizeRangeFilter.checkToFieldIsDisplayed(); + await sizeRangeFilter.putToNumber(4); + await sizeRangeFilter.putFromNumber(3); + await expect(await sizeRangeFilter.checkApplyButtonIsEnabled()).toBe(true); - sizeRangeFilter.clickApplyButton(); + await sizeRangeFilter.clickApplyButton(); - searchResults.tableIsLoaded(); - searchResults.checkContentIsNotDisplayed(file2BytesModel.name); + await searchResults.tableIsLoaded(); + await searchResults.checkContentIsNotDisplayed(file2BytesModel.name); }); describe('Configuration change', () => { @@ -392,117 +388,113 @@ describe('Search Number Range Filter', () => { }); it('[C276928] Should be able to change the field property for number range', async () => { - navigationBarPage.clickContentServicesButton(); + await navigationBarPage.clickContentServicesButton(); jsonFile.categories[3].component.settings.field = 'cm:created'; await LocalStorageUtil.setConfigField('search', JSON.stringify(jsonFile)); - searchDialog.checkSearchIconIsVisible() - .clickOnSearchIcon() - .enterTextAndPressEnter('*'); + await searchDialog.checkSearchIconIsVisible(); + await searchDialog.clickOnSearchIcon(); + await searchDialog.enterTextAndPressEnter('*'); - searchFilters.checkSizeRangeFilterIsDisplayed() - .clickSizeRangeFilterHeader() - .checkSizeRangeFilterIsExpanded(); + await searchFilters.checkSizeRangeFilterIsDisplayed(); + await searchFilters.clickSizeRangeFilterHeader(); + await searchFilters.checkSizeRangeFilterIsExpanded(); const fromYear = (new Date()).getFullYear(); const toYear = fromYear + 1; - sizeRangeFilter.checkToFieldIsDisplayed() - .putToNumber(toYear) - .putFromNumber(fromYear); - expect(sizeRangeFilter.checkApplyButtonIsEnabled()).toBe(true); + await sizeRangeFilter.checkToFieldIsDisplayed(); + await sizeRangeFilter.putToNumber(toYear); + await sizeRangeFilter.putFromNumber(fromYear); + await expect(await sizeRangeFilter.checkApplyButtonIsEnabled()).toBe(true); - sizeRangeFilter.clickApplyButton(); - searchResults.tableIsLoaded(); - searchResults.sortByCreated('DESC'); + await sizeRangeFilter.clickApplyButton(); + await searchResults.tableIsLoaded(); + await searchResults.sortByCreated('DESC'); - browser.controlFlow().execute(async () => { - const results = await dataTable.geCellElementDetail('Created'); - for (const currentResult of results) { - currentResult.getAttribute('title').then(async (currentDate) => { - const currentDateFormatted = DateUtil.parse(currentDate, 'MMM DD, YYYY, h:mm:ss a'); + const results: any = dataTable.geCellElementDetail('Created'); + for (const currentResult of results) { + const currentDate = await currentResult.getAttribute('title'); + const currentDateFormatted = DateUtil.parse(currentDate, 'MMM DD, YYYY, h:mm:ss a'); - await expect(currentDateFormatted.getFullYear() <= toYear).toBe(true); - await expect(currentDateFormatted.getFullYear() >= fromYear).toBe(true); - }); - - } - }); + await expect(currentDateFormatted.getFullYear() <= toYear).toBe(true); + await expect(currentDateFormatted.getFullYear() >= fromYear).toBe(true); + } }); it('[C277139] Should be able to set To field to be exclusive', async () => { - navigationBarPage.clickContentServicesButton(); + await navigationBarPage.clickContentServicesButton(); jsonFile.categories[3].component.settings.format = '[{FROM} TO {TO}>'; await LocalStorageUtil.setConfigField('search', JSON.stringify(jsonFile)); - searchDialog.checkSearchIconIsVisible() - .clickOnSearchIcon() - .enterTextAndPressEnter('*'); + await searchDialog.checkSearchIconIsVisible(); + await searchDialog.clickOnSearchIcon(); + await searchDialog.enterTextAndPressEnter('*'); - searchFilters.checkSizeRangeFilterIsDisplayed() - .clickSizeRangeFilterHeader() - .checkSizeRangeFilterIsExpanded(); + await searchFilters.checkSizeRangeFilterIsDisplayed(); + await searchFilters.clickSizeRangeFilterHeader(); + await searchFilters.checkSizeRangeFilterIsExpanded(); - sizeRangeFilter.checkToFieldIsDisplayed() - .putToNumber(2) - .putFromNumber(1); - expect(sizeRangeFilter.checkApplyButtonIsEnabled()).toBe(true); + await sizeRangeFilter.checkToFieldIsDisplayed(); + await sizeRangeFilter.putToNumber(2); + await sizeRangeFilter.putFromNumber(1); + await expect(await sizeRangeFilter.checkApplyButtonIsEnabled()).toBe(true); - sizeRangeFilter.clickApplyButton(); + await sizeRangeFilter.clickApplyButton(); - searchResults.tableIsLoaded(); - searchResults.checkContentIsNotDisplayed(file2BytesModel.name); + await searchResults.tableIsLoaded(); + await searchResults.checkContentIsNotDisplayed(file2BytesModel.name); - sizeRangeFilter.checkToFieldIsDisplayed() - .putToNumber(3) - .putFromNumber(1); - expect(sizeRangeFilter.checkApplyButtonIsEnabled()).toBe(true); + await sizeRangeFilter.checkToFieldIsDisplayed(); + await sizeRangeFilter.putToNumber(3); + await sizeRangeFilter.putFromNumber(1); + await expect(await sizeRangeFilter.checkApplyButtonIsEnabled()).toBe(true); - sizeRangeFilter.clickApplyButton(); + await sizeRangeFilter.clickApplyButton(); - searchResults.tableIsLoaded(); - searchResults.checkContentIsDisplayed(file2BytesModel.name); + await searchResults.tableIsLoaded(); + await searchResults.checkContentIsDisplayed(file2BytesModel.name); }); it('[C277140] Should be able to set From field to be exclusive', async () => { - navigationBarPage.clickContentServicesButton(); + await navigationBarPage.clickContentServicesButton(); jsonFile.categories[3].component.settings.format = '<{FROM} TO {TO}]'; await LocalStorageUtil.setConfigField('search', JSON.stringify(jsonFile)); - searchDialog.checkSearchIconIsVisible() - .clickOnSearchIcon() - .enterTextAndPressEnter('*'); + await searchDialog.checkSearchIconIsVisible(); + await searchDialog.clickOnSearchIcon(); + await searchDialog.enterTextAndPressEnter('*'); - searchFilters.checkSizeRangeFilterIsDisplayed() - .clickSizeRangeFilterHeader() - .checkSizeRangeFilterIsExpanded(); + await searchFilters.checkSizeRangeFilterIsDisplayed(); + await searchFilters.clickSizeRangeFilterHeader(); + await searchFilters.checkSizeRangeFilterIsExpanded(); - sizeRangeFilter.checkToFieldIsDisplayed() - .putToNumber(3) - .putFromNumber(1); - expect(sizeRangeFilter.checkApplyButtonIsEnabled()).toBe(true); + await sizeRangeFilter.checkToFieldIsDisplayed(); + await sizeRangeFilter.putToNumber(3); + await sizeRangeFilter.putFromNumber(1); + await expect(await sizeRangeFilter.checkApplyButtonIsEnabled()).toBe(true); - sizeRangeFilter.clickApplyButton(); + await sizeRangeFilter.clickApplyButton(); - searchResults.tableIsLoaded(); - searchResults.checkContentIsDisplayed(file2BytesModel.name); + await searchResults.tableIsLoaded(); + await searchResults.checkContentIsDisplayed(file2BytesModel.name); - sizeRangeFilter.checkToFieldIsDisplayed() - .putToNumber(3) - .putFromNumber(2); - expect(sizeRangeFilter.checkApplyButtonIsEnabled()).toBe(true); + await sizeRangeFilter.checkToFieldIsDisplayed(); + await sizeRangeFilter.putToNumber(3); + await sizeRangeFilter.putFromNumber(2); + await expect(await sizeRangeFilter.checkApplyButtonIsEnabled()).toBe(true); - sizeRangeFilter.clickApplyButton(); + await sizeRangeFilter.clickApplyButton(); - searchResults.tableIsLoaded(); - searchResults.checkContentIsNotDisplayed(file2BytesModel.name); + await searchResults.tableIsLoaded(); + await searchResults.checkContentIsNotDisplayed(file2BytesModel.name); }); }); }); diff --git a/e2e/search/components/search-radio.e2e.ts b/e2e/search/components/search-radio.e2e.ts index d05e0f1aad..09f300940a 100644 --- a/e2e/search/components/search-radio.e2e.ts +++ b/e2e/search/components/search-radio.e2e.ts @@ -56,7 +56,7 @@ describe('Search Radio Component', () => { let createdFile, createdFolder; - beforeAll(async (done) => { + beforeAll(async () => { await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); await this.alfrescoJsApi.core.peopleApi.addPerson(acsUser); @@ -71,16 +71,15 @@ describe('Search Radio Component', () => { nodeType: 'cm:content' }); - await browser.driver.sleep(15000); + await browser.sleep(15000); await loginPage.loginToContentServicesUsingUserModel(acsUser); - BrowserActions.getUrl(browser.params.testConfig.adf.url + '/search;q=' + randomName); + await BrowserActions.getUrl(browser.params.testConfig.adf.url + '/search;q=' + randomName); - done(); }); - afterAll(async (done) => { + afterAll(async () => { await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); await uploadActions.deleteFileOrFolder(createdFile.entry.id); @@ -88,41 +87,40 @@ describe('Search Radio Component', () => { await navigationBarPage.clickLogoutButton(); - done(); }); - it('[C277039] Should be able to choose only one option at a time', () => { - searchFiltersPage.checkTypeFilterIsDisplayed(); - searchFiltersPage.checkTypeFilterIsCollapsed(); - searchFiltersPage.clickTypeFilterHeader(); + it('[C277039] Should be able to choose only one option at a time', async () => { + await searchFiltersPage.checkTypeFilterIsDisplayed(); + await searchFiltersPage.checkTypeFilterIsCollapsed(); + await searchFiltersPage.clickTypeFilterHeader(); - searchFiltersPage.typeFiltersPage().checkFilterRadioButtonIsDisplayed(filterType.none); - searchFiltersPage.typeFiltersPage().checkFilterRadioButtonIsDisplayed(filterType.all); - searchFiltersPage.typeFiltersPage().checkFilterRadioButtonIsDisplayed(filterType.folder); - searchFiltersPage.typeFiltersPage().checkFilterRadioButtonIsDisplayed(filterType.document); + await searchFiltersPage.typeFiltersPage().checkFilterRadioButtonIsDisplayed(filterType.none); + await searchFiltersPage.typeFiltersPage().checkFilterRadioButtonIsDisplayed(filterType.all); + await searchFiltersPage.typeFiltersPage().checkFilterRadioButtonIsDisplayed(filterType.folder); + await searchFiltersPage.typeFiltersPage().checkFilterRadioButtonIsDisplayed(filterType.document); - searchFiltersPage.typeFiltersPage().checkFilterRadioButtonIsChecked(filterType.none); + await searchFiltersPage.typeFiltersPage().checkFilterRadioButtonIsChecked(filterType.none); - searchResults.checkContentIsDisplayed(nodeNames.folder); - searchResults.checkContentIsDisplayed(nodeNames.document); + await searchResults.checkContentIsDisplayed(nodeNames.folder); + await searchResults.checkContentIsDisplayed(nodeNames.document); - searchFiltersPage.typeFiltersPage().clickFilterRadioButton(filterType.folder); - searchFiltersPage.typeFiltersPage().checkFilterRadioButtonIsChecked(filterType.folder); + await searchFiltersPage.typeFiltersPage().clickFilterRadioButton(filterType.folder); + await searchFiltersPage.typeFiltersPage().checkFilterRadioButtonIsChecked(filterType.folder); - searchResults.checkContentIsDisplayed(nodeNames.folder); - searchResults.checkContentIsNotDisplayed(nodeNames.document); + await searchResults.checkContentIsDisplayed(nodeNames.folder); + await searchResults.checkContentIsNotDisplayed(nodeNames.document); - searchFiltersPage.typeFiltersPage().clickFilterRadioButton(filterType.document); - searchFiltersPage.typeFiltersPage().checkFilterRadioButtonIsChecked(filterType.document); + await searchFiltersPage.typeFiltersPage().clickFilterRadioButton(filterType.document); + await searchFiltersPage.typeFiltersPage().checkFilterRadioButtonIsChecked(filterType.document); - searchResults.checkContentIsDisplayed(nodeNames.document); - searchResults.checkContentIsNotDisplayed(nodeNames.folder); + await searchResults.checkContentIsDisplayed(nodeNames.document); + await searchResults.checkContentIsNotDisplayed(nodeNames.folder); - searchFiltersPage.typeFiltersPage().clickFilterRadioButton(filterType.all); - searchFiltersPage.typeFiltersPage().checkFilterRadioButtonIsChecked(filterType.all); + await searchFiltersPage.typeFiltersPage().clickFilterRadioButton(filterType.all); + await searchFiltersPage.typeFiltersPage().checkFilterRadioButtonIsChecked(filterType.all); - searchResults.checkContentIsDisplayed(nodeNames.folder); - searchResults.checkContentIsDisplayed(nodeNames.document); + await searchResults.checkContentIsDisplayed(nodeNames.folder); + await searchResults.checkContentIsDisplayed(nodeNames.document); }); describe('configuration change', () => { @@ -134,7 +132,7 @@ describe('Search Radio Component', () => { }); it('[C277147] Should be able to customise the pageSize value', async () => { - navigationBarPage.clickContentServicesButton(); + await navigationBarPage.clickContentServicesButton(); jsonFile.categories[5].component.settings.pageSize = 10; @@ -147,40 +145,46 @@ describe('Search Radio Component', () => { await LocalStorageUtil.setConfigField('search', JSON.stringify(jsonFile)); - searchDialog.clickOnSearchIcon().checkSearchBarIsVisible().enterTextAndPressEnter(randomName); - searchFiltersPage.clickTypeFilterHeader(); + await searchDialog.clickOnSearchIcon(); + await searchDialog.checkSearchBarIsVisible(); + await searchDialog.enterTextAndPressEnter(randomName); + await searchFiltersPage.clickTypeFilterHeader(); - expect(searchFiltersPage.typeFiltersPage().getRadioButtonsNumberOnPage()).toBe(10); + await expect(await searchFiltersPage.typeFiltersPage().getRadioButtonsNumberOnPage()).toBe(10); - navigationBarPage.clickContentServicesButton(); + await navigationBarPage.clickContentServicesButton(); jsonFile.categories[5].component.settings.pageSize = 11; await LocalStorageUtil.setConfigField('search', JSON.stringify(jsonFile)); - searchDialog.clickOnSearchIcon().checkSearchBarIsVisible().enterTextAndPressEnter(randomName); - searchFiltersPage.clickTypeFilterHeader(); + await searchDialog.clickOnSearchIcon(); + await searchDialog.checkSearchBarIsVisible(); + await searchDialog.enterTextAndPressEnter(randomName); + await searchFiltersPage.clickTypeFilterHeader(); - expect(searchFiltersPage.typeFiltersPage().getRadioButtonsNumberOnPage()).toBe(10); + await expect(await searchFiltersPage.typeFiltersPage().getRadioButtonsNumberOnPage()).toBe(10); - navigationBarPage.clickContentServicesButton(); + await navigationBarPage.clickContentServicesButton(); jsonFile.categories[5].component.settings.pageSize = 9; await LocalStorageUtil.setConfigField('search', JSON.stringify(jsonFile)); - searchDialog.clickOnSearchIcon().checkSearchBarIsVisible().enterTextAndPressEnter(randomName); - searchFiltersPage.clickTypeFilterHeader(); + await searchDialog.clickOnSearchIcon(); + await searchDialog.checkSearchBarIsVisible(); + await searchDialog.enterTextAndPressEnter(randomName); + await searchFiltersPage.clickTypeFilterHeader(); - expect(searchFiltersPage.typeFiltersPage().getRadioButtonsNumberOnPage()).toBe(9); + await expect(await searchFiltersPage.typeFiltersPage().getRadioButtonsNumberOnPage()).toBe(9); - searchFiltersPage.typeFiltersPage().checkShowMoreButtonIsDisplayed(); - searchFiltersPage.typeFiltersPage().checkShowLessButtonIsNotDisplayed(); + await searchFiltersPage.typeFiltersPage().checkShowMoreButtonIsDisplayed(); + await searchFiltersPage.typeFiltersPage().checkShowLessButtonIsNotDisplayed(); - browser.refresh(); + await browser.refresh(); }); it('[C277148] Should be able to click show more/less button', async () => { - navigationBarPage.clickContentServicesButton(); + await navigationBarPage.clickContentServicesButton(); jsonFile.categories[5].component.settings.pageSize = 0; @@ -193,54 +197,58 @@ describe('Search Radio Component', () => { await LocalStorageUtil.setConfigField('search', JSON.stringify(jsonFile)); - searchDialog.clickOnSearchIcon().checkSearchBarIsVisible().enterTextAndPressEnter(randomName); - searchFiltersPage.clickTypeFilterHeader(); + await searchDialog.clickOnSearchIcon(); + await searchDialog.checkSearchBarIsVisible(); + await searchDialog.enterTextAndPressEnter(randomName); + await searchFiltersPage.clickTypeFilterHeader(); - expect(searchFiltersPage.typeFiltersPage().getRadioButtonsNumberOnPage()).toBe(5); + await expect(await searchFiltersPage.typeFiltersPage().getRadioButtonsNumberOnPage()).toBe(5); - searchFiltersPage.typeFiltersPage().checkShowMoreButtonIsDisplayed(); - searchFiltersPage.typeFiltersPage().checkShowLessButtonIsNotDisplayed(); + await searchFiltersPage.typeFiltersPage().checkShowMoreButtonIsDisplayed(); + await searchFiltersPage.typeFiltersPage().checkShowLessButtonIsNotDisplayed(); - searchFiltersPage.typeFiltersPage().clickShowMoreButton(); + await searchFiltersPage.typeFiltersPage().clickShowMoreButton(); - expect(searchFiltersPage.typeFiltersPage().getRadioButtonsNumberOnPage()).toBe(10); + await expect(await searchFiltersPage.typeFiltersPage().getRadioButtonsNumberOnPage()).toBe(10); - searchFiltersPage.typeFiltersPage().checkShowMoreButtonIsNotDisplayed(); - searchFiltersPage.typeFiltersPage().checkShowLessButtonIsDisplayed(); + await searchFiltersPage.typeFiltersPage().checkShowMoreButtonIsNotDisplayed(); + await searchFiltersPage.typeFiltersPage().checkShowLessButtonIsDisplayed(); - searchFiltersPage.typeFiltersPage().clickShowLessButton(); + await searchFiltersPage.typeFiltersPage().clickShowLessButton(); - expect(searchFiltersPage.typeFiltersPage().getRadioButtonsNumberOnPage()).toBe(5); + await expect(await searchFiltersPage.typeFiltersPage().getRadioButtonsNumberOnPage()).toBe(5); - searchFiltersPage.typeFiltersPage().checkShowMoreButtonIsDisplayed(); - searchFiltersPage.typeFiltersPage().checkShowLessButtonIsNotDisplayed(); + await searchFiltersPage.typeFiltersPage().checkShowMoreButtonIsDisplayed(); + await searchFiltersPage.typeFiltersPage().checkShowLessButtonIsNotDisplayed(); - navigationBarPage.clickContentServicesButton(); + await navigationBarPage.clickContentServicesButton(); delete jsonFile.categories[5].component.settings.pageSize; await LocalStorageUtil.setConfigField('search', JSON.stringify(jsonFile)); - searchDialog.clickOnSearchIcon().checkSearchBarIsVisible().enterTextAndPressEnter(randomName); - searchFiltersPage.clickTypeFilterHeader(); + await searchDialog.clickOnSearchIcon(); + await searchDialog.checkSearchBarIsVisible(); + await searchDialog.enterTextAndPressEnter(randomName); + await searchFiltersPage.clickTypeFilterHeader(); - expect(searchFiltersPage.typeFiltersPage().getRadioButtonsNumberOnPage()).toBe(5); + await expect(await searchFiltersPage.typeFiltersPage().getRadioButtonsNumberOnPage()).toBe(5); - searchFiltersPage.typeFiltersPage().checkShowMoreButtonIsDisplayed(); - searchFiltersPage.typeFiltersPage().checkShowLessButtonIsNotDisplayed(); + await searchFiltersPage.typeFiltersPage().checkShowMoreButtonIsDisplayed(); + await searchFiltersPage.typeFiltersPage().checkShowLessButtonIsNotDisplayed(); - searchFiltersPage.typeFiltersPage().clickShowMoreButton(); + await searchFiltersPage.typeFiltersPage().clickShowMoreButton(); - expect(searchFiltersPage.typeFiltersPage().getRadioButtonsNumberOnPage()).toBe(10); + await expect(await searchFiltersPage.typeFiltersPage().getRadioButtonsNumberOnPage()).toBe(10); - searchFiltersPage.typeFiltersPage().checkShowMoreButtonIsNotDisplayed(); - searchFiltersPage.typeFiltersPage().checkShowLessButtonIsDisplayed(); + await searchFiltersPage.typeFiltersPage().checkShowMoreButtonIsNotDisplayed(); + await searchFiltersPage.typeFiltersPage().checkShowLessButtonIsDisplayed(); - searchFiltersPage.typeFiltersPage().clickShowLessButton(); + await searchFiltersPage.typeFiltersPage().clickShowLessButton(); - expect(searchFiltersPage.typeFiltersPage().getRadioButtonsNumberOnPage()).toBe(5); + await expect(await searchFiltersPage.typeFiltersPage().getRadioButtonsNumberOnPage()).toBe(5); - searchFiltersPage.typeFiltersPage().checkShowMoreButtonIsDisplayed(); - searchFiltersPage.typeFiltersPage().checkShowLessButtonIsNotDisplayed(); + await searchFiltersPage.typeFiltersPage().checkShowMoreButtonIsDisplayed(); + await searchFiltersPage.typeFiltersPage().checkShowLessButtonIsNotDisplayed(); }); }); @@ -253,14 +261,13 @@ describe('Search Radio Component', () => { jsonFile = SearchConfiguration.getConfiguration(); }); - beforeAll(async (done) => { + beforeAll(async () => { await loginPage.loginToContentServicesUsingUserModel(acsUser); - done(); }); it('[C277033] Should be able to add a new option', async () => { - navigationBarPage.clickContentServicesButton(); + await navigationBarPage.clickContentServicesButton(); jsonFile.categories[5].component.settings.options.push({ 'name': filterType.custom, @@ -269,20 +276,22 @@ describe('Search Radio Component', () => { await LocalStorageUtil.setConfigField('search', JSON.stringify(jsonFile)); - searchDialog.clickOnSearchIcon().checkSearchBarIsVisible().enterTextAndPressEnter(randomName); - searchFiltersPage.clickTypeFilterHeader(); + await searchDialog.clickOnSearchIcon(); + await searchDialog.checkSearchBarIsVisible(); + await searchDialog.enterTextAndPressEnter(randomName); + await searchFiltersPage.clickTypeFilterHeader(); - searchFiltersPage.typeFiltersPage().checkFilterRadioButtonIsDisplayed(filterType.none); - searchFiltersPage.typeFiltersPage().checkFilterRadioButtonIsDisplayed(filterType.all); - searchFiltersPage.typeFiltersPage().checkFilterRadioButtonIsDisplayed(filterType.folder); - searchFiltersPage.typeFiltersPage().checkFilterRadioButtonIsDisplayed(filterType.document); - searchFiltersPage.typeFiltersPage().checkFilterRadioButtonIsDisplayed(filterType.custom); - searchFiltersPage.typeFiltersPage().checkFilterRadioButtonIsChecked(filterType.none); + await searchFiltersPage.typeFiltersPage().checkFilterRadioButtonIsDisplayed(filterType.none); + await searchFiltersPage.typeFiltersPage().checkFilterRadioButtonIsDisplayed(filterType.all); + await searchFiltersPage.typeFiltersPage().checkFilterRadioButtonIsDisplayed(filterType.folder); + await searchFiltersPage.typeFiltersPage().checkFilterRadioButtonIsDisplayed(filterType.document); + await searchFiltersPage.typeFiltersPage().checkFilterRadioButtonIsDisplayed(filterType.custom); + await searchFiltersPage.typeFiltersPage().checkFilterRadioButtonIsChecked(filterType.none); - searchFiltersPage.typeFiltersPage().clickFilterRadioButton(filterType.custom); + await searchFiltersPage.typeFiltersPage().clickFilterRadioButton(filterType.custom); - searchResults.checkContentIsDisplayed(nodeNames.document); - searchResults.checkContentIsNotDisplayed(nodeNames.folder); + await searchResults.checkContentIsDisplayed(nodeNames.document); + await searchResults.checkContentIsNotDisplayed(nodeNames.folder); }); }); diff --git a/e2e/search/components/search-slider.e2e.ts b/e2e/search/components/search-slider.e2e.ts index 9d59bbf40e..4c333e9c7f 100644 --- a/e2e/search/components/search-slider.e2e.ts +++ b/e2e/search/components/search-slider.e2e.ts @@ -27,7 +27,7 @@ import { browser } from 'protractor'; import resources = require('../../util/resources'); import { SearchConfiguration } from '../search.config'; -describe('Search Number Range Filter', () => { +describe('Search Slider Filter', () => { const loginPage = new LoginPage(); const searchDialog = new SearchDialog(); @@ -51,7 +51,7 @@ describe('Search Number Range Filter', () => { }); const uploadActions = new UploadActions(this.alfrescoJsApi); - beforeAll(async (done) => { + beforeAll(async () => { await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); @@ -60,18 +60,17 @@ describe('Search Number Range Filter', () => { await this.alfrescoJsApi.login(acsUser.id, acsUser.password); file2Bytes = await uploadActions.uploadFile(file2BytesModel.location, file2BytesModel.name, '-my-'); - await browser.driver.sleep(15000); + await browser.sleep(15000); - loginPage.loginToContentServices(acsUser.id, acsUser.password); + await loginPage.loginToContentServices(acsUser.id, acsUser.password); - searchDialog.checkSearchIconIsVisible() - .clickOnSearchIcon() - .enterTextAndPressEnter('*'); + await searchDialog.checkSearchIconIsVisible(); + await searchDialog.clickOnSearchIcon(); + await searchDialog.enterTextAndPressEnter('*'); - done(); }); - afterAll(async (done) => { + afterAll(async () => { try { await this.alfrescoJsApi.login(acsUser.id, acsUser.password); await uploadActions.deleteFileOrFolder(file2Bytes.entry.id); @@ -80,169 +79,162 @@ describe('Search Number Range Filter', () => { await navigationBarPage.clickLogoutButton(); - done(); }); - beforeEach(() => { - searchFilters.checkSizeSliderFilterIsDisplayed() - .clickSizeSliderFilterHeader() - .checkSizeSliderFilterIsExpanded(); - }); - - afterEach(async (done) => { + afterEach(async () => { await browser.refresh(); - done(); }); - it('[C276970] Should be able to expand/collapse Search Size Slider', () => { - searchFilters.checkSizeSliderFilterIsExpanded() - .clickSizeSliderFilterHeader(); - sizeSliderFilter.checkSliderIsDisplayed() - .checkClearButtonIsDisplayed() - .checkClearButtonIsEnabled(); - searchFilters.checkSizeSliderFilterIsCollapsed(); + it('[C276970] Should be able to expand/collapse Search Size Slider', async () => { + await searchFilters.checkSizeSliderFilterIsDisplayed(); + await searchFilters.clickSizeSliderFilterHeader(); + await sizeSliderFilter.checkSliderIsDisplayed(); + await sizeSliderFilter.checkClearButtonIsDisplayed(); + await sizeSliderFilter.checkClearButtonIsEnabled(); + await searchFilters.clickSizeSliderFilterHeader(); + await searchFilters.checkSizeSliderFilterIsCollapsed(); + await sizeSliderFilter.checkSliderIsNotDisplayed(); + await sizeSliderFilter.checkClearButtonIsNotDisplayed(); }); - it('[C276972] Should be keep value when Search Size Slider is collapsed', () => { + it('[C276972] Should be keep value when Search Size Slider is collapsed', async () => { const size = 5; - sizeSliderFilter.checkSliderIsDisplayed().setValue(size); - searchFilters.clickSizeSliderFilterHeader() - .checkSizeSliderFilterIsCollapsed() - .clickSizeSliderFilterHeader() - .checkSizeSliderFilterIsExpanded() - .checkSizeSliderFilterIsDisplayed(); - expect(sizeSliderFilter.getValue()).toEqual(`${size}`); + + await searchFilters.checkSizeSliderFilterIsDisplayed(); + await searchFilters.clickSizeSliderFilterHeader(); + await sizeSliderFilter.checkSliderIsDisplayed(); + await sizeSliderFilter.setValue(size); + await searchFilters.clickSizeSliderFilterHeader(); + await searchFilters.checkSizeSliderFilterIsCollapsed(); + await searchFilters.clickSizeSliderFilterHeader(); + await searchFilters.checkSizeSliderFilterIsExpanded(); + await searchFilters.checkSizeSliderFilterIsDisplayed(); + + await expect(await sizeSliderFilter.getValue()).toEqual(`${size}`); }); - it('[C276981] Should be able to clear value in Search Size Slider', () => { + it('[C276981] Should be able to clear value in Search Size Slider', async () => { const size = 5; - sizeSliderFilter.checkSliderIsDisplayed().setValue(size); - searchResults.sortBySize('DESC') - .tableIsLoaded(); - browser.controlFlow().execute(async () => { - const results = await dataTable.geCellElementDetail('Size'); - for (const currentResult of results) { - try { - const currentSize = await currentResult.getAttribute('title'); - if (currentSize && currentSize.trim() !== '') { - await expect(parseInt(currentSize, 10) <= 5000).toBe(true); - } - } catch (e) { + await searchFilters.checkSizeSliderFilterIsDisplayed(); + await searchFilters.clickSizeSliderFilterHeader(); + await sizeSliderFilter.checkSliderIsDisplayed(); + await sizeSliderFilter.setValue(size); + await searchResults.sortBySize('DESC'); + await searchResults.tableIsLoaded(); + + const results: any = dataTable.geCellElementDetail('Size'); + for (const currentResult of results) { + try { + const currentSize = await currentResult.getAttribute('title'); + if (currentSize && currentSize.trim() !== '') { + await expect(parseInt(currentSize, 10) <= 5000).toBe(true); } + } catch (e) { } - }); + } - sizeSliderFilter.checkSliderIsDisplayed() - .clickClearButton(); + await sizeSliderFilter.checkSliderIsDisplayed(); + await sizeSliderFilter.clickClearButton(); - searchResults.sortBySize('DESC') - .tableIsLoaded(); + await searchResults.sortBySize('DESC'); + await searchResults.tableIsLoaded(); - browser.controlFlow().execute(async () => { - const results = await dataTable.geCellElementDetail('Size'); - for (const currentResult of results) { - try { - - const currentSize = await currentResult.getAttribute('title'); - if (currentSize && currentSize.trim() !== '') { - await expect(parseInt(currentSize, 10) >= 5000).toBe(true); - } - } catch (e) { + const resultsSize: any = dataTable.geCellElementDetail('Size'); + for (const currentResult of resultsSize) { + try { + const currentSize = await currentResult.getAttribute('title'); + if (currentSize && currentSize.trim() !== '') { + await expect(parseInt(currentSize, 10) >= 5000).toBe(true); } + } catch (e) { } - }); + } }); describe('Configuration change', () => { let jsonFile; - beforeEach(() => { + beforeEach(async () => { jsonFile = SearchConfiguration.getConfiguration(); + await navigationBarPage.clickContentServicesButton(); }); it('[C276983] Should be able to disable thumb label in Search Size Slider', async () => { - navigationBarPage.clickContentServicesButton(); - jsonFile.categories[2].component.settings.thumbLabel = false; await LocalStorageUtil.setConfigField('search', JSON.stringify(jsonFile)); - searchDialog.checkSearchIconIsVisible() - .clickOnSearchIcon() - .enterTextAndPressEnter('*'); + await searchDialog.checkSearchIconIsVisible(); + await searchDialog.clickOnSearchIcon(); + await searchDialog.enterTextAndPressEnter('*'); - searchFilters.checkSizeSliderFilterIsDisplayed() - .clickSizeSliderFilterHeader() - .checkSizeSliderFilterIsExpanded(); + await searchFilters.checkSizeSliderFilterIsDisplayed(); + await searchFilters.clickSizeSliderFilterHeader(); + await searchFilters.checkSizeSliderFilterIsExpanded(); - sizeSliderFilter.checkSliderWithThumbLabelIsNotDisplayed(); + await sizeSliderFilter.checkSliderWithThumbLabelIsNotDisplayed(); }); it('[C276985] Should be able to set min value for Search Size Slider', async () => { - navigationBarPage.clickContentServicesButton(); - const minSize = 3; jsonFile.categories[2].component.settings.min = minSize; await LocalStorageUtil.setConfigField('search', JSON.stringify(jsonFile)); - searchDialog.checkSearchIconIsVisible() - .clickOnSearchIcon() - .enterTextAndPressEnter('*'); + await searchDialog.checkSearchIconIsVisible(); + await searchDialog.clickOnSearchIcon(); + await searchDialog.enterTextAndPressEnter('*'); - searchFilters.checkSizeSliderFilterIsDisplayed() - .clickSizeSliderFilterHeader() - .checkSizeSliderFilterIsExpanded(); + await searchFilters.checkSizeSliderFilterIsDisplayed(); + await searchFilters.clickSizeSliderFilterHeader(); + await searchFilters.checkSizeSliderFilterIsExpanded(); - sizeSliderFilter.checkSliderIsDisplayed(); + await sizeSliderFilter.checkSliderIsDisplayed(); - expect(sizeSliderFilter.getMinValue()).toEqual(`${minSize}`); + await expect(await sizeSliderFilter.getMinValue()).toEqual(`${minSize}`); }); it('[C276986] Should be able to set max value for Search Size Slider', async () => { - navigationBarPage.clickContentServicesButton(); - const maxSize = 50; jsonFile.categories[2].component.settings.max = maxSize; await LocalStorageUtil.setConfigField('search', JSON.stringify(jsonFile)); - searchDialog.checkSearchIconIsVisible() - .clickOnSearchIcon() - .enterTextAndPressEnter('*'); + await searchDialog.checkSearchIconIsVisible(); + await searchDialog.clickOnSearchIcon(); + await searchDialog.enterTextAndPressEnter('*'); - searchFilters.checkSizeSliderFilterIsDisplayed() - .clickSizeSliderFilterHeader() - .checkSizeSliderFilterIsExpanded(); + await searchFilters.checkSizeSliderFilterIsDisplayed(); + await searchFilters.clickSizeSliderFilterHeader(); + await searchFilters.checkSizeSliderFilterIsExpanded(); - sizeSliderFilter.checkSliderIsDisplayed(); + await sizeSliderFilter.checkSliderIsDisplayed(); - expect(sizeSliderFilter.getMaxValue()).toEqual(`${maxSize}`); + await expect(await sizeSliderFilter.getMaxValue()).toEqual(`${maxSize}`); }); it('[C276987] Should be able to set steps for Search Size Slider', async () => { - navigationBarPage.clickContentServicesButton(); - const step = 10; jsonFile.categories[2].component.settings.step = step; await LocalStorageUtil.setConfigField('search', JSON.stringify(jsonFile)); - searchDialog.checkSearchIconIsVisible() - .clickOnSearchIcon() - .enterTextAndPressEnter('*'); + await searchDialog.checkSearchIconIsVisible(); + await searchDialog.clickOnSearchIcon(); + await searchDialog.enterTextAndPressEnter('*'); - searchFilters.checkSizeSliderFilterIsDisplayed() - .clickSizeSliderFilterHeader() - .checkSizeSliderFilterIsExpanded(); + await searchFilters.checkSizeSliderFilterIsDisplayed(); + await searchFilters.clickSizeSliderFilterHeader(); + await searchFilters.checkSizeSliderFilterIsExpanded(); const randomValue = 5; - sizeSliderFilter.checkSliderIsDisplayed() - .setValue(randomValue); - expect(sizeSliderFilter.getValue()).toEqual(`0`); - sizeSliderFilter.setValue(step); - expect(sizeSliderFilter.getValue()).toEqual(`${step}`); + await sizeSliderFilter.checkSliderIsDisplayed(); + await sizeSliderFilter.setValue(randomValue); + + await expect(await sizeSliderFilter.getValue()).toEqual(`0`); + await sizeSliderFilter.setValue(step); + await expect(await sizeSliderFilter.getValue()).toEqual(`${step}`); }); }); }); diff --git a/e2e/search/components/search-sorting-picker.e2e.ts b/e2e/search/components/search-sorting-picker.e2e.ts index f748d049e1..91b8dc159c 100644 --- a/e2e/search/components/search-sorting-picker.e2e.ts +++ b/e2e/search/components/search-sorting-picker.e2e.ts @@ -15,7 +15,12 @@ * limitations under the License. */ -import { LoginPage, LocalStorageUtil, BrowserActions, SearchSortingPickerPage, UploadActions } from '@alfresco/adf-testing'; +import { + LoginPage, + LocalStorageUtil, + SearchSortingPickerPage, + UploadActions +} from '@alfresco/adf-testing'; import { SearchDialog } from '../../pages/adf/dialog/searchDialog'; import { SearchResultsPage } from '../../pages/adf/searchResultsPage'; import { NavigationBarPage } from '../../pages/adf/navigationBarPage'; @@ -59,53 +64,47 @@ describe('Search Sorting Picker', () => { const search = '_png_file.png'; let jsonFile; - beforeAll(async (done) => { + beforeAll(async () => { await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); await this.alfrescoJsApi.core.peopleApi.addPerson(acsUser); await this.alfrescoJsApi.login(acsUser.id, acsUser.password); pngA = await uploadActions.uploadFile(pngAModel.location, pngAModel.name, '-my-'); - await browser.driver.sleep(3000); pngD = await uploadActions.uploadFile(pngDModel.location, pngDModel.name, '-my-'); - await browser.driver.sleep(12000); + await browser.sleep(12000); - loginPage.loginToContentServices(acsUser.id, acsUser.password); + await loginPage.loginToContentServices(acsUser.id, acsUser.password); - done(); }); - afterAll(async (done) => { + afterAll(async () => { await uploadActions.deleteFileOrFolder(pngA.entry.id); await uploadActions.deleteFileOrFolder(pngD.entry.id); await navigationBarPage.clickLogoutButton(); - done(); }); - beforeEach(async (done) => { - searchDialog.checkSearchIconIsVisible() - .clickOnSearchIcon() - .enterTextAndPressEnter(search); - done(); + beforeEach(async () => { + await searchDialog.clickOnSearchIcon(); + await searchDialog.enterTextAndPressEnter(search); }); - afterEach(async (done) => { - await BrowserActions.getUrl(browser.params.testConfig.adf.url); - done(); + afterEach(async () => { + await navigationBarPage.clickHomeButton(); }); - it(`[C277269] Should see the "sort by" option when search results are displayed in search results page`, () => { - searchSortingPicker.checkSortingSelectorIsDisplayed(); + it(`[C277269] Should see the "sort by" option when search results are displayed in search results page`, async () => { + await searchSortingPicker.checkSortingSelectorIsDisplayed(); }); - it(`[C277270] Should see the icon for ASC and DESC sort when search results are displayed in the search results page`, () => { - searchSortingPicker.checkOrderArrowIsDisplayed(); + it(`[C277270] Should see the icon for ASC and DESC sort when search results are displayed in the search results page`, async () => { + await searchSortingPicker.checkOrderArrowIsDisplayed(); }); it('[C277271] Should be able to add a custom search sorter in the "sort by" option', async () => { - navigationBarPage.clickContentServicesButton(); + await navigationBarPage.clickContentServicesButton(); jsonFile = SearchConfiguration.getConfiguration(); jsonFile.sorting.options.push({ 'key': 'Modifier', @@ -116,34 +115,34 @@ describe('Search Sorting Picker', () => { }); await LocalStorageUtil.setConfigField('search', JSON.stringify(jsonFile)); - searchDialog.checkSearchIconIsVisible() - .clickOnSearchIcon() - .enterTextAndPressEnter(search); + await searchDialog.checkSearchIconIsVisible(); + await searchDialog.clickOnSearchIcon(); + await searchDialog.enterTextAndPressEnter(search); - searchSortingPicker.checkSortingSelectorIsDisplayed() - .clickSortingSelector() - .checkOptionsDropdownIsDisplayed() - .checkOptionIsDisplayed('Modifier'); + await searchSortingPicker.checkSortingSelectorIsDisplayed(); + await searchSortingPicker.clickSortingSelector(); + await searchSortingPicker.checkOptionsDropdownIsDisplayed(); + await searchSortingPicker.checkOptionIsDisplayed('Modifier'); }); it('[C277272] Should be able to exclude a standard search sorter from the sorting option', async () => { - navigationBarPage.clickContentServicesButton(); + await navigationBarPage.clickContentServicesButton(); jsonFile = SearchConfiguration.getConfiguration(); const removedOption = jsonFile.sorting.options.splice(0, 1); await LocalStorageUtil.setConfigField('search', JSON.stringify(jsonFile)); - searchDialog.checkSearchIconIsVisible() - .clickOnSearchIcon() - .enterTextAndPressEnter(search); + await searchDialog.checkSearchIconIsVisible(); + await searchDialog.clickOnSearchIcon(); + await searchDialog.enterTextAndPressEnter(search); - searchSortingPicker.checkSortingSelectorIsDisplayed() - .clickSortingSelector() - .checkOptionsDropdownIsDisplayed() - .checkOptionIsNotDisplayed(removedOption[0].label); + await searchSortingPicker.checkSortingSelectorIsDisplayed(); + await searchSortingPicker.clickSortingSelector(); + await searchSortingPicker.checkOptionsDropdownIsDisplayed(); + await searchSortingPicker.checkOptionIsNotDisplayed(removedOption[0].label); }); it('[C277273] Should be able to set a default order for a search sorting option', async () => { - navigationBarPage.clickContentServicesButton(); + await navigationBarPage.clickContentServicesButton(); jsonFile = SearchConfiguration.getConfiguration(); jsonFile.sorting.options[0].ascending = false; @@ -157,50 +156,46 @@ describe('Search Sorting Picker', () => { await LocalStorageUtil.setConfigField('search', JSON.stringify(jsonFile)); - searchDialog.checkSearchIconIsVisible() - .clickOnSearchIcon() - .enterTextAndPressEnter(search); + await searchDialog.checkSearchIconIsVisible(); + await searchDialog.clickOnSearchIcon(); + await searchDialog.enterTextAndPressEnter(search); - searchSortingPicker.checkSortingSelectorIsDisplayed() - .clickSortingSelector() - .checkOptionIsDisplayed('Name') - .clickSortingOption('Name'); - expect(searchSortingPicker.checkOrderArrowIsDownward()).toBe(true); + await searchSortingPicker.checkSortingSelectorIsDisplayed(); + await searchSortingPicker.clickSortingSelector(); + await searchSortingPicker.checkOptionIsDisplayed('Name'); + await searchSortingPicker.clickSortingOption('Name'); + await expect(await searchSortingPicker.checkOrderArrowIsDownward()).toBe(true); }); - it('[C277280] Should be able to sort the search results by "Name" ASC', () => { - searchFilters.checkSearchFiltersIsDisplayed(); - searchFilters.creatorCheckListFiltersPage().filterBy(`${acsUser.firstName} ${acsUser.lastName}`); - searchResults.sortByName('ASC'); + it('[C277280] Should be able to sort the search results by "Name" ASC', async () => { + await searchFilters.checkSearchFiltersIsDisplayed(); + await searchFilters.creatorCheckListFiltersPage().filterBy(`${acsUser.firstName} ${acsUser.lastName}`); + await searchResults.sortByName('ASC'); - expect(searchResults.checkListIsOrderedByNameAsc()).toBe(true); + await expect(await searchResults.checkListIsOrderedByNameAsc()).toBe(true); }); - it('[C277281] Should be able to sort the search results by "Name" DESC', () => { - searchFilters.checkSearchFiltersIsDisplayed(); - searchFilters.creatorCheckListFiltersPage().filterBy(`${acsUser.firstName} ${acsUser.lastName}`); - searchResults.sortByName('DESC'); - expect(searchResults.checkListIsOrderedByNameDesc()).toBe(true); + it('[C277281] Should be able to sort the search results by "Name" DESC', async () => { + await searchFilters.checkSearchFiltersIsDisplayed(); + await searchFilters.creatorCheckListFiltersPage().filterBy(`${acsUser.firstName} ${acsUser.lastName}`); + await searchResults.sortByName('DESC'); + await expect(await searchResults.checkListIsOrderedByNameDesc()).toBe(true); }); - it('[C277286] Should be able to sort the search results by "Created Date" ASC', () => { - searchResults.sortByCreated('ASC'); - browser.controlFlow().execute(async () => { - const results = await searchResults.dataTable.geCellElementDetail('Created'); - expect(contentServices.checkElementsDateSortedAsc(results)).toBe(true); - }); + it('[C277286] Should be able to sort the search results by "Created Date" ASC', async () => { + await searchResults.sortByCreated('ASC'); + const results: any = searchResults.dataTable.geCellElementDetail('Created'); + await expect(contentServices.checkElementsDateSortedAsc(results)).toBe(true); }); - it('[C277287] Should be able to sort the search results by "Created Date" DESC', () => { - searchResults.sortByCreated('DESC'); - browser.controlFlow().execute(async () => { - const results = await searchResults.dataTable.geCellElementDetail('Created'); - expect(contentServices.checkElementsDateSortedDesc(results)).toBe(true); - }); + it('[C277287] Should be able to sort the search results by "Created Date" DESC', async () => { + await searchResults.sortByCreated('DESC'); + const results = searchResults.dataTable.geCellElementDetail('Created'); + await expect(contentServices.checkElementsDateSortedDesc(results)).toBe(true); }); it('[C277288] Should be able to sort the search results by "Modified Date" ASC', async () => { - navigationBarPage.clickContentServicesButton(); + await navigationBarPage.clickContentServicesButton(); jsonFile = SearchConfiguration.getConfiguration(); jsonFile.sorting.options.push({ @@ -212,24 +207,22 @@ describe('Search Sorting Picker', () => { }); await LocalStorageUtil.setConfigField('search', JSON.stringify(jsonFile)); - searchDialog.checkSearchIconIsVisible() - .clickOnSearchIcon() - .enterTextAndPressEnter(search); + await searchDialog.checkSearchIconIsVisible(); + await searchDialog.clickOnSearchIcon(); + await searchDialog.enterTextAndPressEnter(search); - searchSortingPicker.checkSortingSelectorIsDisplayed() - .sortBy('ASC', 'Modified Date'); + await searchSortingPicker.checkSortingSelectorIsDisplayed(); + await searchSortingPicker.sortBy('ASC', 'Modified Date'); - browser.controlFlow().execute(async () => { - const idList = await contentServices.getElementsDisplayedId(); - const numberOfElements = await contentServices.numberOfResultsDisplayed(); + const idList = await contentServices.getElementsDisplayedId(); + const numberOfElements = await contentServices.numberOfResultsDisplayed(); - const nodeList = await nodeActions.getNodesDisplayed(this.alfrescoJsApi, idList, numberOfElements); - const modifiedDateList = []; - for (let i = 0; i < nodeList.length; i++) { - modifiedDateList.push(new Date(nodeList[i].entry.modifiedAt)); - } - expect(contentServices.checkElementsDateSortedAsc(modifiedDateList)).toBe(true); - }); + const nodeList = await nodeActions.getNodesDisplayed(this.alfrescoJsApi, idList, numberOfElements); + const modifiedDateList = []; + for (let i = 0; i < nodeList.length; i++) { + modifiedDateList.push(new Date(nodeList[i].entry.modifiedAt)); + } + await expect(contentServices.checkElementsDateSortedAsc(modifiedDateList)).toBe(true); }); }); diff --git a/e2e/search/components/search-text.e2e.ts b/e2e/search/components/search-text.e2e.ts index 475849b97c..9cd0ddb3b2 100644 --- a/e2e/search/components/search-text.e2e.ts +++ b/e2e/search/components/search-text.e2e.ts @@ -42,7 +42,7 @@ describe('Search component - Text widget', () => { const acsUser = new AcsUserModel(); const newFolderModel = new FolderModel({ 'name': 'newFolder', 'description': 'newDescription' }); - beforeAll(async (done) => { + beforeAll(async () => { this.alfrescoJsApi = new AlfrescoApi({ provider: 'ECM', @@ -64,66 +64,66 @@ describe('Search component - Text widget', () => { } }, {}, {}); - await browser.driver.sleep(15000); + await browser.sleep(15000); await loginPage.loginToContentServicesUsingUserModel(acsUser); - done(); }); afterAll(async () => { await navigationBarPage.clickLogoutButton(); }); - it('[C289329] Placeholder should be displayed in the widget when the input string is empty', () => { - BrowserActions.getUrl(browser.params.testConfig.adf.url + '/search;q=*'); - searchResultPage.tableIsLoaded(); + it('[C289329] Placeholder should be displayed in the widget when the input string is empty', async () => { + await BrowserActions.getUrl(browser.params.testConfig.adf.url + '/search;q=*'); + await searchResultPage.tableIsLoaded(); - searchFiltersPage.checkNameFilterIsDisplayed(); - expect(searchFiltersPage.textFiltersPage().getNamePlaceholder()).toEqual('Enter the name'); + await searchFiltersPage.checkNameFilterIsDisplayed(); + await expect(await searchFiltersPage.textFiltersPage().getNamePlaceholder()).toEqual('Enter the name'); }); describe('configuration change', () => { let jsonFile; - beforeAll(() => { + beforeAll(async () => { jsonFile = SearchConfiguration.getConfiguration(); }); it('[C289330] Should be able to change the Field setting', async () => { - BrowserActions.getUrl(browser.params.testConfig.adf.url + '/search;q=*'); - searchResultPage.tableIsLoaded(); + await BrowserActions.getUrl(browser.params.testConfig.adf.url + '/search;q=*'); + await searchResultPage.tableIsLoaded(); - searchFiltersPage.checkCheckListFilterIsDisplayed(); - searchFiltersPage.clickCheckListFilter(); - searchFiltersPage.checkListFiltersPage().clickCheckListOption('Folder'); + await searchFiltersPage.checkCheckListFilterIsDisplayed(); + await searchFiltersPage.clickCheckListFilter(); + await searchFiltersPage.checkListFiltersPage().clickCheckListOption('Folder'); - searchFiltersPage.checkNameFilterIsDisplayed(); - searchFiltersPage.textFiltersPage().searchByName(newFolderModel.name); - searchResultPage.checkContentIsDisplayed(newFolderModel.name); + await searchFiltersPage.checkNameFilterIsDisplayed(); + await searchFiltersPage.textFiltersPage().searchByName(newFolderModel.name); + await searchResultPage.checkContentIsDisplayed(newFolderModel.name); - searchFiltersPage.textFiltersPage().searchByName(newFolderModel.description); - searchResultPage.checkContentIsNotDisplayed(newFolderModel.name); + await searchFiltersPage.textFiltersPage().searchByName(newFolderModel.description); + await searchResultPage.checkContentIsNotDisplayed(newFolderModel.name); jsonFile.categories[0].component.settings.field = 'cm:description'; - navigationBarPage.clickContentServicesButton(); + await navigationBarPage.clickContentServicesButton(); await LocalStorageUtil.setConfigField('search', JSON.stringify(jsonFile)); - searchDialog.clickOnSearchIcon().enterTextAndPressEnter('*'); - searchResultPage.tableIsLoaded(); + await searchDialog.clickOnSearchIcon(); + await searchDialog.enterTextAndPressEnter('*'); + await searchResultPage.tableIsLoaded(); - searchFiltersPage.checkCheckListFilterIsDisplayed(); - searchFiltersPage.clickCheckListFilter(); - searchFiltersPage.checkListFiltersPage().clickCheckListOption('Folder'); + await searchFiltersPage.checkCheckListFilterIsDisplayed(); + await searchFiltersPage.clickCheckListFilter(); + await searchFiltersPage.checkListFiltersPage().clickCheckListOption('Folder'); - searchFiltersPage.checkNameFilterIsDisplayed(); - searchFiltersPage.textFiltersPage().searchByName(newFolderModel.name); - searchResultPage.checkContentIsNotDisplayed(newFolderModel.name); + await searchFiltersPage.checkNameFilterIsDisplayed(); + await searchFiltersPage.textFiltersPage().searchByName(newFolderModel.name); + await searchResultPage.checkContentIsNotDisplayed(newFolderModel.name); - searchFiltersPage.textFiltersPage().searchByName(newFolderModel.description); - searchResultPage.checkContentIsDisplayed(newFolderModel.name); + await searchFiltersPage.textFiltersPage().searchByName(newFolderModel.description); + await searchResultPage.checkContentIsDisplayed(newFolderModel.name); }); }); }); diff --git a/e2e/search/search-component.e2e.ts b/e2e/search/search-component.e2e.ts index d41de82253..a4bf0fdd9c 100644 --- a/e2e/search/search-component.e2e.ts +++ b/e2e/search/search-component.e2e.ts @@ -79,7 +79,7 @@ describe('Search component - Search Bar', () => { let fileHighlightUploaded; - beforeAll(async (done) => { + beforeAll(async () => { await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); await this.alfrescoJsApi.core.peopleApi.addPerson(acsUser); @@ -103,178 +103,161 @@ describe('Search component - Search Bar', () => { filesToDelete.push(await uploadActions.createFolder(secondFolder.name, '-my-')); filesToDelete.push(await uploadActions.createFolder(thirdFolder.name, '-my-')); - await browser.driver.sleep(15000); // wait search index previous file/folder uploaded + await browser.sleep(15000); // wait search index previous file/folder uploaded await loginPage.loginToContentServicesUsingUserModel(acsUser); - done(); }); - afterAll(async (done) => { - - filesToDelete.forEach(async (currentNode) => { + afterAll(async () => { + for (const currentNode of filesToDelete) { await uploadActions.deleteFileOrFolder(currentNode.entry.id); - }); + } await navigationBarPage.clickLogoutButton(); - - done(); }); - afterEach(async (done) => { + afterEach(async () => { await BrowserActions.getUrl(browser.params.testConfig.adf.url); - done(); + }); - it('[C272798] Search bar should be visible', () => { - searchDialog - .checkSearchBarIsNotVisible() - .checkSearchIconIsVisible(); + it('[C272798] Search bar should be visible', async () => { + await searchDialog.checkSearchBarIsNotVisible(); + await searchDialog.checkSearchIconIsVisible(); - searchDialog - .clickOnSearchIcon() - .checkSearchBarIsVisible() - .checkSearchIconIsVisible(); + await searchDialog.clickOnSearchIcon(); + await searchDialog.checkSearchBarIsVisible(); + await searchDialog.checkSearchIconIsVisible(); - BrowserActions.closeMenuAndDialogs(); + await BrowserActions.closeMenuAndDialogs(); - searchDialog - .checkSearchBarIsNotVisible() - .checkSearchIconIsVisible(); + await searchDialog.checkSearchBarIsNotVisible(); + await searchDialog.checkSearchIconIsVisible(); }); - it('[C272799] Should be possible to hide search bar after input', () => { - searchDialog - .checkSearchIconIsVisible() - .clickOnSearchIcon() - .enterText(firstFolderModel.shortName); + it('[C272799] Should be possible to hide search bar after input', async () => { + await searchDialog.checkSearchIconIsVisible(); + await searchDialog.clickOnSearchIcon(); + await searchDialog.enterText(firstFolderModel.shortName); }); - it('[C260255] Should display message when searching for an inexistent file', () => { - searchDialog - .checkSearchBarIsNotVisible() - .clickOnSearchIcon() - .checkNoResultMessageIsNotDisplayed() - .enterText(search.inactive.name) - .checkNoResultMessageIsDisplayed(); + it('[C260255] Should display message when searching for an inexistent file', async () => { + await searchDialog.checkSearchBarIsNotVisible(); + await searchDialog.clickOnSearchIcon(); + await searchDialog.checkNoResultMessageIsNotDisplayed(); + await searchDialog.enterText(search.inactive.name); + await searchDialog.checkNoResultMessageIsDisplayed(); }); - it('[C260256] Should display file/folder in search suggestion when typing first characters', () => { - searchDialog - .clickOnSearchIcon() - .checkSearchBarIsVisible() - .enterText(firstFolderModel.shortName); + it('[C260256] Should display file/folder in search suggestion when typing first characters', async () => { + await searchDialog.clickOnSearchIcon(); + await searchDialog.checkSearchBarIsVisible(); + await searchDialog.enterText(firstFolderModel.shortName); - searchDialog.resultTableContainsRow(firstFolderModel.name); + await searchDialog.resultTableContainsRow(firstFolderModel.name); - expect(searchDialog.getSpecificRowsHighlightName(firstFolderModel.name)).toEqual(firstFolderModel.shortName); - expect(searchDialog.getSpecificRowsAuthor(firstFolderModel.name)).toEqual(acsUser.firstName + ' ' + acsUser.lastName); - expect(searchDialog.getSpecificRowsCompleteName(firstFolderModel.name)).toEqual(firstFolderModel.name); + await expect(await searchDialog.getSpecificRowsHighlightName(firstFolderModel.name)).toEqual(firstFolderModel.shortName); + await expect(await searchDialog.getSpecificRowsAuthor(firstFolderModel.name)).toEqual(acsUser.firstName + ' ' + acsUser.lastName); + await expect(await searchDialog.getSpecificRowsCompleteName(firstFolderModel.name)).toEqual(firstFolderModel.name); - searchDialog.clearText(); + await searchDialog.clearText(); - searchDialog.clickOnSearchIcon().enterText(firstFileModel.shortName); - searchDialog.resultTableContainsRow(firstFileModel.name); + await searchDialog.clickOnSearchIcon(); + await searchDialog.enterText(firstFileModel.shortName); + await searchDialog.resultTableContainsRow(firstFileModel.name); - expect(searchDialog.getSpecificRowsHighlightName(firstFileModel.name)).toEqual(firstFileModel.shortName); - expect(searchDialog.getSpecificRowsAuthor(firstFileModel.name)).toEqual(acsUser.firstName + ' ' + acsUser.lastName); + await expect(await searchDialog.getSpecificRowsHighlightName(firstFileModel.name)).toEqual(firstFileModel.shortName); + await expect(await searchDialog.getSpecificRowsAuthor(firstFileModel.name)).toEqual(acsUser.firstName + ' ' + acsUser.lastName); - expect(searchDialog.getSpecificRowsCompleteName(firstFileModel.name)).toEqual(firstFileModel.name); + await expect(await searchDialog.getSpecificRowsCompleteName(firstFileModel.name)).toEqual(firstFileModel.name); }); - it('[C272800] Should display file/folder in search suggestion when typing name', () => { - searchDialog - .clickOnSearchIcon() - .checkSearchBarIsVisible() - .enterText(firstFolderModel.name); + it('[C272800] Should display file/folder in search suggestion when typing name', async () => { + await searchDialog.clickOnSearchIcon(); + await searchDialog.checkSearchBarIsVisible(); + await searchDialog.enterText(firstFolderModel.name); - searchDialog.resultTableContainsRow(firstFolderModel.name); + await searchDialog.resultTableContainsRow(firstFolderModel.name); - expect(searchDialog.getSpecificRowsHighlightName(firstFolderModel.name)).toEqual(firstFolderModel.name); - expect(searchDialog.getSpecificRowsAuthor(firstFolderModel.name)).toEqual(acsUser.firstName + ' ' + acsUser.lastName); - expect(searchDialog.getSpecificRowsCompleteName(firstFolderModel.name)).toEqual(firstFolderModel.name); + await expect(await searchDialog.getSpecificRowsHighlightName(firstFolderModel.name)).toEqual(firstFolderModel.name); + await expect(await searchDialog.getSpecificRowsAuthor(firstFolderModel.name)).toEqual(acsUser.firstName + ' ' + acsUser.lastName); + await expect(await searchDialog.getSpecificRowsCompleteName(firstFolderModel.name)).toEqual(firstFolderModel.name); - searchDialog.clearText(); + await searchDialog.clearText(); - searchDialog.clickOnSearchIcon().enterText(firstFileModel.name); - searchDialog.resultTableContainsRow(firstFileModel.name); + await searchDialog.clickOnSearchIcon(); + await searchDialog.enterText(firstFileModel.name); + await searchDialog.resultTableContainsRow(firstFileModel.name); - expect(searchDialog.getSpecificRowsHighlightName(firstFileModel.name)).toEqual(firstFileModel.name); - expect(searchDialog.getSpecificRowsAuthor(firstFileModel.name)).toEqual(acsUser.firstName + ' ' + acsUser.lastName); - expect(searchDialog.getSpecificRowsCompleteName(firstFileModel.name)).toEqual(firstFileModel.name); + await expect(await searchDialog.getSpecificRowsHighlightName(firstFileModel.name)).toEqual(firstFileModel.name); + await expect(await searchDialog.getSpecificRowsAuthor(firstFileModel.name)).toEqual(acsUser.firstName + ' ' + acsUser.lastName); + await expect(await searchDialog.getSpecificRowsCompleteName(firstFileModel.name)).toEqual(firstFileModel.name); }); it('[C260257] Should display content when clicking on folder from search suggestions', async () => { - searchDialog - .clickOnSearchIcon() - .checkSearchBarIsVisible() - .enterText(firstFolderModel.shortName); + await searchDialog.clickOnSearchIcon(); + await searchDialog.checkSearchBarIsVisible(); + await searchDialog.enterText(firstFolderModel.shortName); - searchDialog.resultTableContainsRow(firstFolderModel.name); - searchDialog.clickOnSpecificRow(firstFolderModel.name); + await searchDialog.resultTableContainsRow(firstFolderModel.name); + await searchDialog.clickOnSpecificRow(firstFolderModel.name); - expect(contentServicesPage.currentFolderName()).toEqual(firstFolderModel.name); + await expect(await contentServicesPage.currentFolderName()).toEqual(firstFolderModel.name); - searchDialog - .checkSearchIconIsVisible() - .clickOnSearchIcon() - .checkSearchBarIsVisible() - .enterText(firstFileModel.name) - .resultTableContainsRow(firstFileModel.name); + await searchDialog.checkSearchIconIsVisible(); + await searchDialog.clickOnSearchIcon(); + await searchDialog.checkSearchBarIsVisible(); + await searchDialog.enterText(firstFileModel.name); + await searchDialog.resultTableContainsRow(firstFileModel.name); - searchDialog.clickOnSpecificRow(firstFileModel.name); - expect(await viewerPage.getDisplayedFileName()).toEqual(firstFileModel.name); + await searchDialog.clickOnSpecificRow(firstFileModel.name); + await expect(await viewerPage.getDisplayedFileName()).toEqual(firstFileModel.name); - viewerPage.clickCloseButton(); + await viewerPage.clickCloseButton(); }); - it('[C272801] Should display message when searching for non-existent folder', () => { - searchDialog - .checkSearchIconIsVisible() - .clickOnSearchIcon() - .checkSearchBarIsVisible() - .enterTextAndPressEnter(search.inactive.name); + it('[C272801] Should display message when searching for non-existent folder', async () => { + await searchDialog.checkSearchIconIsVisible(); + await searchDialog.clickOnSearchIcon(); + await searchDialog.checkSearchBarIsVisible(); + await searchDialog.enterTextAndPressEnter(search.inactive.name); - searchResultPage.checkNoResultMessageIsDisplayed(); + await searchResultPage.checkNoResultMessageIsDisplayed(); }); - it('[C272802] Should be able to find an existent folder in search results', () => { - searchDialog - .checkSearchIconIsVisible() - .clickOnSearchIcon() - .checkSearchBarIsVisible() - .enterTextAndPressEnter(firstFolderModel.name); + it('[C272802] Should be able to find an existent folder in search results', async () => { + await searchDialog.checkSearchIconIsVisible(); + await searchDialog.clickOnSearchIcon(); + await searchDialog.checkSearchBarIsVisible(); + await searchDialog.enterTextAndPressEnter(firstFolderModel.name); - searchResultPage.checkContentIsDisplayed(firstFolderModel.name); + await searchResultPage.checkContentIsDisplayed(firstFolderModel.name); }); - it('[C260258] Should be able to find an existent file in search results', () => { - searchDialog - .checkSearchIconIsVisible() - .clickOnSearchIcon() - .checkSearchBarIsVisible() - .enterTextAndPressEnter(firstFileModel.name); + it('[C260258] Should be able to find an existent file in search results', async () => { + await searchDialog.checkSearchIconIsVisible(); + await searchDialog.clickOnSearchIcon(); + await searchDialog.checkSearchBarIsVisible(); + await searchDialog.enterTextAndPressEnter(firstFileModel.name); - searchResultPage.checkContentIsDisplayed(firstFileModel.name); + await searchResultPage.checkContentIsDisplayed(firstFileModel.name); }); - it('[C91321] Should be able to use down arrow key when navigating throw suggestions', () => { - searchDialog - .checkSearchIconIsVisible() - .clickOnSearchIcon() - .checkSearchBarIsVisible() - .enterText(secondFolder.shortName) - .pressDownArrowAndEnter(); + it('[C91321] Should be able to use down arrow key when navigating throw suggestions', async () => { + await searchDialog.checkSearchIconIsVisible(); + await searchDialog.clickOnSearchIcon(); + await searchDialog.checkSearchBarIsVisible(); + await searchDialog.enterText(secondFolder.shortName); + await searchDialog.pressDownArrowAndEnter(); - searchResultPage.tableIsLoaded(); - expect(contentServicesPage.currentFolderName()).toEqual(secondFolder.name); + await expect(await contentServicesPage.currentFolderName()).toEqual(secondFolder.name); }); - it('[C290137] Should be able to search by \'%\'', () => { - searchDialog - .clickOnSearchIcon() - .enterTextAndPressEnter('%'); - searchResultPage.tableIsLoaded(); + it('[C290137] Should be able to search by \'%\'', async () => { + await searchDialog.clickOnSearchIcon(); + await searchDialog.enterTextAndPressEnter('%'); + await searchResultPage.tableIsLoaded(); }); describe('Highlight', () => { @@ -282,22 +265,20 @@ describe('Search component - Search Bar', () => { const searchConfiguration = SearchConfiguration.getConfiguration(); beforeAll(async () => { - navigationBarPage.clickContentServicesButton(); + await navigationBarPage.clickContentServicesButton(); await LocalStorageUtil.setConfigField('search', JSON.stringify(searchConfiguration)); - searchDialog - .checkSearchIconIsVisible() - .clickOnSearchIcon() - .checkSearchBarIsVisible() - .enterTextAndPressEnter(term); + await searchDialog.checkSearchIconIsVisible(); + await searchDialog.clickOnSearchIcon(); + await searchDialog.checkSearchBarIsVisible(); + await searchDialog.enterTextAndPressEnter(term); }); - it('[C299212] Should be able to configure the highlight option for search results', () => { - searchResultPage.getNodeHighlight(fileHighlightUploaded.entry.name).getText().then((text) => { - expect(text.includes(`¿${term}?`)).toBe(true); - expect(text.includes(`(${term})`)).toBe(true); - }); + it('[C299212] Should be able to configure the highlight option for search results', async () => { + const text = await searchResultPage.getNodeHighlight(fileHighlightUploaded.entry.name).getText(); + await expect(text.includes(`¿${term}?`)).toBe(true); + await expect(text.includes(`(${term})`)).toBe(true); }); }); }); diff --git a/e2e/search/search-filters.e2e.ts b/e2e/search/search-filters.e2e.ts index 7fe908d7be..b3d65cb354 100644 --- a/e2e/search/search-filters.e2e.ts +++ b/e2e/search/search-filters.e2e.ts @@ -21,12 +21,19 @@ import { SearchResultsPage } from '../pages/adf/searchResultsPage'; import { AcsUserModel } from '../models/ACS/acsUserModel'; import { FileModel } from '../models/ACS/fileModel'; import { NavigationBarPage } from '../pages/adf/navigationBarPage'; -import { StringUtil, DocumentListPage, PaginationPage, LoginPage, LocalStorageUtil, UploadActions } from '@alfresco/adf-testing'; +import { + StringUtil, + DocumentListPage, + PaginationPage, + LoginPage, + LocalStorageUtil, + UploadActions, + BrowserActions +} from '@alfresco/adf-testing'; import resources = require('../util/resources'); import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; import { browser } from 'protractor'; import { SearchConfiguration } from './search.config'; -import { BrowserActions } from '../../lib/testing/src/lib/core/utils/browser-actions'; describe('Search Filters', () => { @@ -81,7 +88,7 @@ describe('Search Filters', () => { let jsonFile; - beforeAll(async (done) => { + beforeAll(async () => { await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); await this.alfrescoJsApi.core.peopleApi.addPerson(acsUser); @@ -89,28 +96,19 @@ describe('Search Filters', () => { await this.alfrescoJsApi.login(acsUser.id, acsUser.password); fileUploaded = await uploadActions.uploadFile(fileModel.location, fileModel.name, '-my-'); - fileTypePng = await uploadActions.uploadFile(pngFileModel.location, pngFileModel.name, '-my-'); - fileTypeTxt1 = await uploadActions.uploadFile(txtFileModel1.location, txtFileModel1.name, '-my-'); - fileTypeJpg = await uploadActions.uploadFile(jpgFileModel.location, jpgFileModel.name, '-my-'); - fileTypeTxt2 = await uploadActions.uploadFile(txtFileModel2.location, txtFileModel2.name, '-my-'); await loginPage.loginToContentServicesUsingUserModel(acsUser); - await browser.driver.sleep(15000); // wait search index previous file/folder uploaded - - searchDialog.checkSearchIconIsVisible(); - searchDialog.clickOnSearchIcon(); + await browser.sleep(15000); // wait search index previous file/folder uploaded jsonFile = SearchConfiguration.getConfiguration(); - - done(); }); - afterAll(async (done) => { + afterAll(async () => { await this.alfrescoJsApi.login(acsUser.id, acsUser.password); await uploadActions.deleteFileOrFolder(fileUploaded.entry.id); @@ -119,153 +117,158 @@ describe('Search Filters', () => { await uploadActions.deleteFileOrFolder(fileTypeTxt2.entry.id); await uploadActions.deleteFileOrFolder(fileTypeJpg.entry.id); await navigationBarPage.clickLogoutButton(); - - done(); }); - it('[C286298] Should be able to cancel a filter using "x" button from the toolbar', () => { - searchDialog.enterTextAndPressEnter(fileUploaded.entry.name); + it('[C286298] Should be able to cancel a filter using "x" button from the toolbar', async () => { + await searchDialog.checkSearchIconIsVisible(); + await searchDialog.clickOnSearchIcon(); + await searchDialog.enterTextAndPressEnter(fileUploaded.entry.name); - searchFiltersPage.checkSearchFiltersIsDisplayed(); + await searchFiltersPage.checkSearchFiltersIsDisplayed(); const userOption = `${acsUser.firstName} ${acsUser.lastName}`; - searchFiltersPage.creatorCheckListFiltersPage().filterBy(userOption) - .checkChipIsDisplayed(userOption) - .removeFilterOption(userOption) - .checkChipIsNotDisplayed(userOption); + const searchCheckListPage = await searchFiltersPage.creatorCheckListFiltersPage().filterBy(userOption); + await searchCheckListPage.checkChipIsDisplayed(userOption); + await searchCheckListPage.removeFilterOption(userOption); + await searchCheckListPage.checkChipIsNotDisplayed(userOption); }); - it('[C277146] Should Show more/less buttons be hidden when inactive', () => { - BrowserActions.getUrl(browser.params.testConfig.adf.url + '/search;q=*'); + it('[C277146] Should Show more/less buttons be hidden when inactive', async () => { + await BrowserActions.getUrl(`${browser.params.testConfig.adf.url}/search;q=*`); - searchFiltersPage.creatorCheckListFiltersPage().checkShowLessButtonIsNotDisplayed() - .checkShowMoreButtonIsDisplayed() - .clickShowMoreButtonUntilIsNotDisplayed() - .checkShowLessButtonIsDisplayed() - .clickShowLessButtonUntilIsNotDisplayed(); + const searchCheckListPage = searchFiltersPage.creatorCheckListFiltersPage(); + + await searchCheckListPage.checkShowLessButtonIsNotDisplayed(); + await searchCheckListPage.checkShowMoreButtonIsDisplayed(); + await searchCheckListPage.clickShowMoreButtonUntilIsNotDisplayed(); + await searchCheckListPage.checkShowLessButtonIsDisplayed(); + await searchCheckListPage.clickShowLessButtonUntilIsNotDisplayed(); }); - it('[C286556] Search categories should preserve their collapsed/expanded state after the search', () => { - BrowserActions.getUrl(browser.params.testConfig.adf.url + '/search;q=*'); + it('[C286556] Search categories should preserve their collapsed/expanded state after the search', async () => { + await BrowserActions.getUrl(`${browser.params.testConfig.adf.url}/search;q=*`); - searchFiltersPage.clickFileTypeListFilter() - .checkFileTypeFilterIsCollapsed() - .clickFileSizeFilterHeader() - .checkFileSizeFilterIsCollapsed(); + await searchFiltersPage.clickFileTypeListFilter(); + await searchFiltersPage.checkFileTypeFilterIsCollapsed(); + await searchFiltersPage.clickFileSizeFilterHeader(); + await searchFiltersPage.checkFileSizeFilterIsCollapsed(); - searchFiltersPage.creatorCheckListFiltersPage().clickCheckListOption('Administrator'); + await searchFiltersPage.creatorCheckListFiltersPage().clickCheckListOption('Administrator'); - searchFiltersPage.checkFileTypeFilterIsCollapsed() - .checkFileSizeFilterIsCollapsed(); + await searchFiltersPage.checkFileTypeFilterIsCollapsed(); + await searchFiltersPage.checkFileSizeFilterIsCollapsed(); }); - it('[C287796] Should be able to display the correct bucket number after selecting a filter', () => { - BrowserActions.getUrl(browser.params.testConfig.adf.url + '/search;q=*'); + it('[C287796] Should be able to display the correct bucket number after selecting a filter', async () => { + await BrowserActions.getUrl(`${browser.params.testConfig.adf.url}/search;q=*`); - searchFiltersPage.fileTypeCheckListFiltersPage().clickCheckListOption('PNG Image'); + await searchFiltersPage.fileTypeCheckListFiltersPage().clickCheckListOption('PNG Image'); - const bucketNumberForFilter = searchFiltersPage.fileTypeCheckListFiltersPage().getBucketNumberOfFilterType(filter.type); - const resultFileNames = contentList.getAllRowsColumnValues('Display name'); + const bucketNumberForFilter = await searchFiltersPage.fileTypeCheckListFiltersPage().getBucketNumberOfFilterType(filter.type); + const resultFileNames: any = await contentList.getAllRowsColumnValues('Display name'); - expect(bucketNumberForFilter).not.toEqual('0'); - expect(paginationPage.getTotalNumberOfFiles()).toEqual(bucketNumberForFilter); + await expect(bucketNumberForFilter).not.toEqual('0'); + await expect(await paginationPage.getTotalNumberOfFiles()).toEqual(bucketNumberForFilter); - resultFileNames.then((fileNames) => { - fileNames.map((nameOfResultFiles) => { - expect(nameOfResultFiles).toContain('.png'); - }); + resultFileNames.map(async (nameOfResultFiles) => { + await expect(nameOfResultFiles).toContain('.png'); }); }); it('[C291802] Should be able to filter facet fields with "Contains"', async () => { - navigationBarPage.clickContentServicesButton(); + await navigationBarPage.clickContentServicesButton(); jsonFile['filterWithContains'] = true; await LocalStorageUtil.setConfigField('search', JSON.stringify(jsonFile)); - searchDialog.clickOnSearchIcon() - .enterTextAndPressEnter('*'); + await searchDialog.clickOnSearchIcon(); + await searchDialog.enterTextAndPressEnter('*'); - searchResults.tableIsLoaded(); + await searchResults.tableIsLoaded(); - searchFiltersPage.creatorCheckListFiltersPage() - .searchInFilter('dminis') - .checkCheckListOptionIsDisplayed('Administrator'); + await searchFiltersPage.creatorCheckListFiltersPage().searchInFilter('dminis'); + await searchFiltersPage.creatorCheckListFiltersPage().checkCheckListOptionIsDisplayed('Administrator'); }); - it('[C291980] Should group search facets under specified labels', () => { - BrowserActions.getUrl(browser.params.testConfig.adf.url + '/search;q=*'); + it('[C291980] Should group search facets under specified labels', async () => { + await BrowserActions.getUrl(`${browser.params.testConfig.adf.url}/search;q=*`); - searchFiltersPage.checkDefaultFacetQueryGroupIsDisplayed() - .checkTypeFacetQueryGroupIsDisplayed() - .checkSizeFacetQueryGroupIsDisplayed(); + await searchFiltersPage.checkDefaultFacetQueryGroupIsDisplayed(); + await searchFiltersPage.checkTypeFacetQueryGroupIsDisplayed(); + await searchFiltersPage.checkSizeFacetQueryGroupIsDisplayed(); }); it('[C291981] Should group search facets under the default label, by default', async () => { - navigationBarPage.clickContentServicesButton(); + await navigationBarPage.clickContentServicesButton(); await LocalStorageUtil.setConfigField('search', JSON.stringify(jsonFile)); - searchDialog.clickOnSearchIcon() - .enterTextAndPressEnter('*'); + await searchDialog.clickOnSearchIcon(); + await searchDialog.enterTextAndPressEnter('*'); - searchResults.tableIsLoaded(); + await searchResults.tableIsLoaded(); - searchFiltersPage.checkDefaultFacetQueryGroupIsDisplayed(); - expect(searchFiltersPage.isTypeFacetQueryGroupPresent()).toBe(false); - expect(searchFiltersPage.isSizeFacetQueryGroupPresent()).toBe(false); + await searchFiltersPage.checkDefaultFacetQueryGroupIsDisplayed(); + await expect(await searchFiltersPage.isTypeFacetQueryGroupPresent()).toBe(false); + await expect(await searchFiltersPage.isSizeFacetQueryGroupPresent()).toBe(false); }); - it('[C297509] Should display search intervals under specified labels from config', () => { - BrowserActions.getUrl(browser.params.testConfig.adf.url + '/search;q=*'); + it('[C297509] Should display search intervals under specified labels from config', async () => { + await BrowserActions.getUrl(`${browser.params.testConfig.adf.url}/search;q=*`); - searchFiltersPage.checkFacetIntervalsByCreatedIsDisplayed() - .checkFacetIntervalsByCreatedIsExpanded() - .clickFacetIntervalsByCreatedFilterHeader() - .checkFacetIntervalsByCreatedIsCollapsed() - .clickFacetIntervalsByCreatedFilterHeader() - .checkFacetIntervalsByCreatedIsExpanded() - .checkFacetIntervalsByModifiedIsDisplayed() - .checkFacetIntervalsByModifiedIsExpanded() - .clickFacetIntervalsByModifiedFilterHeader() - .checkFacetIntervalsByModifiedIsCollapsed() - .clickFacetIntervalsByModifiedFilterHeader() - .checkFacetIntervalsByModifiedIsExpanded(); + await searchFiltersPage.checkFacetIntervalsByCreatedIsDisplayed(); + await searchFiltersPage.checkFacetIntervalsByCreatedIsExpanded(); + await searchFiltersPage.clickFacetIntervalsByCreatedFilterHeader(); + await searchFiltersPage.checkFacetIntervalsByCreatedIsCollapsed(); + await searchFiltersPage.clickFacetIntervalsByCreatedFilterHeader(); + await searchFiltersPage.checkFacetIntervalsByCreatedIsExpanded(); + await searchFiltersPage.checkFacetIntervalsByModifiedIsDisplayed(); + await searchFiltersPage.checkFacetIntervalsByModifiedIsExpanded(); + await searchFiltersPage.clickFacetIntervalsByModifiedFilterHeader(); + await searchFiltersPage.checkFacetIntervalsByModifiedIsCollapsed(); + await searchFiltersPage.clickFacetIntervalsByModifiedFilterHeader(); + await searchFiltersPage.checkFacetIntervalsByModifiedIsExpanded(); }); - it('[C299200] Should reset the filters facet with search query', () => { - searchDialog.enterTextAndPressEnter(fileTypeTxt1.entry.name); + it('[C299200] Should reset the filters facet with search query', async () => { + await navigationBarPage.clickContentServicesButton(); + await searchDialog.checkSearchIconIsVisible(); + await searchDialog.clickOnSearchIcon(); + await searchDialog.enterTextAndPressEnter(fileTypeTxt1.entry.name); - searchFiltersPage.checkSearchFiltersIsDisplayed(); - searchResults.tableIsLoaded(); - searchResults.checkContentIsDisplayed(fileTypeTxt1.entry.name); - searchFiltersPage.checkFileTypeFacetLabelIsDisplayed('Plain Text (1)'); - searchFiltersPage.checkFileTypeFacetLabelIsNotDisplayed('JPEG Image'); + await searchFiltersPage.checkSearchFiltersIsDisplayed(); + await searchResults.tableIsLoaded(); + await searchResults.checkContentIsDisplayed(fileTypeTxt1.entry.name); + await searchFiltersPage.checkFileTypeFacetLabelIsDisplayed('Plain Text (1)'); + await searchFiltersPage.checkFileTypeFacetLabelIsNotDisplayed('JPEG Image'); - searchDialog.enterTextAndPressEnter(fileNamePrefix); - searchFiltersPage.checkSearchFiltersIsDisplayed(); - searchResults.tableIsLoaded(); - searchResults.checkContentIsDisplayed(fileTypeTxt1.entry.name); - searchResults.checkContentIsDisplayed(fileTypeTxt2.entry.name); - searchResults.checkContentIsDisplayed(fileTypeJpg.entry.name); - searchFiltersPage.checkFileTypeFacetLabelIsDisplayed('Plain Text (2)'); - searchFiltersPage.checkFileTypeFacetLabelIsDisplayed('JPEG Image (1)'); + await searchDialog.checkSearchIconIsVisible(); + await searchDialog.clickOnSearchIcon(); + + await searchDialog.enterTextAndPressEnter(fileNamePrefix); + await searchFiltersPage.checkSearchFiltersIsDisplayed(); + await searchResults.tableIsLoaded(); + await searchResults.checkContentIsDisplayed(fileTypeTxt1.entry.name); + await searchResults.checkContentIsDisplayed(fileTypeTxt2.entry.name); + await searchResults.checkContentIsDisplayed(fileTypeJpg.entry.name); + await searchFiltersPage.checkFileTypeFacetLabelIsDisplayed('Plain Text (2)'); + await searchFiltersPage.checkFileTypeFacetLabelIsDisplayed('JPEG Image (1)'); }); it('[C299124] Should be able to parse escaped empty spaced labels inside facetFields', async () => { - navigationBarPage.clickContentServicesButton(); + await navigationBarPage.clickContentServicesButton(); jsonFile.facetFields.fields[0].label = 'My File Types'; jsonFile.facetFields.fields[1].label = 'My File Sizes'; await LocalStorageUtil.setConfigField('search', JSON.stringify(jsonFile)); - searchDialog.clickOnSearchIcon() - .enterTextAndPressEnter('*'); + await searchDialog.clickOnSearchIcon(); + await searchDialog.enterTextAndPressEnter('*'); - searchResults.tableIsLoaded(); - searchFiltersPage.checkCustomFacetFieldLabelIsDisplayed('My File Types'); - searchFiltersPage.checkCustomFacetFieldLabelIsDisplayed('My File Sizes'); + await searchResults.tableIsLoaded(); + await searchFiltersPage.checkCustomFacetFieldLabelIsDisplayed('My File Types'); + await searchFiltersPage.checkCustomFacetFieldLabelIsDisplayed('My File Sizes'); }); }); diff --git a/e2e/search/search-multiselect.e2e.ts b/e2e/search/search-multiselect.e2e.ts index 483723d329..a648db3bd1 100644 --- a/e2e/search/search-multiselect.e2e.ts +++ b/e2e/search/search-multiselect.e2e.ts @@ -55,7 +55,7 @@ describe('Search Component - Multi-Select Facet', () => { 'name': `${randomName}.txt` }); - beforeAll(async (done) => { + beforeAll(async () => { await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); await this.alfrescoJsApi.core.peopleApi.addPerson(acsUser); @@ -75,24 +75,23 @@ describe('Search Component - Multi-Select Facet', () => { txtFileSite = await uploadActions.uploadFile(txtFileInfo.location, txtFileInfo.name, site.entry.guid); - await browser.driver.sleep(15000); + await browser.sleep(15000); - loginPage.loginToContentServicesUsingUserModel(acsUser); + await loginPage.loginToContentServicesUsingUserModel(acsUser); - searchDialog.checkSearchIconIsVisible(); - searchDialog.clickOnSearchIcon(); - searchDialog.enterTextAndPressEnter(`${randomName}`); + await searchDialog.checkSearchIconIsVisible(); + await searchDialog.clickOnSearchIcon(); + await searchDialog.enterTextAndPressEnter(`${randomName}`); userOption = `${acsUser.firstName} ${acsUser.lastName}`; - searchFiltersPage.checkSearchFiltersIsDisplayed(); - searchFiltersPage.creatorCheckListFiltersPage().filterBy(userOption); + await searchFiltersPage.checkSearchFiltersIsDisplayed(); + await searchFiltersPage.creatorCheckListFiltersPage().filterBy(userOption); - done(); }); - afterAll(async (done) => { - Promise.all([ + afterAll(async () => { + await Promise.all([ uploadActions.deleteFileOrFolder(jpgFile.entry.id), uploadActions.deleteFileOrFolder(jpgFileSite.entry.id), uploadActions.deleteFileOrFolder(txtFile.entry.id), @@ -102,33 +101,32 @@ describe('Search Component - Multi-Select Facet', () => { await this.alfrescoJsApi.core.sitesApi.deleteSite(site.entry.id); await navigationBarPage.clickLogoutButton(); - done(); }); - it('[C280054] Should be able to select multiple items from a search facet filter', () => { - loginPage.loginToContentServicesUsingUserModel(acsUser); + it('[C280054] Should be able to select multiple items from a search facet filter', async () => { + await loginPage.loginToContentServicesUsingUserModel(acsUser); - searchDialog.checkSearchIconIsVisible(); - searchDialog.clickOnSearchIcon(); - searchDialog.enterTextAndPressEnter(`${randomName}`); + await searchDialog.checkSearchIconIsVisible(); + await searchDialog.clickOnSearchIcon(); + await searchDialog.enterTextAndPressEnter(`${randomName}`); userOption = `${acsUser.firstName} ${acsUser.lastName}`; - searchFiltersPage.checkSearchFiltersIsDisplayed(); - searchFiltersPage.creatorCheckListFiltersPage().filterBy(userOption); - searchFiltersPage.fileTypeCheckListFiltersPage().filterBy('Plain Text'); + await searchFiltersPage.checkSearchFiltersIsDisplayed(); + await searchFiltersPage.creatorCheckListFiltersPage().filterBy(userOption); + await searchFiltersPage.fileTypeCheckListFiltersPage().filterBy('Plain Text'); - expect(searchResultsPage.numberOfResultsDisplayed()).toBe(2); - searchResultsPage.checkContentIsDisplayed(txtFile.entry.name); - searchResultsPage.checkContentIsDisplayed(txtFileSite.entry.name); + await expect(searchResultsPage.numberOfResultsDisplayed()).toBe(2); + await searchResultsPage.checkContentIsDisplayed(txtFile.entry.name); + await searchResultsPage.checkContentIsDisplayed(txtFileSite.entry.name); - searchFiltersPage.fileTypeCheckListFiltersPage().filterBy('JPEG Image'); + await searchFiltersPage.fileTypeCheckListFiltersPage().filterBy('JPEG Image'); - expect(searchResultsPage.numberOfResultsDisplayed()).toBe(4); - searchResultsPage.checkContentIsDisplayed(txtFile.entry.name); - searchResultsPage.checkContentIsDisplayed(txtFileSite.entry.name); - searchResultsPage.checkContentIsDisplayed(jpgFile.entry.name); - searchResultsPage.checkContentIsDisplayed(jpgFileSite.entry.name); + await expect(await searchResultsPage.numberOfResultsDisplayed()).toBe(4); + await searchResultsPage.checkContentIsDisplayed(txtFile.entry.name); + await searchResultsPage.checkContentIsDisplayed(txtFileSite.entry.name); + await searchResultsPage.checkContentIsDisplayed(jpgFile.entry.name); + await searchResultsPage.checkContentIsDisplayed(jpgFileSite.entry.name); }); }); @@ -147,7 +145,7 @@ describe('Search Component - Multi-Select Facet', () => { 'name': `${randomName}.txt` }); - beforeAll(async (done) => { + beforeAll(async () => { await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); await this.alfrescoJsApi.core.peopleApi.addPerson(userUploadingTxt); @@ -171,27 +169,27 @@ describe('Search Component - Multi-Select Facet', () => { jpgFile = await uploadActions.uploadFile(jpgFileInfo.location, jpgFileInfo.name, site.entry.guid); - await browser.driver.sleep(15000); + await browser.sleep(15000); - loginPage.loginToContentServicesUsingUserModel(userUploadingImg); + await loginPage.loginToContentServicesUsingUserModel(userUploadingImg); - searchDialog.checkSearchIconIsVisible(); - searchDialog.clickOnSearchIcon(); - searchDialog.enterTextAndPressEnter(`*${randomName}*`); + await searchDialog.checkSearchIconIsVisible(); + await searchDialog.clickOnSearchIcon(); + await searchDialog.enterTextAndPressEnter(`*${randomName}*`); - searchFiltersPage.checkSearchFiltersIsDisplayed(); - searchFiltersPage.creatorCheckListFiltersPage().filterBy(`${userUploadingTxt.firstName} ${userUploadingTxt.lastName}`); - searchFiltersPage.creatorCheckListFiltersPage().filterBy(`${userUploadingImg.firstName} ${userUploadingImg.lastName}`); + await searchFiltersPage.checkSearchFiltersIsDisplayed(); + await searchFiltersPage.creatorCheckListFiltersPage().filterBy(`${userUploadingTxt.firstName} ${userUploadingTxt.lastName}`); + await searchFiltersPage.creatorCheckListFiltersPage().filterBy(`${userUploadingImg.firstName} ${userUploadingImg.lastName}`); - searchResultsPage.checkContentIsDisplayed(txtFile.entry.name); - searchResultsPage.checkContentIsDisplayed(jpgFile.entry.name); + await searchResultsPage.checkContentIsDisplayed(txtFile.entry.name); + await searchResultsPage.checkContentIsDisplayed(jpgFile.entry.name); - searchFiltersPage.fileTypeCheckListFiltersPage().filterBy('Plain Text'); - searchFiltersPage.fileTypeCheckListFiltersPage().filterBy('JPEG Image'); + await searchFiltersPage.fileTypeCheckListFiltersPage().filterBy('Plain Text'); + await searchFiltersPage.fileTypeCheckListFiltersPage().filterBy('JPEG Image'); - expect(searchResultsPage.numberOfResultsDisplayed()).toBe(2); - searchResultsPage.checkContentIsDisplayed(txtFile.entry.name); - searchResultsPage.checkContentIsDisplayed(jpgFile.entry.name); + await expect(await searchResultsPage.numberOfResultsDisplayed()).toBe(2); + await searchResultsPage.checkContentIsDisplayed(txtFile.entry.name); + await searchResultsPage.checkContentIsDisplayed(jpgFile.entry.name); }); }); @@ -205,7 +203,7 @@ describe('Search Component - Multi-Select Facet', () => { 'name': `${randomName}.txt` }); - beforeAll(async (done) => { + beforeAll(async () => { await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); await this.alfrescoJsApi.core.peopleApi.addPerson(acsUser); @@ -218,38 +216,37 @@ describe('Search Component - Multi-Select Facet', () => { }); txtFile = await uploadActions.uploadFile(txtFileInfo.location, txtFileInfo.name, '-my-'); - await browser.driver.sleep(15000); + await browser.sleep(15000); - loginPage.loginToContentServicesUsingUserModel(acsUser); + await loginPage.loginToContentServicesUsingUserModel(acsUser); - searchDialog.checkSearchIconIsVisible(); - searchDialog.clickOnSearchIcon(); - searchDialog.enterTextAndPressEnter(`*${randomName}*`); + await searchDialog.checkSearchIconIsVisible(); + await searchDialog.clickOnSearchIcon(); + await searchDialog.enterTextAndPressEnter(`*${randomName}*`); - searchFiltersPage.checkSearchFiltersIsDisplayed(); + await searchFiltersPage.checkSearchFiltersIsDisplayed(); - done(); }); - afterAll(async (done) => { + afterAll(async () => { await uploadActions.deleteFileOrFolder(txtFile.entry.id); await this.alfrescoJsApi.core.sitesApi; - done(); + }); - it('[C280058] Should update filter facets items number when another filter facet item is selected', () => { - loginPage.loginToContentServicesUsingUserModel(acsUser); + it('[C280058] Should update filter facets items number when another filter facet item is selected', async () => { + await loginPage.loginToContentServicesUsingUserModel(acsUser); - searchDialog.checkSearchIconIsVisible(); - searchDialog.clickOnSearchIcon(); - searchDialog.enterTextAndPressEnter(`*${randomName}*`); + await searchDialog.checkSearchIconIsVisible(); + await searchDialog.clickOnSearchIcon(); + await searchDialog.enterTextAndPressEnter(`*${randomName}*`); - searchFiltersPage.checkSearchFiltersIsDisplayed(); - searchFiltersPage.fileTypeCheckListFiltersPage().filterBy('Plain Text'); - searchFiltersPage.creatorCheckListFiltersPage().filterBy(`${acsUser.firstName} ${acsUser.lastName}`); + await searchFiltersPage.checkSearchFiltersIsDisplayed(); + await searchFiltersPage.fileTypeCheckListFiltersPage().filterBy('Plain Text'); + await searchFiltersPage.creatorCheckListFiltersPage().filterBy(`${acsUser.firstName} ${acsUser.lastName}`); - expect(searchResultsPage.numberOfResultsDisplayed()).toBe(1); - searchResultsPage.checkContentIsDisplayed(txtFile.entry.name); + await expect(await searchResultsPage.numberOfResultsDisplayed()).toBe(1); + await searchResultsPage.checkContentIsDisplayed(txtFile.entry.name); }); }); }); diff --git a/e2e/search/search-page-component.e2e.ts b/e2e/search/search-page-component.e2e.ts index ed8b85b4c5..ca082829bc 100644 --- a/e2e/search/search-page-component.e2e.ts +++ b/e2e/search/search-page-component.e2e.ts @@ -63,7 +63,7 @@ describe('Search component - Search Page', () => { }); const uploadActions = new UploadActions(this.alfrescoJsApi); - beforeAll(async (done) => { + beforeAll(async () => { fileNames = Util.generateSequenceFiles(1, nrOfFiles, search.active.base, search.active.extension); const adminFileNames = Util.generateSequenceFiles(nrOfFiles + 1, nrOfFiles + adminNrOfFiles, search.active.base, search.active.extension); search.active.firstFile = fileNames[0]; @@ -91,84 +91,83 @@ describe('Search component - Search Page', () => { await uploadActions.createEmptyFiles(adminFileNames, newFolderModelUploaded.entry.id); - browser.driver.sleep(15000); + await browser.sleep(15000); await loginPage.loginToContentServicesUsingUserModel(acsUser); - done(); }); afterAll(async () => { await navigationBarPage.clickLogoutButton(); }); - it('[C260264] Should display message when no results are found', () => { + it('[C260264] Should display message when no results are found', async() => { const notExistentFileName = StringUtil.generateRandomString(); - searchDialog.checkSearchBarIsNotVisible().checkSearchIconIsVisible().clickOnSearchIcon() - .enterTextAndPressEnter(notExistentFileName); - searchResultPage.checkNoResultMessageIsDisplayed(); + await searchDialog.checkSearchBarIsNotVisible(); + await searchDialog.checkSearchIconIsVisible(); + await searchDialog.clickOnSearchIcon(); + await searchDialog.enterTextAndPressEnter(notExistentFileName); + await searchResultPage.checkNoResultMessageIsDisplayed(); }); - it('[C272810] Should display only files corresponding to search', () => { - searchDialog - .clickOnSearchIcon() - .enterTextAndPressEnter(search.active.firstFile); + it('[C272810] Should display only files corresponding to search', async () => { + await searchDialog.clickOnSearchIcon(); + await searchDialog.enterTextAndPressEnter(search.active.firstFile); - searchResultPage.checkContentIsDisplayed(search.active.firstFile); - expect(searchResultPage.numberOfResultsDisplayed()).toBe(1); + await searchResultPage.checkContentIsDisplayed(search.active.firstFile); + await expect(await searchResultPage.numberOfResultsDisplayed()).toBe(1); }); - it('[C260267] Should display content when opening a folder from search results', () => { - searchDialog - .clickOnSearchIcon() - .enterTextAndPressEnter(emptyFolderModel.name); + it('[C260267] Should display content when opening a folder from search results', async () => { + await searchDialog.clickOnSearchIcon(); + await searchDialog.enterTextAndPressEnter(emptyFolderModel.name); - searchResultPage.checkNoResultMessageIsNotDisplayed(); - searchResultPage.checkContentIsDisplayed(emptyFolderModel.name); - searchResultPage.navigateToFolder(emptyFolderModel.name); - contentServicesPage.currentFolderName().then((result) => { - expect(result).toEqual(emptyFolderModel.name); - }); + await searchResultPage.checkNoResultMessageIsNotDisplayed(); + await searchResultPage.checkContentIsDisplayed(emptyFolderModel.name); + await searchResultPage.navigateToFolder(emptyFolderModel.name); + const result = await contentServicesPage.currentFolderName(); + await expect(result).toEqual(emptyFolderModel.name); }); - it('[C260261] Should be able to delete a file from search results', () => { - searchDialog - .clickOnSearchIcon() - .enterTextAndPressEnter(search.active.firstFile); + it('[C260261] Should be able to delete a file from search results', async () => { + await searchDialog.clickOnSearchIcon(); + await searchDialog.enterTextAndPressEnter(search.active.firstFile); - searchResultPage.checkContentIsDisplayed(search.active.firstFile); + await searchResultPage.checkContentIsDisplayed(search.active.firstFile); - searchResultPage.deleteContent(search.active.firstFile); + await searchResultPage.deleteContent(search.active.firstFile); - searchResultPage.checkNoResultMessageIsDisplayed(); - searchResultPage.checkContentIsNotDisplayed(search.active.firstFile); + await searchResultPage.checkNoResultMessageIsDisplayed(); + await searchResultPage.checkContentIsNotDisplayed(search.active.firstFile); - searchDialog.checkSearchBarIsNotVisible().checkSearchIconIsVisible().clickOnSearchIcon() - .enterTextAndPressEnter(search.active.firstFile); - searchResultPage.checkNoResultMessageIsDisplayed(); + await searchDialog.checkSearchBarIsNotVisible(); + await searchDialog.checkSearchIconIsVisible(); + await searchDialog.clickOnSearchIcon(); + await searchDialog.enterTextAndPressEnter(search.active.firstFile); + await searchResultPage.checkNoResultMessageIsDisplayed(); }); - it('[C272809] Should be able to delete a folder from search results', () => { - searchDialog - .clickOnSearchIcon() - .enterTextAndPressEnter(emptyFolderModel.name); + it('[C272809] Should be able to delete a folder from search results', async () => { + await searchDialog.clickOnSearchIcon(); + await searchDialog.enterTextAndPressEnter(emptyFolderModel.name); - searchResultPage.checkContentIsDisplayed(emptyFolderModel.name); - searchResultPage.checkNoResultMessageIsNotDisplayed(); - searchResultPage.checkContentIsDisplayed(emptyFolderModel.name); - searchResultPage.deleteContent(emptyFolderModel.name); - searchResultPage.checkNoResultMessageIsDisplayed(); + await searchResultPage.checkContentIsDisplayed(emptyFolderModel.name); + await searchResultPage.checkNoResultMessageIsNotDisplayed(); + await searchResultPage.checkContentIsDisplayed(emptyFolderModel.name); + await searchResultPage.deleteContent(emptyFolderModel.name); + await searchResultPage.checkNoResultMessageIsDisplayed(); - searchDialog.checkSearchBarIsNotVisible().checkSearchIconIsVisible().clickOnSearchIcon() - .enterTextAndPressEnter(emptyFolderModel.name); - searchResultPage.checkNoResultMessageIsDisplayed(); + await searchDialog.checkSearchBarIsNotVisible(); + await searchDialog.checkSearchIconIsVisible(); + await searchDialog.clickOnSearchIcon(); + await searchDialog.enterTextAndPressEnter(emptyFolderModel.name); + await searchResultPage.checkNoResultMessageIsDisplayed(); }); - it('[C286675] Should display results when searching for all elements', () => { - searchDialog - .clickOnSearchIcon() - .enterTextAndPressEnter('*'); + it('[C286675] Should display results when searching for all elements', async () => { + await searchDialog.clickOnSearchIcon(); + await searchDialog.enterTextAndPressEnter('*'); - searchResultPage.checkNoResultMessageIsNotDisplayed(); + await searchResultPage.checkNoResultMessageIsNotDisplayed(); }); }); diff --git a/e2e/tsconfig.e2e.json b/e2e/tsconfig.e2e.json index 113be44976..f79ec79c13 100644 --- a/e2e/tsconfig.e2e.json +++ b/e2e/tsconfig.e2e.json @@ -12,24 +12,6 @@ "node" ], "paths": { - "@alfresco/adf-extensions": [ - "../lib/extensions" - ], - "@alfresco/adf-core": [ - "../lib/core" - ], - "@alfresco/adf-content-services": [ - "../lib/content-services" - ], - "@alfresco/adf-process-services": [ - "../lib/process-services" - ], - "@alfresco/adf-insights": [ - "../lib/insights" - ], - "@alfresco/adf-process-services-cloud": [ - "../lib/process-services-cloud" - ], "@alfresco/adf-testing": [ "../lib/testing" ] diff --git a/e2e/tslint.json b/e2e/tslint.json new file mode 100644 index 0000000000..f5e7bbf0ff --- /dev/null +++ b/e2e/tslint.json @@ -0,0 +1,6 @@ +{ + "extends": "../tslint.json", + "rules": { + "no-floating-promises": true + } +} diff --git a/e2e/util/material.ts b/e2e/util/material.ts index 13cf5fcadc..3166f8d188 100644 --- a/e2e/util/material.ts +++ b/e2e/util/material.ts @@ -16,24 +16,20 @@ */ import { ElementFinder } from 'protractor'; -import { BrowserVisibility } from '@alfresco/adf-testing'; +import { BrowserVisibility, BrowserActions } from '@alfresco/adf-testing'; -export function uncheck(el: ElementFinder) { - BrowserVisibility.waitUntilElementIsVisible(el); - el.getAttribute('class').then((classList) => { - if (classList && classList.indexOf('mat-checked') > -1) { - el.click(); - expect(el.getAttribute('class')).not.toContain('mat-checked'); - } - }); +export async function uncheck(el: ElementFinder) { + await BrowserVisibility.waitUntilElementIsVisible(el); + const classList = await el.getAttribute('class'); + if (classList && classList.indexOf('mat-checked') > -1) { + await BrowserActions.click(el); + } } -export function check(el: ElementFinder) { - BrowserVisibility.waitUntilElementIsVisible(el); - el.getAttribute('class').then((classList) => { - if (classList && classList.indexOf('mat-checked') === -1) { - el.click(); - expect(el.getAttribute('class')).toContain('mat-checked'); - } - }); +export async function check(el: ElementFinder) { + await BrowserVisibility.waitUntilElementIsVisible(el); + const classList = await el.getAttribute('class'); + if (classList && classList.indexOf('mat-checked') === -1) { + await BrowserActions.click(el); + } } diff --git a/e2e/util/resources.js b/e2e/util/resources.js index 04260492d9..ff6ccdce53 100644 --- a/e2e/util/resources.js +++ b/e2e/util/resources.js @@ -108,7 +108,7 @@ exports.Files = { dateTime_id: "dateandtime", checkbox_id: "checkbox", dropdown_id: "dropdown", - dropdown_value: "mat-select[id='dropdown'] span span", + drofpdown_value: "mat-select[id='dropdown'] span span", radioButtons_id: "radiobuttons", dynamicTable_id: "dynamictable" } diff --git a/e2e/util/util.ts b/e2e/util/util.ts index c349d91452..6365e96712 100644 --- a/e2e/util/util.ts +++ b/e2e/util/util.ts @@ -16,7 +16,6 @@ */ import { browser } from 'protractor'; -import fs = require('fs'); export class Util { @@ -51,46 +50,17 @@ export class Util { if (0 === subset.length) { return false; } - return subset.every(function (value) { + return subset.every(function(value) { return (superset.indexOf(value) >= 0); }); } - static openNewTabInBrowser() { - browser.driver.executeScript("window.open('about: blank', '_blank');"); + static async openNewTabInBrowser() { + await browser.executeScript("window.open('about: blank', '_blank');"); } - static switchToWindowHandler(windowNumber) { - browser.driver.getAllWindowHandles().then((handles) => { - browser.waitForAngularEnabled(); - browser.driver.switchTo().window(handles[windowNumber]); - }); - } - - /** - * Verify file exists - * @param filePath - absolute path to the searched file - * @param retries - number of retries - * @returns - true if file is found, false otherwise - */ - static fileExists(filePath, retries) { - let tries = 0; - return new Promise(function (resolve, reject) { - const checkExist = setInterval(() => { - fs.stat(filePath, function (error, stats) { - tries++; - - if (error && tries === retries) { - clearInterval(checkExist); - resolve(false); - } - - if (!error) { - clearInterval(checkExist); - resolve(true); - } - }); - }, 2000); - }); + static async switchToWindowHandler(windowNumber) { + const handles = await browser.getAllWindowHandles(); + await browser.switchTo().window(handles[windowNumber]); } } diff --git a/lib/content-services/permission-manager/components/permission-list/permission-list.component.ts b/lib/content-services/permission-manager/components/permission-list/permission-list.component.ts index 527b0ef831..77490eb169 100644 --- a/lib/content-services/permission-manager/components/permission-list/permission-list.component.ts +++ b/lib/content-services/permission-manager/components/permission-list/permission-list.component.ts @@ -62,6 +62,7 @@ export class PermissionListComponent implements OnInit { this.nodeService.getNode(this.nodeId).subscribe((node: Node) => { this.actualNode = node; this.permissionList = this.getPermissionList(node); + this.nodePermissionService.getNodeRoles(node).subscribe((settableList: string[]) => { this.settableRoles = settableList; }); diff --git a/lib/testing/src/lib/content-services/actions/example.action.ts b/lib/testing/src/lib/content-services/actions/example.action.ts deleted file mode 100644 index 9ad97c1557..0000000000 --- a/lib/testing/src/lib/content-services/actions/example.action.ts +++ /dev/null @@ -1,20 +0,0 @@ -/*! - * @license - * Copyright 2019 Alfresco Software, Ltd. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -export class ExampleAction { - -} diff --git a/lib/testing/src/lib/content-services/actions/public-api.ts b/lib/testing/src/lib/content-services/actions/public-api.ts index 01aba87e7d..04cb896e74 100644 --- a/lib/testing/src/lib/content-services/actions/public-api.ts +++ b/lib/testing/src/lib/content-services/actions/public-api.ts @@ -15,5 +15,4 @@ * limitations under the License. */ -export * from './example.action'; export * from './upload.actions'; 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 b12e167778..54575edad4 100644 --- a/lib/testing/src/lib/content-services/actions/upload.actions.ts +++ b/lib/testing/src/lib/content-services/actions/upload.actions.ts @@ -19,32 +19,33 @@ import { browser } from 'protractor'; import * as path from 'path'; import * as fs from 'fs'; import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; +import { NodeEntry } from '@alfresco/js-api/src/api/content-rest-api/model/nodeEntry'; export class UploadActions { - alfrescoJsApi: any = null; + alfrescoJsApi: AlfrescoApi = null; constructor(alfrescoJsApi: AlfrescoApi) { this.alfrescoJsApi = alfrescoJsApi; } - async uploadFile(fileLocation, fileName, parentFolderId) { + async uploadFile(fileLocation, fileName, parentFolderId): Promise { const pathFile = path.join(browser.params.rootPath + '/e2e' + fileLocation); const file = fs.createReadStream(pathFile); - return await this.alfrescoJsApi.upload.uploadFile( + return this.alfrescoJsApi.upload.uploadFile( file, '', parentFolderId, null, { - 'name': fileName, - 'nodeType': 'cm:content', - 'renditions': 'doclib' + name: fileName, + nodeType: 'cm:content', + renditions: 'doclib' } ); } - async createEmptyFiles(emptyFileNames: string[], parentFolderId) { + async createEmptyFiles(emptyFileNames: string[], parentFolderId): Promise { const filesRequest = []; for (let i = 0; i < emptyFileNames.length; i++) { @@ -54,16 +55,14 @@ export class UploadActions { filesRequest.push(jsonItem); } - return this.alfrescoJsApi.nodes.addNode(parentFolderId, filesRequest, {}, { - filedata: '' - }); + return this.alfrescoJsApi.nodes.addNode(parentFolderId, filesRequest, {}); } - async createFolder(folderName, parentFolderId) { + async createFolder(folderName, parentFolderId): Promise { return this.alfrescoJsApi.node.addNode(parentFolderId, { - 'name': folderName, - 'nodeType': 'cm:folder' - }, {}, {}); + name: folderName, + nodeType: 'cm:folder' + }, {}); } async deleteFileOrFolder(nodeId) { 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 e4a80e3b95..b1b58d7416 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 @@ -15,90 +15,87 @@ * limitations under the License. */ -import { by, element } from 'protractor'; +import { by, element, ElementFinder } from 'protractor'; import { DocumentListPage } from '../pages/document-list.page'; import { BrowserVisibility } from '../../core/utils/browser-visibility'; import { BrowserActions } from '../../core/utils/browser-actions'; export class ContentNodeSelectorDialogPage { - dialog = element(by.css(`adf-content-node-selector`)); - header = this.dialog.element(by.css(`header[data-automation-id='content-node-selector-title']`)); - searchInputElement = this.dialog.element(by.css(`input[data-automation-id='content-node-selector-search-input']`)); - searchLabel = this.searchInputElement.element(by.xpath("ancestor::div[@class='mat-form-field-infix']/span/label")); - siteListDropdown = this.dialog.element(by.css(`mat-select[data-automation-id='site-my-files-option']`)); - cancelButton = element(by.css(`button[data-automation-id='content-node-selector-actions-cancel']`)); - moveCopyButton = element(by.css(`button[data-automation-id='content-node-selector-actions-choose']`)); - contentList = new DocumentListPage(this.dialog); + dialog: ElementFinder = element(by.css(`adf-content-node-selector`)); + header: ElementFinder = this.dialog.element(by.css(`header[data-automation-id='content-node-selector-title']`)); + searchInputElement: ElementFinder = this.dialog.element(by.css(`input[data-automation-id='content-node-selector-search-input']`)); + searchLabel: ElementFinder = this.searchInputElement.element(by.xpath("ancestor::div[@class='mat-form-field-infix']/span/label")); + siteListDropdown: ElementFinder = this.dialog.element(by.css(`mat-select[data-automation-id='site-my-files-option']`)); + cancelButton: ElementFinder = element(by.css(`button[data-automation-id='content-node-selector-actions-cancel']`)); + moveCopyButton: ElementFinder = element(by.css(`button[data-automation-id='content-node-selector-actions-choose']`)); + contentList: DocumentListPage = new DocumentListPage(this.dialog); - checkDialogIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.dialog); - return this; + async checkDialogIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.dialog); } - checkDialogIsNotDisplayed() { - BrowserVisibility.waitUntilElementIsNotOnPage(this.dialog); - return this; + async checkDialogIsNotDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsNotVisible(this.dialog); } - getDialogHeaderText() { - return BrowserActions.getText(this.header); + async getDialogHeaderText(): Promise { + return await BrowserActions.getText(this.header); } - checkSearchInputIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.searchInputElement); - return this; + async checkSearchInputIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.searchInputElement); } - getSearchLabel() { - return BrowserActions.getText(this.searchLabel); + async getSearchLabel(): Promise { + return await BrowserActions.getText(this.searchLabel); } - checkSelectedSiteIsDisplayed(siteName) { - BrowserVisibility.waitUntilElementIsVisible(this.siteListDropdown.element(by.cssContainingText('.mat-select-value-text span', siteName))); + async checkSelectedSiteIsDisplayed(siteName): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.siteListDropdown.element(by.cssContainingText('.mat-select-value-text span', siteName))); } - checkCancelButtonIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.cancelButton); + async checkCancelButtonIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.cancelButton); } - clickCancelButton() { - return BrowserActions.click(this.cancelButton); + async clickCancelButton(): Promise { + await BrowserActions.click(this.cancelButton); } - checkCancelButtonIsEnabled() { - return this.cancelButton.isEnabled(); + async checkCancelButtonIsEnabled(): Promise { + return await this.cancelButton.isEnabled(); } - checkCopyMoveButtonIsEnabled() { - return this.moveCopyButton.isEnabled(); + async checkCopyMoveButtonIsEnabled(): Promise { + return await this.moveCopyButton.isEnabled(); } - checkMoveCopyButtonIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.moveCopyButton); + async checkMoveCopyButtonIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.moveCopyButton); } - getMoveCopyButtonText() { - return BrowserActions.getText(this.moveCopyButton); + async getMoveCopyButtonText(): Promise { + return await BrowserActions.getText(this.moveCopyButton); } - clickMoveCopyButton() { - return BrowserActions.click(this.moveCopyButton); + async clickMoveCopyButton(): Promise { + await BrowserActions.click(this.moveCopyButton); } - numberOfResultsDisplayed() { - return this.contentList.dataTablePage().numberOfRows(); + async numberOfResultsDisplayed(): Promise { + return await this.contentList.dataTablePage().numberOfRows(); } - typeIntoNodeSelectorSearchField(text) { - BrowserVisibility.waitUntilElementIsVisible(this.searchInputElement); - this.searchInputElement.sendKeys(text); + async typeIntoNodeSelectorSearchField(text): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.searchInputElement); + await BrowserActions.clearSendKeys(this.searchInputElement, text); } - clickContentNodeSelectorResult(name) { - this.contentList.dataTablePage().clickRowByContent(name); + async clickContentNodeSelectorResult(name): Promise { + await this.contentList.dataTablePage().clickRowByContent(name); } - contentListPage() { + contentListPage(): DocumentListPage { return this.contentList; } } diff --git a/lib/testing/src/lib/content-services/dialog/download-dialog.page.ts b/lib/testing/src/lib/content-services/dialog/download-dialog.page.ts index c2153e10a8..49226aa39b 100644 --- a/lib/testing/src/lib/content-services/dialog/download-dialog.page.ts +++ b/lib/testing/src/lib/content-services/dialog/download-dialog.page.ts @@ -17,12 +17,13 @@ import { by, element } from 'protractor'; import { BrowserActions } from '../../core/utils/browser-actions'; +import { ElementFinder } from 'protractor'; export class DownloadDialogPage { - cancelButton = element(by.id(`cancel-button`)); + cancelButton: ElementFinder = element(by.id(`cancel-button`)); - clickCancelButton() { - return BrowserActions.click(this.cancelButton); + async clickCancelButton(): Promise { + await BrowserActions.click(this.cancelButton); } } diff --git a/lib/testing/src/lib/content-services/pages/document-list.page.ts b/lib/testing/src/lib/content-services/pages/document-list.page.ts index d40d546472..79c62ff3ca 100644 --- a/lib/testing/src/lib/content-services/pages/document-list.page.ts +++ b/lib/testing/src/lib/content-services/pages/document-list.page.ts @@ -15,7 +15,7 @@ * limitations under the License. */ -import { by, element, ElementFinder, browser } from 'protractor'; +import { by, element, ElementFinder, browser, Locator } from 'protractor'; import { DataTableComponentPage } from '../../core/pages/data-table-component.page'; import { BrowserVisibility } from '../../core/utils/browser-visibility'; import { BrowserActions } from '../../core/utils/browser-actions'; @@ -23,8 +23,8 @@ import { BrowserActions } from '../../core/utils/browser-actions'; export class DocumentListPage { rootElement: ElementFinder; - actionMenu = element(by.css('div[role="menu"]')); - optionButton = by.css('button[data-automation-id*="action_menu_"]'); + actionMenu: ElementFinder = element(by.css('div[role="menu"]')); + optionButton: Locator = by.css('button[data-automation-id*="action_menu_"]'); tableBody: ElementFinder; dataTable: DataTableComponentPage; @@ -34,60 +34,55 @@ export class DocumentListPage { this.tableBody = rootElement.all(by.css('div[class="adf-datatable-body"]')).first(); } - checkLockedIcon(content) { + async checkLockedIcon(content): Promise { const row = this.dataTable.getRow('Display name', content); const lockIcon = row.element(by.cssContainingText('div[title="Lock"] mat-icon', 'lock')); - BrowserVisibility.waitUntilElementIsVisible(lockIcon); - return this; + await BrowserVisibility.waitUntilElementIsVisible(lockIcon); } - checkUnlockedIcon(content) { + async checkUnlockedIcon(content): Promise { const row = this.dataTable.getRow('Display name', content); const lockIcon = row.element(by.cssContainingText('div[title="Lock"] mat-icon', 'lock_open')); - BrowserVisibility.waitUntilElementIsVisible(lockIcon); - return this; + await BrowserVisibility.waitUntilElementIsVisible(lockIcon); } - waitForTableBody() { - return BrowserVisibility.waitUntilElementIsVisible(this.tableBody); + async waitForTableBody(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.tableBody); } - getTooltip(nodeName) { - return this.dataTable.getTooltip('Display name', nodeName); + async getTooltip(nodeName): Promise { + return await this.dataTable.getTooltip('Display name', nodeName); } - selectRow(nodeName) { - return this.dataTable.selectRow('Display name', nodeName); + async selectRow(nodeName): Promise { + await this.dataTable.selectRow('Display name', nodeName); } - rightClickOnRow(nodeName) { - return this.dataTable.rightClickOnRow('Display name', nodeName); + async rightClickOnRow(nodeName): Promise { + await this.dataTable.rightClickOnRow('Display name', nodeName); } - clickOnActionMenu(content) { - BrowserActions.closeMenuAndDialogs(); - const row = this.dataTable.getRow('Display name', content); - BrowserActions.click(row.element(this.optionButton)); - BrowserVisibility.waitUntilElementIsVisible(this.actionMenu); - browser.sleep(500); - return this; + async clickOnActionMenu(content): Promise { + await BrowserActions.closeMenuAndDialogs(); + const row: ElementFinder = this.dataTable.getRow('Display name', content); + await BrowserActions.click(row.element(this.optionButton)); + await BrowserVisibility.waitUntilElementIsVisible(this.actionMenu); + await browser.sleep(500); } - checkActionMenuIsNotDisplayed() { - BrowserVisibility.waitUntilElementIsNotVisible(this.actionMenu); - return this; + async checkActionMenuIsNotDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsNotVisible(this.actionMenu); } - dataTablePage() { + dataTablePage(): DataTableComponentPage { return new DataTableComponentPage(this.rootElement); } - getAllRowsColumnValues(column) { - return this.dataTable.getAllRowsColumnValues(column); + async getAllRowsColumnValues(column) { + return await this.dataTable.getAllRowsColumnValues(column); } - doubleClickRow(nodeName) { - this.dataTable.doubleClickRow('Display name', nodeName); - return this; + async doubleClickRow(nodeName): Promise { + await this.dataTable.doubleClickRow('Display name', nodeName); } } diff --git a/lib/testing/src/lib/content-services/pages/like.page.ts b/lib/testing/src/lib/content-services/pages/like.page.ts index e7ee6ce005..6fa787c465 100644 --- a/lib/testing/src/lib/content-services/pages/like.page.ts +++ b/lib/testing/src/lib/content-services/pages/like.page.ts @@ -24,27 +24,27 @@ export class LikePage { likeButton = element(by.css(`span[class="adf-like-grey"]`)); unlikeButton = element(by.css(`span[class="adf-like-select"]`)); - getLikeCounter() { + async getLikeCounter(): Promise { return BrowserActions.getText(this.likeCounter); } - clickLike() { - return BrowserActions.click(this.likeButton); + async clickLike(): Promise { + await BrowserActions.click(this.likeButton); } - clickUnlike() { - return BrowserActions.click(this.unlikeButton); + async clickUnlike(): Promise { + await BrowserActions.click(this.unlikeButton); } - removeHoverFromLikeButton() { - browser.actions().mouseMove({x: 200, y: 200}).click().perform(); + async removeHoverFromLikeButton(): Promise { + await browser.actions().mouseMove({ x: 200, y: 200 }).click().perform(); } - getLikedIconColor() { + async getLikedIconColor(): Promise { return BrowserActions.getColor(this.unlikeButton); } - getUnLikedIconColor() { + async getUnLikedIconColor(): Promise { return BrowserActions.getColor(this.likeButton); } } diff --git a/lib/testing/src/lib/content-services/pages/rate.page.ts b/lib/testing/src/lib/content-services/pages/rate.page.ts index e9267a3982..018a4a3db3 100644 --- a/lib/testing/src/lib/content-services/pages/rate.page.ts +++ b/lib/testing/src/lib/content-services/pages/rate.page.ts @@ -21,42 +21,42 @@ import { BrowserActions } from '../../core/utils/browser-actions'; export class RatePage { - rateComponent(rateValue: number) { + async rateComponent(rateValue: number) { const unratedStar = element(by.css(`span[id="adf-rate-${rateValue}"]`)); - return BrowserActions.click(unratedStar); + await BrowserActions.click(unratedStar); } - removeRating(rateValue: number) { + async removeRating(rateValue: number): Promise { const ratedStar = element(by.css(`mat-icon[id="adf-colored-star-${rateValue}"]`)); - return BrowserActions.click(ratedStar); + await BrowserActions.click(ratedStar); } - getRatingCounter() { + async getRatingCounter(): Promise { const ratingsCounter = element(by.css(`div[id="adf-rating-counter"]`)); return BrowserActions.getText(ratingsCounter); } - isStarRated(rateValue: number) { + async isStarRated(rateValue: number): Promise { const ratedStar = element(by.css(`mat-icon[id="adf-colored-star-${rateValue}"]`)); - return BrowserVisibility.waitUntilElementIsVisible(ratedStar); + await BrowserVisibility.waitUntilElementIsVisible(ratedStar); } - isNotStarRated(rateValue: number) { + async isNotStarRated(rateValue: number): Promise { const unratedStar = element(by.css(`mat-icon[id="adf-grey-star-${rateValue}"]`)); - return BrowserVisibility.waitUntilElementIsVisible(unratedStar); + await BrowserVisibility.waitUntilElementIsVisible(unratedStar); } - getRatedStarColor(rateValue: number) { + async getRatedStarColor(rateValue: number): Promise { const ratedStar = element(by.css(`mat-icon[id="adf-colored-star-${rateValue}"]`)); return BrowserActions.getColor(ratedStar); } - getUnratedStarColor(rateValue: number) { + async getUnratedStarColor(rateValue: number): Promise { const unratedStar = element(by.css(`mat-icon[id="adf-grey-star-${rateValue}"]`)); return BrowserActions.getColor(unratedStar); } - getAverageStarColor(rateValue: number) { + async getAverageStarColor(rateValue: number): Promise { const coloredStar = element(by.css(`mat-icon[id="adf-colored-star-${rateValue}"]`)); return BrowserActions.getColor(coloredStar); } diff --git a/lib/testing/src/lib/content-services/pages/search/date-range-filter.page.ts b/lib/testing/src/lib/content-services/pages/search/date-range-filter.page.ts index 9cc579c282..5e9766f3a0 100644 --- a/lib/testing/src/lib/content-services/pages/search/date-range-filter.page.ts +++ b/lib/testing/src/lib/content-services/pages/search/date-range-filter.page.ts @@ -15,148 +15,129 @@ * limitations under the License. */ -import { by, browser, protractor } from 'protractor'; +import { by, protractor, ElementFinder, Locator, element } from 'protractor'; import { DatePickerPage } from '../../../material/pages/date-picker.page'; import { BrowserVisibility } from '../../../core/utils/browser-visibility'; +import { BrowserActions } from '../../../core/utils/browser-actions'; export class DateRangeFilterPage { - fromField = by.css('input[data-automation-id="date-range-from-input"]'); - fromDateToggle = by.css('mat-datepicker-toggle[data-automation-id="date-range-from-date-toggle"]'); - toField = by.css('input[data-automation-id="date-range-to-input"]'); - toDateToggle = by.css('mat-datepicker-toggle[data-automation-id="date-range-to-date-toggle"]'); - applyButton = by.css('button[data-automation-id="date-range-apply-btn"]'); - clearButton = by.css('button[data-automation-id="date-range-clear-btn"]'); - fromErrorMessage = by.css('mat-error[data-automation-id="date-range-from-error"]'); - toErrorMessage = by.css('mat-error[data-automation-id="date-range-to-error"]'); - filter; + fromField: Locator = by.css('input[data-automation-id="date-range-from-input"]'); + fromDateToggle: Locator = by.css('mat-datepicker-toggle[data-automation-id="date-range-from-date-toggle"]'); + toField: Locator = by.css('input[data-automation-id="date-range-to-input"]'); + toDateToggle: Locator = by.css('mat-datepicker-toggle[data-automation-id="date-range-to-date-toggle"]'); + applyButton: Locator = by.css('button[data-automation-id="date-range-apply-btn"]'); + clearButton: Locator = by.css('button[data-automation-id="date-range-clear-btn"]'); + fromErrorMessage: Locator = by.css('mat-error[data-automation-id="date-range-from-error"]'); + toErrorMessage: Locator = by.css('mat-error[data-automation-id="date-range-to-error"]'); + filter: ElementFinder; - constructor(filter) { + constructor(filter: ElementFinder) { this.filter = filter; } - getFromDate() { - return this.filter.element(this.fromField).getAttribute('value'); + async getFromDate(): Promise { + return await this.filter.element(this.fromField).getAttribute('value'); } - putFromDate(date) { - this.checkFromFieldIsDisplayed(); - this.filter.element(this.fromField).clear(); - this.filter.element(this.fromField).sendKeys(date); - this.filter.element(this.fromField).sendKeys(protractor.Key.ENTER); - return this; + async putFromDate(date): Promise { + await this.checkFromFieldIsDisplayed(); + await BrowserActions.clearSendKeys(this.filter.element(this.fromField), date); + await this.filter.element(this.fromField).sendKeys(protractor.Key.ENTER); } - getFromCalendarSelectedDate() { - const selectedDate = this.openFromDatePicker().getSelectedDate(); - new DatePickerPage().closeDatePicker(); + async getFromCalendarSelectedDate(): Promise { + const datePicker = await this.openFromDatePicker(); + const selectedDate = await datePicker.getSelectedDate(); + await datePicker.closeDatePicker(); return selectedDate; } - openFromDatePicker() { - BrowserVisibility.waitUntilElementIsClickable(this.filter.element(this.fromDateToggle)); - this.filter.element(this.fromDateToggle).click(); - return new DatePickerPage().checkDatePickerIsDisplayed(); + async openFromDatePicker(): Promise { + await BrowserActions.click(this.filter.element(this.fromDateToggle)); + + const datePicker = new DatePickerPage(); + await datePicker.checkDatePickerIsDisplayed(); + return datePicker; } - openToDatePicker() { - BrowserVisibility.waitUntilElementIsClickable(this.filter.element(this.toDateToggle)); - this.filter.element(this.toDateToggle).click(); - return new DatePickerPage().checkDatePickerIsDisplayed(); + async openToDatePicker(): Promise { + await BrowserActions.click(this.filter.element(this.toDateToggle)); + const datePicker = new DatePickerPage(); + await datePicker.checkDatePickerIsDisplayed(); + return datePicker; } - clickFromField() { - BrowserVisibility.waitUntilElementIsClickable(this.filter.element(this.fromField)); - this.filter.element(this.fromField).click(); - return this; + async clickFromField(): Promise { + await BrowserActions.click(this.filter.element(this.fromField)); } - checkFromErrorMessageIsDisplayed(msg: string) { - BrowserVisibility.waitUntilElementIsVisible(this.filter.element(this.fromErrorMessage)); - browser.controlFlow().execute(async () => { - await expect(this.filter.element(this.fromErrorMessage).getText()).toEqual(msg); - }); - return this; + async checkFromErrorMessageIsDisplayed(msg: string): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.filter.element(this.fromErrorMessage)); + const text = await BrowserActions.getText(this.filter.element(this.fromErrorMessage)); + await expect(text).toEqual(msg); } - checkFromErrorMessageIsNotDisplayed() { - BrowserVisibility.waitUntilElementIsNotVisible(this.filter.element(this.fromErrorMessage)); - return this; + async checkFromErrorMessageIsNotDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsNotVisible(this.filter.element(this.fromErrorMessage)); } - checkFromFieldIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.filter.element(this.fromField)); - return this; + async checkFromFieldIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.filter.element(this.fromField)); } - checkFromDateToggleIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.filter.element(this.fromDateToggle)); - return this; + async checkFromDateToggleIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.filter.element(this.fromDateToggle)); } - getToDate() { - return this.filter.element(this.toField).getAttribute('value'); + async getToDate(): Promise { + return await this.filter.element(this.toField).getAttribute('value'); } - putToDate(date) { - this.checkToFieldIsDisplayed(); - this.filter.element(this.toField).clear(); - this.filter.element(this.toField).sendKeys(date); - this.filter.element(this.toField).sendKeys(protractor.Key.ENTER); - return this; + async putToDate(date): Promise { + await this.checkToFieldIsDisplayed(); + await BrowserActions.clearSendKeys(element(this.toField), date); + await this.filter.element(this.toField).sendKeys(protractor.Key.ENTER); } - clickToField() { - BrowserVisibility.waitUntilElementIsClickable(this.filter.element(this.toField)); - this.filter.element(this.toField).click(); - return this; + async clickToField(): Promise { + await BrowserVisibility.waitUntilElementIsClickable(this.filter.element(this.toField)); + await BrowserActions.click(this.filter.element(this.toField)); } - checkToErrorMessageIsDisplayed(msg) { - BrowserVisibility.waitUntilElementIsVisible(this.filter.element(this.toErrorMessage)); - browser.controlFlow().execute(async () => { - await expect(this.filter.element(this.toErrorMessage).getText()).toEqual(msg); - }); - return this; + async checkToErrorMessageIsDisplayed(msg): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.filter.element(this.toErrorMessage)); + const text = await BrowserActions.getText(this.filter.element(this.toErrorMessage)); + await expect(text).toEqual(msg); } - checkToFieldIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.filter.element(this.toField)); - return this; + async checkToFieldIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.filter.element(this.toField)); } - checkToDateToggleIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.filter.element(this.toDateToggle)); - return this; + async checkToDateToggleIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.filter.element(this.toDateToggle)); } - clickApplyButton() { - BrowserVisibility.waitUntilElementIsClickable(this.filter.element(this.applyButton)); - this.filter.element(this.applyButton).click(); - return this; + async clickApplyButton(): Promise { + await BrowserActions.click(this.filter.element(this.applyButton)); } - checkApplyButtonIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.filter.element(this.applyButton)); - return this; + async checkApplyButtonIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.filter.element(this.applyButton)); } - checkApplyButtonIsEnabled() { - browser.controlFlow().execute(async () => { - await expect(this.filter.element(this.applyButton).isEnabled()).toBe(true); - }); - return this; + async checkApplyButtonIsEnabled(): Promise { + const isEnabled = await this.filter.element(this.applyButton).isEnabled(); + await expect(isEnabled).toBe(true); } - checkApplyButtonIsDisabled() { - browser.controlFlow().execute(async () => { - await expect(this.filter.element(this.applyButton).isEnabled()).toBe(false); - }); - return this; + async checkApplyButtonIsDisabled(): Promise { + const isEnabled = await this.filter.element(this.applyButton).isEnabled(); + await expect(isEnabled).toBe(false); } - checkClearButtonIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.filter.element(this.clearButton)); - return this; + async checkClearButtonIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.filter.element(this.clearButton)); } } diff --git a/lib/testing/src/lib/content-services/pages/search/number-range-filter.page.ts b/lib/testing/src/lib/content-services/pages/search/number-range-filter.page.ts index 73019dc046..76d9ebe563 100644 --- a/lib/testing/src/lib/content-services/pages/search/number-range-filter.page.ts +++ b/lib/testing/src/lib/content-services/pages/search/number-range-filter.page.ts @@ -14,152 +14,120 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import { by, protractor } from 'protractor'; +import { by, ElementFinder, Locator, protractor } from 'protractor'; import { BrowserActions } from '../../../core/utils/browser-actions'; import { BrowserVisibility } from '../../../core/utils/browser-visibility'; export class NumberRangeFilterPage { - fromInput = by.css('input[data-automation-id="number-range-from-input"]'); - toInput = by.css('input[data-automation-id="number-range-to-input"]'); - applyButton = by.css('button[data-automation-id="number-range-btn-apply"]'); - clearButton = by.css('button[data-automation-id="number-range-btn-clear"]'); - fromErrorInvalid = by.css('mat-error[data-automation-id="number-range-from-error-invalid"]'); - fromErrorRequired = by.css('mat-error[data-automation-id="number-range-from-error-required"]'); - toErrorInvalid = by.css('mat-error[data-automation-id="number-range-to-error-invalid"]'); - toErrorRequired = by.css('mat-error[data-automation-id="number-range-to-error-required"]'); - filter; + fromInput: Locator = by.css('input[data-automation-id="number-range-from-input"]'); + toInput: Locator = by.css('input[data-automation-id="number-range-to-input"]'); + applyButton: Locator = by.css('button[data-automation-id="number-range-btn-apply"]'); + clearButton: Locator = by.css('button[data-automation-id="number-range-btn-clear"]'); + fromErrorInvalid: Locator = by.css('mat-error[data-automation-id="number-range-from-error-invalid"]'); + fromErrorRequired: Locator = by.css('mat-error[data-automation-id="number-range-from-error-required"]'); + toErrorInvalid: Locator = by.css('mat-error[data-automation-id="number-range-to-error-invalid"]'); + toErrorRequired: Locator = by.css('mat-error[data-automation-id="number-range-to-error-required"]'); + filter: ElementFinder; - constructor(filter) { + constructor(filter: ElementFinder) { this.filter = filter; } - clearFromField() { - BrowserVisibility.waitUntilElementIsClickable(this.filter.element(this.fromInput)); - this.filter.element(this.fromInput).getAttribute('value').then((value) => { - for (let i = value.length; i >= 0; i--) { - this.filter.element(this.fromInput).sendKeys(protractor.Key.BACK_SPACE); - } - }); - return this; + async clearFromField(): Promise { + await BrowserVisibility.waitUntilElementIsClickable(this.filter.element(this.fromInput)); + await BrowserActions.clearWithBackSpace(this.filter.element(this.fromInput)); } - getFromNumber() { - return this.filter.element(this.fromInput).getAttribute('value'); + async getFromNumber(): Promise { + return await this.filter.element(this.fromInput).getAttribute('value'); } - putFromNumber(value) { - this.checkFromFieldIsDisplayed(); - this.filter.element(this.fromInput).clear(); - this.filter.element(this.fromInput).sendKeys(value); - this.filter.element(this.fromInput).sendKeys(protractor.Key.ENTER); - return this; + async putFromNumber(value): Promise { + await this.checkFromFieldIsDisplayed(); + await BrowserActions.clearSendKeys(this.filter.element(this.fromInput), value); + await this.filter.element(this.fromInput).sendKeys(protractor.Key.ENTER); } - getFromErrorRequired() { - BrowserVisibility.waitUntilElementIsVisible(this.filter.element(this.fromErrorRequired)); - return BrowserActions.getText(this.filter.element(this.fromErrorRequired)); - + async getFromErrorRequired(): Promise { + return await BrowserActions.getText(this.filter.element(this.fromErrorRequired)); } - checkFromErrorRequiredIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.filter.element(this.fromErrorRequired)); - return this; + async checkFromErrorRequiredIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.filter.element(this.fromErrorRequired)); } - getFromErrorInvalid() { - BrowserVisibility.waitUntilElementIsVisible(this.filter.element(this.fromErrorInvalid)); - return BrowserActions.getText(this.filter.element(this.fromErrorInvalid)); + async getFromErrorInvalid(): Promise { + return await BrowserActions.getText(this.filter.element(this.fromErrorInvalid)); } - checkFromErrorInvalidIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.filter.element(this.fromErrorInvalid)); - return this; + async checkFromErrorInvalidIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.filter.element(this.fromErrorInvalid)); } - checkFromFieldIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.filter.element(this.fromInput)); - return this; + async checkFromFieldIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.filter.element(this.fromInput)); } - clearToField() { - BrowserVisibility.waitUntilElementIsClickable(this.filter.element(this.toInput)); - this.filter.element(this.toInput).getAttribute('value').then((value) => { - for (let i = value.length; i >= 0; i--) { - this.filter.element(this.toInput).sendKeys(protractor.Key.BACK_SPACE); - } - }); - return this; + async clearToField(): Promise { + await BrowserVisibility.waitUntilElementIsClickable(this.filter.element(this.toInput)); + await BrowserActions.clearWithBackSpace(this.filter.element(this.toInput)); } - getToNumber() { - return this.filter.element(this.toInput).getAttribute('value'); + async getToNumber(): Promise { + return await this.filter.element(this.toInput).getAttribute('value'); } - putToNumber(value) { - this.checkToFieldIsDisplayed(); - this.filter.element(this.toInput).clear(); - this.filter.element(this.toInput).sendKeys(value); - this.filter.element(this.toInput).sendKeys(protractor.Key.ENTER); - return this; + async putToNumber(value): Promise { + await this.checkToFieldIsDisplayed(); + await BrowserActions.clearSendKeys(this.filter.element(this.toInput), value); + await this.filter.element(this.toInput).sendKeys(protractor.Key.ENTER); } - getToErrorRequired() { - BrowserVisibility.waitUntilElementIsVisible(this.filter.element(this.toErrorRequired)); - return BrowserActions.getText(this.filter.element(this.toErrorRequired)); + async getToErrorRequired(): Promise { + return await BrowserActions.getText(this.filter.element(this.toErrorRequired)); } - checkToErrorRequiredIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.filter.element(this.toErrorRequired)); - return this; + async checkToErrorRequiredIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.filter.element(this.toErrorRequired)); } - getToErrorInvalid() { - BrowserVisibility.waitUntilElementIsVisible(this.filter.element(this.toErrorInvalid)); - return BrowserActions.getText(this.filter.element(this.toErrorInvalid)); + async getToErrorInvalid(): Promise { + return await BrowserActions.getText(this.filter.element(this.toErrorInvalid)); } - checkToErrorInvalidIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.filter.element(this.toErrorInvalid)); - return this; + async checkToErrorInvalidIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.filter.element(this.toErrorInvalid)); } - checkToFieldIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.filter.element(this.toInput)); - return this; + async checkToFieldIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.filter.element(this.toInput)); } - clickApplyButton() { - BrowserVisibility.waitUntilElementIsClickable(this.filter.element(this.applyButton)); - this.filter.element(this.applyButton).click(); - return this; + async clickApplyButton(): Promise { + await BrowserActions.click(this.filter.element(this.applyButton)); } - checkApplyButtonIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.filter.element(this.applyButton)); - return this; + async checkApplyButtonIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.filter.element(this.applyButton)); } - checkApplyButtonIsEnabled() { - return this.filter.element(this.applyButton).isEnabled(); + async checkApplyButtonIsEnabled(): Promise { + return await this.filter.element(this.applyButton).isEnabled(); } - clickClearButton() { - BrowserVisibility.waitUntilElementIsClickable(this.filter.element(this.clearButton)); - this.filter.element(this.clearButton).click(); - return this; + async clickClearButton(): Promise { + await BrowserActions.click(this.filter.element(this.clearButton)); } - checkClearButtonIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.filter.element(this.clearButton)); - return this; + async checkClearButtonIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.filter.element(this.clearButton)); } - checkNoErrorMessageIsDisplayed() { - BrowserVisibility.waitUntilElementIsNotVisible(this.filter.element(this.fromErrorInvalid)); - BrowserVisibility.waitUntilElementIsNotVisible(this.filter.element(this.fromErrorRequired)); - BrowserVisibility.waitUntilElementIsNotVisible(this.filter.element(this.toErrorInvalid)); - BrowserVisibility.waitUntilElementIsNotVisible(this.filter.element(this.toErrorRequired)); - return this; + async checkNoErrorMessageIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsNotVisible(this.filter.element(this.fromErrorInvalid)); + await BrowserVisibility.waitUntilElementIsNotVisible(this.filter.element(this.fromErrorRequired)); + await BrowserVisibility.waitUntilElementIsNotVisible(this.filter.element(this.toErrorInvalid)); + await BrowserVisibility.waitUntilElementIsNotVisible(this.filter.element(this.toErrorRequired)); } } diff --git a/lib/testing/src/lib/content-services/pages/search/search-categories.page.ts b/lib/testing/src/lib/content-services/pages/search/search-categories.page.ts index ecffaaf70c..bb370816f3 100644 --- a/lib/testing/src/lib/content-services/pages/search/search-categories.page.ts +++ b/lib/testing/src/lib/content-services/pages/search/search-categories.page.ts @@ -27,60 +27,51 @@ import { BrowserVisibility } from '../../../core/utils/browser-visibility'; export class SearchCategoriesPage { - checkListFiltersPage(filter: ElementFinder) { + static checkListFiltersPage(filter: ElementFinder): SearchCheckListPage { return new SearchCheckListPage(filter); } - textFiltersPage(filter: ElementFinder) { + static textFiltersPage(filter: ElementFinder): SearchTextPage { return new SearchTextPage(filter); } - radioFiltersPage(filter: ElementFinder) { + static radioFiltersPage(filter: ElementFinder): SearchRadioPage { return new SearchRadioPage(filter); } - dateRangeFilter(filter: ElementFinder) { + static dateRangeFilter(filter: ElementFinder): DateRangeFilterPage { return new DateRangeFilterPage(filter); } - numberRangeFilter(filter: ElementFinder) { + static numberRangeFilter(filter: ElementFinder): NumberRangeFilterPage { return new NumberRangeFilterPage(filter); } - sliderFilter(filter: ElementFinder) { + static sliderFilter(filter: ElementFinder): SearchSliderPage { return new SearchSliderPage(filter); } - checkFilterIsDisplayed(filter: ElementFinder) { - BrowserVisibility.waitUntilElementIsVisible(filter); - return this; + async checkFilterIsDisplayed(filter: ElementFinder): Promise { + await BrowserVisibility.waitUntilElementIsVisible(filter); } - clickFilter(filter: ElementFinder) { - BrowserVisibility.waitUntilElementIsVisible(filter); - filter.element(by.css('mat-expansion-panel-header')).click(); - return this; + async clickFilter(filter: ElementFinder): Promise { + await BrowserActions.click(filter.element(by.css('mat-expansion-panel-header'))); } - clickFilterHeader(filter: ElementFinder) { + async clickFilterHeader(filter: ElementFinder): Promise { const fileSizeFilterHeader = filter.element(by.css('mat-expansion-panel-header')); - BrowserVisibility.waitUntilElementIsClickable(fileSizeFilterHeader); - BrowserActions.click(fileSizeFilterHeader); - return this; + await BrowserActions.click(fileSizeFilterHeader); } - checkFilterIsCollapsed(filter: ElementFinder) { - filter.getAttribute('class').then((elementClass) => { - expect(elementClass).not.toContain('mat-expanded'); - }); - return this; + async checkFilterIsCollapsed(filter: ElementFinder): Promise { + const elementClass = await filter.getAttribute('class'); + await expect(elementClass).not.toContain('mat-expanded'); } - checkFilterIsExpanded(filter: ElementFinder) { - filter.getAttribute('class').then((elementClass) => { - expect(elementClass).toContain('mat-expanded'); - }); - return this; + async checkFilterIsExpanded(filter: ElementFinder): Promise { + const elementClass = await filter.getAttribute('class'); + await expect(elementClass).toContain('mat-expanded'); } } diff --git a/lib/testing/src/lib/content-services/pages/search/search-checkList.page.ts b/lib/testing/src/lib/content-services/pages/search/search-checkList.page.ts index 81d1b6eeef..218315b770 100644 --- a/lib/testing/src/lib/content-services/pages/search/search-checkList.page.ts +++ b/lib/testing/src/lib/content-services/pages/search/search-checkList.page.ts @@ -15,168 +15,143 @@ * limitations under the License. */ -import { element, by, ElementFinder } from 'protractor'; +import { element, by, ElementFinder, Locator, browser } from 'protractor'; import { BrowserActions } from '../../../core/utils/browser-actions'; import { BrowserVisibility } from '../../../core/utils/browser-visibility'; export class SearchCheckListPage { filter: ElementFinder; - inputBy = by.css('div[class*="mat-expansion-panel-content"] input'); - showMoreBy = by.css('button[title="Show more"]'); - showLessBy = by.css('button[title="Show less"]'); - clearAllButton = by.css('button'); + inputBy: Locator = by.css('div[class*="mat-expansion-panel-content"] input'); + showMoreBy: Locator = by.css('button[title="Show more"]'); + showLessBy: Locator = by.css('button[title="Show less"]'); + clearAllButton: Locator = by.css('button'); constructor(filter: ElementFinder) { this.filter = filter; } - clickCheckListOption(option: string) { - BrowserVisibility.waitUntilElementIsVisible(this.filter); + async clickCheckListOption(option: string): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.filter); const result = this.filter.all(by.css(`mat-checkbox[data-automation-id*='${option}'] .mat-checkbox-inner-container`)).first(); - BrowserActions.click(result); + await BrowserActions.click(result); } - checkChipIsDisplayed(option: string) { - BrowserVisibility.waitUntilElementIsVisible(element(by.cssContainingText('mat-chip', option)).element(by.css('mat-icon'))); - return this; + async checkChipIsDisplayed(option: string): Promise { + await BrowserVisibility.waitUntilElementIsVisible(element(by.cssContainingText('mat-chip', option)).element(by.css('mat-icon'))); } - checkChipIsNotDisplayed(option: string) { - BrowserVisibility.waitUntilElementIsNotOnPage(element(by.cssContainingText('mat-chip', option)).element(by.css('mat-icon'))); - return this; + async checkChipIsNotDisplayed(option: string): Promise { + await BrowserVisibility.waitUntilElementIsNotVisible(element(by.cssContainingText('mat-chip', option)).element(by.css('mat-icon'))); } - removeFilterOption(option: string) { + async removeFilterOption(option: string): Promise { const cancelChipButton = element(by.cssContainingText('mat-chip', option)).element(by.css('mat-icon')); - BrowserActions.click(cancelChipButton); + await BrowserActions.click(cancelChipButton); + } + + async filterBy(option: string): Promise { + await this.checkSearchFilterInputIsDisplayed(); + await this.searchInFilter(option); + await this.clickCheckListOption(option); return this; } - filterBy(option: string) { - this.checkSearchFilterInputIsDisplayed(); - this.searchInFilter(option); - this.clickCheckListOption(option); - return this; + async checkSearchFilterInputIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.filter.all(this.inputBy).first()); } - checkSearchFilterInputIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.filter.all(this.inputBy).first()); - return this; - } - - searchInFilter(option: string) { - BrowserVisibility.waitUntilElementIsClickable(this.filter); + async searchInFilter(option: string): Promise { + await BrowserVisibility.waitUntilElementIsClickable(this.filter); const inputElement = this.filter.all(this.inputBy).first(); - BrowserVisibility.waitUntilElementIsClickable(inputElement); - - inputElement.clear(); - this.filter.all(this.inputBy).first().sendKeys(option); - return this; + await BrowserVisibility.waitUntilElementIsClickable(inputElement); + await BrowserActions.clearSendKeys(inputElement, option); } - checkShowLessButtonIsNotDisplayed() { - BrowserVisibility.waitUntilElementIsNotVisible(this.filter.element(this.showLessBy)); - return this; + async checkShowLessButtonIsNotDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsNotVisible(this.filter.element(this.showLessBy)); } - checkShowLessButtonIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.filter.element(this.showLessBy)); - return this; + async checkShowLessButtonIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.filter.element(this.showLessBy)); } - checkShowMoreButtonIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.filter.element(this.showMoreBy)); - return this; + async checkShowMoreButtonIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.filter.element(this.showMoreBy)); } - checkShowMoreButtonIsNotDisplayed() { - BrowserVisibility.waitUntilElementIsNotVisible(this.filter.element(this.showMoreBy)); - return this; + async checkShowMoreButtonIsNotDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsNotVisible(this.filter.element(this.showMoreBy)); } - clickShowMoreButtonUntilIsNotDisplayed() { - this.filter.element(this.showMoreBy).isDisplayed().then(async (visible) => { - if (visible) { - this.filter.element(this.showMoreBy).click(); - - this.clickShowMoreButtonUntilIsNotDisplayed(); - } - }, () => { - }); - return this; + async clickShowMoreButtonUntilIsNotDisplayed(): Promise { + const visible = await browser.isElementPresent(this.filter.element(this.showMoreBy)); + if (visible) { + await BrowserActions.click(this.filter.element(this.showMoreBy)); + await this.clickShowMoreButtonUntilIsNotDisplayed(); + } } - clickShowLessButtonUntilIsNotDisplayed() { - this.filter.element(this.showLessBy).isDisplayed().then(async (visible) => { - if (visible) { - this.filter.element(this.showLessBy).click(); - - this.clickShowLessButtonUntilIsNotDisplayed(); - } - }, () => { - }); - return this; + async clickShowLessButtonUntilIsNotDisplayed(): Promise { + const visible = await browser.isElementPresent(this.filter.element(this.showLessBy)); + if (visible) { + await BrowserActions.click(this.filter.element(this.showLessBy)); + await this.clickShowLessButtonUntilIsNotDisplayed(); + } } - getBucketNumberOfFilterType(option: string) { + async getBucketNumberOfFilterType(option: string): Promise { const fileTypeFilter = this.filter.all(by.css('mat-checkbox[data-automation-id*=".' + option + '"] span')).first(); - BrowserVisibility.waitUntilElementIsVisible(fileTypeFilter); - const bucketNumber = fileTypeFilter.getText().then((valueOfBucket) => { - const numberOfBucket = valueOfBucket.split('(')[1]; - const totalNumberOfBucket = numberOfBucket.split(')')[0]; - return totalNumberOfBucket.trim(); - }); - - return bucketNumber; + await BrowserVisibility.waitUntilElementIsVisible(fileTypeFilter); + const valueOfBucket = await BrowserActions.getText(fileTypeFilter); + const numberOfBucket = valueOfBucket.split('(')[1]; + const totalNumberOfBucket = numberOfBucket.split(')')[0]; + return totalNumberOfBucket.trim(); } - checkCheckListOptionIsDisplayed(option: string) { - BrowserVisibility.waitUntilElementIsVisible(this.filter); + async checkCheckListOptionIsDisplayed(option: string): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.filter); const result = this.filter.element(by.css(`mat-checkbox[data-automation-id*='-${option}']`)); - return BrowserVisibility.waitUntilElementIsVisible(result); + await BrowserVisibility.waitUntilElementIsVisible(result); } - checkCheckListOptionIsNotSelected(option: string) { - BrowserVisibility.waitUntilElementIsVisible(this.filter); + async checkCheckListOptionIsNotSelected(option: string): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.filter); const result = this.filter.element(by.css(`mat-checkbox[data-automation-id*='-${option}'][class*='checked']`)); - return BrowserVisibility.waitUntilElementIsNotVisible(result); + await BrowserVisibility.waitUntilElementIsNotVisible(result); } - checkCheckListOptionIsSelected(option: string) { - BrowserVisibility.waitUntilElementIsVisible(this.filter); + async checkCheckListOptionIsSelected(option: string): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.filter); const result = this.filter.element(by.css(`mat-checkbox[data-automation-id*='-${option}'][class*='checked']`)); - return BrowserVisibility.waitUntilElementIsVisible(result); + await BrowserVisibility.waitUntilElementIsVisible(result); } - checkClearAllButtonIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.filter); + async checkClearAllButtonIsDisplayed() { + await BrowserVisibility.waitUntilElementIsVisible(this.filter); const result = this.filter.element(this.clearAllButton); - return BrowserVisibility.waitUntilElementIsVisible(result); + await BrowserVisibility.waitUntilElementIsVisible(result); } - clickClearAllButton() { - BrowserVisibility.waitUntilElementIsVisible(this.filter); + async clickClearAllButton(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.filter); const result = this.filter.element(this.clearAllButton); - BrowserVisibility.waitUntilElementIsVisible(result); - return BrowserActions.click(result); + await BrowserActions.click(result); } - getCheckListOptionsNumberOnPage() { - BrowserVisibility.waitUntilElementIsVisible(this.filter); + async getCheckListOptionsNumberOnPage(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.filter); const checkListOptions = this.filter.all(by.css('div[class="checklist"] mat-checkbox')); return checkListOptions.count(); } - clickShowMoreButton() { - BrowserVisibility.waitUntilElementIsVisible(this.filter.element(this.showMoreBy)); - return this.filter.element(this.showMoreBy).click(); + async clickShowMoreButton(): Promise { + await BrowserActions.click(this.filter.element(this.showMoreBy)); } - clickShowLessButton() { - BrowserVisibility.waitUntilElementIsVisible(this.filter.element(this.showLessBy)); - return this.filter.element(this.showLessBy).click(); + async clickShowLessButton(): Promise { + await BrowserActions.click(this.filter.element(this.showLessBy)); } } diff --git a/lib/testing/src/lib/content-services/pages/search/search-radio.page.ts b/lib/testing/src/lib/content-services/pages/search/search-radio.page.ts index 98fc10d356..b99827757b 100644 --- a/lib/testing/src/lib/content-services/pages/search/search-radio.page.ts +++ b/lib/testing/src/lib/content-services/pages/search/search-radio.page.ts @@ -18,58 +18,59 @@ import { element, by, browser } from 'protractor'; import { BrowserActions } from '../../../core/utils/browser-actions'; import { BrowserVisibility } from '../../../core/utils/browser-visibility'; +import { ElementFinder } from 'protractor'; export class SearchRadioPage { - filter; - showMoreButton = element(by.css('adf-search-radio button[title="Show more"]')); - showLessButton = element(by.css('adf-search-radio button[title="Show less"]')); + filter: ElementFinder; + showMoreButton: ElementFinder = element(by.css('adf-search-radio button[title="Show more"]')); + showLessButton: ElementFinder = element(by.css('adf-search-radio button[title="Show less"]')); - constructor(filter) { + constructor(filter: ElementFinder) { this.filter = filter; } - checkFilterRadioButtonIsDisplayed(filterName: string) { + async checkFilterRadioButtonIsDisplayed(filterName: string): Promise { const filterType = element(by.css('mat-radio-button[data-automation-id="search-radio-' + filterName + '"]')); - return BrowserVisibility.waitUntilElementIsVisible(filterType); + await BrowserVisibility.waitUntilElementIsVisible(filterType); } - checkFilterRadioButtonIsChecked(filterName: string) { + async checkFilterRadioButtonIsChecked(filterName: string): Promise { const selectedFilterType = element(by.css('mat-radio-button[data-automation-id="search-radio-' + filterName + '"][class*="checked"]')); - return BrowserVisibility.waitUntilElementIsVisible(selectedFilterType); + await BrowserVisibility.waitUntilElementIsVisible(selectedFilterType); } - clickFilterRadioButton(filterName: string) { - browser.executeScript(`document.querySelector('[data-automation-id="search-radio-${filterName}"] input').click();`); + async clickFilterRadioButton(filterName: string): Promise { + await browser.executeScript(`document.querySelector('[data-automation-id="search-radio-${filterName}"] input').click();`); } - getRadioButtonsNumberOnPage() { + async getRadioButtonsNumberOnPage(): Promise { const radioButtons = element.all(by.css('mat-radio-button')); return radioButtons.count(); } - checkShowMoreButtonIsDisplayed() { - return BrowserVisibility.waitUntilElementIsVisible(this.showMoreButton); + async checkShowMoreButtonIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.showMoreButton); } - checkShowLessButtonIsDisplayed() { - return BrowserVisibility.waitUntilElementIsVisible(this.showLessButton); + async checkShowLessButtonIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.showLessButton); } - checkShowMoreButtonIsNotDisplayed() { - return BrowserVisibility.waitUntilElementIsNotVisible(this.showMoreButton); + async checkShowMoreButtonIsNotDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsNotVisible(this.showMoreButton); } - checkShowLessButtonIsNotDisplayed() { - return BrowserVisibility.waitUntilElementIsNotVisible(this.showLessButton); + async checkShowLessButtonIsNotDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsNotVisible(this.showLessButton); } - clickShowMoreButton() { - return BrowserActions.click(this.showMoreButton); + async clickShowMoreButton(): Promise { + await BrowserActions.click(this.showMoreButton); } - clickShowLessButton() { - return BrowserActions.click(this.showLessButton); + async clickShowLessButton(): Promise { + await BrowserActions.click(this.showLessButton); } } diff --git a/lib/testing/src/lib/content-services/pages/search/search-slider.page.ts b/lib/testing/src/lib/content-services/pages/search/search-slider.page.ts index e9ae5dc27c..c152916778 100644 --- a/lib/testing/src/lib/content-services/pages/search/search-slider.page.ts +++ b/lib/testing/src/lib/content-services/pages/search/search-slider.page.ts @@ -15,62 +15,64 @@ * limitations under the License. */ -import { browser, by } from 'protractor'; +import { browser, by, ElementFinder, Locator } from 'protractor'; import { BrowserVisibility } from '../../../core/utils/browser-visibility'; +import { BrowserActions } from '../../../core/utils/browser-actions'; export class SearchSliderPage { - filter; - slider = by.css('mat-slider[data-automation-id="slider-range"]'); - clearButton = by.css('button[data-automation-id="slider-btn-clear"]'); - sliderWithThumbLabel = by.css('mat-slider[data-automation-id="slider-range"][class*="mat-slider-thumb-label-showing"]'); + filter: ElementFinder; + slider: Locator = by.css('mat-slider[data-automation-id="slider-range"]'); + clearButton: Locator = by.css('button[data-automation-id="slider-btn-clear"]'); + sliderWithThumbLabel: Locator = by.css('mat-slider[data-automation-id="slider-range"][class*="mat-slider-thumb-label-showing"]'); - constructor(filter) { + constructor(filter: ElementFinder) { this.filter = filter; } - getMaxValue() { - return this.filter.element(this.slider).getAttribute('aria-valuemax'); + async getMaxValue() { + return await this.filter.element(this.slider).getAttribute('aria-valuemax'); } - getMinValue() { - return this.filter.element(this.slider).getAttribute('aria-valuemin'); + async getMinValue() { + return await this.filter.element(this.slider).getAttribute('aria-valuemin'); } - getValue() { - return this.filter.element(this.slider).getAttribute('aria-valuenow'); + async getValue() { + return await this.filter.element(this.slider).getAttribute('aria-valuenow'); } - setValue(value: number) { - browser.actions().dragAndDrop( - this.filter.element(this.slider).element(by.css('div[class="mat-slider-thumb"]')), - { x: value * 10, y: 0 } - ).perform(); - return this; + async setValue(value: number): Promise { + const elem = this.filter.element(this.slider).element(by.css('div[class="mat-slider-wrapper"]')); + await browser.actions().mouseMove(elem, { x: 0, y: 0 }).perform(); + await browser.actions().mouseDown().mouseMove({x: value * 10, y: 0}).mouseUp().perform(); } - checkSliderIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.filter.element(this.slider)); - return this; + async checkSliderIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.filter.element(this.slider)); } - checkSliderWithThumbLabelIsNotDisplayed() { - BrowserVisibility.waitUntilElementIsNotVisible(this.filter.element(this.sliderWithThumbLabel)); - return this; + async checkSliderIsNotDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsNotVisible(this.filter.element(this.slider)); } - clickClearButton() { - BrowserVisibility.waitUntilElementIsClickable(this.filter.element(this.clearButton)); - this.filter.element(this.clearButton).click(); - return this; + async checkSliderWithThumbLabelIsNotDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsNotVisible(this.filter.element(this.sliderWithThumbLabel)); } - checkClearButtonIsEnabled() { - return this.filter.element(this.clearButton).isEnabled(); + async clickClearButton(): Promise { + await BrowserActions.click(this.filter.element(this.clearButton)); } - checkClearButtonIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.filter.element(this.clearButton)); - return this; + async checkClearButtonIsEnabled() { + return await this.filter.element(this.clearButton).isEnabled(); + } + + async checkClearButtonIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.filter.element(this.clearButton)); + } + + async checkClearButtonIsNotDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsNotVisible(this.filter.element(this.clearButton)); } } diff --git a/lib/testing/src/lib/content-services/pages/search/search-sorting-picker.page.ts b/lib/testing/src/lib/content-services/pages/search/search-sorting-picker.page.ts index 8c919493be..771e3303da 100644 --- a/lib/testing/src/lib/content-services/pages/search/search-sorting-picker.page.ts +++ b/lib/testing/src/lib/content-services/pages/search/search-sorting-picker.page.ts @@ -15,22 +15,21 @@ * limitations under the License. */ -import { browser, by, element, protractor } from 'protractor'; +import { browser, by, element, ElementFinder } from 'protractor'; import { BrowserActions } from '../../../core/utils/browser-actions'; import { BrowserVisibility } from '../../../core/utils/browser-visibility'; export class SearchSortingPickerPage { - sortingSelector = element(by.css('adf-sorting-picker div[class="mat-select-arrow"]')); - orderArrow = element(by.css('adf-sorting-picker button mat-icon')); - optionsDropdown = element(by.css('div[class*="mat-select-panel"]')); + sortingSelector: ElementFinder = element(by.css('adf-sorting-picker div[class="mat-select-arrow"]')); + orderArrow: ElementFinder = element(by.css('adf-sorting-picker button mat-icon')); + optionsDropdown: ElementFinder = element(by.css('div .mat-select-panel')); - sortBy(sortOrder: string, sortType: string | RegExp) { - BrowserActions.click(this.sortingSelector); + async sortBy(sortOrder: string, sortType: string | RegExp): Promise { + await BrowserActions.click(this.sortingSelector); const selectedSortingOption = element(by.cssContainingText('span[class="mat-option-text"]', sortType)); - BrowserActions.click(selectedSortingOption); - - this.sortByOrder(sortOrder); + await BrowserActions.click(selectedSortingOption); + await this.sortByOrder(sortOrder); } /** @@ -38,66 +37,57 @@ export class SearchSortingPickerPage { * * @param sortOrder : 'ASC' to sort the list ascendant and 'DESC' for descendant */ - sortByOrder(sortOrder: string) { - BrowserVisibility.waitUntilElementIsVisible(this.orderArrow); - this.orderArrow.getText().then((result) => { - if (sortOrder.toLocaleLowerCase() === 'asc') { - if (result !== 'arrow_upward') { - browser.executeScript(`document.querySelector('adf-sorting-picker button mat-icon').click();`); - } - } else { - if (result === 'arrow_upward') { - browser.executeScript(`document.querySelector('adf-sorting-picker button mat-icon').click();`); - } + async sortByOrder(sortOrder: string): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.orderArrow); + + const result = await BrowserActions.getText(this.orderArrow); + if (sortOrder.toLocaleLowerCase() === 'asc') { + if (result !== 'arrow_upward') { + await browser.executeScript(`document.querySelector('adf-sorting-picker button mat-icon').click();`); } - }); + } else { + if (result === 'arrow_upward') { + await browser.executeScript(`document.querySelector('adf-sorting-picker button mat-icon').click();`); + } + } } - clickSortingOption(option) { + async clickSortingOption(option): Promise { const selectedSortingOption = element(by.cssContainingText('span[class="mat-option-text"]', option)); - BrowserActions.click(selectedSortingOption); - return this; + await BrowserActions.click(selectedSortingOption); } - clickSortingSelector() { - BrowserActions.click(this.sortingSelector); - return this; + async clickSortingSelector(): Promise { + await BrowserActions.click(this.sortingSelector); } - checkOptionIsDisplayed(option) { + async checkOptionIsDisplayed(option): Promise { const optionSelector = this.optionsDropdown.element(by.cssContainingText('span[class="mat-option-text"]', option)); - BrowserVisibility.waitUntilElementIsVisible(optionSelector); - return this; + await BrowserVisibility.waitUntilElementIsVisible(optionSelector); } - checkOptionIsNotDisplayed(option) { + async checkOptionIsNotDisplayed(option): Promise { const optionSelector = this.optionsDropdown.element(by.cssContainingText('span[class="mat-option-text"]', option)); - BrowserVisibility.waitUntilElementIsNotVisible(optionSelector); - return this; + await BrowserVisibility.waitUntilElementIsNotVisible(optionSelector); } - checkOptionsDropdownIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.optionsDropdown); - return this; + async checkOptionsDropdownIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.optionsDropdown); } - checkSortingSelectorIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.sortingSelector); - return this; + async checkSortingSelectorIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.sortingSelector); } - checkOrderArrowIsDownward() { - const deferred = protractor.promise.defer(); - BrowserVisibility.waitUntilElementIsVisible(this.orderArrow); - this.orderArrow.getText().then((result) => { - deferred.fulfill(result !== 'arrow_upward'); - }); - return deferred.promise; + async checkOrderArrowIsDownward(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.orderArrow); + + const result = await BrowserActions.getText(this.orderArrow); + return result !== 'arrow_upward'; } - checkOrderArrowIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.orderArrow); - return this; + async checkOrderArrowIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.orderArrow); } } diff --git a/lib/testing/src/lib/content-services/pages/search/search-text.page.ts b/lib/testing/src/lib/content-services/pages/search/search-text.page.ts index ffe623a672..231d8665e0 100644 --- a/lib/testing/src/lib/content-services/pages/search/search-text.page.ts +++ b/lib/testing/src/lib/content-services/pages/search/search-text.page.ts @@ -15,27 +15,28 @@ * limitations under the License. */ -import { protractor, by } from 'protractor'; +import { protractor, by, ElementFinder, Locator } from 'protractor'; import { BrowserVisibility } from '../../../core/utils/browser-visibility'; +import { BrowserActions } from '../../../core/utils/browser-actions'; export class SearchTextPage { - filter; - inputBy = by.css('input'); + filter: ElementFinder; + inputBy: Locator = by.css('input'); - constructor(filter) { + constructor(filter: ElementFinder) { this.filter = filter; } - getNamePlaceholder() { - BrowserVisibility.waitUntilElementIsVisible(this.filter); + async getNamePlaceholder(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.filter); return this.filter.element(this.inputBy).getAttribute('placeholder'); } - searchByName(name: string) { - BrowserVisibility.waitUntilElementIsVisible(this.filter); - this.filter.element(this.inputBy).clear(); - this.filter.element(this.inputBy).sendKeys(name).sendKeys(protractor.Key.ENTER); + async searchByName(name: string): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.filter); + await BrowserActions.clearSendKeys(this.filter.element(this.inputBy), name); + await this.filter.element(this.inputBy).sendKeys(protractor.Key.ENTER); } } diff --git a/lib/testing/src/lib/core/actions/api.service.ts b/lib/testing/src/lib/core/actions/api.service.ts index 4e692c79b2..acce3240b5 100644 --- a/lib/testing/src/lib/core/actions/api.service.ts +++ b/lib/testing/src/lib/core/actions/api.service.ts @@ -26,13 +26,13 @@ export class ApiService { constructor(clientId: string, host: string, hostSso: string, provider: string) { this.config = { - provider: provider, + provider, hostBpm: host, hostEcm: host, authType: 'OAUTH', oauth2: { host: hostSso, - clientId: clientId, + clientId, scope: 'openid', secret: '', implicitFlow: false, @@ -46,18 +46,18 @@ export class ApiService { this.apiService = new AlfrescoApi(this.config); } - async login(username: string, password: string) { + async login(username: string, password: string): Promise { await this.apiService.login(username, password); } - async performBpmOperation(path: string, method: string, queryParams: any, postBody: any) { + async performBpmOperation(path: string, method: string, queryParams: any, postBody: any): Promise { const uri = this.config.hostBpm + path; const pathParams = {}, formParams = {}; const contentTypes = ['application/json']; const accepts = ['application/json']; const headerParams = { - 'Authorization': 'bearer ' + this.apiService.oauth2Auth.token + Authorization: 'bearer ' + this.apiService.oauth2Auth.token }; return this.apiService.processClient.callCustomApi(uri, method, pathParams, queryParams, headerParams, formParams, postBody, @@ -67,14 +67,14 @@ export class ApiService { }); } - async performIdentityOperation(path: string, method: string, queryParams: any, postBody: any) { + async performIdentityOperation(path: string, method: string, queryParams: any, postBody: any): Promise { const uri = this.config.oauth2.host.replace('/realms', '/admin/realms') + path; const pathParams = {}, formParams = {}; const contentTypes = ['application/json']; const accepts = ['application/json']; const headerParams = { - 'Authorization': 'bearer ' + this.apiService.oauth2Auth.token + Authorization: 'bearer ' + this.apiService.oauth2Auth.token }; return this.apiService.processClient.callCustomApi(uri, method, pathParams, queryParams, headerParams, formParams, postBody, diff --git a/lib/testing/src/lib/core/actions/identity/applications.service.ts b/lib/testing/src/lib/core/actions/identity/applications.service.ts index 3c22ac6c13..5d3bf554a1 100644 --- a/lib/testing/src/lib/core/actions/identity/applications.service.ts +++ b/lib/testing/src/lib/core/actions/identity/applications.service.ts @@ -25,14 +25,14 @@ export class ApplicationsService { this.api = api; } - async getApplicationsByStatus(status) { + async getApplicationsByStatus(status): Promise { try { const path = '/deployment-service/v1/applications'; const method = 'GET'; - const queryParams = {'status': status}, postBody = {}; + const queryParams = { status: status }, postBody = {}; - return await this.api.performBpmOperation(path, method, queryParams, postBody); + return this.api.performBpmOperation(path, method, queryParams, postBody); } catch (error) { // tslint:disable-next-line:no-console console.log('Get Applications - Service error, Response: ', JSON.parse(JSON.stringify(error)).response.text); diff --git a/lib/testing/src/lib/core/actions/identity/group-identity.service.ts b/lib/testing/src/lib/core/actions/identity/group-identity.service.ts index 81a6d32af5..c984324543 100644 --- a/lib/testing/src/lib/core/actions/identity/group-identity.service.ts +++ b/lib/testing/src/lib/core/actions/identity/group-identity.service.ts @@ -17,9 +17,6 @@ import { ApiService } from '../api.service'; import { StringUtil } from '../../utils/string.util'; -import { browser } from 'protractor'; - -const GROUP_SUFFIX = browser.params.testConfig ? browser.params.testConfig.projectName : 'TestGroup'; export class GroupIdentityService { @@ -29,27 +26,27 @@ export class GroupIdentityService { this.api = api; } - async createIdentityGroup(groupName = StringUtil.generateRandomString(5)) { + async createIdentityGroup(groupName = StringUtil.generateRandomString(5)): Promise { await this.createGroup(groupName); const group = await this.getGroupInfoByGroupName(groupName); return group; } - async deleteIdentityGroup(groupId) { + async deleteIdentityGroup(groupId): Promise { await this.deleteGroup(groupId); } - async createGroup(groupName) { + async createGroup(groupName): Promise { const path = '/groups'; const method = 'POST'; const queryParams = {}, postBody = { - 'name': groupName + GROUP_SUFFIX + name: groupName + 'TestGroup' }; const data = await this.api.performIdentityOperation(path, method, queryParams, postBody); return data; } - async deleteGroup(groupId) { + async deleteGroup(groupId): Promise { const path = `/groups/${groupId}`; const method = 'DELETE'; const queryParams = {}, postBody = {}; @@ -57,20 +54,20 @@ export class GroupIdentityService { return data; } - async getGroupInfoByGroupName(groupName) { + async getGroupInfoByGroupName(groupName): Promise { const path = `/groups`; const method = 'GET'; - const queryParams = { 'search': groupName }, postBody = {}; + const queryParams = { search: groupName }, postBody = {}; const data = await this.api.performIdentityOperation(path, method, queryParams, postBody); return data[0]; } - async assignRole(groupId, roleId, roleName) { + async assignRole(groupId, roleId, roleName): Promise { const path = `/groups/${groupId}/role-mappings/realm`; const method = 'POST'; const queryParams = {}, - postBody = [{ 'id': roleId, 'name': roleName }]; + postBody = [{ id: roleId, name: roleName }]; const data = await this.api.performIdentityOperation(path, method, queryParams, postBody); return data; @@ -83,15 +80,15 @@ export class GroupIdentityService { * @param roleId ID of the clientRole * @param roleName of the clientRole */ - async addClientRole(groupId: string, clientId: string, roleId: string, roleName: string) { + async addClientRole(groupId: string, clientId: string, roleId: string, roleName: string): Promise { const path = `/groups/${groupId}/role-mappings/clients/${clientId}`; const method = 'POST', queryParams = {}, postBody = [{ - 'id': roleId, - 'name': roleName, - 'composite': false, - 'clientRole': true, - 'containerId': clientId + id: roleId, + name: roleName, + composite: false, + clientRole: true, + containerId: clientId }]; const data = await this.api.performIdentityOperation(path, method, queryParams, postBody); return data; @@ -102,7 +99,7 @@ export class GroupIdentityService { * @param applicationName Name of the app * @returns client ID string */ - async getClientIdByApplicationName(applicationName: string) { + async getClientIdByApplicationName(applicationName: string): Promise { const path = `/clients`; const method = 'GET', queryParams = { clientId: applicationName }, postBody = {}; 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 2f0fe63259..a7e4f08202 100644 --- a/lib/testing/src/lib/core/actions/identity/identity.service.ts +++ b/lib/testing/src/lib/core/actions/identity/identity.service.ts @@ -36,7 +36,7 @@ export class IdentityService { APS_DEVOPS_USER: 'APS_DEVOPS' }; - async createIdentityUserWithRole(apiService: ApiService, roles: string[]) { + async createIdentityUserWithRole(apiService: ApiService, roles: string[]): Promise { const rolesService = new RolesService(apiService); const user = await this.createIdentityUser(); for (let i = 0; i < roles.length; i++) { @@ -46,7 +46,7 @@ export class IdentityService { return user; } - async createIdentityUser(user: UserModel = new UserModel()) { + async createIdentityUser(user: UserModel = new UserModel()): Promise { await this.createUser(user); const userIdentity = await this.getUserInfoByUsername(user.username); @@ -55,15 +55,15 @@ export class IdentityService { return user; } - async createIdentityUserAndSyncECMBPM(user: UserModel) { + async createIdentityUserAndSyncECMBPM(user: UserModel): Promise { if (this.api.config.provider === 'ECM' || this.api.config.provider === 'ALL') { - const createUser: PersonBodyCreate = { + const createUser: PersonBodyCreate = { firstName: user.firstName, lastName: user.lastName, password: user.password, email: user.email, id: user.email - }; + } as PersonBodyCreate; await this.api.apiService.core.peopleApi.addPerson(createUser); } @@ -82,89 +82,89 @@ export class IdentityService { await this.createIdentityUser(user); } - async deleteIdentityUser(userId) { + async deleteIdentityUser(userId): Promise { await this.deleteUser(userId); } - async createUser(user: UserModel) { + async createUser(user: UserModel): Promise { try { const path = '/users'; const method = 'POST'; const queryParams = {}, postBody = { - 'username': user.username, - 'firstName': user.firstName, - 'lastName': user.lastName, - 'enabled': true, - 'email': user.email + username: user.username, + firstName: user.firstName, + lastName: user.lastName, + enabled: true, + email: user.email }; - return await this.api.performIdentityOperation(path, method, queryParams, postBody); + return this.api.performIdentityOperation(path, method, queryParams, postBody); } catch (error) { // tslint:disable-next-line:no-console console.log('Create User - Service error, Response: ', JSON.parse(JSON.stringify(error)).response.text); } } - async deleteUser(userId) { + async deleteUser(userId): Promise { const path = `/users/${userId}`; const method = 'DELETE'; const queryParams = {}, postBody = {}; - return await this.api.performIdentityOperation(path, method, queryParams, postBody); + return this.api.performIdentityOperation(path, method, queryParams, postBody); } - async getUserInfoByUsername(username) { + async getUserInfoByUsername(username): Promise { const path = `/users`; const method = 'GET'; - const queryParams = {'username': username}, postBody = {}; + const queryParams = { username: username }, postBody = {}; const data = await this.api.performIdentityOperation(path, method, queryParams, postBody); return data[0]; } - async resetPassword(id, password) { + async resetPassword(id, password): Promise { const path = `/users/${id}/reset-password`; const method = 'PUT'; const queryParams = {}, - postBody = {'type': 'password', 'value': password, 'temporary': false}; + postBody = { type: 'password', value: password, temporary: false }; - return await this.api.performIdentityOperation(path, method, queryParams, postBody); + return this.api.performIdentityOperation(path, method, queryParams, postBody); } - async addUserToGroup(userId, groupId) { + async addUserToGroup(userId, groupId): Promise { try { const path = `/users/${userId}/groups/${groupId}`; const method = 'PUT'; const queryParams = {}, - postBody = {'realm': 'alfresco', 'userId': userId, 'groupId': groupId}; + postBody = { realm: 'alfresco', userId: userId, groupId: groupId }; - return await this.api.performIdentityOperation(path, method, queryParams, postBody); + return this.api.performIdentityOperation(path, method, queryParams, postBody); } catch (error) { // tslint:disable-next-line:no-console console.log('Add User To Group - Service error, Response: ', JSON.parse(JSON.stringify(error))); } } - async assignRole(userId, roleId, roleName) { + async assignRole(userId, roleId, roleName): Promise { const path = `/users/${userId}/role-mappings/realm`; const method = 'POST'; const queryParams = {}, - postBody = [{'id': roleId, 'name': roleName}]; + postBody = [{ id: roleId, name: roleName }]; - return await this.api.performIdentityOperation(path, method, queryParams, postBody); + return this.api.performIdentityOperation(path, method, queryParams, postBody); } - async deleteClientRole(userId: string, clientId: string, roleId: string, roleName: string) { + async deleteClientRole(userId: string, clientId: string, roleId: string, roleName: string): Promise { const path = `/users/${userId}/role-mappings/clients/${clientId}`; const method = 'DELETE', queryParams = {}, postBody = [{ - 'id': roleId, - 'name': roleName, - 'composite': false, - 'clientRole': true, - 'containerId': clientId + id: roleId, + name: roleName, + composite: false, + clientRole: true, + containerId: clientId }]; - return await this.api.performIdentityOperation(path, method, queryParams, postBody); + return this.api.performIdentityOperation(path, method, queryParams, postBody); } } 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 2f3e200b56..d4dc8fef30 100644 --- a/lib/testing/src/lib/core/actions/identity/query.service.ts +++ b/lib/testing/src/lib/core/actions/identity/query.service.ts @@ -25,30 +25,28 @@ export class QueryService { this.api = api; } - async getProcessInstanceTasks(processInstanceId, appName) { + async getProcessInstanceTasks(processInstanceId, appName): Promise { try { const path = '/' + appName + '/query/v1/process-instances/' + processInstanceId + '/tasks'; const method = 'GET'; const queryParams = {}, postBody = {}; - const data = await this.api.performBpmOperation(path, method, queryParams, postBody); - return data; + return this.api.performBpmOperation(path, method, queryParams, postBody); } catch (error) { // tslint:disable-next-line:no-console console.log('get process-instances Service error'); } } - async getProcessInstanceSubProcesses(processInstanceId, appName) { + async getProcessInstanceSubProcesses(processInstanceId, appName): Promise { try { const path = '/' + appName + '/query/v1/process-instances/' + processInstanceId + '/subprocesses'; const method = 'GET'; const queryParams = {}; - const data = await this.api.performBpmOperation(path, method, queryParams, {}); - return data; + return this.api.performBpmOperation(path, method, queryParams, {}); } catch (error) { // tslint:disable-next-line:no-console console.log('get subprocesses process-instances Service error'); diff --git a/lib/testing/src/lib/core/actions/identity/roles.service.ts b/lib/testing/src/lib/core/actions/identity/roles.service.ts index 1b2c60da5c..43988200b2 100644 --- a/lib/testing/src/lib/core/actions/identity/roles.service.ts +++ b/lib/testing/src/lib/core/actions/identity/roles.service.ts @@ -25,7 +25,7 @@ export class RolesService { this.api = api; } - async getRoleIdByRoleName(roleName) { + async getRoleIdByRoleName(roleName): Promise { const path = `/roles`; const method = 'GET'; let roleId; @@ -40,7 +40,7 @@ export class RolesService { return roleId; } - async getClientRoleIdByRoleName(groupId, clientId, clientRoleName) { + async getClientRoleIdByRoleName(groupId, clientId, clientRoleName): Promise { const path = `/groups/${groupId}/role-mappings/clients/${clientId}/available`; const method = 'GET'; let clientRoleId; diff --git a/lib/testing/src/lib/core/actions/identity/tasks.service.ts b/lib/testing/src/lib/core/actions/identity/tasks.service.ts index cef3f7c22e..b354c41cea 100644 --- a/lib/testing/src/lib/core/actions/identity/tasks.service.ts +++ b/lib/testing/src/lib/core/actions/identity/tasks.service.ts @@ -25,51 +25,51 @@ export class TasksService { this.api = api; } - async createStandaloneTask(taskName, appName, options?) { + async createStandaloneTask(taskName, appName, options?): Promise { try { const path = '/' + appName + '/rb/v1/tasks'; const method = 'POST'; const queryParams = {}, postBody = { - 'name': taskName, - 'payloadType': 'CreateTaskPayload', + name: taskName, + payloadType: 'CreateTaskPayload', ...options }; - return await this.api.performBpmOperation(path, method, queryParams, postBody); + return this.api.performBpmOperation(path, method, queryParams, postBody); } catch (error) { // tslint:disable-next-line:no-console console.log('Create Task - Service error, Response: ', JSON.parse(JSON.stringify(error))); } } - async createStandaloneTaskWithForm(taskName, appName, formKey, options?) { + async createStandaloneTaskWithForm(taskName, appName, formKey, options?): Promise { try { const path = '/' + appName + '/rb/v1/tasks'; const method = 'POST'; const queryParams = {}, postBody = { - 'name': taskName, - 'payloadType': 'CreateTaskPayload', - 'formKey': formKey, + name: taskName, + payloadType: 'CreateTaskPayload', + formKey: formKey, ...options }; - return await this.api.performBpmOperation(path, method, queryParams, postBody); + return this.api.performBpmOperation(path, method, queryParams, postBody); } catch (error) { // tslint:disable-next-line:no-console console.log('Create FormTask - Service error, Response: ', JSON.parse(JSON.stringify(error))); } } - async completeTask(taskId, appName) { + async completeTask(taskId, appName): Promise { try { const path = '/' + appName + '/rb/v1/tasks/' + taskId + '/complete'; const method = 'POST'; - const queryParams = {}, postBody = { 'payloadType': 'CompleteTaskPayload' }; + const queryParams = {}, postBody = { payloadType: 'CompleteTaskPayload' }; - return await this.api.performBpmOperation(path, method, queryParams, postBody); + return this.api.performBpmOperation(path, method, queryParams, postBody); } catch (error) { // tslint:disable-next-line:no-console console.log('Complete Task - Service error, Response: ', JSON.parse(JSON.stringify(error)).response.text); @@ -77,56 +77,56 @@ export class TasksService { } - async claimTask(taskId, appName) { + async claimTask(taskId, appName): Promise { try { const path = '/' + appName + '/rb/v1/tasks/' + taskId + `/claim`; const method = 'POST'; const queryParams = {}, postBody = {}; - return await this.api.performBpmOperation(path, method, queryParams, postBody); + return this.api.performBpmOperation(path, method, queryParams, postBody); } catch (error) { // tslint:disable-next-line:no-console console.log('Claim Task - Service error, Response: ', JSON.parse(JSON.stringify(error)).response.text); } } - async deleteTask(taskId, appName) { + async deleteTask(taskId, appName): Promise { try { const path = '/' + appName + '/rb/v1/tasks/' + taskId; const method = 'DELETE'; const queryParams = {}, postBody = {}; - return await this.api.performBpmOperation(path, method, queryParams, postBody); + return this.api.performBpmOperation(path, method, queryParams, postBody); } catch (error) { // tslint:disable-next-line:no-console console.log('Delete Task - Service error, Response: ', JSON.parse(JSON.stringify(error)).response.text); } } - async createAndCompleteTask(taskName, appName) { + async createAndCompleteTask(taskName, appName): Promise { const task = await this.createStandaloneTask(taskName, appName); await this.claimTask(task.entry.id, appName); await this.completeTask(task.entry.id, appName); return task; } - async getTask(taskId, appName) { + async getTask(taskId, appName): Promise { try { const path = '/' + appName + '/query/v1/tasks/' + taskId; const method = 'GET'; const queryParams = {}, postBody = {}; - return await this.api.performBpmOperation(path, method, queryParams, postBody); + return this.api.performBpmOperation(path, method, queryParams, postBody); } catch (error) { // tslint:disable-next-line:no-console console.log('Get Task - Service error, Response: ', JSON.parse(JSON.stringify(error)).response.text); } } - async getTaskId(taskName, appName) { + async getTaskId(taskName, appName): Promise { try { const path = '/' + appName + '/query/v1/tasks'; const method = 'GET'; @@ -141,15 +141,15 @@ export class TasksService { } } - async createStandaloneSubtask(parentTaskId, appName, name) { + async createStandaloneSubtask(parentTaskId, appName, name): Promise { try { const path = '/' + appName + '/rb/v1/tasks'; const method = 'POST'; const queryParams = {}, - postBody = { 'name': name, 'parentTaskId': parentTaskId, 'payloadType': 'CreateTaskPayload' }; + postBody = { name: name, parentTaskId: parentTaskId, payloadType: 'CreateTaskPayload' }; - return await this.api.performBpmOperation(path, method, queryParams, postBody); + return this.api.performBpmOperation(path, method, queryParams, postBody); } catch (error) { // tslint:disable-next-line:no-console console.log('Create Task - Service error, Response: ', JSON.parse(JSON.stringify(error)).response.text); diff --git a/lib/testing/src/lib/core/pages/data-table-component.page.ts b/lib/testing/src/lib/core/pages/data-table-component.page.ts index fab21c5e54..8c68c3d192 100644 --- a/lib/testing/src/lib/core/pages/data-table-component.page.ts +++ b/lib/testing/src/lib/core/pages/data-table-component.page.ts @@ -15,8 +15,7 @@ * limitations under the License. */ -import { browser, by, element, protractor } from 'protractor'; -import { ElementFinder, ElementArrayFinder } from 'protractor/built/element'; +import { browser, by, element, Locator, protractor, ElementFinder, ElementArrayFinder } from 'protractor'; import { BrowserVisibility } from '../utils/browser-visibility'; import { BrowserActions } from '../utils/browser-actions'; @@ -24,22 +23,20 @@ export class DataTableComponentPage { rootElement: ElementFinder; list: ElementArrayFinder; - contents; - tableBody; - spinner; - rows = by.css(`adf-datatable div[class*='adf-datatable-body'] div[class*='adf-datatable-row']`); - allColumns; - selectedRowNumber; - allSelectedRows; - selectAll; - copyColumnTooltip; + contents: ElementArrayFinder; + tableBody: ElementFinder; + rows: Locator = by.css(`adf-datatable div[class*='adf-datatable-body'] div[class*='adf-datatable-row']`); + allColumns: ElementArrayFinder; + selectedRowNumber: ElementFinder; + allSelectedRows: ElementArrayFinder; + selectAll: ElementFinder; + copyColumnTooltip: ElementFinder; constructor(rootElement: ElementFinder = element.all(by.css('adf-datatable')).first()) { this.rootElement = rootElement; this.list = this.rootElement.all(by.css(`div[class*='adf-datatable-body'] div[class*='adf-datatable-row']`)); this.contents = this.rootElement.all(by.css('div[class="adf-datatable-body"] span')); this.tableBody = this.rootElement.all(by.css(`div[class='adf-datatable-body']`)).first(); - this.spinner = this.rootElement.element(by.css('mat-progress-spinner')); this.allColumns = this.rootElement.all(by.css('div[data-automation-id*="auto_id_entry."]')); this.selectedRowNumber = this.rootElement.element(by.css(`div[class*='is-selected'] div[data-automation-id*='text_']`)); this.allSelectedRows = this.rootElement.all(by.css(`div[class*='is-selected']`)); @@ -47,183 +44,155 @@ export class DataTableComponentPage { this.copyColumnTooltip = this.rootElement.element(by.css(`adf-copy-content-tooltip span`)); } - checkAllRowsButtonIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.selectAll); - return this; + async checkAllRowsButtonIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.selectAll); } - checkAllRows() { - BrowserVisibility.waitUntilElementIsVisible(this.selectAll); - BrowserVisibility.waitUntilElementIsClickable(this.selectAll).then(() => { - this.selectAll.click(); - BrowserVisibility.waitUntilElementIsVisible(this.selectAll.element(by.css('input[aria-checked="true"]'))); - }); - return this; + async checkAllRows(): Promise { + await BrowserActions.click(this.selectAll); + await BrowserVisibility.waitUntilElementIsVisible(this.selectAll.element(by.css('input[aria-checked="true"]'))); } - uncheckAllRows() { - BrowserVisibility.waitUntilElementIsVisible(this.selectAll); - BrowserVisibility.waitUntilElementIsClickable(this.selectAll).then(() => { - this.selectAll.click(); - BrowserVisibility.waitUntilElementIsNotOnPage(this.selectAll.element(by.css('input[aria-checked="true"]'))); - }); - return this; + async uncheckAllRows(): Promise { + await BrowserActions.click(this.selectAll); + await BrowserVisibility.waitUntilElementIsNotVisible(this.selectAll.element(by.css('input[aria-checked="true"]'))); } - clickCheckbox(columnName, columnValue) { + async clickCheckbox(columnName, columnValue): Promise { const checkbox = this.getRowCheckbox(columnName, columnValue); - BrowserActions.click(checkbox); - return this; + await BrowserActions.click(checkbox); } - checkRowIsNotChecked(columnName, columnValue) { - BrowserVisibility.waitUntilElementIsNotOnPage(this.getRowCheckbox(columnName, columnValue).element(by.css('input[aria-checked="true"]'))); + async checkRowIsNotChecked(columnName, columnValue): Promise { + await BrowserVisibility.waitUntilElementIsNotVisible(this.getRowCheckbox(columnName, columnValue).element(by.css('input[aria-checked="true"]'))); } - checkRowIsChecked(columnName, columnValue) { + async checkRowIsChecked(columnName, columnValue): Promise { const rowCheckbox = this.getRowCheckbox(columnName, columnValue); - BrowserVisibility.waitUntilElementIsVisible(rowCheckbox.element(by.css('input[aria-checked="true"]'))); + await BrowserVisibility.waitUntilElementIsVisible(rowCheckbox.element(by.css('input[aria-checked="true"]'))); } - getRowCheckbox(columnName, columnValue) { - return this.getRow(columnName, columnValue) - .element(by.css('mat-checkbox')); + getRowCheckbox(columnName, columnValue): ElementFinder { + return this.getRow(columnName, columnValue).element(by.css('mat-checkbox')); } - checkNoRowIsSelected() { - BrowserVisibility.waitUntilElementIsNotOnPage(this.selectedRowNumber); + async checkNoRowIsSelected(): Promise { + await BrowserVisibility.waitUntilElementIsNotVisible(this.selectedRowNumber); } - getNumberOfSelectedRows() { - return this.allSelectedRows.count(); + async getNumberOfSelectedRows(): Promise { + return await this.allSelectedRows.count(); } - selectRowWithKeyboard(columnName, columnValue) { + async selectRow(columnName, columnValue): Promise { + await BrowserActions.closeMenuAndDialogs(); const row = this.getRow(columnName, columnValue); - browser.actions().sendKeys(protractor.Key.COMMAND).click(row).perform(); + await BrowserActions.click(row); } - selectRow(columnName, columnValue) { - BrowserActions.closeMenuAndDialogs(); - const row = this.getRow(columnName, columnValue); - BrowserActions.click(row); - return this; + async selectRowWithKeyboard(columnName, columnValue): Promise { + await browser.actions().sendKeys(protractor.Key.COMMAND).perform(); + await this.selectRow(columnName, columnValue); + await browser.actions().sendKeys(protractor.Key.NULL).perform(); } - checkRowIsSelected(columnName, columnValue) { + async checkRowIsSelected(columnName, columnValue): Promise { const selectedRow = this.getCellElementByValue(columnName, columnValue).element(by.xpath(`ancestor::div[contains(@class, 'is-selected')]`)); - BrowserVisibility.waitUntilElementIsVisible(selectedRow); - return this; + await BrowserVisibility.waitUntilElementIsVisible(selectedRow); } - checkRowIsNotSelected(columnName, columnValue) { + async checkRowIsNotSelected(columnName, columnValue): Promise { const selectedRow = this.getCellElementByValue(columnName, columnValue).element(by.xpath(`ancestor::div[contains(@class, 'is-selected')]`)); - BrowserVisibility.waitUntilElementIsNotOnPage(selectedRow); - return this; + await BrowserVisibility.waitUntilElementIsNotVisible(selectedRow); } - getColumnValueForRow(identifyingColumn, identifyingValue, columnName) { + async getColumnValueForRow(identifyingColumn, identifyingValue, columnName): Promise { const row = this.getRow(identifyingColumn, identifyingValue); - BrowserVisibility.waitUntilElementIsVisible(row); + await BrowserVisibility.waitUntilElementIsVisible(row); const rowColumn = row.element(by.css(`div[title="${columnName}"] span`)); - return BrowserActions.getText(rowColumn); + return await BrowserActions.getText(rowColumn); } /** * Check the list is sorted. * - * @param sortOrder: 'ASC' if the list is expected to be sorted ascending and 'DESC' for descending + * @param sortOrder: 'ASC' if the list is await expected to be sorted ascending and 'DESC' for descending * @param columnTitle: titleColumn column - * @return 'true' if the list is sorted as expected and 'false' if it isn't + * @return 'true' if the list is sorted as await expected and 'false' if it isn't */ - checkListIsSorted(sortOrder: string, columnTitle: string) { - const deferred = protractor.promise.defer(); + async checkListIsSorted(sortOrder: string, columnTitle: string): Promise { const column = element.all(by.css(`div.adf-datatable-cell[title='${columnTitle}'] span`)); - BrowserVisibility.waitUntilElementIsVisible(column.first()); + // await BrowserVisibility.waitUntilElementIsVisible(column.first()); const initialList = []; - column.each(function (currentElement) { - currentElement.getText().then(function (text) { - if (text.length !== 0) { - initialList.push(text.toLowerCase()); - } - }); - }).then(function () { - let sortedList = [...initialList]; - sortedList = sortedList.sort(); - if (sortOrder.toLocaleLowerCase() === 'desc') { - sortedList = sortedList.reverse(); + await column.each(async (currentElement) => { + const text = await BrowserActions.getText(currentElement); + if (text.length !== 0) { + initialList.push(text.toLowerCase()); } - - if (initialList.toString() !== sortedList.toString()) { - // tslint:disable-next-line:no-console - console.log('Wrong order'); - // tslint:disable-next-line:no-console - console.log('List' + initialList.toString()); - // tslint:disable-next-line:no-console - console.log('sortedList sortedList' + sortedList.toString()); - } - - deferred.fulfill(initialList.toString() === sortedList.toString()); }); - return deferred.promise; + let sortedList = initialList; + sortedList = sortedList.sort(); + if (sortOrder.toLocaleLowerCase() === 'desc') { + sortedList = sortedList.reverse(); + } + return initialList.toString() === sortedList.toString(); } - rightClickOnRow(columnName, columnValue) { - BrowserActions.closeMenuAndDialogs(); + async rightClickOnRow(columnName, columnValue): Promise { const row = this.getRow(columnName, columnValue); - browser.actions().click(row, protractor.Button.RIGHT).perform(); - BrowserVisibility.waitUntilElementIsVisible(element(by.id('adf-context-menu-content'))); + await browser.actions().mouseMove(row).perform(); + await browser.actions().click(row, protractor.Button.RIGHT).perform(); + await BrowserVisibility.waitUntilElementIsVisible(element(by.id('adf-context-menu-content'))); } - rightClickOnRowByIndex(index: number) { + async getTooltip(columnName, columnValue): Promise { + return await this.getCellElementByValue(columnName, columnValue).getAttribute('title'); + } + + async rightClickOnRowByIndex(index: number): Promise { const row = this.getRowByIndex(index); - BrowserActions.rightClick(row); - BrowserVisibility.waitUntilElementIsVisible(element(by.id('adf-context-menu-content'))); + await BrowserActions.rightClick(row); + await BrowserVisibility.waitUntilElementIsVisible(element(by.id('adf-context-menu-content'))); } - getTooltip(columnName, columnValue) { - return this.getCellElementByValue(columnName, columnValue).getAttribute('title'); - } - - getFileHyperlink(filename) { + getFileHyperlink(filename): ElementFinder { return element(by.cssContainingText('adf-name-column[class*="adf-datatable-link"] span', filename)); } - numberOfRows() { - return this.rootElement.all(this.rows).count(); + async numberOfRows(): Promise { + return await this.rootElement.all(this.rows).count(); } async getAllRowsColumnValues(column) { const columnLocator = by.css("adf-datatable div[class*='adf-datatable-body'] div[class*='adf-datatable-row'] div[title='" + column + "'] span"); - BrowserVisibility.waitUntilElementIsVisible(element.all(columnLocator).first()); - const initialList: any = await element.all(columnLocator).getText(); - return initialList.filter((el) => el); + await BrowserVisibility.waitUntilElementIsPresent(element.all(columnLocator).first()); + return await element.all(columnLocator) + .filter(async (el) => await el.isPresent()) + .map(async (el) => await el.getText()); } async getRowsWithSameColumnValues(columnName, columnValue) { const columnLocator = by.css(`div[title='${columnName}'] div[data-automation-id="text_${columnValue}"] span`); - BrowserVisibility.waitUntilElementIsVisible(this.rootElement.all(columnLocator).first()); + await BrowserVisibility.waitUntilElementIsVisible(this.rootElement.all(columnLocator).first()); return this.rootElement.all(columnLocator).getText(); } - doubleClickRow(columnName: string, columnValue: string) { - BrowserActions.closeMenuAndDialogs(); + async doubleClickRow(columnName: string, columnValue: string): Promise { const row = this.getRow(columnName, columnValue); - BrowserActions.click(row); - browser.actions().sendKeys(protractor.Key.ENTER).perform(); - return this; + await BrowserActions.click(row); + await browser.actions().sendKeys(protractor.Key.ENTER).perform(); } - waitForTableBody() { - BrowserVisibility.waitUntilElementIsVisible(this.tableBody); + async waitForTableBody(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.tableBody); } - getFirstElementDetail(detail) { + async getFirstElementDetail(detail): Promise { const firstNode = element.all(by.css(`adf-datatable div[title="${detail}"] span`)).first(); - return firstNode.getText(); + return await BrowserActions.getText(firstNode); } - geCellElementDetail(detail) { + geCellElementDetail(detail): ElementArrayFinder { return element.all(by.css(`adf-datatable div[title="${detail}"] span`)); } @@ -232,188 +201,157 @@ export class DataTableComponentPage { * * @param sortOrder : 'ASC' to sort the list ascendant and 'DESC' for descendant */ - sortByColumn(sortOrder: string, titleColumn: string) { + async sortByColumn(sortOrder: string, titleColumn: string): Promise { const locator = by.css(`div[data-automation-id="auto_id_${titleColumn}"]`); - BrowserVisibility.waitUntilElementIsVisible(element(locator)); - return element(locator).getAttribute('class').then(function (result) { - if (sortOrder.toLocaleLowerCase() === 'asc') { - if (!result.includes('sorted-asc')) { - if (result.includes('sorted-desc') || result.includes('sortable')) { - element(locator).click(); - } - } - } else { - if (result.includes('sorted-asc')) { - element(locator).click(); - } else if (result.includes('sortable')) { - element(locator).click(); - element(locator).click(); + await BrowserVisibility.waitUntilElementIsVisible(element(locator)); + const result = await element(locator).getAttribute('class'); + if (sortOrder.toLocaleLowerCase() === 'asc') { + if (!result.includes('sorted-asc')) { + if (result.includes('sorted-desc') || result.includes('sortable')) { + await BrowserActions.click(element(locator)); } } - - return Promise.resolve(); - }); + } else { + if (result.includes('sorted-asc')) { + await BrowserActions.click(element(locator)); + } else if (result.includes('sortable')) { + await BrowserActions.click(element(locator)); + await BrowserActions.click(element(locator)); + } + } } - checkContentIsDisplayed(columnName, columnValue) { + async checkContentIsDisplayed(columnName, columnValue): Promise { const row = this.getCellElementByValue(columnName, columnValue); - BrowserVisibility.waitUntilElementIsVisible(row); - return this; + await BrowserVisibility.waitUntilElementIsVisible(row); } - checkContentIsNotDisplayed(columnName, columnValue) { + async checkContentIsNotDisplayed(columnName, columnValue): Promise { const row = this.getCellElementByValue(columnName, columnValue); - BrowserVisibility.waitUntilElementIsNotOnPage(row); - return this; + await BrowserVisibility.waitUntilElementIsNotVisible(row); } - getRow(columnName, columnValue) { - const row = this.rootElement.all(by.css(`div[title="${columnName}"] div[data-automation-id="text_${columnValue}"]`)).first() + getRow(columnName, columnValue): ElementFinder { + return this.rootElement.all(by.css(`div[title="${columnName}"] div[data-automation-id="text_${columnValue}"]`)).first() .element(by.xpath(`ancestor::div[contains(@class, 'adf-datatable-row')]`)); - return row; } - getRowByIndex(index: number) { - const row = this.rootElement.element(by.xpath(`//div[contains(@class,'adf-datatable-body')]//div[contains(@class,'adf-datatable-row')][${index}]`)); - return row; + getRowByIndex(index: number): ElementFinder { + return this.rootElement.element(by.xpath(`//div[contains(@class,'adf-datatable-body')]//div[contains(@class,'adf-datatable-row')][${index}]`)); } - contentInPosition(position) { - BrowserVisibility.waitUntilElementIsVisible(this.contents); - return this.contents.get(position - 1).getText(); + async contentInPosition(position): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.contents.first()); + return await BrowserActions.getText(this.contents.get(position - 1)); } - getCellElementByValue(columnName, columnValue) { + getCellElementByValue(columnName, columnValue): ElementFinder { return this.rootElement.all(by.css(`div[title="${columnName}"] div[data-automation-id="text_${columnValue}"] span`)).first(); } - checkSpinnerIsDisplayed() { - BrowserVisibility.waitUntilElementIsPresent(this.spinner); - return this; + async tableIsLoaded(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.rootElement); } - checkSpinnerIsNotDisplayed() { - BrowserVisibility.waitUntilElementIsNotOnPage(this.spinner); - return this; + async waitTillContentLoaded(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.contents.first()); } - tableIsLoaded() { - BrowserVisibility.waitUntilElementIsVisible(this.rootElement); - return this; + async checkColumnIsDisplayed(column): Promise { + await BrowserVisibility.waitUntilElementIsVisible(element(by.css(`div[data-automation-id="auto_id_entry.${column}"]`))); } - waitTillContentLoaded() { - return BrowserVisibility.waitUntilElementIsVisible(this.contents); + async getNumberOfColumns(): Promise { + return await this.allColumns.count(); } - checkColumnIsDisplayed(column) { - BrowserVisibility.waitUntilElementIsVisible(element(by.css(`div[data-automation-id="auto_id_entry.${column}"]`))); - return this; + async getNumberOfRows(): Promise { + return await this.list.count(); } - getNumberOfColumns() { - return this.allColumns.count(); - } - - getNumberOfRows() { - return this.list.count(); - } - - getCellByRowNumberAndColumnName(rowNumber, columnName) { + getCellByRowNumberAndColumnName(rowNumber, columnName): ElementFinder { return this.list.get(rowNumber).all(by.css(`div[title="${columnName}"] span`)).first(); } - getCellByRowContentAndColumn(rowColumn, rowContent, columnName) { + getCellByRowContentAndColumn(rowColumn, rowContent, columnName): ElementFinder { return this.getRow(rowColumn, rowContent).element(by.css(`div[title='${columnName}']`)); } - selectRowByContent(content) { + async selectRowByContent(content): Promise { const row = this.getCellByContent(content); - return row.click(); + await BrowserActions.click(row); } - checkRowByContentIsSelected(folderName) { + async checkRowByContentIsSelected(folderName): Promise { const selectedRow = this.getCellByContent(folderName).element(by.xpath(`ancestor::div[contains(@class, 'is-selected')]`)); - BrowserVisibility.waitUntilElementIsVisible(selectedRow); - return this; + await BrowserVisibility.waitUntilElementIsVisible(selectedRow); } - checkRowByContentIsNotSelected(folderName) { + async checkRowByContentIsNotSelected(folderName): Promise { const selectedRow = this.getCellByContent(folderName).element(by.xpath(`ancestor::div[contains(@class, 'is-selected')]`)); - BrowserVisibility.waitUntilElementIsNotVisible(selectedRow); - return this; + await BrowserVisibility.waitUntilElementIsNotVisible(selectedRow); } getCellByContent(content) { - const cell = this.rootElement.all(by.cssContainingText(`div[class*='adf-datatable-row'] div[class*='adf-datatable-cell']`, content)).first(); - BrowserVisibility.waitUntilElementIsVisible(cell); - return cell; + return this.rootElement.all(by.cssContainingText(`div[class*='adf-datatable-row'] div[class*='adf-datatable-cell']`, content)).first(); } - checkCellByHighlightContent(content) { + async checkCellByHighlightContent(content) { const cell = this.rootElement.element(by.cssContainingText(`div[class*='adf-datatable-row'] div[class*='adf-name-location-cell-name'] span.adf-highlight`, content)); - BrowserVisibility.waitUntilElementIsVisible(cell); - return cell; + await BrowserVisibility.waitUntilElementIsVisible(cell); } - clickRowByContent(name) { + async clickRowByContent(name): Promise { const resultElement = this.rootElement.all(by.css(`div[data-automation-id='${name}']`)).first(); - BrowserActions.click(resultElement); + await BrowserActions.click(resultElement); } - clickRowByContentCheckbox(name) { + async clickRowByContentCheckbox(name): Promise { const resultElement = this.rootElement.all(by.css(`div[data-automation-id='${name}']`)).first().element(by.xpath(`ancestor::div/div/mat-checkbox`)); - BrowserActions.click(resultElement); + await browser.actions().mouseMove(resultElement); + await BrowserActions.click(resultElement); } - checkRowContentIsDisplayed(content) { + async checkRowContentIsDisplayed(content): Promise { const resultElement = this.rootElement.all(by.css(`div[data-automation-id='${content}']`)).first(); - BrowserVisibility.waitUntilElementIsVisible(resultElement); - return this; + await BrowserVisibility.waitUntilElementIsVisible(resultElement); } - checkRowContentIsNotDisplayed(content) { + async checkRowContentIsNotDisplayed(content): Promise { const resultElement = this.rootElement.all(by.css(`div[data-automation-id='${content}']`)).first(); - BrowserVisibility.waitUntilElementIsNotVisible(resultElement); - return this; + await BrowserVisibility.waitUntilElementIsNotVisible(resultElement); } - checkRowContentIsDisabled(content) { + async checkRowContentIsDisabled(content): Promise { const resultElement = this.rootElement.all(by.css(`div[data-automation-id='${content}'] div.adf-cell-value img[aria-label='disable']`)).first(); - BrowserVisibility.waitUntilElementIsVisible(resultElement); - return this; + await BrowserVisibility.waitUntilElementIsVisible(resultElement); } - doubleClickRowByContent(name) { + async doubleClickRowByContent(name): Promise { const resultElement = this.rootElement.all(by.css(`div[data-automation-id='${name}']`)).first(); - BrowserActions.click(resultElement); - browser.actions().sendKeys(protractor.Key.ENTER).perform(); - return this; + await BrowserActions.click(resultElement); + await browser.actions().sendKeys(protractor.Key.ENTER).perform(); } - getCopyContentTooltip() { - return BrowserActions.getText(this.copyColumnTooltip); + async getCopyContentTooltip(): Promise { + return await BrowserActions.getText(this.copyColumnTooltip); } - copyContentTooltipIsNotDisplayed() { - BrowserVisibility.waitUntilElementIsNotPresent(this.copyColumnTooltip); - return this; + async copyContentTooltipIsNotDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsStale(this.copyColumnTooltip); } - mouseOverColumn(columnName, columnValue) { + async mouseOverColumn(columnName, columnValue): Promise { const column = this.getCellElementByValue(columnName, columnValue); - this.mouseOverElement(column); - return this; + await this.mouseOverElement(column); } - mouseOverElement(elem) { - BrowserVisibility.waitUntilElementIsVisible(elem); - browser.actions().mouseMove(elem).perform(); - return this; + async mouseOverElement(elem): Promise { + await BrowserVisibility.waitUntilElementIsVisible(elem); + await browser.actions().mouseMove(elem).perform(); } - clickColumn(columnName, columnValue) { - BrowserActions.clickExecuteScript(`div[title="${columnName}"] div[data-automation-id="text_${columnValue}"] span`); - return this; + async clickColumn(columnName, columnValue): Promise { + await BrowserActions.clickExecuteScript(`div[title="${columnName}"] div[data-automation-id="text_${columnValue}"] span`); } } diff --git a/lib/testing/src/lib/core/pages/error.page.ts b/lib/testing/src/lib/core/pages/error.page.ts index 3156a00cec..9cddc87152 100644 --- a/lib/testing/src/lib/core/pages/error.page.ts +++ b/lib/testing/src/lib/core/pages/error.page.ts @@ -18,36 +18,37 @@ import { BrowserVisibility } from '../utils/browser-visibility'; import { element, by } from 'protractor'; import { BrowserActions } from '../utils/browser-actions'; +import { ElementFinder } from 'protractor'; export class ErrorPage { - errorPageCode = element(by.css('adf-error-content .adf-error-content-code')); - errorPageTitle = element(by.css('adf-error-content .adf-error-content-title')); - errorPageDescription = element(by.css('adf-error-content .adf-error-content-description')); - backButton = element(by.id('adf-return-button')); - secondButton = element(by.id('adf-secondary-button')); + errorPageCode: ElementFinder = element(by.css('adf-error-content .adf-error-content-code')); + errorPageTitle: ElementFinder = element(by.css('adf-error-content .adf-error-content-title')); + errorPageDescription: ElementFinder = element(by.css('adf-error-content .adf-error-content-description')); + backButton: ElementFinder = element(by.id('adf-return-button')); + secondButton: ElementFinder = element(by.id('adf-secondary-button')); - clickBackButton() { - BrowserActions.click(this.backButton); + async clickBackButton(): Promise { + await BrowserActions.click(this.backButton); } - clickSecondButton() { - BrowserActions.click(this.secondButton); + async clickSecondButton(): Promise { + await BrowserActions.click(this.secondButton); } - checkErrorCode() { - BrowserVisibility.waitUntilElementIsVisible(this.errorPageCode); + async checkErrorCode(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.errorPageCode); } - getErrorCode() { + async getErrorCode(): Promise { return BrowserActions.getText(this.errorPageCode); } - getErrorTitle() { + async getErrorTitle(): Promise { return BrowserActions.getText(this.errorPageTitle); } - getErrorDescription() { + async getErrorDescription(): Promise { return BrowserActions.getText(this.errorPageDescription); } } diff --git a/lib/testing/src/lib/core/pages/form-controller.page.ts b/lib/testing/src/lib/core/pages/form-controller.page.ts index 5c46c78df1..eae61fb605 100644 --- a/lib/testing/src/lib/core/pages/form-controller.page.ts +++ b/lib/testing/src/lib/core/pages/form-controller.page.ts @@ -15,28 +15,27 @@ * limitations under the License. */ -import { by } from 'protractor'; +import { by, ElementFinder } from 'protractor'; import { BrowserVisibility } from '../utils/browser-visibility'; +import { BrowserActions } from '../utils/browser-actions'; export class FormControllersPage { - enableToggle(toggle) { - BrowserVisibility.waitUntilElementIsVisible(toggle); - toggle.getAttribute('class').then((check) => { - if (check.indexOf('mat-checked') < 0) { - BrowserVisibility.waitUntilElementIsClickable(toggle.all(by.css('div')).first()); - toggle.all(by.css('div')).first().click(); - } - }); + async enableToggle(toggle: ElementFinder): Promise { + await BrowserVisibility.waitUntilElementIsVisible(toggle); + const check = await toggle.getAttribute('class'); + if (check.indexOf('mat-checked') < 0) { + const elem = toggle.all(by.css('div')).first(); + await BrowserActions.click(elem); + } } - disableToggle(toggle) { - BrowserVisibility.waitUntilElementIsVisible(toggle); - toggle.getAttribute('class').then((check) => { - if (check.indexOf('mat-checked') >= 0) { - BrowserVisibility.waitUntilElementIsClickable(toggle.all(by.css('div')).first()); - toggle.all(by.css('div')).first().click(); - } - }); + async disableToggle(toggle: ElementFinder): Promise { + await BrowserVisibility.waitUntilElementIsVisible(toggle); + const check = await toggle.getAttribute('class'); + if (check.indexOf('mat-checked') >= 0) { + const elem = toggle.all(by.css('div')).first(); + await BrowserActions.click(elem); + } } } diff --git a/lib/testing/src/lib/core/pages/form/formFields.ts b/lib/testing/src/lib/core/pages/form/formFields.ts index e896344bee..ef66e5a17c 100644 --- a/lib/testing/src/lib/core/pages/form/formFields.ts +++ b/lib/testing/src/lib/core/pages/form/formFields.ts @@ -15,149 +15,140 @@ * limitations under the License. */ -import { by, element } from 'protractor'; +import { by, element, Locator } from 'protractor'; import { BrowserVisibility, BrowserActions } from '../../utils/public-api'; -import { ElementFinder } from 'protractor/built/element'; +import { ElementFinder } from 'protractor'; export class FormFields { - formContent = element(by.css('adf-form-renderer')); - refreshButton = element(by.css('div[class*="form-reload-button"] mat-icon')); - saveButton = element(by.cssContainingText('mat-card-actions[class*="adf-for"] span', 'SAVE')); - valueLocator = by.css('input'); - labelLocator = by.css('label'); - noFormMessage = element(by.css('span[id*="no-form-message"]')); - completedTaskNoFormMessage = element(by.css('div[id*="completed-form-message"] p')); - attachFormButton = element(by.id('adf-no-form-attach-form-button')); - selectFormDropDownArrow = element.all(by.css('adf-attach-form div[class*="mat-select-arrow"]')).first(); - selectFormContent = element(by.css('div[class*="mat-select-panel"]')); - completeButton = element(by.id('adf-form-complete')); - errorMessage = by.css('.adf-error-text-container .adf-error-text'); + formContent: ElementFinder = element(by.css('adf-form-renderer')); + refreshButton: ElementFinder = element(by.css('div[class*="form-reload-button"] mat-icon')); + saveButton: ElementFinder = element(by.cssContainingText('mat-card-actions[class*="adf-for"] span', 'SAVE')); + valueLocator: Locator = by.css('input'); + labelLocator: Locator = by.css('label'); + noFormMessage: ElementFinder = element(by.css('span[id*="no-form-message"]')); + completedTaskNoFormMessage: ElementFinder = element(by.css('div[id*="completed-form-message"] p')); + attachFormButton: ElementFinder = element(by.id('adf-no-form-attach-form-button')); + selectFormDropDownArrow: ElementFinder = element.all(by.css('adf-attach-form div[class*="mat-select-arrow"]')).first(); + selectFormContent: ElementFinder = element(by.css('div[class*="mat-select-panel"]')); + completeButton: ElementFinder = element(by.id('adf-form-complete')); + errorMessage: Locator = by.css('.adf-error-text-container .adf-error-text'); - setFieldValue(locator, field, value) { + async setFieldValue(locator, field, value): Promise { const fieldElement = element(locator(field)); - BrowserActions.clearSendKeys(fieldElement, value); - return this; + await BrowserActions.clearSendKeys(fieldElement, value); } - checkWidgetIsVisible(fieldId) { + async checkWidgetIsVisible(fieldId): Promise { const fieldElement = element.all(by.css(`adf-form-field div[id='field-${fieldId}-container']`)).first(); - return BrowserVisibility.waitUntilElementIsOnPage(fieldElement); + await BrowserVisibility.waitUntilElementIsVisible(fieldElement); } - checkWidgetIsHidden(fieldId) { + async checkWidgetIsHidden(fieldId): Promise { const hiddenElement = element(by.css(`adf-form-field div[id='field-${fieldId}-container'][hidden]`)); - return BrowserVisibility.waitUntilElementIsVisible(hiddenElement); + await BrowserVisibility.waitUntilElementIsNotVisible(hiddenElement); } - checkWidgetIsNotHidden(fieldId) { - this.checkWidgetIsVisible(fieldId); + async checkWidgetIsNotHidden(fieldId): Promise { + await this.checkWidgetIsVisible(fieldId); const hiddenElement = element(by.css(`adf-form-field div[id='field-${fieldId}-container'][hidden]`)); - return BrowserVisibility.waitUntilElementIsNotVisible(hiddenElement, 6000); + await BrowserVisibility.waitUntilElementIsNotVisible(hiddenElement, 6000); } - getWidget(fieldId) { - const widget = element(by.css(`adf-form-field div[id='field-${fieldId}-container']`)); - BrowserVisibility.waitUntilElementIsVisible(widget); - return widget; + getWidget(fieldId): ElementFinder { + return element(by.css(`adf-form-field div[id='field-${fieldId}-container']`)); } - getFieldValue(fieldId, valueLocatorParam?: any) { - const value = this.getWidget(fieldId).element(valueLocatorParam || this.valueLocator); - BrowserVisibility.waitUntilElementIsVisible(value); - return value.getAttribute('value'); + async getFieldValue(fieldId, valueLocatorParam?: any): Promise { + const valueWidget: ElementFinder = await (await this.getWidget(fieldId)).element(valueLocatorParam || this.valueLocator); + await BrowserVisibility.waitUntilElementIsVisible(valueWidget); + + return valueWidget.getAttribute('value'); } - getFieldLabel(fieldId, labelLocatorParam?: any) { - const label = this.getWidget(fieldId).all(labelLocatorParam || this.labelLocator).first(); + async getFieldLabel(fieldId, labelLocatorParam?: any) { + const label = await (await this.getWidget(fieldId)).all(labelLocatorParam || this.labelLocator).first(); return BrowserActions.getText(label); } - getFieldErrorMessage(fieldId) { - const error = this.getWidget(fieldId).element(this.errorMessage); + async getFieldErrorMessage(fieldId): Promise { + const error = await this.getWidget(fieldId); + error.element(this.errorMessage); return BrowserActions.getText(error); } - getFieldText(fieldId, labelLocatorParam?: any) { - const label = this.getWidget(fieldId).element(labelLocatorParam || this.labelLocator); + async getFieldText(fieldId, labelLocatorParam?: any) { + const label = await (await this.getWidget(fieldId)).element(labelLocatorParam || this.labelLocator); return BrowserActions.getText(label); } - getFieldPlaceHolder(fieldId, locator = 'input') { + async getFieldPlaceHolder(fieldId, locator = 'input'): Promise { const placeHolderLocator: ElementFinder = element(by.css(`${locator}#${fieldId}`)); - BrowserVisibility.waitUntilElementIsVisible(placeHolderLocator); + await BrowserVisibility.waitUntilElementIsVisible(placeHolderLocator); return placeHolderLocator.getAttribute('placeholder'); } - checkFieldValue(locator, field, val) { - BrowserVisibility.waitUntilElementHasValue(element(locator(field)), val); - return this; + async checkFieldValue(locator, field, val): Promise { + await BrowserVisibility.waitUntilElementHasValue(element(locator(field)), val); } - refreshForm() { - BrowserActions.click(this.refreshButton); - return this; + async refreshForm(): Promise { + await BrowserActions.click(this.refreshButton); } - saveForm() { - BrowserActions.click(this.saveButton); - return this; + async saveForm(): Promise { + await BrowserActions.click(this.saveButton); } - noFormIsDisplayed() { - BrowserVisibility.waitUntilElementIsNotOnPage(this.formContent); - return this; + async noFormIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsNotVisible(this.formContent); } - checkFormIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.formContent); - return this; + async checkFormIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.formContent); } - getNoFormMessage() { + async getNoFormMessage(): Promise { return BrowserActions.getText(this.noFormMessage); } - getCompletedTaskNoFormMessage() { + async getCompletedTaskNoFormMessage(): Promise { return BrowserActions.getText(this.completedTaskNoFormMessage); } - clickOnAttachFormButton() { - BrowserActions.click(this.attachFormButton); - return this; + async clickOnAttachFormButton(): Promise { + await BrowserActions.click(this.attachFormButton); } - selectForm(formName) { - BrowserActions.click(this.selectFormDropDownArrow); - BrowserVisibility.waitUntilElementIsVisible(this.selectFormContent); - this.selectFormFromDropDown(formName); - return this; + async selectForm(formName): Promise { + await BrowserActions.click(this.selectFormDropDownArrow); + await BrowserVisibility.waitUntilElementIsVisible(this.selectFormContent); + await this.selectFormFromDropDown(formName); } - selectFormFromDropDown(formName) { + async selectFormFromDropDown(formName): Promise { const formNameElement = element(by.cssContainingText('span', formName)); - BrowserActions.click(formNameElement); + await BrowserActions.click(formNameElement); } - checkWidgetIsReadOnlyMode(fieldId) { + async checkWidgetIsReadOnlyMode(fieldId): Promise { const widget = element(by.css(`adf-form-field div[id='field-${fieldId}-container']`)); const widgetReadOnly = widget.element(by.css('div[class*="adf-readonly"]')); - BrowserVisibility.waitUntilElementIsVisible(widgetReadOnly); + await BrowserVisibility.waitUntilElementIsVisible(widgetReadOnly); return widgetReadOnly; } - completeForm() { - BrowserActions.click(this.completeButton); + async completeForm(): Promise { + await BrowserActions.click(this.completeButton); } - setValueInInputById(fieldId, value) { + async setValueInInputById(fieldId, value): Promise { const input = element(by.id(fieldId)); - BrowserActions.clearSendKeys(input, value); - return this; + await BrowserActions.clearSendKeys(input, value); } - isCompleteFormButtonDisabled() { - BrowserVisibility.waitUntilElementIsVisible(this.completeButton); + async isCompleteFormButtonDisabled(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.completeButton); return this.completeButton.getAttribute('disabled'); } } diff --git a/lib/testing/src/lib/core/pages/form/formPage.ts b/lib/testing/src/lib/core/pages/form/formPage.ts index b3b5bc67b7..b54890cde4 100644 --- a/lib/testing/src/lib/core/pages/form/formPage.ts +++ b/lib/testing/src/lib/core/pages/form/formPage.ts @@ -15,36 +15,35 @@ * limitations under the License. */ -import { element, by } from 'protractor'; +import { element, by, ElementFinder } from 'protractor'; import { BrowserVisibility } from '../../utils/browser-visibility'; import { BrowserActions } from '../../utils/public-api'; export class FormPage { - errorLog = element(by.css('div[class*="console"]')); - saveButton = element(by.cssContainingText('mat-card-actions[class*="adf-for"] span', 'SAVE')); + errorLog: ElementFinder = element(by.css('div[class*="console"]')); + saveButton: ElementFinder = element(by.cssContainingText('mat-card-actions[class*="adf-for"] span', 'SAVE')); - checkErrorMessageForWidgetIsDisplayed(errorMessage) { - return BrowserVisibility.waitUntilElementIsVisible(element(by.cssContainingText('.adf-error-text', errorMessage))); + async checkErrorMessageForWidgetIsDisplayed(errorMessage): Promise { + await BrowserVisibility.waitUntilElementIsVisible(element(by.cssContainingText('.adf-error-text', errorMessage))); } - checkErrorMessageForWidgetIsNotDisplayed(errorMessage) { - return BrowserVisibility.waitUntilElementIsNotVisible(element(by.cssContainingText('.adf-error-text', errorMessage))); + async checkErrorMessageForWidgetIsNotDisplayed(errorMessage): Promise { + await BrowserVisibility.waitUntilElementIsNotVisible(element(by.cssContainingText('.adf-error-text', errorMessage))); } - checkErrorLogMessage(errorMessage) { - BrowserVisibility.waitUntilElementIsVisible(this.errorLog); - return BrowserVisibility.waitUntilElementIsVisible(element(by.cssContainingText('div[class*="console"] p', errorMessage))); + async checkErrorLogMessage(errorMessage): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.errorLog); + await BrowserVisibility.waitUntilElementIsVisible(element(by.cssContainingText('div[class*="console"] p', errorMessage))); } - checkErrorMessageIsNotDisplayed(errorMessage) { - BrowserVisibility.waitUntilElementIsVisible(this.errorLog); - return BrowserVisibility.waitUntilElementIsNotVisible(element(by.cssContainingText('div[class*="console"] p', errorMessage))); + async checkErrorMessageIsNotDisplayed(errorMessage): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.errorLog); + await BrowserVisibility.waitUntilElementIsNotVisible(element(by.cssContainingText('div[class*="console"] p', errorMessage))); } - saveForm() { - BrowserActions.click(this.saveButton); - return this; + async saveForm() { + await BrowserActions.click(this.saveButton); } } diff --git a/lib/testing/src/lib/core/pages/form/widgets/amountWidget.ts b/lib/testing/src/lib/core/pages/form/widgets/amountWidget.ts index c91d5f0ff1..91cb483dd9 100644 --- a/lib/testing/src/lib/core/pages/form/widgets/amountWidget.ts +++ b/lib/testing/src/lib/core/pages/form/widgets/amountWidget.ts @@ -15,55 +15,50 @@ * limitations under the License. */ -import { element, by, protractor } from 'protractor'; +import { element, by, Locator } from 'protractor'; import { BrowserVisibility, BrowserActions } from '../../../utils/public-api'; import { FormFields } from '../formFields'; export class AmountWidget { - currency = by.css('span[class="adf-amount-widget__prefix-spacing"]'); - formFields = new FormFields(); + currency: Locator = by.css('span[class="adf-amount-widget__prefix-spacing"]'); + formFields: FormFields = new FormFields(); - getAmountFieldLabel(fieldId) { + async getAmountFieldLabel(fieldId): Promise { const label = element.all(by.css(`adf-form-field div[id="field-${fieldId}-container"] label`)).first(); return BrowserActions.getText(label); } - getAmountFieldCurrency(fieldId) { - return BrowserActions.getText(this.formFields.getWidget(fieldId).element(this.currency)); + async getAmountFieldCurrency(fieldId): Promise { + const widget = await this.formFields.getWidget(fieldId); + return await BrowserActions.getText(widget.element(this.currency)); } - setFieldValue(fieldId, value) { - return this.formFields.setValueInInputById(fieldId, value); + async setFieldValue(fieldId, value): Promise { + await this.formFields.setValueInInputById(fieldId, value); } - removeFromAmountWidget(fieldId) { - BrowserVisibility.waitUntilElementIsVisible(this.formFields.getWidget(fieldId)); - + async removeFromAmountWidget(fieldId) { const amountWidgetInput = element(by.id(fieldId)); - amountWidgetInput.getAttribute('value').then((result) => { - for (let i = result.length; i >= 0; i--) { - amountWidgetInput.sendKeys(protractor.Key.BACK_SPACE); - } - }); + await BrowserActions.clearWithBackSpace(amountWidgetInput); } - clearFieldValue(fieldId) { + async clearFieldValue(fieldId): Promise { const numberField = element(by.id(fieldId)); - BrowserVisibility.waitUntilElementIsVisible(numberField); - return numberField.clear(); + await BrowserVisibility.waitUntilElementIsVisible(numberField); + await numberField.clear(); } - checkWidgetIsVisible(fieldId) { - return this.formFields.checkWidgetIsVisible(fieldId); + async checkWidgetIsVisible(fieldId): Promise { + await this.formFields.checkWidgetIsVisible(fieldId); } - getErrorMessage(fieldId) { + async getErrorMessage(fieldId): Promise { const errorMessage = element(by.css(`adf-form-field div[id="field-${fieldId}-container"] div[class="adf-error-text"]`)); return BrowserActions.getText(errorMessage); } - getPlaceholder(fieldId) { + async getPlaceholder(fieldId): Promise { return this.formFields.getFieldPlaceHolder(fieldId); } } diff --git a/lib/testing/src/lib/core/pages/form/widgets/attachFileWidget.ts b/lib/testing/src/lib/core/pages/form/widgets/attachFileWidget.ts index 7914da8545..f5f8d78048 100644 --- a/lib/testing/src/lib/core/pages/form/widgets/attachFileWidget.ts +++ b/lib/testing/src/lib/core/pages/form/widgets/attachFileWidget.ts @@ -19,35 +19,33 @@ import { FormFields } from '../formFields'; import { BrowserVisibility, BrowserActions } from '../../../utils/public-api'; import * as remote from 'selenium-webdriver/remote'; import { element, by, browser } from 'protractor'; +import { ElementFinder } from 'protractor'; export class AttachFileWidget { - formFields = new FormFields(); + formFields: FormFields = new FormFields(); uploadLocator = by.css('button[id="attachfile"]'); - localStorageButton = element(by.css('input[id="attachfile"]')); + localStorageButton: ElementFinder = element(by.css('input[id="attachfile"]')); filesListLocator = by.css('div[id="adf-attach-widget-readonly-list"]'); - attachFile(fieldId, fileLocation) { + async attachFile(fieldId, fileLocation): Promise { browser.setFileDetector(new remote.FileDetector()); - const widget = this.formFields.getWidget(fieldId); - const uploadButton = widget.element(this.uploadLocator); - BrowserActions.click(uploadButton); - BrowserVisibility.waitUntilElementIsVisible(this.localStorageButton); - this.localStorageButton.sendKeys(fileLocation); - return this; + const widget = await this.formFields.getWidget(fieldId); + const uploadButton = await widget.element(this.uploadLocator); + await BrowserActions.click(uploadButton); + await BrowserVisibility.waitUntilElementIsPresent(this.localStorageButton); + await this.localStorageButton.sendKeys(fileLocation); } - checkFileIsAttached(fieldId, name) { - const widget = this.formFields.getWidget(fieldId); + async checkFileIsAttached(fieldId, name): Promise { + const widget = await this.formFields.getWidget(fieldId); const fileAttached = widget.element(this.filesListLocator).element(by.cssContainingText('mat-list-item span ', name)); - BrowserVisibility.waitUntilElementIsVisible(fileAttached); - return this; + await BrowserVisibility.waitUntilElementIsVisible(fileAttached); } - viewFile(name) { + async viewFile(name): Promise { const fileView = element(this.filesListLocator).element(by.cssContainingText('mat-list-item span ', name)); - BrowserActions.click(fileView); - browser.actions().doubleClick(fileView).perform(); - return this; + await BrowserActions.click(fileView); + await browser.actions().doubleClick(fileView).perform(); } } diff --git a/lib/testing/src/lib/core/pages/form/widgets/attachFileWidgetCloud.ts b/lib/testing/src/lib/core/pages/form/widgets/attachFileWidgetCloud.ts index 1cbbb2385a..523798f5e8 100644 --- a/lib/testing/src/lib/core/pages/form/widgets/attachFileWidgetCloud.ts +++ b/lib/testing/src/lib/core/pages/form/widgets/attachFileWidgetCloud.ts @@ -23,72 +23,66 @@ import { element, by, browser, ElementFinder } from 'protractor'; export class AttachFileWidgetCloud { widget: ElementFinder; + formFields: FormFields = new FormFields(); + filesListLocator = by.css('div[id="adf-attach-widget-readonly-list"]'); + constructor(fieldId: string) { + this.assignWidget(fieldId); + } + + assignWidget(fieldId: string): void { this.widget = this.formFields.getWidget(fieldId); } - formFields = new FormFields(); - contentButton = element(by.css('button[id="attach-Alfresco Content"]')); - filesListLocator = by.css('div[id="adf-attach-widget-readonly-list"]'); - - attachLocalFile(fileLocation: string) { - browser.setFileDetector(new remote.FileDetector()); + async attachLocalFile(fileLocation: string): Promise { + await browser.setFileDetector(new remote.FileDetector()); const uploadButton = this.widget.element(by.css(`a input`)); - BrowserVisibility.waitUntilElementIsVisible(uploadButton); - uploadButton.sendKeys(browser.params.rootPath + '/e2e' + fileLocation); - BrowserVisibility.waitUntilElementIsVisible(uploadButton); - return this; + await BrowserVisibility.waitUntilElementIsPresent(uploadButton); + await uploadButton.sendKeys(browser.params.rootPath + '/e2e' + fileLocation); + await BrowserVisibility.waitUntilElementIsPresent(uploadButton); } - clickAttachContentFile(fileId: string) { + async clickAttachContentFile(fileId: string): Promise { const uploadButton = this.widget.element(by.css(`button[id=${fileId}]`)); - BrowserActions.click(uploadButton); - BrowserActions.click(this.contentButton); - + await BrowserActions.click(uploadButton); + await BrowserActions.clickExecuteScript('button[id="attach-Alfresco Content"]'); } - checkUploadContentButtonIsDisplayed(fileId: string) { + async checkUploadContentButtonIsDisplayed(fileId: string): Promise { const uploadButton = this.widget.element(by.css(`button[id=${fileId}]`)); - BrowserVisibility.waitUntilElementIsVisible(uploadButton); - return this; + await BrowserVisibility.waitUntilElementIsVisible(uploadButton); } - checkUploadContentButtonIsNotDisplayed(fileId: string) { + async checkUploadContentButtonIsNotDisplayed(fileId: string): Promise { const uploadButton = this.widget.element(by.css(`button[id=${fileId}]`)); - BrowserVisibility.waitUntilElementIsNotVisible(uploadButton); - return this; + await BrowserVisibility.waitUntilElementIsNotVisible(uploadButton); } - checkFileIsAttached(name) { + async checkFileIsAttached(name): Promise { const fileAttached = this.widget.element(this.filesListLocator).element(by.cssContainingText('mat-list-item span ', name)); - BrowserVisibility.waitUntilElementIsVisible(fileAttached); - return this; + await BrowserVisibility.waitUntilElementIsVisible(fileAttached); } - checkFileIsNotAttached(name) { + async checkFileIsNotAttached(name): Promise { const fileAttached = this.widget.element(this.filesListLocator).element(by.cssContainingText('mat-list-item span ', name)); - BrowserVisibility.waitUntilElementIsNotVisible(fileAttached); - return this; + await BrowserVisibility.waitUntilElementIsNotVisible(fileAttached); } - async getFileId(name: string) { + async getFileId(name: string): Promise { const fileAttached = this.widget.element(this.filesListLocator).element(by.cssContainingText('mat-list-item span ', name)); - BrowserVisibility.waitUntilElementIsVisible(fileAttached); - const fileId = await fileAttached.getAttribute('id'); - return fileId; + await BrowserVisibility.waitUntilElementIsVisible(fileAttached); + return fileAttached.getAttribute('id'); } - async removeFile(fileName: string) { + async removeFile(fileName: string): Promise { const fileId = await this.getFileId(fileName); const deleteButton = this.widget.element(by.css(`button[id='${fileId}-remove']`)); - BrowserActions.click(deleteButton); - return this; + await BrowserActions.click(deleteButton); } - viewFile(name) { + async viewFile(name): Promise { const fileView = element(this.filesListLocator).element(by.cssContainingText('mat-list-item span ', name)); - BrowserActions.click(fileView); - browser.actions().doubleClick(fileView).perform(); - return this; + await BrowserActions.click(fileView); + await browser.actions().doubleClick(fileView).perform(); } } diff --git a/lib/testing/src/lib/core/pages/form/widgets/checkboxWidget.ts b/lib/testing/src/lib/core/pages/form/widgets/checkboxWidget.ts index 582412ba9f..edefbecebe 100644 --- a/lib/testing/src/lib/core/pages/form/widgets/checkboxWidget.ts +++ b/lib/testing/src/lib/core/pages/form/widgets/checkboxWidget.ts @@ -18,26 +18,27 @@ import { FormFields } from '../formFields'; import { BrowserActions } from '../../../utils/public-api'; import { by, element } from 'protractor'; +import { ElementFinder } from 'protractor'; export class CheckboxWidget { - formFields = new FormFields(); - checkboxLabel = element(by.css('span[class*="mat-checkbox-label"]')); + formFields: FormFields = new FormFields(); + checkboxLabel: ElementFinder = element(by.css('span[class*="mat-checkbox-label"]')); - getCheckboxLabel() { + getCheckboxLabel(): Promise { return BrowserActions.getText(this.checkboxLabel); } - clickCheckboxInput(fieldId) { + async clickCheckboxInput(fieldId): Promise { const checkboxInput = element.all(by.css(`mat-checkbox[id="${fieldId}"] div`)).first(); - BrowserActions.click(checkboxInput); + await BrowserActions.click(checkboxInput); } - isCheckboxDisplayed(fieldId) { - return this.formFields.checkWidgetIsNotHidden(fieldId); + async isCheckboxDisplayed(fieldId): Promise { + await this.formFields.checkWidgetIsNotHidden(fieldId); } - isCheckboxHidden(fieldId) { - return this.formFields.checkWidgetIsHidden(fieldId); + async isCheckboxHidden(fieldId): Promise { + await this.formFields.checkWidgetIsHidden(fieldId); } } diff --git a/lib/testing/src/lib/core/pages/form/widgets/containerWidget.ts b/lib/testing/src/lib/core/pages/form/widgets/containerWidget.ts index 23e49c657e..f6bddae230 100644 --- a/lib/testing/src/lib/core/pages/form/widgets/containerWidget.ts +++ b/lib/testing/src/lib/core/pages/form/widgets/containerWidget.ts @@ -16,15 +16,15 @@ */ import { FormFields } from '../formFields'; -import { by } from 'protractor'; +import { by, Locator } from 'protractor'; export class ContainerWidget { formFields = new FormFields(); - fileLocator = by.css("div [class*='upload-widget__content-text']"); + fileLocator: Locator = by.css("div [class*='upload-widget__content-text']"); - getFieldText(fieldId) { + getFieldText(fieldId): Promise { return this.formFields.getFieldText(fieldId, this.fileLocator); } } diff --git a/lib/testing/src/lib/core/pages/form/widgets/dateTimeWidget.ts b/lib/testing/src/lib/core/pages/form/widgets/dateTimeWidget.ts index 5882c919b6..f9e8a31afc 100644 --- a/lib/testing/src/lib/core/pages/form/widgets/dateTimeWidget.ts +++ b/lib/testing/src/lib/core/pages/form/widgets/dateTimeWidget.ts @@ -16,81 +16,77 @@ */ import { FormFields } from '../formFields'; -import { element, by, protractor } from 'protractor'; +import { element, by, ElementFinder } from 'protractor'; import { BrowserVisibility, BrowserActions } from '../../../utils/public-api'; export class DateTimeWidget { - formFields = new FormFields(); - outsideLayer = element(by.css('div[class*="cdk-overlay-container"]')); + formFields: FormFields = new FormFields(); + outsideLayer: ElementFinder = element(by.css('div[class*="cdk-overlay-container"]')); - checkWidgetIsVisible(fieldId) { - return this.formFields.checkWidgetIsVisible(fieldId); + async checkWidgetIsVisible(fieldId): Promise { + await this.formFields.checkWidgetIsVisible(fieldId); } - getDateTimeLabel(fieldId) { + async getDateTimeLabel(fieldId): Promise { const label = element(by.css(`adf-form-field div[id="field-${fieldId}-container"] label`)); return BrowserActions.getText(label); } - setDateTimeInput(fieldId, value) { - return this.formFields.setValueInInputById(fieldId, value); + async setDateTimeInput(fieldId, value): Promise { + await this.formFields.setValueInInputById(fieldId, value); } - clearDateTimeInput(fieldId) { - const dateInput = element(by.id(fieldId)); - BrowserVisibility.waitUntilElementIsVisible(dateInput); - return dateInput.clear(); + async clickOutsideWidget(fieldId): Promise { + const form = await this.formFields.getWidget(fieldId); + await BrowserActions.click(form); } - clickOutsideWidget(fieldId) { - const form = this.formFields.getWidget(fieldId); - BrowserActions.click(form); + async closeDataTimeWidget(): Promise { + await BrowserActions.click(this.outsideLayer); } - closeDataTimeWidget() { - BrowserActions.click(this.outsideLayer); - } - - getErrorMessage(fieldId) { + async getErrorMessage(fieldId): Promise { const errorMessage = element(by.css(`adf-form-field div[id="field-${fieldId}-container"] div[class="adf-error-text"]`)); return BrowserActions.getText(errorMessage); } - selectDay(day) { + async selectDay(day): Promise { const selectedDay = element(by.cssContainingText('div[class*="mat-datetimepicker-calendar-body-cell-content"]', day)); - BrowserActions.click(selectedDay); + await BrowserActions.click(selectedDay); } - openDatepicker(fieldId) { - return element(by.id(fieldId)).click(); + async openDatepicker(fieldId): Promise { + await BrowserActions.click(element(by.id(fieldId))); } - private selectTime(time) { + async selectTime(time): Promise { const selectedTime = element(by.cssContainingText('div[class*="mat-datetimepicker-clock-cell"]', time)); - BrowserActions.click(selectedTime); + await BrowserActions.click(selectedTime); } - selectHour(hour) { + async selectHour(hour): Promise { return this.selectTime(hour); } - selectMinute(minute) { + async selectMinute(minute): Promise { return this.selectTime(minute); } - getPlaceholder(fieldId) { + async getPlaceholder(fieldId): Promise { return this.formFields.getFieldPlaceHolder(fieldId); } - removeFromDatetimeWidget(fieldId) { - BrowserVisibility.waitUntilElementIsVisible(this.formFields.getWidget(fieldId)); - + async removeFromDatetimeWidget(fieldId): Promise { + await BrowserVisibility.waitUntilElementIsVisible(await this.formFields.getWidget(fieldId)); const amountWidgetInput = element(by.id(fieldId)); - amountWidgetInput.getAttribute('value').then((result) => { - for (let i = result.length; i >= 0; i--) { - amountWidgetInput.sendKeys(protractor.Key.BACK_SPACE); - } - }); + await BrowserActions.clearWithBackSpace(amountWidgetInput); } + + async clearDateTimeInput(fieldId): Promise { + const dateInput = element(by.id(fieldId)); + await BrowserVisibility.waitUntilElementIsVisible(dateInput); + await dateInput.clear(); + } + } diff --git a/lib/testing/src/lib/core/pages/form/widgets/dateWidget.ts b/lib/testing/src/lib/core/pages/form/widgets/dateWidget.ts index 7b9ad55d0c..a75b8255c0 100644 --- a/lib/testing/src/lib/core/pages/form/widgets/dateWidget.ts +++ b/lib/testing/src/lib/core/pages/form/widgets/dateWidget.ts @@ -16,54 +16,53 @@ */ import { FormFields } from '../formFields'; -import { element, by, protractor } from 'protractor'; +import { element, by } from 'protractor'; import { BrowserVisibility, BrowserActions } from '../../../utils/public-api'; export class DateWidget { - formFields = new FormFields(); + formFields: FormFields = new FormFields(); - checkWidgetIsVisible(fieldId) { - return this.formFields.checkWidgetIsVisible(fieldId); + async checkWidgetIsVisible(fieldId): Promise { + await this.formFields.checkWidgetIsVisible(fieldId); } - checkLabelIsVisible(fieldId) { - return this.formFields.checkWidgetIsVisible(fieldId); + async checkLabelIsVisible(fieldId): Promise { + await this.formFields.checkWidgetIsVisible(fieldId); } - getDateLabel(fieldId) { + async getDateLabel(fieldId): Promise { const label = element.all(by.css(`adf-form-field div[id="field-${fieldId}-container"] label`)).first(); return BrowserActions.getText(label); } - setDateInput(fieldId, value) { - this.removeFromDatetimeWidget(fieldId); - return this.formFields.setValueInInputById(fieldId, value); + async setDateInput(fieldId, value): Promise { + await this.removeFromDatetimeWidget(fieldId); + await this.formFields.setValueInInputById(fieldId, value); } - getDateInput(fieldId) { + async getDateInput(fieldId): Promise { return this.formFields.getFieldValue(fieldId); } - clearDateInput(fieldId) { + async clearDateInput(fieldId): Promise { const dateInput = element(by.id(fieldId)); - BrowserVisibility.waitUntilElementIsVisible(dateInput); - return dateInput.clear(); + await BrowserActions.clearWithBackSpace(dateInput); } - getErrorMessage(fieldId) { + async clickOutsideWidget(fieldId): Promise { + const form = await this.formFields.getWidget(fieldId); + await BrowserActions.click(form); + } + + async getErrorMessage(fieldId): Promise { const errorMessage = element(by.css(`adf-form-field div[id="field-${fieldId}-container"] div[class="adf-error-text"]`)); return BrowserActions.getText(errorMessage); } - removeFromDatetimeWidget(fieldId) { - BrowserVisibility.waitUntilElementIsVisible(this.formFields.getWidget(fieldId)); - - const dateWidgetInput = element(by.id(fieldId)); - dateWidgetInput.getAttribute('value').then((result) => { - for (let i = result.length; i >= 0; i--) { - dateWidgetInput.sendKeys(protractor.Key.BACK_SPACE); - } - }); + async removeFromDatetimeWidget(fieldId): Promise { + const widget = await this.formFields.getWidget(fieldId); + await BrowserVisibility.waitUntilElementIsVisible(widget); + await BrowserActions.clearSendKeys(element(by.id(fieldId)), ''); } } diff --git a/lib/testing/src/lib/core/pages/form/widgets/displayTextWidget.ts b/lib/testing/src/lib/core/pages/form/widgets/displayTextWidget.ts index 34df0410c9..6a8d24daf3 100644 --- a/lib/testing/src/lib/core/pages/form/widgets/displayTextWidget.ts +++ b/lib/testing/src/lib/core/pages/form/widgets/displayTextWidget.ts @@ -16,23 +16,23 @@ */ import { FormFields } from '../formFields'; -import { by } from 'protractor'; +import { by, Locator } from 'protractor'; export class DisplayTextWidget { - formFields = new FormFields(); - labelLocator = by.css('div[class*="adf-display-text-widget"]'); - inputLocator = by.css('input'); + formFields: FormFields = new FormFields(); + labelLocator: Locator = by.css('div[class*="adf-display-text-widget"]'); + inputLocator: Locator = by.css('input'); - getFieldLabel(fieldId) { + getFieldLabel(fieldId): Promise { return this.formFields.getFieldLabel(fieldId, this.labelLocator); } - getFieldValue(fieldId) { + getFieldValue(fieldId): Promise { return this.formFields.getFieldValue(fieldId, this.inputLocator); } - getFieldText(fieldId) { + getFieldText(fieldId): Promise { return this.formFields.getFieldText(fieldId, this.labelLocator); } diff --git a/lib/testing/src/lib/core/pages/form/widgets/displayValueWidget.ts b/lib/testing/src/lib/core/pages/form/widgets/displayValueWidget.ts index 409e3c3587..8c366349c9 100644 --- a/lib/testing/src/lib/core/pages/form/widgets/displayValueWidget.ts +++ b/lib/testing/src/lib/core/pages/form/widgets/displayValueWidget.ts @@ -16,19 +16,19 @@ */ import { FormFields } from '../formFields'; -import { by } from 'protractor'; +import { by, Locator } from 'protractor'; export class DisplayValueWidget { - formFields = new FormFields(); - labelLocator = by.css("label[class*='adf-label']"); - inputLocator = by.css('input'); + formFields: FormFields = new FormFields(); + labelLocator: Locator = by.css("label[class*='adf-label']"); + inputLocator: Locator = by.css('input'); - getFieldLabel(fieldId) { + getFieldLabel(fieldId): Promise { return this.formFields.getFieldLabel(fieldId, this.labelLocator); } - getFieldValue(fieldId) { + getFieldValue(fieldId): Promise { return this.formFields.getFieldValue(fieldId, this.inputLocator); } diff --git a/lib/testing/src/lib/core/pages/form/widgets/documentWidget.ts b/lib/testing/src/lib/core/pages/form/widgets/documentWidget.ts index 4f555d0c06..e8918a65eb 100644 --- a/lib/testing/src/lib/core/pages/form/widgets/documentWidget.ts +++ b/lib/testing/src/lib/core/pages/form/widgets/documentWidget.ts @@ -16,18 +16,18 @@ */ import { FormFields } from '../formFields'; -import { by } from 'protractor'; +import { by, Locator } from 'protractor'; export class DocumentWidget { - formFields = new FormFields(); - fileLocator = by.css("div [class*='upload-widget__content-text']"); + formFields: FormFields = new FormFields(); + fileLocator: Locator = by.css("div [class*='upload-widget__content-text']"); - getFieldText(fieldId) { + getFieldText(fieldId): Promise { return this.formFields.getFieldText(fieldId, this.fileLocator); } - getFileName(fieldId) { + getFileName(fieldId): Promise { return this.formFields.getFieldText(fieldId, this.fileLocator); } } diff --git a/lib/testing/src/lib/core/pages/form/widgets/dropdownWidget.ts b/lib/testing/src/lib/core/pages/form/widgets/dropdownWidget.ts index 648560c09f..e68a830f44 100644 --- a/lib/testing/src/lib/core/pages/form/widgets/dropdownWidget.ts +++ b/lib/testing/src/lib/core/pages/form/widgets/dropdownWidget.ts @@ -21,28 +21,27 @@ import { BrowserVisibility, BrowserActions } from '../../../utils/public-api'; export class DropdownWidget { - formFields = new FormFields(); + formFields: FormFields = new FormFields(); - getSelectedOptionText(fieldId: string = 'dropdown') { + getSelectedOptionText(fieldId: string = 'dropdown'): Promise { return this.formFields.getFieldText(fieldId, by.css(`mat-select[id="${fieldId}"] span span`)); } - selectOption(option: string, locator: string = '#dropdown') { - this.openDropdown(locator); + async selectOption(option: string, locator: string = '#dropdown'): Promise { + await this.openDropdown(locator); const row = element(by.cssContainingText('mat-option span', option)); - BrowserActions.click(row); + await BrowserActions.click(row); } - openDropdown(locator: string = '#dropdown') { - this.checkDropdownIsDisplayed(locator); + async openDropdown(locator: string = '#dropdown'): Promise { + await this.checkDropdownIsDisplayed(locator); const dropdown = locator ? element(by.css(`${locator}`)) : element(by.css(`#dropdown`)); - BrowserVisibility.waitUntilElementIsClickable(dropdown); - return BrowserActions.click(dropdown); + await BrowserVisibility.waitUntilElementIsClickable(dropdown); + await BrowserActions.click(dropdown); } - checkDropdownIsDisplayed(locator: string = '#dropdown') { + async checkDropdownIsDisplayed(locator: string = '#dropdown'): Promise { const dropdown = element(by.css(`${locator}`)); - BrowserVisibility.waitUntilElementIsVisible(dropdown); - return dropdown; + await BrowserVisibility.waitUntilElementIsVisible(dropdown); } } diff --git a/lib/testing/src/lib/core/pages/form/widgets/dynamicTableWidget.ts b/lib/testing/src/lib/core/pages/form/widgets/dynamicTableWidget.ts index 23faacffb4..0fb6fd9ac4 100644 --- a/lib/testing/src/lib/core/pages/form/widgets/dynamicTableWidget.ts +++ b/lib/testing/src/lib/core/pages/form/widgets/dynamicTableWidget.ts @@ -16,117 +16,117 @@ */ import { FormFields } from '../formFields'; -import { by, element, protractor } from 'protractor'; +import { by, element, ElementArrayFinder, ElementFinder, Locator, protractor } from 'protractor'; import { BrowserVisibility, BrowserActions } from '../../../utils/public-api'; export class DynamicTableWidget { - formFields = new FormFields(); + formFields: FormFields = new FormFields(); - labelLocator = by.css('dynamic-table-widget div div'); - columnNameLocator = by.css('table[id*="dynamic-table"] th'); - addButton = element(by.id('label-add-row')); - cancelButton = element(by.cssContainingText('button span', 'Cancel')); - editButton = element(by.cssContainingText('button span', 'edit')); - addRow = element(by.id('dynamictable-add-row')); - columnDateTime = element(by.id('columnDateTime')); - columnDate = element(by.id('columnDate')); - calendarHeader = element(by.css('div[class="mat-datetimepicker-calendar-header-date-time"]')); - calendarContent = element(by.css('div[class="mat-datetimepicker-calendar-content"]')); - saveButton = element(by.cssContainingText('button span', 'Save')); - errorMessage = element(by.css('div[class="adf-error-text"]')); - dateWidget = element.all(by.css('mat-datepicker-toggle button')).first(); - tableRow = element.all(by.css('tbody tr')); - dataTableInput = element(by.id('id')); + labelLocator: Locator = by.css('dynamic-table-widget div div'); + columnNameLocator: Locator = by.css('table[id*="dynamic-table"] th'); + addButton: ElementFinder = element(by.id('label-add-row')); + cancelButton: ElementFinder = element(by.cssContainingText('button span', 'Cancel')); + editButton: ElementFinder = element(by.cssContainingText('button span', 'edit')); + addRow: ElementFinder = element(by.id('dynamictable-add-row')); + columnDateTime: ElementFinder = element(by.id('columnDateTime')); + columnDate: ElementFinder = element(by.id('columnDate')); + calendarHeader: ElementFinder = element(by.css('div[class="mat-datetimepicker-calendar-header-date-time"]')); + calendarContent: ElementFinder = element(by.css('div[class="mat-datetimepicker-calendar-content"]')); + saveButton: ElementFinder = element(by.cssContainingText('button span', 'Save')); + errorMessage: ElementFinder = element(by.css('div[class="adf-error-text"]')); + dateWidget: ElementFinder = element.all(by.css('mat-datepicker-toggle button')).first(); + tableRow: ElementArrayFinder = element.all(by.css('tbody tr')); + dataTableInput: ElementFinder = element(by.id('id')); - getFieldLabel(fieldId) { + getFieldLabel(fieldId): Promise { return this.formFields.getFieldLabel(fieldId, this.labelLocator); } - getColumnName(fieldId) { + getColumnName(fieldId): Promise { return this.formFields.getFieldText(fieldId, this.columnNameLocator); } - clickAddButton() { - BrowserActions.click(this.addButton); + async clickAddButton(): Promise { + await BrowserActions.click(this.addButton); } - clickAddRow() { - BrowserActions.click(this.addRow); + async clickAddRow(): Promise { + await BrowserActions.click(this.addRow); } - clickTableRow(rowNumber) { + async clickTableRow(rowNumber): Promise { const tableRowByIndex = element(by.id('dynamictable-row-' + rowNumber)); - BrowserActions.click(tableRowByIndex); + await BrowserActions.click(tableRowByIndex); } - clickEditButton() { - BrowserActions.click(this.editButton); + async clickEditButton(): Promise { + await BrowserActions.click(this.editButton); } - clickCancelButton() { - BrowserActions.click(this.cancelButton); + async clickCancelButton(): Promise { + await BrowserActions.click(this.cancelButton); } - setDatatableInput(text) { - BrowserVisibility.waitUntilElementIsVisible(this.dataTableInput); - this.dataTableInput.clear(); - return this.dataTableInput.sendKeys(text); + async setDatatableInput(text): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.dataTableInput); + await this.dataTableInput.clear(); + await this.dataTableInput.sendKeys(text); } - getTableRowText(rowNumber) { + async getTableRowText(rowNumber): Promise { const tableRowByIndex = element(by.id('dynamictable-row-' + rowNumber)); return BrowserActions.getText(tableRowByIndex); } - checkTableRowIsNotVisible(rowNumber) { + async checkTableRowIsNotVisible(rowNumber): Promise { const tableRowByIndex = element(by.id('dynamictable-row-' + rowNumber)); - return BrowserVisibility.waitUntilElementIsNotVisible(tableRowByIndex); + await BrowserVisibility.waitUntilElementIsNotVisible(tableRowByIndex); } - clickColumnDateTime() { - BrowserActions.click(this.columnDateTime); - BrowserVisibility.waitUntilElementIsVisible(this.calendarHeader); - BrowserVisibility.waitUntilElementIsVisible(this.calendarContent); - BrowserActions.closeMenuAndDialogs(); + async clickColumnDateTime(): Promise { + await BrowserActions.click(this.columnDateTime); + await BrowserVisibility.waitUntilElementIsVisible(this.calendarHeader); + await BrowserVisibility.waitUntilElementIsVisible(this.calendarContent); + await BrowserActions.closeMenuAndDialogs(); } - addRandomStringOnDateTime(randomText) { - BrowserActions.click(this.columnDateTime); - BrowserActions.closeMenuAndDialogs(); - this.columnDateTime.sendKeys(randomText); - this.columnDateTime.sendKeys(protractor.Key.ENTER); + async addRandomStringOnDateTime(randomText): Promise { + await BrowserActions.click(this.columnDateTime); + await BrowserActions.closeMenuAndDialogs(); + await this.columnDateTime.sendKeys(randomText); + await this.columnDateTime.sendKeys(protractor.Key.ENTER); return this.columnDateTime.getAttribute('value'); } - addRandomStringOnDate(randomText) { - BrowserActions.click(this.columnDate); - return this.columnDate.sendKeys(randomText); + async addRandomStringOnDate(randomText): Promise { + await BrowserActions.click(this.columnDate); + await this.columnDate.sendKeys(randomText); } - clickSaveButton() { - BrowserActions.click(this.saveButton); + async clickSaveButton(): Promise { + await BrowserActions.click(this.saveButton); } - checkErrorMessage() { + async checkErrorMessage(): Promise { return BrowserActions.getText(this.errorMessage); } - clickDateWidget() { - BrowserActions.click(this.dateWidget); + async clickDateWidget(): Promise { + await BrowserActions.click(this.dateWidget); } - getTableRow(rowNumber) { - return BrowserVisibility.waitUntilElementIsVisible(this.tableRow.get(rowNumber)); + async getTableRow(rowNumber): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.tableRow.get(rowNumber)); } - getTableCellText(rowNumber: number, columnNumber: number) { + async getTableCellText(rowNumber: number, columnNumber: number): Promise { return BrowserActions.getText(this.tableRow.get(rowNumber).element(by.xpath(`td[${columnNumber}]`))); } - checkItemIsPresent(item) { + async checkItemIsPresent(item): Promise { const row = element(by.cssContainingText('table tbody tr td span', item)); - const present = BrowserVisibility.waitUntilElementIsVisible(row); - expect(present).toBe(true); + const present = await BrowserVisibility.waitUntilElementIsVisible(row); + await expect(present).toBe(true); } } diff --git a/lib/testing/src/lib/core/pages/form/widgets/headerWidget.ts b/lib/testing/src/lib/core/pages/form/widgets/headerWidget.ts index 944215b41c..8634d9e352 100644 --- a/lib/testing/src/lib/core/pages/form/widgets/headerWidget.ts +++ b/lib/testing/src/lib/core/pages/form/widgets/headerWidget.ts @@ -16,15 +16,15 @@ */ import { FormFields } from '../formFields'; -import { by } from 'protractor'; +import { by, Locator } from 'protractor'; export class HeaderWidget { - formFields = new FormFields(); + formFields: FormFields = new FormFields(); - labelLocator = by.css('span[id="container-header-label"]'); + labelLocator: Locator = by.css('span[id="container-header-label"]'); - getFieldLabel(fieldId) { + getFieldLabel(fieldId): Promise { return this.formFields.getFieldLabel(fieldId, this.labelLocator); } diff --git a/lib/testing/src/lib/core/pages/form/widgets/hyperlinkWidget.ts b/lib/testing/src/lib/core/pages/form/widgets/hyperlinkWidget.ts index ae2b2f25d5..d974ee6ffa 100644 --- a/lib/testing/src/lib/core/pages/form/widgets/hyperlinkWidget.ts +++ b/lib/testing/src/lib/core/pages/form/widgets/hyperlinkWidget.ts @@ -16,20 +16,20 @@ */ import { FormFields } from '../formFields'; -import { by, element } from 'protractor'; +import { by, element, Locator } from 'protractor'; import { BrowserActions } from '../../../utils/public-api'; export class HyperlinkWidget { - formFields = new FormFields(); + formFields: FormFields = new FormFields(); - fieldLocator = by.css('div[class="adf-hyperlink-widget "] a'); + fieldLocator: Locator = by.css('div[class="adf-hyperlink-widget "] a'); - getFieldText(fieldId) { + async getFieldText(fieldId): Promise { return this.formFields.getFieldText(fieldId, this.fieldLocator); } - getFieldLabel(fieldId) { + async getFieldLabel(fieldId): Promise { const label = element.all(by.css(`adf-form-field div[id="field-${fieldId}-container"] label`)).first(); return BrowserActions.getText(label); } diff --git a/lib/testing/src/lib/core/pages/form/widgets/multilineTextWidget.ts b/lib/testing/src/lib/core/pages/form/widgets/multilineTextWidget.ts index 67fb3d624b..dd29b77c07 100644 --- a/lib/testing/src/lib/core/pages/form/widgets/multilineTextWidget.ts +++ b/lib/testing/src/lib/core/pages/form/widgets/multilineTextWidget.ts @@ -16,32 +16,32 @@ */ import { FormFields } from '../formFields'; -import { by } from 'protractor'; +import { by, Locator } from 'protractor'; export class MultilineTextWidget { - formFields = new FormFields(); + formFields: FormFields = new FormFields(); - valueLocator = by.css('textarea'); - labelLocator = by.css("label[class*='adf-label']"); + valueLocator: Locator = by.css('textarea'); + labelLocator: Locator = by.css("label[class*='adf-label']"); - getFieldValue(fieldId) { + getFieldValue(fieldId): Promise { return this.formFields.getFieldValue(fieldId, this.valueLocator); } - getFieldLabel(fieldId) { + getFieldLabel(fieldId): Promise { return this.formFields.getFieldLabel(fieldId, this.labelLocator); } - getFieldPlaceHolder(fieldId) { + getFieldPlaceHolder(fieldId): Promise { return this.formFields.getFieldPlaceHolder(fieldId, 'textarea'); } - setValue(fieldId, value) { + setValue(fieldId, value): Promise { return this.formFields.setFieldValue(by.id, fieldId, value); } - getErrorMessage(fieldId) { + getErrorMessage(fieldId): Promise { return this.formFields.getFieldErrorMessage(fieldId); } diff --git a/lib/testing/src/lib/core/pages/form/widgets/numberWidget.ts b/lib/testing/src/lib/core/pages/form/widgets/numberWidget.ts index 7645446e0c..c0f8c9bb4b 100644 --- a/lib/testing/src/lib/core/pages/form/widgets/numberWidget.ts +++ b/lib/testing/src/lib/core/pages/form/widgets/numberWidget.ts @@ -21,37 +21,37 @@ import { BrowserVisibility, BrowserActions } from '../../../utils/public-api'; export class NumberWidget { - formFields = new FormFields(); + formFields: FormFields = new FormFields(); - getNumberFieldLabel(fieldId) { + async getNumberFieldLabel(fieldId): Promise { const label = element.all(by.css(`adf-form-field div[id="field-${fieldId}-container"] label`)).first(); return BrowserActions.getText(label); } - getFieldValue(fieldId) { + getFieldValue(fieldId): Promise { return this.formFields.getFieldValue(fieldId); } - setFieldValue(fieldId, value) { + setFieldValue(fieldId, value): Promise { return this.formFields.setValueInInputById(fieldId, value); } - clearFieldValue(fieldId) { + async clearFieldValue(fieldId): Promise { const numberField = element(by.id(fieldId)); - BrowserVisibility.waitUntilElementIsVisible(numberField); - return numberField.clear(); + await BrowserVisibility.waitUntilElementIsVisible(numberField); + await numberField.clear(); } - checkWidgetIsVisible(fieldId) { + checkWidgetIsVisible(fieldId): Promise { return this.formFields.checkWidgetIsVisible(fieldId); } - getErrorMessage(fieldId) { + async getErrorMessage(fieldId): Promise { const errorMessage = element(by.css(`adf-form-field div[id="field-${fieldId}-container"] div[class="adf-error-text"]`)); return BrowserActions.getText(errorMessage); } - getPlaceholder(fieldId) { + getPlaceholder(fieldId): Promise { return this.formFields.getFieldPlaceHolder(fieldId); } } diff --git a/lib/testing/src/lib/core/pages/form/widgets/peopleWidget.ts b/lib/testing/src/lib/core/pages/form/widgets/peopleWidget.ts index 2468645e40..f7c1110ec9 100644 --- a/lib/testing/src/lib/core/pages/form/widgets/peopleWidget.ts +++ b/lib/testing/src/lib/core/pages/form/widgets/peopleWidget.ts @@ -16,61 +16,59 @@ */ import { FormFields } from '../formFields'; -import { by, element } from 'protractor'; +import { by, element, ElementFinder, Locator } from 'protractor'; import { BrowserVisibility, BrowserActions } from '../../../utils/public-api'; export class PeopleWidget { - peopleField = element(by.css('input[data-automation-id="adf-people-search-input"]')); - firstResult = element(by.id('adf-people-widget-user-0')); + peopleField: ElementFinder = element(by.css('input[data-automation-id="adf-people-search-input"]')); + firstResult: ElementFinder = element(by.id('adf-people-widget-user-0')); + formFields: FormFields = new FormFields(); + labelLocator: Locator = by.css('div[class*="display-text-widget"]'); + inputLocator: Locator = by.id('involvepeople'); + peopleDropDownList: Locator = by.css('div[class*="adf-people-widget-list"]'); - formFields = new FormFields(); - labelLocator = by.css('div[class*="display-text-widget"]'); - inputLocator = by.id('involvepeople'); - peopleDropDownList = by.css('div[class*="adf-people-widget-list"]'); - - getFieldLabel(fieldId) { + getFieldLabel(fieldId): Promise { return this.formFields.getFieldLabel(fieldId, this.labelLocator); } - getFieldValue(fieldId) { + getFieldValue(fieldId): Promise { return this.formFields.getFieldValue(fieldId, this.inputLocator); } - getFieldText(fieldId) { + getFieldText(fieldId): Promise { return this.formFields.getFieldText(fieldId, this.labelLocator); } - insertUser(fieldId, value) { + insertUser(fieldId, value): Promise { return this.formFields.setValueInInputById(fieldId, value); } - checkDropDownListIsDisplayed() { - return BrowserVisibility.waitUntilElementIsVisible(element(this.peopleDropDownList)); + async checkDropDownListIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(element(this.peopleDropDownList)); } - checkUserIsListed(userName) { + async checkUserIsListed(userName): Promise { const user = element(by.cssContainingText('.adf-people-label-name', userName)); - return BrowserVisibility.waitUntilElementIsVisible(user); + await BrowserVisibility.waitUntilElementIsVisible(user); } - selectUserFromDropDown(userName) { + async selectUserFromDropDown(userName): Promise { const user = element(by.cssContainingText('.adf-people-label-name', userName)); - BrowserActions.click(user); - return this; + await BrowserActions.click(user); } - checkPeopleFieldIsDisplayed() { - return BrowserVisibility.waitUntilElementIsVisible(this.peopleField); + async checkPeopleFieldIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.peopleField); } - fillPeopleField(value) { - BrowserVisibility.waitUntilElementIsClickable(this.peopleField); - return this.peopleField.sendKeys(value); + async fillPeopleField(value): Promise { + await BrowserVisibility.waitUntilElementIsClickable(this.peopleField); + await this.peopleField.sendKeys(value); } - selectUserFromDropdown() { - BrowserVisibility.waitUntilElementIsVisible(this.firstResult); - return this.firstResult.click(); + async selectUserFromDropdown(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.firstResult); + await BrowserActions.click(this.firstResult); } } diff --git a/lib/testing/src/lib/core/pages/form/widgets/radioButtonsWidget.ts b/lib/testing/src/lib/core/pages/form/widgets/radioButtonsWidget.ts index a59545b5f0..6aaeb32732 100644 --- a/lib/testing/src/lib/core/pages/form/widgets/radioButtonsWidget.ts +++ b/lib/testing/src/lib/core/pages/form/widgets/radioButtonsWidget.ts @@ -16,36 +16,36 @@ */ import { FormFields } from '../formFields'; -import { by, element } from 'protractor'; +import { by, element, Locator } from 'protractor'; import { BrowserVisibility, BrowserActions } from '../../../utils/public-api'; export class RadioButtonsWidget { - selectedOption = by.css('mat-radio-button[ng-pristine]'); + selectedOption: Locator = by.css('mat-radio-button[ng-pristine]'); - formFields = new FormFields(); + formFields: FormFields = new FormFields(); - getSpecificOptionLabel(fieldId, optionNumber) { + async getSpecificOptionLabel(fieldId, optionNumber): Promise { const optionLocator = by.css('label[for*="radiobuttons-option_' + optionNumber + '"]'); - - const option = this.formFields.getWidget(fieldId).element(optionLocator); + const widget = await this.formFields.getWidget(fieldId); + const option = widget.element(optionLocator); return BrowserActions.getText(option); } - selectOption(fieldId, optionNumber) { + async selectOption(fieldId, optionNumber): Promise { const optionLocator = by.css(`label[for*="${fieldId}-option_${optionNumber}"]`); - - const option = this.formFields.getWidget(fieldId).element(optionLocator); - return BrowserActions.click(option); - + const widget = await this.formFields.getWidget(fieldId); + const option = widget.element(optionLocator); + await BrowserActions.click(option); } - isSelectionClean(fieldId) { - const option = this.formFields.getWidget(fieldId).element(this.selectedOption); - return BrowserVisibility.waitUntilElementIsNotVisible(option); + async isSelectionClean(fieldId): Promise { + const widget = await this.formFields.getWidget(fieldId); + const option = widget.element(this.selectedOption); + await BrowserVisibility.waitUntilElementIsNotVisible(option); } - getRadioWidgetLabel(fieldId) { + async getRadioWidgetLabel(fieldId): Promise { const label = element.all(by.css(`adf-form-field div[id="field-${fieldId}-container"] label`)).first(); return BrowserActions.getText(label); } diff --git a/lib/testing/src/lib/core/pages/form/widgets/textWidget.ts b/lib/testing/src/lib/core/pages/form/widgets/textWidget.ts index a04c319a60..339fea4573 100644 --- a/lib/testing/src/lib/core/pages/form/widgets/textWidget.ts +++ b/lib/testing/src/lib/core/pages/form/widgets/textWidget.ts @@ -16,39 +16,39 @@ */ import { FormFields } from '../formFields'; -import { by } from 'protractor'; +import { by, Locator } from 'protractor'; export class TextWidget { - formFields = new FormFields(); + formFields: FormFields = new FormFields(); - labelLocator = by.css("label[class*='adf-label']"); + labelLocator: Locator = by.css("label[class*='adf-label']"); - getFieldLabel(fieldId) { + getFieldLabel(fieldId): Promise { return this.formFields.getFieldLabel(fieldId, this.labelLocator); } - getFieldPlaceHolder(fieldId) { + getFieldPlaceHolder(fieldId): Promise { return this.formFields.getFieldPlaceHolder(fieldId); } - setValue(fieldId, value) { - return this.formFields.setFieldValue(by.id, fieldId, value); + async setValue(fieldId, value): Promise { + await this.formFields.setFieldValue(by.id, fieldId, value); } - getFieldValue(fieldId) { + getFieldValue(fieldId): Promise { return this.formFields.getFieldValue(fieldId); } - getErrorMessage(fieldId) { + getErrorMessage(fieldId): Promise { return this.formFields.getFieldErrorMessage(fieldId); } - isWidgetVisible(fieldId) { - return this.formFields.checkWidgetIsVisible(fieldId); + async isWidgetVisible(fieldId): Promise { + await this.formFields.checkWidgetIsVisible(fieldId); } - isWidgetNotVisible(fieldId) { - return this.formFields.checkWidgetIsHidden(fieldId); + async isWidgetNotVisible(fieldId): Promise { + await this.formFields.checkWidgetIsHidden(fieldId); } } diff --git a/lib/testing/src/lib/core/pages/form/widgets/widget.ts b/lib/testing/src/lib/core/pages/form/widgets/widget.ts index ccf417e807..3b08de24bb 100644 --- a/lib/testing/src/lib/core/pages/form/widgets/widget.ts +++ b/lib/testing/src/lib/core/pages/form/widgets/widget.ts @@ -37,79 +37,79 @@ import { AttachFileWidgetCloud } from './attachFileWidgetCloud'; export class Widget { - multilineTextWidget() { + multilineTextWidget(): MultilineTextWidget { return new MultilineTextWidget(); } - headerWidget() { + headerWidget(): HeaderWidget { return new HeaderWidget(); } - displayTextWidget() { + displayTextWidget(): DisplayTextWidget { return new DisplayTextWidget(); } - attachFileWidget() { + attachFileWidget(): AttachFileWidget { return new AttachFileWidget(); } - attachFileWidgetCloud(fieldId: string) { + attachFileWidgetCloud(fieldId: string): AttachFileWidgetCloud { return new AttachFileWidgetCloud(fieldId); } - displayValueWidget() { + displayValueWidget(): DisplayValueWidget { return new DisplayValueWidget(); } - radioWidget() { + radioWidget(): RadioButtonsWidget { return new RadioButtonsWidget(); } - hyperlink() { + hyperlink(): HyperlinkWidget { return new HyperlinkWidget(); } - dropdown() { + dropdown(): DropdownWidget { return new DropdownWidget(); } - dynamicTable() { + dynamicTable(): DynamicTableWidget { return new DynamicTableWidget(); } - textWidget() { + textWidget(): TextWidget { return new TextWidget(); } - documentWidget() { + documentWidget(): DocumentWidget { return new DocumentWidget(); } - checkboxWidget() { + checkboxWidget(): CheckboxWidget { return new CheckboxWidget(); } - dateWidget() { + dateWidget(): DateWidget { return new DateWidget(); } - dateTimeWidget() { + dateTimeWidget(): DateTimeWidget { return new DateTimeWidget(); } - numberWidget() { + numberWidget(): NumberWidget { return new NumberWidget(); } - amountWidget() { + amountWidget(): AmountWidget { return new AmountWidget(); } - containerWidget() { + containerWidget(): ContainerWidget { return new ContainerWidget(); } - peopleWidget() { + peopleWidget(): PeopleWidget { return new PeopleWidget(); } } diff --git a/lib/testing/src/lib/core/pages/header.page.ts b/lib/testing/src/lib/core/pages/header.page.ts index 087464ca00..af1cbccbd8 100644 --- a/lib/testing/src/lib/core/pages/header.page.ts +++ b/lib/testing/src/lib/core/pages/header.page.ts @@ -18,115 +18,115 @@ import { element, by, protractor, browser } from 'protractor'; import { BrowserVisibility } from '../utils/browser-visibility'; import { BrowserActions } from '../utils/browser-actions'; +import { ElementFinder } from 'protractor'; export class HeaderPage { - checkBox = element(by.cssContainingText('.mat-checkbox-label', 'Show menu button')); - headerColor = element(by.css('option[value="primary"]')); - titleInput = element(by.css('input[name="title"]')); - iconInput = element(by.css('input[placeholder="URL path"]')); - hexColorInput = element(by.css('input[placeholder="hex color code"]')); - logoHyperlinkInput = element(by.css('input[placeholder="Redirect URL"]')); - logoTooltipInput = element(by.css('input[placeholder="Tooltip text"]')); - positionStart = element.all(by.css('mat-radio-button[value="start"]')).first(); - positionEnd = element.all(by.css('mat-radio-button[value="end"]')).first(); - sideBarPositionRight = element(by.css('mat-sidenav.mat-drawer.mat-sidenav.mat-drawer-end')); - sideBarPositionLeft = element(by.css('mat-sidenav.mat-drawer.mat-sidenav')); + checkBox: ElementFinder = element(by.cssContainingText('.mat-checkbox-label', 'Show menu button')); + headerColor: ElementFinder = element(by.css('option[value="primary"]')); + titleInput: ElementFinder = element(by.css('input[name="title"]')); + iconInput: ElementFinder = element(by.css('input[placeholder="URL path"]')); + hexColorInput: ElementFinder = element(by.css('input[placeholder="hex color code"]')); + logoHyperlinkInput: ElementFinder = element(by.css('input[placeholder="Redirect URL"]')); + logoTooltipInput: ElementFinder = element(by.css('input[placeholder="Tooltip text"]')); + positionStart: ElementFinder = element.all(by.css('mat-radio-button[value="start"]')).first(); + positionEnd: ElementFinder = element.all(by.css('mat-radio-button[value="end"]')).first(); + sideBarPositionRight: ElementFinder = element(by.css('mat-sidenav.mat-drawer.mat-sidenav.mat-drawer-end')); + sideBarPositionLeft: ElementFinder = element(by.css('mat-sidenav.mat-drawer.mat-sidenav')); - checkShowMenuCheckBoxIsDisplayed() { - return BrowserVisibility.waitUntilElementIsVisible(this.checkBox); + async checkShowMenuCheckBoxIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.checkBox); } - checkChooseHeaderColourIsDisplayed() { - return BrowserVisibility.waitUntilElementIsVisible(this.headerColor); + async checkChooseHeaderColourIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.headerColor); } - checkChangeTitleIsDisplayed() { - return BrowserVisibility.waitUntilElementIsVisible(this.titleInput); + async checkChangeTitleIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.titleInput); } - checkChangeUrlPathIsDisplayed() { - return BrowserVisibility.waitUntilElementIsVisible(this.iconInput); + async checkChangeUrlPathIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.iconInput); } - clickShowMenuButton() { - const checkBox = element.all(by.css('mat-checkbox')); - BrowserVisibility.waitUntilElementIsVisible(checkBox.first()); - return checkBox.get(0).click(); + async clickShowMenuButton(): Promise { + const checkBox = element.all(by.css('mat-checkbox')).first(); + await BrowserActions.click(checkBox); } - changeHeaderColor(color) { + async changeHeaderColor(color): Promise { const headerColor = element(by.css('option[value="' + color + '"]')); - return BrowserActions.click(headerColor); + await BrowserActions.click(headerColor); } - checkAppTitle(name) { + async checkAppTitle(name): Promise { const title = element(by.cssContainingText('.adf-app-title', name)); - return BrowserVisibility.waitUntilElementIsVisible(title); + await BrowserVisibility.waitUntilElementIsVisible(title); } - addTitle(title) { - BrowserActions.click(this.titleInput); - this.titleInput.sendKeys(title); - this.titleInput.sendKeys(protractor.Key.ENTER); + async addTitle(title): Promise { + await BrowserActions.click(this.titleInput); + await BrowserActions.clearSendKeys(this.titleInput, title); + await this.titleInput.sendKeys(protractor.Key.ENTER); } - checkIconIsDisplayed(url) { + async checkIconIsDisplayed(url): Promise { const icon = element(by.css('img[src="' + url + '"]')); - BrowserVisibility.waitUntilElementIsVisible(icon); + await BrowserVisibility.waitUntilElementIsVisible(icon); } - addIcon(url) { - BrowserActions.click(this.iconInput); - this.iconInput.sendKeys(url); - this.iconInput.sendKeys(protractor.Key.ENTER); + async addIcon(url): Promise { + await BrowserActions.click(this.iconInput); + await BrowserActions.clearSendKeys(this.iconInput, url); + await this.iconInput.sendKeys(protractor.Key.ENTER); } - checkHexColorInputIsDisplayed() { - return BrowserVisibility.waitUntilElementIsVisible(this.hexColorInput); + async checkHexColorInputIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.hexColorInput); } - checkLogoHyperlinkInputIsDisplayed() { - return BrowserVisibility.waitUntilElementIsVisible(this.logoHyperlinkInput); + async checkLogoHyperlinkInputIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.logoHyperlinkInput); } - checkLogoTooltipInputIsDisplayed() { - return BrowserVisibility.waitUntilElementIsVisible(this.logoTooltipInput); + async checkLogoTooltipInputIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.logoTooltipInput); } - addHexCodeColor(hexCode) { - BrowserActions.click(this.hexColorInput); - this.hexColorInput.sendKeys(hexCode); - return this.hexColorInput.sendKeys(protractor.Key.ENTER); + async addHexCodeColor(hexCode): Promise { + await BrowserActions.click(this.hexColorInput); + await BrowserActions.clearSendKeys(this.hexColorInput, hexCode); + await this.hexColorInput.sendKeys(protractor.Key.ENTER); } - addLogoHyperlink(hyperlink) { - BrowserActions.click(this.logoHyperlinkInput); - this.logoHyperlinkInput.sendKeys(hyperlink); - return this.logoHyperlinkInput.sendKeys(protractor.Key.ENTER); + async addLogoHyperlink(hyperlink): Promise { + await BrowserActions.click(this.logoHyperlinkInput); + await BrowserActions.clearSendKeys(this.logoHyperlinkInput, hyperlink); + await this.logoHyperlinkInput.sendKeys(protractor.Key.ENTER); } - addLogoTooltip(tooltip) { - BrowserActions.click(this.logoTooltipInput); - this.logoTooltipInput.sendKeys(tooltip); - return this.logoTooltipInput.sendKeys(protractor.Key.ENTER); + async addLogoTooltip(tooltip): Promise { + await BrowserActions.click(this.logoTooltipInput); + await BrowserActions.clearSendKeys(this.logoTooltipInput, tooltip); + await this.logoTooltipInput.sendKeys(protractor.Key.ENTER); } - sideBarPositionStart() { - return BrowserActions.click(this.positionStart); + async sideBarPositionStart(): Promise { + await BrowserActions.click(this.positionStart); } - sideBarPositionEnd() { - browser.executeScript('arguments[0].scrollIntoView()', this.positionEnd); - return BrowserActions.click(this.positionEnd); + async sideBarPositionEnd(): Promise { + await browser.executeScript('arguments[0].scrollIntoView()', this.positionEnd); + await BrowserActions.click(this.positionEnd); } - checkSidebarPositionStart() { - return BrowserVisibility.waitUntilElementIsVisible(this.sideBarPositionLeft); + async checkSidebarPositionStart(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.sideBarPositionLeft); } - checkSidebarPositionEnd() { - return BrowserVisibility.waitUntilElementIsVisible(this.sideBarPositionRight); + async checkSidebarPositionEnd(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.sideBarPositionRight); } } diff --git a/lib/testing/src/lib/core/pages/login-sso.page.ts b/lib/testing/src/lib/core/pages/login-sso.page.ts index fd4584a06c..036647b311 100644 --- a/lib/testing/src/lib/core/pages/login-sso.page.ts +++ b/lib/testing/src/lib/core/pages/login-sso.page.ts @@ -36,7 +36,7 @@ export class LoginSSOPage { await this.clickLoginButton(); await browser.actions().sendKeys(protractor.Key.ENTER).perform(); await BrowserVisibility.waitUntilElementIsVisible(this.header); - await browser.waitForAngular(''); + await browser.waitForAngular(); } async clickOnSSOButton() { diff --git a/lib/testing/src/lib/core/pages/login.page.ts b/lib/testing/src/lib/core/pages/login.page.ts index a7c8b97440..6797394924 100644 --- a/lib/testing/src/lib/core/pages/login.page.ts +++ b/lib/testing/src/lib/core/pages/login.page.ts @@ -16,264 +16,232 @@ */ import { FormControllersPage } from './form-controller.page'; -import { browser, by, element, protractor } from 'protractor'; +import { browser, by, element } from 'protractor'; import { BrowserVisibility } from '../utils/browser-visibility'; import { LocalStorageUtil } from '../utils/local-storage.util'; import { BrowserActions } from '../utils/browser-actions'; +import { ElementFinder } from 'protractor'; export class LoginPage { - loginURL = browser.baseUrl + '/login'; - formControllersPage = new FormControllersPage(); - txtUsername = element(by.css('input[id="username"]')); - txtPassword = element(by.css('input[id="password"]')); - logoImg = element(by.css('img[id="adf-login-img-logo"]')); - successRouteTxt = element( - by.css('input[data-automation-id="adf-success-route"]') - ); - logoTxt = element(by.css('input[data-automation-id="adf-url-logo"]')); - usernameTooltip = element( - by.css('span[data-automation-id="username-error"]') - ); - passwordTooltip = element( - by.css('span[data-automation-id="password-required"]') - ); - loginTooltip = element(by.css('span[class="adf-login-error-message"]')); - usernameInactive = element( - by.css('input[id="username"][aria-invalid="false"]') - ); - passwordInactive = element( - by.css('input[id="password"][aria-invalid="false"]') - ); - adfLogo = element(by.css('img[class="adf-img-logo ng-star-inserted"]')); - usernameHighlighted = element( - by.css('input[id="username"][aria-invalid="true"]') - ); - passwordHighlighted = element( - by.css('input[id="password"][aria-invalid="true"]') - ); - signInButton = element(by.id('login-button')); - showPasswordElement = element( - by.css('button[data-automation-id="show_password"]') - ); - hidePasswordElement = element( - by.css('button[data-automation-id="hide_password"]') - ); - rememberMe = element(by.css('mat-checkbox[id="adf-login-remember"]')); - needHelp = element(by.css('div[id="adf-login-action-left"]')); - register = element(by.css('div[id="adf-login-action-right"]')); - footerSwitch = element(by.id('switch4')); - rememberMeSwitch = element(by.id('adf-toggle-show-rememberme')); - successRouteSwitch = element(by.id('adf-toggle-show-successRoute')); - logoSwitch = element(by.id('adf-toggle-logo')); - header = element(by.id('adf-header')); - settingsIcon = element( - by.cssContainingText( - 'a[data-automation-id="settings"] mat-icon', - 'settings' - ) - ); + loginURL: string = browser.baseUrl + '/login'; + + formControllersPage: FormControllersPage = new FormControllersPage(); + txtUsername: ElementFinder = element(by.css('input[id="username"]')); + txtPassword: ElementFinder = element(by.css('input[id="password"]')); + logoImg: ElementFinder = element(by.css('img[id="adf-login-img-logo"]')); + successRouteTxt: ElementFinder = element(by.css('input[data-automation-id="adf-success-route"]')); + logoTxt: ElementFinder = element(by.css('input[data-automation-id="adf-url-logo"]')); + usernameTooltip: ElementFinder = element(by.css('span[data-automation-id="username-error"]')); + passwordTooltip: ElementFinder = element(by.css('span[data-automation-id="password-required"]')); + loginTooltip: ElementFinder = element(by.css('span[class="adf-login-error-message"]')); + usernameInactive: ElementFinder = element(by.css('input[id="username"][aria-invalid="false"]')); + passwordInactive: ElementFinder = element(by.css('input[id="password"][aria-invalid="false"]')); + adfLogo: ElementFinder = element(by.css('img[class="adf-img-logo ng-star-inserted"]')); + usernameHighlighted: ElementFinder = element(by.css('input[id="username"][aria-invalid="true"]')); + passwordHighlighted: ElementFinder = element(by.css('input[id="password"][aria-invalid="true"]')); + signInButton: ElementFinder = element(by.id('login-button')); + showPasswordElement: ElementFinder = element(by.css('button[data-automation-id="show_password"]')); + hidePasswordElement: ElementFinder = element(by.css('button[data-automation-id="hide_password"]')); + rememberMe: ElementFinder = element(by.css('mat-checkbox[id="adf-login-remember"]')); + needHelp: ElementFinder = element(by.css('div[id="adf-login-action-left"]')); + register: ElementFinder = element(by.css('div[id="adf-login-action-right"]')); + footerSwitch: ElementFinder = element(by.id('switch4')); + rememberMeSwitch: ElementFinder = element(by.id('adf-toggle-show-rememberme')); + successRouteSwitch: ElementFinder = element(by.id('adf-toggle-show-successRoute')); + logoSwitch: ElementFinder = element(by.id('adf-toggle-logo')); + header: ElementFinder = element(by.id('adf-header')); + settingsIcon: ElementFinder = element(by.cssContainingText('a[data-automation-id="settings"] mat-icon', 'settings')); sidenavLayout = element(by.css(`[data-automation-id="sidenav-layout"]`)); - goToLoginPage() { - browser.waitForAngularEnabled(true); - browser.driver.get(this.loginURL); - return this.waitForElements(); + async goToLoginPage(): Promise { + await browser.get(this.loginURL); + await this.waitForElements(); } - waitForElements() { - BrowserVisibility.waitUntilElementIsVisible(this.txtUsername); - return BrowserVisibility.waitUntilElementIsVisible(this.txtPassword); + async waitForElements(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.txtUsername); + await BrowserVisibility.waitUntilElementIsVisible(this.txtPassword); } - enterUsername(username) { - return BrowserActions.clearSendKeys(this.txtUsername, username); + async enterUsername(username): Promise { + await BrowserActions.clearSendKeys(this.txtUsername, username); } - enterPassword(password) { - return BrowserActions.clearSendKeys(this.txtPassword, password); + async enterPassword(password): Promise { + await BrowserActions.clearSendKeys(this.txtPassword, password); } - async clearUsername() { - BrowserVisibility.waitUntilElementIsVisible(this.txtUsername); - this.txtUsername.click(); - this.txtUsername.getAttribute('value').then((value) => { - for (let i = value.length; i >= 0; i--) { - this.txtUsername.sendKeys(protractor.Key.BACK_SPACE); - } - }); - return this; + async clearUsername(): Promise { + await BrowserActions.click(this.txtUsername); + await BrowserActions.clearWithBackSpace(this.txtUsername); } - async clearPassword() { - BrowserVisibility.waitUntilElementIsVisible(this.txtPassword); - this.txtPassword.getAttribute('value').then((value) => { - for (let i = value.length; i >= 0; i--) { - this.txtPassword.sendKeys(protractor.Key.BACK_SPACE); - } - }); + async clearPassword(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.txtPassword); + await BrowserActions.clearWithBackSpace(this.txtPassword); } - getUsernameTooltip() { + async getUsernameTooltip(): Promise { return BrowserActions.getText(this.usernameTooltip); } - getPasswordTooltip() { + async getPasswordTooltip(): Promise { return BrowserActions.getText(this.passwordTooltip); } - getLoginError() { + async getLoginError(): Promise { return BrowserActions.getText(this.loginTooltip); } - checkLoginImgURL() { - BrowserVisibility.waitUntilElementIsVisible(this.logoImg); + async checkLoginImgURL(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.logoImg); return this.logoImg.getAttribute('src'); } - checkUsernameInactive() { - BrowserVisibility.waitUntilElementIsVisible(this.usernameInactive); + async checkUsernameInactive(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.usernameInactive); } - checkPasswordInactive() { - BrowserVisibility.waitUntilElementIsVisible(this.passwordInactive); + async checkPasswordInactive(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.passwordInactive); } - checkUsernameHighlighted() { - this.adfLogo.click(); - BrowserVisibility.waitUntilElementIsVisible(this.usernameHighlighted); + async checkUsernameHighlighted(): Promise { + await BrowserActions.click(this.adfLogo); + await BrowserVisibility.waitUntilElementIsVisible(this.usernameHighlighted); } - checkPasswordHighlighted() { - this.adfLogo.click(); - BrowserVisibility.waitUntilElementIsVisible(this.passwordHighlighted); + async checkPasswordHighlighted(): Promise { + await BrowserActions.click(this.adfLogo); + await BrowserVisibility.waitUntilElementIsVisible(this.passwordHighlighted); } - checkUsernameTooltipIsNotVisible() { - BrowserVisibility.waitUntilElementIsNotVisible(this.usernameTooltip); + async checkUsernameTooltipIsNotVisible(): Promise { + await BrowserVisibility.waitUntilElementIsNotVisible(this.usernameTooltip); } - checkPasswordTooltipIsNotVisible() { - BrowserVisibility.waitUntilElementIsNotVisible(this.passwordTooltip); + async checkPasswordTooltipIsNotVisible(): Promise { + await BrowserVisibility.waitUntilElementIsNotVisible(this.passwordTooltip); } - getSignInButtonIsEnabled() { - BrowserVisibility.waitUntilElementIsVisible(this.signInButton); - return this.signInButton.isEnabled(); + async getSignInButtonIsEnabled(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.signInButton); + return await this.signInButton.isEnabled(); } - async loginToAllUsingUserModel(userModel) { + async loginToAllUsingUserModel(userModel): Promise { await this.goToLoginPage(); await LocalStorageUtil.clearStorage(); await LocalStorageUtil.setStorageItem('providers', 'ALL'); await LocalStorageUtil.apiReset(); - return this.login(userModel.email, userModel.password); + await this.login(userModel.email, userModel.password); } - async loginToProcessServicesUsingUserModel(userModel) { + async loginToProcessServicesUsingUserModel(userModel): Promise { await this.goToLoginPage(); await LocalStorageUtil.clearStorage(); await LocalStorageUtil.setStorageItem('providers', 'BPM'); await LocalStorageUtil.apiReset(); - return this.login(userModel.email, userModel.password); + await this.login(userModel.email, userModel.password); } - async loginToContentServicesUsingUserModel(userModel) { - this.goToLoginPage(); + async loginToContentServicesUsingUserModel(userModel): Promise { + await this.goToLoginPage(); await LocalStorageUtil.clearStorage(); await LocalStorageUtil.setStorageItem('providers', 'ECM'); await LocalStorageUtil.apiReset(); - return this.login(userModel.getId(), userModel.getPassword()); + await this.login(userModel.getId(), userModel.getPassword()); } - async loginToContentServices(username, password) { - this.goToLoginPage(); + async loginToContentServices(username, password): Promise { + await this.goToLoginPage(); await LocalStorageUtil.clearStorage(); await LocalStorageUtil.setStorageItem('providers', 'ECM'); await LocalStorageUtil.apiReset(); - return this.login(username, password); + await this.login(username, password); } - clickSignInButton() { - BrowserActions.click(this.signInButton); + async clickSignInButton(): Promise { + await BrowserActions.click(this.signInButton); } - clickSettingsIcon() { - BrowserActions.click(this.settingsIcon); + async clickSettingsIcon(): Promise { + await BrowserActions.click(this.settingsIcon); } - showPassword() { - BrowserActions.click(this.showPasswordElement); + async showPassword(): Promise { + await BrowserActions.click(this.showPasswordElement); } - hidePassword() { - BrowserActions.click(this.hidePasswordElement); + async hidePassword(): Promise { + await BrowserActions.click(this.hidePasswordElement); } - getShownPassword() { + async getShownPassword(): Promise { return this.txtPassword.getAttribute('value'); } - checkPasswordIsHidden() { - BrowserVisibility.waitUntilElementIsVisible(this.txtPassword); + async checkPasswordIsHidden(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.txtPassword); } - checkRememberIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.rememberMe); + async checkRememberIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.rememberMe); } - checkRememberIsNotDisplayed() { - BrowserVisibility.waitUntilElementIsNotVisible(this.rememberMe); + async checkRememberIsNotDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsNotVisible(this.rememberMe); } - checkNeedHelpIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.needHelp); + async checkNeedHelpIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.needHelp); } - checkNeedHelpIsNotDisplayed() { - BrowserVisibility.waitUntilElementIsNotVisible(this.needHelp); + async checkNeedHelpIsNotDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsNotVisible(this.needHelp); } - checkRegisterDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.register); + async checkRegisterDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.register); } - checkRegisterIsNotDisplayed() { - BrowserVisibility.waitUntilElementIsNotVisible(this.register); + async checkRegisterIsNotDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsNotVisible(this.register); } - enableFooter() { - this.formControllersPage.enableToggle(this.footerSwitch); + async enableFooter(): Promise { + await this.formControllersPage.enableToggle(this.footerSwitch); } - disableFooter() { - this.formControllersPage.disableToggle(this.footerSwitch); + async disableFooter(): Promise { + await this.formControllersPage.disableToggle(this.footerSwitch); } - disableRememberMe() { - this.formControllersPage.disableToggle(this.rememberMeSwitch); + async disableRememberMe(): Promise { + await this.formControllersPage.disableToggle(this.rememberMeSwitch); } - enableSuccessRouteSwitch() { - this.formControllersPage.enableToggle(this.successRouteSwitch); + async enableSuccessRouteSwitch(): Promise { + await this.formControllersPage.enableToggle(this.successRouteSwitch); } - enableLogoSwitch() { - this.formControllersPage.enableToggle(this.logoSwitch); + async enableLogoSwitch(): Promise { + await this.formControllersPage.enableToggle(this.logoSwitch); } - enterSuccessRoute(route) { - return BrowserActions.clearSendKeys(this.successRouteTxt, route); + async enterSuccessRoute(route): Promise { + await BrowserActions.clearSendKeys(this.successRouteTxt, route); } - enterLogo(logo) { - BrowserActions.clearSendKeys(this.logoTxt, logo); + async enterLogo(logo): Promise { + await BrowserActions.clearSendKeys(this.logoTxt, logo); } - login(username, password) { - this.enterUsername(username); - this.enterPassword(password); - this.clickSignInButton(); - return BrowserVisibility.waitUntilElementIsVisible(this.sidenavLayout); + async login(username, password): Promise { + await this.enterUsername(username); + await this.enterPassword(password); + await this.clickSignInButton(); + await BrowserVisibility.waitUntilElementIsVisible(this.sidenavLayout); } } diff --git a/lib/testing/src/lib/core/pages/notification-history.page.ts b/lib/testing/src/lib/core/pages/notification-history.page.ts index ebee023d63..5792b0ac6b 100644 --- a/lib/testing/src/lib/core/pages/notification-history.page.ts +++ b/lib/testing/src/lib/core/pages/notification-history.page.ts @@ -17,36 +17,39 @@ import { by, element } from 'protractor'; import { BrowserActions } from '../utils/browser-actions'; +import { ElementFinder } from 'protractor'; export class NotificationHistoryPage { - notificationList = element(by.css('#adf-notification-history-list')); + notificationList: ElementFinder = element(by.css('#adf-notification-history-list')); - clickNotificationButton() { - BrowserActions.clickExecuteScript('#adf-notification-history-open-button'); + async clickNotificationButton(): Promise { + await BrowserActions.clickExecuteScript('#adf-notification-history-open-button'); } - clickMarkAsRead() { - BrowserActions.click(element(by.css('#adf-notification-history-mark-as-read'))); + async clickMarkAsRead(): Promise { + await BrowserActions.click(element(by.css('#adf-notification-history-mark-as-read'))); } - checkNotificationIsPresent(text: string) { - expect(BrowserActions.getText(this.notificationList)).toContain(text); + async checkNotificationIsPresent(text: string): Promise { + const notificationLisText = await BrowserActions.getText(this.notificationList); + await expect(notificationLisText).toContain(text); } - checkNotificationIsNotPresent(text: string) { - expect(BrowserActions.getText(this.notificationList)).not.toContain(text); + async checkNotificationIsNotPresent(text: string): Promise { + const notificationLisText = await BrowserActions.getText(this.notificationList); + await expect(notificationLisText).not.toContain(text); } - checkNotifyContains(text: string) { - this.clickNotificationButton(); - this.checkNotificationIsPresent(text); - this.clickMarkAsRead(); + async checkNotifyContains(text: string): Promise { + await this.clickNotificationButton(); + await this.checkNotificationIsPresent(text); + await this.clickMarkAsRead(); } - checkNotifyNotContains(text: string) { - this.clickNotificationButton(); - this.checkNotificationIsNotPresent(text); - BrowserActions.closeMenuAndDialogs(); + async checkNotifyNotContains(text: string): Promise { + await this.clickNotificationButton(); + await this.checkNotificationIsNotPresent(text); + await BrowserActions.closeMenuAndDialogs(); } } diff --git a/lib/testing/src/lib/core/pages/pagination.page.ts b/lib/testing/src/lib/core/pages/pagination.page.ts index 30ec50b49f..72fd3a50a0 100644 --- a/lib/testing/src/lib/core/pages/pagination.page.ts +++ b/lib/testing/src/lib/core/pages/pagination.page.ts @@ -15,118 +15,109 @@ * limitations under the License. */ -import { browser, by, element, protractor } from 'protractor'; +import { browser, by, element, Locator } from 'protractor'; import { BrowserVisibility } from '../utils/browser-visibility'; import { BrowserActions } from '../utils/browser-actions'; +import { ElementFinder } from 'protractor'; export class PaginationPage { - pageSelectorDropDown = element(by.css('div[class*="adf-pagination__page-selector"]')); - pageSelectorArrow = element(by.css('button[data-automation-id="page-selector"]')); - itemsPerPage = element(by.css('span[class="adf-pagination__max-items"]')); - currentPage = element(by.css('span[class="adf-pagination__current-page"]')); - totalPages = element(by.css('span[class="adf-pagination__total-pages"]')); - paginationRange = element(by.css('span[class="adf-pagination__range"]')); - nextPageButton = element(by.css('button[class*="adf-pagination__next-button"]')); - nextButtonDisabled = element(by.css('button[class*="adf-pagination__next-button"][disabled]')); - previousButtonDisabled = element(by.css('button[class*="adf-pagination__previous-button"][disabled]')); - pageDropDown = element(by.css('div[class*="adf-pagination__actualinfo-block"] button')); - pageDropDownOptions = by.css('div[class*="mat-menu-content"] button'); - paginationSection = element(by.css('adf-pagination')); - paginationSectionEmpty = element(by.css('adf-pagination[class*="adf-pagination__empty"]')); - totalFiles = element(by.css('span[class="adf-pagination__range"]')); + pageSelectorDropDown: ElementFinder = element(by.css('div[class*="adf-pagination__page-selector"]')); + pageSelectorArrow: ElementFinder = element(by.css('button[data-automation-id="page-selector"]')); + itemsPerPage: ElementFinder = element(by.css('span[class="adf-pagination__max-items"]')); + currentPage: ElementFinder = element(by.css('span[class="adf-pagination__current-page"]')); + totalPages: ElementFinder = element(by.css('span[class="adf-pagination__total-pages"]')); + paginationRange: ElementFinder = element(by.css('span[class="adf-pagination__range"]')); + nextPageButton: ElementFinder = element(by.css('button[class*="adf-pagination__next-button"]')); + nextButtonDisabled: ElementFinder = element(by.css('button[class*="adf-pagination__next-button"][disabled]')); + previousButtonDisabled: ElementFinder = element(by.css('button[class*="adf-pagination__previous-button"][disabled]')); + pageDropDown: ElementFinder = element(by.css('div[class*="adf-pagination__actualinfo-block"] button')); + pageDropDownOptions: Locator = by.css('div[class*="mat-menu-content"] button'); + paginationSection: ElementFinder = element(by.css('adf-pagination')); + paginationSectionEmpty: ElementFinder = element(by.css('adf-pagination[class*="adf-pagination__empty"]')); + totalFiles: ElementFinder = element(by.css('span[class="adf-pagination__range"]')); - selectItemsPerPage(numberOfItem: string) { - browser.executeScript(`document.querySelector('div[class*="adf-pagination__perpage-block"] button').click();`); - BrowserVisibility.waitUntilElementIsVisible(this.pageSelectorDropDown); + async selectItemsPerPage(numberOfItem: string): Promise { + await browser.executeScript(`document.querySelector('div[class*="adf-pagination__perpage-block"] button').click();`); + await BrowserVisibility.waitUntilElementIsVisible(this.pageSelectorDropDown); const itemsPerPage = element.all(by.cssContainingText('.mat-menu-item', numberOfItem)).first(); - BrowserActions.click(itemsPerPage); - return this; + await BrowserActions.click(itemsPerPage); + await BrowserVisibility.waitUntilElementIsNotVisible(this.pageSelectorDropDown); } - checkPageSelectorIsNotDisplayed() { - BrowserVisibility.waitUntilElementIsNotOnPage(this.pageSelectorArrow); + async checkPageSelectorIsNotDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsNotVisible(this.pageSelectorArrow); } - checkPageSelectorIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.pageSelectorArrow); + async checkPageSelectorIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.pageSelectorArrow); } - checkPaginationIsNotDisplayed() { - BrowserVisibility.waitUntilElementIsOnPage(this.paginationSectionEmpty); - return this; + async checkPaginationIsNotDisplayed() { + await BrowserVisibility.waitUntilElementIsVisible(this.paginationSectionEmpty); } - getCurrentItemsPerPage() { + async getCurrentItemsPerPage(): Promise { return BrowserActions.getText(this.itemsPerPage); } - getCurrentPage() { + async getCurrentPage(): Promise { return BrowserActions.getText(this.currentPage); } - getTotalPages() { + async getTotalPages(): Promise { return BrowserActions.getText(this.totalPages); } - getPaginationRange() { + async getPaginationRange(): Promise { return BrowserActions.getText(this.paginationRange); } - clickOnNextPage() { - browser.executeScript(`document.querySelector('button[class*="adf-pagination__next-button"]').click();`); + async clickOnNextPage(): Promise { + await browser.executeScript(`document.querySelector('button[class*="adf-pagination__next-button"]').click();`); } - clickOnPageDropdown() { - return BrowserActions.click(this.pageDropDown); + async clickOnPageDropdown(): Promise { + await BrowserActions.click(this.pageDropDown); } - clickOnPageDropdownOption(numberOfItemPerPage: string) { - BrowserVisibility.waitUntilElementIsVisible(element.all(this.pageDropDownOptions).first()); + async clickOnPageDropdownOption(numberOfItemPerPage: string): Promise { + await BrowserVisibility.waitUntilElementIsVisible(element.all(this.pageDropDownOptions).first()); const option = element(by.cssContainingText('div[class*="mat-menu-content"] button', numberOfItemPerPage)); - BrowserActions.click(option); - return this; + await BrowserActions.click(option); } - getPageDropdownOptions() { - const deferred = protractor.promise.defer(); - BrowserVisibility.waitUntilElementIsVisible(element.all(this.pageDropDownOptions).first()); + async getPageDropdownOptions() { + await BrowserVisibility.waitUntilElementIsVisible(element.all(this.pageDropDownOptions).first()); const initialList = []; - element.all(this.pageDropDownOptions).each(function (currentOption) { - currentOption.getText().then(function (text) { - if (text !== '') { - initialList.push(text); - } - }); - }).then(function () { - deferred.fulfill(initialList); + await element.all(this.pageDropDownOptions).each(async (currentOption) => { + const text = await BrowserActions.getText(currentOption); + if (text !== '') { + initialList.push(text); + } }); - return deferred.promise; + return initialList; } - checkNextPageButtonIsDisabled() { - BrowserVisibility.waitUntilElementIsVisible(this.nextButtonDisabled); + async checkNextPageButtonIsDisabled(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.nextButtonDisabled); } - checkPreviousPageButtonIsDisabled() { - BrowserVisibility.waitUntilElementIsVisible(this.previousButtonDisabled); + async checkPreviousPageButtonIsDisabled(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.previousButtonDisabled); } - checkNextPageButtonIsEnabled() { - BrowserVisibility.waitUntilElementIsNotOnPage(this.nextButtonDisabled); + async checkNextPageButtonIsEnabled(): Promise { + await BrowserVisibility.waitUntilElementIsNotVisible(this.nextButtonDisabled); } - checkPreviousPageButtonIsEnabled() { - BrowserVisibility.waitUntilElementIsNotOnPage(this.previousButtonDisabled); + async checkPreviousPageButtonIsEnabled(): Promise { + await BrowserVisibility.waitUntilElementIsNotVisible(this.previousButtonDisabled); } - getTotalNumberOfFiles() { - BrowserVisibility.waitUntilElementIsVisible(this.totalFiles); - const numberOfFiles = this.totalFiles.getText().then(function (totalNumber) { - const totalNumberOfFiles = totalNumber.split('of ')[1]; - return totalNumberOfFiles; - }); - - return numberOfFiles; + async getTotalNumberOfFiles() { + await BrowserVisibility.waitUntilElementIsVisible(this.totalFiles); + const totalNumberOfFiles = await BrowserActions.getText(this.totalFiles); + return totalNumberOfFiles.split('of ')[1]; } } diff --git a/lib/testing/src/lib/core/pages/settings.page.ts b/lib/testing/src/lib/core/pages/settings.page.ts index b72a80340b..9961b53419 100644 --- a/lib/testing/src/lib/core/pages/settings.page.ts +++ b/lib/testing/src/lib/core/pages/settings.page.ts @@ -15,13 +15,13 @@ * limitations under the License. */ -import { browser, by, element, protractor } from 'protractor'; +import { browser, by, element, ElementFinder } from 'protractor'; import { BrowserVisibility } from '../utils/browser-visibility'; import { BrowserActions } from '../utils/browser-actions'; export class SettingsPage { - settingsURL = browser.baseUrl + '/settings'; + settingsURL: string = browser.baseUrl + '/settings'; providerDropdown = element(by.css('mat-select[id="adf-provider-selector"] div[class="mat-select-arrow-wrapper"]')); ecmAndBpm = { option: element(by.xpath('//SPAN[@class="mat-option-text"][contains(text(),"ALL")]')), @@ -39,47 +39,45 @@ export class SettingsPage { option: element(by.xpath('//SPAN[@class="mat-option-text"][contains(text(),"OAUTH")]')), text: 'OAUTH' }; - selectedOption = element(by.css('span[class*="mat-select-value-text"]')); - ecmText = element(by.css('input[data-automation-id*="ecmHost"]')); - bpmText = element(by.css('input[data-automation-id*="bpmHost"]')); - clientIdText = element(by.css('input[id="clientId"]')); - authHostText = element(by.css('input[id="oauthHost"]')); - logoutUrlText = element(by.css('input[id="logout-url"]')); - basicAuthRadioButton = element(by.cssContainingText('mat-radio-button[id*="mat-radio"]', 'Basic Authentication')); - identityHostText = element(by.css('input[id="identityHost"]')); - ssoRadioButton = element(by.cssContainingText('[id*="mat-radio"]', 'SSO')); - silentLoginToggleLabel = element(by.css('mat-slide-toggle[name="silentLogin"] label')); - silentLoginToggleElement = element(by.css('mat-slide-toggle[name="silentLogin"]')); - implicitFlowLabel = element(by.css('mat-slide-toggle[name="implicitFlow"] label')); - implicitFlowElement = element(by.css('mat-slide-toggle[name="implicitFlow"]')); - applyButton = element(by.css('button[data-automation-id*="host-button"]')); - backButton = element(by.cssContainingText('button span[class="mat-button-wrapper"]', 'Back')); - validationMessage = element(by.cssContainingText('mat-error', 'This field is required')); + selectedOption: ElementFinder = element(by.css('span[class*="mat-select-value-text"]')); + ecmText: ElementFinder = element(by.css('input[data-automation-id*="ecmHost"]')); + bpmText: ElementFinder = element(by.css('input[data-automation-id*="bpmHost"]')); + clientIdText: ElementFinder = element(by.css('input[id="clientId"]')); + authHostText: ElementFinder = element(by.css('input[id="oauthHost"]')); + logoutUrlText: ElementFinder = element(by.css('input[id="logout-url"]')); + basicAuthRadioButton: ElementFinder = element(by.cssContainingText('mat-radio-button[id*="mat-radio"]', 'Basic Authentication')); + identityHostText: ElementFinder = element(by.css('input[id="identityHost"]')); + ssoRadioButton: ElementFinder = element(by.cssContainingText('[id*="mat-radio"]', 'SSO')); + silentLoginToggleLabel: ElementFinder = element(by.css('mat-slide-toggle[name="silentLogin"] label')); + silentLoginToggleElement: ElementFinder = element(by.css('mat-slide-toggle[name="silentLogin"]')); + implicitFlowLabel: ElementFinder = element(by.css('mat-slide-toggle[name="implicitFlow"] label')); + implicitFlowElement: ElementFinder = element(by.css('mat-slide-toggle[name="implicitFlow"]')); + applyButton: ElementFinder = element(by.css('button[data-automation-id*="host-button"]')); + backButton: ElementFinder = element(by.cssContainingText('button span[class="mat-button-wrapper"]', 'Back')); + validationMessage: ElementFinder = element(by.cssContainingText('mat-error', 'This field is required')); - goToSettingsPage() { - browser.waitForAngularEnabled(true); - browser.driver.get(this.settingsURL); - return BrowserVisibility.waitUntilElementIsVisible(this.providerDropdown); + async goToSettingsPage(): Promise { + await browser.get(this.settingsURL); + await BrowserVisibility.waitUntilElementIsVisible(this.providerDropdown); } - setProvider(option, selected) { - BrowserVisibility.waitUntilElementIsVisible(this.providerDropdown); - this.providerDropdown.click(); - BrowserVisibility.waitUntilElementIsVisible(option); - option.click(); - return expect(this.selectedOption.getText()).toEqual(selected); + async setProvider(option, selected): Promise { + await BrowserActions.click(this.providerDropdown); + await BrowserActions.click(option); + const selectedOptionText = await BrowserActions.getText(this.selectedOption); + await expect(selectedOptionText).toEqual(selected); } - getSelectedOptionText() { + async getSelectedOptionText(): Promise { return BrowserActions.getText(this.selectedOption); } - getBpmHostUrl() { - return this.bpmText.getAttribute('value'); + async getBpmHostUrl() { + return await this.bpmText.getAttribute('value'); } - getEcmHostUrl() { - return this.ecmText.getAttribute('value'); + async getEcmHostUrl() { + return await this.ecmText.getAttribute('value'); } getBpmOption() { @@ -94,221 +92,185 @@ export class SettingsPage { return this.ecmAndBpm.option; } - setProviderEcmBpm() { - this.setProvider(this.ecmAndBpm.option, this.ecmAndBpm.text); - BrowserVisibility.waitUntilElementIsVisible(this.bpmText); - BrowserVisibility.waitUntilElementIsVisible(this.ecmText); - this.clickApply(); - return this; + async setProviderEcmBpm() { + await this.setProvider(this.ecmAndBpm.option, this.ecmAndBpm.text); + await this.clickApply(); } - setProviderBpm() { - this.setProvider(this.bpm.option, this.bpm.text); - BrowserVisibility.waitUntilElementIsVisible(this.bpmText); - this.clickApply(); - return this; + async setProviderBpm() { + await this.setProvider(this.bpm.option, this.bpm.text); + await this.clickApply(); } - setProviderEcm() { - this.setProvider(this.ecm.option, this.ecm.text); - BrowserVisibility.waitUntilElementIsVisible(this.ecmText); - expect(this.bpmText.isPresent()).toBeFalsy(); - this.clickApply(); - return this; + async setProviderEcm() { + await this.setProvider(this.ecm.option, this.ecm.text); + await this.clickApply(); } - setProviderOauth() { - this.goToSettingsPage(); - this.setProvider(this.oauth.option, this.oauth.text); - BrowserVisibility.waitUntilElementIsVisible(this.bpmText); - BrowserVisibility.waitUntilElementIsVisible(this.ecmText); - expect(this.authHostText.isPresent()).toBeTruthy(); - this.clickApply(); - return this; + async setProviderOauth() { + await this.goToSettingsPage(); + await this.setProvider(this.oauth.option, this.oauth.text); + await this.clickApply(); } async clickBackButton() { - BrowserVisibility.waitUntilElementIsVisible(this.backButton); - await this.backButton.click(); + await BrowserActions.click(this.backButton); } async clickSsoRadioButton() { - BrowserVisibility.waitUntilElementIsVisible(this.ssoRadioButton); - await this.ssoRadioButton.click(); + await BrowserActions.click(this.ssoRadioButton); } - async setProviderEcmSso(contentServiceURL, authHost, identityHost, silentLogin = true, implicitFlow = true, clientId?: string, logoutUr: string = '/logout') { + async setProviderEcmSso(contentServiceURL, authHost, identityHost, silentLogin = true, implicitFlow = true, clientId?: string, logoutUrl: string = '/logout') { await this.goToSettingsPage(); - this.setProvider(this.ecm.option, this.ecm.text); - BrowserVisibility.waitUntilElementIsNotOnPage(this.bpmText); - BrowserVisibility.waitUntilElementIsVisible(this.ecmText); - this.clickSsoRadioButton(); - this.setContentServicesURL(contentServiceURL); - this.setAuthHost(authHost); - this.setIdentityHost(identityHost); - this.setSilentLogin(silentLogin); - this.setImplicitFlow(implicitFlow); - this.setLogoutUrl(logoutUr); + await this.setProvider(this.ecm.option, this.ecm.text); + await this.clickSsoRadioButton(); + await this.setContentServicesURL(contentServiceURL); + await this.setAuthHost(authHost); + await this.setIdentityHost(identityHost); + await this.setSilentLogin(silentLogin); + await this.setImplicitFlow(implicitFlow); + await this.setLogoutUrl(logoutUrl); await this.clickApply(); await browser.sleep(1000); } async setProviderBpmSso(processServiceURL, authHost, identityHost, silentLogin = true, implicitFlow = true) { await this.goToSettingsPage(); - this.setProvider(this.bpm.option, this.bpm.text); - BrowserVisibility.waitUntilElementIsVisible(this.bpmText); - BrowserVisibility.waitUntilElementIsNotOnPage(this.ecmText); - this.clickSsoRadioButton(); - this.setClientId(); - this.setProcessServicesURL(processServiceURL); - this.setAuthHost(authHost); - this.setIdentityHost(identityHost); - this.setSilentLogin(silentLogin); - this.setImplicitFlow(implicitFlow); + await this.setProvider(this.bpm.option, this.bpm.text); + await BrowserVisibility.waitUntilElementIsVisible(this.bpmText); + await BrowserVisibility.waitUntilElementIsNotVisible(this.ecmText); + await this.clickSsoRadioButton(); + await this.setClientId(); + await this.setProcessServicesURL(processServiceURL); + await this.setAuthHost(authHost); + await this.setIdentityHost(identityHost); + await this.setSilentLogin(silentLogin); + await this.setImplicitFlow(implicitFlow); await this.clickApply(); await browser.sleep(1000); } async setProviderEcmBpmSso(contentServicesURL: string, processServiceURL, authHost, identityHost, clientId: string, silentLogin = true, implicitFlow = true) { await this.goToSettingsPage(); - this.setProvider(this.ecmAndBpm.option, this.ecmAndBpm.text); - BrowserVisibility.waitUntilElementIsVisible(this.bpmText); - BrowserVisibility.waitUntilElementIsVisible(this.ecmText); - this.clickSsoRadioButton(); - this.setClientId(clientId); - this.setContentServicesURL(contentServicesURL); - this.setProcessServicesURL(processServiceURL); - this.setAuthHost(authHost); - this.setIdentityHost(identityHost); - this.setSilentLogin(silentLogin); - this.setImplicitFlow(implicitFlow); + await this.setProvider(this.ecmAndBpm.option, this.ecmAndBpm.text); + await BrowserVisibility.waitUntilElementIsVisible(this.bpmText); + await BrowserVisibility.waitUntilElementIsVisible(this.ecmText); + await this.clickSsoRadioButton(); + await this.setClientId(clientId); + await this.setContentServicesURL(contentServicesURL); + await this.setProcessServicesURL(processServiceURL); + await this.setAuthHost(authHost); + await this.setIdentityHost(identityHost); + await this.setSilentLogin(silentLogin); + await this.setImplicitFlow(implicitFlow); await this.clickApply(); await browser.sleep(1000); } async setLogoutUrl(logoutUrl) { - BrowserVisibility.waitUntilElementIsPresent(this.logoutUrlText); - this.logoutUrlText.clear(); - this.logoutUrlText.sendKeys(logoutUrl); + await BrowserVisibility.waitUntilElementIsPresent(this.logoutUrlText); + await BrowserActions.clearSendKeys(this.logoutUrlText, logoutUrl); } async setProcessServicesURL(processServiceURL) { - BrowserVisibility.waitUntilElementIsVisible(this.bpmText); - BrowserActions.clearSendKeys(this.bpmText, processServiceURL); + await BrowserVisibility.waitUntilElementIsVisible(this.bpmText); + await BrowserActions.clearSendKeys(this.bpmText, processServiceURL); } async setClientId(clientId: string = browser.params.config.oauth2.clientId) { - BrowserVisibility.waitUntilElementIsVisible(this.clientIdText); - this.clientIdText.clear(); - this.clientIdText.sendKeys(clientId); + await BrowserActions.clearSendKeys(this.clientIdText, clientId); } async setContentServicesURL(contentServiceURL) { - BrowserVisibility.waitUntilElementIsClickable(this.ecmText); - BrowserActions.clearSendKeys(this.ecmText, contentServiceURL); + await BrowserActions.clearSendKeys(this.ecmText, contentServiceURL); } - clearContentServicesURL() { - BrowserVisibility.waitUntilElementIsVisible(this.ecmText); - this.ecmText.clear(); - this.ecmText.sendKeys('a'); - this.ecmText.sendKeys(protractor.Key.BACK_SPACE); + async clearContentServicesURL() { + await BrowserActions.clearWithBackSpace(this.ecmText); } - clearProcessServicesURL() { - BrowserVisibility.waitUntilElementIsVisible(this.bpmText); - this.bpmText.clear(); - this.bpmText.sendKeys('a'); - this.bpmText.sendKeys(protractor.Key.BACK_SPACE); + async clearProcessServicesURL() { + await BrowserVisibility.waitUntilElementIsVisible(this.bpmText); + await BrowserActions.clearWithBackSpace(this.bpmText); } async setAuthHost(authHostURL) { - BrowserVisibility.waitUntilElementIsVisible(this.authHostText); - await this.authHostText.clear(); - await this.authHostText.sendKeys(authHostURL); + await BrowserVisibility.waitUntilElementIsVisible(this.authHostText); + await BrowserActions.clearSendKeys(this.authHostText, authHostURL); } async setIdentityHost(identityHost) { - BrowserVisibility.waitUntilElementIsVisible(this.identityHostText); - await this.identityHostText.clear(); - await this.identityHostText.sendKeys(identityHost); + await BrowserVisibility.waitUntilElementIsVisible(this.identityHostText); + await BrowserActions.clearSendKeys(this.identityHostText, identityHost); } async clickApply() { - BrowserVisibility.waitUntilElementIsVisible(this.applyButton); - await this.applyButton.click(); + await BrowserActions.click(this.applyButton); } async setSilentLogin(enableToggle) { - BrowserVisibility.waitUntilElementIsVisible(this.silentLoginToggleElement); + await BrowserVisibility.waitUntilElementIsVisible(this.silentLoginToggleElement); const isChecked = (await this.silentLoginToggleElement.getAttribute('class')).includes('mat-checked'); if (isChecked && !enableToggle || !isChecked && enableToggle) { - return this.silentLoginToggleLabel.click(); + await BrowserActions.click(this.silentLoginToggleLabel); } - - return Promise.resolve(); } async setImplicitFlow(enableToggle) { - BrowserVisibility.waitUntilElementIsVisible(this.implicitFlowElement); + await BrowserVisibility.waitUntilElementIsVisible(this.implicitFlowElement); const isChecked = (await this.implicitFlowElement.getAttribute('class')).includes('mat-checked'); if (isChecked && !enableToggle || !isChecked && enableToggle) { - return this.implicitFlowLabel.click(); + await BrowserActions.click(this.implicitFlowLabel); } - - return Promise.resolve(); } - checkApplyButtonIsDisabled() { - BrowserVisibility.waitUntilElementIsVisible(element(by.css('button[data-automation-id*="host-button"]:disabled'))); - return this; + async checkApplyButtonIsDisabled() { + await BrowserVisibility.waitUntilElementIsVisible(element(by.css('button[data-automation-id*="host-button"]:disabled'))); } - checkProviderDropdownIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.providerDropdown); + async checkProviderDropdownIsDisplayed() { + await BrowserVisibility.waitUntilElementIsVisible(this.providerDropdown); } - checkValidationMessageIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.validationMessage); + async checkValidationMessageIsDisplayed() { + await BrowserVisibility.waitUntilElementIsVisible(this.validationMessage); } - checkProviderOptions() { - BrowserVisibility.waitUntilElementIsVisible(this.providerDropdown); - this.providerDropdown.click(); - BrowserVisibility.waitUntilElementIsVisible(this.ecmAndBpm.option); - BrowserVisibility.waitUntilElementIsVisible(this.ecm.option); - BrowserVisibility.waitUntilElementIsVisible(this.bpm.option); + async checkProviderOptions() { + await BrowserActions.click(this.providerDropdown); + await BrowserVisibility.waitUntilElementIsVisible(this.ecmAndBpm.option); + await BrowserVisibility.waitUntilElementIsVisible(this.ecm.option); + await BrowserVisibility.waitUntilElementIsVisible(this.bpm.option); } getBasicAuthRadioButton() { - BrowserVisibility.waitUntilElementIsVisible(this.basicAuthRadioButton); return this.basicAuthRadioButton; } getSsoRadioButton() { - BrowserVisibility.waitUntilElementIsVisible(this.ssoRadioButton); return this.ssoRadioButton; } getBackButton() { - BrowserVisibility.waitUntilElementIsVisible(this.backButton); return this.backButton; } getApplyButton() { - BrowserVisibility.waitUntilElementIsVisible(this.applyButton); return this.applyButton; } - checkBasicAuthRadioIsSelected() { - expect(this.getBasicAuthRadioButton().getAttribute('class')).toContain('mat-radio-checked'); + async checkBasicAuthRadioIsSelected() { + const radioButton = this.getBasicAuthRadioButton(); + await expect(await radioButton.getAttribute('class')).toContain('mat-radio-checked'); } - checkSsoRadioIsNotSelected() { - expect(this.getSsoRadioButton().getAttribute('class')).not.toContain('mat-radio-checked'); + async checkSsoRadioIsNotSelected() { + const radioButton = this.getSsoRadioButton(); + await expect(await radioButton.getAttribute('class')).not.toContain('mat-radio-checked'); } } diff --git a/lib/testing/src/lib/core/pages/user-info.page.ts b/lib/testing/src/lib/core/pages/user-info.page.ts index 40d73aafa6..dc315b5faf 100644 --- a/lib/testing/src/lib/core/pages/user-info.page.ts +++ b/lib/testing/src/lib/core/pages/user-info.page.ts @@ -19,136 +19,131 @@ import { element, by } from 'protractor'; import { BrowserVisibility } from '../utils/browser-visibility'; import { TabsPage } from '../../material/pages/tabs.page'; import { BrowserActions } from '../utils/browser-actions'; +import { ElementFinder } from 'protractor'; export class UserInfoPage { - dialog = element.all(by.css('mat-card[class*="adf-userinfo-card"]')).first(); - userImage = element(by.css('div[id="user-initial-image"]')); - userInfoEcmHeaderTitle = element(by.css('div[id="ecm-username"]')); - userInfoEcmTitle = element(by.css('mat-card-content span[id="ecm-full-name"]')); - ecmEmail = element(by.css('span[id="ecm-email"]')); - ecmJobTitle = element(by.css('span[id="ecm-job-title"]')); - userInfoProcessHeaderTitle = element(by.css('div[id="bpm-username"]')); - userInfoProcessTitle = element(by.css('mat-card-content span[id="bpm-full-name"]')); - processEmail = element(by.css('span[id="bpm-email"]')); - processTenant = element(by.css('span[class="detail-profile"]')); - apsImage = element(by.css('img[id="bpm-user-detail-image"]')); - acsImage = element(by.css('img[id="ecm-user-detail-image"]')); - initialImage = element.all(by.css('div[id="user-initials-image"]')).first(); - userInfoSsoHeaderTitle = this.dialog.element(by.css('div[id="identity-username"]')); - userInfoSsoTitle = element(by.css('.adf-userinfo__detail-title')); - ssoEmail = element(by.id('identity-email')); - userProfileButton = element(by.css('button[data-automation-id="adf-user-profile"]')); + dialog: ElementFinder = element.all(by.css('mat-card[class*="adf-userinfo-card"]')).first(); + userImage: ElementFinder = element(by.css('div[id="user-initial-image"]')); + userInfoEcmHeaderTitle: ElementFinder = element(by.css('div[id="ecm-username"]')); + userInfoEcmTitle: ElementFinder = element(by.css('mat-card-content span[id="ecm-full-name"]')); + ecmEmail: ElementFinder = element(by.css('span[id="ecm-email"]')); + ecmJobTitle: ElementFinder = element(by.css('span[id="ecm-job-title"]')); + userInfoProcessHeaderTitle: ElementFinder = element(by.css('div[id="bpm-username"]')); + userInfoProcessTitle: ElementFinder = element(by.css('mat-card-content span[id="bpm-full-name"]')); + processEmail: ElementFinder = element(by.css('span[id="bpm-email"]')); + processTenant: ElementFinder = element(by.css('span[class="detail-profile"]')); + apsImage: ElementFinder = element(by.css('img[id="bpm-user-detail-image"]')); + acsImage: ElementFinder = element(by.css('img[id="ecm-user-detail-image"]')); + initialImage: ElementFinder = element.all(by.css('div[id="user-initials-image"]')).first(); + userInfoSsoHeaderTitle: ElementFinder = this.dialog.element(by.css('div[id="identity-username"]')); + userInfoSsoTitle: ElementFinder = element(by.css('.adf-userinfo__detail-title')); + ssoEmail: ElementFinder = element(by.id('identity-email')); + userProfileButton: ElementFinder = element(by.css('button[data-automation-id="adf-user-profile"]')); - dialogIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.dialog); - return this; + async dialogIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.dialog); } - dialogIsNotDisplayed() { - BrowserVisibility.waitUntilElementIsNotOnPage(this.dialog); - return this; + async dialogIsNotDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsNotVisible(this.dialog); } - clickUserProfile() { - BrowserActions.click(this.userProfileButton); + async clickUserProfile(): Promise { + await BrowserActions.click(this.userProfileButton); } - clickOnContentServicesTab() { + async clickOnContentServicesTab(): Promise { const tabsPage = new TabsPage(); - tabsPage.clickTabByTitle('Content Services'); - return this; + await tabsPage.clickTabByTitle('Content Services'); } - checkProcessServicesTabIsSelected() { + async checkProcessServicesTabIsSelected(): Promise { const tabsPage = new TabsPage; - tabsPage.checkTabIsSelectedByTitle('Process Services'); - return this; + await tabsPage.checkTabIsSelectedByTitle('Process Services'); } - clickOnProcessServicesTab() { + async clickOnProcessServicesTab(): Promise { const tabsPage = new TabsPage; - tabsPage.clickTabByTitle('Process Services'); - return this; + await tabsPage.clickTabByTitle('Process Services'); } - userImageIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.userImage); - return this; + async userImageIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.userImage); } - getContentHeaderTitle() { - BrowserVisibility.waitUntilElementIsVisible(this.dialog); + async getContentHeaderTitle(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.dialog); return BrowserActions.getText(this.userInfoEcmHeaderTitle); } - getContentTitle() { + async getContentTitle(): Promise { return BrowserActions.getText(this.userInfoEcmTitle); } - getContentEmail() { + async getContentEmail(): Promise { return BrowserActions.getText(this.ecmEmail); } - getContentJobTitle() { + async getContentJobTitle(): Promise { return BrowserActions.getText(this.ecmJobTitle); } - getProcessHeaderTitle() { + async getProcessHeaderTitle(): Promise { return BrowserActions.getText(this.userInfoProcessHeaderTitle); } - getProcessTitle() { + async getProcessTitle(): Promise { return BrowserActions.getText(this.userInfoProcessTitle); } - getProcessEmail() { + async getProcessEmail(): Promise { return BrowserActions.getText(this.processEmail); } - getProcessTenant() { + async getProcessTenant(): Promise { return BrowserActions.getText(this.processTenant); } - getSsoHeaderTitle() { + async getSsoHeaderTitle(): Promise { return BrowserActions.getText(this.userInfoSsoHeaderTitle); } - getSsoTitle() { + async getSsoTitle(): Promise { return BrowserActions.getText(this.userInfoSsoTitle); } - getSsoEmail() { + async getSsoEmail(): Promise { return BrowserActions.getText(this.ssoEmail); } - closeUserProfile() { - BrowserVisibility.waitUntilElementIsVisible(this.dialog); - BrowserActions.closeMenuAndDialogs(); + async closeUserProfile(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.dialog); + await BrowserActions.closeMenuAndDialogs(); } - checkACSProfileImage() { - BrowserVisibility.waitUntilElementIsVisible(this.acsImage); + async checkACSProfileImage(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.acsImage); } - checkAPSProfileImage() { - BrowserVisibility.waitUntilElementIsVisible(this.apsImage); + async checkAPSProfileImage(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.apsImage); } - checkInitialImage() { - BrowserVisibility.waitUntilElementIsVisible(this.initialImage); + async checkInitialImage(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.initialImage); } - initialImageNotDisplayed() { - BrowserVisibility.waitUntilElementIsNotOnPage(this.initialImage); + async initialImageNotDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsNotVisible(this.initialImage); } - ACSProfileImageNotDisplayed() { - BrowserVisibility.waitUntilElementIsNotOnPage(this.acsImage); + async ACSProfileImageNotDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsNotVisible(this.acsImage); } - APSProfileImageNotDisplayed() { - BrowserVisibility.waitUntilElementIsNotOnPage(this.apsImage); + async APSProfileImageNotDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsNotVisible(this.apsImage); } } diff --git a/lib/testing/src/lib/core/utils/browser-actions.ts b/lib/testing/src/lib/core/utils/browser-actions.ts index a0afc20b68..116bab2d66 100644 --- a/lib/testing/src/lib/core/utils/browser-actions.ts +++ b/lib/testing/src/lib/core/utils/browser-actions.ts @@ -15,77 +15,94 @@ * limitations under the License. */ -import { BrowserVisibility } from './browser-visibility'; -import { browser, by, element, ElementFinder, protractor } from 'protractor'; +import { browser, by, element, ElementArrayFinder, ElementFinder, protractor } from 'protractor'; +import { BrowserVisibility } from '../utils/browser-visibility'; export class BrowserActions { - static async click(elementFinder: ElementFinder) { - BrowserVisibility.waitUntilElementIsVisible(elementFinder); - BrowserVisibility.waitUntilElementIsClickable(elementFinder); - return elementFinder.click(); + static async click(elementFinder: ElementFinder): Promise { + await BrowserVisibility.waitUntilElementIsVisible(elementFinder); + await BrowserVisibility.waitUntilElementIsClickable(elementFinder); + await elementFinder.click(); } - static async getUrl(url: string) { + static async getUrl(url: string): Promise { return browser.get(url); } - static async clickExecuteScript(elementCssSelector: string) { - BrowserVisibility.waitUntilElementIsVisible(element(by.css(elementCssSelector))); - browser.executeScript(`document.querySelector('${elementCssSelector}').click();`); + static async clickExecuteScript(elementCssSelector: string): Promise { + await BrowserVisibility.waitUntilElementIsPresent(element(by.css(elementCssSelector))); + await browser.executeScript(`document.querySelector('${elementCssSelector}').click();`); } - static async getText(elementFinder: ElementFinder) { - BrowserVisibility.waitUntilElementIsVisible(elementFinder); - return elementFinder.getText(); + static async getText(elementFinder: ElementFinder): Promise { + const present = await BrowserVisibility.waitUntilElementIsPresent(elementFinder); + if (present) { + return elementFinder.getText(); + } else { + return ''; + } } - static async getColor(elementFinder: ElementFinder) { - BrowserVisibility.waitUntilElementIsVisible(elementFinder); - return elementFinder.getWebElement().getCssValue('color'); + static async getArrayText(elementFinders: ElementArrayFinder): Promise { + return elementFinders.getText(); } - static async clearSendKeys(elementFinder: ElementFinder, text: string) { - BrowserVisibility.waitUntilElementIsVisible(elementFinder); - elementFinder.click(); - elementFinder.sendKeys(''); - elementFinder.clear(); - - elementFinder.sendKeys(text); + static async getColor(elementFinder: ElementFinder): Promise { + await BrowserVisibility.waitUntilElementIsVisible(elementFinder); + const webElem = await elementFinder.getWebElement(); + return await webElem.getCssValue('color'); } - static async checkIsDisabled(elementFinder: ElementFinder) { - BrowserVisibility.waitUntilElementIsVisible(elementFinder); - expect(elementFinder.getAttribute('disabled')).toEqual('true'); - return this; + static async clearWithBackSpace(elementFinder: ElementFinder) { + await BrowserVisibility.waitUntilElementIsVisible(elementFinder); + await elementFinder.click(); + const value = await elementFinder.getAttribute('value'); + for (let i = value.length; i >= 0; i--) { + await elementFinder.sendKeys(protractor.Key.BACK_SPACE); + } } - static async rightClick(elementFinder: ElementFinder) { - BrowserVisibility.waitUntilElementIsVisible(elementFinder); - return browser.actions().click(elementFinder, protractor.Button.RIGHT).perform(); + static async clearSendKeys(elementFinder: ElementFinder, text: string): Promise { + await this.click(elementFinder); + await elementFinder.sendKeys(''); + await elementFinder.clear(); + await elementFinder.sendKeys(text); } - static async closeMenuAndDialogs() { - return browser.actions().sendKeys(protractor.Key.ESCAPE).perform(); + static async checkIsDisabled(elementFinder: ElementFinder): Promise { + await BrowserVisibility.waitUntilElementIsVisible(elementFinder); + const valueCheck = await elementFinder.getAttribute('disabled'); + await expect(valueCheck).toEqual('true'); } - static async closeDisabledMenu() { + static async rightClick(elementFinder: ElementFinder): Promise { + await BrowserVisibility.waitUntilElementIsVisible(elementFinder); + await browser.actions().mouseMove(elementFinder).perform(); + await browser.actions().click(elementFinder, protractor.Button.RIGHT).perform(); + } + + static async closeMenuAndDialogs(): Promise { + const container = element(by.css('div.cdk-overlay-backdrop.cdk-overlay-transparent-backdrop.cdk-overlay-backdrop-showing')); + await browser.actions().sendKeys(protractor.Key.ESCAPE).perform(); + await BrowserVisibility.waitUntilElementIsNotVisible(container); + } + + static async closeDisabledMenu(): Promise { // if the opened menu has only disabled items, pressing escape to close it won't work - return browser.actions().sendKeys(protractor.Key.ENTER).perform(); + await browser.actions().sendKeys(protractor.Key.ENTER).perform(); } - static clickOnDropdownOption(option: string, dropDownElement: ElementFinder) { - this.click(dropDownElement); - BrowserVisibility.waitUntilElementIsVisible(element('div[class*="mat-menu-content"] button')); + static async clickOnDropdownOption(option: string, dropDownElement: ElementFinder): Promise { + await this.click(dropDownElement); + await BrowserVisibility.waitUntilElementIsVisible(element('div[class*="mat-menu-content"] button')); const optionElement = element(by.cssContainingText('div[class*="mat-menu-content"] button', option)); - BrowserActions.click(optionElement); - return this; + await this.click(optionElement); } - static clickOnSelectDropdownOption(option: string, dropDownElement: ElementFinder) { - this.click(dropDownElement); + static async clickOnSelectDropdownOption(option: string, dropDownElement: ElementFinder): Promise { + await this.click(dropDownElement); const optionElement = element(by.cssContainingText('mat-option span.mat-option-text', option)); - BrowserActions.click(optionElement); - return this; + await this.click(optionElement); } } diff --git a/lib/testing/src/lib/core/utils/browser-visibility.ts b/lib/testing/src/lib/core/utils/browser-visibility.ts index e2acfc030c..5ec86cf688 100644 --- a/lib/testing/src/lib/core/utils/browser-visibility.ts +++ b/lib/testing/src/lib/core/utils/browser-visibility.ts @@ -15,98 +15,58 @@ * limitations under the License. */ -import { browser, by, element, ExpectedConditions as EC, ElementFinder, protractor } from 'protractor'; +import { browser, by, element, ElementFinder, protractor } from 'protractor'; const until = protractor.ExpectedConditions; const DEFAULT_TIMEOUT = global['TestConfig'] ? global['TestConfig'].main.timeout : 40000; export class BrowserVisibility { + static async waitUntilElementIsPresent(elementToCheck: ElementFinder, waitTimeout: number = DEFAULT_TIMEOUT): Promise { + return browser.wait(until.presenceOf(elementToCheck), waitTimeout, 'Element is not present ' + elementToCheck.locator()); + } /* * Wait for element is visible */ - static waitUntilElementIsVisible(elementToCheck: ElementFinder, waitTimeout: number = DEFAULT_TIMEOUT, message: string = '') { - let isDisplayed = false; - return browser.wait(() => { - browser.waitForAngularEnabled(); - - elementToCheck.isDisplayed().then( - () => { - isDisplayed = true; - }, - () => { - isDisplayed = false; - } - ); - return isDisplayed; - }, waitTimeout, 'Element is not visible ' + elementToCheck.locator() + ' ' + message); + static async waitUntilElementIsVisible(elementToCheck: ElementFinder, waitTimeout: number = DEFAULT_TIMEOUT, message: string = 'Element is not visible'): Promise { + return browser.wait(until.visibilityOf(elementToCheck), waitTimeout, message + elementToCheck.locator()); } /* * Wait for element to be clickable */ - static waitUntilElementIsClickable(elementToCheck: ElementFinder, waitTimeout: number = DEFAULT_TIMEOUT) { - return browser.wait(EC.elementToBeClickable(elementToCheck), - waitTimeout, 'Element is not Clickable ' + elementToCheck.locator()); + static async waitUntilElementIsClickable(elementToCheck: ElementFinder, waitTimeout: number = DEFAULT_TIMEOUT): Promise { + return browser.wait(until.elementToBeClickable(elementToCheck), waitTimeout, 'Element is not Clickable ' + elementToCheck.locator()); } /* * Wait for element to not be present on the page */ - static waitUntilElementIsStale(elementToCheck: ElementFinder, waitTimeout: number = DEFAULT_TIMEOUT) { + static async waitUntilElementIsStale(elementToCheck: ElementFinder, waitTimeout: number = DEFAULT_TIMEOUT): Promise { return browser.wait(until.stalenessOf(elementToCheck), waitTimeout, 'Element is not in stale ' + elementToCheck.locator()); } /* * Wait for element to not be visible */ - static waitUntilElementIsNotVisible(elementToCheck: ElementFinder, waitTimeout: number = DEFAULT_TIMEOUT) { - let isPresent = false; - return browser.wait(() => { - browser.waitForAngularEnabled(); - - elementToCheck.isPresent().then( - (present) => { - isPresent = !present; - } - ); - return isPresent; - }, waitTimeout, 'Element is Visible and it should not' + elementToCheck.locator()); + static async waitUntilElementIsNotVisible(elementToCheck: ElementFinder, waitTimeout: number = DEFAULT_TIMEOUT): Promise { + return browser.wait(until.invisibilityOf(elementToCheck), waitTimeout, 'Element is Visible and it should not' + elementToCheck.locator()); } /* * Wait for element to have value */ - static waitUntilElementHasValue(elementToCheck: ElementFinder, elementValue, waitTimeout: number = DEFAULT_TIMEOUT) { - browser.waitForAngularEnabled(); - - browser.wait(until.textToBePresentInElementValue(elementToCheck, elementValue), waitTimeout, 'Element doesn\'t have a value ' + elementToCheck.locator()); + static async waitUntilElementHasValue(elementToCheck: ElementFinder, elementValue, waitTimeout: number = DEFAULT_TIMEOUT): Promise { + return browser.wait(until.textToBePresentInElementValue(elementToCheck, elementValue), waitTimeout, 'Element doesn\'t have a value ' + elementToCheck.locator()); } - static waitUntilElementIsOnPage(elementToCheck: ElementFinder, waitTimeout: number = DEFAULT_TIMEOUT) { - return browser.wait(browser.wait(until.visibilityOf(elementToCheck)), waitTimeout); - } - - /* - * Wait for element to not be visible - */ - static waitUntilElementIsNotOnPage(elementToCheck: ElementFinder, waitTimeout: number = DEFAULT_TIMEOUT) { - return browser.wait(until.invisibilityOf(elementToCheck), waitTimeout, 'Element is visible on the page ' + elementToCheck.locator()); - } - - static waitUntilElementIsPresent(elementToCheck: ElementFinder, waitTimeout: number = DEFAULT_TIMEOUT) { - browser.waitForAngularEnabled(); - - return browser.wait(until.presenceOf(elementToCheck), waitTimeout, 'Element is not present ' + elementToCheck.locator()); - } - - static waitUntilElementIsNotPresent(elementToCheck: ElementFinder, waitTimeout: number = DEFAULT_TIMEOUT) { + static async waitUntilElementIsNotPresent(elementToCheck: ElementFinder, waitTimeout: number = DEFAULT_TIMEOUT): Promise { return browser.wait(until.stalenessOf(elementToCheck), waitTimeout, 'Element is present ' + elementToCheck.locator()); } - static waitUntilDialogIsClose() { + static async waitUntilDialogIsClose(): Promise { const dialog = element(by.css('mat-dialog-container')); - return this.waitUntilElementIsNotPresent(dialog); + await this.waitUntilElementIsNotPresent(dialog); } } diff --git a/lib/testing/src/lib/core/utils/file-browser.util.ts b/lib/testing/src/lib/core/utils/file-browser.util.ts index 627bec1bc6..c8fb4546e2 100644 --- a/lib/testing/src/lib/core/utils/file-browser.util.ts +++ b/lib/testing/src/lib/core/utils/file-browser.util.ts @@ -23,14 +23,15 @@ const DEFAULT_ROOT_PATH = browser.params.testConfig ? browser.params.testConfig. export class FileBrowserUtil { - static async isFileDownloaded(fileName: string) { - browser.driver.wait(() => { + static async isFileDownloaded(fileName: string): Promise { + + const file = await browser.driver.wait(() => { return fs.existsSync(path.join(DEFAULT_ROOT_PATH, 'downloads', fileName)); - }, 30000).then((file) => { - expect(file).toBe(true); - }, (error) => { - throw error; - }); + }, 30000); + + await expect(file).toBe(true); + + return !!file; } } diff --git a/lib/testing/src/lib/core/utils/form.util.ts b/lib/testing/src/lib/core/utils/form.util.ts index cea4f5df0c..c5156153ad 100644 --- a/lib/testing/src/lib/core/utils/form.util.ts +++ b/lib/testing/src/lib/core/utils/form.util.ts @@ -19,13 +19,13 @@ import { browser } from 'protractor'; export class FormUtil { - static async setForm(value: string) { + static async setForm(value: string): Promise { await browser.executeScript( 'window.adf.setFormInEditor(`' + value + '`);' ); } - static async setCloudForm(value: string) { + static async setCloudForm(value: string): Promise { await browser.executeScript( 'window.adf.setCloudFormInEditor(`' + value + '`);' ); diff --git a/lib/testing/src/lib/core/utils/local-storage.util.ts b/lib/testing/src/lib/core/utils/local-storage.util.ts index 2df048fe20..0748fa867a 100644 --- a/lib/testing/src/lib/core/utils/local-storage.util.ts +++ b/lib/testing/src/lib/core/utils/local-storage.util.ts @@ -19,37 +19,37 @@ import { browser } from 'protractor'; export class LocalStorageUtil { - static async setConfigField(field: string, value: string) { + static async setConfigField(field: string, value: string): Promise { await browser.executeScript( 'window.adf.setConfigField(`' + field + '`, `' + value + '`);' ); } - static async setStorageItem(field: string, value: string) { + static async setStorageItem(field: string, value: string): Promise { await browser.executeScript( 'window.adf.setStorageItem(`' + field + '`, `' + value + '`);' ); } - static async removeStorageItem(field: string) { + static async removeStorageItem(field: string): Promise { await browser.executeScript( 'window.adf.removeStorageItem(`' + field + '`);' ); } - static async setUserPreference(field: string, value: any) { + static async setUserPreference(field: string, value: any): Promise { await browser.executeScript( 'window.adf.setUserPreference(`' + field + '`, `' + value + '`);' ); } - static async clearStorage() { + static async clearStorage(): Promise { await browser.executeScript( 'window.adf.clearStorage();' ); } - static async apiReset() { + static async apiReset(): Promise { await browser.executeScript( `window.adf.apiReset();` ); diff --git a/lib/testing/src/lib/material/pages/date-picker.page.ts b/lib/testing/src/lib/material/pages/date-picker.page.ts index 37f70db805..7cf745ebce 100644 --- a/lib/testing/src/lib/material/pages/date-picker.page.ts +++ b/lib/testing/src/lib/material/pages/date-picker.page.ts @@ -15,64 +15,59 @@ * limitations under the License. */ -import { element, by, browser } from 'protractor'; +import { element, by, ElementFinder } from 'protractor'; import { DateUtil } from '../../core/utils/date-util'; import { BrowserVisibility } from '../../core/utils/browser-visibility'; import { BrowserActions } from '../../core/utils/browser-actions'; export class DatePickerPage { - datePicker = element(by.css('mat-calendar')); - nextMonthButton = element(by.css('button[class*="mat-calendar-next-button"]')); - previousMonthButton = element(by.css('button[class*="mat-calendar-previous-button"]')); + datePicker: ElementFinder = element(by.css('mat-calendar')); + nextMonthButton: ElementFinder = element(by.css('button[class*="mat-calendar-next-button"]')); + previousMonthButton: ElementFinder = element(by.css('button[class*="mat-calendar-previous-button"]')); - getSelectedDate() { - return element(by.css('td[class*="mat-calendar-body-active"]')).getAttribute('aria-label'); + async getSelectedDate(): Promise { + return await element(by.css('td[class*="mat-calendar-body-active"]')).getAttribute('aria-label'); } - checkDatesAfterDateAreDisabled(date) { + async checkDatesAfterDateAreDisabled(date): Promise { const afterDate = DateUtil.formatDate('DD-MM-YY', date, 1); const afterCalendar = element(by.css(`td[class*="mat-calendar-body-cell"][aria-label="${afterDate}"]`)); - browser.controlFlow().execute(async () => { - if (await afterCalendar.isPresent()) { - await expect(afterCalendar.getAttribute('aria-disabled')).toBe('true'); - } - await expect(this.nextMonthButton.isEnabled()).toBe(false); - }); - return this; + if (await afterCalendar.isPresent()) { + const aria = await afterCalendar.getAttribute('aria-disabled'); + await expect(aria).toBe('true'); + } + const isEnabled = await this.nextMonthButton.isEnabled(); + await expect(isEnabled).toBe(false); } - checkDatesBeforeDateAreDisabled(date) { + async checkDatesBeforeDateAreDisabled(date): Promise { const beforeDate = DateUtil.formatDate('DD-MM-YY', date, -1); const beforeCalendar = element(by.css(`td[class*="mat-calendar-body-cell"][aria-label="${beforeDate}"]`)); - browser.controlFlow().execute(async () => { - if (await beforeCalendar.isPresent()) { - await expect(beforeCalendar.getAttribute('aria-disabled')).toBe('true'); - } - await expect(this.previousMonthButton.isEnabled()).toBe(false); - }); - return this; + if (await beforeCalendar.isPresent()) { + const aria = await beforeCalendar.getAttribute('aria-disabled'); + await expect(aria).toBe('true'); + } + const isEnabled = await this.previousMonthButton.isEnabled(); + await expect(isEnabled).toBe(false); } - selectTodayDate() { - this.checkDatePickerIsDisplayed(); + async selectTodayDate(): Promise { + await this.checkDatePickerIsDisplayed(); const todayDate = element(by.css('.mat-calendar-body-today')); - BrowserActions.click(todayDate); - return this; + await BrowserActions.click(todayDate); } - closeDatePicker() { - BrowserActions.closeMenuAndDialogs(); - this.checkDatePickerIsNotDisplayed(); + async closeDatePicker(): Promise { + await BrowserActions.closeMenuAndDialogs(); + await this.checkDatePickerIsNotDisplayed(); } - checkDatePickerIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.datePicker); - return this; + async checkDatePickerIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.datePicker); } - checkDatePickerIsNotDisplayed() { - BrowserVisibility.waitUntilElementIsNotVisible(this.datePicker); - return this; + async checkDatePickerIsNotDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsNotVisible(this.datePicker); } } diff --git a/lib/testing/src/lib/material/pages/tabs.page.ts b/lib/testing/src/lib/material/pages/tabs.page.ts index 7aa15fd2eb..3e7d55e25b 100644 --- a/lib/testing/src/lib/material/pages/tabs.page.ts +++ b/lib/testing/src/lib/material/pages/tabs.page.ts @@ -16,20 +16,18 @@ */ import { element, by } from 'protractor'; -import { BrowserVisibility } from '../../core/utils/browser-visibility'; +import { BrowserActions } from '../../core/utils/browser-actions'; export class TabsPage { - clickTabByTitle(tabTitle) { + async clickTabByTitle(tabTitle): Promise { const tab = element(by.cssContainingText("div[id*='mat-tab-label']", tabTitle)); - BrowserVisibility.waitUntilElementIsVisible(tab); - tab.click(); + await BrowserActions.click(tab); } - checkTabIsSelectedByTitle(tabTitle) { + async checkTabIsSelectedByTitle(tabTitle): Promise { const tab = element(by.cssContainingText("div[id*='mat-tab-label']", tabTitle)); - tab.getAttribute('aria-selected').then((result) => { - expect(result).toBe('true'); - }); + const result = await tab.getAttribute('aria-selected'); + await expect(result).toBe('true'); } } diff --git a/lib/testing/src/lib/process-services-cloud/actions/process-definitions.service.ts b/lib/testing/src/lib/process-services-cloud/actions/process-definitions.service.ts index 7fe13379bf..af4c10df42 100644 --- a/lib/testing/src/lib/process-services-cloud/actions/process-definitions.service.ts +++ b/lib/testing/src/lib/process-services-cloud/actions/process-definitions.service.ts @@ -25,15 +25,14 @@ export class ProcessDefinitionsService { this.api = api; } - async getProcessDefinitions(appName) { + async getProcessDefinitions(appName): Promise { const path = '/' + appName + '/rb/v1/process-definitions'; const method = 'GET'; const queryParams = {}; try { - const data = await this.api.performBpmOperation(path, method, queryParams, {}); - return data; + return this.api.performBpmOperation(path, method, queryParams, {}); } catch (error) { if (error.status === 404) { // tslint:disable-next-line:no-console @@ -50,6 +49,7 @@ export class ProcessDefinitionsService { return processDefinitions.list.entries.find((el) => { if (el.entry.name === processDefinitionName) { return el; - }}); + } + }); } } diff --git a/lib/testing/src/lib/process-services-cloud/actions/process-instances.service.ts b/lib/testing/src/lib/process-services-cloud/actions/process-instances.service.ts index c4a7075450..8e40b78f75 100644 --- a/lib/testing/src/lib/process-services-cloud/actions/process-instances.service.ts +++ b/lib/testing/src/lib/process-services-cloud/actions/process-instances.service.ts @@ -31,12 +31,12 @@ export class ProcessInstancesService { const method = 'POST'; const queryParams = {}, postBody = { - 'processDefinitionKey': processDefKey, - 'payloadType': 'StartProcessPayload', + processDefinitionKey: processDefKey, + payloadType: 'StartProcessPayload', ...options }; - return await this.api.performBpmOperation(path, method, queryParams, postBody); + return this.api.performBpmOperation(path, method, queryParams, postBody); } catch (error) { // tslint:disable-next-line:no-console @@ -52,7 +52,7 @@ export class ProcessInstancesService { const queryParams = {}, postBody = {}; - return await this.api.performBpmOperation(path, method, queryParams, postBody); + return this.api.performBpmOperation(path, method, queryParams, postBody); } catch (error) { // tslint:disable-next-line:no-console @@ -67,7 +67,7 @@ export class ProcessInstancesService { const queryParams = {}, postBody = {}; - return await this.api.performBpmOperation(path, method, queryParams, postBody); + return this.api.performBpmOperation(path, method, queryParams, postBody); } catch (error) { // tslint:disable-next-line:no-console @@ -83,7 +83,7 @@ export class ProcessInstancesService { const queryParams = {}, postBody = {}; - return await this.api.performBpmOperation(path, method, queryParams, postBody); + return this.api.performBpmOperation(path, method, queryParams, postBody); } catch (error) { // tslint:disable-next-line:no-console diff --git a/lib/testing/src/lib/process-services-cloud/app/app-list-cloud.page.ts b/lib/testing/src/lib/process-services-cloud/app/app-list-cloud.page.ts index 97d5238235..f347582ea0 100644 --- a/lib/testing/src/lib/process-services-cloud/app/app-list-cloud.page.ts +++ b/lib/testing/src/lib/process-services-cloud/app/app-list-cloud.page.ts @@ -18,39 +18,40 @@ import { element, by } from 'protractor'; import { BrowserVisibility } from '../../core/utils/browser-visibility'; import { BrowserActions } from '../../core/utils/browser-actions'; +import { ElementArrayFinder, ElementFinder } from 'protractor'; export class AppListCloudPage { - apsAppsContainer = element(by.css('adf-cloud-app-list')); - allApps = element.all(by.css('adf-cloud-app-details')); - nameOfAllApps = element.all(by.css('adf-cloud-app-details div[class*="item-card-title"] h1')); - firstApp = element.all(by.css('adf-cloud-app-details div[class*="item-card-title"] h1')).first(); + apsAppsContainer: ElementFinder = element(by.css('adf-cloud-app-list')); + allApps: ElementArrayFinder = element.all(by.css('adf-cloud-app-details')); + nameOfAllApps: ElementArrayFinder = element.all(by.css('adf-cloud-app-details div[class*="item-card-title"] h1')); + firstApp: ElementFinder = element.all(by.css('adf-cloud-app-details div[class*="item-card-title"] h1')).first(); - checkApsContainer() { - BrowserVisibility.waitUntilElementIsVisible(this.apsAppsContainer); - BrowserVisibility.waitUntilElementIsVisible(this.firstApp); + async checkApsContainer(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.apsAppsContainer); + await BrowserVisibility.waitUntilElementIsVisible(this.firstApp); } - goToApp(applicationName) { - BrowserActions.clickExecuteScript('mat-card[title="' + applicationName + '"]'); + async goToApp(applicationName): Promise { + await BrowserActions.clickExecuteScript('mat-card[title="' + applicationName + '"]'); } - countAllApps() { + async countAllApps(): Promise { return this.allApps.count(); } - getNameOfTheApplications() { - return this.nameOfAllApps.getText(); + async getNameOfTheApplications(): Promise { + return await BrowserActions.getArrayText(this.nameOfAllApps); } - checkAppIsNotDisplayed(applicationName) { + async checkAppIsNotDisplayed(applicationName): Promise { const app = element(by.css('mat-card[title="' + applicationName + '"]')); - return BrowserVisibility.waitUntilElementIsNotOnPage(app); + await BrowserVisibility.waitUntilElementIsNotVisible(app); } - checkAppIsDisplayed(applicationName) { + async checkAppIsDisplayed(applicationName): Promise { const app = element(by.css('mat-card[title="' + applicationName + '"]')); - return BrowserVisibility.waitUntilElementIsVisible(app); + await BrowserVisibility.waitUntilElementIsVisible(app); } } diff --git a/lib/testing/src/lib/process-services-cloud/pages/dialog/edit-process-filter-dialog.page.ts b/lib/testing/src/lib/process-services-cloud/pages/dialog/edit-process-filter-dialog.page.ts index f34af0b96e..0988ae90bd 100644 --- a/lib/testing/src/lib/process-services-cloud/pages/dialog/edit-process-filter-dialog.page.ts +++ b/lib/testing/src/lib/process-services-cloud/pages/dialog/edit-process-filter-dialog.page.ts @@ -15,66 +15,58 @@ * limitations under the License. */ -import { by, element, protractor } from 'protractor'; +import { browser, by, element } from 'protractor'; import { BrowserVisibility } from '../../../core/utils/browser-visibility'; import { BrowserActions } from '../../../core/utils/browser-actions'; +import { ElementFinder } from 'protractor'; +import { Locator } from 'protractor/built/locators'; export class EditProcessFilterDialogPage { - componentElement = element(by.css('adf-cloud-process-filter-dialog-cloud')); - title = element(by.id('adf-process-filter-dialog-title')); - filterNameInput = element(by.id('adf-filter-name-id')); - saveButtonLocator = by.id('adf-save-button-id'); - cancelButtonLocator = by.id('adf-cancel-button-id'); + componentElement: ElementFinder = element(by.css('adf-cloud-process-filter-dialog-cloud')); + title: ElementFinder = element(by.id('adf-process-filter-dialog-title')); + filterNameInput: ElementFinder = element(by.id('adf-filter-name-id')); + saveButtonLocator: Locator = by.id('adf-save-button-id'); + cancelButtonLocator: Locator = by.id('adf-cancel-button-id'); - clickOnSaveButton() { + async clickOnSaveButton(): Promise { const saveButton = this.componentElement.element(this.saveButtonLocator); - BrowserVisibility.waitUntilElementIsVisible(saveButton); - saveButton.click(); - BrowserVisibility.waitUntilElementIsNotVisible(this.componentElement); - return this; + await BrowserActions.click(saveButton); + await BrowserVisibility.waitUntilElementIsNotVisible(this.componentElement); + await browser.driver.sleep(1000); } - checkSaveButtonIsEnabled() { - BrowserVisibility.waitUntilElementIsVisible(this.componentElement.element(this.saveButtonLocator)); + async checkSaveButtonIsEnabled() { + await BrowserVisibility.waitUntilElementIsVisible(this.componentElement.element(this.saveButtonLocator)); return this.componentElement.element(this.saveButtonLocator).isEnabled(); } - clickOnCancelButton() { + async clickOnCancelButton(): Promise { const cancelButton = this.componentElement.element(this.cancelButtonLocator); - BrowserActions.click(cancelButton); - BrowserVisibility.waitUntilElementIsNotVisible(this.componentElement); - return this; + await BrowserActions.click(cancelButton); + await BrowserVisibility.waitUntilElementIsNotVisible(this.componentElement); } - checkCancelButtonIsEnabled() { - BrowserVisibility.waitUntilElementIsVisible(this.componentElement.element(this.cancelButtonLocator)); + async checkCancelButtonIsEnabled(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.componentElement.element(this.cancelButtonLocator)); return this.componentElement.element(this.cancelButtonLocator).isEnabled(); } - getFilterName() { - BrowserVisibility.waitUntilElementIsVisible(this.filterNameInput); + async getFilterName(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.filterNameInput); return this.filterNameInput.getAttribute('value'); } - setFilterName(filterName) { - this.clearFilterName(); - this.filterNameInput.sendKeys(filterName); - return this; + async setFilterName(filterName): Promise { + await BrowserActions.clearSendKeys(this.filterNameInput, filterName); } - clearFilterName() { - BrowserActions.click(this.filterNameInput); - this.filterNameInput.getAttribute('value').then((value) => { - for (let i = value.length; i >= 0; i--) { - this.filterNameInput.sendKeys(protractor.Key.BACK_SPACE); - } - }); - return this; - } - - getTitle() { + async getTitle(): Promise { return BrowserActions.getText(this.title); } + async clearFilterName() { + await BrowserActions.clearWithBackSpace(this.filterNameInput); + } + } diff --git a/lib/testing/src/lib/process-services-cloud/pages/dialog/edit-task-filter-dialog.page.ts b/lib/testing/src/lib/process-services-cloud/pages/dialog/edit-task-filter-dialog.page.ts index 7d25a963da..ad1d020479 100644 --- a/lib/testing/src/lib/process-services-cloud/pages/dialog/edit-task-filter-dialog.page.ts +++ b/lib/testing/src/lib/process-services-cloud/pages/dialog/edit-task-filter-dialog.page.ts @@ -15,64 +15,56 @@ * limitations under the License. */ -import { by, element, protractor } from 'protractor'; +import { browser, by, element, Locator } from 'protractor'; import { BrowserVisibility } from '../../../core/utils/browser-visibility'; import { BrowserActions } from '../../../core/utils/browser-actions'; +import { ElementFinder } from 'protractor'; export class EditTaskFilterDialogPage { - componentElement = element(by.css('adf-cloud-task-filter-dialog')); - title = element(by.id('adf-task-filter-dialog-title')); - filterNameInput = element(by.id('adf-filter-name-id')); - saveButtonLocator = by.id('adf-save-button-id'); - cancelButtonLocator = by.id('adf-cancel-button-id'); + componentElement: ElementFinder = element(by.css('adf-cloud-task-filter-dialog')); + title: ElementFinder = element(by.id('adf-task-filter-dialog-title')); + filterNameInput: ElementFinder = element(by.id('adf-filter-name-id')); + saveButtonLocator: Locator = by.id('adf-save-button-id'); + cancelButtonLocator: Locator = by.id('adf-cancel-button-id'); - clickOnSaveButton() { + async clickOnSaveButton(): Promise { const saveButton = this.componentElement.element(this.saveButtonLocator); - BrowserActions.click(saveButton); - BrowserVisibility.waitUntilElementIsNotVisible(this.componentElement); - return this; + await BrowserActions.click(saveButton); + await BrowserVisibility.waitUntilElementIsNotVisible(this.componentElement); + await browser.driver.sleep(1000); } - checkSaveButtonIsEnabled() { - BrowserVisibility.waitUntilElementIsVisible(this.componentElement.element(this.saveButtonLocator)); + async checkSaveButtonIsEnabled(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.componentElement.element(this.saveButtonLocator)); return this.componentElement.element(this.saveButtonLocator).isEnabled(); } - clickOnCancelButton() { + async clickOnCancelButton(): Promise { const cancelButton = this.componentElement.element(this.cancelButtonLocator); - BrowserActions.click(cancelButton); - BrowserVisibility.waitUntilElementIsNotVisible(this.componentElement); - return this; + await BrowserActions.click(cancelButton); + await BrowserVisibility.waitUntilElementIsNotVisible(this.componentElement); } - checkCancelButtonIsEnabled() { - BrowserVisibility.waitUntilElementIsVisible(this.componentElement.element(this.cancelButtonLocator)); + async checkCancelButtonIsEnabled(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.componentElement.element(this.cancelButtonLocator)); return this.componentElement.element(this.cancelButtonLocator).isEnabled(); } - getFilterName() { - BrowserVisibility.waitUntilElementIsVisible(this.filterNameInput); + async getFilterName(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.filterNameInput); return this.filterNameInput.getAttribute('value'); } - setFilterName(filterName) { - this.clearFilterName(); - this.filterNameInput.sendKeys(filterName); - return this; + async setFilterName(filterName): Promise { + await BrowserActions.clearSendKeys(this.filterNameInput, filterName); } - clearFilterName() { - BrowserActions.click(this.filterNameInput); - this.filterNameInput.getAttribute('value').then((value) => { - for (let i = value.length; i >= 0; i--) { - this.filterNameInput.sendKeys(protractor.Key.BACK_SPACE); - } - }); - return this; + async clearFilterName() { + await BrowserActions.clearWithBackSpace(this.filterNameInput); } - getTitle() { + getTitle(): Promise { return BrowserActions.getText(this.title); } diff --git a/lib/testing/src/lib/process-services-cloud/pages/edit-process-filter-cloud-component.page.ts b/lib/testing/src/lib/process-services-cloud/pages/edit-process-filter-cloud-component.page.ts index 62dc4148ad..f519714727 100644 --- a/lib/testing/src/lib/process-services-cloud/pages/edit-process-filter-cloud-component.page.ts +++ b/lib/testing/src/lib/process-services-cloud/pages/edit-process-filter-cloud-component.page.ts @@ -18,90 +18,82 @@ import { browser, by, element, protractor } from 'protractor'; import { EditProcessFilterDialogPage } from './dialog/edit-process-filter-dialog.page'; import { BrowserVisibility } from '../../core/utils/browser-visibility'; import { BrowserActions } from '../../core/utils/browser-actions'; +import { ElementFinder } from 'protractor'; export class EditProcessFilterCloudComponentPage { - customiseFilter = element(by.id('adf-edit-process-filter-title-id')); - selectedOption = element.all(by.css('mat-option[class*="mat-selected"]')).first(); - saveButton = element(by.css('button[data-automation-id="adf-filter-action-save"]')); - saveAsButton = element(by.css('button[data-automation-id="adf-filter-action-saveAs"]')); - deleteButton = element(by.css('button[data-automation-id="adf-filter-action-delete"]')); + customiseFilter: ElementFinder = element(by.id('adf-edit-process-filter-title-id')); + selectedOption: ElementFinder = element.all(by.css('mat-option[class*="mat-selected"]')).first(); + saveButton: ElementFinder = element(by.css('button[data-automation-id="adf-filter-action-save"]')); + saveAsButton: ElementFinder = element(by.css('button[data-automation-id="adf-filter-action-saveAs"]')); + deleteButton: ElementFinder = element(by.css('button[data-automation-id="adf-filter-action-delete"]')); editProcessFilterDialogPage = new EditProcessFilterDialogPage(); - editProcessFilterDialog() { + editProcessFilterDialog(): EditProcessFilterDialogPage { return this.editProcessFilterDialogPage; } - clickCustomiseFilterHeader() { - BrowserActions.click(this.customiseFilter); - return this; + async clickCustomiseFilterHeader(): Promise { + await BrowserActions.click(this.customiseFilter); + await browser.driver.sleep(1000); } - checkCustomiseFilterHeaderIsExpanded() { + async checkCustomiseFilterHeaderIsExpanded(): Promise { const expansionPanelExtended = element.all(by.css('mat-expansion-panel-header[class*="mat-expanded"]')).first(); - BrowserVisibility.waitUntilElementIsVisible(expansionPanelExtended); + await BrowserVisibility.waitUntilElementIsVisible(expansionPanelExtended); const content = element.all(by.css('div[class*="mat-expansion-panel-content "][style*="visible"]')).first(); - BrowserVisibility.waitUntilElementIsVisible(content); - return this; + await BrowserVisibility.waitUntilElementIsVisible(content); } - setStatusFilterDropDown(option) { - this.clickOnDropDownArrow('status'); + async setStatusFilterDropDown(option): Promise { + await this.clickOnDropDownArrow('status'); const statusElement = element.all(by.cssContainingText('mat-option span', option)).first(); - BrowserActions.click(statusElement); - return this; + await BrowserActions.click(statusElement); } - getStateFilterDropDownValue() { + async getStateFilterDropDownValue(): Promise { return BrowserActions.getText(element(by.css("mat-form-field[data-automation-id='status'] span"))); } - setSortFilterDropDown(option) { - this.clickOnDropDownArrow('sort'); + async setSortFilterDropDown(option): Promise { + await this.clickOnDropDownArrow('sort'); const sortElement = element.all(by.cssContainingText('mat-option span', option)).first(); - BrowserActions.click(sortElement); - return this; + await BrowserActions.click(sortElement); } - getSortFilterDropDownValue() { + async getSortFilterDropDownValue(): Promise { const sortLocator = element.all(by.css("mat-form-field[data-automation-id='sort'] span")).first(); - return BrowserActions.getText(sortLocator); + return await BrowserActions.getText(sortLocator); } - setOrderFilterDropDown(option) { - this.clickOnDropDownArrow('order'); + async setOrderFilterDropDown(option): Promise { + await this.clickOnDropDownArrow('order'); const orderElement = element.all(by.cssContainingText('mat-option span', option)).first(); - BrowserActions.click(orderElement); - browser.sleep(1000); - return this; + await BrowserActions.click(orderElement); + await browser.sleep(1000); } - getOrderFilterDropDownValue() { + async getOrderFilterDropDownValue(): Promise { return BrowserActions.getText(element(by.css("mat-form-field[data-automation-id='order'] span"))); } - clickOnDropDownArrow(option) { + async clickOnDropDownArrow(option): Promise { const dropDownArrow = element.all(by.css("mat-form-field[data-automation-id='" + option + "'] div[class='mat-select-arrow-wrapper']")).first(); - BrowserVisibility.waitUntilElementIsVisible(dropDownArrow); - BrowserActions.click(dropDownArrow); - BrowserVisibility.waitUntilElementIsVisible(this.selectedOption); + await BrowserActions.click(dropDownArrow); } - setAppNameDropDown(option) { - this.clickOnDropDownArrow('appName'); + async setAppNameDropDown(option): Promise { + await this.clickOnDropDownArrow('appName'); const appNameElement = element.all(by.cssContainingText('mat-option span', option)).first(); - BrowserVisibility.waitUntilElementIsClickable(appNameElement); - BrowserVisibility.waitUntilElementIsVisible(appNameElement); - appNameElement.click(); - return this; + await BrowserActions.click(appNameElement); } - async checkAppNamesAreUnique() { + async checkAppNamesAreUnique(): Promise { const appNameList = element.all(by.css('mat-option[data-automation-id="adf-cloud-edit-process-property-optionsappName"] span')); const appTextList: any = await appNameList.getText(); const uniqueArray = appTextList.filter((appName) => { @@ -111,91 +103,80 @@ export class EditProcessFilterCloudComponentPage { return uniqueArray.length === appTextList.length; } - getNumberOfAppNameOptions() { - this.clickOnDropDownArrow('appName'); + async getNumberOfAppNameOptions(): Promise { + await this.clickOnDropDownArrow('appName'); const dropdownOptions = element.all(by.css('.mat-select-panel mat-option')); return dropdownOptions.count(); } - setProcessInstanceId(option) { - return this.setProperty('processInstanceId', option); + async setProcessInstanceId(option): Promise { + await this.setProperty('processInstanceId', option); } - getProcessInstanceId() { + async getProcessInstanceId(): Promise { return this.getProperty('processInstanceId'); } - getProperty(property) { + async getProperty(property): Promise { const locator = element.all(by.css('input[data-automation-id="adf-cloud-edit-process-property-' + property + '"]')).first(); - BrowserVisibility.waitUntilElementIsVisible(locator); + await BrowserVisibility.waitUntilElementIsVisible(locator); return locator.getAttribute('value'); } - setProperty(property, option) { + async setProperty(property, option): Promise { const locator = element.all(by.css('input[data-automation-id="adf-cloud-edit-process-property-' + property + '"]')).first(); - BrowserVisibility.waitUntilElementIsVisible(locator); - locator.clear(); - locator.sendKeys(option); - locator.sendKeys(protractor.Key.ENTER); - return this; + await BrowserVisibility.waitUntilElementIsVisible(locator); + await locator.clear(); + await locator.sendKeys(option); + await locator.sendKeys(protractor.Key.ENTER); } - checkSaveButtonIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.saveButton); - return this; + async checkSaveButtonIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.saveButton); } - checkSaveAsButtonIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.saveAsButton); - return this; + async checkSaveAsButtonIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.saveAsButton); } - checkDeleteButtonIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.deleteButton); - return this; + async checkDeleteButtonIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.deleteButton); } - checkDeleteButtonIsNotDisplayed() { - BrowserVisibility.waitUntilElementIsNotVisible(this.deleteButton); - return this; + async checkDeleteButtonIsNotDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsNotVisible(this.deleteButton); } - checkSaveButtonIsEnabled() { - BrowserVisibility.waitUntilElementIsVisible(this.saveButton); + async checkSaveButtonIsEnabled(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.saveButton); return this.saveButton.isEnabled(); } - checkSaveAsButtonIsEnabled() { - BrowserVisibility.waitUntilElementIsVisible(this.saveAsButton); + async checkSaveAsButtonIsEnabled(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.saveAsButton); return this.saveAsButton.isEnabled(); } - checkDeleteButtonIsEnabled() { - BrowserVisibility.waitUntilElementIsVisible(this.deleteButton); + async checkDeleteButtonIsEnabled(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.deleteButton); return this.deleteButton.isEnabled(); } - clickSaveAsButton() { + async clickSaveAsButton(): Promise { const disabledButton = element(by.css(("button[data-automation-id='adf-filter-action-saveAs'][disabled]"))); - BrowserVisibility.waitUntilElementIsClickable(this.saveAsButton); - BrowserVisibility.waitUntilElementIsVisible(this.saveAsButton); - BrowserVisibility.waitUntilElementIsNotVisible(disabledButton); - this.saveAsButton.click(); - return this.editProcessFilterDialogPage; + await BrowserVisibility.waitUntilElementIsNotVisible(disabledButton); + await BrowserActions.click(this.saveAsButton); + await browser.driver.sleep(1000); } - clickDeleteButton() { - BrowserVisibility.waitUntilElementIsVisible(this.deleteButton); - this.deleteButton.click(); - return this; + async clickDeleteButton(): Promise { + await BrowserActions.click(this.deleteButton); } - clickSaveButton() { + async clickSaveButton(): Promise { const disabledButton = element(by.css(("button[id='adf-save-as-id'][disabled]"))); - BrowserVisibility.waitUntilElementIsClickable(this.saveButton); - BrowserVisibility.waitUntilElementIsVisible(this.saveButton); - BrowserVisibility.waitUntilElementIsNotVisible(disabledButton); - this.saveButton.click(); - return this; + await BrowserVisibility.waitUntilElementIsNotVisible(disabledButton); + await BrowserActions.click(this.saveButton); } + } diff --git a/lib/testing/src/lib/process-services-cloud/pages/edit-task-filter-cloud-component.page.ts b/lib/testing/src/lib/process-services-cloud/pages/edit-task-filter-cloud-component.page.ts index a9031aa21d..64e72bb88d 100644 --- a/lib/testing/src/lib/process-services-cloud/pages/edit-task-filter-cloud-component.page.ts +++ b/lib/testing/src/lib/process-services-cloud/pages/edit-task-filter-cloud-component.page.ts @@ -19,236 +19,230 @@ import { browser, by, element, protractor } from 'protractor'; import { EditTaskFilterDialogPage } from './dialog/edit-task-filter-dialog.page'; import { BrowserVisibility } from '../../core/utils/browser-visibility'; import { BrowserActions } from '../../core/utils/browser-actions'; +import { ElementFinder } from 'protractor'; export class EditTaskFilterCloudComponentPage { - customiseFilter = element(by.id('adf-edit-task-filter-title-id')); - selectedOption = element.all(by.css('mat-option[class*="mat-selected"]')).first(); - assignee = element(by.css('input[data-automation-id="adf-cloud-edit-task-property-assignee"]')); - priority = element(by.css('input[data-automation-id="adf-cloud-edit-task-property-priority"]')); - taskName = element(by.css('input[data-automation-id="adf-cloud-edit-task-property-taskName"]')); - id = element(by.css('input[data-automation-id="adf-cloud-edit-task-property-taskId"]')); - processDefinitionId = element(by.css('input[data-automation-id="adf-cloud-edit-task-property-processDefinitionId"]')); - processInstanceId = element(by.css('input[data-automation-id="adf-cloud-edit-task-property-processInstanceId"]')); - lastModifiedFrom = element(by.css('input[placeholder="LastModifiedFrom"]')); - lastModifiedTo = element(by.css('input[placeholder="LastModifiedTo"]')); - parentTaskId = element(by.css('input[data-automation-id="adf-cloud-edit-task-property-parentTaskId"]')); - owner = element(by.css('input[data-automation-id="adf-cloud-edit-task-property-owner"]')); - saveButton = element(by.css('[data-automation-id="adf-filter-action-save"]')); - saveAsButton = element(by.css('[data-automation-id="adf-filter-action-saveAs"]')); - deleteButton = element(by.css('[data-automation-id="adf-filter-action-delete"]')); + customiseFilter: ElementFinder = element(by.id('adf-edit-task-filter-title-id')); + selectedOption: ElementFinder = element.all(by.css('mat-option[class*="mat-selected"]')).first(); + assignee: ElementFinder = element(by.css('input[data-automation-id="adf-cloud-edit-task-property-assignee"]')); + priority: ElementFinder = element(by.css('input[data-automation-id="adf-cloud-edit-task-property-priority"]')); + taskName: ElementFinder = element(by.css('input[data-automation-id="adf-cloud-edit-task-property-taskName"]')); + id: ElementFinder = element(by.css('input[data-automation-id="adf-cloud-edit-task-property-taskId"]')); + processDefinitionId: ElementFinder = element(by.css('input[data-automation-id="adf-cloud-edit-task-property-processDefinitionId"]')); + processInstanceId: ElementFinder = element(by.css('input[data-automation-id="adf-cloud-edit-task-property-processInstanceId"]')); + lastModifiedFrom: ElementFinder = element(by.css('input[placeholder="LastModifiedFrom"]')); + lastModifiedTo: ElementFinder = element(by.css('input[placeholder="LastModifiedTo"]')); + parentTaskId: ElementFinder = element(by.css('input[data-automation-id="adf-cloud-edit-task-property-parentTaskId"]')); + owner: ElementFinder = element(by.css('input[data-automation-id="adf-cloud-edit-task-property-owner"]')); + saveButton: ElementFinder = element(by.css('[data-automation-id="adf-filter-action-save"]')); + saveAsButton: ElementFinder = element(by.css('[data-automation-id="adf-filter-action-saveAs"]')); + deleteButton: ElementFinder = element(by.css('[data-automation-id="adf-filter-action-delete"]')); editTaskFilterDialogPage = new EditTaskFilterDialogPage(); - editTaskFilterDialog() { + editTaskFilterDialog(): EditTaskFilterDialogPage { return this.editTaskFilterDialogPage; } - clickCustomiseFilterHeader() { - BrowserActions.click(this.customiseFilter); - return this; + async clickCustomiseFilterHeader(): Promise { + await BrowserActions.click(this.customiseFilter); + await browser.driver.sleep(1000); } - setStatusFilterDropDown(option) { - this.clickOnDropDownArrow('status'); + async setStatusFilterDropDown(option): Promise { + await this.clickOnDropDownArrow('status'); const statusElement = element.all(by.cssContainingText('mat-option span', option)).first(); - BrowserActions.click(statusElement); - return this; + await BrowserActions.click(statusElement); } - getStatusFilterDropDownValue() { - return BrowserActions.getText(element(by.css("mat-select[data-automation-id='adf-cloud-edit-task-property-status'] span span"))); + async getStatusFilterDropDownValue(): Promise { + return BrowserActions.getText(element.all(by.css("mat-select[data-automation-id='adf-cloud-edit-task-property-status'] span")).first()); } - setSortFilterDropDown(option) { - this.clickOnDropDownArrow('sort'); + async setSortFilterDropDown(option): Promise { + await this.clickOnDropDownArrow('sort'); const sortElement = element.all(by.cssContainingText('mat-option span', option)).first(); - BrowserActions.click(sortElement); - return this; + await BrowserActions.click(sortElement); } - getSortFilterDropDownValue() { - return BrowserActions.getText(element(by.css("mat-select[data-automation-id='adf-cloud-edit-task-property-sort'] span span"))); + async getSortFilterDropDownValue(): Promise { + const elementSort = element.all(by.css("mat-select[data-automation-id='adf-cloud-edit-task-property-sort'] span")).first(); + return BrowserActions.getText(elementSort); } - setOrderFilterDropDown(option) { - this.clickOnDropDownArrow('order'); + async setOrderFilterDropDown(option): Promise { + await this.clickOnDropDownArrow('order'); const orderElement = element.all(by.cssContainingText('mat-option span', option)).first(); - BrowserActions.click(orderElement); - browser.sleep(1000); - return this; + await BrowserActions.click(orderElement); + await browser.sleep(1000); } - getOrderFilterDropDownValue() { - return BrowserActions.getText(element(by.css("mat-select[data-automation-id='adf-cloud-edit-task-property-order'] span span"))); + getOrderFilterDropDownValue(): Promise { + return BrowserActions.getText(element.all(by.css("mat-select[data-automation-id='adf-cloud-edit-task-property-order'] span")).first()); } - clickOnDropDownArrow(option) { + async clickOnDropDownArrow(option): Promise { const dropDownArrow = element.all(by.css("mat-form-field[data-automation-id='" + option + "'] div[class*='arrow']")).first(); - BrowserActions.click(dropDownArrow); - BrowserVisibility.waitUntilElementIsVisible(this.selectedOption); + await BrowserActions.click(dropDownArrow); + await BrowserVisibility.waitUntilElementIsVisible(this.selectedOption); } - setAssignee(option) { - return this.setProperty('assignee', option); + async setAssignee(option): Promise { + await this.setProperty('assignee', option); } - getAssignee() { + async getAssignee(): Promise { return BrowserActions.getText(this.assignee); } - setPriority(option) { - return this.setProperty('priority', option); + async setPriority(option): Promise { + await this.setProperty('priority', option); } - getPriority() { + async getPriority(): Promise { return BrowserActions.getText(this.priority); } - setParentTaskId(option) { - return this.setProperty('parentTaskId', option); + async setParentTaskId(option): Promise { + await this.setProperty('parentTaskId', option); } - getParentTaskId() { + async getParentTaskId(): Promise { return BrowserActions.getText(this.parentTaskId); } - setOwner(option) { - return this.setProperty('owner', option); + async setOwner(option): Promise { + await this.setProperty('owner', option); } - getOwner() { + async getOwner(): Promise { return BrowserActions.getText(this.owner); } - setLastModifiedFrom(lastModifiedFromDate) { - this.clearField(this.lastModifiedFrom); - BrowserActions.clearSendKeys(this.lastModifiedFrom, lastModifiedFromDate); + async setLastModifiedFrom(lastModifiedFromDate) { + await this.clearField(this.lastModifiedFrom); + await BrowserActions.clearSendKeys(this.lastModifiedFrom, lastModifiedFromDate); } - getLastModifiedFrom() { + async getLastModifiedFrom(): Promise { return BrowserActions.getText(this.lastModifiedFrom); } - setLastModifiedTo(lastModifiedToDate) { - this.clearField(this.lastModifiedTo); - BrowserActions.clearSendKeys(this.lastModifiedTo, lastModifiedToDate); + async setLastModifiedTo(lastModifiedToDate): Promise { + await this.clearField(this.lastModifiedTo); + await BrowserActions.clearSendKeys(this.lastModifiedTo, lastModifiedToDate); } - getLastModifiedTo() { + async getLastModifiedTo(): Promise { return BrowserActions.getText(this.lastModifiedTo); } - checkSaveButtonIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.saveButton); - return this; + async checkSaveButtonIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.saveButton); } - checkSaveAsButtonIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.saveAsButton); - return this; + async checkSaveAsButtonIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.saveAsButton); } - checkDeleteButtonIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.deleteButton); - return this; + async checkDeleteButtonIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.deleteButton); } - checkSaveButtonIsEnabled() { - BrowserVisibility.waitUntilElementIsVisible(this.saveButton); + async checkSaveButtonIsEnabled(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.saveButton); return this.saveButton.isEnabled(); } - checkSaveAsButtonIsEnabled() { - BrowserVisibility.waitUntilElementIsVisible(this.saveButton); + async checkSaveAsButtonIsEnabled(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.saveButton); return this.saveAsButton.isEnabled(); } - checkDeleteButtonIsEnabled() { - BrowserVisibility.waitUntilElementIsVisible(this.saveButton); + async checkDeleteButtonIsEnabled(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.saveButton); return this.deleteButton.isEnabled(); } - clickSaveAsButton() { + async clickSaveAsButton(): Promise { const disabledButton = element(by.css(("button[data-automation-id='adf-filter-action-saveAs'][disabled]"))); - BrowserVisibility.waitUntilElementIsNotVisible(disabledButton); - BrowserActions.click(this.saveAsButton); - return this.editTaskFilterDialogPage; + await BrowserVisibility.waitUntilElementIsNotVisible(disabledButton); + await BrowserActions.click(this.saveAsButton); + await browser.driver.sleep(1000); } - clickDeleteButton() { - BrowserActions.click(this.deleteButton); - return this; + async clickDeleteButton(): Promise { + await BrowserActions.click(this.deleteButton); + await browser.driver.sleep(1000); } - clickSaveButton() { - BrowserActions.click(this.saveButton); - return this; + async clickSaveButton(): Promise { + await BrowserActions.click(this.saveButton); } - clearAssignee() { - this.clearField(this.assignee); - return this; + async clearAssignee(): Promise { + await BrowserActions.clearWithBackSpace(this.assignee); + await browser.driver.sleep(1000); } - clearField(locator) { - BrowserActions.clearSendKeys(locator, ' '); - locator.sendKeys(protractor.Key.BACK_SPACE); + async clearField(locator): Promise { + await BrowserActions.clearSendKeys(locator, ' '); + await locator.sendKeys(protractor.Key.BACK_SPACE); } - setAppNameDropDown(option) { - this.clickOnDropDownArrow('appName'); + async setAppNameDropDown(option): Promise { + await this.clickOnDropDownArrow('appName'); const appNameElement = element.all(by.cssContainingText('mat-option span', option)).first(); - BrowserActions.click(appNameElement); - return this; + await BrowserActions.click(appNameElement); } - getAppNameDropDownValue() { - return BrowserActions.getText(element(by.css("mat-select[data-automation-id='adf-cloud-edit-task-property-appName'] span span"))); + async getAppNameDropDownValue(): Promise { + const locator = element.all(by.css("mat-select[data-automation-id='adf-cloud-edit-task-property-appName'] span")).first(); + return BrowserActions.getText(locator); } - setId(option) { - return this.setProperty('taskId', option); + async setId(option): Promise { + await this.setProperty('taskId', option); } - getId() { + async getId(): Promise { return this.id.getAttribute('value'); } - setTaskName(option) { - return this.setProperty('taskName', option); + async setTaskName(option): Promise { + await this.setProperty('taskName', option); } - getTaskName() { + async getTaskName(): Promise { return this.taskName.getAttribute('value'); } - setProcessDefinitionId(option) { - return this.setProperty('processDefinitionId', option); + async setProcessDefinitionId(option): Promise { + await this.setProperty('processDefinitionId', option); } - getProcessDefinitionId() { + async getProcessDefinitionId(): Promise { return this.processDefinitionId.getAttribute('value'); } - setProcessInstanceId(option) { - return this.setProperty('processInstanceId', option); + async setProcessInstanceId(option): Promise { + await this.setProperty('processInstanceId', option); } - setProperty(property, option) { + async setProperty(property, option): Promise { const locator = element(by.css('input[data-automation-id="adf-cloud-edit-task-property-' + property + '"]')); - BrowserVisibility.waitUntilElementIsVisible(locator); - locator.clear(); - locator.sendKeys(option); - locator.sendKeys(protractor.Key.ENTER); - return this; + await BrowserVisibility.waitUntilElementIsVisible(locator); + await locator.clear(); + await locator.sendKeys(option); + await locator.sendKeys(protractor.Key.ENTER); } - getProcessInstanceId() { + async getProcessInstanceId(): Promise { return this.processInstanceId.getAttribute('value'); } diff --git a/lib/testing/src/lib/process-services-cloud/pages/group-cloud-component.page.ts b/lib/testing/src/lib/process-services-cloud/pages/group-cloud-component.page.ts index 97dd90bf02..f706db3a79 100644 --- a/lib/testing/src/lib/process-services-cloud/pages/group-cloud-component.page.ts +++ b/lib/testing/src/lib/process-services-cloud/pages/group-cloud-component.page.ts @@ -15,76 +15,59 @@ * limitations under the License. */ -import { browser, by, element, protractor } from 'protractor'; +import { browser, by, element, ElementFinder } from 'protractor'; import { BrowserVisibility } from '../../core/utils/browser-visibility'; import { BrowserActions } from '../../core/utils/browser-actions'; export class GroupCloudComponentPage { - groupCloudSearch = element(by.css('input[data-automation-id="adf-cloud-group-search-input"]')); + groupCloudSearch: ElementFinder = element(by.css('input[data-automation-id="adf-cloud-group-search-input"]')); - searchGroups(name) { - BrowserVisibility.waitUntilElementIsVisible(this.groupCloudSearch); - browser.sleep(1000); - this.groupCloudSearch.clear().then(() => { - for (let i = 0; i < name.length; i++) { - this.groupCloudSearch.sendKeys(name[i]); - } - this.groupCloudSearch.sendKeys(protractor.Key.BACK_SPACE); - this.groupCloudSearch.sendKeys(name[name.length - 1]); - }); - return this; + async searchGroups(name): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.groupCloudSearch); + await browser.sleep(1000); + await BrowserActions.clearSendKeys(this.groupCloudSearch, name); } - searchGroupsToExisting(name) { - BrowserVisibility.waitUntilElementIsVisible(this.groupCloudSearch); - for (let i = 0; i < name.length; i++) { - this.groupCloudSearch.sendKeys(name[i]); - } - this.groupCloudSearch.sendKeys(protractor.Key.BACK_SPACE); - this.groupCloudSearch.sendKeys(name[name.length - 1]); - return this; + async searchGroupsToExisting(name) { + await BrowserVisibility.waitUntilElementIsVisible(this.groupCloudSearch); + await BrowserActions.clearSendKeys(this.groupCloudSearch, name); } - getGroupsFieldContent() { - BrowserVisibility.waitUntilElementIsVisible(this.groupCloudSearch); + async getGroupsFieldContent(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.groupCloudSearch); return this.groupCloudSearch.getAttribute('value'); } - selectGroupFromList(name) { + async selectGroupFromList(name): Promise { const groupRow = element.all(by.cssContainingText('mat-option span', name)).first(); - browser.sleep(1000); - BrowserActions.click(groupRow); - BrowserVisibility.waitUntilElementIsNotVisible(groupRow); - return this; + await browser.sleep(1000); + await BrowserActions.click(groupRow); + await BrowserVisibility.waitUntilElementIsNotVisible(groupRow); } - checkGroupIsDisplayed(name) { + async checkGroupIsDisplayed(name): Promise { const groupRow = element.all(by.cssContainingText('mat-option span', name)).first(); - BrowserVisibility.waitUntilElementIsVisible(groupRow); - return this; + await BrowserVisibility.waitUntilElementIsVisible(groupRow); } - checkGroupIsNotDisplayed(name) { + async checkGroupIsNotDisplayed(name): Promise { const groupRow = element.all(by.cssContainingText('mat-option span', name)).first(); - BrowserVisibility.waitUntilElementIsNotVisible(groupRow); - return this; + await BrowserVisibility.waitUntilElementIsNotVisible(groupRow); } - checkSelectedGroup(group) { - BrowserVisibility.waitUntilElementIsVisible(element(by.cssContainingText('mat-chip[data-automation-id*="adf-cloud-group-chip-"]', group))); - return this; + async checkSelectedGroup(group): Promise { + await BrowserVisibility.waitUntilElementIsVisible(element(by.cssContainingText('mat-chip[data-automation-id*="adf-cloud-group-chip-"]', group))); } - checkGroupNotSelected(group) { - BrowserVisibility.waitUntilElementIsNotVisible(element(by.cssContainingText('mat-chip[data-automation-id*="adf-cloud-group-chip-"]', group))); - return this; + async checkGroupNotSelected(group): Promise { + await BrowserVisibility.waitUntilElementIsNotVisible(element(by.cssContainingText('mat-chip[data-automation-id*="adf-cloud-group-chip-"]', group))); } - removeSelectedGroup(group) { + async removeSelectedGroup(group): Promise { const locator = element(by.css(`mat-chip[data-automation-id*="adf-cloud-group-chip-${group}"] mat-icon`)); - BrowserActions.click(locator); + await BrowserActions.click(locator); } } diff --git a/lib/testing/src/lib/process-services-cloud/pages/people-cloud-component.page.ts b/lib/testing/src/lib/process-services-cloud/pages/people-cloud-component.page.ts index 3e4dd6f029..e6261d0de3 100644 --- a/lib/testing/src/lib/process-services-cloud/pages/people-cloud-component.page.ts +++ b/lib/testing/src/lib/process-services-cloud/pages/people-cloud-component.page.ts @@ -15,80 +15,67 @@ * limitations under the License. */ -import { browser, by, element, protractor } from 'protractor'; +import { browser, by, element, ElementFinder, protractor } from 'protractor'; import { BrowserVisibility } from '../../core/utils/browser-visibility'; import { BrowserActions } from '../../core/utils/browser-actions'; export class PeopleCloudComponentPage { - peopleCloudSearch = element(by.css('input[data-automation-id="adf-people-cloud-search-input"]')); - assigneeField = element(by.css('input[data-automation-id="adf-people-cloud-search-input"]')); + peopleCloudSearch: ElementFinder = element(by.css('input[data-automation-id="adf-people-cloud-search-input"]')); + assigneeField: ElementFinder = element(by.css('input[data-automation-id="adf-people-cloud-search-input"]')); - clearAssignee() { - BrowserActions.clearSendKeys(this.peopleCloudSearch, ' '); - this.peopleCloudSearch.sendKeys(protractor.Key.BACK_SPACE); - return this; + async clearAssignee(): Promise { + await BrowserActions.clearSendKeys(this.peopleCloudSearch, ' '); + await this.peopleCloudSearch.sendKeys(protractor.Key.BACK_SPACE); } - searchAssigneeAndSelect(name) { - BrowserVisibility.waitUntilElementIsVisible(this.peopleCloudSearch); - BrowserActions.clearSendKeys(this.peopleCloudSearch, name); - this.selectAssigneeFromList(name); - return this; + async searchAssigneeAndSelect(name): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.peopleCloudSearch); + await BrowserActions.clearSendKeys(this.peopleCloudSearch, name); + await this.selectAssigneeFromList(name); } - searchAssignee(name) { - BrowserVisibility.waitUntilElementIsVisible(this.peopleCloudSearch); - BrowserVisibility.waitUntilElementIsClickable(this.peopleCloudSearch); - browser.sleep(1000); - BrowserActions.clearSendKeys(this.peopleCloudSearch, name); - return this; + async searchAssignee(name): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.peopleCloudSearch); + await BrowserVisibility.waitUntilElementIsClickable(this.peopleCloudSearch); + await browser.sleep(1000); + await BrowserActions.clearSendKeys(this.peopleCloudSearch, name); } - searchAssigneeToExisting(name) { - BrowserVisibility.waitUntilElementIsVisible(this.peopleCloudSearch); - for (let i = 0; i < name.length; i++) { - this.peopleCloudSearch.sendKeys(name[i]); - } - this.peopleCloudSearch.sendKeys(protractor.Key.BACK_SPACE); - this.peopleCloudSearch.sendKeys(name[name.length - 1]); - return this; + async searchAssigneeToExisting(name): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.peopleCloudSearch); + await BrowserActions.clearSendKeys(this.peopleCloudSearch, name); } - selectAssigneeFromList(name) { + async selectAssigneeFromList(name): Promise { const assigneeRow = element(by.cssContainingText('mat-option span.adf-people-label-name', name)); - BrowserVisibility.waitUntilElementIsVisible(assigneeRow); - browser.sleep(2000); - assigneeRow.click(); - BrowserVisibility.waitUntilElementIsNotVisible(assigneeRow); - return this; + await browser.sleep(2000); + await BrowserActions.click(assigneeRow); + await BrowserVisibility.waitUntilElementIsNotVisible(assigneeRow); } - getAssignee() { - BrowserVisibility.waitUntilElementIsVisible(this.peopleCloudSearch); + async getAssignee(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.peopleCloudSearch); return this.peopleCloudSearch.getAttribute('value'); } - checkUserIsDisplayed(name) { + async checkUserIsDisplayed(name): Promise { const assigneeRow = element(by.cssContainingText('mat-option span.adf-people-label-name', name)); - BrowserVisibility.waitUntilElementIsVisible(assigneeRow); - return this; + await BrowserVisibility.waitUntilElementIsVisible(assigneeRow); } - checkUserIsNotDisplayed(name) { + async checkUserIsNotDisplayed(name): Promise { const assigneeRow = element(by.cssContainingText('mat-option span.adf-people-label-name', name)); - BrowserVisibility.waitUntilElementIsNotVisible(assigneeRow); - return this; + await BrowserVisibility.waitUntilElementIsNotVisible(assigneeRow); } - checkSelectedPeople(person) { - BrowserVisibility.waitUntilElementIsVisible(element(by.cssContainingText('mat-chip-list mat-chip', person))); - return this; + async checkSelectedPeople(person): Promise { + await BrowserVisibility.waitUntilElementIsVisible(element(by.cssContainingText('mat-chip-list mat-chip', person))); } - getAssigneeFieldContent() { - BrowserVisibility.waitUntilElementIsVisible(this.assigneeField); - browser.sleep(1000); + async getAssigneeFieldContent(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.assigneeField); + await browser.sleep(1000); return this.assigneeField.getAttribute('value'); } diff --git a/lib/testing/src/lib/process-services-cloud/pages/process-filters-cloud-component.page.ts b/lib/testing/src/lib/process-services-cloud/pages/process-filters-cloud-component.page.ts index 85e2901094..9ff201a2ff 100644 --- a/lib/testing/src/lib/process-services-cloud/pages/process-filters-cloud-component.page.ts +++ b/lib/testing/src/lib/process-services-cloud/pages/process-filters-cloud-component.page.ts @@ -15,44 +15,41 @@ * limitations under the License. */ -import { by } from 'protractor'; +import { by, ElementFinder, Locator } from 'protractor'; import { BrowserVisibility } from '../../core/utils/browser-visibility'; import { BrowserActions } from '../../core/utils/browser-actions'; export class ProcessFiltersCloudComponentPage { - filter; - filterIcon = by.xpath("ancestor::div[@class='mat-list-item-content']/mat-icon"); + filter: ElementFinder; + filterIcon: Locator = by.xpath("ancestor::div[@class='mat-list-item-content']/mat-icon"); - constructor(filter) { + constructor(filter: ElementFinder) { this.filter = filter; } - checkProcessFilterIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.filter); - return this; + async checkProcessFilterIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.filter); } - getProcessFilterIcon() { - BrowserVisibility.waitUntilElementIsVisible(this.filter); + async getProcessFilterIcon(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.filter); const icon = this.filter.element(this.filterIcon); - BrowserVisibility.waitUntilElementIsVisible(icon); - return icon.getText(); + await BrowserVisibility.waitUntilElementIsVisible(icon); + return BrowserActions.getText(icon); } - checkProcessFilterHasNoIcon() { - BrowserVisibility.waitUntilElementIsVisible(this.filter); - BrowserVisibility.waitUntilElementIsNotOnPage(this.filter.element(this.filterIcon)); + async checkProcessFilterHasNoIcon(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.filter); + await BrowserVisibility.waitUntilElementIsNotVisible(this.filter.element(this.filterIcon)); } - clickProcessFilter() { - return BrowserActions.click(this.filter); - + async clickProcessFilter(): Promise { + await BrowserActions.click(this.filter); } - checkProcessFilterNotDisplayed() { - BrowserVisibility.waitUntilElementIsNotVisible(this.filter); - return this.filter; + async checkProcessFilterNotDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsNotVisible(this.filter); } } diff --git a/lib/testing/src/lib/process-services-cloud/pages/process-header-cloud-component.page.ts b/lib/testing/src/lib/process-services-cloud/pages/process-header-cloud-component.page.ts index 9125cfe86c..f3bcd8c198 100644 --- a/lib/testing/src/lib/process-services-cloud/pages/process-header-cloud-component.page.ts +++ b/lib/testing/src/lib/process-services-cloud/pages/process-header-cloud-component.page.ts @@ -17,47 +17,48 @@ import { element, by } from 'protractor'; import { BrowserActions } from '../../core/utils/browser-actions'; +import { ElementFinder } from 'protractor'; export class ProcessHeaderCloudPage { - idField = element.all(by.css('span[data-automation-id*="id"] span')).first(); - nameField = element.all(by.css('span[data-automation-id*="name"] span')).first(); - statusField = element(by.css('span[data-automation-id*="status"] span')); - initiatorField = element(by.css('span[data-automation-id*="initiator"] span')); - startDateField = element.all(by.css('span[data-automation-id*="startDate"] span')).first(); - lastModifiedField = element.all(by.css('span[data-automation-id*="lastModified"] span')).first(); - parentIdField = element(by.css('span[data-automation-id*="parentId"] span')); - businessKeyField = element.all(by.css('span[data-automation-id*="businessKey"] span')).first(); + idField: ElementFinder = element.all(by.css('span[data-automation-id*="id"] span')).first(); + nameField: ElementFinder = element.all(by.css('span[data-automation-id*="name"] span')).first(); + statusField: ElementFinder = element(by.css('span[data-automation-id*="status"] span')); + initiatorField: ElementFinder = element(by.css('span[data-automation-id*="initiator"] span')); + startDateField: ElementFinder = element.all(by.css('span[data-automation-id*="startDate"] span')).first(); + lastModifiedField: ElementFinder = element.all(by.css('span[data-automation-id*="lastModified"] span')).first(); + parentIdField: ElementFinder = element(by.css('span[data-automation-id*="parentId"] span')); + businessKeyField: ElementFinder = element.all(by.css('span[data-automation-id*="businessKey"] span')).first(); - getId() { + async getId(): Promise { return BrowserActions.getText(this.idField); } - getName() { + async getName(): Promise { return BrowserActions.getText(this.nameField); } - getStatus() { + async getStatus(): Promise { return BrowserActions.getText(this.statusField); } - getInitiator() { + async getInitiator(): Promise { return BrowserActions.getText(this.initiatorField); } - getStartDate() { + async getStartDate(): Promise { return BrowserActions.getText(this.startDateField); } - getLastModified() { + async getLastModified(): Promise { return BrowserActions.getText(this.lastModifiedField); } - getParentId() { + async getParentId(): Promise { return BrowserActions.getText(this.parentIdField); } - getBusinessKey() { + async getBusinessKey(): Promise { return BrowserActions.getText(this.businessKeyField); } diff --git a/lib/testing/src/lib/process-services-cloud/pages/process-list-cloud-component.page.ts b/lib/testing/src/lib/process-services-cloud/pages/process-list-cloud-component.page.ts index 6c4a212f93..a24da2a85e 100644 --- a/lib/testing/src/lib/process-services-cloud/pages/process-list-cloud-component.page.ts +++ b/lib/testing/src/lib/process-services-cloud/pages/process-list-cloud-component.page.ts @@ -17,7 +17,7 @@ import { BrowserVisibility } from '../../core/utils/browser-visibility'; import { DataTableComponentPage } from '../../core/pages/data-table-component.page'; -import { element, by } from 'protractor'; +import { element, by, ElementFinder } from 'protractor'; import { BrowserActions } from '../../core/utils/browser-actions'; export class ProcessListCloudComponentPage { @@ -27,77 +27,76 @@ export class ProcessListCloudComponentPage { name: 'Name' }; - processList = element(by.css('adf-cloud-process-list')); - noProcessFound = element.all(by.css("div[class='adf-empty-content__title']")).first(); + processList: ElementFinder = element(by.css('adf-cloud-process-list')); + noProcessFound: ElementFinder = element.all(by.css("div[class='adf-empty-content__title']")).first(); - dataTable = new DataTableComponentPage(this.processList); + dataTable: DataTableComponentPage = new DataTableComponentPage(this.processList); - getDataTable() { + getDataTable(): DataTableComponentPage { return this.dataTable; } - selectRow(processName) { + selectRow(processName): Promise { return this.dataTable.selectRow(this.columns.name, processName); } - selectRowById(processId) { + selectRowById(processId): Promise { return this.dataTable.selectRow(this.columns.id, processId); } - checkRowIsSelectedById(processId) { + checkRowIsSelectedById(processId): Promise { return this.dataTable.checkRowIsSelected(this.columns.id, processId); } - checkRowIsNotSelectedById(processId) { + checkRowIsNotSelectedById(processId): Promise { return this.dataTable.checkRowIsNotSelected(this.columns.id, processId); } - checkRowIsCheckedById(processId) { + checkRowIsCheckedById(processId): Promise { return this.dataTable.checkRowIsChecked(this.columns.id, processId); } - checkRowIsNotCheckedById(processId) { + checkRowIsNotCheckedById(processId): Promise { return this.dataTable.checkRowIsNotChecked(this.columns.id, processId); } - checkCheckboxById(processId) { + checkCheckboxById(processId): Promise { return this.dataTable.clickCheckbox(this.columns.id, processId); } - checkContentIsDisplayedByName(processName) { + checkContentIsDisplayedByName(processName): Promise { return this.dataTable.checkContentIsDisplayed(this.columns.name, processName); } - checkContentIsNotDisplayedByName(processName) { + checkContentIsNotDisplayedByName(processName): Promise { return this.dataTable.checkContentIsNotDisplayed(this.columns.name, processName); } - checkContentIsDisplayedById(processId) { + checkContentIsDisplayedById(processId): Promise { return this.dataTable.checkContentIsDisplayed(this.columns.id, processId); } - checkContentIsNotDisplayedById(processId) { + checkContentIsNotDisplayedById(processId): Promise { return this.dataTable.checkContentIsNotDisplayed(this.columns.id, processId); } - selectRowWithKeyboard(processId) { + selectRowWithKeyboard(processId): Promise { return this.dataTable.selectRowWithKeyboard(this.columns.id, processId); } - getAllRowsNameColumn() { - return this.dataTable.getAllRowsColumnValues(this.columns.name); + async getAllRowsNameColumn() { + return await this.dataTable.getAllRowsColumnValues(this.columns.name); } - checkProcessListIsLoaded() { - BrowserVisibility.waitUntilElementIsVisible(this.processList); - return this; + async checkProcessListIsLoaded(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.processList); } - getNoProcessFoundMessage() { + async getNoProcessFoundMessage(): Promise { return BrowserActions.getText(this.noProcessFound); } - getAllRowsByColumn(column) { + getAllRowsByColumn(column): Promise { return this.dataTable.getAllRowsColumnValues(column); } diff --git a/lib/testing/src/lib/process-services-cloud/pages/start-process-cloud-component.page.ts b/lib/testing/src/lib/process-services-cloud/pages/start-process-cloud-component.page.ts index 25ddb073d1..596611d6be 100644 --- a/lib/testing/src/lib/process-services-cloud/pages/start-process-cloud-component.page.ts +++ b/lib/testing/src/lib/process-services-cloud/pages/start-process-cloud-component.page.ts @@ -32,86 +32,73 @@ export class StartProcessCloudPage { processDefinition = element(by.css('input[id="processDefinitionName"]')); processDefinitionOptionsPanel = element(by.css('div[class*="processDefinitionOptions"]')); - checkNoProcessMessage() { - BrowserVisibility.waitUntilElementIsVisible(this.noProcess); + async checkNoProcessMessage(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.noProcess); } - pressDownArrowAndEnter() { - this.processDefinition.sendKeys(protractor.Key.ARROW_DOWN); - return browser.actions().sendKeys(protractor.Key.ENTER).perform(); + async pressDownArrowAndEnter(): Promise { + await this.processDefinition.sendKeys(protractor.Key.ARROW_DOWN); + await browser.actions().sendKeys(protractor.Key.ENTER).perform(); } - checkNoProcessDefinitionOptionIsDisplayed() { - BrowserVisibility.waitUntilElementIsNotOnPage(this.processDefinitionOptionsPanel); + async checkNoProcessDefinitionOptionIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsNotVisible(this.processDefinitionOptionsPanel); } - enterProcessName(name) { - BrowserVisibility.waitUntilElementIsVisible(this.processNameInput); - this.clearProcessName(); - this.processNameInput.sendKeys(name); + async enterProcessName(name): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.processNameInput); + await BrowserActions.clearSendKeys(this.processNameInput, name); } - clearProcessName() { - BrowserVisibility.waitUntilElementIsVisible(this.processNameInput); - this.processNameInput.clear(); + async selectFromProcessDropdown(name): Promise { + await this.clickProcessDropdownArrow(); + await this.selectOption(name); } - selectFromProcessDropdown(name) { - this.clickProcessDropdownArrow(); - return this.selectOption(name); + async clickProcessDropdownArrow(): Promise { + await BrowserActions.click(this.selectProcessDropdownArrow); } - clickProcessDropdownArrow() { - BrowserActions.click(this.selectProcessDropdownArrow); - } - - checkOptionIsDisplayed(name) { + async checkOptionIsDisplayed(name): Promise { const selectProcessDropdown = element(by.cssContainingText('.mat-option-text', name)); - BrowserVisibility.waitUntilElementIsVisible(selectProcessDropdown); - BrowserVisibility.waitUntilElementIsClickable(selectProcessDropdown); - return this; + await BrowserVisibility.waitUntilElementIsVisible(selectProcessDropdown); + await BrowserVisibility.waitUntilElementIsClickable(selectProcessDropdown); } - selectOption(name) { + async selectOption(name): Promise { const selectProcessDropdown = element(by.cssContainingText('.mat-option-text', name)); - BrowserActions.click(selectProcessDropdown); - return this; + await BrowserActions.click(selectProcessDropdown); } - clickCancelProcessButton() { - BrowserActions.click(this.cancelProcessButton); + async clickCancelProcessButton(): Promise { + await BrowserActions.click(this.cancelProcessButton); } - checkStartProcessButtonIsEnabled() { + async checkStartProcessButtonIsEnabled(): Promise { + await BrowserVisibility.waitUntilElementIsPresent(this.startProcessButton); return this.startProcessButton.isEnabled(); } - clickStartProcessButton() { - return BrowserActions.click(this.startProcessButton); + async clickStartProcessButton(): Promise { + await BrowserActions.click(this.startProcessButton); } - checkValidationErrorIsDisplayed(error, elementRef = 'mat-error') { + async checkValidationErrorIsDisplayed(error, elementRef = 'mat-error'): Promise { const errorElement = element(by.cssContainingText(elementRef, error)); - BrowserVisibility.waitUntilElementIsVisible(errorElement); - return this; + await BrowserVisibility.waitUntilElementIsVisible(errorElement); } - blur(locator) { - locator.click(); - locator.sendKeys(Key.TAB); - return this; + async blur(locator): Promise { + await BrowserActions.click(locator); + await locator.sendKeys(Key.TAB); } - clearField(locator) { - BrowserVisibility.waitUntilElementIsVisible(locator); - locator.getAttribute('value').then((result) => { - for (let i = result.length; i >= 0; i--) { - locator.sendKeys(protractor.Key.BACK_SPACE); - } - }); + async clearField(locator) { + await BrowserVisibility.waitUntilElementIsVisible(locator); + await BrowserActions.clearWithBackSpace(locator); } - formFields() { + formFields(): FormFields { return new FormFields(); } } diff --git a/lib/testing/src/lib/process-services-cloud/pages/start-tasks-cloud-component.page.ts b/lib/testing/src/lib/process-services-cloud/pages/start-tasks-cloud-component.page.ts index b583768d03..4a0c680076 100644 --- a/lib/testing/src/lib/process-services-cloud/pages/start-tasks-cloud-component.page.ts +++ b/lib/testing/src/lib/process-services-cloud/pages/start-tasks-cloud-component.page.ts @@ -18,111 +18,94 @@ import { element, by, Key } from 'protractor'; import { BrowserVisibility } from '../../core/utils/browser-visibility'; import { BrowserActions } from '../../core/utils/browser-actions'; +import { ElementFinder } from 'protractor'; export class StartTasksCloudPage { - name = element(by.css('input[id="name_id"]')); - dueDate = element(by.css('input[id="date_id"]')); - description = element(by.css('textarea[id="description_id"]')); - priority = element(by.css('input[formcontrolname="priority"]')); - startButton = element(by.css('button[id="button-start"]')); + name: ElementFinder = element(by.css('input[id="name_id"]')); + dueDate: ElementFinder = element(by.css('input[id="date_id"]')); + description: ElementFinder = element(by.css('textarea[id="description_id"]')); + priority: ElementFinder = element(by.css('input[formcontrolname="priority"]')); + startButton: ElementFinder = element(by.css('button[id="button-start"]')); startButtonEnabled = element(by.css('button[id="button-start"]:not(disabled)')); - cancelButton = element(by.css('button[id="button-cancel"]')); - form = element.all(by.css('adf-cloud-start-task form')).first(); - formDefinitionSelector = element(by.css('.adf-form-definition-selector')); + cancelButton: ElementFinder = element(by.css('button[id="button-cancel"]')); + form: ElementFinder = element.all(by.css('adf-cloud-start-task form')).first(); + formDefinitionSelector: ElementFinder = element(by.css('.adf-form-definition-selector')); - checkFormIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.form); - return this; + async checkFormIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.form); } - addName(userName) { - BrowserActions.clearSendKeys(this.name, userName); - return this; + async addName(userName): Promise { + await BrowserActions.clearSendKeys(this.name, userName); } - addDescription(userDescription) { - BrowserActions.clearSendKeys(this.description, userDescription); - return this; + async addDescription(userDescription): Promise { + await BrowserActions.clearSendKeys(this.description, userDescription); } - addPriority(userPriority) { - BrowserActions.clearSendKeys(this.priority, userPriority); - return this; + async addPriority(userPriority): Promise { + await BrowserActions.clearSendKeys(this.priority, userPriority); } - addDueDate(date) { - BrowserVisibility.waitUntilElementIsVisible(this.dueDate); - this.clearField(this.dueDate); - this.dueDate.sendKeys(date); - return this; + async addDueDate(date): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.dueDate); + await BrowserActions.clearSendKeys(this.dueDate, date); } - clickStartButton() { - return BrowserActions.click(this.startButton); + async clickStartButton(): Promise { + await BrowserActions.click(this.startButton); } - checkStartButtonIsEnabled() { - BrowserVisibility.waitUntilElementIsVisible(this.startButtonEnabled); - return this; + async checkStartButtonIsEnabled(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.startButtonEnabled); } - checkStartButtonIsDisabled() { - BrowserVisibility.waitUntilElementIsVisible(element(by.css('button[id="button-start"]:disabled'))); - return this; + async checkStartButtonIsDisabled(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(element(by.css('button[id="button-start"]:disabled'))); } - clickCancelButton() { - return BrowserActions.click(this.cancelButton); + async clickCancelButton(): Promise { + await BrowserActions.click(this.cancelButton); } - blur(locator) { - BrowserVisibility.waitUntilElementIsVisible(locator); - BrowserVisibility.waitUntilElementIsClickable(locator); - locator.click(); - locator.sendKeys(Key.TAB); - return this; + async blur(locator): Promise { + await BrowserVisibility.waitUntilElementIsVisible(locator); + await BrowserVisibility.waitUntilElementIsClickable(locator); + await BrowserActions.click(locator); + await locator.sendKeys(Key.TAB); } - checkValidationErrorIsDisplayed(error, elementRef = 'mat-error') { + async checkValidationErrorIsDisplayed(error, elementRef = 'mat-error'): Promise { const errorElement = element(by.cssContainingText(elementRef, error)); - BrowserVisibility.waitUntilElementIsVisible(errorElement); - return this; + await BrowserVisibility.waitUntilElementIsVisible(errorElement); } - validateAssignee(error) { - this.checkValidationErrorIsDisplayed(error, '.adf-start-task-cloud-error'); - return this; + async validateAssignee(error): Promise { + await this.checkValidationErrorIsDisplayed(error, '.adf-start-task-cloud-error'); } - validateDate(error) { - this.checkValidationErrorIsDisplayed(error, '.adf-error-text'); - return this; + async validateDate(error): Promise { + await this.checkValidationErrorIsDisplayed(error, '.adf-error-text'); } - clearField(locator) { - BrowserActions.clearSendKeys(locator, ''); - } - - selectFormDefinition(option: string) { - BrowserActions.click(this.formDefinitionSelector); + async selectFormDefinition(option: string): Promise { + await BrowserActions.click(this.formDefinitionSelector); const row = element(by.cssContainingText('mat-option span', option)); - BrowserActions.click(row); + await BrowserActions.click(row); } - checkFormDefinitionIsDisplayed(option: string) { - BrowserActions.click(this.formDefinitionSelector); + async checkFormDefinitionIsDisplayed(option: string): Promise { + await BrowserActions.click(this.formDefinitionSelector); const row = element(by.cssContainingText('mat-option span', option)); - BrowserVisibility.waitUntilElementIsVisible(row); - BrowserActions.closeMenuAndDialogs(); - return this; + await BrowserVisibility.waitUntilElementIsVisible(row); + await BrowserActions.closeMenuAndDialogs(); } - checkFormDefinitionIsNotDisplayed(option: string) { - BrowserActions.click(this.formDefinitionSelector); + async checkFormDefinitionIsNotDisplayed(option: string): Promise { + await BrowserActions.click(this.formDefinitionSelector); const row = element(by.cssContainingText('mat-option span', option)); - BrowserVisibility.waitUntilElementIsNotVisible(row); - BrowserActions.closeMenuAndDialogs(); - return this; + await BrowserVisibility.waitUntilElementIsNotVisible(row); + await BrowserActions.closeMenuAndDialogs(); } } diff --git a/lib/testing/src/lib/process-services-cloud/pages/task-filters-cloud-component.page.ts b/lib/testing/src/lib/process-services-cloud/pages/task-filters-cloud-component.page.ts index b6f6ecb611..7c210bfdf3 100644 --- a/lib/testing/src/lib/process-services-cloud/pages/task-filters-cloud-component.page.ts +++ b/lib/testing/src/lib/process-services-cloud/pages/task-filters-cloud-component.page.ts @@ -15,42 +15,41 @@ * limitations under the License. */ -import { by } from 'protractor'; +import { browser, by, ElementFinder, Locator } from 'protractor'; import { BrowserVisibility } from '../../core/utils/browser-visibility'; import { BrowserActions } from '../../core/utils/browser-actions'; export class TaskFiltersCloudComponentPage { - filter; - taskIcon = by.xpath("ancestor::div[@class='mat-list-item-content']/mat-icon"); + filter: ElementFinder; + taskIcon: Locator = by.xpath("ancestor::div[@class='mat-list-item-content']/mat-icon"); - constructor(filter) { + constructor(filter: ElementFinder) { this.filter = filter; } - checkTaskFilterIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.filter); - return this; + async checkTaskFilterIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.filter); } - getTaskFilterIcon() { - BrowserVisibility.waitUntilElementIsVisible(this.filter); + async getTaskFilterIcon(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.filter); const icon = this.filter.element(this.taskIcon); return BrowserActions.getText(icon); } - checkTaskFilterHasNoIcon() { - BrowserVisibility.waitUntilElementIsVisible(this.filter); - BrowserVisibility.waitUntilElementIsNotOnPage(this.filter.element(this.taskIcon)); + async checkTaskFilterHasNoIcon(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.filter); + await BrowserVisibility.waitUntilElementIsNotVisible(this.filter.element(this.taskIcon)); } - clickTaskFilter() { - return BrowserActions.click(this.filter); + async clickTaskFilter(): Promise { + await BrowserActions.click(this.filter); + await browser.driver.sleep(1000); } - checkTaskFilterNotDisplayed() { - BrowserVisibility.waitUntilElementIsNotVisible(this.filter); - return this.filter; + async checkTaskFilterNotDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsNotVisible(this.filter); } } diff --git a/lib/testing/src/lib/process-services-cloud/pages/task-form-cloud-component.page.ts b/lib/testing/src/lib/process-services-cloud/pages/task-form-cloud-component.page.ts index 0f97379b2c..d6146f656d 100644 --- a/lib/testing/src/lib/process-services-cloud/pages/task-form-cloud-component.page.ts +++ b/lib/testing/src/lib/process-services-cloud/pages/task-form-cloud-component.page.ts @@ -19,99 +19,88 @@ import { element, by } from 'protractor'; import { BrowserVisibility } from '../../core/utils/browser-visibility'; import { BrowserActions } from '../../core/utils/browser-actions'; import { FormFields } from '../../core/pages/form/formFields'; +import { ElementFinder } from 'protractor'; export class TaskFormCloudComponent { - cancelButton = element(by.css('button[id="adf-cloud-cancel-task"]')); - completeButton = element(by.css('button[id="adf-form-complete"]')); - releaseButton = element(by.css('button[adf-cloud-unclaim-task]')); - saveButton = element(by.css('button[id="adf-form-save"]')); - claimButton = element(by.css('button[adf-cloud-claim-task]')); - form = element(by.css('adf-cloud-form')); - formTitle = element(by.css(`span.adf-form-title`)); - emptyContentIcon = element(by.css(`div.adf-empty-content mat-icon.adf-empty-content__icon`)); - emptyContentTitle = element(by.css(`div.adf-empty-content div.adf-empty-content__title`)); - emptyContentSubtitle = element(by.css(`div.adf-empty-content div.adf-empty-content__subtitle`)); + cancelButton: ElementFinder = element(by.css('button[id="adf-cloud-cancel-task"]')); + completeButton: ElementFinder = element(by.css('button[id="adf-form-complete"]')); + releaseButton: ElementFinder = element(by.css('button[adf-cloud-unclaim-task]')); + saveButton: ElementFinder = element(by.css('button[id="adf-form-save"]')); + claimButton: ElementFinder = element(by.css('button[adf-cloud-claim-task]')); + form: ElementFinder = element(by.css('adf-cloud-form')); + formTitle: ElementFinder = element(by.css(`span.adf-form-title`)); + emptyContentIcon: ElementFinder = element(by.css(`div.adf-empty-content mat-icon.adf-empty-content__icon`)); + emptyContentTitle: ElementFinder = element(by.css(`div.adf-empty-content div.adf-empty-content__title`)); + emptyContentSubtitle: ElementFinder = element(by.css(`div.adf-empty-content div.adf-empty-content__subtitle`)); - checkCompleteButtonIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.completeButton); - return this; + async checkCompleteButtonIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.completeButton); } - checkCompleteButtonIsNotDisplayed() { - BrowserVisibility.waitUntilElementIsNotOnPage(this.completeButton); - return this; + async checkCompleteButtonIsNotDisplayed() { + await BrowserVisibility.waitUntilElementIsNotVisible(this.completeButton); } - clickCompleteButton() { - BrowserActions.click(this.completeButton); - return this; + async clickCompleteButton(): Promise { + await BrowserActions.click(this.completeButton); } - clickCancelButton() { - BrowserActions.click(this.cancelButton); - return this; + async clickCancelButton(): Promise { + await BrowserActions.click(this.cancelButton); } - clickClaimButton() { - BrowserActions.click(this.claimButton); - return this; + async clickClaimButton(): Promise { + await BrowserActions.click(this.claimButton); } - clickReleaseButton() { - BrowserActions.click(this.releaseButton); - return this; + async clickReleaseButton(): Promise { + await BrowserActions.click(this.releaseButton); } - formFields() { + formFields(): FormFields { return new FormFields(); } - checkFormIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.form); - return this; + async checkFormIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.form); } - getFormTitle() { - BrowserVisibility.waitUntilElementIsVisible(this.formTitle); - return this.formTitle.getText(); + async getFormTitle(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.formTitle); + return BrowserActions.getText(this.formTitle); } - checkFormIsNotDisplayed() { - BrowserVisibility.waitUntilElementIsNotVisible(this.form); - return this; + async checkFormIsNotDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsNotVisible(this.form); } - getReleaseButtonText() { + async getReleaseButtonText(): Promise { return BrowserActions.getText(this.releaseButton); } - checkSaveButtonIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.saveButton); - return this; + async checkSaveButtonIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.saveButton); } - clickSaveButton() { - BrowserVisibility.waitUntilElementIsVisible(this.saveButton); - this.saveButton.click(); - return this; + async clickSaveButton(): Promise { + await BrowserActions.click(this.saveButton); } - checkFormContentIsEmpty() { - BrowserVisibility.waitUntilElementIsVisible(this.emptyContentIcon); - return this; + async checkFormContentIsEmpty(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.emptyContentIcon); } - getEmptyFormContentTitle() { + async getEmptyFormContentTitle(): Promise { return BrowserActions.getText(this.emptyContentTitle); } - getEmptyFormContentSubtitle() { + async getEmptyFormContentSubtitle(): Promise { return BrowserActions.getText(this.emptyContentSubtitle); } - getCompleteButton() { - BrowserVisibility.waitUntilElementIsVisible(this.completeButton); + async getCompleteButton(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.completeButton); return this.completeButton; } diff --git a/lib/testing/src/lib/process-services-cloud/pages/task-header-cloud-component.page.ts b/lib/testing/src/lib/process-services-cloud/pages/task-header-cloud-component.page.ts index ade72a8325..62358a3f5d 100644 --- a/lib/testing/src/lib/process-services-cloud/pages/task-header-cloud-component.page.ts +++ b/lib/testing/src/lib/process-services-cloud/pages/task-header-cloud-component.page.ts @@ -18,68 +18,69 @@ import { element, by } from 'protractor'; import { BrowserActions } from '../../core/utils/browser-actions'; import { BrowserVisibility } from '../../core/utils/browser-visibility'; +import { ElementFinder } from 'protractor'; export class TaskHeaderCloudPage { - assigneeField = element(by.css('span[data-automation-id*="assignee"] span')); - statusField = element(by.css('span[data-automation-id*="status"] span')); - priorityField = element(by.css('span[data-automation-id*="priority"] span')); - dueDateField = element.all(by.css('span[data-automation-id*="dueDate"] span')).first(); - categoryField = element(by.css('span[data-automation-id*="category"] span')); - createdField = element(by.css('span[data-automation-id="card-dateitem-created"] span')); - parentNameField = element(by.css('span[data-automation-id*="parentName"] span')); - parentTaskIdField = element(by.css('span[data-automation-id*="parentTaskId"] span')); - endDateField = element.all(by.css('span[data-automation-id*="endDate"] span')).first(); - idField = element.all(by.css('span[data-automation-id*="id"] span')).first(); - descriptionField = element(by.css('span[data-automation-id*="description"] span')); - taskPropertyList = element(by.css('adf-cloud-task-header adf-card-view div[class="adf-property-list"]')); + assigneeField: ElementFinder = element(by.css('span[data-automation-id*="assignee"] span')); + statusField: ElementFinder = element(by.css('span[data-automation-id*="status"] span')); + priorityField: ElementFinder = element(by.css('span[data-automation-id*="priority"] span')); + dueDateField: ElementFinder = element.all(by.css('span[data-automation-id*="dueDate"] span')).first(); + categoryField: ElementFinder = element(by.css('span[data-automation-id*="category"] span')); + createdField: ElementFinder = element(by.css('span[data-automation-id="card-dateitem-created"] span')); + parentNameField: ElementFinder = element(by.css('span[data-automation-id*="parentName"] span')); + parentTaskIdField: ElementFinder = element(by.css('span[data-automation-id*="parentTaskId"] span')); + endDateField: ElementFinder = element.all(by.css('span[data-automation-id*="endDate"] span')).first(); + idField: ElementFinder = element.all(by.css('span[data-automation-id*="id"] span')).first(); + descriptionField: ElementFinder = element(by.css('span[data-automation-id*="description"] span')); + taskPropertyList: ElementFinder = element(by.css('adf-cloud-task-header adf-card-view div[class="adf-property-list"]')); - getAssignee() { + async getAssignee(): Promise { return BrowserActions.getText(this.assigneeField); } - getStatus() { + async getStatus(): Promise { return BrowserActions.getText(this.statusField); } - getPriority() { + async getPriority(): Promise { return BrowserActions.getText(this.priorityField); } - getCategory() { + async getCategory(): Promise { return BrowserActions.getText(this.categoryField); } - getParentName() { + async getParentName(): Promise { return BrowserActions.getText(this.parentNameField); } - getParentTaskId() { + async getParentTaskId(): Promise { return BrowserActions.getText(this.parentTaskIdField); } - getEndDate() { + async getEndDate(): Promise { return BrowserActions.getText(this.endDateField); } - getCreated() { + async getCreated(): Promise { return BrowserActions.getText(this.createdField); } - getId() { + async getId(): Promise { return BrowserActions.getText(this.idField); } - getDescription() { + async getDescription(): Promise { return BrowserActions.getText(this.descriptionField); } - getDueDate() { + async getDueDate(): Promise { return BrowserActions.getText(this.dueDateField); } - checkTaskPropertyListIsDisplayed() { - return BrowserVisibility.waitUntilElementIsVisible(this.taskPropertyList); + async checkTaskPropertyListIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.taskPropertyList); } } diff --git a/lib/testing/src/lib/process-services-cloud/pages/task-list-cloud-component.page.ts b/lib/testing/src/lib/process-services-cloud/pages/task-list-cloud-component.page.ts index 13b92a2a88..57c3879e2c 100644 --- a/lib/testing/src/lib/process-services-cloud/pages/task-list-cloud-component.page.ts +++ b/lib/testing/src/lib/process-services-cloud/pages/task-list-cloud-component.page.ts @@ -17,7 +17,7 @@ import { BrowserVisibility } from '../../core/utils/browser-visibility'; import { DataTableComponentPage } from '../../core/pages/data-table-component.page'; -import { element, by } from 'protractor'; +import { element, by, ElementFinder } from 'protractor'; import { BrowserActions } from '../../core/utils/browser-actions'; const column = { @@ -39,120 +39,119 @@ export class TaskListCloudComponentPage { dataTable = new DataTableComponentPage(this.taskList); - getDataTable() { + getDataTable(): DataTableComponentPage { return this.dataTable; } - clickCheckbox(taskName) { + clickCheckbox(taskName): Promise { return this.dataTable.clickCheckbox(column.name, taskName); } - checkRowIsNotChecked(taskName) { + checkRowIsNotChecked(taskName): Promise { return this.dataTable.checkRowIsNotChecked(column.name, taskName); } - checkRowIsChecked(taskName) { + checkRowIsChecked(taskName): Promise { return this.dataTable.checkRowIsChecked(column.name, taskName); } - getRowsWithSameName(taskName) { + getRowsWithSameName(taskName): Promise { return this.dataTable.getRowsWithSameColumnValues(column.name, taskName); } - getRowsWithSameId(taskId) { + getRowsWithSameId(taskId): Promise { return this.dataTable.getRowsWithSameColumnValues('Id', taskId); } - checkRowIsSelected(taskName) { + checkRowIsSelected(taskName): Promise { return this.dataTable.checkRowIsSelected(column.name, taskName); } - checkRowIsNotSelected(taskName) { + checkRowIsNotSelected(taskName): Promise { return this.dataTable.checkRowIsNotSelected(column.name, taskName); } - selectRowWithKeyboard(taskName) { + selectRowWithKeyboard(taskName): Promise { return this.dataTable.selectRowWithKeyboard(column.name, taskName); } - selectRow(taskName) { + selectRow(taskName): Promise { return this.dataTable.selectRow(column.name, taskName); } - selectRowByTaskId(taskId: string) { + selectRowByTaskId(taskId: string): Promise { return this.dataTable.selectRow(column.id, taskId); } - getRow(taskName) { + getRow(taskName): ElementFinder { return this.dataTable.getCellElementByValue(column.name, taskName); } - checkContentIsDisplayedById(taskId) { + checkContentIsDisplayedById(taskId): Promise { return this.dataTable.checkContentIsDisplayed(column.id, taskId); } - checkContentIsNotDisplayedById(taskId) { + async checkContentIsNotDisplayedById(taskId): Promise { return this.dataTable.checkContentIsNotDisplayed(column.id, taskId); } - checkContentIsDisplayedByProcessInstanceId(taskName) { + async checkContentIsDisplayedByProcessInstanceId(taskName): Promise { return this.dataTable.checkContentIsDisplayed(column.processInstanceId, taskName); } - checkContentIsDisplayedByName(taskName) { + async checkContentIsDisplayedByName(taskName): Promise { return this.dataTable.checkContentIsDisplayed(column.name, taskName); } - checkContentIsNotDisplayedByName(taskName) { + async checkContentIsNotDisplayedByName(taskName): Promise { return this.dataTable.checkContentIsNotDisplayed(column.name, taskName); } - checkTaskListIsLoaded() { - BrowserVisibility.waitUntilElementIsVisible(this.taskList); - return this; + async checkTaskListIsLoaded(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.taskList); } - getNoTasksFoundMessage() { + async getNoTasksFoundMessage(): Promise { return BrowserActions.getText(this.noTasksFound); } - getAllRowsNameColumn() { - return this.dataTable.getAllRowsColumnValues(column.name); + async getAllRowsNameColumn() { + return await this.dataTable.getAllRowsColumnValues(column.name); } - getAllRowsByIdColumn() { - return this.dataTable.getAllRowsColumnValues(column.id); + async getAllRowsByIdColumn() { + return await this.dataTable.getAllRowsColumnValues(column.id); } - getAllRowsByProcessDefIdColumn() { - return this.dataTable.getAllRowsColumnValues(column.processDefinitionId); + async getAllRowsByProcessDefIdColumn() { + return await this.dataTable.getAllRowsColumnValues(column.processDefinitionId); } - getAllRowsByProcessInstanceIdColumn() { - return this.dataTable.getAllRowsColumnValues(column.processInstanceId); + async getAllRowsByProcessInstanceIdColumn() { + return await this.dataTable.getAllRowsColumnValues(column.processInstanceId); } - getAllRowsByAssigneeColumn() { - return this.dataTable.getAllRowsColumnValues(column.assignee); + async getAllRowsByAssigneeColumn() { + return await this.dataTable.getAllRowsColumnValues(column.assignee); } - getAllRowsByParentTaskIdColumn() { - return this.dataTable.getAllRowsColumnValues(column.parentTaskId); + async getAllRowsByParentTaskIdColumn() { + return await this.dataTable.getAllRowsColumnValues(column.parentTaskId); } - getAllRowsByPriorityColumn() { - return this.dataTable.getAllRowsColumnValues(column.priority); + async getAllRowsByPriorityColumn() { + return await this.dataTable.getAllRowsColumnValues(column.priority); } - getAllRowsByStandAloneColumn() { - return this.dataTable.getAllRowsColumnValues(column.standAlone); + async getAllRowsByStandAloneColumn() { + return await this.dataTable.getAllRowsColumnValues(column.standAlone); } - getAllRowsByOwnerColumn() { - return this.dataTable.getAllRowsColumnValues(column.owner); + async getAllRowsByOwnerColumn() { + return await this.dataTable.getAllRowsColumnValues(column.owner); } - getIdCellValue(rowName) { + async getIdCellValue(rowName): Promise { const locator = new DataTableComponentPage().getCellByRowContentAndColumn(column.name, rowName, column.id); return BrowserActions.getText(locator); } diff --git a/lib/testing/src/lib/process-services/pages/form-fields.page.ts b/lib/testing/src/lib/process-services/pages/form-fields.page.ts index caaee3122c..bfb7a32fe2 100644 --- a/lib/testing/src/lib/process-services/pages/form-fields.page.ts +++ b/lib/testing/src/lib/process-services/pages/form-fields.page.ts @@ -16,144 +16,138 @@ */ import { BrowserVisibility } from '../../core/utils/browser-visibility'; -import { by, element } from 'protractor'; +import { by, element, ElementFinder, Locator } from 'protractor'; import { BrowserActions } from '../../core/utils/browser-actions'; export class FormFieldsPage { - formContent = element(by.css('adf-form')); - refreshButton = element(by.css('div[class*="form-reload-button"] mat-icon')); - saveButton = element(by.cssContainingText('mat-card-actions[class*="adf-for"] span', 'SAVE')); - valueLocator = by.css('input'); - labelLocator = by.css('label'); - noFormMessage = element(by.css('span[id*="no-form-message"]')); - completedTaskNoFormMessage = element(by.css('div[id*="completed-form-message"] p')); - attachFormButton = element(by.id('adf-no-form-attach-form-button')); - selectFormDropDownArrow = element.all(by.css('adf-attach-form div[class*="mat-select-arrow"]')).first(); - selectFormContent = element(by.css('div[class*="mat-select-panel"]')); - completeButton = element(by.id('adf-form-complete')); - errorMessage = by.css('.adf-error-text-container .adf-error-text'); + formContent: ElementFinder = element(by.css('adf-form')); + refreshButton: ElementFinder = element(by.css('div[class*="form-reload-button"] mat-icon')); + saveButton: ElementFinder = element(by.cssContainingText('mat-card-actions[class*="adf-for"] span', 'SAVE')); + valueLocator: Locator = by.css('input'); + labelLocator: Locator = by.css('label'); + noFormMessage: ElementFinder = element(by.css('span[id*="no-form-message"]')); + completedTaskNoFormMessage: ElementFinder = element(by.css('div[id*="completed-form-message"] p')); + attachFormButton: ElementFinder = element(by.id('adf-no-form-attach-form-button')); + selectFormDropDownArrow: ElementFinder = element.all(by.css('adf-attach-form div[class*="mat-select-arrow"]')).first(); + selectFormContent: ElementFinder = element(by.css('div[class*="mat-select-panel"]')); + completeButton: ElementFinder = element(by.id('adf-form-complete')); + errorMessage: Locator = by.css('.adf-error-text-container .adf-error-text'); - setFieldValue(locator, field, value) { + async setFieldValue(locator, field, value): Promise { const fieldElement: any = element(locator(field)); - BrowserVisibility.waitUntilElementIsVisible(fieldElement); - fieldElement.clear().sendKeys(value); - return this; + await BrowserVisibility.waitUntilElementIsVisible(fieldElement); + await BrowserActions.clearSendKeys(fieldElement, value); } - checkWidgetIsVisible(fieldId) { + async checkWidgetIsVisible(fieldId): Promise { const fieldElement = element.all(by.css(`adf-form-field div[id='field-${fieldId}-container']`)).first(); - BrowserVisibility.waitUntilElementIsVisible(fieldElement); + await BrowserVisibility.waitUntilElementIsVisible(fieldElement); } - checkWidgetIsHidden(fieldId) { + async checkWidgetIsHidden(fieldId): Promise { const hiddenElement = element(by.css(`adf-form-field div[id='field-${fieldId}-container'][hidden]`)); - BrowserVisibility.waitUntilElementIsVisible(hiddenElement); + await BrowserVisibility.waitUntilElementIsVisible(hiddenElement); } - getWidget(fieldId) { + async getWidget(fieldId): Promise { const widget = element(by.css(`adf-form-field div[id='field-${fieldId}-container']`)); - BrowserVisibility.waitUntilElementIsVisible(widget); + await BrowserVisibility.waitUntilElementIsVisible(widget); return widget; } - getFieldValue(fieldId, valueLocatorParam) { - const value = this.getWidget(fieldId).element(valueLocatorParam || this.valueLocator); - BrowserVisibility.waitUntilElementIsVisible(value); - return value.getAttribute('value'); + async getFieldValue(fieldId, valueLocatorParam): Promise { + const widget: ElementFinder = await this.getWidget(fieldId); + const value = widget.element(valueLocatorParam || this.valueLocator); + await BrowserVisibility.waitUntilElementIsVisible(value); + return await value.getAttribute('value'); } - getFieldLabel(fieldId, labelLocatorParam) { - const label = this.getWidget(fieldId).all(labelLocatorParam || this.labelLocator).first(); - return BrowserActions.getText(label); + async getFieldLabel(fieldId, labelLocatorParam): Promise { + const widget = await this.getWidget(fieldId); + const label = widget.all(labelLocatorParam || this.labelLocator).first(); + return await BrowserActions.getText(label); } - getFieldErrorMessage(fieldId) { - const error = this.getWidget(fieldId).element(this.errorMessage); + async getFieldErrorMessage(fieldId): Promise { + const widget = await this.getWidget(fieldId); + const error = widget.element(this.errorMessage); return BrowserActions.getText(error); } - getFieldText(fieldId, labelLocatorParam) { - const label = this.getWidget(fieldId).element(labelLocatorParam || this.labelLocator); + async getFieldText(fieldId, labelLocatorParam): Promise { + const widget = await this.getWidget(fieldId); + const label = widget.element(labelLocatorParam || this.labelLocator); return BrowserActions.getText(label); } - getFieldPlaceHolder(fieldId, locator = 'input') { + async getFieldPlaceHolder(fieldId, locator = 'input'): Promise { const placeHolderLocator = element(by.css(`${locator}#${fieldId}`)); - BrowserVisibility.waitUntilElementIsVisible(placeHolderLocator); + await BrowserVisibility.waitUntilElementIsVisible(placeHolderLocator); return placeHolderLocator.getAttribute('placeholder'); } - checkFieldValue(locator, field, val) { - BrowserVisibility.waitUntilElementHasValue(element(locator(field)), val); - return this; + async checkFieldValue(locator, field, val): Promise { + await BrowserVisibility.waitUntilElementHasValue(element(locator(field)), val); } - refreshForm() { - BrowserActions.click(this.refreshButton); - return this; + async refreshForm(): Promise { + await BrowserActions.click(this.refreshButton); } - saveForm() { - BrowserActions.click(this.saveButton); - return this; + async saveForm(): Promise { + await BrowserActions.click(this.saveButton); } - noFormIsDisplayed() { - BrowserVisibility.waitUntilElementIsNotOnPage(this.formContent); - return this; + async noFormIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsNotVisible(this.formContent); } - checkFormIsDisplayed() { - BrowserVisibility.waitUntilElementIsVisible(this.formContent); - return this; + async checkFormIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.formContent); } - getNoFormMessage() { + async getNoFormMessage(): Promise { return BrowserActions.getText(this.noFormMessage); } - getCompletedTaskNoFormMessage() { + async getCompletedTaskNoFormMessage(): Promise { return BrowserActions.getText(this.completedTaskNoFormMessage); } - clickOnAttachFormButton() { - BrowserActions.click(this.attachFormButton); - return this; + async clickOnAttachFormButton(): Promise { + await BrowserActions.click(this.attachFormButton); } - selectForm(formName) { - BrowserActions.click(this.selectFormDropDownArrow); - BrowserVisibility.waitUntilElementIsVisible(this.selectFormContent); - this.selectFormFromDropDown(formName); - return this; + async selectForm(formName): Promise { + await BrowserActions.click(this.selectFormDropDownArrow); + await BrowserVisibility.waitUntilElementIsVisible(this.selectFormContent); + await this.selectFormFromDropDown(formName); } - selectFormFromDropDown(formName) { + async selectFormFromDropDown(formName): Promise { const formNameElement = element(by.cssContainingText('span', formName)); - BrowserActions.click(formNameElement); + await BrowserActions.click(formNameElement); } - checkWidgetIsReadOnlyMode(fieldId) { + async checkWidgetIsReadOnlyMode(fieldId): Promise { const widget = element(by.css(`adf-form-field div[id='field-${fieldId}-container']`)); const widgetReadOnly = widget.element(by.css('div[class*="adf-readonly"]')); - BrowserVisibility.waitUntilElementIsVisible(widgetReadOnly); - return widgetReadOnly; + await BrowserVisibility.waitUntilElementIsVisible(widgetReadOnly); } - completeForm() { - return BrowserActions.click(this.completeButton); + async completeForm(): Promise { + await BrowserActions.click(this.completeButton); } - setValueInInputById(fieldId, value) { + async setValueInInputById(fieldId, value): Promise { const input: any = element(by.id(fieldId)); - BrowserVisibility.waitUntilElementIsVisible(input); - input.clear().sendKeys(value); - return this; + await BrowserVisibility.waitUntilElementIsVisible(input); + await BrowserActions.clearSendKeys(input, value); } - isCompleteFormButtonDisabled() { - BrowserVisibility.waitUntilElementIsVisible(this.completeButton); + async isCompleteFormButtonDisabled(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.completeButton); return this.completeButton.getAttribute('disabled'); } } diff --git a/lib/testing/src/lib/process-services/pages/start-process-dialog.page.ts b/lib/testing/src/lib/process-services/pages/start-process-dialog.page.ts index 8a21d97406..52e6c6f326 100644 --- a/lib/testing/src/lib/process-services/pages/start-process-dialog.page.ts +++ b/lib/testing/src/lib/process-services/pages/start-process-dialog.page.ts @@ -16,28 +16,28 @@ */ import { BrowserVisibility } from '../../core/utils/browser-visibility'; -import { by, element } from 'protractor'; +import { by, element, ElementFinder } from 'protractor'; import { BrowserActions } from '../../core/utils/browser-actions'; export class StartProcessDialog { - startProcessDialog = element(by.id('adf-start-process-dialog')); - title = this.startProcessDialog.element(by.css('h4.mat-dialog-title')); - closeButton = this.startProcessDialog.element(by.cssContainingText(`div.adf-start-process-dialog-actions button span`, 'Close')); + startProcessDialog: ElementFinder = element(by.id('adf-start-process-dialog')); + title: ElementFinder = this.startProcessDialog.element(by.css('h4.mat-dialog-title')); + closeButton: ElementFinder = this.startProcessDialog.element(by.cssContainingText(`div.adf-start-process-dialog-actions button span`, 'Close')); - checkStartProcessDialogIsDisplayed() { - return BrowserVisibility.waitUntilElementIsVisible(this.startProcessDialog); + async checkStartProcessDialogIsDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.startProcessDialog); } - getTitle() { + async getTitle(): Promise { return BrowserActions.getText(this.title); } - clickCloseButton() { - return BrowserActions.click(this.closeButton); + async clickCloseButton(): Promise { + await BrowserActions.click(this.closeButton); } - checkStartProcessDialogIsNotDisplayed() { - return BrowserVisibility.waitUntilElementIsNotVisible(this.startProcessDialog); + async checkStartProcessDialogIsNotDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsNotVisible(this.startProcessDialog); } } diff --git a/lib/testing/src/lib/testing.service.spec.ts b/lib/testing/src/lib/testing.service.spec.ts deleted file mode 100644 index 025bff92e0..0000000000 --- a/lib/testing/src/lib/testing.service.spec.ts +++ /dev/null @@ -1,29 +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 { TestBed } from '@angular/core/testing'; - -import { TestingService } from './testing.service'; - -describe('TestingService', () => { - beforeEach(() => TestBed.configureTestingModule({})); - - it('should be created', () => { - const service: TestingService = TestBed.get(TestingService); - expect(service).toBeTruthy(); - }); -}); diff --git a/lib/testing/src/lib/testing.service.ts b/lib/testing/src/lib/testing.service.ts deleted file mode 100644 index 4ad31c43ce..0000000000 --- a/lib/testing/src/lib/testing.service.ts +++ /dev/null @@ -1,27 +0,0 @@ -/*! - * @license - * Copyright 2019 Alfresco Software, Ltd. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { Injectable } from '@angular/core'; - -@Injectable({ - providedIn: 'root' -}) -export class TestingService { - - constructor() { } - -} diff --git a/lib/testing/src/public-api.ts b/lib/testing/src/public-api.ts index 3523150fd5..aa42f93b28 100644 --- a/lib/testing/src/public-api.ts +++ b/lib/testing/src/public-api.ts @@ -22,6 +22,5 @@ export * from './lib/material/public-api'; export * from './lib/process-services/public-api'; export * from './lib/process-services-cloud/public-api'; export * from './lib/testing.module'; -export * from './lib/testing.service'; export * from './lib/test.configuration'; diff --git a/lib/testing/tslint.json b/lib/testing/tslint.json index 124133f849..1d1214df70 100644 --- a/lib/testing/tslint.json +++ b/lib/testing/tslint.json @@ -1,5 +1,5 @@ { - "extends": "../../tslint.json", + "extends": "../tslint.json", "rules": { "directive-selector": [ true, diff --git a/lib/tslint.json b/lib/tslint.json index 43eaff60d9..2ad10a1701 100644 --- a/lib/tslint.json +++ b/lib/tslint.json @@ -7,6 +7,7 @@ "template-accessibility-tabindex-no-positive": true, "template-accessibility-table-scope": true, "template-accessibility-valid-aria": true, - "template-no-autofocus": true + "template-no-autofocus": true, + "no-floating-promises": false } } diff --git a/package-lock.json b/package-lock.json index 9a94f5b72a..0658d5ff40 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4,6 +4,71 @@ "lockfileVersion": 1, "requires": true, "dependencies": { + "@alfresco/adf-content-services": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@alfresco/adf-content-services/-/adf-content-services-3.4.0.tgz", + "integrity": "sha512-4VdB2GkWwKahOGr1jDQ3n3kaA3RFMYrIWRIdv+MU3Mx9XUPCrj/f6X0Um8qf1Wp110hDxhbSXd4PZtCqwBd1dQ==", + "requires": { + "tslib": "^1.9.0" + } + }, + "@alfresco/adf-core": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@alfresco/adf-core/-/adf-core-3.4.0.tgz", + "integrity": "sha512-1TwJ9ELFTBxOKU8rKy1MDMviAHDmtexV2Q1Eo9f5JmEPRGwps2aO0R5JrdvBAf8HGpNcOp3NvJlBnVI5gjGA9Q==", + "requires": { + "tslib": "^1.9.0" + } + }, + "@alfresco/adf-extensions": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@alfresco/adf-extensions/-/adf-extensions-3.4.0.tgz", + "integrity": "sha512-nxSgwOYBn7Q3c+4Tt7J8lAw32tTWUjUOO/suYJDdaPFRG7GB2G7Ulv2gb2105gPnGDDWPUCx3qvfGRbPWjPB/A==", + "requires": { + "tslib": "^1.9.0" + } + }, + "@alfresco/adf-insights": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@alfresco/adf-insights/-/adf-insights-3.4.0.tgz", + "integrity": "sha512-skCVL80nC1uyTsjIWNwHktj0zHNLKcM1rPiqWfygW6zZwTjVpI5/XGPR7Yespr96v0qq19p1KOSwLWQ86NfL0g==", + "requires": { + "tslib": "^1.9.0" + } + }, + "@alfresco/adf-process-services": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@alfresco/adf-process-services/-/adf-process-services-3.4.0.tgz", + "integrity": "sha512-KD9/55QuVdoa7jZZuMPaPfQVPRFKb+3X5QAjkEb1j0+7+1tT1TNJzMxMbdCz4Z4GiFscMNUN3v8GzG4pToSxCA==", + "requires": { + "tslib": "^1.9.0" + } + }, + "@alfresco/adf-process-services-cloud": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@alfresco/adf-process-services-cloud/-/adf-process-services-cloud-3.4.0.tgz", + "integrity": "sha512-pIEVNnr0muHIHPUxoP5TMgbOhojR6BaY/uA0t5hSB8tAkh6s7nM3/WUTVQCUcJWalb6xmSS1XYTrMgOvDVDH6g==", + "requires": { + "tslib": "^1.9.0" + } + }, + "@alfresco/adf-testing": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@alfresco/adf-testing/-/adf-testing-3.4.0.tgz", + "integrity": "sha512-JKKq/yo2zA7x+KjcW+4tL91WLrvizvvywPyA8AyVu93SiWbuR9LUfg6DfrIhcI7ijM60SKx60PQT9gTA+ypETw==", + "requires": { + "tslib": "^1.9.0" + } + }, + "@alfresco/js-api": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@alfresco/js-api/-/js-api-3.4.0.tgz", + "integrity": "sha512-fjAFpJMl0OJyleaeuuvT1mbLDjbFCsUYpV4utq7pTZdGmsX8oWqsdoRxR9jwh1AbyTLglH6OGHKzGfpmgpLCTQ==", + "requires": { + "event-emitter": "0.3.4", + "superagent": "3.8.2" + } + }, "@angular-devkit/architect": { "version": "0.13.9", "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.13.9.tgz", @@ -2253,8 +2318,7 @@ "asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", - "dev": true + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" }, "atob": { "version": "2.1.2", @@ -3251,9 +3315,9 @@ } }, "browserstack": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/browserstack/-/browserstack-1.5.2.tgz", - "integrity": "sha512-+6AFt9HzhKykcPF79W6yjEUJcdvZOV0lIXdkORXMJftGrDl0OKWqRF4GHqpDNkxiceDT/uB7Fb/aDwktvXX7dg==", + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/browserstack/-/browserstack-1.5.3.tgz", + "integrity": "sha512-AO+mECXsW4QcqC9bxwM29O7qWa7bJT94uBFzeb5brylIQwawuEziwq20dPYbins95GlWzOawgyDNdjYAo32EKg==", "dev": true, "requires": { "https-proxy-agent": "^2.2.1" @@ -3683,6 +3747,24 @@ "integrity": "sha512-GkfeAQh+QNy3wquu9oIZr6SS5x7wGdSgNQvD10X3r+AZr1Oys22HW8kAmDMvNg2+Dm0TeGaEuO8gFwdBXxwO8A==", "dev": true }, + "chrome-remote-interface": { + "version": "0.26.1", + "resolved": "https://registry.npmjs.org/chrome-remote-interface/-/chrome-remote-interface-0.26.1.tgz", + "integrity": "sha512-ela482aJK0riFu05sl+zdbnb3ezMiqzwsqf/f/27HngWds+Fat3vcZWpIoDoeQuWMid/+LfKAteAYWaWPqsweg==", + "dev": true, + "requires": { + "commander": "2.11.x", + "ws": "^3.3.3" + }, + "dependencies": { + "commander": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.11.0.tgz", + "integrity": "sha512-b0553uYA5YAEGgyYIGYROzKQ7X5RAqedkfjiZxwi0kL1g3bOaBNNZfYkzt/CL0umgD5wc9Jec2FbB98CjkMRvQ==", + "dev": true + } + } + }, "chrome-trace-event": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz", @@ -3943,7 +4025,6 @@ "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dev": true, "requires": { "delayed-stream": "~1.0.0" } @@ -3978,8 +4059,7 @@ "component-emitter": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", - "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", - "dev": true + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==" }, "component-inherit": { "version": "0.0.3", @@ -4249,6 +4329,11 @@ "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=", "dev": true }, + "cookiejar": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.2.tgz", + "integrity": "sha512-Mw+adcfzPxcPeI+0WlvRrr/3lGVO0bD75SxX6811cxSh1Wbxx7xZBGK1eVtDf6si8rg2lhnUjsVLMFMfbRIuwA==" + }, "copy-concurrently": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz", @@ -4293,8 +4378,7 @@ "core-util-is": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", - "dev": true + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" }, "cosmiconfig": { "version": "5.2.1", @@ -4721,6 +4805,14 @@ "integrity": "sha1-GzN5LhHpFKL9bW7WRHRkRE5fpkA=", "dev": true }, + "d": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/d/-/d-0.1.1.tgz", + "integrity": "sha1-2hhMU10Y2O57oqoim5FACfrhEwk=", + "requires": { + "es5-ext": "~0.10.2" + } + }, "damerau-levenshtein": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.5.tgz", @@ -4768,7 +4860,6 @@ "version": "3.2.6", "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "dev": true, "requires": { "ms": "^2.1.1" } @@ -4966,8 +5057,7 @@ "delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", - "dev": true + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" }, "delegates": { "version": "1.0.0", @@ -5507,6 +5597,37 @@ "is-symbol": "^1.0.2" } }, + "es5-ext": { + "version": "0.10.50", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.50.tgz", + "integrity": "sha512-KMzZTPBkeQV/JcSQhI5/z6d9VWJ3EnQ194USTUwIYZ2ZbpN8+SGXQKt1h68EX44+qt+Fzr8DO17vnxrw7c3agw==", + "requires": { + "es6-iterator": "~2.0.3", + "es6-symbol": "~3.1.1", + "next-tick": "^1.0.0" + } + }, + "es6-iterator": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", + "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", + "requires": { + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" + }, + "dependencies": { + "d": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", + "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", + "requires": { + "es5-ext": "^0.10.50", + "type": "^1.0.1" + } + } + } + }, "es6-promise": { "version": "4.2.8", "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", @@ -5522,6 +5643,26 @@ "es6-promise": "^4.0.3" } }, + "es6-symbol": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz", + "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=", + "requires": { + "d": "1", + "es5-ext": "~0.10.14" + }, + "dependencies": { + "d": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", + "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", + "requires": { + "es5-ext": "^0.10.50", + "type": "^1.0.1" + } + } + } + }, "escape-html": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", @@ -5634,6 +5775,15 @@ "resolved": "https://registry.npmjs.org/eve-raphael/-/eve-raphael-0.5.0.tgz", "integrity": "sha1-F8dUt5K+7z+maE15z1pHxjxM2jA=" }, + "event-emitter": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.4.tgz", + "integrity": "sha1-jWPd+0z+H647MsomXExyAiIIC7U=", + "requires": { + "d": "~0.1.1", + "es5-ext": "~0.10.7" + } + }, "eventemitter3": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-3.1.2.tgz", @@ -5839,8 +5989,7 @@ "extend": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "dev": true + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" }, "extend-shallow": { "version": "3.0.2", @@ -6247,12 +6396,27 @@ "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", "dev": true }, + "form-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.0.tgz", + "integrity": "sha512-WXieX3G/8side6VIqx44ablyULoGruSde5PNTxoUyo5CeyAMX6nVWUd0rgist/EuX655cjhUhTo1Fo3tRYqbcA==", + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + } + }, "format": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/format/-/format-0.2.2.tgz", "integrity": "sha1-1hcBB+nv3E7TDJ3DkBbflCtctYs=", "dev": true }, + "formidable": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/formidable/-/formidable-1.2.1.tgz", + "integrity": "sha512-Fs9VRguL0gqGHkXS5GQiMCr1VhZBxz0JnJs4JmMp/2jL18Fmbzvv7vOFRU+U8TBkHEE/CX1qDXzJplVULgsLeg==" + }, "forwarded": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", @@ -8155,8 +8319,7 @@ "inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, "ini": { "version": "1.3.5", @@ -8676,8 +8839,7 @@ "isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" }, "isbinaryfile": { "version": "3.0.3", @@ -10655,8 +10817,7 @@ "methods": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", - "dev": true + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" }, "micromatch": { "version": "3.1.10", @@ -10692,20 +10853,17 @@ "mime": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "dev": true + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" }, "mime-db": { "version": "1.40.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.40.0.tgz", - "integrity": "sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA==", - "dev": true + "integrity": "sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA==" }, "mime-types": { "version": "2.1.24", "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.24.tgz", "integrity": "sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ==", - "dev": true, "requires": { "mime-db": "1.40.0" } @@ -10927,8 +11085,7 @@ "ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, "multicast-dns": { "version": "6.2.3", @@ -11057,6 +11214,11 @@ "integrity": "sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw==", "dev": true }, + "next-tick": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", + "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=" + }, "ng-packagr": { "version": "4.7.1", "resolved": "https://registry.npmjs.org/ng-packagr/-/ng-packagr-4.7.1.tgz", @@ -12977,8 +13139,7 @@ "process-nextick-args": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "dev": true + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" }, "progress": { "version": "2.0.3", @@ -13124,6 +13285,18 @@ "integrity": "sha1-VXBbzZPF82c1MMLCy8DCs63cKG4=", "dev": true }, + "selenium-webdriver": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/selenium-webdriver/-/selenium-webdriver-3.6.0.tgz", + "integrity": "sha512-WH7Aldse+2P5bbFBO4Gle/nuQOdVwpHMTL6raL3uuBj/vPG07k6uzt3aiahu352ONBr5xXh0hDlM3LhtXPOC4Q==", + "dev": true, + "requires": { + "jszip": "^3.1.3", + "rimraf": "^2.5.4", + "tmp": "0.0.30", + "xml2js": "^0.4.17" + } + }, "source-map-support": { "version": "0.4.18", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz", @@ -13139,10 +13312,19 @@ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", "dev": true }, + "tmp": { + "version": "0.0.30", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.30.tgz", + "integrity": "sha1-ckGdSovn1s51FI/YsyTlk6cRwu0=", + "dev": true, + "requires": { + "os-tmpdir": "~1.0.1" + } + }, "webdriver-manager": { - "version": "12.1.5", - "resolved": "https://registry.npmjs.org/webdriver-manager/-/webdriver-manager-12.1.5.tgz", - "integrity": "sha512-f1apDjMpZ8SHlXtXGzqBxOjV+WQcDRz5PN7pWScgjXS7vhUIFcM3V89Shetf4A04n8DDR2MxiVQq6JproFcRZw==", + "version": "12.1.6", + "resolved": "https://registry.npmjs.org/webdriver-manager/-/webdriver-manager-12.1.6.tgz", + "integrity": "sha512-B1mOycNCrbk7xODw7Jgq/mdD3qzPxMaTsnKIQDy2nXlQoyjTrJTTD0vRpEZI9b8RibPEyQvh9zIZ0M1mpOxS3w==", "dev": true, "requires": { "adm-zip": "^0.4.9", @@ -13460,8 +13642,7 @@ "qs": { "version": "6.7.0", "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", - "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", - "dev": true + "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==" }, "querystring": { "version": "0.2.0", @@ -13668,7 +13849,6 @@ "version": "2.3.6", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "dev": true, "requires": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -14322,8 +14502,7 @@ "safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" }, "safe-regex": { "version": "1.1.0", @@ -14602,15 +14781,15 @@ "dev": true }, "selenium-webdriver": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/selenium-webdriver/-/selenium-webdriver-3.6.0.tgz", - "integrity": "sha512-WH7Aldse+2P5bbFBO4Gle/nuQOdVwpHMTL6raL3uuBj/vPG07k6uzt3aiahu352ONBr5xXh0hDlM3LhtXPOC4Q==", + "version": "4.0.0-alpha.4", + "resolved": "https://registry.npmjs.org/selenium-webdriver/-/selenium-webdriver-4.0.0-alpha.4.tgz", + "integrity": "sha512-etJt20d8qInkxMAHIm5SEpPBSS+CdxVcybnxzSIB/GlWErb8pIWrArz/VA6VfUW0/6tIcokepXQ5ufvdzqqk1A==", "dev": true, "requires": { - "jszip": "^3.1.3", - "rimraf": "^2.5.4", + "jszip": "^3.1.5", + "rimraf": "^2.6.3", "tmp": "0.0.30", - "xml2js": "^0.4.17" + "xml2js": "^0.4.19" }, "dependencies": { "tmp": { @@ -15714,7 +15893,6 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, "requires": { "safe-buffer": "~5.1.0" } @@ -16175,6 +16353,23 @@ "postcss": "^7.0.2" } }, + "superagent": { + "version": "3.8.2", + "resolved": "https://registry.npmjs.org/superagent/-/superagent-3.8.2.tgz", + "integrity": "sha512-gVH4QfYHcY3P0f/BZzavLreHW3T1v7hG9B+hpMQotGQqurOvhv87GcMCd6LWySmBuf+BDR44TQd0aISjVHLeNQ==", + "requires": { + "component-emitter": "^1.2.0", + "cookiejar": "^2.1.0", + "debug": "^3.1.0", + "extend": "^3.0.0", + "form-data": "^2.3.1", + "formidable": "^1.1.1", + "methods": "^1.1.1", + "mime": "^1.4.1", + "qs": "^6.5.1", + "readable-stream": "^2.0.5" + } + }, "supports-color": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", @@ -17012,6 +17207,11 @@ "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", "dev": true }, + "type": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/type/-/type-1.0.3.tgz", + "integrity": "sha512-51IMtNfVcee8+9GJvj0spSuFcZHe9vSib6Xtgsny1Km9ugyz2mbS08I3rsUIRYgJohFRFU1160sgRodYz378Hg==" + }, "type-check": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", @@ -17489,8 +17689,7 @@ "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "dev": true + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" }, "util-extend": { "version": "1.0.3", @@ -17672,6 +17871,29 @@ "requires": { "@types/selenium-webdriver": "^3.0.0", "selenium-webdriver": "^3.0.1" + }, + "dependencies": { + "selenium-webdriver": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/selenium-webdriver/-/selenium-webdriver-3.6.0.tgz", + "integrity": "sha512-WH7Aldse+2P5bbFBO4Gle/nuQOdVwpHMTL6raL3uuBj/vPG07k6uzt3aiahu352ONBr5xXh0hDlM3LhtXPOC4Q==", + "dev": true, + "requires": { + "jszip": "^3.1.3", + "rimraf": "^2.5.4", + "tmp": "0.0.30", + "xml2js": "^0.4.17" + } + }, + "tmp": { + "version": "0.0.30", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.30.tgz", + "integrity": "sha1-ckGdSovn1s51FI/YsyTlk6cRwu0=", + "dev": true, + "requires": { + "os-tmpdir": "~1.0.1" + } + } } }, "webpack": { diff --git a/package.json b/package.json index cc583de4c5..11108dd138 100644 --- a/package.json +++ b/package.json @@ -27,7 +27,7 @@ "03s": "", "lint-demo": "./node_modules/.bin/tslint -p ./demo-shell/tsconfig.json -c ./demo-shell/tslint.json", "lint-lib": "./node_modules/.bin/tslint -p ./lib/tsconfig.json -c ./lib/tslint.json", - "lint-e2e": "tsc -p ./e2e/tsconfig.e2e.json && ./node_modules/.bin/tslint -p ./e2e/tsconfig.e2e.json -c ./tslint.json", + "lint-e2e": "tsc -p ./e2e/tsconfig.e2e.json && ./node_modules/.bin/tslint -p ./e2e/tsconfig.e2e.json -c ./e2e/tslint.json", "validate-config": "ajv validate -s ./lib/core/app-config/schema.json -d ./demo-shell/src/app.config.json --errors=text --verbose", "spellcheck": "cspell 'demo-shell/{src,e2e}/**/*.ts' 'e2e/**/*.ts' 'lib/{content-services,core,extensions,insights,process-services,process-services-cloud}/**/*.ts'", "stylelint": "stylelint ./**/*.scss --config stylelint-config.json", @@ -38,8 +38,8 @@ "start:dist": "ng lint dist && npm run validate-config && npm run server-versions && ng serve dist --prod --open", "build": "npm run validate-config && npm run server-versions && ng build dist", "build:dev": "npm run validate-config && npm run style:dev && npm run server-versions && ng build dev", - "build:dist": "npm run validate-config && npm run server-versions && node --max-old-space-size=8192 node_modules/@angular/cli/bin/ng build dist --prod --stats-json ", - "build:dist:e2e": "npm run validate-config && npm run server-versions && node --max-old-space-size=8192 node_modules/@angular/cli/bin/ng build dist --prod --configuration=e2e --stats-json ", + "build:dist": "npm run validate-config && npm run server-versions && node --max-old-space-size=12000 node_modules/@angular/cli/bin/ng build dist --prod --stats-json ", + "build:dist:e2e": "npm run validate-config && npm run server-versions && node --max-old-space-size=12000 node_modules/@angular/cli/bin/ng build dist --prod --configuration=e2e --stats-json ", "style:dev": "npm run webpack -- --config ./lib/config/webpack.style.js --progress --profile --bail", "test": "npm run validate-config && ng test dev --watch=false", "server-versions": "rimraf ./demo-shell/src/versions.json && npm list --depth=0 --json=true --prod=true > ./demo-shell/src/versions.json || exit 0", @@ -108,7 +108,7 @@ "moment": "2.22.2", "moment-es6": "^1.0.0", "ng2-charts": "1.6.0", - "ngx-monaco-editor": "^7.0.0", + "ngx-monaco-editor": "7.0.0", "pdfjs-dist": "2.0.489", "raphael": "2.2.7", "reflect-metadata": "0.1.13", @@ -129,9 +129,11 @@ "@types/jasmine": "~2.8.3", "@types/jasminewd2": "~2.0.2", "@types/node": "6.0.90", + "@types/selenium-webdriver": "^3.0.8", "ajv-cli": "^3.0.0", "bundlesize": "^0.17.2", "chalk": "^2.3.2", + "chrome-remote-interface": "^0.26.1", "codelyzer": "5.0.0", "commander": "^2.15.1", "concurrently": "^3.5.1", @@ -172,7 +174,7 @@ "ncp": "^2.0.0", "ng-packagr": "4.7.1", "node-sass": "4.9.2", - "protractor": "^5.4.0", + "protractor": "^5.4.2", "protractor-browser-logs": "^1.0.423", "protractor-html-reporter-2": "^1.0.4", "protractor-retry": "^1.2.0", @@ -183,6 +185,7 @@ "rxjs-tslint-rules": "^4.10.0", "sass-loader": "7.1.0", "scss-bundle": "2.3.2", + "selenium-webdriver": "4.0.0-alpha.4", "spdx-license-list": "^5.0.0", "stylelint": "^9.7.1", "ts-node": "~4.1.0", diff --git a/protractor.conf.ts b/protractor.conf.ts index b3fcbb1d45..a46ccfe3dd 100644 --- a/protractor.conf.ts +++ b/protractor.conf.ts @@ -1,21 +1,16 @@ const path = require('path'); const { SpecReporter } = require('jasmine-spec-reporter'); -const jasmineReporters = require('jasmine-reporters'); const retry = require('protractor-retry').retry; const tsConfig = require('./e2e/tsconfig.e2e.json'); const AlfrescoApi = require('@alfresco/js-api').AlfrescoApiCompatibility; const TestConfig = require('./e2e/test.config'); const failFast = require('./e2e/protractor/fail-fast'); - const { beforeAllRewrite, afterAllRewrite, beforeEachAllRewrite, afterEachAllRewrite } = require('./e2e/protractor/override-jasmine'); -const { uploadScreenshot, saveReport } = require('./e2e/protractor/save-remote'); - +const { uploadScreenshot, saveReport, cleanReportFolder } = require('./e2e/protractor/save-remote'); const argv = require('yargs').argv; -const fs = require('fs'); -const rimraf = require('rimraf'); + const projectRoot = path.resolve(__dirname); -const width = 1366; -const height = 768; +const width = 1366, height = 768; let load_env_file = function () { let ENV_FILE = process.env.ENV_FILE; @@ -32,18 +27,17 @@ let BROWSER_RUN = !!process.env.BROWSER_RUN; let FOLDER = process.env.FOLDER || ''; let SELENIUM_SERVER = process.env.SELENIUM_SERVER || ''; let DIRECT_CONNECCT = !SELENIUM_SERVER; -let SELENIUM_PROMISE_MANAGER = parseInt(process.env.SELENIUM_PROMISE_MANAGER); let MAXINSTANCES = process.env.MAXINSTANCES || 1; let TIMEOUT = parseInt(process.env.TIMEOUT, 10); let SAVE_SCREENSHOT = (process.env.SAVE_SCREENSHOT == 'true'); let LIST_SPECS = process.env.LIST_SPECS || []; -let LOG = process.env.LOG ? true : false; +let LOG = !!process.env.LOG; let arraySpecs = []; if (LOG) { console.log('======= PROTRACTOR CONFIGURATION ====== '); - console.log('SAVE_SCREENSHOT : ' + SAVE_SCREENSHOT); console.log('BROWSER_RUN : ' + BROWSER_RUN); + console.log('SAVE_SCREENSHOT : ' + SAVE_SCREENSHOT); console.log('FOLDER : ' + FOLDER); console.log('MAXINSTANCES : ' + MAXINSTANCES); console.log('LIST_SPECS : ' + LIST_SPECS); @@ -51,13 +45,12 @@ if (LOG) { } let browser_options = function () { - let args_options = []; + let args_options = ['--incognito', `--window-size=${width},${height}`, '--disable-gpu', '--disable-web-security', '--disable-browser-side-navigation']; - if (BROWSER_RUN === true) { - args_options = ['--incognito', `--window-size=${width},${height}`, '--disable-gpu', '--disable-web-security', '--disable-browser-side-navigation']; - } else { - args_options = ['--incognito', '--headless', `--window-size=${width},${height}`, '--disable-gpu', '--disable-web-security', '--disable-browser-side-navigation']; + if (BROWSER_RUN !== true) { + args_options.push('--headless') ; } + return args_options; }; @@ -140,7 +133,7 @@ exports.config = { */ seleniumAddress: SELENIUM_SERVER, - SELENIUM_PROMISE_MANAGER: SELENIUM_PROMISE_MANAGER, + SELENIUM_PROMISE_MANAGER: false, plugins: [{ package: 'jasmine2-protractor-utils', @@ -151,15 +144,6 @@ exports.config = { screenshotPath: `${projectRoot}/e2e-output/screenshots/` }], - postTest(results) { - browser.manage().logs() - .get('browser').then(function (browserLog) { - console.log('log: ' + - require('util').inspect(browserLog)); - }); - retry.onCleanUp(results); - }, - onCleanUp(results) { retry.onCleanUp(results); }, @@ -195,15 +179,6 @@ exports.config = { }) ); - let generatedSuiteName = Math.random().toString(36).substr(2, 5); - let junitReporter = new jasmineReporters.JUnitXmlReporter({ - consolidateAll: true, - savePath: `${projectRoot}/e2e-output/junit-report`, - filePrefix: 'results.xml-' + generatedSuiteName, - }); - jasmine.getEnv().addReporter(junitReporter); - - return browser.driver.executeScript(disableCSSAnimation); function disableCSSAnimation() { @@ -225,18 +200,7 @@ exports.config = { beforeLaunch: function () { if (SAVE_SCREENSHOT) { - let reportsFolder = `${projectRoot}/e2e-output/junit-report/`; - - fs.exists(reportsFolder, function (exists, error) { - if (exists) { - rimraf(reportsFolder, function (err) { - }); - } - - if (error) { - console.error('[ERROR] fs', error); - } - }); + cleanReportFolder(); } }, diff --git a/scripts/check-env/check-activiti-env.js b/scripts/check-env/check-activiti-env.js index ed03103ac6..84d7021faf 100755 --- a/scripts/check-env/check-activiti-env.js +++ b/scripts/check-env/check-activiti-env.js @@ -6,7 +6,7 @@ let ACTIVITI7_APPS = require('../../e2e/util/resources').ACTIVITI7_APPS; let config = {}; let absentApps = []; -let pushFaileApps = []; +let pushFailedApps = []; let notRunningApps = []; let host; @@ -97,15 +97,13 @@ async function main() { } async function deleteStaleApps(alfrescoJsApi, notRunningAppAfterWait) { - - notRunningAppAfterWait.forEach(async (currentApp) => { + for (const currentApp of notRunningAppAfterWait) { await deleteApp(alfrescoJsApi, currentApp.entry.name); - }); - + } } async function waitPossibleStaleApps(alfrescoJsApi, notRunning) { - pushFaileApps = []; + pushFailedApps = []; do { console.log(`Wait stale app ${TIMEOUT}`); @@ -113,7 +111,6 @@ async function waitPossibleStaleApps(alfrescoJsApi, notRunning) { console.log(`${currentApp.entry.name } ${currentApp.entry.status}`); }); - sleep(TIMEOUT); counter++; @@ -174,19 +171,19 @@ async function getPushFailedApps(alfrescoJsApi) { }); if (isNotRunning && isNotRunning.entry.status === 'ImagePushFailed') { - pushFaileApps.push(isNotRunning); + pushFailedApps.push(isNotRunning); } }); - if (pushFaileApps.length > 0) { - console.log(`The following apps are pushFaileApps:`); - pushFaileApps.forEach((currentApp) => { + if (pushFailedApps.length > 0) { + console.log(`The following apps are pushFailedApps:`); + pushFailedApps.forEach((currentApp) => { console.log(`App ${currentApp.entry.name } current status ${JSON.stringify(currentApp.entry.status)}`); }); } - return pushFaileApps; + return pushFailedApps; } async function deployAbsentApps(alfrescoJsApi) { diff --git a/scripts/check-env/delete-all-apps.js b/scripts/check-env/delete-all-apps.js index 9077de1e53..6338f48c03 100755 --- a/scripts/check-env/delete-all-apps.js +++ b/scripts/check-env/delete-all-apps.js @@ -42,9 +42,9 @@ async function main() { console.log('Login error' + e); } - Object.keys(ACTIVITI7_APPS).forEach(async (key) => { + for (const key of Object.keys(ACTIVITI7_APPS)) { await deleteApp(alfrescoJsApi, ACTIVITI7_APPS[key].name); - }); + } let notRunning = await getNotRunningApps(this.alfrescoJsApi); diff --git a/scripts/npm-build-all.sh b/scripts/npm-build-all.sh index 0d149526c8..d86b543729 100755 --- a/scripts/npm-build-all.sh +++ b/scripts/npm-build-all.sh @@ -13,7 +13,6 @@ eval GIT_ISH="" eval SINGLE_TEST="" eval EXEC_VERSION_JSAPI=false eval JSAPI_VERSION="" -eval EXECLINT=true eval projects=( "core" "content-services" @@ -94,10 +93,6 @@ exec_install(){ EXEC_INSTALL=false } -skip_lint(){ - EXECLINT=false -} - while [[ $1 == -* ]]; do case "$1" in -h|--help|-\?) show_help; exit 0;; @@ -113,7 +108,6 @@ while [[ $1 == -* ]]; do -c|--clean) clean; shift;; -si|--skipinstall) exec_install; shift;; -sb|--skipbuild) exclude_build; shift;; - -sl|--skip-lint) skip_lint; shift;; -*) echo "invalid option: $1" 1>&2; show_help; exit 1;; esac done @@ -131,10 +125,6 @@ if $EXEC_INSTALL == true; then npm install fi -if $EXECLINT == true; then - ./scripts/lint.sh || exit 1; -fi - if $EXEC_GIT_NPM_INSTALL_JSAPI == true; then echo "====== Use the alfresco JS-API '$GIT_ISH'=====" npm install $GIT_ISH --no-save diff --git a/scripts/test-e2e-lib.sh b/scripts/test-e2e-lib.sh index d8933ec3e2..8f8ff14412 100755 --- a/scripts/test-e2e-lib.sh +++ b/scripts/test-e2e-lib.sh @@ -7,7 +7,7 @@ DEVELOPMENT=false EXECLINT=false LITESERVER=false EXEC_VERSION_JSAPI=false -TIMEOUT=15000 +TIMEOUT=120000 SELENIUM_PROMISE_MANAGER=1 DEBUG=false eval GNU=false @@ -40,7 +40,6 @@ show_help() { echo "-l --lint enable lint" echo "-m --maxInstances max instances parallel for tests" echo "-log or --log print all the browser log" - echo "-disable-control-flow disable control flow" echo "-db or --debug run the debugger" echo "-vjsapi install different version from npm of JS-API defined in the package.json" echo "-gnu for gnu" @@ -150,11 +149,6 @@ max_instances(){ export MAXINSTANCES=$1 } -disable_control_flow(){ - echo "====== disable control flow =====" - SELENIUM_PROMISE_MANAGER=0 -} - version_js_api() { JSAPI_VERSION=$1 @@ -194,7 +188,6 @@ while [[ $1 == -* ]]; do -l|--lint) lint; shift;; -m|--maxInstances) max_instances $2; shift 2;; -vjsapi) version_js_api $2; shift 2;; - -disable-control-flow|--disable-control-flow) disable_control_flow; shift;; -gnu) gnu_mode; shift;; -*) echo "invalid option: $1" 1>&2; show_help; exit 1;; esac diff --git a/scripts/travis/build/build.sh b/scripts/travis/build/build.sh index a60e35c6da..8b135d929d 100755 --- a/scripts/travis/build/build.sh +++ b/scripts/travis/build/build.sh @@ -8,17 +8,9 @@ rm -rf tmp && mkdir tmp; if [[ $TRAVIS_PULL_REQUEST == "false" ]]; then - - if [[ $TRAVIS_BRANCH == "development" ]]; - then - ./scripts/update-version.sh -gnu -alpha || exit 1; - fi - - ./scripts/npm-build-all.sh || exit 1; + ./scripts/npm-build-all.sh -si || exit 1; else ./scripts/update-version.sh -gnu -alpha || exit 1; - npm install; - ./scripts/lint.sh || exit 1; ./scripts/smart-build.sh -b $TRAVIS_BRANCH -gnu || exit 1; fi; diff --git a/scripts/travis/e2e/content-services-e2e.sh b/scripts/travis/e2e/content-services-e2e.sh index 70b0bc146b..9e04695896 100755 --- a/scripts/travis/e2e/content-services-e2e.sh +++ b/scripts/travis/e2e/content-services-e2e.sh @@ -12,7 +12,7 @@ AFFECTED_LIBS="$(./scripts/affected-libs.sh -gnu -b $TRAVIS_BRANCH)"; AFFECTED_E2E="$(./scripts/git-util/affected-folder.sh -b $TRAVIS_BRANCH -f "e2e/$CONTEXT_ENV")"; node ./scripts/check-env/check-cs-env.js --host "$E2E_HOST" -u "$E2E_USERNAME" -p "$E2E_PASSWORD" || exit 1 -RUN_E2E=$(echo ./scripts/test-e2e-lib.sh -host http://localhost:4200 -proxy "$E2E_HOST" -u "$E2E_USERNAME" -p "$E2E_PASSWORD" -e "$E2E_EMAIL" --use-dist -b -m 2 -gnu || exit 1) +RUN_E2E=$(echo ./scripts/test-e2e-lib.sh -host http://localhost:4200 -proxy "$E2E_HOST" -u "$E2E_USERNAME" -p "$E2E_PASSWORD" -e "$E2E_EMAIL" --use-dist -b -m 3 || exit 1) if [[ $AFFECTED_LIBS =~ "testing" || $AFFECTED_LIBS =~ "$CONTEXT_ENV" || $TRAVIS_PULL_REQUEST == "false" ]]; then $RUN_CHECK diff --git a/scripts/travis/e2e/core-e2e.sh b/scripts/travis/e2e/core-e2e.sh index 89bf60fd2b..f2171a0d2c 100755 --- a/scripts/travis/e2e/core-e2e.sh +++ b/scripts/travis/e2e/core-e2e.sh @@ -13,7 +13,7 @@ AFFECTED_E2E="$(./scripts/git-util/affected-folder.sh -b $TRAVIS_BRANCH -f "e2e/ node ./scripts/check-env/check-ps-env.js --host "$E2E_HOST" -u "$E2E_USERNAME" -p "$E2E_PASSWORD" || exit 1 node ./scripts/check-env/check-cs-env.js --host "$E2E_HOST" -u "$E2E_USERNAME" -p "$E2E_PASSWORD" || exit 1 -RUN_E2E=$(echo ./scripts/test-e2e-lib.sh -host http://localhost:4200 -proxy "$E2E_HOST" -u "$E2E_USERNAME" -p "$E2E_PASSWORD" -e "$E2E_EMAIL" --use-dist -b -m 2 -gnu ) +RUN_E2E=$(echo ./scripts/test-e2e-lib.sh -host http://localhost:4200 -proxy "$E2E_HOST" -u "$E2E_USERNAME" -p "$E2E_PASSWORD" -e "$E2E_EMAIL" --use-dist -b -m 3 ) if [[ $AFFECTED_LIBS =~ "testing" || $AFFECTED_LIBS =~ "$CONTEXT_ENV" || $TRAVIS_PULL_REQUEST == "false" ]]; then diff --git a/scripts/travis/e2e/process-services-e2e.sh b/scripts/travis/e2e/process-services-e2e.sh index dcde131902..302867d4c8 100755 --- a/scripts/travis/e2e/process-services-e2e.sh +++ b/scripts/travis/e2e/process-services-e2e.sh @@ -12,7 +12,7 @@ AFFECTED_LIBS="$(./scripts/affected-libs.sh -gnu -b $TRAVIS_BRANCH)"; AFFECTED_E2E="$(./scripts/git-util/affected-folder.sh -b $TRAVIS_BRANCH -f "e2e/$CONTEXT_ENV/")"; node ./scripts/check-env/check-ps-env.js --host "$E2E_HOST" -u "$E2E_USERNAME" -p "$E2E_PASSWORD" || exit 1 -RUN_E2E=$(echo ./scripts/test-e2e-lib.sh -host http://localhost:4200 -proxy "$E2E_HOST" -u "$E2E_USERNAME" -p "$E2E_PASSWORD" -e "$E2E_EMAIL" --use-dist -b -m 2 -gnu ) +RUN_E2E=$(echo ./scripts/test-e2e-lib.sh -host http://localhost:4200 -proxy "$E2E_HOST" -u "$E2E_USERNAME" -p "$E2E_PASSWORD" -e "$E2E_EMAIL" --use-dist -b -m 4 -gnu ) if [[ $AFFECTED_LIBS =~ "testing" || $AFFECTED_LIBS =~ "$CONTEXT_ENV" || $TRAVIS_PULL_REQUEST == "false" ]]; then diff --git a/tslint.json b/tslint.json index fc0e304ecc..757058016a 100644 --- a/tslint.json +++ b/tslint.json @@ -43,7 +43,7 @@ "label-position": true, "max-line-length": [ true, - 180 + 240 ], "member-ordering": [ true,