From c91458df79a649f2d1a24da8cf26699517b4453e Mon Sep 17 00:00:00 2001 From: Alexandra Abrudan <55090252+AleAb25@users.noreply.github.com> Date: Mon, 9 Mar 2020 19:18:41 +0000 Subject: [PATCH] [AAE-1846] [AAE-1857] automated e2e tests uploading folders (#5483) * [AAE-1846] automated e2e tests - uploading a folder * [AAE-1857] added automated e2e test upload folder with excluded file * changed the script for cancel an uploading folder, added -b condition for the running tests for the uploadFolder method --- .../upload/excluded-file.e2e.ts | 32 +++++++++ .../upload/upload-dialog.e2e.ts | 69 +++++++++++++++++-- e2e/pages/adf/content-services.page.ts | 18 +++-- .../process-services/tasks-cloud-demo.page.ts | 16 ++--- e2e/pages/adf/dialog/share-dialog.page.ts | 6 +- e2e/pages/adf/dialog/upload-dialog.page.ts | 9 +++ e2e/pages/adf/dialog/upload-toggles.page.ts | 45 ++++++++---- .../dialog/app-settings-toggles.page.ts | 12 ++-- e2e/pages/adf/version-manager.page.ts | 16 ++--- e2e/util/resources.js | 14 +++- lib/testing/src/lib/core/pages/login.page.ts | 14 ++-- lib/testing/src/lib/core/pages/public-api.ts | 1 - lib/testing/src/lib/core/pages/viewer.page.ts | 48 ++++++------- .../src/lib/core/utils/browser-actions.ts | 2 +- .../src/lib/material/pages/public-api.ts | 1 + .../pages/toggle.page.ts} | 10 +-- scripts/test-e2e-lib.sh | 1 + scripts/travis/e2e/content-services-e2e.sh | 4 +- 18 files changed, 226 insertions(+), 92 deletions(-) rename lib/testing/src/lib/{core/pages/form-controller.page.ts => material/pages/toggle.page.ts} (81%) diff --git a/e2e/content-services/upload/excluded-file.e2e.ts b/e2e/content-services/upload/excluded-file.e2e.ts index 88256780f0..c91fda4cea 100644 --- a/e2e/content-services/upload/excluded-file.e2e.ts +++ b/e2e/content-services/upload/excluded-file.e2e.ts @@ -25,6 +25,7 @@ import { FileModel } from '../../models/ACS/file.model'; import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; import { DropActions } from '../../actions/drop.actions'; import { NavigationBarPage } from '../../pages/adf/navigation-bar.page'; +import { FolderModel } from '../../models/ACS/folder.model'; describe('Upload component - Excluded Files', () => { @@ -50,6 +51,21 @@ describe('Upload component - Excluded Files', () => { 'location': browser.params.resources.Files.ADF_DOCUMENTS.PNG.file_location }); + const folderUpload = new FolderModel({ + 'name': browser.params.resources.Files.ADF_DOCUMENTS.TEXT_FOLDER.folder_name, + 'location': browser.params.resources.Files.ADF_DOCUMENTS.TEXT_FOLDER.folder_location + }); + + const acceptedFileInsideFolder = new FolderModel({ + name: browser.params.resources.Files.ADF_DOCUMENTS.FILE_ACCEPTED_INSIDE_TEXT_FOLDER.file_name, + location: browser.params.resources.Files.ADF_DOCUMENTS.FILE_ACCEPTED_INSIDE_TEXT_FOLDER.file_location + }); + + const excludedFileInsideFolder = new FolderModel({ + name: browser.params.resources.Files.ADF_DOCUMENTS.FILE_EXCLUDED_INSIDE_TEXT_FOLDER.file_name, + location: browser.params.resources.Files.ADF_DOCUMENTS.FILE_EXCLUDED_INSIDE_TEXT_FOLDER.file_location + }); + beforeAll(async () => { this.alfrescoJsApi = new AlfrescoApi({ provider: 'ECM', @@ -110,6 +126,22 @@ describe('Upload component - Excluded Files', () => { await contentServicesPage.checkContentIsNotDisplayed(txtFileModel.name); }); + it('[C260125] Should not upload excluded file when they are in a Folder', async () => { + await LocalStorageUtil.setConfigField('files', JSON.stringify({ + excluded: ['*.cpio'], + 'match-options': { 'nocase': true } + })); + + await uploadToggles.enableFolderUpload(); + await contentServicesPage.uploadFolder(folderUpload.location); + await uploadDialog.clickOnCloseButton(); + await uploadDialog.dialogIsNotDisplayed(); + + await contentServicesPage.openFolder(folderUpload.name); + await contentServicesPage.checkContentIsDisplayed(acceptedFileInsideFolder.name); + await contentServicesPage.checkContentIsNotDisplayed(excludedFileInsideFolder.name); + }); + it('[C274688] Should extension type added as excluded and accepted not be uploaded', async () => { await LocalStorageUtil.setConfigField('files', JSON.stringify({ excluded: ['.DS_Store', 'desktop.ini', '*.png'], diff --git a/e2e/content-services/upload/upload-dialog.e2e.ts b/e2e/content-services/upload/upload-dialog.e2e.ts index c752de28ea..96f83713cb 100644 --- a/e2e/content-services/upload/upload-dialog.e2e.ts +++ b/e2e/content-services/upload/upload-dialog.e2e.ts @@ -24,6 +24,7 @@ import { FileModel } from '../../models/ACS/file.model'; import { browser } from 'protractor'; import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; import { VersionManagePage } from '../../pages/adf/version-manager.page'; +import { FolderModel } from '../../models/ACS/folder.model'; describe('Upload component', () => { @@ -62,15 +63,36 @@ 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 () => { + const parentFolder = new FolderModel({ + name: browser.params.resources.Files.ADF_DOCUMENTS.FOLDER_ONE.folder_name, + location: browser.params.resources.Files.ADF_DOCUMENTS.FOLDER_ONE.folder_location + }); + const fileInsideParentFolder = new FolderModel({ + name: browser.params.resources.Files.ADF_DOCUMENTS.FILE_INSIDE_FOLDER_ONE.file_name, + location: browser.params.resources.Files.ADF_DOCUMENTS.FILE_INSIDE_FOLDER_ONE.file_location + }); + const subFolder = new FolderModel({ + name: browser.params.resources.Files.ADF_DOCUMENTS.FOLDER_TWO.folder_name, + location: browser.params.resources.Files.ADF_DOCUMENTS.FOLDER_TWO.folder_location + }); + + const fileInsideSubFolder = new FolderModel({ + name: browser.params.resources.Files.ADF_DOCUMENTS.FILE_INSIDE_FOLDER_TWO.file_name, + location: browser.params.resources.Files.ADF_DOCUMENTS.FILE_INSIDE_FOLDER_TWO.file_location + }); + + const adfBigFolder = new FolderModel({ + name: browser.params.resources.Files.ADF_DOCUMENTS.ADF_FOLDER.folder_name, + location: browser.params.resources.Files.ADF_DOCUMENTS.ADF_FOLDER.folder_location + }); + + 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 () => { @@ -86,7 +108,6 @@ describe('Upload component', () => { await uploadActions.deleteFileOrFolder(nodeId); } } - }); it('[C260143] Should be possible to maximize/minimize the upload dialog', async () => { @@ -179,5 +200,45 @@ describe('Upload component', () => { await versionManagePage.closeVersionDialog(); await uploadDialog.removeUploadedFile(pngFileModel.name); await contentServicesPage.checkContentIsDisplayed(pngFileModel.name); + await uploadDialog.clickOnCloseButton(); + await uploadDialog.dialogIsNotDisplayed(); + }); + + it('[C291893] Should enable folder upload in selected node', async () => { + await contentServicesPage.checkUploadButton(); + await expect(await uploadToggles.checkFolderUploadToggleIsNotEnabled()).toBe(true); + + await uploadToggles.enableFolderUpload(); + await expect(await uploadToggles.checkFolderUploadToggleIsEnabled()).toBe(true); + await contentServicesPage.uploadFolder(parentFolder.location); + await uploadDialog.fileIsUploaded(fileInsideParentFolder.name); + await expect(await uploadDialog.numberOfCurrentFilesUploaded()).toEqual('1'); + await expect(await uploadDialog.numberOfInitialFilesUploaded()).toEqual('1'); + await uploadDialog.clickOnCloseButton(); + await uploadDialog.dialogIsNotDisplayed(); + + await contentServicesPage.openFolder(parentFolder.name); + await expect(await uploadToggles.checkFolderUploadToggleIsNotEnabled()).toBe(true); + await uploadToggles.enableFolderUpload(); + await expect(await uploadToggles.checkFolderUploadToggleIsEnabled()).toBe(true); + await contentServicesPage.uploadFolder(subFolder.location); + await uploadDialog.fileIsUploaded(fileInsideSubFolder.name); + await uploadDialog.clickOnCloseButton(); + await uploadDialog.dialogIsNotDisplayed(); + + await uploadToggles.enableFolderUpload(); + await browser.executeScript(` setInterval(() => { + if(document.querySelector('[data-automation-id="adf"]')){ + document.querySelector("#adf-upload-dialog-cancel-all").click(); + document.querySelector("#adf-upload-dialog-cancel").click(); + } + }, 2000)`); + await contentServicesPage.uploadFolder(adfBigFolder.location); + + await expect(await uploadDialog.getTitleText()).toEqual('Upload canceled'); + await uploadDialog.clickOnCloseButton(); + await uploadDialog.dialogIsNotDisplayed(); + await contentServicesPage.openFolder(adfBigFolder.name); + await expect(contentServicesPage.numberOfResultsDisplayed()).toBe(0); }); }); diff --git a/e2e/pages/adf/content-services.page.ts b/e2e/pages/adf/content-services.page.ts index 312d64be38..92fb9c6fda 100644 --- a/e2e/pages/adf/content-services.page.ts +++ b/e2e/pages/adf/content-services.page.ts @@ -15,8 +15,8 @@ * limitations under the License. */ -import { BrowserActions, BrowserVisibility, DateUtil, DocumentListPage, FormControllersPage } from '@alfresco/adf-testing'; -import { $$, browser, by, element, ElementArrayFinder, ElementFinder, protractor } from 'protractor'; +import { BrowserActions, BrowserVisibility, DateUtil, DocumentListPage, TogglePage } from '@alfresco/adf-testing'; +import { $$, browser, by, element, ElementFinder, ElementArrayFinder, protractor } from 'protractor'; import { DropActions } from '../../actions/drop.actions'; import { CreateLibraryDialogPage } from './dialog/create-library-dialog.page'; import { FolderDialogPage } from './dialog/folder-dialog.page'; @@ -36,7 +36,7 @@ export class ContentServicesPage { }; contentList: DocumentListPage = new DocumentListPage(element.all(by.css('adf-upload-drag-area adf-document-list')).first()); - formControllersPage: FormControllersPage = new FormControllersPage(); + togglePage: TogglePage = new TogglePage(); createFolderDialog: FolderDialogPage = new FolderDialogPage(); createLibraryDialog: CreateLibraryDialogPage = new CreateLibraryDialogPage(); dragAndDropAction: DropActions = new DropActions(); @@ -187,12 +187,12 @@ export class ContentServicesPage { } async enableDropFilesInAFolder(): Promise { - await this.formControllersPage.enableToggle(this.multipleFileUploadToggle); + await this.togglePage.enableToggle(this.multipleFileUploadToggle); } async disableDropFilesInAFolder(): Promise { await browser.executeScript('arguments[0].scrollIntoView()', this.multipleFileUploadToggle); - await this.formControllersPage.disableToggle(this.multipleFileUploadToggle); + await this.togglePage.disableToggle(this.multipleFileUploadToggle); } async getElementsDisplayedId() { @@ -438,10 +438,9 @@ export class ContentServicesPage { await BrowserVisibility.waitUntilElementIsPresent(this.uploadMultipleFileButton); } - async uploadFolder(folderName: string): Promise { - await BrowserVisibility.waitUntilElementIsVisible(this.uploadFolderButton); - await this.uploadFolderButton.sendKeys(path.resolve(path.join(browser.params.testConfig.main.rootPath, folderName))); - await BrowserVisibility.waitUntilElementIsVisible(this.uploadFolderButton); + async uploadFolder(folderLocation: string): Promise { + await BrowserVisibility.waitUntilElementIsPresent(this.uploadFolderButton); + await this.uploadFolderButton.sendKeys(path.resolve(path.join(browser.params.testConfig.main.rootPath, folderLocation))); } async getSingleFileButtonTooltip(): Promise { @@ -687,5 +686,4 @@ export class ContentServicesPage { await BrowserVisibility.waitUntilElementIsVisible(item); await BrowserActions.click(item); } - } diff --git a/e2e/pages/adf/demo-shell/process-services/tasks-cloud-demo.page.ts b/e2e/pages/adf/demo-shell/process-services/tasks-cloud-demo.page.ts index 5508a49282..720d09d3fb 100644 --- a/e2e/pages/adf/demo-shell/process-services/tasks-cloud-demo.page.ts +++ b/e2e/pages/adf/demo-shell/process-services/tasks-cloud-demo.page.ts @@ -17,7 +17,7 @@ import { element, by, browser, ElementFinder, ElementArrayFinder } from 'protractor'; import { - FormControllersPage, + TogglePage, TaskFiltersCloudComponentPage, EditTaskFilterCloudComponentPage, BrowserVisibility, @@ -49,34 +49,34 @@ export class TasksCloudDemoPage { modeDropdown = new DropdownPage(element(by.css('mat-form-field[data-automation-id="selectionMode"]'))); - formControllersPage: FormControllersPage = new FormControllersPage(); + togglePage: TogglePage = new TogglePage(); editTaskFilterCloud: EditTaskFilterCloudComponentPage = new EditTaskFilterCloudComponentPage(); taskFilterCloudComponent = new TaskFiltersCloudComponentPage(); async disableDisplayTaskDetails(): Promise { - await this.formControllersPage.disableToggle(this.displayTaskDetailsToggle); + await this.togglePage.disableToggle(this.displayTaskDetailsToggle); } async disableDisplayProcessDetails(): Promise { - await this.formControllersPage.disableToggle(this.displayProcessDetailsToggle); + await this.togglePage.disableToggle(this.displayProcessDetailsToggle); } async enableMultiSelection(): Promise { - await this.formControllersPage.enableToggle(this.multiSelectionToggle); + await this.togglePage.enableToggle(this.multiSelectionToggle); } async enableActionMenu(): Promise { - await this.formControllersPage.enableToggle(this.actionMenuToggle); + await this.togglePage.enableToggle(this.actionMenuToggle); } async enableContextMenu(): Promise { - await this.formControllersPage.enableToggle(this.contextMenuToggle); + await this.togglePage.enableToggle(this.contextMenuToggle); } async enableTestingMode(): Promise { - await this.formControllersPage.enableToggle(this.testingModeToggle); + await this.togglePage.enableToggle(this.testingModeToggle); } taskListCloudComponent(): TaskListCloudComponentPage { diff --git a/e2e/pages/adf/dialog/share-dialog.page.ts b/e2e/pages/adf/dialog/share-dialog.page.ts index 5bc7d3d8c3..72f62aae44 100644 --- a/e2e/pages/adf/dialog/share-dialog.page.ts +++ b/e2e/pages/adf/dialog/share-dialog.page.ts @@ -16,12 +16,12 @@ */ import { element, by, ElementFinder } from 'protractor'; -import { BrowserVisibility, FormControllersPage, BrowserActions } from '@alfresco/adf-testing'; +import { BrowserVisibility, TogglePage, BrowserActions } from '@alfresco/adf-testing'; import moment = require('moment'); export class ShareDialogPage { - formControllersPage = new FormControllersPage(); + togglePage = new TogglePage(); 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')); @@ -44,7 +44,7 @@ export class ShareDialogPage { } async clickUnShareFile() { - await this.formControllersPage.enableToggle(this.shareToggle); + await this.togglePage.enableToggle(this.shareToggle); } async clickConfirmationDialogCancelButton(): Promise { diff --git a/e2e/pages/adf/dialog/upload-dialog.page.ts b/e2e/pages/adf/dialog/upload-dialog.page.ts index 3531c61082..51a094f807 100644 --- a/e2e/pages/adf/dialog/upload-dialog.page.ts +++ b/e2e/pages/adf/dialog/upload-dialog.page.ts @@ -36,6 +36,7 @@ export class UploadDialogPage { 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"]'))); + cancelUploadInProgressButton: ElementFinder = element(by.css('div[data-automation-id="cancel-upload-progress"]')); async clickOnCloseButton(): Promise { await this.checkCloseButtonIsDisplayed(); @@ -91,6 +92,14 @@ export class UploadDialogPage { await BrowserActions.click(this.cancelUploadsElement); } + async cancelProgress(): Promise { + await BrowserActions.click(this.cancelUploadInProgressButton); + } + + async checkCancelProgressIsVisible(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.cancelUploadInProgressButton); + } + async fileIsCancelled(content): Promise { const row = await this.getRowByRowName(content); await BrowserVisibility.waitUntilElementIsVisible(row.element(this.cancelledStatusIcon)); diff --git a/e2e/pages/adf/dialog/upload-toggles.page.ts b/e2e/pages/adf/dialog/upload-toggles.page.ts index 68125762c0..d989bbd413 100644 --- a/e2e/pages/adf/dialog/upload-toggles.page.ts +++ b/e2e/pages/adf/dialog/upload-toggles.page.ts @@ -16,13 +16,13 @@ */ import { browser, by, element, ElementFinder } from 'protractor'; -import { BrowserActions, BrowserVisibility, FormControllersPage } from '@alfresco/adf-testing'; +import { BrowserActions, BrowserVisibility, TogglePage } from '@alfresco/adf-testing'; export class UploadTogglesPage { - formControllersPage: FormControllersPage = new FormControllersPage(); + togglePage: TogglePage = new TogglePage(); multipleFileUploadToggle: ElementFinder = element(by.id('adf-multiple-upload-switch')); - uploadFolderToggle: ElementFinder = element(by.id('adf-folder-upload-switch')); + uploadFolderToggle: ElementFinder = element(by.css('#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')); @@ -32,16 +32,26 @@ export class UploadTogglesPage { async enableMultipleFileUpload(): Promise { await browser.executeScript('arguments[0].scrollIntoView()', this.multipleFileUploadToggle); - await this.formControllersPage.enableToggle(this.multipleFileUploadToggle); + await this.togglePage.enableToggle(this.multipleFileUploadToggle); } async disableMultipleFileUpload(): Promise { await browser.executeScript('arguments[0].scrollIntoView()', this.multipleFileUploadToggle); - await this.formControllersPage.disableToggle(this.multipleFileUploadToggle); + await this.togglePage.disableToggle(this.multipleFileUploadToggle); } async enableFolderUpload(): Promise { - await this.formControllersPage.enableToggle(this.uploadFolderToggle); + await this.togglePage.enableToggle(this.uploadFolderToggle); + } + + async checkFolderUploadToggleIsEnabled(): Promise { + try { + const enabledFolderUpload: ElementFinder = element(by.css('mat-slide-toggle[id="adf-folder-upload-switch"][class*="mat-checked"]')); + await BrowserVisibility.waitUntilElementIsVisible(enabledFolderUpload); + return true; + } catch { + return false; + } } async checkMultipleFileUploadToggleIsEnabled(): Promise { @@ -60,33 +70,42 @@ export class UploadTogglesPage { } async disableFolderUpload(): Promise { - await this.formControllersPage.disableToggle(this.uploadFolderToggle); + await this.togglePage.disableToggle(this.uploadFolderToggle); + } + async checkFolderUploadToggleIsNotEnabled(): Promise { + try { + const inactiveToggleFolder: ElementFinder = element(by.css('#adf-folder-upload-switch .mat-slide-toggle-label')); + await BrowserVisibility.waitUntilElementIsVisible(inactiveToggleFolder); + return true; + } catch { + return false; + } } async enableExtensionFilter(): Promise { await browser.executeScript('arguments[0].scrollIntoView()', this.extensionFilterToggle); - await this.formControllersPage.enableToggle(this.extensionFilterToggle); + await this.togglePage.enableToggle(this.extensionFilterToggle); } async disableExtensionFilter(): Promise { await browser.executeScript('arguments[0].scrollIntoView()', this.extensionFilterToggle); - await this.formControllersPage.disableToggle(this.extensionFilterToggle); + await this.togglePage.disableToggle(this.extensionFilterToggle); } async enableMaxSize(): Promise { - await this.formControllersPage.enableToggle(this.maxSizeToggle); + await this.togglePage.enableToggle(this.maxSizeToggle); } async disableMaxSize(): Promise { - await this.formControllersPage.disableToggle(this.maxSizeToggle); + await this.togglePage.disableToggle(this.maxSizeToggle); } async enableVersioning(): Promise { - await this.formControllersPage.enableToggle(this.versioningToggle); + await this.togglePage.enableToggle(this.versioningToggle); } async disableVersioning(): Promise { - await this.formControllersPage.disableToggle(this.versioningToggle); + await this.togglePage.disableToggle(this.versioningToggle); } async clickCheckboxDisableUpload(): Promise { diff --git a/e2e/pages/adf/process-services/dialog/app-settings-toggles.page.ts b/e2e/pages/adf/process-services/dialog/app-settings-toggles.page.ts index b7cd59bb41..c01379a027 100644 --- a/e2e/pages/adf/process-services/dialog/app-settings-toggles.page.ts +++ b/e2e/pages/adf/process-services/dialog/app-settings-toggles.page.ts @@ -15,31 +15,31 @@ * limitations under the License. */ -import { FormControllersPage } from '@alfresco/adf-testing'; +import { TogglePage } from '@alfresco/adf-testing'; import { element, by, ElementFinder } from 'protractor'; export class AppSettingsTogglesPage { - formControllersPage: FormControllersPage = new FormControllersPage(); + togglePage: TogglePage = new TogglePage(); 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')); async enableShowHeader(): Promise { - await this.formControllersPage.enableToggle(this.showDetailsHeaderToggle); + await this.togglePage.enableToggle(this.showDetailsHeaderToggle); } async disableShowHeader(): Promise { - await this.formControllersPage.disableToggle(this.showDetailsHeaderToggle); + await this.togglePage.disableToggle(this.showDetailsHeaderToggle); } async enableTaskFiltersIcon(): Promise { - await this.formControllersPage.enableToggle(this.showTaskFilterIconsToggle); + await this.togglePage.enableToggle(this.showTaskFilterIconsToggle); } async enableProcessFiltersIcon(): Promise { - await this.formControllersPage.enableToggle(this.showProcessFilterIconsToggle); + await this.togglePage.enableToggle(this.showProcessFilterIconsToggle); } } diff --git a/e2e/pages/adf/version-manager.page.ts b/e2e/pages/adf/version-manager.page.ts index c6e7bedf93..a7c5bd76fc 100644 --- a/e2e/pages/adf/version-manager.page.ts +++ b/e2e/pages/adf/version-manager.page.ts @@ -16,12 +16,12 @@ */ import path = require('path'); -import { BrowserActions, BrowserVisibility, FormControllersPage } from '@alfresco/adf-testing'; +import { BrowserActions, BrowserVisibility, TogglePage } from '@alfresco/adf-testing'; import { browser, by, element, ElementFinder } from 'protractor'; export class VersionManagePage { - formControllersPage: FormControllersPage = new FormControllersPage(); + togglePage: TogglePage = new TogglePage(); 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"]')); @@ -92,28 +92,28 @@ export class VersionManagePage { * disables readOnly */ async disableReadOnly(): Promise { - await this.formControllersPage.disableToggle(this.readOnlySwitch); + await this.togglePage.disableToggle(this.readOnlySwitch); } /** * enables readOnly */ async enableReadOnly(): Promise { - await this.formControllersPage.enableToggle(this.readOnlySwitch); + await this.togglePage.enableToggle(this.readOnlySwitch); } /** * disables download */ async disableDownload(): Promise { - await this.formControllersPage.disableToggle(this.downloadSwitch); + await this.togglePage.disableToggle(this.downloadSwitch); } /** * enables download */ async enableDownload(): Promise { - await this.formControllersPage.enableToggle(this.downloadSwitch); + await this.togglePage.enableToggle(this.downloadSwitch); } /** @@ -121,14 +121,14 @@ export class VersionManagePage { * disables comments */ async disableComments(): Promise { - await this.formControllersPage.disableToggle(this.commentsSwitch); + await this.togglePage.disableToggle(this.commentsSwitch); } /** * enables comments */ async enableComments(): Promise { - await this.formControllersPage.enableToggle(this.commentsSwitch); + await this.togglePage.enableToggle(this.commentsSwitch); } async clickActionButton(version): Promise { diff --git a/e2e/util/resources.js b/e2e/util/resources.js index a4dfe7889e..49cd740d71 100644 --- a/e2e/util/resources.js +++ b/e2e/util/resources.js @@ -505,6 +505,14 @@ exports.Files = { folder_location: "/resources/adf/allFileTypes/documents/text", folder_name: "text" }, + FILE_ACCEPTED_INSIDE_TEXT_FOLDER: { + file_location: "/resources/adf/allFileTypes/documents/text/a_odt_file.odt", + file_name: "a_odt_file.odt" + }, + FILE_EXCLUDED_INSIDE_TEXT_FOLDER: { + file_location: "/resources/adf/allFileTypes/documents/text/a_cpio_file.cpio", + file_name: "a_cpio_file.cpio" + }, WORD_FOLDER: { folder_location: "/resources/adf/allFileTypes/documents/word", folder_name: "word" @@ -516,7 +524,11 @@ exports.Files = { IMG_RENDITION_FOLDER: { folder_location: "/resources/adf/allFileTypes/images-rendition", folder_name: "images-rendition" - } + }, + ADF_FOLDER: { + folder_location: "/resources/adf", + folder_name: "adf" + }, }, PROFILE_IMAGES: { diff --git a/lib/testing/src/lib/core/pages/login.page.ts b/lib/testing/src/lib/core/pages/login.page.ts index df84b96773..602fcc2a93 100644 --- a/lib/testing/src/lib/core/pages/login.page.ts +++ b/lib/testing/src/lib/core/pages/login.page.ts @@ -15,7 +15,7 @@ * limitations under the License. */ -import { FormControllersPage } from './form-controller.page'; +import { TogglePage } from '../../material/pages/toggle.page'; import { browser, by, element, ElementFinder } from 'protractor'; import { BrowserVisibility } from '../utils/browser-visibility'; import { LocalStorageUtil } from '../utils/local-storage.util'; @@ -25,7 +25,7 @@ export class LoginPage { loginURL: string = browser.baseUrl + '/login'; - formControllersPage: FormControllersPage = new FormControllersPage(); + togglePage: TogglePage = new TogglePage(); 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"]')); @@ -210,23 +210,23 @@ export class LoginPage { } async enableFooter(): Promise { - await this.formControllersPage.enableToggle(this.footerSwitch); + await this.togglePage.enableToggle(this.footerSwitch); } async disableFooter(): Promise { - await this.formControllersPage.disableToggle(this.footerSwitch); + await this.togglePage.disableToggle(this.footerSwitch); } async disableRememberMe(): Promise { - await this.formControllersPage.disableToggle(this.rememberMeSwitch); + await this.togglePage.disableToggle(this.rememberMeSwitch); } async enableSuccessRouteSwitch(): Promise { - await this.formControllersPage.enableToggle(this.successRouteSwitch); + await this.togglePage.enableToggle(this.successRouteSwitch); } async enableLogoSwitch(): Promise { - await this.formControllersPage.enableToggle(this.logoSwitch); + await this.togglePage.enableToggle(this.logoSwitch); } async enterSuccessRoute(route): Promise { diff --git a/lib/testing/src/lib/core/pages/public-api.ts b/lib/testing/src/lib/core/pages/public-api.ts index 70ffd71187..bd629964b5 100644 --- a/lib/testing/src/lib/core/pages/public-api.ts +++ b/lib/testing/src/lib/core/pages/public-api.ts @@ -19,7 +19,6 @@ export * from './header.page'; export * from './user-info.page'; export * from './login.page'; export * from './settings.page'; -export * from './form-controller.page'; export * from './login-sso.page'; export * from './data-table-component.page'; export * from './pagination.page'; diff --git a/lib/testing/src/lib/core/pages/viewer.page.ts b/lib/testing/src/lib/core/pages/viewer.page.ts index 1ab8b104e6..227d6c5613 100644 --- a/lib/testing/src/lib/core/pages/viewer.page.ts +++ b/lib/testing/src/lib/core/pages/viewer.page.ts @@ -17,14 +17,14 @@ import { BrowserActions } from '../utils/browser-actions'; import { TabsPage } from '../../../lib/material/pages/tabs.page'; -import { FormControllersPage } from './form-controller.page'; +import { TogglePage } from '../../material/pages/toggle.page'; import { BrowserVisibility } from '../utils/browser-visibility'; import { element, by, ElementFinder, browser, protractor } from 'protractor'; export class ViewerPage { tabsPage: TabsPage = new TabsPage(); - formControllersPage: FormControllersPage = new FormControllersPage(); + togglePage: TogglePage = new TogglePage(); closeButton: ElementFinder = element(by.css('button[data-automation-id="adf-toolbar-back"]')); fileName: ElementFinder = element(by.id('adf-viewer-display-name')); @@ -435,11 +435,11 @@ export class ViewerPage { } async disableToolbar(): Promise { - await this.formControllersPage.disableToggle(this.toolbarSwitch); + await this.togglePage.disableToggle(this.toolbarSwitch); } async enableToolbar(): Promise { - await this.formControllersPage.enableToggle(this.toolbarSwitch); + await this.togglePage.enableToggle(this.toolbarSwitch); } async checkToolbarIsDisplayed(): Promise { @@ -451,11 +451,11 @@ export class ViewerPage { } async disableGoBack(): Promise { - await this.formControllersPage.disableToggle(this.goBackSwitch); + await this.togglePage.disableToggle(this.goBackSwitch); } async enableGoBack(): Promise { - await this.formControllersPage.enableToggle(this.goBackSwitch); + await this.togglePage.enableToggle(this.goBackSwitch); } async checkGoBackIsDisplayed(): Promise { @@ -467,11 +467,11 @@ export class ViewerPage { } async disableToolbarOptions(): Promise { - await this.formControllersPage.disableToggle(this.openWithSwitch); + await this.togglePage.disableToggle(this.openWithSwitch); } async enableToolbarOptions() { - await this.formControllersPage.enableToggle(this.openWithSwitch); + await this.togglePage.enableToggle(this.openWithSwitch); } async checkToolbarOptionsIsDisplayed(): Promise { @@ -483,20 +483,20 @@ export class ViewerPage { } async disableDownload(): Promise { - await this.formControllersPage.disableToggle(this.downloadSwitch); + await this.togglePage.disableToggle(this.downloadSwitch); } async enableDownload(): Promise { - await this.formControllersPage.enableToggle(this.openWithSwitch); + await this.togglePage.enableToggle(this.openWithSwitch); } async enableShowTabWithIcon(): Promise { await browser.executeScript('arguments[0].scrollIntoView()', this.showTabWithIconSwitch); - await this.formControllersPage.enableToggle(this.showTabWithIconSwitch); + await this.togglePage.enableToggle(this.showTabWithIconSwitch); } async enableShowTabWithIconAndLabel(): Promise { - await this.formControllersPage.enableToggle(this.showTabWithIconAndLabelSwitch); + await this.togglePage.enableToggle(this.showTabWithIconAndLabelSwitch); } async checkDownloadButtonIsNotDisplayed(): Promise { @@ -504,11 +504,11 @@ export class ViewerPage { } async disablePrint(): Promise { - await this.formControllersPage.disableToggle(this.printSwitch); + await this.togglePage.disableToggle(this.printSwitch); } async enablePrint(): Promise { - await this.formControllersPage.enableToggle(this.printSwitch); + await this.togglePage.enableToggle(this.printSwitch); } async checkPrintButtonIsDisplayed(): Promise { @@ -520,12 +520,12 @@ export class ViewerPage { } async disableAllowSidebar(): Promise { - await this.formControllersPage.disableToggle(this.allowSidebarSwitch); + await this.togglePage.disableToggle(this.allowSidebarSwitch); } async disableAllowLeftSidebar(): Promise { await browser.executeScript('arguments[0].scrollIntoView()', this.allowLeftSidebarSwitch); - await this.formControllersPage.disableToggle(this.allowLeftSidebarSwitch); + await this.togglePage.disableToggle(this.allowLeftSidebarSwitch); } async checkMoreActionsDisplayed(): Promise { @@ -551,25 +551,25 @@ export class ViewerPage { } async disableMoreActions(): Promise { - await this.formControllersPage.disableToggle(this.moreActionsSwitch); + await this.togglePage.disableToggle(this.moreActionsSwitch); } async enableMoreActions(): Promise { - await this.formControllersPage.enableToggle(this.moreActionsSwitch); + await this.togglePage.enableToggle(this.moreActionsSwitch); } async enableMoreActionsMenu(): Promise { - await this.formControllersPage.enableToggle(this.moreActionsMenuSwitch); + await this.togglePage.enableToggle(this.moreActionsMenuSwitch); } async disableCustomToolbar(): Promise { await browser.executeScript('arguments[0].scrollIntoView()', this.customToolbarToggle); - await this.formControllersPage.disableToggle(this.customToolbarToggle); + await this.togglePage.disableToggle(this.customToolbarToggle); } async enableCustomToolbar(): Promise { await browser.executeScript('arguments[0].scrollIntoView()', this.customToolbarToggle); - await this.formControllersPage.enableToggle(this.customToolbarToggle); + await this.togglePage.enableToggle(this.customToolbarToggle); } async checkCustomToolbarIsDisplayed() { @@ -577,11 +577,11 @@ export class ViewerPage { } async disableCustomName(): Promise { - await this.formControllersPage.disableToggle(this.customNameSwitch); + await this.togglePage.disableToggle(this.customNameSwitch); } async enableCustomName(): Promise { - await this.formControllersPage.enableToggle(this.customNameSwitch); + await this.togglePage.enableToggle(this.customNameSwitch); } async clickToggleRightSidebar(): Promise { @@ -599,7 +599,7 @@ export class ViewerPage { } async disableOverlay(): Promise { - await this.formControllersPage.disableToggle(element(by.id('adf-viewer-overlay'))); + await this.togglePage.disableToggle(element(by.id('adf-viewer-overlay'))); } async checkOverlayViewerIsDisplayed(): Promise { diff --git a/lib/testing/src/lib/core/utils/browser-actions.ts b/lib/testing/src/lib/core/utils/browser-actions.ts index 34e56b4b64..2a0ebaf138 100644 --- a/lib/testing/src/lib/core/utils/browser-actions.ts +++ b/lib/testing/src/lib/core/utils/browser-actions.ts @@ -23,7 +23,7 @@ export class BrowserActions { static async click(elementFinder: ElementFinder): Promise { try { - await BrowserVisibility.waitUntilElementIsVisible(elementFinder); + await BrowserVisibility.waitUntilElementIsPresent(elementFinder); await BrowserVisibility.waitUntilElementIsClickable(elementFinder); await elementFinder.click(); } catch (clickErr) { diff --git a/lib/testing/src/lib/material/pages/public-api.ts b/lib/testing/src/lib/material/pages/public-api.ts index b7bf6cb828..e2b931fbdb 100644 --- a/lib/testing/src/lib/material/pages/public-api.ts +++ b/lib/testing/src/lib/material/pages/public-api.ts @@ -18,3 +18,4 @@ export * from './tabs.page'; export * from './date-picker.page'; export * from './dropdown.page'; +export * from './toggle.page'; diff --git a/lib/testing/src/lib/core/pages/form-controller.page.ts b/lib/testing/src/lib/material/pages/toggle.page.ts similarity index 81% rename from lib/testing/src/lib/core/pages/form-controller.page.ts rename to lib/testing/src/lib/material/pages/toggle.page.ts index eae61fb605..4b6a26f556 100644 --- a/lib/testing/src/lib/core/pages/form-controller.page.ts +++ b/lib/testing/src/lib/material/pages/toggle.page.ts @@ -16,16 +16,16 @@ */ import { by, ElementFinder } from 'protractor'; -import { BrowserVisibility } from '../utils/browser-visibility'; -import { BrowserActions } from '../utils/browser-actions'; +import { BrowserVisibility } from '../../core/utils/browser-visibility'; +import { BrowserActions } from '../../core/utils/browser-actions'; -export class FormControllersPage { +export class TogglePage { 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(); + const elem = toggle.all(by.css('input')).first(); await BrowserActions.click(elem); } } @@ -34,7 +34,7 @@ export class FormControllersPage { await BrowserVisibility.waitUntilElementIsVisible(toggle); const check = await toggle.getAttribute('class'); if (check.indexOf('mat-checked') >= 0) { - const elem = toggle.all(by.css('div')).first(); + const elem = toggle.all(by.css('input')).first(); await BrowserActions.click(elem); } } diff --git a/scripts/test-e2e-lib.sh b/scripts/test-e2e-lib.sh index 620a3b3099..a4337387d8 100755 --- a/scripts/test-e2e-lib.sh +++ b/scripts/test-e2e-lib.sh @@ -35,6 +35,7 @@ show_help() { echo "-m --maxInstances max instances parallel for tests" echo "-log or --log print all the browser log" echo "-db or --debug run the debugger" + echo "-ud build and run dist" echo "-vjsapi install different version from npm of JS-API defined in the package.json" echo "-h or --help" } diff --git a/scripts/travis/e2e/content-services-e2e.sh b/scripts/travis/e2e/content-services-e2e.sh index d102c14905..6b9e1a4ee7 100755 --- a/scripts/travis/e2e/content-services-e2e.sh +++ b/scripts/travis/e2e/content-services-e2e.sh @@ -12,7 +12,9 @@ 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 -save -m 2 || exit 1) + +#-b is needed to run the Folder upload test that are not workin in Headless chrome +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 -save -m 2 || exit 1) if [[ $AFFECTED_LIBS =~ "testing" || $AFFECTED_LIBS =~ "$CONTEXT_ENV" || $TRAVIS_PULL_REQUEST == "false" ]]; then $RUN_CHECK