diff --git a/cspell.json b/cspell.json index b63c3393a..ecc4c0ed8 100644 --- a/cspell.json +++ b/cspell.json @@ -56,8 +56,7 @@ "keycodes", "denysvuika", "submenu", - "submenus", - "simpletask" + "submenus" ], "dictionaries": ["html", "en-gb", "en_US"] } diff --git a/e2e/components/data-table/data-table.ts b/e2e/components/data-table/data-table.ts index 6907c0fb0..c78cdca49 100755 --- a/e2e/components/data-table/data-table.ts +++ b/e2e/components/data-table/data-table.ts @@ -191,10 +191,14 @@ export class DataTable extends Component { // Navigation/selection methods async doubleClickOnRowByName(name: string) { - const item = this.getRowFirstCell(name); - await Utils.waitUntilElementClickable(item); - await browser.actions().mouseMove(item).perform(); - await browser.actions().click().click().perform(); + try { + const item = this.getRowFirstCell(name); + await Utils.waitUntilElementClickable(item); + await browser.actions().mouseMove(item).perform(); + await browser.actions().click().click().perform(); + } catch (error) { + console.log('--- catch: doubleClickOnRowByName', error); + } } async selectItem(name: string) { @@ -225,7 +229,7 @@ export class DataTable extends Component { const count = await this.countSelectedRows(); if (count !== 0) { await browser.refresh(); - await this.waitForHeader(); + await this.wait(); } } catch (error) { console.log('------ clearSelection catch : ', error); @@ -238,7 +242,7 @@ export class DataTable extends Component { } async rightClickOnMultipleSelection() { - await this.waitForHeader(); + await this.wait(); const itemFromSelection = this.getSelectedRows().get(0); await browser.actions().click(itemFromSelection, protractor.Button.RIGHT).perform(); } diff --git a/e2e/components/dialog/create-edit-folder-dialog.ts b/e2e/components/dialog/create-edit-folder-dialog.ts index c2a29c2a0..28095d859 100755 --- a/e2e/components/dialog/create-edit-folder-dialog.ts +++ b/e2e/components/dialog/create-edit-folder-dialog.ts @@ -23,7 +23,7 @@ * along with Alfresco. If not, see . */ -import { ElementFinder, by, browser, protractor, ExpectedConditions as EC, promise } from 'protractor'; +import { ElementFinder, by, browser, protractor, ExpectedConditions as EC } from 'protractor'; import { BROWSER_WAIT_TIMEOUT } from '../../configs'; import { Component } from '../component'; import { Utils } from '../../utilities/utils'; diff --git a/e2e/components/search/search-input.ts b/e2e/components/search/search-input.ts index 5bf99c165..0698fa11a 100755 --- a/e2e/components/search/search-input.ts +++ b/e2e/components/search/search-input.ts @@ -23,9 +23,10 @@ * along with Alfresco. If not, see . */ -import { ElementFinder, browser, by, until, protractor } from 'protractor'; +import { ElementFinder, browser, by, until, protractor, ExpectedConditions as EC } from 'protractor'; import { BROWSER_WAIT_TIMEOUT } from '../../configs'; import { Component } from '../component'; +import { Utils } from '../../utilities/utils'; export class SearchInput extends Component { private static selectors = { @@ -35,27 +36,36 @@ export class SearchInput extends Component { searchControl: '.app-search-control', searchInput: 'app-control-input', searchOptionsArea: 'search-options', - optionCheckbox: '.mat-checkbox' + optionCheckbox: '.mat-checkbox', + clearButton: '.app-clear-icon' }; searchButton: ElementFinder = this.component.element(by.css(SearchInput.selectors.searchButton)); searchContainer: ElementFinder = browser.element(by.css(SearchInput.selectors.searchContainer)); + searchControl: ElementFinder = browser.element(by.css(SearchInput.selectors.searchControl)); searchBar: ElementFinder = browser.element(by.id(SearchInput.selectors.searchInput)); searchOptionsArea: ElementFinder = browser.element(by.id(SearchInput.selectors.searchOptionsArea)); searchFilesOption: ElementFinder = this.searchOptionsArea.element(by.cssContainingText(SearchInput.selectors.optionCheckbox, 'Files')); searchFoldersOption: ElementFinder = this.searchOptionsArea.element(by.cssContainingText(SearchInput.selectors.optionCheckbox, 'Folders')); searchLibrariesOption: ElementFinder = this.searchOptionsArea.element(by.cssContainingText(SearchInput.selectors.optionCheckbox, 'Libraries')); + clearSearchButton: ElementFinder = this.searchContainer.$(SearchInput.selectors.clearButton); constructor(ancestor?: ElementFinder) { super(SearchInput.selectors.root, ancestor); } + async waitForSearchControl() { + return await browser.wait(EC.presenceOf(this.searchControl), BROWSER_WAIT_TIMEOUT, '--- timeout waitForSearchControl ---'); + } + async isSearchContainerDisplayed() { return (await this.searchContainer.isDisplayed()) && (await this.searchButton.isDisplayed()); } async clickSearchButton() { + await Utils.waitUntilElementClickable(this.searchButton); await this.searchButton.click(); + await this.waitForSearchControl(); } async isOptionsAreaDisplayed() { @@ -117,6 +127,16 @@ export class SearchInput extends Component { } } + async isClearSearchButtonPresent() { + return await browser.isElementPresent(this.clearSearchButton); + } + + async clickClearSearchButton() { + if (await this.isClearSearchButtonPresent()) { + return await this.clearSearchButton.click(); + } + } + async checkOnlyFiles() { await this.clearOptions(); await this.clickFilesOption(); @@ -139,8 +159,14 @@ export class SearchInput extends Component { } async searchFor(text: string) { + await browser.wait(EC.elementToBeClickable(this.searchBar), BROWSER_WAIT_TIMEOUT, '---- timeout waiting for searchBar to be clickable'); await this.searchBar.clear(); await this.searchBar.sendKeys(text); await this.searchBar.sendKeys(protractor.Key.ENTER); } + + async searchForTextAndCloseSearchOptions(text: string) { + await this.searchFor(text); + await Utils.pressEscape(); + } } diff --git a/e2e/components/sidenav/sidenav.ts b/e2e/components/sidenav/sidenav.ts index 145c772e4..c363c47fb 100755 --- a/e2e/components/sidenav/sidenav.ts +++ b/e2e/components/sidenav/sidenav.ts @@ -36,15 +36,34 @@ export class Sidenav extends Component { label: '.item--label', expansion_panel: ".mat-expansion-panel-header", expansion_panel_content: ".mat-expansion-panel-body", - active: 'item--active', - activeLink: '.item--active', - newButton: '[data-automation-id="create-button"]' + active: 'mat-accent', + activeLink: '.mat-accent', + activeChild: 'item--active', + newButton: '[data-automation-id="create-button"]', + + personalFiles: `[id='app.navbar.personalFiles']`, + fileLibraries: `[id='app.navbar.libraries.menu']`, + myLibraries: `[id='app.navbar.libraries.files']`, + favoriteLibraries: `[id='app.navbar.libraries.favorite']`, + shared: `[id='app.navbar.shared']`, + recentFiles: `[id='app.navbar.recentFiles']`, + favorites: `[id='app.navbar.favorites']`, + trash: `[id='app.navbar.trashcan']` }; links: ElementArrayFinder = this.component.all(by.css(Sidenav.selectors.link)); activeLink: ElementFinder = this.component.element(by.css(Sidenav.selectors.activeLink)); newButton: ElementArrayFinder = this.component.all(by.css(Sidenav.selectors.newButton)); + personalFiles: ElementFinder = this.component.element(by.css(Sidenav.selectors.personalFiles)); + fileLibraries: ElementFinder = this.component.element(by.css(Sidenav.selectors.fileLibraries)); + myLibraries: ElementFinder = this.component.element(by.css(Sidenav.selectors.myLibraries)); + favoriteLibraries: ElementFinder = this.component.element(by.css(Sidenav.selectors.favoriteLibraries)); + shared: ElementFinder = this.component.element(by.css(Sidenav.selectors.shared)); + recentFiles: ElementFinder = this.component.element(by.css(Sidenav.selectors.recentFiles)); + favorites: ElementFinder = this.component.element(by.css(Sidenav.selectors.favorites)); + trash: ElementFinder = this.component.element(by.css(Sidenav.selectors.trash)); + menu: Menu = new Menu(); constructor(ancestor?: ElementFinder) { @@ -92,7 +111,7 @@ export class Sidenav extends Component { async childIsActive(name: string) { const childClass = await this.getLinkLabel(name).element(by.css('span')).getAttribute('class'); - return childClass.includes(Sidenav.selectors.active); + return childClass.includes(Sidenav.selectors.activeChild); } getLink(name: string) { @@ -100,7 +119,17 @@ export class Sidenav extends Component { } getLinkLabel(name: string) { - return this.component.element(by.cssContainingText(Sidenav.selectors.label, name)); + switch (name) { + case 'Personal Files': return this.personalFiles; + case 'File Libraries': return this.fileLibraries; + case 'My Libraries': return this.myLibraries; + case 'Favorite Libraries': return this.favoriteLibraries; + case 'Shared': return this.shared; + case 'Recent Files': return this.recentFiles; + case 'Favorites': return this.favorites; + case 'Trash': return this.trash; + default: return this.personalFiles; + } } getActiveLink() { @@ -111,14 +140,14 @@ export class Sidenav extends Component { return await this.getLink(name).getAttribute('title'); } - async navigateToLink(name: string) { + async clickLink(name: string) { try{ const link = this.getLinkLabel(name); await Utils.waitUntilElementClickable(link); return await link.click(); } catch (e){ - console.log('---- sidebar navigation catch navigateToLink: ', e); + console.log('---- sidebar navigation catch clickLink: ', e); } } diff --git a/e2e/components/toolbar/toolbar.ts b/e2e/components/toolbar/toolbar.ts index db0e975f8..44a669962 100755 --- a/e2e/components/toolbar/toolbar.ts +++ b/e2e/components/toolbar/toolbar.ts @@ -23,9 +23,10 @@ * along with Alfresco. If not, see . */ -import { ElementFinder, ElementArrayFinder, by, protractor, browser } from 'protractor'; +import { ElementFinder, ElementArrayFinder, by, browser } from 'protractor'; import { Menu } from '../menu/menu'; import { Component } from '../component'; +import { Utils } from '../../utilities/utils'; export class Toolbar extends Component { private static selectors = { @@ -95,7 +96,7 @@ export class Toolbar extends Component { } async closeMoreMenu() { - await browser.actions().sendKeys(protractor.Key.ESCAPE).perform(); + await Utils.pressEscape(); } async getButtonTooltip(button: ElementFinder) { @@ -150,6 +151,10 @@ export class Toolbar extends Component { } + async clickView() { + return await this.viewButton.click(); + } + async clickEdit() { return await this.editButton.click(); } diff --git a/e2e/configs.ts b/e2e/configs.ts index 18f23a885..30a79b28f 100755 --- a/e2e/configs.ts +++ b/e2e/configs.ts @@ -69,10 +69,15 @@ export const SIDEBAR_LABELS = { // Page titles export const PAGE_TITLES = { - VIEWER: 'Preview', - SEARCH: 'Search Results', + PERSONAL_FILES: 'Personal Files', MY_LIBRARIES: 'My Libraries', - FAVORITE_LIBRARIES: 'Favorite Libraries' + FAVORITE_LIBRARIES: 'Favorite Libraries', + SHARED_FILES: 'Shared', + RECENT_FILES: 'Recent Files', + FAVORITES: 'Favorites', + TRASH: 'Trash', + VIEWER: 'Preview', + SEARCH: 'Search Results' }; // Site visibility diff --git a/e2e/pages/browsing-page.ts b/e2e/pages/browsing-page.ts index 41267da43..69f4bddbb 100755 --- a/e2e/pages/browsing-page.ts +++ b/e2e/pages/browsing-page.ts @@ -45,76 +45,89 @@ export class BrowsingPage extends Page { // helper methods - async clickPersonalFilesAndWait() { - await this.sidenav.navigateToLink(SIDEBAR_LABELS.PERSONAL_FILES); - await this.dataTable.waitForHeader(); - } - async clickPersonalFiles() { - await this.sidenav.navigateToLink(SIDEBAR_LABELS.PERSONAL_FILES); + await this.sidenav.clickLink(SIDEBAR_LABELS.PERSONAL_FILES); } - - async clickFileLibrariesAndWait() { - await this.sidenav.expandFileLibraries(); - await this.sidenav.navigateToLink(SIDEBAR_LABELS.MY_LIBRARIES); + async clickPersonalFilesAndWait() { + await this.clickPersonalFiles(); await this.dataTable.waitForHeader(); } + async clickFileLibraries() { - await this.sidenav.expandFileLibraries(); - await this.sidenav.navigateToLink(SIDEBAR_LABELS.MY_LIBRARIES); + await this.sidenav.clickLink(SIDEBAR_LABELS.FILE_LIBRARIES); } - async goToFavoriteLibraries() { - await this.sidenav.expandFileLibraries(); - await this.sidenav.navigateToLink(SIDEBAR_LABELS.FAVORITE_LIBRARIES); + async clickFileLibrariesAndWait() { + await this.clickFileLibraries(); + await this.dataTable.waitForHeader(); } + + async goToFavoriteLibraries() { + if ( !(await this.sidenav.isFileLibrariesMenuExpanded()) ) { + await this.sidenav.expandFileLibraries(); + } + await this.sidenav.clickLink(SIDEBAR_LABELS.FAVORITE_LIBRARIES); + } + + async goToFavoriteLibrariesAndWait() { + await this.goToFavoriteLibraries(); + await this.dataTable.waitForHeader(); + } + + async goToMyLibraries() { if ( !(await this.sidenav.isFileLibrariesMenuExpanded()) ) { await this.sidenav.expandFileLibraries(); } - await this.sidenav.navigateToLink(SIDEBAR_LABELS.MY_LIBRARIES); + await this.sidenav.clickLink(SIDEBAR_LABELS.MY_LIBRARIES); + } + + async goToMyLibrariesAndWait() { + await this.goToMyLibraries(); + await this.dataTable.waitForHeader(); + } + + + async clickRecentFiles() { + await this.sidenav.clickLink(SIDEBAR_LABELS.RECENT_FILES); } async clickRecentFilesAndWait() { - await this.sidenav.navigateToLink(SIDEBAR_LABELS.RECENT_FILES); + await this.clickRecentFiles(); await this.dataTable.waitForHeader(); } - async clickRecentFiles() { - await this.sidenav.navigateToLink(SIDEBAR_LABELS.RECENT_FILES); - } - - - async clickSharedFilesAndWait() { - await this.sidenav.navigateToLink(SIDEBAR_LABELS.SHARED_FILES); - await this.dataTable.waitForHeader(); - } async clickSharedFiles() { - await this.sidenav.navigateToLink(SIDEBAR_LABELS.SHARED_FILES); + await this.sidenav.clickLink(SIDEBAR_LABELS.SHARED_FILES); } - - async clickFavoritesAndWait() { - await this.sidenav.navigateToLink(SIDEBAR_LABELS.FAVORITES); + async clickSharedFilesAndWait() { + await this.clickSharedFiles(); await this.dataTable.waitForHeader(); } + async clickFavorites() { - await this.sidenav.navigateToLink(SIDEBAR_LABELS.FAVORITES); + await this.sidenav.clickLink(SIDEBAR_LABELS.FAVORITES); } - - async clickTrashAndWait() { - await this.sidenav.navigateToLink(SIDEBAR_LABELS.TRASH); + async clickFavoritesAndWait() { + await this.clickFavorites(); await this.dataTable.waitForHeader(); } + async clickTrash() { - await this.sidenav.navigateToLink(SIDEBAR_LABELS.TRASH); + await this.sidenav.clickLink(SIDEBAR_LABELS.TRASH); + } + + async clickTrashAndWait() { + await this.clickTrash(); + await this.dataTable.waitForHeader(); } } diff --git a/e2e/pages/page.ts b/e2e/pages/page.ts index 8eb8bc093..f6bcb18de 100755 --- a/e2e/pages/page.ts +++ b/e2e/pages/page.ts @@ -27,7 +27,7 @@ import { browser, by, ElementFinder, ExpectedConditions as EC, until } from 'pro import { BROWSER_WAIT_TIMEOUT, USE_HASH_STRATEGY } from './../configs'; export abstract class Page { - private static selectors = { + protected static locators = { app: 'app-root', layout: 'app-layout', overlay: '.cdk-overlay-container', @@ -41,17 +41,17 @@ export abstract class Page { genericErrorTitle: '.generic-error__title' }; - app: ElementFinder = browser.element(by.css(Page.selectors.app)); - layout: ElementFinder = browser.element(by.css(Page.selectors.layout)); - overlay: ElementFinder = browser.element(by.css(Page.selectors.overlay)); - snackBar: ElementFinder = browser.element(by.css(Page.selectors.snackBar)); - dialogContainer: ElementFinder = browser.element(by.css(Page.selectors.dialogContainer)); - snackBarContainer: ElementFinder = browser.element(by.css(Page.selectors.snackBarContainer)); - snackBarAction: ElementFinder = browser.element(by.css(Page.selectors.snackBarAction)); + app: ElementFinder = browser.element(by.css(Page.locators.app)); + layout: ElementFinder = browser.element(by.css(Page.locators.layout)); + overlay: ElementFinder = browser.element(by.css(Page.locators.overlay)); + snackBar: ElementFinder = browser.element(by.css(Page.locators.snackBar)); + dialogContainer: ElementFinder = browser.element(by.css(Page.locators.dialogContainer)); + snackBarContainer: ElementFinder = browser.element(by.css(Page.locators.snackBarContainer)); + snackBarAction: ElementFinder = browser.element(by.css(Page.locators.snackBarAction)); - genericError: ElementFinder = browser.element(by.css(Page.selectors.genericError)); - genericErrorIcon: ElementFinder = browser.element(by.css(Page.selectors.genericErrorIcon)); - genericErrorTitle: ElementFinder = browser.element(by.css(Page.selectors.genericErrorTitle)); + genericError: ElementFinder = browser.element(by.css(Page.locators.genericError)); + genericErrorIcon: ElementFinder = browser.element(by.css(Page.locators.genericErrorIcon)); + genericErrorTitle: ElementFinder = browser.element(by.css(Page.locators.genericErrorTitle)); constructor(public url: string = '') {} diff --git a/e2e/suites/actions/context-menu-multiple-selection.test.ts b/e2e/suites/actions/context-menu-multiple-selection.test.ts index 12e05aeac..19045b5d4 100755 --- a/e2e/suites/actions/context-menu-multiple-selection.test.ts +++ b/e2e/suites/actions/context-menu-multiple-selection.test.ts @@ -23,7 +23,7 @@ * along with Alfresco. If not, see . */ -import { LoginPage, BrowsingPage } from '../../pages/pages'; +import { LoginPage, BrowsingPage, SearchResultsPage } from '../../pages/pages'; import { SITE_VISIBILITY } from '../../configs'; import { RepoClient } from '../../utilities/repo-client/repo-client'; import { Utils } from '../../utilities/utils'; @@ -31,11 +31,11 @@ import { Utils } from '../../utilities/utils'; describe('Context menu actions - multiple selection : ', () => { const username = `user-${Utils.random()}`; - const file1 = `file1-${Utils.random()}.txt`; let file1Id; - const file2 = `file2-${Utils.random()}.txt`; let file2Id; + const file1 = `my-file1-${Utils.random()}.txt`; let file1Id; + const file2 = `my-file2-${Utils.random()}.txt`; let file2Id; - const folder1 = `folder1-${Utils.random()}`; let folder1Id; - const folder2 = `folder2-${Utils.random()}`; let folder2Id; + const folder1 = `my-folder1-${Utils.random()}`; let folder1Id; + const folder2 = `my-folder2-${Utils.random()}`; let folder2Id; const fileInTrash1 = `deletedFile1-${Utils.random()}.txt`; let fileInTrash1Id; const fileInTrash2 = `deletedFile2-${Utils.random()}.txt`; let fileInTrash2Id; @@ -43,10 +43,10 @@ describe('Context menu actions - multiple selection : ', () => { const folderInTrash2 = `deletedFolder2-${Utils.random()}`; let folderInTrash2Id; const siteName = `site-${Utils.random()}`; - const file1Site = `file1-${Utils.random()}.txt`; - const file2Site = `file2-${Utils.random()}.txt`; - const folder1Site = `folder1-${Utils.random()}`; - const folder2Site = `folder2-${Utils.random()}`; + const file1Site = `my-inSite-file1-${Utils.random()}.txt`; + const file2Site = `my-inSite-file2-${Utils.random()}.txt`; + const folder1Site = `my-inSite-folder1-${Utils.random()}`; + const folder2Site = `my-inSite-folder2-${Utils.random()}`; const apis = { admin: new RepoClient(), @@ -57,6 +57,8 @@ describe('Context menu actions - multiple selection : ', () => { const page = new BrowsingPage(); const { dataTable } = page; const contextMenu = dataTable.menu; + const searchResultsPage = new SearchResultsPage(); + const { searchInput } = searchResultsPage.header; beforeAll(async (done) => { await apis.admin.people.createUser({ username }); @@ -70,7 +72,7 @@ describe('Context menu actions - multiple selection : ', () => { await apis.user.nodes.createFile(file1Site, docLibId); await apis.user.nodes.createFile(file2Site, docLibId); await apis.user.nodes.createFolder(folder1Site, docLibId); - await apis.user.nodes.createFile(folder2Site, docLibId); + await apis.user.nodes.createFolder(folder2Site, docLibId); await apis.user.shared.shareFilesByIds([ file1Id, file2Id ]); await apis.user.shared.waitForApi({ expect: 2 }); @@ -179,10 +181,9 @@ describe('Context menu actions - multiple selection : ', () => { describe('on File Libraries', () => { beforeEach(async (done) => { await Utils.pressEscape(); - await page.clickFileLibrariesAndWait(); + await page.goToMyLibrariesAndWait(); await dataTable.doubleClickOnRowByName(siteName); await dataTable.waitForHeader(); - await dataTable.clearSelection(); done(); }); @@ -382,4 +383,63 @@ describe('Context menu actions - multiple selection : ', () => { expect(await contextMenu.isFavoritePresent()).toBe(false, `Favorite is displayed`); }); }); + + describe('on Search Results', () => { + beforeEach(async (done) => { + await Utils.pressEscape(); + await page.clickPersonalFilesAndWait(); + done(); + }); + + it('correct actions appear when multiple files are selected - [C291831]', async () => { + await searchInput.clickSearchButton(); + await searchInput.checkOnlyFiles(); + await searchInput.searchForTextAndCloseSearchOptions('my-inSite-file'); + await dataTable.selectMultipleItems([ file1Site, file2Site ]); + await dataTable.rightClickOnMultipleSelection(); + + expect(await contextMenu.isViewPresent()).toBe(false, 'View is displayed'); + expect(await contextMenu.isDownloadPresent()).toBe(true, 'Download is not displayed'); + expect(await contextMenu.isEditPresent()).toBe(false, 'Edit is displayed'); + expect(await contextMenu.isCopyPresent()).toBe(true, `Copy is not displayed`); + expect(await contextMenu.isDeletePresent()).toBe(false, `Delete is displayed`); + expect(await contextMenu.isMovePresent()).toBe(false, `Move is displayed`); + expect(await contextMenu.isFavoritePresent()).toBe(true, `Favorite is not displayed`); + expect(await contextMenu.isManagePermissionsPresent()).toBe(true, `Permissions is not displayed`); + }); + + it('correct actions appear when multiple folders are selected - [C291832]', async () => { + await searchInput.clickSearchButton(); + await searchInput.checkOnlyFolders(); + await searchInput.searchForTextAndCloseSearchOptions('my-inSite-folder'); + await dataTable.selectMultipleItems([ folder1Site, folder2Site ]); + await dataTable.rightClickOnMultipleSelection(); + + expect(await contextMenu.isViewPresent()).toBe(false, 'View is displayed'); + expect(await contextMenu.isDownloadPresent()).toBe(true, 'Download is not displayed'); + expect(await contextMenu.isEditPresent()).toBe(false, 'Edit is displayed'); + expect(await contextMenu.isCopyPresent()).toBe(true, `Copy is not displayed`); + expect(await contextMenu.isDeletePresent()).toBe(false, `Delete is displayed`); + expect(await contextMenu.isMovePresent()).toBe(false, `Move is displayed`); + expect(await contextMenu.isFavoritePresent()).toBe(true, `Favorite is not displayed`); + expect(await contextMenu.isManagePermissionsPresent()).toBe(true, `Permissions is not displayed`); + }); + + it('correct actions appear when both files and folders are selected - [C291833]', async () => { + await searchInput.clickSearchButton(); + await searchInput.checkFilesAndFolders(); + await searchInput.searchForTextAndCloseSearchOptions('my-inSite-f'); + await dataTable.selectMultipleItems([ file1Site, file2Site, folder1Site, folder2Site ]); + await dataTable.rightClickOnMultipleSelection(); + + expect(await contextMenu.isViewPresent()).toBe(false, 'View is displayed'); + expect(await contextMenu.isDownloadPresent()).toBe(true, 'Download is not displayed'); + expect(await contextMenu.isEditPresent()).toBe(false, 'Edit is displayed'); + expect(await contextMenu.isCopyPresent()).toBe(true, `Copy is not displayed`); + expect(await contextMenu.isDeletePresent()).toBe(false, `Delete is displayed`); + expect(await contextMenu.isMovePresent()).toBe(false, `Move is displayed`); + expect(await contextMenu.isFavoritePresent()).toBe(true, `Favorite is not displayed`); + expect(await contextMenu.isManagePermissionsPresent()).toBe(true, `Permissions is not displayed`); + }); + }); }); diff --git a/e2e/suites/actions/context-menu-single-selection.test.ts b/e2e/suites/actions/context-menu-single-selection.test.ts index 1fc3f77c2..3e9c084a7 100755 --- a/e2e/suites/actions/context-menu-single-selection.test.ts +++ b/e2e/suites/actions/context-menu-single-selection.test.ts @@ -23,7 +23,7 @@ * along with Alfresco. If not, see . */ -import { LoginPage, BrowsingPage } from '../../pages/pages'; +import { LoginPage, BrowsingPage, SearchResultsPage } from '../../pages/pages'; import { SITE_VISIBILITY } from '../../configs'; import { RepoClient } from '../../utilities/repo-client/repo-client'; import { Utils } from '../../utilities/utils'; @@ -52,6 +52,8 @@ describe('Context menu actions - single selection : ', () => { const page = new BrowsingPage(); const { dataTable } = page; const contextMenu = dataTable.menu; + const searchResultsPage = new SearchResultsPage(); + const { searchInput } = searchResultsPage.header; beforeAll(async (done) => { await apis.admin.people.createUser({ username }); @@ -82,6 +84,10 @@ describe('Context menu actions - single selection : ', () => { await apis.user.favorites.addFavoriteById('site', adminModerated); await apis.user.sites.requestToJoin(adminModerated); + await apis.user.queries.waitForSites(siteName, { expect: 1 }); + await apis.user.queries.waitForSites(adminPublic, { expect: 1 }); + await apis.user.queries.waitForSites(adminModerated, { expect: 1 }); + await loginPage.loginWith(username); done(); }); @@ -186,7 +192,7 @@ describe('Context menu actions - single selection : ', () => { describe('on File Libraries', () => { beforeEach(async (done) => { await Utils.pressEscape(); - await page.clickFileLibrariesAndWait(); + await page.goToMyLibrariesAndWait(); await dataTable.doubleClickOnRowByName(siteName); await dataTable.waitForHeader(); done(); @@ -231,8 +237,8 @@ describe('Context menu actions - single selection : ', () => { done(); }); - it('Available actions when a library is selected - My Libraries - [C290080]', async () => { - await page.goToMyLibraries(); + it('Available actions for a library - My Libraries - [C290080]', async () => { + await page.goToMyLibrariesAndWait(); await dataTable.rightClickOnItem(siteName); expect(await dataTable.hasContextMenu()).toBe(true, 'Context menu is not displayed'); @@ -241,8 +247,8 @@ describe('Context menu actions - single selection : ', () => { expect(await contextMenu.isFavoritePresent()).toBe(true, `Favorite is not displayed for ${siteName}`); }); - it('Available actions when a library is selected - Favorite Libraries - user is a member - [C290081]', async () => { - await page.goToFavoriteLibraries(); + it('Available actions for a library - Favorite Libraries - user is a member - [C290081]', async () => { + await page.goToFavoriteLibrariesAndWait(); await dataTable.rightClickOnItem(siteName); expect(await dataTable.hasContextMenu()).toBe(true, 'Context menu is not displayed'); @@ -251,8 +257,8 @@ describe('Context menu actions - single selection : ', () => { expect(await contextMenu.isFavoritePresent()).toBe(true, `Favorite is not displayed for ${siteName}`); }); - it('Available actions when a library is selected - Favorite Libraries - user is not a member - [C290082]', async () => { - await page.goToFavoriteLibraries(); + it('Available actions for a library - Favorite Libraries - user is not a member - [C290082]', async () => { + await page.goToFavoriteLibrariesAndWait(); await dataTable.rightClickOnItem(adminPublic); expect(await dataTable.hasContextMenu()).toBe(true, 'Context menu is not displayed'); @@ -261,8 +267,44 @@ describe('Context menu actions - single selection : ', () => { expect(await contextMenu.isFavoritePresent()).toBe(true, `Favorite is not displayed for ${adminPublic}`); }); - it('Available actions when a library is selected - Favorite Libraries - user requested to join - [C290089]', async () => { - await page.goToFavoriteLibraries(); + it('Available actions for a moderated library - Favorite Libraries - user requested to join - [C290089]', async () => { + await page.goToFavoriteLibrariesAndWait(); + await dataTable.rightClickOnItem(adminModerated); + + expect(await dataTable.hasContextMenu()).toBe(true, 'Context menu is not displayed'); + expect(await contextMenu.isCancelJoinPresent()).toBe(true, `Cancel join is not displayed for ${adminModerated}`); + expect(await contextMenu.isDeletePresent()).toBe(true, `Delete is not displayed for ${adminModerated}`); + expect(await contextMenu.isFavoritePresent()).toBe(true, `Favorite is not displayed for ${adminModerated}`); + }); + + it('Available actions for a library - Search Results - user is a member - [C291812]', async () => { + await searchInput.clickSearchButton(); + await searchInput.checkLibraries(); + await searchInput.searchForTextAndCloseSearchOptions(siteName); + await dataTable.rightClickOnItem(siteName); + + expect(await dataTable.hasContextMenu()).toBe(true, 'Context menu is not displayed'); + expect(await contextMenu.isLeaveLibraryPresent()).toBe(true, `Leave is not displayed for ${siteName}`); + expect(await contextMenu.isDeletePresent()).toBe(true, `Delete is not displayed for ${siteName}`); + expect(await contextMenu.isFavoritePresent()).toBe(true, `Favorite is not displayed for ${siteName}`); + }); + + it('Available actions for a library - Search Results - user is not a member - [C291813]', async () => { + await searchInput.clickSearchButton(); + await searchInput.checkLibraries(); + await searchInput.searchForTextAndCloseSearchOptions(adminPublic); + await dataTable.rightClickOnItem(adminPublic); + + expect(await dataTable.hasContextMenu()).toBe(true, 'Context menu is not displayed'); + expect(await contextMenu.isJoinLibraryPresent()).toBe(true, `Join is not displayed for ${adminPublic}`); + expect(await contextMenu.isDeletePresent()).toBe(true, `Delete is not displayed for ${adminPublic}`); + expect(await contextMenu.isFavoritePresent()).toBe(true, `Favorite is not displayed for ${adminPublic}`); + }); + + it('Available actions for a moderated library - Search Results - user requested to join - [C291814]', async () => { + await searchInput.clickSearchButton(); + await searchInput.checkLibraries(); + await searchInput.searchForTextAndCloseSearchOptions(adminModerated); await dataTable.rightClickOnItem(adminModerated); expect(await dataTable.hasContextMenu()).toBe(true, 'Context menu is not displayed'); @@ -374,15 +416,15 @@ describe('Context menu actions - single selection : ', () => { expect(await contextMenu.isPermanentDeletePresent()) .toBe(true, `Permanently delete is not displayed for ${fileInTrash}`); expect(await contextMenu.isRestorePresent()).toBe(true, `Restore is not displayed for ${fileInTrash}`); - expect(await contextMenu.isDownloadPresent()).toBe(false, `Download is not displayed for ${fileInTrash}`); - expect(await contextMenu.isViewPresent()).toBe(false, `View is not displayed for ${fileInTrash}`); - expect(await contextMenu.isFavoritePresent()).toBe(false, `Favorite is not displayed for ${fileInTrash}`); - expect(await contextMenu.isCopyPresent()).toBe(false, `Copy is not displayed for ${fileInTrash}`); - expect(await contextMenu.isMovePresent()).toBe(false, `Move is not displayed for ${fileInTrash}`); - expect(await contextMenu.isDeletePresent()).toBe(false, `Delete is not displayed for ${fileInTrash}`); - expect(await contextMenu.isSharePresent()).toBe(false, `Share is not displayed for ${fileInTrash}`); + expect(await contextMenu.isDownloadPresent()).toBe(false, `Download is displayed for ${fileInTrash}`); + expect(await contextMenu.isViewPresent()).toBe(false, `View is displayed for ${fileInTrash}`); + expect(await contextMenu.isFavoritePresent()).toBe(false, `Favorite is displayed for ${fileInTrash}`); + expect(await contextMenu.isCopyPresent()).toBe(false, `Copy is displayed for ${fileInTrash}`); + expect(await contextMenu.isMovePresent()).toBe(false, `Move is displayed for ${fileInTrash}`); + expect(await contextMenu.isDeletePresent()).toBe(false, `Delete is displayed for ${fileInTrash}`); + expect(await contextMenu.isSharePresent()).toBe(false, `Share is displayed for ${fileInTrash}`); expect(await contextMenu.isManageVersionsPresent()) - .toBe(false, `Manage Versions is not displayed for ${fileInTrash}`); + .toBe(false, `Manage Versions is displayed for ${fileInTrash}`); expect(await contextMenu.isEditPresent()).toBe(false, `Edit is displayed for ${fileInTrash}`); expect(await contextMenu.isViewDetailsPresent()).toBe(false, `View details is displayed for ${fileInTrash}`); }); @@ -393,17 +435,62 @@ describe('Context menu actions - single selection : ', () => { expect(await contextMenu.isPermanentDeletePresent()) .toBe(true, `Permanently delete is not displayed for ${folderInTrash}`); expect(await contextMenu.isRestorePresent()).toBe(true, `Restore is not displayed for ${folderInTrash}`); - expect(await contextMenu.isDownloadPresent()).toBe(false, `Download is not displayed for ${folderInTrash}`); - expect(await contextMenu.isViewPresent()).toBe(false, `View is not displayed for ${folderInTrash}`); - expect(await contextMenu.isFavoritePresent()).toBe(false, `Favorite is not displayed for ${folderInTrash}`); - expect(await contextMenu.isCopyPresent()).toBe(false, `Copy is not displayed for ${folderInTrash}`); - expect(await contextMenu.isMovePresent()).toBe(false, `Move is not displayed for ${folderInTrash}`); - expect(await contextMenu.isDeletePresent()).toBe(false, `Delete is not displayed for ${folderInTrash}`); - expect(await contextMenu.isSharePresent()).toBe(false, `Share is not displayed for ${folderInTrash}`); + expect(await contextMenu.isDownloadPresent()).toBe(false, `Download is displayed for ${folderInTrash}`); + expect(await contextMenu.isViewPresent()).toBe(false, `View is displayed for ${folderInTrash}`); + expect(await contextMenu.isFavoritePresent()).toBe(false, `Favorite is displayed for ${folderInTrash}`); + expect(await contextMenu.isCopyPresent()).toBe(false, `Copy is displayed for ${folderInTrash}`); + expect(await contextMenu.isMovePresent()).toBe(false, `Move is displayed for ${folderInTrash}`); + expect(await contextMenu.isDeletePresent()).toBe(false, `Delete is displayed for ${folderInTrash}`); + expect(await contextMenu.isSharePresent()).toBe(false, `Share is displayed for ${folderInTrash}`); expect(await contextMenu.isManageVersionsPresent()) - .toBe(false, `Manage Versions is not displayed for ${folderInTrash}`); + .toBe(false, `Manage Versions is displayed for ${folderInTrash}`); expect(await contextMenu.isEditPresent()).toBe(false, `Edit is displayed for ${folderInTrash}`); expect(await contextMenu.isViewDetailsPresent()).toBe(false, `View details is displayed for ${folderInTrash}`); }); }); + + describe('on Search Results', () => { + beforeEach(async (done) => { + await Utils.pressEscape(); + await page.clickPersonalFilesAndWait(); + done(); + }); + + it('Context menu has the correct actions for a file - [C291827]', async () => { + await searchInput.clickSearchButton(); + await searchInput.checkOnlyFiles(); + await searchInput.searchForTextAndCloseSearchOptions(fileSiteUser); + await dataTable.rightClickOnItem(fileSiteUser); + + expect(await contextMenu.isDownloadPresent()).toBe(true, `Download is not displayed for ${fileSiteUser}`); + expect(await contextMenu.isViewPresent()).toBe(true, `View is not displayed for ${fileSiteUser}`); + expect(await contextMenu.isFavoritePresent()).toBe(true, `Favorite is not displayed for ${fileSiteUser}`); + expect(await contextMenu.isCopyPresent()).toBe(true, `Copy is not displayed for ${fileSiteUser}`); + expect(await contextMenu.isMovePresent()).toBe(false, `Move is displayed for ${fileSiteUser}`); + expect(await contextMenu.isDeletePresent()).toBe(false, `Delete is displayed for ${fileSiteUser}`); + expect(await contextMenu.isSharePresent()).toBe(true, `Share is not displayed for ${fileSiteUser}`); + expect(await contextMenu.isManageVersionsPresent()).toBe(true, `Manage Versions not displayed for ${fileSiteUser}`); + expect(await contextMenu.isManagePermissionsPresent()).toBe(true, `Permissions is not displayed for ${fileSiteUser}`); + expect(await contextMenu.isEditPresent()).toBe(false, `Edit is displayed for ${fileSiteUser}`); + expect(await contextMenu.isViewDetailsPresent()).toBe(false, `View details is displayed for ${fileSiteUser}`); + }); + + it('Context menu has the correct actions for a folder - [C291828]', async () => { + await searchInput.clickSearchButton(); + await searchInput.checkOnlyFolders(); + await searchInput.searchForTextAndCloseSearchOptions(folderSiteUser); + await dataTable.rightClickOnItem(folderSiteUser); + + expect(await contextMenu.isDownloadPresent()).toBe(true, `Download is not displayed for ${folderSiteUser}`); + expect(await contextMenu.isEditPresent()).toBe(true, `Edit is not displayed for ${folderSiteUser}`); + expect(await contextMenu.isFavoritePresent()).toBe(true, `Favorite is not displayed for ${folderSiteUser}`); + expect(await contextMenu.isCopyPresent()).toBe(true, `Copy is not displayed for ${folderSiteUser}`); + expect(await contextMenu.isMovePresent()).toBe(false, `Move is displayed for ${folderSiteUser}`); + expect(await contextMenu.isDeletePresent()).toBe(false, `Delete is displayed for ${folderSiteUser}`); + expect(await contextMenu.isManagePermissionsPresent()).toBe(true, `Permissions is not displayed for ${folderSiteUser}`); + expect(await contextMenu.isViewPresent()).toBe(false, `View is displayed for ${folderSiteUser}`); + expect(await contextMenu.isManageVersionsPresent()).toBe(false, `Manage Versions displayed for ${folderSiteUser}`); + expect(await contextMenu.isSharePresent()).toBe(false, `Share is displayed for ${folderSiteUser}`); + }); + }); }); diff --git a/e2e/suites/actions/create-folder.test.ts b/e2e/suites/actions/create-folder.test.ts index 9d6b26ea5..e609ddbec 100755 --- a/e2e/suites/actions/create-folder.test.ts +++ b/e2e/suites/actions/create-folder.test.ts @@ -216,7 +216,7 @@ describe('Create folder', () => { const fileLibrariesPage = new BrowsingPage(); beforeEach(async (done) => { - await fileLibrariesPage.clickFileLibrariesAndWait(); + await fileLibrariesPage.goToMyLibrariesAndWait(); done(); }); diff --git a/e2e/suites/actions/create-library.test.ts b/e2e/suites/actions/create-library.test.ts index 1e4bc532c..1706a996c 100755 --- a/e2e/suites/actions/create-library.test.ts +++ b/e2e/suites/actions/create-library.test.ts @@ -106,7 +106,7 @@ describe('Create library', () => { await createDialog.waitForDialogToClose(); expect(await page.breadcrumb.getCurrentItemName()).toEqual(site1Name, `Not navigated into ${site1Name}`); - await page.clickFileLibrariesAndWait(); + await page.goToMyLibrariesAndWait(); expect(await dataTable.isItemPresent(site1Name)).toBe(true, `${site1Name} not in the list`); expect(await apis.user.sites.getVisibility(site1Name)).toEqual(SITE_VISIBILITY.PUBLIC); }); @@ -120,7 +120,7 @@ describe('Create library', () => { await createDialog.waitForDialogToClose(); expect(await page.breadcrumb.getCurrentItemName()).toEqual(site2Name, `Not navigated into ${site2Name}`); - await page.clickFileLibrariesAndWait(); + await page.goToMyLibrariesAndWait(); expect(await dataTable.isItemPresent(site2Name)).toBe(true, `${site2Name} not in the list`); expect(await apis.user.sites.getVisibility(site2Name)).toEqual(SITE_VISIBILITY.MODERATED); }); @@ -134,7 +134,7 @@ describe('Create library', () => { await createDialog.waitForDialogToClose(); expect(await page.breadcrumb.getCurrentItemName()).toEqual(site3Name, `Not navigated into ${site3Name}`); - await page.clickFileLibrariesAndWait(); + await page.goToMyLibrariesAndWait(); expect(await dataTable.isItemPresent(site3Name)).toBe(true, `${site3Name} not in the list`); expect(await apis.user.sites.getVisibility(site3Name)).toEqual(SITE_VISIBILITY.PRIVATE); }); @@ -150,7 +150,7 @@ describe('Create library', () => { await createDialog.waitForDialogToClose(); expect(await page.breadcrumb.getCurrentItemName()).toEqual(site4.name, `Not navigated into ${site4.name}`); - await page.clickFileLibrariesAndWait(); + await page.goToMyLibrariesAndWait(); expect(await dataTable.isItemPresent(site4.name)).toBe(true, `${site4.name} not in the list`); expect(await apis.user.sites.getVisibility(site4.id)).toEqual(SITE_VISIBILITY.PUBLIC); expect(await apis.user.sites.getDescription(site4.id)).toEqual(site4.description); @@ -209,7 +209,7 @@ describe('Create library', () => { await createDialog.waitForDialogToClose(); expect(await page.breadcrumb.getCurrentItemName()).toEqual(duplicateSite.name, `Not navigated into ${duplicateSite.name}`); - await page.clickFileLibrariesAndWait(); + await page.goToMyLibrariesAndWait(); expect(await dataTable.isItemPresent(`${duplicateSite.name} (${duplicateSite.id}-2)`)).toBe(true, `${duplicateSite.name} not in the list`); expect(await apis.user.sites.getTitle(`${duplicateSite.id}-2`)).toEqual(duplicateSite.name); }); diff --git a/e2e/suites/actions/edit-folder.test.ts b/e2e/suites/actions/edit-folder.test.ts index 887982eff..86f924357 100755 --- a/e2e/suites/actions/edit-folder.test.ts +++ b/e2e/suites/actions/edit-folder.test.ts @@ -244,7 +244,7 @@ describe('Edit folder', () => { describe('on My Libraries', () => { beforeEach(async (done) => { - await page.clickFileLibrariesAndWait(); + await page.goToMyLibrariesAndWait(); await dataTable.doubleClickOnRowByName(siteName); done(); }); diff --git a/e2e/suites/actions/library-actions.test.ts b/e2e/suites/actions/library-actions.test.ts index b892c0d6b..e7a3d89d8 100755 --- a/e2e/suites/actions/library-actions.test.ts +++ b/e2e/suites/actions/library-actions.test.ts @@ -96,7 +96,7 @@ describe('Library actions', () => { }); it('Join a public library - Favorite Libraries - [C290105]', async () => { - await page.goToFavoriteLibraries(); + await page.goToFavoriteLibrariesAndWait(); await dataTable.selectItem(sitePublic1Admin); await toolbar.clickJoin(); @@ -104,7 +104,7 @@ describe('Library actions', () => { }); it('Join a moderated library - Favorite Libraries - [C290109]', async () => { - await page.goToFavoriteLibraries(); + await page.goToFavoriteLibrariesAndWait(); await dataTable.selectItem(siteModerated1Admin); await toolbar.clickJoin(); @@ -114,7 +114,7 @@ describe('Library actions', () => { }); it('Leave a library - My Libraries - [C290106]', async () => { - await page.goToMyLibraries(); + await page.goToMyLibrariesAndWait(); await dataTable.selectItem(sitePublic2Admin); await toolbar.clickLeave(); await page.waitForDialog(); @@ -125,7 +125,7 @@ describe('Library actions', () => { }); it('Leave a library - Favorite Libraries - [C290110]', async () => { - await page.goToFavoriteLibraries(); + await page.goToFavoriteLibrariesAndWait(); await dataTable.selectItem(sitePublic3Admin); await toolbar.clickLeave(); await page.waitForDialog(); @@ -136,7 +136,7 @@ describe('Library actions', () => { }); it('Confirmation dialog UI - [C290136]', async () => { - await page.goToMyLibraries(); + await page.goToMyLibrariesAndWait(); await dataTable.selectItem(sitePublic4Admin); await toolbar.clickLeave(); await page.waitForDialog(); @@ -149,7 +149,7 @@ describe('Library actions', () => { }); it('Cancel Leave library - [C290111]', async () => { - await page.goToMyLibraries(); + await page.goToMyLibrariesAndWait(); await dataTable.selectItem(sitePublic4Admin); await toolbar.clickLeave(); await page.waitForDialog(); @@ -160,7 +160,7 @@ describe('Library actions', () => { }); it('Leave a library - failure notification - [C290107]', async () => { - await page.goToMyLibraries(); + await page.goToMyLibrariesAndWait(); await dataTable.selectItem(sitePublicUser); await toolbar.clickLeave(); await page.waitForDialog(); @@ -170,7 +170,7 @@ describe('Library actions', () => { }); it('Cancel join - Favorite Libraries - [C290108]', async () => { - await page.goToFavoriteLibraries(); + await page.goToFavoriteLibrariesAndWait(); await dataTable.selectItem(siteModerated2Admin); await toolbar.clickButton('Cancel join request'); diff --git a/e2e/suites/actions/mark-favorite.test.ts b/e2e/suites/actions/mark-favorite.test.ts index 1268b8781..9019f240b 100644 --- a/e2e/suites/actions/mark-favorite.test.ts +++ b/e2e/suites/actions/mark-favorite.test.ts @@ -369,7 +369,7 @@ describe('Mark items as favorites', () => { beforeEach(async (done) => { await Utils.pressEscape(); - await page.clickFileLibrariesAndWait(); + await page.goToMyLibrariesAndWait(); await page.dataTable.doubleClickOnRowByName(siteName); await page.dataTable.waitForHeader(); done(); @@ -457,7 +457,7 @@ describe('Mark items as favorites', () => { }); it('Mark a library as favorite - [C289974]', async () => { - await page.goToMyLibraries(); + await page.goToMyLibrariesAndWait(); await dataTable.selectItem(adminSite1); await toolbar.clickMoreActionsFavorite(); @@ -465,7 +465,7 @@ describe('Mark items as favorites', () => { }); it('Remove a library from favorites - on My Libraries - [C289975]', async () => { - await page.goToMyLibraries(); + await page.goToMyLibrariesAndWait(); await dataTable.selectItem(adminSite2); await toolbar.clickMoreActionsFavorite(); @@ -473,7 +473,7 @@ describe('Mark items as favorites', () => { }); it('Remove a library from favorites - on Favorite Libraries - [C289976]', async () => { - await page.goToFavoriteLibraries(); + await page.goToFavoriteLibrariesAndWait(); await dataTable.selectItem(adminSite3); await toolbar.clickMoreActionsFavorite(); diff --git a/e2e/suites/actions/new-menu.test.ts b/e2e/suites/actions/new-menu.test.ts index e9764eb35..f66c985cb 100755 --- a/e2e/suites/actions/new-menu.test.ts +++ b/e2e/suites/actions/new-menu.test.ts @@ -86,14 +86,14 @@ describe('New menu', () => { }); it('Create folder is enabled when having enough permissions - File Libraries - [C280393]', async () => { - await page.clickFileLibraries(); + await page.goToMyLibrariesAndWait(); await page.dataTable.doubleClickOnRowByName(siteUser); await page.sidenav.openNewMenu(); expect(await sidenav.menu.isCreateFolderEnabled()).toBe(true, 'Create folder is not enabled'); }); it('Create folder is disabled when not enough permissions - [C280397]', async () => { - await page.clickFileLibraries(); + await page.goToMyLibrariesAndWait(); await dataTable.doubleClickOnRowByName(siteAdmin); await sidenav.openNewMenu(); expect(await sidenav.menu.isCreateFolderEnabled()).toBe(false, 'Create folder is not disabled'); @@ -107,7 +107,7 @@ describe('New menu', () => { }); it('Upload File option is enabled when having permissions - on File Libraries - [C290142]', async () => { - await page.clickFileLibraries(); + await page.goToMyLibrariesAndWait(); await dataTable.doubleClickOnRowByName(siteUser); await sidenav.openNewMenu(); @@ -115,7 +115,7 @@ describe('New menu', () => { }); it('Upload File option is disabled when user cannot create content in that location - [C217146]', async () => { - await page.clickFileLibraries(); + await page.goToMyLibrariesAndWait(); await dataTable.doubleClickOnRowByName(siteAdmin); await sidenav.openNewMenu(); @@ -130,7 +130,7 @@ describe('New menu', () => { }); it('Upload Folder option is enabled when having permissions - on File Libraries - [C290146]', async () => { - await page.clickFileLibraries(); + await page.goToMyLibrariesAndWait(); await dataTable.doubleClickOnRowByName(siteUser); await sidenav.openNewMenu(); @@ -138,7 +138,7 @@ describe('New menu', () => { }); it('Upload Folder option is disabled when user cannot create content in that location - [C213193]', async () => { - await page.clickFileLibraries(); + await page.goToMyLibrariesAndWait(); await dataTable.doubleClickOnRowByName(siteAdmin); await sidenav.openNewMenu(); @@ -154,7 +154,7 @@ describe('New menu', () => { }); it('Create folder disabled button tooltip - [C280398]', async () => { - await page.clickFileLibraries(); + await page.goToMyLibrariesAndWait(); await dataTable.doubleClickOnRowByName(siteAdmin); await sidenav.openNewMenu(); diff --git a/e2e/suites/actions/share-file.test.ts b/e2e/suites/actions/share-file.test.ts index 1cec0703c..df0444caf 100755 --- a/e2e/suites/actions/share-file.test.ts +++ b/e2e/suites/actions/share-file.test.ts @@ -261,14 +261,14 @@ describe('Share a file', () => { describe('from File Libraries', () => { - const file1 = `file1-${Utils.random()}.txt`; let file1Id; - const file2 = `file2-${Utils.random()}.txt`; let file2Id; + const file1 = `file1-${Utils.random()}.txt`; + const file2 = `file2-${Utils.random()}.txt`; const file3 = `file3-${Utils.random()}.txt`; let file3Id; - const file4 = `file4-${Utils.random()}.txt`; let file4Id; + const file4 = `file4-${Utils.random()}.txt`; const file5 = `file5-${Utils.random()}.txt`; let file5Id; const file6 = `file6-${Utils.random()}.txt`; let file6Id; const file7 = `file7-${Utils.random()}.txt`; let file7Id; - const file8 = `file8-${Utils.random()}.txt`; let file8Id; + const file8 = `file8-${Utils.random()}.txt`; const file9 = `file9-${Utils.random()}.txt`; let file9Id; const siteName = `site-${Utils.random()}`; @@ -279,14 +279,14 @@ describe('Share a file', () => { const docLibId = await apis.user.sites.getDocLibId(siteName); parentInSiteId = (await apis.user.nodes.createFolder(parentInSite, docLibId)).entry.id; - file1Id = (await apis.user.nodes.createFile(file1, parentInSiteId)).entry.id; - file2Id = (await apis.user.nodes.createFile(file2, parentInSiteId)).entry.id; + await apis.user.nodes.createFile(file1, parentInSiteId); + await apis.user.nodes.createFile(file2, parentInSiteId); file3Id = (await apis.user.nodes.createFile(file3, parentInSiteId)).entry.id; - file4Id = (await apis.user.nodes.createFile(file4, parentInSiteId)).entry.id; + await apis.user.nodes.createFile(file4, parentInSiteId); file5Id = (await apis.user.nodes.createFile(file5, parentInSiteId)).entry.id; file6Id = (await apis.user.nodes.createFile(file6, parentInSiteId)).entry.id; file7Id = (await apis.user.nodes.createFile(file7, parentInSiteId)).entry.id; - file8Id = (await apis.user.nodes.createFile(file8, parentInSiteId)).entry.id; + await apis.user.nodes.createFile(file8, parentInSiteId); file9Id = (await apis.user.nodes.createFile(file9, parentInSiteId)).entry.id; await apis.user.shared.shareFileById(file6Id, expiryDate); await apis.user.shared.shareFileById(file7Id, expiryDate); @@ -295,7 +295,7 @@ describe('Share a file', () => { }); beforeEach(async (done) => { - await page.clickFileLibrariesAndWait(); + await page.goToMyLibrariesAndWait(); await dataTable.doubleClickOnRowByName(siteName); await dataTable.waitForHeader(); await dataTable.doubleClickOnRowByName(parentInSite); diff --git a/e2e/suites/actions/special-permissions-available-actions.test.ts b/e2e/suites/actions/special-permissions-available-actions.test.ts index 8955e6721..50de63aae 100755 --- a/e2e/suites/actions/special-permissions-available-actions.test.ts +++ b/e2e/suites/actions/special-permissions-available-actions.test.ts @@ -23,7 +23,7 @@ * along with Alfresco. If not, see . */ -import { LoginPage, BrowsingPage } from '../../pages/pages'; +import { LoginPage, BrowsingPage, SearchResultsPage } from '../../pages/pages'; import { SITE_VISIBILITY, SITE_ROLES, FILES } from '../../configs'; import { RepoClient } from '../../utilities/repo-client/repo-client'; import { Utils } from '../../utilities/utils'; @@ -34,16 +34,16 @@ describe('Granular permissions available actions : ', () => { const userManager = `manager-${Utils.random()}`; const siteName = `site-private-${Utils.random()}`; - const file1 = `file1-${Utils.random()}.txt`; + const file1 = `my-file1-${Utils.random()}.txt`; let file1Id; - const file2 = `file2-${Utils.random()}.txt`; + const file2 = `my-file2-${Utils.random()}.txt`; let file2Id; - const file3 = `file3-${Utils.random()}.txt`; + const file3 = `my-file3-${Utils.random()}.txt`; let file3Id; - const folder1 = `folder1-${Utils.random()}`; + const folder1 = `my-folder1-${Utils.random()}`; let folder1Id; - const folder2 = `folder2-${Utils.random()}`; + const folder2 = `my-folder2-${Utils.random()}`; let folder2Id; const docxFile = FILES.docxFile; @@ -61,8 +61,10 @@ describe('Granular permissions available actions : ', () => { const contextMenu = dataTable.menu; const viewer = new Viewer(); const viewerToolbar = viewer.toolbar; + const searchResultsPage = new SearchResultsPage(); + const { searchInput } = searchResultsPage.header; - beforeAll(async done => { + beforeAll(async (done) => { await apis.admin.people.createUser({ username: userConsumer }); await apis.admin.people.createUser({ username: userManager }); @@ -96,7 +98,7 @@ describe('Granular permissions available actions : ', () => { done(); }); - afterAll(async done => { + afterAll(async (done) => { await apis.admin.sites.deleteSite(siteName); done(); }); @@ -104,8 +106,10 @@ describe('Granular permissions available actions : ', () => { xit(''); describe('toolbar displays correct actions when selecting multiple files with different granular permissions', () => { - beforeEach(async done => { + beforeEach(async (done) => { await Utils.pressEscape(); + await dataTable.clearSelection(); + await page.clickPersonalFiles(); done(); }); @@ -114,6 +118,7 @@ describe('Granular permissions available actions : ', () => { await dataTable.doubleClickOnRowByName(siteName); await dataTable.waitForHeader(); await dataTable.selectMultipleItems([file1, file2]); + expect(await toolbar.isViewPresent()).toBe(false, `View is displayed for selected files`); expect(await toolbar.isDownloadPresent()).toBe(true, `Download is not displayed for selected files`); expect(await toolbar.isEditPresent()).toBe(false, `Edit is displayed for selected files`); @@ -128,6 +133,7 @@ describe('Granular permissions available actions : ', () => { it('on Shared Files - [C280477]', async () => { await page.clickSharedFilesAndWait(); await dataTable.selectMultipleItems([file1, file2]); + expect(await toolbar.isViewPresent()).toBe(false, `View is displayed for selected files`); expect(await toolbar.isDownloadPresent()).toBe(true, `Download is not displayed for selected files`); expect(await toolbar.isEditPresent()).toBe(false, `Edit is displayed for selected files`); @@ -142,6 +148,7 @@ describe('Granular permissions available actions : ', () => { it('on Favorites - [C280478]', async () => { await page.clickFavoritesAndWait(); await dataTable.selectMultipleItems([file1, file2]); + expect(await toolbar.isViewPresent()).toBe(false, `View is displayed for selected files`); expect(await toolbar.isDownloadPresent()).toBe(true, `Download is not displayed for selected files`); expect(await toolbar.isEditPresent()).toBe(false, `Edit is displayed for selected files`); @@ -153,11 +160,30 @@ describe('Granular permissions available actions : ', () => { expect(await toolbar.menu.isFavoritePresent()).toBe(true, `Favorite is not displayed for selected files`); await toolbar.closeMoreMenu(); }); + + it('on Search Results - [C291823]', async () => { + await searchInput.clickSearchButton(); + await searchInput.checkOnlyFiles(); + await searchInput.searchForTextAndCloseSearchOptions('my-file'); + await dataTable.selectMultipleItems([file1, file2]); + + expect(await toolbar.isViewPresent()).toBe(false, `View is displayed for selected files`); + expect(await toolbar.isDownloadPresent()).toBe(true, `Download is not displayed for selected files`); + expect(await toolbar.isEditPresent()).toBe(false, `Edit is displayed for selected files`); + await toolbar.openMoreMenu(); + expect(await toolbar.menu.isCopyPresent()).toBe(true, `Copy is not displayed for selected files`); + expect(await toolbar.menu.isDeletePresent()).toBe(false, `Delete is displayed for selected files`); + expect(await toolbar.menu.isMovePresent()).toBe(false, `Move is displayed for selected files`); + expect(await toolbar.menu.isFavoritePresent()).toBe(true, `Favorite is not displayed for selected files`); + await toolbar.closeMoreMenu(); + }); }); describe('toolbar actions appear correctly for a file - consumer', () => { - beforeEach(async done => { + beforeEach(async (done) => { await Utils.pressEscape(); + await dataTable.clearSelection(); + await page.clickPersonalFiles(); done(); }); @@ -210,11 +236,32 @@ describe('Granular permissions available actions : ', () => { expect(await toolbar.menu.isFavoritePresent()).toBe(true, `Favorite is not displayed for ${file1}`); await toolbar.closeMoreMenu(); }); + + it('on Search Results - [C291818]', async () => { + await searchInput.clickSearchButton(); + await searchInput.checkOnlyFiles(); + await searchInput.searchForTextAndCloseSearchOptions(file1); + await dataTable.selectItem(file1); + + expect(await toolbar.isViewPresent()).toBe(true, `View is not displayed for ${file1}`); + expect(await toolbar.isDownloadPresent()).toBe(true, `Download is not displayed for ${file1}`); + expect(await toolbar.isViewDetailsPresent()).toBe(true, `View details is not displayed for ${file1}`); + expect(await toolbar.isEditPresent()).toBe(false, `Edit is displayed for ${file1}`); + + await toolbar.openMoreMenu(); + expect(await toolbar.menu.isCopyPresent()).toBe(true, `Copy is not displayed for ${file1}`); + expect(await toolbar.menu.isDeletePresent()).toBe(false, `Delete is displayed for ${file1}`); + expect(await toolbar.menu.isMovePresent()).toBe(false, `Move is displayed for ${file1}`); + expect(await toolbar.menu.isFavoritePresent()).toBe(true, `Favorite is not displayed for ${file1}`); + await toolbar.closeMoreMenu(); + }); }); describe('toolbar actions appear correctly for a folder - consumer', () => { - beforeEach(async done => { + beforeEach(async (done) => { await Utils.pressEscape(); + await dataTable.clearSelection(); + await page.clickPersonalFiles(); done(); }); @@ -252,12 +299,32 @@ describe('Granular permissions available actions : ', () => { expect(await toolbar.menu.isFavoritePresent()).toBe(true, `Favorite is not displayed for ${folder1}`); await toolbar.closeMoreMenu(); }); + + it('on Search Results - [C291819]', async () => { + await searchInput.clickSearchButton(); + await searchInput.checkOnlyFolders(); + await searchInput.searchForTextAndCloseSearchOptions(folder1); + await dataTable.selectItem(folder1); + + expect(await toolbar.isViewPresent()).toBe(false, `View is displayed for ${folder1}`); + expect(await toolbar.isDownloadPresent()).toBe(true, `Download is not displayed for ${folder1}`); + expect(await toolbar.isViewDetailsPresent()).toBe(true, `View details is not displayed for ${folder1}`); + expect(await toolbar.isEditPresent()).toBe(false, `Edit is displayed for ${folder1}`); + + await toolbar.openMoreMenu(); + expect(await toolbar.menu.isCopyPresent()).toBe(true, `Copy is not displayed for ${folder1}`); + expect(await toolbar.menu.isDeletePresent()).toBe(false, `Delete is displayed for ${folder1}`); + expect(await toolbar.menu.isMovePresent()).toBe(false, `Move is displayed for ${folder1}`); + expect(await toolbar.menu.isFavoritePresent()).toBe(true, `Favorite is not displayed for ${folder1}`); + await toolbar.closeMoreMenu(); + }); }); describe('toolbar actions appear correctly for multiple selection of files - consumer', () => { beforeEach(async (done) => { await Utils.pressEscape(); await dataTable.clearSelection(); + await page.clickPersonalFiles(); done(); }); @@ -305,12 +372,30 @@ describe('Granular permissions available actions : ', () => { expect(await toolbar.menu.isFavoritePresent()).toBe(true, `Favorite is not displayed for selected files`); await toolbar.closeMoreMenu(); }); + + it('on Search Results - [C291824]', async () => { + await searchInput.clickSearchButton(); + await searchInput.checkOnlyFiles(); + await searchInput.searchForTextAndCloseSearchOptions('my-file'); + await dataTable.selectMultipleItems([file1, file2]); + + expect(await toolbar.isViewPresent()).toBe(false, 'View is displayed'); + expect(await toolbar.isDownloadPresent()).toBe(true, 'Download is not displayed'); + expect(await toolbar.isEditPresent()).toBe(false, 'Edit is displayed'); + await toolbar.openMoreMenu(); + expect(await toolbar.menu.isCopyPresent()).toBe(true, `Copy is not displayed`); + expect(await toolbar.menu.isDeletePresent()).toBe(false, `Delete is displayed`); + expect(await toolbar.menu.isMovePresent()).toBe(false, `Move is displayed`); + expect(await toolbar.menu.isFavoritePresent()).toBe(true, `Favorite is not displayed`); + await toolbar.closeMoreMenu(); + }); }); describe('toolbar actions appear correctly for multiple selection of folders - consumer', () => { beforeEach(async (done) => { await Utils.pressEscape(); await dataTable.clearSelection(); + await page.clickPersonalFiles(); done(); }); @@ -344,12 +429,30 @@ describe('Granular permissions available actions : ', () => { expect(await toolbar.menu.isFavoritePresent()).toBe(true, `Favorite is not displayed for selected files`); await toolbar.closeMoreMenu(); }); + + it('on Search Results - [C291825]', async () => { + await searchInput.clickSearchButton(); + await searchInput.checkOnlyFolders(); + await searchInput.searchForTextAndCloseSearchOptions('my-folder'); + await dataTable.selectMultipleItems([folder1, folder2]); + + expect(await toolbar.isViewPresent()).toBe(false, 'View is displayed'); + expect(await toolbar.isDownloadPresent()).toBe(true, 'Download is not displayed'); + expect(await toolbar.isEditPresent()).toBe(false, 'Edit is displayed'); + await toolbar.openMoreMenu(); + expect(await toolbar.menu.isCopyPresent()).toBe(true, `Copy is not displayed`); + expect(await toolbar.menu.isDeletePresent()).toBe(false, `Delete is displayed`); + expect(await toolbar.menu.isMovePresent()).toBe(false, `Move is displayed`); + expect(await toolbar.menu.isFavoritePresent()).toBe(true, `Favorite is not displayed`); + await toolbar.closeMoreMenu(); + }); }); describe('toolbar actions appear correctly for when both files and folders are selected - consumer', () => { - beforeEach(async done => { + beforeEach(async (done) => { await Utils.pressEscape(); await dataTable.clearSelection(); + await page.clickPersonalFiles(); done(); }); @@ -383,11 +486,30 @@ describe('Granular permissions available actions : ', () => { expect(await toolbar.menu.isFavoritePresent()).toBe(true, `Favorite is not displayed for selected files`); await toolbar.closeMoreMenu(); }); + + it('on Search Results - [C291826]', async () => { + await searchInput.clickSearchButton(); + await searchInput.checkFilesAndFolders(); + await searchInput.searchForTextAndCloseSearchOptions('my-f'); + await dataTable.selectMultipleItems([file1, folder1]); + + expect(await toolbar.isViewPresent()).toBe(false, 'View is displayed'); + expect(await toolbar.isDownloadPresent()).toBe(true, 'Download is not displayed'); + expect(await toolbar.isEditPresent()).toBe(false, 'Edit is displayed'); + await toolbar.openMoreMenu(); + expect(await toolbar.menu.isCopyPresent()).toBe(true, `Copy is not displayed`); + expect(await toolbar.menu.isDeletePresent()).toBe(false, `Delete is displayed`); + expect(await toolbar.menu.isMovePresent()).toBe(false, `Move is displayed`); + expect(await toolbar.menu.isFavoritePresent()).toBe(true, `Favorite is not displayed`); + await toolbar.closeMoreMenu(); + }); }); describe('context menu actions are correct for a file - consumer', () => { beforeEach(async (done) => { await Utils.pressEscape(); + await dataTable.clearSelection(); + await page.clickPersonalFiles(); done(); }); @@ -443,11 +565,31 @@ describe('Granular permissions available actions : ', () => { expect(await contextMenu.isEditPresent()).toBe(false, `Edit is displayed for ${file1}`); expect(await contextMenu.isViewDetailsPresent()).toBe(false, `View details is displayed for ${file1}`); }); + + it('on Search Results - [C291829]', async () => { + await searchInput.clickSearchButton(); + await searchInput.checkOnlyFiles(); + await searchInput.searchForTextAndCloseSearchOptions(file1); + await dataTable.rightClickOnItem(file1); + expect(await contextMenu.isDownloadPresent()).toBe(true, `Download is not displayed for ${file1}`); + expect(await contextMenu.isViewPresent()).toBe(true, `View is not displayed for ${file1}`); + expect(await contextMenu.isFavoritePresent()).toBe(true, `Favorite is not displayed for ${file1}`); + expect(await contextMenu.isCopyPresent()).toBe(true, `Copy is not displayed for ${file1}`); + expect(await contextMenu.isMovePresent()).toBe(false, `Move is displayed for ${file1}`); + expect(await contextMenu.isDeletePresent()).toBe(false, `Delete is displayed for ${file1}`); + expect(await contextMenu.isSharePresent()).toBe(true, `Share is not displayed for ${file1}`); + expect(await contextMenu.isManageVersionsPresent()).toBe(true, `Manage Versions not displayed for ${file1}`); + expect(await contextMenu.isManagePermissionsPresent()).toBe(false, `Permissions is displayed for ${file1}`); + expect(await contextMenu.isEditPresent()).toBe(false, `Edit is displayed for ${file1}`); + expect(await contextMenu.isViewDetailsPresent()).toBe(false, `View details is displayed for ${file1}`); + }); }); describe('context menu actions are correct for a folder - consumer', () => { beforeEach(async (done) => { await Utils.pressEscape(); + await dataTable.clearSelection(); + await page.clickPersonalFiles(); done(); }); @@ -485,12 +627,30 @@ describe('Granular permissions available actions : ', () => { expect(await contextMenu.isManageVersionsPresent()).toBe(false, `Manage Versions is displayed for ${folder1}`); expect(await contextMenu.isSharePresent()).toBe(false, `Share is displayed for ${folder1}`); }); + + it('on Search Results - [C291830]', async () => { + await searchInput.clickSearchButton(); + await searchInput.checkOnlyFolders(); + await searchInput.searchForTextAndCloseSearchOptions(folder1); + await dataTable.rightClickOnItem(folder1); + expect(await contextMenu.isDownloadPresent()).toBe(true, `Download is not displayed for ${folder1}`); + expect(await contextMenu.isEditPresent()).toBe(false, `Edit is displayed for ${folder1}`); + expect(await contextMenu.isFavoritePresent()).toBe(true, `Favorite is not displayed for ${folder1}`); + expect(await contextMenu.isCopyPresent()).toBe(true, `Copy is not displayed for ${folder1}`); + expect(await contextMenu.isMovePresent()).toBe(false, `Move is displayed for ${folder1}`); + expect(await contextMenu.isDeletePresent()).toBe(false, `Delete is displayed for ${folder1}`); + expect(await contextMenu.isManagePermissionsPresent()).toBe(false, `Permissions is displayed for ${folder1}`); + expect(await contextMenu.isViewPresent()).toBe(false, `View is displayed for ${folder1}`); + expect(await contextMenu.isManageVersionsPresent()).toBe(false, `Manage Versions displayed for ${folder1}`); + expect(await contextMenu.isSharePresent()).toBe(false, `Share is displayed for ${folder1}`); + }); }); describe('context menu actions are correct for multiple selection of files - consumer', () => { beforeEach(async (done) => { await Utils.pressEscape(); await dataTable.clearSelection(); + await page.clickPersonalFiles(); done(); }); @@ -535,12 +695,29 @@ describe('Granular permissions available actions : ', () => { expect(await contextMenu.isFavoritePresent()).toBe(true, `Favorite is not displayed`); expect(await contextMenu.isManagePermissionsPresent()).toBe(false, `Permissions is displayed`); }); + + it('on Search Results - [C291834]', async () => { + await searchInput.clickSearchButton(); + await searchInput.checkOnlyFiles(); + await searchInput.searchForTextAndCloseSearchOptions('my-file'); + await dataTable.selectMultipleItems([file1, file2]); + await dataTable.rightClickOnMultipleSelection(); + + expect(await contextMenu.isViewPresent()).toBe(false, 'View is displayed'); + expect(await contextMenu.isDownloadPresent()).toBe(true, 'Download is not displayed'); + expect(await contextMenu.isCopyPresent()).toBe(true, `Copy is not displayed`); + expect(await contextMenu.isDeletePresent()).toBe(false, `Delete is displayed`); + expect(await contextMenu.isMovePresent()).toBe(false, `Move is displayed`); + expect(await contextMenu.isFavoritePresent()).toBe(true, `Favorite is not displayed`); + expect(await contextMenu.isManagePermissionsPresent()).toBe(false, `Permissions is displayed`); + }); }); describe('context menu actions are correct for multiple selection of folders - consumer', () => { beforeEach(async (done) => { await Utils.pressEscape(); await dataTable.clearSelection(); + await page.clickPersonalFiles(); done(); }); @@ -572,12 +749,29 @@ describe('Granular permissions available actions : ', () => { expect(await contextMenu.isFavoritePresent()).toBe(true, `Favorite is not displayed`); expect(await contextMenu.isManagePermissionsPresent()).toBe(false, `Permissions is displayed`); }); + + it('on Search Results - [C291835]', async () => { + await searchInput.clickSearchButton(); + await searchInput.checkOnlyFolders(); + await searchInput.searchForTextAndCloseSearchOptions('my-folder'); + await dataTable.selectMultipleItems([folder1, folder2]); + await dataTable.rightClickOnMultipleSelection(); + + expect(await contextMenu.isViewPresent()).toBe(false, 'View is displayed'); + expect(await contextMenu.isDownloadPresent()).toBe(true, 'Download is not displayed'); + expect(await contextMenu.isCopyPresent()).toBe(true, `Copy is not displayed`); + expect(await contextMenu.isDeletePresent()).toBe(false, `Delete is displayed`); + expect(await contextMenu.isMovePresent()).toBe(false, `Move is displayed`); + expect(await contextMenu.isFavoritePresent()).toBe(true, `Favorite is not displayed`); + expect(await contextMenu.isManagePermissionsPresent()).toBe(false, `Permissions is displayed`); + }); }); describe('context menu actions are correct when both files and folders are selected - consumer', () => { beforeEach(async (done) => { await Utils.pressEscape(); await dataTable.clearSelection(); + await page.clickPersonalFiles(); done(); }); @@ -609,11 +803,29 @@ describe('Granular permissions available actions : ', () => { expect(await contextMenu.isFavoritePresent()).toBe(true, `Favorite is not displayed`); expect(await contextMenu.isManagePermissionsPresent()).toBe(false, `Permissions is displayed`); }); + + it('on Search Results - [C291836]', async () => { + await searchInput.clickSearchButton(); + await searchInput.checkFilesAndFolders(); + await searchInput.searchForTextAndCloseSearchOptions('my-f'); + await dataTable.selectMultipleItems([file1, folder1]); + await dataTable.rightClickOnMultipleSelection(); + + expect(await contextMenu.isViewPresent()).toBe(false, 'View is displayed'); + expect(await contextMenu.isDownloadPresent()).toBe(true, 'Download is not displayed'); + expect(await contextMenu.isCopyPresent()).toBe(true, `Copy is not displayed`); + expect(await contextMenu.isDeletePresent()).toBe(false, `Delete is displayed`); + expect(await contextMenu.isMovePresent()).toBe(false, `Move is displayed`); + expect(await contextMenu.isFavoritePresent()).toBe(true, `Favorite is not displayed`); + expect(await contextMenu.isManagePermissionsPresent()).toBe(false, `Permissions is displayed`); + }); }); describe('toolbar actions appear correctly in the viewer - consumer', () => { beforeEach(async (done) => { await Utils.pressEscape(); + await dataTable.clearSelection(); + await page.clickPersonalFiles(); done(); }); diff --git a/e2e/suites/actions/toolbar-multiple-selection.test.ts b/e2e/suites/actions/toolbar-multiple-selection.test.ts index 0d484be50..83142553a 100755 --- a/e2e/suites/actions/toolbar-multiple-selection.test.ts +++ b/e2e/suites/actions/toolbar-multiple-selection.test.ts @@ -24,7 +24,7 @@ */ import { browser, protractor } from 'protractor'; -import { LoginPage, BrowsingPage } from '../../pages/pages'; +import { LoginPage, BrowsingPage, SearchResultsPage } from '../../pages/pages'; import { SITE_VISIBILITY } from '../../configs'; import { RepoClient } from '../../utilities/repo-client/repo-client'; import { Utils } from '../../utilities/utils'; @@ -32,14 +32,14 @@ import { Utils } from '../../utilities/utils'; describe('Toolbar actions - multiple selection : ', () => { const username = `user-${Utils.random()}`; - const file1 = `file1-${Utils.random()}.txt`; + const file1 = `my-file1-${Utils.random()}.txt`; let file1Id; - const file2 = `file2-${Utils.random()}.txt`; + const file2 = `my-file2-${Utils.random()}.txt`; let file2Id; - const folder1 = `folder1-${Utils.random()}`; + const folder1 = `my-folder1-${Utils.random()}`; let folder1Id; - const folder2 = `folder2-${Utils.random()}`; + const folder2 = `my-folder2-${Utils.random()}`; let folder2Id; const fileForDelete1 = `file-${Utils.random()}.txt`; @@ -52,10 +52,10 @@ describe('Toolbar actions - multiple selection : ', () => { let folderForDelete2Id; const siteName = `site-${Utils.random()}`; - const file1InSite = `file1-${Utils.random()}.txt`; - const file2InSite = `file2-${Utils.random()}.txt`; - const folder1InSite = `folder1-${Utils.random()}`; - const folder2InSite = `folder2-${Utils.random()}`; + const file1InSite = `my-fileInSite1-${Utils.random()}.txt`; + const file2InSite = `my-fileInSite2-${Utils.random()}.txt`; + const folder1InSite = `my-folderInSite1-${Utils.random()}`; + const folder2InSite = `my-folderInSite2-${Utils.random()}`; const apis = { admin: new RepoClient(), @@ -65,8 +65,10 @@ describe('Toolbar actions - multiple selection : ', () => { const loginPage = new LoginPage(); const page = new BrowsingPage(); const { dataTable, toolbar } = page; + const searchResultsPage = new SearchResultsPage(); + const { searchInput } = searchResultsPage.header; - beforeAll(async done => { + beforeAll(async (done) => { await apis.admin.people.createUser({ username }); file1Id = (await apis.user.nodes.createFiles([file1])).entry.id; @@ -100,7 +102,7 @@ describe('Toolbar actions - multiple selection : ', () => { done(); }); - afterAll(async done => { + afterAll(async (done) => { await Promise.all([ apis.user.nodes.deleteNodesById([file1Id, file2Id, folder1Id, folder2Id]), apis.user.trashcan.emptyTrash(), @@ -111,11 +113,11 @@ describe('Toolbar actions - multiple selection : ', () => { xit(''); - describe('Personal Files', () => { - beforeEach(async done => { + describe('on Personal Files', () => { + beforeEach(async (done) => { await Utils.pressEscape(); - await page.clickPersonalFilesAndWait(); await dataTable.clearSelection(); + await page.clickPersonalFilesAndWait(); done(); }); @@ -182,13 +184,12 @@ describe('Toolbar actions - multiple selection : ', () => { }); }); - describe('File Libraries', () => { - beforeEach(async done => { + describe('on File Libraries', () => { + beforeEach(async (done) => { await Utils.pressEscape(); - await page.clickFileLibrariesAndWait(); + await page.goToMyLibrariesAndWait(); await dataTable.doubleClickOnRowByName(siteName); await dataTable.waitForHeader(); - await dataTable.clearSelection(); done(); }); @@ -202,6 +203,7 @@ describe('Toolbar actions - multiple selection : ', () => { expect(await toolbar.menu.isDeletePresent()).toBe(true, `Delete is not displayed for selected files`); expect(await toolbar.menu.isMovePresent()).toBe(true, `Move is not displayed for selected files`); expect(await toolbar.menu.isFavoritePresent()).toBe(true, `Favorite is not displayed for selected files`); + await toolbar.closeMoreMenu(); }); it('correct actions appear when multiple folders are selected - [C280462]', async () => { @@ -214,6 +216,7 @@ describe('Toolbar actions - multiple selection : ', () => { expect(await toolbar.menu.isDeletePresent()).toBe(true, `Delete is not displayed for selected files`); expect(await toolbar.menu.isMovePresent()).toBe(true, `Move is not displayed for selected files`); expect(await toolbar.menu.isFavoritePresent()).toBe(true, `Favorite is not displayed for selected files`); + await toolbar.closeMoreMenu(); }); it('correct actions appear when both files and folders are selected - [C280463]', async () => { @@ -226,15 +229,15 @@ describe('Toolbar actions - multiple selection : ', () => { expect(await toolbar.menu.isDeletePresent()).toBe(true, `Delete is not displayed for selected files`); expect(await toolbar.menu.isMovePresent()).toBe(true, `Move is not displayed for selected files`); expect(await toolbar.menu.isFavoritePresent()).toBe(true, `Favorite is not displayed for selected files`); + await toolbar.closeMoreMenu(); }); }); - describe('Shared Files', () => { - beforeEach(async done => { - // await browser.actions().mouseMove(browser.$('body'), { x: 0, y: 0 }).click().perform(); + describe('on Shared Files', () => { + beforeEach(async (done) => { await Utils.pressEscape(); - await page.clickSharedFilesAndWait(); await dataTable.clearSelection(); + await page.clickSharedFilesAndWait(); done(); }); @@ -248,14 +251,15 @@ describe('Toolbar actions - multiple selection : ', () => { expect(await toolbar.menu.isDeletePresent()).toBe(true, `Delete is not displayed for selected files`); expect(await toolbar.menu.isMovePresent()).toBe(true, `Move is not displayed for selected files`); expect(await toolbar.menu.isFavoritePresent()).toBe(true, `Favorite is not displayed for selected files`); + await toolbar.closeMoreMenu(); }); }); - describe('Recent Files', () => { - beforeEach(async done => { + describe('on Recent Files', () => { + beforeEach(async (done) => { await Utils.pressEscape(); - await page.clickRecentFilesAndWait(); await dataTable.clearSelection(); + await page.clickRecentFilesAndWait(); done(); }); @@ -269,15 +273,15 @@ describe('Toolbar actions - multiple selection : ', () => { expect(await toolbar.menu.isDeletePresent()).toBe(true, `Delete is not displayed for selected files`); expect(await toolbar.menu.isMovePresent()).toBe(true, `Move is not displayed for selected files`); expect(await toolbar.menu.isFavoritePresent()).toBe(true, `Favorite is not displayed for selected files`); + await toolbar.closeMoreMenu(); }); }); - describe('Favorites', () => { - beforeEach(async done => { - // await browser.actions().mouseMove(browser.$('body'), { x: 0, y: 0 }).click().perform(); + describe('on Favorites', () => { + beforeEach(async (done) => { await Utils.pressEscape(); - await page.clickFavoritesAndWait(); await dataTable.clearSelection(); + await page.clickFavoritesAndWait(); done(); }); @@ -291,6 +295,7 @@ describe('Toolbar actions - multiple selection : ', () => { expect(await toolbar.menu.isDeletePresent()).toBe(true, `Delete is not displayed for selected files`); expect(await toolbar.menu.isMovePresent()).toBe(true, `Move is not displayed for selected files`); expect(await toolbar.menu.isFavoritePresent()).toBe(true, `Favorite is not displayed for selected files`); + await toolbar.closeMoreMenu(); }); it('correct actions appear when multiple folders are selected - [C280470]', async () => { @@ -303,6 +308,7 @@ describe('Toolbar actions - multiple selection : ', () => { expect(await toolbar.menu.isDeletePresent()).toBe(true, `Delete is not displayed for selected files`); expect(await toolbar.menu.isMovePresent()).toBe(true, `Move is not displayed for selected files`); expect(await toolbar.menu.isFavoritePresent()).toBe(true, `Favorite is not displayed for selected files`); + await toolbar.closeMoreMenu(); }); it('correct actions appear when both files and folders are selected - [C280471]', async () => { @@ -315,14 +321,13 @@ describe('Toolbar actions - multiple selection : ', () => { expect(await toolbar.menu.isDeletePresent()).toBe(true, `Delete is not displayed for selected files`); expect(await toolbar.menu.isMovePresent()).toBe(true, `Move is not displayed for selected files`); expect(await toolbar.menu.isFavoritePresent()).toBe(true, `Favorite is not displayed for selected files`); + await toolbar.closeMoreMenu(); }); }); - describe('Trash', () => { - beforeEach(async done => { - await Utils.pressEscape(); + describe('on Trash', () => { + beforeEach(async (done) => { await page.clickTrashAndWait(); - await dataTable.clearSelection(); done(); }); @@ -344,4 +349,63 @@ describe('Toolbar actions - multiple selection : ', () => { expect(await toolbar.isButtonPresent('Restore')).toBe(true, 'Restore is not displayed'); }); }); + + describe('on Search Results', () => { + beforeEach(async (done) => { + await Utils.pressEscape(); + await page.clickPersonalFilesAndWait(); + done(); + }); + + it('correct actions appear when multiple files are selected - [C291820]', async () => { + await searchInput.clickSearchButton(); + await searchInput.checkOnlyFiles(); + await searchInput.searchForTextAndCloseSearchOptions('my-fileInSite'); + await dataTable.selectMultipleItems([file1InSite, file2InSite]); + + expect(await toolbar.isViewPresent()).toBe(false, 'View is displayed for selected files'); + expect(await toolbar.isDownloadPresent()).toBe(true, 'Download is not displayed for selected files'); + expect(await toolbar.isEditPresent()).toBe(false, 'Edit is displayed for selected files'); + await toolbar.openMoreMenu(); + expect(await toolbar.menu.isCopyPresent()).toBe(true, `Copy is not displayed for selected files`); + expect(await toolbar.menu.isDeletePresent()).toBe(false, `Delete is displayed for selected files`); + expect(await toolbar.menu.isMovePresent()).toBe(false, `Move is displayed for selected files`); + expect(await toolbar.menu.isFavoritePresent()).toBe(true, `Favorite is not displayed for selected files`); + await toolbar.closeMoreMenu(); + }); + + it('correct actions appear when multiple folders are selected - [C291821]', async () => { + await searchInput.clickSearchButton(); + await searchInput.checkOnlyFolders(); + await searchInput.searchForTextAndCloseSearchOptions('my-folderInSite'); + await dataTable.selectMultipleItems([folder1InSite, folder2InSite]); + + expect(await toolbar.isViewPresent()).toBe(false, 'View is displayed'); + expect(await toolbar.isDownloadPresent()).toBe(true, 'Download is not displayed'); + expect(await toolbar.isEditPresent()).toBe(false, 'Edit is displayed'); + await toolbar.openMoreMenu(); + expect(await toolbar.menu.isCopyPresent()).toBe(true, `Copy is not displayed for selected files`); + expect(await toolbar.menu.isDeletePresent()).toBe(false, `Delete is displayed for selected files`); + expect(await toolbar.menu.isMovePresent()).toBe(false, `Move is displayed for selected files`); + expect(await toolbar.menu.isFavoritePresent()).toBe(true, `Favorite is not displayed for selected files`); + await toolbar.closeMoreMenu(); + }); + + it('correct actions appear when both files and folders are selected - [C291822]', async () => { + await searchInput.clickSearchButton(); + await searchInput.checkFilesAndFolders(); + await searchInput.searchForTextAndCloseSearchOptions('my-f'); + await dataTable.selectMultipleItems([file1InSite, file2InSite, folder1InSite, folder2InSite]); + + expect(await toolbar.isViewPresent()).toBe(false, 'View is displayed'); + expect(await toolbar.isDownloadPresent()).toBe(true, 'Download is not displayed'); + expect(await toolbar.isEditPresent()).toBe(false, 'Edit is displayed'); + await toolbar.openMoreMenu(); + expect(await toolbar.menu.isCopyPresent()).toBe(true, `Copy is not displayed for selected files`); + expect(await toolbar.menu.isDeletePresent()).toBe(false, `Delete is displayed for selected files`); + expect(await toolbar.menu.isMovePresent()).toBe(false, `Move is displayed for selected files`); + expect(await toolbar.menu.isFavoritePresent()).toBe(true, `Favorite is not displayed for selected files`); + await toolbar.closeMoreMenu(); + }); + }); }); diff --git a/e2e/suites/actions/toolbar-single-selection.test.ts b/e2e/suites/actions/toolbar-single-selection.test.ts index 6cd5704b6..378da0510 100755 --- a/e2e/suites/actions/toolbar-single-selection.test.ts +++ b/e2e/suites/actions/toolbar-single-selection.test.ts @@ -23,7 +23,7 @@ * along with Alfresco. If not, see . */ -import { LoginPage, BrowsingPage } from '../../pages/pages'; +import { LoginPage, BrowsingPage, SearchResultsPage } from '../../pages/pages'; import { SITE_VISIBILITY } from '../../configs'; import { RepoClient } from '../../utilities/repo-client/repo-client'; import { Utils } from '../../utilities/utils'; @@ -37,8 +37,8 @@ describe('Toolbar actions - single selection : ', () => { const folderForDelete = `folderForDelete-${Utils.random()}`; let folderForDeleteId; const siteName = `site-${Utils.random()}`; - const fileInSite = `fileAdmin-${Utils.random()}.txt`; - const folderInSite = `folderAdmin-${Utils.random()}`; + const fileInSite = `file-site-${Utils.random()}.txt`; + const folderInSite = `folder-site-${Utils.random()}`; const adminPublic = `admin-public-${Utils.random()}`; const adminModerated = `admin-moderated-${Utils.random()}`; @@ -51,6 +51,8 @@ describe('Toolbar actions - single selection : ', () => { const loginPage = new LoginPage(); const page = new BrowsingPage(); const { dataTable, toolbar } = page; + const searchResultsPage = new SearchResultsPage(); + const { searchInput } = searchResultsPage.header; beforeAll(async (done) => { await apis.admin.people.createUser({ username }); @@ -81,6 +83,8 @@ describe('Toolbar actions - single selection : ', () => { await apis.user.favorites.addFavoriteById('site', adminModerated); await apis.user.sites.requestToJoin(adminModerated); + await apis.user.queries.waitForSites(siteName, { expect: 1 }); + await loginPage.loginWith(username); done(); }); @@ -99,27 +103,18 @@ describe('Toolbar actions - single selection : ', () => { xit(''); - describe('General tests', () => { + describe('on Personal Files', () => { beforeEach(async (done) => { await Utils.pressEscape(); await dataTable.clearSelection(); + await page.clickPersonalFilesAndWait(); done(); }); it('selected row is marked with a check circle icon - [C213134]', async () => { - await page.clickPersonalFilesAndWait(); await dataTable.selectItem(fileUser); expect(await dataTable.hasCheckMarkIcon(fileUser)).toBe(true, 'check mark missing'); }); - }); - - describe('on Personal Files', () => { - beforeEach(async (done) => { - await Utils.pressEscape(); - await page.clickPersonalFilesAndWait(); - await dataTable.clearSelection(); - done(); - }); it('actions are not displayed when no item is selected - [C213120]', async () => { expect(await toolbar.isEmpty()).toBe(true, `actions displayed though nothing selected`); @@ -157,10 +152,9 @@ describe('Toolbar actions - single selection : ', () => { describe('on File Libraries', () => { beforeEach(async (done) => { await Utils.pressEscape(); - await page.clickFileLibrariesAndWait(); + await page.goToMyLibrariesAndWait(); await dataTable.doubleClickOnRowByName(siteName); await dataTable.waitForHeader(); - await dataTable.clearSelection(); done(); }); @@ -200,12 +194,16 @@ describe('Toolbar actions - single selection : ', () => { describe('on a library', () => { beforeEach(async (done) => { await Utils.pressEscape(); - await dataTable.clearSelection(); done(); }); - it('Available actions when a library is selected - My Libraries - [C213135]', async () => { - await page.goToMyLibraries(); + afterAll(async (done) => { + await page.clickPersonalFiles(); + done(); + }); + + it('Available actions for a library - My Libraries - [C213135]', async () => { + await page.goToMyLibrariesAndWait(); await dataTable.selectItem(siteName); expect(await toolbar.isEmpty()).toBe(false, 'toolbar not displayed'); expect(await toolbar.isViewDetailsPresent()).toBe(true, `View details is not displayed for ${siteName}`); @@ -213,10 +211,11 @@ describe('Toolbar actions - single selection : ', () => { await toolbar.openMoreMenu(); expect(await toolbar.menu.isDeletePresent()).toBe(true, `Delete is not displayed for ${siteName}`); expect(await toolbar.menu.isFavoritePresent()).toBe(true, `Favorite is not displayed for ${siteName}`); + await toolbar.closeMoreMenu(); }); - it('Available actions when a library is selected - Favorite Libraries - user is a member - [C289892]', async () => { - await page.goToFavoriteLibraries(); + it('Available actions for a library - Favorite Libraries - user is a member - [C289892]', async () => { + await page.goToFavoriteLibrariesAndWait(); await dataTable.selectItem(siteName); expect(await toolbar.isEmpty()).toBe(false, 'toolbar not displayed'); expect(await toolbar.isViewDetailsPresent()).toBe(true, `View details is not displayed for ${siteName}`); @@ -224,10 +223,11 @@ describe('Toolbar actions - single selection : ', () => { await toolbar.openMoreMenu(); expect(await toolbar.menu.isDeletePresent()).toBe(true, `Delete is not displayed for ${siteName}`); expect(await toolbar.menu.isFavoritePresent()).toBe(true, `Favorite is not displayed for ${siteName}`); + await toolbar.closeMoreMenu(); }); - it('Available actions when a library is selected - Favorite Libraries - user is not a member - [C290090]', async () => { - await page.goToFavoriteLibraries(); + it('Available actions for a library - Favorite Libraries - user is not a member - [C290090]', async () => { + await page.goToFavoriteLibrariesAndWait(); await dataTable.selectItem(adminPublic); expect(await toolbar.isEmpty()).toBe(false, 'toolbar not displayed'); expect(await toolbar.isViewDetailsPresent()).toBe(true, `View details is not displayed for ${adminPublic}`); @@ -235,10 +235,11 @@ describe('Toolbar actions - single selection : ', () => { await toolbar.openMoreMenu(); expect(await toolbar.menu.isDeletePresent()).toBe(true, `Delete is not displayed for ${adminPublic}`); expect(await toolbar.menu.isFavoritePresent()).toBe(true, `Favorite is not displayed for ${adminPublic}`); + await toolbar.closeMoreMenu(); }); - it('Available actions when a library is selected - Favorite Libraries - user requested to join - [C290091]', async () => { - await page.goToFavoriteLibraries(); + it('Available actions for a moderated library - Favorite Libraries - user requested to join - [C290091]', async () => { + await page.goToFavoriteLibrariesAndWait(); await dataTable.selectItem(adminModerated); expect(await toolbar.isEmpty()).toBe(false, 'toolbar not displayed'); expect(await toolbar.isViewDetailsPresent()).toBe(true, `View details is not displayed for ${adminModerated}`); @@ -246,6 +247,52 @@ describe('Toolbar actions - single selection : ', () => { await toolbar.openMoreMenu(); expect(await toolbar.menu.isDeletePresent()).toBe(true, `Delete is not displayed for ${adminModerated}`); expect(await toolbar.menu.isFavoritePresent()).toBe(true, `Favorite is not displayed for ${adminModerated}`); + await toolbar.closeMoreMenu(); + }); + + it('Available actions for a library - Search Results - [C290084]', async () => { + await searchInput.clickSearchButton(); + await searchInput.checkLibraries(); + await searchInput.searchForTextAndCloseSearchOptions(siteName); + await dataTable.selectItem(siteName); + + expect(await toolbar.isEmpty()).toBe(false, 'toolbar not displayed'); + expect(await toolbar.isViewDetailsPresent()).toBe(true, `View details is not displayed for ${siteName}`); + expect(await toolbar.isButtonPresent('Leave library')).toBe(true, `Leave is not displayed for ${siteName}`); + await toolbar.openMoreMenu(); + expect(await toolbar.menu.isDeletePresent()).toBe(true, `Delete is not displayed for ${siteName}`); + expect(await toolbar.menu.isFavoritePresent()).toBe(true, `Favorite is not displayed for ${siteName}`); + await toolbar.closeMoreMenu(); + }); + + it('Available actions for a library - Search Results - user is not a member - [C290085]', async () => { + await searchInput.clickSearchButton(); + await searchInput.checkLibraries(); + await searchInput.searchForTextAndCloseSearchOptions(adminPublic); + await dataTable.selectItem(adminPublic); + + expect(await toolbar.isEmpty()).toBe(false, 'toolbar not displayed'); + expect(await toolbar.isViewDetailsPresent()).toBe(true, `View details is not displayed for ${adminPublic}`); + expect(await toolbar.isButtonPresent('Join')).toBe(true, `Join is not displayed for ${adminPublic}`); + await toolbar.openMoreMenu(); + expect(await toolbar.menu.isDeletePresent()).toBe(true, `Delete is not displayed for ${adminPublic}`); + expect(await toolbar.menu.isFavoritePresent()).toBe(true, `Favorite is not displayed for ${adminPublic}`); + await toolbar.closeMoreMenu(); + }); + + it('Available actions for a moderated library - Search Results - user requested to join - [C290086]', async () => { + await searchInput.clickSearchButton(); + await searchInput.checkLibraries(); + await searchInput.searchForTextAndCloseSearchOptions(adminModerated); + await dataTable.selectItem(adminModerated); + + expect(await toolbar.isEmpty()).toBe(false, 'toolbar not displayed'); + expect(await toolbar.isViewDetailsPresent()).toBe(true, `View details is not displayed for ${adminModerated}`); + expect(await toolbar.isButtonPresent('Cancel join request')).toBe(true, `Cancel join is not displayed for ${adminModerated}`); + await toolbar.openMoreMenu(); + expect(await toolbar.menu.isDeletePresent()).toBe(true, `Delete is not displayed for ${adminModerated}`); + expect(await toolbar.menu.isFavoritePresent()).toBe(true, `Favorite is not displayed for ${adminModerated}`); + await toolbar.closeMoreMenu(); }); }); @@ -253,7 +300,6 @@ describe('Toolbar actions - single selection : ', () => { beforeEach(async (done) => { await Utils.pressEscape(); await page.clickSharedFilesAndWait(); - await dataTable.clearSelection(); done(); }); @@ -281,7 +327,6 @@ describe('Toolbar actions - single selection : ', () => { beforeEach(async (done) => { await Utils.pressEscape(); await page.clickRecentFilesAndWait(); - await dataTable.clearSelection(); done(); }); @@ -308,7 +353,6 @@ describe('Toolbar actions - single selection : ', () => { beforeEach(async (done) => { await Utils.pressEscape(); await page.clickFavoritesAndWait(); - await dataTable.clearSelection(); done(); }); @@ -349,7 +393,6 @@ describe('Toolbar actions - single selection : ', () => { beforeEach(async (done) => { await Utils.pressEscape(); await page.clickTrashAndWait(); - await dataTable.clearSelection(); done(); }); @@ -371,4 +414,56 @@ describe('Toolbar actions - single selection : ', () => { expect(await toolbar.isButtonPresent('Restore')).toBe(true, `Restore is not enabled for folder`); }); }); + + describe('on Search Results', () => { + beforeEach(async (done) => { + await Utils.pressEscape(); + await page.clickPersonalFilesAndWait(); + done(); + }); + + it('actions are not displayed when no item is selected - [C291815]', async () => { + await searchInput.clickSearchButton(); + await searchInput.checkFilesAndFolders(); + await searchInput.searchForTextAndCloseSearchOptions(fileInSite); + + expect(await toolbar.isEmpty()).toBe(true, `actions displayed though nothing selected`); + }); + + it('correct actions appear when a file is selected - [C291816]', async () => { + await searchInput.clickSearchButton(); + await searchInput.checkOnlyFiles(); + await searchInput.searchForTextAndCloseSearchOptions(fileUser); + await dataTable.selectItem(fileUser); + + expect(await toolbar.isEmpty()).toBe(false, `actions not displayed for ${fileUser}`); + expect(await toolbar.isViewPresent()).toBe(true, `View is not displayed for ${fileUser}`); + expect(await toolbar.isDownloadPresent()).toBe(true, `Download is not displayed for ${fileUser}`); + expect(await toolbar.isEditPresent()).toBe(false, `Edit is displayed for ${fileUser}`); + await toolbar.openMoreMenu(); + expect(await toolbar.menu.isCopyPresent()).toBe(true, `Copy is not displayed for ${fileUser}`); + expect(await toolbar.menu.isDeletePresent()).toBe(false, `Delete is displayed for ${fileUser}`); + expect(await toolbar.menu.isMovePresent()).toBe(false, `Move is displayed for ${fileUser}`); + expect(await toolbar.menu.isFavoritePresent()).toBe(true, `Favorite is not displayed for ${fileUser}`); + await toolbar.closeMoreMenu(); + }); + + it('correct actions appear when a folder is selected - [C291817]', async () => { + await searchInput.clickSearchButton(); + await searchInput.checkOnlyFolders(); + await searchInput.searchForTextAndCloseSearchOptions(folderUser); + await dataTable.selectItem(folderUser); + + expect(await toolbar.isEmpty()).toBe(false, `actions not displayed for ${folderUser}`); + expect(await toolbar.isViewPresent()).toBe(false, `View is displayed for ${folderUser}`); + expect(await toolbar.isDownloadPresent()).toBe(true, `Download is not enabled for ${folderUser}`); + expect(await toolbar.isEditPresent()).toBe(true, `Edit is not displayed for ${folderUser}`); + await toolbar.openMoreMenu(); + expect(await toolbar.menu.isCopyPresent()).toBe(true, `Copy is not displayed for ${folderUser}`); + expect(await toolbar.menu.isDeletePresent()).toBe(false, `Delete is displayed for ${folderUser}`); + expect(await toolbar.menu.isMovePresent()).toBe(false, `Move is displayed for ${folderUser}`); + expect(await toolbar.menu.isFavoritePresent()).toBe(true, `Favorite is not displayed for ${folderUser}`); + await toolbar.closeMoreMenu(); + }); + }); }); diff --git a/e2e/suites/actions/unshare-file.test.ts b/e2e/suites/actions/unshare-file.test.ts index 23b342c4b..84c0c5779 100755 --- a/e2e/suites/actions/unshare-file.test.ts +++ b/e2e/suites/actions/unshare-file.test.ts @@ -214,7 +214,7 @@ describe('Unshare a file', () => { beforeEach(async (done) => { await page.refresh(); - await page.clickFileLibrariesAndWait(); + await page.goToMyLibrariesAndWait(); await dataTable.doubleClickOnRowByName(siteName); await dataTable.waitForHeader(); await dataTable.doubleClickOnRowByName(parentInSite); @@ -733,7 +733,7 @@ describe('Unshare a file', () => { }); it('on File Libraries - file shared by other user - [C286682]', async () => { - await page.clickFileLibrariesAndWait(); + await page.goToMyLibrariesAndWait(); await dataTable.doubleClickOnRowByName(sitePrivate); await dataTable.waitForHeader(); await dataTable.selectItem(file1); @@ -744,7 +744,7 @@ describe('Unshare a file', () => { }); it('on File Libraries - file shared by the user - [C286701]', async () => { - await page.clickFileLibrariesAndWait(); + await page.goToMyLibrariesAndWait(); await dataTable.doubleClickOnRowByName(sitePrivate); await dataTable.waitForHeader(); await dataTable.selectItem(file2); diff --git a/e2e/suites/application/page-titles.test.ts b/e2e/suites/application/page-titles.test.ts index cdb636c34..16fadbe0d 100755 --- a/e2e/suites/application/page-titles.test.ts +++ b/e2e/suites/application/page-titles.test.ts @@ -24,12 +24,11 @@ */ import { browser } from 'protractor'; -import { SIDEBAR_LABELS, PAGE_TITLES } from '../../configs'; +import { PAGE_TITLES } from '../../configs'; import { LoginPage, BrowsingPage } from '../../pages/pages'; import { RepoClient } from '../../utilities/repo-client/repo-client'; import { Utils } from '../../utilities/utils'; - describe('Page titles', () => { const loginPage = new LoginPage(); const page = new BrowsingPage(); @@ -73,10 +72,8 @@ describe('Page titles', () => { }); it('Personal Files page - [C217157]', async () => { - const label = SIDEBAR_LABELS.PERSONAL_FILES; - - await page.sidenav.navigateToLink(label); - expect(await browser.getTitle()).toContain(label); + await page.clickPersonalFiles(); + expect(await browser.getTitle()).toContain(PAGE_TITLES.PERSONAL_FILES); }); it('My Libraries page - [C217158]', async () => { @@ -90,31 +87,23 @@ describe('Page titles', () => { }); it('Shared Files page - [C217159]', async () => { - const label = SIDEBAR_LABELS.SHARED_FILES; - - await page.sidenav.navigateToLink(label); - expect(await browser.getTitle()).toContain(label); + await page.clickSharedFiles(); + expect(await browser.getTitle()).toContain(PAGE_TITLES.SHARED_FILES); }); it('Recent Files page - [C217160]', async () => { - const label = SIDEBAR_LABELS.RECENT_FILES; - - await page.sidenav.navigateToLink(label); - expect(await browser.getTitle()).toContain(label); + await page.clickRecentFiles(); + expect(await browser.getTitle()).toContain(PAGE_TITLES.RECENT_FILES); }); it('Favorites page - [C217161]', async () => { - const label = SIDEBAR_LABELS.FAVORITES; - - await page.sidenav.navigateToLink(label); - expect(await browser.getTitle()).toContain(label); + await page.clickFavorites(); + expect(await browser.getTitle()).toContain(PAGE_TITLES.FAVORITES); }); it('Trash page - [C217162]', async () => { - const label = SIDEBAR_LABELS.TRASH; - - await page.sidenav.navigateToLink(label); - expect(await browser.getTitle()).toContain(label); + await page.clickTrash(); + expect(await browser.getTitle()).toContain(PAGE_TITLES.TRASH); }); it('File Preview page - [C280415]', async () => { diff --git a/e2e/suites/info-drawer/library-properties.test.ts b/e2e/suites/info-drawer/library-properties.test.ts index 7e8dd04d7..34391b709 100755 --- a/e2e/suites/info-drawer/library-properties.test.ts +++ b/e2e/suites/info-drawer/library-properties.test.ts @@ -187,7 +187,7 @@ describe('Library properties', () => { }); it('Warning appears when editing the name of the library by entering an existing name - [C289341]', async () => { - await apis.user.queries.waitForApi(site.name, { expect: 1 }); + await apis.user.queries.waitForSites(site.name, { expect: 1 }); await dataTable.selectItem(siteDup); await page.toolbar.clickViewDetails(); diff --git a/e2e/suites/list-views/file-libraries.test.ts b/e2e/suites/list-views/file-libraries.test.ts index c9d22662a..aea6e6be4 100755 --- a/e2e/suites/list-views/file-libraries.test.ts +++ b/e2e/suites/list-views/file-libraries.test.ts @@ -100,7 +100,7 @@ describe('File Libraries', () => { describe('My Libraries', () => { beforeEach(async (done) => { - await page.goToMyLibraries(); + await page.goToMyLibrariesAndWait(); done(); }); @@ -171,7 +171,7 @@ describe('File Libraries', () => { describe('Favorite Libraries', () => { beforeEach(async (done) => { - await page.goToFavoriteLibraries(); + await page.goToFavoriteLibrariesAndWait(); done(); }); diff --git a/e2e/suites/navigation/breadcrumb.test.ts b/e2e/suites/navigation/breadcrumb.test.ts index 8f1c1626f..c1d76b3cb 100755 --- a/e2e/suites/navigation/breadcrumb.test.ts +++ b/e2e/suites/navigation/breadcrumb.test.ts @@ -90,13 +90,13 @@ describe('Breadcrumb', () => { }); it('My Libraries breadcrumb main node - [C260966]', async () => { - await page.goToMyLibraries(); + await page.goToMyLibrariesAndWait(); expect(await breadcrumb.getItemsCount()).toEqual(1, 'Breadcrumb has incorrect number of items'); expect(await breadcrumb.getCurrentItemName()).toBe('My Libraries'); }); it('Favorite Libraries breadcrumb main node - [C289891]', async () => { - await page.goToFavoriteLibraries(); + await page.goToFavoriteLibrariesAndWait(); expect(await breadcrumb.getItemsCount()).toEqual(1, 'Breadcrumb has incorrect number of items'); expect(await breadcrumb.getCurrentItemName()).toBe('Favorite Libraries'); }); @@ -186,7 +186,7 @@ describe('Breadcrumb', () => { }); describe('as admin', () => { - const user2 = 'a_user'; + const user2 = `user2-${Utils.random()}`; const userFolder = `userFolder-${Utils.random()}`; let userFolderId; const user2Api = new RepoClient(user2, user2); diff --git a/e2e/suites/navigation/sidebar.test.ts b/e2e/suites/navigation/sidebar.test.ts index ed61a3dff..bbc585fa6 100755 --- a/e2e/suites/navigation/sidebar.test.ts +++ b/e2e/suites/navigation/sidebar.test.ts @@ -40,7 +40,7 @@ describe('Sidebar', () => { it('has "Personal Files" as default - [C217149]', async () => { expect(await browser.getCurrentUrl()).toContain(APP_ROUTES.PERSONAL_FILES); - expect(await sidenav.isActive(SIDEBAR_LABELS.PERSONAL_FILES)).toBe(true, 'Active link'); + expect(await sidenav.isActive(SIDEBAR_LABELS.PERSONAL_FILES)).toBe(true, 'Default active link'); }); it('File Libraries has correct sub-categories - [C217150]', async () => { diff --git a/e2e/suites/pagination/pag-file-libraries.test.ts b/e2e/suites/pagination/pag-file-libraries.test.ts index 132ba6446..64433da0a 100755 --- a/e2e/suites/pagination/pag-file-libraries.test.ts +++ b/e2e/suites/pagination/pag-file-libraries.test.ts @@ -52,7 +52,7 @@ describe('Pagination on multiple pages on File Libraries', () => { }); beforeEach(async (done) => { - await page.clickFileLibrariesAndWait(); + await page.goToMyLibrariesAndWait(); done(); }); diff --git a/e2e/suites/search/search-input.test.ts b/e2e/suites/search/search-input.test.ts index 78cfb5460..f616d47b4 100644 --- a/e2e/suites/search/search-input.test.ts +++ b/e2e/suites/search/search-input.test.ts @@ -38,6 +38,7 @@ describe('Search input', () => { beforeEach(async (done) => { await Utils.pressEscape(); + await page.clickPersonalFiles(); done(); }); diff --git a/e2e/suites/search/search-results-libraries.test.ts b/e2e/suites/search/search-results-libraries.test.ts index a32025903..e44431d84 100644 --- a/e2e/suites/search/search-results-libraries.test.ts +++ b/e2e/suites/search/search-results-libraries.test.ts @@ -102,7 +102,7 @@ describe('Search results - libraries', () => { await apis.admin.sites.createSite(adminPrivate, SITE_VISIBILITY.PRIVATE); await apis.user.sites.waitForApi({ expect: 12 }); - await apis.user.queries.waitForApi('lib', { expect: 2 }); + await apis.user.queries.waitForSites('lib', { expect: 2 }); await loginPage.loginWith(username); done(); diff --git a/e2e/suites/search/search-results.test.ts b/e2e/suites/search/search-results.test.ts index c6024b6ae..ed400e844 100644 --- a/e2e/suites/search/search-results.test.ts +++ b/e2e/suites/search/search-results.test.ts @@ -52,7 +52,7 @@ describe('Search results', () => { await apis.user.sites.createSite(site); await apis.user.search.waitForApi(username, { expect: 1 }); - await apis.user.queries.waitForApi(site, { expect: 1 }); + await apis.user.queries.waitForSites(site, { expect: 1 }); await loginPage.loginWith(username); done(); diff --git a/e2e/suites/viewer/viewer-actions.test.ts b/e2e/suites/viewer/viewer-actions.test.ts index 5f55ceeb3..a60585dc3 100755 --- a/e2e/suites/viewer/viewer-actions.test.ts +++ b/e2e/suites/viewer/viewer-actions.test.ts @@ -251,7 +251,7 @@ describe('Viewer actions', () => { }); beforeEach(async (done) => { - await page.clickFileLibrariesAndWait(); + await page.goToMyLibrariesAndWait(); await dataTable.doubleClickOnRowByName(siteName); await dataTable.waitForHeader(); done(); diff --git a/e2e/suites/viewer/viewer-general.test.ts b/e2e/suites/viewer/viewer-general.test.ts index 2a5f72ba5..70a3144e0 100755 --- a/e2e/suites/viewer/viewer-general.test.ts +++ b/e2e/suites/viewer/viewer-general.test.ts @@ -23,7 +23,6 @@ * along with Alfresco. If not, see . */ -import { protractor, browser } from 'protractor'; import { LoginPage, BrowsingPage } from '../../pages/pages'; import { FILES, SITE_VISIBILITY } from '../../configs'; import { RepoClient } from '../../utilities/repo-client/repo-client'; @@ -83,7 +82,7 @@ describe('Viewer general', () => { }); afterEach(async (done) => { - await browser.actions().sendKeys(protractor.Key.ESCAPE).perform(); + await Utils.pressEscape(); done(); }); @@ -101,7 +100,7 @@ describe('Viewer general', () => { it('Viewer opens when clicking the View action for a file - [C279270]', async () => { await dataTable.selectItem(xlsxFile); - await page.toolbar.getButtonByTitleAttribute('View').click(); + await page.toolbar.clickView(); expect(await viewer.isViewerOpened()).toBe(true, 'Viewer is not opened'); }); @@ -139,7 +138,7 @@ describe('Viewer general', () => { }); it('Viewer opens for a file from File Libraries - [C284633]', async () => { - await page.clickFileLibrariesAndWait(); + await page.goToMyLibrariesAndWait(); await dataTable.doubleClickOnRowByName(siteUser); await dataTable.waitForHeader(); await dataTable.doubleClickOnRowByName(fileInSite); diff --git a/e2e/utilities/repo-client/apis/queries/queries-api.ts b/e2e/utilities/repo-client/apis/queries/queries-api.ts index 87aba7bc4..e2ce4ef67 100755 --- a/e2e/utilities/repo-client/apis/queries/queries-api.ts +++ b/e2e/utilities/repo-client/apis/queries/queries-api.ts @@ -42,7 +42,17 @@ export class QueriesApi extends RepoApi { return this.alfrescoJsApi.core.queriesApi.findSites(searchTerm, data); } - async waitForApi(searchTerm, data) { + async findNodes(searchTerm: string) { + const data = { + term: searchTerm, + fields: ['name'] + }; + + await this.apiAuth(); + return this.alfrescoJsApi.core.queriesApi.findNodes(searchTerm, data); + } + + async waitForSites(searchTerm, data) { try { const sites = async () => { const totalItems = (await this.findSites(searchTerm)).list.pagination.totalItems; @@ -58,4 +68,21 @@ export class QueriesApi extends RepoApi { console.log('-----> catch queries findSites: ', error); } } + + async waitForFilesAndFolders(searchTerm, data) { + try { + const nodes = async () => { + const totalItems = (await this.findNodes(searchTerm)).list.pagination.totalItems; + if ( totalItems !== data.expect ) { + return Promise.reject(totalItems); + } else { + return Promise.resolve(totalItems); + } + }; + + return await Utils.retryCall(nodes); + } catch (error) { + console.log('-----> catch queries findFilesAndFolders: ', error); + } + } } diff --git a/e2e/utilities/repo-client/apis/search/search-api.ts b/e2e/utilities/repo-client/apis/search/search-api.ts index c1f23f4bb..135d2006b 100755 --- a/e2e/utilities/repo-client/apis/search/search-api.ts +++ b/e2e/utilities/repo-client/apis/search/search-api.ts @@ -47,7 +47,36 @@ export class SearchApi extends RepoApi { await this.apiAuth(); return this.alfrescoJsApi.search.searchApi.search(data); + } + async queryNodesNames(searchTerm: string) { + const data = { + query: { + query: `cm:name:\"${searchTerm}*\"`, + language: 'afts' + }, + filterQueries: [ + { query: `+TYPE:'cm:folder' OR +TYPE:'cm:content'`} + ] + }; + + await this.apiAuth(); + return this.alfrescoJsApi.search.searchApi.search(data); + } + + async queryNodesExactNames(searchTerm: string) { + const data = { + query: { + query: `cm:name:\"${searchTerm}\"`, + language: 'afts' + }, + filterQueries: [ + { query: `+TYPE:'cm:folder' OR +TYPE:'cm:content'`} + ] + }; + + await this.apiAuth(); + return this.alfrescoJsApi.search.searchApi.search(data); } async waitForApi(username, data) { @@ -66,4 +95,21 @@ export class SearchApi extends RepoApi { console.log('-----> catch search: ', error); } } + + async waitForNodes(searchTerm: string, data) { + try { + const nodes = async () => { + const totalItems = (await this.queryNodesNames(searchTerm)).list.pagination.totalItems; + if ( totalItems !== data.expect) { + return Promise.reject(totalItems); + } else { + return Promise.resolve(totalItems); + } + }; + + return await Utils.retryCall(nodes); + } catch (error) { + console.log('-----> catch search nodes: ', error); + } + } } diff --git a/src/app/components/sidenav/sidenav.component.html b/src/app/components/sidenav/sidenav.component.html index 6bda93f6a..e3792dc90 100644 --- a/src/app/components/sidenav/sidenav.component.html +++ b/src/app/components/sidenav/sidenav.component.html @@ -66,6 +66,7 @@