diff --git a/e2e/suites/info-drawer/file-preview.test.ts b/e2e/suites/info-drawer/file-preview.test.ts new file mode 100755 index 000000000..fbfe68029 --- /dev/null +++ b/e2e/suites/info-drawer/file-preview.test.ts @@ -0,0 +1,71 @@ +/*! + * @license + * Alfresco Example Content Application + * + * Copyright (C) 2005 - 2020 Alfresco Software Limited + * + * This file is part of the Alfresco Example Content Application. + * If the software was purchased under a paid Alfresco license, the terms of + * the paid license agreement will prevail. Otherwise, the software is + * provided under the following open source license terms: + * + * The Alfresco Example Content Application is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * The Alfresco Example Content Application is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Alfresco. If not, see . + */ + +import { AdminActions, LoginPage, BrowsingPage, RepoClient, FILES, SearchInput, DataTable, InfoDrawer } from '@alfresco/aca-testing-shared'; +import { BrowserActions, ViewerPage } from '@alfresco/adf-testing'; + +describe('File preview', () => { + const timestamp = new Date().getTime(); + const username = `user1-${timestamp}`; + const fileName = `file1-${timestamp}.pdf`; + let fileId: string; + + const apis = { + user: new RepoClient(username, username) + }; + + const infoDrawer = new InfoDrawer(); + const loginPage = new LoginPage(); + const browsingPage = new BrowsingPage(); + const dataTable = new DataTable(); + const adminApiActions = new AdminActions(); + const searchInput = new SearchInput(); + const viewerPage = new ViewerPage(); + + beforeAll(async () => { + await adminApiActions.createUser({ username }); + fileId = (await apis.user.upload.uploadFileWithRename(FILES.pdfFile, '-my-', fileName)).entry.id; + await apis.user.search.waitForNodes(fileName, { expect: 1 }); + await loginPage.loginWith(username); + }); + + afterAll(async () => { + await apis.user.nodes.deleteNodeById(fileId); + }); + + beforeEach(async () => { + await browsingPage.clickPersonalFilesAndWait(); + }); + + it('[C595967] Should preview document from the info drawer', async () => { + const pageNumber = '1'; + const documentText = 'This is a small demonstration'; + await searchInput.searchUntilResult(fileName, 'URL'); + await dataTable.selectItem(fileName); + await BrowserActions.click(browsingPage.toolbar.viewDetailsButton); + await infoDrawer.previewButton.click(); + await viewerPage.checkFileContent(pageNumber, documentText); + }); +}); diff --git a/projects/aca-testing-shared/src/components/info-drawer/info-drawer.ts b/projects/aca-testing-shared/src/components/info-drawer/info-drawer.ts index 58764514f..9df1134e9 100755 --- a/projects/aca-testing-shared/src/components/info-drawer/info-drawer.ts +++ b/projects/aca-testing-shared/src/components/info-drawer/info-drawer.ts @@ -46,6 +46,7 @@ export class InfoDrawer extends Component { expandDetailsButton = TestElement.byCss(`button[title='Expand']`); selectedTab = TestElement.byCss(`.mat-tab-list [aria-selected='true'] div`); expandedDetailsPermissionsTab = TestElement.byText('.acs-details-container .mat-tab-label-content', 'Permissions'); + previewButton = TestElement.byCss(`button[title='Preview File']`); constructor(ancestor?: string) { super('adf-info-drawer', ancestor); diff --git a/projects/aca-testing-shared/src/components/search/search-input.ts b/projects/aca-testing-shared/src/components/search/search-input.ts index 54723dc70..268ea6161 100755 --- a/projects/aca-testing-shared/src/components/search/search-input.ts +++ b/projects/aca-testing-shared/src/components/search/search-input.ts @@ -34,6 +34,7 @@ export class SearchInput extends Component { searchControl = browser.element(by.css('.app-search-control')); searchInput = TestElement.byCss('input[id="app-control-input"]'); + searchResult = TestElement.byCss('.search-file-name'); searchOptionsArea = browser.element(by.id('search-options')); searchFilesOption = this.searchOptionsArea.element(by.cssContainingText('.mat-checkbox', 'Files')); @@ -156,4 +157,23 @@ export class SearchInput extends Component { await this.searchInput.typeText(text); await BrowserActions.click(this.searchButton); } + + async searchByURL(text: string){ + const query = Buffer.from(text, 'utf-8').toString(); + await BrowserActions.getUrl(`#/search;q=${query}`); + } + + async searchUntilResult(text: string, methodType: 'URL' | 'UI', waitPerSearch: number = 2000, timeout: number = 20000) { + const attempts = Math.round(timeout/waitPerSearch); + let loopCount = 0; + let myPromise = new Promise((resolve, reject) => { + const check = async () => { + loopCount++; + loopCount >= attempts ? reject('File not found') : methodType === 'UI' ? await this.searchFor(text) : await this.searchByURL(text); + await this.searchResult.isPresent(waitPerSearch) ? resolve('File found') : setTimeout(check, waitPerSearch); + } + return check(); + }); + return myPromise; + } }