/*! * Copyright © 2005-2023 Hyland Software, Inc. and its affiliates. All rights reserved. * * Alfresco Example Content Application * * 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 * from Hyland Software. If not, see . */ import { AdminActions, UserActions, LoginPage, BrowsingPage, FILES, RepoClient, Utils, Viewer, ContentNodeSelectorDialog, UploadNewVersionDialog, UploadFilesDialog } from '@alfresco/aca-testing-shared'; describe('Viewer actions', () => { const username = `user-${Utils.random()}`; const docxFile = FILES.docxFile; const docxFile2 = FILES.docxFile2; const xlsxFileForMove = FILES.xlsxFile; const pdfFileForDelete = FILES.pdfFile; const apis = { user: new RepoClient(username, username) }; const loginPage = new LoginPage(); const page = new BrowsingPage(); const dataTable = page.dataTable; const viewer = new Viewer(); const { toolbar } = viewer; const copyMoveDialog = new ContentNodeSelectorDialog(); const uploadNewVersionDialog = new UploadNewVersionDialog(); const adminApiActions = new AdminActions(); const userActions = new UserActions(); const uploadFilesDialog = new UploadFilesDialog(); beforeAll(async () => { await adminApiActions.createUser({ username }); await userActions.login(username, username); }); describe('from Personal Files', () => { const parent = `parentPF-${Utils.random()}`; let parentId: string; const destination = `destPF-${Utils.random()}`; let destinationId: string; const docxPersonalFiles = `docxPF-${Utils.random()}.docx`; const xlsxPersonalFiles = `xlsxPF-${Utils.random()}.xlsx`; const pdfPersonalFiles = `pdfPF-${Utils.random()}.pdf`; const filePersonalFiles = docxFile2; let filePersonalFilesId: string; const fileForCancelEditing = `file2-${Utils.random()}.docx`; let fileForCancelEditingId: string; const fileForUploadNewVersion = `file3-${Utils.random()}.docx`; let fileForUploadNewVersionId: string; const fileForUploadNewVersion2 = `file4-${Utils.random()}.docx`; let fileForUploadNewVersionId2: string; beforeAll(async () => { try { parentId = await apis.user.createFolder(parent); destinationId = await apis.user.createFolder(destination); await apis.user.upload.uploadFileWithRename(docxFile, parentId, docxPersonalFiles); filePersonalFilesId = (await apis.user.upload.uploadFile(docxFile2, parentId)).entry.id; await apis.user.upload.uploadFileWithRename(xlsxFileForMove, parentId, xlsxPersonalFiles); await apis.user.upload.uploadFileWithRename(pdfFileForDelete, parentId, pdfPersonalFiles); fileForCancelEditingId = (await apis.user.upload.uploadFileWithRename(docxFile, parentId, fileForCancelEditing)).entry.id; fileForUploadNewVersionId = (await apis.user.upload.uploadFileWithRename(docxFile, parentId, fileForUploadNewVersion)).entry.id; fileForUploadNewVersionId2 = (await apis.user.upload.uploadFileWithRename(docxFile, parentId, fileForUploadNewVersion2)).entry.id; await userActions.lockNodes([fileForCancelEditingId, fileForUploadNewVersionId, fileForUploadNewVersionId2]); await loginPage.loginWith(username); } catch {} }); beforeEach(async () => { try { await page.clickPersonalFilesAndWait(); await dataTable.doubleClickOnRowByName(parent); await dataTable.waitForHeader(); } catch {} }); afterEach(async () => { await Utils.pressEscape(); await uploadFilesDialog.closeUploadDialog(); }); afterAll(async () => { try { await userActions.login(username, username); await apis.user.nodes.deleteNodesById([parentId, destinationId]); await userActions.emptyTrashcan(); } catch {} }); it('[C297585] Cancel Editing action', async () => { await dataTable.doubleClickOnRowByName(fileForCancelEditing); await viewer.waitForViewerToOpen(); await toolbar.clickMoreActionsCancelEditing(); expect(await apis.user.nodes.isFileLockedWriteWithRetry(fileForCancelEditingId, false)).toBe(false, `${fileForCancelEditing} is still locked`); expect(await viewer.isViewerOpened()).toBe(true, 'Viewer is not open'); }); it('[C297586] Upload new version action', async () => { await dataTable.doubleClickOnRowByName(filePersonalFiles); await viewer.waitForViewerToOpen(); await Utils.uploadFileNewVersion(docxFile2); await page.waitForDialog(); await uploadNewVersionDialog.majorOption.click(); await uploadNewVersionDialog.enterDescription('new major version description'); await uploadNewVersionDialog.uploadButton.click(); expect(await viewer.isViewerOpened()).toBe(true, 'Viewer is not open'); expect(await viewer.getFileTitle()).toContain(docxFile2); expect(await apis.user.nodes.getFileVersionType(filePersonalFilesId)).toEqual('MAJOR', 'File has incorrect version type'); expect(await apis.user.nodes.getFileVersionLabel(filePersonalFilesId)).toEqual('2.0', 'File has incorrect version label'); }); it('[MNT-21058] Upload new version action when node is locked', async () => { await dataTable.doubleClickOnRowByName(fileForUploadNewVersion2); await viewer.waitForViewerToOpen(); await Utils.uploadFileNewVersion(docxFile); await page.waitForDialog(); await uploadNewVersionDialog.uploadButton.click(); await uploadNewVersionDialog.waitForDialogToClose(); await viewer.waitForViewerToOpen(); await viewer.waitForFileTitleToBeDisplayed(docxFile); await toolbar.openMoreMenu(); expect(await toolbar.menu.cancelEditingAction.isPresent()).toBe(false, `'Cancel Editing' button shouldn't be shown`); expect(await toolbar.menu.editOfflineAction.isPresent()).toBe(true, `'Edit Offline' should be shown`); }); }); describe('from Recent Files', () => { const parent = `parentRF-${Utils.random()}`; let parentId: string; const destination = `destRF-${Utils.random()}`; let destinationId: string; const docxRecentFiles = `docxRF-${Utils.random()}.docx`; const xlsxRecentFiles = `xlsxRF-${Utils.random()}.xlsx`; const pdfRecentFiles = `pdfRF-${Utils.random()}.pdf`; const fileForEditOffline = `file1-${Utils.random()}.docx`; const fileForCancelEditing = `file2-${Utils.random()}.docx`; let fileForCancelEditingId: string; const fileForUploadNewVersion = `file3-${Utils.random()}.docx`; let fileForUploadNewVersionId: string; beforeAll(async () => { try { await apis.user.search.waitForApi(username, { expect: 0 }); parentId = (await apis.user.nodes.createFolder(parent)).entry.id; destinationId = (await apis.user.nodes.createFolder(destination)).entry.id; await apis.user.upload.uploadFileWithRename(docxFile, parentId, docxRecentFiles); await apis.user.upload.uploadFile(docxFile2, parentId); await apis.user.upload.uploadFileWithRename(docxFile, parentId, fileForEditOffline); fileForCancelEditingId = (await apis.user.upload.uploadFileWithRename(docxFile, parentId, fileForCancelEditing)).entry.id; fileForUploadNewVersionId = (await apis.user.upload.uploadFileWithRename(docxFile, parentId, fileForUploadNewVersion)).entry.id; await userActions.lockNodes([fileForCancelEditingId, fileForUploadNewVersionId]); await apis.user.upload.uploadFileWithRename(xlsxFileForMove, parentId, xlsxRecentFiles); await apis.user.upload.uploadFileWithRename(pdfFileForDelete, parentId, pdfRecentFiles); await apis.user.search.waitForApi(username, { expect: 7 }); await loginPage.loginWith(username); } catch {} }); beforeEach(async () => { await page.clickRecentFilesAndWait(); }); afterEach(async () => { await Utils.pressEscape(); await uploadFilesDialog.closeUploadDialog(); }); afterAll(async () => { try { await userActions.login(username, username); await apis.user.nodes.deleteNodesById([parentId, destinationId]); await userActions.emptyTrashcan(); } catch {} }); it('[C286384] Copy action', async () => { await dataTable.doubleClickOnRowByName(docxRecentFiles); expect(await viewer.isViewerOpened()).toBe(true, 'Viewer is not opened'); await toolbar.clickMoreActionsCopy(); expect(await copyMoveDialog.isDialogOpen()).toBe(true, 'Dialog is not open'); await copyMoveDialog.selectLocation('Personal Files'); await copyMoveDialog.selectDestination(destination); await copyMoveDialog.copyButton.click(); expect(await page.getSnackBarMessage()).toContain('Copied 1 item'); await viewer.closeButton.click(); expect(await dataTable.isItemPresent(docxRecentFiles)).toBe(true, 'Item is not in the list'); await page.clickPersonalFilesAndWait(); await dataTable.doubleClickOnRowByName(destination); expect(await dataTable.isItemPresent(docxRecentFiles)).toBe(true, 'Item is not present in destination'); await apis.user.nodes.deleteNodeChildren(destinationId); }); }); });