diff --git a/demo-shell/src/app/components/file-view/file-view.component.html b/demo-shell/src/app/components/file-view/file-view.component.html index e470a96e5d..cd11bb656c 100644 --- a/demo-shell/src/app/components/file-view/file-view.component.html +++ b/demo-shell/src/app/components/file-view/file-view.component.html @@ -283,7 +283,7 @@ [sidebarLeftTemplate]="sidebarLeftTemplate" [sidebarTemplate]="sidebarRightTemplate"> - +

My custom toolbar

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 7fc9f1d0b2..f2df12f86e 100644 --- a/e2e/content-services/document-list/document_list_component.e2e.ts +++ b/e2e/content-services/document-list/document_list_component.e2e.ts @@ -446,9 +446,9 @@ describe('Document List Component', () => { afterAll(async (done) => { Promise.all(folderCreated.map((folder) => uploadActions.deleteFilesOrFolder(this.alfrescoJsApi, folder.entry.id) - )).then( - done() - ); + )).then(() => { + done(); + }); }); it('[C277093] Should sort files with Items per page set to default', async (done) => { @@ -567,7 +567,7 @@ describe('Document List Component', () => { CREATED: 'Created' }; - let funnyUser = {}; + let funnyUser; let pdfFile = new FileModel({ 'name': resources.Files.ADF_DOCUMENTS.PDF.file_name, diff --git a/e2e/core/login/login_component.e2e.ts b/e2e/core/login/login_component.e2e.ts index 19f1386591..62c4d79d0f 100644 --- a/e2e/core/login/login_component.e2e.ts +++ b/e2e/core/login/login_component.e2e.ts @@ -70,69 +70,83 @@ describe('Login component', () => { done(); }); + it('[C276746] Should display the right information in user-info when a different users logs in', () => { + loginPage.loginToContentServicesUsingUserModel(userA); + navigationBarPage.clickUserProfile(); + expect(userInfoDialog.getContentHeaderTitle()).toEqual(userA.firstName + ' ' + userA.lastName); + expect(userInfoDialog.getContentEmail()).toEqual(userA.email); + + loginPage.loginToContentServicesUsingUserModel(userB); + navigationBarPage.clickUserProfile(); + expect(userInfoDialog.getContentHeaderTitle()).toEqual(userB.firstName + ' ' + userB.lastName); + expect(userInfoDialog.getContentEmail()).toEqual(userB.email); + }); + it('[C260036] Should require username', () => { loginPage.goToLoginPage(); loginPage.checkUsernameInactive(); - loginPage.checkSignInButtonIsDisabled(); + expect(loginPage.getSignInButtonIsEnabled()).toBe(false); loginPage.enterUsername('A'); - loginPage.checkUsernameTooltip(errorMessages.username); + expect(loginPage.getUsernameTooltip()).toEqual(errorMessages.username); loginPage.clearUsername(); - loginPage.checkUsernameTooltip(errorMessages.required); + expect(loginPage.getUsernameTooltip()).toEqual(errorMessages.required); loginPage.checkUsernameHighlighted(); - loginPage.checkSignInButtonIsDisabled(); + expect(loginPage.getSignInButtonIsEnabled()).toBe(false); }); it('[C260043] Should require password', () => { loginPage.goToLoginPage(); loginPage.checkPasswordInactive(); - loginPage.checkSignInButtonIsDisabled(); + loginPage.checkUsernameInactive(); loginPage.enterPassword('A'); loginPage.checkPasswordTooltipIsNotVisible(); loginPage.clearPassword(); - loginPage.checkPasswordTooltip(errorMessages.password); + expect(loginPage.getPasswordTooltip()).toEqual(errorMessages.password); loginPage.checkPasswordHighlighted(); - loginPage.checkSignInButtonIsDisabled(); + expect(loginPage.getSignInButtonIsEnabled()).toBe(false); }); it('[C260044] Username should be at least 2 characters long', () => { loginPage.goToLoginPage(); - loginPage.checkSignInButtonIsDisabled(); + expect(loginPage.getSignInButtonIsEnabled()).toBe(false); loginPage.enterUsername('A'); - loginPage.checkUsernameTooltip(errorMessages.username); + expect(loginPage.getUsernameTooltip()).toEqual(errorMessages.username); loginPage.enterUsername('AB'); loginPage.checkUsernameTooltipIsNotVisible(); - loginPage.checkSignInButtonIsDisabled(); + expect(loginPage.getSignInButtonIsEnabled()).toBe(false); loginPage.clearUsername(); }); it('[C260045] Should enable login button after entering a valid username and a password', () => { loginPage.goToLoginPage(); loginPage.enterUsername(adminUserModel.id); - loginPage.checkSignInButtonIsDisabled(); + expect(loginPage.getSignInButtonIsEnabled()).toBe(false); loginPage.enterPassword('a'); - loginPage.checkSignInButtonIsEnabled(); - loginPage.clearUsername(adminUserModel.id); + expect(loginPage.getSignInButtonIsEnabled()).toBe(true); + loginPage.clearUsername(); loginPage.clearPassword(); }); it('[C260046] Should NOT be possible to login with an invalid username/password', () => { loginPage.goToLoginPage(); - loginPage.checkSignInButtonIsDisabled(); + expect(loginPage.getSignInButtonIsEnabled()).toBe(false); loginPage.enterUsername('test'); loginPage.enterPassword('test'); - loginPage.checkSignInButtonIsEnabled(); + expect(loginPage.getSignInButtonIsEnabled()).toBe(true); loginPage.clickSignInButton(); - loginPage.checkLoginError(errorMessages.invalid_credentials); + expect(loginPage.getLoginError()).toEqual(errorMessages.invalid_credentials); loginPage.clearUsername(); loginPage.clearPassword(); }); it('[C260047] Password should be crypted', () => { loginPage.goToLoginPage(); - loginPage.checkSignInButtonIsDisabled(); + expect(loginPage.getSignInButtonIsEnabled()).toBe(false); loginPage.enterPassword('test'); loginPage.showPassword(); - loginPage.checkPasswordIsShown('test'); + loginPage.getShownPassword().then(async (tooltip) => { + await expect(tooltip).toEqual('test'); + }); loginPage.hidePassword(); loginPage.checkPasswordIsHidden(); loginPage.clearPassword(); @@ -152,7 +166,7 @@ describe('Login component', () => { it('[C260049] Should be possible to login to Process Services with Content Services disabled', () => { loginPage.goToLoginPage(); - loginPage.checkSignInButtonIsDisabled(); + expect(loginPage.getSignInButtonIsEnabled()).toBe(false); settingsPage.setProviderBpm(); loginPage.login(adminUserModel.id, adminUserModel.password); navigationBarPage.navigateToProcessServicesPage(); @@ -163,7 +177,7 @@ describe('Login component', () => { it('[C260050] Should be possible to login to Content Services with Process Services disabled', () => { loginPage.goToLoginPage(); - loginPage.checkSignInButtonIsDisabled(); + expect(loginPage.getSignInButtonIsEnabled()).toBe(false); settingsPage.setProviderEcm(); loginPage.login(TestConfig.adf.adminUser, TestConfig.adf.adminPassword); navigationBarPage.clickContentServicesButton(); @@ -174,7 +188,7 @@ describe('Login component', () => { it('[C260051] Should be able to login to both Content Services and Process Services', () => { settingsPage.setProviderEcmBpm(); - loginPage.checkSignInButtonIsDisabled(); + expect(loginPage.getSignInButtonIsEnabled()).toBe(false); settingsPage.setProviderEcmBpm(); loginPage.login(adminUserModel.id, adminUserModel.password); navigationBarPage.navigateToProcessServicesPage(); @@ -188,8 +202,8 @@ describe('Login component', () => { it('[C277754] Should the user be redirect to the login page when the Content Service session expire', () => { settingsPage.setProviderEcmBpm(); loginPage.login(adminUserModel.id, adminUserModel.password); - browser.executeScript('window.localStorage.removeItem("ticket-ECM");').then(() => { - browser.get(TestConfig.adf.url + '/files'); + browser.executeScript('window.localStorage.removeItem("ticket-ECM");').then(async () => { + await browser.get(TestConfig.adf.url + '/files'); loginPage.waitForElements(); }); @@ -206,8 +220,8 @@ describe('Login component', () => { it('[C279931] Should the user be redirect to the login page when the Process Service session expire', () => { settingsPage.setProviderEcmBpm(); loginPage.login(adminUserModel.id, adminUserModel.password); - browser.executeScript('window.localStorage.removeItem("ticket-BPM");').then(() => { - browser.get(TestConfig.adf.url + '/activiti'); + browser.executeScript('window.localStorage.removeItem("ticket-BPM");').then(async () => { + await browser.get(TestConfig.adf.url + '/activiti'); loginPage.waitForElements(); }); }); @@ -230,18 +244,6 @@ describe('Login component', () => { }); }); - it('[C276746] Should display the right information in user-info when a different users logs in', () => { - loginPage.loginToContentServicesUsingUserModel(userA); - navigationBarPage.clickUserProfile(); - expect(userInfoDialog.getContentHeaderTitle()).toEqual(userA.firstName + ' ' + userA.lastName); - expect(userInfoDialog.getContentEmail()).toEqual(userA.email); - - loginPage.loginToContentServicesUsingUserModel(userB); - navigationBarPage.clickUserProfile(); - expect(userInfoDialog.getContentHeaderTitle()).toEqual(userB.firstName + ' ' + userB.lastName); - expect(userInfoDialog.getContentEmail()).toEqual(userB.email); - }); - it('[C279933] Should be possible change the login component logo when logoImageUrl is changed', () => { settingsPage.setProviderEcmBpm(); loginPage.enableLogoSwitch(); diff --git a/e2e/core/viewer/viewer_component.e2e.ts b/e2e/core/viewer/viewer_component.e2e.ts index ad8ce642a9..7bdffaf517 100644 --- a/e2e/core/viewer/viewer_component.e2e.ts +++ b/e2e/core/viewer/viewer_component.e2e.ts @@ -21,6 +21,8 @@ import { LoginPage } from '../../pages/adf/loginPage'; import { ViewerPage } from '../../pages/adf/viewerPage'; import { NavigationBarPage } from '../../pages/adf/navigationBarPage'; import { ContentServicesPage } from '../../pages/adf/contentServicesPage'; +import ContentListPage = require('../../pages/adf/dialog/contentList'); +import { ShareDialog } from '../../pages/adf/dialog/shareDialog'; import resources = require('../../util/resources'); import Util = require('../../util/util'); @@ -32,6 +34,7 @@ import AcsUserModel = require('../../models/ACS/acsUserModel'); import AlfrescoApi = require('alfresco-js-api-node'); import { UploadActions } from '../../actions/ACS/upload.actions'; +import { browser } from 'protractor'; describe('Viewer', () => { @@ -43,6 +46,8 @@ describe('Viewer', () => { let site; let acsUser = new AcsUserModel(); let pngFileUploaded; + const contentList = new ContentListPage(); + const shareDialog = new ShareDialog(); let pngFileInfo = new FileModel({ 'name': resources.Files.ADF_DOCUMENTS.PNG.file_name, @@ -111,6 +116,19 @@ describe('Viewer', () => { done(); }); + it('[C272813] Should be redirected to site when opening and closing a file in a site', () => { + loginPage.loginToContentServicesUsingUserModel(acsUser); + + navigationBarPage.goToSite(site); + contentServicesPage.checkAcsContainer(); + + viewerPage.viewFile(pngFileUploaded.entry.name); + + viewerPage.checkImgViewerIsDisplayed(); + + viewerPage.clickCloseButton(); + }); + describe('Archive Folder Uploaded', () => { let uploadedArchives; let archiveFolderUploaded; @@ -355,14 +373,64 @@ describe('Viewer', () => { }); - it('[C272813] Should be redirected to site when opening and closing a file in a site', () => { - navigationBarPage.goToSite(site); - viewerPage.checkDatatableHeaderIsDisplayed(); + describe('Display files via API', () => { - viewerPage.viewFile(pngFileUploaded.entry.name); + let wordFileInfo = new FileModel({ + 'name': resources.Files.ADF_DOCUMENTS.DOCX_SUPPORTED.file_name, + 'location': resources.Files.ADF_DOCUMENTS.DOCX_SUPPORTED.file_location + }); - viewerPage.checkImgViewerIsDisplayed(); + let pngFileShared, wordFileUploaded; - viewerPage.clickCloseButton(); + beforeAll(async (done) => { + await this.alfrescoJsApi.login(acsUser.id, acsUser.password); + + wordFileUploaded = await uploadActions.uploadFile(this.alfrescoJsApi, wordFileInfo.location, wordFileInfo.name, '-my-'); + + pngFileShared = await this.alfrescoJsApi.core.sharedlinksApi.addSharedLink({'nodeId': pngFileUploaded.entry.id}); + + done(); + }); + + afterAll(async (done) => { + await this.alfrescoJsApi.login(acsUser.id, acsUser.password); + await uploadActions.deleteFilesOrFolder(this.alfrescoJsApi, wordFileUploaded.entry.id); + done(); + }); + + beforeEach(() => { + loginPage.loginToContentServicesUsingUserModel(acsUser); + }); + + it('[C260105] Should be able to open an image file shared via API', () => { + browser.get(TestConfig.adf.url + '/preview/s/' + pngFileShared.entry.id); + viewerPage.checkImgContainerIsDisplayed(); + browser.get(TestConfig.adf.url); + navigationBarPage.clickLogoutButton(); + browser.get(TestConfig.adf.url + '/preview/s/' + pngFileShared.entry.id); + viewerPage.checkImgContainerIsDisplayed(); + }); + + it('[C260106] Should be able to open a Word file shared via API', () => { + contentServicesPage.navigateToDocumentList(); + + contentList.clickRowToSelect(wordFileInfo.name); + contentServicesPage.clickShareButton(); + shareDialog.checkDialogIsDisplayed(); + shareDialog.clickShareLinkButton(); + browser.controlFlow().execute(async () => { + let sharedLink = await shareDialog.getShareLink(); + + await browser.get(sharedLink); + viewerPage.checkFileIsLoaded(); + viewerPage.checkFileNameIsDisplayed(wordFileInfo.name); + + await browser.get(TestConfig.adf.url); + navigationBarPage.clickLogoutButton(); + await browser.get(sharedLink); + viewerPage.checkFileIsLoaded(); + viewerPage.checkFileNameIsDisplayed(wordFileInfo.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 new file mode 100644 index 0000000000..93e8df9504 --- /dev/null +++ b/e2e/core/viewer/viewer_custom_toolbar_info-drawer.e2e.ts @@ -0,0 +1,98 @@ +/*! + * @license + * Copyright 2016 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 TestConfig = require('../../test.config'); + +import { LoginPage } from '../../pages/adf/loginPage'; +import { ViewerPage } from '../../pages/adf/viewerPage'; +import { ContentServicesPage } from '../../pages/adf/contentServicesPage'; + +import resources = require('../../util/resources'); + +import FileModel = require('../../models/ACS/fileModel'); +import AcsUserModel = require('../../models/ACS/acsUserModel'); + +import AlfrescoApi = require('alfresco-js-api-node'); +import { UploadActions } from '../../actions/ACS/upload.actions'; + +describe('Viewer', () => { + + let viewerPage = new ViewerPage(); + let loginPage = new LoginPage(); + let contentServicesPage = new ContentServicesPage(); + let uploadActions = new UploadActions(); + let acsUser = new AcsUserModel(); + let txtFileUploaded; + + let txtFileInfo = new FileModel({ + 'name': resources.Files.ADF_DOCUMENTS.TXT.file_name, + 'location': resources.Files.ADF_DOCUMENTS.TXT.file_location + }); + + beforeAll(async (done) => { + + this.alfrescoJsApi = new AlfrescoApi({ + provider: 'ECM', + hostEcm: TestConfig.adf.url + }); + + await this.alfrescoJsApi.login(TestConfig.adf.adminEmail, TestConfig.adf.adminPassword); + await this.alfrescoJsApi.core.peopleApi.addPerson(acsUser); + + await this.alfrescoJsApi.login(acsUser.id, acsUser.password); + + txtFileUploaded = await uploadActions.uploadFile(this.alfrescoJsApi, txtFileInfo.location, txtFileInfo.name, '-my-'); + + loginPage.loginToContentServicesUsingUserModel(acsUser); + + done(); + }); + + afterAll(async (done) => { + await uploadActions.deleteFilesOrFolder(this.alfrescoJsApi, txtFileUploaded.entry.id); + done(); + }); + + beforeEach(() => { + contentServicesPage.goToDocumentList(); + contentServicesPage.doubleClickRow(txtFileUploaded.entry.name); + }); + + afterEach(() => { + 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('[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'); + }); +}); diff --git a/e2e/core/viewer/viewer_properties.e2e.ts b/e2e/core/viewer/viewer_properties.e2e.ts index cbb4cb60a2..d3a1662abb 100644 --- a/e2e/core/viewer/viewer_properties.e2e.ts +++ b/e2e/core/viewer/viewer_properties.e2e.ts @@ -15,13 +15,13 @@ * limitations under the License. */ -import { browser } from 'protractor'; - import TestConfig = require('../../test.config'); import { LoginPage } from '../../pages/adf/loginPage'; import { ContentServicesPage } from '../../pages/adf/contentServicesPage'; import { ViewerPage } from '../../pages/adf/viewerPage'; +import { NavigationBarPage } from '../../pages/adf/navigationBarPage'; +import DataTablePage = require('../../pages/adf/dataTablePage'); import resources = require('../../util/resources'); @@ -37,12 +37,19 @@ describe('Viewer - properties', () => { let viewerPage = new ViewerPage(); let contentServicesPage = new ContentServicesPage(); let loginPage = new LoginPage(); + let navigationBarPage = new NavigationBarPage(); + let dataTable = new DataTablePage(); let pngFile = new FileModel({ 'name': resources.Files.ADF_DOCUMENTS.PNG.file_name, 'location': resources.Files.ADF_DOCUMENTS.PNG.file_location }); + let fileForOverlay = new FileModel({ + 'name': 'fileForOverlay.png', + 'location': resources.Files.ADF_DOCUMENTS.PNG.file_location + }); + beforeAll(async (done) => { let uploadActions = new UploadActions(); @@ -60,6 +67,9 @@ describe('Viewer - properties', () => { let pngFileUploaded = await uploadActions.uploadFile(this.alfrescoJsApi, pngFile.location, pngFile.name, '-my-'); Object.assign(pngFile, pngFileUploaded.entry); + pngFileUploaded = await uploadActions.uploadFile(this.alfrescoJsApi, fileForOverlay.location, fileForOverlay.name, '-my-'); + Object.assign(fileForOverlay, pngFileUploaded.entry); + loginPage.loginToContentServicesUsingUserModel(acsUser); contentServicesPage.goToDocumentList(); @@ -181,4 +191,24 @@ describe('Viewer - properties', () => { viewerPage.checkLeftSideBarButtonIsNotDisplayed(); viewerPage.checkLeftSideBarIsNotDisplayed(); }); + + it('[C260100] Should be possible to disable Overlay viewer', () => { + viewerPage.clickCloseButton(); + navigationBarPage.clickOverlayViewerButton(); + + dataTable.doubleClickRow(fileForOverlay.name); + viewerPage.checkOverlayViewerIsDisplayed(); + viewerPage.clickCloseButton(); + dataTable.doubleClickRow(pngFile.name); + viewerPage.checkOverlayViewerIsDisplayed(); + viewerPage.clickCloseButton(); + + viewerPage.disableOverlay(); + dataTable.doubleClickRow(fileForOverlay.name); + viewerPage.checkImgContainerIsDisplayed(); + viewerPage.checkInlineViewerIsDisplayed(); + dataTable.doubleClickRow(pngFile.name); + viewerPage.checkImgContainerIsDisplayed(); + viewerPage.checkInlineViewerIsDisplayed(); + }); }); diff --git a/e2e/pages/adf/dataTablePage.js b/e2e/pages/adf/dataTablePage.js index 4fa75a76a5..570251cb68 100644 --- a/e2e/pages/adf/dataTablePage.js +++ b/e2e/pages/adf/dataTablePage.js @@ -15,6 +15,8 @@ * limitations under the License. */ +import { element, by, browser } from 'protractor'; + var TestConfig = require('../../test.config'); var Util = require('../../util/util'); @@ -133,7 +135,7 @@ var DataTablePage = function (rootElement = element(by.css("adf-datatable"))) { * @param {String} row number */ this.selectRowWithKeyboard = function (rowNumber) { - var row = this.getRowByRowNumber(rowNumber); + let row = this.getRowByRowNumber(rowNumber); browser.actions().sendKeys(protractor.Key.COMMAND).click(row).perform(); }; @@ -143,7 +145,7 @@ var DataTablePage = function (rootElement = element(by.css("adf-datatable"))) { * @param {String} selection mode */ this.selectSelectionMode = function (selectionMode) { - var selectMode = element(by.cssContainingText("span[class='mat-option-text']", selectionMode)); + let selectMode = element(by.cssContainingText("span[class='mat-option-text']", selectionMode)); selectionButton.click(); Util.waitUntilElementIsVisible(selectionDropDown); selectMode.click(); @@ -155,7 +157,7 @@ var DataTablePage = function (rootElement = element(by.css("adf-datatable"))) { * @param {String} row number */ this.checkRowIsSelected = function (rowNumber) { - var isRowSelected = this.getRowByRowNumber(rowNumber).element(by.xpath("ancestor::div[contains(@class, 'is-selected')]")); + let isRowSelected = this.getRowByRowNumber(rowNumber).element(by.xpath("ancestor::div[contains(@class, 'is-selected')]")); Util.waitUntilElementIsVisible(isRowSelected); }; @@ -165,7 +167,7 @@ var DataTablePage = function (rootElement = element(by.css("adf-datatable"))) { * @param {String} row number */ this.checkRowIsNotSelected = function (rowNumber) { - var isRowSelected = this.getRowByRowNumber(rowNumber).element(by.xpath("ancestor::div[contains(@class, 'adf-datatable-row custom-row-style ng-star-inserted is-selected')]")); + let isRowSelected = this.getRowByRowNumber(rowNumber).element(by.xpath("ancestor::div[contains(@class, 'adf-datatable-row custom-row-style ng-star-inserted is-selected')]")); Util.waitUntilElementIsNotOnPage(isRowSelected); }; @@ -231,7 +233,7 @@ var DataTablePage = function (rootElement = element(by.css("adf-datatable"))) { * @param {String} id */ this.replaceRows = function (id) { - var rowID = this.getRowByRowNumber(id); + let rowID = this.getRowByRowNumber(id); Util.waitUntilElementIsVisible(rowID); replaceRows.click(); Util.waitUntilElementIsNotOnPage(rowID); @@ -248,13 +250,23 @@ var DataTablePage = function (rootElement = element(by.css("adf-datatable"))) { }; this.getRowsName = function (content) { - var row = element(by.css("div[data-automation-id*='" + content + "']")); + let row = element(by.css("div[data-automation-id*='" + content + "']")); Util.waitUntilElementIsPresent(row); return row; }; + this.doubleClickRow = function (rowName) { + let row = this.getRowByRowName(rowName); + Util.waitUntilElementIsVisible(row); + Util.waitUntilElementIsClickable(row); + row.click(); + Util.waitUntilElementIsVisible(row.all(by.css("div[class*='--image'] mat-icon[svgicon*='selected']")).first()); + browser.actions().sendKeys(protractor.Key.ENTER).perform(); + return this; + }; + this.getRowByRowName = function (content) { - var rowByRowName = by.xpath("ancestor::div[contains(@class, 'adf-datatable-row')]"); + let rowByRowName = by.xpath("ancestor::div[contains(@class, 'adf-datatable-row')]"); Util.waitUntilElementIsPresent(this.getRowsName(content).element(rowByRowName)); return this.getRowsName(content).element(rowByRowName); }; @@ -264,7 +276,7 @@ var DataTablePage = function (rootElement = element(by.css("adf-datatable"))) { }; this.insertFilter = function (filterText) { - var inputFilter = element(by.xpath("//*[@id=\"adf-datatable-filter-input\"]")); + let inputFilter = element(by.xpath("//*[@id=\"adf-datatable-filter-input\"]")); inputFilter.clear(); return inputFilter.sendKeys(filterText); }; diff --git a/e2e/pages/adf/dialog/shareDialog.ts b/e2e/pages/adf/dialog/shareDialog.ts index 505a5e0ff8..da52cc85ab 100644 --- a/e2e/pages/adf/dialog/shareDialog.ts +++ b/e2e/pages/adf/dialog/shareDialog.ts @@ -119,7 +119,6 @@ export class ShareDialog { setDefaultDay() { const selector = '.mat-datetimepicker-calendar-body-active .mat-datetimepicker-calendar-body-cell-content'; Util.waitUntilElementIsVisible(this.dayPicker); - const tomorrow = moment().add(1, 'day').date(); let tomorrow = new Date(new Date().getTime() + 24 * 60 * 60 * 1000).getDate().toString(); this.dayPicker.element(by.cssContainingText(selector, tomorrow)).click(); } diff --git a/e2e/pages/adf/loginPage.ts b/e2e/pages/adf/loginPage.ts index bf98e0312d..fce435f94a 100644 --- a/e2e/pages/adf/loginPage.ts +++ b/e2e/pages/adf/loginPage.ts @@ -73,7 +73,12 @@ export class LoginPage { clearUsername() { Util.waitUntilElementIsVisible(this.txtUsername); this.txtUsername.click(); - return this.txtUsername.clear(); + this.txtUsername.getAttribute('value').then((value) => { + for (let i = value.length; i >= 0; i--) { + this.txtUsername.sendKeys(protractor.Key.BACK_SPACE); + } + }); + return this; } clearPassword() { @@ -85,26 +90,24 @@ export class LoginPage { }); } - checkUsernameTooltip() { + getUsernameTooltip() { Util.waitUntilElementIsVisible(this.usernameTooltip); + return this.usernameTooltip.getText(); } - checkPasswordTooltip() { + getPasswordTooltip() { Util.waitUntilElementIsVisible(this.passwordTooltip); + return this.passwordTooltip.getText(); } - checkLoginError(message) { + getLoginError() { Util.waitUntilElementIsVisible(this.loginTooltip); - browser.controlFlow().execute(async () => { - await expect(this.loginTooltip.getText()).toEqual(message); - }); + return this.loginTooltip.getText(); } checkLoginImgURL(url) { Util.waitUntilElementIsVisible(this.logoImg); - browser.controlFlow().execute(async () => { - await expect(this.logoImg.getAttribute('src')).toEqual(url); - }); + return this.logoImg.getAttribute('src'); } checkUsernameInactive() { @@ -133,11 +136,9 @@ export class LoginPage { Util.waitUntilElementIsNotVisible(this.passwordTooltip); } - checkSignInButtonIsEnabled() { + getSignInButtonIsEnabled() { Util.waitUntilElementIsVisible(this.signInButton); - browser.controlFlow().execute(async () => { - await expect(this.signInButton.isEnabled()).toBe(true); - }); + return this.signInButton.isEnabled(); } loginToProcessServicesUsingUserModel(userModel) { @@ -166,13 +167,6 @@ export class LoginPage { this.waitForElements(); } - checkSignInButtonIsDisabled() { - Util.waitUntilElementIsVisible(this.signInButton); - browser.controlFlow().execute(async () => { - await expect(this.signInButton.isEnabled()).toBe(false); - }); - } - clickSignInButton() { Util.waitUntilElementIsVisible(this.signInButton); this.signInButton.click(); @@ -188,10 +182,8 @@ export class LoginPage { this.hidePasswordElement.click(); } - checkPasswordIsShown(password) { - this.txtPassword.getAttribute('value').then(async (text) => { - await expect(text).toEqual(password); - }); + getShownPassword() { + return this.txtPassword.getAttribute('value'); } checkPasswordIsHidden() { diff --git a/e2e/pages/adf/navigationBarPage.ts b/e2e/pages/adf/navigationBarPage.ts index c557111c81..0a3795db2d 100644 --- a/e2e/pages/adf/navigationBarPage.ts +++ b/e2e/pages/adf/navigationBarPage.ts @@ -30,6 +30,7 @@ export class NavigationBarPage { processServicesCloudButton = element(by.css('a[data-automation-id="Process Cloud"]')); loginButton = element(by.css('a[data-automation-id="Login"]')); trashcanButton = element(by.css('a[data-automation-id="Trashcan"]')); + overlayViewerButton = element(by.css('a[data-automation-id="Overlay Viewer"]')); userProfileButton = element(by.css('button[data-automation-id="adf-user-profile"]')); themeButton = element(by.css('button[data-automation-id="theme menu"]')); themeMenuContent = element(by.css('div[class*="mat-menu-panel"]')); @@ -79,6 +80,12 @@ export class NavigationBarPage { this.trashcanButton.click(); } + clickOverlayViewerButton() { + Util.waitUntilElementIsVisible(this.overlayViewerButton); + this.overlayViewerButton.click(); + return this; + } + clickUserProfile() { Util.waitUntilElementIsVisible(this.userProfileButton); this.userProfileButton.click(); diff --git a/e2e/pages/adf/viewerPage.ts b/e2e/pages/adf/viewerPage.ts index e387e09fb0..b9e39e3430 100644 --- a/e2e/pages/adf/viewerPage.ts +++ b/e2e/pages/adf/viewerPage.ts @@ -56,12 +56,10 @@ export class ViewerPage { 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')); - pageCanvas = element.all(by.css('div[class="canvasWrapper"]')).first(); 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"]')); - uploadNewVersionButton = element(by.css('input[data-automation-id="upload-single-file"]')); toolbarSwitch = element(by.id('adf-switch-toolbar')); toolbar = element(by.id('adf-viewer-toolbar')); datatableHeader = element(by.css('div.adf-datatable-header')); @@ -71,6 +69,8 @@ export class ViewerPage { openWith = element(by.id('adf-viewer-openwith')); 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"]')); showRightSidebarSwitch = element(by.id('adf-switch-showrightsidebar')); showLeftSidebarSwitch = element(by.id('adf-switch-showleftsidebar')); @@ -94,24 +94,6 @@ export class ViewerPage { timeButton = element(by.id('adf-viewer-time')); bugButton = element(by.id('adf-viewer-bug')); - canvasHeight() { - let deferred = protractor.promise.defer(); - this.pageCanvas.getAttribute('style').then(function (value) { - let canvasHeight = value.split('height: ')[1].split('px')[0]; - deferred.fulfill(canvasHeight); - }); - return deferred.promise; - } - - canvasWidth() { - let deferred = protractor.promise.defer(); - this.pageCanvas.getAttribute('style').then(function (value) { - let canvasWidth = value.split('width: ')[1].split('px')[0]; - deferred.fulfill(canvasWidth); - }); - return deferred.promise; - } - viewFile(fileName) { let fileView = element.all(by.xpath('//div[@id="document-list-container"]//div[@filename="' + fileName + '"]')).first(); Util.waitUntilElementIsVisible(fileView); @@ -176,7 +158,9 @@ export class ViewerPage { checkCurrentThumbnailIsSelected() { let selectedThumbnail = element(by.css('adf-pdf-thumb[class="pdf-thumbnails__thumb ng-star-inserted pdf-thumbnails__thumb--selected"] > img')); this.pageSelectorInput.getAttribute('value').then(function (pageNumber) { - expect('Page ' + pageNumber).toEqual(selectedThumbnail.getAttribute('title')); + browser.controlFlow().execute(async () => { + expect('Page ' + pageNumber).toEqual(await selectedThumbnail.getAttribute('title')); + }); }); } @@ -238,10 +222,6 @@ export class ViewerPage { Util.waitUntilElementIsVisible(this.zoomInButton); } - checkZoomInButtonIsDisplayed(timeout) { - Util.waitUntilElementIsVisible(this.zoomInButton, timeout); - } - checkZoomInButtonIsNotDisplayed() { Util.waitUntilElementIsNotVisible(this.zoomInButton); } @@ -339,6 +319,17 @@ export class ViewerPage { return this.infoButton.click(); } + clickOnTab(tabName) { + this.tabsPage.clickTabByTitle(tabName); + return this; + } + + checkTabIsActive(tabName) { + let tab = element(by.cssContainingText('.adf-info-drawer-layout-content div.mat-tab-labels div.mat-tab-label-active .mat-tab-label-content', tabName)); + Util.waitUntilElementIsVisible(tab); + return this; + } + clickLeftSidebarButton() { Util.waitUntilElementIsVisible(this.leftSideBarButton); return this.leftSideBarButton.click(); @@ -433,22 +424,6 @@ export class ViewerPage { return this.activeTab.getText(); } - clickOnVersionsTab() { - clickRightChevronToGetToTab('Versions'); - tabsPage.clickTabByTitle('Versions'); - return this; - } - - checkUploadVersionsButtonIsDisplayed() { - Util.waitUntilElementIsVisible(this.uploadNewVersionButton); - return this; - } - - checkVersionIsDisplayed(version) { - Util.waitUntilElementIsVisible(element(by.cssContainingText('h4[class*="adf-version-list-item-name"]', version))); - return this; - } - clickOnCommentsTab() { this.tabsPage.clickTabByTitle('Comments'); return this; @@ -600,6 +575,21 @@ export class ViewerPage { this.formControllersPage.enableToggle(this.moreActionsSwitch); } + disableCustomToolbar() { + this.formControllersPage.disableToggle(this.customToolbarToggle); + return this; + } + + enableCustomToolbar() { + this.formControllersPage.enableToggle(this.customToolbarToggle); + return this; + } + + checkCustomToolbarIsDisplayed() { + Util.waitUntilElementIsVisible(this.customToolbar); + return this; + } + disableCustomName() { this.formControllersPage.disableToggle(this.customNameSwitch); } @@ -626,4 +616,19 @@ export class ViewerPage { textField.sendKeys(text); return this; } + + disableOverlay() { + this.formControllersPage.disableToggle(element(by.id('adf-viewer-overlay'))); + return this; + } + + checkOverlayViewerIsDisplayed() { + Util.waitUntilElementIsVisible(this.viewer.element(by.css('div[class*="adf-viewer-overlay-container"]'))); + return this; + } + + checkInlineViewerIsDisplayed() { + Util.waitUntilElementIsVisible(this.viewer.element(by.css('div[class*="adf-viewer-inline-container"]'))); + return this; + } }