From 22d65f006de80292ffcd8230e85250bb62c001f7 Mon Sep 17 00:00:00 2001 From: Ketevani Kvirikashvili Date: Wed, 16 Feb 2022 00:57:23 +0200 Subject: [PATCH] [AAE-7154] Automate upload file dialog (#2418) * [AAE-7154] Automate upload files dialog * [ACA-71546] Fix for sigout * update test * delete comment * fix lint * fix * fix after CR * CR Co-authored-by: Bartosz Sekula --- .../upload-download/upload-file.test.ts | 49 +++++++++++++++---- e2e/suites/viewer/viewer-actions.test.ts | 14 +++--- .../src/components/dialog/index.ts | 1 + .../components/dialog/upload-files-dialog.ts | 40 +++++++++++++++ projects/aca-testing-shared/src/pages/page.ts | 21 +++----- 5 files changed, 94 insertions(+), 31 deletions(-) create mode 100644 projects/aca-testing-shared/src/components/dialog/upload-files-dialog.ts diff --git a/e2e/suites/actions/upload-download/upload-file.test.ts b/e2e/suites/actions/upload-download/upload-file.test.ts index aa06a1f96..a9f3fcae1 100755 --- a/e2e/suites/actions/upload-download/upload-file.test.ts +++ b/e2e/suites/actions/upload-download/upload-file.test.ts @@ -50,19 +50,48 @@ describe('Upload files', () => { beforeEach(async (done) => { await page.clickPersonalFilesAndWait(); - done(); - }); - - afterAll(async (done) => { - await apis.user.nodes.deleteNodeById(folder1Id); - done(); - }); - - it('Upload a file', async () => { await dataTable.doubleClickOnRowByName(folder1); await page.sidenav.openNewMenu(); await page.sidenav.menu.uploadFilesInput.sendKeys(`${__dirname}/upload-file.test.ts`); + await page.sidenav.closeNewMenu(); + await page.uploadFilesDialog.uploadDialog.isVisible(); + done(); + }); - expect(await dataTable.isItemPresent('upload-file.test.ts')).toBe(true, 'file not uploaded'); + afterAll(async () => { + await apis.user.nodes.deleteNodeById(folder1Id); + }); + + it('Upload a file', async () => { + const uploadedFiles = await dataTable.isItemPresent('upload-file.test.ts'); + expect(uploadedFiles).toBe(true, 'file not uploaded'); + }); + + it('[T14752064] Close the upload dialog ', async () => { + await page.uploadFilesDialog.closeUploadButton.click(); + await page.uploadFilesDialog.uploadDialog.isPresent(); + await expect(await page.uploadFilesDialog.uploadDialog.isVisible()).toBe(false); + }); + + it('[T14752051] Minimize / maximize the upload dialog ', async () => { + await page.uploadFilesDialog.minimizeButton.click(); + await expect(await page.uploadFilesDialog.uploadedFiles.waitNotVisible()).toBe(true); + + await page.uploadFilesDialog.maximizeButton.click(); + await expect(await page.uploadFilesDialog.uploadedFiles.waitVisible()).toBe(true); + }); + + it('[T14752053] Upload history is expunged on browser login/logout ', async () => { + await page.signOut(); + await loginPage.loginWith(username); + const isUploadDialogVisible = await page.uploadFilesDialog.uploadDialog.isVisible(); + + await expect(isUploadDialogVisible).toBe(false); + }); + + it('[T14752052] Upload dialog remains fixed in the browser when user performs other actions in parallel ', async () => { + await expect(page.uploadFilesDialog.uploadDialog.isVisible()).toBe(true); + await page.clickPersonalFiles(); + await expect(page.uploadFilesDialog.uploadDialog.isVisible()).toBe(true); }); }); diff --git a/e2e/suites/viewer/viewer-actions.test.ts b/e2e/suites/viewer/viewer-actions.test.ts index 612be248b..5f7228c82 100755 --- a/e2e/suites/viewer/viewer-actions.test.ts +++ b/e2e/suites/viewer/viewer-actions.test.ts @@ -35,7 +35,8 @@ import { ContentNodeSelectorDialog, ShareDialog, ManageVersionsDialog, - UploadNewVersionDialog + UploadNewVersionDialog, + UploadFilesDialog } from '@alfresco/aca-testing-shared'; import { BrowserActions, Logger } from '@alfresco/adf-testing'; @@ -62,6 +63,7 @@ describe('Viewer actions', () => { const uploadNewVersionDialog = new UploadNewVersionDialog(); const adminApiActions = new AdminActions(); const userActions = new UserActions(); + const uploadFilesDialog = new UploadFilesDialog(); beforeAll(async () => { await adminApiActions.createUser({ username }); @@ -129,7 +131,7 @@ describe('Viewer actions', () => { afterEach(async () => { await Utils.pressEscape(); - await page.closeUploadDialog(); + await uploadFilesDialog.closeUploadDialog(); }); afterAll(async () => { @@ -370,7 +372,7 @@ describe('Viewer actions', () => { afterEach(async () => { await Utils.pressEscape(); - await page.closeUploadDialog(); + await uploadFilesDialog.closeUploadDialog(); }); afterAll(async () => { @@ -564,7 +566,7 @@ describe('Viewer actions', () => { afterEach(async () => { await Utils.pressEscape(); - await page.closeUploadDialog(); + await uploadFilesDialog.closeUploadDialog(); }); afterAll(async () => { @@ -776,7 +778,7 @@ describe('Viewer actions', () => { try { await page.closeOpenDialogs(); await Utils.pressEscape(); - await page.closeUploadDialog(); + await uploadFilesDialog.closeUploadDialog(); } catch (error) { Logger.error(`----- afterEach failed : ${error}`); } @@ -980,7 +982,7 @@ describe('Viewer actions', () => { afterEach(async () => { await Utils.pressEscape(); - await page.closeUploadDialog(); + await uploadFilesDialog.closeUploadDialog(); }); afterAll(async () => { diff --git a/projects/aca-testing-shared/src/components/dialog/index.ts b/projects/aca-testing-shared/src/components/dialog/index.ts index 6f01dc2db..206eea8b3 100644 --- a/projects/aca-testing-shared/src/components/dialog/index.ts +++ b/projects/aca-testing-shared/src/components/dialog/index.ts @@ -34,3 +34,4 @@ export * from './password-dialog'; export * from './select-template-dialog'; export * from './share-dialog'; export * from './upload-new-version-dialog'; +export * from './upload-files-dialog'; diff --git a/projects/aca-testing-shared/src/components/dialog/upload-files-dialog.ts b/projects/aca-testing-shared/src/components/dialog/upload-files-dialog.ts new file mode 100644 index 000000000..d49b5eac6 --- /dev/null +++ b/projects/aca-testing-shared/src/components/dialog/upload-files-dialog.ts @@ -0,0 +1,40 @@ +/*! + * @license + * Alfresco Example Content Application + * + * Copyright (C) 2005 - 2020 Alfresco Software Limited + * + * This file is part of the Alfresco Example Content Application. + * If the software was purchased under a paid Alfresco license, the terms of + * the paid license agreement will prevail. Otherwise, the software is + * provided under the following open source license terms: + * + * The Alfresco Example Content Application is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * The Alfresco Example Content Application is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Alfresco. If not, see . + */ + +import { TestElement } from '@alfresco/adf-testing'; + +export class UploadFilesDialog { + uploadDialog = TestElement.byCss('.adf-upload-dialog'); + closeUploadButton = TestElement.byCss('.adf-upload-dialog [id="adf-upload-dialog-close"]'); + minimizeButton = TestElement.byCss('.adf-upload-dialog mat-icon[title="Minimize"]'); + maximizeButton = TestElement.byCss('.adf-upload-dialog mat-icon[title="Maximize"]'); + uploadedFiles = TestElement.byCss('.adf-file-uploading-row__name'); + + async closeUploadDialog(): Promise { + if (await this.uploadDialog.isVisible()) { + this.closeUploadButton.click(); + } + } +} diff --git a/projects/aca-testing-shared/src/pages/page.ts b/projects/aca-testing-shared/src/pages/page.ts index 1f3d5475b..5558762b5 100755 --- a/projects/aca-testing-shared/src/pages/page.ts +++ b/projects/aca-testing-shared/src/pages/page.ts @@ -24,10 +24,11 @@ */ import { browser, by, ElementFinder } from 'protractor'; -import { BrowserActions, BrowserVisibility, Logger } from '@alfresco/adf-testing'; +import { BrowserVisibility, Logger } from '@alfresco/adf-testing'; import { APP_ROUTES, USE_HASH_STRATEGY } from './../configs'; import { Utils, waitElement, waitForPresence, isPresentAndDisplayed } from '../utilities/utils'; import { Header } from '../components'; +import { UploadFilesDialog } from '../components/dialog/upload-files-dialog'; export abstract class Page { appRoot = 'app-root'; @@ -42,8 +43,7 @@ export abstract class Page { genericErrorIcon = this.byCss('aca-generic-error .mat-icon'); genericErrorTitle = this.byCss('.generic-error__title'); - uploadDialog = this.byCss('.adf-upload-dialog'); - closeUploadButton = this.byCss('.adf-upload-dialog [id="adf-upload-dialog-close"]'); + uploadFilesDialog = new UploadFilesDialog(); constructor(public url: string = '') {} @@ -62,8 +62,9 @@ export abstract class Page { } async signOut(): Promise { - await new Header().openMoreMenu(); - await new Header().menu.clickMenuItem('Sign out'); + const header = new Header(); + await header.openMoreMenu(); + await header.menu.clickMenuItem('Sign out'); await BrowserVisibility.waitUntilElementIsPresent(browser.element(by.css('[class*="login-content"] input#username'))); } @@ -81,16 +82,6 @@ export abstract class Page { } } - async isUploadDialogOpen(): Promise { - return isPresentAndDisplayed(this.uploadDialog); - } - - async closeUploadDialog(): Promise { - if (await this.isUploadDialogOpen()) { - await BrowserActions.click(this.closeUploadButton); - } - } - async refresh(): Promise { await browser.refresh(); await this.waitForApp();