diff --git a/.prettierignore b/.prettierignore index c3a4b4f13..8fdfce495 100644 --- a/.prettierignore +++ b/.prettierignore @@ -1,2 +1,3 @@ node_modules src/assets/i18n +e2e diff --git a/.prettierrc b/.prettierrc index 8db60caac..544138be4 100644 --- a/.prettierrc +++ b/.prettierrc @@ -1,3 +1,3 @@ { - "singleQuote": true + "singleQuote": true } diff --git a/e2e/components/component.ts b/e2e/components/component.ts index 134287c0c..dc06504c5 100755 --- a/e2e/components/component.ts +++ b/e2e/components/component.ts @@ -30,11 +30,11 @@ export abstract class Component { component: ElementFinder; constructor(selector: string, ancestor?: ElementFinder) { - const locator = by.css(selector); + const locator = selector; this.component = ancestor - ? ancestor.element(locator) - : element(locator); + ? ancestor.$$(locator).first() + : browser.$$(locator).first(); } wait() { diff --git a/e2e/components/data-table/data-table.ts b/e2e/components/data-table/data-table.ts index f459179fb..4cfc9c73c 100755 --- a/e2e/components/data-table/data-table.ts +++ b/e2e/components/data-table/data-table.ts @@ -30,264 +30,298 @@ import { Menu } from '../menu/menu'; import { Utils } from '../../utilities/utils'; export class DataTable extends Component { - private static selectors = { - root: 'adf-datatable', + private static selectors = { + root: 'adf-datatable', - head: '.adf-datatable-header', - columnHeader: '.adf-datatable-row .adf-datatable-table-cell-header', - sortedColumnHeader: ` + head: '.adf-datatable-header', + columnHeader: '.adf-datatable-row .adf-datatable-table-cell-header', + sortedColumnHeader: ` .adf-data-table__header--sorted-asc, .adf-data-table__header--sorted-desc `, - body: '.adf-datatable-body', - row: '.adf-datatable-row[role]', - selectedRow: '.adf-datatable-row.is-selected', - cell: '.adf-data-table-cell', - locationLink: '.aca-location-link', - nameLink: '.dl-link', + body: '.adf-datatable-body', + row: '.adf-datatable-row[role]', + selectedRow: '.adf-datatable-row.is-selected', + cell: '.adf-data-table-cell', + locationLink: '.aca-location-link', + nameLink: '.dl-link', - selectedIcon: '.mat-icon', + selectedIcon: '.mat-icon', - emptyListContainer: 'div.adf-no-content-container', - emptyFolderDragAndDrop: '.adf-empty-list_template .adf-empty-folder', + emptyListContainer: 'div.adf-no-content-container', + emptyFolderDragAndDrop: '.adf-empty-list_template .adf-empty-folder', - emptyListTitle: '.adf-empty-content__title', - emptyListSubtitle: '.adf-empty-content__subtitle', - emptyListText: '.adf-empty-content__text' - }; + emptyListTitle: '.adf-empty-content__title', + emptyListSubtitle: '.adf-empty-content__subtitle', + emptyListText: '.adf-empty-content__text' + }; - head: ElementFinder = this.component.element(by.css(DataTable.selectors.head)); - body: ElementFinder = this.component.element(by.css(DataTable.selectors.body)); - cell = by.css(DataTable.selectors.cell); - locationLink = by.css(DataTable.selectors.locationLink); - nameLink: ElementFinder = browser.element(by.css(DataTable.selectors.nameLink)); - emptyList: ElementFinder = this.component.element(by.css(DataTable.selectors.emptyListContainer)); - emptyFolderDragAndDrop: ElementFinder = this.component.element(by.css(DataTable.selectors.emptyFolderDragAndDrop)); - emptyListTitle: ElementFinder = this.component.element(by.css(DataTable.selectors.emptyListTitle)); - emptyListSubtitle: ElementFinder = this.component.element(by.css(DataTable.selectors.emptyListSubtitle)); - emptyListText: ElementArrayFinder = this.component.all(by.css(DataTable.selectors.emptyListText)); + head: ElementFinder = this.component.element(by.css(DataTable.selectors.head)); + body: ElementFinder = this.component.element(by.css(DataTable.selectors.body)); + cell = by.css(DataTable.selectors.cell); + locationLink = by.css(DataTable.selectors.locationLink); + nameLink: ElementFinder = browser.element(by.css(DataTable.selectors.nameLink)); + emptyList: ElementFinder = this.component.element(by.css(DataTable.selectors.emptyListContainer)); + emptyFolderDragAndDrop: ElementFinder = this.component.element(by.css(DataTable.selectors.emptyFolderDragAndDrop)); + emptyListTitle: ElementFinder = this.component.element(by.css(DataTable.selectors.emptyListTitle)); + emptyListSubtitle: ElementFinder = this.component.element(by.css(DataTable.selectors.emptyListSubtitle)); + emptyListText: ElementArrayFinder = this.component.all(by.css(DataTable.selectors.emptyListText)); - menu: Menu = new Menu(); + menu: Menu = new Menu(); - constructor(ancestor?: ElementFinder) { - super(DataTable.selectors.root, ancestor); - } + constructor(ancestor?: ElementFinder) { + super(DataTable.selectors.root, ancestor); + } - // Wait methods (waits for elements) - waitForHeader() { - return browser.wait(EC.presenceOf(this.head), BROWSER_WAIT_TIMEOUT); - } + // Wait methods (waits for elements) + waitForHeader() { + return browser.wait(EC.presenceOf(this.head), BROWSER_WAIT_TIMEOUT); + } - waitForEmptyState() { - return browser.wait(EC.presenceOf(this.emptyList), BROWSER_WAIT_TIMEOUT); - } + waitForEmptyState() { + return browser.wait(EC.presenceOf(this.emptyList), BROWSER_WAIT_TIMEOUT); + } - // Header/Column methods - getColumnHeaders(): ElementArrayFinder { - const locator = by.css(DataTable.selectors.columnHeader); - return this.head.all(locator); - } + // Header/Column methods + getColumnHeaders(): ElementArrayFinder { + const locator = by.css(DataTable.selectors.columnHeader); + return this.head.all(locator); + } - getNthColumnHeader(nth: number): ElementFinder { - return this.getColumnHeaders().get(nth - 1); - } + getNthColumnHeader(nth: number): ElementFinder { + return this.getColumnHeaders().get(nth - 1); + } - getColumnHeaderByLabel(label: string): ElementFinder { - const locator = by.cssContainingText(DataTable.selectors.columnHeader, label); - return this.head.element(locator); - } + getColumnHeaderByLabel(label: string): ElementFinder { + const locator = by.cssContainingText(DataTable.selectors.columnHeader, label); + return this.head.element(locator); + } - getSortedColumnHeader(): ElementFinder { - const locator = by.css(DataTable.selectors.sortedColumnHeader); - return this.head.element(locator); - } + getSortedColumnHeader(): ElementFinder { + const locator = by.css(DataTable.selectors.sortedColumnHeader); + return this.head.element(locator); + } - getSortingOrder() { - return this.getSortedColumnHeader().getAttribute('class') - .then(str => { - if (str.includes('asc')) { - return 'asc'; - } else { - if (str.includes('desc')) { - return 'desc'; - } - } - }); - } + getSortingOrder() { + return this.getSortedColumnHeader() + .getAttribute('class') + .then(str => { + if (str.includes('asc')) { + return 'asc'; + } else { + if (str.includes('desc')) { + return 'desc'; + } + } + }); + } - sortByColumn(columnName: string): promise.Promise { - const column = this.getColumnHeaderByLabel(columnName); - const click = browser.actions().mouseMove(column).click(); + sortByColumn(columnName: string): promise.Promise { + const column = this.getColumnHeaderByLabel(columnName); + const click = browser + .actions() + .mouseMove(column) + .click(); - return click.perform(); - } + return click.perform(); + } - // Rows methods - getRows(): ElementArrayFinder { - return this.body.all(by.css(DataTable.selectors.row)); - } + // Rows methods + getRows(): ElementArrayFinder { + return this.body.all(by.css(DataTable.selectors.row)); + } - countRows(): promise.Promise { - return this.getRows().count(); - } + countRows(): promise.Promise { + return this.getRows().count(); + } - getSelectedRows(): ElementArrayFinder { - return this.body.all(by.css(DataTable.selectors.selectedRow)); - } + getSelectedRows(): ElementArrayFinder { + return this.body.all(by.css(DataTable.selectors.selectedRow)); + } - countSelectedRows(): promise.Promise { - return this.getSelectedRows().count(); - } + countSelectedRows(): promise.Promise { + return this.getSelectedRows().count(); + } - getNthRow(nth: number): ElementFinder { - return this.getRows().get(nth - 1); - } + getNthRow(nth: number): ElementFinder { + return this.getRows().get(nth - 1); + } - getRowByName(name: string): ElementFinder { - return this.body.element(by.cssContainingText(DataTable.selectors.row, name)); - } + getRowByName(name: string): ElementFinder { + return this.body.element(by.cssContainingText(DataTable.selectors.row, name)); + } - getRowFirstCell(name: string) { - return this.getRowByName(name).all(by.css(DataTable.selectors.cell)).get(0); - } + getRowFirstCell(name: string) { + return this.getRowByName(name) + .all(by.css(DataTable.selectors.cell)) + .get(0); + } - getRowNameCell(name: string) { - return this.getRowByName(name).all(by.css(DataTable.selectors.cell)).get(1); - } + getRowNameCell(name: string) { + return this.getRowByName(name) + .all(by.css(DataTable.selectors.cell)) + .get(1); + } - getRowNameCellText(name: string) { - return this.getRowNameCell(name).$('span'); - } + getRowNameCellText(name: string) { + return this.getRowNameCell(name).$('span'); + } - getItemNameTooltip(name: string): promise.Promise { - return this.getRowNameCellText(name).getAttribute('title'); - } + getItemNameTooltip(name: string): promise.Promise { + return this.getRowNameCellText(name).getAttribute('title'); + } - hasCheckMarkIcon(itemName: string) { - return this.getRowByName(itemName).element(by.css(DataTable.selectors.selectedIcon)).isPresent(); - } + hasCheckMarkIcon(itemName: string) { + return this.getRowByName(itemName) + .element(by.css(DataTable.selectors.selectedIcon)) + .isPresent(); + } - getNameLink(itemName: string) { - return this.getRowNameCell(itemName).$(DataTable.selectors.nameLink); - } + getNameLink(itemName: string) { + return this.getRowNameCell(itemName).$(DataTable.selectors.nameLink); + } - hasLinkOnName(itemName: string) { - return this.getNameLink(itemName).isPresent(); - } + hasLinkOnName(itemName: string) { + return this.getNameLink(itemName).isPresent(); + } - // Navigation/selection methods - doubleClickOnRowByName(name: string): promise.Promise { - const item = this.getRowFirstCell(name); - return Utils.waitUntilElementClickable(item) - .then(() => browser.actions().mouseMove(item).click().click().perform()); - } + // Navigation/selection methods + doubleClickOnRowByName(name: string): promise.Promise { + const item = this.getRowFirstCell(name); + return Utils.waitUntilElementClickable(item).then(() => + browser + .actions() + .mouseMove(item) + .click() + .click() + .perform() + ); + } - selectItem(name: string): promise.Promise { - const item = this.getRowFirstCell(name); - return Utils.waitUntilElementClickable(item) - .then(() => item.click()); - } + selectItem(name: string): promise.Promise { + const item = this.getRowFirstCell(name); + return Utils.waitUntilElementClickable(item).then(() => item.click()); + } - clickNameLink(itemName: string) { - return this.getNameLink(itemName).click(); - } + clickNameLink(itemName: string) { + return this.getNameLink(itemName).click(); + } - selectMultipleItems(names: string[]): promise.Promise { - return this.clearSelection() - .then(() => browser.actions().sendKeys(protractor.Key.COMMAND).perform()) - .then(() => { - names.forEach(name => { - this.selectItem(name); - }); - }) - .then(() => browser.actions().sendKeys(protractor.Key.NULL).perform()); - } + selectMultipleItems(names: string[]): promise.Promise { + return this.clearSelection() + .then(() => + browser + .actions() + .sendKeys(protractor.Key.COMMAND) + .perform() + ) + .then(() => { + names.forEach(name => { + this.selectItem(name); + }); + }) + .then(() => + browser + .actions() + .sendKeys(protractor.Key.NULL) + .perform() + ); + } - clearSelection(): promise.Promise { - return this.getSelectedRows().count() - .then(count => { - if (count !== 0) { browser.refresh().then(() => this.waitForHeader()); } - }); - } + clearSelection(): promise.Promise { + return this.getSelectedRows() + .count() + .then(count => { + if (count !== 0) { + browser.refresh().then(() => this.waitForHeader()); + } + }); + } - async rightClickOnItem(itemName: string) { - const item = this.getRowFirstCell(itemName); - await browser.actions().click(item, protractor.Button.RIGHT).perform(); - } + async rightClickOnItem(itemName: string) { + const item = this.getRowFirstCell(itemName); + await browser + .actions() + .click(item, protractor.Button.RIGHT) + .perform(); + } - async rightClickOnMultipleSelection() { - const itemFromSelection = this.getSelectedRows().get(0); - await browser.actions().click(itemFromSelection, protractor.Button.RIGHT).perform(); - } + async rightClickOnMultipleSelection() { + const itemFromSelection = this.getSelectedRows().get(0); + await browser + .actions() + .click(itemFromSelection, protractor.Button.RIGHT) + .perform(); + } - getItemLocation(name: string) { - return this.getRowByName(name).element(this.locationLink); - } + getItemLocation(name: string) { + return this.getRowByName(name).element(this.locationLink); + } - getItemLocationTooltip(name: string): promise.Promise { - return this.getItemLocation(name).$('a').getAttribute('title'); - } + getItemLocationTooltip(name: string): promise.Promise { + return this.getItemLocation(name) + .$('a') + .getAttribute('title'); + } - getItemLocationTileAttr(name: string) { - const location = this.getItemLocation(name).$('a'); - const condition = () => location.getAttribute('title').then((value) => value && value.length > 0); + getItemLocationTileAttr(name: string) { + const location = this.getItemLocation(name).$('a'); + const condition = () => location.getAttribute('title').then(value => value && value.length > 0); - browser.actions() - .mouseMove(location) - .perform(); + browser + .actions() + .mouseMove(location) + .perform(); - browser.wait(condition, BROWSER_WAIT_TIMEOUT); - return location.getAttribute('title'); - } + browser.wait(condition, BROWSER_WAIT_TIMEOUT); + return location.getAttribute('title'); + } - clickItemLocation(name: string) { - return this.getItemLocation(name).click(); - } + clickItemLocation(name: string) { + return this.getItemLocation(name).click(); + } - // empty state methods - isEmptyList(): promise.Promise { - return this.emptyList.isPresent(); - } + // empty state methods + isEmptyList(): promise.Promise { + return this.emptyList.isPresent(); + } - isEmptyWithDragAndDrop(): promise.Promise { - return this.emptyFolderDragAndDrop.isDisplayed(); - } + isEmptyWithDragAndDrop(): promise.Promise { + return this.emptyFolderDragAndDrop.isDisplayed(); + } - getEmptyDragAndDropText(): promise.Promise { - return this.isEmptyWithDragAndDrop() - .then(() => { - return this.emptyFolderDragAndDrop.getText(); - }); - } + getEmptyDragAndDropText(): promise.Promise { + return this.isEmptyWithDragAndDrop().then(() => { + return this.emptyFolderDragAndDrop.getText(); + }); + } - getEmptyStateTitle(): promise.Promise { - return this.isEmptyList() - .then(() => { - return this.emptyListTitle.getText(); - }); - } + getEmptyStateTitle(): promise.Promise { + return this.isEmptyList().then(() => { + return this.emptyListTitle.getText(); + }); + } - getEmptyStateSubtitle(): promise.Promise { - return this.isEmptyList() - .then(() => { - return this.emptyListSubtitle.getText(); - }); - } + getEmptyStateSubtitle(): promise.Promise { + return this.isEmptyList().then(() => { + return this.emptyListSubtitle.getText(); + }); + } - getEmptyStateText(): promise.Promise { - return this.isEmptyList() - .then(() => { - return this.emptyListText.getText(); - }); - } + getEmptyStateText(): promise.Promise { + return this.isEmptyList().then(() => { + return this.emptyListText.getText(); + }); + } - getCellsContainingName(name: string) { - return this.getRows().all(by.cssContainingText(DataTable.selectors.cell, name)) - .map(cell => cell.getText()); - } + getCellsContainingName(name: string) { + return this.getRows() + .all(by.cssContainingText(DataTable.selectors.cell, name)) + .map(cell => cell.getText()); + } - async hasContextMenu() { - return (await this.menu.getItemsCount()) > 0; - } + async hasContextMenu() { + return (await this.menu.getItemsCount()) > 0; + } } diff --git a/e2e/components/dialog/copy-move-dialog.ts b/e2e/components/dialog/copy-move-dialog.ts new file mode 100755 index 000000000..37d3b2f72 --- /dev/null +++ b/e2e/components/dialog/copy-move-dialog.ts @@ -0,0 +1,126 @@ +import { Utils } from './../../utilities/utils'; +/*! + * @license + * Alfresco Example Content Application + * + * Copyright (C) 2005 - 2018 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 { ElementFinder, by, browser, ExpectedConditions as EC } from 'protractor'; +import { BROWSER_WAIT_TIMEOUT } from '../../configs'; +import { Component } from '../component'; + +export class CopyMoveDialog extends Component { + private static selectors = { + root: '.adf-content-node-selector-dialog', + + title: '.mat-dialog-title', + content: '.mat-dialog-content', + locationDropDown: 'site-dropdown-container', + locationOption: '.mat-option .mat-option-text', + + dataTable: '.adf-datatable-body', + row: '.adf-datatable-row[role]', + selectedRow: '.is-selected', + + button: '.mat-dialog-actions button' + }; + + title: ElementFinder = this.component.element(by.css(CopyMoveDialog.selectors.title)); + content: ElementFinder = this.component.element(by.css(CopyMoveDialog.selectors.content)); + dataTable: ElementFinder = this.component.element(by.css(CopyMoveDialog.selectors.dataTable)); + locationDropDown: ElementFinder = this.component.element(by.id(CopyMoveDialog.selectors.locationDropDown)); + locationPersonalFiles: ElementFinder = browser.element(by.cssContainingText(CopyMoveDialog.selectors.locationOption, 'Personal Files')); + locationFileLibraries: ElementFinder = browser.element(by.cssContainingText(CopyMoveDialog.selectors.locationOption, 'File Libraries')); + + row: ElementFinder = this.component.element(by.css(CopyMoveDialog.selectors.row)); + + cancelButton: ElementFinder = this.component.element(by.cssContainingText(CopyMoveDialog.selectors.button, 'Cancel')); + copyButton: ElementFinder = this.component.element(by.cssContainingText(CopyMoveDialog.selectors.button, 'Copy')); + moveButton: ElementFinder = this.component.element(by.cssContainingText(CopyMoveDialog.selectors.button, 'Move')); + + constructor(ancestor?: ElementFinder) { + super(CopyMoveDialog.selectors.root, ancestor); + } + + async waitForDialogToClose() { + await browser.wait(EC.stalenessOf(this.title), BROWSER_WAIT_TIMEOUT); + } + + async waitForDropDownToOpen() { + await browser.wait(EC.presenceOf(this.locationPersonalFiles), BROWSER_WAIT_TIMEOUT); + } + + async waitForDropDownToClose() { + await browser.wait(EC.stalenessOf(browser.$(CopyMoveDialog.selectors.locationOption)), BROWSER_WAIT_TIMEOUT); + } + + async waitForRowToBeSelected() { + await browser.wait(EC.presenceOf(this.component.element(by.css(CopyMoveDialog.selectors.selectedRow))), BROWSER_WAIT_TIMEOUT); + } + + async isDialogOpen() { + return await browser.$(CopyMoveDialog.selectors.root).isDisplayed(); + } + + async getTitle() { + return await this.title.getText(); + } + + async clickCancel() { + await this.cancelButton.click(); + await this.waitForDialogToClose(); + } + + async clickCopy() { + await this.copyButton.click(); + await this.waitForDialogToClose(); + } + + async clickMove() { + await this.moveButton.click(); + await this.waitForDialogToClose(); + } + + getRow(folderName: string) { + return this.dataTable.element(by.cssContainingText('.adf-name-location-cell', folderName)); + } + + async selectLocation(location: 'Personal Files' | 'File Libraries') { + await this.locationDropDown.click(); + await this.waitForDropDownToOpen(); + + if (location === 'Personal Files') { + await this.locationPersonalFiles.click(); + } else { + await this.locationFileLibraries.click(); + } + + await this.waitForDropDownToClose(); + } + + async chooseDestination(folderName: string) { + const row = this.getRow(folderName); + await Utils.waitUntilElementClickable(row); + await row.click(); + await this.waitForRowToBeSelected(); + } +} diff --git a/e2e/components/dialog/manage-versions-dialog.ts b/e2e/components/dialog/manage-versions-dialog.ts new file mode 100755 index 000000000..94f00315a --- /dev/null +++ b/e2e/components/dialog/manage-versions-dialog.ts @@ -0,0 +1,67 @@ +/*! + * @license + * Alfresco Example Content Application + * + * Copyright (C) 2005 - 2018 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 { ElementFinder, by, browser, ExpectedConditions as EC } from 'protractor'; +import { BROWSER_WAIT_TIMEOUT } from '../../configs'; +import { Component } from '../component'; + +export class ManageVersionsDialog extends Component { + private static selectors = { + root: '.aca-node-versions-dialog', + + title: '.mat-dialog-title', + content: '.mat-dialog-content', + button: '.mat-button' + }; + + title: ElementFinder = this.component.element(by.css(ManageVersionsDialog.selectors.title)); + content: ElementFinder = this.component.element(by.css(ManageVersionsDialog.selectors.content)); + closeButton: ElementFinder = this.component.element(by.cssContainingText(ManageVersionsDialog.selectors.button, 'Close')); + + constructor(ancestor?: ElementFinder) { + super(ManageVersionsDialog.selectors.root, ancestor); + } + + async waitForDialogToClose() { + return await browser.wait(EC.stalenessOf(this.title), BROWSER_WAIT_TIMEOUT); + } + + async isDialogOpen() { + return await browser.$(ManageVersionsDialog.selectors.root).isDisplayed(); + } + + async getTitle() { + return await this.title.getText(); + } + + async getText() { + return await this.content.getText(); + } + + async clickClose() { + await this.closeButton.click(); + await this.waitForDialogToClose(); + } +} diff --git a/e2e/components/dialog/share-dialog.ts b/e2e/components/dialog/share-dialog.ts new file mode 100755 index 000000000..2ca53f426 --- /dev/null +++ b/e2e/components/dialog/share-dialog.ts @@ -0,0 +1,67 @@ +/*! + * @license + * Alfresco Example Content Application + * + * Copyright (C) 2005 - 2018 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 { ElementFinder, by, browser, ExpectedConditions as EC } from 'protractor'; +import { BROWSER_WAIT_TIMEOUT } from '../../configs'; +import { Component } from '../component'; + +export class ShareDialog extends Component { + private static selectors = { + root: '.adf-share-dialog', + + title: '.mat-dialog-title', + content: '.mat-dialog-content', + button: '.mat-button' + }; + + title: ElementFinder = this.component.element(by.css(ShareDialog.selectors.title)); + content: ElementFinder = this.component.element(by.css(ShareDialog.selectors.content)); + closeButton: ElementFinder = this.component.element(by.cssContainingText(ShareDialog.selectors.button, 'CLOSE')); + + constructor(ancestor?: ElementFinder) { + super(ShareDialog.selectors.root, ancestor); + } + + async waitForDialogToClose() { + return await browser.wait(EC.stalenessOf(this.title), BROWSER_WAIT_TIMEOUT); + } + + async isDialogOpen() { + return await browser.$(ShareDialog.selectors.root).isDisplayed(); + } + + async getTitle() { + return await this.title.getText(); + } + + async getText() { + return await this.content.getText(); + } + + async clickClose() { + await this.closeButton.click(); + await this.waitForDialogToClose(); + } +} diff --git a/e2e/components/toolbar/toolbar.ts b/e2e/components/toolbar/toolbar.ts index cd07acb1d..0ec549d77 100755 --- a/e2e/components/toolbar/toolbar.ts +++ b/e2e/components/toolbar/toolbar.ts @@ -23,13 +23,13 @@ * along with Alfresco. If not, see . */ -import { ElementFinder, ElementArrayFinder, by, promise, protractor, browser } from 'protractor'; +import { ElementFinder, ElementArrayFinder, by, protractor, browser } from 'protractor'; import { Menu } from '../menu/menu'; import { Component } from '../component'; export class Toolbar extends Component { private static selectors = { - root: 'adf-toolbar', + root: '.adf-toolbar', button: '.mat-icon-button' }; @@ -70,4 +70,8 @@ export class Toolbar extends Component { return await button.getAttribute('title'); } + async clickButton(title: string) { + const btn = this.getButtonByTitleAttribute(title); + await btn.click(); + } } diff --git a/e2e/components/viewer/viewer.ts b/e2e/components/viewer/viewer.ts index 919f3528b..3f6cca2b9 100755 --- a/e2e/components/viewer/viewer.ts +++ b/e2e/components/viewer/viewer.ts @@ -40,6 +40,7 @@ export class Viewer extends Component { viewerExtensionContent: 'app-preview-extension' }; + root: ElementFinder = browser.$(Viewer.selectors.root); viewerLayout: ElementFinder = this.component.element(by.css(Viewer.selectors.layout)); viewerContainer: ElementFinder = this.component.element(by.css(Viewer.selectors.contentContainer)); closeButton: ElementFinder = this.component.element(by.css(Viewer.selectors.closeBtn)); diff --git a/e2e/configs.ts b/e2e/configs.ts index 18a48f8f6..59a4d950e 100755 --- a/e2e/configs.ts +++ b/e2e/configs.ts @@ -44,57 +44,57 @@ export const E2E_ROOT_PATH = __dirname; // Application Routes export const APP_ROUTES = { - FAVORITES: '/favorites', - FILE_LIBRARIES: '/libraries', - LOGIN: '/login', - LOGOUT: '/logout', - PERSONAL_FILES: '/personal-files', - RECENT_FILES: '/recent-files', - SHARED_FILES: '/shared', - TRASHCAN: '/trashcan' + FAVORITES: '/favorites', + FILE_LIBRARIES: '/libraries', + LOGIN: '/login', + LOGOUT: '/logout', + PERSONAL_FILES: '/personal-files', + RECENT_FILES: '/recent-files', + SHARED_FILES: '/shared', + TRASHCAN: '/trashcan' }; // Sidebar labels export const SIDEBAR_LABELS = { - PERSONAL_FILES: 'Personal Files', - FILE_LIBRARIES: 'File Libraries', - SHARED_FILES: 'Shared', - RECENT_FILES: 'Recent Files', - FAVORITES: 'Favorites', - TRASH: 'Trash' + PERSONAL_FILES: 'Personal Files', + FILE_LIBRARIES: 'File Libraries', + SHARED_FILES: 'Shared', + RECENT_FILES: 'Recent Files', + FAVORITES: 'Favorites', + TRASH: 'Trash' }; // Page titles export const PAGE_TITLES = { - VIEWER: 'Preview', - SEARCH: 'Search Results' + VIEWER: 'Preview', + SEARCH: 'Search Results' }; // Site visibility export const SITE_VISIBILITY = { - PUBLIC: 'PUBLIC', - MODERATED: 'MODERATED', - PRIVATE: 'PRIVATE' + PUBLIC: 'PUBLIC', + MODERATED: 'MODERATED', + PRIVATE: 'PRIVATE' }; // Site roles export const SITE_ROLES = { - SITE_CONSUMER: 'SiteConsumer', - SITE_COLLABORATOR: 'SiteCollaborator', - SITE_CONTRIBUTOR: 'SiteContributor', - SITE_MANAGER: 'SiteManager' + SITE_CONSUMER: 'SiteConsumer', + SITE_COLLABORATOR: 'SiteCollaborator', + SITE_CONTRIBUTOR: 'SiteContributor', + SITE_MANAGER: 'SiteManager' }; export const FILES = { - docxFile: 'file-docx.docx', - xlsxFile: 'file-xlsx.xlsx', - pdfFile: 'file-pdf.pdf', - unsupportedFile: 'file_unsupported.3DS' + docxFile: 'file-docx.docx', + xlsxFile: 'file-xlsx.xlsx', + pdfFile: 'file-pdf.pdf', + unsupportedFile: 'file_unsupported.3DS' }; export const EXTENSIBILITY_CONFIGS = { - DEFAULT_EXTENSIONS_CONFIG: 'extensions-default.json', - INFO_DRAWER: 'info-drawer-ext.json', - INFO_DRAWER_EMPTY: 'info-drawer-no-tabs-ext.json', - VIEWER: 'viewer-ext.json' + DEFAULT_EXTENSIONS_CONFIG: 'extensions-default.json', + INFO_DRAWER: 'info-drawer-ext.json', + INFO_DRAWER_EMPTY: 'info-drawer-no-tabs-ext.json', + VIEWER: 'viewer-ext.json' }; diff --git a/e2e/suites/actions/restore.test.ts b/e2e/suites/actions/restore.test.ts index 44591fa73..5625a5d56 100755 --- a/e2e/suites/actions/restore.test.ts +++ b/e2e/suites/actions/restore.test.ts @@ -30,239 +30,259 @@ import { RepoClient } from '../../utilities/repo-client/repo-client'; import { Utils } from '../../utilities/utils'; describe('Restore from Trash', () => { - const username = `user-${Utils.random()}`; + const username = `user-${Utils.random()}`; - const apis = { - admin: new RepoClient(), - user: new RepoClient(username, username) - }; + const apis = { + admin: new RepoClient(), + user: new RepoClient(username, username) + }; - const loginPage = new LoginPage(); - const logoutPage = new LogoutPage(); - const page = new BrowsingPage(); - const { dataTable, toolbar } = page; + const loginPage = new LoginPage(); + const logoutPage = new LogoutPage(); + const page = new BrowsingPage(); + const { dataTable, toolbar } = page; + + beforeAll(done => { + apis.admin.people + .createUser({ username }) + .then(() => loginPage.loginWith(username)) + .then(done); + }); + + afterAll(done => { + Promise.all([apis.admin.trashcan.emptyTrash(), logoutPage.load()]).then(done); + }); + + xit(''); + + describe('successful restore', () => { + const file = `file-${Utils.random()}.txt`; + let fileId; + const folder = `folder-${Utils.random()}`; + let folderId; beforeAll(done => { - apis.admin.people.createUser({ username }) - .then(() => loginPage.loginWith(username)) - .then(done); - }); - - afterAll(done => { - Promise.all([ - apis.admin.trashcan.emptyTrash(), - logoutPage.load() - ]) + apis.user.nodes + .createFile(file) + .then(resp => (fileId = resp.entry.id)) + .then(() => apis.user.nodes.createFolder(folder).then(resp => (folderId = resp.entry.id))) + .then(() => apis.user.nodes.deleteNodesById([fileId, folderId], false)) .then(done); }); - xit(''); - - describe('successful restore', () => { - const file = `file-${Utils.random()}.txt`; let fileId; - const folder = `folder-${Utils.random()}`; let folderId; - - beforeAll(done => { - apis.user.nodes.createFile(file).then(resp => fileId = resp.entry.id) - .then(() => apis.user.nodes.createFolder(folder).then(resp => folderId = resp.entry.id)) - .then(() => apis.user.nodes.deleteNodesById([ fileId, folderId ], false)) - .then(done); - }); - - beforeEach(done => { - page.sidenav.navigateToLinkByLabel(SIDEBAR_LABELS.TRASH) - .then(() => dataTable.waitForHeader()) - .then(done); - }); - - afterAll(done => { - apis.user.trashcan.emptyTrash().then(done); - }); - - it('restore file - [C217177]', () => { - dataTable.selectItem(file) - .then(() => toolbar.getButtonByTitleAttribute('Restore').click()) - .then(() => page.getSnackBarMessage()) - .then(text => { - expect(text).toContain(`${file} restored`); - expect(text).toContain(`View`); - expect(dataTable.getRowByName(file).isPresent()).toBe(false, 'Item was not removed from list'); - }) - .then(() => page.sidenav.navigateToLinkByLabel(SIDEBAR_LABELS.PERSONAL_FILES)) - .then(() => page.dataTable.waitForHeader()) - .then(() => { - expect(page.dataTable.getRowByName(file).isPresent()).toBe(true, 'Item not displayed in list'); - }) - - .then(() => apis.user.nodes.deleteNodeById(fileId, false)); - }); - - it('restore folder - [C280438]', () => { - dataTable.selectItem(folder) - .then(() => toolbar.getButtonByTitleAttribute('Restore').click()) - .then(() => page.getSnackBarMessage()) - .then(text => { - expect(text).toContain(`${folder} restored`); - expect(text).toContain(`View`); - expect(dataTable.getRowByName(folder).isPresent()).toBe(false, 'Item was not removed from list'); - }) - .then(() => page.sidenav.navigateToLinkByLabel(SIDEBAR_LABELS.PERSONAL_FILES)) - .then(() => page.dataTable.waitForHeader()) - .then(() => { - expect(page.dataTable.getRowByName(folder).isPresent()).toBe(true, 'Item not displayed in list'); - }) - - .then(() => apis.user.nodes.deleteNodeById(folderId, false)); - }); - - it('restore multiple items - [C217182]', () => { - dataTable.selectMultipleItems([ file, folder ]) - .then(() => toolbar.getButtonByTitleAttribute('Restore').click()) - .then(() => page.getSnackBarMessage()) - .then(text => { - expect(text).toContain(`Restore successful`); - expect(text).not.toContain(`View`); - expect(dataTable.getRowByName(file).isPresent()).toBe(false, 'Item was not removed from list'); - expect(dataTable.getRowByName(folder).isPresent()).toBe(false, 'Item was not removed from list'); - }) - .then(() => page.sidenav.navigateToLinkByLabel(SIDEBAR_LABELS.PERSONAL_FILES)) - .then(() => page.dataTable.waitForHeader()) - .then(() => { - expect(page.dataTable.getRowByName(file).isPresent()).toBe(true, 'Item not displayed in list'); - expect(page.dataTable.getRowByName(folder).isPresent()).toBe(true, 'Item not displayed in list'); - }) - - .then(() => apis.user.nodes.deleteNodesById([ fileId, folderId ], false)); - }); - - it('View from notification - [C217181]', () => { - dataTable.selectItem(file) - .then(() => toolbar.getButtonByTitleAttribute('Restore').click()) - .then(() => page.clickSnackBarAction()) - .then(() => page.dataTable.waitForHeader()) - .then(() => { - expect(page.sidenav.isActiveByLabel('Personal Files')).toBe(true, 'Personal Files sidebar link not active'); - expect(browser.getCurrentUrl()).toContain(APP_ROUTES.PERSONAL_FILES); - }) - - .then(() => apis.user.nodes.deleteNodeById(fileId, false)); - }); + beforeEach(done => { + page.sidenav + .navigateToLinkByLabel(SIDEBAR_LABELS.TRASH) + .then(() => dataTable.waitForHeader()) + .then(done); }); - describe('failure to restore', () => { - const file1 = `file-${Utils.random()}.txt`; let file1Id1, file1Id2; - const file2 = `file-${Utils.random()}.txt`; let file2Id; - - const folder1 = `folder-${Utils.random()}`; let folder1Id; - const folder2 = `folder-${Utils.random()}`; let folder2Id; - - beforeAll(done => { - apis.user.nodes.createFolder(folder1).then(resp => folder1Id = resp.entry.id) - .then(() => apis.user.nodes.createFile(file1, folder1Id).then(resp => file1Id1 = resp.entry.id)) - .then(() => apis.user.nodes.deleteNodeById(file1Id1, false)) - .then(() => apis.user.nodes.createFile(file1, folder1Id).then(resp => file1Id2 = resp.entry.id)) - - .then(() => apis.user.nodes.createFolder(folder2).then(resp => folder2Id = resp.entry.id)) - .then(() => apis.user.nodes.createFile(file2, folder2Id).then(resp => file2Id = resp.entry.id)) - .then(() => apis.user.nodes.deleteNodeById(file2Id, false)) - .then(() => apis.user.nodes.deleteNodeById(folder2Id, false)) - - .then(done); - }); - - beforeEach(done => { - page.sidenav.navigateToLinkByLabel(SIDEBAR_LABELS.TRASH) - .then(() => dataTable.waitForHeader()) - .then(done); - }); - - afterAll(done => { - Promise.all([ - apis.user.nodes.deleteNodeById(file1Id2), - apis.user.trashcan.emptyTrash() - ]) - .then(done); - }); - - it('Restore a file when another file with same name exists on the restore location - [C217178]', () => { - page.sidenav.navigateToLinkByLabel(SIDEBAR_LABELS.TRASH) - .then(() => dataTable.selectItem(file1)) - .then(() => toolbar.getButtonByTitleAttribute('Restore').click()) - .then(() => page.getSnackBarMessage()) - .then(text => expect(text).toEqual(`Can't restore, ${file1} already exists`)); - }); - - it('Restore a file when original location no longer exists - [C217179]', () => { - page.sidenav.navigateToLinkByLabel(SIDEBAR_LABELS.TRASH) - .then(() => dataTable.selectItem(file2)) - .then(() => toolbar.getButtonByTitleAttribute('Restore').click()) - .then(() => page.getSnackBarMessage()) - .then(text => expect(text).toEqual(`Can't restore ${file2}, the original location no longer exists`)); - }); - + afterAll(done => { + apis.user.trashcan.emptyTrash().then(done); }); - describe('Notification on partial success', () => { - const folder1 = `folder1-${Utils.random()}.txt`; let folder1Id; - const folder2 = `folder2-${Utils.random()}.txt`; let folder2Id; - const file1 = `file-${Utils.random()}.txt`; let file1Id; - const file2 = `file-${Utils.random()}.txt`; let file2Id; + it('restore file - [C217177]', () => { + dataTable + .selectItem(file) + .then(() => toolbar.getButtonByTitleAttribute('Restore').click()) + .then(() => page.getSnackBarMessage()) + .then(text => { + expect(text).toContain(`${file} restored`); + expect(text).toContain(`View`); + expect(dataTable.getRowByName(file).isPresent()).toBe(false, 'Item was not removed from list'); + }) + .then(() => page.sidenav.navigateToLinkByLabel(SIDEBAR_LABELS.PERSONAL_FILES)) + .then(() => page.dataTable.waitForHeader()) + .then(() => { + expect(page.dataTable.getRowByName(file).isPresent()).toBe(true, 'Item not displayed in list'); + }) - const folder3 = `folder3-${Utils.random()}.txt`; let folder3Id; - const folder4 = `folder4-${Utils.random()}.txt`; let folder4Id; - const file3 = `file3-${Utils.random()}.txt`; let file3Id; - const file4 = `file4-${Utils.random()}.txt`; let file4Id; - const file5 = `file5-${Utils.random()}.txt`; let file5Id; - - beforeAll(done => { - apis.user.nodes.createFolder(folder1).then(resp => folder1Id = resp.entry.id) - .then(() => apis.user.nodes.createFile(file1, folder1Id).then(resp => file1Id = resp.entry.id)) - .then(() => apis.user.nodes.createFolder(folder2).then(resp => folder2Id = resp.entry.id)) - .then(() => apis.user.nodes.createFile(file2, folder2Id).then(resp => file2Id = resp.entry.id)) - .then(() => apis.user.nodes.deleteNodeById(file1Id, false)) - .then(() => apis.user.nodes.deleteNodeById(folder1Id, false)) - .then(() => apis.user.nodes.deleteNodeById(file2Id, false)) - - .then(() => apis.user.nodes.createFolder(folder3).then(resp => folder3Id = resp.entry.id)) - .then(() => apis.user.nodes.createFile(file3, folder3Id).then(resp => file3Id = resp.entry.id)) - .then(() => apis.user.nodes.createFile(file4, folder3Id).then(resp => file4Id = resp.entry.id)) - .then(() => apis.user.nodes.createFolder(folder4).then(resp => folder4Id = resp.entry.id)) - .then(() => apis.user.nodes.createFile(file5, folder4Id).then(resp => file5Id = resp.entry.id)) - .then(() => apis.user.nodes.deleteNodeById(file3Id, false)) - .then(() => apis.user.nodes.deleteNodeById(file4Id, false)) - .then(() => apis.user.nodes.deleteNodeById(folder3Id, false)) - .then(() => apis.user.nodes.deleteNodeById(file5Id, false)) - - .then(() => loginPage.loginWith(username)) - .then(done); - }); - - beforeEach(done => { - page.sidenav.navigateToLinkByLabel(SIDEBAR_LABELS.TRASH) - .then(() => dataTable.waitForHeader()) - .then(done); - }); - - afterAll(done => { - Promise.all([ - apis.user.trashcan.emptyTrash(), - logoutPage.load() - ]) - .then(done); - }); - - it('one failure - [C217183]', () => { - dataTable.selectMultipleItems([ file1, file2 ]) - .then(() => toolbar.getButtonByTitleAttribute('Restore').click()) - .then(() => page.getSnackBarMessage()) - .then(text => expect(text).toEqual(`Can't restore ${file1}, the original location no longer exists`)); - }); - - it('multiple failures - [C217184]', () => { - dataTable.selectMultipleItems([ file3, file4, file5 ]) - .then(() => toolbar.getButtonByTitleAttribute('Restore').click()) - .then(() => page.getSnackBarMessage()) - .then(text => expect(text).toEqual('2 items not restored because of issues with the restore location')); - }); + .then(() => apis.user.nodes.deleteNodeById(fileId, false)); }); + + it('restore folder - [C280438]', () => { + dataTable + .selectItem(folder) + .then(() => toolbar.getButtonByTitleAttribute('Restore').click()) + .then(() => page.getSnackBarMessage()) + .then(text => { + expect(text).toContain(`${folder} restored`); + expect(text).toContain(`View`); + expect(dataTable.getRowByName(folder).isPresent()).toBe(false, 'Item was not removed from list'); + }) + .then(() => page.sidenav.navigateToLinkByLabel(SIDEBAR_LABELS.PERSONAL_FILES)) + .then(() => page.dataTable.waitForHeader()) + .then(() => { + expect(page.dataTable.getRowByName(folder).isPresent()).toBe(true, 'Item not displayed in list'); + }) + + .then(() => apis.user.nodes.deleteNodeById(folderId, false)); + }); + + it('restore multiple items - [C217182]', () => { + dataTable + .selectMultipleItems([file, folder]) + .then(() => toolbar.getButtonByTitleAttribute('Restore').click()) + .then(() => page.getSnackBarMessage()) + .then(text => { + expect(text).toContain(`Restore successful`); + expect(text).not.toContain(`View`); + expect(dataTable.getRowByName(file).isPresent()).toBe(false, 'Item was not removed from list'); + expect(dataTable.getRowByName(folder).isPresent()).toBe(false, 'Item was not removed from list'); + }) + .then(() => page.sidenav.navigateToLinkByLabel(SIDEBAR_LABELS.PERSONAL_FILES)) + .then(() => page.dataTable.waitForHeader()) + .then(() => { + expect(page.dataTable.getRowByName(file).isPresent()).toBe(true, 'Item not displayed in list'); + expect(page.dataTable.getRowByName(folder).isPresent()).toBe(true, 'Item not displayed in list'); + }) + + .then(() => apis.user.nodes.deleteNodesById([fileId, folderId], false)); + }); + + it('View from notification - [C217181]', () => { + dataTable + .selectItem(file) + .then(() => toolbar.getButtonByTitleAttribute('Restore').click()) + .then(() => page.clickSnackBarAction()) + .then(() => page.dataTable.waitForHeader()) + .then(() => { + expect(page.sidenav.isActiveByLabel('Personal Files')).toBe(true, 'Personal Files sidebar link not active'); + expect(browser.getCurrentUrl()).toContain(APP_ROUTES.PERSONAL_FILES); + }) + + .then(() => apis.user.nodes.deleteNodeById(fileId, false)); + }); + }); + + describe('failure to restore', () => { + const file1 = `file-${Utils.random()}.txt`; + let file1Id1, file1Id2; + const file2 = `file-${Utils.random()}.txt`; + let file2Id; + + const folder1 = `folder-${Utils.random()}`; + let folder1Id; + const folder2 = `folder-${Utils.random()}`; + let folder2Id; + + beforeAll(done => { + apis.user.nodes + .createFolder(folder1) + .then(resp => (folder1Id = resp.entry.id)) + .then(() => apis.user.nodes.createFile(file1, folder1Id).then(resp => (file1Id1 = resp.entry.id))) + .then(() => apis.user.nodes.deleteNodeById(file1Id1, false)) + .then(() => apis.user.nodes.createFile(file1, folder1Id).then(resp => (file1Id2 = resp.entry.id))) + + .then(() => apis.user.nodes.createFolder(folder2).then(resp => (folder2Id = resp.entry.id))) + .then(() => apis.user.nodes.createFile(file2, folder2Id).then(resp => (file2Id = resp.entry.id))) + .then(() => apis.user.nodes.deleteNodeById(file2Id, false)) + .then(() => apis.user.nodes.deleteNodeById(folder2Id, false)) + + .then(done); + }); + + beforeEach(done => { + page.sidenav + .navigateToLinkByLabel(SIDEBAR_LABELS.TRASH) + .then(() => dataTable.waitForHeader()) + .then(done); + }); + + afterAll(done => { + Promise.all([apis.user.nodes.deleteNodeById(file1Id2), apis.user.trashcan.emptyTrash()]).then(done); + }); + + it('Restore a file when another file with same name exists on the restore location - [C217178]', () => { + page.sidenav + .navigateToLinkByLabel(SIDEBAR_LABELS.TRASH) + .then(() => dataTable.selectItem(file1)) + .then(() => toolbar.getButtonByTitleAttribute('Restore').click()) + .then(() => page.getSnackBarMessage()) + .then(text => expect(text).toEqual(`Can't restore, ${file1} already exists`)); + }); + + it('Restore a file when original location no longer exists - [C217179]', () => { + page.sidenav + .navigateToLinkByLabel(SIDEBAR_LABELS.TRASH) + .then(() => dataTable.selectItem(file2)) + .then(() => toolbar.getButtonByTitleAttribute('Restore').click()) + .then(() => page.getSnackBarMessage()) + .then(text => expect(text).toEqual(`Can't restore ${file2}, the original location no longer exists`)); + }); + }); + + describe('Notification on partial success', () => { + const folder1 = `folder1-${Utils.random()}.txt`; + let folder1Id; + const folder2 = `folder2-${Utils.random()}.txt`; + let folder2Id; + const file1 = `file-${Utils.random()}.txt`; + let file1Id; + const file2 = `file-${Utils.random()}.txt`; + let file2Id; + + const folder3 = `folder3-${Utils.random()}.txt`; + let folder3Id; + const folder4 = `folder4-${Utils.random()}.txt`; + let folder4Id; + const file3 = `file3-${Utils.random()}.txt`; + let file3Id; + const file4 = `file4-${Utils.random()}.txt`; + let file4Id; + const file5 = `file5-${Utils.random()}.txt`; + let file5Id; + + beforeAll(done => { + apis.user.nodes + .createFolder(folder1) + .then(resp => (folder1Id = resp.entry.id)) + .then(() => apis.user.nodes.createFile(file1, folder1Id).then(resp => (file1Id = resp.entry.id))) + .then(() => apis.user.nodes.createFolder(folder2).then(resp => (folder2Id = resp.entry.id))) + .then(() => apis.user.nodes.createFile(file2, folder2Id).then(resp => (file2Id = resp.entry.id))) + .then(() => apis.user.nodes.deleteNodeById(file1Id, false)) + .then(() => apis.user.nodes.deleteNodeById(folder1Id, false)) + .then(() => apis.user.nodes.deleteNodeById(file2Id, false)) + + .then(() => apis.user.nodes.createFolder(folder3).then(resp => (folder3Id = resp.entry.id))) + .then(() => apis.user.nodes.createFile(file3, folder3Id).then(resp => (file3Id = resp.entry.id))) + .then(() => apis.user.nodes.createFile(file4, folder3Id).then(resp => (file4Id = resp.entry.id))) + .then(() => apis.user.nodes.createFolder(folder4).then(resp => (folder4Id = resp.entry.id))) + .then(() => apis.user.nodes.createFile(file5, folder4Id).then(resp => (file5Id = resp.entry.id))) + .then(() => apis.user.nodes.deleteNodeById(file3Id, false)) + .then(() => apis.user.nodes.deleteNodeById(file4Id, false)) + .then(() => apis.user.nodes.deleteNodeById(folder3Id, false)) + .then(() => apis.user.nodes.deleteNodeById(file5Id, false)) + + .then(() => loginPage.loginWith(username)) + .then(done); + }); + + beforeEach(done => { + page.sidenav + .navigateToLinkByLabel(SIDEBAR_LABELS.TRASH) + .then(() => dataTable.waitForHeader()) + .then(done); + }); + + afterAll(done => { + Promise.all([apis.user.trashcan.emptyTrash(), logoutPage.load()]).then(done); + }); + + it('one failure - [C217183]', () => { + dataTable + .selectMultipleItems([file1, file2]) + .then(() => toolbar.getButtonByTitleAttribute('Restore').click()) + .then(() => page.getSnackBarMessage()) + .then(text => expect(text).toEqual(`Can't restore ${file1}, the original location no longer exists`)); + }); + + it('multiple failures - [C217184]', () => { + dataTable + .selectMultipleItems([file3, file4, file5]) + .then(() => toolbar.getButtonByTitleAttribute('Restore').click()) + .then(() => page.getSnackBarMessage()) + .then(text => expect(text).toEqual('2 items not restored because of issues with the restore location')); + }); + }); }); diff --git a/e2e/suites/actions/special-permissions-available-actions.test.ts b/e2e/suites/actions/special-permissions-available-actions.test.ts index e4b7ab100..fdbf2f6e4 100755 --- a/e2e/suites/actions/special-permissions-available-actions.test.ts +++ b/e2e/suites/actions/special-permissions-available-actions.test.ts @@ -23,609 +23,697 @@ * along with Alfresco. If not, see . */ -import { browser, protractor } from 'protractor'; import { LoginPage, LogoutPage, BrowsingPage } from '../../pages/pages'; -import { SITE_VISIBILITY, SITE_ROLES, SIDEBAR_LABELS } from '../../configs'; +import { SITE_VISIBILITY, SITE_ROLES, SIDEBAR_LABELS, FILES } from '../../configs'; import { RepoClient } from '../../utilities/repo-client/repo-client'; import { Utils } from '../../utilities/utils'; +import { Viewer } from '../../components/viewer/viewer'; describe('Granular permissions available actions : ', () => { - const userConsumer = `consumer-${Utils.random()}`; - const userManager = `manager-${Utils.random()}`; + const userConsumer = `consumer-${Utils.random()}`; + const userManager = `manager-${Utils.random()}`; - const siteName = `site-private-${Utils.random()}`; - const file1 = `file1-${Utils.random()}.txt`; let file1Id; - const file2 = `file2-${Utils.random()}.txt`; let file2Id; - const file3 = `file3-${Utils.random()}.txt`; let file3Id; + const siteName = `site-private-${Utils.random()}`; + const file1 = `file1-${Utils.random()}.txt`; + let file1Id; + const file2 = `file2-${Utils.random()}.txt`; + let file2Id; + const file3 = `file3-${Utils.random()}.txt`; + let file3Id; - const folder1 = `folder1-${Utils.random()}`; let folder1Id; - const folder2 = `folder2-${Utils.random()}`; let folder2Id; + const folder1 = `folder1-${Utils.random()}`; + let folder1Id; + const folder2 = `folder2-${Utils.random()}`; + let folder2Id; - const apis = { - admin: new RepoClient(), - userConsumer: new RepoClient(userConsumer, userConsumer), - userManager: new RepoClient(userManager, userManager) - }; + const docxFile = FILES.docxFile; + let docxFileId; - const loginPage = new LoginPage(); - const logoutPage = new LogoutPage(); - const page = new BrowsingPage(); - const { dataTable, toolbar } = page; - const contextMenu = dataTable.menu; + const apis = { + admin: new RepoClient(), + userConsumer: new RepoClient(userConsumer, userConsumer), + userManager: new RepoClient(userManager, userManager) + }; - beforeAll(async (done) => { - await apis.admin.people.createUser({ username: userConsumer }); - await apis.admin.people.createUser({ username: userManager }); + const loginPage = new LoginPage(); + const logoutPage = new LogoutPage(); + const page = new BrowsingPage(); + const { dataTable, toolbar } = page; + const contextMenu = dataTable.menu; + const viewer = new Viewer(); + const viewerToolbar = viewer.toolbar; - await apis.admin.sites.createSite(siteName, SITE_VISIBILITY.PRIVATE); - const docLibId = await apis.admin.sites.getDocLibId(siteName); + beforeAll(async done => { + await apis.admin.people.createUser({ username: userConsumer }); + await apis.admin.people.createUser({ username: userManager }); - file1Id = (await apis.admin.nodes.createFile(file1, docLibId)).entry.id; - file2Id = (await apis.admin.nodes.createFile(file2, docLibId)).entry.id; - file3Id = (await apis.admin.nodes.createFile(file3, docLibId)).entry.id; - folder1Id = (await apis.admin.nodes.createFolder(folder1, docLibId)).entry.id; - folder2Id = (await apis.admin.nodes.createFolder(folder2, docLibId)).entry.id; + await apis.admin.sites.createSite(siteName, SITE_VISIBILITY.PRIVATE); + const docLibId = await apis.admin.sites.getDocLibId(siteName); - await apis.admin.sites.addSiteMember(siteName, userManager, SITE_ROLES.SITE_MANAGER); - await apis.admin.sites.addSiteMember(siteName, userConsumer, SITE_ROLES.SITE_CONSUMER); + file1Id = (await apis.admin.nodes.createFile(file1, docLibId)).entry.id; + file2Id = (await apis.admin.nodes.createFile(file2, docLibId)).entry.id; + file3Id = (await apis.admin.nodes.createFile(file3, docLibId)).entry.id; + folder1Id = (await apis.admin.nodes.createFolder(folder1, docLibId)).entry.id; + folder2Id = (await apis.admin.nodes.createFolder(folder2, docLibId)).entry.id; - await apis.admin.nodes.setGranularPermission(file3Id, false, userConsumer, SITE_ROLES.SITE_MANAGER); + docxFileId = (await apis.admin.upload.uploadFile(docxFile, docLibId)).entry.id; - await apis.userConsumer.shared.shareFileById(file1Id); - await apis.userConsumer.shared.shareFileById(file2Id); - await apis.admin.shared.shareFileById(file3Id); - await apis.userConsumer.shared.waitForApi({ expect: 3 }); + await apis.admin.sites.addSiteMember(siteName, userManager, SITE_ROLES.SITE_MANAGER); + await apis.admin.sites.addSiteMember(siteName, userConsumer, SITE_ROLES.SITE_CONSUMER); - await apis.userConsumer.favorites.addFavoritesByIds('file', [ file1Id, file2Id, file3Id ]); - await apis.userConsumer.favorites.addFavoritesByIds('folder', [ folder1Id, folder2Id ]); - await apis.userConsumer.favorites.waitForApi({ expect: 5 }); + await apis.admin.nodes.setGranularPermission(file3Id, false, userConsumer, SITE_ROLES.SITE_MANAGER); - await loginPage.loginWith(userConsumer); - done(); + await apis.userConsumer.shared.shareFileById(file1Id); + await apis.userConsumer.shared.shareFileById(file2Id); + await apis.userConsumer.shared.shareFileById(docxFileId); + await apis.userConsumer.shared.shareFileById(file3Id); + await apis.userConsumer.shared.waitForApi({ expect: 4 }); + + await apis.userConsumer.favorites.addFavoritesByIds('file', [file1Id, file2Id, file3Id, docxFileId]); + await apis.userConsumer.favorites.addFavoritesByIds('folder', [folder1Id, folder2Id]); + await apis.userConsumer.favorites.waitForApi({ expect: 6 }); + + await loginPage.loginWith(userConsumer); + done(); + }); + + afterAll(async done => { + await Promise.all([apis.admin.sites.deleteSite(siteName), logoutPage.load()]); + done(); + }); + + xit(''); + + describe('toolbar displays correct actions when selecting multiple files with different granular permissions', () => { + beforeEach(async done => { + await Utils.pressEscape(); + done(); }); - afterAll(async (done) => { - await Promise.all([ - apis.admin.sites.deleteSite(siteName), - logoutPage.load() - ]); - done(); + it('on File Libraries - [C280476]', async () => { + await page.sidenav.navigateToLinkByLabel(SIDEBAR_LABELS.FILE_LIBRARIES); + await dataTable.waitForHeader(); + await dataTable.doubleClickOnRowByName(siteName); + await dataTable.waitForHeader(); + await dataTable.selectMultipleItems([file1, file2]); + expect(await toolbar.isButtonPresent('View')).toBe(false, `View is displayed for selected files`); + expect(await toolbar.isButtonPresent('Download')).toBe(true, `Download is not displayed for selected files`); + expect(await toolbar.isButtonPresent('Edit')).toBe(false, `Edit is displayed for selected files`); + const menu = await toolbar.openMoreMenu(); + expect(await menu.isMenuItemPresent('Copy')).toBe(true, `Copy is not displayed for selected files`); + expect(await menu.isMenuItemPresent('Delete')).toBe(false, `Delete is displayed for selected files`); + expect(await menu.isMenuItemPresent('Move')).toBe(false, `Move is displayed for selected files`); + expect(await menu.isMenuItemPresent('Favorite')).toBe(true, `Favorite is not displayed for selected files`); + await toolbar.closeMoreMenu(); }); - xit(''); - - describe('toolbar displays correct actions when selecting multiple files with different granular permissions', () => { - beforeEach(async (done) => { - await browser.actions().sendKeys(protractor.Key.ESCAPE).perform(); - done(); - }); - - it('on File Libraries - [C280476]', async () => { - await page.sidenav.navigateToLinkByLabel(SIDEBAR_LABELS.FILE_LIBRARIES); - await dataTable.waitForHeader(); - await dataTable.doubleClickOnRowByName(siteName); - await dataTable.waitForHeader(); - await dataTable.selectMultipleItems([ file1, file2 ]); - expect(await toolbar.isButtonPresent('View')).toBe(false, `View is displayed for selected files`); - expect(await toolbar.isButtonPresent('Download')).toBe(true, `Download is not displayed for selected files`); - expect(await toolbar.isButtonPresent('Edit')).toBe(false, `Edit is displayed for selected files`); - const menu = await toolbar.openMoreMenu(); - expect(await menu.isMenuItemPresent('Copy')).toBe(true, `Copy is not displayed for selected files`); - expect(await menu.isMenuItemPresent('Delete')).toBe(false, `Delete is displayed for selected files`); - expect(await menu.isMenuItemPresent('Move')).toBe(false, `Move is displayed for selected files`); - expect(await menu.isMenuItemPresent('Favorite')).toBe(true, `Favorite is not displayed for selected files`); - await toolbar.closeMoreMenu(); - }); - - it('on Shared Files - [C280477]', async () => { - await page.sidenav.navigateToLinkByLabel(SIDEBAR_LABELS.SHARED_FILES); - await dataTable.waitForHeader(); - await dataTable.selectMultipleItems([ file1, file2 ]); - expect(await toolbar.isButtonPresent('View')).toBe(false, `View is displayed for selected files`); - expect(await toolbar.isButtonPresent('Download')).toBe(true, `Download is not displayed for selected files`); - expect(await toolbar.isButtonPresent('Edit')).toBe(false, `Edit is displayed for selected files`); - const menu = await toolbar.openMoreMenu(); - expect(await menu.isMenuItemPresent('Copy')).toBe(true, `Copy is not displayed for selected files`); - expect(await menu.isMenuItemPresent('Delete')).toBe(false, `Delete is displayed for selected files`); - expect(await menu.isMenuItemPresent('Move')).toBe(false, `Move is displayed for selected files`); - expect(await menu.isMenuItemPresent('Favorite')).toBe(true, `Favorite is not displayed for selected files`); - await toolbar.closeMoreMenu(); - }); - - it('on Favorites - [C280478]', async () => { - await page.sidenav.navigateToLinkByLabel(SIDEBAR_LABELS.FAVORITES); - await dataTable.waitForHeader(); - await dataTable.selectMultipleItems([ file1, file2 ]); - expect(await toolbar.isButtonPresent('View')).toBe(false, `View is displayed for selected files`); - expect(await toolbar.isButtonPresent('Download')).toBe(true, `Download is not displayed for selected files`); - expect(await toolbar.isButtonPresent('Edit')).toBe(false, `Edit is displayed for selected files`); - const menu = await toolbar.openMoreMenu(); - expect(await menu.isMenuItemPresent('Copy')).toBe(true, `Copy is not displayed for selected files`); - // TODO: enable when ACA-1737 is done - // expect(await menu.isMenuItemPresent('Delete')).toBe(false, `Delete is displayed for selected files`); - // expect(await menu.isMenuItemPresent('Move')).toBe(false, `Move is displayed for selected files`); - expect(await menu.isMenuItemPresent('Favorite')).toBe(true, `Favorite is not displayed for selected files`); - await toolbar.closeMoreMenu(); - }); + it('on Shared Files - [C280477]', async () => { + await page.sidenav.navigateToLinkByLabel(SIDEBAR_LABELS.SHARED_FILES); + await dataTable.waitForHeader(); + await dataTable.selectMultipleItems([file1, file2]); + expect(await toolbar.isButtonPresent('View')).toBe(false, `View is displayed for selected files`); + expect(await toolbar.isButtonPresent('Download')).toBe(true, `Download is not displayed for selected files`); + expect(await toolbar.isButtonPresent('Edit')).toBe(false, `Edit is displayed for selected files`); + const menu = await toolbar.openMoreMenu(); + expect(await menu.isMenuItemPresent('Copy')).toBe(true, `Copy is not displayed for selected files`); + expect(await menu.isMenuItemPresent('Delete')).toBe(false, `Delete is displayed for selected files`); + expect(await menu.isMenuItemPresent('Move')).toBe(false, `Move is displayed for selected files`); + expect(await menu.isMenuItemPresent('Favorite')).toBe(true, `Favorite is not displayed for selected files`); + await toolbar.closeMoreMenu(); }); - describe('toolbar actions appear correctly for a file - consumer', () => { - beforeEach(async (done) => { - await browser.actions().sendKeys(protractor.Key.ESCAPE).perform(); - done(); - }); + it('on Favorites - [C280478]', async () => { + await page.sidenav.navigateToLinkByLabel(SIDEBAR_LABELS.FAVORITES); + await dataTable.waitForHeader(); + await dataTable.selectMultipleItems([file1, file2]); + expect(await toolbar.isButtonPresent('View')).toBe(false, `View is displayed for selected files`); + expect(await toolbar.isButtonPresent('Download')).toBe(true, `Download is not displayed for selected files`); + expect(await toolbar.isButtonPresent('Edit')).toBe(false, `Edit is displayed for selected files`); + const menu = await toolbar.openMoreMenu(); + expect(await menu.isMenuItemPresent('Copy')).toBe(true, `Copy is not displayed for selected files`); + // TODO: enable when ACA-1737 is done + // expect(await menu.isMenuItemPresent('Delete')).toBe(false, `Delete is displayed for selected files`); + // expect(await menu.isMenuItemPresent('Move')).toBe(false, `Move is displayed for selected files`); + expect(await menu.isMenuItemPresent('Favorite')).toBe(true, `Favorite is not displayed for selected files`); + await toolbar.closeMoreMenu(); + }); + }); - it('on File Libraries - [C280455]', async () => { - await page.sidenav.navigateToLinkByLabel(SIDEBAR_LABELS.FILE_LIBRARIES); - await dataTable.waitForHeader(); - await dataTable.doubleClickOnRowByName(siteName); - await dataTable.waitForHeader(); - await dataTable.selectItem(file1); - expect(await toolbar.isButtonPresent('View')).toBe(true, `View is not displayed for ${file1}`); - expect(await toolbar.isButtonPresent('Download')).toBe(true, `Download is not displayed for ${file1}`); - expect(await toolbar.isButtonPresent('View details')).toBe(true, `View details is not displayed for ${file1}`); - expect(await toolbar.isButtonPresent('Edit')).toBe(false, `Edit is displayed for ${file1}`); - - const menu = await toolbar.openMoreMenu(); - expect(await menu.isMenuItemPresent('Copy')).toBe(true, `Copy is not displayed for ${file1}`); - expect(await menu.isMenuItemPresent('Delete')).toBe(false, `Delete is displayed for ${file1}`); - expect(await menu.isMenuItemPresent('Move')).toBe(false, `Move is displayed for ${file1}`); - expect(await menu.isMenuItemPresent('Favorite')).toBe(true, `Favorite is not displayed for ${file1}`); - await toolbar.closeMoreMenu(); - }); - - it('on Shared Files - [C280456]', async () => { - await page.sidenav.navigateToLinkByLabel(SIDEBAR_LABELS.SHARED_FILES); - await page.dataTable.waitForHeader(); - await page.dataTable.selectItem(file1); - expect(await toolbar.isButtonPresent('View')).toBe(true, `View is not displayed for ${file1}`); - expect(await toolbar.isButtonPresent('Download')).toBe(true, `Download is not displayed for ${file1}`); - expect(await toolbar.isButtonPresent('View details')).toBe(true, `View details is not displayed for ${file1}`); - expect(await toolbar.isButtonPresent('Edit')).toBe(false, `Edit is displayed for ${file1}`); - const menu = await toolbar.openMoreMenu(); - - expect(await menu.isMenuItemPresent('Copy')).toBe(true, `Copy is not displayed for ${file1}`); - expect(await menu.isMenuItemPresent('Delete')).toBe(false, `Delete is displayed for ${file1}`); - expect(await menu.isMenuItemPresent('Move')).toBe(false, `Move is displayed for ${file1}`); - expect(await menu.isMenuItemPresent('Favorite')).toBe(true, `Favorite is not displayed for ${file1}`); - await toolbar.closeMoreMenu(); - }); - - it('on Favorites - [C213121]', async () => { - await page.sidenav.navigateToLinkByLabel(SIDEBAR_LABELS.FAVORITES); - await dataTable.waitForHeader(); - await dataTable.selectItem(file1); - expect(await toolbar.isButtonPresent('View')).toBe(true, `View is not displayed for ${file1}`); - expect(await toolbar.isButtonPresent('Download')).toBe(true, `Download is not displayed for ${file1}`); - expect(await toolbar.isButtonPresent('View details')).toBe(true, `View details is not displayed for ${file1}`); - expect(await toolbar.isButtonPresent('Edit')).toBe(false, `Edit is displayed for ${file1}`); - const menu = await toolbar.openMoreMenu(); - expect(await menu.isMenuItemPresent('Copy')).toBe(true, `Copy is not displayed for ${file1}`); - // TODO: enable when ACA-1737 is done - // expect(await menu.isMenuItemPresent('Delete')).toBe(false, `Delete is displayed for ${file1}`); - // expect(await menu.isMenuItemPresent('Move')).toBe(false, `Move is displayed for ${file1}`); - expect(await menu.isMenuItemPresent('Favorite')).toBe(true, `Favorite is not displayed for ${file1}`); - await toolbar.closeMoreMenu(); - }); + describe('toolbar actions appear correctly for a file - consumer', () => { + beforeEach(async done => { + await Utils.pressEscape(); + done(); }); - describe('toolbar actions appear correctly for a folder - consumer', () => { - beforeEach(async (done) => { - await browser.actions().sendKeys(protractor.Key.ESCAPE).perform(); - done(); - }); + it('on File Libraries - [C280455]', async () => { + await page.sidenav.navigateToLinkByLabel(SIDEBAR_LABELS.FILE_LIBRARIES); + await dataTable.waitForHeader(); + await dataTable.doubleClickOnRowByName(siteName); + await dataTable.waitForHeader(); + await dataTable.selectItem(file1); + expect(await toolbar.isButtonPresent('View')).toBe(true, `View is not displayed for ${file1}`); + expect(await toolbar.isButtonPresent('Download')).toBe(true, `Download is not displayed for ${file1}`); + expect(await toolbar.isButtonPresent('View details')).toBe(true, `View details is not displayed for ${file1}`); + expect(await toolbar.isButtonPresent('Edit')).toBe(false, `Edit is displayed for ${file1}`); - it('on File Libraries - [C280444]', async () => { - await page.sidenav.navigateToLinkByLabel(SIDEBAR_LABELS.FILE_LIBRARIES); - await dataTable.waitForHeader(); - await dataTable.doubleClickOnRowByName(siteName); - await dataTable.waitForHeader(); - await dataTable.selectItem(folder1); - expect(await toolbar.isButtonPresent('View')).toBe(false, `View is displayed for ${folder1}`); - expect(await toolbar.isButtonPresent('Download')).toBe(true, `Download is not displayed for ${folder1}`); - expect(await toolbar.isButtonPresent('View details')).toBe(true, `View details is not displayed for ${folder1}`); - expect(await toolbar.isButtonPresent('Edit')).toBe(false, `Edit is displayed for ${folder1}`); - - const menu = await toolbar.openMoreMenu(); - expect(await menu.isMenuItemPresent('Copy')).toBe(true, `Copy is not displayed for ${folder1}`); - expect(await menu.isMenuItemPresent('Delete')).toBe(false, `Delete is displayed for ${folder1}`); - expect(await menu.isMenuItemPresent('Move')).toBe(false, `Move is displayed for ${folder1}`); - expect(await menu.isMenuItemPresent('Favorite')).toBe(true, `Favorite is not displayed for ${folder1}`); - await toolbar.closeMoreMenu(); - }); - - it('on Favorites - [C286266]', async () => { - await page.sidenav.navigateToLinkByLabel(SIDEBAR_LABELS.FAVORITES); - await dataTable.waitForHeader(); - await dataTable.selectItem(folder1); - expect(await toolbar.isButtonPresent('View')).toBe(false, `View is not displayed for ${folder1}`); - expect(await toolbar.isButtonPresent('Download')).toBe(true, `Download is not displayed for ${folder1}`); - expect(await toolbar.isButtonPresent('View details')).toBe(true, `View details is not displayed for ${folder1}`); - // TODO: enable when ACA-1737 is done - // expect(await toolbar.isButtonPresent('Edit')).toBe(false, `Edit is displayed for ${folder1}`); - const menu = await toolbar.openMoreMenu(); - expect(await menu.isMenuItemPresent('Copy')).toBe(true, `Copy is not displayed for ${folder1}`); - // TODO: enable when ACA-1737 is done - // expect(await menu.isMenuItemPresent('Delete')).toBe(false, `Delete is displayed for ${folder1}`); - // expect(await menu.isMenuItemPresent('Move')).toBe(false, `Move is displayed for ${folder1}`); - expect(await menu.isMenuItemPresent('Favorite')).toBe(true, `Favorite is not displayed for ${folder1}`); - await toolbar.closeMoreMenu(); - }); + const menu = await toolbar.openMoreMenu(); + expect(await menu.isMenuItemPresent('Copy')).toBe(true, `Copy is not displayed for ${file1}`); + expect(await menu.isMenuItemPresent('Delete')).toBe(false, `Delete is displayed for ${file1}`); + expect(await menu.isMenuItemPresent('Move')).toBe(false, `Move is displayed for ${file1}`); + expect(await menu.isMenuItemPresent('Favorite')).toBe(true, `Favorite is not displayed for ${file1}`); + await toolbar.closeMoreMenu(); }); - describe('toolbar actions appear correctly for multiple selection of files - consumer', () => { - beforeEach(async (done) => { - await browser.actions().sendKeys(protractor.Key.ESCAPE).perform(); - await dataTable.clearSelection(); - done(); - }); + it('on Shared Files - [C280456]', async () => { + await page.sidenav.navigateToLinkByLabel(SIDEBAR_LABELS.SHARED_FILES); + await page.dataTable.waitForHeader(); + await page.dataTable.selectItem(file1); + expect(await toolbar.isButtonPresent('View')).toBe(true, `View is not displayed for ${file1}`); + expect(await toolbar.isButtonPresent('Download')).toBe(true, `Download is not displayed for ${file1}`); + expect(await toolbar.isButtonPresent('View details')).toBe(true, `View details is not displayed for ${file1}`); + expect(await toolbar.isButtonPresent('Edit')).toBe(false, `Edit is displayed for ${file1}`); + const menu = await toolbar.openMoreMenu(); - it('on File Libraries - [C280464]', async () => { - await page.sidenav.navigateToLinkByLabel(SIDEBAR_LABELS.FILE_LIBRARIES); - await dataTable.waitForHeader(); - await dataTable.doubleClickOnRowByName(siteName); - await dataTable.waitForHeader(); - await dataTable.selectMultipleItems([ file1, file2 ]); - expect(await toolbar.isButtonPresent('View')).toBe(false, 'View is displayed'); - expect(await toolbar.isButtonPresent('Download')).toBe(true, 'Download is not displayed'); - expect(await toolbar.isButtonPresent('Edit')).toBe(false, 'Edit is displayed'); - const menu = await toolbar.openMoreMenu(); - expect(await menu.isMenuItemPresent('Copy')).toBe(true, `Copy is not displayed`); - expect(await menu.isMenuItemPresent('Delete')).toBe(false, `Delete is displayed`); - expect(await menu.isMenuItemPresent('Move')).toBe(false, `Move is displayed`); - expect(await menu.isMenuItemPresent('Favorite')).toBe(true, `Favorite is not displayed`); - await toolbar.closeMoreMenu(); - }); - - it('on Shared Files - [C286284]', async () => { - await page.sidenav.navigateToLinkByLabel(SIDEBAR_LABELS.SHARED_FILES); - await dataTable.waitForHeader(); - await dataTable.selectMultipleItems([ file1, file2 ]); - expect(await toolbar.isButtonPresent('View')).toBe(false, `View is displayed for selected files`); - expect(await toolbar.isButtonPresent('Download')).toBe(true, `Download is not displayed for selected files`); - expect(await toolbar.isButtonPresent('Edit')).toBe(false, `Edit is displayed for selected files`); - const menu = await toolbar.openMoreMenu(); - expect(await menu.isMenuItemPresent('Copy')).toBe(true, `Copy is not displayed for selected files`); - expect(await menu.isMenuItemPresent('Delete')).toBe(false, `Delete is displayed for selected files`); - expect(await menu.isMenuItemPresent('Move')).toBe(false, `Move is displayed for selected files`); - expect(await menu.isMenuItemPresent('Favorite')).toBe(true, `Favorite is not displayed for selected files`); - await toolbar.closeMoreMenu(); - }); - - it('on Favorites - [C286285]', async () => { - await page.sidenav.navigateToLinkByLabel(SIDEBAR_LABELS.FAVORITES); - await dataTable.waitForHeader(); - await dataTable.selectMultipleItems([ file1, file2 ]); - expect(await toolbar.isButtonPresent('View')).toBe(false, `View is displayed for selected files`); - expect(await toolbar.isButtonPresent('Download')).toBe(true, `Download is not displayed for selected files`); - expect(await toolbar.isButtonPresent('Edit')).toBe(false, `Edit is displayed for selected files`); - const menu = await toolbar.openMoreMenu(); - expect(await menu.isMenuItemPresent('Copy')).toBe(true, `Copy is not displayed for selected files`); - // TODO: enable when ACA-1737 is done - // expect(await menu.isMenuItemPresent('Delete')).toBe(false, `Delete is displayed for selected files`); - // expect(await menu.isMenuItemPresent('Move')).toBe(false, `Move is displayed for selected files`); - expect(await menu.isMenuItemPresent('Favorite')).toBe(true, `Favorite is not displayed for selected files`); - await toolbar.closeMoreMenu(); - }); + expect(await menu.isMenuItemPresent('Copy')).toBe(true, `Copy is not displayed for ${file1}`); + expect(await menu.isMenuItemPresent('Delete')).toBe(false, `Delete is displayed for ${file1}`); + expect(await menu.isMenuItemPresent('Move')).toBe(false, `Move is displayed for ${file1}`); + expect(await menu.isMenuItemPresent('Favorite')).toBe(true, `Favorite is not displayed for ${file1}`); + await toolbar.closeMoreMenu(); }); - describe('toolbar actions appear correctly for multiple selection of folders - consumer', () => { - beforeEach(async (done) => { - await browser.actions().sendKeys(protractor.Key.ESCAPE).perform(); - await dataTable.clearSelection(); - done(); - }); + it('on Favorites - [C213121]', async () => { + await page.sidenav.navigateToLinkByLabel(SIDEBAR_LABELS.FAVORITES); + await dataTable.waitForHeader(); + await dataTable.selectItem(file1); + expect(await toolbar.isButtonPresent('View')).toBe(true, `View is not displayed for ${file1}`); + expect(await toolbar.isButtonPresent('Download')).toBe(true, `Download is not displayed for ${file1}`); + expect(await toolbar.isButtonPresent('View details')).toBe(true, `View details is not displayed for ${file1}`); + expect(await toolbar.isButtonPresent('Edit')).toBe(false, `Edit is displayed for ${file1}`); + const menu = await toolbar.openMoreMenu(); + expect(await menu.isMenuItemPresent('Copy')).toBe(true, `Copy is not displayed for ${file1}`); + // TODO: enable when ACA-1737 is done + // expect(await menu.isMenuItemPresent('Delete')).toBe(false, `Delete is displayed for ${file1}`); + // expect(await menu.isMenuItemPresent('Move')).toBe(false, `Move is displayed for ${file1}`); + expect(await menu.isMenuItemPresent('Favorite')).toBe(true, `Favorite is not displayed for ${file1}`); + await toolbar.closeMoreMenu(); + }); + }); - it('on File Libraries - [C280465]', async () => { - await page.sidenav.navigateToLinkByLabel(SIDEBAR_LABELS.FILE_LIBRARIES); - await dataTable.waitForHeader(); - await dataTable.doubleClickOnRowByName(siteName); - await dataTable.waitForHeader(); - await dataTable.selectMultipleItems([ folder1, folder2 ]); - expect(await toolbar.isButtonPresent('View')).toBe(false, 'View is displayed'); - expect(await toolbar.isButtonPresent('Download')).toBe(true, 'Download is not displayed'); - expect(await toolbar.isButtonPresent('Edit')).toBe(false, 'Edit is displayed'); - const menu = await toolbar.openMoreMenu(); - expect(await menu.isMenuItemPresent('Copy')).toBe(true, `Copy is not displayed`); - expect(await menu.isMenuItemPresent('Delete')).toBe(false, `Delete is displayed`); - expect(await menu.isMenuItemPresent('Move')).toBe(false, `Move is displayed`); - expect(await menu.isMenuItemPresent('Favorite')).toBe(true, `Favorite is not displayed`); - await toolbar.closeMoreMenu(); - }); - - it('on Favorites - [C286286]', async () => { - await page.sidenav.navigateToLinkByLabel(SIDEBAR_LABELS.FAVORITES); - await dataTable.waitForHeader(); - await dataTable.selectMultipleItems([ folder1, folder2 ]); - expect(await toolbar.isButtonPresent('View')).toBe(false, `View is displayed for selected files`); - expect(await toolbar.isButtonPresent('Download')).toBe(true, `Download is not displayed for selected files`); - expect(await toolbar.isButtonPresent('Edit')).toBe(false, `Edit is displayed for selected files`); - const menu = await toolbar.openMoreMenu(); - expect(await menu.isMenuItemPresent('Copy')).toBe(true, `Copy is not displayed for selected files`); - // TODO: enable when ACA-1737 is done - // expect(await menu.isMenuItemPresent('Delete')).toBe(false, `Delete is displayed for selected files`); - // expect(await menu.isMenuItemPresent('Move')).toBe(false, `Move is displayed for selected files`); - expect(await menu.isMenuItemPresent('Favorite')).toBe(true, `Favorite is not displayed for selected files`); - await toolbar.closeMoreMenu(); - }); + describe('toolbar actions appear correctly for a folder - consumer', () => { + beforeEach(async done => { + await Utils.pressEscape(); + done(); }); - describe('toolbar actions appear correctly for when both files and folders are selected - consumer', () => { - beforeEach(async (done) => { - await browser.actions().sendKeys(protractor.Key.ESCAPE).perform(); - await dataTable.clearSelection(); - done(); - }); + it('on File Libraries - [C280444]', async () => { + await page.sidenav.navigateToLinkByLabel(SIDEBAR_LABELS.FILE_LIBRARIES); + await dataTable.waitForHeader(); + await dataTable.doubleClickOnRowByName(siteName); + await dataTable.waitForHeader(); + await dataTable.selectItem(folder1); + expect(await toolbar.isButtonPresent('View')).toBe(false, `View is displayed for ${folder1}`); + expect(await toolbar.isButtonPresent('Download')).toBe(true, `Download is not displayed for ${folder1}`); + expect(await toolbar.isButtonPresent('View details')).toBe(true, `View details is not displayed for ${folder1}`); + expect(await toolbar.isButtonPresent('Edit')).toBe(false, `Edit is displayed for ${folder1}`); - it('on File Libraries - [C280466]', async () => { - await page.sidenav.navigateToLinkByLabel(SIDEBAR_LABELS.FILE_LIBRARIES); - await dataTable.waitForHeader(); - await dataTable.doubleClickOnRowByName(siteName); - await dataTable.waitForHeader(); - await dataTable.selectMultipleItems([ file1, folder1 ]); - expect(await toolbar.isButtonPresent('View')).toBe(false, 'View is displayed'); - expect(await toolbar.isButtonPresent('Download')).toBe(true, 'Download is not displayed'); - expect(await toolbar.isButtonPresent('Edit')).toBe(false, 'Edit is displayed'); - const menu = await toolbar.openMoreMenu(); - expect(await menu.isMenuItemPresent('Copy')).toBe(true, `Copy is not displayed`); - expect(await menu.isMenuItemPresent('Delete')).toBe(false, `Delete is displayed`); - expect(await menu.isMenuItemPresent('Move')).toBe(false, `Move is displayed`); - expect(await menu.isMenuItemPresent('Favorite')).toBe(true, `Favorite is not displayed`); - await toolbar.closeMoreMenu(); - }); - - it('on Favorites - [C286287]', async () => { - await page.sidenav.navigateToLinkByLabel(SIDEBAR_LABELS.FAVORITES); - await dataTable.waitForHeader(); - await dataTable.selectMultipleItems([ file1, folder1 ]); - expect(await toolbar.isButtonPresent('View')).toBe(false, `View is displayed for selected files`); - expect(await toolbar.isButtonPresent('Download')).toBe(true, `Download is not displayed for selected files`); - expect(await toolbar.isButtonPresent('Edit')).toBe(false, `Edit is displayed for selected files`); - const menu = await toolbar.openMoreMenu(); - expect(await menu.isMenuItemPresent('Copy')).toBe(true, `Copy is not displayed for selected files`); - // TODO: enable when ACA-1737 is done - // expect(await menu.isMenuItemPresent('Delete')).toBe(false, `Delete is displayed for selected files`); - // expect(await menu.isMenuItemPresent('Move')).toBe(false, `Move is displayed for selected files`); - expect(await menu.isMenuItemPresent('Favorite')).toBe(true, `Favorite is not displayed for selected files`); - await toolbar.closeMoreMenu(); - }); + const menu = await toolbar.openMoreMenu(); + expect(await menu.isMenuItemPresent('Copy')).toBe(true, `Copy is not displayed for ${folder1}`); + expect(await menu.isMenuItemPresent('Delete')).toBe(false, `Delete is displayed for ${folder1}`); + expect(await menu.isMenuItemPresent('Move')).toBe(false, `Move is displayed for ${folder1}`); + expect(await menu.isMenuItemPresent('Favorite')).toBe(true, `Favorite is not displayed for ${folder1}`); + await toolbar.closeMoreMenu(); }); - describe('context menu actions are correct for a file - consumer', () => { - beforeEach(async (done) => { - await browser.actions().sendKeys(protractor.Key.ESCAPE).perform(); - done(); - }); + it('on Favorites - [C286266]', async () => { + await page.sidenav.navigateToLinkByLabel(SIDEBAR_LABELS.FAVORITES); + await dataTable.waitForHeader(); + await dataTable.selectItem(folder1); + expect(await toolbar.isButtonPresent('View')).toBe(false, `View is not displayed for ${folder1}`); + expect(await toolbar.isButtonPresent('Download')).toBe(true, `Download is not displayed for ${folder1}`); + expect(await toolbar.isButtonPresent('View details')).toBe(true, `View details is not displayed for ${folder1}`); + // TODO: enable when ACA-1737 is done + // expect(await toolbar.isButtonPresent('Edit')).toBe(false, `Edit is displayed for ${folder1}`); + const menu = await toolbar.openMoreMenu(); + expect(await menu.isMenuItemPresent('Copy')).toBe(true, `Copy is not displayed for ${folder1}`); + // TODO: enable when ACA-1737 is done + // expect(await menu.isMenuItemPresent('Delete')).toBe(false, `Delete is displayed for ${folder1}`); + // expect(await menu.isMenuItemPresent('Move')).toBe(false, `Move is displayed for ${folder1}`); + expect(await menu.isMenuItemPresent('Favorite')).toBe(true, `Favorite is not displayed for ${folder1}`); + await toolbar.closeMoreMenu(); + }); + }); - it('on File Libraries - [C280599]', async () => { - await page.sidenav.navigateToLinkByLabel(SIDEBAR_LABELS.FILE_LIBRARIES); - await dataTable.waitForHeader(); - await dataTable.doubleClickOnRowByName(siteName); - await dataTable.waitForHeader(); - await dataTable.rightClickOnItem(file1); - expect(await contextMenu.isMenuItemPresent('Download')).toBe(true, `Download is not displayed for ${file1}`); - expect(await contextMenu.isMenuItemPresent('View')).toBe(true, `View is not displayed for ${file1}`); - expect(await contextMenu.isMenuItemPresent('Favorite')).toBe(true, `Favorite is not displayed for ${file1}`); - expect(await contextMenu.isMenuItemPresent('Copy')).toBe(true, `Copy is not displayed for ${file1}`); - expect(await contextMenu.isMenuItemPresent('Move')).toBe(false, `Move is displayed for ${file1}`); - expect(await contextMenu.isMenuItemPresent('Delete')).toBe(false, `Delete is displayed for ${file1}`); - expect(await contextMenu.isMenuItemPresent('Share')).toBe(true, `Share is not displayed for ${file1}`); - expect(await contextMenu.isMenuItemPresent('Manage Versions')).toBe(true, `Manage Versions not displayed for ${file1}`); - expect(await contextMenu.isMenuItemPresent('Permissions')).toBe(false, `Permissions is displayed for ${file1}`); - expect(await contextMenu.isMenuItemPresent('Edit')).toBe(false, `Edit is displayed for ${file1}`); - expect(await contextMenu.isMenuItemPresent('View details')).toBe(false, `View details is displayed for ${file1}`); - }); - - it('on Shared Files - [C286264]', async () => { - await page.sidenav.navigateToLinkByLabel(SIDEBAR_LABELS.SHARED_FILES); - await dataTable.waitForHeader(); - await dataTable.rightClickOnItem(file1); - expect(await contextMenu.isMenuItemPresent('Download')).toBe(true, `Download is not displayed for ${file1}`); - expect(await contextMenu.isMenuItemPresent('View')).toBe(true, `View is not displayed for ${file1}`); - expect(await contextMenu.isMenuItemPresent('Favorite')).toBe(true, `Favorite is not displayed for ${file1}`); - expect(await contextMenu.isMenuItemPresent('Copy')).toBe(true, `Copy is not displayed for ${file1}`); - expect(await contextMenu.isMenuItemPresent('Move')).toBe(false, `Move is displayed for ${file1}`); - expect(await contextMenu.isMenuItemPresent('Delete')).toBe(false, `Delete is displayed for ${file1}`); - // TODO: enable this when the action is properly implemented: ACA-92 - // expect(await contextMenu.isMenuItemPresent('Share')).toBe(true, `Share is not displayed for ${file1}`); - expect(await contextMenu.isMenuItemPresent('Manage Versions')).toBe(true, `Manage Versions not displayed for ${file1}`); - expect(await contextMenu.isMenuItemPresent('Permissions')).toBe(false, `Permissions is displayed for ${file1}`); - expect(await contextMenu.isMenuItemPresent('Edit')).toBe(false, `Edit is displayed for ${file1}`); - expect(await contextMenu.isMenuItemPresent('View details')).toBe(false, `View details is displayed for ${file1}`); - }); - - it('on Favorites - [C286262]', async () => { - await page.sidenav.navigateToLinkByLabel(SIDEBAR_LABELS.FAVORITES); - await dataTable.waitForHeader(); - await dataTable.rightClickOnItem(file1); - expect(await contextMenu.isMenuItemPresent('Download')).toBe(true, `Download is not displayed for ${file1}`); - expect(await contextMenu.isMenuItemPresent('View')).toBe(true, `View is not displayed for ${file1}`); - expect(await contextMenu.isMenuItemPresent('Favorite')).toBe(true, `Favorite is not displayed for ${file1}`); - expect(await contextMenu.isMenuItemPresent('Copy')).toBe(true, `Copy is not displayed for ${file1}`); - // TODO: enable when ACA-1737 is done - // expect(await contextMenu.isMenuItemPresent('Move')).toBe(false, `Move is displayed for ${file1}`); - // expect(await contextMenu.isMenuItemPresent('Delete')).toBe(false, `Delete is displayed for ${file1}`); - expect(await contextMenu.isMenuItemPresent('Share')).toBe(true, `Share is not displayed for ${file1}`); - expect(await contextMenu.isMenuItemPresent('Manage Versions')).toBe(true, `Manage Versions is not displayed for ${file1}`); - // TODO: enable when ACA-1794 is fixed - // expect(await contextMenu.isMenuItemPresent('Permissions')).toBe(true, `Permissions is not displayed for ${file1}`); - expect(await contextMenu.isMenuItemPresent('Edit')).toBe(false, `Edit is displayed for ${file1}`); - expect(await contextMenu.isMenuItemPresent('View details')).toBe(false, `View details is displayed for ${file1}`); - }); + describe('toolbar actions appear correctly for multiple selection of files - consumer', () => { + beforeEach(async done => { + await Utils.pressEscape(); + await dataTable.clearSelection(); + done(); }); - describe('context menu actions are correct for a folder - consumer', () => { - beforeEach(async (done) => { - await browser.actions().sendKeys(protractor.Key.ESCAPE).perform(); - done(); - }); - - it('on File Libraries - [C280600]', async () => { - await page.sidenav.navigateToLinkByLabel(SIDEBAR_LABELS.FILE_LIBRARIES); - await dataTable.waitForHeader(); - await dataTable.doubleClickOnRowByName(siteName); - await dataTable.waitForHeader(); - await dataTable.rightClickOnItem(folder1); - expect(await contextMenu.isMenuItemPresent('Download')).toBe(true, `Download is not enabled for ${folder1}`); - expect(await contextMenu.isMenuItemPresent('Edit')).toBe(false, `Edit is displayed for ${folder1}`); - expect(await contextMenu.isMenuItemPresent('Favorite')).toBe(true, `Favorite is not displayed for ${folder1}`); - expect(await contextMenu.isMenuItemPresent('Copy')).toBe(true, `Copy is not displayed for ${folder1}`); - expect(await contextMenu.isMenuItemPresent('Move')).toBe(false, `Move is displayed for ${folder1}`); - expect(await contextMenu.isMenuItemPresent('Delete')).toBe(false, `Delete is displayed for ${folder1}`); - expect(await contextMenu.isMenuItemPresent('Permissions')).toBe(false, `Permissions is displayed for ${folder1}`); - expect(await contextMenu.isMenuItemPresent('View')).toBe(false, `View is displayed for ${folder1}`); - expect(await contextMenu.isMenuItemPresent('Manage Versions')).toBe(false, `Manage Versions displayed for ${folder1}`); - expect(await contextMenu.isMenuItemPresent('Share')).toBe(false, `Share is displayed for ${folder1}`); - }); - - it('on Favorites - [C286263]', async () => { - await page.sidenav.navigateToLinkByLabel(SIDEBAR_LABELS.FAVORITES); - await dataTable.waitForHeader(); - await dataTable.rightClickOnItem(folder1); - expect(await contextMenu.isMenuItemPresent('Download')).toBe(true, `Download is not enabled for ${folder1}`); - // enable when ACA-1737 is done - // expect(await contextMenu.isMenuItemPresent('Edit')).toBe(false, `Edit is displayed for ${folder1}`); - expect(await contextMenu.isMenuItemPresent('Favorite')).toBe(true, `Favorite is not displayed for ${folder1}`); - expect(await contextMenu.isMenuItemPresent('Copy')).toBe(true, `Copy is not displayed for ${folder1}`); - // TODO: enable when ACA-1737 is done - // expect(await contextMenu.isMenuItemPresent('Move')).toBe(false, `Move is displayed for ${folder1}`); - // expect(await contextMenu.isMenuItemPresent('Delete')).toBe(false, `Delete is displayed for ${folder1}`); - // TODO: enable when ACA-1794 is fixed - // expect(await contextMenu.isMenuItemPresent('Permissions')).toBe(true, `Permissions is not displayed for ${folder1}`); - expect(await contextMenu.isMenuItemPresent('View')).toBe(false, `View is displayed for ${folder1}`); - expect(await contextMenu.isMenuItemPresent('Manage Versions')).toBe(false, `Manage Versions is displayed for ${folder1}`); - expect(await contextMenu.isMenuItemPresent('Share')).toBe(false, `Share is displayed for ${folder1}`); - }); + it('on File Libraries - [C280464]', async () => { + await page.sidenav.navigateToLinkByLabel(SIDEBAR_LABELS.FILE_LIBRARIES); + await dataTable.waitForHeader(); + await dataTable.doubleClickOnRowByName(siteName); + await dataTable.waitForHeader(); + await dataTable.selectMultipleItems([file1, file2]); + expect(await toolbar.isButtonPresent('View')).toBe(false, 'View is displayed'); + expect(await toolbar.isButtonPresent('Download')).toBe(true, 'Download is not displayed'); + expect(await toolbar.isButtonPresent('Edit')).toBe(false, 'Edit is displayed'); + const menu = await toolbar.openMoreMenu(); + expect(await menu.isMenuItemPresent('Copy')).toBe(true, `Copy is not displayed`); + expect(await menu.isMenuItemPresent('Delete')).toBe(false, `Delete is displayed`); + expect(await menu.isMenuItemPresent('Move')).toBe(false, `Move is displayed`); + expect(await menu.isMenuItemPresent('Favorite')).toBe(true, `Favorite is not displayed`); + await toolbar.closeMoreMenu(); }); - describe('context menu actions are correct for multiple selection of files - consumer', () => { - beforeEach(async (done) => { - await browser.actions().sendKeys(protractor.Key.ESCAPE).perform(); - await dataTable.clearSelection(); - done(); - }); - - it('on File Libraries - [C280647]', async () => { - await page.sidenav.navigateToLinkByLabel(SIDEBAR_LABELS.FILE_LIBRARIES); - await dataTable.waitForHeader(); - await dataTable.doubleClickOnRowByName(siteName); - await dataTable.waitForHeader(); - await dataTable.selectMultipleItems([ file1, file2 ]); - await dataTable.rightClickOnMultipleSelection(); - expect(await contextMenu.isMenuItemPresent('View')).toBe(false, 'View is displayed'); - expect(await contextMenu.isMenuItemPresent('Download')).toBe(true, 'Download is not displayed'); - expect(await contextMenu.isMenuItemPresent('Copy')).toBe(true, `Copy is not displayed`); - expect(await contextMenu.isMenuItemPresent('Delete')).toBe(false, `Delete is displayed`); - expect(await contextMenu.isMenuItemPresent('Move')).toBe(false, `Move is displayed`); - expect(await contextMenu.isMenuItemPresent('Favorite')).toBe(true, `Favorite is not displayed`); - expect(await contextMenu.isMenuItemPresent('Permissions')).toBe(false, `Permissions is displayed`); - }); - - it('on Shared Files - [C286283]', async () => { - await page.sidenav.navigateToLinkByLabel(SIDEBAR_LABELS.SHARED_FILES); - await dataTable.waitForHeader(); - await dataTable.selectMultipleItems([ file1, file2 ]); - await dataTable.rightClickOnMultipleSelection(); - expect(await contextMenu.isMenuItemPresent('View')).toBe(false, 'View is displayed'); - expect(await contextMenu.isMenuItemPresent('Download')).toBe(true, 'Download is not displayed'); - expect(await contextMenu.isMenuItemPresent('Copy')).toBe(true, `Copy is not displayed`); - expect(await contextMenu.isMenuItemPresent('Delete')).toBe(false, `Delete is displayed`); - expect(await contextMenu.isMenuItemPresent('Move')).toBe(false, `Move is displayed`); - expect(await contextMenu.isMenuItemPresent('Favorite')).toBe(true, `Favorite is not displayed`); - expect(await contextMenu.isMenuItemPresent('Permissions')).toBe(false, `Permissions is displayed`); - }); - - it('on Favorites - [C286280]', async () => { - await page.sidenav.navigateToLinkByLabel(SIDEBAR_LABELS.FAVORITES); - await dataTable.waitForHeader(); - await dataTable.selectMultipleItems([ file1, file2 ]); - await dataTable.rightClickOnMultipleSelection(); - expect(await contextMenu.isMenuItemPresent('View')).toBe(false, 'View is displayed'); - expect(await contextMenu.isMenuItemPresent('Download')).toBe(true, 'Download is not displayed'); - expect(await contextMenu.isMenuItemPresent('Copy')).toBe(true, `Copy is not displayed`); - // TODO: enable when ACA-1737 is done - // expect(await contextMenu.isMenuItemPresent('Delete')).toBe(false, `Delete is displayed`); - // expect(await contextMenu.isMenuItemPresent('Move')).toBe(false, `Move is displayed`); - expect(await contextMenu.isMenuItemPresent('Favorite')).toBe(true, `Favorite is not displayed`); - expect(await contextMenu.isMenuItemPresent('Permissions')).toBe(false, `Permissions is displayed`); - }); + it('on Shared Files - [C286284]', async () => { + await page.sidenav.navigateToLinkByLabel(SIDEBAR_LABELS.SHARED_FILES); + await dataTable.waitForHeader(); + await dataTable.selectMultipleItems([file1, file2]); + expect(await toolbar.isButtonPresent('View')).toBe(false, `View is displayed for selected files`); + expect(await toolbar.isButtonPresent('Download')).toBe(true, `Download is not displayed for selected files`); + expect(await toolbar.isButtonPresent('Edit')).toBe(false, `Edit is displayed for selected files`); + const menu = await toolbar.openMoreMenu(); + expect(await menu.isMenuItemPresent('Copy')).toBe(true, `Copy is not displayed for selected files`); + expect(await menu.isMenuItemPresent('Delete')).toBe(false, `Delete is displayed for selected files`); + expect(await menu.isMenuItemPresent('Move')).toBe(false, `Move is displayed for selected files`); + expect(await menu.isMenuItemPresent('Favorite')).toBe(true, `Favorite is not displayed for selected files`); + await toolbar.closeMoreMenu(); }); - describe('context menu actions are correct for multiple selection of folders - consumer', () => { - beforeEach(async (done) => { - await browser.actions().sendKeys(protractor.Key.ESCAPE).perform(); - await dataTable.clearSelection(); - done(); - }); + it('on Favorites - [C286285]', async () => { + await page.sidenav.navigateToLinkByLabel(SIDEBAR_LABELS.FAVORITES); + await dataTable.waitForHeader(); + await dataTable.selectMultipleItems([file1, file2]); + expect(await toolbar.isButtonPresent('View')).toBe(false, `View is displayed for selected files`); + expect(await toolbar.isButtonPresent('Download')).toBe(true, `Download is not displayed for selected files`); + expect(await toolbar.isButtonPresent('Edit')).toBe(false, `Edit is displayed for selected files`); + const menu = await toolbar.openMoreMenu(); + expect(await menu.isMenuItemPresent('Copy')).toBe(true, `Copy is not displayed for selected files`); + // TODO: enable when ACA-1737 is done + // expect(await menu.isMenuItemPresent('Delete')).toBe(false, `Delete is displayed for selected files`); + // expect(await menu.isMenuItemPresent('Move')).toBe(false, `Move is displayed for selected files`); + expect(await menu.isMenuItemPresent('Favorite')).toBe(true, `Favorite is not displayed for selected files`); + await toolbar.closeMoreMenu(); + }); + }); - it('on File Libraries - [C280666]', async () => { - await page.sidenav.navigateToLinkByLabel(SIDEBAR_LABELS.FILE_LIBRARIES); - await dataTable.waitForHeader(); - await dataTable.doubleClickOnRowByName(siteName); - await dataTable.waitForHeader(); - await dataTable.selectMultipleItems([ folder1, folder2 ]); - await dataTable.rightClickOnMultipleSelection(); - expect(await contextMenu.isMenuItemPresent('View')).toBe(false, 'View is displayed'); - expect(await contextMenu.isMenuItemPresent('Download')).toBe(true, 'Download is not displayed'); - expect(await contextMenu.isMenuItemPresent('Copy')).toBe(true, `Copy is not displayed`); - expect(await contextMenu.isMenuItemPresent('Delete')).toBe(false, `Delete is displayed`); - expect(await contextMenu.isMenuItemPresent('Move')).toBe(false, `Move is displayed`); - expect(await contextMenu.isMenuItemPresent('Favorite')).toBe(true, `Favorite is not displayed`); - expect(await contextMenu.isMenuItemPresent('Permissions')).toBe(false, `Permissions is displayed`); - }); - - it('on Favorites - [C286281]', async () => { - await page.sidenav.navigateToLinkByLabel(SIDEBAR_LABELS.FAVORITES); - await dataTable.waitForHeader(); - await dataTable.selectMultipleItems([ folder1, folder2 ]); - await dataTable.rightClickOnMultipleSelection(); - expect(await contextMenu.isMenuItemPresent('View')).toBe(false, 'View is displayed'); - expect(await contextMenu.isMenuItemPresent('Download')).toBe(true, 'Download is not displayed'); - expect(await contextMenu.isMenuItemPresent('Copy')).toBe(true, `Copy is not displayed`); - // TODO: enable when ACA-1737 is done - // expect(await contextMenu.isMenuItemPresent('Delete')).toBe(false, `Delete is displayed`); - // expect(await contextMenu.isMenuItemPresent('Move')).toBe(false, `Move is displayed`); - expect(await contextMenu.isMenuItemPresent('Favorite')).toBe(true, `Favorite is not displayed`); - expect(await contextMenu.isMenuItemPresent('Permissions')).toBe(false, `Permissions is displayed`); - }); + describe('toolbar actions appear correctly for multiple selection of folders - consumer', () => { + beforeEach(async done => { + await Utils.pressEscape(); + await dataTable.clearSelection(); + done(); }); - describe('context menu actions are correct when both files and folders are selected - consumer', () => { - beforeEach(async (done) => { - await browser.actions().sendKeys(protractor.Key.ESCAPE).perform(); - await dataTable.clearSelection(); - done(); - }); - - it('on File Libraries - [C280669]', async () => { - await page.sidenav.navigateToLinkByLabel(SIDEBAR_LABELS.FILE_LIBRARIES); - await dataTable.waitForHeader(); - await dataTable.doubleClickOnRowByName(siteName); - await dataTable.waitForHeader(); - await dataTable.selectMultipleItems([ file1, folder1 ]); - await dataTable.rightClickOnMultipleSelection(); - expect(await contextMenu.isMenuItemPresent('View')).toBe(false, 'View is displayed'); - expect(await contextMenu.isMenuItemPresent('Download')).toBe(true, 'Download is not displayed'); - expect(await contextMenu.isMenuItemPresent('Copy')).toBe(true, `Copy is not displayed`); - expect(await contextMenu.isMenuItemPresent('Delete')).toBe(false, `Delete is displayed`); - expect(await contextMenu.isMenuItemPresent('Move')).toBe(false, `Move is displayed`); - expect(await contextMenu.isMenuItemPresent('Favorite')).toBe(true, `Favorite is not displayed`); - expect(await contextMenu.isMenuItemPresent('Permissions')).toBe(false, `Permissions is displayed`); - }); - - it('on Favorites - [C286282]', async () => { - await page.sidenav.navigateToLinkByLabel(SIDEBAR_LABELS.FAVORITES); - await dataTable.waitForHeader(); - await dataTable.selectMultipleItems([ file1, folder1 ]); - await dataTable.rightClickOnMultipleSelection(); - expect(await contextMenu.isMenuItemPresent('View')).toBe(false, 'View is displayed'); - expect(await contextMenu.isMenuItemPresent('Download')).toBe(true, 'Download is not displayed'); - expect(await contextMenu.isMenuItemPresent('Copy')).toBe(true, `Copy is not displayed`); - // TODO: enable when ACA-1737 is done - // expect(await contextMenu.isMenuItemPresent('Delete')).toBe(false, `Delete is displayed`); - // expect(await contextMenu.isMenuItemPresent('Move')).toBe(false, `Move is displayed`); - expect(await contextMenu.isMenuItemPresent('Favorite')).toBe(true, `Favorite is not displayed`); - expect(await contextMenu.isMenuItemPresent('Permissions')).toBe(false, `Permissions is displayed`); - }); + it('on File Libraries - [C280465]', async () => { + await page.sidenav.navigateToLinkByLabel(SIDEBAR_LABELS.FILE_LIBRARIES); + await dataTable.waitForHeader(); + await dataTable.doubleClickOnRowByName(siteName); + await dataTable.waitForHeader(); + await dataTable.selectMultipleItems([folder1, folder2]); + expect(await toolbar.isButtonPresent('View')).toBe(false, 'View is displayed'); + expect(await toolbar.isButtonPresent('Download')).toBe(true, 'Download is not displayed'); + expect(await toolbar.isButtonPresent('Edit')).toBe(false, 'Edit is displayed'); + const menu = await toolbar.openMoreMenu(); + expect(await menu.isMenuItemPresent('Copy')).toBe(true, `Copy is not displayed`); + expect(await menu.isMenuItemPresent('Delete')).toBe(false, `Delete is displayed`); + expect(await menu.isMenuItemPresent('Move')).toBe(false, `Move is displayed`); + expect(await menu.isMenuItemPresent('Favorite')).toBe(true, `Favorite is not displayed`); + await toolbar.closeMoreMenu(); }); + + it('on Favorites - [C286286]', async () => { + await page.sidenav.navigateToLinkByLabel(SIDEBAR_LABELS.FAVORITES); + await dataTable.waitForHeader(); + await dataTable.selectMultipleItems([folder1, folder2]); + expect(await toolbar.isButtonPresent('View')).toBe(false, `View is displayed for selected files`); + expect(await toolbar.isButtonPresent('Download')).toBe(true, `Download is not displayed for selected files`); + expect(await toolbar.isButtonPresent('Edit')).toBe(false, `Edit is displayed for selected files`); + const menu = await toolbar.openMoreMenu(); + expect(await menu.isMenuItemPresent('Copy')).toBe(true, `Copy is not displayed for selected files`); + // TODO: enable when ACA-1737 is done + // expect(await menu.isMenuItemPresent('Delete')).toBe(false, `Delete is displayed for selected files`); + // expect(await menu.isMenuItemPresent('Move')).toBe(false, `Move is displayed for selected files`); + expect(await menu.isMenuItemPresent('Favorite')).toBe(true, `Favorite is not displayed for selected files`); + await toolbar.closeMoreMenu(); + }); + }); + + describe('toolbar actions appear correctly for when both files and folders are selected - consumer', () => { + beforeEach(async done => { + await Utils.pressEscape(); + await dataTable.clearSelection(); + done(); + }); + + it('on File Libraries - [C280466]', async () => { + await page.sidenav.navigateToLinkByLabel(SIDEBAR_LABELS.FILE_LIBRARIES); + await dataTable.waitForHeader(); + await dataTable.doubleClickOnRowByName(siteName); + await dataTable.waitForHeader(); + await dataTable.selectMultipleItems([file1, folder1]); + expect(await toolbar.isButtonPresent('View')).toBe(false, 'View is displayed'); + expect(await toolbar.isButtonPresent('Download')).toBe(true, 'Download is not displayed'); + expect(await toolbar.isButtonPresent('Edit')).toBe(false, 'Edit is displayed'); + const menu = await toolbar.openMoreMenu(); + expect(await menu.isMenuItemPresent('Copy')).toBe(true, `Copy is not displayed`); + expect(await menu.isMenuItemPresent('Delete')).toBe(false, `Delete is displayed`); + expect(await menu.isMenuItemPresent('Move')).toBe(false, `Move is displayed`); + expect(await menu.isMenuItemPresent('Favorite')).toBe(true, `Favorite is not displayed`); + await toolbar.closeMoreMenu(); + }); + + it('on Favorites - [C286287]', async () => { + await page.sidenav.navigateToLinkByLabel(SIDEBAR_LABELS.FAVORITES); + await dataTable.waitForHeader(); + await dataTable.selectMultipleItems([file1, folder1]); + expect(await toolbar.isButtonPresent('View')).toBe(false, `View is displayed for selected files`); + expect(await toolbar.isButtonPresent('Download')).toBe(true, `Download is not displayed for selected files`); + expect(await toolbar.isButtonPresent('Edit')).toBe(false, `Edit is displayed for selected files`); + const menu = await toolbar.openMoreMenu(); + expect(await menu.isMenuItemPresent('Copy')).toBe(true, `Copy is not displayed for selected files`); + // TODO: enable when ACA-1737 is done + // expect(await menu.isMenuItemPresent('Delete')).toBe(false, `Delete is displayed for selected files`); + // expect(await menu.isMenuItemPresent('Move')).toBe(false, `Move is displayed for selected files`); + expect(await menu.isMenuItemPresent('Favorite')).toBe(true, `Favorite is not displayed for selected files`); + await toolbar.closeMoreMenu(); + }); + }); + + describe('context menu actions are correct for a file - consumer', () => { + beforeEach(async done => { + await Utils.pressEscape(); + done(); + }); + + it('on File Libraries - [C280599]', async () => { + await page.sidenav.navigateToLinkByLabel(SIDEBAR_LABELS.FILE_LIBRARIES); + await dataTable.waitForHeader(); + await dataTable.doubleClickOnRowByName(siteName); + await dataTable.waitForHeader(); + await dataTable.rightClickOnItem(file1); + expect(await contextMenu.isMenuItemPresent('Download')).toBe(true, `Download is not displayed for ${file1}`); + expect(await contextMenu.isMenuItemPresent('View')).toBe(true, `View is not displayed for ${file1}`); + expect(await contextMenu.isMenuItemPresent('Favorite')).toBe(true, `Favorite is not displayed for ${file1}`); + expect(await contextMenu.isMenuItemPresent('Copy')).toBe(true, `Copy is not displayed for ${file1}`); + expect(await contextMenu.isMenuItemPresent('Move')).toBe(false, `Move is displayed for ${file1}`); + expect(await contextMenu.isMenuItemPresent('Delete')).toBe(false, `Delete is displayed for ${file1}`); + expect(await contextMenu.isMenuItemPresent('Share')).toBe(true, `Share is not displayed for ${file1}`); + expect(await contextMenu.isMenuItemPresent('Manage Versions')).toBe(true, `Manage Versions not displayed for ${file1}`); + expect(await contextMenu.isMenuItemPresent('Permissions')).toBe(false, `Permissions is displayed for ${file1}`); + expect(await contextMenu.isMenuItemPresent('Edit')).toBe(false, `Edit is displayed for ${file1}`); + expect(await contextMenu.isMenuItemPresent('View details')).toBe(false, `View details is displayed for ${file1}`); + }); + + it('on Shared Files - [C286264]', async () => { + await page.sidenav.navigateToLinkByLabel(SIDEBAR_LABELS.SHARED_FILES); + await dataTable.waitForHeader(); + await dataTable.rightClickOnItem(file1); + expect(await contextMenu.isMenuItemPresent('Download')).toBe(true, `Download is not displayed for ${file1}`); + expect(await contextMenu.isMenuItemPresent('View')).toBe(true, `View is not displayed for ${file1}`); + expect(await contextMenu.isMenuItemPresent('Favorite')).toBe(true, `Favorite is not displayed for ${file1}`); + expect(await contextMenu.isMenuItemPresent('Copy')).toBe(true, `Copy is not displayed for ${file1}`); + expect(await contextMenu.isMenuItemPresent('Move')).toBe(false, `Move is displayed for ${file1}`); + expect(await contextMenu.isMenuItemPresent('Delete')).toBe(false, `Delete is displayed for ${file1}`); + // TODO: enable this when the action is properly implemented: ACA-92 + // expect(await contextMenu.isMenuItemPresent('Share')).toBe(true, `Share is not displayed for ${file1}`); + expect(await contextMenu.isMenuItemPresent('Manage Versions')).toBe(true, `Manage Versions not displayed for ${file1}`); + expect(await contextMenu.isMenuItemPresent('Permissions')).toBe(false, `Permissions is displayed for ${file1}`); + expect(await contextMenu.isMenuItemPresent('Edit')).toBe(false, `Edit is displayed for ${file1}`); + expect(await contextMenu.isMenuItemPresent('View details')).toBe(false, `View details is displayed for ${file1}`); + }); + + it('on Favorites - [C286262]', async () => { + await page.sidenav.navigateToLinkByLabel(SIDEBAR_LABELS.FAVORITES); + await dataTable.waitForHeader(); + await dataTable.rightClickOnItem(file1); + expect(await contextMenu.isMenuItemPresent('Download')).toBe(true, `Download is not displayed for ${file1}`); + expect(await contextMenu.isMenuItemPresent('View')).toBe(true, `View is not displayed for ${file1}`); + expect(await contextMenu.isMenuItemPresent('Favorite')).toBe(true, `Favorite is not displayed for ${file1}`); + expect(await contextMenu.isMenuItemPresent('Copy')).toBe(true, `Copy is not displayed for ${file1}`); + // TODO: enable when ACA-1737 is done + // expect(await contextMenu.isMenuItemPresent('Move')).toBe(false, `Move is displayed for ${file1}`); + // expect(await contextMenu.isMenuItemPresent('Delete')).toBe(false, `Delete is displayed for ${file1}`); + expect(await contextMenu.isMenuItemPresent('Share')).toBe(true, `Share is not displayed for ${file1}`); + expect(await contextMenu.isMenuItemPresent('Manage Versions')).toBe(true, `Manage Versions is not displayed for ${file1}`); + // TODO: enable when ACA-1794 is fixed + // expect(await contextMenu.isMenuItemPresent('Permissions')).toBe(true, `Permissions is not displayed for ${file1}`); + expect(await contextMenu.isMenuItemPresent('Edit')).toBe(false, `Edit is displayed for ${file1}`); + expect(await contextMenu.isMenuItemPresent('View details')).toBe(false, `View details is displayed for ${file1}`); + }); + }); + + describe('context menu actions are correct for a folder - consumer', () => { + beforeEach(async done => { + await Utils.pressEscape(); + done(); + }); + + it('on File Libraries - [C280600]', async () => { + await page.sidenav.navigateToLinkByLabel(SIDEBAR_LABELS.FILE_LIBRARIES); + await dataTable.waitForHeader(); + await dataTable.doubleClickOnRowByName(siteName); + await dataTable.waitForHeader(); + await dataTable.rightClickOnItem(folder1); + expect(await contextMenu.isMenuItemPresent('Download')).toBe(true, `Download is not enabled for ${folder1}`); + expect(await contextMenu.isMenuItemPresent('Edit')).toBe(false, `Edit is displayed for ${folder1}`); + expect(await contextMenu.isMenuItemPresent('Favorite')).toBe(true, `Favorite is not displayed for ${folder1}`); + expect(await contextMenu.isMenuItemPresent('Copy')).toBe(true, `Copy is not displayed for ${folder1}`); + expect(await contextMenu.isMenuItemPresent('Move')).toBe(false, `Move is displayed for ${folder1}`); + expect(await contextMenu.isMenuItemPresent('Delete')).toBe(false, `Delete is displayed for ${folder1}`); + expect(await contextMenu.isMenuItemPresent('Permissions')).toBe(false, `Permissions is displayed for ${folder1}`); + expect(await contextMenu.isMenuItemPresent('View')).toBe(false, `View is displayed for ${folder1}`); + expect(await contextMenu.isMenuItemPresent('Manage Versions')).toBe(false, `Manage Versions displayed for ${folder1}`); + expect(await contextMenu.isMenuItemPresent('Share')).toBe(false, `Share is displayed for ${folder1}`); + }); + + it('on Favorites - [C286263]', async () => { + await page.sidenav.navigateToLinkByLabel(SIDEBAR_LABELS.FAVORITES); + await dataTable.waitForHeader(); + await dataTable.rightClickOnItem(folder1); + expect(await contextMenu.isMenuItemPresent('Download')).toBe(true, `Download is not enabled for ${folder1}`); + // enable when ACA-1737 is done + // expect(await contextMenu.isMenuItemPresent('Edit')).toBe(false, `Edit is displayed for ${folder1}`); + expect(await contextMenu.isMenuItemPresent('Favorite')).toBe(true, `Favorite is not displayed for ${folder1}`); + expect(await contextMenu.isMenuItemPresent('Copy')).toBe(true, `Copy is not displayed for ${folder1}`); + // TODO: enable when ACA-1737 is done + // expect(await contextMenu.isMenuItemPresent('Move')).toBe(false, `Move is displayed for ${folder1}`); + // expect(await contextMenu.isMenuItemPresent('Delete')).toBe(false, `Delete is displayed for ${folder1}`); + // TODO: enable when ACA-1794 is fixed + // expect(await contextMenu.isMenuItemPresent('Permissions')).toBe(true, `Permissions is not displayed for ${folder1}`); + expect(await contextMenu.isMenuItemPresent('View')).toBe(false, `View is displayed for ${folder1}`); + expect(await contextMenu.isMenuItemPresent('Manage Versions')).toBe(false, `Manage Versions is displayed for ${folder1}`); + expect(await contextMenu.isMenuItemPresent('Share')).toBe(false, `Share is displayed for ${folder1}`); + }); + }); + + describe('context menu actions are correct for multiple selection of files - consumer', () => { + beforeEach(async done => { + await Utils.pressEscape(); + await dataTable.clearSelection(); + done(); + }); + + it('on File Libraries - [C280647]', async () => { + await page.sidenav.navigateToLinkByLabel(SIDEBAR_LABELS.FILE_LIBRARIES); + await dataTable.waitForHeader(); + await dataTable.doubleClickOnRowByName(siteName); + await dataTable.waitForHeader(); + await dataTable.selectMultipleItems([file1, file2]); + await dataTable.rightClickOnMultipleSelection(); + expect(await contextMenu.isMenuItemPresent('View')).toBe(false, 'View is displayed'); + expect(await contextMenu.isMenuItemPresent('Download')).toBe(true, 'Download is not displayed'); + expect(await contextMenu.isMenuItemPresent('Copy')).toBe(true, `Copy is not displayed`); + expect(await contextMenu.isMenuItemPresent('Delete')).toBe(false, `Delete is displayed`); + expect(await contextMenu.isMenuItemPresent('Move')).toBe(false, `Move is displayed`); + expect(await contextMenu.isMenuItemPresent('Favorite')).toBe(true, `Favorite is not displayed`); + expect(await contextMenu.isMenuItemPresent('Permissions')).toBe(false, `Permissions is displayed`); + }); + + it('on Shared Files - [C286283]', async () => { + await page.sidenav.navigateToLinkByLabel(SIDEBAR_LABELS.SHARED_FILES); + await dataTable.waitForHeader(); + await dataTable.selectMultipleItems([file1, file2]); + await dataTable.rightClickOnMultipleSelection(); + expect(await contextMenu.isMenuItemPresent('View')).toBe(false, 'View is displayed'); + expect(await contextMenu.isMenuItemPresent('Download')).toBe(true, 'Download is not displayed'); + expect(await contextMenu.isMenuItemPresent('Copy')).toBe(true, `Copy is not displayed`); + expect(await contextMenu.isMenuItemPresent('Delete')).toBe(false, `Delete is displayed`); + expect(await contextMenu.isMenuItemPresent('Move')).toBe(false, `Move is displayed`); + expect(await contextMenu.isMenuItemPresent('Favorite')).toBe(true, `Favorite is not displayed`); + expect(await contextMenu.isMenuItemPresent('Permissions')).toBe(false, `Permissions is displayed`); + }); + + it('on Favorites - [C286280]', async () => { + await page.sidenav.navigateToLinkByLabel(SIDEBAR_LABELS.FAVORITES); + await dataTable.waitForHeader(); + await dataTable.selectMultipleItems([file1, file2]); + await dataTable.rightClickOnMultipleSelection(); + expect(await contextMenu.isMenuItemPresent('View')).toBe(false, 'View is displayed'); + expect(await contextMenu.isMenuItemPresent('Download')).toBe(true, 'Download is not displayed'); + expect(await contextMenu.isMenuItemPresent('Copy')).toBe(true, `Copy is not displayed`); + // TODO: enable when ACA-1737 is done + // expect(await contextMenu.isMenuItemPresent('Delete')).toBe(false, `Delete is displayed`); + // expect(await contextMenu.isMenuItemPresent('Move')).toBe(false, `Move is displayed`); + expect(await contextMenu.isMenuItemPresent('Favorite')).toBe(true, `Favorite is not displayed`); + expect(await contextMenu.isMenuItemPresent('Permissions')).toBe(false, `Permissions is displayed`); + }); + }); + + describe('context menu actions are correct for multiple selection of folders - consumer', () => { + beforeEach(async done => { + await Utils.pressEscape(); + await dataTable.clearSelection(); + done(); + }); + + it('on File Libraries - [C280666]', async () => { + await page.sidenav.navigateToLinkByLabel(SIDEBAR_LABELS.FILE_LIBRARIES); + await dataTable.waitForHeader(); + await dataTable.doubleClickOnRowByName(siteName); + await dataTable.waitForHeader(); + await dataTable.selectMultipleItems([folder1, folder2]); + await dataTable.rightClickOnMultipleSelection(); + expect(await contextMenu.isMenuItemPresent('View')).toBe(false, 'View is displayed'); + expect(await contextMenu.isMenuItemPresent('Download')).toBe(true, 'Download is not displayed'); + expect(await contextMenu.isMenuItemPresent('Copy')).toBe(true, `Copy is not displayed`); + expect(await contextMenu.isMenuItemPresent('Delete')).toBe(false, `Delete is displayed`); + expect(await contextMenu.isMenuItemPresent('Move')).toBe(false, `Move is displayed`); + expect(await contextMenu.isMenuItemPresent('Favorite')).toBe(true, `Favorite is not displayed`); + expect(await contextMenu.isMenuItemPresent('Permissions')).toBe(false, `Permissions is displayed`); + }); + + it('on Favorites - [C286281]', async () => { + await page.sidenav.navigateToLinkByLabel(SIDEBAR_LABELS.FAVORITES); + await dataTable.waitForHeader(); + await dataTable.selectMultipleItems([folder1, folder2]); + await dataTable.rightClickOnMultipleSelection(); + expect(await contextMenu.isMenuItemPresent('View')).toBe(false, 'View is displayed'); + expect(await contextMenu.isMenuItemPresent('Download')).toBe(true, 'Download is not displayed'); + expect(await contextMenu.isMenuItemPresent('Copy')).toBe(true, `Copy is not displayed`); + // TODO: enable when ACA-1737 is done + // expect(await contextMenu.isMenuItemPresent('Delete')).toBe(false, `Delete is displayed`); + // expect(await contextMenu.isMenuItemPresent('Move')).toBe(false, `Move is displayed`); + expect(await contextMenu.isMenuItemPresent('Favorite')).toBe(true, `Favorite is not displayed`); + expect(await contextMenu.isMenuItemPresent('Permissions')).toBe(false, `Permissions is displayed`); + }); + }); + + describe('context menu actions are correct when both files and folders are selected - consumer', () => { + beforeEach(async done => { + await Utils.pressEscape(); + await dataTable.clearSelection(); + done(); + }); + + it('on File Libraries - [C280669]', async () => { + await page.sidenav.navigateToLinkByLabel(SIDEBAR_LABELS.FILE_LIBRARIES); + await dataTable.waitForHeader(); + await dataTable.doubleClickOnRowByName(siteName); + await dataTable.waitForHeader(); + await dataTable.selectMultipleItems([file1, folder1]); + await dataTable.rightClickOnMultipleSelection(); + expect(await contextMenu.isMenuItemPresent('View')).toBe(false, 'View is displayed'); + expect(await contextMenu.isMenuItemPresent('Download')).toBe(true, 'Download is not displayed'); + expect(await contextMenu.isMenuItemPresent('Copy')).toBe(true, `Copy is not displayed`); + expect(await contextMenu.isMenuItemPresent('Delete')).toBe(false, `Delete is displayed`); + expect(await contextMenu.isMenuItemPresent('Move')).toBe(false, `Move is displayed`); + expect(await contextMenu.isMenuItemPresent('Favorite')).toBe(true, `Favorite is not displayed`); + expect(await contextMenu.isMenuItemPresent('Permissions')).toBe(false, `Permissions is displayed`); + }); + + it('on Favorites - [C286282]', async () => { + await page.sidenav.navigateToLinkByLabel(SIDEBAR_LABELS.FAVORITES); + await dataTable.waitForHeader(); + await dataTable.selectMultipleItems([file1, folder1]); + await dataTable.rightClickOnMultipleSelection(); + expect(await contextMenu.isMenuItemPresent('View')).toBe(false, 'View is displayed'); + expect(await contextMenu.isMenuItemPresent('Download')).toBe(true, 'Download is not displayed'); + expect(await contextMenu.isMenuItemPresent('Copy')).toBe(true, `Copy is not displayed`); + // TODO: enable when ACA-1737 is done + // expect(await contextMenu.isMenuItemPresent('Delete')).toBe(false, `Delete is displayed`); + // expect(await contextMenu.isMenuItemPresent('Move')).toBe(false, `Move is displayed`); + expect(await contextMenu.isMenuItemPresent('Favorite')).toBe(true, `Favorite is not displayed`); + expect(await contextMenu.isMenuItemPresent('Permissions')).toBe(false, `Permissions is displayed`); + }); + }); + + describe('toolbar actions appear correctly in the viewer - consumer', () => { + beforeEach(async done => { + await Utils.pressEscape(); + done(); + }); + + it('file from File Libraries - [C268128]', async () => { + await page.sidenav.navigateToLinkByLabel(SIDEBAR_LABELS.FILE_LIBRARIES); + await dataTable.waitForHeader(); + await dataTable.doubleClickOnRowByName(siteName); + await dataTable.waitForHeader(); + await dataTable.doubleClickOnRowByName(docxFile); + expect(await viewer.isViewerOpened()).toBe(true, 'Viewer is not opened'); + + expect(await viewerToolbar.isEmpty()).toBe(false, `viewer toolbar is empty`); + expect(await viewerToolbar.isButtonPresent('View')).toBe(false, `View is displayed`); + expect(await viewerToolbar.isButtonPresent('Download')).toBe(true, `Download is not displayed`); + expect(await viewerToolbar.isButtonPresent('Print')).toBe(true, `Print is not displayed`); + expect(await viewerToolbar.isButtonPresent('Activate full-screen mode')).toBe(true, `Full screen is not displayed`); + expect(await viewerToolbar.isButtonPresent('View details')).toBe(true, `View details is not displayed`); + const menu = await viewerToolbar.openMoreMenu(); + expect(await menu.isMenuItemPresent('Favorite')).toBe(true, `Favorite is not displayed`); + expect(await menu.isMenuItemPresent('Share')).toBe(true, `Share is not displayed`); + expect(await menu.isMenuItemPresent('Copy')).toBe(true, `Copy is not displayed`); + expect(await menu.isMenuItemPresent('Move')).toBe(false, `Move is displayed`); + expect(await menu.isMenuItemPresent('Delete')).toBe(false, `Delete is displayed`); + expect(await menu.isMenuItemPresent('Manage Versions')).toBe(true, `Manage versions is displayed`); + expect(await menu.isMenuItemPresent('Permissions')).toBe(false, `Permissions is displayed`); + await toolbar.closeMoreMenu(); + }); + + it('file from Shared Files - [C286310]', async () => { + await page.sidenav.navigateToLinkByLabel(SIDEBAR_LABELS.SHARED_FILES); + await page.dataTable.waitForHeader(); + await dataTable.doubleClickOnRowByName(docxFile); + expect(await viewer.isViewerOpened()).toBe(true, 'Viewer is not opened'); + + expect(await viewerToolbar.isEmpty()).toBe(false, `viewer toolbar is empty`); + expect(await viewerToolbar.isButtonPresent('View')).toBe(false, `View is displayed`); + expect(await viewerToolbar.isButtonPresent('Download')).toBe(true, `Download is not displayed`); + expect(await viewerToolbar.isButtonPresent('Print')).toBe(true, `Print is not displayed`); + expect(await viewerToolbar.isButtonPresent('Activate full-screen mode')).toBe(true, `Full screen is not displayed`); + expect(await viewerToolbar.isButtonPresent('View details')).toBe(true, `View details is not displayed`); + const menu = await viewerToolbar.openMoreMenu(); + expect(await menu.isMenuItemPresent('Favorite')).toBe(true, `Favorite is not displayed`); + expect(await menu.isMenuItemPresent('Copy')).toBe(true, `Copy is not displayed`); + expect(await menu.isMenuItemPresent('Move')).toBe(false, `Move is displayed`); + expect(await menu.isMenuItemPresent('Delete')).toBe(false, `Delete is displayed`); + expect(await menu.isMenuItemPresent('Manage Versions')).toBe(true, `Manage versions is displayed`); + expect(await menu.isMenuItemPresent('Permissions')).toBe(false, `Permissions is displayed`); + await toolbar.closeMoreMenu(); + }); + + it('file from Favorites - [C286311]', async () => { + await page.sidenav.navigateToLinkByLabel(SIDEBAR_LABELS.FAVORITES); + await dataTable.waitForHeader(); + await dataTable.doubleClickOnRowByName(docxFile); + expect(await viewer.isViewerOpened()).toBe(true, 'Viewer is not opened'); + + expect(await viewerToolbar.isEmpty()).toBe(false, `viewer toolbar is empty`); + expect(await viewerToolbar.isButtonPresent('View')).toBe(false, `View is displayed`); + expect(await viewerToolbar.isButtonPresent('Download')).toBe(true, `Download is not displayed`); + expect(await viewerToolbar.isButtonPresent('Print')).toBe(true, `Print is not displayed`); + expect(await viewerToolbar.isButtonPresent('Activate full-screen mode')).toBe(true, `Full screen is not displayed`); + expect(await viewerToolbar.isButtonPresent('View details')).toBe(true, `View details is not displayed`); + const menu = await viewerToolbar.openMoreMenu(); + expect(await menu.isMenuItemPresent('Favorite')).toBe(true, `Favorite is not displayed`); + expect(await menu.isMenuItemPresent('Share')).toBe(true, `Share is not displayed`); + expect(await menu.isMenuItemPresent('Copy')).toBe(true, `Copy is not displayed`); + // TODO: enable when ACA-1737 is done + // expect(await menu.isMenuItemPresent('Move')).toBe(false, `Move is displayed`); + // expect(await menu.isMenuItemPresent('Delete')).toBe(false, `Delete is displayed`); + expect(await menu.isMenuItemPresent('Manage Versions')).toBe(true, `Manage versions is displayed`); + expect(await menu.isMenuItemPresent('Permissions')).toBe(false, `Permissions is displayed`); + await toolbar.closeMoreMenu(); + }); + }); }); diff --git a/e2e/suites/actions/toolbar-multiple-selection.test.ts b/e2e/suites/actions/toolbar-multiple-selection.test.ts index 4682bb100..c5c4696af 100755 --- a/e2e/suites/actions/toolbar-multiple-selection.test.ts +++ b/e2e/suites/actions/toolbar-multiple-selection.test.ts @@ -30,311 +30,636 @@ import { RepoClient } from '../../utilities/repo-client/repo-client'; import { Utils } from '../../utilities/utils'; describe('Toolbar actions - multiple selection : ', () => { - const username = `user-${Utils.random()}`; + const username = `user-${Utils.random()}`; - const file1 = `file-${Utils.random()}.txt`; let file1Id; - const file2 = `file-${Utils.random()}.txt`; let file2Id; + const file1 = `file-${Utils.random()}.txt`; + let file1Id; + const file2 = `file-${Utils.random()}.txt`; + let file2Id; - const folder1 = `folder-${Utils.random()}`; let folder1Id; - const folder2 = `folder-${Utils.random()}`; let folder2Id; + const folder1 = `folder-${Utils.random()}`; + let folder1Id; + const folder2 = `folder-${Utils.random()}`; + let folder2Id; - const fileForDelete1 = `file-${Utils.random()}.txt`; let fileForDelete1Id; - const fileForDelete2 = `file-${Utils.random()}.txt`; let fileForDelete2Id; - const folderForDelete1 = `folder-${Utils.random()}`; let folderForDelete1Id; - const folderForDelete2 = `folder-${Utils.random()}`; let folderForDelete2Id; + const fileForDelete1 = `file-${Utils.random()}.txt`; + let fileForDelete1Id; + const fileForDelete2 = `file-${Utils.random()}.txt`; + let fileForDelete2Id; + const folderForDelete1 = `folder-${Utils.random()}`; + let folderForDelete1Id; + const folderForDelete2 = `folder-${Utils.random()}`; + let folderForDelete2Id; - const siteName = `site-${Utils.random()}`; - const file1InSite = `file1-${Utils.random()}.txt`; - const file2InSite = `file2-${Utils.random()}.txt`; - const folder1InSite = `folder1-${Utils.random()}`; - const folder2InSite = `folder2-${Utils.random()}`; + const siteName = `site-${Utils.random()}`; + const file1InSite = `file1-${Utils.random()}.txt`; + const file2InSite = `file2-${Utils.random()}.txt`; + const folder1InSite = `folder1-${Utils.random()}`; + const folder2InSite = `folder2-${Utils.random()}`; - const apis = { - admin: new RepoClient(), - user: new RepoClient(username, username) - }; + const apis = { + admin: new RepoClient(), + user: new RepoClient(username, username) + }; - const loginPage = new LoginPage(); - const logoutPage = new LogoutPage(); - const page = new BrowsingPage(); - const { dataTable, toolbar } = page; + const loginPage = new LoginPage(); + const logoutPage = new LogoutPage(); + const page = new BrowsingPage(); + const { dataTable, toolbar } = page; - beforeAll(async (done) => { - await apis.admin.people.createUser({ username }); + beforeAll(async done => { + await apis.admin.people.createUser({ username }); - file1Id = (await apis.user.nodes.createFiles([ file1 ])).entry.id; - file2Id = (await apis.user.nodes.createFiles([ file2 ])).entry.id; - folder1Id = (await apis.user.nodes.createFolders([ folder1 ])).entry.id; - folder2Id = (await apis.user.nodes.createFolders([ folder2 ])).entry.id; - fileForDelete1Id = (await apis.user.nodes.createFiles([ fileForDelete1 ])).entry.id; - fileForDelete2Id = (await apis.user.nodes.createFiles([ fileForDelete2 ])).entry.id; - folderForDelete1Id = (await apis.user.nodes.createFolders([ folderForDelete1 ])).entry.id; - folderForDelete2Id = (await apis.user.nodes.createFolders([ folderForDelete2 ])).entry.id; + file1Id = (await apis.user.nodes.createFiles([file1])).entry.id; + file2Id = (await apis.user.nodes.createFiles([file2])).entry.id; + folder1Id = (await apis.user.nodes.createFolders([folder1])).entry.id; + folder2Id = (await apis.user.nodes.createFolders([folder2])).entry.id; + fileForDelete1Id = (await apis.user.nodes.createFiles([fileForDelete1])) + .entry.id; + fileForDelete2Id = (await apis.user.nodes.createFiles([fileForDelete2])) + .entry.id; + folderForDelete1Id = (await apis.user.nodes.createFolders([ + folderForDelete1 + ])).entry.id; + folderForDelete2Id = (await apis.user.nodes.createFolders([ + folderForDelete2 + ])).entry.id; - await apis.user.shared.shareFilesByIds([ file1Id, file2Id ]); - await apis.user.shared.waitForApi({ expect: 2 }); + await apis.user.shared.shareFilesByIds([file1Id, file2Id]); + await apis.user.shared.waitForApi({ expect: 2 }); - await apis.user.favorites.addFavoritesByIds('file', [ file1Id, file2Id ]); - await apis.user.favorites.addFavoritesByIds('folder', [ folder1Id, folder2Id ]); - await apis.user.favorites.waitForApi({ expect: 4 }); + await apis.user.favorites.addFavoritesByIds('file', [file1Id, file2Id]); + await apis.user.favorites.addFavoritesByIds('folder', [ + folder1Id, + folder2Id + ]); + await apis.user.favorites.waitForApi({ expect: 4 }); - await apis.user.nodes.deleteNodesById([ fileForDelete1Id, fileForDelete2Id, folderForDelete1Id, folderForDelete2Id ], false); + await apis.user.nodes.deleteNodesById( + [ + fileForDelete1Id, + fileForDelete2Id, + folderForDelete1Id, + folderForDelete2Id + ], + false + ); - await apis.user.sites.createSite(siteName, SITE_VISIBILITY.PRIVATE); - const docLibId = await apis.user.sites.getDocLibId(siteName); - await apis.user.nodes.createFile(file1InSite, docLibId); - await apis.user.nodes.createFile(file2InSite, docLibId); - await apis.user.nodes.createFolder(folder1InSite, docLibId); - await apis.user.nodes.createFolder(folder2InSite, docLibId); + await apis.user.sites.createSite(siteName, SITE_VISIBILITY.PRIVATE); + const docLibId = await apis.user.sites.getDocLibId(siteName); + await apis.user.nodes.createFile(file1InSite, docLibId); + await apis.user.nodes.createFile(file2InSite, docLibId); + await apis.user.nodes.createFolder(folder1InSite, docLibId); + await apis.user.nodes.createFolder(folder2InSite, docLibId); - await loginPage.loginWith(username); - done(); + await loginPage.loginWith(username); + done(); + }); + + afterAll(async done => { + await Promise.all([ + apis.user.nodes.deleteNodesById([file1Id, file2Id, folder1Id, folder2Id]), + apis.user.trashcan.emptyTrash(), + apis.user.sites.deleteSite(siteName), + logoutPage.load() + ]); + done(); + }); + + xit(''); + + describe('Personal Files', () => { + beforeEach(async done => { + await dataTable.clearSelection(); + await page.sidenav.navigateToLinkByLabel(SIDEBAR_LABELS.PERSONAL_FILES); + await dataTable.waitForHeader(); + done(); }); - afterAll(async (done) => { - await Promise.all([ - apis.user.nodes.deleteNodesById([ file1Id, file2Id, folder1Id, folder2Id ]), - apis.user.trashcan.emptyTrash(), - apis.user.sites.deleteSite(siteName), - logoutPage.load() - ]); - done(); + it('Unselect items with single click - [C280458]', async () => { + await dataTable.selectMultipleItems([file1, file2, folder1, folder2]); + expect(await dataTable.countSelectedRows()).toEqual( + 4, + 'incorrect selected rows number' + ); + await dataTable.selectItem(file1); + expect(await dataTable.countSelectedRows()).toEqual( + 1, + 'incorrect selected rows number' + ); }); - xit(''); + it('Select / unselect selected items by CMD+click - [C217110]', async () => { + await browser + .actions() + .sendKeys(protractor.Key.COMMAND) + .perform(); + await dataTable.selectItem(file1); + await dataTable.selectItem(file2); + await dataTable.selectItem(folder1); + await dataTable.selectItem(folder2); + await browser + .actions() + .sendKeys(protractor.Key.NULL) + .perform(); + expect(await dataTable.countSelectedRows()).toEqual( + 4, + 'incorrect selected rows number' + ); + await browser + .actions() + .sendKeys(protractor.Key.COMMAND) + .perform(); + await dataTable.selectItem(file1); + await dataTable.selectItem(file2); + await browser + .actions() + .sendKeys(protractor.Key.NULL) + .perform(); - describe('Personal Files', () => { - beforeEach(async (done) => { - await dataTable.clearSelection(); - await page.sidenav.navigateToLinkByLabel(SIDEBAR_LABELS.PERSONAL_FILES); - await dataTable.waitForHeader(); - done(); - }); - - it('Unselect items with single click - [C280458]', async () => { - await dataTable.selectMultipleItems([ file1, file2, folder1, folder2 ]); - expect(await dataTable.countSelectedRows()).toEqual(4, 'incorrect selected rows number'); - await dataTable.selectItem(file1); - expect(await dataTable.countSelectedRows()).toEqual(1, 'incorrect selected rows number'); - }); - - it('Select / unselect selected items by CMD+click - [C217110]', async () => { - await browser.actions().sendKeys(protractor.Key.COMMAND).perform(); - await dataTable.selectItem(file1); - await dataTable.selectItem(file2); - await dataTable.selectItem(folder1); - await dataTable.selectItem(folder2); - await browser.actions().sendKeys(protractor.Key.NULL).perform(); - expect(await dataTable.countSelectedRows()).toEqual(4, 'incorrect selected rows number'); - await browser.actions().sendKeys(protractor.Key.COMMAND).perform(); - await dataTable.selectItem(file1); - await dataTable.selectItem(file2); - await browser.actions().sendKeys(protractor.Key.NULL).perform(); - expect(await dataTable.countSelectedRows()).toEqual(2, 'incorrect selected rows number'); - }); - - it('correct actions appear when multiple files are selected - [C217112]', async () => { - await dataTable.selectMultipleItems([file1, file2]); - expect(await toolbar.isButtonPresent('View')).toBe(false, 'View is displayed'); - expect(await toolbar.isButtonPresent('Download')).toBe(true, 'Download is not displayed'); - expect(await toolbar.isButtonPresent('Edit')).toBe(false, 'Edit is displayed'); - const menu = await toolbar.openMoreMenu(); - expect(await menu.isMenuItemPresent('Copy')).toBe(true, `Copy is not displayed for selected files`); - expect(await menu.isMenuItemPresent('Delete')).toBe(true, `Delete is not displayed for selected files`); - expect(await menu.isMenuItemPresent('Move')).toBe(true, `Move is not displayed for selected files`); - expect(await menu.isMenuItemPresent('Favorite')).toBe(true, `Favorite is not displayed for selected files`); - await toolbar.closeMoreMenu(); - }); - - it('correct actions appear when multiple folders are selected - [C280459]', async () => { - await dataTable.selectMultipleItems([folder1, folder2]); - expect(await toolbar.isButtonPresent('View')).toBe(false, 'View is displayed'); - expect(await toolbar.isButtonPresent('Download')).toBe(true, 'Download is not displayed'); - expect(await toolbar.isButtonPresent('Edit')).toBe(false, 'Edit is displayed'); - const menu = await toolbar.openMoreMenu(); - expect(await menu.isMenuItemPresent('Copy')).toBe(true, `Copy is not displayed for selected files`); - expect(await menu.isMenuItemPresent('Delete')).toBe(true, `Delete is not displayed for selected files`); - expect(await menu.isMenuItemPresent('Move')).toBe(true, `Move is not displayed for selected files`); - expect(await menu.isMenuItemPresent('Favorite')).toBe(true, `Favorite is not displayed for selected files`); - await toolbar.closeMoreMenu(); - }); - - it('correct actions appear when both files and folders are selected - [C280460]', async () => { - await dataTable.selectMultipleItems([file1, file2, folder1, folder2]); - expect(await toolbar.isButtonPresent('View')).toBe(false, 'View is displayed'); - expect(await toolbar.isButtonPresent('Download')).toBe(true, 'Download is not displayed'); - expect(await toolbar.isButtonPresent('Edit')).toBe(false, 'Edit is displayed'); - const menu = await toolbar.openMoreMenu(); - expect(await menu.isMenuItemPresent('Copy')).toBe(true, `Copy is not displayed for selected files`); - expect(await menu.isMenuItemPresent('Delete')).toBe(true, `Delete is not displayed for selected files`); - expect(await menu.isMenuItemPresent('Move')).toBe(true, `Move is not displayed for selected files`); - expect(await menu.isMenuItemPresent('Favorite')).toBe(true, `Favorite is not displayed for selected files`); - await toolbar.closeMoreMenu(); - }); + expect(await dataTable.countSelectedRows()).toEqual( + 2, + 'incorrect selected rows number' + ); }); - describe('File Libraries', () => { - beforeEach(async (done) => { - await browser.actions().mouseMove(browser.$('body'), { x: 0, y: 0 }).click().perform(); - await dataTable.clearSelection(); - await page.sidenav.navigateToLinkByLabel(SIDEBAR_LABELS.FILE_LIBRARIES); - await dataTable.waitForHeader(); - await dataTable.doubleClickOnRowByName(siteName); - await dataTable.waitForHeader(); - done(); - }); - - it('correct actions appear when multiple files are selected - [C280461]', async () => { - await dataTable.selectMultipleItems([file1InSite, file2InSite]); - expect(await toolbar.isButtonPresent('View')).toBe(false, 'View is displayed for selected files'); - expect(await toolbar.isButtonPresent('Download')).toBe(true, 'Download is not displayed for selected files'); - expect(await toolbar.isButtonPresent('Edit')).toBe(false, 'Edit is displayed for selected files'); - const menu = await toolbar.openMoreMenu(); - expect(await menu.isMenuItemPresent('Copy')).toBe(true, `Copy is not displayed for selected files`); - expect(await menu.isMenuItemPresent('Delete')).toBe(true, `Delete is not displayed for selected files`); - expect(await menu.isMenuItemPresent('Move')).toBe(true, `Move is not displayed for selected files`); - expect(await menu.isMenuItemPresent('Favorite')).toBe(true, `Favorite is not displayed for selected files`); - }); - - it('correct actions appear when multiple folders are selected - [C280462]', async () => { - await dataTable.selectMultipleItems([folder1InSite, folder2InSite]); - expect(await toolbar.isButtonPresent('View')).toBe(false, 'View is displayed'); - expect(await toolbar.isButtonPresent('Download')).toBe(true, 'Download is not displayed'); - expect(await toolbar.isButtonPresent('Edit')).toBe(false, 'Edit is displayed'); - const menu = await toolbar.openMoreMenu(); - expect(await menu.isMenuItemPresent('Copy')).toBe(true, `Copy is not displayed for selected files`); - expect(await menu.isMenuItemPresent('Delete')).toBe(true, `Delete is not displayed for selected files`); - expect(await menu.isMenuItemPresent('Move')).toBe(true, `Move is not displayed for selected files`); - expect(await menu.isMenuItemPresent('Favorite')).toBe(true, `Favorite is not displayed for selected files`); - }); - - it('correct actions appear when both files and folders are selected - [C280463]', async () => { - await dataTable.selectMultipleItems([file1InSite, file2InSite, folder1InSite, folder2InSite]); - expect(await toolbar.isButtonPresent('View')).toBe(false, 'View is displayed'); - expect(await toolbar.isButtonPresent('Download')).toBe(true, 'Download is not displayed'); - expect(await toolbar.isButtonPresent('Edit')).toBe(false, 'Edit is displayed'); - const menu = await toolbar.openMoreMenu(); - expect(await menu.isMenuItemPresent('Copy')).toBe(true, `Copy is not displayed for selected files`); - expect(await menu.isMenuItemPresent('Delete')).toBe(true, `Delete is not displayed for selected files`); - expect(await menu.isMenuItemPresent('Move')).toBe(true, `Move is not displayed for selected files`); - expect(await menu.isMenuItemPresent('Favorite')).toBe(true, `Favorite is not displayed for selected files`); - }); + it('correct actions appear when multiple files are selected - [C217112]', async () => { + await dataTable.selectMultipleItems([file1, file2]); + expect(await toolbar.isButtonPresent('View')).toBe( + false, + 'View is displayed' + ); + expect(await toolbar.isButtonPresent('Download')).toBe( + true, + 'Download is not displayed' + ); + expect(await toolbar.isButtonPresent('Edit')).toBe( + false, + 'Edit is displayed' + ); + const menu = await toolbar.openMoreMenu(); + expect(await menu.isMenuItemPresent('Copy')).toBe( + true, + `Copy is not displayed for selected files` + ); + expect(await menu.isMenuItemPresent('Delete')).toBe( + true, + `Delete is not displayed for selected files` + ); + expect(await menu.isMenuItemPresent('Move')).toBe( + true, + `Move is not displayed for selected files` + ); + expect(await menu.isMenuItemPresent('Favorite')).toBe( + true, + `Favorite is not displayed for selected files` + ); + await toolbar.closeMoreMenu(); }); - describe('Shared Files', () => { - beforeEach(async (done) => { - await browser.actions().mouseMove(browser.$('body'), { x: 0, y: 0 }).click().perform(); - await dataTable.clearSelection(); - await page.sidenav.navigateToLinkByLabel(SIDEBAR_LABELS.SHARED_FILES); - await dataTable.waitForHeader(); - done(); - }); - - it('correct actions appear when multiple files are selected - [C280467]', async () => { - await dataTable.selectMultipleItems([file1, file2]); - expect(await toolbar.isButtonPresent('View')).toBe(false, 'View is displayed'); - expect(await toolbar.isButtonPresent('Download')).toBe(true, 'Download is not displayed for selected files'); - expect(await toolbar.isButtonPresent('Edit')).toBe(false, 'Edit is displayed for selected files'); - const menu = await toolbar.openMoreMenu(); - expect(await menu.isMenuItemPresent('Copy')).toBe(true, `Copy is not displayed for selected files`); - expect(await menu.isMenuItemPresent('Delete')).toBe(true, `Delete is not displayed for selected files`); - expect(await menu.isMenuItemPresent('Move')).toBe(true, `Move is not displayed for selected files`); - expect(await menu.isMenuItemPresent('Favorite')).toBe(true, `Favorite is not displayed for selected files`); - }); + it('correct actions appear when multiple folders are selected - [C280459]', async () => { + await dataTable.selectMultipleItems([folder1, folder2]); + expect(await toolbar.isButtonPresent('View')).toBe( + false, + 'View is displayed' + ); + expect(await toolbar.isButtonPresent('Download')).toBe( + true, + 'Download is not displayed' + ); + expect(await toolbar.isButtonPresent('Edit')).toBe( + false, + 'Edit is displayed' + ); + const menu = await toolbar.openMoreMenu(); + expect(await menu.isMenuItemPresent('Copy')).toBe( + true, + `Copy is not displayed for selected files` + ); + expect(await menu.isMenuItemPresent('Delete')).toBe( + true, + `Delete is not displayed for selected files` + ); + expect(await menu.isMenuItemPresent('Move')).toBe( + true, + `Move is not displayed for selected files` + ); + expect(await menu.isMenuItemPresent('Favorite')).toBe( + true, + `Favorite is not displayed for selected files` + ); + await toolbar.closeMoreMenu(); }); - describe('Recent Files', () => { - beforeEach(async (done) => { - await browser.actions().mouseMove(browser.$('body'), { x: 0, y: 0 }).click().perform(); - await dataTable.clearSelection(); - await page.sidenav.navigateToLinkByLabel(SIDEBAR_LABELS.RECENT_FILES); - await dataTable.waitForHeader(); - done(); - }); + it('correct actions appear when both files and folders are selected - [C280460]', async () => { + await dataTable.selectMultipleItems([file1, file2, folder1, folder2]); + expect(await toolbar.isButtonPresent('View')).toBe( + false, + 'View is displayed' + ); + expect(await toolbar.isButtonPresent('Download')).toBe( + true, + 'Download is not displayed' + ); + expect(await toolbar.isButtonPresent('Edit')).toBe( + false, + 'Edit is displayed' + ); + const menu = await toolbar.openMoreMenu(); + expect(await menu.isMenuItemPresent('Copy')).toBe( + true, + `Copy is not displayed for selected files` + ); + expect(await menu.isMenuItemPresent('Delete')).toBe( + true, + `Delete is not displayed for selected files` + ); + expect(await menu.isMenuItemPresent('Move')).toBe( + true, + `Move is not displayed for selected files` + ); + expect(await menu.isMenuItemPresent('Favorite')).toBe( + true, + `Favorite is not displayed for selected files` + ); + await toolbar.closeMoreMenu(); + }); + }); - it('correct actions appear when multiple files are selected - [C280468]', async () => { - await dataTable.selectMultipleItems([file1, file2]); - expect(await toolbar.isButtonPresent('View')).toBe(false, 'View is displayed'); - expect(await toolbar.isButtonPresent('Download')).toBe(true, 'Download is not displayed'); - expect(await toolbar.isButtonPresent('Edit')).toBe(false, 'Edit is displayed'); - const menu = await toolbar.openMoreMenu(); - expect(await menu.isMenuItemPresent('Copy')).toBe(true, `Copy is not displayed for selected files`); - expect(await menu.isMenuItemPresent('Delete')).toBe(true, `Delete is not displayed for selected files`); - expect(await menu.isMenuItemPresent('Move')).toBe(true, `Move is not displayed for selected files`); - expect(await menu.isMenuItemPresent('Favorite')).toBe(true, `Favorite is not displayed for selected files`); - }); + describe('File Libraries', () => { + beforeEach(async done => { + await browser + .actions() + .mouseMove(browser.$('body'), { x: 0, y: 0 }) + .click() + .perform(); + await dataTable.clearSelection(); + await page.sidenav.navigateToLinkByLabel(SIDEBAR_LABELS.FILE_LIBRARIES); + await dataTable.waitForHeader(); + await dataTable.doubleClickOnRowByName(siteName); + await dataTable.waitForHeader(); + done(); }); - describe('Favorites', () => { - beforeEach(async (done) => { - await browser.actions().mouseMove(browser.$('body'), { x: 0, y: 0 }).click().perform(); - await dataTable.clearSelection(); - await page.sidenav.navigateToLinkByLabel(SIDEBAR_LABELS.FAVORITES); - await dataTable.waitForHeader(); - done(); - }); - - it('correct actions appear when multiple files are selected - [C280469]', async () => { - await dataTable.selectMultipleItems([file1, file2]); - expect(await toolbar.isButtonPresent('View')).toBe(false, 'View is displayed'); - expect(await toolbar.isButtonPresent('Download')).toBe(true, 'Download is not displayed'); - expect(await toolbar.isButtonPresent('Edit')).toBe(false, 'Edit is displayed'); - const menu = await toolbar.openMoreMenu(); - expect(await menu.isMenuItemPresent('Copy')).toBe(true, `Copy is not displayed for selected files`); - expect(await menu.isMenuItemPresent('Delete')).toBe(true, `Delete is not displayed for selected files`); - expect(await menu.isMenuItemPresent('Move')).toBe(true, `Move is not displayed for selected files`); - expect(await menu.isMenuItemPresent('Favorite')).toBe(true, `Favorite is not displayed for selected files`); - }); - - it('correct actions appear when multiple folders are selected - [C280470]', async () => { - await dataTable.selectMultipleItems([folder1, folder2]); - expect(await toolbar.isButtonPresent('View')).toBe(false, 'View is displayed'); - expect(await toolbar.isButtonPresent('Download')).toBe(true, 'Download is not displayed'); - expect(await toolbar.isButtonPresent('Edit')).toBe(false, 'Edit is displayed'); - const menu = await toolbar.openMoreMenu(); - expect(await menu.isMenuItemPresent('Copy')).toBe(true, `Copy is not displayed for selected files`); - expect(await menu.isMenuItemPresent('Delete')).toBe(true, `Delete is not displayed for selected files`); - expect(await menu.isMenuItemPresent('Move')).toBe(true, `Move is not displayed for selected files`); - expect(await menu.isMenuItemPresent('Favorite')).toBe(true, `Favorite is not displayed for selected files`); - }); - - it('correct actions appear when both files and folders are selected - [C280471]', async () => { - await dataTable.selectMultipleItems([file1, file2, folder1, folder2]); - expect(await toolbar.isButtonPresent('View')).toBe(false, 'View is displayed'); - expect(await toolbar.isButtonPresent('Download')).toBe(true, 'Download is not displayed for selected files'); - expect(await toolbar.isButtonPresent('Edit')).toBe(false, 'Edit is displayed'); - const menu = await toolbar.openMoreMenu(); - expect(await menu.isMenuItemPresent('Copy')).toBe(true, `Copy is not displayed for selected files`); - expect(await menu.isMenuItemPresent('Delete')).toBe(true, `Delete is not displayed for selected files`); - expect(await menu.isMenuItemPresent('Move')).toBe(true, `Move is not displayed for selected files`); - expect(await menu.isMenuItemPresent('Favorite')).toBe(true, `Favorite is not displayed for selected files`); - }); + it('correct actions appear when multiple files are selected - [C280461]', async () => { + await dataTable.selectMultipleItems([file1InSite, file2InSite]); + expect(await toolbar.isButtonPresent('View')).toBe( + false, + 'View is displayed for selected files' + ); + expect(await toolbar.isButtonPresent('Download')).toBe( + true, + 'Download is not displayed for selected files' + ); + expect(await toolbar.isButtonPresent('Edit')).toBe( + false, + 'Edit is displayed for selected files' + ); + const menu = await toolbar.openMoreMenu(); + expect(await menu.isMenuItemPresent('Copy')).toBe( + true, + `Copy is not displayed for selected files` + ); + expect(await menu.isMenuItemPresent('Delete')).toBe( + true, + `Delete is not displayed for selected files` + ); + expect(await menu.isMenuItemPresent('Move')).toBe( + true, + `Move is not displayed for selected files` + ); + expect(await menu.isMenuItemPresent('Favorite')).toBe( + true, + `Favorite is not displayed for selected files` + ); }); - describe('Trash', () => { - beforeEach(async (done) => { - await dataTable.clearSelection(); - await page.sidenav.navigateToLinkByLabel(SIDEBAR_LABELS.TRASH); - await dataTable.waitForHeader(); - done(); - }); - - it('correct actions appear when multiple files are selected - [C280472]', async () => { - await dataTable.selectMultipleItems([fileForDelete1, fileForDelete2]); - expect(await toolbar.isButtonPresent('Permanently delete')).toBe(true, 'Permanently delete is displayed'); - expect(await toolbar.isButtonPresent('Restore')).toBe(true, 'Restore is not displayed'); - }); - - it('correct actions appear when multiple folders are selected - [C280473]', async () => { - await dataTable.selectMultipleItems([folderForDelete1, folderForDelete2]); - expect(await toolbar.isButtonPresent('Permanently delete')).toBe(true, 'Permanently delete is displayed'); - expect(await toolbar.isButtonPresent('Restore')).toBe(true, 'Restore is not displayed'); - }); - - it('correct actions appear when both files and folders are selected - [C280474]', async () => { - await dataTable.selectMultipleItems([fileForDelete1, fileForDelete2, folderForDelete1, folderForDelete2]); - expect(await toolbar.isButtonPresent('Permanently delete')).toBe(true, 'Permanently delete is displayed'); - expect(await toolbar.isButtonPresent('Restore')).toBe(true, 'Restore is not displayed'); - }); + it('correct actions appear when multiple folders are selected - [C280462]', async () => { + await dataTable.selectMultipleItems([folder1InSite, folder2InSite]); + expect(await toolbar.isButtonPresent('View')).toBe( + false, + 'View is displayed' + ); + expect(await toolbar.isButtonPresent('Download')).toBe( + true, + 'Download is not displayed' + ); + expect(await toolbar.isButtonPresent('Edit')).toBe( + false, + 'Edit is displayed' + ); + const menu = await toolbar.openMoreMenu(); + expect(await menu.isMenuItemPresent('Copy')).toBe( + true, + `Copy is not displayed for selected files` + ); + expect(await menu.isMenuItemPresent('Delete')).toBe( + true, + `Delete is not displayed for selected files` + ); + expect(await menu.isMenuItemPresent('Move')).toBe( + true, + `Move is not displayed for selected files` + ); + expect(await menu.isMenuItemPresent('Favorite')).toBe( + true, + `Favorite is not displayed for selected files` + ); }); + + it('correct actions appear when both files and folders are selected - [C280463]', async () => { + await dataTable.selectMultipleItems([ + file1InSite, + file2InSite, + folder1InSite, + folder2InSite + ]); + expect(await toolbar.isButtonPresent('View')).toBe( + false, + 'View is displayed' + ); + expect(await toolbar.isButtonPresent('Download')).toBe( + true, + 'Download is not displayed' + ); + expect(await toolbar.isButtonPresent('Edit')).toBe( + false, + 'Edit is displayed' + ); + const menu = await toolbar.openMoreMenu(); + expect(await menu.isMenuItemPresent('Copy')).toBe( + true, + `Copy is not displayed for selected files` + ); + expect(await menu.isMenuItemPresent('Delete')).toBe( + true, + `Delete is not displayed for selected files` + ); + expect(await menu.isMenuItemPresent('Move')).toBe( + true, + `Move is not displayed for selected files` + ); + expect(await menu.isMenuItemPresent('Favorite')).toBe( + true, + `Favorite is not displayed for selected files` + ); + }); + }); + + describe('Shared Files', () => { + beforeEach(async done => { + await browser + .actions() + .mouseMove(browser.$('body'), { x: 0, y: 0 }) + .click() + .perform(); + await dataTable.clearSelection(); + await page.sidenav.navigateToLinkByLabel(SIDEBAR_LABELS.SHARED_FILES); + await dataTable.waitForHeader(); + done(); + }); + + it('correct actions appear when multiple files are selected - [C280467]', async () => { + await dataTable.selectMultipleItems([file1, file2]); + expect(await toolbar.isButtonPresent('View')).toBe( + false, + 'View is displayed' + ); + expect(await toolbar.isButtonPresent('Download')).toBe( + true, + 'Download is not displayed for selected files' + ); + expect(await toolbar.isButtonPresent('Edit')).toBe( + false, + 'Edit is displayed for selected files' + ); + const menu = await toolbar.openMoreMenu(); + expect(await menu.isMenuItemPresent('Copy')).toBe( + true, + `Copy is not displayed for selected files` + ); + expect(await menu.isMenuItemPresent('Delete')).toBe( + true, + `Delete is not displayed for selected files` + ); + expect(await menu.isMenuItemPresent('Move')).toBe( + true, + `Move is not displayed for selected files` + ); + expect(await menu.isMenuItemPresent('Favorite')).toBe( + true, + `Favorite is not displayed for selected files` + ); + }); + }); + + describe('Recent Files', () => { + beforeEach(async done => { + await browser + .actions() + .mouseMove(browser.$('body'), { x: 0, y: 0 }) + .click() + .perform(); + await dataTable.clearSelection(); + await page.sidenav.navigateToLinkByLabel(SIDEBAR_LABELS.RECENT_FILES); + await dataTable.waitForHeader(); + done(); + }); + + it('correct actions appear when multiple files are selected - [C280468]', async () => { + await dataTable.selectMultipleItems([file1, file2]); + expect(await toolbar.isButtonPresent('View')).toBe( + false, + 'View is displayed' + ); + expect(await toolbar.isButtonPresent('Download')).toBe( + true, + 'Download is not displayed' + ); + expect(await toolbar.isButtonPresent('Edit')).toBe( + false, + 'Edit is displayed' + ); + const menu = await toolbar.openMoreMenu(); + expect(await menu.isMenuItemPresent('Copy')).toBe( + true, + `Copy is not displayed for selected files` + ); + expect(await menu.isMenuItemPresent('Delete')).toBe( + true, + `Delete is not displayed for selected files` + ); + expect(await menu.isMenuItemPresent('Move')).toBe( + true, + `Move is not displayed for selected files` + ); + expect(await menu.isMenuItemPresent('Favorite')).toBe( + true, + `Favorite is not displayed for selected files` + ); + }); + }); + + describe('Favorites', () => { + beforeEach(async done => { + await browser + .actions() + .mouseMove(browser.$('body'), { x: 0, y: 0 }) + .click() + .perform(); + await dataTable.clearSelection(); + await page.sidenav.navigateToLinkByLabel(SIDEBAR_LABELS.FAVORITES); + await dataTable.waitForHeader(); + done(); + }); + + it('correct actions appear when multiple files are selected - [C280469]', async () => { + await dataTable.selectMultipleItems([file1, file2]); + expect(await toolbar.isButtonPresent('View')).toBe( + false, + 'View is displayed' + ); + expect(await toolbar.isButtonPresent('Download')).toBe( + true, + 'Download is not displayed' + ); + expect(await toolbar.isButtonPresent('Edit')).toBe( + false, + 'Edit is displayed' + ); + const menu = await toolbar.openMoreMenu(); + expect(await menu.isMenuItemPresent('Copy')).toBe( + true, + `Copy is not displayed for selected files` + ); + expect(await menu.isMenuItemPresent('Delete')).toBe( + true, + `Delete is not displayed for selected files` + ); + expect(await menu.isMenuItemPresent('Move')).toBe( + true, + `Move is not displayed for selected files` + ); + expect(await menu.isMenuItemPresent('Favorite')).toBe( + true, + `Favorite is not displayed for selected files` + ); + }); + + it('correct actions appear when multiple folders are selected - [C280470]', async () => { + await dataTable.selectMultipleItems([folder1, folder2]); + expect(await toolbar.isButtonPresent('View')).toBe( + false, + 'View is displayed' + ); + expect(await toolbar.isButtonPresent('Download')).toBe( + true, + 'Download is not displayed' + ); + expect(await toolbar.isButtonPresent('Edit')).toBe( + false, + 'Edit is displayed' + ); + const menu = await toolbar.openMoreMenu(); + expect(await menu.isMenuItemPresent('Copy')).toBe( + true, + `Copy is not displayed for selected files` + ); + expect(await menu.isMenuItemPresent('Delete')).toBe( + true, + `Delete is not displayed for selected files` + ); + expect(await menu.isMenuItemPresent('Move')).toBe( + true, + `Move is not displayed for selected files` + ); + expect(await menu.isMenuItemPresent('Favorite')).toBe( + true, + `Favorite is not displayed for selected files` + ); + }); + + it('correct actions appear when both files and folders are selected - [C280471]', async () => { + await dataTable.selectMultipleItems([file1, file2, folder1, folder2]); + expect(await toolbar.isButtonPresent('View')).toBe( + false, + 'View is displayed' + ); + expect(await toolbar.isButtonPresent('Download')).toBe( + true, + 'Download is not displayed for selected files' + ); + expect(await toolbar.isButtonPresent('Edit')).toBe( + false, + 'Edit is displayed' + ); + const menu = await toolbar.openMoreMenu(); + expect(await menu.isMenuItemPresent('Copy')).toBe( + true, + `Copy is not displayed for selected files` + ); + expect(await menu.isMenuItemPresent('Delete')).toBe( + true, + `Delete is not displayed for selected files` + ); + expect(await menu.isMenuItemPresent('Move')).toBe( + true, + `Move is not displayed for selected files` + ); + expect(await menu.isMenuItemPresent('Favorite')).toBe( + true, + `Favorite is not displayed for selected files` + ); + }); + }); + + describe('Trash', () => { + beforeEach(async done => { + await dataTable.clearSelection(); + await page.sidenav.navigateToLinkByLabel(SIDEBAR_LABELS.TRASH); + await dataTable.waitForHeader(); + done(); + }); + + it('correct actions appear when multiple files are selected - [C280472]', async () => { + await dataTable.selectMultipleItems([fileForDelete1, fileForDelete2]); + expect(await toolbar.isButtonPresent('Permanently delete')).toBe( + true, + 'Permanently delete is displayed' + ); + expect(await toolbar.isButtonPresent('Restore')).toBe( + true, + 'Restore is not displayed' + ); + }); + + it('correct actions appear when multiple folders are selected - [C280473]', async () => { + await dataTable.selectMultipleItems([folderForDelete1, folderForDelete2]); + expect(await toolbar.isButtonPresent('Permanently delete')).toBe( + true, + 'Permanently delete is displayed' + ); + expect(await toolbar.isButtonPresent('Restore')).toBe( + true, + 'Restore is not displayed' + ); + }); + + it('correct actions appear when both files and folders are selected - [C280474]', async () => { + await dataTable.selectMultipleItems([ + fileForDelete1, + fileForDelete2, + folderForDelete1, + folderForDelete2 + ]); + expect(await toolbar.isButtonPresent('Permanently delete')).toBe( + true, + 'Permanently delete is displayed' + ); + expect(await toolbar.isButtonPresent('Restore')).toBe( + true, + 'Restore is not displayed' + ); + }); + }); }); diff --git a/e2e/suites/viewer/viewer-actions.test.ts b/e2e/suites/viewer/viewer-actions.test.ts new file mode 100755 index 000000000..2f0d9cbf9 --- /dev/null +++ b/e2e/suites/viewer/viewer-actions.test.ts @@ -0,0 +1,239 @@ +/*! + * @license + * Alfresco Example Content Application + * + * Copyright (C) 2005 - 2018 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 { LoginPage, BrowsingPage, LogoutPage } from '../../pages/pages'; +import { SIDEBAR_LABELS, FILES } from '../../configs'; +import { RepoClient } from '../../utilities/repo-client/repo-client'; +import { Utils } from '../../utilities/utils'; +import { Viewer } from '../../components/viewer/viewer'; +import { CopyMoveDialog } from './../../components/dialog/copy-move-dialog'; +import { ShareDialog } from './../../components/dialog/share-dialog'; +import { ManageVersionsDialog } from './../../components/dialog/manage-versions-dialog'; + +describe('Viewer actions', () => { + const username = `user-${Utils.random()}`; + + const parent = `parent-${Utils.random()}`; + let parentId; + const docxFile = FILES.docxFile; + let docxFileId; + const xlsxFileForMove = FILES.xlsxFile; + const pdfFileForDelete = FILES.pdfFile; + let pdfFileForDeleteId; + + const destination = `destination-${Utils.random()}`; + let destinationId; + + const apis = { + admin: new RepoClient(), + user: new RepoClient(username, username) + }; + + const loginPage = new LoginPage(); + const logoutPage = new LogoutPage(); + const page = new BrowsingPage(); + const dataTable = page.dataTable; + const viewer = new Viewer(); + const { toolbar } = viewer; + const copyMoveDialog = new CopyMoveDialog(); + const shareDialog = new ShareDialog(); + const manageVersionsDialog = new ManageVersionsDialog(); + + beforeAll(async done => { + await apis.admin.people.createUser({ username }); + + parentId = (await apis.user.nodes.createFolder(parent)).entry.id; + docxFileId = (await apis.user.upload.uploadFile(docxFile, parentId)).entry.id; + await apis.user.upload.uploadFile(xlsxFileForMove, parentId); + pdfFileForDeleteId = (await apis.user.upload.uploadFile(pdfFileForDelete, parentId)).entry.id; + + destinationId = (await apis.user.nodes.createFolder(destination)).entry.id; + + await loginPage.loginWith(username); + done(); + }); + + beforeEach(async done => { + await page.sidenav.navigateToLinkByLabel(SIDEBAR_LABELS.PERSONAL_FILES); + await dataTable.waitForHeader(); + await dataTable.doubleClickOnRowByName(parent); + await dataTable.waitForHeader(); + done(); + }); + + afterEach(async done => { + await Utils.pressEscape(); + done(); + }); + + afterAll(async done => { + await Promise.all([apis.user.nodes.deleteNodeById(parentId), apis.user.nodes.deleteNodeById(destinationId), logoutPage.load()]); + done(); + }); + + it('Correct actions appear in the viewer toolbar - [C282025]', async () => { + await dataTable.doubleClickOnRowByName(docxFile); + expect(await viewer.isViewerOpened()).toBe(true, 'Viewer is not opened'); + + expect(await toolbar.isEmpty()).toBe(false, `viewer toolbar is empty`); + expect(await toolbar.isButtonPresent('View')).toBe(false, `View is displayed`); + expect(await toolbar.isButtonPresent('Download')).toBe(true, `Download is not displayed`); + expect(await toolbar.isButtonPresent('Print')).toBe(true, `print`); + expect(await toolbar.isButtonPresent('Activate full-screen mode')).toBe(true, `full screen`); + expect(await toolbar.isButtonPresent('View details')).toBe(true, `view details`); + const menu = await toolbar.openMoreMenu(); + expect(await menu.isMenuItemPresent('Favorite')).toBe(true, `favorite`); + expect(await menu.isMenuItemPresent('Share')).toBe(true, `share`); + expect(await menu.isMenuItemPresent('Copy')).toBe(true, `copy`); + expect(await menu.isMenuItemPresent('Move')).toBe(true, `move`); + expect(await menu.isMenuItemPresent('Delete')).toBe(true, `delete`); + expect(await menu.isMenuItemPresent('Manage Versions')).toBe(true, `manage versions`); + expect(await menu.isMenuItemPresent('Permissions')).toBe(true, `permissions`); + await toolbar.closeMoreMenu(); + }); + + it('Download action - [C268129]', async () => { + await dataTable.doubleClickOnRowByName(docxFile); + expect(await viewer.isViewerOpened()).toBe(true, 'Viewer is not opened'); + + await toolbar.clickButton('Download'); + expect(await Utils.fileExistsOnOS(docxFile)).toBe(true, 'File not found in download location'); + }); + + it('Copy action - [C268130]', async () => { + await dataTable.doubleClickOnRowByName(docxFile); + expect(await viewer.isViewerOpened()).toBe(true, 'Viewer is not opened'); + + const menu = await toolbar.openMoreMenu(); + await menu.clickMenuItem('Copy'); + expect(await copyMoveDialog.isDialogOpen()).toBe(true, 'Dialog is not open'); + await copyMoveDialog.selectLocation('Personal Files'); + await copyMoveDialog.chooseDestination(destination); + await copyMoveDialog.clickCopy(); + expect(await page.getSnackBarMessage()).toContain('Copied 1 item'); + await viewer.clickClose(); + expect(await dataTable.getRowByName(docxFile).isPresent()).toBe(true, 'Item is not in the list'); + await page.sidenav.navigateToLinkByLabel(SIDEBAR_LABELS.PERSONAL_FILES); + await dataTable.waitForHeader(); + await dataTable.doubleClickOnRowByName(destination); + expect(await dataTable.getRowByName(docxFile).isPresent()).toBe(true, 'Item is not present in destination'); + }); + + it('Move action - [C268131]', async () => { + await dataTable.doubleClickOnRowByName(xlsxFileForMove); + expect(await viewer.isViewerOpened()).toBe(true, 'Viewer is not opened'); + + const menu = await toolbar.openMoreMenu(); + await menu.clickMenuItem('Move'); + expect(await copyMoveDialog.isDialogOpen()).toBe(true, 'Dialog is not open'); + await copyMoveDialog.selectLocation('Personal Files'); + await copyMoveDialog.chooseDestination(destination); + await copyMoveDialog.clickMove(); + expect(await page.getSnackBarMessage()).toContain('Moved 1 item'); + await viewer.clickClose(); + expect(await dataTable.getRowByName(xlsxFileForMove).isPresent()).toBe(false, 'Item was not moved'); + await page.sidenav.navigateToLinkByLabel(SIDEBAR_LABELS.PERSONAL_FILES); + await dataTable.waitForHeader(); + await dataTable.doubleClickOnRowByName(destination); + expect(await dataTable.getRowByName(xlsxFileForMove).isPresent()).toBe(true, 'Item is not present in destination'); + }); + + it('Favorite action - [C268132]', async () => { + await dataTable.doubleClickOnRowByName(docxFile); + expect(await viewer.isViewerOpened()).toBe(true, 'Viewer is not opened'); + + const menu = await toolbar.openMoreMenu(); + await menu.clickMenuItem('Favorite'); + expect(await apis.user.favorites.isFavorite(docxFileId)).toBe(true, 'Item is not favorite'); + await viewer.clickClose(); + await page.sidenav.navigateToLinkByLabel(SIDEBAR_LABELS.FAVORITES); + await dataTable.waitForHeader(); + expect(await dataTable.getRowByName(docxFile).isPresent()).toBe(true, 'Item is not present in Favorites list'); + + await apis.user.favorites.removeFavoriteById(docxFileId); + }); + + it('Delete action - [C268133]', async () => { + await dataTable.doubleClickOnRowByName(pdfFileForDelete); + expect(await viewer.isViewerOpened()).toBe(true, 'Viewer is not opened'); + + const menu = await toolbar.openMoreMenu(); + await menu.clickMenuItem('Delete'); + expect(await page.getSnackBarMessage()).toContain(`${pdfFileForDelete} deleted`); + // TODO: enable this when ACA-1806 is fixed + // expect(await viewer.isViewerOpened()).toBe(false, 'Viewer is opened'); + await Utils.pressEscape(); + await page.sidenav.navigateToLinkByLabel(SIDEBAR_LABELS.TRASH); + await dataTable.waitForHeader(); + expect(await dataTable.getRowByName(pdfFileForDelete).isPresent()).toBe(true, 'Item is not present in Trash'); + + await apis.user.trashcan.restore(pdfFileForDeleteId); + }); + + it('Full screen action - [C279282]', async () => { + await dataTable.doubleClickOnRowByName(docxFile); + expect(await viewer.isViewerOpened()).toBe(true, 'Viewer is not opened'); + await Utils.getBrowserLog(); + + await toolbar.clickButton('Activate full-screen mode'); + expect(await viewer.isViewerOpened()).toBe(true, 'Viewer is closed after pressing Full screen'); + const browserLogAfter = await Utils.getBrowserLog(); + + expect(browserLogAfter.length).toEqual(0); + }); + + it('Share action - [C286313]', async () => { + await dataTable.doubleClickOnRowByName(docxFile); + expect(await viewer.isViewerOpened()).toBe(true, 'Viewer is not opened'); + + const menu = await toolbar.openMoreMenu(); + await menu.clickMenuItem('Share'); + expect(await shareDialog.isDialogOpen()).toBe(true, 'Dialog is not open'); + await shareDialog.clickClose(); + }); + + it('Manage Versions action - [C286316]', async () => { + await dataTable.doubleClickOnRowByName(docxFile); + expect(await viewer.isViewerOpened()).toBe(true, 'Viewer is not opened'); + + const menu = await toolbar.openMoreMenu(); + await menu.clickMenuItem('Manage Versions'); + expect(await manageVersionsDialog.isDialogOpen()).toBe(true, 'Dialog is not open'); + await manageVersionsDialog.clickClose(); + }); + + // TODO: enable this once bug is fixed + xit('Pressing ESC in the viewer closes only the action dialog - [C286314]', async () => { + await dataTable.doubleClickOnRowByName(docxFile); + expect(await viewer.isViewerOpened()).toBe(true, 'Viewer is not opened'); + + const menu = await toolbar.openMoreMenu(); + await menu.clickMenuItem('Share'); + expect(await shareDialog.isDialogOpen()).toBe(true, 'Dialog is not open'); + await Utils.pressEscape(); + expect(await shareDialog.isDialogOpen()).toBe(false, 'Dialog is still open'); + expect(await viewer.isViewerOpened()).toBe(true, 'Viewer is not opened'); + }); +}); diff --git a/e2e/utilities/utils.ts b/e2e/utilities/utils.ts index ac44a4cd5..78858d346 100755 --- a/e2e/utilities/utils.ts +++ b/e2e/utilities/utils.ts @@ -23,64 +23,102 @@ * along with Alfresco. If not, see . */ -import { browser, promise, ElementFinder, ExpectedConditions as EC } from 'protractor'; +import { browser, protractor, promise, ElementFinder, ExpectedConditions as EC } from 'protractor'; import { BROWSER_WAIT_TIMEOUT, E2E_ROOT_PATH, EXTENSIBILITY_CONFIGS } from '../configs'; - +const path = require('path'); const fs = require('fs'); export class Utils { - // generate a random value - static random(): string { - return Math.random().toString(36).substring(3, 10).toLowerCase(); + // generate a random value + static random(): string { + return Math.random() + .toString(36) + .substring(3, 10) + .toLowerCase(); + } + + // local storage + static clearLocalStorage(): promise.Promise { + return browser.executeScript('window.localStorage.clear();'); + } + + // session storage + static clearSessionStorage(): promise.Promise { + return browser.executeScript('window.sessionStorage.clear();'); + } + + static getSessionStorage() { + return browser.executeScript('return window.sessionStorage.getItem("aca.extension.config");'); + } + + static async setSessionStorageFromConfig(key: string, configFileName: string) { + const configFile = `${E2E_ROOT_PATH}/resources/extensibility-configs/${configFileName}`; + const fileContent = JSON.stringify(fs.readFileSync(configFile, { encoding: 'utf8' })); + + return await browser.executeScript(`window.sessionStorage.setItem(${key}, ${fileContent});`); + } + + static async resetExtensionConfig() { + const defConfig = `${E2E_ROOT_PATH}/resources/extensibility-configs/${EXTENSIBILITY_CONFIGS.DEFAULT_EXTENSIONS_CONFIG}`; + + return await this.setSessionStorageFromConfig('"aca.extension.config"', defConfig); + } + + static retryCall(fn: () => Promise, retry: number = 30, delay: number = 1000): Promise { + const pause = duration => new Promise(res => setTimeout(res, duration)); + + const run = retries => fn().catch(err => (retries > 1 ? pause(delay).then(() => run(retries - 1)) : Promise.reject(err))); + + return run(retry); + } + + static waitUntilElementClickable(element: ElementFinder) { + return browser.wait(EC.elementToBeClickable(element), BROWSER_WAIT_TIMEOUT); + } + + static typeInField(elem: ElementFinder, value: string) { + for (let i = 0; i < value.length; i++) { + const c = value.charAt(i); + elem.sendKeys(c); + browser.sleep(100); } + } - // local storage - static clearLocalStorage(): promise.Promise { - return browser.executeScript('window.localStorage.clear();'); - } + static async fileExistsOnOS(fileName: string) { + const filePath = path.join((await browser.getProcessedConfig()).params.downloadFolder, fileName); - // session storage - static clearSessionStorage(): promise.Promise { - return browser.executeScript('window.sessionStorage.clear();'); - } + let tries = 5; - static getSessionStorage() { - return browser.executeScript('return window.sessionStorage.getItem("aca.extension.config");'); - } + return new Promise(function(resolve) { + const checkExist = setInterval(() => { + fs.stat(filePath, function(error) { + tries--; - static async setSessionStorageFromConfig(key: string, configFileName: string) { - const configFile = `${E2E_ROOT_PATH}/resources/extensibility-configs/${configFileName}`; - const fileContent = JSON.stringify(fs.readFileSync(configFile, { encoding: 'utf8' })); + if (error && tries === 0) { + clearInterval(checkExist); + resolve(false); + } - return await browser.executeScript(`window.sessionStorage.setItem(${key}, ${fileContent});`); - } + if (!error) { + clearInterval(checkExist); + resolve(true); + } + }); + }, 500); + }); + } - static async resetExtensionConfig() { - const defConfig = `${E2E_ROOT_PATH}/resources/extensibility-configs/${EXTENSIBILITY_CONFIGS.DEFAULT_EXTENSIONS_CONFIG}`; + static async pressEscape() { + return await browser + .actions() + .sendKeys(protractor.Key.ESCAPE) + .perform(); + } - return await this.setSessionStorageFromConfig('"aca.extension.config"', defConfig); - } - - static retryCall(fn: () => Promise , retry: number = 30, delay: number = 1000): Promise { - const pause = (duration) => new Promise(res => setTimeout(res, duration)); - - const run = (retries) => - fn().catch(err => retries > 1 - ? pause(delay).then(() => run(retries - 1)) - : Promise.reject(err)); - - return run(retry); - } - - static waitUntilElementClickable(element: ElementFinder) { - return browser.wait(EC.elementToBeClickable(element), BROWSER_WAIT_TIMEOUT); - } - - static typeInField(elem: ElementFinder, value: string) { - for ( let i = 0; i < value.length; i++ ) { - const c = value.charAt(i); - elem.sendKeys(c); - browser.sleep(100); - } - } + static async getBrowserLog() { + return await browser + .manage() + .logs() + .get('browser'); + } } diff --git a/package-lock.json b/package-lock.json index d26efe17e..dcf7705fe 100644 --- a/package-lock.json +++ b/package-lock.json @@ -3194,8 +3194,7 @@ "async-limiter": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz", - "integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg==", - "dev": true + "integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg==" }, "asynckit": { "version": "0.4.0", @@ -3990,6 +3989,22 @@ "integrity": "sha1-4qdQQqlVGQi+vSW4Uj1fl2nXkYE=", "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==", + "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==" + } + } + }, "chrome-trace-event": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.0.tgz", @@ -6147,24 +6162,28 @@ "dependencies": { "abbrev": { "version": "1.1.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", "dev": true, "optional": true }, "ansi-regex": { "version": "2.1.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", "dev": true }, "aproba": { "version": "1.2.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", "dev": true, "optional": true }, "are-we-there-yet": { "version": "1.1.4", - "bundled": true, + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.4.tgz", + "integrity": "sha1-u13KOCu5TwXhUZQ3PRb9O6HKEQ0=", "dev": true, "optional": true, "requires": { @@ -6174,12 +6193,14 @@ }, "balanced-match": { "version": "1.0.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", "dev": true }, "brace-expansion": { "version": "1.1.11", - "bundled": true, + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, "requires": { "balanced-match": "^1.0.0", @@ -6188,34 +6209,40 @@ }, "chownr": { "version": "1.0.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.0.1.tgz", + "integrity": "sha1-4qdQQqlVGQi+vSW4Uj1fl2nXkYE=", "dev": true, "optional": true }, "code-point-at": { "version": "1.1.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", "dev": true }, "concat-map": { "version": "0.0.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", "dev": true }, "console-control-strings": { "version": "1.1.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", "dev": true }, "core-util-is": { "version": "1.0.2", - "bundled": true, + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", "dev": true, "optional": true }, "debug": { "version": "2.6.9", - "bundled": true, + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, "optional": true, "requires": { @@ -6224,25 +6251,29 @@ }, "deep-extend": { "version": "0.5.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.5.1.tgz", + "integrity": "sha512-N8vBdOa+DF7zkRrDCsaOXoCs/E2fJfx9B9MrKnnSiHNh4ws7eSys6YQE4KvT1cecKmOASYQBhbKjeuDD9lT81w==", "dev": true, "optional": true }, "delegates": { "version": "1.0.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", "dev": true, "optional": true }, "detect-libc": { "version": "1.0.3", - "bundled": true, + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", + "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=", "dev": true, "optional": true }, "fs-minipass": { "version": "1.2.5", - "bundled": true, + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.5.tgz", + "integrity": "sha512-JhBl0skXjUPCFH7x6x61gQxrKyXsxB5gcgePLZCwfyCGGsTISMoIeObbrvVeP6Xmyaudw4TT43qV2Gz+iyd2oQ==", "dev": true, "optional": true, "requires": { @@ -6251,13 +6282,15 @@ }, "fs.realpath": { "version": "1.0.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", "dev": true, "optional": true }, "gauge": { "version": "2.7.4", - "bundled": true, + "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", + "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", "dev": true, "optional": true, "requires": { @@ -6273,7 +6306,8 @@ }, "glob": { "version": "7.1.2", - "bundled": true, + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", "dev": true, "optional": true, "requires": { @@ -6287,13 +6321,15 @@ }, "has-unicode": { "version": "2.0.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", "dev": true, "optional": true }, "iconv-lite": { "version": "0.4.21", - "bundled": true, + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.21.tgz", + "integrity": "sha512-En5V9za5mBt2oUA03WGD3TwDv0MKAruqsuxstbMUZaj9W9k/m1CV/9py3l0L5kw9Bln8fdHQmzHSYtvpvTLpKw==", "dev": true, "optional": true, "requires": { @@ -6302,7 +6338,8 @@ }, "ignore-walk": { "version": "3.0.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.1.tgz", + "integrity": "sha512-DTVlMx3IYPe0/JJcYP7Gxg7ttZZu3IInhuEhbchuqneY9wWe5Ojy2mXLBaQFUQmo0AW2r3qG7m1mg86js+gnlQ==", "dev": true, "optional": true, "requires": { @@ -6311,7 +6348,8 @@ }, "inflight": { "version": "1.0.6", - "bundled": true, + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", "dev": true, "optional": true, "requires": { @@ -6321,18 +6359,21 @@ }, "inherits": { "version": "2.0.3", - "bundled": true, + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", "dev": true }, "ini": { "version": "1.3.5", - "bundled": true, + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", + "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", "dev": true, "optional": true }, "is-fullwidth-code-point": { "version": "1.0.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", "dev": true, "requires": { "number-is-nan": "^1.0.0" @@ -6340,13 +6381,15 @@ }, "isarray": { "version": "1.0.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", "dev": true, "optional": true }, "minimatch": { "version": "3.0.4", - "bundled": true, + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "dev": true, "requires": { "brace-expansion": "^1.1.7" @@ -6354,12 +6397,14 @@ }, "minimist": { "version": "0.0.8", - "bundled": true, + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", "dev": true }, "minipass": { "version": "2.2.4", - "bundled": true, + "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.2.4.tgz", + "integrity": "sha512-hzXIWWet/BzWhYs2b+u7dRHlruXhwdgvlTMDKC6Cb1U7ps6Ac6yQlR39xsbjWJE377YTCtKwIXIpJ5oP+j5y8g==", "dev": true, "requires": { "safe-buffer": "^5.1.1", @@ -6368,7 +6413,8 @@ }, "minizlib": { "version": "1.1.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.1.0.tgz", + "integrity": "sha512-4T6Ur/GctZ27nHfpt9THOdRZNgyJ9FZchYO1ceg5S8Q3DNLCKYy44nCZzgCJgcvx2UM8czmqak5BCxJMrq37lA==", "dev": true, "optional": true, "requires": { @@ -6377,7 +6423,8 @@ }, "mkdirp": { "version": "0.5.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", "dev": true, "requires": { "minimist": "0.0.8" @@ -6385,13 +6432,15 @@ }, "ms": { "version": "2.0.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true, "optional": true }, "needle": { "version": "2.2.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/needle/-/needle-2.2.0.tgz", + "integrity": "sha512-eFagy6c+TYayorXw/qtAdSvaUpEbBsDwDyxYFgLZ0lTojfH7K+OdBqAF7TAFwDokJaGpubpSGG0wO3iC0XPi8w==", "dev": true, "optional": true, "requires": { @@ -6402,7 +6451,8 @@ }, "node-pre-gyp": { "version": "0.10.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.10.0.tgz", + "integrity": "sha512-G7kEonQLRbcA/mOoFoxvlMrw6Q6dPf92+t/l0DFSMuSlDoWaI9JWIyPwK0jyE1bph//CUEL65/Fz1m2vJbmjQQ==", "dev": true, "optional": true, "requires": { @@ -6420,7 +6470,8 @@ }, "nopt": { "version": "4.0.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.1.tgz", + "integrity": "sha1-0NRoWv1UFRk8jHUFYC0NF81kR00=", "dev": true, "optional": true, "requires": { @@ -6430,13 +6481,15 @@ }, "npm-bundled": { "version": "1.0.3", - "bundled": true, + "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.0.3.tgz", + "integrity": "sha512-ByQ3oJ/5ETLyglU2+8dBObvhfWXX8dtPZDMePCahptliFX2iIuhyEszyFk401PZUNQH20vvdW5MLjJxkwU80Ow==", "dev": true, "optional": true }, "npm-packlist": { "version": "1.1.10", - "bundled": true, + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.1.10.tgz", + "integrity": "sha512-AQC0Dyhzn4EiYEfIUjCdMl0JJ61I2ER9ukf/sLxJUcZHfo+VyEfz2rMJgLZSS1v30OxPQe1cN0LZA1xbcaVfWA==", "dev": true, "optional": true, "requires": { @@ -6446,7 +6499,8 @@ }, "npmlog": { "version": "4.1.2", - "bundled": true, + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", + "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", "dev": true, "optional": true, "requires": { @@ -6458,18 +6512,21 @@ }, "number-is-nan": { "version": "1.0.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", "dev": true }, "object-assign": { "version": "4.1.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", "dev": true, "optional": true }, "once": { "version": "1.4.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", "dev": true, "requires": { "wrappy": "1" @@ -6477,19 +6534,22 @@ }, "os-homedir": { "version": "1.0.2", - "bundled": true, + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", "dev": true, "optional": true }, "os-tmpdir": { "version": "1.0.2", - "bundled": true, + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", "dev": true, "optional": true }, "osenv": { "version": "0.1.5", - "bundled": true, + "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", + "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", "dev": true, "optional": true, "requires": { @@ -6499,19 +6559,22 @@ }, "path-is-absolute": { "version": "1.0.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", "dev": true, "optional": true }, "process-nextick-args": { "version": "2.0.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", + "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", "dev": true, "optional": true }, "rc": { "version": "1.2.7", - "bundled": true, + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.7.tgz", + "integrity": "sha512-LdLD8xD4zzLsAT5xyushXDNscEjB7+2ulnl8+r1pnESlYtlJtVSoCMBGr30eDRJ3+2Gq89jK9P9e4tCEH1+ywA==", "dev": true, "optional": true, "requires": { @@ -6523,7 +6586,8 @@ "dependencies": { "minimist": { "version": "1.2.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", "dev": true, "optional": true } @@ -6531,7 +6595,8 @@ }, "readable-stream": { "version": "2.3.6", - "bundled": true, + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", "dev": true, "optional": true, "requires": { @@ -6546,7 +6611,8 @@ }, "rimraf": { "version": "2.6.2", - "bundled": true, + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", + "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", "dev": true, "optional": true, "requires": { @@ -6555,42 +6621,49 @@ }, "safe-buffer": { "version": "5.1.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", + "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==", "dev": true }, "safer-buffer": { "version": "2.1.2", - "bundled": true, + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", "dev": true, "optional": true }, "sax": { "version": "1.2.4", - "bundled": true, + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", "dev": true, "optional": true }, "semver": { "version": "5.5.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", + "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==", "dev": true, "optional": true }, "set-blocking": { "version": "2.0.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", "dev": true, "optional": true }, "signal-exit": { "version": "3.0.2", - "bundled": true, + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", "dev": true, "optional": true }, "string-width": { "version": "1.0.2", - "bundled": true, + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", "dev": true, "requires": { "code-point-at": "^1.0.0", @@ -6600,7 +6673,8 @@ }, "string_decoder": { "version": "1.1.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, "optional": true, "requires": { @@ -6609,7 +6683,8 @@ }, "strip-ansi": { "version": "3.0.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dev": true, "requires": { "ansi-regex": "^2.0.0" @@ -6617,13 +6692,15 @@ }, "strip-json-comments": { "version": "2.0.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", "dev": true, "optional": true }, "tar": { "version": "4.4.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.1.tgz", + "integrity": "sha512-O+v1r9yN4tOsvl90p5HAP4AEqbYhx4036AGMm075fH9F8Qwi3oJ+v4u50FkT/KkvywNGtwkk0zRI+8eYm1X/xg==", "dev": true, "optional": true, "requires": { @@ -6638,13 +6715,15 @@ }, "util-deprecate": { "version": "1.0.2", - "bundled": true, + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", "dev": true, "optional": true }, "wide-align": { "version": "1.1.2", - "bundled": true, + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.2.tgz", + "integrity": "sha512-ijDLlyQ7s6x1JgCLur53osjm/UXUYD9+0PbYKrBsYisYXzCxN+HC3mYDNy/dWdmf3AwqwU3CXwDCvsNgGK1S0w==", "dev": true, "optional": true, "requires": { @@ -6653,12 +6732,14 @@ }, "wrappy": { "version": "1.0.2", - "bundled": true, + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", "dev": true }, "yallist": { "version": "3.0.2", - "bundled": true, + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.2.tgz", + "integrity": "sha1-hFK0u36Dx8GI2AQcGoN8dz1ti7k=", "dev": true } } @@ -13992,8 +14073,7 @@ "ultron": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz", - "integrity": "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==", - "dev": true + "integrity": "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==" }, "union-value": { "version": "1.0.0", @@ -16005,7 +16085,6 @@ "version": "3.3.3", "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz", "integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==", - "dev": true, "requires": { "async-limiter": "~1.0.0", "safe-buffer": "~5.1.0", diff --git a/package.json b/package.json index 09691e3c6..80e6092eb 100644 --- a/package.json +++ b/package.json @@ -51,6 +51,7 @@ "@ngrx/store-devtools": "^6.1.0", "@ngstack/code-editor": "^0.4.3", "@ngx-translate/core": "^10.0.2", + "chrome-remote-interface": "^0.26.1", "alfresco-js-api": "2.6.0-e0035744611f12f4f0067495615fa37ce392c810", "core-js": "^2.5.7", "hammerjs": "2.0.8", diff --git a/protractor.conf.js b/protractor.conf.js index fdd13b802..aff2ed518 100755 --- a/protractor.conf.js +++ b/protractor.conf.js @@ -2,77 +2,124 @@ // https://github.com/angular/protractor/blob/master/lib/config.ts const path = require('path'); -const { SpecReporter } = require('jasmine-spec-reporter'); +const { + SpecReporter +} = require('jasmine-spec-reporter'); const jasmineReporters = require('jasmine-reporters'); +const CDP = require('chrome-remote-interface'); const projectRoot = path.resolve(__dirname); +const downloadFolder = `${projectRoot}/e2e-downloads`; const width = 1366; const height = 768; -exports.config = { - allScriptsTimeout: 40000, +var fs = require('fs'); - specs: [ - './e2e/suites/authentication/*.test.ts', - './e2e/suites/list-views/*.test.ts', - './e2e/suites/application/*.test.ts', - './e2e/suites/navigation/*.test.ts', - './e2e/suites/pagination/*.test.ts', - './e2e/suites/actions/*.test.ts', - './e2e/suites/viewer/*.test.ts', - - './e2e/suites/extensions/*.test.ts' - ], - - capabilities: { - browserName: 'chrome', - chromeOptions: { - prefs: { - 'credentials_enable_service': false - }, - args: [ '--incognito', '--headless' ] - } - }, - - directConnect: true, - - baseUrl: 'http://localhost:4000', - - framework: 'jasmine2', - jasmineNodeOpts: { - showColors: true, - defaultTimeoutInterval: 60000, - print: function() {} - }, - - plugins: [{ - package: 'jasmine2-protractor-utils', - disableHTMLReport: false, - disableScreenshot: false, - screenshotOnExpectFailure: true, - screenshotOnSpecFailure: false, - clearFoldersBeforeTest: true, - htmlReportDir: `${projectRoot}/e2e-output/html-report/`, - screenshotPath: `${projectRoot}/e2e-output/screenshots/` - }], - - onPrepare() { - require('ts-node').register({ - project: 'e2e/tsconfig.e2e.json' - }); - - browser.manage().window().setSize(width, height); - - jasmine.getEnv().addReporter(new SpecReporter({ spec: { displayStacktrace: true } })); - - jasmine.getEnv().addReporter(new jasmineReporters.JUnitXmlReporter({ - consolidateAll: true, - savePath: `${projectRoot}/e2e-output/junit-report`, - filePrefix: 'results.xml', - useDotNotation: false, - useFullTestName: false, - reportFailedUrl: true - })); +function rmDir(dirPath) { + try { + var files = fs.readdirSync(dirPath); + } catch (e) { + return; + } + if (files.length > 0) + for (var i = 0; i < files.length; i++) { + var filePath = dirPath + '/' + files[i]; + if (fs.statSync(filePath).isFile()) + fs.unlinkSync(filePath); + else + rmDir(filePath); } + fs.rmdirSync(dirPath); }; + +exports.config = { + allScriptsTimeout: 40000, + + params: { + downloadFolder: downloadFolder + }, + + specs: [ + './e2e/suites/authentication/*.test.ts', + './e2e/suites/list-views/*.test.ts', + './e2e/suites/application/*.test.ts', + './e2e/suites/navigation/*.test.ts', + './e2e/suites/pagination/*.test.ts', + './e2e/suites/actions/*.test.ts', + './e2e/suites/viewer/*.test.ts', + + './e2e/suites/extensions/*.test.ts' + ], + + capabilities: { + browserName: 'chrome', + chromeOptions: { + prefs: { + 'credentials_enable_service': false, + 'download': { + 'prompt_for_download': false, + 'default_directory': downloadFolder + } + }, + args: ['--incognito', '--headless', '--remote-debugging-port=9222'] + } + }, + + directConnect: true, + + baseUrl: 'http://localhost:4000', + + framework: 'jasmine2', + jasmineNodeOpts: { + showColors: true, + defaultTimeoutInterval: 60000, + print: function () {} + }, + + plugins: [{ + package: 'jasmine2-protractor-utils', + disableHTMLReport: false, + disableScreenshot: false, + screenshotOnExpectFailure: true, + screenshotOnSpecFailure: false, + clearFoldersBeforeTest: true, + htmlReportDir: `${projectRoot}/e2e-output/html-report/`, + screenshotPath: `${projectRoot}/e2e-output/screenshots/` + }], + + onPrepare() { + require('ts-node').register({ + project: 'e2e/tsconfig.e2e.json' + }); + + browser.manage().window().setSize(width, height); + + jasmine.getEnv().addReporter(new SpecReporter({ + spec: { + displayStacktrace: true + } + })); + + jasmine.getEnv().addReporter(new jasmineReporters.JUnitXmlReporter({ + consolidateAll: true, + savePath: `${projectRoot}/e2e-output/junit-report`, + filePrefix: 'results.xml', + useDotNotation: false, + useFullTestName: false, + reportFailedUrl: true + })); + + rmDir(downloadFolder); + + CDP().then(client => { + client.send('Page.setDownloadBehavior', { + behavior: 'allow', + downloadPath: downloadFolder + }) + }) + .catch(err => { + console.log(err) + }); + } +}