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();