mirror of
https://github.com/Alfresco/alfresco-content-app.git
synced 2025-05-12 17:04:46 +00:00
[ACA-1767] add tests for Viewer actions (#641)
* add tests for Viewer actions * exclude e2e from auto-formatting for now * update lock file
This commit is contained in:
parent
f9e9057974
commit
a9467dcc47
@ -1,2 +1,3 @@
|
|||||||
node_modules
|
node_modules
|
||||||
src/assets/i18n
|
src/assets/i18n
|
||||||
|
e2e
|
||||||
|
@ -1,3 +1,3 @@
|
|||||||
{
|
{
|
||||||
"singleQuote": true
|
"singleQuote": true
|
||||||
}
|
}
|
||||||
|
@ -30,11 +30,11 @@ export abstract class Component {
|
|||||||
component: ElementFinder;
|
component: ElementFinder;
|
||||||
|
|
||||||
constructor(selector: string, ancestor?: ElementFinder) {
|
constructor(selector: string, ancestor?: ElementFinder) {
|
||||||
const locator = by.css(selector);
|
const locator = selector;
|
||||||
|
|
||||||
this.component = ancestor
|
this.component = ancestor
|
||||||
? ancestor.element(locator)
|
? ancestor.$$(locator).first()
|
||||||
: element(locator);
|
: browser.$$(locator).first();
|
||||||
}
|
}
|
||||||
|
|
||||||
wait() {
|
wait() {
|
||||||
|
@ -30,264 +30,298 @@ import { Menu } from '../menu/menu';
|
|||||||
import { Utils } from '../../utilities/utils';
|
import { Utils } from '../../utilities/utils';
|
||||||
|
|
||||||
export class DataTable extends Component {
|
export class DataTable extends Component {
|
||||||
private static selectors = {
|
private static selectors = {
|
||||||
root: 'adf-datatable',
|
root: 'adf-datatable',
|
||||||
|
|
||||||
head: '.adf-datatable-header',
|
head: '.adf-datatable-header',
|
||||||
columnHeader: '.adf-datatable-row .adf-datatable-table-cell-header',
|
columnHeader: '.adf-datatable-row .adf-datatable-table-cell-header',
|
||||||
sortedColumnHeader: `
|
sortedColumnHeader: `
|
||||||
.adf-data-table__header--sorted-asc,
|
.adf-data-table__header--sorted-asc,
|
||||||
.adf-data-table__header--sorted-desc
|
.adf-data-table__header--sorted-desc
|
||||||
`,
|
`,
|
||||||
|
|
||||||
body: '.adf-datatable-body',
|
body: '.adf-datatable-body',
|
||||||
row: '.adf-datatable-row[role]',
|
row: '.adf-datatable-row[role]',
|
||||||
selectedRow: '.adf-datatable-row.is-selected',
|
selectedRow: '.adf-datatable-row.is-selected',
|
||||||
cell: '.adf-data-table-cell',
|
cell: '.adf-data-table-cell',
|
||||||
locationLink: '.aca-location-link',
|
locationLink: '.aca-location-link',
|
||||||
nameLink: '.dl-link',
|
nameLink: '.dl-link',
|
||||||
|
|
||||||
selectedIcon: '.mat-icon',
|
selectedIcon: '.mat-icon',
|
||||||
|
|
||||||
emptyListContainer: 'div.adf-no-content-container',
|
emptyListContainer: 'div.adf-no-content-container',
|
||||||
emptyFolderDragAndDrop: '.adf-empty-list_template .adf-empty-folder',
|
emptyFolderDragAndDrop: '.adf-empty-list_template .adf-empty-folder',
|
||||||
|
|
||||||
emptyListTitle: '.adf-empty-content__title',
|
emptyListTitle: '.adf-empty-content__title',
|
||||||
emptyListSubtitle: '.adf-empty-content__subtitle',
|
emptyListSubtitle: '.adf-empty-content__subtitle',
|
||||||
emptyListText: '.adf-empty-content__text'
|
emptyListText: '.adf-empty-content__text'
|
||||||
};
|
};
|
||||||
|
|
||||||
head: ElementFinder = this.component.element(by.css(DataTable.selectors.head));
|
head: ElementFinder = this.component.element(by.css(DataTable.selectors.head));
|
||||||
body: ElementFinder = this.component.element(by.css(DataTable.selectors.body));
|
body: ElementFinder = this.component.element(by.css(DataTable.selectors.body));
|
||||||
cell = by.css(DataTable.selectors.cell);
|
cell = by.css(DataTable.selectors.cell);
|
||||||
locationLink = by.css(DataTable.selectors.locationLink);
|
locationLink = by.css(DataTable.selectors.locationLink);
|
||||||
nameLink: ElementFinder = browser.element(by.css(DataTable.selectors.nameLink));
|
nameLink: ElementFinder = browser.element(by.css(DataTable.selectors.nameLink));
|
||||||
emptyList: ElementFinder = this.component.element(by.css(DataTable.selectors.emptyListContainer));
|
emptyList: ElementFinder = this.component.element(by.css(DataTable.selectors.emptyListContainer));
|
||||||
emptyFolderDragAndDrop: ElementFinder = this.component.element(by.css(DataTable.selectors.emptyFolderDragAndDrop));
|
emptyFolderDragAndDrop: ElementFinder = this.component.element(by.css(DataTable.selectors.emptyFolderDragAndDrop));
|
||||||
emptyListTitle: ElementFinder = this.component.element(by.css(DataTable.selectors.emptyListTitle));
|
emptyListTitle: ElementFinder = this.component.element(by.css(DataTable.selectors.emptyListTitle));
|
||||||
emptyListSubtitle: ElementFinder = this.component.element(by.css(DataTable.selectors.emptyListSubtitle));
|
emptyListSubtitle: ElementFinder = this.component.element(by.css(DataTable.selectors.emptyListSubtitle));
|
||||||
emptyListText: ElementArrayFinder = this.component.all(by.css(DataTable.selectors.emptyListText));
|
emptyListText: ElementArrayFinder = this.component.all(by.css(DataTable.selectors.emptyListText));
|
||||||
|
|
||||||
menu: Menu = new Menu();
|
menu: Menu = new Menu();
|
||||||
|
|
||||||
constructor(ancestor?: ElementFinder) {
|
constructor(ancestor?: ElementFinder) {
|
||||||
super(DataTable.selectors.root, ancestor);
|
super(DataTable.selectors.root, ancestor);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Wait methods (waits for elements)
|
// Wait methods (waits for elements)
|
||||||
waitForHeader() {
|
waitForHeader() {
|
||||||
return browser.wait(EC.presenceOf(this.head), BROWSER_WAIT_TIMEOUT);
|
return browser.wait(EC.presenceOf(this.head), BROWSER_WAIT_TIMEOUT);
|
||||||
}
|
}
|
||||||
|
|
||||||
waitForEmptyState() {
|
waitForEmptyState() {
|
||||||
return browser.wait(EC.presenceOf(this.emptyList), BROWSER_WAIT_TIMEOUT);
|
return browser.wait(EC.presenceOf(this.emptyList), BROWSER_WAIT_TIMEOUT);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Header/Column methods
|
// Header/Column methods
|
||||||
getColumnHeaders(): ElementArrayFinder {
|
getColumnHeaders(): ElementArrayFinder {
|
||||||
const locator = by.css(DataTable.selectors.columnHeader);
|
const locator = by.css(DataTable.selectors.columnHeader);
|
||||||
return this.head.all(locator);
|
return this.head.all(locator);
|
||||||
}
|
}
|
||||||
|
|
||||||
getNthColumnHeader(nth: number): ElementFinder {
|
getNthColumnHeader(nth: number): ElementFinder {
|
||||||
return this.getColumnHeaders().get(nth - 1);
|
return this.getColumnHeaders().get(nth - 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
getColumnHeaderByLabel(label: string): ElementFinder {
|
getColumnHeaderByLabel(label: string): ElementFinder {
|
||||||
const locator = by.cssContainingText(DataTable.selectors.columnHeader, label);
|
const locator = by.cssContainingText(DataTable.selectors.columnHeader, label);
|
||||||
return this.head.element(locator);
|
return this.head.element(locator);
|
||||||
}
|
}
|
||||||
|
|
||||||
getSortedColumnHeader(): ElementFinder {
|
getSortedColumnHeader(): ElementFinder {
|
||||||
const locator = by.css(DataTable.selectors.sortedColumnHeader);
|
const locator = by.css(DataTable.selectors.sortedColumnHeader);
|
||||||
return this.head.element(locator);
|
return this.head.element(locator);
|
||||||
}
|
}
|
||||||
|
|
||||||
getSortingOrder() {
|
getSortingOrder() {
|
||||||
return this.getSortedColumnHeader().getAttribute('class')
|
return this.getSortedColumnHeader()
|
||||||
.then(str => {
|
.getAttribute('class')
|
||||||
if (str.includes('asc')) {
|
.then(str => {
|
||||||
return 'asc';
|
if (str.includes('asc')) {
|
||||||
} else {
|
return 'asc';
|
||||||
if (str.includes('desc')) {
|
} else {
|
||||||
return 'desc';
|
if (str.includes('desc')) {
|
||||||
}
|
return 'desc';
|
||||||
}
|
}
|
||||||
});
|
}
|
||||||
}
|
});
|
||||||
|
}
|
||||||
|
|
||||||
sortByColumn(columnName: string): promise.Promise<void> {
|
sortByColumn(columnName: string): promise.Promise<void> {
|
||||||
const column = this.getColumnHeaderByLabel(columnName);
|
const column = this.getColumnHeaderByLabel(columnName);
|
||||||
const click = browser.actions().mouseMove(column).click();
|
const click = browser
|
||||||
|
.actions()
|
||||||
|
.mouseMove(column)
|
||||||
|
.click();
|
||||||
|
|
||||||
return click.perform();
|
return click.perform();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Rows methods
|
// Rows methods
|
||||||
getRows(): ElementArrayFinder {
|
getRows(): ElementArrayFinder {
|
||||||
return this.body.all(by.css(DataTable.selectors.row));
|
return this.body.all(by.css(DataTable.selectors.row));
|
||||||
}
|
}
|
||||||
|
|
||||||
countRows(): promise.Promise<number> {
|
countRows(): promise.Promise<number> {
|
||||||
return this.getRows().count();
|
return this.getRows().count();
|
||||||
}
|
}
|
||||||
|
|
||||||
getSelectedRows(): ElementArrayFinder {
|
getSelectedRows(): ElementArrayFinder {
|
||||||
return this.body.all(by.css(DataTable.selectors.selectedRow));
|
return this.body.all(by.css(DataTable.selectors.selectedRow));
|
||||||
}
|
}
|
||||||
|
|
||||||
countSelectedRows(): promise.Promise<number> {
|
countSelectedRows(): promise.Promise<number> {
|
||||||
return this.getSelectedRows().count();
|
return this.getSelectedRows().count();
|
||||||
}
|
}
|
||||||
|
|
||||||
getNthRow(nth: number): ElementFinder {
|
getNthRow(nth: number): ElementFinder {
|
||||||
return this.getRows().get(nth - 1);
|
return this.getRows().get(nth - 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
getRowByName(name: string): ElementFinder {
|
getRowByName(name: string): ElementFinder {
|
||||||
return this.body.element(by.cssContainingText(DataTable.selectors.row, name));
|
return this.body.element(by.cssContainingText(DataTable.selectors.row, name));
|
||||||
}
|
}
|
||||||
|
|
||||||
getRowFirstCell(name: string) {
|
getRowFirstCell(name: string) {
|
||||||
return this.getRowByName(name).all(by.css(DataTable.selectors.cell)).get(0);
|
return this.getRowByName(name)
|
||||||
}
|
.all(by.css(DataTable.selectors.cell))
|
||||||
|
.get(0);
|
||||||
|
}
|
||||||
|
|
||||||
getRowNameCell(name: string) {
|
getRowNameCell(name: string) {
|
||||||
return this.getRowByName(name).all(by.css(DataTable.selectors.cell)).get(1);
|
return this.getRowByName(name)
|
||||||
}
|
.all(by.css(DataTable.selectors.cell))
|
||||||
|
.get(1);
|
||||||
|
}
|
||||||
|
|
||||||
getRowNameCellText(name: string) {
|
getRowNameCellText(name: string) {
|
||||||
return this.getRowNameCell(name).$('span');
|
return this.getRowNameCell(name).$('span');
|
||||||
}
|
}
|
||||||
|
|
||||||
getItemNameTooltip(name: string): promise.Promise<string> {
|
getItemNameTooltip(name: string): promise.Promise<string> {
|
||||||
return this.getRowNameCellText(name).getAttribute('title');
|
return this.getRowNameCellText(name).getAttribute('title');
|
||||||
}
|
}
|
||||||
|
|
||||||
hasCheckMarkIcon(itemName: string) {
|
hasCheckMarkIcon(itemName: string) {
|
||||||
return this.getRowByName(itemName).element(by.css(DataTable.selectors.selectedIcon)).isPresent();
|
return this.getRowByName(itemName)
|
||||||
}
|
.element(by.css(DataTable.selectors.selectedIcon))
|
||||||
|
.isPresent();
|
||||||
|
}
|
||||||
|
|
||||||
getNameLink(itemName: string) {
|
getNameLink(itemName: string) {
|
||||||
return this.getRowNameCell(itemName).$(DataTable.selectors.nameLink);
|
return this.getRowNameCell(itemName).$(DataTable.selectors.nameLink);
|
||||||
}
|
}
|
||||||
|
|
||||||
hasLinkOnName(itemName: string) {
|
hasLinkOnName(itemName: string) {
|
||||||
return this.getNameLink(itemName).isPresent();
|
return this.getNameLink(itemName).isPresent();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Navigation/selection methods
|
// Navigation/selection methods
|
||||||
doubleClickOnRowByName(name: string): promise.Promise<any> {
|
doubleClickOnRowByName(name: string): promise.Promise<any> {
|
||||||
const item = this.getRowFirstCell(name);
|
const item = this.getRowFirstCell(name);
|
||||||
return Utils.waitUntilElementClickable(item)
|
return Utils.waitUntilElementClickable(item).then(() =>
|
||||||
.then(() => browser.actions().mouseMove(item).click().click().perform());
|
browser
|
||||||
}
|
.actions()
|
||||||
|
.mouseMove(item)
|
||||||
|
.click()
|
||||||
|
.click()
|
||||||
|
.perform()
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
selectItem(name: string): promise.Promise<any> {
|
selectItem(name: string): promise.Promise<any> {
|
||||||
const item = this.getRowFirstCell(name);
|
const item = this.getRowFirstCell(name);
|
||||||
return Utils.waitUntilElementClickable(item)
|
return Utils.waitUntilElementClickable(item).then(() => item.click());
|
||||||
.then(() => item.click());
|
}
|
||||||
}
|
|
||||||
|
|
||||||
clickNameLink(itemName: string) {
|
clickNameLink(itemName: string) {
|
||||||
return this.getNameLink(itemName).click();
|
return this.getNameLink(itemName).click();
|
||||||
}
|
}
|
||||||
|
|
||||||
selectMultipleItems(names: string[]): promise.Promise<void> {
|
selectMultipleItems(names: string[]): promise.Promise<void> {
|
||||||
return this.clearSelection()
|
return this.clearSelection()
|
||||||
.then(() => browser.actions().sendKeys(protractor.Key.COMMAND).perform())
|
.then(() =>
|
||||||
.then(() => {
|
browser
|
||||||
names.forEach(name => {
|
.actions()
|
||||||
this.selectItem(name);
|
.sendKeys(protractor.Key.COMMAND)
|
||||||
});
|
.perform()
|
||||||
})
|
)
|
||||||
.then(() => browser.actions().sendKeys(protractor.Key.NULL).perform());
|
.then(() => {
|
||||||
}
|
names.forEach(name => {
|
||||||
|
this.selectItem(name);
|
||||||
|
});
|
||||||
|
})
|
||||||
|
.then(() =>
|
||||||
|
browser
|
||||||
|
.actions()
|
||||||
|
.sendKeys(protractor.Key.NULL)
|
||||||
|
.perform()
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
clearSelection(): promise.Promise<void> {
|
clearSelection(): promise.Promise<void> {
|
||||||
return this.getSelectedRows().count()
|
return this.getSelectedRows()
|
||||||
.then(count => {
|
.count()
|
||||||
if (count !== 0) { browser.refresh().then(() => this.waitForHeader()); }
|
.then(count => {
|
||||||
});
|
if (count !== 0) {
|
||||||
}
|
browser.refresh().then(() => this.waitForHeader());
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
async rightClickOnItem(itemName: string) {
|
async rightClickOnItem(itemName: string) {
|
||||||
const item = this.getRowFirstCell(itemName);
|
const item = this.getRowFirstCell(itemName);
|
||||||
await browser.actions().click(item, protractor.Button.RIGHT).perform();
|
await browser
|
||||||
}
|
.actions()
|
||||||
|
.click(item, protractor.Button.RIGHT)
|
||||||
|
.perform();
|
||||||
|
}
|
||||||
|
|
||||||
async rightClickOnMultipleSelection() {
|
async rightClickOnMultipleSelection() {
|
||||||
const itemFromSelection = this.getSelectedRows().get(0);
|
const itemFromSelection = this.getSelectedRows().get(0);
|
||||||
await browser.actions().click(itemFromSelection, protractor.Button.RIGHT).perform();
|
await browser
|
||||||
}
|
.actions()
|
||||||
|
.click(itemFromSelection, protractor.Button.RIGHT)
|
||||||
|
.perform();
|
||||||
|
}
|
||||||
|
|
||||||
getItemLocation(name: string) {
|
getItemLocation(name: string) {
|
||||||
return this.getRowByName(name).element(this.locationLink);
|
return this.getRowByName(name).element(this.locationLink);
|
||||||
}
|
}
|
||||||
|
|
||||||
getItemLocationTooltip(name: string): promise.Promise<string> {
|
getItemLocationTooltip(name: string): promise.Promise<string> {
|
||||||
return this.getItemLocation(name).$('a').getAttribute('title');
|
return this.getItemLocation(name)
|
||||||
}
|
.$('a')
|
||||||
|
.getAttribute('title');
|
||||||
|
}
|
||||||
|
|
||||||
getItemLocationTileAttr(name: string) {
|
getItemLocationTileAttr(name: string) {
|
||||||
const location = this.getItemLocation(name).$('a');
|
const location = this.getItemLocation(name).$('a');
|
||||||
const condition = () => location.getAttribute('title').then((value) => value && value.length > 0);
|
const condition = () => location.getAttribute('title').then(value => value && value.length > 0);
|
||||||
|
|
||||||
browser.actions()
|
browser
|
||||||
.mouseMove(location)
|
.actions()
|
||||||
.perform();
|
.mouseMove(location)
|
||||||
|
.perform();
|
||||||
|
|
||||||
browser.wait(condition, BROWSER_WAIT_TIMEOUT);
|
browser.wait(condition, BROWSER_WAIT_TIMEOUT);
|
||||||
return location.getAttribute('title');
|
return location.getAttribute('title');
|
||||||
}
|
}
|
||||||
|
|
||||||
clickItemLocation(name: string) {
|
clickItemLocation(name: string) {
|
||||||
return this.getItemLocation(name).click();
|
return this.getItemLocation(name).click();
|
||||||
}
|
}
|
||||||
|
|
||||||
// empty state methods
|
// empty state methods
|
||||||
isEmptyList(): promise.Promise<boolean> {
|
isEmptyList(): promise.Promise<boolean> {
|
||||||
return this.emptyList.isPresent();
|
return this.emptyList.isPresent();
|
||||||
}
|
}
|
||||||
|
|
||||||
isEmptyWithDragAndDrop(): promise.Promise<boolean> {
|
isEmptyWithDragAndDrop(): promise.Promise<boolean> {
|
||||||
return this.emptyFolderDragAndDrop.isDisplayed();
|
return this.emptyFolderDragAndDrop.isDisplayed();
|
||||||
}
|
}
|
||||||
|
|
||||||
getEmptyDragAndDropText(): promise.Promise<string> {
|
getEmptyDragAndDropText(): promise.Promise<string> {
|
||||||
return this.isEmptyWithDragAndDrop()
|
return this.isEmptyWithDragAndDrop().then(() => {
|
||||||
.then(() => {
|
return this.emptyFolderDragAndDrop.getText();
|
||||||
return this.emptyFolderDragAndDrop.getText();
|
});
|
||||||
});
|
}
|
||||||
}
|
|
||||||
|
|
||||||
getEmptyStateTitle(): promise.Promise<string> {
|
getEmptyStateTitle(): promise.Promise<string> {
|
||||||
return this.isEmptyList()
|
return this.isEmptyList().then(() => {
|
||||||
.then(() => {
|
return this.emptyListTitle.getText();
|
||||||
return this.emptyListTitle.getText();
|
});
|
||||||
});
|
}
|
||||||
}
|
|
||||||
|
|
||||||
getEmptyStateSubtitle(): promise.Promise<string> {
|
getEmptyStateSubtitle(): promise.Promise<string> {
|
||||||
return this.isEmptyList()
|
return this.isEmptyList().then(() => {
|
||||||
.then(() => {
|
return this.emptyListSubtitle.getText();
|
||||||
return this.emptyListSubtitle.getText();
|
});
|
||||||
});
|
}
|
||||||
}
|
|
||||||
|
|
||||||
getEmptyStateText(): promise.Promise<string> {
|
getEmptyStateText(): promise.Promise<string> {
|
||||||
return this.isEmptyList()
|
return this.isEmptyList().then(() => {
|
||||||
.then(() => {
|
return this.emptyListText.getText();
|
||||||
return this.emptyListText.getText();
|
});
|
||||||
});
|
}
|
||||||
}
|
|
||||||
|
|
||||||
getCellsContainingName(name: string) {
|
getCellsContainingName(name: string) {
|
||||||
return this.getRows().all(by.cssContainingText(DataTable.selectors.cell, name))
|
return this.getRows()
|
||||||
.map(cell => cell.getText());
|
.all(by.cssContainingText(DataTable.selectors.cell, name))
|
||||||
}
|
.map(cell => cell.getText());
|
||||||
|
}
|
||||||
|
|
||||||
async hasContextMenu() {
|
async hasContextMenu() {
|
||||||
return (await this.menu.getItemsCount()) > 0;
|
return (await this.menu.getItemsCount()) > 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
126
e2e/components/dialog/copy-move-dialog.ts
Executable file
126
e2e/components/dialog/copy-move-dialog.ts
Executable file
@ -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 <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
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();
|
||||||
|
}
|
||||||
|
}
|
67
e2e/components/dialog/manage-versions-dialog.ts
Executable file
67
e2e/components/dialog/manage-versions-dialog.ts
Executable file
@ -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 <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
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();
|
||||||
|
}
|
||||||
|
}
|
67
e2e/components/dialog/share-dialog.ts
Executable file
67
e2e/components/dialog/share-dialog.ts
Executable file
@ -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 <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
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();
|
||||||
|
}
|
||||||
|
}
|
@ -23,13 +23,13 @@
|
|||||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import { ElementFinder, ElementArrayFinder, by, promise, protractor, browser } from 'protractor';
|
import { ElementFinder, ElementArrayFinder, by, protractor, browser } from 'protractor';
|
||||||
import { Menu } from '../menu/menu';
|
import { Menu } from '../menu/menu';
|
||||||
import { Component } from '../component';
|
import { Component } from '../component';
|
||||||
|
|
||||||
export class Toolbar extends Component {
|
export class Toolbar extends Component {
|
||||||
private static selectors = {
|
private static selectors = {
|
||||||
root: 'adf-toolbar',
|
root: '.adf-toolbar',
|
||||||
button: '.mat-icon-button'
|
button: '.mat-icon-button'
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -70,4 +70,8 @@ export class Toolbar extends Component {
|
|||||||
return await button.getAttribute('title');
|
return await button.getAttribute('title');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async clickButton(title: string) {
|
||||||
|
const btn = this.getButtonByTitleAttribute(title);
|
||||||
|
await btn.click();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -40,6 +40,7 @@ export class Viewer extends Component {
|
|||||||
viewerExtensionContent: 'app-preview-extension'
|
viewerExtensionContent: 'app-preview-extension'
|
||||||
};
|
};
|
||||||
|
|
||||||
|
root: ElementFinder = browser.$(Viewer.selectors.root);
|
||||||
viewerLayout: ElementFinder = this.component.element(by.css(Viewer.selectors.layout));
|
viewerLayout: ElementFinder = this.component.element(by.css(Viewer.selectors.layout));
|
||||||
viewerContainer: ElementFinder = this.component.element(by.css(Viewer.selectors.contentContainer));
|
viewerContainer: ElementFinder = this.component.element(by.css(Viewer.selectors.contentContainer));
|
||||||
closeButton: ElementFinder = this.component.element(by.css(Viewer.selectors.closeBtn));
|
closeButton: ElementFinder = this.component.element(by.css(Viewer.selectors.closeBtn));
|
||||||
|
@ -44,57 +44,57 @@ export const E2E_ROOT_PATH = __dirname;
|
|||||||
|
|
||||||
// Application Routes
|
// Application Routes
|
||||||
export const APP_ROUTES = {
|
export const APP_ROUTES = {
|
||||||
FAVORITES: '/favorites',
|
FAVORITES: '/favorites',
|
||||||
FILE_LIBRARIES: '/libraries',
|
FILE_LIBRARIES: '/libraries',
|
||||||
LOGIN: '/login',
|
LOGIN: '/login',
|
||||||
LOGOUT: '/logout',
|
LOGOUT: '/logout',
|
||||||
PERSONAL_FILES: '/personal-files',
|
PERSONAL_FILES: '/personal-files',
|
||||||
RECENT_FILES: '/recent-files',
|
RECENT_FILES: '/recent-files',
|
||||||
SHARED_FILES: '/shared',
|
SHARED_FILES: '/shared',
|
||||||
TRASHCAN: '/trashcan'
|
TRASHCAN: '/trashcan'
|
||||||
};
|
};
|
||||||
|
|
||||||
// Sidebar labels
|
// Sidebar labels
|
||||||
export const SIDEBAR_LABELS = {
|
export const SIDEBAR_LABELS = {
|
||||||
PERSONAL_FILES: 'Personal Files',
|
PERSONAL_FILES: 'Personal Files',
|
||||||
FILE_LIBRARIES: 'File Libraries',
|
FILE_LIBRARIES: 'File Libraries',
|
||||||
SHARED_FILES: 'Shared',
|
SHARED_FILES: 'Shared',
|
||||||
RECENT_FILES: 'Recent Files',
|
RECENT_FILES: 'Recent Files',
|
||||||
FAVORITES: 'Favorites',
|
FAVORITES: 'Favorites',
|
||||||
TRASH: 'Trash'
|
TRASH: 'Trash'
|
||||||
};
|
};
|
||||||
|
|
||||||
// Page titles
|
// Page titles
|
||||||
export const PAGE_TITLES = {
|
export const PAGE_TITLES = {
|
||||||
VIEWER: 'Preview',
|
VIEWER: 'Preview',
|
||||||
SEARCH: 'Search Results'
|
SEARCH: 'Search Results'
|
||||||
};
|
};
|
||||||
|
|
||||||
// Site visibility
|
// Site visibility
|
||||||
export const SITE_VISIBILITY = {
|
export const SITE_VISIBILITY = {
|
||||||
PUBLIC: 'PUBLIC',
|
PUBLIC: 'PUBLIC',
|
||||||
MODERATED: 'MODERATED',
|
MODERATED: 'MODERATED',
|
||||||
PRIVATE: 'PRIVATE'
|
PRIVATE: 'PRIVATE'
|
||||||
};
|
};
|
||||||
|
|
||||||
// Site roles
|
// Site roles
|
||||||
export const SITE_ROLES = {
|
export const SITE_ROLES = {
|
||||||
SITE_CONSUMER: 'SiteConsumer',
|
SITE_CONSUMER: 'SiteConsumer',
|
||||||
SITE_COLLABORATOR: 'SiteCollaborator',
|
SITE_COLLABORATOR: 'SiteCollaborator',
|
||||||
SITE_CONTRIBUTOR: 'SiteContributor',
|
SITE_CONTRIBUTOR: 'SiteContributor',
|
||||||
SITE_MANAGER: 'SiteManager'
|
SITE_MANAGER: 'SiteManager'
|
||||||
};
|
};
|
||||||
|
|
||||||
export const FILES = {
|
export const FILES = {
|
||||||
docxFile: 'file-docx.docx',
|
docxFile: 'file-docx.docx',
|
||||||
xlsxFile: 'file-xlsx.xlsx',
|
xlsxFile: 'file-xlsx.xlsx',
|
||||||
pdfFile: 'file-pdf.pdf',
|
pdfFile: 'file-pdf.pdf',
|
||||||
unsupportedFile: 'file_unsupported.3DS'
|
unsupportedFile: 'file_unsupported.3DS'
|
||||||
};
|
};
|
||||||
|
|
||||||
export const EXTENSIBILITY_CONFIGS = {
|
export const EXTENSIBILITY_CONFIGS = {
|
||||||
DEFAULT_EXTENSIONS_CONFIG: 'extensions-default.json',
|
DEFAULT_EXTENSIONS_CONFIG: 'extensions-default.json',
|
||||||
INFO_DRAWER: 'info-drawer-ext.json',
|
INFO_DRAWER: 'info-drawer-ext.json',
|
||||||
INFO_DRAWER_EMPTY: 'info-drawer-no-tabs-ext.json',
|
INFO_DRAWER_EMPTY: 'info-drawer-no-tabs-ext.json',
|
||||||
VIEWER: 'viewer-ext.json'
|
VIEWER: 'viewer-ext.json'
|
||||||
};
|
};
|
||||||
|
@ -30,239 +30,259 @@ import { RepoClient } from '../../utilities/repo-client/repo-client';
|
|||||||
import { Utils } from '../../utilities/utils';
|
import { Utils } from '../../utilities/utils';
|
||||||
|
|
||||||
describe('Restore from Trash', () => {
|
describe('Restore from Trash', () => {
|
||||||
const username = `user-${Utils.random()}`;
|
const username = `user-${Utils.random()}`;
|
||||||
|
|
||||||
const apis = {
|
const apis = {
|
||||||
admin: new RepoClient(),
|
admin: new RepoClient(),
|
||||||
user: new RepoClient(username, username)
|
user: new RepoClient(username, username)
|
||||||
};
|
};
|
||||||
|
|
||||||
const loginPage = new LoginPage();
|
const loginPage = new LoginPage();
|
||||||
const logoutPage = new LogoutPage();
|
const logoutPage = new LogoutPage();
|
||||||
const page = new BrowsingPage();
|
const page = new BrowsingPage();
|
||||||
const { dataTable, toolbar } = page;
|
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 => {
|
beforeAll(done => {
|
||||||
apis.admin.people.createUser({ username })
|
apis.user.nodes
|
||||||
.then(() => loginPage.loginWith(username))
|
.createFile(file)
|
||||||
.then(done);
|
.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))
|
||||||
afterAll(done => {
|
|
||||||
Promise.all([
|
|
||||||
apis.admin.trashcan.emptyTrash(),
|
|
||||||
logoutPage.load()
|
|
||||||
])
|
|
||||||
.then(done);
|
.then(done);
|
||||||
});
|
});
|
||||||
|
|
||||||
xit('');
|
beforeEach(done => {
|
||||||
|
page.sidenav
|
||||||
describe('successful restore', () => {
|
.navigateToLinkByLabel(SIDEBAR_LABELS.TRASH)
|
||||||
const file = `file-${Utils.random()}.txt`; let fileId;
|
.then(() => dataTable.waitForHeader())
|
||||||
const folder = `folder-${Utils.random()}`; let folderId;
|
.then(done);
|
||||||
|
|
||||||
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));
|
|
||||||
});
|
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('failure to restore', () => {
|
afterAll(done => {
|
||||||
const file1 = `file-${Utils.random()}.txt`; let file1Id1, file1Id2;
|
apis.user.trashcan.emptyTrash().then(done);
|
||||||
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', () => {
|
it('restore file - [C217177]', () => {
|
||||||
const folder1 = `folder1-${Utils.random()}.txt`; let folder1Id;
|
dataTable
|
||||||
const folder2 = `folder2-${Utils.random()}.txt`; let folder2Id;
|
.selectItem(file)
|
||||||
const file1 = `file-${Utils.random()}.txt`; let file1Id;
|
.then(() => toolbar.getButtonByTitleAttribute('Restore').click())
|
||||||
const file2 = `file-${Utils.random()}.txt`; let file2Id;
|
.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;
|
.then(() => apis.user.nodes.deleteNodeById(fileId, false));
|
||||||
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'));
|
|
||||||
});
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
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'));
|
||||||
|
});
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -30,311 +30,636 @@ import { RepoClient } from '../../utilities/repo-client/repo-client';
|
|||||||
import { Utils } from '../../utilities/utils';
|
import { Utils } from '../../utilities/utils';
|
||||||
|
|
||||||
describe('Toolbar actions - multiple selection : ', () => {
|
describe('Toolbar actions - multiple selection : ', () => {
|
||||||
const username = `user-${Utils.random()}`;
|
const username = `user-${Utils.random()}`;
|
||||||
|
|
||||||
const file1 = `file-${Utils.random()}.txt`; let file1Id;
|
const file1 = `file-${Utils.random()}.txt`;
|
||||||
const file2 = `file-${Utils.random()}.txt`; let file2Id;
|
let file1Id;
|
||||||
|
const file2 = `file-${Utils.random()}.txt`;
|
||||||
|
let file2Id;
|
||||||
|
|
||||||
const folder1 = `folder-${Utils.random()}`; let folder1Id;
|
const folder1 = `folder-${Utils.random()}`;
|
||||||
const folder2 = `folder-${Utils.random()}`; let folder2Id;
|
let folder1Id;
|
||||||
|
const folder2 = `folder-${Utils.random()}`;
|
||||||
|
let folder2Id;
|
||||||
|
|
||||||
const fileForDelete1 = `file-${Utils.random()}.txt`; let fileForDelete1Id;
|
const fileForDelete1 = `file-${Utils.random()}.txt`;
|
||||||
const fileForDelete2 = `file-${Utils.random()}.txt`; let fileForDelete2Id;
|
let fileForDelete1Id;
|
||||||
const folderForDelete1 = `folder-${Utils.random()}`; let folderForDelete1Id;
|
const fileForDelete2 = `file-${Utils.random()}.txt`;
|
||||||
const folderForDelete2 = `folder-${Utils.random()}`; let folderForDelete2Id;
|
let fileForDelete2Id;
|
||||||
|
const folderForDelete1 = `folder-${Utils.random()}`;
|
||||||
|
let folderForDelete1Id;
|
||||||
|
const folderForDelete2 = `folder-${Utils.random()}`;
|
||||||
|
let folderForDelete2Id;
|
||||||
|
|
||||||
const siteName = `site-${Utils.random()}`;
|
const siteName = `site-${Utils.random()}`;
|
||||||
const file1InSite = `file1-${Utils.random()}.txt`;
|
const file1InSite = `file1-${Utils.random()}.txt`;
|
||||||
const file2InSite = `file2-${Utils.random()}.txt`;
|
const file2InSite = `file2-${Utils.random()}.txt`;
|
||||||
const folder1InSite = `folder1-${Utils.random()}`;
|
const folder1InSite = `folder1-${Utils.random()}`;
|
||||||
const folder2InSite = `folder2-${Utils.random()}`;
|
const folder2InSite = `folder2-${Utils.random()}`;
|
||||||
|
|
||||||
const apis = {
|
const apis = {
|
||||||
admin: new RepoClient(),
|
admin: new RepoClient(),
|
||||||
user: new RepoClient(username, username)
|
user: new RepoClient(username, username)
|
||||||
};
|
};
|
||||||
|
|
||||||
const loginPage = new LoginPage();
|
const loginPage = new LoginPage();
|
||||||
const logoutPage = new LogoutPage();
|
const logoutPage = new LogoutPage();
|
||||||
const page = new BrowsingPage();
|
const page = new BrowsingPage();
|
||||||
const { dataTable, toolbar } = page;
|
const { dataTable, toolbar } = page;
|
||||||
|
|
||||||
beforeAll(async (done) => {
|
beforeAll(async done => {
|
||||||
await apis.admin.people.createUser({ username });
|
await apis.admin.people.createUser({ username });
|
||||||
|
|
||||||
file1Id = (await apis.user.nodes.createFiles([ file1 ])).entry.id;
|
file1Id = (await apis.user.nodes.createFiles([file1])).entry.id;
|
||||||
file2Id = (await apis.user.nodes.createFiles([ file2 ])).entry.id;
|
file2Id = (await apis.user.nodes.createFiles([file2])).entry.id;
|
||||||
folder1Id = (await apis.user.nodes.createFolders([ folder1 ])).entry.id;
|
folder1Id = (await apis.user.nodes.createFolders([folder1])).entry.id;
|
||||||
folder2Id = (await apis.user.nodes.createFolders([ folder2 ])).entry.id;
|
folder2Id = (await apis.user.nodes.createFolders([folder2])).entry.id;
|
||||||
fileForDelete1Id = (await apis.user.nodes.createFiles([ fileForDelete1 ])).entry.id;
|
fileForDelete1Id = (await apis.user.nodes.createFiles([fileForDelete1]))
|
||||||
fileForDelete2Id = (await apis.user.nodes.createFiles([ fileForDelete2 ])).entry.id;
|
.entry.id;
|
||||||
folderForDelete1Id = (await apis.user.nodes.createFolders([ folderForDelete1 ])).entry.id;
|
fileForDelete2Id = (await apis.user.nodes.createFiles([fileForDelete2]))
|
||||||
folderForDelete2Id = (await apis.user.nodes.createFolders([ folderForDelete2 ])).entry.id;
|
.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.shareFilesByIds([file1Id, file2Id]);
|
||||||
await apis.user.shared.waitForApi({ expect: 2 });
|
await apis.user.shared.waitForApi({ expect: 2 });
|
||||||
|
|
||||||
await apis.user.favorites.addFavoritesByIds('file', [ file1Id, file2Id ]);
|
await apis.user.favorites.addFavoritesByIds('file', [file1Id, file2Id]);
|
||||||
await apis.user.favorites.addFavoritesByIds('folder', [ folder1Id, folder2Id ]);
|
await apis.user.favorites.addFavoritesByIds('folder', [
|
||||||
await apis.user.favorites.waitForApi({ expect: 4 });
|
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);
|
await apis.user.sites.createSite(siteName, SITE_VISIBILITY.PRIVATE);
|
||||||
const docLibId = await apis.user.sites.getDocLibId(siteName);
|
const docLibId = await apis.user.sites.getDocLibId(siteName);
|
||||||
await apis.user.nodes.createFile(file1InSite, docLibId);
|
await apis.user.nodes.createFile(file1InSite, docLibId);
|
||||||
await apis.user.nodes.createFile(file2InSite, docLibId);
|
await apis.user.nodes.createFile(file2InSite, docLibId);
|
||||||
await apis.user.nodes.createFolder(folder1InSite, docLibId);
|
await apis.user.nodes.createFolder(folder1InSite, docLibId);
|
||||||
await apis.user.nodes.createFolder(folder2InSite, docLibId);
|
await apis.user.nodes.createFolder(folder2InSite, docLibId);
|
||||||
|
|
||||||
await loginPage.loginWith(username);
|
await loginPage.loginWith(username);
|
||||||
done();
|
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) => {
|
it('Unselect items with single click - [C280458]', async () => {
|
||||||
await Promise.all([
|
await dataTable.selectMultipleItems([file1, file2, folder1, folder2]);
|
||||||
apis.user.nodes.deleteNodesById([ file1Id, file2Id, folder1Id, folder2Id ]),
|
expect(await dataTable.countSelectedRows()).toEqual(
|
||||||
apis.user.trashcan.emptyTrash(),
|
4,
|
||||||
apis.user.sites.deleteSite(siteName),
|
'incorrect selected rows number'
|
||||||
logoutPage.load()
|
);
|
||||||
]);
|
await dataTable.selectItem(file1);
|
||||||
done();
|
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', () => {
|
expect(await dataTable.countSelectedRows()).toEqual(
|
||||||
beforeEach(async (done) => {
|
2,
|
||||||
await dataTable.clearSelection();
|
'incorrect selected rows number'
|
||||||
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();
|
|
||||||
});
|
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('File Libraries', () => {
|
it('correct actions appear when multiple files are selected - [C217112]', async () => {
|
||||||
beforeEach(async (done) => {
|
await dataTable.selectMultipleItems([file1, file2]);
|
||||||
await browser.actions().mouseMove(browser.$('body'), { x: 0, y: 0 }).click().perform();
|
expect(await toolbar.isButtonPresent('View')).toBe(
|
||||||
await dataTable.clearSelection();
|
false,
|
||||||
await page.sidenav.navigateToLinkByLabel(SIDEBAR_LABELS.FILE_LIBRARIES);
|
'View is displayed'
|
||||||
await dataTable.waitForHeader();
|
);
|
||||||
await dataTable.doubleClickOnRowByName(siteName);
|
expect(await toolbar.isButtonPresent('Download')).toBe(
|
||||||
await dataTable.waitForHeader();
|
true,
|
||||||
done();
|
'Download is not displayed'
|
||||||
});
|
);
|
||||||
|
expect(await toolbar.isButtonPresent('Edit')).toBe(
|
||||||
it('correct actions appear when multiple files are selected - [C280461]', async () => {
|
false,
|
||||||
await dataTable.selectMultipleItems([file1InSite, file2InSite]);
|
'Edit is displayed'
|
||||||
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');
|
const menu = await toolbar.openMoreMenu();
|
||||||
expect(await toolbar.isButtonPresent('Edit')).toBe(false, 'Edit is displayed for selected files');
|
expect(await menu.isMenuItemPresent('Copy')).toBe(
|
||||||
const menu = await toolbar.openMoreMenu();
|
true,
|
||||||
expect(await menu.isMenuItemPresent('Copy')).toBe(true, `Copy is not displayed for selected files`);
|
`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('Delete')).toBe(
|
||||||
expect(await menu.isMenuItemPresent('Favorite')).toBe(true, `Favorite is not displayed for selected files`);
|
true,
|
||||||
});
|
`Delete is not displayed for selected files`
|
||||||
|
);
|
||||||
it('correct actions appear when multiple folders are selected - [C280462]', async () => {
|
expect(await menu.isMenuItemPresent('Move')).toBe(
|
||||||
await dataTable.selectMultipleItems([folder1InSite, folder2InSite]);
|
true,
|
||||||
expect(await toolbar.isButtonPresent('View')).toBe(false, 'View is displayed');
|
`Move is not displayed for selected files`
|
||||||
expect(await toolbar.isButtonPresent('Download')).toBe(true, 'Download is not displayed');
|
);
|
||||||
expect(await toolbar.isButtonPresent('Edit')).toBe(false, 'Edit is displayed');
|
expect(await menu.isMenuItemPresent('Favorite')).toBe(
|
||||||
const menu = await toolbar.openMoreMenu();
|
true,
|
||||||
expect(await menu.isMenuItemPresent('Copy')).toBe(true, `Copy is not displayed for selected files`);
|
`Favorite 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`);
|
await toolbar.closeMoreMenu();
|
||||||
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', () => {
|
it('correct actions appear when multiple folders are selected - [C280459]', async () => {
|
||||||
beforeEach(async (done) => {
|
await dataTable.selectMultipleItems([folder1, folder2]);
|
||||||
await browser.actions().mouseMove(browser.$('body'), { x: 0, y: 0 }).click().perform();
|
expect(await toolbar.isButtonPresent('View')).toBe(
|
||||||
await dataTable.clearSelection();
|
false,
|
||||||
await page.sidenav.navigateToLinkByLabel(SIDEBAR_LABELS.SHARED_FILES);
|
'View is displayed'
|
||||||
await dataTable.waitForHeader();
|
);
|
||||||
done();
|
expect(await toolbar.isButtonPresent('Download')).toBe(
|
||||||
});
|
true,
|
||||||
|
'Download is not displayed'
|
||||||
it('correct actions appear when multiple files are selected - [C280467]', async () => {
|
);
|
||||||
await dataTable.selectMultipleItems([file1, file2]);
|
expect(await toolbar.isButtonPresent('Edit')).toBe(
|
||||||
expect(await toolbar.isButtonPresent('View')).toBe(false, 'View is displayed');
|
false,
|
||||||
expect(await toolbar.isButtonPresent('Download')).toBe(true, 'Download is not displayed for selected files');
|
'Edit is displayed'
|
||||||
expect(await toolbar.isButtonPresent('Edit')).toBe(false, 'Edit is displayed for selected files');
|
);
|
||||||
const menu = await toolbar.openMoreMenu();
|
const menu = await toolbar.openMoreMenu();
|
||||||
expect(await menu.isMenuItemPresent('Copy')).toBe(true, `Copy is not displayed for selected files`);
|
expect(await menu.isMenuItemPresent('Copy')).toBe(
|
||||||
expect(await menu.isMenuItemPresent('Delete')).toBe(true, `Delete is not displayed for selected files`);
|
true,
|
||||||
expect(await menu.isMenuItemPresent('Move')).toBe(true, `Move is not displayed for selected files`);
|
`Copy is not displayed for selected files`
|
||||||
expect(await menu.isMenuItemPresent('Favorite')).toBe(true, `Favorite 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', () => {
|
it('correct actions appear when both files and folders are selected - [C280460]', async () => {
|
||||||
beforeEach(async (done) => {
|
await dataTable.selectMultipleItems([file1, file2, folder1, folder2]);
|
||||||
await browser.actions().mouseMove(browser.$('body'), { x: 0, y: 0 }).click().perform();
|
expect(await toolbar.isButtonPresent('View')).toBe(
|
||||||
await dataTable.clearSelection();
|
false,
|
||||||
await page.sidenav.navigateToLinkByLabel(SIDEBAR_LABELS.RECENT_FILES);
|
'View is displayed'
|
||||||
await dataTable.waitForHeader();
|
);
|
||||||
done();
|
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 () => {
|
describe('File Libraries', () => {
|
||||||
await dataTable.selectMultipleItems([file1, file2]);
|
beforeEach(async done => {
|
||||||
expect(await toolbar.isButtonPresent('View')).toBe(false, 'View is displayed');
|
await browser
|
||||||
expect(await toolbar.isButtonPresent('Download')).toBe(true, 'Download is not displayed');
|
.actions()
|
||||||
expect(await toolbar.isButtonPresent('Edit')).toBe(false, 'Edit is displayed');
|
.mouseMove(browser.$('body'), { x: 0, y: 0 })
|
||||||
const menu = await toolbar.openMoreMenu();
|
.click()
|
||||||
expect(await menu.isMenuItemPresent('Copy')).toBe(true, `Copy is not displayed for selected files`);
|
.perform();
|
||||||
expect(await menu.isMenuItemPresent('Delete')).toBe(true, `Delete is not displayed for selected files`);
|
await dataTable.clearSelection();
|
||||||
expect(await menu.isMenuItemPresent('Move')).toBe(true, `Move is not displayed for selected files`);
|
await page.sidenav.navigateToLinkByLabel(SIDEBAR_LABELS.FILE_LIBRARIES);
|
||||||
expect(await menu.isMenuItemPresent('Favorite')).toBe(true, `Favorite is not displayed for selected files`);
|
await dataTable.waitForHeader();
|
||||||
});
|
await dataTable.doubleClickOnRowByName(siteName);
|
||||||
|
await dataTable.waitForHeader();
|
||||||
|
done();
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('Favorites', () => {
|
it('correct actions appear when multiple files are selected - [C280461]', async () => {
|
||||||
beforeEach(async (done) => {
|
await dataTable.selectMultipleItems([file1InSite, file2InSite]);
|
||||||
await browser.actions().mouseMove(browser.$('body'), { x: 0, y: 0 }).click().perform();
|
expect(await toolbar.isButtonPresent('View')).toBe(
|
||||||
await dataTable.clearSelection();
|
false,
|
||||||
await page.sidenav.navigateToLinkByLabel(SIDEBAR_LABELS.FAVORITES);
|
'View is displayed for selected files'
|
||||||
await dataTable.waitForHeader();
|
);
|
||||||
done();
|
expect(await toolbar.isButtonPresent('Download')).toBe(
|
||||||
});
|
true,
|
||||||
|
'Download is not displayed for selected files'
|
||||||
it('correct actions appear when multiple files are selected - [C280469]', async () => {
|
);
|
||||||
await dataTable.selectMultipleItems([file1, file2]);
|
expect(await toolbar.isButtonPresent('Edit')).toBe(
|
||||||
expect(await toolbar.isButtonPresent('View')).toBe(false, 'View is displayed');
|
false,
|
||||||
expect(await toolbar.isButtonPresent('Download')).toBe(true, 'Download is not displayed');
|
'Edit is displayed for selected files'
|
||||||
expect(await toolbar.isButtonPresent('Edit')).toBe(false, 'Edit is displayed');
|
);
|
||||||
const menu = await toolbar.openMoreMenu();
|
const menu = await toolbar.openMoreMenu();
|
||||||
expect(await menu.isMenuItemPresent('Copy')).toBe(true, `Copy is not displayed for selected files`);
|
expect(await menu.isMenuItemPresent('Copy')).toBe(
|
||||||
expect(await menu.isMenuItemPresent('Delete')).toBe(true, `Delete is not displayed for selected files`);
|
true,
|
||||||
expect(await menu.isMenuItemPresent('Move')).toBe(true, `Move is not displayed for selected files`);
|
`Copy is not displayed for selected files`
|
||||||
expect(await menu.isMenuItemPresent('Favorite')).toBe(true, `Favorite is not displayed for selected files`);
|
);
|
||||||
});
|
expect(await menu.isMenuItemPresent('Delete')).toBe(
|
||||||
|
true,
|
||||||
it('correct actions appear when multiple folders are selected - [C280470]', async () => {
|
`Delete is not displayed for selected files`
|
||||||
await dataTable.selectMultipleItems([folder1, folder2]);
|
);
|
||||||
expect(await toolbar.isButtonPresent('View')).toBe(false, 'View is displayed');
|
expect(await menu.isMenuItemPresent('Move')).toBe(
|
||||||
expect(await toolbar.isButtonPresent('Download')).toBe(true, 'Download is not displayed');
|
true,
|
||||||
expect(await toolbar.isButtonPresent('Edit')).toBe(false, 'Edit is displayed');
|
`Move is not 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('Favorite')).toBe(
|
||||||
expect(await menu.isMenuItemPresent('Delete')).toBe(true, `Delete is not displayed for selected files`);
|
true,
|
||||||
expect(await menu.isMenuItemPresent('Move')).toBe(true, `Move is not displayed for selected files`);
|
`Favorite 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', () => {
|
it('correct actions appear when multiple folders are selected - [C280462]', async () => {
|
||||||
beforeEach(async (done) => {
|
await dataTable.selectMultipleItems([folder1InSite, folder2InSite]);
|
||||||
await dataTable.clearSelection();
|
expect(await toolbar.isButtonPresent('View')).toBe(
|
||||||
await page.sidenav.navigateToLinkByLabel(SIDEBAR_LABELS.TRASH);
|
false,
|
||||||
await dataTable.waitForHeader();
|
'View is displayed'
|
||||||
done();
|
);
|
||||||
});
|
expect(await toolbar.isButtonPresent('Download')).toBe(
|
||||||
|
true,
|
||||||
it('correct actions appear when multiple files are selected - [C280472]', async () => {
|
'Download is not displayed'
|
||||||
await dataTable.selectMultipleItems([fileForDelete1, fileForDelete2]);
|
);
|
||||||
expect(await toolbar.isButtonPresent('Permanently delete')).toBe(true, 'Permanently delete is displayed');
|
expect(await toolbar.isButtonPresent('Edit')).toBe(
|
||||||
expect(await toolbar.isButtonPresent('Restore')).toBe(true, 'Restore is not displayed');
|
false,
|
||||||
});
|
'Edit is displayed'
|
||||||
|
);
|
||||||
it('correct actions appear when multiple folders are selected - [C280473]', async () => {
|
const menu = await toolbar.openMoreMenu();
|
||||||
await dataTable.selectMultipleItems([folderForDelete1, folderForDelete2]);
|
expect(await menu.isMenuItemPresent('Copy')).toBe(
|
||||||
expect(await toolbar.isButtonPresent('Permanently delete')).toBe(true, 'Permanently delete is displayed');
|
true,
|
||||||
expect(await toolbar.isButtonPresent('Restore')).toBe(true, 'Restore is not displayed');
|
`Copy is not displayed for selected files`
|
||||||
});
|
);
|
||||||
|
expect(await menu.isMenuItemPresent('Delete')).toBe(
|
||||||
it('correct actions appear when both files and folders are selected - [C280474]', async () => {
|
true,
|
||||||
await dataTable.selectMultipleItems([fileForDelete1, fileForDelete2, folderForDelete1, folderForDelete2]);
|
`Delete is not displayed for selected files`
|
||||||
expect(await toolbar.isButtonPresent('Permanently delete')).toBe(true, 'Permanently delete is displayed');
|
);
|
||||||
expect(await toolbar.isButtonPresent('Restore')).toBe(true, 'Restore is not displayed');
|
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'
|
||||||
|
);
|
||||||
|
});
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
239
e2e/suites/viewer/viewer-actions.test.ts
Executable file
239
e2e/suites/viewer/viewer-actions.test.ts
Executable file
@ -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 <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
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');
|
||||||
|
});
|
||||||
|
});
|
@ -23,64 +23,102 @@
|
|||||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
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';
|
import { BROWSER_WAIT_TIMEOUT, E2E_ROOT_PATH, EXTENSIBILITY_CONFIGS } from '../configs';
|
||||||
|
const path = require('path');
|
||||||
const fs = require('fs');
|
const fs = require('fs');
|
||||||
|
|
||||||
export class Utils {
|
export class Utils {
|
||||||
// generate a random value
|
// generate a random value
|
||||||
static random(): string {
|
static random(): string {
|
||||||
return Math.random().toString(36).substring(3, 10).toLowerCase();
|
return Math.random()
|
||||||
|
.toString(36)
|
||||||
|
.substring(3, 10)
|
||||||
|
.toLowerCase();
|
||||||
|
}
|
||||||
|
|
||||||
|
// local storage
|
||||||
|
static clearLocalStorage(): promise.Promise<any> {
|
||||||
|
return browser.executeScript('window.localStorage.clear();');
|
||||||
|
}
|
||||||
|
|
||||||
|
// session storage
|
||||||
|
static clearSessionStorage(): promise.Promise<any> {
|
||||||
|
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<any>, retry: number = 30, delay: number = 1000): Promise<any> {
|
||||||
|
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 async fileExistsOnOS(fileName: string) {
|
||||||
static clearLocalStorage(): promise.Promise<any> {
|
const filePath = path.join((await browser.getProcessedConfig()).params.downloadFolder, fileName);
|
||||||
return browser.executeScript('window.localStorage.clear();');
|
|
||||||
}
|
|
||||||
|
|
||||||
// session storage
|
let tries = 5;
|
||||||
static clearSessionStorage(): promise.Promise<any> {
|
|
||||||
return browser.executeScript('window.sessionStorage.clear();');
|
|
||||||
}
|
|
||||||
|
|
||||||
static getSessionStorage() {
|
return new Promise(function(resolve) {
|
||||||
return browser.executeScript('return window.sessionStorage.getItem("aca.extension.config");');
|
const checkExist = setInterval(() => {
|
||||||
}
|
fs.stat(filePath, function(error) {
|
||||||
|
tries--;
|
||||||
|
|
||||||
static async setSessionStorageFromConfig(key: string, configFileName: string) {
|
if (error && tries === 0) {
|
||||||
const configFile = `${E2E_ROOT_PATH}/resources/extensibility-configs/${configFileName}`;
|
clearInterval(checkExist);
|
||||||
const fileContent = JSON.stringify(fs.readFileSync(configFile, { encoding: 'utf8' }));
|
resolve(false);
|
||||||
|
}
|
||||||
|
|
||||||
return await browser.executeScript(`window.sessionStorage.setItem(${key}, ${fileContent});`);
|
if (!error) {
|
||||||
}
|
clearInterval(checkExist);
|
||||||
|
resolve(true);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}, 500);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
static async resetExtensionConfig() {
|
static async pressEscape() {
|
||||||
const defConfig = `${E2E_ROOT_PATH}/resources/extensibility-configs/${EXTENSIBILITY_CONFIGS.DEFAULT_EXTENSIONS_CONFIG}`;
|
return await browser
|
||||||
|
.actions()
|
||||||
|
.sendKeys(protractor.Key.ESCAPE)
|
||||||
|
.perform();
|
||||||
|
}
|
||||||
|
|
||||||
return await this.setSessionStorageFromConfig('"aca.extension.config"', defConfig);
|
static async getBrowserLog() {
|
||||||
}
|
return await browser
|
||||||
|
.manage()
|
||||||
static retryCall(fn: () => Promise <any>, retry: number = 30, delay: number = 1000): Promise<any> {
|
.logs()
|
||||||
const pause = (duration) => new Promise(res => setTimeout(res, duration));
|
.get('browser');
|
||||||
|
}
|
||||||
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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
221
package-lock.json
generated
221
package-lock.json
generated
@ -3194,8 +3194,7 @@
|
|||||||
"async-limiter": {
|
"async-limiter": {
|
||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz",
|
||||||
"integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg==",
|
"integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg=="
|
||||||
"dev": true
|
|
||||||
},
|
},
|
||||||
"asynckit": {
|
"asynckit": {
|
||||||
"version": "0.4.0",
|
"version": "0.4.0",
|
||||||
@ -3990,6 +3989,22 @@
|
|||||||
"integrity": "sha1-4qdQQqlVGQi+vSW4Uj1fl2nXkYE=",
|
"integrity": "sha1-4qdQQqlVGQi+vSW4Uj1fl2nXkYE=",
|
||||||
"dev": true
|
"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": {
|
"chrome-trace-event": {
|
||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.0.tgz",
|
||||||
@ -6147,24 +6162,28 @@
|
|||||||
"dependencies": {
|
"dependencies": {
|
||||||
"abbrev": {
|
"abbrev": {
|
||||||
"version": "1.1.1",
|
"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,
|
"dev": true,
|
||||||
"optional": true
|
"optional": true
|
||||||
},
|
},
|
||||||
"ansi-regex": {
|
"ansi-regex": {
|
||||||
"version": "2.1.1",
|
"version": "2.1.1",
|
||||||
"bundled": true,
|
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
|
||||||
|
"integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"aproba": {
|
"aproba": {
|
||||||
"version": "1.2.0",
|
"version": "1.2.0",
|
||||||
"bundled": true,
|
"resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz",
|
||||||
|
"integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"optional": true
|
"optional": true
|
||||||
},
|
},
|
||||||
"are-we-there-yet": {
|
"are-we-there-yet": {
|
||||||
"version": "1.1.4",
|
"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,
|
"dev": true,
|
||||||
"optional": true,
|
"optional": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
@ -6174,12 +6193,14 @@
|
|||||||
},
|
},
|
||||||
"balanced-match": {
|
"balanced-match": {
|
||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
"bundled": true,
|
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
|
||||||
|
"integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"brace-expansion": {
|
"brace-expansion": {
|
||||||
"version": "1.1.11",
|
"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,
|
"dev": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"balanced-match": "^1.0.0",
|
"balanced-match": "^1.0.0",
|
||||||
@ -6188,34 +6209,40 @@
|
|||||||
},
|
},
|
||||||
"chownr": {
|
"chownr": {
|
||||||
"version": "1.0.1",
|
"version": "1.0.1",
|
||||||
"bundled": true,
|
"resolved": "https://registry.npmjs.org/chownr/-/chownr-1.0.1.tgz",
|
||||||
|
"integrity": "sha1-4qdQQqlVGQi+vSW4Uj1fl2nXkYE=",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"optional": true
|
"optional": true
|
||||||
},
|
},
|
||||||
"code-point-at": {
|
"code-point-at": {
|
||||||
"version": "1.1.0",
|
"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
|
"dev": true
|
||||||
},
|
},
|
||||||
"concat-map": {
|
"concat-map": {
|
||||||
"version": "0.0.1",
|
"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
|
"dev": true
|
||||||
},
|
},
|
||||||
"console-control-strings": {
|
"console-control-strings": {
|
||||||
"version": "1.1.0",
|
"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
|
"dev": true
|
||||||
},
|
},
|
||||||
"core-util-is": {
|
"core-util-is": {
|
||||||
"version": "1.0.2",
|
"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,
|
"dev": true,
|
||||||
"optional": true
|
"optional": true
|
||||||
},
|
},
|
||||||
"debug": {
|
"debug": {
|
||||||
"version": "2.6.9",
|
"version": "2.6.9",
|
||||||
"bundled": true,
|
"resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
|
||||||
|
"integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"optional": true,
|
"optional": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
@ -6224,25 +6251,29 @@
|
|||||||
},
|
},
|
||||||
"deep-extend": {
|
"deep-extend": {
|
||||||
"version": "0.5.1",
|
"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,
|
"dev": true,
|
||||||
"optional": true
|
"optional": true
|
||||||
},
|
},
|
||||||
"delegates": {
|
"delegates": {
|
||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
"bundled": true,
|
"resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz",
|
||||||
|
"integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"optional": true
|
"optional": true
|
||||||
},
|
},
|
||||||
"detect-libc": {
|
"detect-libc": {
|
||||||
"version": "1.0.3",
|
"version": "1.0.3",
|
||||||
"bundled": true,
|
"resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz",
|
||||||
|
"integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"optional": true
|
"optional": true
|
||||||
},
|
},
|
||||||
"fs-minipass": {
|
"fs-minipass": {
|
||||||
"version": "1.2.5",
|
"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,
|
"dev": true,
|
||||||
"optional": true,
|
"optional": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
@ -6251,13 +6282,15 @@
|
|||||||
},
|
},
|
||||||
"fs.realpath": {
|
"fs.realpath": {
|
||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
"bundled": true,
|
"resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
|
||||||
|
"integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"optional": true
|
"optional": true
|
||||||
},
|
},
|
||||||
"gauge": {
|
"gauge": {
|
||||||
"version": "2.7.4",
|
"version": "2.7.4",
|
||||||
"bundled": true,
|
"resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz",
|
||||||
|
"integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"optional": true,
|
"optional": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
@ -6273,7 +6306,8 @@
|
|||||||
},
|
},
|
||||||
"glob": {
|
"glob": {
|
||||||
"version": "7.1.2",
|
"version": "7.1.2",
|
||||||
"bundled": true,
|
"resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
|
||||||
|
"integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"optional": true,
|
"optional": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
@ -6287,13 +6321,15 @@
|
|||||||
},
|
},
|
||||||
"has-unicode": {
|
"has-unicode": {
|
||||||
"version": "2.0.1",
|
"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,
|
"dev": true,
|
||||||
"optional": true
|
"optional": true
|
||||||
},
|
},
|
||||||
"iconv-lite": {
|
"iconv-lite": {
|
||||||
"version": "0.4.21",
|
"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,
|
"dev": true,
|
||||||
"optional": true,
|
"optional": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
@ -6302,7 +6338,8 @@
|
|||||||
},
|
},
|
||||||
"ignore-walk": {
|
"ignore-walk": {
|
||||||
"version": "3.0.1",
|
"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,
|
"dev": true,
|
||||||
"optional": true,
|
"optional": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
@ -6311,7 +6348,8 @@
|
|||||||
},
|
},
|
||||||
"inflight": {
|
"inflight": {
|
||||||
"version": "1.0.6",
|
"version": "1.0.6",
|
||||||
"bundled": true,
|
"resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
|
||||||
|
"integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"optional": true,
|
"optional": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
@ -6321,18 +6359,21 @@
|
|||||||
},
|
},
|
||||||
"inherits": {
|
"inherits": {
|
||||||
"version": "2.0.3",
|
"version": "2.0.3",
|
||||||
"bundled": true,
|
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
|
||||||
|
"integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"ini": {
|
"ini": {
|
||||||
"version": "1.3.5",
|
"version": "1.3.5",
|
||||||
"bundled": true,
|
"resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz",
|
||||||
|
"integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"optional": true
|
"optional": true
|
||||||
},
|
},
|
||||||
"is-fullwidth-code-point": {
|
"is-fullwidth-code-point": {
|
||||||
"version": "1.0.0",
|
"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,
|
"dev": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"number-is-nan": "^1.0.0"
|
"number-is-nan": "^1.0.0"
|
||||||
@ -6340,13 +6381,15 @@
|
|||||||
},
|
},
|
||||||
"isarray": {
|
"isarray": {
|
||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
"bundled": true,
|
"resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
|
||||||
|
"integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"optional": true
|
"optional": true
|
||||||
},
|
},
|
||||||
"minimatch": {
|
"minimatch": {
|
||||||
"version": "3.0.4",
|
"version": "3.0.4",
|
||||||
"bundled": true,
|
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
|
||||||
|
"integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"brace-expansion": "^1.1.7"
|
"brace-expansion": "^1.1.7"
|
||||||
@ -6354,12 +6397,14 @@
|
|||||||
},
|
},
|
||||||
"minimist": {
|
"minimist": {
|
||||||
"version": "0.0.8",
|
"version": "0.0.8",
|
||||||
"bundled": true,
|
"resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
|
||||||
|
"integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"minipass": {
|
"minipass": {
|
||||||
"version": "2.2.4",
|
"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,
|
"dev": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"safe-buffer": "^5.1.1",
|
"safe-buffer": "^5.1.1",
|
||||||
@ -6368,7 +6413,8 @@
|
|||||||
},
|
},
|
||||||
"minizlib": {
|
"minizlib": {
|
||||||
"version": "1.1.0",
|
"version": "1.1.0",
|
||||||
"bundled": true,
|
"resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.1.0.tgz",
|
||||||
|
"integrity": "sha512-4T6Ur/GctZ27nHfpt9THOdRZNgyJ9FZchYO1ceg5S8Q3DNLCKYy44nCZzgCJgcvx2UM8czmqak5BCxJMrq37lA==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"optional": true,
|
"optional": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
@ -6377,7 +6423,8 @@
|
|||||||
},
|
},
|
||||||
"mkdirp": {
|
"mkdirp": {
|
||||||
"version": "0.5.1",
|
"version": "0.5.1",
|
||||||
"bundled": true,
|
"resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
|
||||||
|
"integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"minimist": "0.0.8"
|
"minimist": "0.0.8"
|
||||||
@ -6385,13 +6432,15 @@
|
|||||||
},
|
},
|
||||||
"ms": {
|
"ms": {
|
||||||
"version": "2.0.0",
|
"version": "2.0.0",
|
||||||
"bundled": true,
|
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
|
||||||
|
"integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"optional": true
|
"optional": true
|
||||||
},
|
},
|
||||||
"needle": {
|
"needle": {
|
||||||
"version": "2.2.0",
|
"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,
|
"dev": true,
|
||||||
"optional": true,
|
"optional": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
@ -6402,7 +6451,8 @@
|
|||||||
},
|
},
|
||||||
"node-pre-gyp": {
|
"node-pre-gyp": {
|
||||||
"version": "0.10.0",
|
"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,
|
"dev": true,
|
||||||
"optional": true,
|
"optional": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
@ -6420,7 +6470,8 @@
|
|||||||
},
|
},
|
||||||
"nopt": {
|
"nopt": {
|
||||||
"version": "4.0.1",
|
"version": "4.0.1",
|
||||||
"bundled": true,
|
"resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.1.tgz",
|
||||||
|
"integrity": "sha1-0NRoWv1UFRk8jHUFYC0NF81kR00=",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"optional": true,
|
"optional": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
@ -6430,13 +6481,15 @@
|
|||||||
},
|
},
|
||||||
"npm-bundled": {
|
"npm-bundled": {
|
||||||
"version": "1.0.3",
|
"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,
|
"dev": true,
|
||||||
"optional": true
|
"optional": true
|
||||||
},
|
},
|
||||||
"npm-packlist": {
|
"npm-packlist": {
|
||||||
"version": "1.1.10",
|
"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,
|
"dev": true,
|
||||||
"optional": true,
|
"optional": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
@ -6446,7 +6499,8 @@
|
|||||||
},
|
},
|
||||||
"npmlog": {
|
"npmlog": {
|
||||||
"version": "4.1.2",
|
"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,
|
"dev": true,
|
||||||
"optional": true,
|
"optional": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
@ -6458,18 +6512,21 @@
|
|||||||
},
|
},
|
||||||
"number-is-nan": {
|
"number-is-nan": {
|
||||||
"version": "1.0.1",
|
"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
|
"dev": true
|
||||||
},
|
},
|
||||||
"object-assign": {
|
"object-assign": {
|
||||||
"version": "4.1.1",
|
"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,
|
"dev": true,
|
||||||
"optional": true
|
"optional": true
|
||||||
},
|
},
|
||||||
"once": {
|
"once": {
|
||||||
"version": "1.4.0",
|
"version": "1.4.0",
|
||||||
"bundled": true,
|
"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
|
||||||
|
"integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"wrappy": "1"
|
"wrappy": "1"
|
||||||
@ -6477,19 +6534,22 @@
|
|||||||
},
|
},
|
||||||
"os-homedir": {
|
"os-homedir": {
|
||||||
"version": "1.0.2",
|
"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,
|
"dev": true,
|
||||||
"optional": true
|
"optional": true
|
||||||
},
|
},
|
||||||
"os-tmpdir": {
|
"os-tmpdir": {
|
||||||
"version": "1.0.2",
|
"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,
|
"dev": true,
|
||||||
"optional": true
|
"optional": true
|
||||||
},
|
},
|
||||||
"osenv": {
|
"osenv": {
|
||||||
"version": "0.1.5",
|
"version": "0.1.5",
|
||||||
"bundled": true,
|
"resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz",
|
||||||
|
"integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"optional": true,
|
"optional": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
@ -6499,19 +6559,22 @@
|
|||||||
},
|
},
|
||||||
"path-is-absolute": {
|
"path-is-absolute": {
|
||||||
"version": "1.0.1",
|
"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,
|
"dev": true,
|
||||||
"optional": true
|
"optional": true
|
||||||
},
|
},
|
||||||
"process-nextick-args": {
|
"process-nextick-args": {
|
||||||
"version": "2.0.0",
|
"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,
|
"dev": true,
|
||||||
"optional": true
|
"optional": true
|
||||||
},
|
},
|
||||||
"rc": {
|
"rc": {
|
||||||
"version": "1.2.7",
|
"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,
|
"dev": true,
|
||||||
"optional": true,
|
"optional": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
@ -6523,7 +6586,8 @@
|
|||||||
"dependencies": {
|
"dependencies": {
|
||||||
"minimist": {
|
"minimist": {
|
||||||
"version": "1.2.0",
|
"version": "1.2.0",
|
||||||
"bundled": true,
|
"resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
|
||||||
|
"integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"optional": true
|
"optional": true
|
||||||
}
|
}
|
||||||
@ -6531,7 +6595,8 @@
|
|||||||
},
|
},
|
||||||
"readable-stream": {
|
"readable-stream": {
|
||||||
"version": "2.3.6",
|
"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,
|
"dev": true,
|
||||||
"optional": true,
|
"optional": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
@ -6546,7 +6611,8 @@
|
|||||||
},
|
},
|
||||||
"rimraf": {
|
"rimraf": {
|
||||||
"version": "2.6.2",
|
"version": "2.6.2",
|
||||||
"bundled": true,
|
"resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz",
|
||||||
|
"integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"optional": true,
|
"optional": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
@ -6555,42 +6621,49 @@
|
|||||||
},
|
},
|
||||||
"safe-buffer": {
|
"safe-buffer": {
|
||||||
"version": "5.1.1",
|
"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
|
"dev": true
|
||||||
},
|
},
|
||||||
"safer-buffer": {
|
"safer-buffer": {
|
||||||
"version": "2.1.2",
|
"version": "2.1.2",
|
||||||
"bundled": true,
|
"resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
|
||||||
|
"integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"optional": true
|
"optional": true
|
||||||
},
|
},
|
||||||
"sax": {
|
"sax": {
|
||||||
"version": "1.2.4",
|
"version": "1.2.4",
|
||||||
"bundled": true,
|
"resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz",
|
||||||
|
"integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"optional": true
|
"optional": true
|
||||||
},
|
},
|
||||||
"semver": {
|
"semver": {
|
||||||
"version": "5.5.0",
|
"version": "5.5.0",
|
||||||
"bundled": true,
|
"resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz",
|
||||||
|
"integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"optional": true
|
"optional": true
|
||||||
},
|
},
|
||||||
"set-blocking": {
|
"set-blocking": {
|
||||||
"version": "2.0.0",
|
"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,
|
"dev": true,
|
||||||
"optional": true
|
"optional": true
|
||||||
},
|
},
|
||||||
"signal-exit": {
|
"signal-exit": {
|
||||||
"version": "3.0.2",
|
"version": "3.0.2",
|
||||||
"bundled": true,
|
"resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz",
|
||||||
|
"integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"optional": true
|
"optional": true
|
||||||
},
|
},
|
||||||
"string-width": {
|
"string-width": {
|
||||||
"version": "1.0.2",
|
"version": "1.0.2",
|
||||||
"bundled": true,
|
"resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
|
||||||
|
"integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"code-point-at": "^1.0.0",
|
"code-point-at": "^1.0.0",
|
||||||
@ -6600,7 +6673,8 @@
|
|||||||
},
|
},
|
||||||
"string_decoder": {
|
"string_decoder": {
|
||||||
"version": "1.1.1",
|
"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,
|
"dev": true,
|
||||||
"optional": true,
|
"optional": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
@ -6609,7 +6683,8 @@
|
|||||||
},
|
},
|
||||||
"strip-ansi": {
|
"strip-ansi": {
|
||||||
"version": "3.0.1",
|
"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,
|
"dev": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"ansi-regex": "^2.0.0"
|
"ansi-regex": "^2.0.0"
|
||||||
@ -6617,13 +6692,15 @@
|
|||||||
},
|
},
|
||||||
"strip-json-comments": {
|
"strip-json-comments": {
|
||||||
"version": "2.0.1",
|
"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,
|
"dev": true,
|
||||||
"optional": true
|
"optional": true
|
||||||
},
|
},
|
||||||
"tar": {
|
"tar": {
|
||||||
"version": "4.4.1",
|
"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,
|
"dev": true,
|
||||||
"optional": true,
|
"optional": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
@ -6638,13 +6715,15 @@
|
|||||||
},
|
},
|
||||||
"util-deprecate": {
|
"util-deprecate": {
|
||||||
"version": "1.0.2",
|
"version": "1.0.2",
|
||||||
"bundled": true,
|
"resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
|
||||||
|
"integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"optional": true
|
"optional": true
|
||||||
},
|
},
|
||||||
"wide-align": {
|
"wide-align": {
|
||||||
"version": "1.1.2",
|
"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,
|
"dev": true,
|
||||||
"optional": true,
|
"optional": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
@ -6653,12 +6732,14 @@
|
|||||||
},
|
},
|
||||||
"wrappy": {
|
"wrappy": {
|
||||||
"version": "1.0.2",
|
"version": "1.0.2",
|
||||||
"bundled": true,
|
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
|
||||||
|
"integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"yallist": {
|
"yallist": {
|
||||||
"version": "3.0.2",
|
"version": "3.0.2",
|
||||||
"bundled": true,
|
"resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.2.tgz",
|
||||||
|
"integrity": "sha1-hFK0u36Dx8GI2AQcGoN8dz1ti7k=",
|
||||||
"dev": true
|
"dev": true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -13992,8 +14073,7 @@
|
|||||||
"ultron": {
|
"ultron": {
|
||||||
"version": "1.1.1",
|
"version": "1.1.1",
|
||||||
"resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz",
|
"resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz",
|
||||||
"integrity": "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==",
|
"integrity": "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og=="
|
||||||
"dev": true
|
|
||||||
},
|
},
|
||||||
"union-value": {
|
"union-value": {
|
||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
@ -16005,7 +16085,6 @@
|
|||||||
"version": "3.3.3",
|
"version": "3.3.3",
|
||||||
"resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz",
|
"resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz",
|
||||||
"integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==",
|
"integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==",
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
"requires": {
|
||||||
"async-limiter": "~1.0.0",
|
"async-limiter": "~1.0.0",
|
||||||
"safe-buffer": "~5.1.0",
|
"safe-buffer": "~5.1.0",
|
||||||
|
@ -51,6 +51,7 @@
|
|||||||
"@ngrx/store-devtools": "^6.1.0",
|
"@ngrx/store-devtools": "^6.1.0",
|
||||||
"@ngstack/code-editor": "^0.4.3",
|
"@ngstack/code-editor": "^0.4.3",
|
||||||
"@ngx-translate/core": "^10.0.2",
|
"@ngx-translate/core": "^10.0.2",
|
||||||
|
"chrome-remote-interface": "^0.26.1",
|
||||||
"alfresco-js-api": "2.6.0-e0035744611f12f4f0067495615fa37ce392c810",
|
"alfresco-js-api": "2.6.0-e0035744611f12f4f0067495615fa37ce392c810",
|
||||||
"core-js": "^2.5.7",
|
"core-js": "^2.5.7",
|
||||||
"hammerjs": "2.0.8",
|
"hammerjs": "2.0.8",
|
||||||
|
@ -2,77 +2,124 @@
|
|||||||
// https://github.com/angular/protractor/blob/master/lib/config.ts
|
// https://github.com/angular/protractor/blob/master/lib/config.ts
|
||||||
|
|
||||||
const path = require('path');
|
const path = require('path');
|
||||||
const { SpecReporter } = require('jasmine-spec-reporter');
|
const {
|
||||||
|
SpecReporter
|
||||||
|
} = require('jasmine-spec-reporter');
|
||||||
const jasmineReporters = require('jasmine-reporters');
|
const jasmineReporters = require('jasmine-reporters');
|
||||||
|
const CDP = require('chrome-remote-interface');
|
||||||
|
|
||||||
const projectRoot = path.resolve(__dirname);
|
const projectRoot = path.resolve(__dirname);
|
||||||
|
const downloadFolder = `${projectRoot}/e2e-downloads`;
|
||||||
|
|
||||||
const width = 1366;
|
const width = 1366;
|
||||||
const height = 768;
|
const height = 768;
|
||||||
|
|
||||||
exports.config = {
|
var fs = require('fs');
|
||||||
allScriptsTimeout: 40000,
|
|
||||||
|
|
||||||
specs: [
|
function rmDir(dirPath) {
|
||||||
'./e2e/suites/authentication/*.test.ts',
|
try {
|
||||||
'./e2e/suites/list-views/*.test.ts',
|
var files = fs.readdirSync(dirPath);
|
||||||
'./e2e/suites/application/*.test.ts',
|
} catch (e) {
|
||||||
'./e2e/suites/navigation/*.test.ts',
|
return;
|
||||||
'./e2e/suites/pagination/*.test.ts',
|
}
|
||||||
'./e2e/suites/actions/*.test.ts',
|
if (files.length > 0)
|
||||||
'./e2e/suites/viewer/*.test.ts',
|
for (var i = 0; i < files.length; i++) {
|
||||||
|
var filePath = dirPath + '/' + files[i];
|
||||||
'./e2e/suites/extensions/*.test.ts'
|
if (fs.statSync(filePath).isFile())
|
||||||
],
|
fs.unlinkSync(filePath);
|
||||||
|
else
|
||||||
capabilities: {
|
rmDir(filePath);
|
||||||
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
|
|
||||||
}));
|
|
||||||
}
|
}
|
||||||
|
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)
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user