diff --git a/.github/workflows/pull-request.yml b/.github/workflows/pull-request.yml index 12a115bd8f..812f8ec0a5 100644 --- a/.github/workflows/pull-request.yml +++ b/.github/workflows/pull-request.yml @@ -115,8 +115,6 @@ jobs: id: 2 - name: "viewer,infoDrawer,extensions" id: 3 - - name: "shareActions" - id: 4 - name: "copyMoveActions" id: 6 - name: "deleteActions" @@ -176,8 +174,10 @@ jobs: id: 7 - name: "list-views" id: 8 - - name: "copy-move-actions" + - name: "share-action" id: 9 + - name: "copy-move-actions" + id: 10 steps: - name: Checkout uses: actions/checkout@v3 diff --git a/e2e/playwright/share-action/.eslintrc.json b/e2e/playwright/share-action/.eslintrc.json new file mode 100644 index 0000000000..48440bfc38 --- /dev/null +++ b/e2e/playwright/share-action/.eslintrc.json @@ -0,0 +1,26 @@ +{ + "extends": "../../../.eslintrc.json", + "ignorePatterns": [ + "!**/*" + ], + "overrides": [ + { + "files": [ + "*.ts" + ], + "parserOptions": { + "project": [ + "e2e/playwright/share-action/tsconfig.e2e.json" + ], + "createDefaultProgram": true + }, + "plugins": [ + "rxjs", + "unicorn" + ], + "rules": { + "@typescript-eslint/no-floating-promises": "off" + } + } + ] +} diff --git a/e2e/playwright/share-action/exclude.tests.json b/e2e/playwright/share-action/exclude.tests.json new file mode 100644 index 0000000000..0967ef424b --- /dev/null +++ b/e2e/playwright/share-action/exclude.tests.json @@ -0,0 +1 @@ +{} diff --git a/e2e/playwright/share-action/playwright.config.ts b/e2e/playwright/share-action/playwright.config.ts new file mode 100644 index 0000000000..5b20171bab --- /dev/null +++ b/e2e/playwright/share-action/playwright.config.ts @@ -0,0 +1,44 @@ +/*! + * 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 { PlaywrightTestConfig } from '@playwright/test'; +import { CustomConfig, getGlobalConfig, getExcludedTestsRegExpArray } from '@alfresco/playwright-shared'; +import EXCLUDED_JSON from './exclude.tests.json'; + +const config: PlaywrightTestConfig = { + ...getGlobalConfig, + + grepInvert: getExcludedTestsRegExpArray(EXCLUDED_JSON, 'Share Action'), + projects: [ + { + name: 'Share Action', + testDir: './src/tests', + use: { + users: ['hruser'] + } + } + ] +}; + +export default config; diff --git a/e2e/playwright/share-action/project.json b/e2e/playwright/share-action/project.json new file mode 100644 index 0000000000..2dd16e9b54 --- /dev/null +++ b/e2e/playwright/share-action/project.json @@ -0,0 +1,22 @@ +{ + "name": "share-action-e2e", + "$schema": "../../../node_modules/nx/schemas/project-schema.json", + "sourceRoot": "e2e/playwright/share-action/src", + "projectType": "application", + "targets": { + "e2e": { + "executor": "nx:run-commands", + "options": { + "commands": ["npx playwright test --config=e2e/playwright/share-action/playwright.config.ts"] + }, + "configurations": { + "production": { + "devServerTarget": "content-ce:serve:production" + } + } + }, + "lint": { + "executor": "@angular-eslint/builder:lint" + } + } +} diff --git a/e2e/playwright/actions/src/tests/share/share-file.spec.ts b/e2e/playwright/share-action/src/tests/share/share-file.spec.ts similarity index 100% rename from e2e/playwright/actions/src/tests/share/share-file.spec.ts rename to e2e/playwright/share-action/src/tests/share/share-file.spec.ts diff --git a/e2e/playwright/share-action/src/tests/share/unshare-file-search-results.spec.ts b/e2e/playwright/share-action/src/tests/share/unshare-file-search-results.spec.ts new file mode 100755 index 0000000000..49d9e572ec --- /dev/null +++ b/e2e/playwright/share-action/src/tests/share/unshare-file-search-results.spec.ts @@ -0,0 +1,209 @@ +/*! + * 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 { Site } from '@alfresco/js-api'; +import { ApiClientFactory, FileActionsApi, NodesApi, SharedLinksApi, SitesApi, Utils, test, timeouts } from '@alfresco/playwright-shared'; +import { expect } from '@playwright/test'; + +test.describe('Unshare a file from Search Results', () => { + const random = Utils.random(); + + const username = `user-${random}`; + const parent = `parent-${random}`; + let parentId: string; + const searchRandom = random; + let sitesApi: SitesApi; + + let file1Id: string; + let file2Id: string; + let file3Id: string; + let file4Id: string; + const file1 = `search-file-${searchRandom}-1.txt`; + const file2 = `search-file-${searchRandom}-2.txt`; + const file3 = `search-file-${searchRandom}-3.txt`; + const file4 = `search-file-${searchRandom}-4.txt`; + + const sitePrivate = `site-private-${random}`; + + let fileSite2Id: string; + const fileSite1 = `search-file-${searchRandom}-Site1.txt`; + const fileSite2 = `search-file-${searchRandom}-Site2.txt`; + + const apiClientFactory = new ApiClientFactory(); + + test.beforeAll(async () => { + try { + test.setTimeout(timeouts.extendedTest); + await apiClientFactory.setUpAcaBackend('admin'); + await apiClientFactory.createUser({ username }); + const nodesApi = await NodesApi.initialize(username, username); + sitesApi = await SitesApi.initialize(username, username); + const shareApi = await SharedLinksApi.initialize(username, username); + const filesAction = await FileActionsApi.initialize(username, username); + parentId = (await nodesApi.createFolder(parent)).entry.id; + + file1Id = (await nodesApi.createFile(file1, parentId)).entry.id; + file2Id = (await nodesApi.createFile(file2, parentId)).entry.id; + file3Id = (await nodesApi.createFile(file3, parentId)).entry.id; + file4Id = (await nodesApi.createFile(file4, parentId)).entry.id; + + await sitesApi.createSite(sitePrivate, Site.VisibilityEnum.PRIVATE); + const docLibId = await sitesApi.getDocLibId(sitePrivate); + + const fileSite1Id = (await nodesApi.createFile(fileSite1, docLibId)).entry.id; + fileSite2Id = (await nodesApi.createFile(fileSite2, docLibId)).entry.id; + + await sitesApi.addSiteMember(sitePrivate, username, Site.RoleEnum.SiteConsumer); + + await shareApi.shareFilesByIds([fileSite1Id]); + await shareApi.waitForFilesToBeShared([fileSite1Id]); + + await shareApi.shareFilesByIds([file1Id, file2Id, file3Id, file4Id, fileSite2Id]); + await shareApi.waitForFilesToBeShared([file1Id, file2Id, file3Id, file4Id, fileSite2Id]); + + await filesAction.waitForNodes(`search-file-${searchRandom}`, { expect: 6 }); + } catch (error) { + throw new Error(`----- beforeAll failed : ${error}`); + } + }); + + test.beforeEach(async ({ loginPage, personalFiles }) => { + await loginPage.navigate(); + await loginPage.loginUser({ username: username, password: username }); + await personalFiles.waitForPageLoad(); + }); + + test.afterAll(async () => { + await apiClientFactory.nodes.deleteNode(parentId, { permanent: true }); + await sitesApi.deleteSites([sitePrivate]); + }); + + test('[C306995] Unshare dialog UI', async ({ personalFiles, searchPage }) => { + await personalFiles.acaHeader.searchButton.click(); + await searchPage.searchInput.searchButton.click(); + await searchPage.searchOverlay.checkFilesAndFolders(); + await searchPage.searchOverlay.searchFor(file1); + + await personalFiles.dataTable.selectItem(file1); + await personalFiles.acaHeader.shareButton.click(); + await personalFiles.viewerDialog.shareDialogTitle.waitFor({ state: 'attached', timeout: timeouts.normal }); + + expect(await personalFiles.shareDialog.isShareToggleChecked()).toBe(true); + await personalFiles.shareDialog.shareToggle.click(); + + expect(personalFiles.confirmDialog.getDialogTitle('Remove this shared link')).toBeVisible(); + expect( + personalFiles.confirmDialog.getDialogContent('This link will be deleted and a new link will be created next time this file is shared') + ).toBeVisible(); + expect(personalFiles.confirmDialog.okButton).toBeEnabled(); + expect(personalFiles.confirmDialog.cancelButton).toBeEnabled(); + }); + + test('[C306996] Unshare a file', async ({ personalFiles, searchPage, nodesApiAction, page }) => { + await personalFiles.acaHeader.searchButton.click(); + await searchPage.searchInput.searchButton.click(); + await searchPage.searchOverlay.checkFilesAndFolders(); + await searchPage.searchOverlay.searchFor(file2); + + await personalFiles.dataTable.selectItem(file2); + await personalFiles.acaHeader.shareButton.click(); + const url = await personalFiles.shareDialog.getLinkUrl(); + await personalFiles.shareDialog.shareToggle.click(); + + await personalFiles.confirmDialog.okButton.click(); + + await page.goto(url); + await personalFiles.viewer.waitForViewerToOpen(); + expect(await personalFiles.viewer.fileTitleButtonLocator.innerText()).not.toEqual(file2); + expect(await nodesApiAction.isFileShared(file2Id)).toBe(false); + }); + + test('[C306997] Cancel the Unshare action', async ({ personalFiles, searchPage }) => { + await personalFiles.acaHeader.searchButton.click(); + await searchPage.searchInput.searchButton.click(); + await searchPage.searchOverlay.checkFilesAndFolders(); + await searchPage.searchOverlay.searchFor(file3); + + await personalFiles.dataTable.selectItem(file3); + await personalFiles.acaHeader.shareButton.click(); + + const urlBefore = await personalFiles.shareDialog.getLinkUrl(); + await personalFiles.shareDialog.shareToggle.click(); + await personalFiles.confirmDialog.cancelButton.click(); + expect(await personalFiles.shareDialog.isShareToggleChecked()).toBe(true); + + const urlAfter = await personalFiles.shareDialog.getLinkUrl(); + expect(urlBefore).toEqual(urlAfter); + }); + + test('[C306999] Unshare a file from the context menu', async ({ personalFiles, searchPage, nodesApiAction, page }) => { + await personalFiles.acaHeader.searchButton.click(); + await searchPage.searchInput.searchButton.click(); + await searchPage.searchOverlay.checkFilesAndFolders(); + await searchPage.searchOverlay.searchFor(file4); + + await personalFiles.dataTable.rightClickOnItem(file4); + await personalFiles.matMenu.clickMenuItem('Shared Link Settings'); + const url = await personalFiles.shareDialog.getLinkUrl(); + await personalFiles.shareDialog.shareToggle.click(); + + await personalFiles.confirmDialog.okButton.click(); + + await page.goto(url); + await personalFiles.viewer.waitForViewerToOpen(); + expect(personalFiles.viewer.fileTitleButtonLocator).not.toEqual(file4); + expect(await nodesApiAction.isFileShared(file4Id)).toBe(false); + }); + + test('[C306998] Consumer - on Search Results - file shared by other user', async ({ personalFiles, searchPage, nodesApiAction }) => { + await personalFiles.acaHeader.searchButton.click(); + await searchPage.searchInput.searchButton.click(); + await searchPage.searchOverlay.checkFilesAndFolders(); + await searchPage.searchOverlay.searchFor(fileSite1); + + await personalFiles.dataTable.selectItem(fileSite1); + await personalFiles.acaHeader.shareButton.click(); + + expect(await personalFiles.shareDialog.isShareToggleChecked()).toBe(true); + await personalFiles.shareDialog.shareToggle.click(); + await personalFiles.confirmDialog.okButton.click(); + expect(await nodesApiAction.isFileShared(fileSite2Id)).toBe(true); + }); + + test('[C307000] Consumer - on Search Results - file shared by the user', async ({ personalFiles, searchPage, nodesApiAction, page }) => { + await personalFiles.acaHeader.searchButton.click(); + await searchPage.searchInput.searchButton.click(); + await searchPage.searchOverlay.checkFilesAndFolders(); + await searchPage.searchOverlay.searchFor(fileSite2); + + await personalFiles.dataTable.selectItem(fileSite2); + await personalFiles.acaHeader.shareButton.click(); + expect(await personalFiles.shareDialog.isShareToggleChecked()).toBe(true); + + await personalFiles.shareDialog.shareToggle.click(); + await personalFiles.confirmDialog.okButton.click(); + await page.waitForTimeout(timeouts.tiny); + expect(await nodesApiAction.isFileShared(fileSite2Id)).toBe(false); + }); +}); diff --git a/e2e/playwright/share-action/tsconfig.e2e.adf.json b/e2e/playwright/share-action/tsconfig.e2e.adf.json new file mode 100644 index 0000000000..87cbcf775a --- /dev/null +++ b/e2e/playwright/share-action/tsconfig.e2e.adf.json @@ -0,0 +1,15 @@ +{ + "extends": "../../../tsconfig.adf.json", + "compilerOptions": { + "outDir": "../../out-tsc/e2e", + "baseUrl": "./", + "module": "commonjs", + "target": "es2017", + "types": ["jasmine", "jasminewd2", "node"], + "skipLibCheck": true, + "paths": { + "@alfresco/playwright-shared": ["../../../projects/aca-playwright-shared/src/index.ts"] + } + }, + "exclude": ["node_modules"] +} diff --git a/e2e/playwright/share-action/tsconfig.e2e.json b/e2e/playwright/share-action/tsconfig.e2e.json new file mode 100755 index 0000000000..c317985239 --- /dev/null +++ b/e2e/playwright/share-action/tsconfig.e2e.json @@ -0,0 +1,15 @@ +{ + "extends": "../../../tsconfig.json", + "compilerOptions": { + "outDir": "../../out-tsc/e2e", + "baseUrl": "./", + "module": "commonjs", + "target": "es2017", + "types": ["jasmine", "jasminewd2", "node", "@playwright/test"], + "skipLibCheck": true, + "paths": { + "@alfresco/playwright-shared": ["../../../projects/aca-playwright-shared/src/index.ts"] + } + }, + "exclude": ["node_modules"] +} diff --git a/e2e/protractor/suites/actions/share/unshare-file-search-results.test.ts b/e2e/protractor/suites/actions/share/unshare-file-search-results.test.ts deleted file mode 100755 index 074478049f..0000000000 --- a/e2e/protractor/suites/actions/share/unshare-file-search-results.test.ts +++ /dev/null @@ -1,266 +0,0 @@ -/*! - * 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 { browser } from 'protractor'; -import { - AdminActions, - UserActions, - LoginPage, - BrowsingPage, - SITE_VISIBILITY, - SITE_ROLES, - RepoClient, - ShareDialog, - ConfirmDialog, - Viewer, - Utils -} from '@alfresco/aca-testing-shared'; -import { BrowserActions, Logger } from '@alfresco/adf-testing'; - -describe('Unshare a file from Search Results', () => { - const username = `user-${Utils.random()}`; - - const parent = `parent-${Utils.random()}`; - let parentId: string; - - const searchRandom = Utils.random(); - let file1Id: string; - let file2Id: string; - let file3Id: string; - let file4Id: string; - const file1 = `search-file-${searchRandom}-1.txt`; - const file2 = `search-file-${searchRandom}-2.txt`; - const file3 = `search-file-${searchRandom}-3.txt`; - const file4 = `search-file-${searchRandom}-4.txt`; - - const sitePrivate = `site-private-${Utils.random()}`; - - let fileSite1Id: string; - let fileSite2Id: string; - const fileSite1 = `search-file-${searchRandom}-Site1.txt`; - const fileSite2 = `search-file-${searchRandom}-Site2.txt`; - - const apis = { - user: new RepoClient(username, username) - }; - - const loginPage = new LoginPage(); - const page = new BrowsingPage(); - const { dataTable, toolbar } = page; - const shareDialog = new ShareDialog(); - const confirmDialog = new ConfirmDialog(); - const contextMenu = dataTable.menu; - const viewer = new Viewer(); - const { searchInput } = page.header; - - const adminApiActions = new AdminActions(); - const userActions = new UserActions(); - - beforeAll(async () => { - try { - await adminApiActions.createUser({ username }); - - parentId = await apis.user.createFolder(parent); - - file1Id = await apis.user.createFile(file1, parentId); - file2Id = await apis.user.createFile(file2, parentId); - file3Id = await apis.user.createFile(file3, parentId); - file4Id = await apis.user.createFile(file4, parentId); - - await adminApiActions.login(); - await adminApiActions.sites.createSite(sitePrivate, SITE_VISIBILITY.PRIVATE); - const docLibId = await adminApiActions.sites.getDocLibId(sitePrivate); - - fileSite1Id = (await adminApiActions.nodes.createFile(fileSite1, docLibId)).entry.id; - fileSite2Id = (await adminApiActions.nodes.createFile(fileSite2, docLibId)).entry.id; - - await adminApiActions.sites.addSiteMember(sitePrivate, username, SITE_ROLES.SITE_CONSUMER.ROLE); - - await adminApiActions.shareNodes([fileSite1Id]); - await adminApiActions.shared.waitForFilesToBeShared([fileSite1Id]); - - await userActions.login(username, username); - await userActions.shareNodes([file1Id, file2Id, file3Id, file4Id, fileSite2Id]); - await apis.user.shared.waitForFilesToBeShared([file1Id, file2Id, file3Id, file4Id, fileSite2Id]); - - await apis.user.search.waitForNodes(`search-file-${searchRandom}`, { expect: 6 }); - - await loginPage.loginWith(username); - } catch (error) { - Logger.error(`----- beforeAll failed : ${error}`); - } - }); - - afterAll(async () => { - await userActions.deleteNodes([parentId]); - await adminApiActions.sites.deleteSite(sitePrivate); - }); - - afterEach(async () => { - await page.closeOpenDialogs(); - await page.clickPersonalFilesAndWait(); - }); - - it('[C306995] Unshare dialog UI', async () => { - await toolbar.clickSearchIconButton(); - await searchInput.clickSearchButton(); - await searchInput.checkFilesAndFolders(); - await searchInput.searchFor(file1); - await dataTable.waitForBody(); - - await dataTable.selectItem(file1); - await BrowserActions.click(toolbar.shareButton); - await shareDialog.waitForDialogToOpen(); - - expect(await shareDialog.isShareToggleChecked()).toBe(true, 'Share toggle not checked'); - await BrowserActions.click(shareDialog.shareToggle); - - expect(await confirmDialog.isDialogOpen()).toBe(true, 'Unshare dialog is not open'); - expect(await confirmDialog.getDialogTitle()).toContain('Remove this shared link'); - expect(await confirmDialog.getText()).toContain('This link will be deleted and a new link will be created next time this file is shared'); - expect(await confirmDialog.isRemoveEnabled()).toBe(true, 'REMOVE button is not enabled'); - expect(await confirmDialog.isCancelEnabled()).toBe(true, 'CANCEL button is not enabled'); - }); - - it('[C306996] Unshare a file', async () => { - await toolbar.clickSearchIconButton(); - await searchInput.clickSearchButton(); - await searchInput.checkFilesAndFolders(); - await searchInput.searchFor(file2); - await dataTable.waitForBody(); - - await dataTable.selectItem(file2); - await BrowserActions.click(toolbar.shareButton); - await shareDialog.waitForDialogToOpen(); - const url = await shareDialog.getLinkUrl(); - await BrowserActions.click(shareDialog.shareToggle); - await confirmDialog.waitForDialogToOpen(); - - await confirmDialog.removeButton.click(); - await confirmDialog.waitForDialogToClose(); - await shareDialog.waitForDialogToClose(); - expect(await shareDialog.isDialogOpen()).toBe(false, 'Share dialog open'); - expect(await apis.user.nodes.isFileShared(file2Id)).toBe(false, `${file2} is shared`); - - await browser.get(url); - await viewer.waitForViewerToOpen(); - expect(await viewer.getFileTitle()).not.toEqual(file2); - - await page.load(); - }); - - it('[C306997] Cancel the Unshare action', async () => { - await toolbar.clickSearchIconButton(); - await searchInput.clickSearchButton(); - await searchInput.checkFilesAndFolders(); - await searchInput.searchFor(file3); - await dataTable.waitForBody(); - - await dataTable.selectItem(file3); - await BrowserActions.click(toolbar.shareButton); - await shareDialog.waitForDialogToOpen(); - - const urlBefore = await shareDialog.getLinkUrl(); - await BrowserActions.click(shareDialog.shareToggle); - await confirmDialog.waitForDialogToOpen(); - - await confirmDialog.cancelButton.click(); - await confirmDialog.waitForDialogToClose(); - expect(await shareDialog.isDialogOpen()).toBe(true, 'Share dialog not open'); - expect(await shareDialog.isShareToggleChecked()).toBe(true, 'Share toggle is off'); - - const urlAfter = await shareDialog.getLinkUrl(); - expect(urlBefore).toEqual(urlAfter); - }); - - it('[C306999] Unshare a file from the context menu', async () => { - await toolbar.clickSearchIconButton(); - await searchInput.clickSearchButton(); - await searchInput.checkFilesAndFolders(); - await searchInput.searchFor(file4); - await dataTable.waitForBody(); - - await dataTable.rightClickOnItem(file4); - await contextMenu.waitForMenuToOpen(); - await contextMenu.shareEditAction.click(); - await shareDialog.waitForDialogToOpen(); - const url = await shareDialog.getLinkUrl(); - await BrowserActions.click(shareDialog.shareToggle); - await confirmDialog.waitForDialogToOpen(); - - await confirmDialog.removeButton.click(); - await confirmDialog.waitForDialogToClose(); - await shareDialog.waitForDialogToClose(); - expect(await shareDialog.isDialogOpen()).toBe(false, 'Share dialog open'); - expect(await apis.user.nodes.isFileShared(file4Id)).toBe(false, `${file4} is shared`); - - await browser.get(url); - await viewer.waitForViewerToOpen(); - expect(await viewer.getFileTitle()).not.toEqual(file4); - - await page.load(); - }); - - it('[C306998] Consumer - on Search Results - file shared by other user', async () => { - await toolbar.clickSearchIconButton(); - await searchInput.clickSearchButton(); - await searchInput.checkFilesAndFolders(); - await searchInput.searchFor(fileSite1); - await dataTable.waitForBody(); - await dataTable.selectItem(fileSite1); - await BrowserActions.click(toolbar.shareButton); - await shareDialog.waitForDialogToOpen(); - - expect(await shareDialog.isShareToggleDisabled()).toBe(false, 'Share toggle disabled for consumer'); - - await BrowserActions.click(shareDialog.shareToggle); - await confirmDialog.waitForDialogToOpen(); - await confirmDialog.removeButton.click(); - - const msg = await page.getSnackBarMessage(); - expect(msg).toContain(`You don't have permission to unshare this file`); - }); - - it('[C307000] Consumer - on Search Results - file shared by the user', async () => { - await toolbar.clickSearchIconButton(); - await searchInput.clickSearchButton(); - await searchInput.checkFilesAndFolders(); - await searchInput.searchFor(fileSite2); - await dataTable.waitForBody(); - await dataTable.selectItem(fileSite2); - await BrowserActions.click(toolbar.shareButton); - await shareDialog.waitForDialogToOpen(); - - expect(await shareDialog.isShareToggleDisabled()).toBe(false, 'Share toggle disabled for consumer'); - - await BrowserActions.click(shareDialog.shareToggle); - await confirmDialog.waitForDialogToOpen(); - await confirmDialog.removeButton.click(); - await confirmDialog.waitForDialogToClose(); - await shareDialog.waitForDialogToClose(); - - expect(await shareDialog.isDialogOpen()).toBe(false, 'Share dialog open'); - expect(await apis.user.nodes.isFileShared(fileSite2Id)).toBe(false, `${fileSite2} is shared`); - }); -}); diff --git a/projects/aca-playwright-shared/src/page-objects/components/dataTable/data-table.component.ts b/projects/aca-playwright-shared/src/page-objects/components/dataTable/data-table.component.ts index 65d6b67b67..4e51c8a417 100644 --- a/projects/aca-playwright-shared/src/page-objects/components/dataTable/data-table.component.ts +++ b/projects/aca-playwright-shared/src/page-objects/components/dataTable/data-table.component.ts @@ -315,4 +315,8 @@ export class DataTableComponent extends BaseComponent { async getRowsCount(): Promise { return this.getRowLocator.count(); } + + async rightClickOnItem(itemName: string): Promise { + await this.getCellByColumnNameAndRowItem(itemName, 'Name').click({ button: 'right' }); + } } diff --git a/projects/aca-playwright-shared/src/page-objects/pages/personal-files.page.ts b/projects/aca-playwright-shared/src/page-objects/pages/personal-files.page.ts index d9f43da3f8..3c119c73f6 100644 --- a/projects/aca-playwright-shared/src/page-objects/pages/personal-files.page.ts +++ b/projects/aca-playwright-shared/src/page-objects/pages/personal-files.page.ts @@ -38,7 +38,8 @@ import { SidenavComponent, PaginationComponent, ErrorComponent, - ShareDialogComponent + ShareDialogComponent, + AdfConfirmDialogComponent } from '../components'; export class PersonalFilesPage extends BasePage { @@ -62,6 +63,7 @@ export class PersonalFilesPage extends BasePage { public pagination = new PaginationComponent(this.page); public errorDialog = new ErrorComponent(this.page); public shareDialog= new ShareDialogComponent(this.page); + public confirmDialog = new AdfConfirmDialogComponent(this.page); async selectCreateFolder(): Promise { await this.acaHeader.createButton.click();